From c2bf7f7a91becbf63c71a3c9ce5630a3f371fce4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E6=AD=A3=E5=9B=BD?= <438926402@qq.com> Date: Mon, 17 Nov 2025 10:08:33 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A8=BB=E8=8A=B1=E9=A6=99=E4=BB=93=E5=BA=93?= =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../WEB-INF/cfgHome/chushihua/pluginCfg.xml | 6 + .../chushihua/spring/spring-quartz.xml | 5 + .../cfgHome/chushihua/spring/spring.xml | 5 + .../cfgHome/daohuaxiang/jyncfile.properties | 28 + .../WEB-INF/cfgHome/daohuaxiang/pluginCfg.xml | 6 + .../daohuaxiang/spring/spring-node.xml | 6 + .../daohuaxiang/spring/spring-service.xml | 6 + .../cfgHome/daohuaxiang/spring/spring.xml | 5 + .../WEB-INF/cfgHome/qrCodeForm/pluginCfg.xml | 6 + .../spring/spring-qrCodeForm-controller.xml | 6 + .../spring/spring-qrCodeForm-manager.xml | 13 + .../spring/spring-qrCodeForm-plugin.xml | 8 + .../cfgHome/src_dhxbacklog/pluginCfg.xml | 6 + .../src_dhxbacklog/spring/spring-sso.xml | 6 + .../cfgHome/src_dhxbacklog/spring/spring.xml | 5 + .../cfgHome/src_dhxorganization/pluginCfg.xml | 6 + .../spring/spring-node.xml | 5 + .../src_dhxorganization/spring/spring.xml | 5 + .../cfgHome/src_dingding/dingding.properties | 11 + .../cfgHome/src_dingding/pluginCfg.xml | 6 + .../src_dingding/spring/spring-ctrl.xml | 8 + .../src_dingding/spring/spring-dao.xml | 7 + .../src_dingding/spring/spring-service.xml | 7 + .../src_dingding/spring/spring-task.xml | 7 + .../src_mainorganization/pluginCfg.xml | 6 + .../spring/spring-dao.xml | 6 + .../spring/spring-node.xml | 10 + .../spring/spring-service.xml | 6 + .../cfgHome/src_membermanage/pluginCfg.xml | 6 + .../spring/spring-membermanage.xml | 5 + .../src_membermanage/spring/spring-node.xml | 48 + .../pluginCfg.xml | 6 + .../spring/spring-dao.xml | 5 + .../spring/spring-quartz.xml | 5 + .../spring/spring.xml | 5 + seeyon/WEB-INF/cfgHome/src_qyba/pluginCfg.xml | 6 + .../cfgHome/src_qyba/spring/spring-dao.xml | 6 + .../cfgHome/src_qyba/spring/spring-node.xml | 8 + .../src_qyba/spring/spring-service.xml | 6 + .../cfgHome/src_qyba/spring/spring.xml | 5 + .../jsp/plugin/qrCodeForm/qrCodeFormIndex.jsp | 249 +++ .../cap4/form/utils/qrcodeform/index.js | 13 + .../cap4/form/utils/qrcodeform/index.js | 11 + .../chushihua/HsDataPluginApi.java | 51 + .../constants/HsDataSyncConstants.java | 31 + .../chushihua/quartz/HsDataSyncQuartz.java | 299 ++++ .../daohuaxiangSys/chushihua/vo/HsDataVo.java | 55 + .../daohuaxiangSys/jkts/TongYongPlugin.java | 41 + .../jkts/constants/DaohuaxiangConstants.java | 30 + .../jkts/node/NewTongYongNode.java | 73 + .../jkts/node/TongYongNode.java | 74 + .../jkts/service/NewTongYongService.java | 113 ++ .../jkts/service/TongYongService.java | 107 ++ .../daohuaxiangSys/jkts/util/A8FolderKit.java | 26 + .../daohuaxiangSys/jkts/util/BaseUtil.java | 110 ++ .../jkts/util/DBConnection.java | 49 + .../jkts/util/FanWeiNewUtil.java | 424 +++++ .../daohuaxiangSys/jkts/util/FanWeiUtil.java | 415 +++++ .../jkts/util/InterfaceListUtil.java | 346 ++++ .../daohuaxiangSys/jkts/util/JdbcUtil.java | 82 + .../daohuaxiangSys/jkts/util/PropKit.java | 137 ++ .../apps/qrCodeForm/QrCodeFormPluginApi.java | 45 + .../QrCodeFormPluginInitializer.java | 22 + .../apps/qrCodeForm/constant/Constants.java | 13 + .../constant/QrCodeFormConstants.java | 32 + .../qrCodeForm/constant/SupportTypeEnum.java | 31 + .../controller/QrCodeFormController.java | 109 ++ .../qrCodeForm/manager/QrCodeFormManager.java | 18 + .../manager/QrCodeFormManagerImpl.java | 155 ++ .../qrCodeForm/sso/WechatQRHandShake.java | 140 ++ .../qrCodeForm/util/InitQrCodeFormUitl.java | 111 ++ .../apps/qrCodeForm/util/LoginUtil.java | 71 + .../src_dhxbacklog/DhxBacklogPluginApi.java | 47 + .../constanst/DhxFlowConstants.java | 34 + .../sso/DhxFlowWaitHandlesso.java | 71 + .../apps/src_dhxbacklog/util/GetToken.java | 23 + .../src_dhxbacklog/util/HttpRequestUtils.java | 241 +++ .../src_dhxorganization/DhxPluginApi.java | 46 + .../archive/ArchiveCommonNode.java | 106 ++ .../archive/node/UpdateHireFilesNode.java | 22 + .../constants/DhxConstants.java | 29 + .../member/MemberCommonNode.java | 107 ++ .../util/Cap4ReturnUtil.java | 17 + .../src_dhxorganization/util/DhxHttpUtil.java | 49 + .../src_dhxorganization/util/ParamUtil.java | 10 + .../src_dhxorganization/vo/DhxResponse.java | 76 + .../ctrl/StartTaskController.java | 138 ++ .../src_dingding/dao/DingdingDaoImpl.java | 825 +++++++++ .../apps/src_dingding/dao/IDingdingDao.java | 209 +++ .../apps/src_dingding/kit/A8FolderKit.java | 26 + .../seeyon/apps/src_dingding/kit/PropKit.java | 70 + .../src_dingding/service/DingdingService.java | 1323 ++++++++++++++ .../apps/src_dingding/task/DingdingTask.java | 120 ++ .../apps/src_dingding/util/BaseUtil.java | 110 ++ .../apps/src_dingding/util/DingtalkUtil.java | 126 ++ .../src_dingding/util/FormExportUtil.java | 111 ++ .../apps/src_dingding/util/JdbcUtil.java | 93 + .../apps/src_dingding/util/TimeUtil.java | 61 + .../apps/src_dingding/vo/AttendanceVo.java | 43 + .../vo/CheckOnWorkAttendanceVo.java | 142 ++ .../MainorganizationPluginApi.java | 42 + .../bo/ReceiveOrgMemberResponse.java | 56 + .../constants/MainorganizationConstants.java | 39 + .../src_mainorganization/dao/ISrcEnumDao.java | 9 + .../dao/ISrcMemberDao.java | 7 + .../dao/impl/SrcEnumDaoImpl.java | 74 + .../dao/impl/SrcMemberDaoImpl.java | 41 + .../node/DepartmentAddNode.java | 177 ++ .../node/DepartmentCloseNode.java | 158 ++ .../node/LevelAddNode.java | 154 ++ .../node/LevelCloseNode.java | 136 ++ .../node/PostAddNode.java | 147 ++ .../node/PostCloseNode.java | 136 ++ .../service/IReceiveOrgMemberService.java | 27 + .../impl/ReceiveOrgMemberServiceImpl.java | 620 +++++++ .../src_mainorganization/util/ProtUtil.java | 461 +++++ .../MemberManageCommonNode.java | 280 +++ .../MemberManagePluginApi.java | 42 + .../MemberOrganizationCommonNode.java | 153 ++ .../constants/MemberManageConstants.java | 38 + .../node/AccountOpeningNode.java | 29 + .../node/AccountOpeningOrganizationNode.java | 29 + .../node/MemberAccountClosureNode.java | 219 +++ .../MemberAccountClosureOrganizationNode.java | 147 ++ .../node/MemberAccountClosureTalentsNode.java | 205 +++ .../node/MemberAnewEngageNode.java | 29 + .../MemberAnewEngageOrganizationNode.java | 29 + .../node/MemberBasicsNode.java | 29 + .../node/MemberBasicsOrganizationNode.java | 21 + .../node/MemberContractNode.java | 288 +++ .../node/MemberDecruitmentNode.java | 29 + .../MemberDecruitmentOrganizationNode.java | 21 + .../src_membermanage/node/MemberDieNode.java | 176 ++ .../node/MemberDimissionNode.java | 29 + .../node/MemberDimissionOrganizationNode.java | 21 + .../node/MemberDimissionTalentsNode.java | 29 + .../node/MemberEducationNode.java | 29 + .../node/MemberEmployNode.java | 203 +++ .../node/MemberEntryNode.java | 29 + .../node/MemberEntryOrganizationNode.java | 22 + .../node/MemberEntryTalentsNode.java | 29 + .../node/MemberFamilyNode.java | 29 + .../node/MemberHonorNode.java | 29 + .../node/MemberInterviewResultNode.java | 232 +++ .../src_membermanage/node/MemberMoveNode.java | 29 + .../node/MemberMoveOrganizationNode.java | 22 + .../node/MemberPerformanceNode.java | 261 +++ .../node/MemberRegularizationExtendNode.java | 26 + .../node/MemberRegularizationNode.java | 26 + .../node/MemberRetirementNode.java | 180 ++ .../MemberRetirementOrganizationNode.java | 166 ++ .../node/MemberRewardPunishmentNode.java | 29 + .../node/MemberSystemAccountClosureNode.java | 29 + ...rSystemAccountClosureOrganizationNode.java | 29 + ...MemberSystemAccountClosureTalentsNode.java | 29 + .../node/MemberTaskFinishNode.java | 204 +++ .../node/MemberTryOutSummarizeNode.java | 29 + .../src_membermanage/node/MemberWorkNode.java | 29 + .../node/MemberYearTaskNode.java | 211 +++ .../node/MembersMoveNode.java | 207 +++ .../node/MembersMoveOrganizationNode.java | 143 ++ .../node/RegistrationofApplicantsNode.java | 29 + .../node/TrainingRecordNode.java | 208 +++ .../util/DataProcessingUtil.java | 53 + .../util/OrganizationParamUtil.java | 168 ++ .../apps/src_membermanage/util/ParamUtil.java | 437 +++++ .../apps/src_membermanage/util/ProtUtil.java | 463 +++++ .../vo/MemberManagerResponse.java | 76 + .../vo/MemberOrganizationResponse.java | 76 + .../OrganizationInitializationPluginApi.java | 47 + .../OrganizationInitializationConstants.java | 36 + .../dao/IOrganizationInitializationDao.java | 36 + .../OrganizationInitializationDaoImpl.java | 393 ++++ .../OrganizationInitializationQuartz.java | 1593 +++++++++++++++++ .../util/FormExportUtil.java | 113 ++ .../util/InterfaceListUtil.java | 467 +++++ .../util/ParamUtil.java | 80 + .../util/ProtUtil.java | 86 + .../seeyon/apps/src_qyba/FVCommonNode.java | 167 ++ .../apps/src_qyba/FVTongyongbeianNode.java | 135 ++ .../seeyon/apps/src_qyba/QYBAPluginApi.java | 40 + .../apps/src_qyba/constants/FVConstants.java | 43 + .../constants/MarketingCompanyConstants.java | 75 + .../apps/src_qyba/dao/ISrcBeianDao.java | 9 + .../apps/src_qyba/dao/impl/SrcBeianDao.java | 42 + .../manage/MultipleViewsPrintManager.java | 16 + .../impl/MultipleViewsPrintManagerImpl.java | 268 +++ .../src_qyba/node/FVNewStateReturnNode.java | 30 + .../apps/src_qyba/node/FVNewZhengceNode.java | 30 + .../src_qyba/node/FVOldStateReturnNode.java | 30 + .../apps/src_qyba/node/FVOldZhengceNode.java | 30 + .../apps/src_qyba/service/FVService.java | 294 +++ .../src_qyba/service/FVTongyongService.java | 121 ++ .../apps/src_qyba/util/ArchiveDocUtils.java | 76 + .../seeyon/apps/src_qyba/util/FVHttpUtil.java | 57 + .../seeyon/apps/src_qyba/util/FanWeiUtil.java | 300 ++++ .../seeyon/apps/src_qyba/vo/FVResponse.java | 72 + .../SaveAndUpdateMemberMainResource.java | 83 + ...TemporaryBeianSynchronizationResource.java | 159 ++ src/needless_check_login.xml | 322 ++++ src/needless_check_login_recheck.xml | 426 +++++ 201 files changed, 21640 insertions(+) create mode 100644 seeyon/WEB-INF/cfgHome/chushihua/pluginCfg.xml create mode 100644 seeyon/WEB-INF/cfgHome/chushihua/spring/spring-quartz.xml create mode 100644 seeyon/WEB-INF/cfgHome/chushihua/spring/spring.xml create mode 100644 seeyon/WEB-INF/cfgHome/daohuaxiang/jyncfile.properties create mode 100644 seeyon/WEB-INF/cfgHome/daohuaxiang/pluginCfg.xml create mode 100644 seeyon/WEB-INF/cfgHome/daohuaxiang/spring/spring-node.xml create mode 100644 seeyon/WEB-INF/cfgHome/daohuaxiang/spring/spring-service.xml create mode 100644 seeyon/WEB-INF/cfgHome/daohuaxiang/spring/spring.xml create mode 100644 seeyon/WEB-INF/cfgHome/qrCodeForm/pluginCfg.xml create mode 100644 seeyon/WEB-INF/cfgHome/qrCodeForm/spring/spring-qrCodeForm-controller.xml create mode 100644 seeyon/WEB-INF/cfgHome/qrCodeForm/spring/spring-qrCodeForm-manager.xml create mode 100644 seeyon/WEB-INF/cfgHome/qrCodeForm/spring/spring-qrCodeForm-plugin.xml create mode 100644 seeyon/WEB-INF/cfgHome/src_dhxbacklog/pluginCfg.xml create mode 100644 seeyon/WEB-INF/cfgHome/src_dhxbacklog/spring/spring-sso.xml create mode 100644 seeyon/WEB-INF/cfgHome/src_dhxbacklog/spring/spring.xml create mode 100644 seeyon/WEB-INF/cfgHome/src_dhxorganization/pluginCfg.xml create mode 100644 seeyon/WEB-INF/cfgHome/src_dhxorganization/spring/spring-node.xml create mode 100644 seeyon/WEB-INF/cfgHome/src_dhxorganization/spring/spring.xml create mode 100644 seeyon/WEB-INF/cfgHome/src_dingding/dingding.properties create mode 100644 seeyon/WEB-INF/cfgHome/src_dingding/pluginCfg.xml create mode 100644 seeyon/WEB-INF/cfgHome/src_dingding/spring/spring-ctrl.xml create mode 100644 seeyon/WEB-INF/cfgHome/src_dingding/spring/spring-dao.xml create mode 100644 seeyon/WEB-INF/cfgHome/src_dingding/spring/spring-service.xml create mode 100644 seeyon/WEB-INF/cfgHome/src_dingding/spring/spring-task.xml create mode 100644 seeyon/WEB-INF/cfgHome/src_mainorganization/pluginCfg.xml create mode 100644 seeyon/WEB-INF/cfgHome/src_mainorganization/spring/spring-dao.xml create mode 100644 seeyon/WEB-INF/cfgHome/src_mainorganization/spring/spring-node.xml create mode 100644 seeyon/WEB-INF/cfgHome/src_mainorganization/spring/spring-service.xml create mode 100644 seeyon/WEB-INF/cfgHome/src_membermanage/pluginCfg.xml create mode 100644 seeyon/WEB-INF/cfgHome/src_membermanage/spring/spring-membermanage.xml create mode 100644 seeyon/WEB-INF/cfgHome/src_membermanage/spring/spring-node.xml create mode 100644 seeyon/WEB-INF/cfgHome/src_organizationInitialization/pluginCfg.xml create mode 100644 seeyon/WEB-INF/cfgHome/src_organizationInitialization/spring/spring-dao.xml create mode 100644 seeyon/WEB-INF/cfgHome/src_organizationInitialization/spring/spring-quartz.xml create mode 100644 seeyon/WEB-INF/cfgHome/src_organizationInitialization/spring/spring.xml create mode 100644 seeyon/WEB-INF/cfgHome/src_qyba/pluginCfg.xml create mode 100644 seeyon/WEB-INF/cfgHome/src_qyba/spring/spring-dao.xml create mode 100644 seeyon/WEB-INF/cfgHome/src_qyba/spring/spring-node.xml create mode 100644 seeyon/WEB-INF/cfgHome/src_qyba/spring/spring-service.xml create mode 100644 seeyon/WEB-INF/cfgHome/src_qyba/spring/spring.xml create mode 100644 seeyon/WEB-INF/jsp/plugin/qrCodeForm/qrCodeFormIndex.jsp create mode 100644 seeyon/common/capextend/cap4/form/utils/qrcodeform/index.js create mode 100644 seeyon/m3/apps/v5/capextend/cap4/form/utils/qrcodeform/index.js create mode 100644 src/com/seeyon/apps/daohuaxiangSys/chushihua/HsDataPluginApi.java create mode 100644 src/com/seeyon/apps/daohuaxiangSys/chushihua/constants/HsDataSyncConstants.java create mode 100644 src/com/seeyon/apps/daohuaxiangSys/chushihua/quartz/HsDataSyncQuartz.java create mode 100644 src/com/seeyon/apps/daohuaxiangSys/chushihua/vo/HsDataVo.java create mode 100644 src/com/seeyon/apps/daohuaxiangSys/jkts/TongYongPlugin.java create mode 100644 src/com/seeyon/apps/daohuaxiangSys/jkts/constants/DaohuaxiangConstants.java create mode 100644 src/com/seeyon/apps/daohuaxiangSys/jkts/node/NewTongYongNode.java create mode 100644 src/com/seeyon/apps/daohuaxiangSys/jkts/node/TongYongNode.java create mode 100644 src/com/seeyon/apps/daohuaxiangSys/jkts/service/NewTongYongService.java create mode 100644 src/com/seeyon/apps/daohuaxiangSys/jkts/service/TongYongService.java create mode 100644 src/com/seeyon/apps/daohuaxiangSys/jkts/util/A8FolderKit.java create mode 100644 src/com/seeyon/apps/daohuaxiangSys/jkts/util/BaseUtil.java create mode 100644 src/com/seeyon/apps/daohuaxiangSys/jkts/util/DBConnection.java create mode 100644 src/com/seeyon/apps/daohuaxiangSys/jkts/util/FanWeiNewUtil.java create mode 100644 src/com/seeyon/apps/daohuaxiangSys/jkts/util/FanWeiUtil.java create mode 100644 src/com/seeyon/apps/daohuaxiangSys/jkts/util/InterfaceListUtil.java create mode 100644 src/com/seeyon/apps/daohuaxiangSys/jkts/util/JdbcUtil.java create mode 100644 src/com/seeyon/apps/daohuaxiangSys/jkts/util/PropKit.java create mode 100644 src/com/seeyon/apps/qrCodeForm/QrCodeFormPluginApi.java create mode 100644 src/com/seeyon/apps/qrCodeForm/QrCodeFormPluginInitializer.java create mode 100644 src/com/seeyon/apps/qrCodeForm/constant/Constants.java create mode 100644 src/com/seeyon/apps/qrCodeForm/constant/QrCodeFormConstants.java create mode 100644 src/com/seeyon/apps/qrCodeForm/constant/SupportTypeEnum.java create mode 100644 src/com/seeyon/apps/qrCodeForm/controller/QrCodeFormController.java create mode 100644 src/com/seeyon/apps/qrCodeForm/manager/QrCodeFormManager.java create mode 100644 src/com/seeyon/apps/qrCodeForm/manager/QrCodeFormManagerImpl.java create mode 100644 src/com/seeyon/apps/qrCodeForm/sso/WechatQRHandShake.java create mode 100644 src/com/seeyon/apps/qrCodeForm/util/InitQrCodeFormUitl.java create mode 100644 src/com/seeyon/apps/qrCodeForm/util/LoginUtil.java create mode 100644 src/com/seeyon/apps/src_dhxbacklog/DhxBacklogPluginApi.java create mode 100644 src/com/seeyon/apps/src_dhxbacklog/constanst/DhxFlowConstants.java create mode 100644 src/com/seeyon/apps/src_dhxbacklog/sso/DhxFlowWaitHandlesso.java create mode 100644 src/com/seeyon/apps/src_dhxbacklog/util/GetToken.java create mode 100644 src/com/seeyon/apps/src_dhxbacklog/util/HttpRequestUtils.java create mode 100644 src/com/seeyon/apps/src_dhxorganization/DhxPluginApi.java create mode 100644 src/com/seeyon/apps/src_dhxorganization/archive/ArchiveCommonNode.java create mode 100644 src/com/seeyon/apps/src_dhxorganization/archive/node/UpdateHireFilesNode.java create mode 100644 src/com/seeyon/apps/src_dhxorganization/constants/DhxConstants.java create mode 100644 src/com/seeyon/apps/src_dhxorganization/member/MemberCommonNode.java create mode 100644 src/com/seeyon/apps/src_dhxorganization/util/Cap4ReturnUtil.java create mode 100644 src/com/seeyon/apps/src_dhxorganization/util/DhxHttpUtil.java create mode 100644 src/com/seeyon/apps/src_dhxorganization/util/ParamUtil.java create mode 100644 src/com/seeyon/apps/src_dhxorganization/vo/DhxResponse.java create mode 100644 src/com/seeyon/apps/src_dingding/ctrl/StartTaskController.java create mode 100644 src/com/seeyon/apps/src_dingding/dao/DingdingDaoImpl.java create mode 100644 src/com/seeyon/apps/src_dingding/dao/IDingdingDao.java create mode 100644 src/com/seeyon/apps/src_dingding/kit/A8FolderKit.java create mode 100644 src/com/seeyon/apps/src_dingding/kit/PropKit.java create mode 100644 src/com/seeyon/apps/src_dingding/service/DingdingService.java create mode 100644 src/com/seeyon/apps/src_dingding/task/DingdingTask.java create mode 100644 src/com/seeyon/apps/src_dingding/util/BaseUtil.java create mode 100644 src/com/seeyon/apps/src_dingding/util/DingtalkUtil.java create mode 100644 src/com/seeyon/apps/src_dingding/util/FormExportUtil.java create mode 100644 src/com/seeyon/apps/src_dingding/util/JdbcUtil.java create mode 100644 src/com/seeyon/apps/src_dingding/util/TimeUtil.java create mode 100644 src/com/seeyon/apps/src_dingding/vo/AttendanceVo.java create mode 100644 src/com/seeyon/apps/src_dingding/vo/CheckOnWorkAttendanceVo.java create mode 100644 src/com/seeyon/apps/src_mainorganization/MainorganizationPluginApi.java create mode 100644 src/com/seeyon/apps/src_mainorganization/bo/ReceiveOrgMemberResponse.java create mode 100644 src/com/seeyon/apps/src_mainorganization/constants/MainorganizationConstants.java create mode 100644 src/com/seeyon/apps/src_mainorganization/dao/ISrcEnumDao.java create mode 100644 src/com/seeyon/apps/src_mainorganization/dao/ISrcMemberDao.java create mode 100644 src/com/seeyon/apps/src_mainorganization/dao/impl/SrcEnumDaoImpl.java create mode 100644 src/com/seeyon/apps/src_mainorganization/dao/impl/SrcMemberDaoImpl.java create mode 100644 src/com/seeyon/apps/src_mainorganization/node/DepartmentAddNode.java create mode 100644 src/com/seeyon/apps/src_mainorganization/node/DepartmentCloseNode.java create mode 100644 src/com/seeyon/apps/src_mainorganization/node/LevelAddNode.java create mode 100644 src/com/seeyon/apps/src_mainorganization/node/LevelCloseNode.java create mode 100644 src/com/seeyon/apps/src_mainorganization/node/PostAddNode.java create mode 100644 src/com/seeyon/apps/src_mainorganization/node/PostCloseNode.java create mode 100644 src/com/seeyon/apps/src_mainorganization/service/IReceiveOrgMemberService.java create mode 100644 src/com/seeyon/apps/src_mainorganization/service/impl/ReceiveOrgMemberServiceImpl.java create mode 100644 src/com/seeyon/apps/src_mainorganization/util/ProtUtil.java create mode 100644 src/com/seeyon/apps/src_membermanage/MemberManageCommonNode.java create mode 100644 src/com/seeyon/apps/src_membermanage/MemberManagePluginApi.java create mode 100644 src/com/seeyon/apps/src_membermanage/MemberOrganizationCommonNode.java create mode 100644 src/com/seeyon/apps/src_membermanage/constants/MemberManageConstants.java create mode 100644 src/com/seeyon/apps/src_membermanage/node/AccountOpeningNode.java create mode 100644 src/com/seeyon/apps/src_membermanage/node/AccountOpeningOrganizationNode.java create mode 100644 src/com/seeyon/apps/src_membermanage/node/MemberAccountClosureNode.java create mode 100644 src/com/seeyon/apps/src_membermanage/node/MemberAccountClosureOrganizationNode.java create mode 100644 src/com/seeyon/apps/src_membermanage/node/MemberAccountClosureTalentsNode.java create mode 100644 src/com/seeyon/apps/src_membermanage/node/MemberAnewEngageNode.java create mode 100644 src/com/seeyon/apps/src_membermanage/node/MemberAnewEngageOrganizationNode.java create mode 100644 src/com/seeyon/apps/src_membermanage/node/MemberBasicsNode.java create mode 100644 src/com/seeyon/apps/src_membermanage/node/MemberBasicsOrganizationNode.java create mode 100644 src/com/seeyon/apps/src_membermanage/node/MemberContractNode.java create mode 100644 src/com/seeyon/apps/src_membermanage/node/MemberDecruitmentNode.java create mode 100644 src/com/seeyon/apps/src_membermanage/node/MemberDecruitmentOrganizationNode.java create mode 100644 src/com/seeyon/apps/src_membermanage/node/MemberDieNode.java create mode 100644 src/com/seeyon/apps/src_membermanage/node/MemberDimissionNode.java create mode 100644 src/com/seeyon/apps/src_membermanage/node/MemberDimissionOrganizationNode.java create mode 100644 src/com/seeyon/apps/src_membermanage/node/MemberDimissionTalentsNode.java create mode 100644 src/com/seeyon/apps/src_membermanage/node/MemberEducationNode.java create mode 100644 src/com/seeyon/apps/src_membermanage/node/MemberEmployNode.java create mode 100644 src/com/seeyon/apps/src_membermanage/node/MemberEntryNode.java create mode 100644 src/com/seeyon/apps/src_membermanage/node/MemberEntryOrganizationNode.java create mode 100644 src/com/seeyon/apps/src_membermanage/node/MemberEntryTalentsNode.java create mode 100644 src/com/seeyon/apps/src_membermanage/node/MemberFamilyNode.java create mode 100644 src/com/seeyon/apps/src_membermanage/node/MemberHonorNode.java create mode 100644 src/com/seeyon/apps/src_membermanage/node/MemberInterviewResultNode.java create mode 100644 src/com/seeyon/apps/src_membermanage/node/MemberMoveNode.java create mode 100644 src/com/seeyon/apps/src_membermanage/node/MemberMoveOrganizationNode.java create mode 100644 src/com/seeyon/apps/src_membermanage/node/MemberPerformanceNode.java create mode 100644 src/com/seeyon/apps/src_membermanage/node/MemberRegularizationExtendNode.java create mode 100644 src/com/seeyon/apps/src_membermanage/node/MemberRegularizationNode.java create mode 100644 src/com/seeyon/apps/src_membermanage/node/MemberRetirementNode.java create mode 100644 src/com/seeyon/apps/src_membermanage/node/MemberRetirementOrganizationNode.java create mode 100644 src/com/seeyon/apps/src_membermanage/node/MemberRewardPunishmentNode.java create mode 100644 src/com/seeyon/apps/src_membermanage/node/MemberSystemAccountClosureNode.java create mode 100644 src/com/seeyon/apps/src_membermanage/node/MemberSystemAccountClosureOrganizationNode.java create mode 100644 src/com/seeyon/apps/src_membermanage/node/MemberSystemAccountClosureTalentsNode.java create mode 100644 src/com/seeyon/apps/src_membermanage/node/MemberTaskFinishNode.java create mode 100644 src/com/seeyon/apps/src_membermanage/node/MemberTryOutSummarizeNode.java create mode 100644 src/com/seeyon/apps/src_membermanage/node/MemberWorkNode.java create mode 100644 src/com/seeyon/apps/src_membermanage/node/MemberYearTaskNode.java create mode 100644 src/com/seeyon/apps/src_membermanage/node/MembersMoveNode.java create mode 100644 src/com/seeyon/apps/src_membermanage/node/MembersMoveOrganizationNode.java create mode 100644 src/com/seeyon/apps/src_membermanage/node/RegistrationofApplicantsNode.java create mode 100644 src/com/seeyon/apps/src_membermanage/node/TrainingRecordNode.java create mode 100644 src/com/seeyon/apps/src_membermanage/util/DataProcessingUtil.java create mode 100644 src/com/seeyon/apps/src_membermanage/util/OrganizationParamUtil.java create mode 100644 src/com/seeyon/apps/src_membermanage/util/ParamUtil.java create mode 100644 src/com/seeyon/apps/src_membermanage/util/ProtUtil.java create mode 100644 src/com/seeyon/apps/src_membermanage/vo/MemberManagerResponse.java create mode 100644 src/com/seeyon/apps/src_membermanage/vo/MemberOrganizationResponse.java create mode 100644 src/com/seeyon/apps/src_organizationInitialization/OrganizationInitializationPluginApi.java create mode 100644 src/com/seeyon/apps/src_organizationInitialization/constant/OrganizationInitializationConstants.java create mode 100644 src/com/seeyon/apps/src_organizationInitialization/dao/IOrganizationInitializationDao.java create mode 100644 src/com/seeyon/apps/src_organizationInitialization/dao/impl/OrganizationInitializationDaoImpl.java create mode 100644 src/com/seeyon/apps/src_organizationInitialization/quartz/OrganizationInitializationQuartz.java create mode 100644 src/com/seeyon/apps/src_organizationInitialization/util/FormExportUtil.java create mode 100644 src/com/seeyon/apps/src_organizationInitialization/util/InterfaceListUtil.java create mode 100644 src/com/seeyon/apps/src_organizationInitialization/util/ParamUtil.java create mode 100644 src/com/seeyon/apps/src_organizationInitialization/util/ProtUtil.java create mode 100644 src/com/seeyon/apps/src_qyba/FVCommonNode.java create mode 100644 src/com/seeyon/apps/src_qyba/FVTongyongbeianNode.java create mode 100644 src/com/seeyon/apps/src_qyba/QYBAPluginApi.java create mode 100644 src/com/seeyon/apps/src_qyba/constants/FVConstants.java create mode 100644 src/com/seeyon/apps/src_qyba/constants/MarketingCompanyConstants.java create mode 100644 src/com/seeyon/apps/src_qyba/dao/ISrcBeianDao.java create mode 100644 src/com/seeyon/apps/src_qyba/dao/impl/SrcBeianDao.java create mode 100644 src/com/seeyon/apps/src_qyba/manage/MultipleViewsPrintManager.java create mode 100644 src/com/seeyon/apps/src_qyba/manage/impl/MultipleViewsPrintManagerImpl.java create mode 100644 src/com/seeyon/apps/src_qyba/node/FVNewStateReturnNode.java create mode 100644 src/com/seeyon/apps/src_qyba/node/FVNewZhengceNode.java create mode 100644 src/com/seeyon/apps/src_qyba/node/FVOldStateReturnNode.java create mode 100644 src/com/seeyon/apps/src_qyba/node/FVOldZhengceNode.java create mode 100644 src/com/seeyon/apps/src_qyba/service/FVService.java create mode 100644 src/com/seeyon/apps/src_qyba/service/FVTongyongService.java create mode 100644 src/com/seeyon/apps/src_qyba/util/ArchiveDocUtils.java create mode 100644 src/com/seeyon/apps/src_qyba/util/FVHttpUtil.java create mode 100644 src/com/seeyon/apps/src_qyba/util/FanWeiUtil.java create mode 100644 src/com/seeyon/apps/src_qyba/vo/FVResponse.java create mode 100644 src/com/seeyon/ctp/rest/resources/SaveAndUpdateMemberMainResource.java create mode 100644 src/com/seeyon/ctp/rest/resources/TemporaryBeianSynchronizationResource.java create mode 100644 src/needless_check_login.xml create mode 100644 src/needless_check_login_recheck.xml diff --git a/seeyon/WEB-INF/cfgHome/chushihua/pluginCfg.xml b/seeyon/WEB-INF/cfgHome/chushihua/pluginCfg.xml new file mode 100644 index 0000000..d17d194 --- /dev/null +++ b/seeyon/WEB-INF/cfgHome/chushihua/pluginCfg.xml @@ -0,0 +1,6 @@ + + + chushihua + 历史数据同步 + 20231208 + \ No newline at end of file diff --git a/seeyon/WEB-INF/cfgHome/chushihua/spring/spring-quartz.xml b/seeyon/WEB-INF/cfgHome/chushihua/spring/spring-quartz.xml new file mode 100644 index 0000000..0a615e2 --- /dev/null +++ b/seeyon/WEB-INF/cfgHome/chushihua/spring/spring-quartz.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/seeyon/WEB-INF/cfgHome/chushihua/spring/spring.xml b/seeyon/WEB-INF/cfgHome/chushihua/spring/spring.xml new file mode 100644 index 0000000..071b955 --- /dev/null +++ b/seeyon/WEB-INF/cfgHome/chushihua/spring/spring.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/seeyon/WEB-INF/cfgHome/daohuaxiang/jyncfile.properties b/seeyon/WEB-INF/cfgHome/daohuaxiang/jyncfile.properties new file mode 100644 index 0000000..2907821 --- /dev/null +++ b/seeyon/WEB-INF/cfgHome/daohuaxiang/jyncfile.properties @@ -0,0 +1,28 @@ +profile=prod +prod.dowUrl=https://oa.dhx.com.cn/seeyon/rest/attachment/file +prod.profile=prod +prod.jyncFile=https://oa.dhx.com.cn/seeyon/dhxfile +prod.address=https://crm.dhx9.com +prod.newAddress=http://10.0.6.15:88 +prod.loginid=yc +prod.pwd=yc123456 +prod.tongyongApi=/api/workflow/paService/doCreateRequest +prod.appid=oa +prod.workflowId=8521 +prod.newWorkflowId=2026 +prod.spk=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAymEn8vp0E8pg6op/WXJ4A67jHAYeUBtut8vJgk09t4Bw3kheWnHUjVHDBEZ8iC/iX9YyBzL76WZR+lpDqdFh2iKYk+yctHKc4dt9r0vw6HYMUWDrYmctdKJtdOGpWxz4apBr7Rc/2A3FDxwsiXzPqpG/GY+/1IHp7E3jEX0nxzuJn/YUm/SoSgfMB4NCHF9n3rrIsp4jJ5SOSwLr68nlwT3djF2f8vQcqRxmT0J7X2xKehlpeiubszQj5TeFcA+onkOBKkoKc+83G8Gg8J1IWZLsd50cjawrmg8lxl+UBEsPZHEh0AhWDHKLRG+9jyZJ94hoWaQRSgwEIdGyShNMnwIDAQAB +prod.newSpk=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvcOew5NM41jK7CFBnirP4Zz0QIexYEweS+4LTuQOVY+BqHu2EMxlPYRsjtvzZj7Pm9SsiNiEIeGXZ3mkAMbNNqu7G7kGb10pJzpBBTE80cRCY0bHoD3PhD8cBiKjpsRXJ+1mPdwD4fGEr0IcG6bKhBM3xsCmc4JiEvsv/+nPm9G7NQgoPGEKHkZk0IgyaBF5m6F2NKah92klxuz+vWCQoVsCpCjHN1sijQioWc6lRLgP7d6IZFEbOrLL7HdlOc8yKOAOZhURd78CqiVYBc1vP0pyC1/UW0Lq0f2MFpg/7Z18VwAf1vFUb+oiIdjFYMr5dgS+i784FaMUDzKUvndDWwIDAQAB +prod.paybillFileUrl= +prod.generalbillUrl= +prod.transformUrl= +prod.xcfzCancelUrl= +prod.sbfzCancelUrl= +prod.restname=beian +prod.restpassword=f1c4e761-d60b-47ff-a5ff-5953f2b9c9e0 +prod.oaTokenUrl=https://oa.dhx.com.cn/seeyon/rest/token +prod.loginName=test11 +prod.secret=b44da0ec-6ba5-4d6e-b3d7-e0571b3bcdd6 +prod.newSecret=6553bad7-51f0-4d56-af44-3d64a8ce9814 +prod.sql=select id,departmentid,lastname from hrmresource@ecology where lastname = ? +#prod.sql=select id,departmentid,lastname from hrmresource@ecology_new where lastname = ? +prod.dataSql=select id, FORM_RECORDID, FORM_APPID , FORMID from col_summary cs where TEMPLETE_ID = ? and CAN_AUTOSTOPFLOW = 0 and STATE = 3 diff --git a/seeyon/WEB-INF/cfgHome/daohuaxiang/pluginCfg.xml b/seeyon/WEB-INF/cfgHome/daohuaxiang/pluginCfg.xml new file mode 100644 index 0000000..6c4be54 --- /dev/null +++ b/seeyon/WEB-INF/cfgHome/daohuaxiang/pluginCfg.xml @@ -0,0 +1,6 @@ + + + daohuaxiang + 稻花香 + 20231206 + \ No newline at end of file diff --git a/seeyon/WEB-INF/cfgHome/daohuaxiang/spring/spring-node.xml b/seeyon/WEB-INF/cfgHome/daohuaxiang/spring/spring-node.xml new file mode 100644 index 0000000..51b1faa --- /dev/null +++ b/seeyon/WEB-INF/cfgHome/daohuaxiang/spring/spring-node.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/seeyon/WEB-INF/cfgHome/daohuaxiang/spring/spring-service.xml b/seeyon/WEB-INF/cfgHome/daohuaxiang/spring/spring-service.xml new file mode 100644 index 0000000..db61c20 --- /dev/null +++ b/seeyon/WEB-INF/cfgHome/daohuaxiang/spring/spring-service.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/seeyon/WEB-INF/cfgHome/daohuaxiang/spring/spring.xml b/seeyon/WEB-INF/cfgHome/daohuaxiang/spring/spring.xml new file mode 100644 index 0000000..ab5a793 --- /dev/null +++ b/seeyon/WEB-INF/cfgHome/daohuaxiang/spring/spring.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/seeyon/WEB-INF/cfgHome/qrCodeForm/pluginCfg.xml b/seeyon/WEB-INF/cfgHome/qrCodeForm/pluginCfg.xml new file mode 100644 index 0000000..c12ee18 --- /dev/null +++ b/seeyon/WEB-INF/cfgHome/qrCodeForm/pluginCfg.xml @@ -0,0 +1,6 @@ + + + qrCodeForm + 二维码扫码填单 + 20220422 + diff --git a/seeyon/WEB-INF/cfgHome/qrCodeForm/spring/spring-qrCodeForm-controller.xml b/seeyon/WEB-INF/cfgHome/qrCodeForm/spring/spring-qrCodeForm-controller.xml new file mode 100644 index 0000000..93d89e1 --- /dev/null +++ b/seeyon/WEB-INF/cfgHome/qrCodeForm/spring/spring-qrCodeForm-controller.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/seeyon/WEB-INF/cfgHome/qrCodeForm/spring/spring-qrCodeForm-manager.xml b/seeyon/WEB-INF/cfgHome/qrCodeForm/spring/spring-qrCodeForm-manager.xml new file mode 100644 index 0000000..7d6233b --- /dev/null +++ b/seeyon/WEB-INF/cfgHome/qrCodeForm/spring/spring-qrCodeForm-manager.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/seeyon/WEB-INF/cfgHome/qrCodeForm/spring/spring-qrCodeForm-plugin.xml b/seeyon/WEB-INF/cfgHome/qrCodeForm/spring/spring-qrCodeForm-plugin.xml new file mode 100644 index 0000000..de1e69f --- /dev/null +++ b/seeyon/WEB-INF/cfgHome/qrCodeForm/spring/spring-qrCodeForm-plugin.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/seeyon/WEB-INF/cfgHome/src_dhxbacklog/pluginCfg.xml b/seeyon/WEB-INF/cfgHome/src_dhxbacklog/pluginCfg.xml new file mode 100644 index 0000000..88b0151 --- /dev/null +++ b/seeyon/WEB-INF/cfgHome/src_dhxbacklog/pluginCfg.xml @@ -0,0 +1,6 @@ + + + src_dhxbacklog + 稻花香流程平台流程待办集成 + 20241231 + \ No newline at end of file diff --git a/seeyon/WEB-INF/cfgHome/src_dhxbacklog/spring/spring-sso.xml b/seeyon/WEB-INF/cfgHome/src_dhxbacklog/spring/spring-sso.xml new file mode 100644 index 0000000..52a673b --- /dev/null +++ b/seeyon/WEB-INF/cfgHome/src_dhxbacklog/spring/spring-sso.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/seeyon/WEB-INF/cfgHome/src_dhxbacklog/spring/spring.xml b/seeyon/WEB-INF/cfgHome/src_dhxbacklog/spring/spring.xml new file mode 100644 index 0000000..2f0d235 --- /dev/null +++ b/seeyon/WEB-INF/cfgHome/src_dhxbacklog/spring/spring.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/seeyon/WEB-INF/cfgHome/src_dhxorganization/pluginCfg.xml b/seeyon/WEB-INF/cfgHome/src_dhxorganization/pluginCfg.xml new file mode 100644 index 0000000..85ff84a --- /dev/null +++ b/seeyon/WEB-INF/cfgHome/src_dhxorganization/pluginCfg.xml @@ -0,0 +1,6 @@ + + + src_dhxorganization + 集团对接主数据平台 + 20241223 + \ No newline at end of file diff --git a/seeyon/WEB-INF/cfgHome/src_dhxorganization/spring/spring-node.xml b/seeyon/WEB-INF/cfgHome/src_dhxorganization/spring/spring-node.xml new file mode 100644 index 0000000..3381ac6 --- /dev/null +++ b/seeyon/WEB-INF/cfgHome/src_dhxorganization/spring/spring-node.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/seeyon/WEB-INF/cfgHome/src_dhxorganization/spring/spring.xml b/seeyon/WEB-INF/cfgHome/src_dhxorganization/spring/spring.xml new file mode 100644 index 0000000..106ec40 --- /dev/null +++ b/seeyon/WEB-INF/cfgHome/src_dhxorganization/spring/spring.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/seeyon/WEB-INF/cfgHome/src_dingding/dingding.properties b/seeyon/WEB-INF/cfgHome/src_dingding/dingding.properties new file mode 100644 index 0000000..dc38ac7 --- /dev/null +++ b/seeyon/WEB-INF/cfgHome/src_dingding/dingding.properties @@ -0,0 +1,11 @@ +profile=prod +prod.jdbc_driver=oracle.jdbc.driver.OracleDriver +prod.jdbc_url=jdbc:oracle:thin:@10.0.1.12:1521:DHXOA +prod.jdbc_user=DHXOA +prod.jdbc_password=DHXOA-A8 + +#profile=prod +test.jdbc_driver=oracle.jdbc.driver.OracleDriver +test.jdbc_url=jdbc:oracle:thin:@10.0.3.32:1521:DHXOATEST +test.jdbc_user=DHXOA +test.jdbc_password=DHXOA_A8 diff --git a/seeyon/WEB-INF/cfgHome/src_dingding/pluginCfg.xml b/seeyon/WEB-INF/cfgHome/src_dingding/pluginCfg.xml new file mode 100644 index 0000000..b821e30 --- /dev/null +++ b/seeyon/WEB-INF/cfgHome/src_dingding/pluginCfg.xml @@ -0,0 +1,6 @@ + + + src_dingding + 测试定时任务 + 20231129 + \ No newline at end of file diff --git a/seeyon/WEB-INF/cfgHome/src_dingding/spring/spring-ctrl.xml b/seeyon/WEB-INF/cfgHome/src_dingding/spring/spring-ctrl.xml new file mode 100644 index 0000000..d6649f9 --- /dev/null +++ b/seeyon/WEB-INF/cfgHome/src_dingding/spring/spring-ctrl.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/seeyon/WEB-INF/cfgHome/src_dingding/spring/spring-dao.xml b/seeyon/WEB-INF/cfgHome/src_dingding/spring/spring-dao.xml new file mode 100644 index 0000000..3d750ad --- /dev/null +++ b/seeyon/WEB-INF/cfgHome/src_dingding/spring/spring-dao.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/seeyon/WEB-INF/cfgHome/src_dingding/spring/spring-service.xml b/seeyon/WEB-INF/cfgHome/src_dingding/spring/spring-service.xml new file mode 100644 index 0000000..972af23 --- /dev/null +++ b/seeyon/WEB-INF/cfgHome/src_dingding/spring/spring-service.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/seeyon/WEB-INF/cfgHome/src_dingding/spring/spring-task.xml b/seeyon/WEB-INF/cfgHome/src_dingding/spring/spring-task.xml new file mode 100644 index 0000000..ca6db89 --- /dev/null +++ b/seeyon/WEB-INF/cfgHome/src_dingding/spring/spring-task.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/seeyon/WEB-INF/cfgHome/src_mainorganization/pluginCfg.xml b/seeyon/WEB-INF/cfgHome/src_mainorganization/pluginCfg.xml new file mode 100644 index 0000000..2b84c93 --- /dev/null +++ b/seeyon/WEB-INF/cfgHome/src_mainorganization/pluginCfg.xml @@ -0,0 +1,6 @@ + + + src_mainorganization + 稻花香主数据同步 + 20250418 + \ No newline at end of file diff --git a/seeyon/WEB-INF/cfgHome/src_mainorganization/spring/spring-dao.xml b/seeyon/WEB-INF/cfgHome/src_mainorganization/spring/spring-dao.xml new file mode 100644 index 0000000..c7c6ab0 --- /dev/null +++ b/seeyon/WEB-INF/cfgHome/src_mainorganization/spring/spring-dao.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/seeyon/WEB-INF/cfgHome/src_mainorganization/spring/spring-node.xml b/seeyon/WEB-INF/cfgHome/src_mainorganization/spring/spring-node.xml new file mode 100644 index 0000000..54de1d4 --- /dev/null +++ b/seeyon/WEB-INF/cfgHome/src_mainorganization/spring/spring-node.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/seeyon/WEB-INF/cfgHome/src_mainorganization/spring/spring-service.xml b/seeyon/WEB-INF/cfgHome/src_mainorganization/spring/spring-service.xml new file mode 100644 index 0000000..5e4f040 --- /dev/null +++ b/seeyon/WEB-INF/cfgHome/src_mainorganization/spring/spring-service.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/seeyon/WEB-INF/cfgHome/src_membermanage/pluginCfg.xml b/seeyon/WEB-INF/cfgHome/src_membermanage/pluginCfg.xml new file mode 100644 index 0000000..05e82ba --- /dev/null +++ b/seeyon/WEB-INF/cfgHome/src_membermanage/pluginCfg.xml @@ -0,0 +1,6 @@ + + + src_membermanage + 主数据平台人员集成管理 + 20250310 + \ No newline at end of file diff --git a/seeyon/WEB-INF/cfgHome/src_membermanage/spring/spring-membermanage.xml b/seeyon/WEB-INF/cfgHome/src_membermanage/spring/spring-membermanage.xml new file mode 100644 index 0000000..be81014 --- /dev/null +++ b/seeyon/WEB-INF/cfgHome/src_membermanage/spring/spring-membermanage.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/seeyon/WEB-INF/cfgHome/src_membermanage/spring/spring-node.xml b/seeyon/WEB-INF/cfgHome/src_membermanage/spring/spring-node.xml new file mode 100644 index 0000000..6f30e2f --- /dev/null +++ b/seeyon/WEB-INF/cfgHome/src_membermanage/spring/spring-node.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/seeyon/WEB-INF/cfgHome/src_organizationInitialization/pluginCfg.xml b/seeyon/WEB-INF/cfgHome/src_organizationInitialization/pluginCfg.xml new file mode 100644 index 0000000..ea4905d --- /dev/null +++ b/seeyon/WEB-INF/cfgHome/src_organizationInitialization/pluginCfg.xml @@ -0,0 +1,6 @@ + + + src_organizationInitialization + 稻花香人员档案初始化 + 20241126 + \ No newline at end of file diff --git a/seeyon/WEB-INF/cfgHome/src_organizationInitialization/spring/spring-dao.xml b/seeyon/WEB-INF/cfgHome/src_organizationInitialization/spring/spring-dao.xml new file mode 100644 index 0000000..c654491 --- /dev/null +++ b/seeyon/WEB-INF/cfgHome/src_organizationInitialization/spring/spring-dao.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/seeyon/WEB-INF/cfgHome/src_organizationInitialization/spring/spring-quartz.xml b/seeyon/WEB-INF/cfgHome/src_organizationInitialization/spring/spring-quartz.xml new file mode 100644 index 0000000..8e4f5a3 --- /dev/null +++ b/seeyon/WEB-INF/cfgHome/src_organizationInitialization/spring/spring-quartz.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/seeyon/WEB-INF/cfgHome/src_organizationInitialization/spring/spring.xml b/seeyon/WEB-INF/cfgHome/src_organizationInitialization/spring/spring.xml new file mode 100644 index 0000000..59b51cd --- /dev/null +++ b/seeyon/WEB-INF/cfgHome/src_organizationInitialization/spring/spring.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/seeyon/WEB-INF/cfgHome/src_qyba/pluginCfg.xml b/seeyon/WEB-INF/cfgHome/src_qyba/pluginCfg.xml new file mode 100644 index 0000000..2d33e76 --- /dev/null +++ b/seeyon/WEB-INF/cfgHome/src_qyba/pluginCfg.xml @@ -0,0 +1,6 @@ + + + src_qyba + 区域备案 + 20240304 + \ No newline at end of file diff --git a/seeyon/WEB-INF/cfgHome/src_qyba/spring/spring-dao.xml b/seeyon/WEB-INF/cfgHome/src_qyba/spring/spring-dao.xml new file mode 100644 index 0000000..419b045 --- /dev/null +++ b/seeyon/WEB-INF/cfgHome/src_qyba/spring/spring-dao.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/seeyon/WEB-INF/cfgHome/src_qyba/spring/spring-node.xml b/seeyon/WEB-INF/cfgHome/src_qyba/spring/spring-node.xml new file mode 100644 index 0000000..7923e9d --- /dev/null +++ b/seeyon/WEB-INF/cfgHome/src_qyba/spring/spring-node.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/seeyon/WEB-INF/cfgHome/src_qyba/spring/spring-service.xml b/seeyon/WEB-INF/cfgHome/src_qyba/spring/spring-service.xml new file mode 100644 index 0000000..7aee5ee --- /dev/null +++ b/seeyon/WEB-INF/cfgHome/src_qyba/spring/spring-service.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/seeyon/WEB-INF/cfgHome/src_qyba/spring/spring.xml b/seeyon/WEB-INF/cfgHome/src_qyba/spring/spring.xml new file mode 100644 index 0000000..e991fb0 --- /dev/null +++ b/seeyon/WEB-INF/cfgHome/src_qyba/spring/spring.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/seeyon/WEB-INF/jsp/plugin/qrCodeForm/qrCodeFormIndex.jsp b/seeyon/WEB-INF/jsp/plugin/qrCodeForm/qrCodeFormIndex.jsp new file mode 100644 index 0000000..0f620b0 --- /dev/null +++ b/seeyon/WEB-INF/jsp/plugin/qrCodeForm/qrCodeFormIndex.jsp @@ -0,0 +1,249 @@ +<%@ page contentType="text/html; charset=UTF-8" isELIgnored="false" %> +<%@ page language="java" import=" com.seeyon.apps.m3.skin.enums.M3StartPageCustomEnum" %> + + + + + <%@ include file="/WEB-INF/jsp/common/common.jsp" %> + 模板二维码生成 + + + + + +
+ + + + + + + + \ No newline at end of file diff --git a/seeyon/common/capextend/cap4/form/utils/qrcodeform/index.js b/seeyon/common/capextend/cap4/form/utils/qrcodeform/index.js new file mode 100644 index 0000000..ec27f89 --- /dev/null +++ b/seeyon/common/capextend/cap4/form/utils/qrcodeform/index.js @@ -0,0 +1,13 @@ + +csdk.event.on('formRendered', function(){ + + try { + if(cmp.href.getParam().qc = "ext") { + document.getElementById("relationBtns").style.display="none"; + document.getElementById("attachment_wrap").style.display="none"; + } + } catch(e) { + + } + +}); diff --git a/seeyon/m3/apps/v5/capextend/cap4/form/utils/qrcodeform/index.js b/seeyon/m3/apps/v5/capextend/cap4/form/utils/qrcodeform/index.js new file mode 100644 index 0000000..bc09362 --- /dev/null +++ b/seeyon/m3/apps/v5/capextend/cap4/form/utils/qrcodeform/index.js @@ -0,0 +1,11 @@ +document.addEventListener('cap_form_afterFormRender', function(evt) { + try { + if(cmp.href.getParam().qc == "ext") { + document.getElementById("relationBtns").style.display="none"; + document.getElementById("attachment_wrap").style.display="none"; + document.getElementsByClassName("cmp-button-left-iconContent btn-box2")[0].style.display="none"; + } + } catch(e) { + + } +}); \ No newline at end of file diff --git a/src/com/seeyon/apps/daohuaxiangSys/chushihua/HsDataPluginApi.java b/src/com/seeyon/apps/daohuaxiangSys/chushihua/HsDataPluginApi.java new file mode 100644 index 0000000..b818d71 --- /dev/null +++ b/src/com/seeyon/apps/daohuaxiangSys/chushihua/HsDataPluginApi.java @@ -0,0 +1,51 @@ +package com.seeyon.apps.daohuaxiangSys.chushihua; + +import com.seeyon.apps.common.plugin.api.APluginInfoApi; +import com.seeyon.apps.common.plugin.vo.ConfigVo; +import com.seeyon.apps.daohuaxiangSys.chushihua.constants.HsDataSyncConstants; + +import java.util.Map; + +/** + * 功能描述:
+ *
+ *
+ * 
+ * + * @Author: FanGaowei + * @Date: 2023/12/8 + */ +public class HsDataPluginApi extends APluginInfoApi { + + @Override + public String getPluginId() { + return HsDataSyncConstants.getPluginId(); + } + + @Override + public String getCreateUser() { + return ""; + } + + @Override + public ConfigVo getDefaultConfig() { + ConfigVo configVo = new ConfigVo(); + for (HsDataSyncConstants value : HsDataSyncConstants.values()) { + if(value != HsDataSyncConstants.plugin) { + configVo.getDevParams().put(value.name(), value.getDefaultValue()); + configVo.getProdParams().put(value.name(), value.getDefaultValue()); + configVo.getParamMap().put(value.name(), value.getDescription()); + } + } + return configVo; + } + + + @Override + public void registerCustomEvent(Map eventAndNodes) { + // 如果每个模板不一样 可以采用templatemanager去读取编码配置 + eventAndNodes.put("hsdata", "历史数据推送"); + } + + +} diff --git a/src/com/seeyon/apps/daohuaxiangSys/chushihua/constants/HsDataSyncConstants.java b/src/com/seeyon/apps/daohuaxiangSys/chushihua/constants/HsDataSyncConstants.java new file mode 100644 index 0000000..e399449 --- /dev/null +++ b/src/com/seeyon/apps/daohuaxiangSys/chushihua/constants/HsDataSyncConstants.java @@ -0,0 +1,31 @@ +package com.seeyon.apps.daohuaxiangSys.chushihua.constants; + +public enum HsDataSyncConstants { + + // 如果有其他参数 这里去新增 todo + plugin("chushihua","插件ID"), + temp("hsdata_", "模板前缀"), + lastUpdate("2000-01-01 00:00:00", "最后更新时间"), + url("", "接口地址"); + + HsDataSyncConstants(String defaultValue, String description) { + this.defaultValue = defaultValue; + this.description = description; + } + + private String defaultValue; + private String description; + + public String getDefaultValue() { + return defaultValue; + } + + public String getDescription() { + return description; + } + + public static String getPluginId() { + return plugin.defaultValue; + } + +} diff --git a/src/com/seeyon/apps/daohuaxiangSys/chushihua/quartz/HsDataSyncQuartz.java b/src/com/seeyon/apps/daohuaxiangSys/chushihua/quartz/HsDataSyncQuartz.java new file mode 100644 index 0000000..b8f67c2 --- /dev/null +++ b/src/com/seeyon/apps/daohuaxiangSys/chushihua/quartz/HsDataSyncQuartz.java @@ -0,0 +1,299 @@ +package com.seeyon.apps.daohuaxiangSys.chushihua.quartz; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.common.config.ICstConfigApi; +import com.seeyon.apps.common.plugin.vo.ConfigVo; +import com.seeyon.apps.common.workflow.util.FormDataBeanUtil; +import com.seeyon.apps.daohuaxiangSys.chushihua.constants.HsDataSyncConstants; +import com.seeyon.apps.daohuaxiangSys.chushihua.vo.HsDataVo; +import com.seeyon.apps.daohuaxiangSys.jkts.util.FanWeiNewUtil; +import com.seeyon.apps.daohuaxiangSys.jkts.util.InterfaceListUtil; +import com.seeyon.apps.daohuaxiangSys.jkts.util.PropKit; +import com.seeyon.apps.ext.quartz.AbstractQuartzTask; +import com.seeyon.apps.ext.workflow.manager.CstWorkFlowTemplateManager; +import com.seeyon.apps.ext.workflow.vo.FormDataVo; + +import com.seeyon.cap4.form.api.FormApi4Cap4; +import com.seeyon.cap4.form.bean.FormBean; +import com.seeyon.cap4.form.bean.FormDataMasterBean; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.common.SystemEnvironment; +import com.seeyon.ctp.common.filemanager.manager.AttachmentManager; +import com.seeyon.ctp.common.po.filemanager.Attachment; +import com.seeyon.ctp.common.template.manager.TemplateManager; +import com.seeyon.ctp.organization.bo.V3xOrgMember; +import com.seeyon.ctp.organization.manager.OrgManager; +import com.seeyon.ctp.util.JDBCAgent; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.songjian.utils.json.JSONArray; + +import javax.inject.Inject; +import java.io.IOException; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 功能描述:
+ *
+ * 定时同步历史数据
+ * 
+ * + * @Author: FanGaowei + * @Date: 2023/12/8 + */ +public class HsDataSyncQuartz extends AbstractQuartzTask { + + private static final Log log = LogFactory.getLog(HsDataSyncQuartz.class); + + + @Inject + private ICstConfigApi cstConfigApi; + @Inject + private TemplateManager templateManager; + @Inject + private FormApi4Cap4 formApi4Cap4; + @Inject + private CstWorkFlowTemplateManager cstWorkFlowTemplateManager; + + private AttachmentManager attachmentManager; + + public void setAttachmentManager(AttachmentManager attachmentManager) { + this.attachmentManager = attachmentManager; + } + + public AttachmentManager getAttachmentManagery() { + if (attachmentManager == null) { + attachmentManager = (AttachmentManager) AppContext.getBean("attachmentManager"); + } + return attachmentManager; + } + + private OrgManager orgManager; + + public OrgManager getOrgManager() { + if (this.orgManager == null) { + this.orgManager = ((OrgManager) AppContext.getBean("orgManager")); + } + return orgManager; + } + + + @Override + public String taskRun(String tempCode) throws Exception { + System.out.println("进入同步方法"); + final Map regist = FanWeiNewUtil.Regist(PropKit.getProp(PropKit.NEWADDRESS)); + System.out.println(regist); + System.out.println("spk:" + regist.get("spk")); +// return null; + + //模板id + Object templeteId = null; + // 查询满足条件的id + String sql = "select id from ctp_template where TEMPLETE_NUMBER = ? "; + System.out.println(sql+tempCode); + try(JDBCAgent agent = new JDBCAgent(true, false)) { + List params = new ArrayList<>(); + params.add(tempCode); + agent.execute(sql, params); + List> list = agent.resultSetToList(); + System.out.println(list.size()); + templeteId = list.get(0).get("id"); + System.out.println(templeteId); + } catch (Exception e) { + log.error("获取模板id失败:", e); + } + ceshi(Long.parseLong(templeteId.toString()), tempCode); + return null; + } + + + /** + * 功能描述:
+ *
+     *  调用第三方接口推送数据
+     *  null 表示成功  其他为失败信息
+     * 
+ * @param request + * @return: java.lang.String + * @Author: FanGaowei + * @Date: 2023/12/8 + **/ + private String push(String request, ConfigVo configVo) { + // todo 获取配置信息 调用接口 + + return ""; + } + + @Override + public String getName() { + return null; + } + + public void ceshi(Long tempId, String tempCode) throws IOException { + System.out.println("进入ceshi方法"); + List datas = new ArrayList(); + Map formBeanMap = new HashMap<>(); + + String dataSql = PropKit.getProp(PropKit.DATASQL); + try(JDBCAgent agent = new JDBCAgent(true, false)) { + List params = new ArrayList<>(); + params.add(tempId); + agent.execute(dataSql, params); + // 获取到所有的流程数据 + List> list = agent.resultSetToList(); + if(null != list) { + List hsData = list.stream().map(HsDataVo::new).collect(Collectors.toList()); + for (int i = 0; i < hsData.size(); i++) { + Map data = new HashMap(); + HsDataVo hsDatum = hsData.get(i); + FormBean formBean = formBeanMap.get(hsDatum.getFormId()); + if (null == formBean) { + formBean = formApi4Cap4.getForm(hsDatum.getFormId()); + formBeanMap.put(hsDatum.getFormId(), formBean); + } + FormDataMasterBean masterBean = formApi4Cap4.getDataMasterBeanById(hsDatum.getMasterId(), formBean, null); + // 转换数据 + FormDataVo formDataVo = FormDataBeanUtil.trans2FormDataVo(HsDataSyncConstants.getPluginId(), hsDatum.getFormId(), + hsDatum.getSummaryId(), formBean, masterBean); + String name = ""; + if ("formmain_9291".equals(tempCode)) { + name = formDataVo.getFieldData("客户名称文本").getStringValue(); + } else { + String userName = formDataVo.getFieldData("客户名称").getStringValue(); + System.out.println("userName:" + userName); + V3xOrgMember member = getOrgManager().getMemberByLoginName(userName); + name = member.getName(); + } + System.out.println("判断名称是否为指定名称"+name); + if(!("宜昌高新区盛世禾百货商行".equals(name)||"宜昌市西陵区高东云食品经营部".equals(name)||"宜昌市猇亭区明喜副食店".equals(name)|| + "湖北省馫昊商贸有限责任公司".equals(name)||"湖北省馫昊商贸有限责任公司".equals(name)||"宜昌梦泽涵商贸有限公司 ".equals(name))){ + continue; + } + + System.out.println("致远客户名称:" + name); + Map userIdAndDeptId = getUserIdAndDeptId(name); + System.out.println("人员信息:" + userIdAndDeptId.toString()); + data.put("khmc", userIdAndDeptId.get("userid")); + data.put("fgs", userIdAndDeptId.get("deptid")); + data.put("bt", formBean.getFormName()); + data.put("dh", formDataVo.getFieldData("流水号").getStringValue()); + data.put("sqrq", formDataVo.getFieldData("填表日期").getStringValue()); + data.put("trje", formDataVo.getFieldData("投入金额").getStringValue()); + data.put("bayj", formDataVo.getFieldData("备案意见").getStringValue()); + data.put("bajs", formDataVo.getFieldData("备案简述").getStringValue()); + data.put("ssschxsgs", formDataVo.getFieldData("分公司").getStringValue()); + data.put("jbr", formDataVo.getFieldData("经办人").getStringValue()); + data.put("lcbt", formBean.getFormName()); + + String pathId = formDataVo.getFieldData("上传附件").getStringValue(); + //附件 + JSONArray faths = null; + if (pathId == null || "".equals(pathId)) { + faths = new JSONArray(); + } else { + faths = getPathUrl(pathId); + } + Map parm = FanWeiNewUtil.createWF2(data, faths); + //调用新建接口 + String userId = null; + Object userid = userIdAndDeptId.get("userid"); + if (userid == null || "".equals(userid)) { + userId = ""; + } else { + userId = userid.toString(); + } + String s = FanWeiNewUtil.PostRestful(parm, userId); + //String s = FanWeiUtil.PostRestful(parm, userId); + System.out.println("新建推送结果" + s); + JSONObject returnMsg = JSON.parseObject(s); + Object code = returnMsg.get("code"); + if ("SUCCESS".equals(code.toString())) { + System.out.println("同步成功!"); + }else { + System.out.println("同步失败!"); + } + } + } + + } catch (Exception e) { + log.error("同步失败:" + tempId); + } + } + + /** + * 获取userid和deptid + * @param userName + * @return + * @throws Exception + */ + public Map getUserIdAndDeptId(String userName) throws Exception { +// 新平台指定对应关系 + Map datas = new HashMap(); + if("宜昌梦泽涵商贸有限公司".equals(userName)){ + datas.put("userid", "51"); + datas.put("deptid", "1545"); + }else if ("伍家岗区源玥酒水商行".equals(userName)){ + datas.put("userid", "50"); + datas.put("deptid", "1553"); + }else if ("湖北省馫昊商贸有限责任公司".equals(userName)){ + datas.put("userid", "49"); + datas.put("deptid", "1555"); + }else if ("宜昌市猇亭区明喜副食店".equals(userName)){ + datas.put("userid", "48"); + datas.put("deptid", "1537"); + }else if ("宜昌市西陵区高东云食品经营部".equals(userName)){ + datas.put("userid", "47"); + datas.put("deptid", "1530"); + }else if ("宜昌高新区盛世禾百货商行".equals(userName)){ + datas.put("userid", "46"); + datas.put("deptid", "1529"); + } +// Map datas = new HashMap(); +// String sql = PropKit.getProp(PropKit.SQL); +// try(JDBCAgent agent = new JDBCAgent(true, false)) { +// List params = new ArrayList<>(); +// params.add(userName); +// agent.execute(sql, params); +// List> list = agent.resultSetToList(); +// Map map = list.get(0); +// datas.put("userid", map.get("id")); +// datas.put("deptid", map.get("departmentid")); +// } catch (Exception e) { +// log.error("获取模板id失败:", e); +// } + return datas; + } + + /** + * 获取附件路径 + * @param pathId + * @return + */ + public JSONArray getPathUrl(String pathId) throws IOException { + InterfaceListUtil interfaceListUtil = new InterfaceListUtil(); + String oatoken = interfaceListUtil.getToken(PropKit.getProp(PropKit.LOGINNAME)); + long aLong = Long.parseLong(pathId); + final List attachmentIds = attachmentManager.getBySubReference(aLong); + JSONArray jsonArray = new JSONArray(); + for (int i = 0 ; i < attachmentIds.size();i++) { + Attachment attachment = attachmentManager.getAttachmentByFileURL(attachmentIds.get(i)); + Long fileUrl = attachment.getFileUrl(); + String filename = attachment.getFilename(); + String fileType = filename.substring(filename.lastIndexOf(".")+1); + String oaFileName = filename.substring(0,filename.lastIndexOf(".")); + //调用接口下载文件,文件存放在指定的路径下 + String dowUrl = PropKit.getProp(PropKit.DOWURL)+"/"+fileUrl+"?fileName="+fileType+"&token="+oatoken; + String str = SystemEnvironment.getApplicationFolder(); + String dowPath = str+"/dhxfile/"+filename; + String download = interfaceListUtil.download(dowUrl, dowPath); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("name", filename); + jsonObject.put("type", fileType); + jsonObject.put("url", PropKit.getProp(PropKit.JYNCFILE)+"/"+filename); + jsonArray.add(jsonObject); + } + return jsonArray; + } +} diff --git a/src/com/seeyon/apps/daohuaxiangSys/chushihua/vo/HsDataVo.java b/src/com/seeyon/apps/daohuaxiangSys/chushihua/vo/HsDataVo.java new file mode 100644 index 0000000..60759e8 --- /dev/null +++ b/src/com/seeyon/apps/daohuaxiangSys/chushihua/vo/HsDataVo.java @@ -0,0 +1,55 @@ +package com.seeyon.apps.daohuaxiangSys.chushihua.vo; + +import cn.hutool.core.convert.Convert; + +import java.util.Map; + +/** + * 功能描述:
+ *
+ *
+ * 
+ * + * @Author: FanGaowei + * @Date: 2023/12/8 + */ +public class HsDataVo { + + + private Long summaryId; + private Long formId; + private Long masterId; + + public HsDataVo(Map row) { + this.summaryId = Convert.toLong(row.get("id")); + this.masterId = Convert.toLong(row.get("form_recordid")); + this.formId = Convert.toLong(row.get("form_appid")); + } + + public Long getSummaryId() { + return summaryId; + } + + public HsDataVo setSummaryId(Long summaryId) { + this.summaryId = summaryId; + return this; + } + + public Long getFormId() { + return formId; + } + + public HsDataVo setFormId(Long formId) { + this.formId = formId; + return this; + } + + public Long getMasterId() { + return masterId; + } + + public HsDataVo setMasterId(Long masterId) { + this.masterId = masterId; + return this; + } +} diff --git a/src/com/seeyon/apps/daohuaxiangSys/jkts/TongYongPlugin.java b/src/com/seeyon/apps/daohuaxiangSys/jkts/TongYongPlugin.java new file mode 100644 index 0000000..fb3b25a --- /dev/null +++ b/src/com/seeyon/apps/daohuaxiangSys/jkts/TongYongPlugin.java @@ -0,0 +1,41 @@ +package com.seeyon.apps.daohuaxiangSys.jkts; + +import com.seeyon.apps.common.plugin.api.APluginInfoApi; +import com.seeyon.apps.common.plugin.vo.ConfigVo; +import com.seeyon.apps.daohuaxiangSys.jkts.constants.DaohuaxiangConstants; + +/** + * 功能描述:
+ *
+ *
+ * 
+ * + * @Author: FanGaowei + * @Date: 2023/10/25 + */ +public class TongYongPlugin extends APluginInfoApi { + + @Override + public String getPluginId() { + return DaohuaxiangConstants.getPluginId(); + } + + @Override + public String getCreateUser() { + return "稻花香"; + } + + @Override + public ConfigVo getDefaultConfig() { + ConfigVo configVo = new ConfigVo(); + for (DaohuaxiangConstants value : DaohuaxiangConstants.values()) { + if(value != DaohuaxiangConstants.plugin) { + configVo.getDevParams().put(value.name(), value.getDefaultValue()); + configVo.getProdParams().put(value.name(), value.getDefaultValue()); + configVo.getParamMap().put(value.name(), value.getDescription()); + } + } + return configVo; + } + +} diff --git a/src/com/seeyon/apps/daohuaxiangSys/jkts/constants/DaohuaxiangConstants.java b/src/com/seeyon/apps/daohuaxiangSys/jkts/constants/DaohuaxiangConstants.java new file mode 100644 index 0000000..05c0a18 --- /dev/null +++ b/src/com/seeyon/apps/daohuaxiangSys/jkts/constants/DaohuaxiangConstants.java @@ -0,0 +1,30 @@ +package com.seeyon.apps.daohuaxiangSys.jkts.constants; + + +public enum DaohuaxiangConstants { + + plugin("daohuaxiang", "插件ID"), + url("http://localhost", "接口地址"); + + DaohuaxiangConstants(String defaultValue, String description) { + this.defaultValue = defaultValue; + this.description = description; + } + + private String defaultValue; + private String description; + + public String getDefaultValue() { + return defaultValue; + } + + public String getDescription() { + return description; + } + + public static String getPluginId() { + return plugin.defaultValue; + } + +} + diff --git a/src/com/seeyon/apps/daohuaxiangSys/jkts/node/NewTongYongNode.java b/src/com/seeyon/apps/daohuaxiangSys/jkts/node/NewTongYongNode.java new file mode 100644 index 0000000..720f7a1 --- /dev/null +++ b/src/com/seeyon/apps/daohuaxiangSys/jkts/node/NewTongYongNode.java @@ -0,0 +1,73 @@ +package com.seeyon.apps.daohuaxiangSys.jkts.node; + +import com.seeyon.apps.common.config.ICstConfigApi; +import com.seeyon.apps.common.workflow.constants.WorkFlowType; +import com.seeyon.apps.common.workflow.node.ACommonSuperNode; +import com.seeyon.apps.daohuaxiangSys.jkts.constants.DaohuaxiangConstants; +import com.seeyon.apps.daohuaxiangSys.jkts.service.NewTongYongService; +import com.seeyon.apps.ext.workflow.vo.FormDataVo; +import com.seeyon.apps.ext.workflow.vo.SuperNodeContext; +import com.seeyon.cap4.form.bean.FormDataMasterBean; +import com.seeyon.ctp.common.AppContext; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.Map; + +public class NewTongYongNode extends ACommonSuperNode { + + private ICstConfigApi cstConfigApi; + + public ICstConfigApi getICstConfigApi() { + if (cstConfigApi == null) { + cstConfigApi = (ICstConfigApi) AppContext.getBean("cstConfigApi"); + } + return cstConfigApi; + } + + @Autowired + NewTongYongService newTongYongService; + + @Override + public String getPluginId() { + return DaohuaxiangConstants.getPluginId(); + } + + @Override + public String getFormParse() { + return "json"; + } + + @Override + public WorkFlowType[] getTypes() { + return new WorkFlowType[] { WorkFlowType.superNode }; + } + + @Override + public SuperNodeContext proceed(String request, FormDataVo formDataVo, FormDataMasterBean formDataMasterBean) throws Exception { + // 获取数据 + SuperNodeContext context = new SuperNodeContext(); + context.setNeedSave(true); + Map map = newTongYongService.sendInter(formDataVo); + context.setRequest(map.get("request").toString()); + context.setResponse(map.get("response").toString()); + Object code = map.get("code"); + if ("200".equals(code.toString())) { + context.success(map.get("msg").toString(), false); + } else { + context.back(map.get("msg").toString()); + } + return context; + } + + @Override + public String getNodeId() { + return "newTongYongNode"; + } + + @Override + public String getNodeName() { + return "新平台通用节点"; + } + + +} diff --git a/src/com/seeyon/apps/daohuaxiangSys/jkts/node/TongYongNode.java b/src/com/seeyon/apps/daohuaxiangSys/jkts/node/TongYongNode.java new file mode 100644 index 0000000..7f454dd --- /dev/null +++ b/src/com/seeyon/apps/daohuaxiangSys/jkts/node/TongYongNode.java @@ -0,0 +1,74 @@ +package com.seeyon.apps.daohuaxiangSys.jkts.node; + +import com.seeyon.apps.common.config.ICstConfigApi; +import com.seeyon.apps.common.workflow.constants.WorkFlowType; +import com.seeyon.apps.common.workflow.node.ACommonSuperNode; +import com.seeyon.apps.daohuaxiangSys.jkts.constants.DaohuaxiangConstants; +import com.seeyon.apps.daohuaxiangSys.jkts.service.TongYongService; +import com.seeyon.apps.ext.workflow.vo.FormDataVo; +import com.seeyon.apps.ext.workflow.vo.SuperNodeContext; +import com.seeyon.cap4.form.bean.FormDataMasterBean; +import com.seeyon.ctp.common.AppContext; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.Map; + +public class TongYongNode extends ACommonSuperNode { + + private ICstConfigApi cstConfigApi; + + public ICstConfigApi getICstConfigApi() { + if (cstConfigApi == null) { + cstConfigApi = (ICstConfigApi) AppContext.getBean("cstConfigApi"); + } + return cstConfigApi; + } + + @Autowired + TongYongService tongYongService; + + @Override + public String getPluginId() { + return DaohuaxiangConstants.getPluginId(); + } + + @Override + public String getFormParse() { + return "json"; + } + + @Override + public WorkFlowType[] getTypes() { + return new WorkFlowType[] { WorkFlowType.superNode }; + } + + @Override + public SuperNodeContext proceed(String request, FormDataVo formDataVo, FormDataMasterBean formDataMasterBean) throws Exception { + // 获取数据 + SuperNodeContext context = new SuperNodeContext(); + context.setNeedSave(true); + Map map = tongYongService.sendInter(formDataVo); + context.setRequest(map.get("request").toString()); + context.setResponse(map.get("response").toString()); + Object code = map.get("code"); + if ("200".equals(code.toString())) { + context.success(map.get("msg").toString(), false); + } else { + context.back(map.get("msg").toString()); + } + + return context; + } + + @Override + public String getNodeId() { + return "tongYongNode"; + } + + @Override + public String getNodeName() { + return "通用节点"; + } + + +} diff --git a/src/com/seeyon/apps/daohuaxiangSys/jkts/service/NewTongYongService.java b/src/com/seeyon/apps/daohuaxiangSys/jkts/service/NewTongYongService.java new file mode 100644 index 0000000..95a3596 --- /dev/null +++ b/src/com/seeyon/apps/daohuaxiangSys/jkts/service/NewTongYongService.java @@ -0,0 +1,113 @@ +package com.seeyon.apps.daohuaxiangSys.jkts.service; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.daohuaxiangSys.jkts.util.FanWeiNewUtil; +import com.seeyon.apps.daohuaxiangSys.jkts.util.InterfaceListUtil; +import com.seeyon.apps.daohuaxiangSys.jkts.util.PropKit; +import com.seeyon.apps.ext.workflow.vo.FormDataVo; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.common.SystemEnvironment; +import com.seeyon.ctp.common.filemanager.manager.AttachmentManager; +import com.seeyon.ctp.common.po.filemanager.Attachment; +import org.songjian.utils.json.JSONArray; + +import java.io.IOException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class NewTongYongService { + + + private AttachmentManager attachmentManager; + + public void setAttachmentManager(AttachmentManager attachmentManager) { + this.attachmentManager = attachmentManager; + } + + public AttachmentManager getAttachmentManagery() { + if (attachmentManager == null) { + attachmentManager = (AttachmentManager) AppContext.getBean("attachmentManager"); + } + return attachmentManager; + } + + public Map sendInter(FormDataVo formDataVo) throws Exception { + String pathId = formDataVo.getFieldData("上传附件").getStringValue(); + //附件 + JSONArray faths = null; + if (pathId == null || "".equals(pathId)) { + faths = new JSONArray(); + } else { + faths = getPathUrl(pathId); + } + //封装参数 + Map parm = FanWeiNewUtil.createWF(formDataVo, faths); + //调用新建接口 + String userid = formDataVo.getFieldData("经办人").getStringValue(); + String s = FanWeiNewUtil.PostRestful(parm, userid); + JSONObject returnMsg = JSON.parseObject(s); + Object code = returnMsg.get("code"); + System.out.println("新建code:" + code); + Map map = new HashMap<>(); + if ("SUCCESS".equals(code.toString())) { + //调用提交接口 +// Map data = (Map) returnMsg.get("data"); +// Object requestid = data.get("requestid"); +// String msg = FanWeiUtil.PostRestfulbyForm(requestid.toString(), userid); +// JSONObject tiJiaoReturnMsg = JSON.parseObject(msg); +// Object code2 = tiJiaoReturnMsg.get("code"); +// System.out.println("提交code:" + code2); + map.put("code", "200"); + map.put("msg", "推送成功"); + map.put("request", parm.toString()); + map.put("response", s); + } else { + if("-1".equals(code.toString())){ + map.put("code", "300"); + map.put("msg", returnMsg.get("msg")); + map.put("request", parm.toString()); + map.put("response", s); + }else{ + map.put("code", "300"); + map.put("msg", "异常编号:"+code.toString()+",异常数据"+returnMsg.get("errMsg")); + map.put("request", parm.toString()); + map.put("response", s); + } + } + return map; + + } + + /** + * 获取附件路径 + * @param pathId + * @return + */ + public JSONArray getPathUrl(String pathId) throws IOException { + InterfaceListUtil interfaceListUtil = new InterfaceListUtil(); + String oatoken = interfaceListUtil.getToken(PropKit.getProp(PropKit.LOGINNAME)); + long aLong = Long.parseLong(pathId); + final List attachmentIds = attachmentManager.getBySubReference(aLong); + JSONArray jsonArray = new JSONArray(); + for (int i = 0 ; i < attachmentIds.size();i++) { + Attachment attachment = attachmentManager.getAttachmentByFileURL(attachmentIds.get(i)); + Long fileUrl = attachment.getFileUrl(); + String filename = attachment.getFilename(); + String fileType = filename.substring(filename.lastIndexOf(".")+1); + String oaFileName = filename.substring(0,filename.lastIndexOf(".")); + //调用接口下载文件,文件存放在指定的路径下 + String dowUrl = PropKit.getProp(PropKit.DOWURL)+"/"+fileUrl+"?fileName="+fileType+"&token="+oatoken; + String str = SystemEnvironment.getApplicationFolder(); + String dowPath = str+"/dhxfile/"+filename; + String download = interfaceListUtil.download(dowUrl, dowPath); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("name", filename); + jsonObject.put("type", fileType); + jsonObject.put("url", PropKit.getProp(PropKit.JYNCFILE)+"/"+filename); + jsonArray.add(jsonObject); + } + return jsonArray; + } +} diff --git a/src/com/seeyon/apps/daohuaxiangSys/jkts/service/TongYongService.java b/src/com/seeyon/apps/daohuaxiangSys/jkts/service/TongYongService.java new file mode 100644 index 0000000..6c0cc39 --- /dev/null +++ b/src/com/seeyon/apps/daohuaxiangSys/jkts/service/TongYongService.java @@ -0,0 +1,107 @@ +package com.seeyon.apps.daohuaxiangSys.jkts.service; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.daohuaxiangSys.jkts.util.FanWeiUtil; +import com.seeyon.apps.daohuaxiangSys.jkts.util.InterfaceListUtil; +import com.seeyon.apps.daohuaxiangSys.jkts.util.PropKit; +import com.seeyon.apps.ext.workflow.vo.FormDataVo; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.common.SystemEnvironment; +import com.seeyon.ctp.common.filemanager.manager.AttachmentManager; +import com.seeyon.ctp.common.po.filemanager.Attachment; +import org.songjian.utils.json.JSONArray; + +import java.io.IOException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class TongYongService { + + + private AttachmentManager attachmentManager; + + public void setAttachmentManager(AttachmentManager attachmentManager) { + this.attachmentManager = attachmentManager; + } + + public AttachmentManager getAttachmentManagery() { + if (attachmentManager == null) { + attachmentManager = (AttachmentManager) AppContext.getBean("attachmentManager"); + } + return attachmentManager; + } + + public Map sendInter(FormDataVo formDataVo) throws Exception { + String pathId = formDataVo.getFieldData("上传附件").getStringValue(); + //附件 + JSONArray faths = null; + if (pathId == null || "".equals(pathId)) { + faths = new JSONArray(); + } else { + faths = getPathUrl(pathId); + } + //封装参数 + Map parm = FanWeiUtil.createWF(formDataVo, faths); + //调用新建接口 + String userid = formDataVo.getFieldData("客户id").getStringValue(); + String s = FanWeiUtil.PostRestful(parm, userid); + JSONObject returnMsg = JSON.parseObject(s); + Object code = returnMsg.get("code"); + System.out.println("新建code:" + code); + Map map = new HashMap<>(); + if ("SUCCESS".equals(code.toString())) { + //调用提交接口 + map.put("code", "200"); + map.put("msg", "推送成功"); + map.put("request", parm.toString()); + map.put("response", s); + } else { + if("-1".equals(code.toString())){ + map.put("code", "300"); + map.put("msg", returnMsg.get("msg")); + map.put("request", parm.toString()); + map.put("response", s); + }else{ + map.put("code", "300"); + map.put("msg", "异常编号:"+code.toString()+",异常数据"+returnMsg.get("errMsg")); + map.put("request", parm.toString()); + map.put("response", s); + } + } + return map; + + } + + /** + * 获取附件路径 + * @param pathId + * @return + */ + public JSONArray getPathUrl(String pathId) throws IOException { + InterfaceListUtil interfaceListUtil = new InterfaceListUtil(); + String oatoken = interfaceListUtil.getToken(PropKit.getProp(PropKit.LOGINNAME)); + long aLong = Long.parseLong(pathId); + final List attachmentIds = attachmentManager.getBySubReference(aLong); + JSONArray jsonArray = new JSONArray(); + for (int i = 0 ; i < attachmentIds.size();i++) { + Attachment attachment = attachmentManager.getAttachmentByFileURL(attachmentIds.get(i)); + Long fileUrl = attachment.getFileUrl(); + String filename = attachment.getFilename(); + String fileType = filename.substring(filename.lastIndexOf(".")+1); + String oaFileName = filename.substring(0,filename.lastIndexOf(".")); + //调用接口下载文件,文件存放在指定的路径下 + String dowUrl = PropKit.getProp(PropKit.DOWURL)+"/"+fileUrl+"?fileName="+fileType+"&token="+oatoken; + String str = SystemEnvironment.getApplicationFolder(); + String dowPath = str+"/dhxfile/"+filename; + String download = interfaceListUtil.download(dowUrl, dowPath); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("name", filename); + jsonObject.put("type", fileType); + jsonObject.put("url", PropKit.getProp(PropKit.JYNCFILE)+"/"+filename); + jsonArray.add(jsonObject); + } + return jsonArray; + } +} diff --git a/src/com/seeyon/apps/daohuaxiangSys/jkts/util/A8FolderKit.java b/src/com/seeyon/apps/daohuaxiangSys/jkts/util/A8FolderKit.java new file mode 100644 index 0000000..d7cb594 --- /dev/null +++ b/src/com/seeyon/apps/daohuaxiangSys/jkts/util/A8FolderKit.java @@ -0,0 +1,26 @@ +package com.seeyon.apps.daohuaxiangSys.jkts.util; + +import com.seeyon.ctp.common.SystemEnvironment; + +/** + * Description + *
获取A8产品下面的文件夹路径
+ * Copyright(c) Beijing Seeyon Software Co.,LTD + */ +public class A8FolderKit { + + private static String SH_PROP = ""; + + /** + * Description: + *
获取到A8的安装应用目录  seeyon
+ * @return + */ + public static String getPropFile() { + if("".equals(SH_PROP)) { + SH_PROP = SystemEnvironment.getApplicationFolder() + "/WEB-INF/cfgHome/plugin/daohuaxiang/jyncfile.properties"; + } + return SH_PROP; + } + +} diff --git a/src/com/seeyon/apps/daohuaxiangSys/jkts/util/BaseUtil.java b/src/com/seeyon/apps/daohuaxiangSys/jkts/util/BaseUtil.java new file mode 100644 index 0000000..e5ede24 --- /dev/null +++ b/src/com/seeyon/apps/daohuaxiangSys/jkts/util/BaseUtil.java @@ -0,0 +1,110 @@ +package com.seeyon.apps.daohuaxiangSys.jkts.util; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; + + +/** + * sql执行工具类 + * 2021-06-08 + * @author huangzhengguo + * + */ +public class BaseUtil { + + + PreparedStatement ps = null; + ResultSet res = null; + Connection conn =null; + /** + * sql查询工具 + * @param sql sql语句 + * @param params sql参数 + * @return 结果集 + */ + public ResultSet executeQuery(String sql, Object[] params) + { + conn = JdbcUtil.getConnection(); + try { + ps = conn.prepareStatement(sql); + for(int i = 0; i < params.length; i++){ + ps.setObject(i+1, params[i]); + } + res = ps.executeQuery(); + } catch (SQLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return res; + } + /** + * sql更新工具 + * @param sql + * @param params + * @return + */ + public int executeUpdate(String sql, Object[] params) + { + int res = 0; + conn = JdbcUtil.getConnection(); + try { + ps = conn.prepareStatement(sql); + for(int i = 0; i < params.length; i++) + { + ps.setObject(i+1, params[i]); + } + res = ps.executeUpdate(); + } catch (SQLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return res; + } + + + public void close() { + release(res,null,conn,ps); + } + //定义一个释放资源的方法; + /* + * 定义一个方法: 释放资源: 直接将rs stmt conn 全部释放: + */ + public static void release(ResultSet rs ,Statement stmt , Connection conn,PreparedStatement ps){ + if(rs!=null){ + try { + rs.close(); + } catch (SQLException e) { + e.printStackTrace(); + } + rs=null; + } + if(stmt!=null){ + try { + stmt.close(); + } catch (SQLException e) { + e.printStackTrace(); + } + stmt=null; + } + if(conn!=null){ + try { + conn.close(); + } catch (SQLException e) { + e.printStackTrace(); + } + conn=null; + } + if(ps!=null){ + try { + ps.close(); + } catch (SQLException e) { + e.printStackTrace(); + } + ps=null; + } + + } +} diff --git a/src/com/seeyon/apps/daohuaxiangSys/jkts/util/DBConnection.java b/src/com/seeyon/apps/daohuaxiangSys/jkts/util/DBConnection.java new file mode 100644 index 0000000..f181afe --- /dev/null +++ b/src/com/seeyon/apps/daohuaxiangSys/jkts/util/DBConnection.java @@ -0,0 +1,49 @@ +package com.seeyon.apps.daohuaxiangSys.jkts.util; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; + +public class DBConnection { + // JDBC 驱动名及数据库 URL + static final String JDBC_DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; + static final String DB_URL = "jdbc:sqlserver://119.96.243.50:1433;databaseName=U8CLOUD"; + + // 数据库的用户名与密码,根据自己的情况修改 + static final String USER = "sa"; + static final String PASS = "Sa123456"; + + public void conn() { + Connection conn = null; + + try { + // 注册 JDBC 驱动 + Class.forName(JDBC_DRIVER); + + // 打开链接 + System.out.println("连接数据库..."); + conn = DriverManager.getConnection(DB_URL, USER, PASS); + + + // 关闭链接 + conn.close(); + } catch (SQLException se) { + // 处理 JDBC 错误 + se.printStackTrace(); + } catch (Exception e) { + // 处理 Class.forName 错误 + e.printStackTrace(); + } finally { + // 关闭资源 + try { + if (conn != null) { + conn.close(); + } + } catch (SQLException se) { + se.printStackTrace(); + } + } + System.out.println("完成操作"); + } + +} diff --git a/src/com/seeyon/apps/daohuaxiangSys/jkts/util/FanWeiNewUtil.java b/src/com/seeyon/apps/daohuaxiangSys/jkts/util/FanWeiNewUtil.java new file mode 100644 index 0000000..4089403 --- /dev/null +++ b/src/com/seeyon/apps/daohuaxiangSys/jkts/util/FanWeiNewUtil.java @@ -0,0 +1,424 @@ +package com.seeyon.apps.daohuaxiangSys.jkts.util; + +import cn.hutool.core.util.CharsetUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.crypto.asymmetric.KeyType; +import cn.hutool.crypto.asymmetric.RSA; +import cn.hutool.http.HttpRequest; +import cn.hutool.json.JSONUtil; +import com.seeyon.apps.ext.workflow.vo.FormDataVo; +import org.songjian.utils.json.JSONArray; + +import java.io.IOException; +import java.util.*; + +/** + * 描述: + * + * @author alexander + * @version 1.0 + * @date 2023/8/25 09:16 星期五 + */ +public class FanWeiNewUtil { + /** + * 模拟缓存服务 + */ + private static final Map SYSTEM_CACHE = new HashMap<>(); + + private static String privateKey = ""; + private static String publicKey = ""; + + /** + * ecology系统发放的授权许可证(appid) + * ce14aaca-fa08-4eb7-9f10-c2294285c4ea + */ + private static String APPID = "e47a15d2-95f2-4bf6-a546-8076ce445a19"; + + + /** + * 第一步: + * + * 调用ecology注册接口,根据appid进行注册,将返回服务端公钥和Secret信息 + */ + public static Map Regist(String address) throws IOException { + + //调用ECOLOGY系统接口进行注册 + String data = HttpRequest.post(address + "/api/ec/dev/auth/regist") + .header("appid",PropKit.getProp(PropKit.APPID)) + .header("cpk","123") + .header("loginid",PropKit.getProp(PropKit.LOGINID)) + .header("pwd",PropKit.getProp(PropKit.PWD)) + .timeout(2000) + .execute().body(); + + // 打印ECOLOGY响应信息 + System.out.println("Regist():"+data); + Map datas = JSONUtil.parseObj(data); + + //ECOLOGY返回的系统公钥 + SYSTEM_CACHE.put("SERVER_PUBLIC_KEY", StrUtil.nullToEmpty((String)datas.get("spk"))); + //ECOLOGY返回的系统密钥 + SYSTEM_CACHE.put("SERVER_SECRET",StrUtil.nullToEmpty((String)datas.get("secrit"))); + return datas; + } + + + + /** + * 第二步: + * + * 通过第一步中注册系统返回信息进行获取token信息 + */ + public static Map Getoken(String address) throws IOException { + // 从系统缓存或者数据库中获取ECOLOGY系统公钥和Secret信息 + String secret = PropKit.getProp(PropKit.NEWSECRET); + String spk = PropKit.getProp(PropKit.NEWSPK); + + + // 公钥加密,所以RSA对象私钥为null + RSA rsa = new RSA(null,spk); + //对秘钥进行加密传输,防止篡改数据 + String encryptSecret = rsa.encryptBase64(secret, CharsetUtil.CHARSET_UTF_8, KeyType.PublicKey); + + //调用ECOLOGY系统接口进行注册 + String data = HttpRequest.post(address+ "/api/ec/dev/auth/applytoken") + .header("appid",PropKit.getProp(PropKit.APPID)) + .header("secret",encryptSecret) + .header("time","3600") + .execute().body(); + + System.out.println("Getoken():"+data); + Map datas = JSONUtil.parseObj(data); + + //ECOLOGY返回的token + // TODO 为Token缓存设置过期时间 + SYSTEM_CACHE.put("SERVER_TOKEN",StrUtil.nullToEmpty((String)datas.get("token"))); + + return datas; + } + + /** + * 第三步: + * + * 调用ecology系统的rest接口,请求头部带上token和用户标识认证信息 + * + * @param params 请求参数map,创建流程之类的post接口是以模拟form表单提交的方式,其他get接口以json字符串方式提交 + * + * 注意:ECOLOGY系统所有POST接口调用请求头请设置 "Content-Type","application/x-www-form-urlencoded; charset=utf-8" + */ + public static String PostRestful(Map params, String userid) throws IOException { + //ECOLOGY返回的token + String token = (String) Getoken(PropKit.getProp(PropKit.NEWADDRESS)).get("token"); + + //封装请求头参数 + RSA rsa = new RSA(null, PropKit.getProp(PropKit.NEWSPK)); + //对用户信息进行加密传输,暂仅支持传输OA用户ID + String encryptUserid = rsa.encryptBase64(userid,CharsetUtil.CHARSET_UTF_8,KeyType.PublicKey); + + //调用ECOLOGY系统接口 + String data = HttpRequest.post(PropKit.getProp(PropKit.NEWADDRESS) + PropKit.getProp(PropKit.TONGYONGAPI)) + .header("appid",PropKit.getProp(PropKit.APPID)) + .header("token",token) + .header("userid",encryptUserid) + // .header("skipsession", "1") + .form(params) + .execute().body(); +// Map headermap = new HashMap(); +// headermap.put("appid",APPID); +// headermap.put("token",token); +// headermap.put("userid",encryptUserid); +// String data = HttpClientUtil.doPostFORM(address + api,headermap,params); + System.out.println("PostRestfulby():"+data); + return data; + } + + public static String PostRestfulbyForm(String requestId, String userid) throws IOException { + + //ECOLOGY返回的token + String token = (String) Getoken(PropKit.getProp(PropKit.NEWADDRESS)).get("token"); + + //封装请求头参数 + RSA rsa = new RSA(null, PropKit.getProp(PropKit.NEWSPK)); + //对用户信息进行加密传输,暂仅支持传输OA用户ID + String encryptUserid = rsa.encryptBase64(userid,CharsetUtil.CHARSET_UTF_8,KeyType.PublicKey); + + Map m = new LinkedHashMap(); + m.put("requestId", requestId);//流程ID + + //调用ECOLOGY系统接口 + String data = HttpRequest.post(PropKit.getProp(PropKit.ADDRESS) + "/api/workflow/paService/submitRequest") + .header("appid",PropKit.getProp(PropKit.APPID)) + .header("token",token) + .header("userid",encryptUserid) + // .header("skipsession", "1") + .form(m) + .execute().body(); + // Map headermap = new HashMap(); + // headermap.put("appid",APPID); + // headermap.put("token",token); + // headermap.put("userid",encryptUserid); + // String data = HttpClientUtil.doPostFORM(address + api,headermap,params); + System.out.println("PostRestfulbyForm():"+data); + return data; + } + +// public static void getSub(){ +// String returnSTR = PostRestful("http://110.10.2.39","/api/hrm/resful/getHrmUserInfoWithPage",null,"1"); +// System.out.println(returnSTR); +// } +// +// /** +// * 消息接口 +// */ +// private static void sendMsg(){ +// PostRestfulbyForm("http://127.0.0.1:8888","/api/ec/dev/message/sendCustomMessageSingle",sendCustomMessageSingle(),"1"); +// } + + + /** + * 创建流程 + */ + public static Map createWF(FormDataVo formDataVo, JSONArray faths) throws NoSuchFieldException, IOException { + + //主表信息 + List mainlist = new ArrayList(); + //客户名称 + Map mainmap1 = new HashMap(); + mainmap1.put("fieldName","khmc");//OA字段名-出差类型(下拉框) + mainmap1.put("fieldValue",formDataVo.getFieldData("客户id").getStringValue());//字段值(下拉框选项值) + mainlist.add(mainmap1); + + //标题 + Map mainmap2 = new HashMap(); + mainmap2.put("fieldName","bt");//OA字段名-同行人员(多人力资源浏览框) + mainmap2.put("fieldValue",formDataVo.getFieldData("表头").getStringValue());//字段值(OA人员ID,多个以英文逗号分隔) + mainlist.add(mainmap2); + + //单号 + Map mainmap3 = new HashMap(); + mainmap3.put("fieldName","dh"); + mainmap3.put("fieldValue",formDataVo.getFieldData("流水号").getStringValue()); + mainlist.add(mainmap3); + + //申请日期 + Map mainmap4 = new HashMap(); + mainmap4.put("fieldName","sqrq"); + mainmap4.put("fieldValue",formDataVo.getFieldData("填表日期").getStringValue()); + mainlist.add(mainmap4); + + //投入金额 + Map mainmap5 = new HashMap(); + mainmap5.put("fieldName","trje"); + mainmap5.put("fieldValue",formDataVo.getFieldData("投入金额").getStringValue()); + mainlist.add(mainmap5); + + //备案意见 + Map mainmap6 = new HashMap(); + mainmap6.put("fieldName","bayj"); + mainmap6.put("fieldValue",formDataVo.getFieldData("备案意见").getStringValue()); + mainlist.add(mainmap6); + + //备案简述 + Map mainmap9 = new HashMap(); + mainmap9.put("fieldName","bajs"); + mainmap9.put("fieldValue",formDataVo.getFieldData("备案简述").getStringValue()); + mainlist.add(mainmap9); + + //分公司 + Map mainmap8 = new HashMap(); + mainmap8.put("fieldName","ssschxsgs"); + mainmap8.put("fieldValue",formDataVo.getFieldData("分公司").getStringValue()); + mainlist.add(mainmap8); + + //经办人 + Map mainmap10 = new HashMap(); + mainmap10.put("fieldName","jbr"); + mainmap10.put("fieldValue",formDataVo.getFieldData("经办人").getStringValue()); + mainlist.add(mainmap10); + + //备案类型 + Map mainmap11 = new HashMap(); + mainmap11.put("fieldName","balx"); + mainmap11.put("fieldValue","0"); + mainlist.add(mainmap11); + + //附件 + if(faths.size() > 0) { + Map mainmap7 = new HashMap(); + mainmap7.put("fieldName","banr"); + List fujianValue = new ArrayList(); + for (int i = 0; i < faths.size(); i++) { + Map fath = (Map) faths.get(i); + Map fujianMap = new HashMap(); + fujianMap.put("filePath", fath.get("url")); + fujianMap.put("fileName", fath.get("name")); + fujianValue.add(fujianMap); + } + + mainmap7.put("fieldValue",fujianValue); + mainlist.add(mainmap7); + } + + //接口主参数 + Map m = new LinkedHashMap(); + //流程ID + m.put("workflowId",PropKit.getProp(PropKit.NEWWORKFLOWID)); + //流程标题 + m.put("requestName",formDataVo.getColSummary().getSubject()); + //主表 + m.put("mainData",JSONUtil.toJsonStr(mainlist)); + return m; + + } + + /** + * 创建流程 + */ + public static Map createWF2(Map data, JSONArray faths) throws NoSuchFieldException, IOException { + + //主表信息 + List mainlist = new ArrayList(); + + //客户名称 + Map mainmap1 = new HashMap(); + mainmap1.put("fieldName","khmc");//OA字段名-出差类型(下拉框) + mainmap1.put("fieldValue",data.get("khmc"));//字段值(下拉框选项值) + mainlist.add(mainmap1); + + //标题 + Map mainmap2 = new HashMap(); + mainmap2.put("fieldName","bt");//OA字段名-同行人员(多人力资源浏览框) + mainmap2.put("fieldValue",data.get("bt"));//字段值(OA人员ID,多个以英文逗号分隔) + mainlist.add(mainmap2); + + //单号 + Map mainmap3 = new HashMap(); + mainmap3.put("fieldName","dh"); + mainmap3.put("fieldValue",data.get("dh")); + mainlist.add(mainmap3); + + //申请日期 + Map mainmap4 = new HashMap(); + mainmap4.put("fieldName","sqrq"); + mainmap4.put("fieldValue",data.get("sqrq")); + mainlist.add(mainmap4); + + //投入金额 + Map mainmap5 = new HashMap(); + mainmap5.put("fieldName","trje"); + mainmap5.put("fieldValue",data.get("trje")); + mainlist.add(mainmap5); + + //备案意见 + Map mainmap6 = new HashMap(); + mainmap6.put("fieldName","bayj"); + mainmap6.put("fieldValue",data.get("bayj")); + mainlist.add(mainmap6); + + //备案简述 + Map mainmap9 = new HashMap(); + mainmap9.put("fieldName","bajs"); + mainmap9.put("fieldValue",data.get("bajs")); + mainlist.add(mainmap9); + + //分公司 + Map mainmap8 = new HashMap(); + mainmap8.put("fieldName","ssschxsgs"); + mainmap8.put("fieldValue",data.get("ssschxsgs")); + mainlist.add(mainmap8); + + //经办人 + Map mainmap10 = new HashMap(); + mainmap10.put("fieldName","jbr"); + mainmap10.put("fieldValue",data.get("jbr")); + mainlist.add(mainmap10); + + + + //附件 + if(faths.size() > 0) { + Map mainmap7 = new HashMap(); + mainmap7.put("fieldName","banr"); + List fujianValue = new ArrayList(); + for (int i = 0; i < faths.size(); i++) { + Map fath = (Map) faths.get(i); + Map fujianMap = new HashMap(); + fujianMap.put("filePath", fath.get("url")); + fujianMap.put("fileName", fath.get("name")); + fujianValue.add(fujianMap); + } + + mainmap7.put("fieldValue",fujianValue); + mainlist.add(mainmap7); + } + + //接口主参数 + Map m = new LinkedHashMap(); + //流程ID + m.put("workflowId",PropKit.getProp(PropKit.NEWWORKFLOWID)); + //流程标题 + m.put("requestName",data.get("lcbt")); + //主表 + m.put("mainData",JSONUtil.toJsonStr(mainlist)); + + System.out.println("m:"+m); + return m; + + } + + /** + * 发送消息,参数封装 + * @return + */ + public static Map sendCustomMessageSingle() { + + Map map = new HashMap<>(); + + // map.put("code", "1149"); // 消息来源,新建消息来源获取code 请查看文档第四大点补充 + map.put("code", "1207"); // 消息来源,新建消息来源获取code 请查看文档第四大点补充 + map.put("userIdList", "1"); // userIdList参数 userIdList 接收人OA系统id / loginIdList 接收人登录名 / workCodeList 接收人编号 / lastNameList 接收人姓名(任选一个填入即可,以逗号分隔) + // map.put("loginIdList","zhangsan,wangwu" ); //接收人登录名 + // map.put("workCodeList","WS01640,WS01641" ); //接收人编号 + // map.put("lastNameList","张三,王五" ); //接收人姓名 + map.put("creater", "1"); //creater的值 创建人OA系统id / 创建人登录名 / 创建人编号 / 创建人姓名(对应接收人所传入的形式) + // map.put("creater","zhangsan"); + // map.put("creater","WS01640"); + // map.put("creater","张三"); + map.put("title", "接口创建的消息"); + map.put("context", "接口创建的消息,看下内容是否进来了"); + String linkUrl = "http://118.190.132.210:9999/custom_renfu.html?param=corp=ding58007d3a66cc643bacaaa37764f94726--flag=study_project" + + "--projectId=1826492840843284480--ticket=2u+cX2Bl4KPQ89QwNOG0VC/YmAv" + + "/Sa5pu92FXTgUfGDZlhmqdVyNLtJVcZv3Pe7teWbqGAJhufN8Y4tpIW6c1Q=="; + map.put("linkUrl", linkUrl); + map.put("linkMobileUrl", "http://www.baidu.com"); + + // map.put("targetId","559|id22"); //消息来源code +“|”+业务id 消息需要打上已处理标记 + // map.put("bizState","0"); //0 表示消息初始状态是待处理 消息需要打上已处理标记 + + return map; + } + + public static String getAPPID() { + return APPID; + } + + public static void setAPPID(String APPID) { + FanWeiNewUtil.APPID = APPID; + } + + public static String getPrivateKey() { + return privateKey; + } + + public static void setPrivateKey(String privateKey) { + FanWeiNewUtil.privateKey = privateKey; + } + + public static String getPublicKey() { + return publicKey; + } + + public static void setPublicKey(String publicKey) { + FanWeiNewUtil.publicKey = publicKey; + } +} diff --git a/src/com/seeyon/apps/daohuaxiangSys/jkts/util/FanWeiUtil.java b/src/com/seeyon/apps/daohuaxiangSys/jkts/util/FanWeiUtil.java new file mode 100644 index 0000000..54f8d89 --- /dev/null +++ b/src/com/seeyon/apps/daohuaxiangSys/jkts/util/FanWeiUtil.java @@ -0,0 +1,415 @@ +package com.seeyon.apps.daohuaxiangSys.jkts.util; + +import cn.hutool.core.util.CharsetUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.crypto.asymmetric.KeyType; +import cn.hutool.crypto.asymmetric.RSA; +import cn.hutool.http.HttpRequest; +import cn.hutool.json.JSONUtil; +import com.seeyon.apps.ext.workflow.vo.FormDataVo; +import org.songjian.utils.json.JSONArray; + +import java.io.IOException; +import java.util.*; + +/** + * 描述: + * + * @author alexander + * @version 1.0 + * @date 2023/8/25 09:16 星期五 + */ +public class FanWeiUtil { + /** + * 模拟缓存服务 + */ + private static final Map SYSTEM_CACHE = new HashMap<>(); + + private static String privateKey = ""; + private static String publicKey = ""; + + /** + * ecology系统发放的授权许可证(appid) + * ce14aaca-fa08-4eb7-9f10-c2294285c4ea + */ + private static String APPID = "e47a15d2-95f2-4bf6-a546-8076ce445a19"; + + + /** + * 第一步: + * + * 调用ecology注册接口,根据appid进行注册,将返回服务端公钥和Secret信息 + */ + public static Map Regist(String address){ + + //获取当前系统RSA加密的公钥 + RSA rsa = new RSA(); + if(publicKey.equals("")) { + publicKey = rsa.getPublicKeyBase64(); + } + if(privateKey.equals("")) { + privateKey = rsa.getPrivateKeyBase64(); + } + + System.out.println("publicKey:"+publicKey+" privateKey:"+privateKey); + // 客户端RSA私钥 + SYSTEM_CACHE.put("LOCAL_PRIVATE_KEY",privateKey); + // 客户端RSA公钥 + SYSTEM_CACHE.put("LOCAL_PUBLIC_KEY",publicKey); + + //调用ECOLOGY系统接口进行注册 + String data = HttpRequest.post(address + "/api/ec/dev/auth/regist") + .header("appid",APPID) + .header("cpk",publicKey) + .timeout(2000) + .execute().body(); + + // 打印ECOLOGY响应信息 + System.out.println("Regist():"+data); + Map datas = JSONUtil.parseObj(data); + + //ECOLOGY返回的系统公钥 + SYSTEM_CACHE.put("SERVER_PUBLIC_KEY", StrUtil.nullToEmpty((String)datas.get("spk"))); + //ECOLOGY返回的系统密钥 + SYSTEM_CACHE.put("SERVER_SECRET",StrUtil.nullToEmpty((String)datas.get("secrit"))); + return datas; + } + + + + /** + * 第二步: + * + * 通过第一步中注册系统返回信息进行获取token信息 + */ + public static Map Getoken(String address) throws IOException { + // 从系统缓存或者数据库中获取ECOLOGY系统公钥和Secret信息 + String secret = PropKit.getProp(PropKit.SECRET); + String spk = PropKit.getProp(PropKit.SPK); + + + // 公钥加密,所以RSA对象私钥为null + RSA rsa = new RSA(null,spk); + //对秘钥进行加密传输,防止篡改数据 + String encryptSecret = rsa.encryptBase64(secret, CharsetUtil.CHARSET_UTF_8, KeyType.PublicKey); + + //调用ECOLOGY系统接口进行注册 + String data = HttpRequest.post(address+ "/api/ec/dev/auth/applytoken") + .header("appid",PropKit.getProp(PropKit.APPID)) + .header("secret",encryptSecret) + .header("time","3600") + .execute().body(); + + System.out.println("Getoken():"+data); + Map datas = JSONUtil.parseObj(data); + + //ECOLOGY返回的token + // TODO 为Token缓存设置过期时间 + SYSTEM_CACHE.put("SERVER_TOKEN",StrUtil.nullToEmpty((String)datas.get("token"))); + + return datas; + } + + /** + * 第三步: + * + * 调用ecology系统的rest接口,请求头部带上token和用户标识认证信息 + * + * @param params 请求参数map,创建流程之类的post接口是以模拟form表单提交的方式,其他get接口以json字符串方式提交 + * + * 注意:ECOLOGY系统所有POST接口调用请求头请设置 "Content-Type","application/x-www-form-urlencoded; charset=utf-8" + */ + public static String PostRestful(Map params, String userid) throws IOException { + + //ECOLOGY返回的token + String token = (String) Getoken(PropKit.getProp(PropKit.ADDRESS)).get("token"); + + + //封装请求头参数 + RSA rsa = new RSA(null, PropKit.getProp(PropKit.SPK)); + //对用户信息进行加密传输,暂仅支持传输OA用户ID + String encryptUserid = rsa.encryptBase64(userid,CharsetUtil.CHARSET_UTF_8,KeyType.PublicKey); + + //调用ECOLOGY系统接口 + String data = HttpRequest.post(PropKit.getProp(PropKit.ADDRESS) + PropKit.getProp(PropKit.TONGYONGAPI)) + .header("appid",PropKit.getProp(PropKit.APPID)) + .header("token",token) + .header("userid",encryptUserid) + // .header("skipsession", "1") + .form(params) + .execute().body(); +// Map headermap = new HashMap(); +// headermap.put("appid",APPID); +// headermap.put("token",token); +// headermap.put("userid",encryptUserid); +// String data = HttpClientUtil.doPostFORM(address + api,headermap,params); + System.out.println("PostRestfulby():"+data); + return data; + } + public static String PostRestfulbyForm(String requestId, String userid) throws IOException { + + //ECOLOGY返回的token + String token = (String) Getoken(PropKit.getProp(PropKit.ADDRESS)).get("token"); + + //封装请求头参数 + RSA rsa = new RSA(null, PropKit.getProp(PropKit.SPK)); + //对用户信息进行加密传输,暂仅支持传输OA用户ID + String encryptUserid = rsa.encryptBase64(userid,CharsetUtil.CHARSET_UTF_8,KeyType.PublicKey); + + Map m = new LinkedHashMap(); + m.put("requestId", requestId);//流程ID + + //调用ECOLOGY系统接口 + String data = HttpRequest.post(PropKit.getProp(PropKit.ADDRESS) + "/api/workflow/paService/submitRequest") + .header("appid",PropKit.getProp(PropKit.APPID)) + .header("token",token) + .header("userid",encryptUserid) + // .header("skipsession", "1") + .form(m) + .execute().body(); + // Map headermap = new HashMap(); + // headermap.put("appid",APPID); + // headermap.put("token",token); + // headermap.put("userid",encryptUserid); + // String data = HttpClientUtil.doPostFORM(address + api,headermap,params); + System.out.println("PostRestfulbyForm():"+data); + return data; + } + +// public static void getSub(){ +// String returnSTR = PostRestful("http://110.10.2.39","/api/hrm/resful/getHrmUserInfoWithPage",null,"1"); +// System.out.println(returnSTR); +// } +// +// /** +// * 消息接口 +// */ +// private static void sendMsg(){ +// PostRestfulbyForm("http://127.0.0.1:8888","/api/ec/dev/message/sendCustomMessageSingle",sendCustomMessageSingle(),"1"); +// } + + /** + * 创建流程 + */ + public static Map createWF(FormDataVo formDataVo, JSONArray faths) throws NoSuchFieldException, IOException { + + //主表信息 + List mainlist = new ArrayList(); + //客户名称 + Map mainmap1 = new HashMap(); + mainmap1.put("fieldName","khmc");//OA字段名-出差类型(下拉框) + mainmap1.put("fieldValue",formDataVo.getFieldData("客户id").getStringValue());//字段值(下拉框选项值) + mainlist.add(mainmap1); + + //标题 + Map mainmap2 = new HashMap(); + mainmap2.put("fieldName","bt");//OA字段名-同行人员(多人力资源浏览框) + mainmap2.put("fieldValue",formDataVo.getFieldData("表头").getStringValue());//字段值(OA人员ID,多个以英文逗号分隔) + mainlist.add(mainmap2); + + //单号 + Map mainmap3 = new HashMap(); + mainmap3.put("fieldName","dh"); + mainmap3.put("fieldValue",formDataVo.getFieldData("流水号").getStringValue()); + mainlist.add(mainmap3); + + //申请日期 + Map mainmap4 = new HashMap(); + mainmap4.put("fieldName","sqrq"); + mainmap4.put("fieldValue",formDataVo.getFieldData("填表日期").getStringValue()); + mainlist.add(mainmap4); + + //投入金额 + Map mainmap5 = new HashMap(); + mainmap5.put("fieldName","trje"); + mainmap5.put("fieldValue",formDataVo.getFieldData("投入金额").getStringValue()); + mainlist.add(mainmap5); + + //备案意见 + Map mainmap6 = new HashMap(); + mainmap6.put("fieldName","bayj"); + mainmap6.put("fieldValue",formDataVo.getFieldData("备案意见").getStringValue()); + mainlist.add(mainmap6); + + //分公司 + Map mainmap8 = new HashMap(); + mainmap8.put("fieldName","fgs"); + mainmap8.put("fieldValue",formDataVo.getFieldData("分公司").getStringValue()); + mainlist.add(mainmap8); + + //备案简述 + Map mainmap11 = new HashMap(); + mainmap11.put("fieldName","bajs"); + mainmap11.put("fieldValue",formDataVo.getFieldData("备案简述").getStringValue()); + mainlist.add(mainmap11); + + //备案类型 + Map mainmap12 = new HashMap(); + mainmap12.put("fieldName","balx"); + mainmap12.put("fieldValue","0"); + mainlist.add(mainmap12); + + //附件 + if(faths.size() > 0) { + Map mainmap7 = new HashMap(); + mainmap7.put("fieldName","banr"); + List fujianValue = new ArrayList(); + for (int i = 0; i < faths.size(); i++) { + Map fath = (Map) faths.get(i); + Map fujianMap = new HashMap(); + fujianMap.put("filePath", fath.get("url")); + fujianMap.put("fileName", fath.get("name")); + fujianValue.add(fujianMap); + } + + mainmap7.put("fieldValue",fujianValue); + mainlist.add(mainmap7); + } + + //接口主参数 + Map m = new LinkedHashMap(); + //流程ID + m.put("workflowId",PropKit.getProp(PropKit.WORKFLOWID)); + //流程标题 + m.put("requestName",formDataVo.getColSummary().getSubject()); + //主表 + m.put("mainData",JSONUtil.toJsonStr(mainlist)); + return m; + + } + + + /** + * 创建流程 + */ + public static Map createWF2(Map data, JSONArray faths) throws NoSuchFieldException, IOException { + + //主表信息 + List mainlist = new ArrayList(); + //客户名称 + Map mainmap1 = new HashMap(); + mainmap1.put("fieldName","khmc");//OA字段名-出差类型(下拉框) + mainmap1.put("fieldValue",data.get("khmc"));//字段值(下拉框选项值) + mainlist.add(mainmap1); + + //标题 + Map mainmap2 = new HashMap(); + mainmap2.put("fieldName","bt");//OA字段名-同行人员(多人力资源浏览框) + mainmap2.put("fieldValue",data.get("bt"));//字段值(OA人员ID,多个以英文逗号分隔) + mainlist.add(mainmap2); + + //单号 + Map mainmap3 = new HashMap(); + mainmap3.put("fieldName","dh"); + mainmap3.put("fieldValue",data.get("dh")); + mainlist.add(mainmap3); + + //申请日期 + Map mainmap4 = new HashMap(); + mainmap4.put("fieldName","sqrq"); + mainmap4.put("fieldValue",data.get("sqrq")); + mainlist.add(mainmap4); + + //投入金额 + Map mainmap5 = new HashMap(); + mainmap5.put("fieldName","trje"); + mainmap5.put("fieldValue",data.get("trje")); + mainlist.add(mainmap5); + + //备案意见 + Map mainmap6 = new HashMap(); + mainmap6.put("fieldName","bayj"); + mainmap6.put("fieldValue",data.get("bayj")); + mainlist.add(mainmap6); + + //分公司 + Map mainmap8 = new HashMap(); + mainmap8.put("fieldName","fgs"); + mainmap8.put("fieldValue",data.get("fgs")); + mainlist.add(mainmap8); + + //附件 + if(faths.size() > 0) { + Map mainmap7 = new HashMap(); + mainmap7.put("fieldName","banr"); + List fujianValue = new ArrayList(); + for (int i = 0; i < faths.size(); i++) { + Map fath = (Map) faths.get(i); + Map fujianMap = new HashMap(); + fujianMap.put("filePath", fath.get("url")); + fujianMap.put("fileName", fath.get("name")); + fujianValue.add(fujianMap); + } + + mainmap7.put("fieldValue",fujianValue); + mainlist.add(mainmap7); + } + + //接口主参数 + Map m = new LinkedHashMap(); + //流程ID + m.put("workflowId",PropKit.getProp(PropKit.WORKFLOWID)); + //流程标题 + m.put("requestName",data.get("lcbt")); + //主表 + m.put("mainData",JSONUtil.toJsonStr(mainlist)); + return m; + + } + + /** + * 发送消息,参数封装 + * @return + */ + public static Map sendCustomMessageSingle() { + + Map map = new HashMap<>(); + + // map.put("code", "1149"); // 消息来源,新建消息来源获取code 请查看文档第四大点补充 + map.put("code", "1207"); // 消息来源,新建消息来源获取code 请查看文档第四大点补充 + map.put("userIdList", "1"); // userIdList参数 userIdList 接收人OA系统id / loginIdList 接收人登录名 / workCodeList 接收人编号 / lastNameList 接收人姓名(任选一个填入即可,以逗号分隔) + // map.put("loginIdList","zhangsan,wangwu" ); //接收人登录名 + // map.put("workCodeList","WS01640,WS01641" ); //接收人编号 + // map.put("lastNameList","张三,王五" ); //接收人姓名 + map.put("creater", "1"); //creater的值 创建人OA系统id / 创建人登录名 / 创建人编号 / 创建人姓名(对应接收人所传入的形式) + // map.put("creater","zhangsan"); + // map.put("creater","WS01640"); + // map.put("creater","张三"); + map.put("title", "接口创建的消息"); + map.put("context", "接口创建的消息,看下内容是否进来了"); + String linkUrl = "http://118.190.132.210:9999/custom_renfu.html?param=corp=ding58007d3a66cc643bacaaa37764f94726--flag=study_project" + + "--projectId=1826492840843284480--ticket=2u+cX2Bl4KPQ89QwNOG0VC/YmAv" + + "/Sa5pu92FXTgUfGDZlhmqdVyNLtJVcZv3Pe7teWbqGAJhufN8Y4tpIW6c1Q=="; + map.put("linkUrl", linkUrl); + map.put("linkMobileUrl", "http://www.baidu.com"); + + // map.put("targetId","559|id22"); //消息来源code +“|”+业务id 消息需要打上已处理标记 + // map.put("bizState","0"); //0 表示消息初始状态是待处理 消息需要打上已处理标记 + + return map; + } + + public static String getAPPID() { + return APPID; + } + + public static void setAPPID(String APPID) { + FanWeiUtil.APPID = APPID; + } + + public static String getPrivateKey() { + return privateKey; + } + + public static void setPrivateKey(String privateKey) { + FanWeiUtil.privateKey = privateKey; + } + + public static String getPublicKey() { + return publicKey; + } + + public static void setPublicKey(String publicKey) { + FanWeiUtil.publicKey = publicKey; + } +} diff --git a/src/com/seeyon/apps/daohuaxiangSys/jkts/util/InterfaceListUtil.java b/src/com/seeyon/apps/daohuaxiangSys/jkts/util/InterfaceListUtil.java new file mode 100644 index 0000000..cafb52e --- /dev/null +++ b/src/com/seeyon/apps/daohuaxiangSys/jkts/util/InterfaceListUtil.java @@ -0,0 +1,346 @@ +package com.seeyon.apps.daohuaxiangSys.jkts.util; + +import java.io.BufferedInputStream; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.io.UnsupportedEncodingException; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLConnection; +import java.text.MessageFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Properties; + +import org.apache.commons.httpclient.Header; +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.HttpException; +import org.apache.commons.httpclient.HttpStatus; +import org.apache.commons.httpclient.methods.PostMethod; +import org.apache.commons.httpclient.methods.RequestEntity; +import org.apache.commons.httpclient.methods.StringRequestEntity; +import org.apache.http.HttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.util.EntityUtils; +import org.springframework.core.io.support.PropertiesLoaderUtils; + +import com.alibaba.fastjson.JSONObject; + +/** + * 接口调用工具类 + * 2021-06-08 + * @author huangzhengguo + * + */ +public class InterfaceListUtil { + + /** + * 获取一个token + * + + * @return + * @throws IOException + * @throws FileNotFoundException + */ + public String getToken(String loginName) throws FileNotFoundException, IOException { + String address = ""; + String token = ""; + if("".equals(loginName)) { + address = PropKit.getProp(PropKit.OATOKENURL)+"/"+PropKit.getProp(PropKit.RESTNAME)+"/"+PropKit.getProp(PropKit.RESTPASSWORD); + }else { + address = PropKit.getProp(PropKit.OATOKENURL)+"/"+PropKit.getProp(PropKit.RESTNAME)+"/"+PropKit.getProp(PropKit.RESTPASSWORD)+"?loginName="+loginName; + } + HttpURLConnection connection = (HttpURLConnection) new URL(address).openConnection(); + connection.setRequestMethod("GET"); + int responseCode = connection.getResponseCode(); + if (responseCode == HttpURLConnection.HTTP_OK) { + BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); + String inputLine; + StringBuffer response = new StringBuffer(); + while ((inputLine = in.readLine()) != null) { + response.append(inputLine); + } + in.close(); + String result = response.toString(); + if(result.contains("{")) { + JSONObject jsObj = JSONObject.parseObject(result); + System.out.println(jsObj); + token = jsObj.get("id").toString(); + }else { + token = result; + } + System.out.println(token); + } else { + System.out.println("GET request not worked"); + } + return token; + } + + /** + * 调用get接口 + * + * @param par 拼接在url中的参数 + * @param strUrl 需要调用的url对应的配置文件的key + * @return + */ + public String doGet(String par, String strUrl, String token) { + String address = MessageFormat.format(getProperties(strUrl), par + "?token=") + token; + + DefaultHttpClient client = new DefaultHttpClient(); + String result = ""; + HttpGet get = new HttpGet(address); + try { + HttpResponse res = client.execute(get); + if (res.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { + result = EntityUtils.toString(res.getEntity()); + } + } catch (Exception e) { + throw new RuntimeException(e); + } +// JSONObject jsObj = JSONObject.parseObject(result); + return result; + + } + + /** + * 调用post接口 + * + * @param str 调用接口传递的参数json + * @param urlStr 需要调用的url对应的参数文件中的编码 + * @return + */ + public JSONObject doPost(String str, String urlStr,String token) { + HttpURLConnection connection = null; + InputStream is = null; + OutputStream os = null; + BufferedReader br = null; + String result = null; + try { +// String token = getToken(getProperties("restUserName"), getProperties("restPassword")); + URL url = new URL(getProperties(urlStr) + "?token=" + token); + // 通过远程url连接对象打开连接 + connection = (HttpURLConnection) url.openConnection(); + // 设置连接请求方式 + connection.setRequestMethod("POST"); + // 设置连接主机服务器超时时间:15000毫秒 + connection.setConnectTimeout(15000); + // 设置读取主机服务器返回数据超时时间:60000毫秒 + connection.setReadTimeout(60000); + + // 默认值为:false,当向远程服务器传送数据/写数据时,需要设置为true + connection.setDoOutput(true); + // 默认值为:true,当前向远程服务读取数据时,设置为true,该参数可有可无 + connection.setDoInput(true); + // 设置传入参数的格式:请求参数应该是 name1=value1&name2=value2 的形式。 + connection.setRequestProperty("Content-Type", "application/json"); + // 通过连接对象获取一个输出流 + os = connection.getOutputStream(); + // 通过输出流对象将参数写出去/传输出去,它是通过字节数组写出的 + if (!("".equals(str) || str == null)) { + os.write(str.getBytes("UTF-8")); + } + // 连接对象获取一个输入流,向远程读取 + if (connection.getResponseCode() == 200) { + + is = connection.getInputStream(); + // 对输入流对象进行包装:charset根据工作项目组的要求来设置 + br = new BufferedReader(new InputStreamReader(is, "UTF-8")); + + StringBuffer sbf = new StringBuffer(); + String temp = null; + // 循环遍历一行一行读取数据 + while ((temp = br.readLine()) != null) { + sbf.append(temp); + sbf.append("\r\n"); + } + result = sbf.toString(); + } + } catch (MalformedURLException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } finally { + // 关闭资源 + if (null != br) { + try { + br.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + if (null != os) { + try { + os.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + if (null != is) { + try { + is.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + // 断开与远程地址url的连接 + connection.disconnect(); + } + JSONObject json = JSONObject.parseObject(result); + return json; + + } + + /** + * 获取指定参数文件的值(pa.properties) + * + * @param str 参数文件中的key + * @return + */ + public String getProperties(String str) { + Properties properties = null; + try { + properties = PropertiesLoaderUtils.loadAllProperties("pa.properties"); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return (String) properties.get(str); + } + + /** + * 调用Soap接口 对接平台使用 + * @param action 平台接口中的方法参数名称 + * @param xml 传递平台的XML数据参数 + * @return 返回调取soap接口后接口的返回值(未处理) + * @throws HttpException + * @throws IOException + */ + public String doSoap(String action, String xml,String id) throws HttpException, IOException { + String wsdl = ""; + if("createDepartment".equals(action)||"updateDepartment".equals(action)) { + wsdl = getProperties("DeptWsdl"); + }else if("createPractitioner".equals(action)||"updatePractitioner".equals(action)) { + wsdl = getProperties("MemberWsdl"); + } + System.out.println("wsdl:"+wsdl); + int timeout = 10000; + + // 构造soap请求信息 + StringBuffer sb = new StringBuffer(""); + sb.append( + ""); + sb.append(""); + sb.append(""); + sb.append(" "); + sb.append("" + action + "" + xml + ""); + sb.append(""); + sb.append(""); + sb.append(""); + + // HttpClient发送SOAP请求 +// System.out.println("HttpClient 发送SOAP请求"); + HttpClient client = new HttpClient(); + PostMethod postMethod = new PostMethod(wsdl); + Header header = new Header(); + // 设置连接超时 + client.getHttpConnectionManager().getParams().setConnectionTimeout(timeout); + // 设置读取时间超时 + client.getHttpConnectionManager().getParams().setSoTimeout(timeout); + // 然后把Soap请求数据添加到PostMethod中 + RequestEntity requestEntity = null; + try { + requestEntity = new StringRequestEntity(sb.toString(), "text/xml", "UTF-8"); + } catch (UnsupportedEncodingException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + // 设置请求头部,否则可能会报 “no SOAPAction header” 的错误 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date businessTime = new Date(); + Date operationTime = new Date(); + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMddHHmmss"); + Date root = new Date(); + String rootId = sdf1.format(root); + postMethod.setRequestHeader("SOAPAction", ""); + postMethod.setRequestHeader("Content-Type", "application/fhir+json"); + postMethod.setRequestHeader("rootId", rootId); + postMethod.setRequestHeader("token", id); + postMethod.setRequestHeader("domain", "OA"); + postMethod.setRequestHeader("businessTime", sdf.format(businessTime)); + postMethod.setRequestHeader("key", "806c1571-35de-41a2-b3c9-06ae5474d43a"); + postMethod.setRequestHeader("operationTime", sdf.format(operationTime)); + // 设置请求体 + postMethod.setRequestEntity(requestEntity); + int status = client.executeMethod(postMethod); + // 打印请求状态码 +// System.out.println("status:" + status); + // 获取响应体输入流 + InputStream is = postMethod.getResponseBodyAsStream(); + // 获取请求结果字符串 + byte[] bytes = new byte[is.available()]; + is.read(bytes); + String result = new String(bytes); + + return result; + } + + /** + * 下载文件到指定目录 + * @param dowUrl:http地址 + * @param dowPath:指定目录 + * */ + public String download(String dowUrl, String dowPath){ + try { +// log.info("下载地址是:"+dowUrl+",存储地址是:"+dowPath); + URL url = new URL(dowUrl); + + URLConnection urlConnection = url.openConnection(); + + HttpURLConnection httpURLConnection = (HttpURLConnection) urlConnection;// http的连接类 + + //String contentType = httpURLConnection.getContentType();//请求类型,可用来过滤请求, + + httpURLConnection.setConnectTimeout(1000*5);//设置超时 + + httpURLConnection.setRequestMethod("GET");//设置请求方式,默认是GET + + httpURLConnection.setRequestProperty("Charset", "UTF-8");// 设置字符编码 + + httpURLConnection.connect();// 打开连接 + + BufferedInputStream bin = new BufferedInputStream(httpURLConnection.getInputStream()); + + String path = dowPath;// 指定存放位置 + File filed = new File(path); + + OutputStream out = new FileOutputStream(filed); + int size = 0; + + byte[] b = new byte[2048]; + //把输入流的文件读取到字节数据b中,然后输出到指定目录的文件 + while ((size = bin.read(b)) != -1) { + out.write(b, 0, size); + } + // 关闭资源 + bin.close(); + out.close(); + return "200"; + } catch (MalformedURLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return "500"; + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return "400"; + } + } +} diff --git a/src/com/seeyon/apps/daohuaxiangSys/jkts/util/JdbcUtil.java b/src/com/seeyon/apps/daohuaxiangSys/jkts/util/JdbcUtil.java new file mode 100644 index 0000000..b990bdf --- /dev/null +++ b/src/com/seeyon/apps/daohuaxiangSys/jkts/util/JdbcUtil.java @@ -0,0 +1,82 @@ +package com.seeyon.apps.daohuaxiangSys.jkts.util; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; + + +/** + * jdbc工具类 + * 2021-06-08 + * @author huangzhengguo + * + */ + public class JdbcUtil { + private static String url; + private static String user; + private static String password; + + static { + // 使用properties加载属性文件 + //Properties prop = new Properties(); + //String ip = GetIP.getIp(); + try { + //InputStream is = JdbcUtil.class.getClassLoader().getResourceAsStream("pa.properties"); + //prop.load(is); + // 注册驱动(获取属性文件中的数据) + String driverClassName = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; + Class.forName(driverClassName); + // 获取属性文件中的url,username,password + //System.out.println("ip:" + ip); + url = "jdbc:sqlserver://192.168.0.250:1433;databaseName=U8CLOUD"; + user = "sa"; + password = "Sa123456"; + } catch (Exception e) { + e.printStackTrace(); + } + } + + // 获取数据库连接 + public static Connection getConnection() { + Connection conn = null; + try { + conn = DriverManager.getConnection(url, user, password); + } catch (SQLException e) { + e.printStackTrace(); + } + return conn; + } + + // 释放资源 + public static void close(Connection conn, Statement stat, ResultSet rs) { + close(conn, stat); + if (rs != null) { + try { + rs.close(); + } catch (SQLException e) { + e.printStackTrace(); + } + } + } + + // 释放资源 + public static void close(Connection conn, Statement stat) { + if (conn != null) { + try { + conn.close(); + } catch (SQLException e) { + e.printStackTrace(); + } + } + if (stat != null) { + try { + stat.close(); + } catch (SQLException e) { + e.printStackTrace(); + } + } + } + +} diff --git a/src/com/seeyon/apps/daohuaxiangSys/jkts/util/PropKit.java b/src/com/seeyon/apps/daohuaxiangSys/jkts/util/PropKit.java new file mode 100644 index 0000000..24666d6 --- /dev/null +++ b/src/com/seeyon/apps/daohuaxiangSys/jkts/util/PropKit.java @@ -0,0 +1,137 @@ +package com.seeyon.apps.daohuaxiangSys.jkts.util; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.util.Properties; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 读取参数 + */ + +public class PropKit { + + private static long lastModify; + + private static ConcurrentHashMap props; + + public static final String PROFILE = "profile"; + + public static final String PAYBILLFILEURL = "paybillFileUrl"; + public static final String GENERALBILLURL = "generalbillUrl"; + public static final String TRANSFORMURL = "transformUrl"; + public static final String XCFZCANCELURL = "xcfzCancelUrl"; + public static final String SBFZCANCELURL = "sbfzCancelUrl"; + public static final String OATOKENURL = "oaTokenUrl"; + public static final String DOWURL = "dowUrl"; + public static final String JYNCFILE = "jyncFile"; + public static final String RESTNAME = "restname"; + public static final String RESTPASSWORD = "restpassword"; + public static final String ADDRESS = "address"; + public static final String TONGYONGAPI = "tongyongApi"; + public static final String APPID = "appid"; + public static final String SPK = "spk"; + public static final String WORKFLOWID = "workflowId"; + public static final String LOGINNAME = "loginName"; + public static final String SECRET = "secret"; + public static final String SQL = "sql"; + public static final String DATASQL = "dataSql"; + public static final String NEWADDRESS = "newAddress"; + public static final String NEWSPK = "newSpk"; + public static final String NEWSECRET = "newSecret"; + public static final String NEWWORKFLOWID = "newWorkflowId"; + public static final String LOGINID = "loginid"; + public static final String PWD = "pwd"; + + public static final String PROD_PAYBILLFILEURL = "prod.paybillFileUrl"; + public static final String PROD_GENERALBILLURL = "prod.generalbillUrl"; + public static final String PROD_TRANSFORMURL = "prod.transformUrl"; + public static final String PROD_XCFZCANCELURL = "prod.xcfzCancelUrl"; + public static final String PROD_SBFZCANCELURL = "prod.sbfzCancelUrl"; + public static final String PROD_OATOKENURL = "prod.oaTokenUrl"; + public static final String PROD_DOWURL = "prod.dowUrl"; + public static final String PROD_JYNCFILE = "prod.jyncFile"; + public static final String PROD_RESTNAME = "prod.restname"; + public static final String PROD_RESTPASSWORD = "prod.restpassword"; + public static final String PROD_ADDRESS = "prod.address"; + public static final String PROD_TONGYONGAPI = "prod.tongyongApi"; + public static final String PROD_APPID = "prod.appid"; + public static final String PROD_SPK = "prod.spk"; + public static final String PROD_WORKFLOWID = "prod.workflowId"; + public static final String PROD_LOGINNAME = "prod.loginName"; + public static final String PROD_SECRET = "prod.secret"; + public static final String PROD_SQL = "prod.sql"; + public static final String PROD_DATASQL = "prod.dataSql"; + public static final String PROD_NEWADDRESS = "prod.newAddress"; + public static final String PROD_NEWSPK = "prod.newSpk"; + public static final String PROD_NEWSECRET = "prod.newSecret"; + public static final String PROD_NEWWORKFLOWID = "prod.newWorkflowId"; + public static final String PROD_LOGINID = "prod.loginid"; + public static final String PROD_PWD = "prod.pwd"; + + /** + * @return + * @throws IOException + * @throws FileNotFoundException + */ + public static String getProp(String key) throws FileNotFoundException, IOException { + File f = new File(A8FolderKit.getPropFile()); + if(null == props) { + props = new ConcurrentHashMap(); + } + if(f.lastModified() != lastModify) { + /** + * huangzhengguo + * 2022-10-18 + */ + Properties prop = new Properties(); + prop.load(new FileInputStream(f)); +// Properties prop = PropertiesUtil.getFromFile((CtpLocalFile) f); + /** + * end + */ + String profile = prop.getProperty(PROFILE); + if("prod".equals(profile)) { + props.put(PAYBILLFILEURL, prop.getProperty(PROD_PAYBILLFILEURL)); + props.put(GENERALBILLURL, prop.getProperty(PROD_GENERALBILLURL)); + props.put(TRANSFORMURL, prop.getProperty(PROD_TRANSFORMURL)); + props.put(XCFZCANCELURL, prop.getProperty(PROD_XCFZCANCELURL)); + props.put(OATOKENURL, prop.getProperty(PROD_OATOKENURL)); + props.put(DOWURL, prop.getProperty(PROD_DOWURL)); + props.put(JYNCFILE, prop.getProperty(PROD_JYNCFILE)); + props.put(RESTNAME, prop.getProperty(PROD_RESTNAME)); + props.put(RESTPASSWORD, prop.getProperty(PROD_RESTPASSWORD)); + props.put(SBFZCANCELURL, prop.getProperty(PROD_SBFZCANCELURL)); + props.put(ADDRESS, prop.getProperty(PROD_ADDRESS)); + props.put(TONGYONGAPI, prop.getProperty(PROD_TONGYONGAPI)); + props.put(APPID, prop.getProperty(PROD_APPID)); + props.put(SPK, prop.getProperty(PROD_SPK)); + props.put(WORKFLOWID, prop.getProperty(PROD_WORKFLOWID)); + props.put(LOGINNAME, prop.getProperty(PROD_LOGINNAME)); + props.put(SECRET, prop.getProperty(PROD_SECRET)); + props.put(SQL, prop.getProperty(PROD_SQL)); + props.put(DATASQL, prop.getProperty(PROD_DATASQL)); + props.put(NEWADDRESS, prop.getProperty(PROD_NEWADDRESS)); + props.put(NEWSPK, prop.getProperty(PROD_NEWSPK)); + props.put(NEWSECRET, prop.getProperty(PROD_NEWSECRET)); + props.put(NEWWORKFLOWID, prop.getProperty(PROD_NEWWORKFLOWID)); + props.put(LOGINID, prop.getProperty(PROD_LOGINID)); + props.put(PWD, prop.getProperty(PROD_PWD)); + } else { + props.put(PAYBILLFILEURL, prop.getProperty(PROD_PAYBILLFILEURL)); + props.put(GENERALBILLURL, prop.getProperty(PROD_GENERALBILLURL)); + props.put(TRANSFORMURL, prop.getProperty(PROD_TRANSFORMURL)); + props.put(XCFZCANCELURL, prop.getProperty(PROD_XCFZCANCELURL)); + props.put(OATOKENURL, prop.getProperty(PROD_OATOKENURL)); + props.put(DOWURL, prop.getProperty(PROD_DOWURL)); + props.put(JYNCFILE, prop.getProperty(PROD_JYNCFILE)); + props.put(RESTNAME, prop.getProperty(PROD_RESTNAME)); + props.put(RESTPASSWORD, prop.getProperty(PROD_RESTPASSWORD)); + } + } + return props.get(key); + } + +} diff --git a/src/com/seeyon/apps/qrCodeForm/QrCodeFormPluginApi.java b/src/com/seeyon/apps/qrCodeForm/QrCodeFormPluginApi.java new file mode 100644 index 0000000..14c7768 --- /dev/null +++ b/src/com/seeyon/apps/qrCodeForm/QrCodeFormPluginApi.java @@ -0,0 +1,45 @@ +package com.seeyon.apps.qrCodeForm; + +import com.seeyon.apps.common.plugin.api.APluginInfoApi; +import com.seeyon.apps.common.plugin.vo.ConfigVo; +import com.seeyon.apps.qrCodeForm.constant.QrCodeFormConstants; + +/** + * 功能描述:
+ *
+ *
+ * 
+ * + * @Author: FanGaowei + * @Date: 2022/8/11 + */ +public class QrCodeFormPluginApi extends APluginInfoApi { + + @Override + public String getPluginId() { + return QrCodeFormConstants.getPluginId(); + } + + @Override + public String getCreateUser() { + return "致威互联"; + } + + @Override + public String getDescription() { + return "微信扫码制单"; + } + + @Override + public ConfigVo getDefaultConfig() { + ConfigVo configVo = new ConfigVo(); + for (QrCodeFormConstants value : QrCodeFormConstants.values()) { + if(value != QrCodeFormConstants.plugin) { + configVo.getDevParams().put(value.name(), value.getDefaultValue()); + configVo.getProdParams().put(value.name(), value.getDefaultValue()); + configVo.getParamMap().put(value.name(), value.getDescription()); + } + } + return configVo; + } +} diff --git a/src/com/seeyon/apps/qrCodeForm/QrCodeFormPluginInitializer.java b/src/com/seeyon/apps/qrCodeForm/QrCodeFormPluginInitializer.java new file mode 100644 index 0000000..215a624 --- /dev/null +++ b/src/com/seeyon/apps/qrCodeForm/QrCodeFormPluginInitializer.java @@ -0,0 +1,22 @@ +package com.seeyon.apps.qrCodeForm; + +import com.seeyon.apps.qrCodeForm.util.InitQrCodeFormUitl; +import com.seeyon.ctp.common.AbstractSystemInitializer; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +public class QrCodeFormPluginInitializer extends AbstractSystemInitializer { + private static Log log = LogFactory.getLog(QrCodeFormPluginInitializer.class); + + public QrCodeFormPluginInitializer() { + } + + public void destroy() { + log.info("◆二维码扫码填单插件销毁成功!"); + } + + public void initialize() { + InitQrCodeFormUitl.initMenu(); + log.info("◆二维码扫码填单插件初始化成功!"); + } +} diff --git a/src/com/seeyon/apps/qrCodeForm/constant/Constants.java b/src/com/seeyon/apps/qrCodeForm/constant/Constants.java new file mode 100644 index 0000000..53852b8 --- /dev/null +++ b/src/com/seeyon/apps/qrCodeForm/constant/Constants.java @@ -0,0 +1,13 @@ +package com.seeyon.apps.qrCodeForm.constant; + +public class Constants { + + //模拟移动端登录认证方式 + public static final String _REDIRECTURI = "/qrCodeForm.do?method=newMain&html="; + //流程表单跳转地址 + public static final String FLOW_URL = "/seeyon/m3/apps/v5/collaboration/html/newCollaboration.html?qc=ext&templateId="; + //无流程表单跳转地址 + public static final String UNFLOW_URL = "/seeyon/m3/apps/v5/cap4/htmls/native/form/index.html?"; + + +} diff --git a/src/com/seeyon/apps/qrCodeForm/constant/QrCodeFormConstants.java b/src/com/seeyon/apps/qrCodeForm/constant/QrCodeFormConstants.java new file mode 100644 index 0000000..7415d9c --- /dev/null +++ b/src/com/seeyon/apps/qrCodeForm/constant/QrCodeFormConstants.java @@ -0,0 +1,32 @@ +package com.seeyon.apps.qrCodeForm.constant; + +public enum QrCodeFormConstants { + + plugin("qrCodeForm","插件ID"), + oaAddress("https://oa.dhx.com.cn", "OA地址"), + qwAppId("", "企微APPID"), + restId("qrcode", "rest账号"), + restPwd("f39f8102-1c7f-423c-8e6c-57e1d19b9a6f", "rest密码"), + qrcode_loginname("hr", "发起人账号"); + + QrCodeFormConstants(String defaultValue, String description) { + this.defaultValue = defaultValue; + this.description = description; + } + + private String defaultValue; + private String description; + + public String getDefaultValue() { + return defaultValue; + } + + public String getDescription() { + return description; + } + + public static String getPluginId() { + return plugin.defaultValue; + } + +} diff --git a/src/com/seeyon/apps/qrCodeForm/constant/SupportTypeEnum.java b/src/com/seeyon/apps/qrCodeForm/constant/SupportTypeEnum.java new file mode 100644 index 0000000..6051998 --- /dev/null +++ b/src/com/seeyon/apps/qrCodeForm/constant/SupportTypeEnum.java @@ -0,0 +1,31 @@ +package com.seeyon.apps.qrCodeForm.constant; + +import com.seeyon.ctp.common.code.EnumsCode; +import com.seeyon.ctp.common.i18n.ResourceUtil; + +public enum SupportTypeEnum implements EnumsCode { + ALL(0, "全部"), + FLOW(1, "仅支持流程表单"), + UNFLOW(2, "仅支持无流程表单"); + + private int key; + private String text; + + private SupportTypeEnum(int key, String text) { + this.key = key; + this.text = text; + } + + public String getValue() { + return String.valueOf(this.key); + } + + public int getKey() { + return this.key; + } + + public String getText() { + return ResourceUtil.getString(this.text); + } + +} diff --git a/src/com/seeyon/apps/qrCodeForm/controller/QrCodeFormController.java b/src/com/seeyon/apps/qrCodeForm/controller/QrCodeFormController.java new file mode 100644 index 0000000..1572538 --- /dev/null +++ b/src/com/seeyon/apps/qrCodeForm/controller/QrCodeFormController.java @@ -0,0 +1,109 @@ +package com.seeyon.apps.qrCodeForm.controller; + +import com.seeyon.apps.common.config.ICstConfigApi; +import com.seeyon.apps.qrCodeForm.constant.QrCodeFormConstants; +import com.seeyon.apps.qrCodeForm.manager.QrCodeFormManager; +import com.seeyon.apps.qrCodeForm.util.LoginUtil; +import com.seeyon.apps.weixin.util.SecurityCertUtil; +import com.seeyon.apps.weixin.util.WeixinUtil; +import com.seeyon.ctp.common.SystemEnvironment; +import com.seeyon.ctp.common.constants.ProductEditionEnum; +import com.seeyon.ctp.common.controller.BaseController; +import com.seeyon.ctp.common.flag.SysFlag; +import com.seeyon.ctp.common.log.CtpLogFactory; +import com.seeyon.ctp.organization.bo.V3xOrgMember; +import com.seeyon.ctp.organization.manager.OrgManager; +import com.seeyon.ctp.util.Strings; +import com.seeyon.ctp.util.annotation.Inject; +import org.apache.commons.logging.Log; +import org.springframework.web.servlet.ModelAndView; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.net.URLDecoder; +import java.net.URLEncoder; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class QrCodeFormController extends BaseController { + private static Log log = CtpLogFactory.getLog(QrCodeFormController.class); + @Inject + private QrCodeFormManager qrCodeFormManager; + @Inject + private OrgManager orgManager; + @Inject + private ICstConfigApi cstConfigApi; + + public ModelAndView index(HttpServletRequest request, HttpServletResponse response) { + log.info("访问二维码生成页面!"); + ModelAndView mav = new ModelAndView("plugin/qrCodeForm/qrCodeFormIndex"); + Map map = new HashMap(); + map.put("bizType", "1"); + map.put("type", "owner-authed-biz"); + map.put("businessType", 0); + map.put("activeTab", "mineapp"); + List> bizList = qrCodeFormManager.listBusiness(map); + mav.addObject("bizList", bizList); + return mav; + } + + + public ModelAndView newMain(HttpServletRequest request, HttpServletResponse response) throws Exception { + ModelAndView mav = new ModelAndView("/wechat/collaborationContent"); + String html = ""; + String type = request.getParameter("type"); + if(Strings.isNotBlank(type)) { + html = cstConfigApi.getConfig(QrCodeFormConstants.getPluginId(), "url" + type); + } + if(Strings.isBlank(html)) { + html = URLDecoder.decode(request.getParameter("html"), "UTF-8"); + } +// String loginName = qrCodeFormManager.getLoginMember(code); + /** + * 客开改动,固定登录名 + */ + //String loginName = (String) FormulaUtil.getVar("qrcode_loginname"); + String loginName = cstConfigApi.getConfig(QrCodeFormConstants.getPluginId(), QrCodeFormConstants.qrcode_loginname.name()); + log.info("登录认证获取loginName为:" + loginName); + if(Strings.isEmpty(loginName)){ +// mav.addObject("msg", "未获取到人员信息!")b; +// return mav; + loginName = "seeyon"; + } + + V3xOrgMember member = orgManager.getMemberByLoginName(loginName); + if(member == null){ + mav.addObject("msg", "人员不存在!"); + return mav; + } + SecurityCertUtil.login(request, loginName); + + Map map = LoginUtil.getToken(String.valueOf(member.getId()), member.getLoginName(), request, response); + String success = String.valueOf(map.get("success")); + if (success != null && "false".equals(success)) { +// String message = map.get("message").toString(); +// if (message.contains("User not found")) { +// mav.addObject("msg", ResourceUtil.getString("wxt.user.binding.miss") +// + "," + ResourceUtil.getString("wxt.user.name") + wechatUser.getXtUserName() + +// "," + ResourceUtil.getString("wxt.dingding.user.id") + wechatUser.getXtUserId()); +// } else { +// } + mav.addObject("msg", (String) map.get("message")); + return mav; + } + + String token = (String) map.get("id"); + String suffix = (String) SysFlag.mobileEditionSuffix.getFlag(); + String edition = ProductEditionEnum.getCurrentProductEditionEnum().getValue(); + String v5timestamp = WeixinUtil.getV5Timestamp(); + String address = cstConfigApi.getConfig(QrCodeFormConstants.getPluginId(), QrCodeFormConstants.oaAddress.name()); + if (Strings.isNotBlank(html)) { + String url = address + "" + SystemEnvironment.getContextPath() + "/H5/collaboration/index.html?token=" + token + "&edition=" + edition + "&suffix=" + suffix + "&v5timestamp=" + v5timestamp + "&loginName=" + member.getLoginName() + "&html=" + URLEncoder.encode(html, "UTF-8") + "&isAccount=&accountid=" + member.getOrgAccountId() + "&appid="; + return new ModelAndView("redirect:" + url); + } else { + return new ModelAndView("redirect:" + address + "" + SystemEnvironment.getContextPath() + "/H5/collaboration/index.html?token=" + token + "&edition=" + edition + "&suffix=" + suffix + "&v5timestamp=" + v5timestamp + "&loginName=" + member.getLoginName() + "&html=&isAccount=&accountid=" + member.getOrgAccountId()); + } + } + +} diff --git a/src/com/seeyon/apps/qrCodeForm/manager/QrCodeFormManager.java b/src/com/seeyon/apps/qrCodeForm/manager/QrCodeFormManager.java new file mode 100644 index 0000000..06f5211 --- /dev/null +++ b/src/com/seeyon/apps/qrCodeForm/manager/QrCodeFormManager.java @@ -0,0 +1,18 @@ +package com.seeyon.apps.qrCodeForm.manager; + +import com.seeyon.cap4.form.modules.business.FormAppBO; +import com.seeyon.ctp.util.annotation.AjaxAccess; + +import java.io.UnsupportedEncodingException; +import java.util.List; +import java.util.Map; + +public interface QrCodeFormManager { + @AjaxAccess + List> listBusiness(Map params); + + @AjaxAccess + List listFormApp(Map params); + + Map qrCodeFormUrl(Map params) throws UnsupportedEncodingException; +} diff --git a/src/com/seeyon/apps/qrCodeForm/manager/QrCodeFormManagerImpl.java b/src/com/seeyon/apps/qrCodeForm/manager/QrCodeFormManagerImpl.java new file mode 100644 index 0000000..ad8ab3b --- /dev/null +++ b/src/com/seeyon/apps/qrCodeForm/manager/QrCodeFormManagerImpl.java @@ -0,0 +1,155 @@ +package com.seeyon.apps.qrCodeForm.manager; + +import com.seeyon.apps.common.config.ICstConfigApi; +import com.seeyon.apps.qrCodeForm.constant.Constants; +import com.seeyon.apps.qrCodeForm.constant.QrCodeFormConstants; +import com.seeyon.apps.weixin.manager.WechatUserManager; +import com.seeyon.cap4.form.api.FormApi4Cap4; +import com.seeyon.cap4.form.modules.business.BusinessSourceTypeManager; +import com.seeyon.cap4.form.modules.business.FormAppBO; +import com.seeyon.cap4.form.util.BizUtil; +import com.seeyon.cap4.form.util.Enums; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.common.SystemEnvironment; +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.ctp.common.log.CtpLogFactory; +import com.seeyon.ctp.organization.manager.OrgManager; +import com.seeyon.ctp.util.FlipInfo; +import com.seeyon.ctp.util.ParamUtil; +import com.seeyon.ctp.util.Strings; +import com.seeyon.ctp.util.annotation.AjaxAccess; +import com.seeyon.ctp.util.annotation.Inject; +import org.apache.commons.logging.Log; + +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +public class QrCodeFormManagerImpl implements QrCodeFormManager { + + private static Log log = CtpLogFactory.getLog(QrCodeFormManagerImpl.class); + + @Inject + private FormApi4Cap4 formApi4Cap4; + @Inject + private OrgManager orgManager; + @Inject + private ICstConfigApi cstConfigApi; + @Inject + public WechatUserManager wechatUserManager; + + + /** + * 获取应用包数据 + * + * @param params + * @return + */ + @Override + @AjaxAccess + public List> listBusiness(Map params) { + List> listMap = new ArrayList>(); + try { + FlipInfo fi = new FlipInfo(1, -1); + Map resultMap = formApi4Cap4.listBusiness(fi, params); + if (Strings.isNotEmpty(fi.getData())) { + listMap = fi.getData(); + } + } catch (BusinessException e) { + e.printStackTrace(); + } + return listMap; + } + + /** + * 获取所有的应用下的模板 + * + * @param params + * @return + */ + @AjaxAccess + @Override + public List listFormApp(Map params) { + List returnList = new ArrayList<>(); + String type = ParamUtil.getString(params, "type"); + String bizConfigId = ParamUtil.getString(params, "bizConfigId"); + BusinessSourceTypeManager sourceType = BizUtil.getSourceTypeById(type); + Long bizConfigL = 0L; + if (Strings.isNotBlank(bizConfigId)) { + bizConfigL = Long.parseLong(bizConfigId); + } + try { + List allList = sourceType.getFormAppBOList(AppContext.getCurrentUser(), "", "", false, bizConfigL); + if (Strings.isNotEmpty(allList)) { + returnList = allList.stream().filter(a -> !"PARENT".equals(a.getSourctTypeName())).collect(Collectors.toList()); + } + } catch (BusinessException e) { + log.error("获取所有模板异常", e); + } + return returnList; + } + + @Override + @AjaxAccess + public Map qrCodeFormUrl(Map params) throws UnsupportedEncodingException { + Map result = new HashMap<>(); + Integer sourceType = ParamUtil.getInt(params, "sourceType"); + //String fillUrl = Constants._URLTPL.replaceAll("\\{corpId}", Constants._CORPID); + String fillUrl; + String _redirecturi = Constants._REDIRECTURI; + if (sourceType == Enums.SourceType.SOURCE_TYPE_FLOWTEMPLATE.getKey()) { + String templateId = ParamUtil.getString(params, "templateId"); + String tourl = Constants.FLOW_URL + templateId; + try { +// fillUrl = fillUrl + URLEncoder.encode( + String address = cstConfigApi.getConfig(QrCodeFormConstants.getPluginId(), QrCodeFormConstants.oaAddress.name());; + fillUrl = address + SystemEnvironment.getContextPath() + _redirecturi; + fillUrl += URLEncoder.encode(tourl, "UTF-8"); +// "http://172.16.30.123:8081"+ SystemEnvironment.getContextPath() + _redirecturi + tourl, "UTF-8" +// ) + Constants._FIXURL; + result.put("fillUrl", fillUrl); + return result; + } catch (UnsupportedEncodingException e) { + log.error("地址处理异常", e); + } + } else if (sourceType == Enums.SourceType.SOURCE_TYPE_INFOMANAGE.getKey()) { + String formType = ParamUtil.getString(params, "formType"); + String type = ParamUtil.getString(params, "type"); + String title = ParamUtil.getString(params, "title"); + String moduleId = ParamUtil.getString(params, "moduleId"); + String formTemplateId = ParamUtil.getString(params, "formTemplateId"); + String moduleType = ParamUtil.getString(params, "moduleType"); + String operateType = ParamUtil.getString(params, "operateType"); + String rightId = ParamUtil.getString(params, "rightId"); + //http://127.0.0.1/seeyon/qrCodeForm.do?method=newMain&html=/seeyon/m3/apps/v5/cap4/htmls/native/form/index.html?cusType=true&formTemplateId=-4624141853295951831&moduleId=-4624141853295951831&moduleType=42&formType=main&type=new&operateType=0&rightId=-1 + String tourl = Constants.UNFLOW_URL + "cusType=true" + + "&formTemplateId=" + formTemplateId + + "&moduleId=" + moduleId + + "&moduleType=" + moduleType + + "&formType=" + formType + + "&type=" + type + + "&rightId=" + rightId + + "&operateType=" + operateType; + try { +// fillUrl = fillUrl + URLEncoder.encode( + String address = cstConfigApi.getConfig(QrCodeFormConstants.getPluginId(), QrCodeFormConstants.oaAddress.name()); + fillUrl = address + SystemEnvironment.getContextPath() + _redirecturi; + + fillUrl += URLEncoder.encode(tourl, "UTF-8"); +// "http://172.16.30.123:80"+ SystemEnvironment.getContextPath() + _redirecturi + tourl, "UTF-8" +// ) + Constants._FIXURL; + log.info("生成地址为:" + fillUrl); + result.put("fillUrl", fillUrl); + return result; + } catch (UnsupportedEncodingException e) { + log.error("地址处理异常", e); + } + } + return result; + } + +} diff --git a/src/com/seeyon/apps/qrCodeForm/sso/WechatQRHandShake.java b/src/com/seeyon/apps/qrCodeForm/sso/WechatQRHandShake.java new file mode 100644 index 0000000..0d8b0da --- /dev/null +++ b/src/com/seeyon/apps/qrCodeForm/sso/WechatQRHandShake.java @@ -0,0 +1,140 @@ +package com.seeyon.apps.qrCodeForm.sso; + +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.weixin.manager.WechatUserManager; +import com.seeyon.apps.weixin.po.WechatUser; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.common.log.CtpLogFactory; +import com.seeyon.ctp.organization.bo.V3xOrgMember; +import com.seeyon.ctp.organization.manager.OrgManager; +import com.seeyon.ctp.portal.sso.SSOLoginContext; +import com.seeyon.ctp.portal.sso.SSOLoginHandshakeAbstract; +import com.seeyon.ctp.util.HttpClientUtil; +import com.seeyon.ctp.util.annotation.Inject; +import org.apache.commons.logging.Log; +import org.springframework.beans.factory.annotation.Autowired; + +import javax.servlet.http.HttpServletRequest; +import java.util.List; + +/** + * @author + * @title: WechatQRHandShake + * @description: 企业微信扫码发起单据 + * @date 2021/11/30 9:47 + */ +public class WechatQRHandShake extends SSOLoginHandshakeAbstract { + + private static final Log log = CtpLogFactory.getLog(WechatQRHandShake.class); + //企业微信appid + public static final String _CORPID = AppContext.getSystemProperty("qrCodeForm.corpid"); + //企业微信corpsecret + public static final String _corpsecret = AppContext.getSystemProperty("qrCodeForm.corpsecret"); + //验证方式 + public static final String handshakeType = AppContext.getSystemProperty("qrCodeForm.handshakeType"); + + @Inject + public WechatUserManager wechatUserManager; + @Autowired + private OrgManager orgManager; + @Override + public String handshake(String s) { + log.info("--进入企业微信回调接口!"); + HttpServletRequest request = AppContext.getRawRequest(); + String code =request.getParameter("code"); + + String corpid =_CORPID; + String corpsecret =_corpsecret; + + log.info("获取access接口url:https://qyapi.weixin.qq.com/cgi-bin/gettoken?"+"corpid="+corpid+"&corpsecret="+corpsecret); + String access = null; + try { + access = HttpClientUtil.getContent("https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid="+corpid+"&corpsecret="+corpsecret); + log.info("获取access接口返回:"+access); + if(access==null || access.equals("")){ + log.error("--未获取到access!"); + return null; + } + + JSONObject jsonObject = JSONObject.parseObject(access); + if(jsonObject==null){ + log.error("--未获取到access的jsonObject!"); + return null; + } + + String accessToken = (String)jsonObject.get("access_token"); + if(accessToken==null || accessToken.equals("")){ + log.error("--未获取到accessToken!"); + return null; + } + + log.info("--获取访问用户身份接口url:https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?"+"access_token=" + accessToken + "&code=" + code); + String user = HttpClientUtil.getContent("https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token=" + accessToken + "&code=" + code); + log.info("--获取访问用户身份接口返回值:" + user); + if(user==null || user.equals("")){ + log.error("--未获取到user!"); + return null; + } + + JSONObject userJson = JSONObject.parseObject(user); + if(userJson==null){ + log.error("--未获取到user的jsonObject!"); + return null; + } + + String userid = userJson.getString("UserId"); + if(userid==null || userid.equals("")){ + log.error("--未获取到userid!"); + return null; + } + String Loginname = null; +// if("1".equals(handshakeType)){//使用标准模块的微信绑定 + if(false){ //企业微信、微协同绑定等信息存储在微协同云服务中,废弃逻辑 + WechatUser wechatUser =wechatUserManager.getWechatUserByUserIdAndcorpId(userid,corpid); + Loginname=wechatUser.getXtLoginName(); + }else {//自定义如何根据微信得用户id获取OA的用户 + log.info("--获取成员接口url:https://qyapi.weixin.qq.com/cgi-bin/user/get?"+"access_token=" + accessToken + "&userid=" + userid); + String member = HttpClientUtil.getContent("https://qyapi.weixin.qq.com/cgi-bin/user/get?access_token=" + accessToken + "&userid=" + userid); + log.info("获取成员接口返回值:" + member); + if(member==null || member.equals("")){ + log.error("--未获取到member!"); + return null; + } + + JSONObject memberJson = JSONObject.parseObject(member); + if(userJson==null){ + log.error("--未获取到member的jsonObject!"); + return null; + } + + String mobile = memberJson.getString("mobile"); + if(mobile==null || mobile.equals("")){ + log.error("--未获取到mobile!"); + return null; + } + List memberList=orgManager.getMemberListByMobile(mobile,null); + Loginname = memberList!=null?memberList.get(0).getLoginName():null; + } + if(Loginname ==null || Loginname.equals("")){ + log.error("--未获取到loginName!"); + return null; + } + return Loginname; + + } catch (Exception e) { + log.error("获取微信验证失败",e); + } + + return null; + } + + @Override + public void logoutNotify(String s) { + + } + + @Override + public String getToUrl(HttpServletRequest req, SSOLoginContext ssoLoginContext, String ticket) { + return req.getParameter("tourl"); + } +} diff --git a/src/com/seeyon/apps/qrCodeForm/util/InitQrCodeFormUitl.java b/src/com/seeyon/apps/qrCodeForm/util/InitQrCodeFormUitl.java new file mode 100644 index 0000000..d01c080 --- /dev/null +++ b/src/com/seeyon/apps/qrCodeForm/util/InitQrCodeFormUitl.java @@ -0,0 +1,111 @@ +package com.seeyon.apps.qrCodeForm.util; + +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.privilege.enums.PrivMenuTypeEnums; +import com.seeyon.ctp.privilege.manager.PrivilegeMenuManager; +import com.seeyon.ctp.privilege.po.PrivMenu; +import com.seeyon.ctp.util.DBAgent; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +public class InitQrCodeFormUitl { + private static Log log = LogFactory.getLog(InitQrCodeFormUitl.class); + private static PrivilegeMenuManager privilegeMenuManager = (PrivilegeMenuManager) AppContext.getBean("privilegeMenuManager"); + + public static void initMenu() { + try { + List listmenu = new ArrayList(); + + StringBuffer queryString = new StringBuffer(" FROM "); + queryString.append(PrivMenu.class.getSimpleName()).append(" where ") + .append(" path = '711' "); + + listmenu = DBAgent.find(queryString.toString()); + if (listmenu == null || listmenu.size() < 1) { + creatFileImportMenu();//创建菜单资源 + } + log.info("模板二维码菜单完成"); + + } catch (Exception e) { + log.error("模板二维码菜单失败", e); + } + + } + + /** + * 配置菜单 + * + * @return + * @throws BusinessException + */ + private static void creatFileImportMenu() { + try { + List menus = new ArrayList(); + PrivMenu configmenu = new PrivMenu(); + configmenu.setNewId(); + configmenu.setName("模板二维码"); + configmenu.setIcon("conferencearrangemen.png"); + configmenu.setSortid(1); + configmenu.setPath("711"); + configmenu.setExt1("0"); + configmenu.setExt2("1"); + configmenu.setExt3(""); + configmenu.setExt4(1); + configmenu.setExt7(configmenu.getName()); + configmenu.setExt8(""); + configmenu.setExt9(""); + configmenu.setExt10(""); + configmenu.setExt11(""); + configmenu.setExt12(0); + configmenu.setExt13(0); + configmenu.setExt14(0); + configmenu.setExt15(0); + configmenu.setExt16(0); + Date nowDate = new Date(); + configmenu.setCreatedate(nowDate); + configmenu.setUpdatedate(nowDate); + configmenu.setType(PrivMenuTypeEnums.systemPresetMenu.getKey()); + configmenu.setParentId(0L); + menus.add(configmenu); + + PrivMenu syncConfig = new PrivMenu();//二维码生成 + syncConfig.setNewId(); + syncConfig.setName("二维码生成"); + syncConfig.setIcon("b_menu_thridpartyspace.png"); + syncConfig.setTarget("mainfrm"); + syncConfig.setSortid(1); + syncConfig.setPath("711001"); + syncConfig.setExt1("0"); + syncConfig.setExt2("2"); + syncConfig.setExt3(""); + syncConfig.setExt4(1); + syncConfig.setExt7(syncConfig.getName()); + syncConfig.setExt8("0"); + syncConfig.setExt9("0"); + syncConfig.setExt10("0"); + syncConfig.setExt11("1"); + syncConfig.setExt19(2L); + syncConfig.setEnterResource(1); + syncConfig.setResourceNavurl("/qrCodeForm.do?method=index"); + syncConfig.setResourceCode("qrCodeForm"); + syncConfig.setResourceModuleid("none"); + syncConfig.setCreatedate(nowDate); + syncConfig.setUpdatedate(nowDate); + syncConfig.setUpdateuserid(1L); + syncConfig.setShow(true); + syncConfig.setControl(true); + syncConfig.setType(PrivMenuTypeEnums.systemPresetMenu.getKey()); + syncConfig.setParentId(configmenu.getId()); + menus.add(syncConfig); + + DBAgent.saveAll(menus); + } catch (Exception e) { + log.error("组织机构同步菜单异常", e); + } + } + +} diff --git a/src/com/seeyon/apps/qrCodeForm/util/LoginUtil.java b/src/com/seeyon/apps/qrCodeForm/util/LoginUtil.java new file mode 100644 index 0000000..7bd8612 --- /dev/null +++ b/src/com/seeyon/apps/qrCodeForm/util/LoginUtil.java @@ -0,0 +1,71 @@ +package com.seeyon.apps.qrCodeForm.util; + +import cn.hutool.cache.CacheUtil; +import cn.hutool.cache.impl.TimedCache; +import com.seeyon.apps.common.config.ICstConfigApi; +import com.seeyon.apps.common.plugin.vo.ConfigVo; +import com.seeyon.apps.qrCodeForm.constant.QrCodeFormConstants; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.common.constants.Constants; +import com.seeyon.ctp.rest.util.TokenUtil; +import com.seeyon.ctp.services.UserToken; +import com.seeyon.ctp.util.Strings; +import com.seeyon.ctp.util.TextEncoder; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.HashMap; +import java.util.Map; + +public class LoginUtil { + private static Log log = LogFactory.getLog(LoginUtil.class); + + private static ICstConfigApi cstConfigApi = (ICstConfigApi) AppContext.getBean("cstConfigApi"); + + private static TimedCache tokenCache = CacheUtil.newTimedCache(14 * 60 * 1000); + + //rest信息 +// public static final String restName = AppContext.getSystemProperty("qrCodeForm.restName"); +// public static final String restPassword = AppContext.getSystemProperty("qrCodeForm.restPassword"); + + + /** + * 获取token + * + * @param loginName 登录名 + * @return + */ + public static Map getToken(String memberId, String loginName, HttpServletRequest request, HttpServletResponse response) { + Map map = new HashMap(); + String tokenId = tokenCache.get(memberId); + if(null != tokenId) { + map.put("id", tokenId); + map.put("success", true); + return map; + } + try { + ConfigVo config = cstConfigApi.getConfig(QrCodeFormConstants.getPluginId()); + String userName = config.getParamVal(QrCodeFormConstants.restId.name()); + String password = config.getParamVal(QrCodeFormConstants.restPwd.name()); + password = TextEncoder.decode(password); + Long userId = null; + if (Strings.isNotBlank(memberId)) { + userId = Long.parseLong(memberId); + } + UserToken token = TokenUtil._getToken(userName, password, userId, loginName, null, Constants.login_useragent_from.wechat.name(), request, response); + if (token != null) { + map.put("success", true); + map.put("id", token.getId()); + tokenCache.put(memberId, token.getId()); + } + } catch (Exception e) { + log.error("", e); + map.put("success", false); + map.put("message", e.getMessage()); + } + return map; + } + +} diff --git a/src/com/seeyon/apps/src_dhxbacklog/DhxBacklogPluginApi.java b/src/com/seeyon/apps/src_dhxbacklog/DhxBacklogPluginApi.java new file mode 100644 index 0000000..48ee651 --- /dev/null +++ b/src/com/seeyon/apps/src_dhxbacklog/DhxBacklogPluginApi.java @@ -0,0 +1,47 @@ +package com.seeyon.apps.src_dhxbacklog; + +import com.seeyon.apps.common.plugin.api.APluginInfoApi; +import com.seeyon.apps.common.plugin.vo.ConfigVo; +import com.seeyon.apps.src_dhxbacklog.constanst.DhxFlowConstants; + +import java.util.Map; + +public class DhxBacklogPluginApi extends APluginInfoApi { + public DhxBacklogPluginApi() { + } + + public String getPluginId() { + System.out.println(DhxFlowConstants.getPluginId()); + return DhxFlowConstants.getPluginId(); + } + + public String getCreateUser() { + return "橙阳科技"; + } + + public String getDescription() { + return "集团组织架构同步管理"; + } + + public ConfigVo getDefaultConfig() { + ConfigVo configVo = new ConfigVo(); + DhxFlowConstants[] var2 = DhxFlowConstants.values(); + int var3 = var2.length; + + for(int var4 = 0; var4 < var3; ++var4) { + DhxFlowConstants value = var2[var4]; + if (value != DhxFlowConstants.plugin) { + configVo.getDevParams().put(value.name(), value.getDefaultValue()); + configVo.getProdParams().put(value.name(), value.getDefaultValue()); + configVo.getParamMap().put(value.name(), value.getDescription()); + } + } + + return configVo; + } + + public void registerCustomEvent(Map eventAndNodes) { + eventAndNodes.put("propertyDispose", "集团组织架构同步管理"); + } +} + diff --git a/src/com/seeyon/apps/src_dhxbacklog/constanst/DhxFlowConstants.java b/src/com/seeyon/apps/src_dhxbacklog/constanst/DhxFlowConstants.java new file mode 100644 index 0000000..0390228 --- /dev/null +++ b/src/com/seeyon/apps/src_dhxbacklog/constanst/DhxFlowConstants.java @@ -0,0 +1,34 @@ +package com.seeyon.apps.src_dhxbacklog.constanst; + +public enum DhxFlowConstants { + + plugin("src_dhxbacklog","插件ID"), + flowUrl("http://10.0.1.56/seeyon","流程平台URL"), + TokenUrl("/rest/token/","token地址"), + flowRestUsername("gongwenpush","流程平台restname"), + flowRestPassword("2376d7fc-1664-4fb6-8dec-66356935ddb0","流程平台restpassword"), + dhxflowssourl("/login/sso?from=dhxflowsso&ticket=", "PC单点登录地址"), + dhxflowssoh5url("/H5/collaboration/index.html?token=", "H5单点登录地址"); + + + DhxFlowConstants(String defaultValue, String description) { + this.defaultValue = defaultValue; + this.description = description; + } + + private String defaultValue; + private String description; + + public String getDefaultValue() { + return defaultValue; + } + + public String getDescription() { + return description; + } + + public static String getPluginId() { + return plugin.defaultValue; + } + +} diff --git a/src/com/seeyon/apps/src_dhxbacklog/sso/DhxFlowWaitHandlesso.java b/src/com/seeyon/apps/src_dhxbacklog/sso/DhxFlowWaitHandlesso.java new file mode 100644 index 0000000..d37387a --- /dev/null +++ b/src/com/seeyon/apps/src_dhxbacklog/sso/DhxFlowWaitHandlesso.java @@ -0,0 +1,71 @@ +package com.seeyon.apps.src_dhxbacklog.sso; + +import com.seeyon.apps.common.config.ICstConfigApi; +import com.seeyon.apps.common.plugin.vo.ConfigVo; +import com.seeyon.apps.src_dhxbacklog.constanst.DhxFlowConstants; +import com.seeyon.apps.src_dhxbacklog.util.GetToken; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.common.controller.BaseController; +import com.seeyon.ctp.organization.manager.OrgManager; +import com.seeyon.ctp.util.annotation.Inject; +import org.springframework.web.servlet.ModelAndView; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.net.URLEncoder; +import java.util.Date; + +public class DhxFlowWaitHandlesso extends BaseController { + + @Inject + private ICstConfigApi cstConfigApi; + + private OrgManager orgManager; + public void setOrgManager(OrgManager orgManager) {this.orgManager = orgManager; } + public OrgManager getOrgManager() { + if (orgManager == null) {orgManager = (OrgManager) AppContext.getBean("orgManager");}return orgManager; + } + + public ConfigVo getDhxBacklogConfig() { + return cstConfigApi.getConfig(getPluginId()); + } + + public String getPluginId() { + return DhxFlowConstants.getPluginId(); + } + + public ModelAndView index(HttpServletRequest request, HttpServletResponse response) throws Exception { +// System.out.println(""); + ConfigVo configVo = getDhxBacklogConfig(); + ModelAndView mv = new ModelAndView(); +// 根据当前账号获取流程平台账号 + String userLoginName = AppContext.currentUserLoginName(); +// 获取当前绑定人员登录名 + String salt = "-"; + Date date = new Date(); + String ticket = userLoginName+salt+date.getTime(); + String toUrl = request.getParameter("tourl"); + String type = request.getParameter("type"); + String toEncodeUrl = URLEncoder.encode(toUrl, "UTF-8"); + + String pathUrl = configVo.getParamVal(DhxFlowConstants.flowUrl.name())+ + configVo.getParamVal(DhxFlowConstants.dhxflowssourl.name())+ticket+"&tourl="+toEncodeUrl; +// 判断登录是否移动端 + if("H5".equals(type)){ + String changleRestUsername = configVo.getParamVal(DhxFlowConstants.flowRestUsername.name()); + String changleRestPassword = configVo.getParamVal(DhxFlowConstants.flowRestPassword.name()); + String url = configVo.getParamVal(DhxFlowConstants.flowUrl.name())+ + configVo.getParamVal(DhxFlowConstants.TokenUrl.name()); +// 调用接口获取TOKEN信息 + String token = GetToken.changleToken(url,changleRestUsername,changleRestPassword,userLoginName); + pathUrl = configVo.getParamVal(DhxFlowConstants.flowUrl.name())+ + configVo.getParamVal(DhxFlowConstants.dhxflowssoh5url.name())+token+"&html="+toEncodeUrl+"&loginName="+userLoginName; + } + System.out.println(pathUrl); + response.sendRedirect(pathUrl); + return null; + + } + + +} diff --git a/src/com/seeyon/apps/src_dhxbacklog/util/GetToken.java b/src/com/seeyon/apps/src_dhxbacklog/util/GetToken.java new file mode 100644 index 0000000..ea546c4 --- /dev/null +++ b/src/com/seeyon/apps/src_dhxbacklog/util/GetToken.java @@ -0,0 +1,23 @@ +package com.seeyon.apps.src_dhxbacklog.util; + +import com.alibaba.fastjson.JSON; + +public class GetToken { + public static String changleToken(String changleURL , String restName,String restPassword,String loginName){ +// String url = "http://127.0.0.1/seeyon/rest/token/" + restName + "/" + restPassword + "?loginName=" + loginName; + String url = changleURL + restName + "/" + restPassword + "?loginName=" + loginName; + + String msg = HttpRequestUtils.httpGet(url); + + String token = null; + if (msg.length()>70){ + com.alibaba.fastjson.JSONObject object = JSON.parseObject(msg); + Object id = object.get("id"); + token = id.toString(); + }else { + token = msg; + } + + return token; + } +} diff --git a/src/com/seeyon/apps/src_dhxbacklog/util/HttpRequestUtils.java b/src/com/seeyon/apps/src_dhxbacklog/util/HttpRequestUtils.java new file mode 100644 index 0000000..e708e69 --- /dev/null +++ b/src/com/seeyon/apps/src_dhxbacklog/util/HttpRequestUtils.java @@ -0,0 +1,241 @@ +package com.seeyon.apps.src_dhxbacklog.util; + +import com.alibaba.fastjson.JSONObject; +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.HttpStatus; +import org.apache.commons.httpclient.NameValuePair; +import org.apache.commons.httpclient.methods.PostMethod; +import org.apache.http.HttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.util.EntityUtils; + +import java.io.*; +import java.net.HttpURLConnection; +import java.net.URL; +import java.net.URLConnection; +import java.net.URLDecoder; +import java.util.Map; +import java.util.Set; + +public class HttpRequestUtils { + /** + * post请求 + * + * @param url + * url地址 + * @param jsonParam + * 参数 + * @param needResponse + * 需要返回结果 + * @return + */ + public static String httpPost(String url, JSONObject jsonParam, + boolean needResponse) { + // post请求返回结果 + DefaultHttpClient httpClient = new DefaultHttpClient(); + String jsonResult = null; + HttpPost method = new HttpPost(url); + try { + if (null != jsonParam) { + // 解决中文乱码问题 + StringEntity entity = new StringEntity(jsonParam.toString(), + "utf-8"); + entity.setContentEncoding("UTF-8"); + entity.setContentType("application/json"); + method.setEntity(entity); + } + HttpResponse result = httpClient.execute(method); + url = URLDecoder.decode(url, "UTF-8"); + /** 请求发送成功,并得到响应 **/ + if (result.getStatusLine().getStatusCode() == 200) { + String str = ""; + try { + /** 读取服务器返回过来的json字符串数据 **/ + str = EntityUtils.toString(result.getEntity()); + if (!needResponse) { + return null; + } + /** 把json字符串转换成json对象 **/ + jsonResult = str; + } catch (Exception e) { + System.out.println("post请求提交失败:" + url); + } + } + } catch (IOException e) { + System.out.println("post请求提交失败:" + url); + } + return jsonResult; + } + + /** + * 发送get请求 + * + * @param url + * 路径 + * @return + */ + public static String httpGet(String url) { + // get请求返回结果 + JSONObject jsonObject = null; + String strResult = ""; + try { + DefaultHttpClient client = new DefaultHttpClient(); + // 发送get请求 + HttpGet request = new HttpGet(url); + HttpResponse response = client.execute(request); + /** 请求发送成功,并得到响应 **/ + if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { + /** 读取服务器返回过来的json字符串数据 **/ + strResult = EntityUtils.toString(response.getEntity()); + /** 把json字符串转换成json对象 **/ + url = URLDecoder.decode(url, "UTF-8"); + } else { + System.out.println("get请求提交失败:" + url); + } + } catch (IOException e) { + System.out.println("get请求提交失败:" + url); + } + return strResult; + } + + /** + * 向指定 URL 发送POST方法的请求 + * + * @param url + * 发送请求的 URL + * @param param + * 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 + * @return 所代表远程资源的响应结果 + */ + public static String sendPost(String url, JSONObject param) { + PrintWriter out = null; + BufferedReader in = null; + String result = ""; + try { + URL realUrl = new URL(url); + // 打开和URL之间的连接 + URLConnection conn = realUrl.openConnection(); + // 设置通用的请求属性 + conn.setRequestProperty("accept", "*/*"); + conn.setRequestProperty("connection", "Keep-Alive"); + conn.setRequestProperty("user-agent", + "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); + // 发送POST请求必须设置如下两行 + conn.setDoOutput(true); + conn.setDoInput(true); + // 获取URLConnection对象对应的输出流 + out = new PrintWriter(conn.getOutputStream()); + StringEntity entity = new StringEntity(param.toString(), "utf-8"); + // 发送请求参数 + out.print(entity); + // flush输出流的缓冲 + out.flush(); + // 定义BufferedReader输入流来读取URL的响应 + in = new BufferedReader( + new InputStreamReader(conn.getInputStream())); + String line; + while ((line = in.readLine()) != null) { + result += line; + } + } catch (Exception e) { + System.out.println("发送 POST 请求出现异常!" + e); + e.printStackTrace(); + } + // 使用finally块来关闭输出流、输入流 + finally { + try { + if (out != null) { + out.close(); + } + if (in != null) { + in.close(); + } + } catch (IOException ex) { + ex.printStackTrace(); + } + } + return result; + } + + public static String doPost(String url, Map params, + String charset) { + StringBuffer response = new StringBuffer(); + HttpClient client = new HttpClient(); + PostMethod method = new PostMethod(url); + // 设置Http Post数据 + method.setRequestHeader("Content-Type", + "application/x-www-form-urlencoded;charset=" + charset); + if (params != null) { + Set keySet = params.keySet(); + NameValuePair[] param = new NameValuePair[keySet.size()]; + int i = 0; + for (String key : keySet) { + param[i] = new NameValuePair(key, params.get(key)); + i++; + } + method.setRequestBody(param); + } + InputStream responseBodyStream = null; + InputStreamReader streamReader = null; + BufferedReader reader = null; + try { + client.executeMethod(method); + if (method.getStatusCode() == HttpStatus.SC_OK) { + responseBodyStream = method.getResponseBodyAsStream(); + streamReader = new InputStreamReader(responseBodyStream, + charset); + reader = new BufferedReader(streamReader); + String line; + while ((line = reader.readLine()) != null) { + response.append(line); + } + } + } catch (IOException e) { + } finally { + try { + responseBodyStream.close(); + streamReader.close(); + reader.close(); + } catch (IOException e) { + e.printStackTrace(); + } + method.releaseConnection(); + } + return response.toString(); + } + + public static String transport(String url, String message) { + StringBuffer sb = new StringBuffer(); + try { + URL urls = new URL(url); + HttpURLConnection uc = (HttpURLConnection) urls.openConnection(); + uc.setRequestMethod("POST"); + uc.setRequestProperty("content-type", + "application/x-www-form-urlencoded"); + uc.setRequestProperty("charset", "UTF-8"); + uc.setDoOutput(true); + uc.setDoInput(true); + uc.setReadTimeout(10000); + uc.setConnectTimeout(10000); + OutputStream os = uc.getOutputStream(); + DataOutputStream dos = new DataOutputStream(os); + dos.write(message.getBytes("utf-8")); + dos.flush(); + os.close(); + BufferedReader in = new BufferedReader(new InputStreamReader( + uc.getInputStream(), "utf-8")); + String readLine = ""; + while ((readLine = in.readLine()) != null) { + sb.append(readLine); + } + in.close(); + } catch (Exception e) { + } + return sb.toString(); + } + +} + diff --git a/src/com/seeyon/apps/src_dhxorganization/DhxPluginApi.java b/src/com/seeyon/apps/src_dhxorganization/DhxPluginApi.java new file mode 100644 index 0000000..67e333e --- /dev/null +++ b/src/com/seeyon/apps/src_dhxorganization/DhxPluginApi.java @@ -0,0 +1,46 @@ +package com.seeyon.apps.src_dhxorganization; + +import com.seeyon.apps.common.plugin.api.APluginInfoApi; +import com.seeyon.apps.common.plugin.vo.ConfigVo; +import com.seeyon.apps.src_dhxorganization.constants.DhxConstants; + + +public class DhxPluginApi extends APluginInfoApi { + public DhxPluginApi() { + } + + public String getPluginId() { + System.out.println(DhxConstants.getPluginId()); + return DhxConstants.getPluginId(); + } + + public String getCreateUser() { + return "橙阳科技"; + } + + public String getDescription() { + return "U8C集成管理"; + } + + public ConfigVo getDefaultConfig() { + ConfigVo configVo = new ConfigVo(); + DhxConstants[] var2 = DhxConstants.values(); + int var3 = var2.length; + + for(int var4 = 0; var4 < var3; ++var4) { + DhxConstants value = var2[var4]; + if (value != DhxConstants.plugin) { + configVo.getDevParams().put(value.name(), value.getDefaultValue()); + configVo.getProdParams().put(value.name(), value.getDefaultValue()); + configVo.getParamMap().put(value.name(), value.getDescription()); + } + } + + return configVo; + } + +// public void registerCustomEvent(Map eventAndNodes) { +// eventAndNodes.put("propertyDispose", "资产管理待办推送"); +// } +} + diff --git a/src/com/seeyon/apps/src_dhxorganization/archive/ArchiveCommonNode.java b/src/com/seeyon/apps/src_dhxorganization/archive/ArchiveCommonNode.java new file mode 100644 index 0000000..5d37ed2 --- /dev/null +++ b/src/com/seeyon/apps/src_dhxorganization/archive/ArchiveCommonNode.java @@ -0,0 +1,106 @@ +package com.seeyon.apps.src_dhxorganization.archive; + +import cn.hutool.log.Log; +import com.seeyon.apps.common.config.ICstConfigApi; +import com.seeyon.apps.common.plugin.vo.ConfigVo; +import com.seeyon.apps.common.workflow.constants.WorkFlowType; +import com.seeyon.apps.common.workflow.node.ACommonSuperNode; +import com.seeyon.apps.ext.workflow.vo.FieldDataVo; +import com.seeyon.apps.ext.workflow.vo.FormDataVo; +import com.seeyon.apps.ext.workflow.vo.SuperNodeContext; +import com.seeyon.apps.src_dhxorganization.util.Cap4ReturnUtil; +import com.seeyon.apps.src_dhxorganization.util.DhxHttpUtil; +import com.seeyon.apps.src_dhxorganization.util.ParamUtil; +import com.seeyon.apps.src_dhxorganization.constants.DhxConstants; +import com.seeyon.apps.src_dhxorganization.vo.DhxResponse; +import com.seeyon.cap4.form.api.FormDataApi4Cap4; +import com.seeyon.cap4.form.bean.FormDataMasterBean; +import com.seeyon.ctp.common.AppContext; + +public abstract class ArchiveCommonNode extends ACommonSuperNode { + + private static Log log = Log.get(ArchiveCommonNode.class); + protected ICstConfigApi cstConfigApi = (ICstConfigApi) AppContext.getBean("cstConfigApi"); + + @Override + public String getPluginId() { + return DhxConstants.getPluginId(); + } + + @Override + public String getFormParse() { + return "json"; + } + + @Override + public WorkFlowType[] getTypes() { + return new WorkFlowType[] {WorkFlowType.superNode}; + } + + public ConfigVo getU8cConfig() { + return cstConfigApi.getConfig(getPluginId()); + } + + protected FormDataApi4Cap4 formDataApi4Cap4; + + public void setFormDataApi4Cap4(FormDataApi4Cap4 formDataApi4Cap4) { + this.formDataApi4Cap4 = formDataApi4Cap4; + } + + + @Override + public SuperNodeContext proceed(String request, FormDataVo formDataVo, FormDataMasterBean formDataMasterBean) throws Exception { + SuperNodeContext context = new SuperNodeContext(); + System.out.println("开始处理单据"+getNodeId()); + ParamUtil paramUtil = new ParamUtil(); + String param = paramUtil.param(request,getMethod(),formDataVo); + Cap4ReturnUtil cap4ReturnUtil = new Cap4ReturnUtil(); + try { + FieldDataVo fhjg = formDataVo.getFieldData("U8C-返回结果"); + String value = fhjg.getStringValue(); + if(value.startsWith("推送U8C成功")) { + return context.success("跳过:" + value); + } + } catch (Exception e) { + context.setException(true); + context.back("处理异常:OA跳过处理异常:" + e.getMessage()); + formDataVo.getNewFieldDataMap().put("U8C-返回结果", "处理异常:OA跳过处理异常:" + e.getMessage()); + } + ConfigVo configVo = getU8cConfig(); + context.setNeedSave(true); + String url = configVo.getParamVal(DhxConstants.test.name()); + url += getMethod(); + context.setRequest(param); + context.setUrl(url); + try { + String u8cSystem = configVo.getParamVal(DhxConstants.test.name()); + log.info(param); + String response = DhxHttpUtil.doPost(url, param); + System.out.println(response); + context.setResponse(response); + DhxResponse u8cResponse = DhxHttpUtil.parseResponse(response); + if(u8cResponse.isSuccess()) { + cap4ReturnUtil.setParamReturn(getMethod(),u8cResponse,formDataVo,getNodeId()); + System.out.println("参数处理完成"+u8cResponse); + log.info(u8cResponse.getData()); + System.out.println("推送成功显示"+u8cResponse.getStatus()); + context.success("推送U8C成功:" + u8cResponse.getStatus(), false); + formDataVo.getNewFieldDataMap().put("返回结果", "推送成功:" + u8cResponse.getStatus()); + + } else { + context.setErrMsg(u8cResponse.getMsg()); + context.back("推送U8C失败:" + u8cResponse.getMsg()); + formDataVo.getNewFieldDataMap().put("返回结果", "推送失败:" + u8cResponse.getMsg()); + } + } catch (Exception e) { + context.setException(true); + context.back("推送U8C失败:OA处理异常:" + e.getMessage()); + formDataVo.getNewFieldDataMap().put("返回结果", "推送失败:OA处理异常" + e.getMessage()); + } + return context; + } + + + public abstract String getMethod(); + +} diff --git a/src/com/seeyon/apps/src_dhxorganization/archive/node/UpdateHireFilesNode.java b/src/com/seeyon/apps/src_dhxorganization/archive/node/UpdateHireFilesNode.java new file mode 100644 index 0000000..cf4d70f --- /dev/null +++ b/src/com/seeyon/apps/src_dhxorganization/archive/node/UpdateHireFilesNode.java @@ -0,0 +1,22 @@ +package com.seeyon.apps.src_dhxorganization.archive.node; + +import com.seeyon.apps.src_dhxorganization.archive.ArchiveCommonNode; + +public class UpdateHireFilesNode extends ArchiveCommonNode { + + + @Override + public String getMethod() { + return "/seeyon/rest/cap4/form/soap/batch-update"; + } + + @Override + public String getNodeId() { + return "UpdateHireFilesNode"; + } + + @Override + public String getNodeName() { + return "员工录用审批保存人才库信息"; + } +} diff --git a/src/com/seeyon/apps/src_dhxorganization/constants/DhxConstants.java b/src/com/seeyon/apps/src_dhxorganization/constants/DhxConstants.java new file mode 100644 index 0000000..1bc9e51 --- /dev/null +++ b/src/com/seeyon/apps/src_dhxorganization/constants/DhxConstants.java @@ -0,0 +1,29 @@ +package com.seeyon.apps.src_dhxorganization.constants; + +public enum DhxConstants { + + + plugin("ydctu8c","插件ID"), + test("test","test"); + + DhxConstants(String defaultValue, String description) { + this.defaultValue = defaultValue; + this.description = description; + } + + private String defaultValue; + private String description; + + public String getDefaultValue() { + return defaultValue; + } + + public String getDescription() { + return description; + } + + public static String getPluginId() { + return plugin.defaultValue; + } + +} diff --git a/src/com/seeyon/apps/src_dhxorganization/member/MemberCommonNode.java b/src/com/seeyon/apps/src_dhxorganization/member/MemberCommonNode.java new file mode 100644 index 0000000..51a6461 --- /dev/null +++ b/src/com/seeyon/apps/src_dhxorganization/member/MemberCommonNode.java @@ -0,0 +1,107 @@ +package com.seeyon.apps.src_dhxorganization.member; + +import cn.hutool.log.Log; +import com.seeyon.apps.common.config.ICstConfigApi; +import com.seeyon.apps.common.plugin.vo.ConfigVo; +import com.seeyon.apps.common.workflow.constants.WorkFlowType; +import com.seeyon.apps.common.workflow.node.ACommonSuperNode; +import com.seeyon.apps.ext.workflow.vo.FieldDataVo; +import com.seeyon.apps.ext.workflow.vo.FormDataVo; +import com.seeyon.apps.ext.workflow.vo.SuperNodeContext; +import com.seeyon.apps.src_dhxorganization.util.Cap4ReturnUtil; +import com.seeyon.apps.src_dhxorganization.util.DhxHttpUtil; +import com.seeyon.apps.src_dhxorganization.util.ParamUtil; +import com.seeyon.apps.src_dhxorganization.constants.DhxConstants; +import com.seeyon.apps.src_dhxorganization.vo.DhxResponse; +import com.seeyon.cap4.form.api.FormDataApi4Cap4; +import com.seeyon.cap4.form.bean.FormDataMasterBean; +import com.seeyon.ctp.common.AppContext; + +public abstract class MemberCommonNode extends ACommonSuperNode { + + + private static Log log = Log.get(MemberCommonNode.class); + protected ICstConfigApi cstConfigApi = (ICstConfigApi) AppContext.getBean("cstConfigApi"); + + @Override + public String getPluginId() { + return DhxConstants.getPluginId(); + } + + @Override + public String getFormParse() { + return "json"; + } + + @Override + public WorkFlowType[] getTypes() { + return new WorkFlowType[] {WorkFlowType.superNode}; + } + + public ConfigVo getU8cConfig() { + return cstConfigApi.getConfig(getPluginId()); + } + + protected FormDataApi4Cap4 formDataApi4Cap4; + + public void setFormDataApi4Cap4(FormDataApi4Cap4 formDataApi4Cap4) { + this.formDataApi4Cap4 = formDataApi4Cap4; + } + + + @Override + public SuperNodeContext proceed(String request, FormDataVo formDataVo, FormDataMasterBean formDataMasterBean) throws Exception { + SuperNodeContext context = new SuperNodeContext(); + System.out.println("开始处理单据"+getNodeId()); + ParamUtil paramUtil = new ParamUtil(); + String param = paramUtil.param(request,getMethod(),formDataVo); + Cap4ReturnUtil cap4ReturnUtil = new Cap4ReturnUtil(); + try { + FieldDataVo fhjg = formDataVo.getFieldData("U8C-返回结果"); + String value = fhjg.getStringValue(); + if(value.startsWith("推送U8C成功")) { + return context.success("跳过:" + value); + } + } catch (Exception e) { + context.setException(true); + context.back("处理异常:OA跳过处理异常:" + e.getMessage()); + formDataVo.getNewFieldDataMap().put("U8C-返回结果", "处理异常:OA跳过处理异常:" + e.getMessage()); + } + ConfigVo configVo = getU8cConfig(); + context.setNeedSave(true); + String url = configVo.getParamVal(DhxConstants.test.name()); + url += getMethod(); + context.setRequest(param); + context.setUrl(url); + try { + String u8cSystem = configVo.getParamVal(DhxConstants.test.name()); + log.info(param); + String response = DhxHttpUtil.doPost(url, param); + System.out.println(response); + context.setResponse(response); + DhxResponse u8cResponse = DhxHttpUtil.parseResponse(response); + if(u8cResponse.isSuccess()) { + cap4ReturnUtil.setParamReturn(getMethod(),u8cResponse,formDataVo,getNodeId()); + System.out.println("参数处理完成"+u8cResponse); + log.info(u8cResponse.getData()); + System.out.println("推送成功显示"+u8cResponse.getStatus()); + context.success("推送U8C成功:" + u8cResponse.getStatus(), false); + formDataVo.getNewFieldDataMap().put("返回结果", "推送成功:" + u8cResponse.getStatus()); + + } else { + context.setErrMsg(u8cResponse.getMsg()); + context.back("推送U8C失败:" + u8cResponse.getMsg()); + formDataVo.getNewFieldDataMap().put("返回结果", "推送失败:" + u8cResponse.getMsg()); + } + } catch (Exception e) { + context.setException(true); + context.back("推送U8C失败:OA处理异常:" + e.getMessage()); + formDataVo.getNewFieldDataMap().put("返回结果", "推送失败:OA处理异常" + e.getMessage()); + } + return context; + } + + + public abstract String getMethod(); + +} diff --git a/src/com/seeyon/apps/src_dhxorganization/util/Cap4ReturnUtil.java b/src/com/seeyon/apps/src_dhxorganization/util/Cap4ReturnUtil.java new file mode 100644 index 0000000..adbc633 --- /dev/null +++ b/src/com/seeyon/apps/src_dhxorganization/util/Cap4ReturnUtil.java @@ -0,0 +1,17 @@ +package com.seeyon.apps.src_dhxorganization.util; + + +import com.seeyon.apps.ext.workflow.vo.FormDataVo; +import com.seeyon.apps.src_dhxorganization.vo.DhxResponse; +import com.seeyon.ctp.common.exceptions.BusinessException; + + +public class Cap4ReturnUtil { + + public void setParamReturn(String method, DhxResponse dhxResponse, FormDataVo formDataVo, String nodeId) throws BusinessException, NoSuchFieldException { + + + } + + +} diff --git a/src/com/seeyon/apps/src_dhxorganization/util/DhxHttpUtil.java b/src/com/seeyon/apps/src_dhxorganization/util/DhxHttpUtil.java new file mode 100644 index 0000000..4bf7b24 --- /dev/null +++ b/src/com/seeyon/apps/src_dhxorganization/util/DhxHttpUtil.java @@ -0,0 +1,49 @@ +package com.seeyon.apps.src_dhxorganization.util; + +import cn.hutool.http.HttpRequest; +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.src_dhxorganization.vo.DhxResponse; +import com.seeyon.ctp.util.json.JSONUtil; + +/** + * 功能描述:
+ *
+ *
+ * 
+ * + * @Author: HuangZhengguo + * @Date: 2024/4/28 + */ +public class DhxHttpUtil { + + private DhxHttpUtil() { + + } + + public static String doPost(String url, String body) throws Exception { + + return HttpRequest.post(url).header("accept", "*/*") + .header("connection", "") + .body(body).execute().body(); + } + + public static DhxResponse parseResponse(String response) throws Exception { + try { + JSONObject object = JSONUtil.parseJSONString(response, JSONObject.class); + return new DhxResponse(object); + } catch (Exception e) { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("Status", "0"); + jsonObject.put("Msg", "解析json异常"); + jsonObject.put("Data", response); + return new DhxResponse(jsonObject); + } + } + + + + public static void main(String[] args) { + String url = ""; + } + +} diff --git a/src/com/seeyon/apps/src_dhxorganization/util/ParamUtil.java b/src/com/seeyon/apps/src_dhxorganization/util/ParamUtil.java new file mode 100644 index 0000000..65f9819 --- /dev/null +++ b/src/com/seeyon/apps/src_dhxorganization/util/ParamUtil.java @@ -0,0 +1,10 @@ +package com.seeyon.apps.src_dhxorganization.util; + +import com.seeyon.apps.ext.workflow.vo.FormDataVo; + +public class ParamUtil { + + public String param(String request, String method , FormDataVo formDataVo){ + return ""; + } +} diff --git a/src/com/seeyon/apps/src_dhxorganization/vo/DhxResponse.java b/src/com/seeyon/apps/src_dhxorganization/vo/DhxResponse.java new file mode 100644 index 0000000..e60e0a6 --- /dev/null +++ b/src/com/seeyon/apps/src_dhxorganization/vo/DhxResponse.java @@ -0,0 +1,76 @@ +package com.seeyon.apps.src_dhxorganization.vo; + +import com.alibaba.fastjson.JSONObject; + +/** + * 功能描述:
+ *
+ *
+ * 
+ * + * @Author: HuangZhengguo + * @Date: 2024/4/28 + */ +public class DhxResponse { + + private boolean success; + private int status; + private String msg; + private String data; + + + public DhxResponse(JSONObject object) { + if(object.containsKey("Status")) { + this.status = object.getInteger("Status"); + } else { + this.status = object.getString("status").equals("success")?1:2; + } + this.success = (1 == status); + if(object.containsKey("Msg")) { + this.msg = object.getString("Msg"); + } else { + this.msg = object.getString("errormsg"); + } + if(object.containsKey("Data")) { + this.data = object.getString("Data"); + } else { + this.data = object.getString("data"); + } + } + + public boolean isSuccess() { + return success; + } + + public DhxResponse setSuccess(boolean success) { + this.success = success; + return this; + } + + public int getStatus() { + return status; + } + + public DhxResponse setStatus(int status) { + this.status = status; + return this; + } + + public String getMsg() { + return msg; + } + + public DhxResponse setMsg(String msg) { + this.msg = msg; + return this; + } + + public String getData() { + return data; + } + + public DhxResponse setData(String data) { + this.data = data; + return this; + } +} diff --git a/src/com/seeyon/apps/src_dingding/ctrl/StartTaskController.java b/src/com/seeyon/apps/src_dingding/ctrl/StartTaskController.java new file mode 100644 index 0000000..d0aa41f --- /dev/null +++ b/src/com/seeyon/apps/src_dingding/ctrl/StartTaskController.java @@ -0,0 +1,138 @@ +package com.seeyon.apps.src_dingding.ctrl; + +import java.io.IOException; +import java.sql.SQLException; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.common.controller.BaseController; +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.ctp.common.quartz.QuartzHolder; +import com.seeyon.ctp.util.annotation.NeedlessCheckLogin; +import org.springframework.web.servlet.ModelAndView; + +import com.seeyon.apps.src_dingding.service.DingdingService; +import com.seeyon.apps.src_dingding.task.DingdingTask; +import com.taobao.api.ApiException; + +/** + * Description + *
定时任务控制器
+ * Copyright(c) Beijing Seeyon Software Co.,LTD + */ +public class StartTaskController extends BaseController { + + + private DingdingService dingdingService; + + public DingdingService getDingdingService() { + if (dingdingService == null) { + dingdingService = (DingdingService) AppContext.getBean("dingdingService"); + } + return dingdingService; } + + public void setDingdingService(DingdingService dingdingService) { + this.dingdingService = dingdingService; + } + + + @NeedlessCheckLogin + public ModelAndView index(HttpServletRequest request, HttpServletResponse response) throws IOException, RuntimeException, ApiException, BusinessException, SQLException, InterruptedException { +// 用于执行定时任务的开启和关闭 + String opera = request.getParameter("task"); + if("start".equals(opera)) { + String time; + try { +// time = ConfigKit.getTaskTime(); +// time = automaticService.getTaskTime(); + time = request.getParameter("time"); + } catch (Exception e) { + super.rendJavaScript(response, "alert('获取配置出错');"); + return null; + } + if(null == time) { + super.rendJavaScript(response, "alert('请正確配置请求地址中的time参数,如果定时执行,启用D-开头,如D-03,15表示每天三点十五执行,如果间隔时间执行,请用I-开头,例如I-03,00表示每三个小时执行一次!');"); + return null; + } else if(time.startsWith("D-")) { + // D-开头,每天执行任务 + String[] arr = time.split("-"); + try { + Integer[] itime = getTime(arr); + DingdingTask.registerSyncTask(false, itime[0], itime[1]); + super.rendJavaScript(response, "alert('任务注册成功,每天" + itime[0] + "点," + itime[1] + "分执行');"); + return null; + } catch (Exception e) { + super.rendJavaScript(response, "alert('" + e.getMessage() + "');"); + return null; + } + } else if(time.startsWith("I-")) { + // i-开头,是间隔时间执行 + String[] arr = time.split("-"); + try { + Integer[] itime = getTime(arr); + DingdingTask.registerSyncTask(true, itime[0], itime[1]); + super.rendJavaScript(response, "alert('任务注册成功,间隔" + itime[0] + "小时," + itime[1] + "分钟执行');"); + return null; + } catch (Exception e) { + super.rendJavaScript(response, "alert('" + e.getMessage() + "');"); + return null; + } + } else { + super.rendJavaScript(response, "alert('请正確配置链接地址中的time参数,如果定时执行,启用D-开头,如D-03,15表示每天三点十五执行,如果间隔时间执行,请用I-开头,例如I-03,00表示每三个小时执行一次!');"); + return null; + } + } else if("stop".equals(opera)){ + QuartzHolder.deleteQuartzJob(DingdingTask.jobName); + super.rendJavaScript(response, "alert('定时任务已经终止!');"); + return null; + } else if("run".equals(opera)) { + try{ + String datestr = request.getParameter("date"); + String ty = request.getParameter("ty"); + String msg = ""; + if("dk".equals(ty)){ + msg = getDingdingService().dingdingclockin(datestr); + + }else if ("kq".equals(ty)){ + msg = getDingdingService().setWorkAttendance(datestr); +// getDingdingService().setWorkAttendance1(); + }else{ + getDingdingService().dingdingattendance(); + msg = "参数输入错误请校验填写ty参数,date参数,进行数据进行数据调试"; + } + super.rendJavaScript(response, msg); + }catch (Exception e) { + super.rendJavaScript(response, "alert('定时任务执行失败!"+e.getMessage()+"');"); + return null; + } + return null; + } else { + super.rendJavaScript(response, "alert('参数有误,请联系开发人员!');"); + return null; + } + } + + private Integer[] getTime(String[] arr) throws Exception { + String time = arr[1]; + arr = time.split(","); + if(arr.length != 2) { + throw new Exception("小时和分钟请用逗号隔开"); + } + int our = Integer.valueOf(arr[0]); + int minute = Integer.valueOf(arr[1]); + if(our < 0 || our >= 24) { + throw new Exception("小时数必须在0~24之间"); + } + if(minute < 0 || minute >= 60) { + throw new Exception("分钟数必须在0~60之间"); + } + return new Integer[] {our, minute}; + } + +// public void setPushZcService(PushZcService pushZcService) { +// this.pushZcService = pushZcService; +// } + +} diff --git a/src/com/seeyon/apps/src_dingding/dao/DingdingDaoImpl.java b/src/com/seeyon/apps/src_dingding/dao/DingdingDaoImpl.java new file mode 100644 index 0000000..9977d17 --- /dev/null +++ b/src/com/seeyon/apps/src_dingding/dao/DingdingDaoImpl.java @@ -0,0 +1,825 @@ +package com.seeyon.apps.src_dingding.dao; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.seeyon.apps.src_dingding.vo.AttendanceVo; +import com.seeyon.apps.src_dingding.vo.CheckOnWorkAttendanceVo; +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.ctp.util.JDBCAgent; +import com.seeyon.ctp.util.UUIDLong; +import nc.vo.jcom.lang.StringUtil; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import com.seeyon.apps.src_dingding.util.BaseUtil; + +public class DingdingDaoImpl extends BaseUtil implements IDingdingDao{ + + private final static Log log = LogFactory.getLog(DingdingDaoImpl.class); + + private String adddept = "insert into SRC_DINGDING_OA_DEPT values (?,?,?,?,?)"; + private String updateWorkAttendance = "update SRC_CHECK_ON_WORK_ATTENDANCE set SHANGBAN1 = ? ,XIABAN1 = ? ,SHANGBAN2 = ? , XIABAN2 = ? ,STATE = ? where id = ?"; + private String addmember = "insert into SRC_DINGDING_OA_MEMBER values (?,?,?,?,?)"; + private String addCheckOnWorkAttendance = "insert into SRC_CHECK_ON_WORK_ATTENDANCE VALUES"; + private String getdeptBysuperDeptId = "select * from SRC_DINGDING_OA_DEPT where DINGDINGDEPTID = '${dingdingdeptid}'"; + private String getdeptByPathName = "select NAME,ID from ORG_UNIT where PATH like ? and NAME = ? AND IS_INTERNAL = 1 AND IS_ENABLE = 1 AND IS_DELETED = 0"; + private String getDingdingOaDept = "select * from SRC_DINGDING_OA_DEPT "; + private String getDingdingOaMember = "SELECT * FROM (SELECT a.*, ROWNUM rnum FROM (SELECT * FROM SRC_DINGDING_OA_MEMBER ORDER BY id ) a WHERE ROWNUM <= ? ) WHERE rnum > ? "; + private String getDingdingOaMemberNum = "select count(t.oamemberid) as num from (SELECT oamemberid,count(oamemberid) as oanum FROM SRC_DINGDING_OA_MEMBER group by oamemberid) t"; + private String getDepartmentById = "select ID,NAME,PATH from ORG_UNIT WHERE ID = ? AND IS_INTERNAL = 1 AND IS_ENABLE = 1 AND IS_DELETED = 0"; + private String getdeptsizeBydingdingid = "select count(id) as DINGDINGSIZE from src_dingding_oa_dept where dingdingdeptid = '${dingdingdeptid}'"; + private String getmembersizeBydingdingid = "select count(id) as DINGDINGSIZE from src_dingding_oa_member where dingdingmemberid = '${dingdingmemberid}'"; + private String getClockInNumBymember = "select COUNT(field0001) as num from formmain_10430 where field0001 = ? and field0006>=to_date(?,'YYYY-MM-DD') group by field0001"; + private String getClockInBymember = "select * from formson_10431 tb1 left join formmain_10430 tb2 on tb1.formmain_id = tb2.id where tb2.field0001 = ? and tb2.field0006=to_date(?,'YYYY-MM-DD')"; + private String getLeave = "select * from formmain_10368 where field0003 = ? and field0010 >= to_date(?,'YYYY-MM-DD') and field0009 <= TO_DATE(?,'YYYY-MM-DD')"; + private String getEvections = "select * from formmain_10367 where field0003 = ? and field0011 >= to_date(?,'YYYY-MM-DD') and field0010 <= to_date(?,'YYYY-MM-DD')"; + private String getWorkAttendanceByDate = "select * from SRC_CHECK_ON_WORK_ATTENDANCE where MEMBERID = ? and CHECKONWORKATTENDANCEDATE >= to_date(?,'YYYY-MM-DD HH24:MI:SS') and CHECKONWORKATTENDANCEDATE <= to_date(?,'YYYY-MM-DD HH24:MI:SS')"; +// private String getWorkAttendanceByDate = "select * from SRC_CHECK_ON_WORK_ATTENDANCE where MEMBERID = ? and CHECKONWORKATTENDANCEDATE >= ? and CHECKONWORKATTENDANCEDATE <= ?"; + private String getAdjustLeave = "select * from formmain_10363 where field0007 = ? and field0013 >= to_date(?,'YYYY-MM-DD') and field0001 <= to_date(?,'YYYY-MM-DD')"; + private String getOvertime = "select * from formson_10366 where field0033 = ? and field0030 >= to_date(?,'YYYY-MM-DD') and field0029 <= to_date(?,'YYYY-MM-DD')"; + private String getMakeCard = "select * from formmain_10369 where field0007 = ? and field0001 >= to_date(?,'YYYY-MM-DD') and field0001 <= to_date(?,'YYYY-MM-DD')"; + private String getGroupName = "select field0002 from formmain_10430 where field0001 = ? and field0002 is not null and rownum = 1"; + private String getDingdingAttendanceSize = "select COUNT(id) AS con from SRC_DINGDING_ATTENDANCE where id = ? "; + private String addDingdingAttendance = "insert into SRC_DINGDING_ATTENDANCE(ID,GROUPID,GROUPNAME) values (?,?,?)"; + private String updateDingdingAttendance = "UPDATE SRC_DINGDING_ATTENDANCE SET GROUPNAME = ? where GROUPID = ?"; + private String getDingdingAttendanceBygroupId = "select * from SRC_DINGDING_ATTENDANCE where groupid = ?"; + + public Map getDingdingAttendanceBygroupId(String groupid) { + Map ret = new HashMap(); + JDBCAgent agent = new JDBCAgent(); + try { + StringBuilder sql = new StringBuilder(getDingdingAttendanceBygroupId); + List p = new ArrayList(); + p.add(groupid); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + for (Map map : list) { + ret.put("groupid", map.get("groupid").toString()); + ret.put("groupname", map.get("groupname").toString()); + } + } catch (BusinessException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (SQLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + }finally { + if (agent != null) { + agent.close(); + } + } + return ret; + } + + public int addDingdingAttendance(AttendanceVo attendanceVo) { + int i = 0; + try { + long id = UUIDLong.longUUID(); + String sql = addDingdingAttendance; + Object[] params = null; + params = new Object[] { id,attendanceVo.getGroupid(),attendanceVo.getGroupname() }; + i = super.executeUpdate(sql.toString(), params); + } finally { + super.close(); + } + return i; + } + + public int updateDingdingAttendance(AttendanceVo attendanceVo) { + int i = 0; + try { + long id = UUIDLong.longUUID(); + String sql = updateDingdingAttendance; + Object[] params = null; + params = new Object[] { attendanceVo.getGroupname(),attendanceVo.getGroupid() }; + i = super.executeUpdate(sql.toString(), params); + } finally { + super.close(); + } + return i; + } + + + @Override + public int getDingdingAttendanceSize(String attendanceId) { + int ret = 0; + JDBCAgent agent = new JDBCAgent(); + try { + StringBuilder sql = new StringBuilder(getDingdingAttendanceSize); + List p = new ArrayList(); + p.add(attendanceId); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + for (Map map : list) { + String con = map.get("con").toString(); + ret = Integer.parseInt(con); + } + } catch (BusinessException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (SQLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + }finally { + if (agent != null) { + agent.close(); + } + } + return ret; + } + + public int adddept(Map map) { + int i = 0; + try { + long id = UUIDLong.longUUID(); + String sql = adddept; + Object[] params = null; + params = new Object[] { id,map.get("oadeptid"),map.get("oadeptname"),map.get("dingdingdeptid"),map.get("dingdingdeptname") }; + i = super.executeUpdate(sql.toString(), params); + } finally { + super.close(); + } + return i; + } + + public Map getdeptBysuperDeptId(String deptid) { + Map map = new HashMap(); + String sql = getdeptBysuperDeptId; + sql = sql.replace("${dingdingdeptid}", deptid); + Object[] params = new Object[] {}; + ResultSet rs = super.executeQuery(sql, params); + try { + while (rs.next()) { + map.put("oadeptid", rs.getString("oadeptid")); + map.put("oadeptname", rs.getString("oadeptname")); + map.put("dingdingdeptid", rs.getString("dingdingdeptid")); + map.put("dingdingdeptname", rs.getString("dingdingdeptname")); + } + } catch (SQLException e) { + e.printStackTrace(); + }finally { + super.close(); + } + return map; + + } + + + public Map getdeptByPathName(String path,String name) throws BusinessException, SQLException { + Map ret = new HashMap(); + JDBCAgent agent = new JDBCAgent(); + try { + StringBuilder sql = new StringBuilder(getdeptByPathName); + List p = new ArrayList(); + p.add(path); + p.add(name); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + if(list.size()==0) { + return null; + } + for (Map map : list) { + ret.put("name", map.get("name")); + ret.put("id", map.get("id")); + } + } catch (BusinessException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (SQLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + }finally { + if (agent != null) { + agent.close(); + } + } + return ret; + } + + @Override + public List> getDingdingOaDept() throws BusinessException, SQLException { + List> ret = new ArrayList>(); + JDBCAgent agent = new JDBCAgent(); + try { + StringBuilder sql = new StringBuilder(getDingdingOaDept); + List p = new ArrayList(); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + for (Map map : list) { + Map m = new HashMap(); + m.put("dingdingdeptid", map.get("dingdingdeptid")); + m.put("dingdingdeptname", map.get("dingdingdeptname")); + m.put("oadeptid", map.get("oadeptid")); + m.put("oadeptname", map.get("oadeptname")); + ret.add(m); + } + } catch (BusinessException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (SQLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + }finally { + if (agent != null) { + agent.close(); + } + } + return ret; + } + + @Override + public Map getDepartmentById(Long deptid) throws BusinessException, SQLException { + JDBCAgent agent = new JDBCAgent(); + Map ret = new HashMap(); + try { + StringBuilder sql = new StringBuilder(getDepartmentById); + List p = new ArrayList(); + p.add(deptid); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + for (Map map : list) { + ret.put("id", map.get("id")); + ret.put("name", map.get("name")); + ret.put("path", map.get("path")); + } + } catch (BusinessException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (SQLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + }finally { + if (agent != null) { + agent.close(); + } + } + return ret; + } + + @Override + public int addmember(Map map) { + int i = 0; + try { + long id = UUIDLong.longUUID(); + String sql = addmember; + Object[] params = null; + params = new Object[] { id,map.get("oamemberid"),map.get("oamembername"),map.get("dingdingmemberid"),map.get("dingdingmembername") }; + i = super.executeUpdate(sql.toString(), params); + } finally { + super.close(); + } + return i; + } + + @Override + public boolean getdeptsizeBydingdingid(String dingdingdeptid) { + boolean boo = false; + String sql = getdeptsizeBydingdingid; + sql = sql.replace("${dingdingdeptid}", dingdingdeptid); + Object[] params = new Object[] {}; + ResultSet rs = super.executeQuery(sql, params); + try { + while (rs.next()) { + String dingdingsize = rs.getString("DINGDINGSIZE"); + int size = Integer.parseInt(dingdingsize); + if(size>0) { + boo = true; + } + } + } catch (SQLException e) { + e.printStackTrace(); + }finally { + super.close(); + } + return boo; + } + + + @Override + public boolean getmembersizeBydingdingid(String dingdingmemberid) { + boolean boo = false; + int ii = 0; + String sql = getmembersizeBydingdingid; + sql = sql.replace("${dingdingmemberid}", dingdingmemberid); + Object[] params = new Object[] {}; + ResultSet rs = super.executeQuery(sql, params); + try { + while (rs.next()) { + String dingdingsize = rs.getString("DINGDINGSIZE"); + int size = Integer.parseInt(dingdingsize); + ii = size; + if(size>0) { + boo = true; + } + } + log.info(sql+boo+ii); + } catch (SQLException e) { + e.printStackTrace(); + }finally { + super.close(); + } + return boo; + } + + @Override + public int getClockInNumBymember(String date, String memberId) { + int in = 0; + JDBCAgent agent = new JDBCAgent(); + try { + StringBuilder sql = new StringBuilder(getClockInNumBymember); + List p = new ArrayList(); + p.add(memberId); + p.add(date); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + for (Map map : list) { + in = Integer.parseInt(map.get("num").toString()); + } + } catch (BusinessException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (SQLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + }finally { + if (agent != null) { + agent.close(); + } + } + return in; + } + + @Override + public List> getClockInBymember(String date, String memberId) { + List> ret = new ArrayList>(); + JDBCAgent agent = new JDBCAgent(); + try { + StringBuilder sql = new StringBuilder(getClockInBymember); + List p = new ArrayList(); + p.add(memberId); + p.add(date); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + for (Map map : list) { + Map m = new HashMap(); + m.put("clockInDate", map.get("field0008").toString()); + m.put("referenceDate", map.get("field0009").toString()); + m.put("groupName", map.get("field0002").toString()); + m.put("state", map.get("field0010")); + m.put("type", map.get("field0014")); + ret.add(m); + } + } catch (BusinessException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (SQLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + }finally { + if (agent != null) { + agent.close(); + } + } + return ret; + } + + @Override + public int addCheckOnWorkAttendance(CheckOnWorkAttendanceVo checkOnWorkAttendanceVo) { + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + int i = 0 ; + JDBCAgent agent = new JDBCAgent(); + try { + StringBuilder sql = new StringBuilder(addCheckOnWorkAttendance); + Object[] params = null; + sql.append(" ('"+checkOnWorkAttendanceVo.getId()+"','"+checkOnWorkAttendanceVo.getMemberId()+"'"); + if(checkOnWorkAttendanceVo.getCheckOnWorkAttendanceDate() == null){ + sql.append(",''"); + }else{ + sql.append(",TO_DATE('"+simpleDateFormat.format(checkOnWorkAttendanceVo.getCheckOnWorkAttendanceDate())+"','YYYY-MM-DD HH24:MI:SS')"); + } + +// 上班1 + if(checkOnWorkAttendanceVo.getShangbanDate1() == null){ + sql.append(",''"); + }else{ + sql.append(",TO_DATE('"+simpleDateFormat.format(checkOnWorkAttendanceVo.getShangbanDate1())+"','YYYY-MM-DD HH24:MI:SS')"); + } + if(StringUtil.isEmpty(checkOnWorkAttendanceVo.getShangban1())){ + sql.append(",''"); + }else{ + sql.append(",'"+checkOnWorkAttendanceVo.getShangban1()+"'"); + } + +// 下班1 + if(checkOnWorkAttendanceVo.getXiabanDate1() == null){ + sql.append(",''"); + }else{ + sql.append(",TO_DATE('"+simpleDateFormat.format(checkOnWorkAttendanceVo.getXiabanDate1())+"','YYYY-MM-DD HH24:MI:SS')"); + } + if(StringUtil.isEmpty(checkOnWorkAttendanceVo.getXiaban1())){ + sql.append(",''"); + }else{ + sql.append(",'"+checkOnWorkAttendanceVo.getXiaban1()+"'"); + } + +// 上班2 + if(checkOnWorkAttendanceVo.getShangbanDate2() == null){ + sql.append(",''"); + }else{ + sql.append(",TO_DATE('"+simpleDateFormat.format(checkOnWorkAttendanceVo.getShangbanDate2())+"','YYYY-MM-DD HH24:MI:SS')"); + } + if(StringUtil.isEmpty(checkOnWorkAttendanceVo.getShangban2())){ + sql.append(",''"); + }else{ + sql.append(",'"+checkOnWorkAttendanceVo.getShangban2()+"'"); + } + +// 下班2 + if(checkOnWorkAttendanceVo.getXiabanDate2() == null){ + sql.append(",''"); + }else{ + sql.append(",TO_DATE('"+simpleDateFormat.format(checkOnWorkAttendanceVo.getXiabanDate2())+"','YYYY-MM-DD HH24:MI:SS')"); + } + if(StringUtil.isEmpty(checkOnWorkAttendanceVo.getXiaban2())){ + sql.append(",''"); + }else{ + sql.append(",'"+checkOnWorkAttendanceVo.getXiaban2()+"'"); + } + + sql.append(",'"+checkOnWorkAttendanceVo.getState()+"'"); + sql.append(",'"+checkOnWorkAttendanceVo.getGroupName()+"')"); + List p = new ArrayList(); + i=agent.execute(sql.toString(), p); + } catch (BusinessException e) { + e.printStackTrace(); + } catch (SQLException e) { + e.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return i; + } + + @Override + public List> getLeave( String memberId,String startDate, String endDate) { + List> ret = new ArrayList>(); + JDBCAgent agent = new JDBCAgent(); + try { + StringBuilder sql = new StringBuilder(getLeave); + List p = new ArrayList(); + p.add(memberId); + p.add(startDate); + p.add(endDate); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + for (Map map : list) { + Map m = new HashMap(); + m.put("member", map.get("field0003")); + m.put("type", map.get("field0031")); + m.put("startDateStr", map.get("field0009")); + m.put("endDateStr", map.get("field0010")); + ret.add(m); + } + } catch (BusinessException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (SQLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + }finally { + if (agent != null) { + agent.close(); + } + } + return ret; + } + + + @Override + public List getWorkAttendanceByDate(String memberId, String startDate, String endDate) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + log.info("查询的参数"+memberId+startDate+endDate); + List ret = new ArrayList(); + JDBCAgent agent = new JDBCAgent(); + try { + StringBuilder sql = new StringBuilder(getWorkAttendanceByDate); + List p = new ArrayList(); + p.add(memberId); + p.add(startDate); + p.add(endDate); + agent.execute(sql.toString(), p); + log.info("执行SQL"); + List list = agent.resultSetToList(); + log.info(list.size()); + for (Map map : list) { + log.info(map); + log.info(map.get("shangbandate1")!= null); + CheckOnWorkAttendanceVo m = new CheckOnWorkAttendanceVo(); + m.setId(Long.parseLong( map.get("id").toString())); + m.setMemberId(Long.parseLong(map.get("memberid").toString())); + log.info(sdf.parse(map.get("checkonworkattendancedate").toString())); + m.setCheckOnWorkAttendanceDate(sdf.parse(map.get("checkonworkattendancedate").toString())); + log.info("shangban1"+map.get("shangbandate1")); + if(map.get("shangbandate1") != null){ + m.setShangbanDate1(sdf.parse(map.get("shangbandate1").toString())); + m.setShangban1(map.get("shangban1").toString()); + }else{ + m.setShangbanDate1(null); + m.setShangban1("未打卡"); + } + log.info("xiaban1"+map.get("xiabandate1")); + if(map.get("xiabandate1") != null){ + m.setXiabanDate1(sdf.parse(map.get("xiabandate1").toString())); + m.setXiaban1(map.get("xiaban1").toString()); + }else{ + m.setXiabanDate1(null); + m.setXiaban1("未打卡"); + } + log.info("shangban2"+map.get("shangbandate2")); + if(map.get("shangbandate2") != null){ + m.setShangbanDate2(sdf.parse(map.get("shangbandate2").toString())); + m.setShangban2(map.get("shangban2").toString()); + }else{ + m.setShangbanDate2(null); + m.setShangban2("未打卡"); + } + log.info("xiaban2"+map.get("xiabandate2")); + if(map.get("xiabandate2") != null){ + m.setXiabanDate2(sdf.parse(map.get("xiabandate2").toString())); + m.setXiaban2(map.get("xiaban2").toString()); + }else{ + m.setXiabanDate2(null); + m.setXiaban2("未打卡"); + } + log.info(map.get("state")); + m.setState(map.get("state").toString()); + log.info(m.toString()); + ret.add(m); + } + } catch (BusinessException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (SQLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (ParseException e) { + e.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + log.info(ret); + return ret; + } + + @Override + public List> getEvections(String memberId, String startDate, String endDate) { + List> ret = new ArrayList>(); + JDBCAgent agent = new JDBCAgent(); + try { + StringBuilder sql = new StringBuilder(getEvections); + List p = new ArrayList(); + p.add(memberId); + p.add(startDate); + p.add(endDate); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + for (Map map : list) { + Map m = new HashMap(); + m.put("member", map.get("field0003")); + m.put("type", "出差"); + m.put("startDateStr", map.get("field0010")); + m.put("endDateStr", map.get("field0011")); + ret.add(m); + } + } catch (BusinessException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (SQLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + return ret; + } + } + + @Override + public List> getAdjustLeave(String memberId, String startDate, String endDate) { + List> ret = new ArrayList>(); + JDBCAgent agent = new JDBCAgent(); + try { + StringBuilder sql = new StringBuilder(getAdjustLeave); + List p = new ArrayList(); + p.add(memberId); + p.add(startDate); + p.add(endDate); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + for (Map map : list) { + Map m = new HashMap(); + m.put("member", map.get("field0007")); + m.put("type", "调休"); + m.put("startDateStr", map.get("field0001")); + m.put("endDateStr", map.get("field0013")); + ret.add(m); + } + } catch (BusinessException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (SQLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + }finally { + if (agent != null) { + agent.close(); + } + } + return ret; + } + + @Override + public List> getOvertime(String memberId, String startDate, String endDate) { + List> ret = new ArrayList>(); + JDBCAgent agent = new JDBCAgent(); + try { + StringBuilder sql = new StringBuilder(getOvertime); + List p = new ArrayList(); + p.add(memberId); + p.add(startDate); + p.add(endDate); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + for (Map map : list) { + log.info("加班查询数据: "+map); + Map m = new HashMap(); + m.put("member", map.get("field0033")); + m.put("type", "加班"+map.get("field0031")+"小时" ); + m.put("startDateStr", map.get("field0029")); + m.put("endDateStr", map.get("field0030")); + ret.add(m); + } + } catch (BusinessException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (SQLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + }finally { + if (agent != null) { + agent.close(); + } + } + return ret; + } + + @Override + public List> getMakeCard(String memberId, String startDate, String endDate) { + List> ret = new ArrayList>(); + JDBCAgent agent = new JDBCAgent(); + try { + StringBuilder sql = new StringBuilder(getMakeCard); + List p = new ArrayList(); + p.add(memberId); + p.add(startDate); + p.add(endDate); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + for (Map map : list) { + Map m = new HashMap(); + m.put("member", map.get("field0007")); + m.put("type", "补卡" ); + m.put("makeCardDateStr", map.get("field0001")); + ret.add(m); + } + } catch (BusinessException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (SQLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + }finally { + if (agent != null) { + agent.close(); + } + } + return ret; + } + + @Override + public String getGroupName(String memberId) { + String ret = ""; + JDBCAgent agent = new JDBCAgent(); + try { + StringBuilder sql = new StringBuilder(getGroupName); + List p = new ArrayList(); + p.add(memberId); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + for (Map map : list) { + ret = map.get("field0002").toString(); + } + } catch (BusinessException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (SQLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + }finally { + if (agent != null) { + agent.close(); + } + } + return ret; + } + + @Override + public String getDingdingOaMemberNum() { + String ret = ""; + JDBCAgent agent = new JDBCAgent(); + try { + StringBuilder sql = new StringBuilder(getDingdingOaMemberNum); + List p = new ArrayList(); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + for (Map map : list) { + ret = map.get("num").toString(); + } + } catch (BusinessException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (SQLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + }finally { + if (agent != null) { + agent.close(); + } + } + return ret; + } + + @Override + public int updateWorkAttendance(CheckOnWorkAttendanceVo checkOnWorkAttendanceVo) { + int i = 0; + try { + String sql = updateWorkAttendance; + Object[] params = null; + params = new Object[] { checkOnWorkAttendanceVo.getShangban1(), + checkOnWorkAttendanceVo.getXiaban1(), + checkOnWorkAttendanceVo.getShangban2(), + checkOnWorkAttendanceVo.getXiaban2(), + checkOnWorkAttendanceVo.getState(),checkOnWorkAttendanceVo.getId() }; + i = super.executeUpdate(sql.toString(), params); + } finally { + super.close(); + } + return i; + } + + @Override + public List> getDingdingOaMember(String startnum , String endnum) throws BusinessException, SQLException { + List> ret = new ArrayList>(); + JDBCAgent agent = new JDBCAgent(); + try { + StringBuilder sql = new StringBuilder(getDingdingOaMember); + List p = new ArrayList(); + p.add(endnum); + p.add(startnum); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + for (Map map : list) { + Map m = new HashMap(); + m.put("dingdingmemberid", map.get("dingdingmemberid")); + m.put("dingdingmembername", map.get("dingdingmembername")); + m.put("oamemberid", map.get("oamemberid")); + m.put("oamembername", map.get("oamembername")); + ret.add(m); + } + } catch (BusinessException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (SQLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + }finally { + if (agent != null) { + agent.close(); + } + } + return ret; + } + +} diff --git a/src/com/seeyon/apps/src_dingding/dao/IDingdingDao.java b/src/com/seeyon/apps/src_dingding/dao/IDingdingDao.java new file mode 100644 index 0000000..ce7e4f2 --- /dev/null +++ b/src/com/seeyon/apps/src_dingding/dao/IDingdingDao.java @@ -0,0 +1,209 @@ +package com.seeyon.apps.src_dingding.dao; + +import java.sql.SQLException; +import java.util.List; +import java.util.Map; + +import com.seeyon.apps.src_dingding.vo.AttendanceVo; +import com.seeyon.apps.src_dingding.vo.CheckOnWorkAttendanceVo; +import com.seeyon.ctp.common.exceptions.BusinessException; + +public interface IDingdingDao { + + /** + * 添加部门对照表信息 + * @param map + * @return + */ + public int adddept(Map map); + + /** + * 添加人员对照表信息 + * @param map + * @return + */ + public int addmember(Map map); + + /** + * 根据部门ID查询部门对照表中的部门信息 + * @param deptid + * @return + */ + public Map getdeptBysuperDeptId(String deptid); + + /** + * 通过部门路径和部门名称查询OA系统中部门信息 + * @param path + * @param name + * @return + * @throws BusinessException + * @throws SQLException + */ + public Map getdeptByPathName(String path,String name)throws BusinessException, SQLException, BusinessException; + + /** + * 查询部门对照表中所有的部门信息 + * @return + * @throws BusinessException + * @throws SQLException + */ + public List> getDingdingOaDept()throws BusinessException, SQLException; + + /** + * 查询分页查询所有人员信息 + * @return + * @throws BusinessException + * @throws SQLException + */ + public List> getDingdingOaMember(String startnum , String endnum)throws BusinessException, SQLException; + + /** + * 根据部门ID查询OA系统中的部门信息 + * @param deptid + * @return + * @throws BusinessException + * @throws SQLException + */ + public Map getDepartmentById(Long deptid)throws BusinessException, SQLException; + + /** + * 查询当前部门信息是否在部门对照表中存在 + * @param dingdingdeptid + * @return + */ + public boolean getdeptsizeBydingdingid(String dingdingdeptid); + + /** + * 查询当前人员信息是否在人员对照表中存在 + * @param dingdingmemberid + * @return + */ + public boolean getmembersizeBydingdingid(String dingdingmemberid); + + /** + * 获取指定人员近一月的打卡情况 + * @param date('yyyy-MM-dd') + * @param memberId + * @return + */ + public int getClockInNumBymember(String date,String memberId); + + /** + * 获取指定人员前一日打卡情况 + * @param date('yyyy-MM-dd') + * @param memberId + * @return + */ + public List> getClockInBymember(String date,String memberId); + + /** + * 将封装的打卡信息保存到考勤表中 + * @param checkOnWorkAttendanceVo 考勤数据对象 + * @return + */ + public int addCheckOnWorkAttendance(CheckOnWorkAttendanceVo checkOnWorkAttendanceVo); + + /** + * 修改考勤表中的数据 + * @param checkOnWorkAttendanceVo 考勤数据对象 + * @return + */ + public int updateWorkAttendance(CheckOnWorkAttendanceVo checkOnWorkAttendanceVo); + + /** + * 查询规定时间之内的请假单据 + * @param memberId 人员ID + * @param startDate 查询开始时间 + * @param endDate 查询结束时间 + * @return + */ + public List> getLeave(String memberId, String startDate,String endDate); + + /** + * 查询指定时间内的考勤情况 + * @param memberId 人员ID + * @param startDate 查询开始时间 + * @param endDate 查询结束时间 + * @return + */ + public List getWorkAttendanceByDate(String memberId, String startDate,String endDate); + + /** + * 查询规定时间之内的出差单据 + * @param memberId 人员ID + * @param startDate 查询开始时间 + * @param endDate 查询结束时间 + * @return + */ + public List> getEvections(String memberId, String startDate,String endDate); + + /** + * 查询规定时间之内的调休单据 + * @param memberId 人员ID + * @param startDate 查询开始时间 + * @param endDate 查询结束时间 + * @return + */ + public List> getAdjustLeave(String memberId, String startDate,String endDate); + + /** + * 查询规定时间之内的加班单据 + * @param memberId 人员ID + * @param startDate 查询开始时间 + * @param endDate 查询结束时间 + * @return + */ + public List> getOvertime(String memberId, String startDate,String endDate); + + /** + * 查询规定时间之内的补卡单据 + * @param memberId 人员ID + * @param startDate 查询开始时间 + * @param endDate 查询结束时间 + * @return + */ + public List> getMakeCard(String memberId, String startDate,String endDate); + + /** + * 查询规定时间之内的补卡单据 + * @param memberId 人员ID + * @return + */ + public String getGroupName(String memberId); + + /** + * 查询规定时间之内的补卡单据 + * @return + */ + public String getDingdingOaMemberNum(); + + /** + * 根据ID查询考情组是否存在 + * @param attendanceId + * @return + */ + public int getDingdingAttendanceSize(String attendanceId); + + /** + * 添加考勤组 + * @param attendanceVo + * @return + */ + public int addDingdingAttendance(AttendanceVo attendanceVo); + + /** + * 修改考勤组 + * @param attendanceVo + * @return + */ + public int updateDingdingAttendance(AttendanceVo attendanceVo); + + /** + * 根据考勤组ID查询考勤组信息 + * @param groupid + * @return + */ + public Map getDingdingAttendanceBygroupId(String groupid); + + +} diff --git a/src/com/seeyon/apps/src_dingding/kit/A8FolderKit.java b/src/com/seeyon/apps/src_dingding/kit/A8FolderKit.java new file mode 100644 index 0000000..9138fd5 --- /dev/null +++ b/src/com/seeyon/apps/src_dingding/kit/A8FolderKit.java @@ -0,0 +1,26 @@ +package com.seeyon.apps.src_dingding.kit; + +import com.seeyon.ctp.common.SystemEnvironment; + +/** + * Description + *
获取A8产品下面的文件夹路径
+ * Copyright(c) Beijing Seeyon Software Co.,LTD + */ +public class A8FolderKit { + + private static String SH_PROP = ""; + + /** + * Description: + *
获取到A8的安装应用目录  seeyon
+ * @return + */ + public static String getPropFile() { + if("".equals(SH_PROP)) { + SH_PROP = SystemEnvironment.getApplicationFolder() + "/WEB-INF/cfgHome/plugin/src_dingding/dingding.properties"; + } + return SH_PROP; + } + +} diff --git a/src/com/seeyon/apps/src_dingding/kit/PropKit.java b/src/com/seeyon/apps/src_dingding/kit/PropKit.java new file mode 100644 index 0000000..c491bba --- /dev/null +++ b/src/com/seeyon/apps/src_dingding/kit/PropKit.java @@ -0,0 +1,70 @@ +package com.seeyon.apps.src_dingding.kit; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.util.Properties; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 读取参数 + */ + +public class PropKit { + + private static long lastModify; + + private static ConcurrentHashMap props; + + public static final String PROFILE = "profile"; + + public static final String JDBCDRIVER = "jdbc_driver"; + public static final String JDBCURL = "jdbc_url"; + public static final String JDBCUSER = "jdbc_user"; + public static final String JDBCPASSWORD = "jdbc_password"; + + public static final String PROD_JDBCDRIVER = "prod.jdbc_driver"; + public static final String PROD_JDBCURL = "prod.jdbc_url"; + public static final String PROD_JDBCUSER = "prod.jdbc_user"; + public static final String PROD_JDBCPASSWORD = "prod.jdbc_password"; + + /** + * @return + * @throws IOException + * @throws FileNotFoundException + */ + public static String getProp(String key) throws FileNotFoundException, IOException { + File f = new File(A8FolderKit.getPropFile()); + if(null == props) { + props = new ConcurrentHashMap(); + } + if(f.lastModified() != lastModify) { + /** + * huangzhengguo + * 2022-10-18 + */ + Properties prop = new Properties(); + prop.load(new FileInputStream(f)); +// Properties prop = PropertiesUtil.getFromFile((CtpLocalFile) f); + + /** + * end + */ + String profile = prop.getProperty(PROFILE); + if("prod".equals(profile)) { + props.put(JDBCDRIVER, prop.getProperty(PROD_JDBCDRIVER)); + props.put(JDBCURL, prop.getProperty(PROD_JDBCURL)); + props.put(JDBCUSER, prop.getProperty(PROD_JDBCUSER)); + props.put(JDBCPASSWORD, prop.getProperty(PROD_JDBCPASSWORD)); + } else { + props.put(JDBCDRIVER, prop.getProperty(PROD_JDBCDRIVER)); + props.put(JDBCURL, prop.getProperty(PROD_JDBCURL)); + props.put(JDBCUSER, prop.getProperty(PROD_JDBCUSER)); + props.put(JDBCPASSWORD, prop.getProperty(PROD_JDBCPASSWORD)); + } + } + return props.get(key); + } + +} diff --git a/src/com/seeyon/apps/src_dingding/service/DingdingService.java b/src/com/seeyon/apps/src_dingding/service/DingdingService.java new file mode 100644 index 0000000..064e77e --- /dev/null +++ b/src/com/seeyon/apps/src_dingding/service/DingdingService.java @@ -0,0 +1,1323 @@ +package com.seeyon.apps.src_dingding.service; + +import java.sql.SQLException; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +import com.seeyon.apps.src_dingding.vo.AttendanceVo; +import com.seeyon.apps.src_dingding.vo.CheckOnWorkAttendanceVo; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.ctp.organization.bo.V3xOrgAccount; +import com.seeyon.ctp.organization.bo.V3xOrgMember; +import com.seeyon.ctp.organization.manager.OrgManager; +import com.seeyon.ctp.services.ServiceException; +import org.apache.commons.collections.map.HashedMap; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.src_dingding.dao.IDingdingDao; +import com.seeyon.apps.src_dingding.util.DingtalkUtil; +import com.seeyon.apps.src_dingding.util.FormExportUtil; +import com.seeyon.v3x.services.form.FormFactory; +import com.seeyon.v3x.services.form.bean.FormExport; +import com.seeyon.v3x.services.form.bean.SubordinateFormExport; +import com.seeyon.v3x.services.form.bean.ValueExport; +import com.taobao.api.ApiException; +import www.seeyon.com.utils.StringUtil; +import www.seeyon.com.utils.UUIDUtil; + +public class DingdingService { + + private final static Log log = LogFactory.getLog(DingdingService.class); + private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + private SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + private IDingdingDao dingdingDao; + + public void setDingdingDao(IDingdingDao dingdingDao) { + this.dingdingDao = dingdingDao; + } + + public IDingdingDao getDingdingDao() { + if (dingdingDao == null) { + dingdingDao = (IDingdingDao) AppContext.getBean("dingdingDao"); + } + return dingdingDao; + } + + private OrgManager orgManager; + + public void setOrgManager(OrgManager orgManager) { + this.orgManager = orgManager; + } + + public OrgManager getOrgManager() { + if (orgManager == null) { + orgManager = (OrgManager) AppContext.getBean("orgManager"); + } + return orgManager; + } + + private FormFactory formFactory; + + public void setFormFactory(FormFactory formFactory) { + this.formFactory = formFactory; + } + + public FormFactory getFormFactory() { + if (formFactory == null) { + formFactory = (FormFactory) AppContext.getBean("formFactory"); + } + return formFactory; + } + + +// 同步钉钉考勤组信息 + public String dingdingattendance() { +// 查询钉钉中的所有考情组信息 + try { +// 设置查询钉钉的参数 + JSONObject attendance = new JSONObject(); + int offset = 0 ; + boolean hasMore; + do { + attendance.put("offset",offset); + attendance.put("size", 10); + DingtalkUtil dingtalkUtil = new DingtalkUtil(); + JSONObject ret = dingtalkUtil.doPost(attendance.toString(), "https://oapi.dingtalk.com/topapi/attendance/getsimplegroups"); + JSONObject result = ret.getJSONObject("result"); + JSONArray groups = result.getJSONArray("groups"); + for(int i = 0 ; i < groups.size() ; i++){ + //查询当前考情组信息在数据库中是否已经保存 + JSONObject group = groups.getJSONObject(i); + // 查询当前考情组信息在数据库中是否已经保存 + int size = dingdingDao.getDingdingAttendanceSize(group.getString("group_id")); + AttendanceVo attendanceVo = new AttendanceVo(); + attendanceVo.setGroupid(group.getString("group_id")); + attendanceVo.setGroupname(group.getString("group_name")); + int num = -1; + if(size>0){ + // 当前信息已保存修改当前保存的考勤组信息 + num = dingdingDao.updateDingdingAttendance(attendanceVo); + }else{ + // 当前考情组信息不存在新增考勤组信息 + num = dingdingDao.addDingdingAttendance(attendanceVo); + } + } + hasMore = result.getBoolean("has_more"); + offset = offset+10; + } while (hasMore); + } catch (ApiException e) { + e.printStackTrace(); + } + return null; + } + + public String dingdingdept() { +// 人员全路径名称是是唯一值,通过获取单位-部门-名称确定人员唯一性 +// 记录对应信息 单位-部门=部门ID 的map数据,循环编辑之后通过 部门ID 查询人员信息 +// 查询到的人员信息在根据单位-部门信息对应到OA系统中的人员信息上 +// 创建参数用于保存上级部门ID + try { + List deptids = new ArrayList(); +// 创建参数用于保存同级部门ID + List newdeptids = new ArrayList(); +// 初次循环使用集团层级 + deptids.add("120474537"); + JSONObject deptparam = new JSONObject(); + do { + log.info("开始循环。。。"); + for(int in = 0 ; in < deptids.size();in++) { +// 设置查询钉钉的参数 + deptparam.put("dept_id", deptids.get(in)); + deptparam.put("language", "zh_CN"); + DingtalkUtil dingtalkUtil = new DingtalkUtil(); + JSONObject ret = dingtalkUtil.doPost(deptparam.toString(), "https://oapi.dingtalk.com/topapi/v2/department/listsub"); + JSONArray departments = ret.getJSONArray("result"); + if(departments==null) { + continue; + } + for(int i = 0 ; i < departments.size(); i++) { +// 根据当前钉钉ID查看情况。如果当前ID在对照表中存在则跳过当前同步操作 + JSONObject department = departments.getJSONObject(i); + Thread.sleep(200); + boolean isdeptsize = dingdingDao.getdeptsizeBydingdingid(department.getString("dept_id")); +// 如果当前钉钉ID在部门对照表中已存在则跳过当前循环 + newdeptids.add(department.getString("dept_id")); + log.info("钉钉部门对照数量:"+department+"------"+isdeptsize); + if(isdeptsize) { + continue; + } + Map parammap = new HashedMap(); +// 判断上级单位是否为集团 + if(deptids.get(in).equals("120474537")) { +// 上级单位为集团则直接根据名称获取当前单位信息 + V3xOrgAccount account = getOrgManager().getAccountByName(department.getString("name")); + if(account!=null) { + parammap.put("oadeptid", account.getId().toString()); + parammap.put("oadeptname", account.getName()); + }else { + continue; + } + }else { +// 上级单位不为集团则先根据原本对应关系查询出所在单位信息 + Thread.sleep(400); + Map supdeptmap = dingdingDao.getdeptBysuperDeptId(department.getString("parent_id")); + if("340713772".equals(department.getString("parent_id"))|| supdeptmap.isEmpty()) { + continue; + } + if("集团机关".equals(department.getString("name"))) { + parammap.put("oadeptid", supdeptmap.get("oadeptid").toString()); + parammap.put("oadeptname", supdeptmap.get("oadeptname")+"-"+department.getString("name")); + parammap.put("dingdingdeptid", department.getString("dept_id")); + parammap.put("dingdingdeptname", department.getString("name")); + dingdingDao.adddept(parammap); + continue; + } +// 已知条件,上级部门ID,上级部门路径名称,单位ID,当前部门名称,获取当前部门ID + String supoadeptid = supdeptmap.get("oadeptid").toString(); +// 根据上级部门ID获取出上级部门的路径。 + Map supdept = dingdingDao.getDepartmentById(Long.parseLong(supoadeptid)); +// 根据 上级部门路径00__ + 部门名称的方式获取当前部门的id,然后根据ID获取当前部门信息 + Map dept= dingdingDao.getdeptByPathName(supdept.get("path")+"0___",department.getString("name")); + if(dept==null) { + continue; + } + parammap.put("oadeptid", dept.get("id").toString()); + parammap.put("oadeptname", supdeptmap.get("oadeptname")+"-"+dept.get("name").toString()); + } + parammap.put("dingdingdeptid", department.getString("dept_id")); + parammap.put("dingdingdeptname", department.getString("name")); + dingdingDao.adddept(parammap); + } + } + deptids = newdeptids; + newdeptids = new ArrayList(); + } while (deptids.size()!=0); + + } catch (ApiException e) { + e.printStackTrace(); + } catch (InterruptedException e) { + e.printStackTrace(); + } catch (SQLException e) { + e.printStackTrace(); + } catch (BusinessException e) { + e.printStackTrace(); + } + log.info("部门同步完成..........."); + return null; + } + + + + public String dingdingmember() { + try { + log.info("进行人员基础数据同步"); + DingtalkUtil dingtalkUtil = new DingtalkUtil(); +// 查询src_dingding_oa_dept数据库表获取所有钉钉对照OA部门信息 + List> dingdingoadepts = dingdingDao.getDingdingOaDept(); + +// 循环遍历钉钉对照OA部门信息 + for (Map map : dingdingoadepts) { +// 调用接口根据钉钉部门ID获取人员信息 + int i = 0 ; + boolean ishasmore; + do { + JSONObject userparam = new JSONObject(); + userparam.put("dept_id",map.get("dingdingdeptid")); + userparam.put("cursor",i); + userparam.put("size",100); + JSONObject useridret = dingtalkUtil.doPost(userparam.toString(), "https://oapi.dingtalk.com/topapi/user/listsimple"); + JSONObject result = useridret.getJSONObject("result"); + if(result==null){ + System.out.println("接口调用失败跳过当前循环"); + ishasmore = false; + continue; + } + + ishasmore = result.getBooleanValue("has_more"); + if(ishasmore) { + i = result.getIntValue("next_cursor"); + } + JSONArray userids = result.getJSONArray("list"); +// 根据钉钉人员名称查询OA组织架构人员,并更具部门对照表中的OA部门ID进行对照 + for(int in = 0 ; in < userids.size() ; in++) { + JSONObject user = userids.getJSONObject(in); + Thread.sleep(200); + boolean ismembersize = dingdingDao.getmembersizeBydingdingid(user.getString("userid")); +// 如果当前钉钉ID在人员对照表中已存在则跳过当前循环 + if(ismembersize) { + continue; + } + List members = orgManager.getMemberByName(user.getString("name")); + boolean boo = false; + for (V3xOrgMember v3xOrgMember : members) { + if(v3xOrgMember.getState()!=1) { + continue; + } + Thread.sleep(400); +// 根据OA部门中的人员与钉钉接口返回出来的人员进行人员对照 + long v3xuserdeptid = v3xOrgMember.getOrgDepartmentId(); + long oauserdeptid = Long.parseLong(map.get("oadeptid").toString()); + if(v3xuserdeptid == oauserdeptid) { +// 保存钉钉对照OA人员信息到src_dingding_oa_member数据库表中 + Map membermap = new HashMap(); + membermap.put("oamemberid", v3xOrgMember.getId()+""); + membermap.put("oamembername", v3xOrgMember.getName()); + membermap.put("dingdingmemberid", user.getString("userid")); + membermap.put("dingdingmembername", user.getString("name")); + int addmember = getDingdingDao().addmember(membermap); + if(addmember>0) { + boo = true; + } + } + } + } + System.out.println("单个人员创建完成ishasmore=" + ishasmore); + }while(ishasmore); + } + } catch (BusinessException e) { + e.printStackTrace(); + } catch (SQLException e) { + e.printStackTrace(); + } catch (InterruptedException e) { + e.printStackTrace(); + } catch (ApiException e) { + e.printStackTrace(); + } + System.out.println("人员数据同步完成"); + return null; + } + + public String dingdingclockin(){ + try { + String membernum = dingdingDao.getDingdingOaMemberNum(); +// 查询当前系统人员对照表中的人员信息 + List> members = dingdingDao.getDingdingOaMember("0",membernum); +// 一次封装12人的考勤数据 + int groupSize = 10; // 每组的大小 + List>> memberLists = new ArrayList>>(); + for (int i = 0; i < members.size(); i += groupSize) { + int endIndex = Math.min(i + groupSize, members.size()); + List> group = members.subList(i, endIndex); + memberLists.add(group); + } + + for(int num = 0 ; num < memberLists.size();num++) { + JSONArray dingdingmemberids = new JSONArray(); + Map dingdings = new HashMap(); + for (Map map : memberLists.get(num)) { + dingdingmemberids.add(map.get("dingdingmemberid").toString()); + dingdings.put(map.get("dingdingmemberid").toString(), map.get("oamemberid").toString()); + } + + FormExport formExport = new FormExport(); + JSONObject param = new JSONObject(); + + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.DAY_OF_MONTH, -1); + Date result = calendar.getTime(); + int offset=0; + boolean ishasmore; + do { + param.put("workDateFrom", sdf.format(result)+" 00:00:00"); + param.put("workDateTo", sdf.format(result)+" 23:59:59"); +// param.put("workDateFrom", "2024-01-15 00:00:00"); +// param.put("workDateTo", "2024-01-15 23:59:59"); + param.put("userIdList", dingdingmemberids); + param.put("offset", offset); + param.put("limit", 50); + DingtalkUtil dingtalkUtil = new DingtalkUtil(); +// 根据人员ID获取考勤打卡信息 + JSONObject ret = dingtalkUtil.doPost(param.toString(), "https://oapi.dingtalk.com/attendance/list"); + JSONArray recordresult = ret.getJSONArray("recordresult"); + if(recordresult == null){ + log.info("考勤记录获取失败:"+ret); + return null; + } + ishasmore = ret.getBooleanValue("hasMore"); + if(ishasmore) { + offset = offset+50; + } + FormExportUtil formExportUtil = new FormExportUtil(); + // 调用转换方法 + List> transformedData = formExportUtil.transformData(recordresult); + JSONArray array = new JSONArray(); + for (Map map : transformedData) { + JSONObject jsonObj = new JSONObject(map); + array.add(jsonObj); + } + // 打印结果 + for(int i = 0 ; i from = new HashMap(); + V3xOrgMember v3xOrgMember = orgManager.getMemberById(Long.parseLong(userOaId)); + if(v3xOrgMember == null) { + continue; + } + from.put("考勤人员", userOaId); +// 考勤组ID + JSONArray datas = json.getJSONArray("data"); + JSONObject datajson = datas.getJSONObject(0); + String groupId = datajson.getString("groupId"); + if("-1".equals(groupId)){ + from.put("考勤组", "无"); + }else{ + Map groupMap = dingdingDao.getDingdingAttendanceBygroupId(groupId); + String groupName = groupMap.get("groupname"); + from.put("考勤组", groupName); + } + from.put("考勤人员所在部门", v3xOrgMember.getOrgDepartmentId().toString()); + from.put("工号", v3xOrgMember.getLoginName()); + from.put("职位", v3xOrgMember.getOrgPostId().toString()); +// 对获取到的考勤该数据进行时间排序 + JSONArray datasSequence = formExportUtil.dingdingTimeSequence(datas); + List> subfroms = new ArrayList>(); + String start = "正常"; +// 如果显示的4次都是未打卡则默认当天为未打卡 + int lack = 0; +// 设置明细表信息 + for(int n = 0 ; n subfrom = new HashMap(); +// //基准时间 + long baseCheckTime = datasSequence.getJSONObject(n).getLong("baseCheckTime"); + Date jizhunshijian = new Date(); + jizhunshijian.setTime(baseCheckTime); + String jizhunshijianStr = simpleDateFormat.format(jizhunshijian); +// //实际打卡时间 + long userCheckTime = datasSequence.getJSONObject(n).getLong("userCheckTime"); + Date shijidaka = new Date(); + shijidaka.setTime(userCheckTime); + String shijidakaStr = simpleDateFormat.format(shijidaka); + //考勤结果 + String timeResult = datasSequence.getJSONObject(n).getString("timeResult"); + String timeResultStr = ""; + if("Normal".equals(timeResult)){ + timeResultStr = "正常"; + }else if("Early".equals(timeResult)) { + timeResultStr = "早退"; + if("正常".equals(start)){ + if(n<=1){start = "下班1早退";} + else{start = "下班2早退";} + }else{ + if(n<=1){start = start+"下班1早退";} + else{start = start+"下班2早退";} + } + }else if("Late".equals(timeResult)) { + timeResultStr = "迟到"; + if("正常".equals(start)){ + if(n<=1){start = start+"上班1迟到";} + else{start = start+"上班2迟到";} + }else{ + if(n<=1){start = start+"下班1早退";} + else{start = start+"下班2早退";} + } + }else if("SeriousLate".equals(timeResult)) { + timeResultStr = "严重迟到"; + }else if("Absenteeism".equals(timeResult)) { + timeResultStr = "旷工迟到"; + }else if("NotSigned".equals(timeResult)) { + lack++; + timeResultStr = "未打卡"; + if("正常".equals(start)){ + if(n<=1){start = start+"上班1未打卡"; } + else{ start = start+"上班2未打卡"; } + }else{ + if(n<=1){ start = start+"下班1未打卡"; } + else{ start = start+"下班2未打卡"; } + } + } + subfrom.put("打卡时间", shijidakaStr); + subfrom.put("基准时间", jizhunshijianStr); +// 根据获取出来的基准时间判断是上班还是下班 + String checkType = datasSequence.getJSONObject(n).getString("checkType"); + + if("OnDuty".equals(checkType)){ + if(n<=1){subfrom.put("打卡类型", "上班1");} + else{subfrom.put("打卡类型", "上班2"); } + }else if ("OffDuty".equals(checkType)){ + if(n<=1){ subfrom.put("打卡类型", "下班1"); } + else{ subfrom.put("打卡类型", "下班2"); } + } + subfrom.put("打卡状态", timeResultStr); + + subfroms.add(subfrom); + } + if(lack ==datasSequence.size()){ + start = "未打卡"; + } + from.put("当前打卡状态", start); +// 通过档案表生成方法将这12人一天的数据保存到档案中提供数据封装处理 + List valueExports = formExportUtil.setFormValue(from); + formExport.setValues(valueExports); + List subordinateFormExports = formExportUtil.setSubordinateFormValue(subfroms); + formExport.setSubordinateForms(subordinateFormExports); + Thread.sleep(100); +// 创建档案表 + getFormFactory().importBusinessFormData("hr", "CLOCKIN", + formExport, new String[] {}); + } + }while(ishasmore); + } + } catch (BusinessException e) { + e.printStackTrace(); + } catch (SQLException e) { + e.printStackTrace(); + } catch (InterruptedException e) { + e.printStackTrace(); + } catch (ServiceException e) { + e.printStackTrace(); + } catch (ApiException e) { + e.printStackTrace(); + } + + System.out.println("钉钉考勤原始数据创建完成"); + return null; + } + + public String dingdingclockin(String datestr) { + try { + String membernum = dingdingDao.getDingdingOaMemberNum(); +// 查询当前系统人员对照表中的人员信息 + List> members = dingdingDao.getDingdingOaMember("0",membernum); +// 一次封装12人的考勤数据 + int groupSize = 10; // 每组的大小 + List>> memberLists = new ArrayList>>(); + for (int i = 0; i < members.size(); i += groupSize) { + int endIndex = Math.min(i + groupSize, members.size()); + List> group = members.subList(i, endIndex); + memberLists.add(group); + } + + for(int num = 0 ; num < memberLists.size();num++) { + JSONArray dingdingmemberids = new JSONArray(); + Map dingdings = new HashMap(); + for (Map map : memberLists.get(num)) { + dingdingmemberids.add(map.get("dingdingmemberid").toString()); + dingdings.put(map.get("dingdingmemberid").toString(), map.get("oamemberid").toString()); + } + + FormExport formExport = new FormExport(); + JSONObject param = new JSONObject(); + +// Calendar calendar = Calendar.getInstance(); +// calendar.add(Calendar.DAY_OF_MONTH, -1); +// Date result = calendar.getTime(); + int offset=0; + boolean ishasmore; + do { + param.put("workDateFrom", datestr+" 00:00:00"); + param.put("workDateTo", datestr+" 23:59:59"); + param.put("userIdList", dingdingmemberids); + param.put("offset", offset); + param.put("limit", 50); + DingtalkUtil dingtalkUtil = new DingtalkUtil(); +// 根据人员ID获取考勤打卡信息 + JSONObject ret = dingtalkUtil.doPost(param.toString(), "https://oapi.dingtalk.com/attendance/list"); + JSONArray recordresult = ret.getJSONArray("recordresult"); + if(recordresult == null){ + return "考勤记录获取失败:"+ret; + } + + ishasmore = ret.getBooleanValue("hasMore"); + if(ishasmore) { + offset = offset+50; + } + + FormExportUtil formExportUtil = new FormExportUtil(); + // 调用转换方法 + List> transformedData = formExportUtil.transformData(recordresult); + JSONArray array = new JSONArray(); + for (Map map : transformedData) { + JSONObject jsonObj = new JSONObject(map); + array.add(jsonObj); + } + // 打印结果 + for(int i = 0 ; i from = new HashMap(); + V3xOrgMember v3xOrgMember = orgManager.getMemberById(Long.parseLong(userOaId)); + if(v3xOrgMember == null) { + continue; + } + from.put("考勤人员", userOaId); + // 考勤组ID + JSONArray datas = json.getJSONArray("data"); + JSONObject datajson = datas.getJSONObject(0); + String groupId = datajson.getString("groupId"); + if("-1".equals(groupId)){ + from.put("考勤组", "无"); + }else{ + Map groupMap = dingdingDao.getDingdingAttendanceBygroupId(groupId); + String groupName = groupMap.get("groupname"); + from.put("考勤组", groupName); + } + from.put("考勤人员所在部门", v3xOrgMember.getOrgDepartmentId().toString()); + from.put("工号", v3xOrgMember.getLoginName()); + from.put("职位", v3xOrgMember.getOrgPostId().toString()); +// 对获取到的考勤该数据进行时间排序 + JSONArray datasSequence = formExportUtil.dingdingTimeSequence(datas); + List> subfroms = new ArrayList>(); + String start = "正常"; +// 如果显示的4次都是未打卡则默认当天为未打卡 + int lack = 0; +// 设置明细表信息 + for(int n = 0 ; n subfrom = new HashMap(); +// //基准时间 + long baseCheckTime = datasSequence.getJSONObject(n).getLong("baseCheckTime"); + Date jizhunshijian = new Date(); + jizhunshijian.setTime(baseCheckTime); + String jizhunshijianStr = simpleDateFormat.format(jizhunshijian); +// //实际打卡时间 + long userCheckTime = datasSequence.getJSONObject(n).getLong("userCheckTime"); + Date shijidaka = new Date(); + shijidaka.setTime(userCheckTime); + String shijidakaStr = simpleDateFormat.format(shijidaka); + //考勤结果 + String timeResult = datasSequence.getJSONObject(n).getString("timeResult"); + String timeResultStr = ""; + if("Normal".equals(timeResult)){ + timeResultStr = "正常"; + }else if("Early".equals(timeResult)) { + timeResultStr = "早退"; + if("正常".equals(start)){ + if(n<=1){start = "下班1早退";} + else{start = "下班2早退";} + }else{ + if(n<=1){start = start+"下班1早退";} + else{start = start+"下班2早退";} + } + }else if("Late".equals(timeResult)) { + timeResultStr = "迟到"; + if("正常".equals(start)){ + if(n<=1){start = start+"上班1迟到";} + else{start = start+"上班2迟到";} + }else{ + if(n<=1){start = start+"下班1早退";} + else{start = start+"下班2早退";} + } + }else if("SeriousLate".equals(timeResult)) { + timeResultStr = "严重迟到"; + }else if("Absenteeism".equals(timeResult)) { + timeResultStr = "旷工迟到"; + }else if("NotSigned".equals(timeResult)) { + lack++; + timeResultStr = "未打卡"; + if("正常".equals(start)){ + if(n<=1){start = start+"上班1未打卡"; } + else{ start = start+"上班2未打卡"; } + }else{ + if(n<=1){ start = start+"下班1未打卡"; } + else{ start = start+"下班2未打卡"; } + } + } + subfrom.put("打卡时间", shijidakaStr); + subfrom.put("基准时间", jizhunshijianStr); +// 根据获取出来的基准时间判断是上班还是下班 + String checkType = datasSequence.getJSONObject(n).getString("checkType"); + + if("OnDuty".equals(checkType)){ + if(n<=1){subfrom.put("打卡类型", "上班1");} + else{subfrom.put("打卡类型", "上班2"); } + }else if ("OffDuty".equals(checkType)){ + if(n<=1){ subfrom.put("打卡类型", "下班1"); } + else{ subfrom.put("打卡类型", "下班2"); } + } + subfrom.put("打卡状态", timeResultStr); + +// 日志输出考勤信息 + log.info(subfrom.toString()); + subfroms.add(subfrom); + } + if(lack ==datasSequence.size()){ + start = "未打卡"; + } + from.put("当前打卡状态", start); +// 通过档案表生成方法将这12人一天的数据保存到档案中提供数据封装处理 + List valueExports = formExportUtil.setFormValue(from); + formExport.setValues(valueExports); + List subordinateFormExports = formExportUtil.setSubordinateFormValue(subfroms); + formExport.setSubordinateForms(subordinateFormExports); + Thread.sleep(100); +// 创建档案表 + getFormFactory().importBusinessFormData("hr", "CLOCKIN", + formExport, new String[] {}); + } + }while(ishasmore); + } + } catch (BusinessException e) { + e.printStackTrace(); + } catch (SQLException e) { + e.printStackTrace(); + } catch (InterruptedException e) { + e.printStackTrace(); + } catch (ServiceException e) { + e.printStackTrace(); + } catch (ApiException e) { + e.printStackTrace(); + } + System.out.println(datestr+"钉钉考勤原始数据创建完成"); + return datestr+"钉钉考勤原始数据创建完成"; + } + + + public void setWorkAttendance(){ + log.info("开始设置考勤信息"); + try { +// 查询所有人员的数据量 + String num = dingdingDao.getDingdingOaMemberNum(); + int membernum = Integer.parseInt(num); +// 设置初始索引 + int start = 0 ; + for(int i = 0; start <= membernum ; i++){ + int end = start+1000; + // 获取所有打卡人 + List> members = dingdingDao.getDingdingOaMember(start+"",end+""); + // 循环遍历所有打卡人信息,设置前一天的打卡情况 + for (Map map:members) { +// 根据打卡人信息获取一月内的打卡情况 + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.DAY_OF_MONTH,-1); + String dateStr = sdf.format(calendar.getTime()); + calendar.add(Calendar.MONTH, -1); + String lastMonth = sdf.format(calendar.getTime()); + String memberId = map.get("oamemberid").toString(); + int clockInNum = dingdingDao.getClockInNumBymember(lastMonth,memberId); +// 创建考勤对象 + CheckOnWorkAttendanceVo checkOnWorkAttendanceVo = new CheckOnWorkAttendanceVo(); + log.info(memberId+","+clockInNum+"此人前一个月如果存在打卡情况则进行考勤对象创建"); + if(clockInNum>0) { +// 存在打卡情况,创建基础参数显示考勤情况显示未上班1,下班1,上班2,下班2, +// Calendar calendar1 = Calendar.getInstance(); +//// 设置日期-1 +// calendar1.add(Calendar.DATE, -1); +// String yesterday = sdf.format(calendar1.getTime()); +// 查询参数的打卡记录 + List> clockInList = dingdingDao.getClockInBymember(dateStr, memberId); + if (clockInList.size() > 0) { +// 设置ID + checkOnWorkAttendanceVo.setId(UUIDUtil.getUUIDLong()); + checkOnWorkAttendanceVo.setMemberId(Long.parseLong(memberId)); + checkOnWorkAttendanceVo.setCheckOnWorkAttendanceDate(sdf.parse(dateStr)); + checkOnWorkAttendanceVo.setGroupName(clockInList.get(0).get("groupName").toString()); +// 判断考勤时间点上打卡状态 + for (Map clockIn : clockInList) { +// 设置考勤相关数据 + if ("上班1".equals(clockIn.get("type").toString())) { + checkOnWorkAttendanceVo.setShangbanDate1(simpleDateFormat.parse(clockIn.get("referenceDate").toString())); + if("迟到".equals(clockIn.get("state").toString())){ + Date date1 = simpleDateFormat.parse(clockIn.get("clockInDate").toString()); + Date date2 = simpleDateFormat.parse(clockIn.get("referenceDate").toString()); + long time = date1.getTime()-date2.getTime(); + long minute = time/1000/60; + checkOnWorkAttendanceVo.setShangban1(clockIn.get("state").toString()+minute+"分钟"); + }else{ + checkOnWorkAttendanceVo.setShangban1(clockIn.get("state").toString()); + } + } else if ("下班1".equals(clockIn.get("type").toString())) { + checkOnWorkAttendanceVo.setXiabanDate1(simpleDateFormat.parse(clockIn.get("referenceDate").toString())); + if("早退".equals(clockIn.get("state").toString())){ + Date date1 = simpleDateFormat.parse(clockIn.get("clockInDate").toString()); + Date date2 = simpleDateFormat.parse(clockIn.get("referenceDate").toString()); + long time = date2.getTime()-date1.getTime(); + long minute = time/1000/60; + checkOnWorkAttendanceVo.setXiaban1(clockIn.get("state").toString()+minute+"分钟"); + }else{ + checkOnWorkAttendanceVo.setXiaban1(clockIn.get("state").toString()); + } + } else if ("上班2".equals(clockIn.get("type").toString())) { + checkOnWorkAttendanceVo.setShangbanDate2(simpleDateFormat.parse(clockIn.get("referenceDate").toString())); + if("迟到".equals(clockIn.get("state").toString())){ + Date date1 = simpleDateFormat.parse(clockIn.get("clockInDate").toString()); + Date date2 = simpleDateFormat.parse(clockIn.get("referenceDate").toString()); + long time = date1.getTime()-date2.getTime(); + long minute = time/1000/60; + checkOnWorkAttendanceVo.setShangban2(clockIn.get("state").toString()+minute+"分钟"); + }else{ + checkOnWorkAttendanceVo.setShangban2(clockIn.get("state").toString()); + } + } else if ("下班2".equals(clockIn.get("type").toString())) { + checkOnWorkAttendanceVo.setXiabanDate2(simpleDateFormat.parse(clockIn.get("referenceDate").toString())); + if("早退".equals(clockIn.get("state").toString())){ + Date date1 = simpleDateFormat.parse(clockIn.get("clockInDate").toString()); + Date date2 = simpleDateFormat.parse(clockIn.get("referenceDate").toString()); + long time = date2.getTime()-date1.getTime(); + long minute = time/1000/60; + checkOnWorkAttendanceVo.setXiaban2(clockIn.get("state").toString()+minute+"分钟"); + }else{ + checkOnWorkAttendanceVo.setXiaban2(clockIn.get("state").toString()); + } + } + } + checkOnWorkAttendanceVo = setState(checkOnWorkAttendanceVo); + } else { +// 不存在打卡情况,创建未打卡数据 + checkOnWorkAttendanceVo.setId(UUIDUtil.getUUIDLong()); + checkOnWorkAttendanceVo.setMemberId(Long.parseLong(memberId)); + checkOnWorkAttendanceVo.setCheckOnWorkAttendanceDate(sdf.parse(dateStr)); + String groupName = dingdingDao.getGroupName(memberId); + checkOnWorkAttendanceVo.setGroupName(groupName); + checkOnWorkAttendanceVo.setShangban1("未打卡"); + checkOnWorkAttendanceVo.setXiaban1("未打卡"); + checkOnWorkAttendanceVo.setShangban2("未打卡"); + checkOnWorkAttendanceVo.setXiaban2("未打卡"); + checkOnWorkAttendanceVo.setState("休息"); + } + // 保存打卡数据到数据库表中 + int addin = dingdingDao.addCheckOnWorkAttendance(checkOnWorkAttendanceVo); + log.info("当前考勤人员为:"+checkOnWorkAttendanceVo.getMemberId()+"添加信息条数为"+addin); + } + +// 根据单据修改当前人员一月内的考勤情况 + +// calendar表示时间前一个月的时间点。查询 单据结束时间在查询开始时间之后并且单据开始时间在查询结束时间之前的单据 +// 查询当前人员一年内的请假单 map : 人员,请假类型,开始时间 ,结束时间 + List> leaves = dingdingDao.getLeave(memberId,sdf.format(calendar.getTime()),dateStr); + leaveUpdateWorkAttendance(leaves,memberId); + +// 查询当前人员一年内的出差单 map : 人员,请假类型,开始时间 ,结束时间 + List> evections = dingdingDao.getEvections(memberId,sdf.format(calendar.getTime()),dateStr); + evectionUpdateWorkAttendance(evections,memberId); + +// 查询当前人员一年内的加班单 + List> overtimes = dingdingDao.getOvertime(memberId,sdf.format(calendar.getTime()),dateStr); + overtimesUpdateWorkAttendance(overtimes,memberId); + +// 查询当前人员一年内的补卡单 + List> makeCard = dingdingDao.getMakeCard(memberId,sdf.format(calendar.getTime()),dateStr); + makeCardUpdateWorkAttendance(makeCard,memberId); + +// 查询当前人员一年内的调休单 map : 人员,请假类型,开始时间 ,结束时间 + List> adjustLeaves = dingdingDao.getAdjustLeave(memberId,sdf.format(calendar.getTime()),dateStr); + leaveUpdateWorkAttendance(adjustLeaves,memberId); + } + start = end; + } + log.info("创建完成!!!创建条数"+membernum); + } catch (BusinessException e) { + e.printStackTrace(); + } catch (SQLException e) { + e.printStackTrace(); + } catch (ParseException e) { + e.printStackTrace(); + } + } + + /** + * 获取昨天的打卡情况生成考勤,并检测近一个的考勤情况根据单据情况变更数据 + * @throws SQLException + * @throws BusinessException + * @throws ParseException + */ + + public String setWorkAttendance(String dateStr) { + log.info("开始设置考勤信息"); + try { + // 查询所有人员的数据量 + String num = dingdingDao.getDingdingOaMemberNum(); + int membernum = Integer.parseInt(num); +// 设置初始索引 + int start = 0 ; + for(int i = 0; start <= membernum ; i++) { + int end = start + 1000; +// 获取所有打卡人 + List> members = dingdingDao.getDingdingOaMember(start+"",end+""); + // 循环遍历所有打卡人信息,设置前一天的打卡情况 + for (Map map:members) { +// 根据打卡人信息获取一月内的打卡情况 + Calendar calendar = Calendar.getInstance(); + calendar.setTime(sdf.parse(dateStr)); + calendar.add(Calendar.MONTH, -1); + String lastMonth = sdf.format(calendar.getTime()); + String memberId = map.get("oamemberid").toString(); + int clockInNum = dingdingDao.getClockInNumBymember(lastMonth,memberId); +// 创建考勤对象 + CheckOnWorkAttendanceVo checkOnWorkAttendanceVo = new CheckOnWorkAttendanceVo(); + log.info(memberId+","+clockInNum+"此人前一个月如果存在打卡情况则进行考勤对象创建"); + if(clockInNum>0) { +// 存在打卡情况,创建基础参数显示考勤情况显示未上班1,下班1,上班2,下班2, +// Calendar calendar1 = Calendar.getInstance(); +//// 设置日期-1 +// calendar1.add(Calendar.DATE, -1); +// String yesterday = sdf.format(calendar1.getTime()); +// 查询参数的打卡记录 + List> clockInList = dingdingDao.getClockInBymember(dateStr, memberId); + if (clockInList.size() > 0) { +// 设置ID + checkOnWorkAttendanceVo.setId(UUIDUtil.getUUIDLong()); + checkOnWorkAttendanceVo.setMemberId(Long.parseLong(memberId)); + checkOnWorkAttendanceVo.setCheckOnWorkAttendanceDate(sdf.parse(dateStr)); + checkOnWorkAttendanceVo.setGroupName(clockInList.get(0).get("groupName").toString()); +// 判断考勤时间点上打卡状态 + for (Map clockIn : clockInList) { +// 设置考勤相关数据 + if ("上班1".equals(clockIn.get("type").toString())) { + checkOnWorkAttendanceVo.setShangbanDate1(simpleDateFormat.parse(clockIn.get("referenceDate").toString())); + if("迟到".equals(clockIn.get("state").toString())){ + Date date1 = simpleDateFormat.parse(clockIn.get("clockInDate").toString()); + Date date2 = simpleDateFormat.parse(clockIn.get("referenceDate").toString()); + long time = date1.getTime()-date2.getTime(); + long minute = time/1000/60; + checkOnWorkAttendanceVo.setShangban1(clockIn.get("state").toString()+minute+"分钟"); + }else{ + checkOnWorkAttendanceVo.setShangban1(clockIn.get("state").toString()); + } + } else if ("下班1".equals(clockIn.get("type").toString())) { + checkOnWorkAttendanceVo.setXiabanDate1(simpleDateFormat.parse(clockIn.get("referenceDate").toString())); + if("早退".equals(clockIn.get("state").toString())){ + Date date1 = simpleDateFormat.parse(clockIn.get("clockInDate").toString()); + Date date2 = simpleDateFormat.parse(clockIn.get("referenceDate").toString()); + long time = date2.getTime()-date1.getTime(); + long minute = time/1000/60; + checkOnWorkAttendanceVo.setXiaban1(clockIn.get("state").toString()+minute+"分钟"); + }else{ + checkOnWorkAttendanceVo.setXiaban1(clockIn.get("state").toString()); + } + } else if ("上班2".equals(clockIn.get("type").toString())) { + checkOnWorkAttendanceVo.setShangbanDate2(simpleDateFormat.parse(clockIn.get("referenceDate").toString())); + if("迟到".equals(clockIn.get("state").toString())){ + Date date1 = simpleDateFormat.parse(clockIn.get("clockInDate").toString()); + Date date2 = simpleDateFormat.parse(clockIn.get("referenceDate").toString()); + long time = date1.getTime()-date2.getTime(); + long minute = time/1000/60; + checkOnWorkAttendanceVo.setShangban2(clockIn.get("state").toString()+minute+"分钟"); + }else{ + checkOnWorkAttendanceVo.setShangban2(clockIn.get("state").toString()); + } + } else if ("下班2".equals(clockIn.get("type").toString())) { + checkOnWorkAttendanceVo.setXiabanDate2(simpleDateFormat.parse(clockIn.get("referenceDate").toString())); + if("早退".equals(clockIn.get("state").toString())){ + Date date1 = simpleDateFormat.parse(clockIn.get("clockInDate").toString()); + Date date2 = simpleDateFormat.parse(clockIn.get("referenceDate").toString()); + long time = date2.getTime()-date1.getTime(); + long minute = time/1000/60; + checkOnWorkAttendanceVo.setXiaban2(clockIn.get("state").toString()+minute+"分钟"); + }else{ + checkOnWorkAttendanceVo.setXiaban2(clockIn.get("state").toString()); + } + } + } + checkOnWorkAttendanceVo = setState(checkOnWorkAttendanceVo); + } else { +// 不存在打卡情况,创建未打卡数据 + checkOnWorkAttendanceVo.setId(UUIDUtil.getUUIDLong()); + checkOnWorkAttendanceVo.setMemberId(Long.parseLong(memberId)); + checkOnWorkAttendanceVo.setCheckOnWorkAttendanceDate(sdf.parse(dateStr)); + String groupName = dingdingDao.getGroupName(memberId); + checkOnWorkAttendanceVo.setGroupName(groupName); + checkOnWorkAttendanceVo.setShangban1("未打卡"); + checkOnWorkAttendanceVo.setXiaban1("未打卡"); + checkOnWorkAttendanceVo.setShangban2("未打卡"); + checkOnWorkAttendanceVo.setXiaban2("未打卡"); + checkOnWorkAttendanceVo.setState("休息"); + } + // 保存打卡数据到数据库表中 + int addin = dingdingDao.addCheckOnWorkAttendance(checkOnWorkAttendanceVo); + } + +// 根据单据修改当前人员一月内的考勤情况 + +// calendar表示时间前一个月的时间点。查询 单据结束时间在查询开始时间之后并且单据开始时间在查询结束时间之前的单据 + + List> leaves = dingdingDao.getLeave(memberId,sdf.format(calendar.getTime()),dateStr); + leaveUpdateWorkAttendance(leaves,memberId); + +// 查询当前人员一年内的出差单 map : 人员,请假类型,开始时间 ,结束时间 + List> evections = dingdingDao.getEvections(memberId,sdf.format(calendar.getTime()),dateStr); + evectionUpdateWorkAttendance(evections,memberId); + +// 查询当前人员一年内的加班单 + List> overtimes = dingdingDao.getOvertime(memberId,sdf.format(calendar.getTime()),dateStr); + overtimesUpdateWorkAttendance(overtimes,memberId); + +// 查询当前人员一年内的补卡单 + List> makeCard = dingdingDao.getMakeCard(memberId,sdf.format(calendar.getTime()),dateStr); + makeCardUpdateWorkAttendance(makeCard,memberId); + +// 查询当前人员一年内的调休单 map : 人员,请假类型,开始时间 ,结束时间 + List> adjustLeaves = dingdingDao.getAdjustLeave(memberId,sdf.format(calendar.getTime()),dateStr); + leaveUpdateWorkAttendance(adjustLeaves,memberId); + } + + start = end; + } + log.info("创建完成!!!创建条数"+membernum); + } catch (BusinessException e) { + e.printStackTrace(); + return e.toString(); + } catch (SQLException e) { + e.printStackTrace(); + return e.toString(); + } catch (ParseException e) { + e.printStackTrace(); + return e.toString(); + } + return "考勤信息创建完成!!!"; + } + + +// 请假,调休考勤变更 + public void leaveUpdateWorkAttendance(List> lists,String memberId) throws ParseException { + // 遍历当前查询到的请假单数量 + log.info("进入请假,调休考勤变更"+lists.size()); + for (Map list:lists) { +// 查询当前人员在指定时间内的考勤情况 + log.info("查询当前人员在指定时间内的考勤情况"+memberId+list.get("startDateStr")+list.get("endDateStr")); + List workAttendanceByDates = dingdingDao.getWorkAttendanceByDate(memberId, + list.get("startDateStr").toString().substring(0,10),list.get("endDateStr").toString().substring(0,10)); + for (CheckOnWorkAttendanceVo cowav:workAttendanceByDates) { + if("病假".equals(list.get("type").toString()) || "工伤".equals(list.get("type").toString()) || + "产假".equals(list.get("type").toString()) || "产检假".equals(list.get("type").toString())){ + if(cowav.getShangbanDate1() == null ){ + cowav.setShangban1(list.get("type").toString()); + }else { + if (cowav.getShangbanDate1().getTime()>=simpleDateFormat.parse(list.get("startDateStr").toString()).getTime() && + cowav.getShangbanDate1().getTime()<=simpleDateFormat.parse(list.get("endDateStr").toString()).getTime() + &&cowav.getShangban1().equals("未打卡")){ + cowav.setShangban1(list.get("type").toString()); + } + } +// 下班1 + if(cowav.getXiabanDate1() == null ){ + cowav.setXiaban1(list.get("type").toString()); + }else { + if (cowav.getXiabanDate1().getTime()>=simpleDateFormat.parse(list.get("startDateStr").toString()).getTime() && + cowav.getXiabanDate1().getTime()<=simpleDateFormat.parse(list.get("endDateStr").toString()).getTime() && + cowav.getXiaban1().equals("未打卡") ){ + cowav.setXiaban1(list.get("type").toString()); + } + } +// 上班2 + if(cowav.getShangbanDate2() == null){ + cowav.setShangban2(list.get("type").toString()); + }else { + if(cowav.getShangbanDate2().getTime()>=simpleDateFormat.parse(list.get("startDateStr").toString()).getTime() && + cowav.getShangbanDate2().getTime()<=simpleDateFormat.parse(list.get("endDateStr").toString()).getTime() && + cowav.getShangban2().equals("未打卡")){ + cowav.setShangban2(list.get("type").toString()); + } + } +// 下班2 + if(cowav.getXiabanDate2() == null ){ + cowav.setXiaban2(list.get("type").toString()); + }else { + if (cowav.getXiabanDate2().getTime()>=simpleDateFormat.parse(list.get("startDateStr").toString()).getTime() && + cowav.getXiabanDate2().getTime()<=simpleDateFormat.parse(list.get("endDateStr").toString()).getTime() && + cowav.getXiaban2().equals("未打卡") ){ + cowav.setXiaban2(list.get("type").toString()); + } + } + }else{ + // 上班1 + if(cowav.getShangbanDate1() == null){ + cowav.setShangban1("未打卡"); + }else{ + if(cowav.getShangbanDate1().getTime()>=simpleDateFormat.parse(list.get("startDateStr").toString()).getTime() && + cowav.getShangbanDate1().getTime()<=simpleDateFormat.parse(list.get("endDateStr").toString()).getTime() && + cowav.getShangban1().equals("未打卡") && cowav.getShangbanDate1() !=null){ + cowav.setShangban1(list.get("type").toString()); + } + } +// 下班1 + if(cowav.getXiabanDate1() == null){ + cowav.setXiaban1("未打卡"); + }else{ + if(cowav.getXiabanDate1().getTime()>=simpleDateFormat.parse(list.get("startDateStr").toString()).getTime() && + cowav.getXiabanDate1().getTime()<=simpleDateFormat.parse(list.get("endDateStr").toString()).getTime() && + cowav.getXiabanDate1() !=null && cowav.getXiaban1().equals("未打卡") ){ + cowav.setXiaban1(list.get("type").toString()); + } + } +// 上班2 + if(cowav.getShangbanDate2() == null ){ +// cowav.setShangban2(cowav.getShangban1()); +// cowav.setShangban2("未打卡"); + }else{ + if(cowav.getShangbanDate2().getTime()>=simpleDateFormat.parse(list.get("startDateStr").toString()).getTime() && + cowav.getShangbanDate2().getTime()<=simpleDateFormat.parse(list.get("endDateStr").toString()).getTime() && + cowav.getShangbanDate2() !=null && cowav.getShangban2().equals("未打卡")){ + cowav.setShangban2(list.get("type").toString()); + } + } +// 下班2 + if(cowav.getXiabanDate2() == null ){ +// cowav.setXiaban2(cowav.getXiaban1()); +//// cowav.setXiaban2("未打卡"); + }else{ + if(cowav.getXiabanDate2().getTime()>=simpleDateFormat.parse(list.get("startDateStr").toString()).getTime() && + cowav.getXiabanDate2().getTime()<=simpleDateFormat.parse(list.get("endDateStr").toString()).getTime() && + cowav.getXiabanDate2() !=null && cowav.getXiaban2().equals("未打卡") ){ + cowav.setXiaban2(list.get("type").toString()); + } + } + } +// 状态 + cowav = setState(cowav); + log.info("修改后的考勤对象"+cowav); + int i = dingdingDao.updateWorkAttendance(cowav); + log.info("请假调休是否修改考勤成功"+i); + } + } + log.info("请假调休考勤变化完成。"); + } + + +// 出差考勤变更 + public void evectionUpdateWorkAttendance(List> lists,String memberId) throws ParseException { + // 遍历当前查询到的出差单数量 + log.info("进入出差考勤变化"+lists.size()); + for (Map list:lists) { +// 查询当前人员在指定时间内的考勤情况 + log.info("查询指定时间内的考勤情况"+memberId+list.get("startDateStr")+list.get("endDateStr")); + List workAttendanceByDates = dingdingDao.getWorkAttendanceByDate(memberId, + list.get("startDateStr").toString().substring(0,10),list.get("endDateStr").toString().substring(0,10)); + for (CheckOnWorkAttendanceVo cowav:workAttendanceByDates) { +// 上班1 + if(cowav.getShangbanDate1() == null ){ + cowav.setShangban1(list.get("type").toString()); + }else { + if (cowav.getShangbanDate1().getTime()>=simpleDateFormat.parse(list.get("startDateStr").toString()).getTime() && + cowav.getShangbanDate1().getTime()<=simpleDateFormat.parse(list.get("endDateStr").toString()).getTime() + &&cowav.getShangban1().equals("未打卡")){ + cowav.setShangban1(list.get("type").toString()); + } + } +// 下班1 + if(cowav.getXiabanDate1() == null ){ + cowav.setXiaban1(list.get("type").toString()); + }else { + if (cowav.getXiabanDate1().getTime()>=simpleDateFormat.parse(list.get("startDateStr").toString()).getTime() && + cowav.getXiabanDate1().getTime()<=simpleDateFormat.parse(list.get("endDateStr").toString()).getTime() && + cowav.getXiaban1().equals("未打卡") ){ + cowav.setXiaban1(list.get("type").toString()); + } + } +// 上班2 + if(cowav.getShangbanDate2() == null){ + cowav.setShangban2(list.get("type").toString()); + }else { + if(cowav.getShangbanDate2().getTime()>=simpleDateFormat.parse(list.get("startDateStr").toString()).getTime() && + cowav.getShangbanDate2().getTime()<=simpleDateFormat.parse(list.get("endDateStr").toString()).getTime() && + cowav.getShangban2().equals("未打卡")){ + cowav.setShangban2(list.get("type").toString()); + } + } +// 下班2 + if(cowav.getXiabanDate2() == null ){ + cowav.setXiaban2(list.get("type").toString()); + }else { + if (cowav.getXiabanDate2().getTime()>=simpleDateFormat.parse(list.get("startDateStr").toString()).getTime() && + cowav.getXiabanDate2().getTime()<=simpleDateFormat.parse(list.get("endDateStr").toString()).getTime() && + cowav.getXiaban2().equals("未打卡") ){ + cowav.setXiaban2(list.get("type").toString()); + } + } +// 状态 + cowav = setState(cowav); + log.info("修改后的考勤对象"+cowav); + int i = dingdingDao.updateWorkAttendance(cowav); + log.info("考勤对象是否修改成功"+i); + } + } + log.info("出差变化完成。"); + } + + +// 加班考勤变更 + public void overtimesUpdateWorkAttendance(List> lists,String memberId) throws ParseException { + // 遍历当前查询到的加班单数量 + log.info("进入加班考勤变化"+lists.size()); + for (Map list:lists) { +// 查询当前人员在指定时间内的考勤情况 + List workAttendanceByDates = dingdingDao.getWorkAttendanceByDate(memberId, + list.get("startDateStr").toString().substring(0,10),list.get("endDateStr").toString().substring(0,10)); + for (CheckOnWorkAttendanceVo cowav:workAttendanceByDates) { + if("正常".equals(cowav.getShangban1()) && cowav.getShangbanDate1() !=null){ + cowav.setState(list.get("type").toString()); + } + log.info("加班修改后的考勤情况"+cowav); + int i = dingdingDao.updateWorkAttendance(cowav); + log.info("考勤对象是否修改成功"+i); + } + } + log.info("加班考勤变化完成。"); + } + + +// 补卡考勤变更 + public void makeCardUpdateWorkAttendance(List> lists,String memberId) throws ParseException { + // 遍历当前查询到的加班单数量 + log.info("进入补卡考勤变化"+lists.size()); + for (Map list:lists) { +// 查询当前人员在指定时间内的考勤情况 + log.info("进入补卡参数"+memberId+list.get("makeCardDateStr")+list.get("makeCardDateStr")); + List workAttendanceByDates = dingdingDao.getWorkAttendanceByDate(memberId, + list.get("makeCardDateStr").toString().substring(0,10),list.get("makeCardDateStr").toString().substring(0,10)); + for (CheckOnWorkAttendanceVo cowav:workAttendanceByDates) { +// 上班1 + if(cowav.getShangbanDate1() == null){ + cowav.setShangban1("未打卡"); + }else{ + if(cowav.getShangbanDate1().getTime()== simpleDateFormat.parse(list.get("makeCardDateStr").toString()).getTime() + && !"正常".equals(cowav.getShangban1()) ){ + cowav.setShangban1("正常"); + } + } +// 下班1 + if(cowav.getXiabanDate1() == null){ + cowav.setXiaban1("未打卡"); + }else{ + if(cowav.getXiabanDate1().getTime() == simpleDateFormat.parse(list.get("makeCardDateStr").toString()).getTime() + && !"正常".equals(cowav.getXiaban1()) ){ + cowav.setXiaban1("正常"); + } + } +// 上班2 + if(cowav.getShangbanDate2() == null ){ + cowav.setShangban2("未打卡"); + }else{ + if(cowav.getShangbanDate2().getTime() == simpleDateFormat.parse(list.get("makeCardDateStr").toString()).getTime() + && !"正常".equals(cowav.getShangban2()) ){ + cowav.setShangban2("正常"); + } + } +// 下班2 + if(cowav.getXiabanDate2() == null ){ + cowav.setXiaban2("未打卡"); + }else{ + if(cowav.getXiabanDate2().getTime() == simpleDateFormat.parse(list.get("makeCardDateStr").toString()).getTime() + && !"正常".equals(cowav.getXiaban2()) ){ + cowav.setXiaban2("正常"); + } + } + // 状态 + cowav = setState(cowav); + int i = dingdingDao.updateWorkAttendance(cowav); + log.info("考勤对象变化是否成功"+i); + } + } + log.info("补卡后的考勤变化完成。"); + } + +// 设置汇总后的考勤情况 通过考勤结果进行考勤状态汇总 + public CheckOnWorkAttendanceVo setState(CheckOnWorkAttendanceVo checkOnWorkAttendanceVo){ + String shangban1 = checkOnWorkAttendanceVo.getShangban1(); + String xiaban1 = checkOnWorkAttendanceVo.getXiaban1(); + String shangban2 = checkOnWorkAttendanceVo.getShangban2(); + String xiaban2 = checkOnWorkAttendanceVo.getXiaban2(); + // 获取打卡基准时间 + Date shangbanDate1 = checkOnWorkAttendanceVo.getShangbanDate1(); + Date xiabanDate1 = checkOnWorkAttendanceVo.getXiabanDate1(); + Date shangbanDate2 = checkOnWorkAttendanceVo.getShangbanDate2(); + Date xiabanDate2 = checkOnWorkAttendanceVo.getXiabanDate2(); + String state = ""; + if(!StringUtil.isEmpty(shangban1)){ + if(shangban1.equals(xiaban1) && shangban1.equals(shangban2) && shangban1.equals(xiaban2)){ + if("未打卡".equals(shangban1)){ + checkOnWorkAttendanceVo.setState("缺卡"); + }else{ + if("正常".equals(xiaban1) && + (shangbanDate1.getTime()%1800000 != 0 || xiabanDate1.getTime()%1800000 != 0|| + shangbanDate2.getTime()%1800000 != 0||xiabanDate2.getTime()%1800000 != 0)){ + checkOnWorkAttendanceVo.setState("休息并打卡"); + }else{ + checkOnWorkAttendanceVo.setState(shangban1); + } + } + }else if (shangban1.equals(xiaban1) && shangban2==null && xiaban2==null){ + if("未打卡".equals(shangban1)){ + checkOnWorkAttendanceVo.setState("缺卡"); + }else{ + if("正常".equals(shangban1) && + (shangbanDate1.getTime()%1800000 != 0 || xiabanDate1.getTime()%1800000 != 0)){ + checkOnWorkAttendanceVo.setState("休息并打卡"); + }else{ + checkOnWorkAttendanceVo.setState(shangban1); + } + } + }else if (!(shangban1.equals(xiaban1))&& shangban2==null && xiaban2==null ){ + if(!"".equals(shangban1) && !"正常".equals(shangban1) && !"null".equals(shangban1)){ + state = state+"上班1"+shangban1+","; + }if (!"".equals(xiaban1) && !"正常".equals(xiaban1) && !"null".equals(xiaban1)){ + state = state+"下班1"+xiaban1+","; + } + if(state.length()==0){ + state = "正常"; + }else{ + state = state.substring(0,state.length()-1); + } + if("正常".equals(state) && + (shangbanDate1.getTime()%1800000 != 0 || xiabanDate1.getTime()%1800000 != 0)){ + checkOnWorkAttendanceVo.setState("休息并打卡"); + }else{ + checkOnWorkAttendanceVo.setState(state); + } + + }else{ + if(StringUtil.isNotEmpty(shangban1) && !"正常".equals(shangban1) && !"null".equals(shangban1)){ + state = state+"上班1"+shangban1+","; + }if (StringUtil.isNotEmpty(xiaban1) && !"正常".equals(xiaban1) && !"null".equals(xiaban1)){ + state = state+"下班1"+xiaban1+","; + }if(StringUtil.isNotEmpty(shangban2) && !"正常".equals(shangban2) && !"null".equals(shangban2)){ + state = state+"上班2"+shangban2+","; + }if(StringUtil.isNotEmpty(xiaban2) && !"正常".equals(xiaban2) && !"null".equals(xiaban2)){ + state = state+"下班2"+xiaban2+","; + } + if(state.length()==0){ + state = "正常"; + }else{ + state = state.substring(0,state.length()-1); + } + if("正常".equals(state) && + (shangbanDate1.getTime()%1800000 != 0 || xiabanDate1.getTime()%1800000 != 0|| + shangbanDate2.getTime()%1800000 != 0 || xiabanDate2.getTime()%1800000 != 0)){ + checkOnWorkAttendanceVo.setState("休息并打卡"); + }else{ + checkOnWorkAttendanceVo.setState(state); + } + } + }else{ + checkOnWorkAttendanceVo.setState("休息"); + log.info("上班1为空"+shangban1); + } + + return checkOnWorkAttendanceVo; + } + +} + diff --git a/src/com/seeyon/apps/src_dingding/task/DingdingTask.java b/src/com/seeyon/apps/src_dingding/task/DingdingTask.java new file mode 100644 index 0000000..6b4e4cc --- /dev/null +++ b/src/com/seeyon/apps/src_dingding/task/DingdingTask.java @@ -0,0 +1,120 @@ +package com.seeyon.apps.src_dingding.task; + +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.common.quartz.QuartzHolder; +import com.seeyon.ctp.common.quartz.QuartzJob; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import com.seeyon.apps.src_dingding.service.DingdingService; + + + +/** + * 自动计算任务 + */ +public class DingdingTask implements QuartzJob { + + /** 日志管理器 */ + private final static Log log = LogFactory.getLog(DingdingTask.class); + + /** 定义的任务插件ID */ +// private static String jobBeanId="pushCardTask"; + + /** 定义的任务名称 */ +// public static String jobName="QuartzPushCardTask"; + + /** 定义的任务插件ID */ + private static String jobBeanId="dingdingTask"; + + /** 定义的任务名称 */ + public static String jobName="QuartzDingdingTask"; + +// private PushZcService pushZcService; + + private volatile boolean running; + + private DingdingService dingdingService; + + public DingdingService getDingdingService() { + if (dingdingService == null) { + dingdingService = (DingdingService) AppContext.getBean("dingdingService"); + } + return dingdingService; } + + public void setDingdingService(DingdingService dingdingService) { + this.dingdingService = dingdingService; + } + + /** + * {@inheritDoc} + */ + @Override + public void execute(Map parameters) { + if(running) { + log.info("上次推送还在执行中,跳过本次数据推送"); + return; + } + try { +// 钉钉考勤组同步 + getDingdingService().dingdingattendance(); +// 钉钉部门同步 + getDingdingService().dingdingdept(); +// 钉钉人员同步 + getDingdingService().dingdingmember(); +// 钉钉打卡同步 + getDingdingService().dingdingclockin(); +// 钉钉考勤信息设置 + getDingdingService().setWorkAttendance(); + } catch(Exception e) { + log.error("发生异常:", e); + } finally { + this.running = false; + } + } + + /** + * interval 如果是true,则是间隔执行 + */ + public static void registerSyncTask(boolean interval, int our, int minute) { +// jobBeanId = "pushCardTask"; +// jobName = "QuartzPushCardTask"; + jobBeanId = "dingdingTask"; + jobName = "QuartzDingdingTask"; + log.info("注册预算定时计算任务" + jobName + "..."); + try { + // 先删除任务 + QuartzHolder.deleteQuartzJob(jobName); + // 设定时间 每天同步的 + // if ("aa".length() > 5) { + if(interval) { + int delta = (our * 60 + minute) * 60 * 1000; + Map parameters = new HashMap(); + QuartzHolder.newQuartzJob(jobName, new Date(), delta, jobBeanId, parameters); + } else { + Map parameters = new HashMap(); + // 设置时间 + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); // 年月日 也可以具体到时分秒如calendar.set(2015, 10, 12,11,32,52); + // 每日运行,只要改动 时间即可 + calendar.set(Calendar.HOUR_OF_DAY, our); + calendar.set(Calendar.MINUTE, minute); + calendar.set(Calendar.SECOND, 00); + Date date = calendar.getTime();// date就是你需要的时间 + QuartzHolder.newQuartzJobPerDay(null, jobName, date, jobBeanId, parameters); + log.info("定时计算任务" + jobName + ",成功"); + } + } catch (Exception e) { + log.error("注册定时计算任务失败", e); + } + } + +// public void setPushZcService(PushZcService pushZcService) { +// this.pushZcService = pushZcService; +// } +} diff --git a/src/com/seeyon/apps/src_dingding/util/BaseUtil.java b/src/com/seeyon/apps/src_dingding/util/BaseUtil.java new file mode 100644 index 0000000..065db59 --- /dev/null +++ b/src/com/seeyon/apps/src_dingding/util/BaseUtil.java @@ -0,0 +1,110 @@ +package com.seeyon.apps.src_dingding.util; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; + + +/** + * sql执行工具类 + * 2021-06-08 + * @author huangzhengguo + * + */ +public class BaseUtil { + + + PreparedStatement ps = null; + ResultSet res = null; + Connection conn =null; + /** + * sql查询工具 + * @param sql sql语句 + * @param params sql参数 + * @return 结果集 + */ + public ResultSet executeQuery(String sql, Object[] params) + { + conn = JdbcUtil.getConnection(); + try { + ps = conn.prepareStatement(sql); + for(int i = 0; i < params.length; i++){ + ps.setObject(i+1, params[i]); + } + res = ps.executeQuery(); + } catch (SQLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return res; + } + /** + * sql更新工具 + * @param sql + * @param params + * @return + */ + public int executeUpdate(String sql, Object[] params) + { + int res = 0; + conn = JdbcUtil.getConnection(); + try { + ps = conn.prepareStatement(sql); + for(int i = 0; i < params.length; i++) + { + ps.setObject(i+1, params[i]); + } + res = ps.executeUpdate(); + } catch (SQLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return res; + } + + + public void close() { + release(res,null,conn,ps); + } + //定义一个释放资源的方法; + /* + * 定义一个方法: 释放资源: 直接将rs stmt conn 全部释放: + */ + public static void release(ResultSet rs ,Statement stmt , Connection conn,PreparedStatement ps){ + if(rs!=null){ + try { + rs.close(); + } catch (SQLException e) { + e.printStackTrace(); + } + rs=null; + } + if(stmt!=null){ + try { + stmt.close(); + } catch (SQLException e) { + e.printStackTrace(); + } + stmt=null; + } + if(conn!=null){ + try { + conn.close(); + } catch (SQLException e) { + e.printStackTrace(); + } + conn=null; + } + if(ps!=null){ + try { + ps.close(); + } catch (SQLException e) { + e.printStackTrace(); + } + ps=null; + } + + } +} diff --git a/src/com/seeyon/apps/src_dingding/util/DingtalkUtil.java b/src/com/seeyon/apps/src_dingding/util/DingtalkUtil.java new file mode 100644 index 0000000..630d162 --- /dev/null +++ b/src/com/seeyon/apps/src_dingding/util/DingtalkUtil.java @@ -0,0 +1,126 @@ +package com.seeyon.apps.src_dingding.util; + +import java.io.BufferedReader; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.URL; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.dingtalk.api.DefaultDingTalkClient; +import com.dingtalk.api.DingTalkClient; +import com.dingtalk.api.request.OapiGettokenRequest; +import com.dingtalk.api.response.OapiGettokenResponse; +import com.taobao.api.ApiException; + +public class DingtalkUtil { + + public String getToken() throws RuntimeException, ApiException, FileNotFoundException, IOException { +// DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/gettoken"); + DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/gettoken"); + OapiGettokenRequest request = new OapiGettokenRequest(); + request.setAppkey("dingtiefuskr6oycl5ah"); + request.setAppsecret("5V_zIyAXU3Fx0yl20uxGotc3zIdrAXnKERat_ciEez0u3jqaVjosQhlflu5-83St"); + request.setHttpMethod("GET"); + OapiGettokenResponse response = client.execute(request); + JSONObject jsonObject = JSON.parseObject(response.getBody()); + String token = jsonObject.getString("access_token"); + return token; + } + + + /** + * 调用post接口 + * + * @param str 调用接口传递的参数json + * @param urlStr 需要调用的url对应的参数文件中的编码 + * @return + * @throws ApiException + * @throws RuntimeException + */ + public JSONObject doPost(String str, String urlStr) throws RuntimeException, ApiException { + HttpURLConnection connection = null; + InputStream is = null; + OutputStream os = null; + BufferedReader br = null; + String result = null; + try { + String token = getToken(); + URL url = new URL(urlStr+"?access_token="+token); + // 通过远程url连接对象打开连接 + connection = (HttpURLConnection) url.openConnection(); + // 设置连接请求方式 + connection.setRequestMethod("POST"); + // 设置连接主机服务器超时时间:15000毫秒 + connection.setConnectTimeout(15000); + // 设置读取主机服务器返回数据超时时间:60000毫秒 + connection.setReadTimeout(60000); + + // 默认值为:false,当向远程服务器传送数据/写数据时,需要设置为true + connection.setDoOutput(true); + // 默认值为:true,当前向远程服务读取数据时,设置为true,该参数可有可无 + connection.setDoInput(true); + // 设置传入参数的格式:请求参数应该是 name1=value1&name2=value2 的形式。 +// connection.setRequestProperty("access_token", token); + connection.setRequestProperty("Content-Type", "application/json; charset=UTF-8"); + // 通过连接对象获取一个输出流 + os = connection.getOutputStream(); + // 通过输出流对象将参数写出去/传输出去,它是通过字节数组写出的 + if (!("".equals(str) || str == null)) { + os.write(str.getBytes("UTF-8")); + } + // 连接对象获取一个输入流,向远程读取 + if (connection.getResponseCode() == 200) { + is = connection.getInputStream(); + // 对输入流对象进行包装:charset根据工作项目组的要求来设置 + br = new BufferedReader(new InputStreamReader(is, "UTF-8")); + + StringBuffer sbf = new StringBuffer(); + String temp = null; + // 循环遍历一行一行读取数据 + while ((temp = br.readLine()) != null) { + sbf.append(temp); + sbf.append("\r\n"); + } + result = sbf.toString(); + } + } catch (MalformedURLException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } finally { + // 关闭资源 + if (null != br) { + try { + br.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + if (null != os) { + try { + os.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + if (null != is) { + try { + is.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + // 断开与远程地址url的连接 + connection.disconnect(); + } + JSONObject json = JSONObject.parseObject(result); + return json; + } + +} diff --git a/src/com/seeyon/apps/src_dingding/util/FormExportUtil.java b/src/com/seeyon/apps/src_dingding/util/FormExportUtil.java new file mode 100644 index 0000000..67260ed --- /dev/null +++ b/src/com/seeyon/apps/src_dingding/util/FormExportUtil.java @@ -0,0 +1,111 @@ +package com.seeyon.apps.src_dingding.util; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.seeyon.v3x.services.form.bean.RecordExport; +import com.seeyon.v3x.services.form.bean.SubordinateFormExport; +import com.seeyon.v3x.services.form.bean.ValueExport; + +//创建无流程表单数据处理工具类 +public class FormExportUtil { + + /** + * 设置主表信息 + * @param map 设置主表字段。Map<主表显示名称,主表数据> + * @return + */ + public List setFormValue(Map map){ +// 创建返回值对象 + List valueExports = new ArrayList(); + ValueExport valueExport ; +// 获取参数信息(显示名称) + Set keys = map.keySet(); + if(keys.size()>0) { +// 对控件赋值 + for (String key : keys) { + valueExport = new ValueExport(); + valueExport.setDisplayName(key); + valueExport.setValue(map.get(key)); + valueExports.add(valueExport); + } + } + return valueExports; + } + + /** + * 设置从表信息 + * @param lists 设置主表字段。List> + */ + public List setSubordinateFormValue(List> lists){ + List subordinateFormExports = new ArrayList(); + SubordinateFormExport subordinateFormExport = new SubordinateFormExport(); + List recordExports = new ArrayList(); + List valueExports; + RecordExport recordExport; + for(int i = 0 ; i < lists.size() ; i++) { + recordExport = new RecordExport(); + valueExports = setFormValue(lists.get(i)); + recordExport.setRecord(valueExports); + recordExports.add(recordExport); + } + subordinateFormExport.setValues(recordExports); + subordinateFormExports.add(subordinateFormExport); + + return subordinateFormExports; + } + + + /** + * 格式转换将{"id":1,"str1":"123","str2":"asd","str3":"qwe"},{"id":2,"str1":"123","str2":"asd","str3":"qwe"},{"id":3,"str1":"123","str2":"asd","str3":"qwe"},{"id":1,"str1":"123","str2":"asd","str3":"qwe"},{"id":2,"str1":"123","str2":"asd","str3":"qwe"},{"id":3,"str1":"123","str2":"asd","str3":"qwe"}] + 有什么办法转换成 + [{"id":1,"data":[{"id":1,"str1":"123","str2":"asd","str3":"qwe"},{"id":1,"str1":"123","str2":"asd","str3":"qwe"}]}{"id":2,"data":[{"id":2,"str1":"123","str2":"asd","str3":"qwe"},{"id":2,"str1":"123","str2":"asd","str3":"qwe"}]}{"id":3,"data":[{"id":3,"str1":"123","str2":"asd","str3":"qwe"},{"id":3,"str1":"123","str2":"asd","str3":"qwe"}]}] + * @param inputList + * @return + */ + public List> transformData(JSONArray inputList) { + Map>> groupedData = new HashMap<>(); + for(int i = 0 ; i < inputList.size();i++) { + String userId = inputList.getJSONObject(i).getString("userId"); + + groupedData.computeIfAbsent(userId, k -> new ArrayList<>()).add(inputList.getJSONObject(i)); + } + + List> result = new ArrayList<>(); + + for (Map.Entry>> entry : groupedData.entrySet()) { + Map resultMap = new HashMap<>(); + resultMap.put("userId", entry.getKey()); + resultMap.put("data", entry.getValue()); + result.add(resultMap); + } + + return result; + } + + + + public JSONArray dingdingTimeSequence (JSONArray datas){ + + for (int i = 0; i < datas.size() - 1; i++) { + for (int j = 0; j < datas.size() - i - 1; j++) { + String value1 = datas.getJSONObject(j).getString("baseCheckTime"); + String value2 = datas.getJSONObject(j + 1).getString("baseCheckTime"); + long long1 = Long.parseLong(value1); + long long2 = Long.parseLong(value2); + if (long1 > long2) { + JSONObject temp = datas.getJSONObject(j); + datas.set(j, datas.getJSONObject(j + 1)); + datas.set(j + 1, temp); + } + } + } + return datas; + } + +} diff --git a/src/com/seeyon/apps/src_dingding/util/JdbcUtil.java b/src/com/seeyon/apps/src_dingding/util/JdbcUtil.java new file mode 100644 index 0000000..ca36feb --- /dev/null +++ b/src/com/seeyon/apps/src_dingding/util/JdbcUtil.java @@ -0,0 +1,93 @@ +package com.seeyon.apps.src_dingding.util; + +import java.io.InputStream; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.Properties; + +import com.seeyon.apps.src_dingding.kit.PropKit; + + + +/** + * jdbc工具类 + * 2021-06-08 + * @author huangzhengguo + * + */ + public class JdbcUtil { + private static String url; + private static String user; + private static String password; + + static { + // 使用properties加载属性文件 +// Properties prop = new Properties(); + try { +// InputStream is = JdbcUtil.class.getClassLoader().getResourceAsStream("jdbc.properties"); +// prop.load(is); + // 注册驱动(获取属性文件中的数据) +// String driverClassName = prop.getProperty("jdbc_driver"); + System.out.println(PropKit.getProp(PropKit.JDBCDRIVER)); + String driverClassName = PropKit.getProp(PropKit.JDBCDRIVER); + Class.forName(driverClassName); + // 获取属性文件中的url,username,password +// url = prop.getProperty("jdbc_url"); + System.out.println(PropKit.getProp(PropKit.JDBCURL)); + url = PropKit.getProp(PropKit.JDBCURL); +// user = prop.getProperty("jdbc_user"); + System.out.println(PropKit.getProp(PropKit.JDBCUSER)); + user = PropKit.getProp(PropKit.JDBCUSER); +// password = prop.getProperty("jdbc_password"); + System.out.println(PropKit.getProp(PropKit.JDBCPASSWORD)); + password = PropKit.getProp(PropKit.JDBCPASSWORD); + } catch (Exception e) { + e.printStackTrace(); + } + } + + // 获取数据库连接 + public static Connection getConnection() { + Connection conn = null; + try { + conn = DriverManager.getConnection(url, user, password); + } catch (SQLException e) { + e.printStackTrace(); + } + return conn; + } + + // 释放资源 + public static void close(Connection conn, Statement stat, ResultSet rs) { + close(conn, stat); + if (rs != null) { + try { + rs.close(); + } catch (SQLException e) { + e.printStackTrace(); + } + } + } + + // 释放资源 + public static void close(Connection conn, Statement stat) { + if (conn != null) { + try { + conn.close(); + } catch (SQLException e) { + e.printStackTrace(); + } + } + if (stat != null) { + try { + stat.close(); + } catch (SQLException e) { + e.printStackTrace(); + } + } + } + +} diff --git a/src/com/seeyon/apps/src_dingding/util/TimeUtil.java b/src/com/seeyon/apps/src_dingding/util/TimeUtil.java new file mode 100644 index 0000000..e205ac5 --- /dev/null +++ b/src/com/seeyon/apps/src_dingding/util/TimeUtil.java @@ -0,0 +1,61 @@ +package com.seeyon.apps.src_dingding.util; + +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.common.ctpenumnew.manager.EnumManager; +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.ctp.util.JDBCAgent; + +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class TimeUtil { + + private EnumManager enumManagerNew; + public EnumManager getEnumManager() { + if (this.enumManagerNew == null) { + this.enumManagerNew = ((EnumManager) AppContext.getBean("enumManagerNew")); + } + return enumManagerNew; + } + + public void setEnumManagerNew(EnumManager enumManagerNew) { + this.enumManagerNew = enumManagerNew; + } + +// 获取定时任务的同步频率 + public String getTime() { + JDBCAgent agent = new JDBCAgent(); + String time = ""; +// String sqlString = "select field0001,field0002,field0003 from formmain_0067"; + String sqlString = "select field0044,field0042,field0043 from formmain_1224"; + try { + StringBuilder sql = new StringBuilder(sqlString); + List p = new ArrayList(); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + Map map = list.get(0); + Long enumid = Long.parseLong(map.get("field0044").toString()); + String shi = map.get("field0042").toString(); + String fen = map.get("field0043").toString(); + String str = getEnumManager().getEnumItem(enumid).getValue(); + if("0".equals(str)) { + time = "I-"+shi+","+fen; + }else { + time = "D-"+shi+","+fen; + } + } catch (BusinessException e) { + e.printStackTrace(); + } catch (SQLException e) { + e.printStackTrace(); + }finally { + if (agent != null) { + agent.close(); + } + } + return time; + } + + +} diff --git a/src/com/seeyon/apps/src_dingding/vo/AttendanceVo.java b/src/com/seeyon/apps/src_dingding/vo/AttendanceVo.java new file mode 100644 index 0000000..1debd90 --- /dev/null +++ b/src/com/seeyon/apps/src_dingding/vo/AttendanceVo.java @@ -0,0 +1,43 @@ +package com.seeyon.apps.src_dingding.vo; + +public class AttendanceVo { + + // ID + private long id; + // 考勤组ID + private String groupid; + // 考勤组名称 + private String groupname; + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public String getGroupid() { + return groupid; + } + + public void setGroupid(String groupid) { + this.groupid = groupid; + } + + public String getGroupname() { + return groupname; + } + + public void setGroupname(String groupname) { + this.groupname = groupname; + } + + public String toString(){ + return "("+this.groupid+":"+this.groupname+")"; + } + + + + +} diff --git a/src/com/seeyon/apps/src_dingding/vo/CheckOnWorkAttendanceVo.java b/src/com/seeyon/apps/src_dingding/vo/CheckOnWorkAttendanceVo.java new file mode 100644 index 0000000..2271c06 --- /dev/null +++ b/src/com/seeyon/apps/src_dingding/vo/CheckOnWorkAttendanceVo.java @@ -0,0 +1,142 @@ +package com.seeyon.apps.src_dingding.vo; + +import java.util.Date; + +public class CheckOnWorkAttendanceVo { + + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public Date getCheckOnWorkAttendanceDate() { + return checkOnWorkAttendanceDate; + } + + public void setCheckOnWorkAttendanceDate(Date checkOnWorkAttendanceDate) { + this.checkOnWorkAttendanceDate = checkOnWorkAttendanceDate; + } + + public Date getShangbanDate1() { + return shangbanDate1; + } + + public void setShangbanDate1(Date shangbanDate1) { + this.shangbanDate1 = shangbanDate1; + } + + public String getShangban1() { + return shangban1; + } + + public void setShangban1(String shangban1) { + this.shangban1 = shangban1; + } + + public Date getXiabanDate1() { + return xiabanDate1; + } + + public void setXiabanDate1(Date xiabanDate1) { + this.xiabanDate1 = xiabanDate1; + } + + public String getXiaban1() { + return xiaban1; + } + + public void setXiaban1(String xiaban1) { + this.xiaban1 = xiaban1; + } + + public Date getShangbanDate2() { + return shangbanDate2; + } + + public void setShangbanDate2(Date shangbanDate2) { + this.shangbanDate2 = shangbanDate2; + } + + public String getShangban2() { + return shangban2; + } + + public void setShangban2(String shangban2) { + this.shangban2 = shangban2; + } + + public Date getXiabanDate2() { + return xiabanDate2; + } + + public void setXiabanDate2(Date xiabanDate2) { + this.xiabanDate2 = xiabanDate2; + } + + public String getXiaban2() { + return xiaban2; + } + + public void setXiaban2(String xiaban2) { + this.xiaban2 = xiaban2; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } + public String getGroupName() { + return groupName; + } + + public void setGroupName(String groupName) { + this.groupName = groupName; + } + + public long getMemberId() { + return memberId; + } + + public void setMemberId(long memberId) { + this.memberId = memberId; + } +// 数据ID + private long id; +// 考勤人员Id + private long memberId; +// 考勤日期 CHECKONWORKATTENDANCEDATE + private Date checkOnWorkAttendanceDate; +// 上班1基准时间 + private Date shangbanDate1; +// 上班1打卡状态 + private String shangban1; +// 下班1基准时间 + private Date xiabanDate1; +// 下班1打卡状态 + private String xiaban1; +// 上班2基准时间 + private Date shangbanDate2; +// 上班2打卡状态 + private String shangban2; +// 下班2基准时间 + private Date xiabanDate2; +// 下班2打卡状态 + private String xiaban2; +// 整体打卡状态 + private String state; +// 考勤组 + private String groupName; + + @Override + public String toString() { + return id+","+memberId + ",上班1:"+shangban1+",上班1基准"+shangbanDate1 + ",下班1:"+xiaban1+",下班1基准"+xiabanDate1+ + ",上班2:"+shangban2+",上班2基准"+shangbanDate2+",下班2:"+xiaban2+",下班2基准"+xiabanDate2+",状态:"+state+",考勤组名称:"+groupName; + } +} diff --git a/src/com/seeyon/apps/src_mainorganization/MainorganizationPluginApi.java b/src/com/seeyon/apps/src_mainorganization/MainorganizationPluginApi.java new file mode 100644 index 0000000..16f8dba --- /dev/null +++ b/src/com/seeyon/apps/src_mainorganization/MainorganizationPluginApi.java @@ -0,0 +1,42 @@ +package com.seeyon.apps.src_mainorganization; + +import com.seeyon.apps.common.plugin.api.APluginInfoApi; +import com.seeyon.apps.common.plugin.vo.ConfigVo; +import com.seeyon.apps.src_membermanage.constants.MemberManageConstants; + +public class MainorganizationPluginApi extends APluginInfoApi { + + public MainorganizationPluginApi(){ + } + + public String getPluginId() { + System.out.println(MemberManageConstants.getPluginId()); + return MemberManageConstants.getPluginId(); + } + + public String getCreateUser() { + return "橙阳科技"; + } + + public String getDescription() { + return "稻花香主数据同步"; + } + + public ConfigVo getDefaultConfig() { + ConfigVo configVo = new ConfigVo(); + MemberManageConstants[] var2 = MemberManageConstants.values(); + int var3 = var2.length; + + for(int var4 = 0; var4 < var3; ++var4) { + MemberManageConstants value = var2[var4]; + if (value != MemberManageConstants.plugin) { + configVo.getDevParams().put(value.name(), value.getDefaultValue()); + configVo.getProdParams().put(value.name(), value.getDefaultValue()); + configVo.getParamMap().put(value.name(), value.getDescription()); + } + } + + return configVo; + } + +} diff --git a/src/com/seeyon/apps/src_mainorganization/bo/ReceiveOrgMemberResponse.java b/src/com/seeyon/apps/src_mainorganization/bo/ReceiveOrgMemberResponse.java new file mode 100644 index 0000000..e2a31e2 --- /dev/null +++ b/src/com/seeyon/apps/src_mainorganization/bo/ReceiveOrgMemberResponse.java @@ -0,0 +1,56 @@ +package com.seeyon.apps.src_mainorganization.bo; + +import com.alibaba.fastjson.JSONObject; + +public class ReceiveOrgMemberResponse { + + private boolean success; + private int status; + private String msg; + private String data; + public ReceiveOrgMemberResponse() {} + public ReceiveOrgMemberResponse(JSONObject object) { + + this.status = object.getString("status").equals("1")?1:2; + this.success = (1 == status); + this.msg = object.getString("msg"); + this.data = object.getString("data"); + } + + public boolean isSuccess() { + return success; + } + + public ReceiveOrgMemberResponse setSuccess(boolean success) { + this.success = success; + return this; + } + + public int getStatus() { + return status; + } + + public ReceiveOrgMemberResponse setStatus(int status) { + this.status = status; + return this; + } + + public String getMsg() { + return msg; + } + + public ReceiveOrgMemberResponse setMsg(String msg) { + this.msg = msg; + return this; + } + + public String getData() { + return data; + } + + public ReceiveOrgMemberResponse setData(String data) { + this.data = data; + return this; + } + +} diff --git a/src/com/seeyon/apps/src_mainorganization/constants/MainorganizationConstants.java b/src/com/seeyon/apps/src_mainorganization/constants/MainorganizationConstants.java new file mode 100644 index 0000000..c9c1e93 --- /dev/null +++ b/src/com/seeyon/apps/src_mainorganization/constants/MainorganizationConstants.java @@ -0,0 +1,39 @@ +package com.seeyon.apps.src_mainorganization.constants; + +public enum MainorganizationConstants { + + plugin("src_mainorganization","插件ID"), + dowUrl("http://127.0.0.1:8088/seeyon/rest/attachment/file","附件下载路径"), + uploadUrl("http://10.0.3.55/seeyon/rest/attachment","主数据平台上传接口"), + getTokenUrl("http://127.0.0.1:8088/seeyon/rest/token", "集团TOKEN接口路径"), + restUserName("beian", "集团REST用户名"), + restPassword("f1c4e761-d60b-47ff-a5ff-5953f2b9c9e0", "集团REST密码"), + loginName("BDGLY", "集团管理员登录名"), + getzsjTokenUrl("http://10.0.3.55/seeyon/rest/token", "主数据TOKEN接口路径"), + restzsjUserName("sys", "主数据REST用户名"), + restzsjPassword("751f86d5-2e4c-4fe0-9a90-50d568359a1f", "主数据REST密码"), + zsjloginName("demo1", "主数据管理员账号"), + mainUrl("http://10.0.3.55","主数据平台ip端口"); + + MainorganizationConstants(String defaultValue, String description) { + this.defaultValue = defaultValue; + this.description = description; + } + + private String defaultValue; + private String description; + + public String getDefaultValue() { + return defaultValue; + } + + public String getDescription() { + return description; + } + + public static String getPluginId() { + return plugin.defaultValue; + } + + +} diff --git a/src/com/seeyon/apps/src_mainorganization/dao/ISrcEnumDao.java b/src/com/seeyon/apps/src_mainorganization/dao/ISrcEnumDao.java new file mode 100644 index 0000000..cb72dd1 --- /dev/null +++ b/src/com/seeyon/apps/src_mainorganization/dao/ISrcEnumDao.java @@ -0,0 +1,9 @@ +package com.seeyon.apps.src_mainorganization.dao; + +public interface ISrcEnumDao { + + public String getEnumByExtAttr(String extAttrName); + + public String getEnumItemByRefEnumIdValue(String refEnumId, String enumValue); + +} diff --git a/src/com/seeyon/apps/src_mainorganization/dao/ISrcMemberDao.java b/src/com/seeyon/apps/src_mainorganization/dao/ISrcMemberDao.java new file mode 100644 index 0000000..7da8c9e --- /dev/null +++ b/src/com/seeyon/apps/src_mainorganization/dao/ISrcMemberDao.java @@ -0,0 +1,7 @@ +package com.seeyon.apps.src_mainorganization.dao; + +public interface ISrcMemberDao { + + public String getMemberMaxSortId(); + +} diff --git a/src/com/seeyon/apps/src_mainorganization/dao/impl/SrcEnumDaoImpl.java b/src/com/seeyon/apps/src_mainorganization/dao/impl/SrcEnumDaoImpl.java new file mode 100644 index 0000000..6c8f9a5 --- /dev/null +++ b/src/com/seeyon/apps/src_mainorganization/dao/impl/SrcEnumDaoImpl.java @@ -0,0 +1,74 @@ +package com.seeyon.apps.src_mainorganization.dao.impl; + +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.src_mainorganization.dao.ISrcEnumDao; +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.ctp.util.JDBCAgent; + +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class SrcEnumDaoImpl implements ISrcEnumDao { + + private String getEnumByExtAttr = "select label,name,alias,column_rule from ctp_metadata_column where name = ?"; + private String getEnumItemByRefEnumIdValue = "select id,ref_enumid,showvalue,enumvalue from ctp_enum_item where ref_enumid = ? and enumvalue = ?"; + + @Override + public String getEnumByExtAttr(String extAttrName) { + JDBCAgent agent = new JDBCAgent(); + String enumId = ""; + try { + StringBuilder sql = new StringBuilder(this.getEnumByExtAttr); + List p = new ArrayList(); + p.add(extAttrName); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + if(list.size()>0){ + Map map = (Map) list.get(0); + String columnRule = map.get("column_rule").toString(); + JSONObject column = JSONObject.parseObject(columnRule); + enumId = column.getString("codeId"); + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return enumId; + } + + @Override + public String getEnumItemByRefEnumIdValue(String refEnumId,String enumValue) { + JDBCAgent agent = new JDBCAgent(); + String enumItemId = ""; + try { + StringBuilder sql = new StringBuilder(this.getEnumItemByRefEnumIdValue); + List p = new ArrayList(); + p.add(refEnumId); + p.add(enumValue); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + if(list.size()>0){ + enumItemId = list.get(0).get("id").toString(); + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return enumItemId; + } + + + +} diff --git a/src/com/seeyon/apps/src_mainorganization/dao/impl/SrcMemberDaoImpl.java b/src/com/seeyon/apps/src_mainorganization/dao/impl/SrcMemberDaoImpl.java new file mode 100644 index 0000000..2afd90b --- /dev/null +++ b/src/com/seeyon/apps/src_mainorganization/dao/impl/SrcMemberDaoImpl.java @@ -0,0 +1,41 @@ +package com.seeyon.apps.src_mainorganization.dao.impl; + +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.src_mainorganization.dao.ISrcMemberDao; +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.ctp.util.JDBCAgent; + +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class SrcMemberDaoImpl implements ISrcMemberDao { + + private String getMemberMaxSortId = "select max(sort_id) as max_sort_id from org_member "; + + @Override + public String getMemberMaxSortId() { + JDBCAgent agent = new JDBCAgent(); + String sortId = ""; + try { + StringBuilder sql = new StringBuilder(this.getMemberMaxSortId); + List p = new ArrayList(); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + if(list.size()>0){ + Map map = (Map) list.get(0); + sortId = map.get("max_sort_id").toString(); + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return sortId; + } +} diff --git a/src/com/seeyon/apps/src_mainorganization/node/DepartmentAddNode.java b/src/com/seeyon/apps/src_mainorganization/node/DepartmentAddNode.java new file mode 100644 index 0000000..bd0fd14 --- /dev/null +++ b/src/com/seeyon/apps/src_mainorganization/node/DepartmentAddNode.java @@ -0,0 +1,177 @@ +package com.seeyon.apps.src_mainorganization.node; + +import cn.hutool.log.Log; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.common.config.ICstConfigApi; +import com.seeyon.apps.common.plugin.vo.ConfigVo; +import com.seeyon.apps.common.workflow.constants.WorkFlowType; +import com.seeyon.apps.common.workflow.node.ACommonSuperNode; +import com.seeyon.apps.ext.workflow.vo.FieldDataVo; +import com.seeyon.apps.ext.workflow.vo.FormDataVo; +import com.seeyon.apps.ext.workflow.vo.SuperNodeContext; +import com.seeyon.apps.src_mainorganization.constants.MainorganizationConstants; +import com.seeyon.apps.src_mainorganization.util.ProtUtil; +import com.seeyon.cap4.form.bean.FormDataMasterBean; +import com.seeyon.ctp.common.AppContext; + +import com.seeyon.ctp.organization.bo.V3xOrgAccount; +import com.seeyon.ctp.organization.bo.V3xOrgDepartment; +import com.seeyon.ctp.organization.manager.OrgManager; +import com.seeyon.ctp.util.UUIDLong; + +import javax.inject.Inject; +import java.util.List; + +public class DepartmentAddNode extends ACommonSuperNode { + + private static Log log = Log.get(DepartmentAddNode.class); + + protected ICstConfigApi cstConfigApi = (ICstConfigApi) AppContext.getBean("cstConfigApi"); + + @Inject + private OrgManager orgManager; + + @Override + public String getPluginId() { + return MainorganizationConstants.getPluginId(); + } + + @Override + public String getFormParse() { + return "json"; + } + + @Override + public WorkFlowType[] getTypes() { + return new WorkFlowType[] {WorkFlowType.superNode}; + } + + public ConfigVo getMainorganizationConfig() { + return cstConfigApi.getConfig(getPluginId()); + } + + @Override + public String getNodeId() { + return "DepartmentAddNode"; + } + + @Override + public String getNodeName() { + return "部门批量新增超级节点"; + } + +// { +// "data":"jsonArr::明细表1", +// "seeyonFormSon":{ +// "明细表1":{ +// "deptName":"部门名称", +// "orgAccount":"所属单位", +// "isFirstDept":"是否一级部门", +// "superiorDeptName":"上级部门" +// } +// } +// } + + @Override + public SuperNodeContext proceed(String request, FormDataVo formDataVo, FormDataMasterBean formDataMasterBean) throws Exception { + log.info("进入部门新增处理流程"+getNodeId()); + ConfigVo configVo = getMainorganizationConfig(); +// 创建返回对象 + SuperNodeContext context = new SuperNodeContext(); + context.setNeedSave(true); + log.info("请求参数"+request); + JSONObject param = JSONObject.parseObject(request); +// 获取部门明细信息 + JSONArray datas = param.getJSONArray("data"); +// 记录新增返回值 + JSONArray requestJson = new JSONArray(); + String mainUrl = configVo.getParamVal(MainorganizationConstants.mainUrl.name()); + String getzsjTokenUrl = configVo.getParamVal(MainorganizationConstants.getzsjTokenUrl.name()); + String restzsjUserName = configVo.getParamVal(MainorganizationConstants.restzsjUserName.name()); + String restzsjPassword = configVo.getParamVal(MainorganizationConstants.restzsjPassword.name()); + String zsjloginName = configVo.getParamVal(MainorganizationConstants.zsjloginName.name()); +// 调用接口查询主数据token + String mainToken = ProtUtil.getToken(getzsjTokenUrl,restzsjUserName,restzsjPassword,zsjloginName); + String maindeptsurl = mainUrl+"/seeyon/rest/orgDepartment?token="+mainToken; + log.info("设置部门新增接口路径"+maindeptsurl); + String ret = ""; +// 遍历明细表数据 + data:for (int i = 0 ; i < datas.size() ; i ++) { + JSONObject data = datas.getJSONObject(i); +// 获取需要新增的部门名称 + String deptName = data.getString("deptName"); +// 获取新增部门所在单位的控件名称 + long orgAccountId = data.getLongValue("orgAccountId"); +// 获取是否是一级部门控件 + String isFirstDept = data.getString("isFirstDept"); +// 获取新增部门所在上级部门的控件名称 + long superiorDeptId = data.getLongValue("superiorDeptId"); + V3xOrgAccount v3xOrgAccount = orgManager.getAccountById(orgAccountId); + V3xOrgDepartment superiorDepartment = orgManager.getDepartmentById(superiorDeptId); +// 根据部门名称查询部门名称和单位ID,查询部门信息 + List departmentsByName = orgManager.getDepartmentsByName(deptName,orgAccountId); +// 遍历现存同名部门信息 + old:for(V3xOrgDepartment department:departmentsByName){ +// 获取上级部门信息 + long superiorId = department.getSuperior(); + if("是".equals(isFirstDept)){ +// 当前添加部门为一级部门,判断同名上级部门ID是否等于单位ID + if(superiorId==orgAccountId){ +// 同名部门已经存在跳过当前明细行处理 + ret = ret +deptName + "部门已经存在,跳过处理;"; + break data; + } + }else{ +// 当前添加部门不为一级部门,判断同名上级部门ID是否等于所选择的上级部门ID + if(superiorId==superiorDeptId){ +// 同名部门已经存在跳过当前明细行处理 + ret = ret +deptName + "部门已经存在,跳过处理;"; + break data; + } + } + } +// 封装部门新增参数,新增部门信息 + JSONObject deptjson = new JSONObject(); + deptjson.put("name",deptName); + deptjson.put("description",""); + if("是".equals(isFirstDept)){ + deptjson.put("superior",orgAccountId); + deptjson.put("superiorName",v3xOrgAccount.getName()); + }else{ + deptjson.put("superior",superiorDeptId); + deptjson.put("superiorName",superiorDepartment.getName()); + } + deptjson.put("enabled",true); + deptjson.put("id", UUIDLong.longUUID()); + deptjson.put("orgAccountName",v3xOrgAccount.getName()); + deptjson.put("orgAccountId",orgAccountId); + requestJson.add(deptjson); + JSONObject res = ProtUtil.doPost(deptjson.toString(),maindeptsurl); + if(res==null){ + ret=ret+deptName+"部门添加返回为空;"; + }else{ + String success = res.getString("success"); + if("false".equals(success)){ + JSONArray errorMsgInfos = res.getJSONArray("errorMsgInfos"); + JSONObject errorMsgInfo = errorMsgInfos.getJSONObject(0); + String msgInfo = errorMsgInfo.getString("msgInfo"); + ret=ret+deptName+msgInfo+";"; + context.back(ret); + context.setErrMsg(ret); + context.setRequest(requestJson.toString()); + context.setResponse(ret); + return context; + }else{ + ret=ret+deptName+"添加成功;"; + } + } + } + context.success(requestJson.toString()); + context.setRequest(requestJson.toString()); + context.setResponse(ret); + return context; + } + + +} diff --git a/src/com/seeyon/apps/src_mainorganization/node/DepartmentCloseNode.java b/src/com/seeyon/apps/src_mainorganization/node/DepartmentCloseNode.java new file mode 100644 index 0000000..d97a269 --- /dev/null +++ b/src/com/seeyon/apps/src_mainorganization/node/DepartmentCloseNode.java @@ -0,0 +1,158 @@ +package com.seeyon.apps.src_mainorganization.node; + +import cn.hutool.log.Log; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.common.config.ICstConfigApi; +import com.seeyon.apps.common.plugin.vo.ConfigVo; +import com.seeyon.apps.common.workflow.constants.WorkFlowType; +import com.seeyon.apps.common.workflow.node.ACommonSuperNode; +import com.seeyon.apps.ext.workflow.vo.FormDataVo; +import com.seeyon.apps.ext.workflow.vo.SuperNodeContext; +import com.seeyon.apps.src_mainorganization.constants.MainorganizationConstants; +import com.seeyon.apps.src_mainorganization.util.ProtUtil; +import com.seeyon.apps.src_membermanage.MemberManageCommonNode; +import com.seeyon.cap4.form.bean.FormDataMasterBean; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.organization.bo.V3xOrgDepartment; +import com.seeyon.ctp.organization.bo.V3xOrgMember; +import com.seeyon.ctp.organization.manager.OrgManager; + +import javax.inject.Inject; +import java.util.HashMap; +import java.util.List; + +public class DepartmentCloseNode extends ACommonSuperNode { + + private static Log log = Log.get(MemberManageCommonNode.class); + + protected ICstConfigApi cstConfigApi = (ICstConfigApi) AppContext.getBean("cstConfigApi"); + + @Inject + private OrgManager orgManager; + + @Override + public String getPluginId() { + return MainorganizationConstants.getPluginId(); + } + + @Override + public String getFormParse() { + return "json"; + } + + @Override + public WorkFlowType[] getTypes() { + return new WorkFlowType[] {WorkFlowType.superNode}; + } + + public ConfigVo getMemberMamageConfig() { + return cstConfigApi.getConfig(getPluginId()); + } + + @Override + public String getNodeId() { + return "DepartmentCloseNode"; + } + + @Override + public String getNodeName() { + return "部门批量停用超级节点"; + } + +// { +// "data": "jsonArr::明细表1", +// "seeyonFormSon": { +// "明细表1": { +// "deptId": "部门名称", +// "orgAccountId": "所属单位" +// } +// } +// } + + @Override + public SuperNodeContext proceed(String request, FormDataVo formDataVo, FormDataMasterBean formDataMasterBean) throws Exception { + log.info("进入部门停用处理流程"+getNodeId()); + ConfigVo configVo = getMemberMamageConfig(); + SuperNodeContext context = new SuperNodeContext(); + context.setNeedSave(true); + log.info("请求参数"+request); + JSONObject param = JSONObject.parseObject(request); + // 获取部门明细信息 + JSONArray datas = param.getJSONArray("data"); + // 记录新增返回值 + JSONArray requestJson = new JSONArray(); + String mainUrl = configVo.getParamVal(MainorganizationConstants.mainUrl.name()); + String getzsjTokenUrl = configVo.getParamVal(MainorganizationConstants.getzsjTokenUrl.name()); + String restzsjUserName = configVo.getParamVal(MainorganizationConstants.restzsjUserName.name()); + String restzsjPassword = configVo.getParamVal(MainorganizationConstants.restzsjPassword.name()); + String zsjloginName = configVo.getParamVal(MainorganizationConstants.zsjloginName.name()); +// 调用接口查询主数据token + String mainToken = ProtUtil.getToken(getzsjTokenUrl,restzsjUserName,restzsjPassword,zsjloginName); + String maindeptsurl = mainUrl+"/seeyon/rest/orgDepartment/{deptId}/enabled/false?token="+mainToken; + log.info("设置部门停用接口接口路径"+maindeptsurl); + String ret = ""; +// 遍历明细表数据 + data:for (int i = 0 ; i < datas.size() ; i ++) { + JSONObject data = datas.getJSONObject(i); +// 获取需要新增的部门名称 + long deptId = data.getLongValue("deptId"); + V3xOrgDepartment v3xOrgDepartment = orgManager.getDepartmentById(deptId); +// 获取新增部门所在单位的控件名称 + long orgAccountId = data.getLongValue("orgAccountId"); +// 检查当前需要停用部门下是否存在子部门 + List subsetListDptes = orgManager.getChildDepartmentIds(deptId,false); + if(subsetListDptes.size()>0){ +// 当前需要停用部门下存在子部门,不允许停用此部门 + context.setRequest(request); + context.setResponse(v3xOrgDepartment.getName()+"部门下存在子部门,请先处理子部门"); + context.back(v3xOrgDepartment.getName()+"部门下存在子部门,请先处理子部门"); + context.setErrMsg(v3xOrgDepartment.getName()+"部门下存在子部门,请先处理子部门"); + return context; + } +// 检查当前需要停用部门下是否存在人员 + List orgMembersByDept = orgManager.getMembersByDepartment(deptId,false); + if(orgMembersByDept.size()>0){ +// 当前需要停用部门下存在人员,不允许停用此部门 + context.setRequest(request); + context.setResponse(v3xOrgDepartment.getName()+"部门下存在未离职人员,请先处理部门成员"); + context.back(v3xOrgDepartment.getName()+"部门下存在未离职人员,请先处理部门成员"); + context.setErrMsg(v3xOrgDepartment.getName()+"部门下存在未离职人员,请先处理部门成员"); + return context; + } + requestJson.add(v3xOrgDepartment.getName()+deptId); + String enabledFalseUrl = maindeptsurl.replace("{deptId}",deptId+""); +// 需要停用部门下不存在任何启动部门和人员执行停用接口 + String resstr = ProtUtil.httpPutRaw(enabledFalseUrl,"",new HashMap<>(),null); + JSONObject res = JSONObject.parseObject(resstr); + if(res==null){ + ret=ret+v3xOrgDepartment.getName()+"部门停用返回为空;"; + context.back(ret); + context.setErrMsg(ret); + context.setRequest(requestJson.toString()); + context.setResponse(ret); + return context; + }else{ + String success = res.getString("success"); + if("false".equals(success)){ + JSONArray errorMsgInfos = res.getJSONArray("errorMsgInfos"); + JSONObject errorMsgInfo = errorMsgInfos.getJSONObject(0); + String msgInfo = errorMsgInfo.getString("msgInfo"); + ret=ret+v3xOrgDepartment.getName()+msgInfo+";"; + context.back(ret); + context.setErrMsg(ret); + context.setRequest(requestJson.toString()); + context.setResponse(ret); + return context; + }else{ + ret=ret+v3xOrgDepartment.getName()+"部门停用成功;"; + } + } + } + context.success(requestJson.toString()); + context.setRequest(requestJson.toString()); + context.setResponse(ret); + return context; + } + +} diff --git a/src/com/seeyon/apps/src_mainorganization/node/LevelAddNode.java b/src/com/seeyon/apps/src_mainorganization/node/LevelAddNode.java new file mode 100644 index 0000000..e59be9f --- /dev/null +++ b/src/com/seeyon/apps/src_mainorganization/node/LevelAddNode.java @@ -0,0 +1,154 @@ +package com.seeyon.apps.src_mainorganization.node; + +import cn.hutool.log.Log; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.common.config.ICstConfigApi; +import com.seeyon.apps.common.plugin.vo.ConfigVo; +import com.seeyon.apps.common.workflow.constants.WorkFlowType; +import com.seeyon.apps.common.workflow.node.ACommonSuperNode; +import com.seeyon.apps.ext.workflow.vo.FormDataVo; +import com.seeyon.apps.ext.workflow.vo.SuperNodeContext; +import com.seeyon.apps.src_mainorganization.constants.MainorganizationConstants; +import com.seeyon.apps.src_mainorganization.util.ProtUtil; +import com.seeyon.cap4.form.bean.FormDataMasterBean; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.organization.bo.V3xOrgAccount; +import com.seeyon.ctp.organization.bo.V3xOrgLevel; +import com.seeyon.ctp.organization.manager.OrgManager; +import com.seeyon.ctp.util.UUIDLong; + +import javax.inject.Inject; +import java.util.List; + +public class LevelAddNode extends ACommonSuperNode { + + private static Log log = Log.get(LevelAddNode.class); + + protected ICstConfigApi cstConfigApi = (ICstConfigApi) AppContext.getBean("cstConfigApi"); + + @Inject + private OrgManager orgManager; + + @Override + public String getPluginId() { + return MainorganizationConstants.getPluginId(); + } + + @Override + public String getFormParse() { + return "json"; + } + + @Override + public WorkFlowType[] getTypes() { + return new WorkFlowType[] {WorkFlowType.superNode}; + } + + public ConfigVo getMainorganizationConfig() { + return cstConfigApi.getConfig(getPluginId()); + } + + @Override + public String getNodeId() { + return "LevelAddNode"; + } + + @Override + public String getNodeName() { + return "职务级别批量新增超级节点"; + } + +// { +// "data": "jsonArr::明细表1", +// "seeyonFormSon": { +// "明细表1": { +// "name": "职务级别名称", +// "orgAccountId": "所属单位", +// "code": "职务级别代码", +// "sortId": "职务级别序号" +// } +// } +// } + + @Override + public SuperNodeContext proceed(String request, FormDataVo formDataVo, FormDataMasterBean formDataMasterBean) throws Exception { + log.info("进入职务级别批量新增处理流程"+getNodeId()); + ConfigVo configVo = getMainorganizationConfig(); +// 创建返回对象 + SuperNodeContext context = new SuperNodeContext(); + context.setNeedSave(true); + log.info("请求参数"+request); + JSONObject param = JSONObject.parseObject(request); +// 获取职务级别明细信息 + JSONArray datas = param.getJSONArray("data"); +// 记录新增返回值 + JSONArray requestJson = new JSONArray(); + String mainUrl = configVo.getParamVal(MainorganizationConstants.mainUrl.name()); + String getzsjTokenUrl = configVo.getParamVal(MainorganizationConstants.getzsjTokenUrl.name()); + String restzsjUserName = configVo.getParamVal(MainorganizationConstants.restzsjUserName.name()); + String restzsjPassword = configVo.getParamVal(MainorganizationConstants.restzsjPassword.name()); + String zsjloginName = configVo.getParamVal(MainorganizationConstants.zsjloginName.name()); +// 调用接口查询主数据token + String mainToken = ProtUtil.getToken(getzsjTokenUrl,restzsjUserName,restzsjPassword,zsjloginName); + String mainlevelsurl = mainUrl+"/seeyon/rest/orgLevel?token="+mainToken; + log.info("设置职务级别新增接口路径"+mainlevelsurl); + String ret = ""; +// 遍历明细表数据 + data:for (int i = 0 ; i < datas.size() ; i ++) { + JSONObject data = datas.getJSONObject(i); +// 获取需要新增的职务级别名称 + String levelName = data.getString("levelName"); +// 获取新增职务级别所在单位的控件名称 + long orgAccountId = data.getLongValue("orgAccountId"); +// 获取需要新增职务级别编码 + long levelCode = data.getLongValue("code"); +// 获取需要新增职务级别序号 + long levelSortId = data.getLongValue("sortId"); + V3xOrgAccount v3xOrgAccount = orgManager.getAccountById(orgAccountId); + List allLevels = orgManager.getAllLevels(orgAccountId); +// 遍历现存同名职务级别信息 + old:for(V3xOrgLevel level:allLevels){ + if(level.getName().equals(levelName)){ + ret = ret +levelName + "职务级别已经存在,跳过处理;"; + break data; + } + } +// 封装职务级别新增参数,新增职务级别信息 + JSONObject leveljson = new JSONObject(); + leveljson.put("name",levelName); + leveljson.put("description",""); + leveljson.put("orgAccountId",orgAccountId); + leveljson.put("enabled",true); + leveljson.put("id", UUIDLong.longUUID()); + leveljson.put("code",levelCode); + leveljson.put("sortId",levelSortId); + requestJson.add(leveljson); + JSONObject res = ProtUtil.doPost(leveljson.toString(),mainlevelsurl); + if(res==null){ + ret=ret+levelName+"职务级别添加返回为空;"; + }else{ + String success = res.getString("success"); + if("false".equals(success)){ + JSONArray errorMsgInfos = res.getJSONArray("errorMsgInfos"); + JSONObject errorMsgInfo = errorMsgInfos.getJSONObject(0); + String msgInfo = errorMsgInfo.getString("msgInfo"); + ret=ret+levelName+msgInfo+";"; + context.back(ret); + context.setErrMsg(ret); + context.setRequest(requestJson.toString()); + context.setResponse(ret); + return context; + }else{ + ret=ret+levelName+"添加成功;"; + } + } + } + context.success(requestJson.toString()); + context.setRequest(requestJson.toString()); + context.setResponse(ret); + return context; + } + + +} diff --git a/src/com/seeyon/apps/src_mainorganization/node/LevelCloseNode.java b/src/com/seeyon/apps/src_mainorganization/node/LevelCloseNode.java new file mode 100644 index 0000000..b1b8ff1 --- /dev/null +++ b/src/com/seeyon/apps/src_mainorganization/node/LevelCloseNode.java @@ -0,0 +1,136 @@ +package com.seeyon.apps.src_mainorganization.node; + +import cn.hutool.log.Log; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.common.config.ICstConfigApi; +import com.seeyon.apps.common.plugin.vo.ConfigVo; +import com.seeyon.apps.common.workflow.constants.WorkFlowType; +import com.seeyon.apps.common.workflow.node.ACommonSuperNode; +import com.seeyon.apps.ext.workflow.vo.FormDataVo; +import com.seeyon.apps.ext.workflow.vo.SuperNodeContext; +import com.seeyon.apps.src_mainorganization.constants.MainorganizationConstants; +import com.seeyon.apps.src_mainorganization.util.ProtUtil; +import com.seeyon.apps.src_membermanage.MemberManageCommonNode; +import com.seeyon.cap4.form.bean.FormDataMasterBean; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.organization.bo.V3xOrgLevel; +import com.seeyon.ctp.organization.manager.OrgManager; + +import javax.inject.Inject; +import java.util.HashMap; + +public class LevelCloseNode extends ACommonSuperNode { + + private static Log log = Log.get(MemberManageCommonNode.class); + + protected ICstConfigApi cstConfigApi = (ICstConfigApi) AppContext.getBean("cstConfigApi"); + + @Inject + private OrgManager orgManager; + + @Override + public String getPluginId() { + return MainorganizationConstants.getPluginId(); + } + + @Override + public String getFormParse() { + return "json"; + } + + @Override + public WorkFlowType[] getTypes() { + return new WorkFlowType[] {WorkFlowType.superNode}; + } + + public ConfigVo getMemberMamageConfig() { + return cstConfigApi.getConfig(getPluginId()); + } + + @Override + public String getNodeId() { + return "LevelCloseNode"; + } + + @Override + public String getNodeName() { + return "职务级别批量停用超级节点"; + } + +// { +// "data": "jsonArr::明细表1", +// "seeyonFormSon": { +// "明细表1": { +// "levelId": "职务级别名称", +// "orgAccountId": "所属单位" +// } +// } +// } + + @Override + public SuperNodeContext proceed(String request, FormDataVo formDataVo, FormDataMasterBean formDataMasterBean) throws Exception { + log.info("进入职务级别新增处理流程"+getNodeId()); + ConfigVo configVo = getMemberMamageConfig(); + SuperNodeContext context = new SuperNodeContext(); + context.setNeedSave(true); + log.info("请求参数"+request); + JSONObject param = JSONObject.parseObject(request); + // 获取职务级别明细信息 + JSONArray datas = param.getJSONArray("data"); + // 记录新增返回值 + JSONArray requestJson = new JSONArray(); + String mainUrl = configVo.getParamVal(MainorganizationConstants.mainUrl.name()); + String getzsjTokenUrl = configVo.getParamVal(MainorganizationConstants.getzsjTokenUrl.name()); + String restzsjUserName = configVo.getParamVal(MainorganizationConstants.restzsjUserName.name()); + String restzsjPassword = configVo.getParamVal(MainorganizationConstants.restzsjPassword.name()); + String zsjloginName = configVo.getParamVal(MainorganizationConstants.zsjloginName.name()); +// 调用接口查询主数据token + String mainToken = ProtUtil.getToken(getzsjTokenUrl,restzsjUserName,restzsjPassword,zsjloginName); + String mainlevelsurl = mainUrl+"/seeyon/rest/orgLevel/{levelId}/enabled/false?token="+mainToken; + log.info("设置职务级别停用接口接口路径"+mainlevelsurl); + String ret = ""; +// 遍历明细表数据 + data:for (int i = 0 ; i < datas.size() ; i ++) { + JSONObject data = datas.getJSONObject(i); +// 获取需要新增的职务级别名称 + long levelId = data.getLongValue("levelId"); + V3xOrgLevel v3xOrgLevel = orgManager.getLevelById(levelId); +// 获取新增部门所在单位的控件名称 + long orgAccountId = data.getLongValue("orgAccountId"); + requestJson.add(v3xOrgLevel.getName()+levelId); + String enabledFalseUrl = mainlevelsurl.replace("{levelId}",levelId+""); +// 需要停用部门下不存在任何启动部门和人员执行停用接口 + String resstr = ProtUtil.httpPutRaw(enabledFalseUrl,"",new HashMap<>(),null); + JSONObject res = JSONObject.parseObject(resstr); + if(res==null){ + ret=ret+v3xOrgLevel.getName()+"部门停用返回为空;"; + context.back(ret); + context.setErrMsg(ret); + context.setRequest(requestJson.toString()); + context.setResponse(ret); + return context; + }else{ + String success = res.getString("success"); + if("false".equals(success)){ + JSONArray errorMsgInfos = res.getJSONArray("errorMsgInfos"); + JSONObject errorMsgInfo = errorMsgInfos.getJSONObject(0); + String msgInfo = errorMsgInfo.getString("msgInfo"); + ret=ret+v3xOrgLevel.getName()+msgInfo+";"; + context.back(ret); + context.setErrMsg(ret); + context.setRequest(requestJson.toString()); + context.setResponse(ret); + return context; + }else{ + ret=ret+v3xOrgLevel.getName()+"部门停用成功;"; + } + } + } + context.success(requestJson.toString()); + context.setRequest(requestJson.toString()); + context.setResponse(ret); + return context; + } + +} diff --git a/src/com/seeyon/apps/src_mainorganization/node/PostAddNode.java b/src/com/seeyon/apps/src_mainorganization/node/PostAddNode.java new file mode 100644 index 0000000..3c18624 --- /dev/null +++ b/src/com/seeyon/apps/src_mainorganization/node/PostAddNode.java @@ -0,0 +1,147 @@ +package com.seeyon.apps.src_mainorganization.node; + +import cn.hutool.log.Log; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.common.config.ICstConfigApi; +import com.seeyon.apps.common.plugin.vo.ConfigVo; +import com.seeyon.apps.common.workflow.constants.WorkFlowType; +import com.seeyon.apps.common.workflow.node.ACommonSuperNode; +import com.seeyon.apps.ext.workflow.vo.FormDataVo; +import com.seeyon.apps.ext.workflow.vo.SuperNodeContext; +import com.seeyon.apps.src_mainorganization.constants.MainorganizationConstants; +import com.seeyon.apps.src_mainorganization.util.ProtUtil; +import com.seeyon.cap4.form.bean.FormDataMasterBean; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.organization.bo.V3xOrgAccount; +import com.seeyon.ctp.organization.bo.V3xOrgPost; +import com.seeyon.ctp.organization.manager.OrgManager; +import com.seeyon.ctp.util.UUIDLong; + +import javax.inject.Inject; +import java.util.List; + +/** + * 岗位批量新增超级节点 + */ +public class PostAddNode extends ACommonSuperNode { + + private static Log log = Log.get(PostAddNode.class); + + protected ICstConfigApi cstConfigApi = (ICstConfigApi) AppContext.getBean("cstConfigApi"); + + @Inject + private OrgManager orgManager; + + @Override + public String getPluginId() {return MainorganizationConstants.getPluginId();} + + @Override + public String getFormParse() {return "json";} + + @Override + public WorkFlowType[] getTypes() {return new WorkFlowType[] {WorkFlowType.superNode};} + + public ConfigVo getMainorganizationConfig() {return cstConfigApi.getConfig(getPluginId());} + + @Override + public String getNodeId() { return "PostAddNode";} + + @Override + public String getNodeName() {return "岗位批量新增超级节点";} + +// { +// "data": "jsonArr::明细表1", +// "seeyonFormSon": { +// "明细表1": { +// "name": "岗位名称", +// "orgAccountId": "所属单位", +// "code": "岗位代码", +// "typeId": "岗位类别" +// } +// } +// } + + @Override + public SuperNodeContext proceed(String request, FormDataVo formDataVo, FormDataMasterBean formDataMasterBean) throws Exception { + log.info("进入岗位批量新增处理流程"+getNodeId()); + ConfigVo configVo = getMainorganizationConfig(); +// 创建返回对象 + SuperNodeContext context = new SuperNodeContext(); + context.setNeedSave(true); + log.info("请求参数"+request); + JSONObject param = JSONObject.parseObject(request); +// 获取岗位明细信息 + JSONArray datas = param.getJSONArray("data"); +// 记录新增返回值 + JSONArray requestJson = new JSONArray(); + String mainUrl = configVo.getParamVal(MainorganizationConstants.mainUrl.name()); + String getzsjTokenUrl = configVo.getParamVal(MainorganizationConstants.getzsjTokenUrl.name()); + String restzsjUserName = configVo.getParamVal(MainorganizationConstants.restzsjUserName.name()); + String restzsjPassword = configVo.getParamVal(MainorganizationConstants.restzsjPassword.name()); + String zsjloginName = configVo.getParamVal(MainorganizationConstants.zsjloginName.name()); +// 调用接口查询主数据token + String mainToken = ProtUtil.getToken(getzsjTokenUrl,restzsjUserName,restzsjPassword,zsjloginName); + String mainpostsurl = mainUrl+"/seeyon/rest/orgPost?token="+mainToken; + log.info("设置岗位新增接口路径"+mainpostsurl); + String ret = ""; +// 遍历明细表数据 + data:for (int i = 0 ; i < datas.size() ; i ++) { + JSONObject data = datas.getJSONObject(i); +// 获取需要新增的岗位名称 + String postName = data.getString("name"); +// 获取新增岗位所在单位的控件名称 + long orgAccountId = data.getLongValue("orgAccountId"); +// 获取需要新增的岗位代码 + String postCode = data.getString("code"); +// 获取需要新增的岗位类型,默认为1 + String postTypeId = data.getString("typeId"); + + V3xOrgAccount v3xOrgAccount = orgManager.getAccountById(orgAccountId); +// 根据岗位名称查询岗位名称和单位ID,查询岗位信息 + List allPosts = orgManager.getAllPosts(orgAccountId); +// 遍历现存同名岗位信息 + old:for(V3xOrgPost post:allPosts){ + if(post.getName().equals(postName)){ + ret = ret +postName + "岗位已经存在,跳过处理;"; + break data; + } + } +// 封装岗位新增参数,新增岗位信息 + JSONObject postjson = new JSONObject(); + postjson.put("name",postName); + postjson.put("code",postCode); + postjson.put("typeId",postTypeId); + postjson.put("description",""); + postjson.put("enabled",true); + postjson.put("id", UUIDLong.longUUID()); + postjson.put("orgAccountId",orgAccountId); + requestJson.add(postjson); + JSONObject res = ProtUtil.doPost(postjson.toString(),mainpostsurl); + if(res==null){ + ret=ret+postName+"岗位添加返回为空;"; + }else{ + String success = res.getString("success"); + if("false".equals(success)){ + JSONArray errorMsgInfos = res.getJSONArray("errorMsgInfos"); + JSONObject errorMsgInfo = errorMsgInfos.getJSONObject(0); + String msgInfo = errorMsgInfo.getString("msgInfo"); + ret=ret+postName+msgInfo+";"; + context.back(ret); + context.setErrMsg(ret); + context.setRequest(requestJson.toString()); + context.setResponse(ret); + return context; + }else{ + ret=ret+postName+"添加成功;"; + } + } + } + context.success(requestJson.toString()); + context.setRequest(requestJson.toString()); + context.setResponse(ret); + return context; + } + + +} diff --git a/src/com/seeyon/apps/src_mainorganization/node/PostCloseNode.java b/src/com/seeyon/apps/src_mainorganization/node/PostCloseNode.java new file mode 100644 index 0000000..82b6a5f --- /dev/null +++ b/src/com/seeyon/apps/src_mainorganization/node/PostCloseNode.java @@ -0,0 +1,136 @@ +package com.seeyon.apps.src_mainorganization.node; + +import cn.hutool.log.Log; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.common.config.ICstConfigApi; +import com.seeyon.apps.common.plugin.vo.ConfigVo; +import com.seeyon.apps.common.workflow.constants.WorkFlowType; +import com.seeyon.apps.common.workflow.node.ACommonSuperNode; +import com.seeyon.apps.ext.workflow.vo.FormDataVo; +import com.seeyon.apps.ext.workflow.vo.SuperNodeContext; +import com.seeyon.apps.src_mainorganization.constants.MainorganizationConstants; +import com.seeyon.apps.src_mainorganization.util.ProtUtil; +import com.seeyon.apps.src_membermanage.MemberManageCommonNode; +import com.seeyon.cap4.form.bean.FormDataMasterBean; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.organization.bo.V3xOrgPost; +import com.seeyon.ctp.organization.manager.OrgManager; + +import javax.inject.Inject; +import java.util.HashMap; + +public class PostCloseNode extends ACommonSuperNode { + + private static Log log = Log.get(MemberManageCommonNode.class); + + protected ICstConfigApi cstConfigApi = (ICstConfigApi) AppContext.getBean("cstConfigApi"); + + @Inject + private OrgManager orgManager; + + @Override + public String getPluginId() { + return MainorganizationConstants.getPluginId(); + } + + @Override + public String getFormParse() { + return "json"; + } + + @Override + public WorkFlowType[] getTypes() { + return new WorkFlowType[] {WorkFlowType.superNode}; + } + + public ConfigVo getMemberMamageConfig() { + return cstConfigApi.getConfig(getPluginId()); + } + + @Override + public String getNodeId() { + return "PostCloseNode"; + } + + @Override + public String getNodeName() { + return "岗位批量停用超级节点"; + } + +// { +// "data": "jsonArr::明细表1", +// "seeyonFormSon": { +// "明细表1": { +// "postId": "岗位名称", +// "orgAccountId": "所属单位" +// } +// } +// } + + @Override + public SuperNodeContext proceed(String request, FormDataVo formDataVo, FormDataMasterBean formDataMasterBean) throws Exception { + log.info("进入岗位批量停用处理流程"+getNodeId()); + ConfigVo configVo = getMemberMamageConfig(); + SuperNodeContext context = new SuperNodeContext(); + context.setNeedSave(true); + log.info("岗位批量停用请求参数"+request); + JSONObject param = JSONObject.parseObject(request); + // 获取岗位明细信息 + JSONArray datas = param.getJSONArray("data"); + // 记录停用返回值 + JSONArray requestJson = new JSONArray(); + String mainUrl = configVo.getParamVal(MainorganizationConstants.mainUrl.name()); + String getzsjTokenUrl = configVo.getParamVal(MainorganizationConstants.getzsjTokenUrl.name()); + String restzsjUserName = configVo.getParamVal(MainorganizationConstants.restzsjUserName.name()); + String restzsjPassword = configVo.getParamVal(MainorganizationConstants.restzsjPassword.name()); + String zsjloginName = configVo.getParamVal(MainorganizationConstants.zsjloginName.name()); +// 调用接口查询主数据token + String mainToken = ProtUtil.getToken(getzsjTokenUrl,restzsjUserName,restzsjPassword,zsjloginName); + String mainpostsurl = mainUrl+"/seeyon/rest/orgPost/{postId}/enabled/false?token="+mainToken; + log.info("设置岗位接口接口路径"+mainpostsurl); + String ret = ""; +// 遍历明细表数据 + data:for (int i = 0 ; i < datas.size() ; i ++) { + JSONObject data = datas.getJSONObject(i); +// 获取需要停用的岗位名称 + long postId = data.getLongValue("postId"); + V3xOrgPost v3xOrgPost = orgManager.getPostById(postId); +// 获取新增岗位所在单位的控件名称 + long orgAccountId = data.getLongValue("orgAccountId"); + requestJson.add(v3xOrgPost.getName()+postId); + String enabledFalseUrl = mainpostsurl.replace("{postId}",postId+""); +// 需要停用岗位下不存在任何启动岗位和人员执行停用接口 + String resstr = ProtUtil.httpPutRaw(enabledFalseUrl,"",new HashMap<>(),null); + JSONObject res = JSONObject.parseObject(resstr); + if(res==null){ + ret=ret+v3xOrgPost.getName()+"岗位停用返回为空;"; + context.back(ret); + context.setErrMsg(ret); + context.setRequest(requestJson.toString()); + context.setResponse(ret); + return context; + }else{ + String success = res.getString("success"); + if("false".equals(success)){ + JSONArray errorMsgInfos = res.getJSONArray("errorMsgInfos"); + JSONObject errorMsgInfo = errorMsgInfos.getJSONObject(0); + String msgInfo = errorMsgInfo.getString("msgInfo"); + ret=ret+v3xOrgPost.getName()+msgInfo+";"; + context.back(ret); + context.setErrMsg(ret); + context.setRequest(requestJson.toString()); + context.setResponse(ret); + return context; + }else{ + ret=ret+v3xOrgPost.getName()+"岗位停用成功;"; + } + } + } + context.success(requestJson.toString()); + context.setRequest(requestJson.toString()); + context.setResponse(ret); + return context; + } + +} diff --git a/src/com/seeyon/apps/src_mainorganization/service/IReceiveOrgMemberService.java b/src/com/seeyon/apps/src_mainorganization/service/IReceiveOrgMemberService.java new file mode 100644 index 0000000..5dd9830 --- /dev/null +++ b/src/com/seeyon/apps/src_mainorganization/service/IReceiveOrgMemberService.java @@ -0,0 +1,27 @@ +package com.seeyon.apps.src_mainorganization.service; + +import com.alibaba.fastjson.JSONObject; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.seeyon.apps.src_mainorganization.bo.ReceiveOrgMemberResponse; +import com.seeyon.ctp.common.exceptions.BusinessException; + +import java.text.ParseException; + +public interface IReceiveOrgMemberService { + + /** + * 调用接口保存人员到组织架构平台 + * @param memberParam + * @return + */ + public ReceiveOrgMemberResponse saveMemberMain(JSONObject memberParam) throws BusinessException, ParseException, JsonProcessingException; + + /** + * 调用接口更新人员到组织架构平台 + * @param memberParam + * @return + */ + public ReceiveOrgMemberResponse updateMemberMain(JSONObject memberParam) throws BusinessException, ParseException, JsonProcessingException; + + +} diff --git a/src/com/seeyon/apps/src_mainorganization/service/impl/ReceiveOrgMemberServiceImpl.java b/src/com/seeyon/apps/src_mainorganization/service/impl/ReceiveOrgMemberServiceImpl.java new file mode 100644 index 0000000..a662c80 --- /dev/null +++ b/src/com/seeyon/apps/src_mainorganization/service/impl/ReceiveOrgMemberServiceImpl.java @@ -0,0 +1,620 @@ +package com.seeyon.apps.src_mainorganization.service.impl; + +import cn.hutool.log.Log; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.seeyon.apps.addressbook.manager.AddressBookCustomerFieldInfoManager; +import com.seeyon.apps.addressbook.po.AddressBook; +import com.seeyon.apps.src_mainorganization.bo.ReceiveOrgMemberResponse; +import com.seeyon.apps.src_mainorganization.dao.ISrcEnumDao; +import com.seeyon.apps.src_mainorganization.dao.ISrcMemberDao; +import com.seeyon.apps.src_mainorganization.service.IReceiveOrgMemberService; +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.ctp.organization.OrgConstants; +import com.seeyon.ctp.organization.bo.*; +import com.seeyon.ctp.organization.manager.OrgManager; +import com.seeyon.ctp.organization.manager.OrgManagerDirect; +import www.seeyon.com.utils.StringUtil; + +import javax.inject.Inject; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; +import java.util.*; + +public class ReceiveOrgMemberServiceImpl implements IReceiveOrgMemberService { + + private static Log log = Log.get(ReceiveOrgMemberServiceImpl.class); + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + + @Inject + private AddressBookCustomerFieldInfoManager addressBookCustomerFieldInfoManager; + @Inject + private ISrcEnumDao srcEnumDao; + @Inject + private ISrcMemberDao srcMemberDao; + @Inject + private OrgManagerDirect orgManagerDirect; + @Inject + private OrgManager orgManager; + + @Override + public ReceiveOrgMemberResponse saveMemberMain(JSONObject memberParam) throws BusinessException, ParseException, JsonProcessingException { + V3xOrgMember member = new V3xOrgMember(); +// 创建人员ID + if(StringUtil.isNotEmpty(memberParam.getString("id"))){ + member.setId(memberParam.getLong("id")); + }else{ + member.setIdIfNew(); + } + member.setName(memberParam.getString("name")); + member.setCode(memberParam.getString("code")); + member.setTelNumber(memberParam.getString("telNumber")); + String birthday = memberParam.getString("birthday"); + if(StringUtil.isNotEmpty(birthday)){ + member.setProperty("birthday",sdf.parse(birthday)); + } + String hiredate = memberParam.getString("hiredate"); + if(StringUtil.isNotEmpty(hiredate)){ + member.setProperty("hiredate",sdf.parse(hiredate)); + } + String gender = memberParam.getString("gender"); + member.setProperty("gender",gender); + + V3xOrgPrincipal v3xOrgPrincipal = new V3xOrgPrincipal(); + v3xOrgPrincipal.setLoginName(memberParam.getString("loginName")); + v3xOrgPrincipal.setMemberId(member.getId()); + v3xOrgPrincipal.setPassword("123456"); + member.setV3xOrgPrincipal(v3xOrgPrincipal); + + member.setOrgLevelId(memberParam.getLongValue("orgLevelId")); + member.setOrgDepartmentId(memberParam.getLongValue("orgDepartmentId")); + member.setOrgPostId(memberParam.getLongValue("orgPostId")); + member.setOrgAccountId(memberParam.getLongValue("orgAccountId")); + // 排序号 +// member.setSortId(1L); +// 查询当前环境最大排序号 + String sortId = memberParam.getString("sortId"); + if(StringUtil.isNotEmpty(sortId)){ + member.setSortId(Long.parseLong(sortId)); + }else{ + String maxSortId = srcMemberDao.getMemberMaxSortId(); + if(StringUtil.isNotEmpty(maxSortId)){ + member.setSortId(Long.parseLong(maxSortId)+1); + }else{ + member.setSortId(-1l); + } + } + System.out.println("当前人员执行过程中的排序号为"+member.getSortId()); + AddressBook addressBook = new AddressBook(); + addressBook = setAddressBooks(addressBook,memberParam); + addressBook.setMemberId(member.getId()); + addressBook.setIdIfNew(); + addressBookCustomerFieldInfoManager.addAddressBook(addressBook); + OrganizationMessage mes = orgManagerDirect.addMember(member); + + JSONObject jsonObject = new JSONObject(); + if(mes.isSuccess()) { + List successMsgs = mes.getSuccessMsgs(); + OrganizationMessage.OrgMessage successMsg =successMsgs.get(0); + V3xOrgEntity v3xOrgEntity = successMsg.getEnt(); + // 创建ObjectMapper实例 + ObjectMapper objectMapper = new ObjectMapper(); + // 将对象转换为JSON字符串 + String json = objectMapper.writeValueAsString(v3xOrgEntity); + long memberId = v3xOrgEntity.getId(); + log.info("人员添加成功"+v3xOrgEntity.getName()+":"+v3xOrgEntity.getId()); + jsonObject.put("status","1"); + jsonObject.put("msg","创建成功:"+memberId); + jsonObject.put("data",json); + + }else { + log.info("人员添加失败"+mes.getErrorMsgInfos().get(0).getMsgInfo()); + jsonObject.put("status","2"); + jsonObject.put("msg","添加失败"+mes.getErrorMsgInfos().get(0).getMsgInfo()); + jsonObject.put("data",""); + } + ReceiveOrgMemberResponse receiveOrgMemberResponse = new ReceiveOrgMemberResponse(jsonObject); + return receiveOrgMemberResponse; + } + + + @Override + public ReceiveOrgMemberResponse updateMemberMain(JSONObject memberParam) throws BusinessException, ParseException, JsonProcessingException { + String memberId = memberParam.getString("id"); + +// 根据ID查询人员信息 + V3xOrgMember member = orgManager.getMemberById(Long.parseLong(memberId)); +// 判断是否修改名称 + if(StringUtil.isNotEmpty(memberParam.getString("name"))){ + member.setName(memberParam.getString("name")); + } +// 判断是否修改编号 + if(StringUtil.isNotEmpty(memberParam.getString("code"))){ + member.setCode(memberParam.getString("code")); + } +// 判断是否修改手机号 + if(StringUtil.isNotEmpty(memberParam.getString("telNumber"))){ + member.setTelNumber(memberParam.getString("telNumber")); + } +// 判断是否修改生日 + String birthday = memberParam.getString("birthday"); + if(StringUtil.isNotEmpty(birthday)){ + member.setProperty("birthday",sdf.parse(birthday)); + } +// 判断是否修改性别 + if(StringUtil.isNotEmpty(memberParam.getString("gender"))){ + member.setProperty("gender",memberParam.getString("gender")); + } +// 判断是否修改账号 + if(StringUtil.isNotEmpty(memberParam.getString("loginName"))){ + V3xOrgPrincipal v3xOrgPrincipal = new V3xOrgPrincipal(); + v3xOrgPrincipal.setLoginName(memberParam.getString("loginName")); + v3xOrgPrincipal.setMemberId(member.getId()); + v3xOrgPrincipal.setPassword("dhx123456"); + member.setV3xOrgPrincipal(v3xOrgPrincipal); + } +// 判断组织架构信息是否修改 + if(memberParam.getLongValue("orgLevelId")!=0){ + member.setOrgLevelId(memberParam.getLongValue("orgLevelId")); + } + if(memberParam.getLongValue("orgDepartmentId")!=0){ + member.setOrgDepartmentId(memberParam.getLongValue("orgDepartmentId")); + } + if(memberParam.getLongValue("orgPostId")!=0){ + member.setOrgPostId(memberParam.getLongValue("orgPostId")); + } + if(memberParam.getLongValue("orgAccountId")!=0){ + member.setOrgAccountId(memberParam.getLongValue("orgAccountId")); + } +// 判断是否修改人员状态 + if(StringUtil.isNotEmpty(memberParam.getString("state"))){ + member.setState(memberParam.getInteger("state")); + } +// 判断是否修改启用状态 + if(StringUtil.isNotEmpty(memberParam.getString("enabled"))){ + member.setEnabled(memberParam.getBooleanValue("enabled")); + } +// 判断是否修改删除状态 + if(StringUtil.isNotEmpty(memberParam.getString("isDeleted"))){ + member.setIsDeleted(memberParam.getBooleanValue("isDeleted")); + } +// 判断是否修改类型 + if(StringUtil.isNotEmpty(memberParam.getString("type"))){ + member.setType(memberParam.getInteger("type")); + } +// 判断是否同步副岗 + JSONArray secondPosts = memberParam.getJSONArray("second_post"); + if(secondPosts!=null){ + if(secondPosts.size()>0){ + List memberPosts = new ArrayList(); + for(int i = 0 ; i < secondPosts.size(); i++){ + JSONObject secondPost = secondPosts.getJSONObject(i); + MemberPost memberPost = new MemberPost(); + memberPost.setPostId(secondPost.getLongValue("postId")); + memberPost.setOrgAccountId(secondPost.getLongValue("orgAccountId")); + memberPost.setDepId(secondPost.getLongValue("deptId")); + memberPost.setMemberId(secondPost.getLongValue("memberId")); + memberPost.setType(OrgConstants.MemberPostType.Second); + memberPosts.add(memberPost); + } + member.setSecond_post(memberPosts); + } + } + + // 排序号 +// member.setSortId(1L); + String sortId = memberParam.getString("sortId"); + if(StringUtil.isNotEmpty(sortId)){ + member.setSortId(Long.parseLong(sortId)); + } + Set keys = memberParam.keySet(); + boolean hasUserKey = false; + for(String key : keys){ + if(key.contains("EXT_ATTR")){ + hasUserKey = true; + break; + } + } + if(hasUserKey){ + AddressBook addressBook = addressBookCustomerFieldInfoManager.getByMemberId(Long.parseLong(memberId)); + addressBook = setAddressBooks(addressBook,memberParam); + addressBookCustomerFieldInfoManager.updateAddressBook(addressBook); + } + OrganizationMessage mes = orgManagerDirect.updateMember(member); + JSONObject jsonObject = new JSONObject(); + if(mes.isSuccess()) { + List successMsgs = mes.getSuccessMsgs(); + OrganizationMessage.OrgMessage successMsg =successMsgs.get(0); + V3xOrgEntity v3xOrgEntity = successMsg.getEnt(); + log.info("人员修改成功"+v3xOrgEntity.getName()+":"+v3xOrgEntity.getId()); + jsonObject.put("status","1"); + jsonObject.put("msg","修改成功:"+memberId); + // 创建ObjectMapper实例 + ObjectMapper objectMapper = new ObjectMapper(); + // 将对象转换为JSON字符串 + String json = objectMapper.writeValueAsString(v3xOrgEntity); + jsonObject.put("data",json); + }else { + log.info("人员修改失败"+mes.getErrorMsgInfos().get(0).getMsgInfo()); + jsonObject.put("status","2"); + jsonObject.put("msg","修改失败:"+mes.getErrorMsgInfos().get(0).getMsgInfo()); + jsonObject.put("data",""); + } + ReceiveOrgMemberResponse receiveOrgMemberResponse = new ReceiveOrgMemberResponse(jsonObject); + return receiveOrgMemberResponse; + } + + private AddressBook setAddressBooks(AddressBook addressBook, JSONObject memberParam) throws ParseException { + for (Map.Entry entry : memberParam.entrySet()) { + switch (entry.getKey()){ + case "EXT_ATTR_1":{ + if(entry.getValue()!=null){ + addressBook.setExtAttr1(entry.getValue().toString()); + } + break; + }case "EXT_ATTR_2":{ + if(entry.getValue()!=null){ + addressBook.setExtAttr2(entry.getValue().toString()); + } + break; + }case "EXT_ATTR_3":{ + if(entry.getValue()!=null){ + addressBook.setExtAttr3(entry.getValue().toString()); + } + break; + }case "EXT_ATTR_4":{ + if(entry.getValue()!=null){ + addressBook.setExtAttr4(entry.getValue().toString()); + } + break; + }case "EXT_ATTR_5":{ + if(entry.getValue()!=null){ + addressBook.setExtAttr5(entry.getValue().toString()); + } + break; + }case "EXT_ATTR_6":{ + if(entry.getValue()!=null){ + addressBook.setExtAttr6(entry.getValue().toString()); + } + break; + }case "EXT_ATTR_7":{ + if(entry.getValue()!=null){ + addressBook.setExtAttr7(entry.getValue().toString()); + } + break; + }case "EXT_ATTR_8":{ + if(entry.getValue()!=null){ + addressBook.setExtAttr8(entry.getValue().toString()); + } + break; + }case "EXT_ATTR_9":{ + if(entry.getValue()!=null){ + addressBook.setExtAttr9(entry.getValue().toString()); + } + }case "EXT_ATTR_10":{ + if(entry.getValue()!=null){ + addressBook.setExtAttr10(entry.getValue().toString()); + } + break; + }case "EXT_ATTR_11":{ + if( entry.getValue() instanceof Double){ + addressBook.setExtAttr11(Double.parseDouble(entry.getValue().toString())); + } + break; + }case "EXT_ATTR_12":{ + if( entry.getValue() instanceof Double){ + addressBook.setExtAttr12(Double.parseDouble(entry.getValue().toString())); + } + break; + }case "EXT_ATTR_13":{ + if( entry.getValue() instanceof Double){ + addressBook.setExtAttr13(Double.parseDouble(entry.getValue().toString())); + } + }case "EXT_ATTR_14":{ + if( entry.getValue() instanceof Double){ + addressBook.setExtAttr14(Double.parseDouble(entry.getValue().toString())); + } + break; + }case "EXT_ATTR_15":{ + if( entry.getValue() instanceof Double){ + addressBook.setExtAttr15(Double.parseDouble(entry.getValue().toString())); + } + break; + }case "EXT_ATTR_16":{ + if( entry.getValue() instanceof Double){ + addressBook.setExtAttr16(Double.parseDouble(entry.getValue().toString())); + } + break; + }case "EXT_ATTR_17":{ + if( entry.getValue() instanceof Double){ + addressBook.setExtAttr17(Double.parseDouble(entry.getValue().toString())); + } + break; + }case "EXT_ATTR_18":{ + if( entry.getValue() instanceof Double){ + addressBook.setExtAttr18(Double.parseDouble(entry.getValue().toString())); + } + break; + }case "EXT_ATTR_19":{ + if( entry.getValue() instanceof Double){ + addressBook.setExtAttr19(Double.parseDouble(entry.getValue().toString())); + } + break; + }case "EXT_ATTR_20":{ + if( entry.getValue() instanceof Double){ + addressBook.setExtAttr20(Double.parseDouble(entry.getValue().toString())); + } + break; + }case "EXT_ATTR_21":{ + if(entry.getValue()!=null){ + if(isValidDate(entry.getValue().toString())){ + addressBook.setExtAttr21(sdf.parse(entry.getValue().toString())); + } + } + break; + }case "EXT_ATTR_22":{ + if(entry.getValue()!=null){ + if(isValidDate(entry.getValue().toString())){ + addressBook.setExtAttr22(sdf.parse(entry.getValue().toString())); + } + } + break; + }case "EXT_ATTR_23":{ + if(entry.getValue()!=null){ + if(isValidDate(entry.getValue().toString())){ + addressBook.setExtAttr23(sdf.parse(entry.getValue().toString())); + } + } + break; + }case "EXT_ATTR_24":{ + if(entry.getValue()!=null){ + if(isValidDate(entry.getValue().toString())){ + addressBook.setExtAttr24(sdf.parse(entry.getValue().toString())); + } + } + break; + }case "EXT_ATTR_25":{ + if(entry.getValue()!=null){ + if(isValidDate(entry.getValue().toString())){ + addressBook.setExtAttr25(sdf.parse(entry.getValue().toString())); + } + } + break; + }case "EXT_ATTR_26":{ + if(entry.getValue()!=null){ + if(isValidDate(entry.getValue().toString())){ + addressBook.setExtAttr26(sdf.parse(entry.getValue().toString())); + } + } + break; + }case "EXT_ATTR_27":{ + if(entry.getValue()!=null){ + if(isValidDate(entry.getValue().toString())){ + addressBook.setExtAttr27(sdf.parse(entry.getValue().toString())); + } + } + break; + }case "EXT_ATTR_28":{ + if(entry.getValue()!=null){ + if(isValidDate(entry.getValue().toString())){ + addressBook.setExtAttr28(sdf.parse(entry.getValue().toString())); + } + } + break; + }case "EXT_ATTR_29":{ + if(entry.getValue()!=null){ + if(isValidDate(entry.getValue().toString())){ + addressBook.setExtAttr29(sdf.parse(entry.getValue().toString())); + } + } + break; + }case "EXT_ATTR_30":{ + if(entry.getValue()!=null){ + if(isValidDate(entry.getValue().toString())){ + addressBook.setExtAttr30(sdf.parse(entry.getValue().toString())); + } + } + break; + }case "EXT_ATTR_31":{ + if(entry.getValue()!=null){ + String enumId = srcEnumDao.getEnumByExtAttr("EXT_ATTR_31"); + String enumItemId = srcEnumDao.getEnumItemByRefEnumIdValue(enumId,entry.getValue().toString()); + addressBook.setExtAttr31(enumItemId); + } + break; + }case "EXT_ATTR_32":{ + if(entry.getValue()!=null){ + String enumId = srcEnumDao.getEnumByExtAttr("EXT_ATTR_32"); + String enumItemId = srcEnumDao.getEnumItemByRefEnumIdValue(enumId,entry.getValue().toString()); + addressBook.setExtAttr32(enumItemId); + } + break; + }case "EXT_ATTR_33":{ + if(entry.getValue()!=null){ + String enumId = srcEnumDao.getEnumByExtAttr("EXT_ATTR_33"); + String enumItemId = srcEnumDao.getEnumItemByRefEnumIdValue(enumId,entry.getValue().toString()); + addressBook.setExtAttr33(enumItemId); + } + break; + }case "EXT_ATTR_34":{ + if(entry.getValue()!=null){ + String enumId = srcEnumDao.getEnumByExtAttr("EXT_ATTR_34"); + String enumItemId = srcEnumDao.getEnumItemByRefEnumIdValue(enumId,entry.getValue().toString()); + addressBook.setExtAttr34(enumItemId); + } + break; + }case "EXT_ATTR_35":{ + if(entry.getValue()!=null){ + String enumId = srcEnumDao.getEnumByExtAttr("EXT_ATTR_35"); + String enumItemId = srcEnumDao.getEnumItemByRefEnumIdValue(enumId,entry.getValue().toString()); + addressBook.setExtAttr35(enumItemId); + } + break; + }case "EXT_ATTR_36":{ + if(entry.getValue()!=null){ + String enumId = srcEnumDao.getEnumByExtAttr("EXT_ATTR_36"); + String enumItemId = srcEnumDao.getEnumItemByRefEnumIdValue(enumId,entry.getValue().toString()); + addressBook.setExtAttr36(enumItemId); + } + break; + }case "EXT_ATTR_37":{ + if(entry.getValue()!=null){ + String enumId = srcEnumDao.getEnumByExtAttr("EXT_ATTR_37"); + String enumItemId = srcEnumDao.getEnumItemByRefEnumIdValue(enumId,entry.getValue().toString()); + addressBook.setExtAttr37(enumItemId); + } + break; + }case "EXT_ATTR_38":{ + if(entry.getValue()!=null){ + String enumId = srcEnumDao.getEnumByExtAttr("EXT_ATTR_38"); + String enumItemId = srcEnumDao.getEnumItemByRefEnumIdValue(enumId,entry.getValue().toString()); + addressBook.setExtAttr38(enumItemId); + } + break; + }case "EXT_ATTR_39":{ + if(entry.getValue()!=null){ + String enumId = srcEnumDao.getEnumByExtAttr("EXT_ATTR_39"); + String enumItemId = srcEnumDao.getEnumItemByRefEnumIdValue(enumId,entry.getValue().toString()); + addressBook.setExtAttr39(enumItemId); + } + break; + }case "EXT_ATTR_40":{ + if(entry.getValue()!=null){ + String enumId = srcEnumDao.getEnumByExtAttr("EXT_ATTR_40"); + String enumItemId = srcEnumDao.getEnumItemByRefEnumIdValue(enumId,entry.getValue().toString()); + addressBook.setExtAttr40(enumItemId); + } + break; + }case "EXT_ATTR_41":{ + if(entry.getValue()!=null){ + addressBook.setExtAttr41(entry.getValue().toString()); + } + break; + }case "EXT_ATTR_42":{ + if(entry.getValue()!=null){ + addressBook.setExtAttr42(entry.getValue().toString()); + } + break; + }case "EXT_ATTR_43":{ + if(entry.getValue()!=null){ + addressBook.setExtAttr43(entry.getValue().toString()); + } + break; + }case "EXT_ATTR_44":{ + if(entry.getValue()!=null){ + addressBook.setExtAttr44(entry.getValue().toString()); + } + break; + }case "EXT_ATTR_45":{ + if(entry.getValue()!=null){ + addressBook.setExtAttr45(entry.getValue().toString()); + } + break; + }case "EXT_ATTR_46":{ + if(entry.getValue()!=null){ + addressBook.setExtAttr46(entry.getValue().toString()); + } + break; + }case "EXT_ATTR_47":{ + if(entry.getValue()!=null){ + addressBook.setExtAttr47(entry.getValue().toString()); + } + break; + }case "EXT_ATTR_48":{ + if(entry.getValue()!=null){ + addressBook.setExtAttr48(entry.getValue().toString()); + } + break; + }case "EXT_ATTR_49":{ + if(entry.getValue()!=null){ + addressBook.setExtAttr49(entry.getValue().toString()); + } + break; + }case "EXT_ATTR_50":{ + if(entry.getValue()!=null){ + addressBook.setExtAttr50(entry.getValue().toString()); + } + break; + }case "EXT_ATTR_51":{ + if(entry.getValue()!=null){ + addressBook.setExtAttr51(entry.getValue().toString()); + } + break; + }case "EXT_ATTR_52":{ + if(entry.getValue()!=null){ + addressBook.setExtAttr52(entry.getValue().toString()); + } + break; + }case "EXT_ATTR_53":{ + if(entry.getValue()!=null){ + addressBook.setExtAttr53(entry.getValue().toString()); + } + break; + }case "EXT_ATTR_54":{ + if(entry.getValue()!=null){ + addressBook.setExtAttr54(entry.getValue().toString()); + } + break; + }case "EXT_ATTR_55":{ + if(entry.getValue()!=null){ + addressBook.setExtAttr55(entry.getValue().toString()); + } + break; + }case "EXT_ATTR_56":{ + if(entry.getValue()!=null){ + addressBook.setExtAttr56(entry.getValue().toString()); + } + break; + }case "EXT_ATTR_57":{ + if(entry.getValue()!=null){ + addressBook.setExtAttr57(entry.getValue().toString()); + } + break; + }case "EXT_ATTR_58":{ + if(entry.getValue()!=null){ + addressBook.setExtAttr58(entry.getValue().toString()); + } + break; + }case "EXT_ATTR_59":{ + if(entry.getValue()!=null){ + addressBook.setExtAttr59(entry.getValue().toString()); + } + break; + }case "EXT_ATTR_60":{ + if(entry.getValue()!=null){ + addressBook.setExtAttr60(entry.getValue().toString()); + } + break; + } + } + } + return addressBook; + } + + + + public static boolean isValidDate(String dateStr) { + List formats = Arrays.asList( + "yyyy-MM-dd", "dd/MM/yyyy", "MM/dd/yyyy", + "yyyyMMdd", "yyyy年MM月dd日", "dd-MMM-yyyy" + ); + + for (String format : formats) { + try { + DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format); + LocalDate.parse(dateStr, formatter); + return true; + } catch (DateTimeParseException e) { + // 继续尝试下一个格式 + } + } + return false; + } + +} diff --git a/src/com/seeyon/apps/src_mainorganization/util/ProtUtil.java b/src/com/seeyon/apps/src_mainorganization/util/ProtUtil.java new file mode 100644 index 0000000..1815ca9 --- /dev/null +++ b/src/com/seeyon/apps/src_mainorganization/util/ProtUtil.java @@ -0,0 +1,461 @@ +package com.seeyon.apps.src_mainorganization.util; + +import com.alibaba.fastjson.JSONObject; +import org.apache.commons.httpclient.HttpStatus; +import org.apache.http.HttpEntity; +import org.apache.http.HttpResponse; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPut; +import org.apache.http.client.utils.URIBuilder; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.message.BasicHeader; +import org.apache.http.util.EntityUtils; +import www.seeyon.com.utils.StringUtil; + +import java.io.*; +import java.net.*; +import java.nio.file.Files; +import java.util.Map; + +public class ProtUtil { + + public static String uploadFile(String targetUrl, String filePath) throws IOException { + String boundary = Long.toHexString(System.currentTimeMillis()); // 随机边界 + InputStream is = null; + BufferedReader br = null; + String result = null; + String CRLF = "\r\n"; // 换行符 + URL url = new URL(targetUrl); + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + + connection.setDoOutput(true); + connection.setRequestMethod("POST"); + connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary); + + try ( + OutputStream output = connection.getOutputStream(); + PrintWriter writer = new PrintWriter(new OutputStreamWriter(output, "UTF-8"), true); + ) { + writer.append("--" + boundary).append(CRLF); + writer.append("Content-Disposition: form-data; name=\"title\"").append(CRLF); + writer.append(CRLF).append("测试11").append(CRLF).flush(); + writer.append("--" + boundary).append(CRLF); + writer.append("Content-Disposition: form-data; name=\"fileType\"").append(CRLF); + writer.append(CRLF).append("pdf").append(CRLF).flush(); + // 发送文件数据 + File file = new File(filePath); + writer.append("--" + boundary).append(CRLF); + writer.append("Content-Disposition: form-data; name=\"file\"; filename=\"" + file.getName() + "\"").append(CRLF); + writer.append("Content-Type: " + URLConnection.guessContentTypeFromName(file.getName())).append(CRLF); + writer.append(CRLF).flush(); + + Files.copy(file.toPath(), output); + output.flush(); // 确保文件数据发送完毕 + + writer.append(CRLF).flush(); // 结束行 + writer.append("--" + boundary + "--").append(CRLF); + } + + int responseCode = connection.getResponseCode(); + // 连接对象获取一个输入流,向远程读取 + if (connection.getResponseCode() == 200) { + + is = connection.getInputStream(); + // 对输入流对象进行包装:charset根据工作项目组的要求来设置 + br = new BufferedReader(new InputStreamReader(is, "UTF-8")); + + StringBuffer sbf = new StringBuffer(); + String temp = null; + // 循环遍历一行一行读取数据 + while ((temp = br.readLine()) != null) { + sbf.append(temp); + sbf.append("\r\n"); + } + result = sbf.toString(); + System.out.println(result); + } + // 关闭资源 + if (null != br) { + try { + br.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + if (null != is) { + try { + is.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + connection.disconnect(); + return result; + } + + /** + * 调用post接口 + * + * @param str 调用接口传递的参数json + * @param urlStr 需要调用的url对应的参数文件中的编码 + * @return + */ + public static JSONObject doPost(String str, String urlStr) { + HttpURLConnection connection = null; + InputStream is = null; + OutputStream os = null; + BufferedReader br = null; + String result = null; + try { + URL url = new URL(urlStr); + // 通过远程url连接对象打开连接 + connection = (HttpURLConnection) url.openConnection(); + // 设置连接请求方式 + connection.setRequestMethod("POST"); + // 设置连接主机服务器超时时间:15000毫秒 + connection.setConnectTimeout(15000); + // 设置读取主机服务器返回数据超时时间:60000毫秒 + connection.setReadTimeout(60000); + + // 默认值为:false,当向远程服务器传送数据/写数据时,需要设置为true + connection.setDoOutput(true); + // 默认值为:true,当前向远程服务读取数据时,设置为true,该参数可有可无 + connection.setDoInput(true); + // 设置传入参数的格式:请求参数应该是 name1=value1&name2=value2 的形式。 + connection.setRequestProperty("Content-Type", "application/json"); + // 通过连接对象获取一个输出流 + os = connection.getOutputStream(); + // 通过输出流对象将参数写出去/传输出去,它是通过字节数组写出的 + if (!("".equals(str) || str == null)) { + os.write(str.getBytes("UTF-8")); + } + // 连接对象获取一个输入流,向远程读取 + if (connection.getResponseCode() == 200) { + + is = connection.getInputStream(); + // 对输入流对象进行包装:charset根据工作项目组的要求来设置 + br = new BufferedReader(new InputStreamReader(is, "UTF-8")); + + StringBuffer sbf = new StringBuffer(); + String temp = null; + // 循环遍历一行一行读取数据 + while ((temp = br.readLine()) != null) { + sbf.append(temp); + sbf.append("\r\n"); + } + result = sbf.toString(); + } + } catch (MalformedURLException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } finally { + // 关闭资源 + if (null != br) { + try { + br.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + if (null != os) { + try { + os.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + if (null != is) { + try { + is.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + // 断开与远程地址url的连接 + connection.disconnect(); + } + JSONObject json = JSONObject.parseObject(result); + return json; + + } + + + public static void downloadFile(String urlStr, String filePath){ + String accesstoken = "T3KbU3zlRL"; + String appSecret = "owmMX93AfGZQBF2NCuH9a7i9TOeF5x"; + HttpURLConnection conn = null; + OutputStream out = null; + try { + + StringBuilder urlBuilder = new StringBuilder(urlStr); + + URL url = new URL(urlBuilder.toString()); + conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("GET"); + conn.setRequestProperty("Host", url.getHost()); + conn.setRequestProperty("Accept", "text/plain,application/json"); + conn.setRequestProperty("User-Agent", "privateapp-java-api-client"); + conn.setDoOutput(true); + conn.setDoInput(true); + conn.setUseCaches(false); + + + int statusCode = conn.getResponseCode(); + StringBuilder response = new StringBuilder(); + if (statusCode == 200) { + try (InputStream ins = conn.getInputStream()){ + try (OutputStream outputStream = new FileOutputStream(filePath)) { + int bytesRead; + byte[] buffer = new byte[4096]; + while ((bytesRead = ins.read(buffer)) != -1) { + outputStream.write(buffer, 0, bytesRead); + } + } + //process response data + } catch (Exception e){ + // 处理异常情况 + } + } else { + // 处理异常情况 + } + } catch (IOException e) { + e.printStackTrace(); + } finally { + try { + if (conn != null) { + conn.disconnect(); + } + if (out != null) { + out.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + + /** + * 执行get请求 + * + * @return + * @throws IOException + * @throws FileNotFoundException + */ + public static String doGet(String geturl,JSONObject param) throws FileNotFoundException, IOException, URISyntaxException { +// 创建 HttpClient 实例 + CloseableHttpClient httpClient = HttpClients.createDefault(); + String responseBody = ""; + try { + // 构建包含参数的 URI + URIBuilder uriBuilder = new URIBuilder(geturl); + if(param.size()>0){ + uriBuilder.addParameter("params", param.toString()); + } + URI uri = uriBuilder.build(); + // 创建 HttpGet 对象 + HttpGet httpGet = new HttpGet(uri); + + // 发送请求并获取响应 + CloseableHttpResponse response = httpClient.execute(httpGet); + + try { + // 获取响应实体并转换为字符串 + responseBody = EntityUtils.toString(response.getEntity()); + } finally { + // 关闭响应 + response.close(); + } + } catch (URISyntaxException e) { + System.err.println("URI 构建错误: " + e.getMessage()); + } catch (IOException e) { + System.err.println("请求发送或响应处理错误: " + e.getMessage()); + } finally { + try { + // 关闭 HttpClient + httpClient.close(); + } catch (IOException e) { + System.err.println("关闭 HttpClient 错误: " + e.getMessage()); + } + } + return responseBody; + } + + /** + * 获取一个token + * + * @return + * @throws IOException + * @throws FileNotFoundException + */ + public static String getToken(String oatokenurl,String restName,String restPassword,String loginName) throws FileNotFoundException, IOException { + String address = oatokenurl +"/"+ restName + "/" + restPassword; + if(StringUtil.isNotEmpty(loginName)){ + address = address +"?loginName="+loginName; + } + DefaultHttpClient client = new DefaultHttpClient(); + String result = ""; + HttpGet get = new HttpGet(address); + // 添加 Headers 信息 + get.addHeader(new BasicHeader("Accept", "application/json")); + try { + HttpResponse res = client.execute(get); + if (res.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { + result = EntityUtils.toString(res.getEntity()); + } + } catch (Exception e) { + throw new RuntimeException(e); + } + String token = ""; + if(result.contains("{")) { + JSONObject jsObj = JSONObject.parseObject(result); + token = jsObj.get("id").toString(); + }else { + token = result; + } + return token; + } + /** + * 下载文件到指定目录 + * @param dowUrl:http地址 + * @param dowPath:指定目录 + * */ + public static String download(String dowUrl, String dowPath){ + try { +// log.info("下载地址是:"+dowUrl+",存储地址是:"+dowPath); + URL url = new URL(dowUrl); + + URLConnection urlConnection = url.openConnection(); + + HttpURLConnection httpURLConnection = (HttpURLConnection) urlConnection;// http的连接类 + + //String contentType = httpURLConnection.getContentType();//请求类型,可用来过滤请求, + + httpURLConnection.setConnectTimeout(1000*5);//设置超时 + + httpURLConnection.setRequestMethod("GET");//设置请求方式,默认是GET + + httpURLConnection.setRequestProperty("Charset", "UTF-8");// 设置字符编码 + + httpURLConnection.connect();// 打开连接 + + BufferedInputStream bin = new BufferedInputStream(httpURLConnection.getInputStream()); + + String path = dowPath;// 指定存放位置 + File filed = new File(path); + String mergePdfPath = dowPath ; + String[] paths = mergePdfPath.split("/"); + String mpath = ""; + for(int i = 0 ; i headers, String encode){ + if(encode == null){ + encode = "utf-8"; + } + CloseableHttpResponse httpResponse = null; + CloseableHttpClient closeableHttpClient = null; + String content = null; + //since 4.3 不再使用 DefaultHttpClient + try { + + //HttpClients.createDefault()等价于 HttpClientBuilder.create().build(); + closeableHttpClient = HttpClients.createDefault(); + HttpPut httpput = new HttpPut(url); + + //设置header + httpput.setHeader("Content-type", "application/json"); + if (headers != null && headers.size() > 0) { + for (Map.Entry entry : headers.entrySet()) { + httpput.setHeader(entry.getKey(),entry.getValue().toString()); + } + } + //组织请求参数 + StringEntity stringEntity = new StringEntity(stringJson, encode); + httpput.setEntity(stringEntity); + //响应信息 + httpResponse = closeableHttpClient.execute(httpput); + HttpEntity entity = httpResponse.getEntity(); + content = EntityUtils.toString(entity, encode); + } catch (Exception e) { + e.printStackTrace(); + }finally{ + try { + httpResponse.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + try { + closeableHttpClient.close(); //关闭连接、释放资源 + } catch (IOException e) { + e.printStackTrace(); + } + return content; + } + + + + + +} diff --git a/src/com/seeyon/apps/src_membermanage/MemberManageCommonNode.java b/src/com/seeyon/apps/src_membermanage/MemberManageCommonNode.java new file mode 100644 index 0000000..bd44d44 --- /dev/null +++ b/src/com/seeyon/apps/src_membermanage/MemberManageCommonNode.java @@ -0,0 +1,280 @@ +package com.seeyon.apps.src_membermanage; + +import cn.hutool.log.Log; +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.common.config.ICstConfigApi; +import com.seeyon.apps.common.plugin.vo.ConfigVo; +import com.seeyon.apps.common.workflow.constants.WorkFlowType; +import com.seeyon.apps.common.workflow.node.ACommonSuperNode; +import com.seeyon.apps.ext.workflow.vo.FieldDataVo; +import com.seeyon.apps.ext.workflow.vo.FormDataVo; +import com.seeyon.apps.ext.workflow.vo.SuperNodeContext; +import com.seeyon.apps.src_membermanage.constants.MemberManageConstants; +import com.seeyon.apps.src_membermanage.util.DataProcessingUtil; +import com.seeyon.apps.src_membermanage.util.ParamUtil; +import com.seeyon.apps.src_membermanage.util.ProtUtil; +import com.seeyon.apps.src_membermanage.vo.MemberManagerResponse; +import com.seeyon.cap4.form.bean.FormDataMasterBean; +import com.seeyon.ctp.common.AppContext; +import www.seeyon.com.utils.StringUtil; + +import java.util.List; +import java.util.Map; + +public abstract class MemberManageCommonNode extends ACommonSuperNode { + + private static Log log = Log.get(MemberManageCommonNode.class); + + protected ICstConfigApi cstConfigApi = (ICstConfigApi) AppContext.getBean("cstConfigApi"); + + @Override + public String getPluginId() { + return MemberManageConstants.getPluginId(); + } + + @Override + public String getFormParse() { + return "json"; + } + + @Override + public WorkFlowType[] getTypes() { + return new WorkFlowType[] {WorkFlowType.superNode}; + } + + public ConfigVo getMemberMamageConfig() { + return cstConfigApi.getConfig(getPluginId()); + } + + @Override + public SuperNodeContext proceed(String request, FormDataVo formDataVo, FormDataMasterBean formDataMasterBean) throws Exception { + log.info("进入人事处理流程"+getNodeId()); + ConfigVo configVo = getMemberMamageConfig(); + SuperNodeContext context = new SuperNodeContext(); + context.setNeedSave(true); + ParamUtil paramUtil = new ParamUtil(); +// 判断是否已经推送成功 + FieldDataVo fhjg = formDataVo.getFieldData("返回结果"); + String fhvalue = fhjg.getStringValue(); + if(fhvalue.contains("成功")) { + return context.success("跳过:" + fhvalue); + } +// 判断当前结果请求是否为新增 + JSONObject requestJson = JSONObject.parseObject(request); + String addOrUpdate = requestJson.getString("addOrUpdate"); + + String mainUrl = configVo.getParamVal(MemberManageConstants.mainUrl.name()); + String getzsjTokenUrl = configVo.getParamVal(MemberManageConstants.getzsjTokenUrl.name()); + String restzsjUserName = configVo.getParamVal(MemberManageConstants.restzsjUserName.name()); + String restzsjPassword = configVo.getParamVal(MemberManageConstants.restzsjPassword.name()); + String zsjloginName = configVo.getParamVal(MemberManageConstants.zsjloginName.name()); +// 调用接口查询主数据token + String mainToken = ProtUtil.getToken(getzsjTokenUrl,restzsjUserName,restzsjPassword,zsjloginName); + switch (addOrUpdate){ + case "add":{ + System.out.println("新增"); + String param = paramUtil.formAddParam(request,formDataVo,getNodeId(),configVo); + log.info(param); + context.setRequest(param); +// 获取调用接口路径 + String formmainAddUrl = mainUrl+"/seeyon/rest/cap4/form/soap/batch-add?token="+mainToken; + JSONObject res = ProtUtil.doPost(param,formmainAddUrl); + log.info(res.toString()); + context.setResponse(res.toString()); + MemberManagerResponse mmr = new MemberManagerResponse(res); + if(mmr.isSuccess()){ + String resDatastr = mmr.getData(); + Map resData = DataProcessingUtil.convertStringToMap(resDatastr); + List successIdList = (List)resData.get("successIdList"); + if(successIdList.size()>0){ + String fid = successIdList.get(0); + log.info("档案表创建完成,返回结果为"+resDatastr); + context.success("档案表创建完成,当前档案表ID为"+fid,false); + formDataVo.getNewFieldDataMap().put("返回结果", "档案表创建完成,当前档案表ID为"+fid); + }else{ + Map failedData = (Map)resData.get("failedData"); + for (Map.Entry entry:failedData.entrySet()) { + context.back("档案表创建失败:创建异常:" + entry.getValue()); + context.setErrMsg(mmr.getMsg()); + formDataVo.getNewFieldDataMap().put("返回结果", "档案表创建失败:创建异常:"+entry.getValue()); + } + } + }else{ + context.back("档案表创建失败:修改异常:" + mmr.getMsg()); + context.setErrMsg(mmr.getMsg()); + formDataVo.getNewFieldDataMap().put("返回结果", "档案表创建失败:修改异常:"+mmr.getMsg()); + } + break;} + case "update":{ + System.out.println("修改"); + JSONObject isExistUpdateParam = new JSONObject(); + isExistUpdateParam.put("formCode",requestJson.getString("formCode")); + JSONObject uniqueness = new JSONObject(); + JSONObject uniquenessjson = requestJson.getJSONObject("uniqueness"); + for (Map.Entry entry:uniquenessjson.entrySet()) { + FieldDataVo fieldDataVo = formDataVo.getFieldData(entry.getValue().toString()); + uniqueness.put(entry.getKey(),fieldDataVo.getDbValue()); + } + isExistUpdateParam.put("uniqueness",uniqueness); +// 调用接口查询当前数据是否存在 + String isExistUpdateUrl = mainUrl+"/seeyon/rest/formTable/quart?token="+mainToken; + String formmainIdUpdate = ProtUtil.doGet(isExistUpdateUrl,isExistUpdateParam); + JSONObject formmainIdUpdatejson = JSONObject.parseObject(formmainIdUpdate); + JSONObject formmainIdUpdateData = formmainIdUpdatejson.getJSONObject("data"); + String formmainUpdate = formmainIdUpdateData.getString("id"); + if(StringUtil.isNotEmpty(formmainUpdate)){ +// 当前数据已经存在执行修改逻辑 + String param = paramUtil.formUpdateParam(request,formDataVo,getNodeId(),configVo,formmainUpdate); + context.setRequest(param); + log.info(param); +// 获取调用接口路径 + String formmainUpdateUrl = mainUrl+"/seeyon/rest/cap4/form/soap/batch-update?token="+mainToken; + context.setUrl(formmainUpdateUrl); + JSONObject res = ProtUtil.doPost(param,formmainUpdateUrl); + log.info(res.toString()); + context.setResponse(res.toString()); + MemberManagerResponse mmr = new MemberManagerResponse(res); + if(mmr.isSuccess()){ + String resDatastr = mmr.getData(); + Map resData = DataProcessingUtil.convertStringToMap(resDatastr); + List successIdList = (List)resData.get("successIdList"); + if(successIdList.size()>0){ + String fid = successIdList.get(0); + log.info("档案表修改完成,返回结果为"+resDatastr); + context.success("档案表修改完成,当前档案表ID为"+fid,false); + if("MemberEntryTalentsNode".equals(getNodeId()) || "MemberSystemAccountClosureTalentsNode".equals(getNodeId())){ + + }else{ + formDataVo.getNewFieldDataMap().put("返回结果", "档案表修改完成,当前档案表ID为"+fid); + } + }else{ + Map failedData = (Map)resData.get("failedData"); + for (Map.Entry entry:failedData.entrySet()) { + context.back("档案表修改失败:创建异常:" + entry.getValue()); + context.setErrMsg(mmr.getMsg()); + if(!"MemberEntryTalentsNode".equals(getNodeId()) ){ + formDataVo.getNewFieldDataMap().put("返回结果", "档案表修改失败:创建异常:"+entry.getValue()); + } + } + } + }else{ + context.back("档案表修改失败:修改异常:" + mmr.getMsg()); + context.setErrMsg(mmr.getMsg()); + if(!"MemberEntryTalentsNode".equals(getNodeId()) ){ + formDataVo.getNewFieldDataMap().put("返回结果", "档案表修改失败:修改异常:"+mmr.getMsg()); + } + } + }else{ +// context.back("没有查询到需要修改的数据,请检查唯一值是否正确"); +// if(!"MemberEntryTalentsNode".equals(getNodeId()) ){ +// formDataVo.getNewFieldDataMap().put("返回结果", "没有查询到需要修改的数据,请检查唯一值是否正确"); +// } + context.success("没有查询到需要修改的数据,跳过处理"); + if(!"MemberEntryTalentsNode".equals(getNodeId()) ){ + formDataVo.getNewFieldDataMap().put("返回结果", "没有查询到需要修改的数据,请检查唯一值是否正确"); + } + } + break; + } + case "addOrUpdate":{ + System.out.println("新增和修改"); +// 查询当前信息是否已经存在,设置请求参数 + JSONObject isExistParam = new JSONObject(); + isExistParam.put("formCode",requestJson.getString("formCode")); + JSONObject uniqueness = new JSONObject(); + JSONObject uniquenessjson = requestJson.getJSONObject("uniqueness"); + for (Map.Entry entry:uniquenessjson.entrySet()) { + FieldDataVo fieldDataVo = formDataVo.getFieldData(entry.getValue().toString()); + uniqueness.put(entry.getKey(),fieldDataVo.getDbValue()); + } + isExistParam.put("uniqueness",uniqueness); +// 调用接口查询当前数据是否存在 + String isExistUrl = mainUrl+"/seeyon/rest/formTable/quart?token="+mainToken; +// 查询当前数据是否存在 + String formmainId = ProtUtil.doGet(isExistUrl,isExistParam); + JSONObject formmainIdjson = JSONObject.parseObject(formmainId); + JSONObject formmainIdData = formmainIdjson.getJSONObject("data"); + String formmain = formmainIdData.getString("id"); + if(StringUtil.isNotEmpty(formmain)){ +// 当前数据已经存在执行修改逻辑 + String param = paramUtil.formUpdateParam(request,formDataVo,getNodeId(),configVo,formmain); + context.setRequest(param); +// 获取调用接口路径 + String formmainUpdateUrl = mainUrl+"/seeyon/rest/cap4/form/soap/batch-update?token="+mainToken; + context.setUrl(formmainUpdateUrl); + JSONObject res = ProtUtil.doPost(param,formmainUpdateUrl); + log.info(res.toString()); + context.setResponse(res.toString()); + MemberManagerResponse mmr = new MemberManagerResponse(res); + if(mmr.isSuccess()){ + String resDatastr = mmr.getData(); + Map resData = DataProcessingUtil.convertStringToMap(resDatastr); + List successIdList = (List)resData.get("successIdList"); + if(successIdList.size()>0){ + String fid = successIdList.get(0); + log.info("档案表修改完成,返回结果为"+resDatastr); + context.success("档案表修改完成,当前档案表ID为"+fid,false); + formDataVo.getNewFieldDataMap().put("返回结果", "档案表修改完成,当前档案表ID为"+fid); + }else{ + Map failedData = (Map)resData.get("failedData"); + for (Map.Entry entry:failedData.entrySet()) { + context.back("档案表修改失败:创建异常:" + entry.getValue()); + context.setErrMsg(mmr.getMsg()); + formDataVo.getNewFieldDataMap().put("返回结果", "档案表修改失败:创建异常:"+entry.getValue()); + } + } + }else{ + context.back("档案表修改失败:修改异常:" + mmr.getMsg()); + context.setErrMsg(mmr.getMsg()); + formDataVo.getNewFieldDataMap().put("返回结果", "档案表修改失败:修改异常:"+mmr.getMsg()); + } + }else{ +// 当前数据不存在执行新增逻辑 + String param = paramUtil.formAddParam(request,formDataVo,getNodeId(),configVo); + context.setRequest(param); + log.info(param); +// 获取调用接口路径 + String formmainAddUrl = mainUrl+"/seeyon/rest/cap4/form/soap/batch-add?token="+mainToken; + JSONObject res = ProtUtil.doPost(param,formmainAddUrl); + log.info(res.toString()); + context.setResponse(res.toString()); + MemberManagerResponse mmr = new MemberManagerResponse(res); + if(mmr.isSuccess()){ + String resDatastr = mmr.getData(); + Map resData = DataProcessingUtil.convertStringToMap(resDatastr); + List successIdList = (List)resData.get("successIdList"); + if(successIdList.size()>0){ + String fid = successIdList.get(0); + log.info("档案表创建完成,返回结果为"+resDatastr); + context.success("档案表创建完成,当前档案表ID为"+fid,false); + formDataVo.getNewFieldDataMap().put("返回结果", "档案表创建完成,当前档案表ID为"+fid); + }else{ + Map failedData = (Map)resData.get("failedData"); + for (Map.Entry entry:failedData.entrySet()) { + context.back("档案表创建失败:创建异常:" + entry.getValue()); + context.setErrMsg(mmr.getMsg()); + formDataVo.getNewFieldDataMap().put("返回结果", "档案表创建失败:创建异常:"+entry.getValue()); + } + } + }else{ + context.back("档案表创建失败:创建异常:" + mmr.getMsg()); + context.setErrMsg(mmr.getMsg()); + formDataVo.getNewFieldDataMap().put("返回结果", "档案表创建失败:创建异常:"+mmr.getMsg()); + } + } + break;} + default: + System.out.println("参数设置错误,请设置模板是否为新增或者修改"); + } + return context; + } + + public abstract String getMethod(); + public abstract String getRequestType(); + + + + + + +} diff --git a/src/com/seeyon/apps/src_membermanage/MemberManagePluginApi.java b/src/com/seeyon/apps/src_membermanage/MemberManagePluginApi.java new file mode 100644 index 0000000..2768635 --- /dev/null +++ b/src/com/seeyon/apps/src_membermanage/MemberManagePluginApi.java @@ -0,0 +1,42 @@ +package com.seeyon.apps.src_membermanage; + +import com.seeyon.apps.common.plugin.api.APluginInfoApi; +import com.seeyon.apps.common.plugin.vo.ConfigVo; +import com.seeyon.apps.src_membermanage.constants.MemberManageConstants; + +public class MemberManagePluginApi extends APluginInfoApi { + + public MemberManagePluginApi(){ + } + + public String getPluginId() { + System.out.println(MemberManageConstants.getPluginId()); + return MemberManageConstants.getPluginId(); + } + + public String getCreateUser() { + return "橙阳科技"; + } + + public String getDescription() { + return "主数据平台人员集成管理"; + } + + public ConfigVo getDefaultConfig() { + ConfigVo configVo = new ConfigVo(); + MemberManageConstants[] var2 = MemberManageConstants.values(); + int var3 = var2.length; + + for(int var4 = 0; var4 < var3; ++var4) { + MemberManageConstants value = var2[var4]; + if (value != MemberManageConstants.plugin) { + configVo.getDevParams().put(value.name(), value.getDefaultValue()); + configVo.getProdParams().put(value.name(), value.getDefaultValue()); + configVo.getParamMap().put(value.name(), value.getDescription()); + } + } + + return configVo; + } + +} diff --git a/src/com/seeyon/apps/src_membermanage/MemberOrganizationCommonNode.java b/src/com/seeyon/apps/src_membermanage/MemberOrganizationCommonNode.java new file mode 100644 index 0000000..a9a97c4 --- /dev/null +++ b/src/com/seeyon/apps/src_membermanage/MemberOrganizationCommonNode.java @@ -0,0 +1,153 @@ +package com.seeyon.apps.src_membermanage; + +import cn.hutool.log.Log; +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.common.config.ICstConfigApi; +import com.seeyon.apps.common.plugin.vo.ConfigVo; +import com.seeyon.apps.common.workflow.constants.WorkFlowType; +import com.seeyon.apps.common.workflow.node.ACommonSuperNode; +import com.seeyon.apps.ext.workflow.vo.FieldDataVo; +import com.seeyon.apps.ext.workflow.vo.FormDataVo; +import com.seeyon.apps.ext.workflow.vo.SuperNodeContext; +import com.seeyon.apps.src_membermanage.constants.MemberManageConstants; +import com.seeyon.apps.src_membermanage.util.OrganizationParamUtil; +import com.seeyon.apps.src_membermanage.util.ProtUtil; +import com.seeyon.cap4.form.bean.FormDataMasterBean; +import com.seeyon.ctp.common.AppContext; +import www.seeyon.com.utils.StringUtil; + +//人员组织架构控制抽象类 +public abstract class MemberOrganizationCommonNode extends ACommonSuperNode { + + private static Log log = Log.get(MemberOrganizationCommonNode.class); + + protected ICstConfigApi cstConfigApi = (ICstConfigApi) AppContext.getBean("cstConfigApi"); + + @Override + public String getPluginId() { + return MemberManageConstants.getPluginId(); + } + + @Override + public String getFormParse() { + return "json"; + } + + @Override + public WorkFlowType[] getTypes() { + return new WorkFlowType[] {WorkFlowType.superNode}; + } + + public ConfigVo getMemberMamageConfig() { + return cstConfigApi.getConfig(getPluginId()); + } + + @Override + public SuperNodeContext proceed(String request, FormDataVo formDataVo, FormDataMasterBean formDataMasterBean) throws Exception { + log.info("进入人事组织架构处理流程"+getNodeId()); + ConfigVo configVo = getMemberMamageConfig(); + SuperNodeContext context = new SuperNodeContext(); + context.setNeedSave(true); + OrganizationParamUtil organizationParamUtil = new OrganizationParamUtil(); + + FieldDataVo fhjg = formDataVo.getFieldData("组织返回结果"); + String fhvalue = fhjg.getStringValue(); + if(fhvalue.contains("完成")) { + return context.success("跳过:" + fhvalue); + } +// 判断当前结果请求是否为新增 + JSONObject requestJson = JSONObject.parseObject(request); + String addOrUpdate = requestJson.getString("addOrUpdate"); + + String mainUrl = configVo.getParamVal(MemberManageConstants.mainUrl.name()); + String getzsjTokenUrl = configVo.getParamVal(MemberManageConstants.getzsjTokenUrl.name()); + String restzsjUserName = configVo.getParamVal(MemberManageConstants.restzsjUserName.name()); + String restzsjPassword = configVo.getParamVal(MemberManageConstants.restzsjPassword.name()); + String zsjloginName = configVo.getParamVal(MemberManageConstants.zsjloginName.name()); +// 调用接口查询主数据token + String mainToken = ProtUtil.getToken(getzsjTokenUrl,restzsjUserName,restzsjPassword,zsjloginName); + + switch (addOrUpdate){ + case "add":{ + System.out.println("新增"); + String param = organizationParamUtil.organizationAddParam(request,formDataVo,getNodeId(),configVo); + log.info(param); + context.setRequest(param); +// 获取调用接口路径 + String memberOrganizationAddUrl = mainUrl+"/seeyon/rest/orgMember/saveMemberMain?token="+mainToken; + JSONObject res = ProtUtil.doPost(param,memberOrganizationAddUrl); + log.info(res.toString()); + context.setResponse(res.toString()); + JSONObject resDatastr = res.getJSONObject("data"); + if(res.getInteger("code")==0){ +// JSONObject ent = successMsg.getJSONObject("ent"); + log.info("人员组织架构创建完成,人员名称为"+resDatastr.getString("name")+",ID为"+resDatastr.getString("id")); + context.success("人员组织架构创建完成,人员名称为"+resDatastr.getString("name"),false); + if("MemberEntryOrganizationNode".equals(getNodeId())|| "AccountOpeningOrganizationNode".equals(getNodeId())){ + formDataVo.getNewFieldDataMap().put("组织架构姓名", resDatastr.getString("id")); + } + formDataVo.getNewFieldDataMap().put("组织返回结果", "人员组织架构创建完成:人员名称为"+resDatastr.getString("name")); + }else{ + String message = res.getString("message"); +// 判断当前参数是否存在问题 + String msg = "人员组织架构创建失败:"+message; + + context.back(msg); + formDataVo.getNewFieldDataMap().put("组织返回结果", msg); + context.setErrMsg(msg); + } + break; + } + case "update":{ + System.out.println("修改"); + String param = organizationParamUtil.organizationUpdateParam(request,formDataVo,getNodeId(),configVo); + log.info(param); + context.setRequest(param); +// 查询当前人员是否存在 + JSONObject paramjson = JSONObject.parseObject(param); + String memberId = paramjson.getString("id"); + String isExistUpdateUrl = mainUrl+"/seeyon/rest/orgMember/"+memberId+"?token="+mainToken; + String isExistUpdate = ProtUtil.doGet(isExistUpdateUrl,new JSONObject()); +// 判断当前人员是否存在 + if(StringUtil.isNotEmpty(isExistUpdate)&&!"null".equals(isExistUpdate)){ +// 如果存在则执行修改操作 + String memberOrganizationUpdateUrl = mainUrl+"/seeyon/rest/orgMember/updateMemberMain?token="+mainToken; + JSONObject res = ProtUtil.doPost(param,memberOrganizationUpdateUrl); + log.info(res.toString()); + context.setResponse(res.toString()); + if(res.getInteger("code")==0){ + String resDatastr = res.getString("data"); + JSONObject resDatajson = JSONObject.parseObject(resDatastr); + log.info("人员组织架构修改完成:人员名称为"+resDatajson.getString("name")+",ID为"+resDatajson.getString("id")); + context.success("人员组织架构修改完成:人员名称为"+resDatajson.getString("name"),false); + formDataVo.getNewFieldDataMap().put("组织返回结果", "人员组织架构修改完成:人员名称为"+resDatajson.getString("name")); + }else{ + String message = res.getString("message"); + log.info("人员组织架构修改失败:"+message); + context.back("人员组织架构修改失败:"+message); + formDataVo.getNewFieldDataMap().put("组织返回结果", "人员组织架构修改失败:"+message); + context.setErrMsg(message); + } + }else{ +// 如果不存在则返回报错信息 + log.info("人员组织架构修改失败:当前人员未查询到组织架构数据,请检查。"); + context.back("人员组织架构修改失败:当前人员未查询到组织架构数据,请检查。"); + context.setErrMsg("人员组织架构修改失败:当前人员未查询到组织架构数据,请检查。"); + formDataVo.getNewFieldDataMap().put("组织返回结果", "人员组织架构修改失败:当前人员未查询到组织架构数据,请检查。"); + } + break; + } + } + Thread.sleep(5000); + return context; + } + + public abstract String getMethod(); + public abstract String getRequestType(); + + + + + + +} diff --git a/src/com/seeyon/apps/src_membermanage/constants/MemberManageConstants.java b/src/com/seeyon/apps/src_membermanage/constants/MemberManageConstants.java new file mode 100644 index 0000000..409855b --- /dev/null +++ b/src/com/seeyon/apps/src_membermanage/constants/MemberManageConstants.java @@ -0,0 +1,38 @@ +package com.seeyon.apps.src_membermanage.constants; + +public enum MemberManageConstants { + + plugin("src_membermanage","插件ID"), + dowUrl("http://127.0.0.1:8888/seeyon/rest/attachment/file","附件下载路径"), + uploadUrl("http://127.0.0.1:8888/seeyon/rest/attachment","主数据平台上传接口"), + getTokenUrl("http://127.0.0.1:8888/seeyon/rest/token", "集团TOKEN接口路径"), + restUserName("shenxian", "集团REST用户名"), + restPassword("ccfa57fe-cf2f-4d26-a24c-a0801a431168", "集团REST密码"), + loginName("shenxian", "集团管理员登录名"), + getzsjTokenUrl("http://127.0.0.1:8888/seeyon/rest/token", "主数据TOKEN接口路径"), + restzsjUserName("shenxian", "主数据REST用户名"), + restzsjPassword("ccfa57fe-cf2f-4d26-a24c-a0801a431168", "主数据REST密码"), + zsjloginName("shenxian", "主数据管理员账号"), + mainUrl("http://10.0.1.55","主数据平台ip端口"); + + MemberManageConstants(String defaultValue, String description) { + this.defaultValue = defaultValue; + this.description = description; + } + + private String defaultValue; + private String description; + + public String getDefaultValue() { + return defaultValue; + } + + public String getDescription() { + return description; + } + + public static String getPluginId() { + return plugin.defaultValue; + } + +} diff --git a/src/com/seeyon/apps/src_membermanage/node/AccountOpeningNode.java b/src/com/seeyon/apps/src_membermanage/node/AccountOpeningNode.java new file mode 100644 index 0000000..d6cf7cd --- /dev/null +++ b/src/com/seeyon/apps/src_membermanage/node/AccountOpeningNode.java @@ -0,0 +1,29 @@ +package com.seeyon.apps.src_membermanage.node; + +import com.seeyon.apps.src_membermanage.MemberManageCommonNode; + +/** + * 账号开启新增档案表超级节点 + */ +public class AccountOpeningNode extends MemberManageCommonNode { + + @Override + public String getMethod() { + return ""; + } + + @Override + public String getRequestType() { + return ""; + } + + @Override + public String getNodeId() { + return "AccountOpeningNode"; + } + + @Override + public String getNodeName() { + return "账号开启新增档案表超级节点"; + } +} diff --git a/src/com/seeyon/apps/src_membermanage/node/AccountOpeningOrganizationNode.java b/src/com/seeyon/apps/src_membermanage/node/AccountOpeningOrganizationNode.java new file mode 100644 index 0000000..6b4b87c --- /dev/null +++ b/src/com/seeyon/apps/src_membermanage/node/AccountOpeningOrganizationNode.java @@ -0,0 +1,29 @@ +package com.seeyon.apps.src_membermanage.node; + +import com.seeyon.apps.src_membermanage.MemberOrganizationCommonNode; + +/** + * 账号开启新增组织架构超级节点 + */ +public class AccountOpeningOrganizationNode extends MemberOrganizationCommonNode { + + @Override + public String getMethod() { + return ""; + } + + @Override + public String getRequestType() { + return ""; + } + + @Override + public String getNodeId() { + return "AccountOpeningOrganizationNode"; + } + + @Override + public String getNodeName() { + return "账号开启新增组织架构超级节点"; + } +} diff --git a/src/com/seeyon/apps/src_membermanage/node/MemberAccountClosureNode.java b/src/com/seeyon/apps/src_membermanage/node/MemberAccountClosureNode.java new file mode 100644 index 0000000..2cedf85 --- /dev/null +++ b/src/com/seeyon/apps/src_membermanage/node/MemberAccountClosureNode.java @@ -0,0 +1,219 @@ +package com.seeyon.apps.src_membermanage.node; + +import cn.hutool.log.Log; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.common.config.ICstConfigApi; +import com.seeyon.apps.common.plugin.vo.ConfigVo; +import com.seeyon.apps.common.workflow.node.ACommonSuperNode; +import com.seeyon.apps.ext.workflow.vo.FieldDataVo; +import com.seeyon.apps.ext.workflow.vo.FormDataVo; +import com.seeyon.apps.ext.workflow.vo.SuperNodeContext; +import com.seeyon.apps.src_membermanage.constants.MemberManageConstants; +import com.seeyon.apps.src_membermanage.util.DataProcessingUtil; +import com.seeyon.apps.src_membermanage.util.ProtUtil; +import com.seeyon.apps.src_membermanage.vo.MemberManagerResponse; +import com.seeyon.cap4.form.bean.FormDataMasterBean; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.util.UUIDLong; +import www.seeyon.com.utils.StringUtil; + +import java.util.List; +import java.util.Map; + +/** + * 人员账号批量关闭修改档案表超级节点 + */ +public class MemberAccountClosureNode extends ACommonSuperNode { + + private static Log log = Log.get(MemberAccountClosureOrganizationNode.class); + protected ICstConfigApi cstConfigApi = (ICstConfigApi) AppContext.getBean("cstConfigApi"); + + @Override + public String getNodeId() { + return "MemberAccountClosureNode"; + } + + @Override + public String getNodeName() { + return "人员账号批量关闭修改档案表超级节点"; + } + + @Override + public String getPluginId() { + return MemberManageConstants.getPluginId(); + } + + @Override + public String getFormParse() { + return "json"; + } + public ConfigVo getMemberMamageConfig() { + return cstConfigApi.getConfig(getPluginId()); + } + @Override + public SuperNodeContext proceed(String request, FormDataVo formDataVo, FormDataMasterBean formDataMasterBean) throws Exception { + log.info("进入人事档案表处理流程"+getNodeId()); + ConfigVo configVo = getMemberMamageConfig(); + SuperNodeContext context = new SuperNodeContext(); + context.setNeedSave(true); + JSONObject paramJson = JSONObject.parseObject(request); + String enumFields = paramJson.getString("enumFields"); + String mainUrl = configVo.getParamVal(MemberManageConstants.mainUrl.name()); + String getzsjTokenUrl = configVo.getParamVal(MemberManageConstants.getzsjTokenUrl.name()); + String restzsjUserName = configVo.getParamVal(MemberManageConstants.restzsjUserName.name()); + String restzsjPassword = configVo.getParamVal(MemberManageConstants.restzsjPassword.name()); + String zsjloginName = configVo.getParamVal(MemberManageConstants.zsjloginName.name()); +// 调用接口查询主数据token + String mainToken = ProtUtil.getToken(getzsjTokenUrl,restzsjUserName,restzsjPassword,zsjloginName); +// 获取当前表单数据 +// Map> SubFormMap = formDataVo.getSubFormMap(); + List subForms = formDataVo.getSubFormMap().get("明细表1"); + for (FormDataVo subFormDataVo : subForms) { +// 每一行就是一个变更数据封装封装修改的人员参数执行修改操作 +// 创建唯一值查询参数 + JSONObject isExistUpdateParam = new JSONObject(); + isExistUpdateParam.put("formCode",paramJson.getString("formCode")); + JSONObject uniqueness = new JSONObject(); + JSONObject uniquenessjson = paramJson.getJSONObject("uniqueness"); + for (Map.Entry entry:uniquenessjson.entrySet()) { + FieldDataVo fieldDataVo = subFormDataVo.getFieldData(entry.getValue().toString()); + uniqueness.put(entry.getKey(),fieldDataVo.getDbValue()); + } + isExistUpdateParam.put("uniqueness",uniqueness); +// 调用接口查询当前数据是否存在 + String isExistUpdateUrl = mainUrl+"/seeyon/rest/formTable/quart?token="+mainToken; + String formmainIdUpdate = ProtUtil.doGet(isExistUpdateUrl,isExistUpdateParam); + JSONObject formmainIdUpdatejson = JSONObject.parseObject(formmainIdUpdate); + JSONObject formmainIdUpdateData = formmainIdUpdatejson.getJSONObject("data"); + String formmainUpdate = formmainIdUpdateData.getString("id"); + if(StringUtil.isNotEmpty(formmainUpdate)){ +// 当前数据已经存在执行修改逻辑 + JSONObject param = new JSONObject(); +// 设置基本数据 + param.put("doTrigger",paramJson.getBooleanValue("doTrigger")); + param.put("formCode",paramJson.getString("formCode")); + param.put("loginName",paramJson.getString("loginName")); + param.put("rightId",paramJson.getString("rightIdUpdate")); + JSONArray dataList = new JSONArray(); + JSONObject data = new JSONObject(); + JSONObject paramDataList = paramJson.getJSONObject("dataList"); + JSONObject paramMasterTable = paramDataList.getJSONObject("masterTable"); + JSONObject masterTable = new JSONObject(); + masterTable.put("name",paramMasterTable.getString("name")); + JSONObject record = new JSONObject(); + record.put("id",formmainUpdate); +// 根据主表字段信息,设置主表参数 + JSONArray fields = new JSONArray(); + for (Map.Entry entry : paramMasterTable.getJSONObject("fields").entrySet()) { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("name",entry.getKey()); + String value = entry.getValue().toString(); + FieldDataVo subFieldDataVo; + try { + subFieldDataVo = subFormDataVo.getFieldData(value); + } catch (NoSuchFieldException e) { + subFieldDataVo = formDataVo.getFieldData(value); + } + if(subFieldDataVo.getDbValue() == null){ + jsonObject.put("value",""); + }else{ + if(enumFields.contains(entry.getKey())){ + String subFieldDataDb = subFieldDataVo.getStringValue(); + jsonObject.put("showValue",subFieldDataDb); + }else{ + String subFieldDataDb = subFieldDataVo.getDbValue().toString(); + jsonObject.put("value",subFieldDataDb); + } + } + fields.add(jsonObject); + } + record.put("fields",fields); + masterTable.put("record",record); + data.put("masterTable",masterTable); +// 根据明细表字段信息,设置明细表参数 + JSONArray subTables = new JSONArray(); + JSONArray paramSubTables = paramDataList.getJSONArray("subTables"); + for(int i = 0 ; i < paramSubTables.size();i++){ + JSONObject paramSubTable = paramSubTables.getJSONObject(i); + JSONObject subTable = new JSONObject(); + subTable.put("name",paramSubTable.getString("tableName")); + JSONArray subRecords = new JSONArray(); + JSONObject subRecord = new JSONObject(); + subRecord.put("id", UUIDLong.longUUID()+""); + JSONArray subFields = new JSONArray(); + for (Map.Entry entry : paramSubTable.getJSONObject("fields").entrySet()) { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("name",entry.getKey()); + String value = entry.getValue().toString(); + FieldDataVo subFieldDataVo ; + try { + subFieldDataVo = subFormDataVo.getFieldData(value); + } catch (NoSuchFieldException e) { + subFieldDataVo = formDataVo.getFieldData(value); + } + if(subFieldDataVo.getDbValue() == null){ + jsonObject.put("value",""); + }else{ + if(enumFields.contains(entry.getKey())){ + String subFieldDataDb = subFieldDataVo.getStringValue(); + jsonObject.put("value",subFieldDataDb); + }else{ + String subFieldDataDb = subFieldDataVo.getDbValue().toString(); + jsonObject.put("value",subFieldDataDb); + } + } + String subFieldDataDb = subFieldDataVo.getDbValue().toString(); + jsonObject.put("value",subFieldDataDb); + subFields.add(jsonObject); + } + subRecord.put("fields",subFields); + subRecords.add(subRecord); + subTable.put("records",subRecords); + subTables.add(subTable); + } + data.put("subTables",subTables); + + dataList.add(data); + param.put("dataList",dataList); + + context.setRequest(param.toString()); + log.info(param.toString()); +// 获取调用接口路径 + String formmainUpdateUrl = mainUrl+"/seeyon/rest/cap4/form/soap/batch-update?token="+mainToken; + context.setUrl(formmainUpdateUrl); + JSONObject res = ProtUtil.doPost(param.toString(),formmainUpdateUrl); + log.info(res.toString()); + context.setResponse(res.toString()); + MemberManagerResponse mmr = new MemberManagerResponse(res); + if(mmr.isSuccess()){ + String resDatastr = mmr.getData(); + Map resData = DataProcessingUtil.convertStringToMap(resDatastr); + List successIdList = (List)resData.get("successIdList"); + if(successIdList.size()>0){ + String fid = successIdList.get(0); + log.info("档案表修改完成,返回结果为"+resDatastr); + context.success("档案表修改完成,当前档案表ID为"+fid,false); + formDataVo.getNewFieldDataMap().put("返回结果", "档案表修改完成,当前档案表ID为"+fid); + }else{ + Map failedData = (Map)resData.get("failedData"); + for (Map.Entry entry:failedData.entrySet()) { + context.back("档案表修改失败:创建异常:" + entry.getValue()); + context.setErrMsg(mmr.getMsg()); + formDataVo.getNewFieldDataMap().put("返回结果", "档案表修改失败:创建异常:"+entry.getValue()); + } + } + + }else{ + context.back("档案表修改失败:修改异常:" + mmr.getMsg()); + context.setErrMsg(mmr.getMsg()); + formDataVo.getNewFieldDataMap().put("返回结果", "档案表修改失败:修改异常:"+mmr.getMsg()); + } + }else{ + context.success("没有查询到需要修改的数据,跳过处理"); + formDataVo.getNewFieldDataMap().put("返回结果", "没有查询到需要修改的数据,跳过处理"); + } + } + return context; + } +} diff --git a/src/com/seeyon/apps/src_membermanage/node/MemberAccountClosureOrganizationNode.java b/src/com/seeyon/apps/src_membermanage/node/MemberAccountClosureOrganizationNode.java new file mode 100644 index 0000000..8e9cac3 --- /dev/null +++ b/src/com/seeyon/apps/src_membermanage/node/MemberAccountClosureOrganizationNode.java @@ -0,0 +1,147 @@ +package com.seeyon.apps.src_membermanage.node; + +import cn.hutool.log.Log; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.common.config.ICstConfigApi; +import com.seeyon.apps.common.plugin.vo.ConfigVo; +import com.seeyon.apps.common.workflow.node.ACommonSuperNode; +import com.seeyon.apps.ext.workflow.vo.FieldDataVo; +import com.seeyon.apps.ext.workflow.vo.FormDataVo; +import com.seeyon.apps.ext.workflow.vo.SuperNodeContext; +import com.seeyon.apps.src_membermanage.constants.MemberManageConstants; +import com.seeyon.apps.src_membermanage.util.ProtUtil; +import com.seeyon.cap4.form.bean.FormDataMasterBean; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.organization.bo.V3xOrgMember; +import com.seeyon.ctp.organization.manager.OrgManager; + +import javax.inject.Inject; +import java.util.List; +import java.util.Map; + +/** + * 人员账号批量关闭修改组织架构超级节点 + */ +public class MemberAccountClosureOrganizationNode extends ACommonSuperNode { + + private static Log log = Log.get(MemberAccountClosureOrganizationNode.class); + protected ICstConfigApi cstConfigApi = (ICstConfigApi) AppContext.getBean("cstConfigApi"); + + @Inject + private OrgManager orgManager; + @Override + public String getNodeId() { + return "MemberAccountClosureOrganizationNode"; + } + + @Override + public String getNodeName() { + return "人员账号批量关闭修改组织架构超级节点"; + } + + @Override + public String getPluginId() { + return MemberManageConstants.getPluginId(); + } + + @Override + public String getFormParse() { + return "json"; + } + public ConfigVo getMemberMamageConfig() { + return cstConfigApi.getConfig(getPluginId()); + } + + @Override + public SuperNodeContext proceed(String request, FormDataVo formDataVo, FormDataMasterBean formDataMasterBean) throws Exception { + log.info("进入人事组织机构处理流程"+getNodeId()); + ConfigVo configVo = getMemberMamageConfig(); + SuperNodeContext context = new SuperNodeContext(); + context.setNeedSave(true); + String mainUrl = configVo.getParamVal(MemberManageConstants.mainUrl.name()); + String getzsjTokenUrl = configVo.getParamVal(MemberManageConstants.getzsjTokenUrl.name()); + String restzsjUserName = configVo.getParamVal(MemberManageConstants.restzsjUserName.name()); + String restzsjPassword = configVo.getParamVal(MemberManageConstants.restzsjPassword.name()); + String zsjloginName = configVo.getParamVal(MemberManageConstants.zsjloginName.name()); +// 调用接口查询主数据token + String mainToken = ProtUtil.getToken(getzsjTokenUrl,restzsjUserName,restzsjPassword,zsjloginName); + + JSONObject req = JSONObject.parseObject(request); + JSONArray subTables = req.getJSONArray("subTable"); + int isSuccess = 0; + String ret = ""; +// Map> subFormDataVoMap = formDataVo.getSubFormMap(); + String subTableName = req.getString("subTableName"); + List subFormDataVos = formDataVo.getSubFormMap().get(subTableName); + for(int i = 0 ; i < subTables.size() ; i++){ + JSONObject subTable = subTables.getJSONObject(i); + FormDataVo subFormDataVo = subFormDataVos.get(i); +// 查询当前人员是否存在 + String memberIdName = subTable.getString("id"); + FieldDataVo memberField = subFormDataVo.getFieldData(memberIdName); + String memberId = memberField.getDbValue().toString(); + String accountIdName = subTable.getString("orgAccountId"); + FieldDataVo accountField = subFormDataVo.getFieldData(accountIdName); + String accountId = accountField.getDbValue().toString(); + subTable.put("orgAccountId",accountId); + V3xOrgMember v3xOrgMember = orgManager.getMemberById(Long.parseLong(memberId)); + String isExistUpdateUrl = mainUrl+"/seeyon/rest/orgMember/"+memberId+"?token="+mainToken; + String memberstr = ProtUtil.doGet(isExistUpdateUrl, new JSONObject()); + if(!"null".equals(memberstr)){ + isSuccess++; +// 当前人员已存在 + JSONObject memberjson = JSONObject.parseObject(memberstr); + if(memberjson.getBooleanValue("isDeleted")){ +// 当前人员已经删除 + ret = ret+memberjson.getString("name")+"已经删除,无法修改;"; + }else{ +// 当前人员存在,执行修改 + subTable.put("id",memberId); + String memberOrganizationUpdateUrl = mainUrl+"/seeyon/rest/orgMember/updateMemberMain?token="+mainToken; +// String res = ProtUtil.httpPutRaw(memberOrganizationUpdateUrl,subTable.toString(),new HashMap<>(),null); + JSONObject res = ProtUtil.doPost(subTable.toString(),memberOrganizationUpdateUrl); + log.info(res.toString()); +// JSONObject resjson = JSONObject.parseObject(res); +// MemberOrganizationResponse mor = new MemberOrganizationResponse(resjson); +// String resDatastr = mor.getData(); +// resDatastr = "{'param':'"+resDatastr+"'}"; +// JSONObject resDatajson = JSONObject.parseObject(resDatastr); +// JSONArray successMsgs = resDatajson.getJSONArray("param"); +// JSONObject successMsg = successMsgs.getJSONObject(0); + if(res.getInteger("code")==0){ + JSONObject data = res.getJSONObject("data"); + ret+=data.getString("name")+"修改成功"; + log.info("人员组织架构修改完成:人员名称为"+data.getString("name")+",ID为"+data.getString("id")); +// context.success("人员组织架构修改完成:人员名称为"+ent.getString("name"),false); +// formDataVo.getNewFieldDataMap().put("组织返回结果", "人员组织架构修改完成:人员名称为"+ent.getString("name")); + }else{ + isSuccess--; + String message = res.getString("message"); +// JSONObject ent = successMsg.getJSONObject("ent"); +// String msgInfo = successMsg.getString("msgInfo"); + ret+=memberjson.getString("name")+"修改失败"+message; + log.info("人员组织架构修改失败:人员名称为"+memberjson.getString("name")+",ID为"+memberjson.getString("id")+message); +// context.back("人员组织架构修改失败:人员名称为"+ent.getString("name")+","+msgInfo); +// formDataVo.getNewFieldDataMap().put("组织返回结果", "人员组织架构修改失败:人员名称为"+ent.getString("name")+","+msgInfo); +// context.setErrMsg(mor.getMsg()); + } + } + }else{ +// 人员不存在 + ret = ret+v3xOrgMember.getName()+"不存在,无法修改;"; + } + context.setRequest(subTables.toString()); + context.setResponse(ret); + } + if(isSuccess == subTables.size()){ + context.success(ret,false); + formDataVo.getNewFieldDataMap().put("组织返回结果", ret); + }else{ + log.info(ret); + context.back(ret); + formDataVo.getNewFieldDataMap().put("组织返回结果", ret); + } + return context; + } +} diff --git a/src/com/seeyon/apps/src_membermanage/node/MemberAccountClosureTalentsNode.java b/src/com/seeyon/apps/src_membermanage/node/MemberAccountClosureTalentsNode.java new file mode 100644 index 0000000..ee45a6e --- /dev/null +++ b/src/com/seeyon/apps/src_membermanage/node/MemberAccountClosureTalentsNode.java @@ -0,0 +1,205 @@ +package com.seeyon.apps.src_membermanage.node; + +import cn.hutool.log.Log; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.common.config.ICstConfigApi; +import com.seeyon.apps.common.plugin.vo.ConfigVo; +import com.seeyon.apps.common.workflow.node.ACommonSuperNode; +import com.seeyon.apps.ext.workflow.vo.FieldDataVo; +import com.seeyon.apps.ext.workflow.vo.FormDataVo; +import com.seeyon.apps.ext.workflow.vo.SuperNodeContext; +import com.seeyon.apps.src_membermanage.constants.MemberManageConstants; +import com.seeyon.apps.src_membermanage.util.DataProcessingUtil; +import com.seeyon.apps.src_membermanage.util.ProtUtil; +import com.seeyon.apps.src_membermanage.vo.MemberManagerResponse; +import com.seeyon.cap4.form.bean.FormDataMasterBean; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.util.UUIDLong; +import www.seeyon.com.utils.StringUtil; + +import java.util.List; +import java.util.Map; + +/** + * 人员账号批量关闭修改人才库超级节点 + */ +public class MemberAccountClosureTalentsNode extends ACommonSuperNode { + + private static Log log = Log.get(MemberAccountClosureOrganizationNode.class); + protected ICstConfigApi cstConfigApi = (ICstConfigApi) AppContext.getBean("cstConfigApi"); + + @Override + public String getNodeId() { + return "MemberAccountClosureTalentsNode"; + } + + @Override + public String getNodeName() { + return "人员账号批量关闭修改人才库超级节点"; + } + + @Override + public String getPluginId() { + return MemberManageConstants.getPluginId(); + } + + @Override + public String getFormParse() { + return "json"; + } + public ConfigVo getMemberMamageConfig() { + return cstConfigApi.getConfig(getPluginId()); + } + + @Override + public SuperNodeContext proceed(String request, FormDataVo formDataVo, FormDataMasterBean formDataMasterBean) throws Exception { + log.info("进入人事档案表处理流程"+getNodeId()); + ConfigVo configVo = getMemberMamageConfig(); + SuperNodeContext context = new SuperNodeContext(); + context.setNeedSave(true); + JSONObject paramJson = JSONObject.parseObject(request); + String mainUrl = configVo.getParamVal(MemberManageConstants.mainUrl.name()); + String getzsjTokenUrl = configVo.getParamVal(MemberManageConstants.getzsjTokenUrl.name()); + String restzsjUserName = configVo.getParamVal(MemberManageConstants.restzsjUserName.name()); + String restzsjPassword = configVo.getParamVal(MemberManageConstants.restzsjPassword.name()); + String zsjloginName = configVo.getParamVal(MemberManageConstants.zsjloginName.name()); +// 调用接口查询主数据token + String mainToken = ProtUtil.getToken(getzsjTokenUrl,restzsjUserName,restzsjPassword,zsjloginName); +// 获取当前表单数据 +// Map> SubFormMap = formDataVo.getSubFormMap(); + List subForms = formDataVo.getSubFormMap().get("明细表1"); + for (FormDataVo subFormDataVo : subForms) { +// 每一行就是一个变更数据封装封装修改的人员参数执行修改操作 +// 创建唯一值查询参数 + JSONObject isExistUpdateParam = new JSONObject(); + isExistUpdateParam.put("formCode",paramJson.getString("formCode")); + JSONObject uniqueness = new JSONObject(); + JSONObject uniquenessjson = paramJson.getJSONObject("uniqueness"); + for (Map.Entry entry:uniquenessjson.entrySet()) { + FieldDataVo fieldDataVo = subFormDataVo.getFieldData(entry.getValue().toString()); + uniqueness.put(entry.getKey(),fieldDataVo.getDbValue()); + } + isExistUpdateParam.put("uniqueness",uniqueness); +// 调用接口查询当前数据是否存在 + String isExistUpdateUrl = mainUrl+"/seeyon/rest/formTable/quart?token="+mainToken; + String formmainIdUpdate = ProtUtil.doGet(isExistUpdateUrl,isExistUpdateParam); + JSONObject formmainIdUpdatejson = JSONObject.parseObject(formmainIdUpdate); + JSONObject formmainIdUpdateData = formmainIdUpdatejson.getJSONObject("data"); + String formmainUpdate = formmainIdUpdateData.getString("id"); + if(StringUtil.isNotEmpty(formmainUpdate)){ +// 当前数据已经存在执行修改逻辑 + JSONObject param = new JSONObject(); +// 设置基本数据 + param.put("doTrigger",paramJson.getBooleanValue("doTrigger")); + param.put("formCode",paramJson.getString("formCode")); + param.put("loginName",paramJson.getString("loginName")); + param.put("rightId",paramJson.getString("rightIdUpdate")); + JSONArray dataList = new JSONArray(); + JSONObject data = new JSONObject(); + JSONObject paramDataList = paramJson.getJSONObject("dataList"); + JSONObject paramMasterTable = paramDataList.getJSONObject("masterTable"); + JSONObject masterTable = new JSONObject(); + masterTable.put("name",paramMasterTable.getString("name")); + JSONObject record = new JSONObject(); + record.put("id",formmainUpdate); +// 根据主表字段信息,设置主表参数 + JSONArray fields = new JSONArray(); + for (Map.Entry entry : paramMasterTable.getJSONObject("fields").entrySet()) { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("name",entry.getKey()); + String value = entry.getValue().toString(); + FieldDataVo subFieldDataVo; + try { + subFieldDataVo = subFormDataVo.getFieldData(value); + } catch (NoSuchFieldException e) { + subFieldDataVo = formDataVo.getFieldData(value); + } + String subFieldDataDb = subFieldDataVo.getDbValue().toString(); + jsonObject.put("value",subFieldDataDb); + fields.add(jsonObject); + } + record.put("fields",fields); + masterTable.put("record",record); + data.put("masterTable",masterTable); +// 根据明细表字段信息,设置明细表参数 + JSONArray subTables = new JSONArray(); + JSONArray paramSubTables = paramDataList.getJSONArray("subTables"); + for(int i = 0 ; i < paramSubTables.size();i++){ + JSONObject paramSubTable = paramSubTables.getJSONObject(i); + JSONObject subTable = new JSONObject(); + subTable.put("name",paramSubTable.getString("tableName")); + JSONArray subRecords = new JSONArray(); + JSONObject subRecord = new JSONObject(); + subRecord.put("id", UUIDLong.longUUID()+""); + JSONArray subFields = new JSONArray(); + for (Map.Entry entry : paramSubTable.getJSONObject("fields").entrySet()) { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("name",entry.getKey()); + String value = entry.getValue().toString(); + FieldDataVo subFieldDataVo ; + try { + subFieldDataVo = subFormDataVo.getFieldData(value); + } catch (NoSuchFieldException e) { + subFieldDataVo = formDataVo.getFieldData(value); + } + if(subFieldDataVo.getDbValue() == null){ + jsonObject.put("value",""); + }else{ + String subFieldDataDb = subFieldDataVo.getDbValue().toString(); + jsonObject.put("value",subFieldDataDb); + } + String subFieldDataDb = subFieldDataVo.getDbValue().toString(); + jsonObject.put("value",subFieldDataDb); + subFields.add(jsonObject); + } + subRecord.put("fields",subFields); + subRecords.add(subRecord); + subTable.put("records",subRecords); + subTables.add(subTable); + } + data.put("subTables",subTables); + + dataList.add(data); + param.put("dataList",dataList); + + context.setRequest(param.toString()); + log.info(param.toString()); +// 获取调用接口路径 + String formmainUpdateUrl = mainUrl+"/seeyon/rest/cap4/form/soap/batch-update?token="+mainToken; + context.setUrl(formmainUpdateUrl); + JSONObject res = ProtUtil.doPost(param.toString(),formmainUpdateUrl); + log.info(res.toString()); + context.setResponse(res.toString()); + MemberManagerResponse mmr = new MemberManagerResponse(res); + if(mmr.isSuccess()){ + String resDatastr = mmr.getData(); + Map resData = DataProcessingUtil.convertStringToMap(resDatastr); + List successIdList = (List)resData.get("successIdList"); + if(successIdList.size()>0){ + String fid = successIdList.get(0); + log.info("档案表修改完成,返回结果为"+resDatastr); + context.success("档案表修改完成,当前档案表ID为"+fid,false); + formDataVo.getNewFieldDataMap().put("返回结果", "档案表修改完成,当前档案表ID为"+fid); + }else{ + Map failedData = (Map)resData.get("failedData"); + for (Map.Entry entry:failedData.entrySet()) { + context.back("档案表修改失败:创建异常:" + entry.getValue()); + context.setErrMsg(mmr.getMsg()); + formDataVo.getNewFieldDataMap().put("返回结果", "档案表修改失败:创建异常:"+entry.getValue()); + } + } + + }else{ + context.back("档案表修改失败:修改异常:" + mmr.getMsg()); + context.setErrMsg(mmr.getMsg()); + formDataVo.getNewFieldDataMap().put("返回结果", "档案表修改失败:修改异常:"+mmr.getMsg()); + } + }else{ + context.success("没有查询到需要修改的数据,跳过处理"); + formDataVo.getNewFieldDataMap().put("返回结果", "没有查询到需要修改的数据,跳过处理"); + } + } + return context; + } +} diff --git a/src/com/seeyon/apps/src_membermanage/node/MemberAnewEngageNode.java b/src/com/seeyon/apps/src_membermanage/node/MemberAnewEngageNode.java new file mode 100644 index 0000000..9ab58f5 --- /dev/null +++ b/src/com/seeyon/apps/src_membermanage/node/MemberAnewEngageNode.java @@ -0,0 +1,29 @@ +package com.seeyon.apps.src_membermanage.node; + +import com.seeyon.apps.src_membermanage.MemberManageCommonNode; + +/** + * 人员退休返聘修改档案表超级节点 + */ +public class MemberAnewEngageNode extends MemberManageCommonNode { + + @Override + public String getMethod() { + return ""; + } + + @Override + public String getRequestType() { + return ""; + } + + @Override + public String getNodeId() { + return "MemberAnewEngageNode"; + } + + @Override + public String getNodeName() { + return "人员退休返聘修改档案表超级节点"; + } +} diff --git a/src/com/seeyon/apps/src_membermanage/node/MemberAnewEngageOrganizationNode.java b/src/com/seeyon/apps/src_membermanage/node/MemberAnewEngageOrganizationNode.java new file mode 100644 index 0000000..193ae1e --- /dev/null +++ b/src/com/seeyon/apps/src_membermanage/node/MemberAnewEngageOrganizationNode.java @@ -0,0 +1,29 @@ +package com.seeyon.apps.src_membermanage.node; + +import com.seeyon.apps.src_membermanage.MemberOrganizationCommonNode; + +/** + * 人员退休返聘修改组织架构超级节点 + */ +public class MemberAnewEngageOrganizationNode extends MemberOrganizationCommonNode { + + @Override + public String getMethod() { + return ""; + } + + @Override + public String getRequestType() { + return ""; + } + + @Override + public String getNodeId() { + return "MemberAnewEngageOrganizationNode"; + } + + @Override + public String getNodeName() { + return "人员退休返聘修改组织架构超级节点"; + } +} diff --git a/src/com/seeyon/apps/src_membermanage/node/MemberBasicsNode.java b/src/com/seeyon/apps/src_membermanage/node/MemberBasicsNode.java new file mode 100644 index 0000000..ed42b93 --- /dev/null +++ b/src/com/seeyon/apps/src_membermanage/node/MemberBasicsNode.java @@ -0,0 +1,29 @@ +package com.seeyon.apps.src_membermanage.node; + +import com.seeyon.apps.src_membermanage.MemberManageCommonNode; + +/** + * 人员基础信息修改档案表超级节点 + */ +public class MemberBasicsNode extends MemberManageCommonNode { + + @Override + public String getMethod() { + return ""; + } + + @Override + public String getRequestType() { + return ""; + } + + @Override + public String getNodeId() { + return "MemberBasicsNode"; + } + + @Override + public String getNodeName() { + return "人员基础信息修改档案表超级节点"; + } +} diff --git a/src/com/seeyon/apps/src_membermanage/node/MemberBasicsOrganizationNode.java b/src/com/seeyon/apps/src_membermanage/node/MemberBasicsOrganizationNode.java new file mode 100644 index 0000000..2c6de03 --- /dev/null +++ b/src/com/seeyon/apps/src_membermanage/node/MemberBasicsOrganizationNode.java @@ -0,0 +1,21 @@ +package com.seeyon.apps.src_membermanage.node; + +import com.seeyon.apps.src_membermanage.MemberOrganizationCommonNode; + +/** + * 人员基础信息修改档案表超级节点 + */ +public class MemberBasicsOrganizationNode extends MemberOrganizationCommonNode { + + @Override + public String getMethod() {return "";} + + @Override + public String getRequestType() {return "";} + + @Override + public String getNodeId() {return "MemberBasicsOrganizationNode";} + + @Override + public String getNodeName() {return "人员基础信息修改组织架构超级节点";} +} diff --git a/src/com/seeyon/apps/src_membermanage/node/MemberContractNode.java b/src/com/seeyon/apps/src_membermanage/node/MemberContractNode.java new file mode 100644 index 0000000..8057f73 --- /dev/null +++ b/src/com/seeyon/apps/src_membermanage/node/MemberContractNode.java @@ -0,0 +1,288 @@ +package com.seeyon.apps.src_membermanage.node; + +import cn.hutool.log.Log; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.common.config.ICstConfigApi; +import com.seeyon.apps.common.plugin.vo.ConfigVo; +import com.seeyon.apps.common.workflow.node.ACommonSuperNode; +import com.seeyon.apps.ext.workflow.vo.FieldDataVo; +import com.seeyon.apps.ext.workflow.vo.FormDataVo; +import com.seeyon.apps.ext.workflow.vo.SuperNodeContext; +import com.seeyon.apps.src_membermanage.constants.MemberManageConstants; +import com.seeyon.apps.src_membermanage.util.DataProcessingUtil; +import com.seeyon.apps.src_membermanage.util.ProtUtil; +import com.seeyon.apps.src_membermanage.vo.MemberManagerResponse; +import com.seeyon.cap4.form.bean.FormDataMasterBean; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.common.SystemEnvironment; +import com.seeyon.ctp.common.ctpenumnew.manager.EnumManager; +import com.seeyon.ctp.common.filemanager.manager.AttachmentManager; +import com.seeyon.ctp.common.po.ctpenumnew.CtpEnumItem; +import com.seeyon.ctp.common.po.filemanager.Attachment; +import com.seeyon.ctp.util.UUIDLong; +import www.seeyon.com.utils.StringUtil; + +import java.io.IOException; +import java.util.List; +import java.util.Map; + +/** + * 人员合同签订档案表超级节点 + */ +public class MemberContractNode extends ACommonSuperNode { + + private static Log log = Log.get(MemberContractNode.class); + protected ICstConfigApi cstConfigApi = (ICstConfigApi) AppContext.getBean("cstConfigApi"); + + private EnumManager enumManagerNew; + public void setEnumManagerNew(EnumManager enumManagerNew) {this.enumManagerNew = enumManagerNew; } + public EnumManager getEnumManagerNew() { + if (enumManagerNew == null) {enumManagerNew = (EnumManager) AppContext.getBean("enumManagerNew");}return enumManagerNew; + } + private AttachmentManager attachmentManager; + public void setAttachmentManager(AttachmentManager attachmentManager) {this.attachmentManager = attachmentManager;} + public AttachmentManager getAttachmentManagery() { + if (this.attachmentManager == null) {this.attachmentManager = (AttachmentManager) AppContext.getBean("attachmentManager");}return this.attachmentManager; + } + + @Override + public String getNodeId() { + return "MemberContractNode"; + } + + @Override + public String getNodeName() { + return "人员合同签订档案表超级节点"; + } + + @Override + public String getPluginId() { + return MemberManageConstants.getPluginId(); + } + + @Override + public String getFormParse() { + return "json"; + } + + public ConfigVo getMemberMamageConfig() { + return cstConfigApi.getConfig(getPluginId()); + } + + public String getjtToken(ConfigVo configVo) throws IOException { + String getTokenUrl = configVo.getParamVal(MemberManageConstants.getTokenUrl.name()); + String restUserName = configVo.getParamVal(MemberManageConstants.restUserName.name()); + String restPassword = configVo.getParamVal(MemberManageConstants.restPassword.name()); + String loginName = configVo.getParamVal(MemberManageConstants.loginName.name()); + String jttoken = ProtUtil.getToken(getTokenUrl,restUserName,restPassword,loginName); + return jttoken; + } + + @Override + public SuperNodeContext proceed(String request, FormDataVo formDataVo, FormDataMasterBean formDataMasterBean) throws Exception { + log.info("进入人事档案表处理流程"+getNodeId()); + ConfigVo configVo = getMemberMamageConfig(); + SuperNodeContext context = new SuperNodeContext(); + context.setNeedSave(true); + JSONObject paramJson = JSONObject.parseObject(request); + String mainUrl = configVo.getParamVal(MemberManageConstants.mainUrl.name()); + String getzsjTokenUrl = configVo.getParamVal(MemberManageConstants.getzsjTokenUrl.name()); + String restzsjUserName = configVo.getParamVal(MemberManageConstants.restzsjUserName.name()); + String restzsjPassword = configVo.getParamVal(MemberManageConstants.restzsjPassword.name()); + String zsjloginName = configVo.getParamVal(MemberManageConstants.zsjloginName.name()); +// 调用接口查询主数据token + String mainToken = ProtUtil.getToken(getzsjTokenUrl,restzsjUserName,restzsjPassword,zsjloginName); +// 获取当前表单数据 +// Map> SubFormMap = formDataVo.getSubFormMap(); + List subForms = formDataVo.getSubFormMap().get("人员明细"); + for (FormDataVo subFormDataVo : subForms) { +// 每一行就是一个变更数据封装封装修改的人员参数执行修改操作 +// 创建唯一值查询参数 + JSONObject isExistUpdateParam = new JSONObject(); + isExistUpdateParam.put("formCode",paramJson.getString("formCode")); + JSONObject uniqueness = new JSONObject(); + JSONObject uniquenessjson = paramJson.getJSONObject("uniqueness"); + for (Map.Entry entry:uniquenessjson.entrySet()) { + FieldDataVo fieldDataVo = subFormDataVo.getFieldData(entry.getValue().toString()); + uniqueness.put(entry.getKey(),fieldDataVo.getDbValue()); + } + isExistUpdateParam.put("uniqueness",uniqueness); +// 调用接口查询当前数据是否存在 + String isExistUpdateUrl = mainUrl+"/seeyon/rest/formTable/quart?token="+mainToken; + String formmainIdUpdate = ProtUtil.doGet(isExistUpdateUrl,isExistUpdateParam); + JSONObject formmainIdUpdatejson = JSONObject.parseObject(formmainIdUpdate); + JSONObject formmainIdUpdateData = formmainIdUpdatejson.getJSONObject("data"); + String formmainUpdate = formmainIdUpdateData.getString("id"); + if(StringUtil.isNotEmpty(formmainUpdate)){ +// 当前数据已经存在执行修改逻辑 + JSONObject param = new JSONObject(); +// 设置基本数据 + param.put("doTrigger",paramJson.getBooleanValue("doTrigger")); + param.put("formCode",paramJson.getString("formCode")); + param.put("loginName",paramJson.getString("loginName")); + param.put("rightId",paramJson.getString("rightIdUpdate")); + JSONArray dataList = new JSONArray(); + JSONObject data = new JSONObject(); + JSONObject paramDataList = paramJson.getJSONObject("dataList"); + JSONObject paramMasterTable = paramDataList.getJSONObject("masterTable"); + JSONObject masterTable = new JSONObject(); + masterTable.put("name",paramMasterTable.getString("name")); + JSONObject record = new JSONObject(); + record.put("id",formmainUpdate); +// 根据主表字段信息,设置主表参数 + JSONArray fields = new JSONArray(); + for (Map.Entry entry : paramMasterTable.getJSONObject("fields").entrySet()) { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("name",entry.getKey()); + String value = entry.getValue().toString(); + FieldDataVo subFieldDataVo; + try { + subFieldDataVo = subFormDataVo.getFieldData(value); + } catch (NoSuchFieldException e) { + subFieldDataVo = formDataVo.getFieldData(value); + } + if(subFieldDataVo.getDbValue()==null){ + jsonObject.put("value",""); + }else{ + String subFieldData = subFieldDataVo.getStringValue(); + jsonObject.put("showValue",subFieldData); + } + fields.add(jsonObject); + } + record.put("fields",fields); + masterTable.put("record",record); + data.put("masterTable",masterTable); +// 根据明细表字段信息,设置明细表参数 + JSONArray subTables = new JSONArray(); + JSONArray paramSubTables = paramDataList.getJSONArray("subTables"); + JSONArray attachmentInfos = new JSONArray(); + for(int i = 0 ; i < paramSubTables.size();i++){ + JSONObject paramSubTable = paramSubTables.getJSONObject(i); + JSONObject subTable = new JSONObject(); + subTable.put("name",paramSubTable.getString("tableName")); + JSONArray subRecords = new JSONArray(); + JSONObject subRecord = new JSONObject(); + subRecord.put("id", UUIDLong.longUUID()+""); + JSONArray subFields = new JSONArray(); + for (Map.Entry entry : paramSubTable.getJSONObject("fields").entrySet()) { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("name",entry.getKey()); + String value = entry.getValue().toString(); + FieldDataVo subFieldDataVo; + try { + subFieldDataVo = subFormDataVo.getFieldData(value); + } catch (NoSuchFieldException e) { + subFieldDataVo = formDataVo.getFieldData(value); + } + if("合同类型".equals(value)){ + if(subFieldDataVo.getDbValue()==null){ + jsonObject.put("value",""); + }else{ + String subFieldDataDb = subFieldDataVo.getDbValue().toString(); + CtpEnumItem ctpEnumItem = getEnumManagerNew().getCtpEnumItem(Long.parseLong(subFieldDataDb)); + String showValue = ctpEnumItem.getShowvalue(); + jsonObject.put("showValue",showValue); + } + }else if ("合同附件".equals(value)){ +// 获取附件控件的数据 + if (subFieldDataVo.getDbValue() != null) { + String dbValue = subFieldDataVo.getDbValue().toString(); + List attachmentIds = getAttachmentManagery().getBySubReference(Long.parseLong(dbValue)); +// 获取当前附件控件的所有附件信息 + for (int n = 0; n < attachmentIds.size(); n++) { +// 进行附件下载后上传至目标系统中 + Attachment attachment = getAttachmentManagery().getAttachmentByFileURL(attachmentIds.get(n)); + Long fileUrl = attachment.getFileUrl(); + String filename = attachment.getFilename(); +// String[] fileType = filename.split("\\."); + String fileType = filename.substring(filename.lastIndexOf(".") + 1); + String oaFileName = filename.substring(0, filename.lastIndexOf(".")); +// 调用接口下载文件,文件存放在指定的路径下 + String dowUrl = configVo.getParamVal(MemberManageConstants.dowUrl.name()) + "/" + fileUrl + "?fileName=" + fileType + "&token=" + getjtToken(configVo); + log.info("下载URL:" + dowUrl); + String str = SystemEnvironment.getApplicationFolder(); + String dowPath = str + "/memberfiles/" + formDataVo.getId() + "/" + filename; + log.info("下载地址:" + dowPath); + String download = ProtUtil.download(dowUrl, dowPath); +// String str = SystemEnvironment.getApplicationFolder(); + String uploadUrl = configVo.getParamVal(MemberManageConstants.uploadUrl.name()); + String targetUrl = uploadUrl + "?token=" + mainToken; + String uploadData = ProtUtil.uploadFile(targetUrl, dowPath); + JSONObject uploadFile = JSON.parseObject(uploadData); + JSONArray atts = uploadFile.getJSONArray("atts"); + if (atts.size() > 0) { + JSONObject att = atts.getJSONObject(0); + JSONObject attachmentInfo = new JSONObject(); + attachmentInfo.put("subReference", dbValue); + attachmentInfo.put("fileUrl", att.getString("fileUrl")); + attachmentInfo.put("sort", n); + attachmentInfos.add(attachmentInfo); + } + } + jsonObject.put("value", dbValue); + jsonObject.put("showValue", ""); + }else{ + jsonObject.put("value", ""); + } + }else{ + if(subFieldDataVo.getDbValue() == null){ + jsonObject.put("value",""); + }else{ + String subFieldData = subFieldDataVo.getStringValue(); + jsonObject.put("value",subFieldData); + } +// subFields.add(jsonObject); + } + subFields.add(jsonObject); + } + subRecord.put("fields",subFields); + subRecords.add(subRecord); + subTable.put("records",subRecords); + subTables.add(subTable); + } + data.put("subTables",subTables); + // 添加附件数据 + data.put("attachmentInfos",attachmentInfos); + dataList.add(data); + param.put("dataList",dataList); + context.setRequest(param.toString()); + log.info(param.toString()); +// 获取调用接口路径 + String formmainUpdateUrl = mainUrl+"/seeyon/rest/cap4/form/soap/batch-update?token="+mainToken; + context.setUrl(formmainUpdateUrl); + JSONObject res = ProtUtil.doPost(param.toString(),formmainUpdateUrl); + log.info(res.toString()); + context.setResponse(res.toString()); + MemberManagerResponse mmr = new MemberManagerResponse(res); + if(mmr.isSuccess()){ + String resDatastr = mmr.getData(); + Map resData = DataProcessingUtil.convertStringToMap(resDatastr); + List successIdList = (List)resData.get("successIdList"); + if(successIdList.size()>0){ + String fid = successIdList.get(0); + log.info("档案表修改完成,返回结果为"+resDatastr); + context.success("档案表修改完成,当前档案表ID为"+fid,false); + formDataVo.getNewFieldDataMap().put("返回结果", "档案表修改完成,当前档案表ID为"+fid); + }else{ + Map failedData = (Map)resData.get("failedData"); + for (Map.Entry entry:failedData.entrySet()) { + context.back("档案表修改失败:创建异常:" + entry.getValue()); + context.setErrMsg(mmr.getMsg()); + formDataVo.getNewFieldDataMap().put("返回结果", "档案表修改失败:创建异常:"+entry.getValue()); + } + } + }else{ + context.back("档案表修改失败:修改异常:" + mmr.getMsg()); + context.setErrMsg(mmr.getMsg()); + formDataVo.getNewFieldDataMap().put("返回结果", "档案表修改失败:修改异常:"+mmr.getMsg()); + } + }else{ + context.success("没有查询到需要修改的数据,跳过处理"); + formDataVo.getNewFieldDataMap().put("返回结果", "没有查询到需要修改的数据,跳过处理"); + } + } + return context; + } +} diff --git a/src/com/seeyon/apps/src_membermanage/node/MemberDecruitmentNode.java b/src/com/seeyon/apps/src_membermanage/node/MemberDecruitmentNode.java new file mode 100644 index 0000000..e051ade --- /dev/null +++ b/src/com/seeyon/apps/src_membermanage/node/MemberDecruitmentNode.java @@ -0,0 +1,29 @@ +package com.seeyon.apps.src_membermanage.node; + +import com.seeyon.apps.src_membermanage.MemberManageCommonNode; + +/** + * 人员解聘超级节点 + */ +public class MemberDecruitmentNode extends MemberManageCommonNode { + + @Override + public String getMethod() { + return ""; + } + + @Override + public String getRequestType() { + return ""; + } + + @Override + public String getNodeId() { + return "MemberDecruitmentNode"; + } + + @Override + public String getNodeName() { + return "人员解聘超级节点"; + } +} diff --git a/src/com/seeyon/apps/src_membermanage/node/MemberDecruitmentOrganizationNode.java b/src/com/seeyon/apps/src_membermanage/node/MemberDecruitmentOrganizationNode.java new file mode 100644 index 0000000..d2b362f --- /dev/null +++ b/src/com/seeyon/apps/src_membermanage/node/MemberDecruitmentOrganizationNode.java @@ -0,0 +1,21 @@ +package com.seeyon.apps.src_membermanage.node; + +import com.seeyon.apps.src_membermanage.MemberOrganizationCommonNode; + +/** + * 人员解聘组织架构超级节点 + */ +public class MemberDecruitmentOrganizationNode extends MemberOrganizationCommonNode { + + @Override + public String getMethod() {return "";} + + @Override + public String getRequestType() {return "";} + + @Override + public String getNodeId() {return "MemberDecruitmentOrganizationNode";} + + @Override + public String getNodeName() {return "人员解聘组织架构超级节点";} +} diff --git a/src/com/seeyon/apps/src_membermanage/node/MemberDieNode.java b/src/com/seeyon/apps/src_membermanage/node/MemberDieNode.java new file mode 100644 index 0000000..0256392 --- /dev/null +++ b/src/com/seeyon/apps/src_membermanage/node/MemberDieNode.java @@ -0,0 +1,176 @@ +package com.seeyon.apps.src_membermanage.node; + +import cn.hutool.log.Log; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.common.config.ICstConfigApi; +import com.seeyon.apps.common.plugin.vo.ConfigVo; +import com.seeyon.apps.common.workflow.node.ACommonSuperNode; +import com.seeyon.apps.ext.workflow.vo.FieldDataVo; +import com.seeyon.apps.ext.workflow.vo.FormDataVo; +import com.seeyon.apps.ext.workflow.vo.SuperNodeContext; +import com.seeyon.apps.src_membermanage.constants.MemberManageConstants; +import com.seeyon.apps.src_membermanage.util.DataProcessingUtil; +import com.seeyon.apps.src_membermanage.util.ProtUtil; +import com.seeyon.apps.src_membermanage.vo.MemberManagerResponse; +import com.seeyon.cap4.form.bean.FormDataMasterBean; +import com.seeyon.ctp.common.AppContext; +import www.seeyon.com.utils.StringUtil; + +import java.util.List; +import java.util.Map; + +/** + * 人员死亡档案表超级节点 + */ +public class MemberDieNode extends ACommonSuperNode { + + private static Log log = Log.get(MemberAccountClosureOrganizationNode.class); + protected ICstConfigApi cstConfigApi = (ICstConfigApi) AppContext.getBean("cstConfigApi"); + + @Override + public String getNodeId() { + return "MemberDieNode"; + } + + @Override + public String getNodeName() { + return "人员死亡档案表超级节点"; + } + + @Override + public String getPluginId() { + return MemberManageConstants.getPluginId(); + } + + @Override + public String getFormParse() { + return "json"; + } + public ConfigVo getMemberMamageConfig() { + return cstConfigApi.getConfig(getPluginId()); + } + @Override + public SuperNodeContext proceed(String request, FormDataVo formDataVo, FormDataMasterBean formDataMasterBean) throws Exception { + log.info("进入人事档案表处理流程"+getNodeId()); + ConfigVo configVo = getMemberMamageConfig(); + SuperNodeContext context = new SuperNodeContext(); + context.setNeedSave(true); + JSONObject paramJson = JSONObject.parseObject(request); + String enumFields = paramJson.getString("enumFields"); + String mainUrl = configVo.getParamVal(MemberManageConstants.mainUrl.name()); + String getzsjTokenUrl = configVo.getParamVal(MemberManageConstants.getzsjTokenUrl.name()); + String restzsjUserName = configVo.getParamVal(MemberManageConstants.restzsjUserName.name()); + String restzsjPassword = configVo.getParamVal(MemberManageConstants.restzsjPassword.name()); + String zsjloginName = configVo.getParamVal(MemberManageConstants.zsjloginName.name()); +// 调用接口查询主数据token + String mainToken = ProtUtil.getToken(getzsjTokenUrl,restzsjUserName,restzsjPassword,zsjloginName); +// 获取当前表单数据 +// Map> SubFormMap = formDataVo.getSubFormMap(); + List subForms = formDataVo.getSubFormMap().get("明细表1"); + for (FormDataVo subFormDataVo : subForms) { +// 每一行就是一个变更数据封装封装修改的人员参数执行修改操作 +// 创建唯一值查询参数 + JSONObject isExistUpdateParam = new JSONObject(); + isExistUpdateParam.put("formCode",paramJson.getString("formCode")); + JSONObject uniqueness = new JSONObject(); + JSONObject uniquenessjson = paramJson.getJSONObject("uniqueness"); + for (Map.Entry entry:uniquenessjson.entrySet()) { + FieldDataVo fieldDataVo = subFormDataVo.getFieldData(entry.getValue().toString()); + uniqueness.put(entry.getKey(),fieldDataVo.getDbValue()); + } + isExistUpdateParam.put("uniqueness",uniqueness); +// 调用接口查询当前数据是否存在 + String isExistUpdateUrl = mainUrl+"/seeyon/rest/formTable/quart?token="+mainToken; + String formmainIdUpdate = ProtUtil.doGet(isExistUpdateUrl,isExistUpdateParam); + JSONObject formmainIdUpdatejson = JSONObject.parseObject(formmainIdUpdate); + JSONObject formmainIdUpdateData = formmainIdUpdatejson.getJSONObject("data"); + String formmainUpdate = formmainIdUpdateData.getString("id"); + if(StringUtil.isNotEmpty(formmainUpdate)){ +// 当前数据已经存在执行修改逻辑 + JSONObject param = new JSONObject(); +// 设置基本数据 + param.put("doTrigger",paramJson.getBooleanValue("doTrigger")); + param.put("formCode",paramJson.getString("formCode")); + param.put("loginName",paramJson.getString("loginName")); + param.put("rightId",paramJson.getString("rightIdUpdate")); + JSONArray dataList = new JSONArray(); + JSONObject data = new JSONObject(); + JSONObject paramDataList = paramJson.getJSONObject("dataList"); + JSONObject paramMasterTable = paramDataList.getJSONObject("masterTable"); + JSONObject masterTable = new JSONObject(); + masterTable.put("name",paramMasterTable.getString("name")); + JSONObject record = new JSONObject(); + record.put("id",formmainUpdate); +// 根据主表字段信息,设置主表参数 + JSONArray fields = new JSONArray(); + for (Map.Entry entry : paramMasterTable.getJSONObject("fields").entrySet()) { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("name",entry.getKey()); + String value = entry.getValue().toString(); + FieldDataVo subFieldDataVo; + try { + subFieldDataVo = subFormDataVo.getFieldData(value); + } catch (NoSuchFieldException e) { + subFieldDataVo = formDataVo.getFieldData(value); + } + if(subFieldDataVo.getDbValue() == null){ + jsonObject.put("value",""); + }else{ + if(enumFields.contains(entry.getKey())){ + String subFieldDataDb = subFieldDataVo.getStringValue(); + jsonObject.put("showValue",subFieldDataDb); + }else{ + String subFieldDataDb = subFieldDataVo.getDbValue().toString(); + jsonObject.put("value",subFieldDataDb); + } + } + fields.add(jsonObject); + } + record.put("fields",fields); + masterTable.put("record",record); + data.put("masterTable",masterTable); + + dataList.add(data); + param.put("dataList",dataList); + + context.setRequest(param.toString()); + log.info(param.toString()); +// 获取调用接口路径 + String formmainUpdateUrl = mainUrl+"/seeyon/rest/cap4/form/soap/batch-update?token="+mainToken; + context.setUrl(formmainUpdateUrl); + JSONObject res = ProtUtil.doPost(param.toString(),formmainUpdateUrl); + log.info(res.toString()); + context.setResponse(res.toString()); + MemberManagerResponse mmr = new MemberManagerResponse(res); + if(mmr.isSuccess()){ + String resDatastr = mmr.getData(); + Map resData = DataProcessingUtil.convertStringToMap(resDatastr); + List successIdList = (List)resData.get("successIdList"); + if(successIdList.size()>0){ + String fid = successIdList.get(0); + log.info("档案表修改完成,返回结果为"+resDatastr); + context.success("档案表修改完成,当前档案表ID为"+fid,false); + formDataVo.getNewFieldDataMap().put("返回结果", "档案表修改完成,当前档案表ID为"+fid); + }else{ + Map failedData = (Map)resData.get("failedData"); + for (Map.Entry entry:failedData.entrySet()) { + context.back("档案表修改失败:创建异常:" + entry.getValue()); + context.setErrMsg(mmr.getMsg()); + formDataVo.getNewFieldDataMap().put("返回结果", "档案表修改失败:创建异常:"+entry.getValue()); + } + } + + }else{ + context.back("档案表修改失败:修改异常:" + mmr.getMsg()); + context.setErrMsg(mmr.getMsg()); + formDataVo.getNewFieldDataMap().put("返回结果", "档案表修改失败:修改异常:"+mmr.getMsg()); + } + }else{ + context.success("没有查询到需要修改的数据,跳过处理"); + formDataVo.getNewFieldDataMap().put("返回结果", "没有查询到需要修改的数据,跳过处理"); + } + } + return context; + } +} diff --git a/src/com/seeyon/apps/src_membermanage/node/MemberDimissionNode.java b/src/com/seeyon/apps/src_membermanage/node/MemberDimissionNode.java new file mode 100644 index 0000000..e8a632a --- /dev/null +++ b/src/com/seeyon/apps/src_membermanage/node/MemberDimissionNode.java @@ -0,0 +1,29 @@ +package com.seeyon.apps.src_membermanage.node; + +import com.seeyon.apps.src_membermanage.MemberManageCommonNode; + +/** + * 人员离职档案表超级节点 + */ +public class MemberDimissionNode extends MemberManageCommonNode { + + @Override + public String getMethod() { + return ""; + } + + @Override + public String getRequestType() { + return ""; + } + + @Override + public String getNodeId() { + return "MemberDimissionNode"; + } + + @Override + public String getNodeName() { + return "人员离职档案表超级节点"; + } +} diff --git a/src/com/seeyon/apps/src_membermanage/node/MemberDimissionOrganizationNode.java b/src/com/seeyon/apps/src_membermanage/node/MemberDimissionOrganizationNode.java new file mode 100644 index 0000000..629aed5 --- /dev/null +++ b/src/com/seeyon/apps/src_membermanage/node/MemberDimissionOrganizationNode.java @@ -0,0 +1,21 @@ +package com.seeyon.apps.src_membermanage.node; + +import com.seeyon.apps.src_membermanage.MemberOrganizationCommonNode; + +/** + * 人员离职组织架构超级节点 + */ +public class MemberDimissionOrganizationNode extends MemberOrganizationCommonNode { + + @Override + public String getMethod() {return "";} + + @Override + public String getRequestType() {return "";} + + @Override + public String getNodeId() {return "MemberDimissionOrganizationNode";} + + @Override + public String getNodeName() {return "人员离职组织架构超级节点";} +} diff --git a/src/com/seeyon/apps/src_membermanage/node/MemberDimissionTalentsNode.java b/src/com/seeyon/apps/src_membermanage/node/MemberDimissionTalentsNode.java new file mode 100644 index 0000000..abfeb38 --- /dev/null +++ b/src/com/seeyon/apps/src_membermanage/node/MemberDimissionTalentsNode.java @@ -0,0 +1,29 @@ +package com.seeyon.apps.src_membermanage.node; + +import com.seeyon.apps.src_membermanage.MemberManageCommonNode; + +/** + * 人员离职人才库档案表超级节点 + */ +public class MemberDimissionTalentsNode extends MemberManageCommonNode { + + @Override + public String getMethod() { + return ""; + } + + @Override + public String getRequestType() { + return ""; + } + + @Override + public String getNodeId() { + return "MemberDimissionTalentsNode"; + } + + @Override + public String getNodeName() { + return "人员离职人才库档案表超级节点"; + } +} diff --git a/src/com/seeyon/apps/src_membermanage/node/MemberEducationNode.java b/src/com/seeyon/apps/src_membermanage/node/MemberEducationNode.java new file mode 100644 index 0000000..a5e708d --- /dev/null +++ b/src/com/seeyon/apps/src_membermanage/node/MemberEducationNode.java @@ -0,0 +1,29 @@ +package com.seeyon.apps.src_membermanage.node; + +import com.seeyon.apps.src_membermanage.MemberManageCommonNode; + +/** + * 人员教育经历档案表超级节点 + */ +public class MemberEducationNode extends MemberManageCommonNode { + + @Override + public String getMethod() { + return ""; + } + + @Override + public String getRequestType() { + return ""; + } + + @Override + public String getNodeId() { + return "MemberEducationNode"; + } + + @Override + public String getNodeName() { + return "人员教育经历档案表超级节点"; + } +} diff --git a/src/com/seeyon/apps/src_membermanage/node/MemberEmployNode.java b/src/com/seeyon/apps/src_membermanage/node/MemberEmployNode.java new file mode 100644 index 0000000..b0ce06b --- /dev/null +++ b/src/com/seeyon/apps/src_membermanage/node/MemberEmployNode.java @@ -0,0 +1,203 @@ +package com.seeyon.apps.src_membermanage.node; + +import cn.hutool.log.Log; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.common.config.ICstConfigApi; +import com.seeyon.apps.common.plugin.vo.ConfigVo; +import com.seeyon.apps.common.workflow.constants.WorkFlowType; +import com.seeyon.apps.common.workflow.node.ACommonSuperNode; +import com.seeyon.apps.ext.workflow.vo.FieldDataVo; +import com.seeyon.apps.ext.workflow.vo.FormDataVo; +import com.seeyon.apps.ext.workflow.vo.SuperNodeContext; +import com.seeyon.apps.src_membermanage.constants.MemberManageConstants; +import com.seeyon.apps.src_membermanage.util.DataProcessingUtil; +import com.seeyon.apps.src_membermanage.util.ParamUtil; +import com.seeyon.apps.src_membermanage.util.ProtUtil; +import com.seeyon.apps.src_membermanage.vo.MemberManagerResponse; +import com.seeyon.cap4.form.bean.FormDataMasterBean; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.common.ctpenumnew.manager.EnumManager; +import com.seeyon.ctp.common.po.ctpenumnew.CtpEnumItem; +import www.seeyon.com.utils.StringUtil; + +import java.util.List; +import java.util.Map; + +/** + * 员工录用审批超级节点 + */ +public class MemberEmployNode extends ACommonSuperNode { + + private static Log log = Log.get(MemberEmployNode.class); + + protected ICstConfigApi cstConfigApi = (ICstConfigApi) AppContext.getBean("cstConfigApi"); + + private EnumManager enumManagerNew; + public void setEnumManagerNew(EnumManager enumManagerNew) {this.enumManagerNew = enumManagerNew; } + public EnumManager getEnumManagerNew() { + if (enumManagerNew == null) {enumManagerNew = (EnumManager) AppContext.getBean("enumManagerNew");}return enumManagerNew; + } + + + @Override + public String getNodeId() { + return "MemberEmployNode"; + } + + @Override + public String getNodeName() { + return "员工录用审批超级节点"; + } + + @Override + public String getPluginId() { + return MemberManageConstants.getPluginId(); + } + @Override + public WorkFlowType[] getTypes() { + return new WorkFlowType[] {WorkFlowType.superNode}; + } + + public ConfigVo getMemberMamageConfig() { + return cstConfigApi.getConfig(getPluginId()); + } + + @Override + public String getFormParse() { + return "json"; + } + + @Override + public SuperNodeContext proceed(String request, FormDataVo formDataVo, FormDataMasterBean formDataMasterBean) throws Exception { + log.info("进入员工录用审批处理流程"+getNodeId()); + ConfigVo configVo = getMemberMamageConfig(); + SuperNodeContext context = new SuperNodeContext(); + context.setNeedSave(true); + ParamUtil paramUtil = new ParamUtil(); +// 判断是否已经推送成功 + FieldDataVo fhjg = formDataVo.getFieldData("返回结果"); + String fhvalue = fhjg.getStringValue(); + if(fhvalue.startsWith("推送成功")) { + return context.success("跳过:" + fhvalue); + } +// 判断当前结果请求是否为新增 + JSONObject requestJson = JSONObject.parseObject(request); +// String addOrUpdate = requestJson.getString("addOrUpdate"); + + String mainUrl = configVo.getParamVal(MemberManageConstants.mainUrl.name()); + String getzsjTokenUrl = configVo.getParamVal(MemberManageConstants.getzsjTokenUrl.name()); + String restzsjUserName = configVo.getParamVal(MemberManageConstants.restzsjUserName.name()); + String restzsjPassword = configVo.getParamVal(MemberManageConstants.restzsjPassword.name()); + String zsjloginName = configVo.getParamVal(MemberManageConstants.zsjloginName.name()); +// 调用接口查询主数据token + String mainToken = ProtUtil.getToken(getzsjTokenUrl,restzsjUserName,restzsjPassword,zsjloginName); + System.out.println("修改"); +// 获取明细表录用明细 +// Map> subFormMap = formDataVo.getSubFormMap(); + List subFormDataVoList = formDataVo.getSubFormMap().get("录用详细"); +// 遍历所有明细行数据 + for (FormDataVo subFormDataVo :subFormDataVoList) { + JSONObject isExistUpdateParam = new JSONObject(); + isExistUpdateParam.put("formCode", requestJson.getString("formCode")); + JSONObject uniqueness = new JSONObject(); + JSONObject uniquenessjson = requestJson.getJSONObject("uniqueness"); + for (Map.Entry entry : uniquenessjson.entrySet()) { + FieldDataVo fieldDataVo = subFormDataVo.getFieldData(entry.getValue().toString()); + uniqueness.put(entry.getKey(), fieldDataVo.getDbValue()); + } + isExistUpdateParam.put("uniqueness", uniqueness); +// 调用接口查询当前数据是否存在 + String isExistUpdateUrl = mainUrl + "/seeyon/rest/formTable/quart?token=" + mainToken; + String formmainIdUpdate = ProtUtil.doGet(isExistUpdateUrl, isExistUpdateParam); + JSONObject formmainIdUpdatejson = JSONObject.parseObject(formmainIdUpdate); + JSONObject formmainIdUpdateData = formmainIdUpdatejson.getJSONObject("data"); + String formmainUpdate = formmainIdUpdateData.getString("id"); + if (StringUtil.isNotEmpty(formmainUpdate)) { +// 当前数据已经存在执行修改逻辑 +// String param = paramUtil.memberEmployParam(request, formDataVo, getNodeId(), configVo, formmainUpdate); + JSONObject memberEmployParam = new JSONObject(); + memberEmployParam.put("formCode",requestJson.getString("formCode")); + memberEmployParam.put("rightId",requestJson.getString("rightIdUpdate")); + memberEmployParam.put("doTrigger",requestJson.getBooleanValue("doTrigger")); + memberEmployParam.put("loginName",requestJson.getString("loginName")); + JSONArray dataList = new JSONArray(); + JSONObject data = new JSONObject(); + JSONObject masterTable = new JSONObject(); + masterTable.put("name","formmain_0192"); + JSONObject record = new JSONObject(); + record.put("id",formmainUpdate); + JSONArray fields = new JSONArray(); + + JSONObject field0074 = new JSONObject(); + field0074.put("name","field0074"); + FieldDataVo xtvo = formDataVo.getFieldData("系统"); + String xtdbValue = xtvo.getDbValue().toString(); + long xtenumItemId = Long.parseLong(xtdbValue); + CtpEnumItem xtctpEnumItem = getEnumManagerNew().getCtpEnumItem(xtenumItemId); + field0074.put("showValue",xtctpEnumItem.getShowvalue()); + fields.add(field0074); + + JSONObject field0053 = new JSONObject(); + field0053.put("name","field0053"); + FieldDataVo nlydwvo = formDataVo.getFieldData("用人单位"); + String nlydwdbValue = nlydwvo.getDbValue().toString(); + field0053.put("value",nlydwdbValue); + fields.add(field0053); + + JSONObject field0051 = new JSONObject(); + field0051.put("name","field0051"); + FieldDataVo nlybmvo = subFormDataVo.getFieldData("拟录部门"); + String nlybmValue = nlybmvo.getDbValue().toString(); + field0051.put("value",nlybmValue); + fields.add(field0051); + + JSONObject field0052 = new JSONObject(); + field0052.put("name","field0052"); + FieldDataVo nlygwvo = subFormDataVo.getFieldData("拟录用岗位"); + String nlygwValue = nlygwvo.getDbValue().toString(); + field0052.put("value",nlygwValue); + fields.add(field0052); + + record.put("fields",fields); + masterTable.put("record",record); + data.put("masterTable",masterTable); + dataList.add(data); + memberEmployParam.put("dataList",dataList); + + String param = memberEmployParam.toString(); + context.setRequest(param); + log.info(param); +// 获取调用接口路径 + String formmainUpdateUrl = mainUrl + "/seeyon/rest/cap4/form/soap/batch-update?token=" + mainToken; + context.setUrl(formmainUpdateUrl); + JSONObject res = ProtUtil.doPost(param, formmainUpdateUrl); + log.info(res.toString()); + context.setResponse(res.toString()); + MemberManagerResponse mmr = new MemberManagerResponse(res); + if (mmr.isSuccess()) { + String resDatastr = mmr.getData(); + Map resData = DataProcessingUtil.convertStringToMap(resDatastr); + List successIdList = (List) resData.get("successIdList"); + if (successIdList.size() > 0) { + String fid = successIdList.get(0); + log.info("档案表修改完成,返回结果为" + resDatastr); + context.success("档案表修改完成,当前档案表ID为" + fid, false); + formDataVo.getNewFieldDataMap().put("返回结果", "档案表修改完成,当前档案表ID为" + fid); + } else { + Map failedData = (Map) resData.get("failedData"); + for (Map.Entry entry : failedData.entrySet()) { + context.back("档案表修改失败:创建异常:" + entry.getValue()); + context.setErrMsg(mmr.getMsg()); + formDataVo.getNewFieldDataMap().put("返回结果", "档案表修改失败:创建异常:" + entry.getValue()); + } + } + } + }else{ + context.success("没有查询到需要修改的数据,跳过处理"); + formDataVo.getNewFieldDataMap().put("返回结果", "没有查询到需要修改的数据,跳过处理"); + } + } + return context; + } +} diff --git a/src/com/seeyon/apps/src_membermanage/node/MemberEntryNode.java b/src/com/seeyon/apps/src_membermanage/node/MemberEntryNode.java new file mode 100644 index 0000000..90f4f38 --- /dev/null +++ b/src/com/seeyon/apps/src_membermanage/node/MemberEntryNode.java @@ -0,0 +1,29 @@ +package com.seeyon.apps.src_membermanage.node; + +import com.seeyon.apps.src_membermanage.MemberManageCommonNode; + +/** + * 人员入职档案表超级节点 + */ +public class MemberEntryNode extends MemberManageCommonNode { + + @Override + public String getMethod() { + return ""; + } + + @Override + public String getRequestType() { + return ""; + } + + @Override + public String getNodeId() { + return "MemberEntryNode"; + } + + @Override + public String getNodeName() { + return "人员入职档案表超级节点"; + } +} diff --git a/src/com/seeyon/apps/src_membermanage/node/MemberEntryOrganizationNode.java b/src/com/seeyon/apps/src_membermanage/node/MemberEntryOrganizationNode.java new file mode 100644 index 0000000..e1ba8f1 --- /dev/null +++ b/src/com/seeyon/apps/src_membermanage/node/MemberEntryOrganizationNode.java @@ -0,0 +1,22 @@ +package com.seeyon.apps.src_membermanage.node; + +import com.seeyon.apps.src_membermanage.MemberOrganizationCommonNode; + + +/** + * 人员入职组织架构超级节点 + */ +public class MemberEntryOrganizationNode extends MemberOrganizationCommonNode { + + @Override + public String getMethod() {return "";} + + @Override + public String getRequestType() {return "";} + + @Override + public String getNodeId() {return "MemberEntryOrganizationNode";} + + @Override + public String getNodeName() {return "人员入职组织架构超级节点";} +} diff --git a/src/com/seeyon/apps/src_membermanage/node/MemberEntryTalentsNode.java b/src/com/seeyon/apps/src_membermanage/node/MemberEntryTalentsNode.java new file mode 100644 index 0000000..20c39a3 --- /dev/null +++ b/src/com/seeyon/apps/src_membermanage/node/MemberEntryTalentsNode.java @@ -0,0 +1,29 @@ +package com.seeyon.apps.src_membermanage.node; + +import com.seeyon.apps.src_membermanage.MemberManageCommonNode; + +/** + * 人员入职人才库档案表超级节点 + */ +public class MemberEntryTalentsNode extends MemberManageCommonNode { + + @Override + public String getMethod() { + return ""; + } + + @Override + public String getRequestType() { + return ""; + } + + @Override + public String getNodeId() { + return "MemberEntryTalentsNode"; + } + + @Override + public String getNodeName() { + return "人员入职人才库档案表超级节点"; + } +} diff --git a/src/com/seeyon/apps/src_membermanage/node/MemberFamilyNode.java b/src/com/seeyon/apps/src_membermanage/node/MemberFamilyNode.java new file mode 100644 index 0000000..5b1a970 --- /dev/null +++ b/src/com/seeyon/apps/src_membermanage/node/MemberFamilyNode.java @@ -0,0 +1,29 @@ +package com.seeyon.apps.src_membermanage.node; + +import com.seeyon.apps.src_membermanage.MemberManageCommonNode; + +/** + * 人员家庭情况档案表超级节点 + */ +public class MemberFamilyNode extends MemberManageCommonNode { + + @Override + public String getMethod() { + return ""; + } + + @Override + public String getRequestType() { + return ""; + } + + @Override + public String getNodeId() { + return "MemberFamilyNode"; + } + + @Override + public String getNodeName() { + return "人员家庭情况档案表超级节点"; + } +} diff --git a/src/com/seeyon/apps/src_membermanage/node/MemberHonorNode.java b/src/com/seeyon/apps/src_membermanage/node/MemberHonorNode.java new file mode 100644 index 0000000..c1fa733 --- /dev/null +++ b/src/com/seeyon/apps/src_membermanage/node/MemberHonorNode.java @@ -0,0 +1,29 @@ +package com.seeyon.apps.src_membermanage.node; + +import com.seeyon.apps.src_membermanage.MemberManageCommonNode; + +/** + * 人员荣誉档案表超级节点 + */ +public class MemberHonorNode extends MemberManageCommonNode { + + @Override + public String getMethod() { + return ""; + } + + @Override + public String getRequestType() { + return ""; + } + + @Override + public String getNodeId() { + return "MemberHonorNode"; + } + + @Override + public String getNodeName() { + return "人员荣誉档案表超级节点"; + } +} diff --git a/src/com/seeyon/apps/src_membermanage/node/MemberInterviewResultNode.java b/src/com/seeyon/apps/src_membermanage/node/MemberInterviewResultNode.java new file mode 100644 index 0000000..fb849f7 --- /dev/null +++ b/src/com/seeyon/apps/src_membermanage/node/MemberInterviewResultNode.java @@ -0,0 +1,232 @@ +package com.seeyon.apps.src_membermanage.node; + +import cn.hutool.log.Log; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.common.config.ICstConfigApi; +import com.seeyon.apps.common.plugin.vo.ConfigVo; +import com.seeyon.apps.common.workflow.node.ACommonSuperNode; +import com.seeyon.apps.ext.workflow.vo.FieldDataVo; +import com.seeyon.apps.ext.workflow.vo.FormDataVo; +import com.seeyon.apps.ext.workflow.vo.SuperNodeContext; +import com.seeyon.apps.src_membermanage.constants.MemberManageConstants; +import com.seeyon.apps.src_membermanage.util.DataProcessingUtil; +import com.seeyon.apps.src_membermanage.util.ProtUtil; +import com.seeyon.apps.src_membermanage.vo.MemberManagerResponse; +import com.seeyon.cap4.form.bean.FormDataMasterBean; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.common.ctpenumnew.manager.EnumManager; +import com.seeyon.ctp.common.po.ctpenumnew.CtpEnumItem; +import com.seeyon.ctp.util.UUIDLong; +import www.seeyon.com.utils.StringUtil; + +import java.util.List; +import java.util.Map; + +/** + * 人员面试结果登记档案表超级节点 + */ +public class MemberInterviewResultNode extends ACommonSuperNode { + + private static Log log = Log.get(MemberInterviewResultNode.class); + protected ICstConfigApi cstConfigApi = (ICstConfigApi) AppContext.getBean("cstConfigApi"); + + @Override + public String getNodeId() { + return "MemberInterviewResultNode"; + } + + @Override + public String getNodeName() { + return "人员面试结果登记档案表超级节点"; + } + + @Override + public String getPluginId() { + return MemberManageConstants.getPluginId(); + } + + @Override + public String getFormParse() { + return "json"; + } + + public ConfigVo getMemberMamageConfig() { + return cstConfigApi.getConfig(getPluginId()); + } + + private EnumManager enumManagerNew; + public void setEnumManagerNew(EnumManager enumManagerNew) {this.enumManagerNew = enumManagerNew; } + public EnumManager getEnumManagerNew() { + if (enumManagerNew == null) {enumManagerNew = (EnumManager) AppContext.getBean("enumManagerNew");}return enumManagerNew; + } + + + @Override + public SuperNodeContext proceed(String request, FormDataVo formDataVo, FormDataMasterBean formDataMasterBean) throws Exception { + log.info("进入人事档案表处理流程"+getNodeId()); + ConfigVo configVo = getMemberMamageConfig(); + SuperNodeContext context = new SuperNodeContext(); + context.setNeedSave(true); + JSONObject paramJson = JSONObject.parseObject(request); + String enumFields = paramJson.getString("enumFields"); + String mainUrl = configVo.getParamVal(MemberManageConstants.mainUrl.name()); + String getzsjTokenUrl = configVo.getParamVal(MemberManageConstants.getzsjTokenUrl.name()); + String restzsjUserName = configVo.getParamVal(MemberManageConstants.restzsjUserName.name()); + String restzsjPassword = configVo.getParamVal(MemberManageConstants.restzsjPassword.name()); + String zsjloginName = configVo.getParamVal(MemberManageConstants.zsjloginName.name()); +// 调用接口查询主数据token + String mainToken = ProtUtil.getToken(getzsjTokenUrl,restzsjUserName,restzsjPassword,zsjloginName); +// 获取当前表单数据 +// Map> SubFormMap = formDataVo.getSubFormMap(); + List subForms = formDataVo.getSubFormMap().get("录用详细"); + for (FormDataVo subFormDataVo : subForms) { +// 每一行就是一个变更数据封装封装修改的人员参数执行修改操作 +// 创建唯一值查询参数 + JSONObject isExistUpdateParam = new JSONObject(); + isExistUpdateParam.put("formCode",paramJson.getString("formCode")); + JSONObject uniqueness = new JSONObject(); + JSONObject uniquenessjson = paramJson.getJSONObject("uniqueness"); + for (Map.Entry entry:uniquenessjson.entrySet()) { + FieldDataVo fieldDataVo = subFormDataVo.getFieldData(entry.getValue().toString()); + uniqueness.put(entry.getKey(),fieldDataVo.getDbValue()); + } + isExistUpdateParam.put("uniqueness",uniqueness); +// 调用接口查询当前数据是否存在 + String isExistUpdateUrl = mainUrl+"/seeyon/rest/formTable/quart?token="+mainToken; + String formmainIdUpdate = ProtUtil.doGet(isExistUpdateUrl,isExistUpdateParam); + JSONObject formmainIdUpdatejson = JSONObject.parseObject(formmainIdUpdate); + JSONObject formmainIdUpdateData = formmainIdUpdatejson.getJSONObject("data"); + String formmainUpdate = formmainIdUpdateData.getString("id"); + if(StringUtil.isNotEmpty(formmainUpdate)){ +// 当前数据已经存在执行修改逻辑 + JSONObject param = new JSONObject(); +// 设置基本数据 + param.put("doTrigger",paramJson.getBooleanValue("doTrigger")); + param.put("formCode",paramJson.getString("formCode")); + param.put("loginName",paramJson.getString("loginName")); + param.put("rightId",paramJson.getString("rightIdUpdate")); + JSONArray dataList = new JSONArray(); + JSONObject data = new JSONObject(); + JSONObject paramDataList = paramJson.getJSONObject("dataList"); + JSONObject paramMasterTable = paramDataList.getJSONObject("masterTable"); + JSONObject masterTable = new JSONObject(); + masterTable.put("name",paramMasterTable.getString("name")); + JSONObject record = new JSONObject(); + record.put("id",formmainUpdate); +// 根据主表字段信息,设置主表参数 + JSONArray fields = new JSONArray(); + for (Map.Entry entry : paramMasterTable.getJSONObject("fields").entrySet()) { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("name",entry.getKey()); + String value = entry.getValue().toString(); + FieldDataVo subFieldDataVo ; + try { + subFieldDataVo = subFormDataVo.getFieldData(value); + } catch (NoSuchFieldException e) { + subFieldDataVo = formDataVo.getFieldData(value); + } + if(subFieldDataVo.getDbValue() == null ){ + jsonObject.put("value",""); + }else{ + String subFieldDataDb = subFieldDataVo.getDbValue().toString(); + if(enumFields.contains(entry.getKey())){ + CtpEnumItem ctpEnumItem = getEnumManagerNew().getCtpEnumItem(Long.parseLong(subFieldDataDb)); + String showvalue = ctpEnumItem.getShowvalue(); + jsonObject.put("showValue",showvalue); + }else { + jsonObject.put("value",subFieldDataDb); + } + } + fields.add(jsonObject); + } + record.put("fields",fields); + masterTable.put("record",record); + data.put("masterTable",masterTable); +// 根据明细表字段信息,设置明细表参数 + JSONArray subTables = new JSONArray(); + JSONArray paramSubTables = paramDataList.getJSONArray("subTables"); + for(int i = 0 ; i < paramSubTables.size();i++){ + JSONObject paramSubTable = paramSubTables.getJSONObject(i); + JSONObject subTable = new JSONObject(); + subTable.put("name",paramSubTable.getString("tableName")); + JSONArray subRecords = new JSONArray(); + JSONObject subRecord = new JSONObject(); + subRecord.put("id", UUIDLong.longUUID()+""); + JSONArray subFields = new JSONArray(); + for (Map.Entry entry : paramSubTable.getJSONObject("fields").entrySet()) { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("name",entry.getKey()); + String value = entry.getValue().toString(); + FieldDataVo subFieldDataVo =subFormDataVo.getFieldData(value); +// if("成绩".equals(value)){ +// subFieldDataVo = formDataVo.getFieldData(value); +// }else{ +// subFieldDataVo = subFormDataVo.getFieldData(value); +// } + if(subFieldDataVo.getDbValue() == null ){ + jsonObject.put("value",""); + }else{ + String subFieldDataDb = subFieldDataVo.getDbValue().toString(); + jsonObject.put("value",subFieldDataDb); + } + String subFieldDataDb = subFieldDataVo.getDbValue().toString(); + if(enumFields.contains(entry.getKey())){ + CtpEnumItem ctpEnumItem = getEnumManagerNew().getCtpEnumItem(Long.parseLong(subFieldDataDb)); + String showvalue = ctpEnumItem.getShowvalue(); + jsonObject.put("showValue",showvalue); + }else { + jsonObject.put("value",subFieldDataDb); + } + subFields.add(jsonObject); + } + subRecord.put("fields",subFields); + subRecords.add(subRecord); + subTable.put("records",subRecords); + subTables.add(subTable); + } + data.put("subTables",subTables); + + dataList.add(data); + param.put("dataList",dataList); + + context.setRequest(param.toString()); + log.info(param.toString()); +// 获取调用接口路径 + String formmainUpdateUrl = mainUrl+"/seeyon/rest/cap4/form/soap/batch-update?token="+mainToken; + context.setUrl(formmainUpdateUrl); + JSONObject res = ProtUtil.doPost(param.toString(),formmainUpdateUrl); + log.info(res.toString()); + context.setResponse(res.toString()); + MemberManagerResponse mmr = new MemberManagerResponse(res); + if(mmr.isSuccess()){ + String resDatastr = mmr.getData(); + Map resData = DataProcessingUtil.convertStringToMap(resDatastr); + List successIdList = (List)resData.get("successIdList"); + if(successIdList.size()>0){ + String fid = successIdList.get(0); + log.info("档案表修改完成,返回结果为"+resDatastr); + context.success("档案表修改完成,当前档案表ID为"+fid,false); + formDataVo.getNewFieldDataMap().put("返回结果", "档案表修改完成,当前档案表ID为"+fid); + }else{ + Map failedData = (Map)resData.get("failedData"); + for (Map.Entry entry:failedData.entrySet()) { + context.back("档案表修改失败:创建异常:" + entry.getValue()); + context.setErrMsg(mmr.getMsg()); + formDataVo.getNewFieldDataMap().put("返回结果", "档案表修改失败:创建异常:"+entry.getValue()); + } + } + + }else{ + context.back("档案表修改失败:修改异常:" + mmr.getMsg()); + context.setErrMsg(mmr.getMsg()); + formDataVo.getNewFieldDataMap().put("返回结果", "档案表修改失败:修改异常:"+mmr.getMsg()); + } + }else{ + context.success("没有查询到需要修改的数据,跳过处理"); + formDataVo.getNewFieldDataMap().put("返回结果", "没有查询到需要修改的数据,跳过处理"); + } + } + return context; + } +} diff --git a/src/com/seeyon/apps/src_membermanage/node/MemberMoveNode.java b/src/com/seeyon/apps/src_membermanage/node/MemberMoveNode.java new file mode 100644 index 0000000..6e66393 --- /dev/null +++ b/src/com/seeyon/apps/src_membermanage/node/MemberMoveNode.java @@ -0,0 +1,29 @@ +package com.seeyon.apps.src_membermanage.node; + +import com.seeyon.apps.src_membermanage.MemberManageCommonNode; + +/** + * 人员调动超级节点 + */ +public class MemberMoveNode extends MemberManageCommonNode { + + @Override + public String getMethod() { + return ""; + } + + @Override + public String getRequestType() { + return ""; + } + + @Override + public String getNodeId() { + return "MemberMoveNode"; + } + + @Override + public String getNodeName() { + return "人员调动超级节点"; + } +} diff --git a/src/com/seeyon/apps/src_membermanage/node/MemberMoveOrganizationNode.java b/src/com/seeyon/apps/src_membermanage/node/MemberMoveOrganizationNode.java new file mode 100644 index 0000000..fc94e81 --- /dev/null +++ b/src/com/seeyon/apps/src_membermanage/node/MemberMoveOrganizationNode.java @@ -0,0 +1,22 @@ +package com.seeyon.apps.src_membermanage.node; + +import com.seeyon.apps.src_membermanage.MemberOrganizationCommonNode; + + +/** + * 人员调动组织架构超级节点 + */ +public class MemberMoveOrganizationNode extends MemberOrganizationCommonNode { + + @Override + public String getMethod() {return "";} + + @Override + public String getRequestType() {return "";} + + @Override + public String getNodeId() {return "MemberMoveOrganizationNode";} + + @Override + public String getNodeName() {return "人员调动组织架构超级节点";} +} diff --git a/src/com/seeyon/apps/src_membermanage/node/MemberPerformanceNode.java b/src/com/seeyon/apps/src_membermanage/node/MemberPerformanceNode.java new file mode 100644 index 0000000..43d96cd --- /dev/null +++ b/src/com/seeyon/apps/src_membermanage/node/MemberPerformanceNode.java @@ -0,0 +1,261 @@ +package com.seeyon.apps.src_membermanage.node; + +import cn.hutool.log.Log; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.common.config.ICstConfigApi; +import com.seeyon.apps.common.plugin.vo.ConfigVo; +import com.seeyon.apps.common.workflow.node.ACommonSuperNode; +import com.seeyon.apps.ext.workflow.vo.FieldDataVo; +import com.seeyon.apps.ext.workflow.vo.FormDataVo; +import com.seeyon.apps.ext.workflow.vo.SuperNodeContext; +import com.seeyon.apps.src_membermanage.constants.MemberManageConstants; +import com.seeyon.apps.src_membermanage.util.DataProcessingUtil; +import com.seeyon.apps.src_membermanage.util.ProtUtil; +import com.seeyon.apps.src_membermanage.vo.MemberManagerResponse; +import com.seeyon.cap4.form.bean.FormDataMasterBean; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.common.SystemEnvironment; +import com.seeyon.ctp.common.filemanager.manager.AttachmentManager; +import com.seeyon.ctp.common.po.filemanager.Attachment; +import com.seeyon.ctp.util.UUIDLong; +import www.seeyon.com.utils.StringUtil; + +import java.io.IOException; +import java.util.List; +import java.util.Map; + +/** + * 人员绩效记录档案表超级节点 + */ +public class MemberPerformanceNode extends ACommonSuperNode { + + private static Log log = Log.get(MemberPerformanceNode.class); + protected ICstConfigApi cstConfigApi = (ICstConfigApi) AppContext.getBean("cstConfigApi"); + + private AttachmentManager attachmentManager; + public void setAttachmentManager(AttachmentManager attachmentManager) {this.attachmentManager = attachmentManager;} + public AttachmentManager getAttachmentManagery() { + if (this.attachmentManager == null) {this.attachmentManager = (AttachmentManager) AppContext.getBean("attachmentManager");}return this.attachmentManager; + } + + @Override + public String getNodeId() { + return "MemberPerformanceNode"; + } + + @Override + public String getNodeName() { + return "人员绩效记录档案表超级节点"; + } + + @Override + public String getPluginId() { + return MemberManageConstants.getPluginId(); + } + + @Override + public String getFormParse() { + return "json"; + } + + public ConfigVo getMemberMamageConfig() { + return cstConfigApi.getConfig(getPluginId()); + } + + public String getjtToken(ConfigVo configVo) throws IOException { + String getTokenUrl = configVo.getParamVal(MemberManageConstants.getTokenUrl.name()); + String restUserName = configVo.getParamVal(MemberManageConstants.restUserName.name()); + String restPassword = configVo.getParamVal(MemberManageConstants.restPassword.name()); + String loginName = configVo.getParamVal(MemberManageConstants.loginName.name()); + String jttoken = ProtUtil.getToken(getTokenUrl,restUserName,restPassword,loginName); + return jttoken; + } + + @Override + public SuperNodeContext proceed(String request, FormDataVo formDataVo, FormDataMasterBean formDataMasterBean) throws Exception { + log.info("进入人事档案表处理流程"+getNodeId()); + ConfigVo configVo = getMemberMamageConfig(); + SuperNodeContext context = new SuperNodeContext(); + context.setNeedSave(true); + JSONObject paramJson = JSONObject.parseObject(request); + String mainUrl = configVo.getParamVal(MemberManageConstants.mainUrl.name()); + String getzsjTokenUrl = configVo.getParamVal(MemberManageConstants.getzsjTokenUrl.name()); + String restzsjUserName = configVo.getParamVal(MemberManageConstants.restzsjUserName.name()); + String restzsjPassword = configVo.getParamVal(MemberManageConstants.restzsjPassword.name()); + String zsjloginName = configVo.getParamVal(MemberManageConstants.zsjloginName.name()); +// 调用接口查询主数据token + String mainToken = ProtUtil.getToken(getzsjTokenUrl,restzsjUserName,restzsjPassword,zsjloginName); +// 获取当前表单数据 +// Map> SubFormMap = formDataVo.getSubFormMap(); + List subForms = formDataVo.getSubFormMap().get("明细表1"); + for (FormDataVo subFormDataVo : subForms) { +// 每一行就是一个变更数据封装封装修改的人员参数执行修改操作 +// 创建唯一值查询参数 + JSONObject isExistUpdateParam = new JSONObject(); + isExistUpdateParam.put("formCode",paramJson.getString("formCode")); + JSONObject uniqueness = new JSONObject(); + JSONObject uniquenessjson = paramJson.getJSONObject("uniqueness"); + for (Map.Entry entry:uniquenessjson.entrySet()) { + FieldDataVo fieldDataVo = subFormDataVo.getFieldData(entry.getValue().toString()); + uniqueness.put(entry.getKey(),fieldDataVo.getDbValue()); + } + isExistUpdateParam.put("uniqueness",uniqueness); +// 调用接口查询当前数据是否存在 + String isExistUpdateUrl = mainUrl+"/seeyon/rest/formTable/quart?token="+mainToken; + String formmainIdUpdate = ProtUtil.doGet(isExistUpdateUrl,isExistUpdateParam); + JSONObject formmainIdUpdatejson = JSONObject.parseObject(formmainIdUpdate); + JSONObject formmainIdUpdateData = formmainIdUpdatejson.getJSONObject("data"); + String formmainUpdate = formmainIdUpdateData.getString("id"); + if(StringUtil.isNotEmpty(formmainUpdate)){ +// 当前数据已经存在执行修改逻辑 + JSONObject param = new JSONObject(); +// 设置基本数据 + param.put("doTrigger",paramJson.getBooleanValue("doTrigger")); + param.put("formCode",paramJson.getString("formCode")); + param.put("loginName",paramJson.getString("loginName")); + param.put("rightId",paramJson.getString("rightIdUpdate")); + JSONArray dataList = new JSONArray(); + JSONObject data = new JSONObject(); + JSONObject paramDataList = paramJson.getJSONObject("dataList"); + JSONObject paramMasterTable = paramDataList.getJSONObject("masterTable"); + JSONObject masterTable = new JSONObject(); + masterTable.put("name",paramMasterTable.getString("name")); + JSONObject record = new JSONObject(); + record.put("id",formmainUpdate); +// 根据主表字段信息,设置主表参数 + JSONArray fields = new JSONArray(); + for (Map.Entry entry : paramMasterTable.getJSONObject("fields").entrySet()) { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("name",entry.getKey()); + String value = entry.getValue().toString(); + FieldDataVo subFieldDataVo = subFormDataVo.getFieldData(value); + String subFieldDataDb = subFieldDataVo.getDbValue().toString(); + jsonObject.put("value",subFieldDataDb); + fields.add(jsonObject); + } + record.put("fields",fields); + masterTable.put("record",record); + data.put("masterTable",masterTable); +// 根据明细表字段信息,设置明细表参数 + JSONArray subTables = new JSONArray(); + JSONArray paramSubTables = paramDataList.getJSONArray("subTables"); + JSONArray attachmentInfos = new JSONArray(); + for(int i = 0 ; i < paramSubTables.size();i++){ + JSONObject paramSubTable = paramSubTables.getJSONObject(i); + JSONObject subTable = new JSONObject(); + subTable.put("name",paramSubTable.getString("tableName")); + JSONArray subRecords = new JSONArray(); + JSONObject subRecord = new JSONObject(); + subRecord.put("id", UUIDLong.longUUID()+""); + JSONArray subFields = new JSONArray(); + for (Map.Entry entry : paramSubTable.getJSONObject("fields").entrySet()) { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("name",entry.getKey()); + String value = entry.getValue().toString(); + FieldDataVo subFieldDataVo; + try { + subFieldDataVo = subFormDataVo.getFieldData(value); + } catch (NoSuchFieldException e) { + subFieldDataVo = formDataVo.getFieldData(value); + } + if("明细附件".equals(value)){ +// 获取附件控件的数据 + if (subFieldDataVo.getDbValue() != null) { + String dbValue = subFieldDataVo.getDbValue().toString(); + List attachmentIds = getAttachmentManagery().getBySubReference(Long.parseLong(dbValue)); +// 获取当前附件控件的所有附件信息 + for (int n = 0; n < attachmentIds.size(); n++) { +// 进行附件下载后上传至目标系统中 + Attachment attachment = getAttachmentManagery().getAttachmentByFileURL(attachmentIds.get(n)); + Long fileUrl = attachment.getFileUrl(); + String filename = attachment.getFilename(); +// String[] fileType = filename.split("\\."); + String fileType = filename.substring(filename.lastIndexOf(".") + 1); + String oaFileName = filename.substring(0, filename.lastIndexOf(".")); +// 调用接口下载文件,文件存放在指定的路径下 + String dowUrl = configVo.getParamVal(MemberManageConstants.dowUrl.name()) + "/" + fileUrl + "?fileName=" + fileType + "&token=" + getjtToken(configVo); + log.info("下载URL:" + dowUrl); + String str = SystemEnvironment.getApplicationFolder(); + String dowPath = str + "/memberfiles/" + formDataVo.getId() + "/" + filename; + log.info("下载地址:" + dowPath); + String download = ProtUtil.download(dowUrl, dowPath); +// String str = SystemEnvironment.getApplicationFolder(); + String uploadUrl = configVo.getParamVal(MemberManageConstants.uploadUrl.name()); + String targetUrl = uploadUrl + "?token=" + mainToken; + String uploadData = ProtUtil.uploadFile(targetUrl, dowPath); + JSONObject uploadFile = JSON.parseObject(uploadData); + JSONArray atts = uploadFile.getJSONArray("atts"); + if (atts.size() > 0) { + JSONObject att = atts.getJSONObject(0); + JSONObject attachmentInfo = new JSONObject(); + attachmentInfo.put("subReference", dbValue); + attachmentInfo.put("fileUrl", att.getString("fileUrl")); + attachmentInfo.put("sort", n); + attachmentInfos.add(attachmentInfo); + } + } + jsonObject.put("value", dbValue); + jsonObject.put("showValue", ""); + } + }else{ + if(subFieldDataVo.getDbValue() == null ){ + jsonObject.put("value",""); + }else{ + String subFieldDataDb = subFieldDataVo.getDbValue().toString(); + jsonObject.put("value",subFieldDataDb); + } + } + subFields.add(jsonObject); + subRecord.put("fields",subFields); + } + subRecords.add(subRecord); + subTable.put("records",subRecords); + subTables.add(subTable); + } + data.put("subTables",subTables); + // 添加附件数据 + data.put("attachmentInfos",attachmentInfos); + dataList.add(data); + param.put("dataList",dataList); + + context.setRequest(param.toString()); + log.info(param.toString()); +// 获取调用接口路径 + String formmainUpdateUrl = mainUrl+"/seeyon/rest/cap4/form/soap/batch-update?token="+mainToken; + context.setUrl(formmainUpdateUrl); + JSONObject res = ProtUtil.doPost(param.toString(),formmainUpdateUrl); + log.info(res.toString()); + context.setResponse(res.toString()); + MemberManagerResponse mmr = new MemberManagerResponse(res); + if(mmr.isSuccess()){ + String resDatastr = mmr.getData(); + Map resData = DataProcessingUtil.convertStringToMap(resDatastr); + List successIdList = (List)resData.get("successIdList"); + if(successIdList.size()>0){ + String fid = successIdList.get(0); + log.info("档案表修改完成,返回结果为"+resDatastr); + context.success("档案表修改完成,当前档案表ID为"+fid,false); + formDataVo.getNewFieldDataMap().put("返回结果", "档案表修改完成,当前档案表ID为"+fid); + }else{ + Map failedData = (Map)resData.get("failedData"); + for (Map.Entry entry:failedData.entrySet()) { + context.back("档案表修改失败:创建异常:" + entry.getValue()); + context.setErrMsg(mmr.getMsg()); + formDataVo.getNewFieldDataMap().put("返回结果", "档案表修改失败:创建异常:"+entry.getValue()); + } + } + }else{ + context.back("档案表修改失败:修改异常:" + mmr.getMsg()); + context.setErrMsg(mmr.getMsg()); + formDataVo.getNewFieldDataMap().put("返回结果", "档案表修改失败:修改异常:"+mmr.getMsg()); + } + }else{ + context.success("没有查询到需要修改的数据,跳过处理"); + formDataVo.getNewFieldDataMap().put("返回结果", "没有查询到需要修改的数据,跳过处理"); + } + } + return context; + } +} diff --git a/src/com/seeyon/apps/src_membermanage/node/MemberRegularizationExtendNode.java b/src/com/seeyon/apps/src_membermanage/node/MemberRegularizationExtendNode.java new file mode 100644 index 0000000..6108dce --- /dev/null +++ b/src/com/seeyon/apps/src_membermanage/node/MemberRegularizationExtendNode.java @@ -0,0 +1,26 @@ +package com.seeyon.apps.src_membermanage.node; + +import com.seeyon.apps.src_membermanage.MemberManageCommonNode; + +/** + * 人员转正延长档案表超级节点 + */ +public class MemberRegularizationExtendNode extends MemberManageCommonNode { + @Override + public String getMethod() {return "";} + + @Override + public String getRequestType() { + return ""; + } + + @Override + public String getNodeId() { + return "MemberRegularizationExtendNode"; + } + + @Override + public String getNodeName() { + return "人员转正延长档案表超级节点"; + } +} diff --git a/src/com/seeyon/apps/src_membermanage/node/MemberRegularizationNode.java b/src/com/seeyon/apps/src_membermanage/node/MemberRegularizationNode.java new file mode 100644 index 0000000..616979f --- /dev/null +++ b/src/com/seeyon/apps/src_membermanage/node/MemberRegularizationNode.java @@ -0,0 +1,26 @@ +package com.seeyon.apps.src_membermanage.node; + +import com.seeyon.apps.src_membermanage.MemberManageCommonNode; + +/** + * 人员转正档案表超级节点 + */ +public class MemberRegularizationNode extends MemberManageCommonNode { + @Override + public String getMethod() {return "";} + + @Override + public String getRequestType() { + return ""; + } + + @Override + public String getNodeId() { + return "MemberRegularizationNode"; + } + + @Override + public String getNodeName() { + return "人员转正档案表超级节点"; + } +} diff --git a/src/com/seeyon/apps/src_membermanage/node/MemberRetirementNode.java b/src/com/seeyon/apps/src_membermanage/node/MemberRetirementNode.java new file mode 100644 index 0000000..1b5ae59 --- /dev/null +++ b/src/com/seeyon/apps/src_membermanage/node/MemberRetirementNode.java @@ -0,0 +1,180 @@ +package com.seeyon.apps.src_membermanage.node; + +import cn.hutool.log.Log; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.common.config.ICstConfigApi; +import com.seeyon.apps.common.plugin.vo.ConfigVo; +import com.seeyon.apps.common.workflow.node.ACommonSuperNode; +import com.seeyon.apps.ext.workflow.vo.FieldDataVo; +import com.seeyon.apps.ext.workflow.vo.FormDataVo; +import com.seeyon.apps.ext.workflow.vo.SuperNodeContext; +import com.seeyon.apps.src_membermanage.constants.MemberManageConstants; +import com.seeyon.apps.src_membermanage.util.DataProcessingUtil; +import com.seeyon.apps.src_membermanage.util.ProtUtil; +import com.seeyon.apps.src_membermanage.vo.MemberManagerResponse; +import com.seeyon.cap4.form.bean.FormDataMasterBean; +import com.seeyon.ctp.common.AppContext; +import www.seeyon.com.utils.StringUtil; + +import java.util.List; +import java.util.Map; + +/** + * 人员退休档案表超级节点 + */ +public class MemberRetirementNode extends ACommonSuperNode { + + private static Log log = Log.get(MemberAccountClosureOrganizationNode.class); + protected ICstConfigApi cstConfigApi = (ICstConfigApi) AppContext.getBean("cstConfigApi"); + + @Override + public String getNodeId() { + return "MemberRetirementNode"; + } + + @Override + public String getNodeName() { + return "人员退休档案表超级节点"; + } + + @Override + public String getPluginId() { + return MemberManageConstants.getPluginId(); + } + + @Override + public String getFormParse() { + return "json"; + } + public ConfigVo getMemberMamageConfig() { + return cstConfigApi.getConfig(getPluginId()); + } + @Override + public SuperNodeContext proceed(String request, FormDataVo formDataVo, FormDataMasterBean formDataMasterBean) throws Exception { + log.info("进入人事档案表处理流程"+getNodeId()); + ConfigVo configVo = getMemberMamageConfig(); + SuperNodeContext context = new SuperNodeContext(); + context.setNeedSave(true); + JSONObject paramJson = JSONObject.parseObject(request); + String enumFields = paramJson.getString("enumFields"); + String mainUrl = configVo.getParamVal(MemberManageConstants.mainUrl.name()); + String getzsjTokenUrl = configVo.getParamVal(MemberManageConstants.getzsjTokenUrl.name()); + String restzsjUserName = configVo.getParamVal(MemberManageConstants.restzsjUserName.name()); + String restzsjPassword = configVo.getParamVal(MemberManageConstants.restzsjPassword.name()); + String zsjloginName = configVo.getParamVal(MemberManageConstants.zsjloginName.name()); +// 调用接口查询主数据token + String mainToken = ProtUtil.getToken(getzsjTokenUrl,restzsjUserName,restzsjPassword,zsjloginName); +// 获取当前表单数据 +// Map> SubFormMap = formDataVo.getSubFormMap(); + List subForms = formDataVo.getSubFormMap().get("明细表1"); + for (FormDataVo subFormDataVo : subForms) { +// 每一行就是一个变更数据封装封装修改的人员参数执行修改操作 +// 创建唯一值查询参数 + JSONObject isExistUpdateParam = new JSONObject(); + isExistUpdateParam.put("formCode",paramJson.getString("formCode")); + JSONObject uniqueness = new JSONObject(); + JSONObject uniquenessjson = paramJson.getJSONObject("uniqueness"); + for (Map.Entry entry:uniquenessjson.entrySet()) { + FieldDataVo fieldDataVo = subFormDataVo.getFieldData(entry.getValue().toString()); + uniqueness.put(entry.getKey(),fieldDataVo.getDbValue()); + } + isExistUpdateParam.put("uniqueness",uniqueness); +// 调用接口查询当前数据是否存在 + String isExistUpdateUrl = mainUrl+"/seeyon/rest/formTable/quart?token="+mainToken; + String formmainIdUpdate = ProtUtil.doGet(isExistUpdateUrl,isExistUpdateParam); + JSONObject formmainIdUpdatejson = JSONObject.parseObject(formmainIdUpdate); + JSONObject formmainIdUpdateData = formmainIdUpdatejson.getJSONObject("data"); + String formmainUpdate = formmainIdUpdateData.getString("id"); + if(StringUtil.isNotEmpty(formmainUpdate)){ +// 当前数据已经存在执行修改逻辑 + JSONObject param = new JSONObject(); +// 设置基本数据 + param.put("doTrigger",paramJson.getBooleanValue("doTrigger")); + param.put("formCode",paramJson.getString("formCode")); + param.put("loginName",paramJson.getString("loginName")); + param.put("rightId",paramJson.getString("rightIdUpdate")); + JSONArray dataList = new JSONArray(); + JSONObject data = new JSONObject(); + JSONObject paramDataList = paramJson.getJSONObject("dataList"); + JSONObject paramMasterTable = paramDataList.getJSONObject("masterTable"); + JSONObject masterTable = new JSONObject(); + masterTable.put("name",paramMasterTable.getString("name")); + JSONObject record = new JSONObject(); + record.put("id",formmainUpdate); +// 根据主表字段信息,设置主表参数 + JSONArray fields = new JSONArray(); + for (Map.Entry entry : paramMasterTable.getJSONObject("fields").entrySet()) { + JSONObject jsonObject = new JSONObject(); + if("field0143".equals(entry.getKey())){ + jsonObject.put("name","field0080"); + jsonObject.put("showValue","退休返聘"); + } + jsonObject.put("name",entry.getKey()); + String value = entry.getValue().toString(); + FieldDataVo subFieldDataVo; + try { + subFieldDataVo = subFormDataVo.getFieldData(value); + } catch (NoSuchFieldException e) { + subFieldDataVo = formDataVo.getFieldData(value); + } + if(subFieldDataVo.getDbValue() == null){ + jsonObject.put("value",""); + }else{ + if(enumFields.contains(entry.getKey())){ + String subFieldDataDb = subFieldDataVo.getStringValue(); + jsonObject.put("showValue",subFieldDataDb); + }else{ + String subFieldDataDb = subFieldDataVo.getDbValue().toString(); + jsonObject.put("value",subFieldDataDb); + } + } + fields.add(jsonObject); + } + record.put("fields",fields); + masterTable.put("record",record); + data.put("masterTable",masterTable); + + dataList.add(data); + param.put("dataList",dataList); + + context.setRequest(param.toString()); + log.info(param.toString()); +// 获取调用接口路径 + String formmainUpdateUrl = mainUrl+"/seeyon/rest/cap4/form/soap/batch-update?token="+mainToken; + context.setUrl(formmainUpdateUrl); + JSONObject res = ProtUtil.doPost(param.toString(),formmainUpdateUrl); + log.info(res.toString()); + context.setResponse(res.toString()); + MemberManagerResponse mmr = new MemberManagerResponse(res); + if(mmr.isSuccess()){ + String resDatastr = mmr.getData(); + Map resData = DataProcessingUtil.convertStringToMap(resDatastr); + List successIdList = (List)resData.get("successIdList"); + if(successIdList.size()>0){ + String fid = successIdList.get(0); + log.info("档案表修改完成,返回结果为"+resDatastr); + context.success("档案表修改完成,当前档案表ID为"+fid,false); + formDataVo.getNewFieldDataMap().put("返回结果", "档案表修改完成,当前档案表ID为"+fid); + }else{ + Map failedData = (Map)resData.get("failedData"); + for (Map.Entry entry:failedData.entrySet()) { + context.back("档案表修改失败:创建异常:" + entry.getValue()); + context.setErrMsg(mmr.getMsg()); + formDataVo.getNewFieldDataMap().put("返回结果", "档案表修改失败:创建异常:"+entry.getValue()); + } + } + + }else{ + context.back("档案表修改失败:修改异常:" + mmr.getMsg()); + context.setErrMsg(mmr.getMsg()); + formDataVo.getNewFieldDataMap().put("返回结果", "档案表修改失败:修改异常:"+mmr.getMsg()); + } + }else{ + context.success("没有查询到需要修改的数据,跳过处理"); + formDataVo.getNewFieldDataMap().put("返回结果", "没有查询到需要修改的数据,跳过处理"); + } + } + return context; + } +} diff --git a/src/com/seeyon/apps/src_membermanage/node/MemberRetirementOrganizationNode.java b/src/com/seeyon/apps/src_membermanage/node/MemberRetirementOrganizationNode.java new file mode 100644 index 0000000..aee8871 --- /dev/null +++ b/src/com/seeyon/apps/src_membermanage/node/MemberRetirementOrganizationNode.java @@ -0,0 +1,166 @@ +package com.seeyon.apps.src_membermanage.node; + +import cn.hutool.log.Log; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.common.config.ICstConfigApi; +import com.seeyon.apps.common.plugin.vo.ConfigVo; +import com.seeyon.apps.common.workflow.node.ACommonSuperNode; +import com.seeyon.apps.ext.workflow.vo.FieldDataVo; +import com.seeyon.apps.ext.workflow.vo.FormDataVo; +import com.seeyon.apps.ext.workflow.vo.SuperNodeContext; +import com.seeyon.apps.src_membermanage.constants.MemberManageConstants; +import com.seeyon.apps.src_membermanage.util.ProtUtil; +import com.seeyon.cap4.form.bean.FormDataMasterBean; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.organization.bo.V3xOrgMember; +import com.seeyon.ctp.organization.manager.OrgManager; + +import javax.inject.Inject; +import java.util.List; + +/** + * 人员退休修改组织架构超级节点 + * { + * "seeyonFormSon": { + * "明细表1": { + * "id": "const::姓名", + * "is_retirement": "退休或退休返聘", + * "enabled": "const::false", + * "orgAccountId": "const::单位", + * "state": "const::2", + * "loginNamg": "置空员工编号", + * "code": "置空员工编号" + * } + * }, + * "subTable": "jsonArr::明细表1", + * "subTableName": "const::明细表1" + * } + */ +public class MemberRetirementOrganizationNode extends ACommonSuperNode { + + private static Log log = Log.get(MemberRetirementOrganizationNode.class); + protected ICstConfigApi cstConfigApi = (ICstConfigApi) AppContext.getBean("cstConfigApi"); + + @Inject + private OrgManager orgManager; + @Override + public String getNodeId() { + return "MemberRetirementOrganizationNode"; + } + + @Override + public String getNodeName() { + return "人员退休修改组织架构超级节点"; + } + + @Override + public String getPluginId() { + return MemberManageConstants.getPluginId(); + } + + @Override + public String getFormParse() { + return "json"; + } + public ConfigVo getMemberMamageConfig() { + return cstConfigApi.getConfig(getPluginId()); + } + + @Override + public SuperNodeContext proceed(String request, FormDataVo formDataVo, FormDataMasterBean formDataMasterBean) throws Exception { + log.info("进入人事组织架构处理流程"+getNodeId()); + ConfigVo configVo = getMemberMamageConfig(); + SuperNodeContext context = new SuperNodeContext(); + context.setNeedSave(true); + String mainUrl = configVo.getParamVal(MemberManageConstants.mainUrl.name()); + String getzsjTokenUrl = configVo.getParamVal(MemberManageConstants.getzsjTokenUrl.name()); + String restzsjUserName = configVo.getParamVal(MemberManageConstants.restzsjUserName.name()); + String restzsjPassword = configVo.getParamVal(MemberManageConstants.restzsjPassword.name()); + String zsjloginName = configVo.getParamVal(MemberManageConstants.zsjloginName.name()); +// 调用接口查询主数据token + String mainToken = ProtUtil.getToken(getzsjTokenUrl,restzsjUserName,restzsjPassword,zsjloginName); + +// 获取超级节点设置参数对象 + JSONObject req = JSONObject.parseObject(request); + JSONArray subTables = req.getJSONArray("subTable"); + int isSuccess = 0; + String ret = ""; +// 获取表单内所有明细表 +// Map> subFormDataVoMap = formDataVo.getSubFormMap(); +// 根据名称获取表单内明细表 + String subTableName = req.getString("subTableName"); + List subFormDataVos = formDataVo.getSubFormMap().get(subTableName); + + for(int i = 0 ; i < subTables.size() ; i++){ +// 获取参数中明细表对象 + JSONObject subTable = subTables.getJSONObject(i); +// 获取表内明细表对象 + FormDataVo subFormDataVo = subFormDataVos.get(i); +// 查询当前人员是否存在 + String memberIdName = subTable.getString("id"); +// 判断当前人员是否需要修改组织架构 + String isRetirement = subTable.getString("is_retirement"); + if("退休返聘".equals(isRetirement)){ + log.info("第"+i+"行人员存在退休返聘,跳过组织架构处理"); + ret +="第"+i+1+"行人员存在退休返聘,跳过组织架构处理"; + isSuccess++; + continue; + } +// 获取人员ID + FieldDataVo memberField = subFormDataVo.getFieldData(memberIdName); + String memberId = memberField.getDbValue().toString(); +// 获取单位ID + String accountIdName = subTable.getString("orgAccountId"); + FieldDataVo accountField = subFormDataVo.getFieldData(accountIdName); + String accountId = accountField.getDbValue().toString(); + subTable.put("orgAccountId",accountId); + + V3xOrgMember v3xOrgMember = orgManager.getMemberById(Long.parseLong(memberId)); +// 调用接口查询主数据环境人员对象信息 + String isExistUpdateUrl = mainUrl+"/seeyon/rest/orgMember/"+memberId+"?token="+mainToken; + String memberstr = ProtUtil.doGet(isExistUpdateUrl, new JSONObject()); + if(!"null".equals(memberstr)){ + isSuccess++; +// 当前人员已存在 + JSONObject memberjson = JSONObject.parseObject(memberstr); + if(memberjson.getBooleanValue("isDeleted")){ +// 当前人员已经删除 + ret = ret+memberjson.getString("name")+"已经删除,无法修改;"; + }else{ +// 当前人员存在,执行修改 + subTable.put("id",memberId); + String memberOrganizationUpdateUrl = mainUrl+"/seeyon/rest/orgMember/updateMemberMain?token="+mainToken; + JSONObject res = ProtUtil.doPost(subTable.toString(),memberOrganizationUpdateUrl); + log.info(res.toString()); + + if(res.getInteger("code")==0){ + JSONObject data = res.getJSONObject("data"); + ret+=data.getString("name")+"修改成功"; + log.info("人员组织架构修改完成:人员名称为"+data.getString("name")+",ID为"+data.getString("id")); + }else{ + isSuccess--; + String message = res.getString("message"); + ret+=memberjson.getString("name")+"修改失败"+message; + log.info("人员组织架构修改失败:人员名称为"+memberjson.getString("name")+",ID为"+memberjson.getString("id")+message); + + } + } + }else{ +// 人员不存在 + ret = ret+v3xOrgMember.getName()+"不存在,无法修改;"; + } + context.setRequest(subTables.toString()); + context.setResponse(ret); + } + if(isSuccess == subTables.size()){ + context.success(ret,false); + formDataVo.getNewFieldDataMap().put("组织返回结果", ret); + }else{ + log.info(ret); + context.back(ret); + formDataVo.getNewFieldDataMap().put("组织返回结果", ret); + } + return context; + } +} diff --git a/src/com/seeyon/apps/src_membermanage/node/MemberRewardPunishmentNode.java b/src/com/seeyon/apps/src_membermanage/node/MemberRewardPunishmentNode.java new file mode 100644 index 0000000..6a254d6 --- /dev/null +++ b/src/com/seeyon/apps/src_membermanage/node/MemberRewardPunishmentNode.java @@ -0,0 +1,29 @@ +package com.seeyon.apps.src_membermanage.node; + +import com.seeyon.apps.src_membermanage.MemberManageCommonNode; + +/** + * 人员奖惩记录档案表超级节点 + */ +public class MemberRewardPunishmentNode extends MemberManageCommonNode { + + @Override + public String getMethod() { + return ""; + } + + @Override + public String getRequestType() { + return ""; + } + + @Override + public String getNodeId() { + return "MemberRewardPunishmentNode"; + } + + @Override + public String getNodeName() { + return "人员奖惩记录档案表超级节点"; + } +} diff --git a/src/com/seeyon/apps/src_membermanage/node/MemberSystemAccountClosureNode.java b/src/com/seeyon/apps/src_membermanage/node/MemberSystemAccountClosureNode.java new file mode 100644 index 0000000..90515a0 --- /dev/null +++ b/src/com/seeyon/apps/src_membermanage/node/MemberSystemAccountClosureNode.java @@ -0,0 +1,29 @@ +package com.seeyon.apps.src_membermanage.node; + +import com.seeyon.apps.src_membermanage.MemberManageCommonNode; + +/** + * 人员系统账号批量关闭修改档案表超级节点 + */ +public class MemberSystemAccountClosureNode extends MemberManageCommonNode { + + @Override + public String getMethod() { + return ""; + } + + @Override + public String getRequestType() { + return ""; + } + + @Override + public String getNodeId() { + return "MemberSystemAccountClosureNode"; + } + + @Override + public String getNodeName() { + return "人员系统账号批量关闭修改档案表超级节点"; + } +} diff --git a/src/com/seeyon/apps/src_membermanage/node/MemberSystemAccountClosureOrganizationNode.java b/src/com/seeyon/apps/src_membermanage/node/MemberSystemAccountClosureOrganizationNode.java new file mode 100644 index 0000000..942b6be --- /dev/null +++ b/src/com/seeyon/apps/src_membermanage/node/MemberSystemAccountClosureOrganizationNode.java @@ -0,0 +1,29 @@ +package com.seeyon.apps.src_membermanage.node; + +import com.seeyon.apps.src_membermanage.MemberOrganizationCommonNode; + +/** + * 人员系统账号批量关闭修改组织架构超级节点 + */ +public class MemberSystemAccountClosureOrganizationNode extends MemberOrganizationCommonNode { + + @Override + public String getMethod() { + return ""; + } + + @Override + public String getRequestType() { + return ""; + } + + @Override + public String getNodeId() { + return "MemberSystemAccountClosureOrganizationNode"; + } + + @Override + public String getNodeName() { + return "人员系统账号批量关闭修改组织架构超级节点"; + } +} diff --git a/src/com/seeyon/apps/src_membermanage/node/MemberSystemAccountClosureTalentsNode.java b/src/com/seeyon/apps/src_membermanage/node/MemberSystemAccountClosureTalentsNode.java new file mode 100644 index 0000000..0792d31 --- /dev/null +++ b/src/com/seeyon/apps/src_membermanage/node/MemberSystemAccountClosureTalentsNode.java @@ -0,0 +1,29 @@ +package com.seeyon.apps.src_membermanage.node; + +import com.seeyon.apps.src_membermanage.MemberManageCommonNode; + +/** + * 人员系统账号批量关闭修改人才库超级节点 + */ +public class MemberSystemAccountClosureTalentsNode extends MemberManageCommonNode { + + @Override + public String getMethod() { + return ""; + } + + @Override + public String getRequestType() { + return ""; + } + + @Override + public String getNodeId() { + return "MemberSystemAccountClosureTalentsNode"; + } + + @Override + public String getNodeName() { + return "人员系统账号批量关闭修改人才库超级节点"; + } +} diff --git a/src/com/seeyon/apps/src_membermanage/node/MemberTaskFinishNode.java b/src/com/seeyon/apps/src_membermanage/node/MemberTaskFinishNode.java new file mode 100644 index 0000000..11c0b80 --- /dev/null +++ b/src/com/seeyon/apps/src_membermanage/node/MemberTaskFinishNode.java @@ -0,0 +1,204 @@ +package com.seeyon.apps.src_membermanage.node; + +import cn.hutool.log.Log; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.common.config.ICstConfigApi; +import com.seeyon.apps.common.plugin.vo.ConfigVo; +import com.seeyon.apps.common.workflow.node.ACommonSuperNode; +import com.seeyon.apps.ext.workflow.vo.FieldDataVo; +import com.seeyon.apps.ext.workflow.vo.FormDataVo; +import com.seeyon.apps.ext.workflow.vo.SuperNodeContext; +import com.seeyon.apps.src_membermanage.constants.MemberManageConstants; +import com.seeyon.apps.src_membermanage.util.DataProcessingUtil; +import com.seeyon.apps.src_membermanage.util.ProtUtil; +import com.seeyon.apps.src_membermanage.vo.MemberManagerResponse; +import com.seeyon.cap4.form.bean.FormDataMasterBean; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.util.UUIDLong; +import www.seeyon.com.utils.StringUtil; + +import java.util.List; +import java.util.Map; + +/** + * 营销人员任务完成情况修改档案表超级节点 + */ +public class MemberTaskFinishNode extends ACommonSuperNode { + + private static Log log = Log.get(MemberTaskFinishNode.class); + protected ICstConfigApi cstConfigApi = (ICstConfigApi) AppContext.getBean("cstConfigApi"); + + @Override + public String getNodeId() { + return "MemberTaskFinishNode"; + } + + @Override + public String getNodeName() { + return "营销人员任务完成情况修改档案表超级节点"; + } + + @Override + public String getPluginId() { + return MemberManageConstants.getPluginId(); + } + + @Override + public String getFormParse() { + return "json"; + } + + public ConfigVo getMemberMamageConfig() { + return cstConfigApi.getConfig(getPluginId()); + } + + @Override + public SuperNodeContext proceed(String request, FormDataVo formDataVo, FormDataMasterBean formDataMasterBean) throws Exception { + log.info("进入人事档案表处理流程"+getNodeId()); + ConfigVo configVo = getMemberMamageConfig(); + SuperNodeContext context = new SuperNodeContext(); + context.setNeedSave(true); + JSONObject paramJson = JSONObject.parseObject(request); + String mainUrl = configVo.getParamVal(MemberManageConstants.mainUrl.name()); + String getzsjTokenUrl = configVo.getParamVal(MemberManageConstants.getzsjTokenUrl.name()); + String restzsjUserName = configVo.getParamVal(MemberManageConstants.restzsjUserName.name()); + String restzsjPassword = configVo.getParamVal(MemberManageConstants.restzsjPassword.name()); + String zsjloginName = configVo.getParamVal(MemberManageConstants.zsjloginName.name()); +// 调用接口查询主数据token + String mainToken = ProtUtil.getToken(getzsjTokenUrl,restzsjUserName,restzsjPassword,zsjloginName); +// 获取当前表单数据 +// Map> SubFormMap = formDataVo.getSubFormMap(); + List subForms = formDataVo.getSubFormMap().get("明细表1"); + for (FormDataVo subFormDataVo : subForms) { +// 每一行就是一个变更数据封装封装修改的人员参数执行修改操作 +// 创建唯一值查询参数 + JSONObject isExistUpdateParam = new JSONObject(); + isExistUpdateParam.put("formCode",paramJson.getString("formCode")); + JSONObject uniqueness = new JSONObject(); + JSONObject uniquenessjson = paramJson.getJSONObject("uniqueness"); + for (Map.Entry entry:uniquenessjson.entrySet()) { + FieldDataVo fieldDataVo = subFormDataVo.getFieldData(entry.getValue().toString()); + uniqueness.put(entry.getKey(),fieldDataVo.getDbValue()); + } + isExistUpdateParam.put("uniqueness",uniqueness); +// 调用接口查询当前数据是否存在 + String isExistUpdateUrl = mainUrl+"/seeyon/rest/formTable/quart?token="+mainToken; + String formmainIdUpdate = ProtUtil.doGet(isExistUpdateUrl,isExistUpdateParam); + JSONObject formmainIdUpdatejson = JSONObject.parseObject(formmainIdUpdate); + JSONObject formmainIdUpdateData = formmainIdUpdatejson.getJSONObject("data"); + String formmainUpdate = formmainIdUpdateData.getString("id"); + if(StringUtil.isNotEmpty(formmainUpdate)){ +// 当前数据已经存在执行修改逻辑 + JSONObject param = new JSONObject(); +// 设置基本数据 + param.put("doTrigger",paramJson.getBooleanValue("doTrigger")); + param.put("formCode",paramJson.getString("formCode")); + param.put("loginName",paramJson.getString("loginName")); + param.put("rightId",paramJson.getString("rightIdUpdate")); + JSONArray dataList = new JSONArray(); + JSONObject data = new JSONObject(); + JSONObject paramDataList = paramJson.getJSONObject("dataList"); + JSONObject paramMasterTable = paramDataList.getJSONObject("masterTable"); + JSONObject masterTable = new JSONObject(); + masterTable.put("name",paramMasterTable.getString("name")); + JSONObject record = new JSONObject(); + record.put("id",formmainUpdate); +// 根据主表字段信息,设置主表参数 + JSONArray fields = new JSONArray(); + for (Map.Entry entry : paramMasterTable.getJSONObject("fields").entrySet()) { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("name",entry.getKey()); + String value = entry.getValue().toString(); + FieldDataVo subFieldDataVo ; + try { + subFieldDataVo = subFormDataVo.getFieldData(value); + } catch (NoSuchFieldException e) { + subFieldDataVo = formDataVo.getFieldData(value); + } + String subFieldDataDb = subFieldDataVo.getDbValue()==null?"":subFieldDataVo.getDbValue().toString(); + jsonObject.put("value",subFieldDataDb); + fields.add(jsonObject); + } + record.put("fields",fields); + masterTable.put("record",record); + data.put("masterTable",masterTable); +// 根据明细表字段信息,设置明细表参数 + JSONArray subTables = new JSONArray(); + JSONArray paramSubTables = paramDataList.getJSONArray("subTables"); + for(int i = 0 ; i < paramSubTables.size();i++){ + JSONObject paramSubTable = paramSubTables.getJSONObject(i); + JSONObject subTable = new JSONObject(); + subTable.put("name",paramSubTable.getString("tableName")); + JSONArray subRecords = new JSONArray(); + JSONObject subRecord = new JSONObject(); + subRecord.put("id", UUIDLong.longUUID()+""); + JSONArray subFields = new JSONArray(); + for (Map.Entry entry : paramSubTable.getJSONObject("fields").entrySet()) { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("name",entry.getKey()); + String value = entry.getValue().toString(); + FieldDataVo subFieldDataVo = subFormDataVo.getFieldData(value); +// if("成绩".equals(value)){ +// subFieldDataVo = formDataVo.getFieldData(value); +// }else{ +// subFieldDataVo = subFormDataVo.getFieldData(value); +// } + if(subFieldDataVo.getDbValue() == null){ + jsonObject.put("value",""); + }else{ + String subFieldDataDb = subFieldDataVo.getDbValue().toString(); + jsonObject.put("value",subFieldDataDb); + } + subFields.add(jsonObject); + } + subRecord.put("fields",subFields); + subRecords.add(subRecord); + subTable.put("records",subRecords); + subTables.add(subTable); + } + data.put("subTables",subTables); + + dataList.add(data); + param.put("dataList",dataList); + + context.setRequest(param.toString()); + log.info(param.toString()); +// 获取调用接口路径 + String formmainUpdateUrl = mainUrl+"/seeyon/rest/cap4/form/soap/batch-update?token="+mainToken; + context.setUrl(formmainUpdateUrl); + JSONObject res = ProtUtil.doPost(param.toString(),formmainUpdateUrl); + log.info(res.toString()); + context.setResponse(res.toString()); + MemberManagerResponse mmr = new MemberManagerResponse(res); + if(mmr.isSuccess()){ + String resDatastr = mmr.getData(); + Map resData = DataProcessingUtil.convertStringToMap(resDatastr); + List successIdList = (List)resData.get("successIdList"); + if(successIdList.size()>0){ + String fid = successIdList.get(0); + log.info("档案表修改完成,返回结果为"+resDatastr); + context.success("档案表修改完成,当前档案表ID为"+fid,false); + formDataVo.getNewFieldDataMap().put("返回结果", "档案表修改完成,当前档案表ID为"+fid); + }else{ + Map failedData = (Map)resData.get("failedData"); + for (Map.Entry entry:failedData.entrySet()) { + context.back("档案表修改失败:创建异常:" + entry.getValue()); + context.setErrMsg(mmr.getMsg()); + formDataVo.getNewFieldDataMap().put("返回结果", "档案表修改失败:创建异常:"+entry.getValue()); + } + } + + }else{ + context.back("档案表修改失败:修改异常:" + mmr.getMsg()); + context.setErrMsg(mmr.getMsg()); + formDataVo.getNewFieldDataMap().put("返回结果", "档案表修改失败:修改异常:"+mmr.getMsg()); + } + }else{ + context.success("没有查询到需要修改的数据,跳过处理"); + formDataVo.getNewFieldDataMap().put("返回结果", "没有查询到需要修改的数据,跳过处理"); + } + } + return context; + } +} diff --git a/src/com/seeyon/apps/src_membermanage/node/MemberTryOutSummarizeNode.java b/src/com/seeyon/apps/src_membermanage/node/MemberTryOutSummarizeNode.java new file mode 100644 index 0000000..85672d5 --- /dev/null +++ b/src/com/seeyon/apps/src_membermanage/node/MemberTryOutSummarizeNode.java @@ -0,0 +1,29 @@ +package com.seeyon.apps.src_membermanage.node; + +import com.seeyon.apps.src_membermanage.MemberManageCommonNode; + +/** + * 人员试用期工作总结超级节点 + */ +public class MemberTryOutSummarizeNode extends MemberManageCommonNode { + + @Override + public String getMethod() { + return ""; + } + + @Override + public String getRequestType() { + return ""; + } + + @Override + public String getNodeId() { + return "MemberTryOutSummarizeNode"; + } + + @Override + public String getNodeName() { + return "人员试用期工作总结超级节点"; + } +} diff --git a/src/com/seeyon/apps/src_membermanage/node/MemberWorkNode.java b/src/com/seeyon/apps/src_membermanage/node/MemberWorkNode.java new file mode 100644 index 0000000..0dc9c5d --- /dev/null +++ b/src/com/seeyon/apps/src_membermanage/node/MemberWorkNode.java @@ -0,0 +1,29 @@ +package com.seeyon.apps.src_membermanage.node; + +import com.seeyon.apps.src_membermanage.MemberManageCommonNode; + +/** + * 人员工作经历档案表超级节点 + */ +public class MemberWorkNode extends MemberManageCommonNode { + + @Override + public String getMethod() { + return ""; + } + + @Override + public String getRequestType() { + return ""; + } + + @Override + public String getNodeId() { + return "MemberWorkNode"; + } + + @Override + public String getNodeName() { + return "人员工作经历档案表超级节点"; + } +} diff --git a/src/com/seeyon/apps/src_membermanage/node/MemberYearTaskNode.java b/src/com/seeyon/apps/src_membermanage/node/MemberYearTaskNode.java new file mode 100644 index 0000000..a142d32 --- /dev/null +++ b/src/com/seeyon/apps/src_membermanage/node/MemberYearTaskNode.java @@ -0,0 +1,211 @@ +package com.seeyon.apps.src_membermanage.node; + +import cn.hutool.log.Log; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.common.config.ICstConfigApi; +import com.seeyon.apps.common.plugin.vo.ConfigVo; +import com.seeyon.apps.common.workflow.node.ACommonSuperNode; +import com.seeyon.apps.ext.workflow.vo.FieldDataVo; +import com.seeyon.apps.ext.workflow.vo.FormDataVo; +import com.seeyon.apps.ext.workflow.vo.SuperNodeContext; +import com.seeyon.apps.src_membermanage.constants.MemberManageConstants; +import com.seeyon.apps.src_membermanage.util.DataProcessingUtil; +import com.seeyon.apps.src_membermanage.util.ProtUtil; +import com.seeyon.apps.src_membermanage.vo.MemberManagerResponse; +import com.seeyon.cap4.form.bean.FormDataMasterBean; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.util.UUIDLong; +import www.seeyon.com.utils.StringUtil; + +import java.util.List; +import java.util.Map; + +/** + * 营销人员年度任务完成情况超级节点 + */ +public class MemberYearTaskNode extends ACommonSuperNode { + + private static Log log = Log.get(MemberYearTaskNode.class); + protected ICstConfigApi cstConfigApi = (ICstConfigApi) AppContext.getBean("cstConfigApi"); + + @Override + public String getNodeId() { + return "MemberYearTaskNode"; + } + + @Override + public String getNodeName() { + return "营销人员年度任务完成情况超级节点"; + } + + @Override + public String getPluginId() { + return MemberManageConstants.getPluginId(); + } + + @Override + public String getFormParse() { + return "json"; + } + + public ConfigVo getMemberMamageConfig() { + return cstConfigApi.getConfig(getPluginId()); + } + + + @Override + public SuperNodeContext proceed(String request, FormDataVo formDataVo, FormDataMasterBean formDataMasterBean) throws Exception { + log.info("营销人员年度任务完成情况超级节点"+getNodeId()); + ConfigVo configVo = getMemberMamageConfig(); + SuperNodeContext context = new SuperNodeContext(); + context.setNeedSave(true); + JSONObject paramJson = JSONObject.parseObject(request); + String enumFields = paramJson.getString("enumFields"); + String mainUrl = configVo.getParamVal(MemberManageConstants.mainUrl.name()); + String getzsjTokenUrl = configVo.getParamVal(MemberManageConstants.getzsjTokenUrl.name()); + String restzsjUserName = configVo.getParamVal(MemberManageConstants.restzsjUserName.name()); + String restzsjPassword = configVo.getParamVal(MemberManageConstants.restzsjPassword.name()); + String zsjloginName = configVo.getParamVal(MemberManageConstants.zsjloginName.name()); +// 调用接口查询主数据token + String mainToken = ProtUtil.getToken(getzsjTokenUrl,restzsjUserName,restzsjPassword,zsjloginName); +// 获取当前表单数据 +// Map> SubFormMap = formDataVo.getSubFormMap(); + List subForms = formDataVo.getSubFormMap().get("明细表1"); + for (FormDataVo subFormDataVo : subForms) { +// 每一行就是一个变更数据封装封装修改的人员参数执行修改操作 +// 创建唯一值查询参数 + JSONObject isExistUpdateParam = new JSONObject(); + isExistUpdateParam.put("formCode",paramJson.getString("formCode")); + JSONObject uniqueness = new JSONObject(); + JSONObject uniquenessjson = paramJson.getJSONObject("uniqueness"); + for (Map.Entry entry:uniquenessjson.entrySet()) { + FieldDataVo fieldDataVo = subFormDataVo.getFieldData(entry.getValue().toString()); + uniqueness.put(entry.getKey(),fieldDataVo.getDbValue()); + } + isExistUpdateParam.put("uniqueness",uniqueness); +// 调用接口查询当前数据是否存在 + String isExistUpdateUrl = mainUrl+"/seeyon/rest/formTable/quart?token="+mainToken; + String formmainIdUpdate = ProtUtil.doGet(isExistUpdateUrl,isExistUpdateParam); + JSONObject formmainIdUpdatejson = JSONObject.parseObject(formmainIdUpdate); + JSONObject formmainIdUpdateData = formmainIdUpdatejson.getJSONObject("data"); + String formmainUpdate = formmainIdUpdateData.getString("id"); + if(StringUtil.isNotEmpty(formmainUpdate)){ +// 当前数据已经存在执行修改逻辑 + JSONObject param = new JSONObject(); +// 设置基本数据 + param.put("doTrigger",paramJson.getBooleanValue("doTrigger")); + param.put("formCode",paramJson.getString("formCode")); + param.put("loginName",paramJson.getString("loginName")); + param.put("rightId",paramJson.getString("rightIdUpdate")); + JSONArray dataList = new JSONArray(); + JSONObject data = new JSONObject(); + JSONObject paramDataList = paramJson.getJSONObject("dataList"); + JSONObject paramMasterTable = paramDataList.getJSONObject("masterTable"); + JSONObject masterTable = new JSONObject(); + masterTable.put("name",paramMasterTable.getString("name")); + JSONObject record = new JSONObject(); + record.put("id",formmainUpdate); +// 根据主表字段信息,设置主表参数 + JSONArray fields = new JSONArray(); + for (Map.Entry entry : paramMasterTable.getJSONObject("fields").entrySet()) { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("name",entry.getKey()); + String value = entry.getValue().toString(); + FieldDataVo subFieldDataVo ; + try { + subFieldDataVo = subFormDataVo.getFieldData(value); + } catch (NoSuchFieldException e) { + subFieldDataVo = formDataVo.getFieldData(value); + } + String subFieldDataDb = subFieldDataVo.getDbValue()==null?"":subFieldDataVo.getDbValue().toString(); + jsonObject.put("value",subFieldDataDb); + fields.add(jsonObject); + } + record.put("fields",fields); + masterTable.put("record",record); + data.put("masterTable",masterTable); +// 根据明细表字段信息,设置明细表参数 + JSONArray subTables = new JSONArray(); + JSONArray paramSubTables = paramDataList.getJSONArray("subTables"); + for(int i = 0 ; i < paramSubTables.size();i++){ + JSONObject paramSubTable = paramSubTables.getJSONObject(i); + JSONObject subTable = new JSONObject(); + subTable.put("name",paramSubTable.getString("tableName")); + JSONArray subRecords = new JSONArray(); + JSONObject subRecord = new JSONObject(); + subRecord.put("id", UUIDLong.longUUID()+""); + JSONArray subFields = new JSONArray(); + for (Map.Entry entry : paramSubTable.getJSONObject("fields").entrySet()) { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("name",entry.getKey()); + String value = entry.getValue().toString(); + FieldDataVo subFieldDataVo; + try { + subFieldDataVo = subFormDataVo.getFieldData(value); + } catch (NoSuchFieldException e) { + subFieldDataVo = formDataVo.getFieldData(value); + } + if(subFieldDataVo.getDbValue() == null){ + jsonObject.put("value",""); + }else{ + if(enumFields.contains(entry.getKey())){ + String subFieldDataDb = subFieldDataVo.getStringValue(); + jsonObject.put("showValue",subFieldDataDb); + }else{ + String subFieldDataDb = subFieldDataVo.getDbValue().toString(); + jsonObject.put("value",subFieldDataDb); + } + } + subFields.add(jsonObject); + } + subRecord.put("fields",subFields); + subRecords.add(subRecord); + subTable.put("records",subRecords); + subTables.add(subTable); + } + data.put("subTables",subTables); + + dataList.add(data); + param.put("dataList",dataList); + + context.setRequest(param.toString()); + log.info(param.toString()); +// 获取调用接口路径 + String formmainUpdateUrl = mainUrl+"/seeyon/rest/cap4/form/soap/batch-update?token="+mainToken; + context.setUrl(formmainUpdateUrl); + JSONObject res = ProtUtil.doPost(param.toString(),formmainUpdateUrl); + log.info(res.toString()); + context.setResponse(res.toString()); + MemberManagerResponse mmr = new MemberManagerResponse(res); + if(mmr.isSuccess()){ + String resDatastr = mmr.getData(); + Map resData = DataProcessingUtil.convertStringToMap(resDatastr); + List successIdList = (List)resData.get("successIdList"); + if(successIdList.size()>0){ + String fid = successIdList.get(0); + log.info("档案表修改完成,返回结果为"+resDatastr); + context.success("档案表修改完成,当前档案表ID为"+fid,false); + formDataVo.getNewFieldDataMap().put("返回结果", "档案表修改完成,当前档案表ID为"+fid); + }else{ + Map failedData = (Map)resData.get("failedData"); + for (Map.Entry entry:failedData.entrySet()) { + context.back("档案表修改失败:创建异常:" + entry.getValue()); + context.setErrMsg(mmr.getMsg()); + formDataVo.getNewFieldDataMap().put("返回结果", "档案表修改失败:创建异常:"+entry.getValue()); + } + } + + }else{ + context.back("档案表修改失败:修改异常:" + mmr.getMsg()); + context.setErrMsg(mmr.getMsg()); + formDataVo.getNewFieldDataMap().put("返回结果", "档案表修改失败:修改异常:"+mmr.getMsg()); + } + }else{ + context.success("没有查询到需要修改的数据,跳过处理"); + formDataVo.getNewFieldDataMap().put("返回结果", "没有查询到需要修改的数据,请检查唯一值是否正确"); + } + } + return context; + } +} diff --git a/src/com/seeyon/apps/src_membermanage/node/MembersMoveNode.java b/src/com/seeyon/apps/src_membermanage/node/MembersMoveNode.java new file mode 100644 index 0000000..5388993 --- /dev/null +++ b/src/com/seeyon/apps/src_membermanage/node/MembersMoveNode.java @@ -0,0 +1,207 @@ +package com.seeyon.apps.src_membermanage.node; + +import cn.hutool.log.Log; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.common.config.ICstConfigApi; +import com.seeyon.apps.common.plugin.vo.ConfigVo; +import com.seeyon.apps.common.workflow.node.ACommonSuperNode; +import com.seeyon.apps.ext.workflow.vo.FieldDataVo; +import com.seeyon.apps.ext.workflow.vo.FormDataVo; +import com.seeyon.apps.ext.workflow.vo.SuperNodeContext; +import com.seeyon.apps.src_membermanage.constants.MemberManageConstants; +import com.seeyon.apps.src_membermanage.util.DataProcessingUtil; +import com.seeyon.apps.src_membermanage.util.ProtUtil; +import com.seeyon.apps.src_membermanage.vo.MemberManagerResponse; +import com.seeyon.cap4.form.bean.FormDataMasterBean; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.util.UUIDLong; +import www.seeyon.com.utils.StringUtil; + +import java.io.IOException; +import java.net.URISyntaxException; +import java.util.List; +import java.util.Map; + +/** + * 人员批量调动超级节点 + */ +public class MembersMoveNode extends ACommonSuperNode { + + private static Log log = Log.get(MembersMoveNode.class); + protected ICstConfigApi cstConfigApi = (ICstConfigApi) AppContext.getBean("cstConfigApi"); + + + @Override + public String getNodeId() { + return "MembersMoveNode"; + } + + @Override + public String getNodeName() { + return "人员批量调动超级节点"; + } + + @Override + public String getPluginId() { + return MemberManageConstants.getPluginId(); + } + + @Override + public String getFormParse() { + return "json"; + } + + public ConfigVo getMemberMamageConfig() { + return cstConfigApi.getConfig(getPluginId()); + } + + @Override + public SuperNodeContext proceed(String request, FormDataVo formDataVo, FormDataMasterBean formDataMasterBean) throws IOException, URISyntaxException, NoSuchFieldException { + log.info("进入人事档案表处理流程"+getNodeId()); + ConfigVo configVo = getMemberMamageConfig(); + SuperNodeContext context = new SuperNodeContext(); + context.setNeedSave(true); + JSONObject paramJson = JSONObject.parseObject(request); + String mainUrl = configVo.getParamVal(MemberManageConstants.mainUrl.name()); + String getzsjTokenUrl = configVo.getParamVal(MemberManageConstants.getzsjTokenUrl.name()); + String restzsjUserName = configVo.getParamVal(MemberManageConstants.restzsjUserName.name()); + String restzsjPassword = configVo.getParamVal(MemberManageConstants.restzsjPassword.name()); + String zsjloginName = configVo.getParamVal(MemberManageConstants.zsjloginName.name()); +// 调用接口查询主数据token + String mainToken = ProtUtil.getToken(getzsjTokenUrl,restzsjUserName,restzsjPassword,zsjloginName); +// 获取当前表单数据 +// Map> SubFormMap = formDataVo.getSubFormMap(); + List subForms = formDataVo.getSubFormMap().get("人员明细"); + for (FormDataVo subFormDataVo : subForms) { +// 每一行就是一个变更数据封装封装修改的人员参数执行修改操作 +// 创建唯一值查询参数 + JSONObject isExistUpdateParam = new JSONObject(); + isExistUpdateParam.put("formCode",paramJson.getString("formCode")); + JSONObject uniqueness = new JSONObject(); + JSONObject uniquenessjson = paramJson.getJSONObject("uniqueness"); + for (Map.Entry entry:uniquenessjson.entrySet()) { + FieldDataVo fieldDataVo = subFormDataVo.getFieldData(entry.getValue().toString()); + uniqueness.put(entry.getKey(),fieldDataVo.getDbValue()); + } + isExistUpdateParam.put("uniqueness",uniqueness); +// 调用接口查询当前数据是否存在 + String isExistUpdateUrl = mainUrl+"/seeyon/rest/formTable/quart?token="+mainToken; + String formmainIdUpdate = ProtUtil.doGet(isExistUpdateUrl,isExistUpdateParam); + JSONObject formmainIdUpdatejson = JSONObject.parseObject(formmainIdUpdate); + JSONObject formmainIdUpdateData = formmainIdUpdatejson.getJSONObject("data"); + String formmainUpdate = formmainIdUpdateData.getString("id"); + if(StringUtil.isNotEmpty(formmainUpdate)){ +// 当前数据已经存在执行修改逻辑 + JSONObject param = new JSONObject(); +// 设置基本数据 + param.put("doTrigger",paramJson.getBooleanValue("doTrigger")); + param.put("formCode",paramJson.getString("formCode")); + param.put("loginName",paramJson.getString("loginName")); + param.put("rightId",paramJson.getString("rightIdUpdate")); + JSONArray dataList = new JSONArray(); + JSONObject data = new JSONObject(); + JSONObject paramDataList = paramJson.getJSONObject("dataList"); + JSONObject paramMasterTable = paramDataList.getJSONObject("masterTable"); + JSONObject masterTable = new JSONObject(); + masterTable.put("name",paramMasterTable.getString("name")); + JSONObject record = new JSONObject(); + record.put("id",formmainUpdate); +// 根据主表字段信息,设置主表参数 + JSONArray fields = new JSONArray(); + for (Map.Entry entry : paramMasterTable.getJSONObject("fields").entrySet()) { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("name",entry.getKey()); + String value = entry.getValue().toString(); + FieldDataVo subFieldDataVo; + try { + subFieldDataVo = subFormDataVo.getFieldData(value); + } catch (NoSuchFieldException e) { + subFieldDataVo = formDataVo.getFieldData(value); + } + String subFieldDataDb = subFieldDataVo.getDbValue()==null?"":subFieldDataVo.getDbValue().toString(); + jsonObject.put("value",subFieldDataDb); + fields.add(jsonObject); + } + record.put("fields",fields); + masterTable.put("record",record); + data.put("masterTable",masterTable); +// 根据明细表字段信息,设置明细表参数 + JSONArray subTables = new JSONArray(); + JSONArray paramSubTables = paramDataList.getJSONArray("subTables"); + for(int i = 0 ; i < paramSubTables.size();i++){ + JSONObject paramSubTable = paramSubTables.getJSONObject(i); + JSONObject subTable = new JSONObject(); + subTable.put("name",paramSubTable.getString("tableName")); + JSONArray subRecords = new JSONArray(); + JSONObject subRecord = new JSONObject(); + subRecord.put("id", UUIDLong.longUUID()+""); + JSONArray subFields = new JSONArray(); + for (Map.Entry entry : paramSubTable.getJSONObject("fields").entrySet()) { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("name",entry.getKey()); + String value = entry.getValue().toString(); + FieldDataVo subFieldDataVo ; + try { + subFieldDataVo = subFormDataVo.getFieldData(value); + } catch (NoSuchFieldException e) { + subFieldDataVo = formDataVo.getFieldData(value); + } + if(subFieldDataVo.getDbValue() == null){ + jsonObject.put("value",""); + }else{ + String subFieldDataDb = subFieldDataVo.getDbValue().toString(); + jsonObject.put("value",subFieldDataDb); + } + subFields.add(jsonObject); + } + subRecord.put("fields",subFields); + subRecords.add(subRecord); + subTable.put("records",subRecords); + subTables.add(subTable); + } + data.put("subTables",subTables); + + dataList.add(data); + param.put("dataList",dataList); + + context.setRequest(param.toString()); + log.info(param.toString()); +// 获取调用接口路径 + String formmainUpdateUrl = mainUrl+"/seeyon/rest/cap4/form/soap/batch-update?token="+mainToken; + context.setUrl(formmainUpdateUrl); + JSONObject res = ProtUtil.doPost(param.toString(),formmainUpdateUrl); + log.info(res.toString()); + context.setResponse(res.toString()); + MemberManagerResponse mmr = new MemberManagerResponse(res); + if(mmr.isSuccess()){ + String resDatastr = mmr.getData(); + Map resData = DataProcessingUtil.convertStringToMap(resDatastr); + List successIdList = (List)resData.get("successIdList"); + if(successIdList.size()>0){ + String fid = successIdList.get(0); + log.info("档案表修改完成,返回结果为"+resDatastr); + context.success("档案表修改完成,当前档案表ID为"+fid,false); + formDataVo.getNewFieldDataMap().put("返回结果", "档案表修改完成,当前档案表ID为"+fid); + }else{ + Map failedData = (Map)resData.get("failedData"); + for (Map.Entry entry:failedData.entrySet()) { + context.back("档案表修改失败:创建异常:" + entry.getValue()); + context.setErrMsg(mmr.getMsg()); + formDataVo.getNewFieldDataMap().put("返回结果", "档案表修改失败:创建异常:"+entry.getValue()); + } + } + + }else{ + context.back("档案表修改失败:修改异常:" + mmr.getMsg()); + context.setErrMsg(mmr.getMsg()); + formDataVo.getNewFieldDataMap().put("返回结果", "档案表修改失败:修改异常:"+mmr.getMsg()); + } + }else{ + context.success("没有查询到需要修改的数据,跳过处理"); + formDataVo.getNewFieldDataMap().put("返回结果", "没有查询到需要修改的数据,跳过处理"); + } + } + return context; + } +} diff --git a/src/com/seeyon/apps/src_membermanage/node/MembersMoveOrganizationNode.java b/src/com/seeyon/apps/src_membermanage/node/MembersMoveOrganizationNode.java new file mode 100644 index 0000000..cb30885 --- /dev/null +++ b/src/com/seeyon/apps/src_membermanage/node/MembersMoveOrganizationNode.java @@ -0,0 +1,143 @@ +package com.seeyon.apps.src_membermanage.node; + +import cn.hutool.log.Log; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.common.config.ICstConfigApi; +import com.seeyon.apps.common.plugin.vo.ConfigVo; +import com.seeyon.apps.common.workflow.node.ACommonSuperNode; +import com.seeyon.apps.ext.workflow.vo.FieldDataVo; +import com.seeyon.apps.ext.workflow.vo.FormDataVo; +import com.seeyon.apps.ext.workflow.vo.SuperNodeContext; +import com.seeyon.apps.src_membermanage.constants.MemberManageConstants; +import com.seeyon.apps.src_membermanage.util.ProtUtil; +import com.seeyon.cap4.form.bean.FormDataMasterBean; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.organization.bo.V3xOrgMember; +import com.seeyon.ctp.organization.manager.OrgManager; + +import javax.inject.Inject; +import java.util.List; + +/** + * 人员批量调动组织架构超级节点 + */ +public class MembersMoveOrganizationNode extends ACommonSuperNode { + private static Log log = Log.get(MembersMoveNode.class); + protected ICstConfigApi cstConfigApi = (ICstConfigApi) AppContext.getBean("cstConfigApi"); + + @Inject + private OrgManager orgManager; + + @Override + public String getNodeId() {return "MembersMoveOrganizationNode";} + + @Override + public String getNodeName() {return "人员批量调动组织架构超级节点";} + + @Override + public String getPluginId() { + return MemberManageConstants.getPluginId(); + } + + @Override + public String getFormParse() { + return "json"; + } + public ConfigVo getMemberMamageConfig() { + return cstConfigApi.getConfig(getPluginId()); + } + + @Override + public SuperNodeContext proceed(String request, FormDataVo formDataVo, FormDataMasterBean formDataMasterBean) throws Exception { + log.info("进入人事组织机构处理流程"+getNodeId()); + ConfigVo configVo = getMemberMamageConfig(); + SuperNodeContext context = new SuperNodeContext(); + context.setNeedSave(true); + String mainUrl = configVo.getParamVal(MemberManageConstants.mainUrl.name()); + String getzsjTokenUrl = configVo.getParamVal(MemberManageConstants.getzsjTokenUrl.name()); + String restzsjUserName = configVo.getParamVal(MemberManageConstants.restzsjUserName.name()); + String restzsjPassword = configVo.getParamVal(MemberManageConstants.restzsjPassword.name()); + String zsjloginName = configVo.getParamVal(MemberManageConstants.zsjloginName.name()); +// 调用接口查询主数据token + String mainToken = ProtUtil.getToken(getzsjTokenUrl,restzsjUserName,restzsjPassword,zsjloginName); + + JSONObject req = JSONObject.parseObject(request); + JSONArray subTables = req.getJSONArray("subTable"); + int isSuccess = 0; + String ret = ""; + String subTableName = req.getString("subTableName"); + List subFormDataVos = formDataVo.getSubFormMap().get(subTableName); + for(int i = 0 ; i < subTables.size() ; i++){ + JSONObject subTable = subTables.getJSONObject(i); + FormDataVo subFormDataVo = subFormDataVos.get(i); +// 查询当前人员是否存在 + String memberIdName = subTable.getString("id"); + FieldDataVo memberField = subFormDataVo.getFieldData(memberIdName); + String memberId = memberField.getDbValue().toString(); + V3xOrgMember v3xOrgMember = orgManager.getMemberById(Long.parseLong(memberId)); + String isExistUpdateUrl = mainUrl+"/seeyon/rest/orgMember/"+memberId+"?token="+mainToken; + String memberstr = ProtUtil.doGet(isExistUpdateUrl, new JSONObject()); + if(!"null".equals(memberstr)){ + isSuccess++; +// 当前人员已存在 + JSONObject memberjson = JSONObject.parseObject(memberstr); + if(memberjson.getBooleanValue("isDeleted")){ +// 当前人员已经删除 + ret = ret+memberjson.getString("name")+"已经删除,无法修改;"; + }else{ +// 当前人员存在,执行修改 + String orgAccountIdName = subTable.getString("orgAccountId"); + FieldDataVo orgAccountField = subFormDataVo.getFieldData(orgAccountIdName); + String orgAccountId = orgAccountField.getDbValue().toString(); + subTable.put("orgAccountId",orgAccountId); + + String orgDepartmentIdName = subTable.getString("orgDepartmentId"); + FieldDataVo orgDepartmentField = subFormDataVo.getFieldData(orgDepartmentIdName); + String orgDepartmentId = orgDepartmentField.getDbValue().toString(); + subTable.put("orgDepartmentId",orgDepartmentId); + + String orgPostIdName = subTable.getString("orgPostId"); + FieldDataVo orgPostField = subFormDataVo.getFieldData(orgPostIdName); + String orgPostId = orgPostField.getDbValue().toString(); + subTable.put("orgPostId",orgPostId); + + String orgLevelIdName = subTable.getString("orgLevelId"); + FieldDataVo orgLevelField = subFormDataVo.getFieldData(orgLevelIdName); + String orgLevelId = orgLevelField.getDbValue().toString(); + subTable.put("orgLevelId",orgLevelId); + + subTable.put("id",memberId); + String memberOrganizationUpdateUrl = mainUrl+"/seeyon/rest/orgMember/updateMemberMain?token="+mainToken; +// String res = ProtUtil.httpPutRaw(memberOrganizationUpdateUrl,subTable.toString(),new HashMap<>(),null); + JSONObject res = ProtUtil.doPost(subTable.toString(),memberOrganizationUpdateUrl); + log.info(res.toString()); + if(res.getInteger("code")==0){ + JSONObject resData = res.getJSONObject("data"); + ret+=resData.getString("name")+"修改成功"; + log.info("人员组织架构修改完成:人员名称为"+resData.getString("name")+",ID为"+resData.getString("id")); + }else{ + isSuccess--; + JSONObject message = res.getJSONObject("message"); + ret+=memberjson.getString("name")+"修改失败"+message; + log.info("人员组织架构修改失败:人员名称为"+memberjson.getString("name")+",ID为"+memberjson.getString("id")+message); + } + } + }else{ +// 人员不存在 + ret = ret+v3xOrgMember.getName()+"不存在,无法修改;"; + } + context.setRequest(subTables.toString()); + context.setResponse(ret); + } + if(isSuccess == subTables.size()){ + context.success(ret,false); + formDataVo.getNewFieldDataMap().put("组织返回结果", ret); + }else{ + log.info(ret); + context.back(ret); + formDataVo.getNewFieldDataMap().put("组织返回结果", ret); + } + return context; + } +} diff --git a/src/com/seeyon/apps/src_membermanage/node/RegistrationofApplicantsNode.java b/src/com/seeyon/apps/src_membermanage/node/RegistrationofApplicantsNode.java new file mode 100644 index 0000000..9c90d96 --- /dev/null +++ b/src/com/seeyon/apps/src_membermanage/node/RegistrationofApplicantsNode.java @@ -0,0 +1,29 @@ +package com.seeyon.apps.src_membermanage.node; + +import com.seeyon.apps.src_membermanage.MemberManageCommonNode; + +/** + * 应聘人员登记档案表超级节点 + */ +public class RegistrationofApplicantsNode extends MemberManageCommonNode { + + @Override + public String getMethod() { + return ""; + } + + @Override + public String getRequestType() { + return ""; + } + + @Override + public String getNodeId() { + return "RegistrationofApplicantsNode"; + } + + @Override + public String getNodeName() { + return "应聘人员登记档案表超级节点"; + } +} diff --git a/src/com/seeyon/apps/src_membermanage/node/TrainingRecordNode.java b/src/com/seeyon/apps/src_membermanage/node/TrainingRecordNode.java new file mode 100644 index 0000000..6f4652f --- /dev/null +++ b/src/com/seeyon/apps/src_membermanage/node/TrainingRecordNode.java @@ -0,0 +1,208 @@ +package com.seeyon.apps.src_membermanage.node; + +import cn.hutool.log.Log; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.common.config.ICstConfigApi; +import com.seeyon.apps.common.plugin.vo.ConfigVo; +import com.seeyon.apps.common.workflow.node.ACommonSuperNode; +import com.seeyon.apps.ext.workflow.vo.FieldDataVo; +import com.seeyon.apps.ext.workflow.vo.FormDataVo; +import com.seeyon.apps.ext.workflow.vo.SuperNodeContext; +import com.seeyon.apps.src_membermanage.constants.MemberManageConstants; +import com.seeyon.apps.src_membermanage.util.DataProcessingUtil; +import com.seeyon.apps.src_membermanage.util.ProtUtil; +import com.seeyon.apps.src_membermanage.vo.MemberManagerResponse; +import com.seeyon.cap4.form.bean.FormDataMasterBean; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.util.UUIDLong; +import www.seeyon.com.utils.StringUtil; + +import java.util.List; +import java.util.Map; + +/** + * 培训实施记录超级节点 + */ +public class TrainingRecordNode extends ACommonSuperNode { + + private static Log log = Log.get(TrainingRecordNode.class); + protected ICstConfigApi cstConfigApi = (ICstConfigApi) AppContext.getBean("cstConfigApi"); + + @Override + public String getNodeId() { + return "TrainingRecordNode"; + } + + @Override + public String getNodeName() { + return "培训实施记录超级节点"; + } + + @Override + public String getPluginId() { + return MemberManageConstants.getPluginId(); + } + + @Override + public String getFormParse() { + return "json"; + } + + public ConfigVo getMemberMamageConfig() { + return cstConfigApi.getConfig(getPluginId()); + } + + + @Override + public SuperNodeContext proceed(String request, FormDataVo formDataVo, FormDataMasterBean formDataMasterBean) throws Exception { + log.info("进入人事档案表处理流程"+getNodeId()); + ConfigVo configVo = getMemberMamageConfig(); + SuperNodeContext context = new SuperNodeContext(); + context.setNeedSave(true); + JSONObject paramJson = JSONObject.parseObject(request); + String mainUrl = configVo.getParamVal(MemberManageConstants.mainUrl.name()); + String getzsjTokenUrl = configVo.getParamVal(MemberManageConstants.getzsjTokenUrl.name()); + String restzsjUserName = configVo.getParamVal(MemberManageConstants.restzsjUserName.name()); + String restzsjPassword = configVo.getParamVal(MemberManageConstants.restzsjPassword.name()); + String zsjloginName = configVo.getParamVal(MemberManageConstants.zsjloginName.name()); +// 调用接口查询主数据token + String mainToken = ProtUtil.getToken(getzsjTokenUrl,restzsjUserName,restzsjPassword,zsjloginName); +// 获取当前表单数据 +// Map> SubFormMap = formDataVo.getSubFormMap(); + List subForms = formDataVo.getSubFormMap().get("明细表1"); + for (FormDataVo subFormDataVo : subForms) { +// 每一行就是一个变更数据封装封装修改的人员参数执行修改操作 +// 创建唯一值查询参数 + JSONObject isExistUpdateParam = new JSONObject(); + isExistUpdateParam.put("formCode",paramJson.getString("formCode")); + JSONObject uniqueness = new JSONObject(); + JSONObject uniquenessjson = paramJson.getJSONObject("uniqueness"); + for (Map.Entry entry:uniquenessjson.entrySet()) { + FieldDataVo fieldDataVo = subFormDataVo.getFieldData(entry.getValue().toString()); + uniqueness.put(entry.getKey(),fieldDataVo.getDbValue()); + } + isExistUpdateParam.put("uniqueness",uniqueness); +// 调用接口查询当前数据是否存在 + String isExistUpdateUrl = mainUrl+"/seeyon/rest/formTable/quart?token="+mainToken; + String formmainIdUpdate = ProtUtil.doGet(isExistUpdateUrl,isExistUpdateParam); + JSONObject formmainIdUpdatejson = JSONObject.parseObject(formmainIdUpdate); + JSONObject formmainIdUpdateData = formmainIdUpdatejson.getJSONObject("data"); + String formmainUpdate = formmainIdUpdateData.getString("id"); + if(StringUtil.isNotEmpty(formmainUpdate)){ +// 当前数据已经存在执行修改逻辑 + JSONObject param = new JSONObject(); +// 设置基本数据 + param.put("doTrigger",paramJson.getBooleanValue("doTrigger")); + param.put("formCode",paramJson.getString("formCode")); + param.put("loginName",paramJson.getString("loginName")); + param.put("rightId",paramJson.getString("rightIdUpdate")); + JSONArray dataList = new JSONArray(); + JSONObject data = new JSONObject(); + JSONObject paramDataList = paramJson.getJSONObject("dataList"); + JSONObject paramMasterTable = paramDataList.getJSONObject("masterTable"); + JSONObject masterTable = new JSONObject(); + masterTable.put("name",paramMasterTable.getString("name")); + JSONObject record = new JSONObject(); + record.put("id",formmainUpdate); +// 根据主表字段信息,设置主表参数 + JSONArray fields = new JSONArray(); + for (Map.Entry entry : paramMasterTable.getJSONObject("fields").entrySet()) { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("name",entry.getKey()); + String value = entry.getValue().toString(); + FieldDataVo subFieldDataVo ; + try { + subFieldDataVo = subFormDataVo.getFieldData(value); + } catch (NoSuchFieldException e) { + subFieldDataVo = formDataVo.getFieldData(value); + } + + String subFieldDataDb = subFieldDataVo.getDbValue()==null?"":subFieldDataVo.getDbValue().toString(); + jsonObject.put("value",subFieldDataDb); + fields.add(jsonObject); + } + record.put("fields",fields); + masterTable.put("record",record); + data.put("masterTable",masterTable); +// 根据明细表字段信息,设置明细表参数 + JSONArray subTables = new JSONArray(); + JSONArray paramSubTables = paramDataList.getJSONArray("subTables"); + for(int i = 0 ; i < paramSubTables.size();i++){ + JSONObject paramSubTable = paramSubTables.getJSONObject(i); + JSONObject subTable = new JSONObject(); + subTable.put("name",paramSubTable.getString("tableName")); + JSONArray subRecords = new JSONArray(); + JSONObject subRecord = new JSONObject(); + subRecord.put("id", UUIDLong.longUUID()+""); + JSONArray subFields = new JSONArray(); + for (Map.Entry entry : paramSubTable.getJSONObject("fields").entrySet()) { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("name",entry.getKey()); + String value = entry.getValue().toString(); + FieldDataVo subFieldDataVo; + if("成绩".equals(value)){ + subFieldDataVo = subFormDataVo.getFieldData(value); + }else{ + subFieldDataVo = formDataVo.getFieldData(value); + } + if(subFieldDataVo.getDbValue() == null ){ + jsonObject.put("value",""); + }else{ + String subFieldDataDb = subFieldDataVo.getDbValue().toString(); + jsonObject.put("value",subFieldDataDb); + } +// String subFieldDataDb = subFieldDataVo.getDbValue().toString(); +// jsonObject.put("value",subFieldDataDb); + subFields.add(jsonObject); + } + subRecord.put("fields",subFields); + subRecords.add(subRecord); + subTable.put("records",subRecords); + subTables.add(subTable); + } + data.put("subTables",subTables); + + dataList.add(data); + param.put("dataList",dataList); + + context.setRequest(param.toString()); + log.info(param.toString()); +// 获取调用接口路径 + String formmainUpdateUrl = mainUrl+"/seeyon/rest/cap4/form/soap/batch-update?token="+mainToken; + context.setUrl(formmainUpdateUrl); + JSONObject res = ProtUtil.doPost(param.toString(),formmainUpdateUrl); + log.info(res.toString()); + context.setResponse(res.toString()); + MemberManagerResponse mmr = new MemberManagerResponse(res); + if(mmr.isSuccess()){ + String resDatastr = mmr.getData(); + Map resData = DataProcessingUtil.convertStringToMap(resDatastr); + List successIdList = (List)resData.get("successIdList"); + if(successIdList.size()>0){ + String fid = successIdList.get(0); + log.info("档案表修改完成,返回结果为"+resDatastr); + context.success("档案表修改完成,当前档案表ID为"+fid,false); + formDataVo.getNewFieldDataMap().put("返回结果", "档案表修改完成,当前档案表ID为"+fid); + }else{ + Map failedData = (Map)resData.get("failedData"); + for (Map.Entry entry:failedData.entrySet()) { + context.back("档案表修改失败:创建异常:" + entry.getValue()); + context.setErrMsg(mmr.getMsg()); + formDataVo.getNewFieldDataMap().put("返回结果", "档案表修改失败:创建异常:"+entry.getValue()); + } + } + + }else{ + context.back("档案表修改失败:修改异常:" + mmr.getMsg()); + context.setErrMsg(mmr.getMsg()); + formDataVo.getNewFieldDataMap().put("返回结果", "档案表修改失败:修改异常:"+mmr.getMsg()); + } + }else{ + context.success("没有查询到需要修改的数据,跳过处理"); + formDataVo.getNewFieldDataMap().put("返回结果", "没有查询到需要修改的数据,请检查唯一值是否正确"); + } + } + return context; + } +} diff --git a/src/com/seeyon/apps/src_membermanage/util/DataProcessingUtil.java b/src/com/seeyon/apps/src_membermanage/util/DataProcessingUtil.java new file mode 100644 index 0000000..0824afe --- /dev/null +++ b/src/com/seeyon/apps/src_membermanage/util/DataProcessingUtil.java @@ -0,0 +1,53 @@ +package com.seeyon.apps.src_membermanage.util; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class DataProcessingUtil { + + public static Map convertStringToMap(String input) { + Map resultMap = new HashMap<>(); + input = input.substring(1, input.length() - 1); + String[] keyValuePairs = input.split(", "); + + for (String pair : keyValuePairs) { + String[] parts = pair.split("=", 2); + String key = parts[0]; + String valueStr = parts[1]; + + if (valueStr.startsWith("[")) { + List list = new ArrayList<>(); + String listContent = valueStr.substring(1, valueStr.length() - 1); + if (!listContent.isEmpty()) { + String[] items = listContent.split(","); + for (String item : items) { + list.add(item.trim()); + } + } + resultMap.put(key, list); + } else if (valueStr.startsWith("{")) { + Map nestedMap = new HashMap<>(); + String nestedStr = valueStr.substring(1, valueStr.length() - 1); + if (!nestedStr.isEmpty()) { + String[] nestedPairs = nestedStr.split(", "); + for (String nestedPair : nestedPairs) { + String[] nestedParts = nestedPair.split("=", 2); + nestedMap.put(nestedParts[0], nestedParts[1]); + } + } + resultMap.put(key, nestedMap); + } else { + try { + int intValue = Integer.parseInt(valueStr); + resultMap.put(key, intValue); + } catch (NumberFormatException e) { + resultMap.put(key, valueStr); + } + } + } + return resultMap; + } + +} diff --git a/src/com/seeyon/apps/src_membermanage/util/OrganizationParamUtil.java b/src/com/seeyon/apps/src_membermanage/util/OrganizationParamUtil.java new file mode 100644 index 0000000..d0fc4bb --- /dev/null +++ b/src/com/seeyon/apps/src_membermanage/util/OrganizationParamUtil.java @@ -0,0 +1,168 @@ +package com.seeyon.apps.src_membermanage.util; + +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.common.plugin.vo.ConfigVo; +import com.seeyon.apps.ext.workflow.vo.FieldDataVo; +import com.seeyon.apps.ext.workflow.vo.FormDataVo; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.common.ctpenumnew.manager.EnumManager; +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.ctp.common.po.ctpenumnew.CtpEnumItem; +import com.seeyon.ctp.organization.manager.OrgManager; +import com.seeyon.ctp.util.UUIDLong; +import www.seeyon.com.utils.StringUtil; + +import java.io.IOException; + +public class OrganizationParamUtil { + + private OrgManager orgManager; + public void setOrgManager(OrgManager orgManager) {this.orgManager = orgManager; } + public OrgManager getOrgManager() { + if (orgManager == null) {orgManager = (OrgManager) AppContext.getBean("orgManager");}return orgManager; + } + + private EnumManager enumManagerNew; + public void setEnumManagerNew(EnumManager enumManagerNew) {this.enumManagerNew = enumManagerNew; } + public EnumManager getEnumManagerNew() { + if (enumManagerNew == null) {enumManagerNew = (EnumManager) AppContext.getBean("enumManagerNew");}return enumManagerNew; + } + + + public String organizationAddParam(String param, FormDataVo formDataVo, String nodeId, ConfigVo configVo) throws BusinessException, NoSuchFieldException, IOException { + String res = memberOrganizationAdd(param,formDataVo,configVo); + return res; + } + + public String memberOrganizationAdd(String param,FormDataVo formDataVo,ConfigVo configVo) throws NoSuchFieldException, BusinessException, IOException { + JSONObject paramJson = JSONObject.parseObject(param); + String formType = paramJson.getString("formType"); + if("org".equals(formType)){ + paramJson = handleOrganizationAdd(paramJson,formDataVo,configVo); + } + return paramJson.toString(); + } + + public JSONObject handleOrganizationAdd( JSONObject paramJson, FormDataVo formDataVo, ConfigVo configVo) throws NoSuchFieldException, BusinessException { + paramJson.put("id", UUIDLong.longUUID()+""); +// 获取单位字段名称 + String orgAccountIdName = paramJson.getString("orgAccountId"); +// 获取单位字段值 + FieldDataVo orgAccountIdvo = formDataVo.getFieldData(orgAccountIdName); + String orgAccountId = (String)orgAccountIdvo.getDbValue(); +// 获取单位ID字段 + paramJson.put("orgAccountId",orgAccountId); + +// 获取职务级别字段名称 + String orgLevelIdName = paramJson.getString("orgLevelId"); +// 获取职务级别字段值 + FieldDataVo orgLevelIdvo = formDataVo.getFieldData(orgLevelIdName); + String orgLevelId = (String) orgLevelIdvo.getDbValue(); +// 获取职务级别ID字段 + paramJson.put("orgLevelId",orgLevelId); + +// 获取岗位字段名称 + String orgPostIdName = paramJson.getString("orgPostId"); +// 获取岗位字段值 + FieldDataVo orgPostIdvo = formDataVo.getFieldData(orgPostIdName); + String orgPostId = (String) orgPostIdvo.getDbValue(); +// 获取岗位ID字段 + paramJson.put("orgPostId",orgPostId); + +// 获取部门字段名称 + String orgDepartmentIdName = paramJson.getString("orgDepartmentId"); +// 获取部门字段值 + FieldDataVo orgDepartmentIdvo = formDataVo.getFieldData(orgDepartmentIdName); + String orgDepartmentId = (String) orgDepartmentIdvo.getDbValue(); +// 获取部门ID字段 + paramJson.put("orgDepartmentId",orgDepartmentId); + +// 判断是否为枚举字段,枚举字段转换为枚举值后推送 + if(StringUtil.isNotEmpty(paramJson.getString("gender"))){ + String genderName = paramJson.getString("gender"); + // 获取性别字段值 + FieldDataVo gendervo = formDataVo.getFieldData(genderName); + if(gendervo.getDbValue()!=null){ + String gender = gendervo.getDbValue().toString(); + CtpEnumItem genderEnum = getEnumManagerNew().getCtpEnumItem(Long.parseLong(gender)); + paramJson.put("gender",genderEnum.getValue()); + } + } + if(StringUtil.isNotEmpty(paramJson.getString("EXT_ATTR_32"))){ + String extattr32Name = paramJson.getString("EXT_ATTR_32"); + // 获取人员分类字段值 + FieldDataVo extattr32vo = formDataVo.getFieldData(extattr32Name); + String extattr32 = extattr32vo.getDbValue().toString(); + CtpEnumItem extattr32Enum = getEnumManagerNew().getCtpEnumItem(Long.parseLong(extattr32)); + paramJson.put("EXT_ATTR_32",extattr32Enum.getValue()); + } + return paramJson; + } + + + public String organizationUpdateParam(String param, FormDataVo formDataVo, String nodeId, ConfigVo configVo) throws BusinessException, NoSuchFieldException, IOException { + String res = memberOrganizationUpdate(param,formDataVo,configVo); + return res; + } + + public String memberOrganizationUpdate(String param,FormDataVo formDataVo,ConfigVo configVo) throws NoSuchFieldException, BusinessException, IOException { + JSONObject paramJson = JSONObject.parseObject(param); + String formType = paramJson.getString("formType"); + if("org".equals(formType)){ + paramJson = handleOrganizationUpdate(paramJson,formDataVo,configVo); + } + return paramJson.toString(); + } + + public JSONObject handleOrganizationUpdate( JSONObject paramJson, FormDataVo formDataVo, ConfigVo configVo) throws NoSuchFieldException{ +// 获取人员字段名称 + String orgMemberIdName = paramJson.getString("id"); +// 获取人员字段值 + FieldDataVo orgMemberIdvo = formDataVo.getFieldData(orgMemberIdName); + String orgMemberId = (String)orgMemberIdvo.getDbValue(); +// 获取人员ID字段 + paramJson.put("id", orgMemberId); +// 获取单位字段名称 + String orgAccountIdName = paramJson.getString("orgAccountId") == null ?"":paramJson.getString("orgAccountId"); +// 获取单位字段值 + if(StringUtil.isNotEmpty(orgAccountIdName)){ + FieldDataVo orgAccountIdvo = formDataVo.getFieldData(orgAccountIdName); + String orgAccountId = (String)orgAccountIdvo.getDbValue(); +// 获取单位ID字段 + paramJson.put("orgAccountId",orgAccountId); + } + +// 获取职务级别字段名称 + String orgLevelIdName = paramJson.getString("orgLevelId")==null?"":paramJson.getString("orgLevelId"); +// 获取职务级别字段值 + if(StringUtil.isNotEmpty(orgLevelIdName)){ + FieldDataVo orgLevelIdvo = formDataVo.getFieldData(orgLevelIdName); + String orgLevelId = (String) orgLevelIdvo.getDbValue(); +// 获取职务级别ID字段 + paramJson.put("orgLevelId",orgLevelId); + } + +// 获取岗位字段名称 + String orgPostIdName = paramJson.getString("orgPostId")==null?"":paramJson.getString("orgPostId"); +// 获取岗位字段值 + if(StringUtil.isNotEmpty(orgPostIdName)){ + FieldDataVo orgPostIdvo = formDataVo.getFieldData(orgPostIdName); + String orgPostId = (String) orgPostIdvo.getDbValue(); +// 获取岗位ID字段 + paramJson.put("orgPostId",orgPostId); + } + +// 获取部门字段名称 + String orgDepartmentIdName = paramJson.getString("orgDepartmentId")==null?"":paramJson.getString("orgDepartmentId"); +// 获取部门字段值 + if(StringUtil.isNotEmpty(orgDepartmentIdName)){ + FieldDataVo orgDepartmentIdvo = formDataVo.getFieldData(orgDepartmentIdName); + String orgDepartmentId = (String) orgDepartmentIdvo.getDbValue(); +// 获取部门ID字段 + paramJson.put("orgDepartmentId",orgDepartmentId); + } + return paramJson; + } + + +} diff --git a/src/com/seeyon/apps/src_membermanage/util/ParamUtil.java b/src/com/seeyon/apps/src_membermanage/util/ParamUtil.java new file mode 100644 index 0000000..3a8c3ad --- /dev/null +++ b/src/com/seeyon/apps/src_membermanage/util/ParamUtil.java @@ -0,0 +1,437 @@ +package com.seeyon.apps.src_membermanage.util; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.common.plugin.vo.ConfigVo; +import com.seeyon.apps.ext.workflow.vo.FieldDataVo; +import com.seeyon.apps.ext.workflow.vo.FormDataVo; +import com.seeyon.apps.src_membermanage.constants.MemberManageConstants; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.common.SystemEnvironment; +import com.seeyon.ctp.common.ctpenumnew.manager.EnumManager; +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.ctp.common.filemanager.manager.AttachmentManager; +import com.seeyon.ctp.common.po.ctpenumnew.CtpEnumItem; +import com.seeyon.ctp.common.po.filemanager.Attachment; +import com.seeyon.ctp.organization.bo.*; +import com.seeyon.ctp.organization.manager.OrgManager; +import com.seeyon.ctp.util.UUIDLong; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.io.IOException; +import java.util.List; +import java.util.Map; + +public class ParamUtil { + + private static final Log log = LogFactory.getLog(ParamUtil.class); + + private EnumManager enumManagerNew; + public void setEnumManagerNew(EnumManager enumManagerNew) {this.enumManagerNew = enumManagerNew; } + public EnumManager getEnumManagerNew() { + if (enumManagerNew == null) {enumManagerNew = (EnumManager) AppContext.getBean("enumManagerNew");}return enumManagerNew; + } + + private OrgManager orgManager; + public void setOrgManager(OrgManager orgManager) {this.orgManager = orgManager; } + public OrgManager getOrgManager() { + if (orgManager == null) {orgManager = (OrgManager) AppContext.getBean("orgManager");}return orgManager; + } + + private AttachmentManager attachmentManager; + public void setAttachmentManager(AttachmentManager attachmentManager) {this.attachmentManager = attachmentManager;} + public AttachmentManager getAttachmentManager() { + if (this.attachmentManager == null) {this.attachmentManager = (AttachmentManager) AppContext.getBean("attachmentManager");}return this.attachmentManager; + } + + public String formUpdateParam(String param, FormDataVo formDataVo, String nodeId, ConfigVo configVo,String formId) throws BusinessException, NoSuchFieldException, IOException { + String res = filesTableUpdate(param,formDataVo,configVo,formId); + return res; + } + + public String filesTableUpdate(String param,FormDataVo formDataVo,ConfigVo configVo,String formId) throws NoSuchFieldException, BusinessException, IOException { + JSONObject jsonObject = new JSONObject(); + JSONObject paramJson = JSONObject.parseObject(param); + String formType = paramJson.getString("formType"); + if("formmain".equals(formType)){ + jsonObject = handleFormmainUpdate(jsonObject,paramJson,formDataVo,configVo,formId); + } + return jsonObject.toString(); + } + public JSONObject handleFormmainUpdate(JSONObject jsonObject, JSONObject paramJson, FormDataVo formDataVo, ConfigVo configVo,String formId) throws NoSuchFieldException, BusinessException, IOException { + // 附件控件,选人控件,部门控件,单位控件,岗位控件,职务级别控件,枚举控件 + String memberFields = paramJson.getString("memberFields")==null?"":paramJson.getString("memberFields"); + String deptFields = paramJson.getString("deptFields")==null?"":paramJson.getString("deptFields"); + String accountFields = paramJson.getString("accountFields")==null?"":paramJson.getString("accountFields"); + String postFields = paramJson.getString("postFields")==null?"":paramJson.getString("postFields"); + String levelFields = paramJson.getString("levelFields")==null?"":paramJson.getString("levelFields"); + String enumFields = paramJson.getString("enumFields")==null?"":paramJson.getString("enumFields"); + String fileFields = paramJson.getString("fileFields")==null?"":paramJson.getString("fileFields"); +// 设置主参数字段 + jsonObject.put("formCode",paramJson.getString("formCode")); + jsonObject.put("loginName",paramJson.getString("loginName")); + jsonObject.put("rightId",paramJson.getString("rightIdUpdate")); + jsonObject.put("doTrigger",paramJson.getBooleanValue("doTrigger")); + JSONArray dataList = new JSONArray(); + + JSONObject paramDataList = paramJson.getJSONObject("dataList"); + JSONObject paramMasterTable = paramDataList.getJSONObject("masterTable"); + String paramMainname = paramMasterTable.getString("name"); + JSONObject paramMasterfields = paramMasterTable.getJSONObject("fields"); + +// 设置表单主表字段 + JSONObject data = new JSONObject(); + JSONObject masterTable = new JSONObject(); + masterTable.put("name",paramMainname); + JSONObject record = new JSONObject(); + JSONArray attachmentInfos = new JSONArray(); + JSONArray fields = handleFields(paramMasterfields,formDataVo,null,enumFields,accountFields,deptFields,postFields,levelFields, + memberFields,fileFields,configVo,attachmentInfos); + record.put("id",formId); + record.put("fields",fields); + masterTable.put("record",record); +// 添加主表数据 + data.put("masterTable",masterTable); + + JSONArray paramSubTables = paramDataList.getJSONArray("subTables"); + JSONArray subTables = new JSONArray(); + Map> subFormMap = formDataVo.getSubFormMap(); +// 遍历所有流程表数据 + for (int i = 0 ; i < paramSubTables.size();i++) { +// 获取参数配置中的字段信息 + JSONObject paramSubTable = paramSubTables.getJSONObject(i); +// 获取当前流程表单名称 + String paramSubTableName = paramSubTable.getString("name"); + if("个人履历".equals(paramSubTableName)){ +// 创建推送参数对象 + JSONObject paramFields = paramSubTable.getJSONObject("fields"); + JSONObject subTable = new JSONObject(); + subTable.put("name", paramSubTable.getString("tableName")); + JSONArray subRecords = new JSONArray(); + JSONObject subRecord = new JSONObject(); + JSONArray subFields = handleFields(paramFields,formDataVo,null,enumFields,accountFields,deptFields,postFields,levelFields, + memberFields,fileFields,configVo,attachmentInfos); + subRecord.put("id",UUIDLong.longUUID()); + subRecord.put("fields",subFields); + subRecords.add(subRecord); + subTable.put("records",subRecords); + subTables.add(subTable); + }else{ + // 根据名称获取表单中明细表信息 + List subForm = subFormMap.get(paramSubTableName); +// 获取参数配置中的字段信息 + JSONObject paramFields = paramSubTable.getJSONObject("fields"); +//// 创建推送参数对象 + JSONObject subTable = new JSONObject(); + subTable.put("name", paramSubTable.getString("tableName")); + JSONArray subRecords = new JSONArray(); + if(subForm==null){ + JSONObject subRecord = new JSONObject(); + JSONArray subFields = handleFields(paramFields,formDataVo,null,enumFields,accountFields,deptFields,postFields,levelFields, + memberFields,fileFields,configVo,attachmentInfos); + subRecord.put("id", UUIDLong.longUUID()); + subRecord.put("fields",subFields); + subRecords.add(subRecord); + }else{ + for (FormDataVo subFormDataVo : subForm) { + JSONObject subRecord = new JSONObject(); + JSONArray subFields = handleFields(paramFields,formDataVo,subFormDataVo,enumFields,accountFields,deptFields,postFields,levelFields, + memberFields,fileFields,configVo,attachmentInfos); + subRecord.put("id", UUIDLong.longUUID()); + subRecord.put("fields",subFields); + subRecords.add(subRecord); + } + } + subTable.put("records",subRecords); + subTables.add(subTable); + } + } + data.put("subTables",subTables); +// 添加附件数据 + data.put("attachmentInfos",attachmentInfos); +// 插入档案表参数 + dataList.add(data); + jsonObject.put("dataList",dataList); + + return jsonObject; + } + + public String formAddParam(String param, FormDataVo formDataVo, String nodeId, ConfigVo configVo) throws BusinessException, NoSuchFieldException, IOException { + String res =filesTableAdd(param,formDataVo,configVo); + return res; + } + + public String filesTableAdd(String param,FormDataVo formDataVo,ConfigVo configVo) throws NoSuchFieldException, BusinessException, IOException { + JSONObject jsonObject = new JSONObject(); + JSONObject paramJson = JSONObject.parseObject(param); + String formType = paramJson.getString("formType"); + if("formmain".equals(formType)){ + jsonObject = handleFormmainAdd(jsonObject,paramJson,formDataVo,configVo); + } + return jsonObject.toString(); + } + + public JSONObject handleFormmainAdd(JSONObject jsonObject, JSONObject paramJson, FormDataVo formDataVo, ConfigVo configVo) throws NoSuchFieldException, BusinessException, IOException { + // 附件控件,选人控件,部门控件,单位控件,岗位控件,职务级别控件,枚举控件 + String memberFields = paramJson.getString("memberFields")==null?"":paramJson.getString("memberFields"); + String deptFields = paramJson.getString("deptFields")==null?"":paramJson.getString("deptFields"); + String accountFields = paramJson.getString("accountFields")==null?"":paramJson.getString("accountFields"); + String postFields = paramJson.getString("postFields")==null?"":paramJson.getString("postFields"); + String levelFields = paramJson.getString("levelFields")==null?"":paramJson.getString("levelFields"); + String enumFields = paramJson.getString("enumFields")==null?"":paramJson.getString("enumFields"); + String fileFields = paramJson.getString("fileFields")==null?"":paramJson.getString("fileFields"); +// 设置主参数字段 + jsonObject.put("formCode",paramJson.getString("formCode")); + jsonObject.put("loginName",paramJson.getString("loginName")); + jsonObject.put("rightId",paramJson.getString("rightIdAdd")); + jsonObject.put("doTrigger",paramJson.getBooleanValue("doTrigger")); + JSONArray dataList = new JSONArray(); + + JSONObject paramDataList = paramJson.getJSONObject("dataList"); + JSONObject paramMasterTable = paramDataList.getJSONObject("masterTable"); + String paramMainname = paramMasterTable.getString("name"); + JSONObject paramMasterfields = paramMasterTable.getJSONObject("fields"); + +// 设置表单主表字段 + JSONObject data = new JSONObject(); + JSONObject masterTable = new JSONObject(); + masterTable.put("name",paramMainname); + JSONObject record = new JSONObject(); + JSONArray attachmentInfos = new JSONArray(); + JSONArray fields = handleFields(paramMasterfields,formDataVo,null,enumFields,accountFields,deptFields,postFields,levelFields, + memberFields,fileFields,configVo,attachmentInfos); + + record.put("fields",fields); + masterTable.put("record",record); +// 添加主表数据 + data.put("masterTable",masterTable); + + JSONArray paramSubTables = paramDataList.getJSONArray("subTables"); + JSONArray subTables = new JSONArray(); + Map> subFormMap = formDataVo.getSubFormMap(); +// 遍历所有流程表数据 + for (int i = 0 ; i < paramSubTables.size();i++) { + JSONObject paramSubTable = paramSubTables.getJSONObject(i); +// 获取当前流程表单名称 + String paramSubTableName = paramSubTable.getString("name"); + if("个人履历".equals(paramSubTableName)){ +// 获取参数配置中的字段信息 + JSONObject paramFields = paramSubTable.getJSONObject("fields"); +//// 创建推送参数对象 + JSONObject subTable = new JSONObject(); + subTable.put("name", paramSubTable.getString("tableName")); + JSONArray subRecords = new JSONArray(); + JSONObject subRecord = new JSONObject(); + JSONArray subFields = handleFields(paramFields,formDataVo,null,enumFields,accountFields,deptFields,postFields,levelFields, + memberFields,fileFields,configVo,attachmentInfos); + subRecord.put("fields",subFields); + subRecords.add(subRecord); + subTable.put("records",subRecords); + subTables.add(subTable); + }else{ +// 根据名称获取表单中明细表信息 + List subForm = subFormMap.get(paramSubTableName); + // 获取参数配置中的字段信息 + JSONObject paramFields = paramSubTable.getJSONObject("fields"); + if(subForm==null){ +//// 创建推送参数对象 + JSONObject subTable = new JSONObject(); + subTable.put("name", paramSubTable.getString("tableName")); + JSONArray subRecords = new JSONArray(); + JSONObject subRecord = new JSONObject(); + JSONArray subFields = handleFields(paramFields,formDataVo,null,enumFields,accountFields,deptFields,postFields,levelFields, + memberFields,fileFields,configVo,attachmentInfos); + subRecord.put("fields",subFields); + subRecords.add(subRecord); + subTable.put("records",subRecords); + subTables.add(subTable); + }else{ + // 创建推送参数对象 + JSONObject subTable = new JSONObject(); + subTable.put("name", paramSubTable.getString("tableName")); + JSONArray subRecords = new JSONArray(); +// 遍历所有明细表数据 + for (FormDataVo subFormDataVo : subForm) { + JSONObject subRecord = new JSONObject(); + JSONArray subFields = handleFields(paramFields,formDataVo,subFormDataVo,enumFields,accountFields,deptFields,postFields,levelFields, + memberFields,fileFields,configVo,attachmentInfos); + subRecord.put("fields",subFields); + subRecords.add(subRecord); + } + subTable.put("records",subRecords); + subTables.add(subTable); + } + } + } + data.put("subTables",subTables); +// 添加附件数据 + data.put("attachmentInfos",attachmentInfos); +// 插入档案表参数 + dataList.add(data); + jsonObject.put("dataList",dataList); + + return jsonObject; + } + + public String getjtToken(ConfigVo configVo) throws IOException { + String getTokenUrl = configVo.getParamVal(MemberManageConstants.getTokenUrl.name()); + String restUserName = configVo.getParamVal(MemberManageConstants.restUserName.name()); + String restPassword = configVo.getParamVal(MemberManageConstants.restPassword.name()); + String loginName = configVo.getParamVal(MemberManageConstants.loginName.name()); + String jttoken = ProtUtil.getToken(getTokenUrl,restUserName,restPassword,loginName); + return jttoken; + } + + public String getzsjToken(ConfigVo configVo) throws IOException { + String getzsjTokenUrl = configVo.getParamVal(MemberManageConstants.getzsjTokenUrl.name()); + String restzsjUserName = configVo.getParamVal(MemberManageConstants.restzsjUserName.name()); + String restzsjPassword = configVo.getParamVal(MemberManageConstants.restzsjPassword.name()); + String zsjloginName = configVo.getParamVal(MemberManageConstants.zsjloginName.name()); + String zsjtoken = ProtUtil.getToken(getzsjTokenUrl,restzsjUserName,restzsjPassword,zsjloginName); + return zsjtoken; + } + + + + private JSONArray handleFields(JSONObject paramFields,FormDataVo formDataVo,FormDataVo subFormDataVo,String enumFields, + String accountFields,String deptFileds,String postFields,String levelFields,String memberFields, + String fileFields,ConfigVo configVo,JSONArray attachmentInfos) throws BusinessException, IOException, NoSuchFieldException { + JSONArray subFields = new JSONArray(); + for (Map.Entry entry : paramFields.entrySet()) { + JSONObject subField = new JSONObject(); + FieldDataVo fieldDataVo = null; + try { + fieldDataVo = formDataVo.getFieldData(entry.getValue().toString()); + } catch (NoSuchFieldException e) { + if(fieldDataVo==null&&subFormDataVo!=null){ + fieldDataVo = subFormDataVo.getFieldData(entry.getValue().toString()); + } + } + if(fieldDataVo.getDbValue()==null){ + continue; + } + subField.put("name", entry.getKey()); +// 设置默认值,避免出现空参数的情况 + subField.put("value",""); + subField.put("showValue",""); +// 判断当前处理字段是否为枚举 + if (enumFields.contains(entry.getKey())) { +// 查询枚举信息 + if (fieldDataVo.getDbValue() != null) { + String dbValue = fieldDataVo.getDbValue().toString(); + long enumItemId = Long.parseLong(dbValue); + CtpEnumItem ctpEnumItem = getEnumManagerNew().getCtpEnumItem(enumItemId); +// 设置枚举数据值 + subField.put("value", ""); + subField.put("showValue", ctpEnumItem.getShowvalue()); + } +// 判断当前处理字段是否为单位 + } else if (accountFields.contains(entry.getKey())) { +// 查询单位控件信息 + if (fieldDataVo.getDbValue() != null) { + String dbValue = fieldDataVo.getDbValue().toString(); + long accountId = Long.parseLong(dbValue); + V3xOrgAccount v3xOrgAccount = getOrgManager().getAccountById(accountId); +// 设置单位数据值 + subField.put("value", v3xOrgAccount.getId()); + subField.put("showValue", ""); + } +// 判断当前处理字段是否为部门 + } else if (deptFileds.contains(entry.getKey())) { +// 查询部门控件信息 + if (fieldDataVo.getDbValue() != null) { + String dbValue = fieldDataVo.getDbValue().toString(); + long departmentId = Long.parseLong(dbValue); + V3xOrgDepartment v3xOrgDepartment = getOrgManager().getDepartmentById(departmentId); +// 设置部门数据值 + subField.put("value", v3xOrgDepartment.getId()); + subField.put("showValue", ""); + } +// 判断当前处理字段是否为岗位 + } else if (postFields.contains(entry.getKey())) { +// 查询岗位控件信息 + if (fieldDataVo.getDbValue() != null) { + String dbValue = fieldDataVo.getDbValue().toString(); + long postId = Long.parseLong(dbValue); + V3xOrgPost v3xOrgPost = getOrgManager().getPostById(postId); +// 设置岗位数据值 + subField.put("value", v3xOrgPost.getId()); + subField.put("showValue", ""); + } +// 判断当前处理字段是否为职务级别 + } else if (levelFields.contains(entry.getKey())) { +// 查询职务级别控件信息 + if (fieldDataVo.getDbValue() != null) { + String dbValue = fieldDataVo.getDbValue().toString(); + long levelId = Long.parseLong(dbValue); + V3xOrgLevel v3xOrglevel = getOrgManager().getLevelById(levelId); +// 设置职务级别数据值 + subField.put("value", v3xOrglevel.getId()); + subField.put("showValue", ""); + } +// 判断当前处理字段是否为人员 + } else if (memberFields.contains(entry.getKey())) { +// 查询人员控件信息 + if (fieldDataVo.getDbValue() != null) { + String dbValue = fieldDataVo.getDbValue().toString(); + log.info("档案表调整人员信息获取参数为:"+dbValue+fieldDataVo.getStringValue()+fieldDataVo.getDisplay()); + long memberId = Long.parseLong(dbValue); + V3xOrgMember v3xOrgMember = getOrgManager().getMemberById(memberId); +// 设置人员数据值 + subField.put("value", v3xOrgMember.getId()); + subField.put("showValue", ""); + } +// 判断当前处理字段是否为附件 + } else if (fileFields.contains(entry.getKey())) { +// 获取附件控件的数据 + if (fieldDataVo.getDbValue() != null) { + String dbValue = fieldDataVo.getDbValue().toString(); + List attachmentIds = getAttachmentManager().getBySubReference(Long.parseLong(dbValue)); +// 获取当前附件控件的所有附件信息 + for (int n = 0; n < attachmentIds.size(); n++) { +// 进行附件下载后上传至目标系统中 + Attachment attachment = getAttachmentManager().getAttachmentByFileURL(attachmentIds.get(n)); + Long fileUrl = attachment.getFileUrl(); + String filename = attachment.getFilename(); +// String[] fileType = filename.split("\\."); + String fileType = filename.substring(filename.lastIndexOf(".") + 1); +// String oaFileName = filename.substring(0, filename.lastIndexOf(".")); +// 调用接口下载文件,文件存放在指定的路径下 + String dowUrl = configVo.getParamVal(MemberManageConstants.dowUrl.name()) + "/" + fileUrl + "?fileName=" + fileType + "&token=" + getjtToken(configVo); + log.info("下载URL:" + dowUrl); + String str = SystemEnvironment.getApplicationFolder(); + String dowPath = str + "/memberfiles/" + formDataVo.getId() + "/" + filename; + log.info("下载地址:" + dowPath); + String download = ProtUtil.download(dowUrl, dowPath); +// String str = SystemEnvironment.getApplicationFolder(); + String uploadUrl = configVo.getParamVal(MemberManageConstants.uploadUrl.name()); + String targetUrl = uploadUrl + "?token=" + getzsjToken(configVo); + String uploadData = ProtUtil.uploadFile(targetUrl, dowPath); + JSONObject uploadFile = JSON.parseObject(uploadData); + JSONArray atts = uploadFile.getJSONArray("atts"); + if (atts.size() > 0) { + JSONObject att = atts.getJSONObject(0); + JSONObject attachmentInfo = new JSONObject(); + attachmentInfo.put("subReference", dbValue); + attachmentInfo.put("fileUrl", att.getString("fileUrl")); + attachmentInfo.put("sort", n); + attachmentInfos.add(attachmentInfo); + } + } + subField.put("value", dbValue); + subField.put("showValue", ""); + } + } else { +// 设置文本控件数据 + subField.put("value", ""); + subField.put("showValue", fieldDataVo.getStringValue()); + } + subFields.add(subField); + } + return subFields; + } + + +} diff --git a/src/com/seeyon/apps/src_membermanage/util/ProtUtil.java b/src/com/seeyon/apps/src_membermanage/util/ProtUtil.java new file mode 100644 index 0000000..86a1276 --- /dev/null +++ b/src/com/seeyon/apps/src_membermanage/util/ProtUtil.java @@ -0,0 +1,463 @@ +package com.seeyon.apps.src_membermanage.util; + +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.common.plugin.vo.ConfigVo; +import com.seeyon.apps.src_membermanage.constants.MemberManageConstants; +import org.apache.commons.httpclient.HttpStatus; +import org.apache.http.HttpEntity; +import org.apache.http.HttpResponse; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPut; +import org.apache.http.client.utils.URIBuilder; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.message.BasicHeader; +import org.apache.http.util.EntityUtils; +import www.seeyon.com.utils.StringUtil; + +import java.io.*; +import java.net.*; +import java.nio.file.Files; +import java.util.Map; + +public class ProtUtil { + + public static String uploadFile(String targetUrl, String filePath) throws IOException { + String boundary = Long.toHexString(System.currentTimeMillis()); // 随机边界 + InputStream is = null; + BufferedReader br = null; + String result = null; + String CRLF = "\r\n"; // 换行符 + URL url = new URL(targetUrl); + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + + connection.setDoOutput(true); + connection.setRequestMethod("POST"); + connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary); + + try ( + OutputStream output = connection.getOutputStream(); + PrintWriter writer = new PrintWriter(new OutputStreamWriter(output, "UTF-8"), true); + ) { + writer.append("--" + boundary).append(CRLF); + writer.append("Content-Disposition: form-data; name=\"title\"").append(CRLF); + writer.append(CRLF).append("测试11").append(CRLF).flush(); + writer.append("--" + boundary).append(CRLF); + writer.append("Content-Disposition: form-data; name=\"fileType\"").append(CRLF); + writer.append(CRLF).append("pdf").append(CRLF).flush(); + // 发送文件数据 + File file = new File(filePath); + writer.append("--" + boundary).append(CRLF); + writer.append("Content-Disposition: form-data; name=\"file\"; filename=\"" + file.getName() + "\"").append(CRLF); + writer.append("Content-Type: " + URLConnection.guessContentTypeFromName(file.getName())).append(CRLF); + writer.append(CRLF).flush(); + + Files.copy(file.toPath(), output); + output.flush(); // 确保文件数据发送完毕 + + writer.append(CRLF).flush(); // 结束行 + writer.append("--" + boundary + "--").append(CRLF); + } + + int responseCode = connection.getResponseCode(); + // 连接对象获取一个输入流,向远程读取 + if (connection.getResponseCode() == 200) { + + is = connection.getInputStream(); + // 对输入流对象进行包装:charset根据工作项目组的要求来设置 + br = new BufferedReader(new InputStreamReader(is, "UTF-8")); + + StringBuffer sbf = new StringBuffer(); + String temp = null; + // 循环遍历一行一行读取数据 + while ((temp = br.readLine()) != null) { + sbf.append(temp); + sbf.append("\r\n"); + } + result = sbf.toString(); + System.out.println(result); + } + // 关闭资源 + if (null != br) { + try { + br.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + if (null != is) { + try { + is.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + connection.disconnect(); + return result; + } + + /** + * 调用post接口 + * + * @param str 调用接口传递的参数json + * @param urlStr 需要调用的url对应的参数文件中的编码 + * @return + */ + public static JSONObject doPost(String str, String urlStr) { + HttpURLConnection connection = null; + InputStream is = null; + OutputStream os = null; + BufferedReader br = null; + String result = null; + try { + URL url = new URL(urlStr); + // 通过远程url连接对象打开连接 + connection = (HttpURLConnection) url.openConnection(); + // 设置连接请求方式 + connection.setRequestMethod("POST"); + // 设置连接主机服务器超时时间:15000毫秒 + connection.setConnectTimeout(15000); + // 设置读取主机服务器返回数据超时时间:60000毫秒 + connection.setReadTimeout(60000); + + // 默认值为:false,当向远程服务器传送数据/写数据时,需要设置为true + connection.setDoOutput(true); + // 默认值为:true,当前向远程服务读取数据时,设置为true,该参数可有可无 + connection.setDoInput(true); + // 设置传入参数的格式:请求参数应该是 name1=value1&name2=value2 的形式。 + connection.setRequestProperty("Content-Type", "application/json"); + // 通过连接对象获取一个输出流 + os = connection.getOutputStream(); + // 通过输出流对象将参数写出去/传输出去,它是通过字节数组写出的 + if (!("".equals(str) || str == null)) { + os.write(str.getBytes("UTF-8")); + } + // 连接对象获取一个输入流,向远程读取 + if (connection.getResponseCode() == 200) { + + is = connection.getInputStream(); + // 对输入流对象进行包装:charset根据工作项目组的要求来设置 + br = new BufferedReader(new InputStreamReader(is, "UTF-8")); + + StringBuffer sbf = new StringBuffer(); + String temp = null; + // 循环遍历一行一行读取数据 + while ((temp = br.readLine()) != null) { + sbf.append(temp); + sbf.append("\r\n"); + } + result = sbf.toString(); + } + } catch (MalformedURLException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } finally { + // 关闭资源 + if (null != br) { + try { + br.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + if (null != os) { + try { + os.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + if (null != is) { + try { + is.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + // 断开与远程地址url的连接 + connection.disconnect(); + } + JSONObject json = JSONObject.parseObject(result); + return json; + + } + + + public static void downloadFile(String urlStr, String filePath){ + String accesstoken = "T3KbU3zlRL"; + String appSecret = "owmMX93AfGZQBF2NCuH9a7i9TOeF5x"; + HttpURLConnection conn = null; + OutputStream out = null; + try { + + StringBuilder urlBuilder = new StringBuilder(urlStr); + + URL url = new URL(urlBuilder.toString()); + conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("GET"); + conn.setRequestProperty("Host", url.getHost()); + conn.setRequestProperty("Accept", "text/plain,application/json"); + conn.setRequestProperty("User-Agent", "privateapp-java-api-client"); + conn.setDoOutput(true); + conn.setDoInput(true); + conn.setUseCaches(false); + + + int statusCode = conn.getResponseCode(); + StringBuilder response = new StringBuilder(); + if (statusCode == 200) { + try (InputStream ins = conn.getInputStream()){ + try (OutputStream outputStream = new FileOutputStream(filePath)) { + int bytesRead; + byte[] buffer = new byte[4096]; + while ((bytesRead = ins.read(buffer)) != -1) { + outputStream.write(buffer, 0, bytesRead); + } + } + //process response data + } catch (Exception e){ + // 处理异常情况 + } + } else { + // 处理异常情况 + } + } catch (IOException e) { + e.printStackTrace(); + } finally { + try { + if (conn != null) { + conn.disconnect(); + } + if (out != null) { + out.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + + /** + * 执行get请求 + * + * @return + * @throws IOException + * @throws FileNotFoundException + */ + public static String doGet(String geturl,JSONObject param) throws FileNotFoundException, IOException, URISyntaxException { +// 创建 HttpClient 实例 + CloseableHttpClient httpClient = HttpClients.createDefault(); + String responseBody = ""; + try { + // 构建包含参数的 URI + URIBuilder uriBuilder = new URIBuilder(geturl); + if(param.size()>0){ + uriBuilder.addParameter("params", param.toString()); + } + URI uri = uriBuilder.build(); + // 创建 HttpGet 对象 + HttpGet httpGet = new HttpGet(uri); + + // 发送请求并获取响应 + CloseableHttpResponse response = httpClient.execute(httpGet); + + try { + // 获取响应实体并转换为字符串 + responseBody = EntityUtils.toString(response.getEntity()); + } finally { + // 关闭响应 + response.close(); + } + } catch (URISyntaxException e) { + System.err.println("URI 构建错误: " + e.getMessage()); + } catch (IOException e) { + System.err.println("请求发送或响应处理错误: " + e.getMessage()); + } finally { + try { + // 关闭 HttpClient + httpClient.close(); + } catch (IOException e) { + System.err.println("关闭 HttpClient 错误: " + e.getMessage()); + } + } + return responseBody; + } + + /** + * 获取一个token + * + * @return + * @throws IOException + * @throws FileNotFoundException + */ + public static String getToken(String oatokenurl,String restName,String restPassword,String loginName) throws FileNotFoundException, IOException { + String address = oatokenurl +"/"+ restName + "/" + restPassword; + if(StringUtil.isNotEmpty(loginName)){ + address = address +"?loginName="+loginName; + } + DefaultHttpClient client = new DefaultHttpClient(); + String result = ""; + HttpGet get = new HttpGet(address); + // 添加 Headers 信息 + get.addHeader(new BasicHeader("Accept", "application/json")); + try { + HttpResponse res = client.execute(get); + if (res.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { + result = EntityUtils.toString(res.getEntity()); + } + } catch (Exception e) { + throw new RuntimeException(e); + } + String token = ""; + if(result.contains("{")) { + JSONObject jsObj = JSONObject.parseObject(result); + token = jsObj.get("id").toString(); + }else { + token = result; + } + return token; + } + /** + * 下载文件到指定目录 + * @param dowUrl:http地址 + * @param dowPath:指定目录 + * */ + public static String download(String dowUrl, String dowPath){ + try { +// log.info("下载地址是:"+dowUrl+",存储地址是:"+dowPath); + URL url = new URL(dowUrl); + + URLConnection urlConnection = url.openConnection(); + + HttpURLConnection httpURLConnection = (HttpURLConnection) urlConnection;// http的连接类 + + //String contentType = httpURLConnection.getContentType();//请求类型,可用来过滤请求, + + httpURLConnection.setConnectTimeout(1000*5);//设置超时 + + httpURLConnection.setRequestMethod("GET");//设置请求方式,默认是GET + + httpURLConnection.setRequestProperty("Charset", "UTF-8");// 设置字符编码 + + httpURLConnection.connect();// 打开连接 + + BufferedInputStream bin = new BufferedInputStream(httpURLConnection.getInputStream()); + + String path = dowPath;// 指定存放位置 + File filed = new File(path); + String mergePdfPath = dowPath ; + String[] paths = mergePdfPath.split("/"); + String mpath = ""; + for(int i = 0 ; i headers, String encode){ + if(encode == null){ + encode = "utf-8"; + } + CloseableHttpResponse httpResponse = null; + CloseableHttpClient closeableHttpClient = null; + String content = null; + //since 4.3 不再使用 DefaultHttpClient + try { + + //HttpClients.createDefault()等价于 HttpClientBuilder.create().build(); + closeableHttpClient = HttpClients.createDefault(); + HttpPut httpput = new HttpPut(url); + + //设置header + httpput.setHeader("Content-type", "application/json"); + if (headers != null && headers.size() > 0) { + for (Map.Entry entry : headers.entrySet()) { + httpput.setHeader(entry.getKey(),entry.getValue().toString()); + } + } + //组织请求参数 + StringEntity stringEntity = new StringEntity(stringJson, encode); + httpput.setEntity(stringEntity); + //响应信息 + httpResponse = closeableHttpClient.execute(httpput); + HttpEntity entity = httpResponse.getEntity(); + content = EntityUtils.toString(entity, encode); + } catch (Exception e) { + e.printStackTrace(); + }finally{ + try { + httpResponse.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + try { + closeableHttpClient.close(); //关闭连接、释放资源 + } catch (IOException e) { + e.printStackTrace(); + } + return content; + } + + + + + +} diff --git a/src/com/seeyon/apps/src_membermanage/vo/MemberManagerResponse.java b/src/com/seeyon/apps/src_membermanage/vo/MemberManagerResponse.java new file mode 100644 index 0000000..143b6d6 --- /dev/null +++ b/src/com/seeyon/apps/src_membermanage/vo/MemberManagerResponse.java @@ -0,0 +1,76 @@ +package com.seeyon.apps.src_membermanage.vo; + +import com.alibaba.fastjson.JSONObject; + +/** + * 功能描述:
+ *
+ *
+ * 
+ * + * @Author: HuangZhengguo + * @Date: 2024/4/28 + */ +public class MemberManagerResponse { + + private boolean success; + private int status; + private String msg; + private String data; + + + public MemberManagerResponse(JSONObject object) { + if(object.containsKey("code")) { + this.status = object.getString("code").equals("0")?1:2; + } else { + this.status = object.getString("status").equals("success")?1:2; + } + this.success = (1 == status); + if(object.containsKey("message")) { + this.msg = object.getString("message"); + } else { + this.msg = object.getString("errormsg"); + } + if(object.containsKey("data")) { + this.data = object.getString("data"); + } else { + this.data = object.getString("data"); + } + } + + public boolean isSuccess() { + return success; + } + + public MemberManagerResponse setSuccess(boolean success) { + this.success = success; + return this; + } + + public int getStatus() { + return status; + } + + public MemberManagerResponse setStatus(int status) { + this.status = status; + return this; + } + + public String getMsg() { + return msg; + } + + public MemberManagerResponse setMsg(String msg) { + this.msg = msg; + return this; + } + + public String getData() { + return data; + } + + public MemberManagerResponse setData(String data) { + this.data = data; + return this; + } +} diff --git a/src/com/seeyon/apps/src_membermanage/vo/MemberOrganizationResponse.java b/src/com/seeyon/apps/src_membermanage/vo/MemberOrganizationResponse.java new file mode 100644 index 0000000..8782d06 --- /dev/null +++ b/src/com/seeyon/apps/src_membermanage/vo/MemberOrganizationResponse.java @@ -0,0 +1,76 @@ +package com.seeyon.apps.src_membermanage.vo; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; + +/** + * 功能描述:
+ *
+ *
+ * 
+ * + * @Author: HuangZhengguo + * @Date: 2024/4/28 + */ +public class MemberOrganizationResponse { + + private boolean success; + private int status; + private String msg; + private String data; + + public MemberOrganizationResponse(JSONObject object) { + boolean success = object.getBooleanValue("success"); + this.success = success; + if(success){ + if(object.containsKey("successMsgs")) { + this.data = object.getJSONArray("successMsgs").toString(); + this.msg = object.getJSONArray("successMsgs").toString(); + } + }else{ + if(object.containsKey("errorMsgs")) { + this.msg = object.getJSONArray("errorMsgs").toString(); + } + if(object.containsKey("errorMsgInfos")) { + this.data = object.getJSONArray("errorMsgInfos").toString(); + } + } + + } + + public boolean isSuccess() { + return success; + } + + public MemberOrganizationResponse setSuccess(boolean success) { + this.success = success; + return this; + } + + public int getStatus() { + return status; + } + + public MemberOrganizationResponse setStatus(int status) { + this.status = status; + return this; + } + + public String getMsg() { + return msg; + } + + public MemberOrganizationResponse setMsg(String msg) { + this.msg = msg; + return this; + } + + public String getData() { + return data; + } + + public MemberOrganizationResponse setData(String data) { + this.data = data; + return this; + } +} diff --git a/src/com/seeyon/apps/src_organizationInitialization/OrganizationInitializationPluginApi.java b/src/com/seeyon/apps/src_organizationInitialization/OrganizationInitializationPluginApi.java new file mode 100644 index 0000000..8d54216 --- /dev/null +++ b/src/com/seeyon/apps/src_organizationInitialization/OrganizationInitializationPluginApi.java @@ -0,0 +1,47 @@ +package com.seeyon.apps.src_organizationInitialization; + +import com.seeyon.apps.common.plugin.api.APluginInfoApi; +import com.seeyon.apps.common.plugin.vo.ConfigVo; +import com.seeyon.apps.src_organizationInitialization.constant.OrganizationInitializationConstants; + +import java.util.Map; + +public class OrganizationInitializationPluginApi extends APluginInfoApi { + public OrganizationInitializationPluginApi() { + } + + public String getPluginId() { + System.out.println(OrganizationInitializationConstants.getPluginId()); + return OrganizationInitializationConstants.getPluginId(); + } + + public String getCreateUser() { + return "橙阳科技"; + } + + public String getDescription() { + return "集团组织架构同步管理"; + } + + public ConfigVo getDefaultConfig() { + ConfigVo configVo = new ConfigVo(); + OrganizationInitializationConstants[] var2 = OrganizationInitializationConstants.values(); + int var3 = var2.length; + + for(int var4 = 0; var4 < var3; ++var4) { + OrganizationInitializationConstants value = var2[var4]; + if (value != OrganizationInitializationConstants.plugin) { + configVo.getDevParams().put(value.name(), value.getDefaultValue()); + configVo.getProdParams().put(value.name(), value.getDefaultValue()); + configVo.getParamMap().put(value.name(), value.getDescription()); + } + } + + return configVo; + } + + public void registerCustomEvent(Map eventAndNodes) { + eventAndNodes.put("propertyDispose", "集团组织架构同步管理"); + } +} + diff --git a/src/com/seeyon/apps/src_organizationInitialization/constant/OrganizationInitializationConstants.java b/src/com/seeyon/apps/src_organizationInitialization/constant/OrganizationInitializationConstants.java new file mode 100644 index 0000000..3a5e63d --- /dev/null +++ b/src/com/seeyon/apps/src_organizationInitialization/constant/OrganizationInitializationConstants.java @@ -0,0 +1,36 @@ +package com.seeyon.apps.src_organizationInitialization.constant; + +public enum OrganizationInitializationConstants { + plugin("src_organizationInitialization", "插件ID"), + getTokenUrl("http://127.0.0.1:8888/seeyon/rest/token", "集团TOKEN接口路径"), + restUserName("shenxian", "集团REST用户名"), + restPassword("ccfa57fe-cf2f-4d26-a24c-a0801a431168", "集团REST密码"), + loginName("shenxian", "集团管理员登录名"), + uploadUrl("http://127.0.0.1:8888/seeyon/rest/attachment", "主数据平台上传接口"), + getzsjTokenUrl("http://127.0.0.1:8888/seeyon/rest/token", "主数据TOKEN接口路径"), + restzsjUserName("shenxian", "主数据REST用户名"), + restzsjPassword("ccfa57fe-cf2f-4d26-a24c-a0801a431168", "主数据REST密码"), + zsjloginName("shenxian", "主数据管理员账号"), + archiveUrl("http://127.0.0.1:8888/seeyon/rest/bpm/process/start", "主数据档案表新增接口路径"), + dowUrl("http://127.0.0.1:8888/seeyon/rest/attachment/file", "附件下载路径"); + + private String defaultValue; + private String description; + + private OrganizationInitializationConstants(String defaultValue, String description) { + this.defaultValue = defaultValue; + this.description = description; + } + + public String getDefaultValue() { + return this.defaultValue; + } + + public String getDescription() { + return this.description; + } + + public static String getPluginId() { + return plugin.defaultValue; + } +} \ No newline at end of file diff --git a/src/com/seeyon/apps/src_organizationInitialization/dao/IOrganizationInitializationDao.java b/src/com/seeyon/apps/src_organizationInitialization/dao/IOrganizationInitializationDao.java new file mode 100644 index 0000000..3b6ff21 --- /dev/null +++ b/src/com/seeyon/apps/src_organizationInitialization/dao/IOrganizationInitializationDao.java @@ -0,0 +1,36 @@ +package com.seeyon.apps.src_organizationInitialization.dao; + +import java.util.List; +import java.util.Map; + +public interface IOrganizationInitializationDao { + +// 根据人员ID获取人员档案信息 + public List> getMemberFileByMemberId(String memberId); +// 获取所有人员档案信息 + public List> getMemberFiles(); +// 获取指定人员的教育经历 + public List> getMemberjyjls(String formmainId); +// 获取指定人员的教育经历 + public List> getMembergzjls(String formmainId); +// 获取指定人员的家庭情况 + public List> getMemberjtqks(String formmainId); +// 获取指定人员的培训明细 + public List> getMemberpxmxs(String formmainId); +// 获取指定人员的合同明细 + public List> getMemberhtmxs(String formmainId); +// 获取指定人员的奖惩明细 + public List> getMemberjcmxs(String formmainId); +// 获取指定人员的考情绩效明细 + public List> getMemberkqjxs(String formmainId); +// 获取指定人员的个人履历 + public List> getMembergrlls(String formmainId); +// 获取指定人员的荣誉证书 + public List> getMemberryzss(String formmainId); +// 获取指定人员的重要社会关系 + public List> getMemberzygxs(String formmainId); +// 获取指定人员的重要社会关系 + public List> getMemberwcqks(String formmainId); + + +} diff --git a/src/com/seeyon/apps/src_organizationInitialization/dao/impl/OrganizationInitializationDaoImpl.java b/src/com/seeyon/apps/src_organizationInitialization/dao/impl/OrganizationInitializationDaoImpl.java new file mode 100644 index 0000000..69004be --- /dev/null +++ b/src/com/seeyon/apps/src_organizationInitialization/dao/impl/OrganizationInitializationDaoImpl.java @@ -0,0 +1,393 @@ +package com.seeyon.apps.src_organizationInitialization.dao.impl; + +import com.seeyon.apps.src_organizationInitialization.dao.IOrganizationInitializationDao; +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.ctp.util.JDBCAgent; + +import java.sql.SQLException; +import java.util.*; + +public class OrganizationInitializationDaoImpl implements IOrganizationInitializationDao { + +// 本地环境 +// private String getMemberFiles = "select * from formmain_0199"; +// private String getMemberjyjls = "select * from formson_0200 where formmain_id = ?"; +// private String getMembergzjls = "select * from formson_0201 where formmain_id = ?"; +// private String getMemberjtqks = "select * from formson_0202 where formmain_id = ?"; +// private String getMemberpxmxs = "select * from formson_0203 where formmain_id = ?"; +// private String getMemberhtmxs = "select * from formson_0204 where formmain_id = ?"; +// private String getMemberjcmxs = "select * from formson_0205 where formmain_id = ?"; +// private String getMemberkqjxs = "select * from formson_0206 where formmain_id = ?"; +// private String getMembergrlls = "select * from formson_0207 where formmain_id = ?"; +// private String getMemberryzss = "select * from formson_0208 where formmain_id = ?"; +// private String getMemberzygxs = "select * from formson_0209 where formmain_id = ?"; +// private String getMemberwcqks = "select * from formson_0210 where formmain_id = ?"; + +// 正式环境 + private String getMemberFileByMemberId = "select * from formmain_10295 where field0007 = ?"; + private String getMemberFiles = "select * from formmain_10295"; + private String getMemberjyjls = "select * from formson_10296 where formmain_id = ?"; + private String getMembergzjls = "select * from formson_10297 where formmain_id = ?"; + private String getMemberjtqks = "select * from formson_10298 where formmain_id = ?"; + private String getMemberpxmxs = "select * from formson_10312 where formmain_id = ?"; + private String getMemberhtmxs = "select * from formson_10322 where formmain_id = ?"; + private String getMemberjcmxs = "select * from formson_10347 where formmain_id = ?"; + private String getMemberkqjxs = "select * from formson_10351 where formmain_id = ?"; + private String getMembergrlls = "select * from formson_10388 where formmain_id = ?"; + private String getMemberryzss = "select * from formson_10401 where formmain_id = ?"; + private String getMemberzygxs = "select * from formson_10409 where formmain_id = ?"; + private String getMemberwcqks = "select * from formson_10554 where formmain_id = ?"; + + public List> getMemberFileByMemberId(String memberId){ + List> ret = new ArrayList>(); + JDBCAgent agent = new JDBCAgent(); + try { + StringBuilder sql = new StringBuilder(getMemberFileByMemberId); + List p = new ArrayList(); + p.add(memberId); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + for (Map map : list) { + ret.add(map); + } + } catch (BusinessException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (SQLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + }finally { + if (agent != null) { + agent.close(); + } + } + return ret; + } + + + @Override + public List> getMemberFiles() { + List> ret = new ArrayList>(); + JDBCAgent agent = new JDBCAgent(); + try { + StringBuilder sql = new StringBuilder(getMemberFiles); + List p = new ArrayList(); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + for (Map map : list) { + ret.add(map); + } + } catch (BusinessException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (SQLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + }finally { + if (agent != null) { + agent.close(); + } + } + return ret; + } + + @Override + public List> getMemberjyjls(String formmainId) { + List> ret = new ArrayList>(); + JDBCAgent agent = new JDBCAgent(); + try { + StringBuilder sql = new StringBuilder(getMemberjyjls); + List p = new ArrayList(); + p.add(formmainId); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + for (Map map : list) { + ret.add(map); + } + } catch (BusinessException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (SQLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + }finally { + if (agent != null) { + agent.close(); + } + } + return ret; + } + + @Override + public List> getMembergzjls(String formmainId) { + List> ret = new ArrayList>(); + JDBCAgent agent = new JDBCAgent(); + try { + StringBuilder sql = new StringBuilder(getMembergzjls); + List p = new ArrayList(); + p.add(formmainId); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + for (Map map : list) { + ret.add(map); + } + } catch (BusinessException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (SQLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + }finally { + if (agent != null) { + agent.close(); + } + } + return ret; + } + + @Override + public List> getMemberjtqks(String formmainId) { + List> ret = new ArrayList>(); + JDBCAgent agent = new JDBCAgent(); + try { + StringBuilder sql = new StringBuilder(getMemberjtqks); + List p = new ArrayList(); + p.add(formmainId); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + for (Map map : list) { + ret.add(map); + } + } catch (BusinessException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (SQLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + }finally { + if (agent != null) { + agent.close(); + } + } + return ret; + } + + @Override + public List> getMemberpxmxs(String formmainId) { + List> ret = new ArrayList>(); + JDBCAgent agent = new JDBCAgent(); + try { + StringBuilder sql = new StringBuilder(getMemberpxmxs); + List p = new ArrayList(); + p.add(formmainId); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + for (Map map : list) { + ret.add(map); + } + } catch (BusinessException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (SQLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + }finally { + if (agent != null) { + agent.close(); + } + } + return ret; + } + + @Override + public List> getMemberhtmxs(String formmainId) { + List> ret = new ArrayList>(); + JDBCAgent agent = new JDBCAgent(); + try { + StringBuilder sql = new StringBuilder(getMemberhtmxs); + List p = new ArrayList(); + p.add(formmainId); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + for (Map map : list) { + ret.add(map); + } + } catch (BusinessException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (SQLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + }finally { + if (agent != null) { + agent.close(); + } + } + return ret; + } + + @Override + public List> getMemberjcmxs(String formmainId) { + List> ret = new ArrayList>(); + JDBCAgent agent = new JDBCAgent(); + try { + StringBuilder sql = new StringBuilder(getMemberjcmxs); + List p = new ArrayList(); + p.add(formmainId); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + for (Map map : list) { + ret.add(map); + } + } catch (BusinessException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (SQLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + }finally { + if (agent != null) { + agent.close(); + } + } + return ret; + } + + @Override + public List> getMemberkqjxs(String formmainId) { + List> ret = new ArrayList>(); + JDBCAgent agent = new JDBCAgent(); + try { + StringBuilder sql = new StringBuilder(getMemberkqjxs); + List p = new ArrayList(); + p.add(formmainId); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + for (Map map : list) { + ret.add(map); + } + } catch (BusinessException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (SQLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + }finally { + if (agent != null) { + agent.close(); + } + } + return ret; + } + + @Override + public List> getMembergrlls(String formmainId) { + List> ret = new ArrayList>(); + JDBCAgent agent = new JDBCAgent(); + try { + StringBuilder sql = new StringBuilder(getMembergrlls); + List p = new ArrayList(); + p.add(formmainId); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + for (Map map : list) { + ret.add(map); + } + } catch (BusinessException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (SQLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + }finally { + if (agent != null) { + agent.close(); + } + } + return ret; + } + + @Override + public List> getMemberryzss(String formmainId) { + List> ret = new ArrayList>(); + JDBCAgent agent = new JDBCAgent(); + try { + StringBuilder sql = new StringBuilder(getMemberryzss); + List p = new ArrayList(); + p.add(formmainId); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + for (Map map : list) { + ret.add(map); + } + } catch (BusinessException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (SQLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + }finally { + if (agent != null) { + agent.close(); + } + } + return ret; + } + + @Override + public List> getMemberzygxs(String formmainId) { + List> ret = new ArrayList>(); + JDBCAgent agent = new JDBCAgent(); + try { + StringBuilder sql = new StringBuilder(getMemberzygxs); + List p = new ArrayList(); + p.add(formmainId); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + for (Map map : list) { + ret.add(map); + } + } catch (BusinessException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (SQLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + }finally { + if (agent != null) { + agent.close(); + } + } + return ret; + } + + @Override + public List> getMemberwcqks(String formmainId) { + List> ret = new ArrayList>(); + JDBCAgent agent = new JDBCAgent(); + try { + StringBuilder sql = new StringBuilder(getMemberwcqks); + List p = new ArrayList(); + p.add(formmainId); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + for (Map map : list) { + ret.add(map); + } + } catch (BusinessException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (SQLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + }finally { + if (agent != null) { + agent.close(); + } + } + return ret; + } + + + +} diff --git a/src/com/seeyon/apps/src_organizationInitialization/quartz/OrganizationInitializationQuartz.java b/src/com/seeyon/apps/src_organizationInitialization/quartz/OrganizationInitializationQuartz.java new file mode 100644 index 0000000..041842e --- /dev/null +++ b/src/com/seeyon/apps/src_organizationInitialization/quartz/OrganizationInitializationQuartz.java @@ -0,0 +1,1593 @@ +package com.seeyon.apps.src_organizationInitialization.quartz; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.common.config.ICstConfigApi; +import com.seeyon.apps.common.plugin.vo.ConfigVo; +import com.seeyon.apps.ext.quartz.AbstractQuartzTask; +import com.seeyon.apps.src_organizationInitialization.constant.OrganizationInitializationConstants; +import com.seeyon.apps.src_organizationInitialization.dao.IOrganizationInitializationDao; +import com.seeyon.apps.src_organizationInitialization.util.FormExportUtil; +import com.seeyon.apps.src_organizationInitialization.util.InterfaceListUtil; +import com.seeyon.apps.src_organizationInitialization.util.ParamUtil; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.common.SystemEnvironment; +import com.seeyon.ctp.common.ctpenumnew.manager.EnumManager; +import com.seeyon.ctp.common.filemanager.manager.AttachmentManager; +import com.seeyon.ctp.common.filemanager.manager.FileManager; +import com.seeyon.ctp.common.po.ctpenumnew.CtpEnumItem; +import com.seeyon.ctp.common.po.filemanager.Attachment; +import com.seeyon.ctp.organization.bo.*; +import com.seeyon.ctp.organization.manager.OrgManager; +import com.seeyon.ctp.organization.manager.OrgManagerDirect; +import com.seeyon.ctp.util.UUIDLong; +import org.apache.commons.io.FileUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import javax.inject.Inject; +import java.io.File; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; + +public class OrganizationInitializationQuartz extends AbstractQuartzTask { + private static final Log log = LogFactory.getLog(OrganizationInitializationQuartz.class); + @Inject + private ICstConfigApi cstConfigApi; + private AttachmentManager attachmentManager; + private volatile Date upDate; + private volatile boolean running; + + public OrganizationInitializationQuartz() { + } + + public void setAttachmentManager(AttachmentManager attachmentManager) { + this.attachmentManager = attachmentManager; + } + + public AttachmentManager getAttachmentManagery() { + if (this.attachmentManager == null) { + this.attachmentManager = (AttachmentManager) AppContext.getBean("attachmentManager"); + } + return this.attachmentManager; + } + + private FileManager fileManager; + public void setFileManager(FileManager fileManager) { + this.fileManager = fileManager; + } + + public FileManager getFileManager() { + if (this.fileManager == null) { + this.fileManager = (FileManager) AppContext.getBean("fileManager"); + } + + return this.fileManager; + } + + private IOrganizationInitializationDao organizationInitializationDao; + + public void setOrganizationInitializationDao(IOrganizationInitializationDao organizationInitializationDao) { + this.organizationInitializationDao = organizationInitializationDao; + } + + public IOrganizationInitializationDao getOrganizationInitializationDao() { + if (organizationInitializationDao == null) { + organizationInitializationDao = (IOrganizationInitializationDao) AppContext.getBean("organizationInitializationDao"); + } + return organizationInitializationDao; + } + + private EnumManager enumManagerNew; + + public void setEnumManagerNew(EnumManager enumManagerNew) { + this.enumManagerNew = enumManagerNew; + } + + public EnumManager getEnumManagerNew() { + if (enumManagerNew == null) { + enumManagerNew = (EnumManager) AppContext.getBean("enumManagerNew"); + } + return enumManagerNew; + } + + private OrgManager orgManager; + + public void setOrgManager(OrgManager orgManager) { + this.orgManager = orgManager; + } + + public OrgManager getOrgManager() { + if (orgManager == null) { + orgManager = (OrgManager) AppContext.getBean("orgManager"); + } + return orgManager; + } + + private OrgManagerDirect orgManagerDirect ; + public void setOrgManagerDirect(OrgManagerDirect orgManagerDirect) { + this.orgManagerDirect = orgManagerDirect; + } + public OrgManagerDirect getOrgManagerDirect(){ + if (orgManagerDirect == null) { + orgManagerDirect = (OrgManagerDirect) AppContext.getBean("orgManagerDirect"); + } + return orgManagerDirect; + } + + public ConfigVo getOrganizationInitializationConfig() { + return this.cstConfigApi.getConfig(this.getPluginId()); + } + + public String getPluginId() { + return OrganizationInitializationConstants.getPluginId(); + } + + public String taskRun(String tempCode) throws Exception { + //进入定时任务同步方法 + System.out.println("进入同步方法"); + FormExportUtil formExportUtil = new FormExportUtil(); + ConfigVo configVo = getOrganizationInitializationConfig(); + InterfaceListUtil interfaceListUtil = new InterfaceListUtil(); + List> memberFiles = new ArrayList<>(); + if("all".equals(tempCode)){ + log.info("查询所有人员"); +// 查询当前人员档案数据 + memberFiles = organizationInitializationDao.getMemberFiles(); + }else{ + memberFiles = organizationInitializationDao.getMemberFileByMemberId(tempCode); + } + for(int i = 0 ; i < memberFiles.size(); i++){ +// 获取通用token + String getTokenUrl = configVo.getParamVal(OrganizationInitializationConstants.getTokenUrl.name()); + String restUserName = configVo.getParamVal(OrganizationInitializationConstants.restUserName.name()); + String restPassword = configVo.getParamVal(OrganizationInitializationConstants.restPassword.name()); + String loginName = configVo.getParamVal(OrganizationInitializationConstants.loginName.name()); + String jttoken = interfaceListUtil.getToken(getTokenUrl,restUserName,restPassword,loginName); + String getzsjTokenUrl = configVo.getParamVal(OrganizationInitializationConstants.getzsjTokenUrl.name()); + String restzsjUserName = configVo.getParamVal(OrganizationInitializationConstants.restzsjUserName.name()); + String restzsjPassword = configVo.getParamVal(OrganizationInitializationConstants.restzsjPassword.name()); + String zsjloginName = configVo.getParamVal(OrganizationInitializationConstants.zsjloginName.name()); + String zsjtoken = interfaceListUtil.getToken(getzsjTokenUrl,restzsjUserName,restzsjPassword,zsjloginName); +// 主表 formmain_10295检索附件列表数据field0043照片,field0105身份证,field0103第一学历,field0140最高学历,field0144专业证书 + Map memberFile = memberFiles.get(i); +//// 创建标准参数 + JSONObject jsonObject = new JSONObject(); + jsonObject.put("formCode","ygda"); + jsonObject.put("loginName",zsjloginName); + JSONArray dataList = new JSONArray(); + + JSONObject data = new JSONObject(); + JSONObject masterTable = new JSONObject(); + JSONArray attachmentInfos = new JSONArray(); + JSONArray subTables = new JSONArray(); + JSONObject record = new JSONObject(); + record.put("id", UUIDLong.longUUID()); + JSONArray fields = new JSONArray(); + + for (Map.Entry entry : memberFile.entrySet()) { + if(!entry.getKey().contains("field")){ + continue; + } + + if(ParamUtil.isEnum(entry.getKey())){ +// 判断是否为枚举 + if(entry.getValue()!=null){ + CtpEnumItem enumItem = getEnumManagerNew().getCtpEnumItem(Long.parseLong(entry.getValue().toString())); + fields.add(formExportUtil.setParamFields(enumItem.getShowvalue(),entry.getKey(),"")); + }else{ + fields.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isDept(entry.getKey())){ +// 判断是否为部门 + if(entry.getValue()!=null){ + V3xOrgDepartment orgDepartment = getOrgManager().getDepartmentById(Long.parseLong(entry.getValue().toString())); + fields.add(formExportUtil.setParamFields(orgDepartment.getName(),entry.getKey(),orgDepartment.getId()+"")); + }else{ + fields.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isUnit(entry.getKey())){ +// 判断是否为单位 + if(entry.getValue()!=null){ + V3xOrgAccount orgAccount = getOrgManager().getAccountById(Long.parseLong(entry.getValue().toString())); + fields.add(formExportUtil.setParamFields(orgAccount.getName(),entry.getKey(),orgAccount.getId()+"")); + }else{ + fields.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isPost(entry.getKey())){ +// 判断是否为岗位 + if(entry.getValue()!=null){ + V3xOrgPost orgPost = getOrgManager().getPostById(Long.parseLong(entry.getValue().toString())); + fields.add(formExportUtil.setParamFields(orgPost.getName(),entry.getKey(),orgPost.getId()+"")); + }else{ + fields.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isLevel(entry.getKey())){ +// 判断是否为职务级别 + if(entry.getValue()!=null){ + V3xOrgLevel orgLevel = getOrgManager().getLevelById(Long.parseLong(entry.getValue().toString())); + fields.add(formExportUtil.setParamFields(orgLevel.getName(),entry.getKey(),orgLevel.getId()+"")); + }else{ + fields.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isMember(entry.getKey())){ +// 判断是否为人员 + if(entry.getValue()!=null){ + V3xOrgMember orgMember = getOrgManager().getMemberById(Long.parseLong(entry.getValue().toString())); + fields.add(formExportUtil.setParamFields(orgMember.getName(),entry.getKey(),orgMember.getId()+"")); + }else{ + fields.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isFile(entry.getKey())){ +// 判断是否为附件 + if(entry.getValue()!=null){ + List attachmentIds = attachmentManager.getBySubReference(Long.parseLong(entry.getValue().toString())); + JSONArray jsonArray = new JSONArray(); +// 获取当前附件控件的所有附件信息 + for (int n = 0 ; n < attachmentIds.size();n++) { +// 进行附件下载后上传至目标系统中 + Attachment attachment = attachmentManager.getAttachmentByFileURL(attachmentIds.get(n)); + Long fileUrl = attachment.getFileUrl(); + String filename = attachment.getFilename(); +// String[] fileType = filename.split("\\."); + String fileType = filename.substring(filename.lastIndexOf(".")+1); + String oaFileName = filename.substring(0,filename.lastIndexOf(".")); +// 调用接口下载文件,文件存放在指定的路径下 + String dowUrl = configVo.getParamVal(OrganizationInitializationConstants.dowUrl.name())+"/"+fileUrl+"?fileName="+fileType+"&token="+jttoken; + log.info("下载URL:"+dowUrl); + String str = SystemEnvironment.getApplicationFolder(); + String dowPath = str+"/memberfiles/"+memberFile.get("id")+"/"+filename; + log.info("下载地址:"+dowPath); + String download = interfaceListUtil.download(dowUrl, dowPath); +// String str = SystemEnvironment.getApplicationFolder(); + String uploadUrl = configVo.getParamVal(OrganizationInitializationConstants.uploadUrl.name()); + String targetUrl = uploadUrl+"?token="+zsjtoken; + String uploadData = interfaceListUtil.uploadFile(targetUrl,dowPath); + JSONObject uploadFile = JSON.parseObject(uploadData); + JSONArray atts = uploadFile.getJSONArray("atts"); + if(atts.size()>0){ + JSONObject att = atts.getJSONObject(0); + JSONObject attachmentInfo = new JSONObject(); + attachmentInfo.put("subReference",entry.getValue().toString()); + attachmentInfo.put("fileUrl",att.getString("fileUrl")); + attachmentInfo.put("sort",n); + attachmentInfos.add(attachmentInfo); + } + } + fields.add(formExportUtil.setParamFields("",entry.getKey(),entry.getValue().toString())); + }else{ + fields.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else{ + if(entry.getValue()!=null){ + fields.add(formExportUtil.setParamFields("",entry.getKey(),entry.getValue().toString())); + }else{ + fields.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + } + } +// 根据ID主表查询明细表信息,formson_10296 教育经历 formson_0132 + String formmainId = memberFile.get("id").toString(); + List> memberjyjls = organizationInitializationDao.getMemberjyjls(formmainId); + JSONObject subTablejyjl = new JSONObject(); + subTablejyjl.put("name","formson_0211"); + JSONArray recordsjyjl = new JSONArray(); + for(int jyjl = 0 ; jyjl memberjyjl = memberjyjls.get(jyjl); + + JSONObject recordjyjl = new JSONObject(); + recordjyjl.put("id",UUIDLong.longUUID()); + JSONArray fieldjyjls = new JSONArray(); + for (Map.Entry entry : memberjyjl.entrySet()) { + if(!entry.getKey().contains("field")){ + continue; + } + if(ParamUtil.isEnum(entry.getKey())){ +// 判断是否为枚举 + if(entry.getValue()!=null){ + CtpEnumItem enumItem = getEnumManagerNew().getCtpEnumItem(Long.parseLong(entry.getValue().toString())); + fieldjyjls.add(formExportUtil.setParamFields(enumItem.getShowvalue(),entry.getKey(),"")); + }else{ + fieldjyjls.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isDept(entry.getKey())){ +// 判断是否为部门 + if(entry.getValue()!=null){ + V3xOrgDepartment orgDepartment = getOrgManager().getDepartmentById(Long.parseLong(entry.getValue().toString())); + fieldjyjls.add(formExportUtil.setParamFields(orgDepartment.getName(),entry.getKey(),orgDepartment.getId()+"")); + }else{ + fieldjyjls.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isUnit(entry.getKey())){ +// 判断是否为单位 + if(entry.getValue()!=null){ + V3xOrgAccount orgAccount = getOrgManager().getAccountById(Long.parseLong(entry.getValue().toString())); + fieldjyjls.add(formExportUtil.setParamFields(orgAccount.getName(),entry.getKey(),orgAccount.getId()+"")); + }else{ + fieldjyjls.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isPost(entry.getKey())){ +// 判断是否为岗位 + if(entry.getValue()!=null){ + V3xOrgPost orgPost = getOrgManager().getPostById(Long.parseLong(entry.getValue().toString())); + fieldjyjls.add(formExportUtil.setParamFields(orgPost.getName(),entry.getKey(),orgPost.getId()+"")); + }else{ + fieldjyjls.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isLevel(entry.getKey())){ +// 判断是否为职务级别 + if(entry.getValue()!=null){ + V3xOrgLevel orgLevel = getOrgManager().getLevelById(Long.parseLong(entry.getValue().toString())); + fieldjyjls.add(formExportUtil.setParamFields(orgLevel.getName(),entry.getKey(),orgLevel.getId()+"")); + }else{ + fieldjyjls.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isMember(entry.getKey())){ +// 判断是否为人员 + if(entry.getValue()!=null){ + V3xOrgMember orgMember = getOrgManager().getMemberById(Long.parseLong(entry.getValue().toString())); + fieldjyjls.add(formExportUtil.setParamFields(orgMember.getName(),entry.getKey(),orgMember.getId()+"")); + }else{ + fieldjyjls.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isFile(entry.getKey())){ +// 判断是否为附件 + if(entry.getValue()!=null){ + List attachmentIds = attachmentManager.getBySubReference(Long.parseLong(entry.getValue().toString())); + JSONArray jsonArray = new JSONArray(); +// 获取当前附件控件的所有附件信息 + for (int n = 0 ; n < attachmentIds.size();n++) { +// 进行附件下载后上传至目标系统中 + Attachment attachment = attachmentManager.getAttachmentByFileURL(attachmentIds.get(n)); + Long fileUrl = attachment.getFileUrl(); + String filename = attachment.getFilename(); +// String[] fileType = filename.split("\\."); + String fileType = filename.substring(filename.lastIndexOf(".")+1); + String oaFileName = filename.substring(0,filename.lastIndexOf(".")); +// 调用接口下载文件,文件存放在指定的路径下 + String dowUrl = configVo.getParamVal(OrganizationInitializationConstants.dowUrl.name())+"/"+fileUrl+"?fileName="+fileType+"&token="+jttoken; + log.info("下载URL:"+dowUrl); + String str = SystemEnvironment.getApplicationFolder(); + String dowPath = str+"/memberfiles/"+filename; + log.info("下载地址:"+dowPath); + String download = interfaceListUtil.download(dowUrl, dowPath); +// String str = SystemEnvironment.getApplicationFolder(); + String uploadUrl = configVo.getParamVal(OrganizationInitializationConstants.uploadUrl.name()); + String targetUrl = uploadUrl+"?token="+zsjtoken; + String uploadData = interfaceListUtil.uploadFile(targetUrl,dowPath); + JSONObject uploadFile = JSON.parseObject(uploadData); + JSONArray atts = uploadFile.getJSONArray("atts"); + if(atts.size()>0){ + JSONObject att = atts.getJSONObject(0); + JSONObject attachmentInfo = new JSONObject(); + attachmentInfo.put("subReference",entry.getValue().toString()); + attachmentInfo.put("fileUrl",att.getString("fileUrl")); + attachmentInfo.put("sort",n); + attachmentInfos.add(attachmentInfo); + } + } + fieldjyjls.add(formExportUtil.setParamFields("",entry.getKey(),entry.getValue().toString())); + }else{ + fieldjyjls.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else{ + if(entry.getValue()!=null){ + fieldjyjls.add(formExportUtil.setParamFields("",entry.getKey(),entry.getValue().toString())); + }else{ + fieldjyjls.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + } + } + recordjyjl.put("fields",fieldjyjls); + recordsjyjl.add(recordjyjl); + } + subTablejyjl.put("records",recordsjyjl); + subTables.add(subTablejyjl); + +// 根据ID主表查询明细表信息,formson_10297 工作经历 formson_0133 + List> membergzjls = organizationInitializationDao.getMembergzjls(formmainId); + JSONObject subTablegzjl = new JSONObject(); + subTablegzjl.put("name","formson_0212"); + JSONArray recordsgzjl = new JSONArray(); + for(int gzjl = 0 ; gzjl membergzjl = membergzjls.get(gzjl); + + JSONObject recordgzjl = new JSONObject(); + recordgzjl.put("id",UUIDLong.longUUID()); + JSONArray fieldgzjls = new JSONArray(); + for (Map.Entry entry : membergzjl.entrySet()) { + if(!entry.getKey().contains("field")){ + continue; + } + if(ParamUtil.isEnum(entry.getKey())){ +// 判断是否为枚举 + if(entry.getValue()!=null){ + CtpEnumItem enumItem = getEnumManagerNew().getCtpEnumItem(Long.parseLong(entry.getValue().toString())); + fieldgzjls.add(formExportUtil.setParamFields(enumItem.getShowvalue(),entry.getKey(),"")); + }else{ + fieldgzjls.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isDept(entry.getKey())){ +// 判断是否为部门 + if(entry.getValue()!=null){ + V3xOrgDepartment orgDepartment = getOrgManager().getDepartmentById(Long.parseLong(entry.getValue().toString())); + fieldgzjls.add(formExportUtil.setParamFields(orgDepartment.getName(),entry.getKey(),orgDepartment.getId()+"")); + }else{ + fieldgzjls.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isUnit(entry.getKey())){ +// 判断是否为单位 + if(entry.getValue()!=null){ + V3xOrgAccount orgAccount = getOrgManager().getAccountById(Long.parseLong(entry.getValue().toString())); + fieldgzjls.add(formExportUtil.setParamFields(orgAccount.getName(),entry.getKey(),orgAccount.getId()+"")); + }else{ + fieldgzjls.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isPost(entry.getKey())){ +// 判断是否为岗位 + if(entry.getValue()!=null){ + V3xOrgPost orgPost = getOrgManager().getPostById(Long.parseLong(entry.getValue().toString())); + fieldgzjls.add(formExportUtil.setParamFields(orgPost.getName(),entry.getKey(),orgPost.getId()+"")); + }else{ + fieldgzjls.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isLevel(entry.getKey())){ +// 判断是否为职务级别 + if(entry.getValue()!=null){ + V3xOrgLevel orgLevel = getOrgManager().getLevelById(Long.parseLong(entry.getValue().toString())); + fieldgzjls.add(formExportUtil.setParamFields(orgLevel.getName(),entry.getKey(),orgLevel.getId()+"")); + }else{ + fieldgzjls.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isMember(entry.getKey())){ +// 判断是否为人员 + if(entry.getValue()!=null){ + V3xOrgMember orgMember = getOrgManager().getMemberById(Long.parseLong(entry.getValue().toString())); + fieldgzjls.add(formExportUtil.setParamFields(orgMember.getName(),entry.getKey(),orgMember.getId()+"")); + }else{ + fieldgzjls.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isFile(entry.getKey())){ +// 判断是否为附件 + if(entry.getValue()!=null){ + List attachmentIds = attachmentManager.getBySubReference(Long.parseLong(entry.getValue().toString())); + JSONArray jsonArray = new JSONArray(); +// 获取当前附件控件的所有附件信息 + for (int n = 0 ; n < attachmentIds.size();n++) { +// 进行附件下载后上传至目标系统中 + Attachment attachment = attachmentManager.getAttachmentByFileURL(attachmentIds.get(n)); + Long fileUrl = attachment.getFileUrl(); + String filename = attachment.getFilename(); +// String[] fileType = filename.split("\\."); + String fileType = filename.substring(filename.lastIndexOf(".")+1); + String oaFileName = filename.substring(0,filename.lastIndexOf(".")); +// 调用接口下载文件,文件存放在指定的路径下 + String dowUrl = configVo.getParamVal(OrganizationInitializationConstants.dowUrl.name())+"/"+fileUrl+"?fileName="+fileType+"&token="+jttoken; + log.info("下载URL:"+dowUrl); + String str = SystemEnvironment.getApplicationFolder(); + String dowPath = str+"/memberfiles/"+filename; + log.info("下载地址:"+dowPath); + String download = interfaceListUtil.download(dowUrl, dowPath); +// String str = SystemEnvironment.getApplicationFolder(); + String uploadUrl = configVo.getParamVal(OrganizationInitializationConstants.uploadUrl.name()); + String targetUrl = uploadUrl+"?token="+zsjtoken; + String uploadData = interfaceListUtil.uploadFile(targetUrl,dowPath); + JSONObject uploadFile = JSON.parseObject(uploadData); + JSONArray atts = uploadFile.getJSONArray("atts"); + if(atts.size()>0){ + JSONObject att = atts.getJSONObject(0); + JSONObject attachmentInfo = new JSONObject(); + attachmentInfo.put("subReference",entry.getValue().toString()); + attachmentInfo.put("fileUrl",att.getString("fileUrl")); + attachmentInfo.put("sort",n); + attachmentInfos.add(attachmentInfo); + } + } + fieldgzjls.add(formExportUtil.setParamFields("",entry.getKey(),entry.getValue().toString())); + }else{ + fieldgzjls.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else{ + if(entry.getValue()!=null){ + fieldgzjls.add(formExportUtil.setParamFields("",entry.getKey(),entry.getValue().toString())); + }else{ + fieldgzjls.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + } + } + recordgzjl.put("fields",fieldgzjls); + recordsgzjl.add(recordgzjl); + } + subTablegzjl.put("records",recordsgzjl); + subTables.add(subTablegzjl); + +// 根据ID主表查询明细表信息,formson_10298 家庭情况 formson_0134 + List> memberjtqks = organizationInitializationDao.getMemberjtqks(formmainId); + JSONObject subTablejtqk = new JSONObject(); + subTablejtqk.put("name","formson_0213"); + JSONArray recordsjtqk = new JSONArray(); + for(int jtqk = 0 ; jtqk memberjtqk = memberjtqks.get(jtqk); + + JSONObject recordjtqk = new JSONObject(); + recordjtqk.put("id",UUIDLong.longUUID()); + JSONArray fieldjtqks = new JSONArray(); + for (Map.Entry entry : memberjtqk.entrySet()) { + if(!entry.getKey().contains("field")){ + continue; + } + if(ParamUtil.isEnum(entry.getKey())){ +// 判断是否为枚举 + if(entry.getValue()!=null){ + CtpEnumItem enumItem = getEnumManagerNew().getCtpEnumItem(Long.parseLong(entry.getValue().toString())); + fieldjtqks.add(formExportUtil.setParamFields(enumItem.getShowvalue(),entry.getKey(),"")); + }else{ + fieldjtqks.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isDept(entry.getKey())){ +// 判断是否为部门 + if(entry.getValue()!=null){ + V3xOrgDepartment orgDepartment = getOrgManager().getDepartmentById(Long.parseLong(entry.getValue().toString())); + fieldjtqks.add(formExportUtil.setParamFields(orgDepartment.getName(),entry.getKey(),orgDepartment.getId()+"")); + }else{ + fieldjtqks.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isUnit(entry.getKey())){ +// 判断是否为单位 + if(entry.getValue()!=null){ + V3xOrgAccount orgAccount = getOrgManager().getAccountById(Long.parseLong(entry.getValue().toString())); + fieldjtqks.add(formExportUtil.setParamFields(orgAccount.getName(),entry.getKey(),orgAccount.getId()+"")); + }else{ + fieldjtqks.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isPost(entry.getKey())){ +// 判断是否为岗位 + if(entry.getValue()!=null){ + V3xOrgPost orgPost = getOrgManager().getPostById(Long.parseLong(entry.getValue().toString())); + fieldjtqks.add(formExportUtil.setParamFields(orgPost.getName(),entry.getKey(),orgPost.getId()+"")); + }else{ + fieldjtqks.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isLevel(entry.getKey())){ +// 判断是否为职务级别 + if(entry.getValue()!=null){ + V3xOrgLevel orgLevel = getOrgManager().getLevelById(Long.parseLong(entry.getValue().toString())); + fieldjtqks.add(formExportUtil.setParamFields(orgLevel.getName(),entry.getKey(),orgLevel.getId()+"")); + }else{ + fieldjtqks.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isMember(entry.getKey())){ +// 判断是否为人员 + if(entry.getValue()!=null){ + V3xOrgMember orgMember = getOrgManager().getMemberById(Long.parseLong(entry.getValue().toString())); + fieldjtqks.add(formExportUtil.setParamFields(orgMember.getName(),entry.getKey(),orgMember.getId()+"")); + }else{ + fieldjtqks.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isFile(entry.getKey())){ +// 判断是否为附件 + if(entry.getValue()!=null){ + List attachmentIds = attachmentManager.getBySubReference(Long.parseLong(entry.getValue().toString())); + JSONArray jsonArray = new JSONArray(); +// 获取当前附件控件的所有附件信息 + for (int n = 0 ; n < attachmentIds.size();n++) { +// 进行附件下载后上传至目标系统中 + Attachment attachment = attachmentManager.getAttachmentByFileURL(attachmentIds.get(n)); + Long fileUrl = attachment.getFileUrl(); + String filename = attachment.getFilename(); +// String[] fileType = filename.split("\\."); + String fileType = filename.substring(filename.lastIndexOf(".")+1); + String oaFileName = filename.substring(0,filename.lastIndexOf(".")); +// 调用接口下载文件,文件存放在指定的路径下 + String dowUrl = configVo.getParamVal(OrganizationInitializationConstants.dowUrl.name())+"/"+fileUrl+"?fileName="+fileType+"&token="+jttoken; + log.info("下载URL:"+dowUrl); + String str = SystemEnvironment.getApplicationFolder(); + String dowPath = str+"/memberfiles/"+filename; + log.info("下载地址:"+dowPath); + String download = interfaceListUtil.download(dowUrl, dowPath); +// String str = SystemEnvironment.getApplicationFolder(); + String uploadUrl = configVo.getParamVal(OrganizationInitializationConstants.uploadUrl.name()); + String targetUrl = uploadUrl+"?token="+zsjtoken; + String uploadData = interfaceListUtil.uploadFile(targetUrl,dowPath); + JSONObject uploadFile = JSON.parseObject(uploadData); + JSONArray atts = uploadFile.getJSONArray("atts"); + if(atts.size()>0){ + JSONObject att = atts.getJSONObject(0); + JSONObject attachmentInfo = new JSONObject(); + attachmentInfo.put("subReference",entry.getValue().toString()); + attachmentInfo.put("fileUrl",att.getString("fileUrl")); + attachmentInfo.put("sort",n); + attachmentInfos.add(attachmentInfo); + } + } + fieldjtqks.add(formExportUtil.setParamFields("",entry.getKey(),entry.getValue().toString())); + }else{ + fieldjtqks.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else{ + if(entry.getValue()!=null){ + fieldjtqks.add(formExportUtil.setParamFields("",entry.getKey(),entry.getValue().toString())); + }else{ + fieldjtqks.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + } + } + recordjtqk.put("fields",fieldjtqks); + recordsjtqk.add(recordjtqk); + } + subTablejtqk.put("records",recordsjtqk); + subTables.add(subTablejtqk); + +// 根据ID主表查询明细表信息,formson_10312 培训明细 formson_0135 + List> memberpxmxs = organizationInitializationDao.getMemberpxmxs(formmainId); + JSONObject subTablepxmx = new JSONObject(); + subTablepxmx.put("name","formson_0214"); + JSONArray recordspxmx = new JSONArray(); + for(int pxmx = 0 ; pxmx memberpxmx = memberpxmxs.get(pxmx); + + JSONObject recordpxmx = new JSONObject(); + recordpxmx.put("id",UUIDLong.longUUID()); + JSONArray fieldpxmxs = new JSONArray(); + for (Map.Entry entry : memberpxmx.entrySet()) { + if(!entry.getKey().contains("field")){ + continue; + } + if(ParamUtil.isEnum(entry.getKey())){ +// 判断是否为枚举 + if(entry.getValue()!=null){ + CtpEnumItem enumItem = getEnumManagerNew().getCtpEnumItem(Long.parseLong(entry.getValue().toString())); + fieldpxmxs.add(formExportUtil.setParamFields(enumItem.getShowvalue(),entry.getKey(),"")); + }else{ + fieldpxmxs.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isDept(entry.getKey())){ +// 判断是否为部门 + if(entry.getValue()!=null){ + V3xOrgDepartment orgDepartment = getOrgManager().getDepartmentById(Long.parseLong(entry.getValue().toString())); + fieldpxmxs.add(formExportUtil.setParamFields(orgDepartment.getName(),entry.getKey(),orgDepartment.getId()+"")); + }else{ + fieldpxmxs.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isUnit(entry.getKey())){ +// 判断是否为单位 + if(entry.getValue()!=null){ + V3xOrgAccount orgAccount = getOrgManager().getAccountById(Long.parseLong(entry.getValue().toString())); + fieldpxmxs.add(formExportUtil.setParamFields(orgAccount.getName(),entry.getKey(),orgAccount.getId()+"")); + }else{ + fieldpxmxs.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isPost(entry.getKey())){ +// 判断是否为岗位 + if(entry.getValue()!=null){ + V3xOrgPost orgPost = getOrgManager().getPostById(Long.parseLong(entry.getValue().toString())); + fieldpxmxs.add(formExportUtil.setParamFields(orgPost.getName(),entry.getKey(),orgPost.getId()+"")); + }else{ + fieldpxmxs.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isLevel(entry.getKey())){ +// 判断是否为职务级别 + if(entry.getValue()!=null){ + V3xOrgLevel orgLevel = getOrgManager().getLevelById(Long.parseLong(entry.getValue().toString())); + fieldpxmxs.add(formExportUtil.setParamFields(orgLevel.getName(),entry.getKey(),orgLevel.getId()+"")); + }else{ + fieldpxmxs.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isMember(entry.getKey())){ +// 判断是否为人员 + if(entry.getValue()!=null){ + V3xOrgMember orgMember = getOrgManager().getMemberById(Long.parseLong(entry.getValue().toString())); + fieldpxmxs.add(formExportUtil.setParamFields(orgMember.getName(),entry.getKey(),orgMember.getId()+"")); + }else{ + fieldpxmxs.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isFile(entry.getKey())){ +// 判断是否为附件 + if(entry.getValue()!=null){ + List attachmentIds = attachmentManager.getBySubReference(Long.parseLong(entry.getValue().toString())); + JSONArray jsonArray = new JSONArray(); +// 获取当前附件控件的所有附件信息 + for (int n = 0 ; n < attachmentIds.size();n++) { +// 进行附件下载后上传至目标系统中 + Attachment attachment = attachmentManager.getAttachmentByFileURL(attachmentIds.get(n)); + Long fileUrl = attachment.getFileUrl(); + String filename = attachment.getFilename(); +// String[] fileType = filename.split("\\."); + String fileType = filename.substring(filename.lastIndexOf(".")+1); + String oaFileName = filename.substring(0,filename.lastIndexOf(".")); +// 调用接口下载文件,文件存放在指定的路径下 + String dowUrl = configVo.getParamVal(OrganizationInitializationConstants.dowUrl.name())+"/"+fileUrl+"?fileName="+fileType+"&token="+jttoken; + log.info("下载URL:"+dowUrl); + String str = SystemEnvironment.getApplicationFolder(); + String dowPath = str+"/memberfiles/"+filename; + log.info("下载地址:"+dowPath); + String download = interfaceListUtil.download(dowUrl, dowPath); +// String str = SystemEnvironment.getApplicationFolder(); + String uploadUrl = configVo.getParamVal(OrganizationInitializationConstants.uploadUrl.name()); + String targetUrl = uploadUrl+"?token="+zsjtoken; + String uploadData = interfaceListUtil.uploadFile(targetUrl,dowPath); + JSONObject uploadFile = JSON.parseObject(uploadData); + JSONArray atts = uploadFile.getJSONArray("atts"); + if(atts.size()>0){ + JSONObject att = atts.getJSONObject(0); + JSONObject attachmentInfo = new JSONObject(); + attachmentInfo.put("subReference",entry.getValue().toString()); + attachmentInfo.put("fileUrl",att.getString("fileUrl")); + attachmentInfo.put("sort",n); + attachmentInfos.add(attachmentInfo); + } + } + fieldpxmxs.add(formExportUtil.setParamFields("",entry.getKey(),entry.getValue().toString())); + }else{ + fieldpxmxs.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else{ + if(entry.getValue()!=null){ + fieldpxmxs.add(formExportUtil.setParamFields("",entry.getKey(),entry.getValue().toString())); + }else{ + fieldpxmxs.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + } + } + recordpxmx.put("fields",fieldpxmxs); + recordspxmx.add(recordpxmx); + } + subTablepxmx.put("records",recordspxmx); + subTables.add(subTablepxmx); + +// 根据ID主表查询明细表信息,formson_10322 合同签订明细,检索附件列表数据field0063合同附件 formson_0136 + List> memberhtmxs = organizationInitializationDao.getMemberhtmxs(formmainId); + JSONObject subTablehtmx = new JSONObject(); + subTablehtmx.put("name","formson_0215"); + JSONArray recordshtmx = new JSONArray(); + for(int htmx = 0 ; htmx memberhtmx = memberpxmxs.get(htmx); + + JSONObject recordhtmx = new JSONObject(); + recordhtmx.put("id",UUIDLong.longUUID()); + JSONArray fieldhtmxs = new JSONArray(); + for (Map.Entry entry : memberhtmx.entrySet()) { + if(!entry.getKey().contains("field")){ + continue; + } + if(ParamUtil.isEnum(entry.getKey())){ +// 判断是否为枚举 + if(entry.getValue()!=null){ + CtpEnumItem enumItem = getEnumManagerNew().getCtpEnumItem(Long.parseLong(entry.getValue().toString())); + fieldhtmxs.add(formExportUtil.setParamFields(enumItem.getShowvalue(),entry.getKey(),"")); + }else{ + fieldhtmxs.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isDept(entry.getKey())){ +// 判断是否为部门 + if(entry.getValue()!=null){ + V3xOrgDepartment orgDepartment = getOrgManager().getDepartmentById(Long.parseLong(entry.getValue().toString())); + fieldhtmxs.add(formExportUtil.setParamFields(orgDepartment.getName(),entry.getKey(),orgDepartment.getId()+"")); + }else{ + fieldhtmxs.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isUnit(entry.getKey())){ +// 判断是否为单位 + if(entry.getValue()!=null){ + V3xOrgAccount orgAccount = getOrgManager().getAccountById(Long.parseLong(entry.getValue().toString())); + fieldhtmxs.add(formExportUtil.setParamFields(orgAccount.getName(),entry.getKey(),orgAccount.getId()+"")); + }else{ + fieldhtmxs.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isPost(entry.getKey())){ +// 判断是否为岗位 + if(entry.getValue()!=null){ + V3xOrgPost orgPost = getOrgManager().getPostById(Long.parseLong(entry.getValue().toString())); + fieldhtmxs.add(formExportUtil.setParamFields(orgPost.getName(),entry.getKey(),orgPost.getId()+"")); + }else{ + fieldhtmxs.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isLevel(entry.getKey())){ +// 判断是否为职务级别 + if(entry.getValue()!=null){ + V3xOrgLevel orgLevel = getOrgManager().getLevelById(Long.parseLong(entry.getValue().toString())); + fieldhtmxs.add(formExportUtil.setParamFields(orgLevel.getName(),entry.getKey(),orgLevel.getId()+"")); + }else{ + fieldhtmxs.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isMember(entry.getKey())){ +// 判断是否为人员 + if(entry.getValue()!=null){ + V3xOrgMember orgMember = getOrgManager().getMemberById(Long.parseLong(entry.getValue().toString())); + fieldhtmxs.add(formExportUtil.setParamFields(orgMember.getName(),entry.getKey(),orgMember.getId()+"")); + }else{ + fieldhtmxs.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isFile(entry.getKey())){ +// 判断是否为附件 + if(entry.getValue()!=null){ + List attachmentIds = attachmentManager.getBySubReference(Long.parseLong(entry.getValue().toString())); + JSONArray jsonArray = new JSONArray(); +// 获取当前附件控件的所有附件信息 + for (int n = 0 ; n < attachmentIds.size();n++) { +// 进行附件下载后上传至目标系统中 + Attachment attachment = attachmentManager.getAttachmentByFileURL(attachmentIds.get(n)); + Long fileUrl = attachment.getFileUrl(); + String filename = attachment.getFilename(); +// String[] fileType = filename.split("\\."); + String fileType = filename.substring(filename.lastIndexOf(".")+1); + String oaFileName = filename.substring(0,filename.lastIndexOf(".")); +// 调用接口下载文件,文件存放在指定的路径下 + String dowUrl = configVo.getParamVal(OrganizationInitializationConstants.dowUrl.name())+"/"+fileUrl+"?fileName="+fileType+"&token="+jttoken; + log.info("下载URL:"+dowUrl); + String str = SystemEnvironment.getApplicationFolder(); + String dowPath = str+"/memberfiles/"+filename; + log.info("下载地址:"+dowPath); + String download = interfaceListUtil.download(dowUrl, dowPath); +// String str = SystemEnvironment.getApplicationFolder(); + String uploadUrl = configVo.getParamVal(OrganizationInitializationConstants.uploadUrl.name()); + String targetUrl = uploadUrl+"?token="+zsjtoken; + String uploadData = interfaceListUtil.uploadFile(targetUrl,dowPath); + JSONObject uploadFile = JSON.parseObject(uploadData); + JSONArray atts = uploadFile.getJSONArray("atts"); + if(atts.size()>0){ + JSONObject att = atts.getJSONObject(0); + JSONObject attachmentInfo = new JSONObject(); + attachmentInfo.put("subReference",entry.getValue().toString()); + attachmentInfo.put("fileUrl",att.getString("fileUrl")); + attachmentInfo.put("sort",n); + attachmentInfos.add(attachmentInfo); + } + } + fieldhtmxs.add(formExportUtil.setParamFields("",entry.getKey(),entry.getValue().toString())); + }else{ + fieldhtmxs.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else{ + if(entry.getValue()!=null){ + fieldhtmxs.add(formExportUtil.setParamFields("",entry.getKey(),entry.getValue().toString())); + }else{ + fieldhtmxs.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + } + } + recordhtmx.put("fields",fieldhtmxs); + recordshtmx.add(recordhtmx); + } + subTablehtmx.put("records",recordshtmx); + subTables.add(subTablehtmx); + +// 根据ID主表查询明细表信息,formson_10347 奖惩明细 formson_0137 + List> memberjcmxs = organizationInitializationDao.getMemberjcmxs(formmainId); + JSONObject subTablejcmx = new JSONObject(); + subTablejcmx.put("name","formson_0216"); + JSONArray recordsjcmx = new JSONArray(); + for(int jcmx = 0 ; jcmx memberjcmx = memberjcmxs.get(jcmx); + + JSONObject recordjcmx = new JSONObject(); + recordjcmx.put("id",UUIDLong.longUUID()); + JSONArray fieldjcmxs = new JSONArray(); + for (Map.Entry entry : memberjcmx.entrySet()) { + if(!entry.getKey().contains("field")){ + continue; + } + if(ParamUtil.isEnum(entry.getKey())){ +// 判断是否为枚举 + if(entry.getValue()!=null){ + CtpEnumItem enumItem = getEnumManagerNew().getCtpEnumItem(Long.parseLong(entry.getValue().toString())); + fieldjcmxs.add(formExportUtil.setParamFields(enumItem.getShowvalue(),entry.getKey(),"")); + }else{ + fieldjcmxs.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isDept(entry.getKey())){ +// 判断是否为部门 + if(entry.getValue()!=null){ + V3xOrgDepartment orgDepartment = getOrgManager().getDepartmentById(Long.parseLong(entry.getValue().toString())); + fieldjcmxs.add(formExportUtil.setParamFields(orgDepartment.getName(),entry.getKey(),orgDepartment.getId()+"")); + }else{ + fieldjcmxs.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isUnit(entry.getKey())){ +// 判断是否为单位 + if(entry.getValue()!=null){ + V3xOrgAccount orgAccount = getOrgManager().getAccountById(Long.parseLong(entry.getValue().toString())); + fieldjcmxs.add(formExportUtil.setParamFields(orgAccount.getName(),entry.getKey(),orgAccount.getId()+"")); + }else{ + fieldjcmxs.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isPost(entry.getKey())){ +// 判断是否为岗位 + if(entry.getValue()!=null){ + V3xOrgPost orgPost = getOrgManager().getPostById(Long.parseLong(entry.getValue().toString())); + fieldjcmxs.add(formExportUtil.setParamFields(orgPost.getName(),entry.getKey(),orgPost.getId()+"")); + }else{ + fieldjcmxs.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isLevel(entry.getKey())){ +// 判断是否为职务级别 + if(entry.getValue()!=null){ + V3xOrgLevel orgLevel = getOrgManager().getLevelById(Long.parseLong(entry.getValue().toString())); + fieldjcmxs.add(formExportUtil.setParamFields(orgLevel.getName(),entry.getKey(),orgLevel.getId()+"")); + }else{ + fieldjcmxs.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isMember(entry.getKey())){ +// 判断是否为人员 + if(entry.getValue()!=null){ + V3xOrgMember orgMember = getOrgManager().getMemberById(Long.parseLong(entry.getValue().toString())); + fieldjcmxs.add(formExportUtil.setParamFields(orgMember.getName(),entry.getKey(),orgMember.getId()+"")); + }else{ + fieldjcmxs.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isFile(entry.getKey())){ +// 判断是否为附件 + if(entry.getValue()!=null){ + List attachmentIds = attachmentManager.getBySubReference(Long.parseLong(entry.getValue().toString())); + JSONArray jsonArray = new JSONArray(); +// 获取当前附件控件的所有附件信息 + for (int n = 0 ; n < attachmentIds.size();n++) { +// 进行附件下载后上传至目标系统中 + Attachment attachment = attachmentManager.getAttachmentByFileURL(attachmentIds.get(n)); + Long fileUrl = attachment.getFileUrl(); + String filename = attachment.getFilename(); +// String[] fileType = filename.split("\\."); + String fileType = filename.substring(filename.lastIndexOf(".")+1); + String oaFileName = filename.substring(0,filename.lastIndexOf(".")); +// 调用接口下载文件,文件存放在指定的路径下 + String dowUrl = configVo.getParamVal(OrganizationInitializationConstants.dowUrl.name())+"/"+fileUrl+"?fileName="+fileType+"&token="+jttoken; + log.info("下载URL:"+dowUrl); + String str = SystemEnvironment.getApplicationFolder(); + String dowPath = str+"/memberfiles/"+filename; + log.info("下载地址:"+dowPath); + String download = interfaceListUtil.download(dowUrl, dowPath); +// String str = SystemEnvironment.getApplicationFolder(); + String uploadUrl = configVo.getParamVal(OrganizationInitializationConstants.uploadUrl.name()); + String targetUrl = uploadUrl+"?token="+zsjtoken; + String uploadData = interfaceListUtil.uploadFile(targetUrl,dowPath); + JSONObject uploadFile = JSON.parseObject(uploadData); + JSONArray atts = uploadFile.getJSONArray("atts"); + if(atts.size()>0){ + JSONObject att = atts.getJSONObject(0); + JSONObject attachmentInfo = new JSONObject(); + attachmentInfo.put("subReference",entry.getValue().toString()); + attachmentInfo.put("fileUrl",att.getString("fileUrl")); + attachmentInfo.put("sort",n); + attachmentInfos.add(attachmentInfo); + } + } + fieldjcmxs.add(formExportUtil.setParamFields("",entry.getKey(),entry.getValue().toString())); + }else{ + fieldjcmxs.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else{ + if(entry.getValue()!=null){ + fieldjcmxs.add(formExportUtil.setParamFields("",entry.getKey(),entry.getValue().toString())); + }else{ + fieldjcmxs.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + } + } + recordjcmx.put("fields",fieldjcmxs); + recordsjcmx.add(recordjcmx); + } + subTablejcmx.put("records",recordsjcmx); + subTables.add(subTablejcmx); + +// 根据ID主表查询明细表信息,formson_10351 绩效考核明细,检索附件field0088绩效考核附件 formson_0138 + List> memberkqjxs = organizationInitializationDao.getMemberkqjxs(formmainId); + JSONObject subTablekqjx = new JSONObject(); + subTablekqjx.put("name","formson_0217"); + JSONArray recordskqjx = new JSONArray(); + for(int kqjx = 0 ; kqjx memberkqjx = memberkqjxs.get(kqjx); + + JSONObject recordkqjx = new JSONObject(); + recordkqjx.put("id",UUIDLong.longUUID()); + JSONArray fieldkqjxs = new JSONArray(); + for (Map.Entry entry : memberkqjx.entrySet()) { + if(!entry.getKey().contains("field")){ + continue; + } + if(ParamUtil.isEnum(entry.getKey())){ +// 判断是否为枚举 + if(entry.getValue()!=null){ + CtpEnumItem enumItem = getEnumManagerNew().getCtpEnumItem(Long.parseLong(entry.getValue().toString())); + fieldkqjxs.add(formExportUtil.setParamFields(enumItem.getShowvalue(),entry.getKey(),"")); + }else{ + fieldkqjxs.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isDept(entry.getKey())){ +// 判断是否为部门 + if(entry.getValue()!=null){ + V3xOrgDepartment orgDepartment = getOrgManager().getDepartmentById(Long.parseLong(entry.getValue().toString())); + fieldkqjxs.add(formExportUtil.setParamFields(orgDepartment.getName(),entry.getKey(),orgDepartment.getId()+"")); + }else{ + fieldkqjxs.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isUnit(entry.getKey())){ +// 判断是否为单位 + if(entry.getValue()!=null){ + V3xOrgAccount orgAccount = getOrgManager().getAccountById(Long.parseLong(entry.getValue().toString())); + fieldkqjxs.add(formExportUtil.setParamFields(orgAccount.getName(),entry.getKey(),orgAccount.getId()+"")); + }else{ + fieldkqjxs.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isPost(entry.getKey())){ +// 判断是否为岗位 + if(entry.getValue()!=null){ + V3xOrgPost orgPost = getOrgManager().getPostById(Long.parseLong(entry.getValue().toString())); + fieldkqjxs.add(formExportUtil.setParamFields(orgPost.getName(),entry.getKey(),orgPost.getId()+"")); + }else{ + fieldkqjxs.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isLevel(entry.getKey())){ +// 判断是否为职务级别 + if(entry.getValue()!=null){ + V3xOrgLevel orgLevel = getOrgManager().getLevelById(Long.parseLong(entry.getValue().toString())); + fieldkqjxs.add(formExportUtil.setParamFields(orgLevel.getName(),entry.getKey(),orgLevel.getId()+"")); + }else{ + fieldkqjxs.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isMember(entry.getKey())){ +// 判断是否为人员 + if(entry.getValue()!=null){ + V3xOrgMember orgMember = getOrgManager().getMemberById(Long.parseLong(entry.getValue().toString())); + fieldkqjxs.add(formExportUtil.setParamFields(orgMember.getName(),entry.getKey(),orgMember.getId()+"")); + }else{ + fieldkqjxs.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isFile(entry.getKey())){ +// 判断是否为附件 + if(entry.getValue()!=null){ + List attachmentIds = attachmentManager.getBySubReference(Long.parseLong(entry.getValue().toString())); + JSONArray jsonArray = new JSONArray(); +// 获取当前附件控件的所有附件信息 + for (int n = 0 ; n < attachmentIds.size();n++) { +// 进行附件下载后上传至目标系统中 + Attachment attachment = attachmentManager.getAttachmentByFileURL(attachmentIds.get(n)); + Long fileUrl = attachment.getFileUrl(); + String filename = attachment.getFilename(); +// String[] fileType = filename.split("\\."); + String fileType = filename.substring(filename.lastIndexOf(".")+1); + String oaFileName = filename.substring(0,filename.lastIndexOf(".")); +// 调用接口下载文件,文件存放在指定的路径下 + String dowUrl = configVo.getParamVal(OrganizationInitializationConstants.dowUrl.name())+"/"+fileUrl+"?fileName="+fileType+"&token="+jttoken; + log.info("下载URL:"+dowUrl); + String str = SystemEnvironment.getApplicationFolder(); + String dowPath = str+"/memberfiles/"+filename; + log.info("下载地址:"+dowPath); + String download = interfaceListUtil.download(dowUrl, dowPath); +// String str = SystemEnvironment.getApplicationFolder(); + String uploadUrl = configVo.getParamVal(OrganizationInitializationConstants.uploadUrl.name()); + String targetUrl = uploadUrl+"?token="+zsjtoken; + String uploadData = interfaceListUtil.uploadFile(targetUrl,dowPath); + JSONObject uploadFile = JSON.parseObject(uploadData); + JSONArray atts = uploadFile.getJSONArray("atts"); + if(atts.size()>0){ + JSONObject att = atts.getJSONObject(0); + JSONObject attachmentInfo = new JSONObject(); + attachmentInfo.put("subReference",entry.getValue().toString()); + attachmentInfo.put("fileUrl",att.getString("fileUrl")); + attachmentInfo.put("sort",n); + attachmentInfos.add(attachmentInfo); + } + } + fieldkqjxs.add(formExportUtil.setParamFields("",entry.getKey(),entry.getValue().toString())); + }else{ + fieldkqjxs.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else{ + if(entry.getValue()!=null){ + fieldkqjxs.add(formExportUtil.setParamFields("",entry.getKey(),entry.getValue().toString())); + }else{ + fieldkqjxs.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + } + } + recordkqjx.put("fields",fieldkqjxs); + recordskqjx.add(recordkqjx); + } + subTablekqjx.put("records",recordskqjx); + subTables.add(subTablekqjx); + +// 根据ID主表查询明细表信息,formson_10388 个人履历 formson_0139 + List> membergrlls = organizationInitializationDao.getMembergrlls(formmainId); + JSONObject subTablegrll = new JSONObject(); + subTablegrll.put("name","formson_0218"); + JSONArray recordsgrll = new JSONArray(); + for(int grll = 0 ; grll membergrll = membergrlls.get(grll); + + JSONObject recordgrll = new JSONObject(); + recordgrll.put("id",UUIDLong.longUUID()); + JSONArray fieldgrlls = new JSONArray(); + for (Map.Entry entry : membergrll.entrySet()) { + if(!entry.getKey().contains("field")){ + continue; + } + if(ParamUtil.isEnum(entry.getKey())){ +// 判断是否为枚举 + if(entry.getValue()!=null){ + CtpEnumItem enumItem = getEnumManagerNew().getCtpEnumItem(Long.parseLong(entry.getValue().toString())); + fieldgrlls.add(formExportUtil.setParamFields(enumItem.getShowvalue(),entry.getKey(),"")); + }else{ + fieldgrlls.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isDept(entry.getKey())){ +// 判断是否为部门 + if(entry.getValue()!=null){ + V3xOrgDepartment orgDepartment = getOrgManager().getDepartmentById(Long.parseLong(entry.getValue().toString())); + fieldgrlls.add(formExportUtil.setParamFields(orgDepartment.getName(),entry.getKey(),orgDepartment.getId()+"")); + }else{ + fieldgrlls.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isUnit(entry.getKey())){ +// 判断是否为单位 + if(entry.getValue()!=null){ + V3xOrgAccount orgAccount = getOrgManager().getAccountById(Long.parseLong(entry.getValue().toString())); + fieldgrlls.add(formExportUtil.setParamFields(orgAccount.getName(),entry.getKey(),orgAccount.getId()+"")); + }else{ + fieldgrlls.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isPost(entry.getKey())){ +// 判断是否为岗位 + if(entry.getValue()!=null){ + V3xOrgPost orgPost = getOrgManager().getPostById(Long.parseLong(entry.getValue().toString())); + fieldgrlls.add(formExportUtil.setParamFields(orgPost.getName(),entry.getKey(),orgPost.getId()+"")); + }else{ + fieldgrlls.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isLevel(entry.getKey())){ +// 判断是否为职务级别 + if(entry.getValue()!=null){ + V3xOrgLevel orgLevel = getOrgManager().getLevelById(Long.parseLong(entry.getValue().toString())); + fieldgrlls.add(formExportUtil.setParamFields(orgLevel.getName(),entry.getKey(),orgLevel.getId()+"")); + }else{ + fieldgrlls.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isMember(entry.getKey())){ +// 判断是否为人员 + if(entry.getValue()!=null){ + V3xOrgMember orgMember = getOrgManager().getMemberById(Long.parseLong(entry.getValue().toString())); + fieldgrlls.add(formExportUtil.setParamFields(orgMember.getName(),entry.getKey(),orgMember.getId()+"")); + }else{ + fieldgrlls.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isFile(entry.getKey())){ +// 判断是否为附件 + if(entry.getValue()!=null){ + List attachmentIds = attachmentManager.getBySubReference(Long.parseLong(entry.getValue().toString())); + JSONArray jsonArray = new JSONArray(); +// 获取当前附件控件的所有附件信息 + for (int n = 0 ; n < attachmentIds.size();n++) { +// 进行附件下载后上传至目标系统中 + Attachment attachment = attachmentManager.getAttachmentByFileURL(attachmentIds.get(n)); + Long fileUrl = attachment.getFileUrl(); + String filename = attachment.getFilename(); +// String[] fileType = filename.split("\\."); + String fileType = filename.substring(filename.lastIndexOf(".")+1); + String oaFileName = filename.substring(0,filename.lastIndexOf(".")); +// 调用接口下载文件,文件存放在指定的路径下 + String dowUrl = configVo.getParamVal(OrganizationInitializationConstants.dowUrl.name())+"/"+fileUrl+"?fileName="+fileType+"&token="+jttoken; + log.info("下载URL:"+dowUrl); + String str = SystemEnvironment.getApplicationFolder(); + String dowPath = str+"/memberfiles/"+filename; + log.info("下载地址:"+dowPath); + String download = interfaceListUtil.download(dowUrl, dowPath); +// String str = SystemEnvironment.getApplicationFolder(); + String uploadUrl = configVo.getParamVal(OrganizationInitializationConstants.uploadUrl.name()); + String targetUrl = uploadUrl+"?token="+zsjtoken; + String uploadData = interfaceListUtil.uploadFile(targetUrl,dowPath); + JSONObject uploadFile = JSON.parseObject(uploadData); + JSONArray atts = uploadFile.getJSONArray("atts"); + if(atts.size()>0){ + JSONObject att = atts.getJSONObject(0); + JSONObject attachmentInfo = new JSONObject(); + attachmentInfo.put("subReference",entry.getValue().toString()); + attachmentInfo.put("fileUrl",att.getString("fileUrl")); + attachmentInfo.put("sort",n); + attachmentInfos.add(attachmentInfo); + } + } + fieldgrlls.add(formExportUtil.setParamFields("",entry.getKey(),entry.getValue().toString())); + }else{ + fieldgrlls.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else{ + if(entry.getValue()!=null){ + fieldgrlls.add(formExportUtil.setParamFields("",entry.getKey(),entry.getValue().toString())); + }else{ + fieldgrlls.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + } + } + recordgrll.put("fields",fieldgrlls); + recordsgrll.add(recordgrll); + } + subTablegrll.put("records",recordsgrll); + subTables.add(subTablegrll); + +// 根据ID主表查询明细表信息,formson_10401 荣誉证书明细,field0126荣誉证书附件 formson_0140 + List> memberryzss = organizationInitializationDao.getMemberryzss(formmainId); + JSONObject subTableryzs = new JSONObject(); + subTableryzs.put("name","formson_0219"); + JSONArray recordsryzs = new JSONArray(); + for(int ryzs = 0 ; ryzs memberryzs = memberryzss.get(ryzs); + + JSONObject recordryzs = new JSONObject(); + recordryzs.put("id",UUIDLong.longUUID()); + JSONArray fieldryzss = new JSONArray(); + for (Map.Entry entry : memberryzs.entrySet()) { + if(!entry.getKey().contains("field")){ + continue; + } + if(ParamUtil.isEnum(entry.getKey())){ +// 判断是否为枚举 + if(entry.getValue()!=null){ + CtpEnumItem enumItem = getEnumManagerNew().getCtpEnumItem(Long.parseLong(entry.getValue().toString())); + fieldryzss.add(formExportUtil.setParamFields(enumItem.getShowvalue(),entry.getKey(),"")); + }else{ + fieldryzss.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isDept(entry.getKey())){ +// 判断是否为部门 + if(entry.getValue()!=null){ + V3xOrgDepartment orgDepartment = getOrgManager().getDepartmentById(Long.parseLong(entry.getValue().toString())); + fieldryzss.add(formExportUtil.setParamFields(orgDepartment.getName(),entry.getKey(),orgDepartment.getId()+"")); + }else{ + fieldryzss.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isUnit(entry.getKey())){ +// 判断是否为单位 + if(entry.getValue()!=null){ + V3xOrgAccount orgAccount = getOrgManager().getAccountById(Long.parseLong(entry.getValue().toString())); + fieldryzss.add(formExportUtil.setParamFields(orgAccount.getName(),entry.getKey(),orgAccount.getId()+"")); + }else{ + fieldryzss.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isPost(entry.getKey())){ +// 判断是否为岗位 + if(entry.getValue()!=null){ + V3xOrgPost orgPost = getOrgManager().getPostById(Long.parseLong(entry.getValue().toString())); + fieldryzss.add(formExportUtil.setParamFields(orgPost.getName(),entry.getKey(),orgPost.getId()+"")); + }else{ + fieldryzss.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isLevel(entry.getKey())){ +// 判断是否为职务级别 + if(entry.getValue()!=null){ + V3xOrgLevel orgLevel = getOrgManager().getLevelById(Long.parseLong(entry.getValue().toString())); + fieldryzss.add(formExportUtil.setParamFields(orgLevel.getName(),entry.getKey(),orgLevel.getId()+"")); + }else{ + fieldryzss.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isMember(entry.getKey())){ +// 判断是否为人员 + if(entry.getValue()!=null){ + V3xOrgMember orgMember = getOrgManager().getMemberById(Long.parseLong(entry.getValue().toString())); + fieldryzss.add(formExportUtil.setParamFields(orgMember.getName(),entry.getKey(),orgMember.getId()+"")); + }else{ + fieldryzss.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isFile(entry.getKey())){ +// 判断是否为附件 + if(entry.getValue()!=null){ + List attachmentIds = attachmentManager.getBySubReference(Long.parseLong(entry.getValue().toString())); + JSONArray jsonArray = new JSONArray(); +// 获取当前附件控件的所有附件信息 + for (int n = 0 ; n < attachmentIds.size();n++) { +// 进行附件下载后上传至目标系统中 + Attachment attachment = attachmentManager.getAttachmentByFileURL(attachmentIds.get(n)); + Long fileUrl = attachment.getFileUrl(); + String filename = attachment.getFilename(); +// String[] fileType = filename.split("\\."); + String fileType = filename.substring(filename.lastIndexOf(".")+1); + String oaFileName = filename.substring(0,filename.lastIndexOf(".")); +// 调用接口下载文件,文件存放在指定的路径下 + String dowUrl = configVo.getParamVal(OrganizationInitializationConstants.dowUrl.name())+"/"+fileUrl+"?fileName="+fileType+"&token="+jttoken; + log.info("下载URL:"+dowUrl); + String str = SystemEnvironment.getApplicationFolder(); + String dowPath = str+"/memberfiles/"+filename; + log.info("下载地址:"+dowPath); + String download = interfaceListUtil.download(dowUrl, dowPath); +// String str = SystemEnvironment.getApplicationFolder(); + String uploadUrl = configVo.getParamVal(OrganizationInitializationConstants.uploadUrl.name()); + String targetUrl = uploadUrl+"?token="+zsjtoken; + String uploadData = interfaceListUtil.uploadFile(targetUrl,dowPath); + JSONObject uploadFile = JSON.parseObject(uploadData); + JSONArray atts = uploadFile.getJSONArray("atts"); + if(atts.size()>0){ + JSONObject att = atts.getJSONObject(0); + JSONObject attachmentInfo = new JSONObject(); + attachmentInfo.put("subReference",entry.getValue().toString()); + attachmentInfo.put("fileUrl",att.getString("fileUrl")); + attachmentInfo.put("sort",n); + attachmentInfos.add(attachmentInfo); + } + } + fieldryzss.add(formExportUtil.setParamFields("",entry.getKey(),entry.getValue().toString())); + }else{ + fieldryzss.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else{ + if(entry.getValue()!=null){ + fieldryzss.add(formExportUtil.setParamFields("",entry.getKey(),entry.getValue().toString())); + }else{ + fieldryzss.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + } + } + recordryzs.put("fields",fieldryzss); + recordsryzs.add(recordryzs); + } + subTableryzs.put("records",recordsryzs); + subTables.add(subTableryzs); + +// 根据ID主表查询明细表信息,formson_10409 重要社会关系明细 formson_0141 + List> memberzygxs = organizationInitializationDao.getMemberzygxs(formmainId); + JSONObject subTablezygx = new JSONObject(); + subTablezygx.put("name","formson_0220"); + JSONArray recordszygx = new JSONArray(); + for(int zygx = 0 ; zygx memberzygx = memberzygxs.get(zygx); + + JSONObject recordzygx = new JSONObject(); + recordzygx.put("id",UUIDLong.longUUID()); + JSONArray fieldzygxs = new JSONArray(); + for (Map.Entry entry : memberzygx.entrySet()) { + if(!entry.getKey().contains("field")){ + continue; + } + if(ParamUtil.isEnum(entry.getKey())){ +// 判断是否为枚举 + if(entry.getValue()!=null){ + CtpEnumItem enumItem = getEnumManagerNew().getCtpEnumItem(Long.parseLong(entry.getValue().toString())); + fieldzygxs.add(formExportUtil.setParamFields(enumItem.getShowvalue(),entry.getKey(),"")); + }else{ + fieldzygxs.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isDept(entry.getKey())){ +// 判断是否为部门 + if(entry.getValue()!=null){ + V3xOrgDepartment orgDepartment = getOrgManager().getDepartmentById(Long.parseLong(entry.getValue().toString())); + fieldzygxs.add(formExportUtil.setParamFields(orgDepartment.getName(),entry.getKey(),orgDepartment.getId()+"")); + }else{ + fieldzygxs.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isUnit(entry.getKey())){ +// 判断是否为单位 + if(entry.getValue()!=null){ + V3xOrgAccount orgAccount = getOrgManager().getAccountById(Long.parseLong(entry.getValue().toString())); + fieldzygxs.add(formExportUtil.setParamFields(orgAccount.getName(),entry.getKey(),orgAccount.getId()+"")); + }else{ + fieldzygxs.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isPost(entry.getKey())){ +// 判断是否为岗位 + if(entry.getValue()!=null){ + V3xOrgPost orgPost = getOrgManager().getPostById(Long.parseLong(entry.getValue().toString())); + fieldzygxs.add(formExportUtil.setParamFields(orgPost.getName(),entry.getKey(),orgPost.getId()+"")); + }else{ + fieldzygxs.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isLevel(entry.getKey())){ +// 判断是否为职务级别 + if(entry.getValue()!=null){ + V3xOrgLevel orgLevel = getOrgManager().getLevelById(Long.parseLong(entry.getValue().toString())); + fieldzygxs.add(formExportUtil.setParamFields(orgLevel.getName(),entry.getKey(),orgLevel.getId()+"")); + }else{ + fieldzygxs.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isMember(entry.getKey())){ +// 判断是否为人员 + if(entry.getValue()!=null){ + V3xOrgMember orgMember = getOrgManager().getMemberById(Long.parseLong(entry.getValue().toString())); + fieldzygxs.add(formExportUtil.setParamFields(orgMember.getName(),entry.getKey(),orgMember.getId()+"")); + }else{ + fieldzygxs.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isFile(entry.getKey())){ +// 判断是否为附件 + if(entry.getValue()!=null){ + List attachmentIds = attachmentManager.getBySubReference(Long.parseLong(entry.getValue().toString())); + JSONArray jsonArray = new JSONArray(); +// 获取当前附件控件的所有附件信息 + for (int n = 0 ; n < attachmentIds.size();n++) { +// 进行附件下载后上传至目标系统中 + Attachment attachment = attachmentManager.getAttachmentByFileURL(attachmentIds.get(n)); + Long fileUrl = attachment.getFileUrl(); + String filename = attachment.getFilename(); +// String[] fileType = filename.split("\\."); + String fileType = filename.substring(filename.lastIndexOf(".")+1); + String oaFileName = filename.substring(0,filename.lastIndexOf(".")); +// 调用接口下载文件,文件存放在指定的路径下 + String dowUrl = configVo.getParamVal(OrganizationInitializationConstants.dowUrl.name())+"/"+fileUrl+"?fileName="+fileType+"&token="+jttoken; + log.info("下载URL:"+dowUrl); + String str = SystemEnvironment.getApplicationFolder(); + String dowPath = str+"/memberfiles/"+filename; + log.info("下载地址:"+dowPath); + String download = interfaceListUtil.download(dowUrl, dowPath); +// String str = SystemEnvironment.getApplicationFolder(); + String uploadUrl = configVo.getParamVal(OrganizationInitializationConstants.uploadUrl.name()); + String targetUrl = uploadUrl+"?token="+zsjtoken; + String uploadData = interfaceListUtil.uploadFile(targetUrl,dowPath); + JSONObject uploadFile = JSON.parseObject(uploadData); + JSONArray atts = uploadFile.getJSONArray("atts"); + if(atts.size()>0){ + JSONObject att = atts.getJSONObject(0); + JSONObject attachmentInfo = new JSONObject(); + attachmentInfo.put("subReference",entry.getValue().toString()); + attachmentInfo.put("fileUrl",att.getString("fileUrl")); + attachmentInfo.put("sort",n); + attachmentInfos.add(attachmentInfo); + } + } + fieldzygxs.add(formExportUtil.setParamFields("",entry.getKey(),entry.getValue().toString())); + }else{ + fieldzygxs.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else{ + if(entry.getValue()!=null){ + fieldzygxs.add(formExportUtil.setParamFields("",entry.getKey(),entry.getValue().toString())); + }else{ + fieldzygxs.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + } + } + recordzygx.put("fields",fieldzygxs); + recordszygx.add(recordzygx); + } + subTablezygx.put("records",recordszygx); + subTables.add(subTablezygx); + +// 根据ID主表查询明细表信息,formson_10554 任务完成情况 formson_0142 + List> memberwcqks = organizationInitializationDao.getMemberwcqks(formmainId); + JSONObject subTablewcqk = new JSONObject(); + subTablewcqk.put("name","formson_0221"); + JSONArray recordswcqk = new JSONArray(); + for(int wcqk = 0 ; wcqk memberwcqk = memberwcqks.get(wcqk); + + JSONObject recordwcqk = new JSONObject(); + recordwcqk.put("id",UUIDLong.longUUID()); + JSONArray fieldwcqks = new JSONArray(); + for (Map.Entry entry : memberwcqk.entrySet()) { + if(!entry.getKey().contains("field")){ + continue; + } + if(ParamUtil.isEnum(entry.getKey())){ +// 判断是否为枚举 + if(entry.getValue()!=null){ + CtpEnumItem enumItem = getEnumManagerNew().getCtpEnumItem(Long.parseLong(entry.getValue().toString())); + fieldwcqks.add(formExportUtil.setParamFields(enumItem.getShowvalue(),entry.getKey(),"")); + }else{ + fieldwcqks.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isDept(entry.getKey())){ +// 判断是否为部门 + if(entry.getValue()!=null){ + V3xOrgDepartment orgDepartment = getOrgManager().getDepartmentById(Long.parseLong(entry.getValue().toString())); + fieldwcqks.add(formExportUtil.setParamFields(orgDepartment.getName(),entry.getKey(),orgDepartment.getId()+"")); + }else{ + fieldwcqks.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isUnit(entry.getKey())){ +// 判断是否为单位 + if(entry.getValue()!=null){ + V3xOrgAccount orgAccount = getOrgManager().getAccountById(Long.parseLong(entry.getValue().toString())); + fieldwcqks.add(formExportUtil.setParamFields(orgAccount.getName(),entry.getKey(),orgAccount.getId()+"")); + }else{ + fieldwcqks.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isPost(entry.getKey())){ +// 判断是否为岗位 + if(entry.getValue()!=null){ + V3xOrgPost orgPost = getOrgManager().getPostById(Long.parseLong(entry.getValue().toString())); + fieldwcqks.add(formExportUtil.setParamFields(orgPost.getName(),entry.getKey(),orgPost.getId()+"")); + }else{ + fieldwcqks.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isLevel(entry.getKey())){ +// 判断是否为职务级别 + if(entry.getValue()!=null){ + V3xOrgLevel orgLevel = getOrgManager().getLevelById(Long.parseLong(entry.getValue().toString())); + fieldwcqks.add(formExportUtil.setParamFields(orgLevel.getName(),entry.getKey(),orgLevel.getId()+"")); + }else{ + fieldwcqks.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isMember(entry.getKey())){ +// 判断是否为人员 + if(entry.getValue()!=null){ + V3xOrgMember orgMember = getOrgManager().getMemberById(Long.parseLong(entry.getValue().toString())); + fieldwcqks.add(formExportUtil.setParamFields(orgMember.getName(),entry.getKey(),orgMember.getId()+"")); + }else{ + fieldwcqks.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else if(ParamUtil.isFile(entry.getKey())){ +// 判断是否为附件 + if(entry.getValue()!=null){ + List attachmentIds = attachmentManager.getBySubReference(Long.parseLong(entry.getValue().toString())); + JSONArray jsonArray = new JSONArray(); +// 获取当前附件控件的所有附件信息 + for (int n = 0 ; n < attachmentIds.size();n++) { +// 进行附件下载后上传至目标系统中 + Attachment attachment = attachmentManager.getAttachmentByFileURL(attachmentIds.get(n)); + Long fileUrl = attachment.getFileUrl(); + String filename = attachment.getFilename(); +// String[] fileType = filename.split("\\."); + String fileType = filename.substring(filename.lastIndexOf(".")+1); + String oaFileName = filename.substring(0,filename.lastIndexOf(".")); +// 调用接口下载文件,文件存放在指定的路径下 + String dowUrl = configVo.getParamVal(OrganizationInitializationConstants.dowUrl.name())+"/"+fileUrl+"?fileName="+fileType+"&token="+jttoken; + log.info("下载URL:"+dowUrl); + String str = SystemEnvironment.getApplicationFolder(); + String dowPath = str+"/memberfiles/"+filename; + log.info("下载地址:"+dowPath); + String download = interfaceListUtil.download(dowUrl, dowPath); +// String str = SystemEnvironment.getApplicationFolder(); + String uploadUrl = configVo.getParamVal(OrganizationInitializationConstants.uploadUrl.name()); + String targetUrl = uploadUrl+"?token="+zsjtoken; + String uploadData = interfaceListUtil.uploadFile(targetUrl,dowPath); + JSONObject uploadFile = JSON.parseObject(uploadData); + JSONArray atts = uploadFile.getJSONArray("atts"); + if(atts.size()>0){ + JSONObject att = atts.getJSONObject(0); + JSONObject attachmentInfo = new JSONObject(); + attachmentInfo.put("subReference",entry.getValue().toString()); + attachmentInfo.put("fileUrl",att.getString("fileUrl")); + attachmentInfo.put("sort",n); + attachmentInfos.add(attachmentInfo); + } + } + fieldwcqks.add(formExportUtil.setParamFields("",entry.getKey(),entry.getValue().toString())); + }else{ + fieldwcqks.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + }else{ + if(entry.getValue()!=null){ + fieldwcqks.add(formExportUtil.setParamFields("",entry.getKey(),entry.getValue().toString())); + }else{ + fieldwcqks.add(formExportUtil.setParamFields("",entry.getKey(),"")); + } + } + } + recordwcqk.put("fields",fieldwcqks); + recordswcqk.add(recordwcqk); + } + subTablewcqk.put("records",recordswcqk); + subTables.add(subTablewcqk); + +// fields.add(formExportUtil.setParamFields("","","")); + + record.put("fields",fields); + masterTable.put("record",record); + masterTable.put("name","formmain_0210"); + data.put("masterTable",masterTable); + data.put("attachmentInfos",attachmentInfos); + data.put("subTables",subTables); + dataList.add(data); + jsonObject.put("dataList",dataList); + jsonObject.put("rightId","5763781100389681074.2538693500733377688"); + +// 调用无流程表单创建接口,生成新环境无流程表单数据 + String archiveUrl = configVo.getParamVal(OrganizationInitializationConstants.archiveUrl.name()); + System.out.println(jsonObject.toString()); + JSONObject res = interfaceListUtil.sendPost(jsonObject.toString(),archiveUrl,zsjtoken); + System.out.println(res); + String str = SystemEnvironment.getApplicationFolder(); + String fileName = memberFile.get("field0007")+"_"+memberFile.get("field0070")+"_"+memberFile.get("field0013"); + FileUtils.writeStringToFile(new File(str+"/memberTBmaindata/" + fileName + ".json"), jsonObject.toString(), "UTF-8"); + } + System.out.println(tempCode); + return null; + } + + private String push(String request, ConfigVo configVo) { + return ""; + } + + public String getName() { + return "稻花香人员档案同步初始化"; + } + +} diff --git a/src/com/seeyon/apps/src_organizationInitialization/util/FormExportUtil.java b/src/com/seeyon/apps/src_organizationInitialization/util/FormExportUtil.java new file mode 100644 index 0000000..b789944 --- /dev/null +++ b/src/com/seeyon/apps/src_organizationInitialization/util/FormExportUtil.java @@ -0,0 +1,113 @@ +package com.seeyon.apps.src_organizationInitialization.util; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.seeyon.v3x.services.form.bean.RecordExport; +import com.seeyon.v3x.services.form.bean.SubordinateFormExport; +import com.seeyon.v3x.services.form.bean.ValueExport; + +import java.util.*; + +//创建无流程表单数据处理工具类 +public class FormExportUtil { + + /** + * 设置主表信息 + * @param map 设置主表字段。Map<主表显示名称,主表数据> + * @return + */ + public List setFormValue(Map map){ +// 创建返回值对象 + List valueExports = new ArrayList(); + ValueExport valueExport ; +// 获取参数信息(显示名称) + Set keys = map.keySet(); + if(keys.size()>0) { +// 对控件赋值 + for (String key : keys) { + valueExport = new ValueExport(); + valueExport.setDisplayName(key); + valueExport.setValue(map.get(key)); + valueExports.add(valueExport); + } + } + return valueExports; + } + + /** + * 设置从表信息 + * @param lists 设置主表字段。List> + */ + public List setSubordinateFormValue(List> lists){ + List subordinateFormExports = new ArrayList(); + SubordinateFormExport subordinateFormExport = new SubordinateFormExport(); + List recordExports = new ArrayList(); + List valueExports; + RecordExport recordExport; + for(int i = 0 ; i < lists.size() ; i++) { + recordExport = new RecordExport(); + valueExports = setFormValue(lists.get(i)); + recordExport.setRecord(valueExports); + recordExports.add(recordExport); + } + subordinateFormExport.setValues(recordExports); + subordinateFormExports.add(subordinateFormExport); + + return subordinateFormExports; + } + + + /** + * 格式转换将{"id":1,"str1":"123","str2":"asd","str3":"qwe"},{"id":2,"str1":"123","str2":"asd","str3":"qwe"},{"id":3,"str1":"123","str2":"asd","str3":"qwe"},{"id":1,"str1":"123","str2":"asd","str3":"qwe"},{"id":2,"str1":"123","str2":"asd","str3":"qwe"},{"id":3,"str1":"123","str2":"asd","str3":"qwe"}] + 有什么办法转换成 + [{"id":1,"data":[{"id":1,"str1":"123","str2":"asd","str3":"qwe"},{"id":1,"str1":"123","str2":"asd","str3":"qwe"}]}{"id":2,"data":[{"id":2,"str1":"123","str2":"asd","str3":"qwe"},{"id":2,"str1":"123","str2":"asd","str3":"qwe"}]}{"id":3,"data":[{"id":3,"str1":"123","str2":"asd","str3":"qwe"},{"id":3,"str1":"123","str2":"asd","str3":"qwe"}]}] + * @param inputList + * @return + */ + public List> transformData(JSONArray inputList) { + Map>> groupedData = new HashMap<>(); + for(int i = 0 ; i < inputList.size();i++) { + String userId = inputList.getJSONObject(i).getString("userId"); + + groupedData.computeIfAbsent(userId, k -> new ArrayList<>()).add(inputList.getJSONObject(i)); + } + + List> result = new ArrayList<>(); + + for (Map.Entry>> entry : groupedData.entrySet()) { + Map resultMap = new HashMap<>(); + resultMap.put("userId", entry.getKey()); + resultMap.put("data", entry.getValue()); + result.add(resultMap); + } + + return result; + } + + public JSONObject setParamFields(String showValue,String name,String value){ + JSONObject res = new JSONObject(); + res.put("showValue",showValue); + res.put("name",name); + res.put("value",value); + return res; + } + + public JSONArray dingdingTimeSequence (JSONArray datas){ + + for (int i = 0; i < datas.size() - 1; i++) { + for (int j = 0; j < datas.size() - i - 1; j++) { + String value1 = datas.getJSONObject(j).getString("baseCheckTime"); + String value2 = datas.getJSONObject(j + 1).getString("baseCheckTime"); + long long1 = Long.parseLong(value1); + long long2 = Long.parseLong(value2); + if (long1 > long2) { + JSONObject temp = datas.getJSONObject(j); + datas.set(j, datas.getJSONObject(j + 1)); + datas.set(j + 1, temp); + } + } + } + return datas; + } + +} diff --git a/src/com/seeyon/apps/src_organizationInitialization/util/InterfaceListUtil.java b/src/com/seeyon/apps/src_organizationInitialization/util/InterfaceListUtil.java new file mode 100644 index 0000000..3b925ca --- /dev/null +++ b/src/com/seeyon/apps/src_organizationInitialization/util/InterfaceListUtil.java @@ -0,0 +1,467 @@ +package com.seeyon.apps.src_organizationInitialization.util; + +import com.alibaba.fastjson.JSONObject; +import org.apache.commons.httpclient.Header; +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.HttpException; +import org.apache.commons.httpclient.HttpStatus; +import org.apache.commons.httpclient.methods.PostMethod; +import org.apache.commons.httpclient.methods.RequestEntity; +import org.apache.commons.httpclient.methods.StringRequestEntity; +import org.apache.http.HttpResponse; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.util.EntityUtils; +import org.springframework.core.io.support.PropertiesLoaderUtils; + +import java.io.*; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLConnection; +import java.nio.file.Files; +import java.text.MessageFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; +import java.util.Properties; + +/** + * 接口调用工具类 + * 2021-06-08 + * @author huangzhengguo + * + */ +public class InterfaceListUtil { + + /** + * 获取一个token + * + * @param restUserName rest用户名 + * @param restPassword rest密码 + * @return + * @throws IOException -2972027246288615821 + * @throws FileNotFoundException + */ + public String getToken(String url,String restUserName,String restPassword,String loginName) throws FileNotFoundException, IOException { + String address = ""; + String token = ""; + if("".equals(loginName)) { + address = url+"/"+restUserName+"/"+restPassword; + }else { + address = url+"/"+restUserName+"/"+restPassword+"?loginName="+loginName; + } + HttpURLConnection connection = (HttpURLConnection) new URL(address).openConnection(); + connection.setRequestMethod("GET"); + int responseCode = connection.getResponseCode(); + if (responseCode == HttpURLConnection.HTTP_OK) { + BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); + String inputLine; + StringBuffer response = new StringBuffer(); + while ((inputLine = in.readLine()) != null) { + response.append(inputLine); + } + in.close(); + String result = response.toString(); + if(result.contains("{")) { + JSONObject jsObj = JSONObject.parseObject(result); + System.out.println(jsObj); + token = jsObj.get("id").toString(); + }else { + token = result; + } + System.out.println(token); + } else { + System.out.println("GET request not worked"); + } + return token; + } + + /** + * 调用get接口 + * + * @param par 拼接在url中的参数 + * @param strUrl 需要调用的url对应的配置文件的key + * @return + */ + public String doGet(String par, String strUrl, String token) { + String address = MessageFormat.format(getProperties(strUrl), par + "?token=") + token; + + DefaultHttpClient client = new DefaultHttpClient(); + String result = ""; + HttpGet get = new HttpGet(address); + try { + HttpResponse res = client.execute(get); + if (res.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { + result = EntityUtils.toString(res.getEntity()); + } + } catch (Exception e) { + throw new RuntimeException(e); + } +// JSONObject jsObj = JSONObject.parseObject(result); + return result; + + } + + /** + * 调用post接口 + * + * @param str 调用接口传递的参数json + * @param urlStr 需要调用的url对应的参数文件中的编码 + * @return + */ + public JSONObject doPost(String str, String urlStr, String token) { + HttpURLConnection connection = null; + InputStream is = null; + OutputStream os = null; + BufferedReader br = null; + String result = null; + try { +// String token = getToken(getProperties("restUserName"), getProperties("restPassword")); + URL url = new URL(urlStr + "?token=" + token); + // 通过远程url连接对象打开连接 + connection = (HttpURLConnection) url.openConnection(); + // 设置连接请求方式 + connection.setRequestMethod("POST"); + // 设置连接主机服务器超时时间:15000毫秒 + connection.setConnectTimeout(15000); + // 设置读取主机服务器返回数据超时时间:60000毫秒 + connection.setReadTimeout(60000); + + // 默认值为:false,当向远程服务器传送数据/写数据时,需要设置为true + connection.setDoOutput(true); + // 默认值为:true,当前向远程服务读取数据时,设置为true,该参数可有可无 + connection.setDoInput(true); + // 设置传入参数的格式:请求参数应该是 name1=value1&name2=value2 的形式。 + connection.setRequestProperty("Content-Type", "application/json"); + // 通过连接对象获取一个输出流 + os = connection.getOutputStream(); + // 通过输出流对象将参数写出去/传输出去,它是通过字节数组写出的 + if (!("".equals(str) || str == null)) { + os.write(str.getBytes("UTF-8")); + } + // 连接对象获取一个输入流,向远程读取 + if (connection.getResponseCode() == 200) { + + is = connection.getInputStream(); + // 对输入流对象进行包装:charset根据工作项目组的要求来设置 + br = new BufferedReader(new InputStreamReader(is, "UTF-8")); + + StringBuffer sbf = new StringBuffer(); + String temp = null; + // 循环遍历一行一行读取数据 + while ((temp = br.readLine()) != null) { + sbf.append(temp); + sbf.append("\r\n"); + } + result = sbf.toString(); + } + } catch (MalformedURLException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } finally { + // 关闭资源 + if (null != br) { + try { + br.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + if (null != os) { + try { + os.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + if (null != is) { + try { + is.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + // 断开与远程地址url的连接 + connection.disconnect(); + } + JSONObject json = JSONObject.parseObject(result); + return json; + + } + + public JSONObject sendPost(String str, String urlStr, String token) throws Exception{ + + Map jb=new HashMap(); + try { + CloseableHttpClient httpClient = HttpClients.createDefault(); + RequestConfig requestConfig = RequestConfig.custom() + .setSocketTimeout(300000) + .setConnectTimeout(300000) + .build(); + HttpPost post = new HttpPost(urlStr+ "?token=" + token); + post.setConfig(requestConfig); + post.setHeader("Content-Type","application/json;charset=utf-8"); + StringEntity postString = new StringEntity(str,"utf-8"); + post.setEntity(postString); + HttpResponse response = httpClient.execute(post); + String content = EntityUtils.toString(response.getEntity()); + JSONObject json = JSONObject.parseObject(content); + return json; + } catch (Exception e) { +// log.error("调用DataService接口失败,url:" + urlStr + ",参数:" + str); + System.err.print("调用DataService接口失败,url:" + urlStr + ",参数:" + str); + + } + return null; + } + + + + /** + * 获取指定参数文件的值(pa.properties) + * + * @param str 参数文件中的key + * @return + */ + public String getProperties(String str) { + Properties properties = null; + try { + properties = PropertiesLoaderUtils.loadAllProperties("pa.properties"); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return (String) properties.get(str); + } + + /** + * 调用Soap接口 对接平台使用 + * @param action 平台接口中的方法参数名称 + * @param xml 传递平台的XML数据参数 + * @return 返回调取soap接口后接口的返回值(未处理) + * @throws HttpException + * @throws IOException + */ + public String doSoap(String action, String xml,String id) throws HttpException, IOException { + String wsdl = ""; + if("createDepartment".equals(action)||"updateDepartment".equals(action)) { + wsdl = getProperties("DeptWsdl"); + }else if("createPractitioner".equals(action)||"updatePractitioner".equals(action)) { + wsdl = getProperties("MemberWsdl"); + } + System.out.println("wsdl:"+wsdl); + int timeout = 10000; + + // 构造soap请求信息 + StringBuffer sb = new StringBuffer(""); + sb.append( + ""); + sb.append(""); + sb.append(""); + sb.append(" "); + sb.append("" + action + "" + xml + ""); + sb.append(""); + sb.append(""); + sb.append(""); + + // HttpClient发送SOAP请求 +// System.out.println("HttpClient 发送SOAP请求"); + HttpClient client = new HttpClient(); + PostMethod postMethod = new PostMethod(wsdl); + Header header = new Header(); + // 设置连接超时 + client.getHttpConnectionManager().getParams().setConnectionTimeout(timeout); + // 设置读取时间超时 + client.getHttpConnectionManager().getParams().setSoTimeout(timeout); + // 然后把Soap请求数据添加到PostMethod中 + RequestEntity requestEntity = null; + try { + requestEntity = new StringRequestEntity(sb.toString(), "text/xml", "UTF-8"); + } catch (UnsupportedEncodingException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + // 设置请求头部,否则可能会报 “no SOAPAction header” 的错误 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date businessTime = new Date(); + Date operationTime = new Date(); + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMddHHmmss"); + Date root = new Date(); + String rootId = sdf1.format(root); + postMethod.setRequestHeader("SOAPAction", ""); + postMethod.setRequestHeader("Content-Type", "application/fhir+json"); + postMethod.setRequestHeader("rootId", rootId); + postMethod.setRequestHeader("token", id); + postMethod.setRequestHeader("domain", "OA"); + postMethod.setRequestHeader("businessTime", sdf.format(businessTime)); + postMethod.setRequestHeader("key", "806c1571-35de-41a2-b3c9-06ae5474d43a"); + postMethod.setRequestHeader("operationTime", sdf.format(operationTime)); + // 设置请求体 + postMethod.setRequestEntity(requestEntity); + int status = client.executeMethod(postMethod); + // 打印请求状态码 +// System.out.println("status:" + status); + // 获取响应体输入流 + InputStream is = postMethod.getResponseBodyAsStream(); + // 获取请求结果字符串 + byte[] bytes = new byte[is.available()]; + is.read(bytes); + String result = new String(bytes); + + return result; + } + + /** + * 下载文件到指定目录 + * @param dowUrl:http地址 + * @param dowPath:指定目录 + * */ + public String download(String dowUrl, String dowPath){ + try { +// log.info("下载地址是:"+dowUrl+",存储地址是:"+dowPath); + URL url = new URL(dowUrl); + + URLConnection urlConnection = url.openConnection(); + + HttpURLConnection httpURLConnection = (HttpURLConnection) urlConnection;// http的连接类 + + //String contentType = httpURLConnection.getContentType();//请求类型,可用来过滤请求, + + httpURLConnection.setConnectTimeout(1000*5);//设置超时 + + httpURLConnection.setRequestMethod("GET");//设置请求方式,默认是GET + + httpURLConnection.setRequestProperty("Charset", "UTF-8");// 设置字符编码 + + httpURLConnection.connect();// 打开连接 + + BufferedInputStream bin = new BufferedInputStream(httpURLConnection.getInputStream()); + + String path = dowPath;// 指定存放位置 + File filed = new File(path); + String mergePdfPath = dowPath ; + String[] paths = mergePdfPath.split("/"); + String mpath = ""; + for(int i = 0 ; i + *
+ *
+ * 
+ * + * @Author: HuangZhengguo + * @Date: 2024/2/27 + */ +public abstract class FVCommonNode extends ACommonSuperNode { + private final static Log log = LogFactory.getLog(FVCommonNode.class); + protected ICstConfigApi cstConfigApi = (ICstConfigApi) AppContext.getBean("cstConfigApi"); + + @Autowired + FVService fvService; + + @Override + public String getPluginId() { + return FVConstants.getPluginId(); + } + + @Override + public String getFormParse() { + return "json"; + } + + @Override + public WorkFlowType[] getTypes() { + return new WorkFlowType[] {WorkFlowType.superNode}; + } + + public ConfigVo getFVConfig() { + return cstConfigApi.getConfig(getPluginId()); + } + + + @Override + public SuperNodeContext proceed(String request, FormDataVo formDataVo, FormDataMasterBean formDataMasterBean) throws Exception { + SuperNodeContext context = new SuperNodeContext(); + log.info("进入区域备案处理超级节点中"); + try { + FieldDataVo fhjg = formDataVo.getFieldData("返回结果"); + String value = fhjg.getStringValue(); + if(value.startsWith("推送经销商平台成功")) { + return context.success("跳过:" + value); + } + } catch (Exception e) { + context.setErrMsg("调用失败:"+e); + context.setException(true); + context.back("调用失败:"+e); + } + ConfigVo configVo = getFVConfig(); + context.setNeedSave(true); + String url = ""; +// 进行新老接口分发 + FieldDataVo xttb = formDataVo.getFieldData("系统同步"); + String xttbvalue = xttb.getStringValue(); + String s = ""; + Map parm = new HashMap(); + if("CRM".equals(xttbvalue) || StringUtil.isEmpty(xttbvalue)){ +// 设置附件路径 + JSONArray filePath = fvService.getFilePath(formDataVo,configVo); +// 参数封装 + parm = FVService.createWF(filePath,formDataVo,configVo); + //调用新建接口 + String userid = formDataVo.getFieldData("经办人").getStringValue(); + s = FanWeiUtil.PostRestful(parm, userid,configVo); + } if ("NCRM".equals(xttbvalue) || StringUtil.isEmpty(xttbvalue)){ +// 设置附件路径 + JSONArray filePath = fvService.getFilePath(formDataVo,configVo); + //封装参数 + parm = FVService.createNewWF(filePath,formDataVo,configVo); + //调用新建接口 + String userid = formDataVo.getFieldData("经办人").getStringValue(); + s = FanWeiUtil.NewPostRestful(parm, userid,configVo); + } + JSONObject returnMsg = JSONObject.parseObject(s); + Object code = returnMsg.get("code"); + log.info("新建code:" + code); + Map map = new HashMap<>(); + if ("SUCCESS".equals(code.toString())) { + //调用提交接口 + map.put("code", "200"); + map.put("msg", "推送成功"); + map.put("request", parm.toString()); + map.put("response", s); + } else { +// Map data = (Map) returnMsg.get("errMsg"); + map.put("code", "300"); + map.put("msg", "新建流程失败!"+returnMsg.getString("msg")); + map.put("request", parm.toString()); + map.put("response", s); + } + try{ + context.setRequest(map.get("request").toString()); + context.setResponse(map.get("response").toString()); + Object jsoncode = map.get("code"); + if ("200".equals(jsoncode.toString())) { + context.success(map.get("msg").toString(), false); + formDataVo.getNewFieldDataMap().put("返回结果",map.get("msg").toString()); + } else { + context.setErrMsg(map.get("msg").toString()); + context.setException(true); + context.back("推送失败:" +map.get("msg").toString()); + formDataVo.getNewFieldDataMap().put("返回结果","推送失败:"+map.get("msg").toString()); + } + }catch (Exception e){ + context.setException(true); + context.back("推送失败:OA处理异常:" + e.getMessage()); + formDataVo.getNewFieldDataMap().put("返回结果","推送失败:OA处理异常:"+map.get("msg").toString()); + } + + return context; + } + public abstract String getMethod(); +} + +// url += getMethod(); +// context.setRequest(request); +// context.setUrl(url); +// try { +// String response = FVHttpUtil.doPost(url, "", configVo.getParamVal(FVConstants.fvOldUrl.name()), configVo.getParamVal(FVConstants.client_security.name())); +// context.setResponse(response); +// FVResponse fvResponse = FVHttpUtil.parseResponse(response); +// if(fvResponse.isSuccess()) { +// context.success("推送BIP成功:" + fvResponse.getMsg(), false); +// formDataVo.getNewFieldDataMap().put("返回结果", "推送成功:" + fvResponse.getMsg()); +// } else { +// context.setErrMsg(fvResponse.getMsg()); +// context.setException(true); +// context.back("推送BIP失败:" + fvResponse.getMsg()); +// formDataVo.getNewFieldDataMap().put("返回结果", "推送失败:" + fvResponse.getMsg()); +// } +// } catch (Exception e) { +// context.setException(true); +// context.back("推送BIP失败:OA处理异常:" + e.getMessage()); +// formDataVo.getNewFieldDataMap().put("返回结果", "推送失败:OA处理异常" + e.getMessage()); +// } + + + + + diff --git a/src/com/seeyon/apps/src_qyba/FVTongyongbeianNode.java b/src/com/seeyon/apps/src_qyba/FVTongyongbeianNode.java new file mode 100644 index 0000000..ea8d1fc --- /dev/null +++ b/src/com/seeyon/apps/src_qyba/FVTongyongbeianNode.java @@ -0,0 +1,135 @@ +package com.seeyon.apps.src_qyba; + +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.common.config.ICstConfigApi; +import com.seeyon.apps.common.plugin.vo.ConfigVo; +import com.seeyon.apps.common.workflow.constants.WorkFlowType; +import com.seeyon.apps.common.workflow.node.ACommonSuperNode; +import com.seeyon.apps.ext.workflow.vo.FieldDataVo; +import com.seeyon.apps.ext.workflow.vo.FormDataVo; +import com.seeyon.apps.ext.workflow.vo.SuperNodeContext; +import com.seeyon.apps.src_qyba.constants.FVConstants; +import com.seeyon.apps.src_qyba.service.FVService; +import com.seeyon.apps.src_qyba.service.FVTongyongService; +import com.seeyon.apps.src_qyba.util.FanWeiUtil; +import com.seeyon.cap4.form.bean.FormDataMasterBean; +import com.seeyon.ctp.common.AppContext; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.HashMap; +import java.util.Map; + +/** + * 功能描述:
+ *
+ *
+ * 
+ * + * @Author: HuangZhengguo + * @Date: 2024/2/27 + */ +public abstract class FVTongyongbeianNode extends ACommonSuperNode { + private final static Log log = LogFactory.getLog(FVTongyongbeianNode.class); + protected ICstConfigApi cstConfigApi = (ICstConfigApi) AppContext.getBean("cstConfigApi"); + + @Autowired + FVService fvService; + + @Override + public String getPluginId() { + return FVConstants.getPluginId(); + } + + @Override + public String getFormParse() { + return "json"; + } + + @Override + public WorkFlowType[] getTypes() { + return new WorkFlowType[] {WorkFlowType.superNode}; + } + + public ConfigVo getFVConfig() { + return cstConfigApi.getConfig(getPluginId()); + } + + + @Override + public SuperNodeContext proceed(String request, FormDataVo formDataVo, FormDataMasterBean formDataMasterBean) throws Exception { + SuperNodeContext context = new SuperNodeContext(); + log.info("进入备案审批结果回传处理超级节点中"); + try { + FieldDataVo fhjg = formDataVo.getFieldData("返回结果"); + String value = fhjg.getStringValue(); + if(value.startsWith("推送经销商平台成功")) { + return context.success("跳过:" + value); + } + } catch (Exception e) { + context.setErrMsg("调用失败:"+e); + context.setException(true); + context.back("调用失败:"+e); + } + ConfigVo configVo = getFVConfig(); + context.setNeedSave(true); + String url = ""; +// 进行新老接口分发 + FieldDataVo xttb = formDataVo.getFieldData("系统同步"); + String xttbvalue = xttb.getStringValue(); + String s = ""; +// Map parm = new HashMap(); + //封装参数 + Map parm = FVTongyongService.createWF(formDataVo,configVo); + if("CRM".equals(xttbvalue)){ + s = FanWeiUtil.PostSubmitRestful(parm,configVo); + } if ("NCRM".equals(xttbvalue)){ + s = FanWeiUtil.NewPostSubmitRestful(parm,configVo); + } + JSONObject returnMsg = JSONObject.parseObject(s); + Object code = returnMsg.get("code"); + log.info("新建code:" + code); + Map map = new HashMap<>(); + if ("SUCCESS".equals(code.toString())) { + //调用提交接口 + map.put("code", "200"); + map.put("msg", "推送成功"); + map.put("request", parm.toString()); + map.put("response", s); + } else { +// Map data = (Map) returnMsg.get("errMsg"); + map.put("code", "300"); + map.put("msg", "新建流程失败!"+returnMsg.getString("errMsg")); + map.put("request", parm.toString()); + map.put("response", s); + } + try{ + context.setRequest(map.get("request").toString()); + context.setResponse(map.get("response").toString()); + Object jsoncode = map.get("code"); + if ("200".equals(jsoncode.toString())) { + context.success(map.get("msg").toString(), false); + formDataVo.getNewFieldDataMap().put("返回结果",map.get("msg").toString()); + } else { + context.setErrMsg(map.get("msg").toString()); + context.setException(true); + context.back("推送失败:" +map.get("msg").toString()); + formDataVo.getNewFieldDataMap().put("返回结果","推送失败:"+map.get("msg").toString()); + } + }catch (Exception e){ + context.setException(true); + context.back("推送失败:OA处理异常:" + e.getMessage()); + formDataVo.getNewFieldDataMap().put("返回结果","推送失败:OA处理异常:"+map.get("msg").toString()); + } + + return context; + } + public abstract String getMethod(); +} + + + + + + diff --git a/src/com/seeyon/apps/src_qyba/QYBAPluginApi.java b/src/com/seeyon/apps/src_qyba/QYBAPluginApi.java new file mode 100644 index 0000000..7b3a33f --- /dev/null +++ b/src/com/seeyon/apps/src_qyba/QYBAPluginApi.java @@ -0,0 +1,40 @@ +package com.seeyon.apps.src_qyba; + +import com.seeyon.apps.src_qyba.constants.FVConstants; +import com.seeyon.apps.common.plugin.api.APluginInfoApi; +import com.seeyon.apps.common.plugin.vo.ConfigVo; + +/** + * 功能描述:
+ *
+ *
+ * 
+ * + * @Author: huangzhengguo + * @Date: 2024/03/04 + */ +public class QYBAPluginApi extends APluginInfoApi { + + @Override + public String getPluginId() { + return FVConstants.getPluginId(); + } + + @Override + public String getCreateUser() { + return "湖北橙阳"; + } + + @Override + public ConfigVo getDefaultConfig() { + ConfigVo configVo = new ConfigVo(); + for (FVConstants value : FVConstants.values()) { + if(value != FVConstants.plugin) { + configVo.getDevParams().put(value.name(), value.getDefaultValue()); + configVo.getProdParams().put(value.name(), value.getDefaultValue()); + configVo.getParamMap().put(value.name(), value.getDescription()); + } + } + return configVo; + } +} diff --git a/src/com/seeyon/apps/src_qyba/constants/FVConstants.java b/src/com/seeyon/apps/src_qyba/constants/FVConstants.java new file mode 100644 index 0000000..7d16449 --- /dev/null +++ b/src/com/seeyon/apps/src_qyba/constants/FVConstants.java @@ -0,0 +1,43 @@ +package com.seeyon.apps.src_qyba.constants; + +public enum FVConstants { + plugin("src_qyba","插件ID"), +// fvOldUrl("http://10.1.90.21:9083", "旧经销商平台地址"), +// fvNewUrl("http://10.1.90.21:9083", "新经销商平台地址"), + workflowId("8521", "workflowId"), + newWorkflowId("2026", "newWorkflowId"), + dowurl("https://oa.dhx.com.cn/seeyon/rest/attachment/file", "dowurl"), + addRess("https://crm.dhx9.com", "addRess"), + newAddRess("https://crm.zwinfor.cn/", "newAddRess"), + spk("MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAymEn8vp0E8pg6op/WXJ4A67jHAYeUBtut8vJgk09t4Bw3kheWnHUjVHDBEZ8iC/iX9YyBzL76WZR+lpDqdFh2iKYk+yctHKc4dt9r0vw6HYMUWDrYmctdKJtdOGpWxz4apBr7Rc/2A3FDxwsiXzPqpG/GY+/1IHp7E3jEX0nxzuJn/YUm/SoSgfMB4NCHF9n3rrIsp4jJ5SOSwLr68nlwT3djF2f8vQcqRxmT0J7X2xKehlpeiubszQj5TeFcA+onkOBKkoKc+83G8Gg8J1IWZLsd50cjawrmg8lxl+UBEsPZHEh0AhWDHKLRG+9jyZJ94hoWaQRSgwEIdGyShNMnwIDAQAB", "SPK"), + newspk("MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvcOew5NM41jK7CFBnirP4Zz0QIexYEweS+4LTuQOVY+BqHu2EMxlPYRsjtvzZj7Pm9SsiNiEIeGXZ3mkAMbNNqu7G7kGb10pJzpBBTE80cRCY0bHoD3PhD8cBiKjpsRXJ+1mPdwD4fGEr0IcG6bKhBM3xsCmc4JiEvsv/+nPm9G7NQgoPGEKHkZk0IgyaBF5m6F2NKah92klxuz+vWCQoVsCpCjHN1sijQioWc6lRLgP7d6IZFEbOrLL7HdlOc8yKOAOZhURd78CqiVYBc1vP0pyC1/UW0Lq0f2MFpg/7Z18VwAf1vFUb+oiIdjFYMr5dgS+i784FaMUDzKUvndDWwIDAQAB", "NEWSPK"), + tongyongApi("/api/workflow/paService/doCreateRequest", "tongyongApi"), + tongyonSubmitgApi("/api/workflow/paService/submitRequest", "tongyonSubmitgApi"), + appId("oa", "appId"), + secret("b44da0ec-6ba5-4d6e-b3d7-e0571b3bcdd6", "secret"), + newSecret("6553bad7-51f0-4d56-af44-3d64a8ce9814", "newSecret"), + client_security("30dcf9a3cfef4b98a157e926db6369f0", "client_security"), + dsname("BIPKF", "dsname"), + busicentercode("sxbip", "busicentercode"); + + FVConstants(String defaultValue, String description) { + this.defaultValue = defaultValue; + this.description = description; + } + + private String defaultValue; + private String description; + + public String getDefaultValue() { + return defaultValue; + } + + public String getDescription() { + return description; + } + + public static String getPluginId() { + return plugin.defaultValue; + } + +} diff --git a/src/com/seeyon/apps/src_qyba/constants/MarketingCompanyConstants.java b/src/com/seeyon/apps/src_qyba/constants/MarketingCompanyConstants.java new file mode 100644 index 0000000..866469f --- /dev/null +++ b/src/com/seeyon/apps/src_qyba/constants/MarketingCompanyConstants.java @@ -0,0 +1,75 @@ +package com.seeyon.apps.src_qyba.constants; + +public enum MarketingCompanyConstants { + CORP_301(1007, 301, "宜昌融厚商贸有限公司", "RH", "301-RH"), + CORP_302(1008, 302, "宜昌市谷醇商贸有限公司", "GC", "302-GC"), + CORP_303(1010, 303, "上海中宜国昌商贸有限责任公司", "ZY", "303-ZY"), + CORP_304(1011, 304, "武汉市鑫稻成商贸有限责任公司", "DC", "304-DC"), + CORP_305(1012, 305, "武汉市稻盛香辉商贸有限责任公司", "XH", "305-XH"), + CORP_306(1013, 306, "崇阳县德晟隆和商贸有限公司", "DL", "306-DL"), + CORP_307(1014, 307, "崇阳县智链商贸有限公司", "ZL", "307-ZL"), + CORP_308(1015, 308, "武汉市酒韵长河商贸有限责任公司", "CH", "308-CH"), + CORP_309(1016, 309, "武汉市博汇世耀商贸有限责任公司", "BH", "309-BH"), + CORP_310(1017, 310, "武汉佳和天泰商贸有限公司", "JH", "310-JH"), + CORP_311(1018, 311, "武汉雅韵堂商贸有限公司", "YY", "311-YY"), + CORP_312(1019, 312, "武汉佳泰昌商贸有限责任公司", "JT", "312-JT"), + CORP_313(1020, 313, "武汉市卓宇轩商贸有限公司", "YX", "313-YX"), + CORP_314(1021, 314, "武汉市诚聚耀商贸有限公司", "CJ", "314-CJ"), + CORP_315(1022, 315, "武汉市智博远商贸有限公司", "ZB", "315-ZB"), + CORP_316(1023, 316, "武汉市智辉优合商贸有限责任公司", "ZH", "316-ZH"), + CORP_317(1024, 317, "武汉市明辉逸致商贸有限责任公司", "MH", "317-MH"), + CORP_318(1025, 318, "武汉市泰源瑞通商贸有限责任公司", "TY", "318-TY"), + CORP_319(1026, 319, "武汉市浩海程远商贸有限责任公司", "HH", "319-HH"), + CORP_320(1027, 320, "上高县恒耀合昌商贸有限公司", "HY", "320-HY"), + CORP_321(1028, 321, "深圳市宏盛瑞耀商贸有限公司", "HS", "321-HS"), + CORP_322(1029, 322, "宜昌市晟雅辉商贸有限公司", "YH", "322-YH"), + CORP_323(1030, 323, "开封市聚程捷商贸有限公司", "JC", "323-JC"), + CORP_324(1031, 324, "平顶山市兴博睿商贸有限公司", "XB", "324-XB"), + CORP_325(1032, 325, "宜昌市万斛舟商贸有限公司", "WH", "325-WH"), + CORP_326(1033, 326, "上高县盛禾圆商贸有限责任公司", "SH", "326-SH"); + + // 枚举属性 + private final int pkCorp; + private final int unitCode; + private final String unitName; + private final String objTab; + private final String pathName; + + /** + * 构造函数 + * @param pkCorp 企业主键 + * @param unitCode 单位编码 + * @param unitName 单位名称 + * @param objTab 对象表标识 + * @param pathName 路径名称 + */ + MarketingCompanyConstants(int pkCorp, int unitCode, String unitName, String objTab, String pathName) { + this.pkCorp = pkCorp; + this.unitCode = unitCode; + this.unitName = unitName; + this.objTab = objTab; + this.pathName = pathName; + } + + // Getter方法 + public int getPkCorp() { + return pkCorp; + } + + public int getUnitCode() { + return unitCode; + } + + public String getUnitName() { + return unitName; + } + + public String getObjTab() { + return objTab; + } + + public String getPathName() { + return pathName; + } + +} diff --git a/src/com/seeyon/apps/src_qyba/dao/ISrcBeianDao.java b/src/com/seeyon/apps/src_qyba/dao/ISrcBeianDao.java new file mode 100644 index 0000000..f2df613 --- /dev/null +++ b/src/com/seeyon/apps/src_qyba/dao/ISrcBeianDao.java @@ -0,0 +1,9 @@ +package com.seeyon.apps.src_qyba.dao; + +import java.util.List; + +public interface ISrcBeianDao { + + public List getdocResources(String parentFrId); + +} diff --git a/src/com/seeyon/apps/src_qyba/dao/impl/SrcBeianDao.java b/src/com/seeyon/apps/src_qyba/dao/impl/SrcBeianDao.java new file mode 100644 index 0000000..1941ab9 --- /dev/null +++ b/src/com/seeyon/apps/src_qyba/dao/impl/SrcBeianDao.java @@ -0,0 +1,42 @@ +package com.seeyon.apps.src_qyba.dao.impl; + +import com.seeyon.apps.src_qyba.dao.ISrcBeianDao; +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.ctp.util.JDBCAgent; + +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class SrcBeianDao implements ISrcBeianDao { + + private String getdocResources = "select id from doc_resources where PARENT_FR_ID = ?"; + + @Override + public List getdocResources(String parentFrId) { + List ret = new ArrayList<>(); + JDBCAgent agent = new JDBCAgent(); + try { + StringBuilder sql = new StringBuilder(getdocResources); + List p = new ArrayList(); + p.add(parentFrId); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + for (Map map : list) { + ret.add(Long.parseLong(map.get("id").toString())); + } + } catch (BusinessException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (SQLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + }finally { + if (agent != null) { + agent.close(); + } + } + return ret; + } +} diff --git a/src/com/seeyon/apps/src_qyba/manage/MultipleViewsPrintManager.java b/src/com/seeyon/apps/src_qyba/manage/MultipleViewsPrintManager.java new file mode 100644 index 0000000..2981da2 --- /dev/null +++ b/src/com/seeyon/apps/src_qyba/manage/MultipleViewsPrintManager.java @@ -0,0 +1,16 @@ +package com.seeyon.apps.src_qyba.manage; + +import com.seeyon.ctp.util.annotation.AjaxAccess; + +import java.util.List; +import java.util.Map; + +public interface MultipleViewsPrintManager { + /** + * 多视图打印 + * @return + * @throws Exception + */ + @AjaxAccess + public Map print(Map params, List> approvalOpinions,String flowName) throws Exception; +} diff --git a/src/com/seeyon/apps/src_qyba/manage/impl/MultipleViewsPrintManagerImpl.java b/src/com/seeyon/apps/src_qyba/manage/impl/MultipleViewsPrintManagerImpl.java new file mode 100644 index 0000000..a822b04 --- /dev/null +++ b/src/com/seeyon/apps/src_qyba/manage/impl/MultipleViewsPrintManagerImpl.java @@ -0,0 +1,268 @@ +package com.seeyon.apps.src_qyba.manage.impl; + +import com.seeyon.apps.collaboration.manager.ColManager; +import com.seeyon.apps.collaboration.po.ColSummary; +import com.seeyon.apps.collaboration.util.ColUtil; +import com.seeyon.apps.src_qyba.constants.MarketingCompanyConstants; +import com.seeyon.apps.src_qyba.manage.MultipleViewsPrintManager; +import com.seeyon.apps.src_qyba.util.ArchiveDocUtils; +import com.seeyon.cap4.form.api.FormApi4Cap4; +import com.seeyon.cap4.form.bean.FormAuthViewBean; +import com.seeyon.cap4.form.bean.FormBean; +import com.seeyon.cap4.form.bean.FormViewBean; +import com.seeyon.cap4.form.util.Enums; +import com.seeyon.ctp.cap.api.manager.CAPFormManager; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.common.ModuleType; +import com.seeyon.ctp.common.SystemEnvironment; +import com.seeyon.ctp.common.content.mainbody.MainbodyManager; +import com.seeyon.ctp.common.content.mainbody.MainbodyType; +import com.seeyon.ctp.common.log.CtpLogFactory; +import com.seeyon.ctp.common.po.affair.CtpAffair; +import com.seeyon.ctp.common.po.content.CtpContentAll; +import com.seeyon.ctp.common.po.template.CtpTemplate; +import com.seeyon.ctp.common.template.manager.TemplateManager; +import com.seeyon.ctp.util.ParamUtil; +import com.seeyon.ctp.util.Strings; +import com.seeyon.ctp.util.annotation.AjaxAccess; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.io.FileUtils; +import org.apache.commons.lang.StringUtils; +import org.apache.commons.logging.Log; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class MultipleViewsPrintManagerImpl implements MultipleViewsPrintManager { + private static Log log = CtpLogFactory.getLog(MultipleViewsPrintManagerImpl.class); + private static FormApi4Cap4 formApi4Cap4 = (FormApi4Cap4) AppContext.getBean("formApi4Cap4"); + private ColManager colManager = (ColManager) AppContext.getBean("colManager"); + private MainbodyManager ctpMainbodyManager = (MainbodyManager) AppContext.getBean("ctpMainbodyManager");; + private static CAPFormManager capFormManager = (CAPFormManager) AppContext.getBean("capFormManager"); + private TemplateManager templateManager = (TemplateManager) AppContext.getBean("templateManager"); + + @AjaxAccess + public Map print(Map params,List> approvalOpinions,String flowName) throws Exception { + Map result = new HashMap(); + result.put("success", true); + Long formId = ParamUtil.getLong(params, "formId", null); + String templeteId = params.get("templeteId").toString(); + Long affairId = ParamUtil.getLong(params, "affairId", null); +// Long summaryId = ParamUtil.getLong(params, "summaryId", null); + String rightId = ParamUtil.getString(params, "rightId"); + CtpTemplate templete = templateManager.getCtpTemplate(Long.parseLong(templeteId)); + FormBean formBean = formApi4Cap4.getFormByFormCode(templete); + if (Strings.isNotBlank(rightId)) { + // 适配这种格式(视图id.权限id_视图id.权限id_视图id.权限id) + List formAuthViewBeans = new ArrayList<>(); + if (rightId.contains("_") || rightId.contains(".")) { + String[] viewStrs = rightId.split("_"); + for (String viewStr : viewStrs) { + String rightIdStr = viewStr.contains(".") ? viewStr.split("\\.")[1].split("[|]")[0] + : viewStr.split("[|]")[0]; + FormAuthViewBean formAuthViewBean = formBean.getAuthViewBeanById(Long.parseLong(rightIdStr)); + if (formAuthViewBean == null) { + continue; + } + if (formAuthViewBean.getFormViewId() == 0L && viewStr.contains(".")) { + String valueStr = viewStr.split("\\.")[0].split("[|]")[0]; + formAuthViewBean.setFormViewId(Long.parseLong(valueStr)); + } + formAuthViewBeans.add(formAuthViewBean); + } + } + if (CollectionUtils.isNotEmpty(formAuthViewBeans)) { + for (FormAuthViewBean formAuthViewBean : formAuthViewBeans) { + String rightIdStr = String.valueOf(formAuthViewBean.getId()); + // 此处不需要多语言视图,只需要获取名称 + FormViewBean formViewBean = formBean.getFormView(formAuthViewBean.getFormViewId()); + if (Enums.ViewType.SeeyonForm == formViewBean.getFormViewTypeEnum()) { + Map param = new HashMap<>(); + param.put("rightId", rightIdStr); + param.put("affairId", affairId); + param.put("fileName",flowName); + param.put("formId", formId); + + String fileUrl = screenCaptureViewInfo(param,approvalOpinions); + if (StringUtils.isNotEmpty(fileUrl)) { + result.put(formViewBean.getFormViewName(),fileUrl); + } + } + } + } + } + return result; + } + + /** + * 获取各个视图截屏数据 + * + * @param param + */ + private String screenCaptureViewInfo(Map param,List> approvalOpinions) { + try { + String bodyContent = ""; + StringBuffer formContent = new StringBuffer( + " 表单 "); + Long affairId = ParamUtil.getLong(param, "affairId"); + Long rightId = ParamUtil.getLong(param, "rightId"); + Long formId = ParamUtil.getLong(param, "formId"); + CtpAffair affair = colManager.getAffairById(affairId); + ColSummary summary = colManager.getColSummaryById(affair.getObjectId()); + // 将_rightId加入缓存中 + formApi4Cap4.addRightId(formId, rightId); + + List contentList = ctpMainbodyManager + .getContentListByModuleIdAndModuleType(ModuleType.collaboration, summary.getId()); + CtpContentAll ctpContent = contentList.get(0); + String bodyType = summary.getBodyType(); + + boolean isFormCap4 = formApi4Cap4.isCap4Form(formId); + if (ColUtil.isForm(bodyType) || isFormCap4) { + + bodyContent = capFormManager.getFormDataHtmlForForward(ctpContent.getContentTemplateId(), + ctpContent.getModuleType(), ctpContent.getModuleId(), String.valueOf(rightId)); + } else if (String.valueOf(MainbodyType.HTML.getKey()).equals(bodyType)) { + bodyContent = ctpContent.getContent(); + } + formContent.append(bodyContent); +// 在此处添加审批意见信息 + formContent.append("
"); + formContent.append("
"); + formContent.append("处理人意见区"); + formContent.append("(共"+approvalOpinions.size()+"条)"); + formContent.append("
"); + formContent.append("
"); + if(approvalOpinions.size()>0){ + formContent.append("
"); + for (Map approvalOpinion : approvalOpinions){ + formContent.append("
"); + formContent.append("
"); +// formContent.append("
"+approvalOpinion.get("memberName").substring(0,1)+"
"); + formContent.append("
"); + formContent.append(""+approvalOpinion.get("memberName")+""); + formContent.append(""+approvalOpinion.get("memberDept")+""); + formContent.append(""+approvalOpinion.get("createDate")+""); + formContent.append("
"); + formContent.append("
"); + formContent.append("
"); + formContent.append(approvalOpinion.get("content")); + formContent.append("
"); + formContent.append("
"); + } + formContent.append("
"); + } + formContent.append(""); + String mergePdfPath = SystemEnvironment.getApplicationFolder()+ File.separator+ "multipleViewsPrint" ; + File mergePdfFile = new File(mergePdfPath); + if(!mergePdfFile.exists()) { + mergePdfFile.mkdirs(); + } +// 判断文件下载路径 + String fileName = param.get("fileName").toString(); + String matchingUnitName = getMatchingUnitName(fileName); + if(matchingUnitName==null){ + matchingUnitName = "null"; + } + String directoryPath = SystemEnvironment.getApplicationFolder()+ File.separator+ "multipleViewsPrint" + File.separator + matchingUnitName+ File.separator; + File directory = new File(directoryPath); + if (!directory.exists()) { + directory.mkdirs(); + } + String htmlTempFolder = SystemEnvironment.getApplicationFolder()+ File.separator+ "multipleViewsPrint" + File.separator + matchingUnitName + File.separator + param.get("fileName") + ".html";; + + try (FileWriter writer = new FileWriter(htmlTempFolder)) { + writer.write(formContent.toString()); + } catch (IOException e) { + System.err.println("保存文件时出错: " + e.getMessage()); + } + + File formFile = new File(htmlTempFolder); + FileUtils.writeStringToFile(formFile, formContent.toString(), "UTF-8"); + String pdfTempFolder = SystemEnvironment.getApplicationFolder()+ File.separator+ "multipleViewsPrint" + File.separator + matchingUnitName + File.separator + param.get("fileName") + ".pdf"; + if (!ArchiveDocUtils.transHtmlToPdf(htmlTempFolder, pdfTempFolder)) { + throw new Exception("html转PDF失败"); + } + return pdfTempFolder; + } catch (Exception e) { + log.error("获取cap4表单页面数据异常:", e); + } + return null; + } + + + /** + * 根据文档名称提取编号部分,对比枚举中的objTab获取企业名称 + * @param docName 文档名称,格式示例:"市场广告申请-崇阳县桃溪副食店-YX13YH202412002" + * @return 匹配的企业名称,如无匹配返回null + */ + public static String getMatchingUnitName(String docName) { + // 检查输入参数是否为空 + if (docName == null || docName.trim().isEmpty()) { + System.out.println("文档名称不能为空"); + return null; + } + + // 按"-"分割文档名称 + String[] nameParts = docName.split("-"); + int partsLength = nameParts.length; + + // 验证分割长度是否为3或4 + if (partsLength != 3 && partsLength != 4) { + System.out.println("文档名称格式不正确,分割后长度必须为3或4,当前为:" + partsLength); + return null; + } + + // 获取编号部分(数组最后一个元素) + String codeSection = nameParts[nameParts.length - 1]; + String candidate = null; + + // 根据分割长度提取不同位置的字符 + if (partsLength == 3) { + // 分割长度为3 → 取第五六个字符(索引4-5) + if (codeSection.length() < 6) { + System.out.println("编号部分长度不足(需≥6个字符),当前长度:" + codeSection.length()); + return null; + } + candidate = codeSection.substring(4, 6); + System.out.println("分割长度=3,提取第五六个字符:" + candidate); + } else { + // 分割长度为4 → 取第一二个字符(索引0-1) + if (codeSection.length() < 2) { + System.out.println("编号部分长度不足(需≥2个字符),当前长度:" + codeSection.length()); + return null; + } + candidate = codeSection.substring(0, 2); + System.out.println("分割长度=4,提取第一二个字符:" + candidate); + } + + // 遍历企业信息枚举,查找匹配的objTab + for (MarketingCompanyConstants marketingCompany : MarketingCompanyConstants.values()) { + if (marketingCompany.getObjTab().equals(candidate)) { + return marketingCompany.getUnitName(); + } + } + + // 未找到匹配项 + System.out.println("未找到匹配的企业信息,候选标识:" + candidate); + return null; + } + + public static void main(String[] args) { + + List fileNames = new ArrayList<>(); + fileNames.add("市场专项投入备案-德化县明仲食杂店-BA11HY202409021"); + + for(int i = 0 ; i < fileNames.size(); i++){ + System.out.println("标题名称:"+fileNames.get(i)+"=======对比结果为:"+getMatchingUnitName(fileNames.get(i))+"\n"); + } + } + + + +} diff --git a/src/com/seeyon/apps/src_qyba/node/FVNewStateReturnNode.java b/src/com/seeyon/apps/src_qyba/node/FVNewStateReturnNode.java new file mode 100644 index 0000000..219d258 --- /dev/null +++ b/src/com/seeyon/apps/src_qyba/node/FVNewStateReturnNode.java @@ -0,0 +1,30 @@ +package com.seeyon.apps.src_qyba.node; + +import com.seeyon.apps.src_qyba.FVTongyongbeianNode; + +/** + * 功能描述:
+ *
+ *
+ * 
+ * + * @Author: HuangZhengguo + * @Date: 2024/2/27 + */ +public class FVNewStateReturnNode extends FVTongyongbeianNode { + + @Override + public String getMethod() { + return ""; + } + + @Override + public String getNodeId() { + return "fvNewStateReturnNode"; + } + + @Override + public String getNodeName() { + return "新平台备案状态回传推送"; + } +} \ No newline at end of file diff --git a/src/com/seeyon/apps/src_qyba/node/FVNewZhengceNode.java b/src/com/seeyon/apps/src_qyba/node/FVNewZhengceNode.java new file mode 100644 index 0000000..82beba0 --- /dev/null +++ b/src/com/seeyon/apps/src_qyba/node/FVNewZhengceNode.java @@ -0,0 +1,30 @@ +package com.seeyon.apps.src_qyba.node; + +import com.seeyon.apps.src_qyba.FVCommonNode; + +/** + * 功能描述:
+ *
+ *
+ * 
+ * + * @Author: HuangZhengguo + * @Date: 2024/2/27 + */ +public class FVNewZhengceNode extends FVCommonNode { + + @Override + public String getMethod() { + return ""; + } + + @Override + public String getNodeId() { + return "fvNewZhengceNode"; + } + + @Override + public String getNodeName() { + return "新平台政策推送"; + } +} \ No newline at end of file diff --git a/src/com/seeyon/apps/src_qyba/node/FVOldStateReturnNode.java b/src/com/seeyon/apps/src_qyba/node/FVOldStateReturnNode.java new file mode 100644 index 0000000..895c033 --- /dev/null +++ b/src/com/seeyon/apps/src_qyba/node/FVOldStateReturnNode.java @@ -0,0 +1,30 @@ +package com.seeyon.apps.src_qyba.node; + +import com.seeyon.apps.src_qyba.FVTongyongbeianNode; + +/** + * 功能描述:
+ *
+ *
+ * 
+ * + * @Author: HuangZhengguo + * @Date: 2024/2/27 + */ +public class FVOldStateReturnNode extends FVTongyongbeianNode { + + @Override + public String getMethod() { + return ""; + } + + @Override + public String getNodeId() { + return "fvOldStateReturnNode"; + } + + @Override + public String getNodeName() { + return "老平台备案状态回传推送"; + } +} \ No newline at end of file diff --git a/src/com/seeyon/apps/src_qyba/node/FVOldZhengceNode.java b/src/com/seeyon/apps/src_qyba/node/FVOldZhengceNode.java new file mode 100644 index 0000000..87f7698 --- /dev/null +++ b/src/com/seeyon/apps/src_qyba/node/FVOldZhengceNode.java @@ -0,0 +1,30 @@ +package com.seeyon.apps.src_qyba.node; + +import com.seeyon.apps.src_qyba.FVCommonNode; + +/** + * 功能描述:
+ *
+ *
+ * 
+ * + * @Author: HuangZhengguo + * @Date: 2024/2/27 + */ +public class FVOldZhengceNode extends FVCommonNode { + + @Override + public String getMethod() { + return ""; + } + + @Override + public String getNodeId() { + return "fvOldZhengceNode"; + } + + @Override + public String getNodeName() { + return "老平台政策推送"; + } +} \ No newline at end of file diff --git a/src/com/seeyon/apps/src_qyba/service/FVService.java b/src/com/seeyon/apps/src_qyba/service/FVService.java new file mode 100644 index 0000000..99d517e --- /dev/null +++ b/src/com/seeyon/apps/src_qyba/service/FVService.java @@ -0,0 +1,294 @@ +package com.seeyon.apps.src_qyba.service; + +import cn.hutool.json.JSONUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.common.plugin.vo.ConfigVo; + +import com.seeyon.apps.daohuaxiangSys.jkts.util.InterfaceListUtil; +import com.seeyon.apps.daohuaxiangSys.jkts.util.PropKit; +import com.seeyon.apps.ext.workflow.vo.FormDataVo; + +import com.seeyon.apps.src_qyba.constants.FVConstants; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.common.SystemEnvironment; +import com.seeyon.ctp.common.filemanager.manager.AttachmentManager; +import com.seeyon.ctp.common.po.filemanager.Attachment; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.io.IOException; +import java.util.*; + +public class FVService { + + private final static Log log = LogFactory.getLog(FVService.class); + + private AttachmentManager attachmentManager; + + public void setAttachmentManager(AttachmentManager attachmentManager) { + this.attachmentManager = attachmentManager; + } + + public AttachmentManager getAttachmentManagery() { + if (attachmentManager == null) { + attachmentManager = (AttachmentManager) AppContext.getBean("attachmentManager"); + } + return attachmentManager; + } + + public JSONArray getFilePath(FormDataVo formDataVo,ConfigVo configVo) throws Exception { + String pathId = formDataVo.getFieldData("上传附件").getStringValue(); + //附件 + JSONArray faths = null; + if (pathId == null || "".equals(pathId)) { + faths = new JSONArray(); + } else { + faths = getPathUrl(pathId,configVo); + } + return faths; + } + public JSONArray getnewFilePath(FormDataVo formDataVo,ConfigVo configVo) throws Exception { + String pathId = formDataVo.getFieldData("上传附件").getStringValue(); + //附件 + JSONArray faths = null; + if (pathId == null || "".equals(pathId)) { + faths = new JSONArray(); + } else { + faths = getPathUrl(pathId,configVo); + } + return faths; + } + + + + + + /** + * 创建流程 + */ + public static Map createWF( JSONArray faths, FormDataVo formDataVo, ConfigVo configVo) throws NoSuchFieldException, IOException { + //主表信息 + List mainlist = new ArrayList(); + + //标题 + Map mainmap2 = new HashMap(); + mainmap2.put("fieldName","bt");//OA字段名-同行人员(多人力资源浏览框) + mainmap2.put("fieldValue",formDataVo.getFieldData("表头").getStringValue());//字段值(OA人员ID,多个以英文逗号分隔) + mainlist.add(mainmap2); + + //单号 + Map mainmap3 = new HashMap(); + mainmap3.put("fieldName","dh"); + mainmap3.put("fieldValue",formDataVo.getFieldData("流水号").getStringValue()); + mainlist.add(mainmap3); + + //申请日期 + Map mainmap4 = new HashMap(); + mainmap4.put("fieldName","sqrq"); + mainmap4.put("fieldValue",formDataVo.getFieldData("申请日期").getStringValue()); + mainlist.add(mainmap4); + + //投入金额 + Map mainmap5 = new HashMap(); + mainmap5.put("fieldName","trje"); + mainmap5.put("fieldValue",formDataVo.getFieldData("投入金额").getStringValue()); + mainlist.add(mainmap5); + + //备案意见 + Map mainmap6 = new HashMap(); + mainmap6.put("fieldName","bayj"); + mainmap6.put("fieldValue",formDataVo.getFieldData("备案意见").getStringValue()); + mainlist.add(mainmap6); + + //备案简述 + Map mainmap11 = new HashMap(); + mainmap11.put("fieldName","bajs"); + mainmap11.put("fieldValue",formDataVo.getFieldData("内容").getStringValue()); + mainlist.add(mainmap11); + + //备案类型 + Map mainmap12 = new HashMap(); + mainmap12.put("fieldName","balx"); + String type = formDataVo.getFieldData("备案类型").getStringValue(); + if("全区域".equals(type)){ + mainmap12.put("fieldValue","3"); + }else if ("区域".equals(type)){ + mainmap12.put("fieldValue","1"); + } + mainlist.add(mainmap12); + + //区域 + Map mainmap13 = new HashMap(); + mainmap13.put("fieldName","qy"); + mainmap13.put("fieldValue",formDataVo.getFieldData("区域文本").getStringValue()); + mainlist.add(mainmap13); + + //经办人 +// Map mainmap10 = new HashMap(); +// mainmap10.put("fieldName","jbr"); +// mainmap10.put("fieldValue",formDataVo.getFieldData("经办人").getStringValue()); +// mainlist.add(mainmap10); + + //附件 + if(faths.size() > 0) { + Map jsonFile = new HashMap(); + jsonFile.put("fieldName","banr"); + List fujianValue = new ArrayList(); + for (int i = 0; i < faths.size(); i++) { + Map fath = (Map) faths.get(i); + Map fujianMap = new HashMap(); + fujianMap.put("filePath", fath.get("url")); + fujianMap.put("fileName", fath.get("name")); + fujianValue.add(fujianMap); + } + jsonFile.put("fieldValue",fujianValue); + mainlist.add(jsonFile); + } + + //接口主参数 + Map m = new LinkedHashMap(); +// JSONObject p = new JSONObject(); + //流程ID + m.put("workflowId", configVo.getParamVal(FVConstants.workflowId.name())); + //流程标题 + m.put("requestName",formDataVo.getColSummary().getSubject()); + //主表 + m.put("mainData", JSONUtil.toJsonStr(mainlist)); + log.info(m); + return m; + } + + /** + * 创建流程 + */ + public static Map createNewWF(JSONArray faths, FormDataVo formDataVo, ConfigVo configVo) throws NoSuchFieldException, IOException { + //主表信息 + List mainlist = new ArrayList(); + + //标题 + Map mainmap2 = new HashMap(); + mainmap2.put("fieldName","bt");//OA字段名-同行人员(多人力资源浏览框) + mainmap2.put("fieldValue",formDataVo.getFieldData("表头").getStringValue());//字段值(OA人员ID,多个以英文逗号分隔) + mainlist.add(mainmap2); + + //单号 + Map mainmap3 = new HashMap(); + mainmap3.put("fieldName","dh"); + mainmap3.put("fieldValue",formDataVo.getFieldData("流水号").getStringValue()); + mainlist.add(mainmap3); + + //申请日期 + Map mainmap4 = new HashMap(); + mainmap4.put("fieldName","sqrq"); + mainmap4.put("fieldValue",formDataVo.getFieldData("申请日期").getStringValue()); + mainlist.add(mainmap4); + + //投入金额 + Map mainmap5 = new HashMap(); + mainmap5.put("fieldName","trje"); + mainmap5.put("fieldValue",formDataVo.getFieldData("投入金额").getStringValue()); + mainlist.add(mainmap5); + + //备案意见 + Map mainmap6 = new HashMap(); + mainmap6.put("fieldName","bayj"); + mainmap6.put("fieldValue",formDataVo.getFieldData("备案意见").getStringValue()); + mainlist.add(mainmap6); + + //备案简述 + Map mainmap9 = new HashMap(); + mainmap9.put("fieldName","bajs"); + mainmap9.put("fieldValue",formDataVo.getFieldData("内容").getStringValue()); + mainlist.add(mainmap9); + + //经办人 + Map mainmap10 = new HashMap(); + mainmap10.put("fieldName","jbr"); + mainmap10.put("fieldValue",formDataVo.getFieldData("经办人").getStringValue()); + mainlist.add(mainmap10); + + + //公司名称 + Map mainmap12 = new HashMap(); + mainmap12.put("fieldName","ssschxsgs"); + mainmap12.put("fieldValue",formDataVo.getFieldData("馫香事业部公司名称").getStringValue()); + mainlist.add(mainmap12); + + //备案类型 + Map mainmap11 = new HashMap(); + mainmap11.put("fieldName","balx"); + String type = formDataVo.getFieldData("备案类型").getStringValue(); + if("全区域".equals(type)){ + mainmap11.put("fieldValue","3"); + }else if ("区域".equals(type)){ + mainmap11.put("fieldValue","2"); + } + mainlist.add(mainmap11); + + //附件 + if(faths.size() > 0) { + Map jsonFile = new HashMap(); + jsonFile.put("fieldName","banr"); + JSONArray fujianValue = new JSONArray(); + for (int i = 0; i < faths.size(); i++) { + Map fath = (Map) faths.get(i); + Map fujianMap = new HashMap(); + fujianMap.put("filePath", fath.get("url")); + fujianMap.put("fileName", fath.get("name")); + fujianValue.add(fujianMap); + } + jsonFile.put("fieldValue",fujianValue); + mainlist.add(jsonFile); + } + //接口主参数 + Map m = new LinkedHashMap(); +// JSONObject p = new JSONObject(); + //流程ID + m.put("workflowId", configVo.getParamVal(FVConstants.newWorkflowId.name())); + //流程标题 + m.put("requestName",formDataVo.getColSummary().getSubject()); + //主表 + m.put("mainData",JSONUtil.toJsonStr(mainlist)); + log.info(m); + return m; + } + + + + + + /** + * 获取附件路径 + * @param pathId + * @return + */ + public JSONArray getPathUrl(String pathId,ConfigVo configVo) throws IOException { + InterfaceListUtil interfaceListUtil = new InterfaceListUtil(); + String oatoken = interfaceListUtil.getToken(PropKit.getProp(PropKit.LOGINNAME)); + long aLong = Long.parseLong(pathId); + final List attachmentIds = attachmentManager.getBySubReference(aLong); + JSONArray jsonArray = new JSONArray(); + for (int i = 0 ; i < attachmentIds.size();i++) { + Attachment attachment = attachmentManager.getAttachmentByFileURL(attachmentIds.get(i)); + Long fileUrl = attachment.getFileUrl(); + String filename = attachment.getFilename(); + String fileType = filename.substring(filename.lastIndexOf(".")+1); + String oaFileName = filename.substring(0,filename.lastIndexOf(".")); + //调用接口下载文件,文件存放在指定的路径下 +// String dowUrl = PropKit.getProp(PropKit.DOWURL)+"/"+fileUrl+"?fileName="+fileType+"&token="+oatoken; + String dowUrl = configVo.getParamVal(FVConstants.dowurl.name())+"/"+fileUrl+"?fileName="+fileType+"&token="+oatoken; + String str = SystemEnvironment.getApplicationFolder(); + String dowPath = str+"/dhxfile/"+filename; + String download = interfaceListUtil.download(dowUrl, dowPath); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("name", filename); + jsonObject.put("type", fileType); + jsonObject.put("url", PropKit.getProp(PropKit.JYNCFILE)+"/"+filename); + jsonArray.add(jsonObject); + } + return jsonArray; + } + + +} \ No newline at end of file diff --git a/src/com/seeyon/apps/src_qyba/service/FVTongyongService.java b/src/com/seeyon/apps/src_qyba/service/FVTongyongService.java new file mode 100644 index 0000000..4223414 --- /dev/null +++ b/src/com/seeyon/apps/src_qyba/service/FVTongyongService.java @@ -0,0 +1,121 @@ +package com.seeyon.apps.src_qyba.service; + +import cn.hutool.json.JSONUtil; +import com.seeyon.apps.common.plugin.vo.ConfigVo; +import com.seeyon.apps.ext.workflow.vo.FormDataVo; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.common.filemanager.manager.AttachmentManager; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.io.IOException; +import java.util.*; + +public class FVTongyongService { + + private final static Log log = LogFactory.getLog(FVTongyongService.class); + + private AttachmentManager attachmentManager; + + public void setAttachmentManager(AttachmentManager attachmentManager) { + this.attachmentManager = attachmentManager; + } + + public AttachmentManager getAttachmentManagery() { + if (attachmentManager == null) { + attachmentManager = (AttachmentManager) AppContext.getBean("attachmentManager"); + } + return attachmentManager; + } + + /** + * 创建流程 + */ + public static Map createWF(FormDataVo formDataVo, ConfigVo configVo) throws NoSuchFieldException, IOException { + //主表信息 + List mainlist = new ArrayList(); + + //备案类型 + Map mainmap = new HashMap(); + mainmap.put("fieldName","bayj"); + String type = formDataVo.getFieldData("备案").getStringValue(); + if("同意备案".equals(type)){ + mainmap.put("fieldValue","0"); + }else if ("不同意备案".equals(type)){ + mainmap.put("fieldValue","1"); + }else if ("满足条件备案".equals(type)){ + mainmap.put("fieldValue","2"); + } + mainlist.add(mainmap); + Map sfxwtsmap = new HashMap(); + sfxwtsmap.put("fieldName","sfxwts"); + String sfxwts = formDataVo.getFieldData("是否下委托书").getStringValue(); + if("是".equals(sfxwts)){ + sfxwtsmap.put("fieldValue","0"); + }else if ("否".equals(sfxwts)){ + sfxwtsmap.put("fieldValue","1"); + } + mainlist.add(sfxwtsmap); +// 客户服务平台,意见说明 + Map yjsmmap = new HashMap(); + yjsmmap.put("fieldName","yjsm"); + String yjsm = formDataVo.getFieldData("备注").getStringValue(); + yjsmmap.put("fieldValue",yjsm); + mainlist.add(yjsmmap); + + //接口主参数 + Map m = new LinkedHashMap(); + //工作流ID + m.put("workflowId", formDataVo.getFieldData("工作流ID").getStringValue()); + //流程请求ID + m.put("requestId", formDataVo.getFieldData("流程请求ID").getStringValue()); + //流程标题 + m.put("requestName",formDataVo.getColSummary().getSubject()); + //主表 + m.put("mainData", JSONUtil.toJsonStr(mainlist)); + log.info(m); + return m; + } + + /** + * 创建流程 + */ + public static Map createNewWF(FormDataVo formDataVo, ConfigVo configVo) throws NoSuchFieldException, IOException { + //主表信息 + List mainlist = new ArrayList(); + + //流程表单名 + Map tableDBName = new HashMap(); + tableDBName.put("tableDBName",formDataVo.getFieldData("流程表单名").getStringValue()); + mainlist.add(tableDBName); + + //备案类型 + Map mainmap = new HashMap(); + mainmap.put("fieldName","bayj"); + String type = formDataVo.getFieldData("备案").getStringValue(); + if("同意备案".equals(type)){ + mainmap.put("fieldValue","0"); + }else if ("不同意备案".equals(type)){ + mainmap.put("fieldValue","1"); + }else if ("满足条件备案".equals(type)){ + mainmap.put("fieldValue","2"); + } + mainlist.add(mainmap); + + //接口主参数 + Map m = new LinkedHashMap(); +// JSONObject p = new JSONObject(); + //工作流ID + m.put("workflowid", formDataVo.getFieldData("工作流ID").getStringValue()); + //流程请求ID + m.put("requestId", formDataVo.getFieldData("流程请求ID").getStringValue()); + //流程标题 + m.put("requestName",formDataVo.getColSummary().getSubject()); + //主表 + m.put("mainData",JSONUtil.toJsonStr(mainlist)); + log.info(m); + return m; + } + + +} \ No newline at end of file diff --git a/src/com/seeyon/apps/src_qyba/util/ArchiveDocUtils.java b/src/com/seeyon/apps/src_qyba/util/ArchiveDocUtils.java new file mode 100644 index 0000000..1144cc2 --- /dev/null +++ b/src/com/seeyon/apps/src_qyba/util/ArchiveDocUtils.java @@ -0,0 +1,76 @@ +package com.seeyon.apps.src_qyba.util; + +import com.seeyon.ctp.common.SystemEnvironment; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.io.*; + +public class ArchiveDocUtils { + private static final Log LOGGER = LogFactory.getLog(ArchiveDocUtils.class); + + public static boolean transHtmlToPdf(String htmlFilePath, String pdfFilePath) { +// String wkhtmltopdfToolPath = AppContext.getSystemProperty("multipleViewsPrint.wkhtmltopdf"); + String wkhtmltopdfToolPath = SystemEnvironment.getApplicationFolder()+File.separator + "print" + File.separator + "tools" + File.separator + "windows" + File.separator + "wkhtmltopdf.exe"; + + LOGGER.info("将html文单转换为PDF文单:" + wkhtmltopdfToolPath); + try { + if (StringUtils.isNotBlank(wkhtmltopdfToolPath)) { + File file = new File(htmlFilePath); + if (!file.exists()) { + LOGGER.info("PDF转换源文件不存在:" + htmlFilePath); + return false; + } + // html 转 pdf 工具 不同操作系统运行不同的命令 + String command = ""; + if (System.getProperty("os.name").startsWith("Windows")) { + +// if("2".equals(rotate)){ +// command = wkhtmltopdfToolPath + " --enable-local-file-access --page-height 210mm --page-width 297mm " + htmlFilePath + " " + pdfFilePath; +// }else{ + command = wkhtmltopdfToolPath + " --enable-local-file-access " + htmlFilePath + " " + pdfFilePath; +// } + } else if (System.getProperty("os.name").startsWith("Linux")) { + command = "wkhtmltopdf " + htmlFilePath + " " + pdfFilePath; + } + LOGGER.info("将html文单转换为PDF文单命令:" + command); + Process process = Runtime.getRuntime().exec(command); + new StreamGobbler(process.getInputStream(), "input").start(); + new StreamGobbler(process.getErrorStream(), "error").start(); + if (process.waitFor() == 0) { + LOGGER.info("转PDF成功:" + pdfFilePath); + return true; + } + } + } catch (Exception e) { + LOGGER.error("文单转PDF异常:", e); + } + return false; + } + + static class StreamGobbler extends Thread { + + InputStream is; + + String type; + + StreamGobbler(InputStream is, String type) { + this.is = is; + this.type = type; + } + + public void run() { + try { + InputStreamReader isr = new InputStreamReader(is); + BufferedReader br = new BufferedReader(isr); + String line = null; + while ((line = br.readLine()) != null) + System.out.println(type + ">" + line); + isr.close(); + } catch (IOException ioe) { + ioe.printStackTrace(); + } + } + } +} diff --git a/src/com/seeyon/apps/src_qyba/util/FVHttpUtil.java b/src/com/seeyon/apps/src_qyba/util/FVHttpUtil.java new file mode 100644 index 0000000..790ad23 --- /dev/null +++ b/src/com/seeyon/apps/src_qyba/util/FVHttpUtil.java @@ -0,0 +1,57 @@ +package com.seeyon.apps.src_qyba.util; + +import cn.hutool.http.HttpRequest; +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.src_qyba.vo.FVResponse; +import com.seeyon.ctp.util.json.JSONUtil; +import org.springframework.util.DigestUtils; + +import java.util.Base64; + +/** + * 功能描述:
+ *
+ *
+ * 
+ * + * @Author: HuangZhengguo + * @Date: 2024/2/27 + */ +public class FVHttpUtil { + + private FVHttpUtil() { + + } + + public static String doPost(String url, String body, String clientId, String security) throws Exception { + String ts = System.currentTimeMillis() + ""; + String signature = ts + security; + byte[] bytes = DigestUtils.md5Digest(signature.getBytes("UTF-8")); + signature = Base64.getEncoder().encodeToString(bytes); + return HttpRequest.post(url).header("Content-Type", "application/json;charset=utf-8") + .header("ts", ts) + .header("signature", signature) + .header("client_id", clientId) + .body(body).execute().body(); + } + + public static FVResponse parseResponse(String response) throws Exception { + try { + JSONObject object = JSONUtil.parseJSONString(response, JSONObject.class); + return new FVResponse(object); + } catch (Exception e) { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("Status", "0"); + jsonObject.put("Msg", "解析json异常"); + jsonObject.put("Data", response); + return new FVResponse(jsonObject); + } + } + + + + public static void main(String[] args) { + String url = "http://10.1.90.21:9083/servlet/NCTokenServlet?dsname=BIPcs&usercode=UFYJY&system=OA&busicentercode=sxbip"; + } + +} diff --git a/src/com/seeyon/apps/src_qyba/util/FanWeiUtil.java b/src/com/seeyon/apps/src_qyba/util/FanWeiUtil.java new file mode 100644 index 0000000..ea0c7ba --- /dev/null +++ b/src/com/seeyon/apps/src_qyba/util/FanWeiUtil.java @@ -0,0 +1,300 @@ +package com.seeyon.apps.src_qyba.util; + +import cn.hutool.core.util.CharsetUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.crypto.asymmetric.KeyType; +import cn.hutool.crypto.asymmetric.RSA; +import cn.hutool.http.HttpRequest; +import cn.hutool.json.JSONUtil; +import com.seeyon.apps.common.plugin.vo.ConfigVo; +import com.seeyon.apps.src_qyba.constants.FVConstants; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.io.IOException; +import java.util.*; + +/** + * 描述: + * + * @Author: huangzhengguo + * @Date: 2024/03/04 + */ +public class FanWeiUtil { + + private final static Log log = LogFactory.getLog(FanWeiUtil.class); + + /** + * 模拟缓存服务 + */ + private static final Map SYSTEM_CACHE = new HashMap<>(); + + private static String privateKey = ""; + private static String publicKey = ""; + + + /** + * ecology系统发放的授权许可证(appid) + * ce14aaca-fa08-4eb7-9f10-c2294285c4ea + */ + private static String APPID = "e47a15d2-95f2-4bf6-a546-8076ce445a19"; + + + /** + * 第一步: + * + * 调用ecology注册接口,根据appid进行注册,将返回服务端公钥和Secret信息 + */ + public static Map Regist(String address){ + + //获取当前系统RSA加密的公钥 + RSA rsa = new RSA(); + if(publicKey.equals("")) { + publicKey = rsa.getPublicKeyBase64(); + } + if(privateKey.equals("")) { + privateKey = rsa.getPrivateKeyBase64(); + } + + log.info("publicKey:"+publicKey+" privateKey:"+privateKey); + // 客户端RSA私钥 + SYSTEM_CACHE.put("LOCAL_PRIVATE_KEY",privateKey); + // 客户端RSA公钥 + SYSTEM_CACHE.put("LOCAL_PUBLIC_KEY",publicKey); + + //调用ECOLOGY系统接口进行注册 + String data = HttpRequest.post(address + "/api/ec/dev/auth/regist") + .header("appid",APPID) + .header("cpk",publicKey) + .timeout(2000) + .execute().body(); + + // 打印ECOLOGY响应信息 + log.info("Regist():"+data); + Map datas = JSONUtil.parseObj(data); + + //ECOLOGY返回的系统公钥 + SYSTEM_CACHE.put("SERVER_PUBLIC_KEY", StrUtil.nullToEmpty((String)datas.get("spk"))); + //ECOLOGY返回的系统密钥 + SYSTEM_CACHE.put("SERVER_SECRET",StrUtil.nullToEmpty((String)datas.get("secrit"))); + return datas; + } + + + + /** + * 第二步: + * + * 通过第一步中注册系统返回信息进行获取token信息 + */ + public static Map Getoken(String address,ConfigVo configVo) throws IOException { + // 从系统缓存或者数据库中获取ECOLOGY系统公钥和Secret信息 +// String secret = PropKit.getProp(PropKit.SECRET); + String secret = configVo.getParamVal(FVConstants.secret.name()); +// String spk = PropKit.getProp(PropKit.SPK); + String spk = configVo.getParamVal(FVConstants.spk.name()); + + + // 公钥加密,所以RSA对象私钥为null + RSA rsa = new RSA(null,spk); + //对秘钥进行加密传输,防止篡改数据 + String encryptSecret = rsa.encryptBase64(secret, CharsetUtil.CHARSET_UTF_8, KeyType.PublicKey); + + //调用ECOLOGY系统接口进行注册 + String data = HttpRequest.post(address+ "/api/ec/dev/auth/applytoken") + .header("appid",configVo.getParamVal(FVConstants.appId.name())) + .header("secret",encryptSecret) + .header("time","3600") + .execute().body(); + + log.info("Getoken():"+data); + Map datas = JSONUtil.parseObj(data); + + //ECOLOGY返回的token + // TODO 为Token缓存设置过期时间 + SYSTEM_CACHE.put("SERVER_TOKEN",StrUtil.nullToEmpty((String)datas.get("token"))); + + return datas; + } + + /** + * 第三步:新增 + * + * 调用ecology系统的rest接口,请求头部带上token和用户标识认证信息 + * + * @param params 请求参数map,创建流程之类的post接口是以模拟form表单提交的方式,其他get接口以json字符串方式提交 + * + * 注意:ECOLOGY系统所有POST接口调用请求头请设置 "Content-Type","application/x-www-form-urlencoded; charset=utf-8" + */ + public static String PostRestful(Map params, String userid,ConfigVo configVo) throws IOException { + + //ECOLOGY返回的token +// String token = (String) Getoken(PropKit.getProp(PropKit.ADDRESS)).get("token"); + String token = (String) Getoken(configVo.getParamVal(FVConstants.addRess.name()),configVo).get("token"); + + //封装请求头参数 +// RSA rsa = new RSA(null, PropKit.getProp(PropKit.SPK)); + RSA rsa = new RSA(null, configVo.getParamVal(FVConstants.spk.name())); + //对用户信息进行加密传输,暂仅支持传输OA用户ID + String encryptUserid = rsa.encryptBase64(userid,CharsetUtil.CHARSET_UTF_8,KeyType.PublicKey); + + //调用ECOLOGY系统接口 +// String data = HttpRequest.post(PropKit.getProp(PropKit.ADDRESS) + PropKit.getProp(PropKit.TONGYONGAPI)) +// .header("appid",PropKit.getProp(PropKit.APPID)) +// .header("token",token) +// .header("userid",encryptUserid) +// // .header("skipsession", "1") +// .form(params) +// .execute().body(); + String data = HttpRequest.post(configVo.getParamVal(FVConstants.addRess.name()) + configVo.getParamVal(FVConstants.tongyongApi.name())) + .header("appid",configVo.getParamVal(FVConstants.appId.name())) + .header("token",token) + .header("userid",encryptUserid) + // .header("skipsession", "1") + .form(params) + .execute().body(); +// Map headermap = new HashMap(); +// headermap.put("appid",APPID); +// headermap.put("token",token); +// headermap.put("userid",encryptUserid); +// String data = HttpClientUtil.doPostFORM(address + api,headermap,params); + log.info("PostRestfulby():"+data); + return data; + } + + /** + * 第三步:提交 + * + * 调用ecology系统的rest接口,请求头部带上token和用户标识认证信息 + * + * @param params 请求参数map,创建流程之类的post接口是以模拟form表单提交的方式,其他get接口以json字符串方式提交 + * + * 注意:ECOLOGY系统所有POST接口调用请求头请设置 "Content-Type","application/x-www-form-urlencoded; charset=utf-8" + */ + public static String PostSubmitRestful(Map params,ConfigVo configVo) throws IOException { + + //ECOLOGY返回的token + String token = (String) Getoken(configVo.getParamVal(FVConstants.addRess.name()),configVo).get("token"); + + //封装请求头参数 + RSA rsa = new RSA(null, configVo.getParamVal(FVConstants.spk.name())); + //对用户信息进行加密传输,暂仅支持传输OA用户ID + String encryptUserid = rsa.encryptBase64("1",CharsetUtil.CHARSET_UTF_8,KeyType.PublicKey); + + //调用ECOLOGY系统接口 + log.info(configVo.getParamVal(FVConstants.addRess.name())); + log.info(configVo.getParamVal(FVConstants.tongyonSubmitgApi.name())); + log.info(configVo.getParamVal(FVConstants.appId.name())); + log.info(encryptUserid); + String data = HttpRequest.post(configVo.getParamVal(FVConstants.addRess.name()) + configVo.getParamVal(FVConstants.tongyonSubmitgApi.name())) + .header("appid",configVo.getParamVal(FVConstants.appId.name())) + .header("token",token) + .header("userid",encryptUserid) + // .header("skipsession", "1") + .form(params) + .execute().body(); + log.info("PostRestfulby():"+data); + return data; + } + + + /** + * 第二步: + * + * 通过第一步中注册系统返回信息进行获取token信息 + */ + public static Map NewGetoken(String address,ConfigVo configVo) throws IOException { + // 从系统缓存或者数据库中获取ECOLOGY系统公钥和Secret信息 + String secret = configVo.getParamVal(FVConstants.newSecret.name()); + String spk = configVo.getParamVal(FVConstants.newspk.name()); + + + // 公钥加密,所以RSA对象私钥为null + RSA rsa = new RSA(null,spk); + //对秘钥进行加密传输,防止篡改数据 + String encryptSecret = rsa.encryptBase64(secret, CharsetUtil.CHARSET_UTF_8, KeyType.PublicKey); + + //调用ECOLOGY系统接口进行注册 + String data = HttpRequest.post(address+ "/api/ec/dev/auth/applytoken") + .header("appid",configVo.getParamVal(FVConstants.appId.name())) + .header("secret",encryptSecret) + .header("time","3600") + .execute().body(); + + log.info("Getoken():"+data); + Map datas = JSONUtil.parseObj(data); + + //ECOLOGY返回的token + // TODO 为Token缓存设置过期时间 + SYSTEM_CACHE.put("SERVER_TOKEN",StrUtil.nullToEmpty((String)datas.get("token"))); + + return datas; + } + + /** + * 第三步:新增 + * + * 调用ecology系统的rest接口,请求头部带上token和用户标识认证信息 + * + * @param params 请求参数map,创建流程之类的post接口是以模拟form表单提交的方式,其他get接口以json字符串方式提交 + * + * 注意:ECOLOGY系统所有POST接口调用请求头请设置 "Content-Type","application/x-www-form-urlencoded; charset=utf-8" + */ + public static String NewPostRestful(Map params, String userid,ConfigVo configVo) throws IOException { + + //ECOLOGY返回的token +// String token = (String) Getoken(PropKit.getProp(PropKit.NEWADDRESS)).get("token"); + String token = (String) NewGetoken(configVo.getParamVal(FVConstants.newAddRess.name()),configVo).get("token"); + + + //封装请求头参数 + RSA rsa = new RSA(null, configVo.getParamVal(FVConstants.newspk.name())); + //对用户信息进行加密传输,暂仅支持传输OA用户ID + String encryptUserid = rsa.encryptBase64(userid,CharsetUtil.CHARSET_UTF_8,KeyType.PublicKey); + + //调用ECOLOGY系统接口 + String data = HttpRequest.post(configVo.getParamVal(FVConstants.newAddRess.name()) + configVo.getParamVal(FVConstants.tongyongApi.name())) + .header("appid",configVo.getParamVal(FVConstants.appId.name())) + .header("token",token) + .header("userid",encryptUserid) + .form(params) + .execute().body(); + log.info("PostRestfulby():"+data); + return data; + } + + /** + * 第三步:提交 + * + * 调用ecology系统的rest接口,请求头部带上token和用户标识认证信息 + * + * @param params 请求参数map,创建流程之类的post接口是以模拟form表单提交的方式,其他get接口以json字符串方式提交 + * + * 注意:ECOLOGY系统所有POST接口调用请求头请设置 "Content-Type","application/x-www-form-urlencoded; charset=utf-8" + */ + public static String NewPostSubmitRestful(Map params,ConfigVo configVo) throws IOException { + + //ECOLOGY返回的token + String token = (String) NewGetoken(configVo.getParamVal(FVConstants.newAddRess.name()),configVo).get("token"); + log.info(token); + + //封装请求头参数 + RSA rsa = new RSA(null, configVo.getParamVal(FVConstants.newspk.name())); + //对用户信息进行加密传输,暂仅支持传输OA用户ID + String encryptUserid = rsa.encryptBase64("1",CharsetUtil.CHARSET_UTF_8,KeyType.PublicKey); + + //调用ECOLOGY系统接口 + log.info(configVo.getParamVal(FVConstants.newAddRess.name())); + log.info(configVo.getParamVal(FVConstants.tongyonSubmitgApi.name())); + log.info(configVo.getParamVal(FVConstants.appId.name())); + log.info(encryptUserid); + String data = HttpRequest.post(configVo.getParamVal(FVConstants.newAddRess.name()) + configVo.getParamVal(FVConstants.tongyonSubmitgApi.name())) + .header("appid",configVo.getParamVal(FVConstants.appId.name())) + .header("token",token) + .header("userid",encryptUserid) + .form(params) + .execute().body(); + log.info("PostRestfulby():"+data); + return data; + } +} diff --git a/src/com/seeyon/apps/src_qyba/vo/FVResponse.java b/src/com/seeyon/apps/src_qyba/vo/FVResponse.java new file mode 100644 index 0000000..6a5ed97 --- /dev/null +++ b/src/com/seeyon/apps/src_qyba/vo/FVResponse.java @@ -0,0 +1,72 @@ +package com.seeyon.apps.src_qyba.vo; + +import com.alibaba.fastjson.JSONObject; + +/** + * 功能描述:
+ *
+ *
+ * 
+ * + * @Author: huangzhengguo + * @Date: 2024/03/04 + */ +public class FVResponse { + + private boolean success; + private int status; + private String msg; + private String data; + + + public FVResponse(JSONObject object) { + if(object.containsKey("Status")) { + this.status = object.getInteger("Status"); + } else { + this.status = object.getInteger("status"); + } + this.success = (1 == status); + if(object.containsKey("Msg")) { + this.msg = object.getString("Msg"); + } else { + this.msg = object.getString("msg"); + } + this.data = object.getString("Data"); + } + + public boolean isSuccess() { + return success; + } + + public FVResponse setSuccess(boolean success) { + this.success = success; + return this; + } + + public int getStatus() { + return status; + } + + public FVResponse setStatus(int status) { + this.status = status; + return this; + } + + public String getMsg() { + return msg; + } + + public FVResponse setMsg(String msg) { + this.msg = msg; + return this; + } + + public String getData() { + return data; + } + + public FVResponse setData(String data) { + this.data = data; + return this; + } +} diff --git a/src/com/seeyon/ctp/rest/resources/SaveAndUpdateMemberMainResource.java b/src/com/seeyon/ctp/rest/resources/SaveAndUpdateMemberMainResource.java new file mode 100644 index 0000000..de313f6 --- /dev/null +++ b/src/com/seeyon/ctp/rest/resources/SaveAndUpdateMemberMainResource.java @@ -0,0 +1,83 @@ +package com.seeyon.ctp.rest.resources; + +import cn.hutool.log.Log; +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.src_mainorganization.bo.ReceiveOrgMemberResponse; +import com.seeyon.apps.src_mainorganization.service.IReceiveOrgMemberService; +import com.seeyon.ctp.common.AppContext; + +import javax.ws.rs.Consumes; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Response; +import java.io.IOException; + + +/** + * @author huangzhengguo: + * @version 创建时间:2025年04月16日 + * 类说明 根据接收消息新增或者修改组织架构信息 + */ +@Path("/orgMember") +@Produces({"application/json", "application/xml"}) +public class SaveAndUpdateMemberMainResource extends BaseResource { + + private static final Log log = Log.get(SaveAndUpdateMemberMainResource.class); + + private IReceiveOrgMemberService receiveOrgMemberService; + + public IReceiveOrgMemberService getReceiveOrgMemberService() { + if (this.receiveOrgMemberService == null) { + this.receiveOrgMemberService = ((IReceiveOrgMemberService) AppContext.getBean("receiveOrgMemberService")); + } + return receiveOrgMemberService; + } + public void setReceiveOrgMemberService(IReceiveOrgMemberService receiveOrgMemberService) { + this.receiveOrgMemberService = receiveOrgMemberService; + } + + @POST + @Path("/saveMemberMain") + @Produces({"application/json"}) + @Consumes({"application/json"}) + public Response saveMemberMain(JSONObject params) throws IOException { + log.info("新建人员参数:"+params); + ReceiveOrgMemberResponse result = new ReceiveOrgMemberResponse(); + try{ +// 根据泛微流程ID获取泛微流程数据 + result = getReceiveOrgMemberService().saveMemberMain(params); + if(result.isSuccess()) { + return success(result.getData()); + }else { + return fail(result.getMsg()); + } + } catch (Exception e) { + e.printStackTrace(); + return fail(e.getMessage()); + } + } + + @POST + @Path("/updateMemberMain") + @Produces({"application/json"}) + @Consumes({"application/json"}) + public Response updateMemberMain(JSONObject params) throws IOException { + log.info("修改人员参数:"+params); + ReceiveOrgMemberResponse result = new ReceiveOrgMemberResponse(); + try{ +// 根据泛微流程ID获取泛微流程数据 + result = getReceiveOrgMemberService().updateMemberMain(params); + if(result.isSuccess()) { + return success(result.getData()); + }else { + return fail(result.getMsg()); + } + } catch (Exception e) { + e.printStackTrace(); + return fail(e.getMessage()); + } + } + + +} diff --git a/src/com/seeyon/ctp/rest/resources/TemporaryBeianSynchronizationResource.java b/src/com/seeyon/ctp/rest/resources/TemporaryBeianSynchronizationResource.java new file mode 100644 index 0000000..59630ba --- /dev/null +++ b/src/com/seeyon/ctp/rest/resources/TemporaryBeianSynchronizationResource.java @@ -0,0 +1,159 @@ +package com.seeyon.ctp.rest.resources; + + +import cn.hutool.log.Log; +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.collaboration.manager.ColManager; +import com.seeyon.apps.collaboration.po.ColSummary; +import com.seeyon.apps.doc.api.DocApi; +import com.seeyon.apps.doc.bo.DocResourceBO; +import com.seeyon.apps.src_qyba.dao.ISrcBeianDao; +import com.seeyon.apps.src_qyba.manage.impl.MultipleViewsPrintManagerImpl; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.common.ModuleType; +import com.seeyon.ctp.common.affair.manager.AffairManager; +import com.seeyon.ctp.common.content.ContentUtil; +import com.seeyon.ctp.common.content.comment.Comment; +import com.seeyon.ctp.common.content.comment.CommentManager; +import com.seeyon.ctp.common.po.affair.CtpAffair; +import com.seeyon.ctp.organization.bo.V3xOrgDepartment; +import com.seeyon.ctp.organization.bo.V3xOrgMember; +import com.seeyon.ctp.organization.bo.V3xOrgPost; +import com.seeyon.ctp.organization.manager.OrgManager; + +import javax.ws.rs.Consumes; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Response; +import java.text.SimpleDateFormat; +import java.util.*; + +/** + * @author huangzhengguo: + * @version 创建时间:2025年04月16日 + * 类说明 根据接收消息新增或者修改组织架构信息 + */ +@Path("/beian") +@Produces({"application/json", "application/xml"}) +public class TemporaryBeianSynchronizationResource extends BaseResource{ + + private static final Log log = Log.get(TemporaryBeianSynchronizationResource.class); + + private DocApi docApi; + public DocApi getDocApi() { + if (this.docApi == null) {this.docApi = ((DocApi) AppContext.getBean("docApi"));}return docApi; + } + public void setDocApi(DocApi docApi) { + this.docApi = docApi; + } + + private ISrcBeianDao srcBeianDao; + public ISrcBeianDao getSrcBeianDao() { + if (this.srcBeianDao == null) {this.srcBeianDao = ((ISrcBeianDao) AppContext.getBean("srcBeianDao"));}return srcBeianDao; + } + public void setSrcBeianDao(ISrcBeianDao srcBeianDao) { + this.srcBeianDao = srcBeianDao; + } + + private AffairManager affairManager; + public AffairManager getAffairManager() { + if (this.affairManager == null) {this.affairManager = ((AffairManager) AppContext.getBean("affairManager"));}return affairManager; + } + public void setAffairManager(AffairManager srcBeianDao) { + this.affairManager = affairManager; + } + + private ColManager colManager; + public ColManager getColManager() { + if (this.colManager == null) {this.colManager = ((ColManager) AppContext.getBean("colManager"));}return colManager; + } + public void setColManager(ColManager colManager) { + this.colManager = colManager; + } + + private MultipleViewsPrintManagerImpl multipleViewsPrintManager; + public MultipleViewsPrintManagerImpl getMultipleViewsPrintManager() { + if (this.multipleViewsPrintManager == null) {this.multipleViewsPrintManager = ((MultipleViewsPrintManagerImpl) AppContext.getBean("multipleViewsPrintManager"));}return multipleViewsPrintManager; + } + public void setMultipleViewsPrintManager( + MultipleViewsPrintManagerImpl multipleViewsPrintManager) { + multipleViewsPrintManager = multipleViewsPrintManager; + } + + private CommentManager ctpCommentManager; + public CommentManager getCommentManager() { + if (this.ctpCommentManager == null) {this.ctpCommentManager = ((CommentManager) AppContext.getBean("ctpCommentManager"));}return ctpCommentManager; +} + public void setCommentManager(CommentManager ctpCommentManager) { + this.ctpCommentManager = ctpCommentManager; + } + + private OrgManager orgManager; + public OrgManager getOrgManager() { + if (this.orgManager == null) {this.orgManager = ((OrgManager) AppContext.getBean("orgManager"));}return orgManager; + } + public void setOrgManager(OrgManager orgManager) { + this.orgManager = orgManager; + } + + @POST + @Path("/synchronizationbeian") + @Produces({"application/json"}) + @Consumes({"application/json"}) + public Response synchronizationbeian(JSONObject reqQarams){ + try{ +// 查询数据库,查询出来某个文件夹在的所有文档信息,遍历查询到的所有ID,调用方法查询出来本地文档中心对象 + String parentFrId = reqQarams.getString("parentFrId"); + List ids = getSrcBeianDao().getdocResources(parentFrId); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + List docResources = getDocApi().findDocResources(ids); + for (int i = 0 ; i params = new HashMap(); + params.put("formId", summary.getFormid()); + params.put("templeteId", summary.getTempleteId()); + params.put("affairId", ctpAffair.getId()); + params.put("rightId", rightId); + params.put("summaryId", colSummarId); +// 查询当前流程的审批信息,将审批信息保存和图片共同保存生成PDF文件 + List> approvalOpinions = new ArrayList<>(); + List ctpCommentAlls = getCommentManager().getCommentAllByModuleId(ModuleType.collaboration,colSummarId); ; + for(Comment comment: ctpCommentAlls){ + Map approvalOpinion = new HashMap<>(); + String content = comment.getContent(); + approvalOpinion.put("content",content); + Date createDate = comment.getCreateDate(); + approvalOpinion.put("createDate",sdf.format(createDate)); + long createId = comment.getCreateId(); + V3xOrgMember member = getOrgManager().getMemberById(createId); + approvalOpinion.put("memberName",member.getName()); + V3xOrgPost memberPost = getOrgManager().getPostById(member.getOrgPostId()); + approvalOpinion.put("memberPost",memberPost.getName()); + V3xOrgDepartment memberDept = getOrgManager().getDepartmentById(member.getOrgDepartmentId()); + approvalOpinion.put("memberDept",memberDept.getName()); + approvalOpinions.add(approvalOpinion); + } + Map result = getMultipleViewsPrintManager().print(params,approvalOpinions,ctpAffair.getSubject()); + + System.out.println(docResource.getId()); + } + return success("1"); + + } catch (Exception e) { + e.printStackTrace(); + return fail(e.getMessage()); + } + } + + +} diff --git a/src/needless_check_login.xml b/src/needless_check_login.xml new file mode 100644 index 0000000..97114bc --- /dev/null +++ b/src/needless_check_login.xml @@ -0,0 +1,322 @@ + + + + /qrCodeForm.do + + index + newMain + + + + /sc.do + + qr + + + + /elearning.do + + error + m3Redirect + message + pcRedirect + + + + /phoneLogin/phoneLogin.do + + getMessageCode + validateMessageCode + + + + /wechat/miniprogram.do + + a8home + bind + bindMemberPhone + login + unbind + + + + /portal/spaceController.do + + showThemSpace + + + + /identification.do + + getSessionId + + + + /fileUpload.do + + showRTE + + + + /fileDownload.do + + showRTE + + + + /form/formUpgrade.do + + toUpgrade + upgrade + viewUpgrade + + + + formtalkFormMapperController.do + + importFormtalkData + + + + /thirdpartyController.do + + access + index + logoutNotify + show + mailAuth + + + + /main.do + + changeLocale + hangup + headerjs + index + login + login4Ucpc + login4Ucpc3 + login4Vjoin + logout + logout4Session + logout4Vjoin + logout4ZX + main + login4QrCode + qrCodeHelp + updateLoginSeed + + + + /trustdo/A8/XRD.do + + getLoginAccount + getLoginAcctoken + webLogin + + + + /share.do + + index + + + + /genericController.do + + index + + + + /edoc/edocUpgradeControllor.do + + upgrade + download + + + + /uploadService.do + + processUploadService + + + + /autoinstall.do + + ieSetDown + regInstallDown + regInstallDown64 + downloadAssistant + + + + /personalBind.do + + getBindTypeByLoginName + isCanUse + retrievePassword + sendVerificationCodeToBindEmail + sendVerificationCodeToBindNum + validateVerificationCode + + + + + + + + + + + /commonimage.do + + showImage + + + + /individualManager.do + + resetPassword + + + + /wechat/dingding.do + + binding + index + main + newIndex + newMain + viewh5Message + + + + /uc/rest.do + + commonPierce + downloadImage + getBgTimeStamp + getLoginsecurityMsg + sendsms + smsrequired + testIp + isQrLogin + getDigitalCodeInfo + + + + portalManager + + sendSMSLoginCode + smsLoginEnabled + + + + loginUserManager + + getLockTime + + + + qrCodeLoginManager + + isLogin + + + + meetingAjaxManager + + meetingPanelData + meetingPanelDisplay + + + + /m3/loginController.do + + transLogin + transLogout + getProfile + + + + /m3/mClientBindController.do + + bindApply + + + + m3ProductManager + + productInfo + productStatus + + + + /m3/homeSkinController.do + + downloadImage + getSkinImageUrl + + + + /m3/transModeController.do + + getTransModeForMobile + + + + /media/media.do + + mediaShow + + + + /ocipEdoc.do + + index + + + + /colView.do + + index + + + + /caAccountManagerController.do + + findKeyNumByLoginName + + + + /fddCallbackController.do + + asynch + synch + + + + /seeyonReport/seeyonReportController.do + + redirectSeeyonReport + + + + /imc.do + + index + logout + + + + + /cloudbuild.do + + download + getDownloadPageInfo + getLatestVersionInfo + getDownloadQrUrl + + + \ No newline at end of file diff --git a/src/needless_check_login_recheck.xml b/src/needless_check_login_recheck.xml new file mode 100644 index 0000000..0e84aeb --- /dev/null +++ b/src/needless_check_login_recheck.xml @@ -0,0 +1,426 @@ + + + + + + /qrCodeForm.do + com.seeyon.apps.qrCodeForm.controller.QrCodeFormController + + index + newMain + + + + + /sc.do + com.seeyon.cap4.form.modules.smartCode.controller.SmartCodeController + + qr + + + + /media/media.do + com.seeyon.ctp.common.media.controller.MediaController + + mediaShow + + + + /phoneLogin/phoneLogin.do + com.seeyon.ctp.login.controller.PhoneLoginController + + getMessageCode + validateMessageCode + + + + portalManager + com.seeyon.ctp.portal.manager.PortalManagerImpl + + sendSMSLoginCode + smsLoginEnabled + + + + /fileDownload.do + com.seeyon.ctp.common.fileupload.FileUploadController + + showRTE + + + + loginUserManager + com.seeyon.ctp.login.LoginUserManagerImpl + + getLockTime + + + + /main.do + com.seeyon.ctp.login.controller.MainController + + changeLocale + hangup + headerjs + index + login + login4Ucpc + login4Ucpc3 + login4Vjoin + logout + logout4Session + logout4Vjoin + logout4ZX + main + login4QrCode + qrCodeHelp + updateLoginSeed + + + + /trustdo/A8/XRD.do + com.seeyon.apps.trustdo.controller.XRDController + + getLoginAccount + getLoginAcctoken + webLogin + + + + /share.do + com.seeyon.v3x.system.share.controller.ShareController + + index + + + + /edoc/edocUpgradeControllor.do + com.seeyon.v3x.edoc.controller.EdocUpgradeControllor + + upgrade + download + + + + /m3/mClientBindController.do + com.seeyon.apps.m3.bind.controller.M3ClientBindController + + bindApply + + + + /uploadService.do + com.seeyon.ctp.services.FileUploadService + + processUploadService + + + + /uc/rest.do + com.seeyon.apps.zx.controller.ZxRestController + + commonPierce + downloadImage + getBgTimeStamp + getLoginsecurityMsg + sendsms + smsrequired + testIp + isQrLogin + getDigitalCodeInfo + + + + /m3/homeSkinController.do + com.seeyon.apps.m3.skin.controller.M3HomeSkinController + + downloadImage + getSkinImageUrl + + + + /colView.do + com.seeyon.apps.ocip.exchange.collaboration.controller.CollViewController + + index + + + + /autoinstall.do + com.seeyon.apps.autoinstall.controller.AutoInstallController + + ieSetDown + regInstallDown + regInstallDown64 + downloadAssistant + + + + + + + + + + + + /caAccountManagerController.do + com.seeyon.v3x.ca.caaccount.controller.CAAccountManagerController + + findKeyNumByLoginName + + + + /elearning.do + com.seeyon.apps.elearning.controller.ElearningController + + error + m3Redirect + message + pcRedirect + + + + /wechat/miniprogram.do + com.seeyon.apps.weixin.controller.MiniProgramController + + a8home + bind + bindMemberPhone + login + unbind + + + + /portal/spaceController.do + com.seeyon.ctp.portal.space.controller.SpaceController + + showThemSpace + + + + /identification.do + com.seeyon.v3x.identification.controller.IdentificationController + + getSessionId + + + + /fddCallbackController.do + com.seeyon.apps.econtract.fdd.controller.FddCallbackController + + asynch + synch + + + + m3ProductManager + com.seeyon.apps.m3.product.manager.impl.M3ProductManagerImpl + + productInfo + productStatus + + + + /ocipEdoc.do + com.seeyon.apps.ocip.exchange.edoc.OCIPEdocController + + index + + + + /m3/loginController.do + + transLogin + transLogout + getProfile + + + + /fileUpload.do + com.seeyon.ctp.common.fileupload.FileUploadController + + showRTE + processUpload + + + + qrCodeLoginManager + com.seeyon.ctp.login.manager.QrCodeLoginManagerImpl + + isLogin + + + + /form/formUpgrade.do + com.seeyon.ctp.form.service.FormUpgradeController + + toUpgrade + upgrade + viewUpgrade + + + + /seeyonReport/seeyonReportController.do + com.seeyon.apps.seeyonreport.controller.SeeyonReportController + + redirectSeeyonReport + + + + formtalkFormMapperController.do + com.seeyon.apps.formtalk.controller.FormtalkImportController + + importFormtalkData + + + + /thirdpartyController.do + com.seeyon.ctp.portal.sso.thirdpartyintegration.controller.ThirdpartyController + + access + index + logoutNotify + show + mailAuth + + + + /m3/transModeController.do + com.seeyon.apps.m3.transmissionmode.controller.M3TransModeController + + getTransModeForMobile + + + + /genericController.do + com.seeyon.v3x.common.controller.GenericController + + index + + + + /personalBind.do + com.seeyon.v3x.personalaffair.controller.PersonalBindController + + getBindTypeByLoginName + isCanUse + retrievePassword + sendVerificationCodeToBindEmail + sendVerificationCodeToBindNum + validateVerificationCode + + + + /commonimage.do + com.seeyon.apps.common.image.controller.ImageController + + showImage + + + + /individualManager.do + com.seeyon.v3x.personalaffair.controller.IndividualManagerController + + resetPassword + + + + meetingAjaxManager + com.seeyon.apps.meeting.manager.MeetingAjaxManagerImpl + + meetingPanelData + meetingPanelDisplay + + + + /wechat/dingding.do + com.seeyon.apps.weixin.controller.DingDingController + + binding + index + main + newIndex + newMain + viewh5Message + + + + /imc.do + com.seeyon.apps.imc.controller.ImcLoginController + + index + logout + + + + /wechat/feishu.do + com.seeyon.apps.weixin.controller.FeishuController + + newMain + viewh5Message + + + + + + + + + + + + + + + /wechat/pcapp.do + com.seeyon.apps.weixin.controller.PcAppController + + transferPageFromWxCoreServer + gotoPcApp + checkCodeTurnToRightPage + transfer + transferMsg + + + + /wechat/feishu/approvalData.do + com.seeyon.apps.zhifei.feishu.approval.controller.ApprovalDataController + + index + + + + /zhifei/feishu.do + com.seeyon.apps.zhifei.controller.FeishuController + + newMain + viewh5Message + + + + /zhifei/pcapp.do + com.seeyon.apps.zhifei.controller.ZhifeiPcAppController + + transferPageFromWxCoreServer + gotoPcApp + + + + /zhifei/feishu/approvalData.do + com.seeyon.apps.zhifei.feishu.approval.controller.ApprovalDataController + + index + + + + /cloudbuild.do + com.seeyon.apps.cloudbuild.controller.CloudBuildController + + download + getDownloadPageInfo + getLatestVersionInfo + getDownloadQrUrl + + +