From f7371fbded0a3af766ef34c7995801fed5a5ca60 Mon Sep 17 00:00:00 2001 From: zcl <1850427625@qq.com> Date: Wed, 10 Aug 2022 16:16:36 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=A0=E9=99=A4=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- {easywecom-admin => easyink-admin}/pom.xml | 15 +- .../src/main/docker/Dockerfile | 0 .../src/main/docker/Shanghai | Bin .../com/easyink/EasyWeComApplication.java | 43 + .../easyink/EasyWeComServletInitializer.java | 16 + .../controller/common/CaptchaController.java | 89 + .../controller/common/CommonController.java | 186 + .../controller/common/ShortUrlController.java | 66 + .../controller/monitor/ServerController.java | 35 + .../monitor/SysLogininforController.java | 75 + .../monitor/SysOperlogController.java | 71 + .../monitor/SysUserOnlineController.java | 98 + .../order/OrderLoginController.java | 133 + .../order/OrderManagerController.java | 183 + .../controller/pro/WecomPlusController.java | 55 + .../system/SysConfigController.java | 111 + .../controller/system/SysDeptController.java | 115 + .../system/SysDictDataController.java | 94 + .../system/SysDictTypeController.java | 108 + .../controller/system/SysLoginController.java | 139 + .../controller/system/SysMenuController.java | 127 + .../system/SysNoticeController.java | 71 + .../controller/system/SysPostController.java | 100 + .../system/SysProfileController.java | 150 + .../controller/system/SysRoleController.java | 148 + .../controller/system/SysUserController.java | 256 ++ .../wechatopen/WechatOpenController.java | 55 + .../controller/wecom/PageHomeController.java | 54 + .../controller/wecom/We3rdAppController.java | 100 + .../controller/wecom/WeAdminController.java | 88 + .../web/controller/wecom/WeAppController.java | 50 + .../wecom/WeApplicationManagerController.java | 103 + .../wecom/WeCallBackController.java | 187 + .../wecom/WeCategoryController.java | 116 + .../wecom/WeChatCollectionController.java | 61 + .../wecom/WeChatContactMappingController.java | 125 + .../wecom/WeChatSideController.java | 114 + .../wecom/WeCommunityGroupSopController.java | 99 + .../wecom/WeCommunityH5Controller.java | 134 + .../WeCommunityKeywordGroupController.java | 84 + .../wecom/WeCommunityNewGroupController.java | 187 + .../WeCommunityPresTagGroupController.java | 149 + .../WeCommunityPresTagGroupV2Controller.java | 133 + .../WeConversationArchiveController.java | 89 + .../wecom/WeCorpAccountController.java | 142 + .../wecom/WeCustomerController.java | 255 ++ .../WeCustomerExtendPropertyController.java | 104 + .../WeCustomerMessagePushController.java | 170 + .../wecom/WeCustomerPortraitController.java | 232 ++ .../WeCustomerTransferRecordController.java | 88 + .../wecom/WeDepartmentController.java | 98 + .../wecom/WeEmpleCodeController.java | 196 + .../wecom/WeGroupCodeActualController.java | 92 + .../wecom/WeGroupCodeController.java | 202 + .../WeGroupCodeCorpActualController.java | 63 + .../controller/wecom/WeGroupController.java | 128 + .../wecom/WeGroupSopController.java | 173 + .../wecom/WeGroupTagController.java | 113 + .../wecom/WeMaterialConfigController.java | 49 + .../wecom/WeMaterialController.java | 225 ++ .../wecom/WeMessagePushController.java | 77 + .../controller/wecom/WeMomentController.java | 119 + .../controller/wecom/WeMsgTlpController.java | 148 + .../wecom/WePageDataController.java | 48 + .../WeResignedTransferRecordController.java | 83 + .../wecom/WeSensitiveActController.java | 145 + .../wecom/WeSensitiveController.java | 110 + .../wecom/WeTagGroupController.java | 147 + .../controller/wecom/WeTicketController.java | 83 + .../controller/wecom/WeUserController.java | 369 ++ .../wecom/WeWordsCategoryController.java | 101 + .../wecom/WeWordsGroupController.java | 154 + .../autotag/WeAutoTagRuleController.java | 197 + .../WeAutoTagRuleHitRecordController.java | 118 + .../wecom/radar/WeRadarChannelController.java | 85 + .../radar/WeRadarClickRecordController.java | 92 + .../wecom/radar/WeRadarController.java | 100 + .../WeRedeemCodeActivityController.java | 91 + .../redeemcode/WeRedeemCodeController.java | 114 + .../web/core/config/Knife4jConfig.java | 83 + .../web/core/config/ResponseAdvice.java | 32 + .../com/easywecom/EasyWeComApplication.java | 0 .../EasyWeComServletInitializer.java | 0 .../controller/common/CaptchaController.java | 0 .../controller/common/CommonController.java | 0 .../controller/common/ShortUrlController.java | 0 .../controller/monitor/ServerController.java | 0 .../monitor/SysLogininforController.java | 0 .../monitor/SysOperlogController.java | 0 .../monitor/SysUserOnlineController.java | 0 .../order/OrderLoginController.java | 0 .../order/OrderManagerController.java | 0 .../controller/pro/WecomPlusController.java | 0 .../system/SysConfigController.java | 0 .../controller/system/SysDeptController.java | 0 .../system/SysDictDataController.java | 0 .../system/SysDictTypeController.java | 0 .../controller/system/SysLoginController.java | 0 .../controller/system/SysMenuController.java | 0 .../system/SysNoticeController.java | 0 .../controller/system/SysPostController.java | 0 .../system/SysProfileController.java | 0 .../controller/system/SysRoleController.java | 0 .../controller/system/SysUserController.java | 0 .../wechatopen/WechatOpenController.java | 0 .../controller/wecom/PageHomeController.java | 0 .../controller/wecom/We3rdAppController.java | 0 .../controller/wecom/WeAdminController.java | 0 .../web/controller/wecom/WeAppController.java | 0 .../wecom/WeApplicationManagerController.java | 0 .../wecom/WeCallBackController.java | 0 .../wecom/WeCategoryController.java | 0 .../wecom/WeChatCollectionController.java | 0 .../wecom/WeChatContactMappingController.java | 0 .../wecom/WeChatSideController.java | 0 .../wecom/WeCommunityGroupSopController.java | 0 .../wecom/WeCommunityH5Controller.java | 0 .../WeCommunityKeywordGroupController.java | 0 .../wecom/WeCommunityNewGroupController.java | 0 .../WeCommunityPresTagGroupController.java | 0 .../WeCommunityPresTagGroupV2Controller.java | 0 .../WeConversationArchiveController.java | 0 .../wecom/WeCorpAccountController.java | 0 .../wecom/WeCustomerController.java | 0 .../WeCustomerExtendPropertyController.java | 0 .../WeCustomerMessagePushController.java | 0 .../wecom/WeCustomerPortraitController.java | 0 .../WeCustomerTransferRecordController.java | 0 .../wecom/WeDepartmentController.java | 0 .../wecom/WeEmpleCodeController.java | 0 .../wecom/WeGroupCodeActualController.java | 0 .../wecom/WeGroupCodeController.java | 0 .../WeGroupCodeCorpActualController.java | 0 .../controller/wecom/WeGroupController.java | 0 .../wecom/WeGroupSopController.java | 0 .../wecom/WeGroupTagController.java | 0 .../wecom/WeMaterialConfigController.java | 0 .../wecom/WeMaterialController.java | 0 .../wecom/WeMessagePushController.java | 0 .../controller/wecom/WeMomentController.java | 0 .../controller/wecom/WeMsgTlpController.java | 0 .../wecom/WePageDataController.java | 0 .../WeResignedTransferRecordController.java | 0 .../wecom/WeSensitiveActController.java | 0 .../wecom/WeSensitiveController.java | 0 .../wecom/WeTagGroupController.java | 0 .../controller/wecom/WeTicketController.java | 0 .../controller/wecom/WeUserController.java | 0 .../wecom/WeWordsCategoryController.java | 0 .../wecom/WeWordsGroupController.java | 0 .../autotag/WeAutoTagRuleController.java | 0 .../WeAutoTagRuleHitRecordController.java | 0 .../wecom/radar/WeRadarChannelController.java | 0 .../radar/WeRadarClickRecordController.java | 0 .../wecom/radar/WeRadarController.java | 0 .../WeRedeemCodeActivityController.java | 0 .../redeemcode/WeRedeemCodeController.java | 0 .../web/core/config/Knife4jConfig.java | 0 .../web/core/config/ResponseAdvice.java | 0 .../META-INF/spring-devtools.properties | 0 .../src/main/resources/application.yml | 6 +- .../src/main/resources/banner.txt | 0 .../main/resources/i18n/messages.properties | 0 .../main/resources/lib/WeWorkFinanceSdk.dll | Bin .../resources/lib/libWeWorkFinanceSdk_Java.so | Bin .../main/resources/lib/libcrypto-1_1-x64.dll | Bin .../src/main/resources/lib/libcurl-x64.dll | Bin .../src/main/resources/lib/libssl-1_1-x64.dll | Bin .../src/main/resources/logback-spring.xml | 0 .../main/resources/mybatis/mybatis-config.xml | 6 +- {easywecom-common => easyink-common}/pom.xml | 10 +- .../easyink/common/annotation/DataScope.java | 18 + .../easyink/common/annotation/DataSource.java | 23 + .../com/easyink/common/annotation/Excel.java | 132 + .../com/easyink/common/annotation/Excels.java | 17 + .../com/easyink/common/annotation/Log.java | 36 + .../common/annotation/RepeatSubmit.java | 16 + .../common/annotation/SysProperty.java | 27 + .../common/aop/CustomerTrajectoryAop.java | 32 + .../common/config/ChatRsaKeyConfig.java | 26 + .../com/easyink/common/config/CosConfig.java | 31 + .../common/config/ElasticSearchConfig.java | 101 + .../com/easyink/common/config/FileConfig.java | 20 + .../easyink/common/config/RuoYiConfig.java | 133 + .../easyink/common/config/ServerConfig.java | 32 + .../config/ThirdDefaultDomainConfig.java | 31 + .../easyink/common/config/WeComeConfig.java | 61 + .../com/easyink/common/config/WeCrypt.java | 41 + .../com/easyink/common/config/WeProvider.java | 78 + .../common/config/WechatOpenConfig.java | 71 + .../jackson/StringArrayDeserialize.java | 25 + .../easyink/common/constant/Constants.java | 266 ++ .../constant/ConversationConstants.java | 13 + .../easyink/common/constant/GenConstants.java | 235 ++ .../common/constant/GroupCodeConstants.java | 41 + .../common/constant/GroupConstants.java | 27 + .../common/constant/RedisKeyConstants.java | 32 + .../common/constant/ScheduleConstants.java | 56 + .../common/constant/UserConstants.java | 155 + .../easyink/common/constant/WeConstans.java | 886 +++++ .../common/constant/radar/RadarConstants.java | 108 + .../redeemcode/RedeemCodeConstants.java | 77 + .../com/easyink/common/core/MenuTree.java | 29 + .../core/controller/BaseController.java | 119 + .../common/core/domain/AjaxResult.java | 203 + .../common/core/domain/BaseEntity.java | 191 + .../core/domain/ConversationArchiveQuery.java | 79 + .../easyink/common/core/domain/FileVo.java | 16 + .../common/core/domain/PageEntity.java | 25 + .../common/core/domain/RootEntity.java | 36 + .../com/easyink/common/core/domain/Tree.java | 43 + .../common/core/domain/TreeEntity.java | 78 + .../common/core/domain/TreeSelect.java | 104 + .../core/domain/conversation/ChatBodyVO.java | 55 + .../core/domain/conversation/ChatInfoVO.java | 43 + .../domain/conversation/FinanceResVO.java | 40 + .../domain/conversation/msgtype/AgreeVO.java | 18 + .../msgtype/AttachmentBaseVO.java | 15 + .../conversation/msgtype/CalendarVO.java | 30 + .../domain/conversation/msgtype/CardVO.java | 21 + .../conversation/msgtype/ChatRecordVO.java | 26 + .../conversation/msgtype/CollectVO.java | 37 + .../conversation/msgtype/DisagreeVO.java | 17 + .../domain/conversation/msgtype/DocmsgVO.java | 21 + .../conversation/msgtype/EmotionVO.java | 21 + .../domain/conversation/msgtype/FileVO.java | 27 + .../domain/conversation/msgtype/ImageVO.java | 19 + .../domain/conversation/msgtype/LinkVO.java | 19 + .../conversation/msgtype/LocationVO.java | 21 + .../conversation/msgtype/MarkdownVO.java | 21 + .../conversation/msgtype/MeetingVO.java | 38 + .../msgtype/MeetingVoiceCallVO.java | 46 + .../domain/conversation/msgtype/MixedVO.java | 25 + .../conversation/msgtype/MsgTypeEnum.java | 60 + .../domain/conversation/msgtype/NewsVO.java | 37 + .../conversation/msgtype/RedpacketVO.java | 21 + .../domain/conversation/msgtype/RevokeVO.java | 18 + .../conversation/msgtype/SphFeedVO.java | 23 + .../domain/conversation/msgtype/TextVO.java | 14 + .../domain/conversation/msgtype/TodoVO.java | 20 + .../domain/conversation/msgtype/VideoVO.java | 22 + .../domain/conversation/msgtype/VoiceVO.java | 21 + .../conversation/msgtype/VoipDocShareVO.java | 18 + .../domain/conversation/msgtype/VoteVO.java | 23 + .../domain/conversation/msgtype/WeappVO.java | 21 + .../domain/elastic/ElasticSearchDataVo.java | 25 + .../domain/elastic/ElasticSearchEntity.java | 27 + .../domain/elastic/ElasticSearchQueryVo.java | 30 + .../common/core/domain/entity/SysDept.java | 70 + .../core/domain/entity/SysDictData.java | 69 + .../core/domain/entity/SysDictType.java | 91 + .../common/core/domain/entity/SysMenu.java | 209 + .../common/core/domain/entity/SysRole.java | 281 ++ .../common/core/domain/entity/SysUser.java | 414 ++ .../core/domain/entity/WeCorpAccount.java | 142 + .../common/core/domain/model/LoginBody.java | 32 + .../common/core/domain/model/LoginResult.java | 37 + .../common/core/domain/model/LoginUser.java | 397 ++ .../common/core/domain/model/LoginUserVO.java | 63 + .../common/core/domain/system/MetaVo.java | 42 + .../common/core/domain/system/RouterVo.java | 117 + .../common/core/domain/system/SysConfig.java | 104 + .../core/domain/system/SysLogininfor.java | 152 + .../common/core/domain/system/SysNotice.java | 93 + .../common/core/domain/system/SysOperLog.java | 235 ++ .../common/core/domain/system/SysPost.java | 132 + .../core/domain/system/SysRoleDept.java | 72 + .../core/domain/system/SysRoleMenu.java | 45 + .../core/domain/system/SysUserOnline.java | 124 + .../core/domain/system/SysUserPost.java | 45 + .../core/domain/system/SysUserRole.java | 45 + .../domain/wecom/BaseExtendPropertyRel.java | 28 + .../core/domain/wecom/WeDepartment.java | 72 + .../common/core/domain/wecom/WeUser.java | 230 ++ .../core/elasticsearch/ElasticSearch.java | 545 +++ .../easyink/common/core/page/PageDomain.java | 69 + .../common/core/page/TableDataInfo.java | 77 + .../common/core/page/TableSupport.java | 58 + .../easyink/common/core/redis/RedisCache.java | 221 ++ .../easyink/common/core/text/CharsetKit.java | 93 + .../com/easyink/common/core/text/Convert.java | 850 ++++ .../common/core/text/StrFormatter.java | 76 + .../com/easyink/common/enums/AddWayEnum.java | 36 + .../com/easyink/common/enums/AppIdEnum.java | 45 + .../common/enums/AttachmentTypeEnum.java | 121 + .../easyink/common/enums/BaseStatusEnum.java | 35 + .../enums/BatchUpdateUserInfoTypeEnum.java | 25 + .../easyink/common/enums/BusinessStatus.java | 18 + .../easyink/common/enums/BusinessType.java | 58 + .../easyink/common/enums/CallSourceEnum.java | 26 + .../enums/CallbackEventUpdateDetail.java | 27 + .../com/easyink/common/enums/ChatType.java | 37 + .../common/enums/CommunityTaskType.java | 33 + .../enums/CustomerExtendPropertyEnum.java | 99 + .../common/enums/CustomerStatusEnum.java | 51 + .../common/enums/CustomerTrajectoryEnums.java | 265 ++ .../enums/CustomerTransferStatusEnum.java | 88 + .../easyink/common/enums/DataScopeEnum.java | 52 + .../easyink/common/enums/DataSourceType.java | 18 + .../common/enums/EmployCodeSourceEnum.java | 28 + .../easyink/common/enums/ExpressNameEnum.java | 82 + .../enums/ExternalGroupMemberTypeEnum.java | 25 + .../common/enums/GroupMessageType.java | 107 + .../com/easyink/common/enums/HttpMethod.java | 32 + .../easyink/common/enums/LoginTypeEnum.java | 53 + .../common/enums/LogoutReasonEnum.java | 55 + .../com/easyink/common/enums/MediaType.java | 47 + .../common/enums/MessageStatusEnum.java | 56 + .../com/easyink/common/enums/MessageType.java | 84 + .../easyink/common/enums/OperatorType.java | 23 + .../enums/PresTagGroupTaskSendScopeEnum.java | 27 + .../com/easyink/common/enums/PushType.java | 32 + .../com/easyink/common/enums/ResultTip.java | 243 ++ .../easyink/common/enums/RoleTypeEnum.java | 32 + .../common/enums/StaffActivateEnum.java | 46 + .../common/enums/TransferFailReason.java | 55 + .../com/easyink/common/enums/UserStatus.java | 26 + .../common/enums/WeCategoryMediaTypeEnum.java | 54 + .../enums/WeEmpleCodeAnalyseTypeEnum.java | 26 + .../easyink/common/enums/WeEmpleCodeType.java | 29 + .../enums/WeEmployCodeRemarkTypeEnum.java | 26 + .../enums/WeEmployCodeSkipVerifyEnum.java | 53 + .../easyink/common/enums/WeExceptionTip.java | 641 +++ .../common/enums/WeOperationsCenterSop.java | 187 + .../common/enums/WeSensitiveActEnum.java | 48 + .../common/enums/WeTempMaterialEnum.java | 24 + .../common/enums/WeWordsCategoryTypeEnum.java | 25 + .../common/enums/WelcomeMsgRuleTypeEnum.java | 22 + .../common/enums/WelcomeMsgTplTypeEnum.java | 57 + .../autotag/AutoTagCustomerSceneType.java | 73 + .../enums/autotag/AutoTagLabelTypeEnum.java | 36 + .../enums/autotag/AutoTagMatchTypeEnum.java | 51 + .../common/enums/code/GroupCodeTypeEnum.java | 62 + .../common/enums/code/WelcomeMsgTypeEnum.java | 40 + .../enums/customer/CustomerTypeEnum.java | 27 + .../enums/moment/MomentPublishStatusEnum.java | 38 + .../enums/moment/MomentPushRangeEnum.java | 31 + .../enums/moment/MomentSelectUserEnum.java | 32 + .../common/enums/moment/MomentStatusEnum.java | 45 + .../enums/moment/MomentTaskTypeEnum.java | 32 + .../common/enums/moment/MomentTypeEnum.java | 32 + .../common/enums/radar/RadarChannelEnum.java | 55 + .../common/enums/radar/RadarTypeEnum.java | 46 + .../redeemcode/RedeemCodeStatusEnum.java | 34 + .../common/enums/wecom/ServerTypeEnum.java | 25 + .../common/exception/BaseException.java | 84 + .../CallBackNullPointerException.java | 9 + .../common/exception/CustomException.java | 72 + .../common/exception/file/FileException.java | 17 + .../FileNameLengthLimitExceededException.java | 14 + .../file/FileSizeLimitExceededException.java | 14 + .../file/InvalidExtensionException.java | 61 + .../common/exception/job/TaskException.java | 29 + .../exception/user/CaptchaException.java | 14 + .../user/CaptchaExpireException.java | 14 + .../exception/user/NoLoginTokenException.java | 15 + .../exception/user/QrCodeLoginException.java | 19 + .../common/exception/user/UserException.java | 16 + .../exception/user/UserNoCorpException.java | 16 + .../user/UserPasswordNotMatchException.java | 14 + .../exception/wecom/WeComException.java | 41 + .../common/filter/RepeatableFilter.java | 40 + .../filter/RepeatedlyRequestWrapper.java | 65 + .../com/easyink/common/filter/XssFilter.java | 80 + .../filter/XssHttpServletRequestWrapper.java | 93 + .../com/easyink/common/lock/LockUtil.java | 100 + .../java/com/easyink/common/lock/Locker.java | 70 + .../easyink/common/lock/RedisLockConfig.java | 63 + .../easyink/common/lock/RedissonLocker.java | 69 + .../easyink/common/manager/AsyncManager.java | 53 + .../common/manager/ShutdownManager.java | 38 + .../common/manager/factory/AsyncFactory.java | 101 + .../common/mapper/SysConfigMapper.java | 71 + .../easyink/common/mapper/SysDeptMapper.java | 121 + .../common/mapper/SysDictDataMapper.java | 98 + .../common/mapper/SysDictTypeMapper.java | 86 + .../common/mapper/SysLogininforMapper.java | 47 + .../easyink/common/mapper/SysMenuMapper.java | 130 + .../common/mapper/SysOperLogMapper.java | 53 + .../common/mapper/SysRoleDeptMapper.java | 75 + .../easyink/common/mapper/SysRoleMapper.java | 117 + .../common/mapper/SysRoleMenuMapper.java | 40 + .../mapper/SysShortUrlMappingMapper.java | 18 + .../easyink/common/mapper/SysUserMapper.java | 114 + .../common/mapper/SysUserRoleMapper.java | 20 + .../common/service/ISysConfigService.java | 73 + .../common/service/ISysDeptService.java | 134 + .../common/service/ISysDictDataService.java | 53 + .../common/service/ISysDictTypeService.java | 81 + .../common/service/ISysLogininforService.java | 43 + .../common/service/ISysMenuService.java | 166 + .../common/service/ISysOperLogService.java | 43 + .../common/service/ISysRoleService.java | 136 + .../common/service/ISysUserOnlineService.java | 47 + .../common/service/ISysUserService.java | 152 + .../service/impl/SysConfigServiceImpl.java | 171 + .../service/impl/SysDeptServiceImpl.java | 331 ++ .../service/impl/SysDictDataServiceImpl.java | 89 + .../service/impl/SysDictTypeServiceImpl.java | 175 + .../impl/SysLogininforServiceImpl.java | 64 + .../service/impl/SysMenuServiceImpl.java | 546 +++ .../service/impl/SysOperLogServiceImpl.java | 63 + .../service/impl/SysRoleServiceImpl.java | 369 ++ .../impl/SysUserOnlineServiceImpl.java | 86 + .../service/impl/SysUserServiceImpl.java | 330 ++ .../common/shorturl/ShortUrlAppendInfo.java | 42 + .../common/shorturl/SysShortUrlMapping.java | 75 + .../shorturl/service/ShortUrlAdaptor.java | 93 + .../shorturl/service/ShortUrlService.java | 30 + .../service/impl/ShortUrlServiceImpl.java | 137 + .../common/token/SysPermissionService.java | 171 + .../easyink/common/token/TokenService.java | 289 ++ .../java/com/easyink/common/utils/Arith.java | 113 + .../easyink/common/utils/ConvertUrlUtil.java | 71 + .../com/easyink/common/utils/DateUtils.java | 568 +++ .../com/easyink/common/utils/DictUtils.java | 151 + .../easyink/common/utils/ExceptionUtil.java | 36 + .../com/easyink/common/utils/LogUtils.java | 15 + .../easyink/common/utils/MessageUtils.java | 24 + .../com/easyink/common/utils/MyDateUtil.java | 47 + .../com/easyink/common/utils/OsUtils.java | 13 + .../com/easyink/common/utils/QREncode.java | 188 + .../com/easyink/common/utils/ReflectUtil.java | 125 + .../easyink/common/utils/SecurityUtils.java | 53 + .../easyink/common/utils/ServletUtils.java | 126 + .../easyink/common/utils/SnowFlakeUtil.java | 21 + .../com/easyink/common/utils/StringUtils.java | 459 +++ .../com/easyink/common/utils/Threads.java | 93 + .../com/easyink/common/utils/TreeUtil.java | 53 + .../com/easyink/common/utils/XmlUtil.java | 76 + .../easyink/common/utils/bean/BeanUtils.java | 259 ++ .../common/utils/file/FileUploadUtils.java | 415 ++ .../easyink/common/utils/file/FileUtils.java | 275 ++ .../common/utils/file/MimeTypeUtils.java | 60 + .../easyink/common/utils/html/EscapeUtil.java | 128 + .../easyink/common/utils/html/HTMLFilter.java | 498 +++ .../easyink/common/utils/http/HttpHelper.java | 47 + .../easyink/common/utils/http/HttpUtils.java | 211 + .../easyink/common/utils/ip/AddressUtils.java | 49 + .../com/easyink/common/utils/ip/IpUtils.java | 201 + .../easyink/common/utils/poi/ExcelUtil.java | 981 +++++ .../common/utils/reflect/ReflectUtils.java | 323 ++ .../com/easyink/common/utils/sign/Base64.java | 274 ++ .../easyink/common/utils/sign/Md5Utils.java | 55 + .../common/utils/spring/SpringUtils.java | 130 + .../common/utils/sql/BatchInsertUtil.java | 59 + .../utils/sql/IBatchInsertExecutor.java | 18 + .../com/easyink/common/utils/sql/SqlUtil.java | 33 + .../easyink/common/utils/uuid/IdUtils.java | 44 + .../com/easyink/common/utils/uuid/UUID.java | 453 +++ .../easyink/common/utils/wecom/ByteGroup.java | 26 + .../common/utils/wecom/PKCS7Encoder.java | 65 + .../easyink/common/utils/wecom/RsaUtil.java | 90 + .../com/easyink/common/utils/wecom/SHA1.java | 88 + .../common/utils/wecom/TicketUtils.java | 34 + .../common/utils/wecom/WxCryptUtil.java | 174 + .../common/annotation/DataScope.java | 0 .../common/annotation/DataSource.java | 0 .../easywecom/common/annotation/Excel.java | 0 .../easywecom/common/annotation/Excels.java | 0 .../com/easywecom/common/annotation/Log.java | 0 .../common/annotation/RepeatSubmit.java | 0 .../common/annotation/SysProperty.java | 0 .../common/aop/CustomerTrajectoryAop.java | 0 .../common/config/ChatRsaKeyConfig.java | 0 .../easywecom/common/config/CosConfig.java | 0 .../common/config/ElasticSearchConfig.java | 0 .../easywecom/common/config/FileConfig.java | 0 .../easywecom/common/config/RuoYiConfig.java | 0 .../easywecom/common/config/ServerConfig.java | 0 .../config/ThirdDefaultDomainConfig.java | 0 .../easywecom/common/config/WeComeConfig.java | 0 .../com/easywecom/common/config/WeCrypt.java | 0 .../easywecom/common/config/WeProvider.java | 0 .../common/config/WechatOpenConfig.java | 0 .../jackson/StringArrayDeserialize.java | 0 .../easywecom/common/constant/Constants.java | 0 .../constant/ConversationConstants.java | 0 .../common/constant/GenConstants.java | 0 .../common/constant/GroupCodeConstants.java | 0 .../common/constant/GroupConstants.java | 0 .../common/constant/RedisKeyConstants.java | 0 .../common/constant/ScheduleConstants.java | 0 .../common/constant/UserConstants.java | 0 .../easywecom/common/constant/WeConstans.java | 0 .../common/constant/radar/RadarConstants.java | 0 .../redeemcode/RedeemCodeConstants.java | 0 .../com/easywecom/common/core/MenuTree.java | 0 .../core/controller/BaseController.java | 0 .../common/core/domain/AjaxResult.java | 0 .../common/core/domain/BaseEntity.java | 0 .../core/domain/ConversationArchiveQuery.java | 0 .../easywecom/common/core/domain/FileVo.java | 0 .../common/core/domain/PageEntity.java | 0 .../common/core/domain/RootEntity.java | 0 .../easywecom/common/core/domain/Tree.java | 0 .../common/core/domain/TreeEntity.java | 0 .../common/core/domain/TreeSelect.java | 0 .../core/domain/conversation/ChatBodyVO.java | 0 .../core/domain/conversation/ChatInfoVO.java | 0 .../domain/conversation/FinanceResVO.java | 0 .../domain/conversation/msgtype/AgreeVO.java | 0 .../msgtype/AttachmentBaseVO.java | 0 .../conversation/msgtype/CalendarVO.java | 0 .../domain/conversation/msgtype/CardVO.java | 0 .../conversation/msgtype/ChatRecordVO.java | 0 .../conversation/msgtype/CollectVO.java | 0 .../conversation/msgtype/DisagreeVO.java | 0 .../domain/conversation/msgtype/DocmsgVO.java | 0 .../conversation/msgtype/EmotionVO.java | 0 .../domain/conversation/msgtype/FileVO.java | 0 .../domain/conversation/msgtype/ImageVO.java | 0 .../domain/conversation/msgtype/LinkVO.java | 0 .../conversation/msgtype/LocationVO.java | 0 .../conversation/msgtype/MarkdownVO.java | 0 .../conversation/msgtype/MeetingVO.java | 0 .../msgtype/MeetingVoiceCallVO.java | 0 .../domain/conversation/msgtype/MixedVO.java | 0 .../conversation/msgtype/MsgTypeEnum.java | 0 .../domain/conversation/msgtype/NewsVO.java | 0 .../conversation/msgtype/RedpacketVO.java | 0 .../domain/conversation/msgtype/RevokeVO.java | 0 .../conversation/msgtype/SphFeedVO.java | 0 .../domain/conversation/msgtype/TextVO.java | 0 .../domain/conversation/msgtype/TodoVO.java | 0 .../domain/conversation/msgtype/VideoVO.java | 0 .../domain/conversation/msgtype/VoiceVO.java | 0 .../conversation/msgtype/VoipDocShareVO.java | 0 .../domain/conversation/msgtype/VoteVO.java | 0 .../domain/conversation/msgtype/WeappVO.java | 0 .../domain/elastic/ElasticSearchDataVo.java | 0 .../domain/elastic/ElasticSearchEntity.java | 0 .../domain/elastic/ElasticSearchQueryVo.java | 0 .../common/core/domain/entity/SysDept.java | 0 .../core/domain/entity/SysDictData.java | 0 .../core/domain/entity/SysDictType.java | 0 .../common/core/domain/entity/SysMenu.java | 0 .../common/core/domain/entity/SysRole.java | 0 .../common/core/domain/entity/SysUser.java | 0 .../core/domain/entity/WeCorpAccount.java | 0 .../common/core/domain/model/LoginBody.java | 0 .../common/core/domain/model/LoginResult.java | 0 .../common/core/domain/model/LoginUser.java | 0 .../common/core/domain/model/LoginUserVO.java | 0 .../common/core/domain/system/MetaVo.java | 0 .../common/core/domain/system/RouterVo.java | 0 .../common/core/domain/system/SysConfig.java | 0 .../core/domain/system/SysLogininfor.java | 0 .../common/core/domain/system/SysNotice.java | 0 .../common/core/domain/system/SysOperLog.java | 0 .../common/core/domain/system/SysPost.java | 0 .../core/domain/system/SysRoleDept.java | 0 .../core/domain/system/SysRoleMenu.java | 0 .../core/domain/system/SysUserOnline.java | 0 .../core/domain/system/SysUserPost.java | 0 .../core/domain/system/SysUserRole.java | 0 .../domain/wecom/BaseExtendPropertyRel.java | 0 .../core/domain/wecom/WeDepartment.java | 0 .../common/core/domain/wecom/WeUser.java | 0 .../core/elasticsearch/ElasticSearch.java | 0 .../common/core/page/PageDomain.java | 0 .../common/core/page/TableDataInfo.java | 0 .../common/core/page/TableSupport.java | 0 .../common/core/redis/RedisCache.java | 0 .../common/core/text/CharsetKit.java | 0 .../easywecom/common/core/text/Convert.java | 0 .../common/core/text/StrFormatter.java | 0 .../easywecom/common/enums/AddWayEnum.java | 0 .../com/easywecom/common/enums/AppIdEnum.java | 0 .../common/enums/AttachmentTypeEnum.java | 0 .../common/enums/BaseStatusEnum.java | 0 .../enums/BatchUpdateUserInfoTypeEnum.java | 0 .../common/enums/BusinessStatus.java | 0 .../easywecom/common/enums/BusinessType.java | 0 .../common/enums/CallSourceEnum.java | 0 .../enums/CallbackEventUpdateDetail.java | 0 .../com/easywecom/common/enums/ChatType.java | 0 .../common/enums/CommunityTaskType.java | 0 .../enums/CustomerExtendPropertyEnum.java | 0 .../common/enums/CustomerStatusEnum.java | 0 .../common/enums/CustomerTrajectoryEnums.java | 0 .../enums/CustomerTransferStatusEnum.java | 0 .../easywecom/common/enums/DataScopeEnum.java | 0 .../common/enums/DataSourceType.java | 0 .../common/enums/EmployCodeSourceEnum.java | 0 .../common/enums/ExpressNameEnum.java | 0 .../enums/ExternalGroupMemberTypeEnum.java | 0 .../common/enums/GroupMessageType.java | 0 .../easywecom/common/enums/HttpMethod.java | 0 .../easywecom/common/enums/LoginTypeEnum.java | 0 .../common/enums/LogoutReasonEnum.java | 0 .../com/easywecom/common/enums/MediaType.java | 0 .../common/enums/MessageStatusEnum.java | 0 .../easywecom/common/enums/MessageType.java | 0 .../easywecom/common/enums/OperatorType.java | 0 .../enums/PresTagGroupTaskSendScopeEnum.java | 0 .../com/easywecom/common/enums/PushType.java | 0 .../com/easywecom/common/enums/ResultTip.java | 0 .../easywecom/common/enums/RoleTypeEnum.java | 0 .../common/enums/StaffActivateEnum.java | 0 .../common/enums/TransferFailReason.java | 0 .../easywecom/common/enums/UserStatus.java | 0 .../common/enums/WeCategoryMediaTypeEnum.java | 0 .../enums/WeEmpleCodeAnalyseTypeEnum.java | 0 .../common/enums/WeEmpleCodeType.java | 0 .../enums/WeEmployCodeRemarkTypeEnum.java | 0 .../enums/WeEmployCodeSkipVerifyEnum.java | 0 .../common/enums/WeExceptionTip.java | 0 .../common/enums/WeOperationsCenterSop.java | 0 .../common/enums/WeSensitiveActEnum.java | 0 .../common/enums/WeTempMaterialEnum.java | 0 .../common/enums/WeWordsCategoryTypeEnum.java | 0 .../common/enums/WelcomeMsgRuleTypeEnum.java | 0 .../common/enums/WelcomeMsgTplTypeEnum.java | 0 .../autotag/AutoTagCustomerSceneType.java | 0 .../enums/autotag/AutoTagLabelTypeEnum.java | 0 .../enums/autotag/AutoTagMatchTypeEnum.java | 0 .../common/enums/code/GroupCodeTypeEnum.java | 0 .../common/enums/code/WelcomeMsgTypeEnum.java | 0 .../enums/customer/CustomerTypeEnum.java | 0 .../enums/moment/MomentPublishStatusEnum.java | 0 .../enums/moment/MomentPushRangeEnum.java | 0 .../enums/moment/MomentSelectUserEnum.java | 0 .../common/enums/moment/MomentStatusEnum.java | 0 .../enums/moment/MomentTaskTypeEnum.java | 0 .../common/enums/moment/MomentTypeEnum.java | 0 .../common/enums/radar/RadarChannelEnum.java | 0 .../common/enums/radar/RadarTypeEnum.java | 0 .../redeemcode/RedeemCodeStatusEnum.java | 0 .../common/enums/wecom/ServerTypeEnum.java | 0 .../common/exception/BaseException.java | 0 .../CallBackNullPointerException.java | 0 .../common/exception/CustomException.java | 0 .../common/exception/file/FileException.java | 0 .../FileNameLengthLimitExceededException.java | 0 .../file/FileSizeLimitExceededException.java | 0 .../file/InvalidExtensionException.java | 0 .../common/exception/job/TaskException.java | 0 .../exception/user/CaptchaException.java | 0 .../user/CaptchaExpireException.java | 0 .../exception/user/NoLoginTokenException.java | 0 .../exception/user/QrCodeLoginException.java | 0 .../common/exception/user/UserException.java | 0 .../exception/user/UserNoCorpException.java | 0 .../user/UserPasswordNotMatchException.java | 0 .../exception/wecom/WeComException.java | 0 .../common/filter/RepeatableFilter.java | 0 .../filter/RepeatedlyRequestWrapper.java | 0 .../easywecom/common/filter/XssFilter.java | 0 .../filter/XssHttpServletRequestWrapper.java | 0 .../com/easywecom/common/lock/LockUtil.java | 0 .../com/easywecom/common/lock/Locker.java | 0 .../common/lock/RedisLockConfig.java | 0 .../easywecom/common/lock/RedissonLocker.java | 0 .../common/manager/AsyncManager.java | 0 .../common/manager/ShutdownManager.java | 0 .../common/manager/factory/AsyncFactory.java | 0 .../common/mapper/SysConfigMapper.java | 0 .../common/mapper/SysDeptMapper.java | 0 .../common/mapper/SysDictDataMapper.java | 0 .../common/mapper/SysDictTypeMapper.java | 0 .../common/mapper/SysLogininforMapper.java | 0 .../common/mapper/SysMenuMapper.java | 0 .../common/mapper/SysOperLogMapper.java | 0 .../common/mapper/SysRoleDeptMapper.java | 0 .../common/mapper/SysRoleMapper.java | 0 .../common/mapper/SysRoleMenuMapper.java | 0 .../mapper/SysShortUrlMappingMapper.java | 0 .../common/mapper/SysUserMapper.java | 0 .../common/mapper/SysUserRoleMapper.java | 0 .../common/service/ISysConfigService.java | 0 .../common/service/ISysDeptService.java | 0 .../common/service/ISysDictDataService.java | 0 .../common/service/ISysDictTypeService.java | 0 .../common/service/ISysLogininforService.java | 0 .../common/service/ISysMenuService.java | 0 .../common/service/ISysOperLogService.java | 0 .../common/service/ISysRoleService.java | 0 .../common/service/ISysUserOnlineService.java | 0 .../common/service/ISysUserService.java | 0 .../service/impl/SysConfigServiceImpl.java | 0 .../service/impl/SysDeptServiceImpl.java | 0 .../service/impl/SysDictDataServiceImpl.java | 0 .../service/impl/SysDictTypeServiceImpl.java | 0 .../impl/SysLogininforServiceImpl.java | 0 .../service/impl/SysMenuServiceImpl.java | 0 .../service/impl/SysOperLogServiceImpl.java | 0 .../service/impl/SysRoleServiceImpl.java | 0 .../impl/SysUserOnlineServiceImpl.java | 0 .../service/impl/SysUserServiceImpl.java | 0 .../common/shorturl/ShortUrlAppendInfo.java | 0 .../common/shorturl/SysShortUrlMapping.java | 0 .../shorturl/service/ShortUrlAdaptor.java | 0 .../shorturl/service/ShortUrlService.java | 0 .../service/impl/ShortUrlServiceImpl.java | 0 .../common/token/SysPermissionService.java | 0 .../easywecom/common/token/TokenService.java | 0 .../com/easywecom/common/utils/Arith.java | 0 .../common/utils/ConvertUrlUtil.java | 0 .../com/easywecom/common/utils/DateUtils.java | 0 .../com/easywecom/common/utils/DictUtils.java | 0 .../easywecom/common/utils/ExceptionUtil.java | 0 .../com/easywecom/common/utils/LogUtils.java | 0 .../easywecom/common/utils/MessageUtils.java | 0 .../easywecom/common/utils/MyDateUtil.java | 0 .../com/easywecom/common/utils/OsUtils.java | 0 .../com/easywecom/common/utils/QREncode.java | 0 .../easywecom/common/utils/ReflectUtil.java | 0 .../easywecom/common/utils/SecurityUtils.java | 0 .../easywecom/common/utils/ServletUtils.java | 0 .../easywecom/common/utils/SnowFlakeUtil.java | 0 .../easywecom/common/utils/StringUtils.java | 0 .../com/easywecom/common/utils/Threads.java | 0 .../com/easywecom/common/utils/TreeUtil.java | 0 .../com/easywecom/common/utils/XmlUtil.java | 0 .../common/utils/bean/BeanUtils.java | 0 .../common/utils/file/FileUploadUtils.java | 0 .../common/utils/file/FileUtils.java | 0 .../common/utils/file/MimeTypeUtils.java | 0 .../common/utils/html/EscapeUtil.java | 0 .../common/utils/html/HTMLFilter.java | 0 .../common/utils/http/HttpHelper.java | 0 .../common/utils/http/HttpUtils.java | 0 .../common/utils/ip/AddressUtils.java | 0 .../easywecom/common/utils/ip/IpUtils.java | 0 .../easywecom/common/utils/poi/ExcelUtil.java | 0 .../common/utils/reflect/ReflectUtils.java | 0 .../easywecom/common/utils/sign/Base64.java | 0 .../easywecom/common/utils/sign/Md5Utils.java | 0 .../common/utils/spring/SpringUtils.java | 0 .../common/utils/sql/BatchInsertUtil.java | 0 .../utils/sql/IBatchInsertExecutor.java | 0 .../easywecom/common/utils/sql/SqlUtil.java | 0 .../easywecom/common/utils/uuid/IdUtils.java | 0 .../com/easywecom/common/utils/uuid/UUID.java | 0 .../common/utils/wecom/ByteGroup.java | 0 .../common/utils/wecom/PKCS7Encoder.java | 0 .../easywecom/common/utils/wecom/RsaUtil.java | 0 .../easywecom/common/utils/wecom/SHA1.java | 0 .../common/utils/wecom/TicketUtils.java | 0 .../common/utils/wecom/WxCryptUtil.java | 0 .../mapper/system/SysConfigMapper.xml | 2 +- .../resources/mapper/system/SysDeptMapper.xml | 4 +- .../mapper/system/SysDictDataMapper.xml | 2 +- .../mapper/system/SysDictTypeMapper.xml | 2 +- .../mapper/system/SysLogininforMapper.xml | 2 +- .../resources/mapper/system/SysMenuMapper.xml | 16 +- .../mapper/system/SysOperLogMapper.xml | 2 +- .../mapper/system/SysRoleDeptMapper.xml | 2 +- .../resources/mapper/system/SysRoleMapper.xml | 14 +- .../mapper/system/SysRoleMenuMapper.xml | 2 +- .../system/SysShortUrlMappingMapper.xml | 2 +- .../resources/mapper/system/SysUserMapper.xml | 2 +- .../mapper/system/SysUserRoleMapper.xml | 2 +- .../pom.xml | 41 +- .../framework/aspectj/DataSourceAspect.java | 63 + .../framework/config/ApplicationConfig.java | 27 + .../framework/config/CaptchaConfig.java | 82 + .../easyink/framework/config/DruidConfig.java | 117 + .../config/FastJson2JsonRedisSerializer.java | 64 + .../framework/config/FilterConfig.java | 58 + .../config/JsonSerializerManage.java | 28 + .../framework/config/KaptchaTextCreator.java | 60 + .../framework/config/MyBatisPlusConfig.java | 23 + .../easyink/framework/config/RedisConfig.java | 57 + .../framework/config/ResourcesConfig.java | 69 + .../framework/config/SecurityConfig.java | 146 + .../config/SpringAsyncConfiguration.java | 54 + .../framework/config/ThreadPoolConfig.java | 58 + .../framework/config/WebMvcConfig.java | 23 + .../config/properties/DruidProperties.java | 75 + .../datasource/DynamicDataSource.java | 30 + .../DynamicDataSourceContextHolder.java | 43 + .../handler/StringArrayJoinTypeHandler.java | 63 + .../interceptor/RepeatSubmitInterceptor.java | 47 + .../impl/ClearPageHelperParamInterceptor.java | 41 + .../impl/SameUrlDataInterceptor.java | 111 + .../filter/JwtAuthenticationTokenFilter.java | 43 + .../handle/AuthenticationEntryPointImpl.java | 44 + .../handle/LogoutSuccessHandlerImpl.java | 49 + .../easyink/framework/web/domain/Server.java | 174 + .../framework/web/domain/server/Cpu.java | 88 + .../framework/web/domain/server/Jvm.java | 107 + .../framework/web/domain/server/Mem.java | 53 + .../framework/web/domain/server/Sys.java | 73 + .../framework/web/domain/server/SysFile.java | 66 + .../web/exception/GlobalExceptionHandler.java | 141 + .../framework/web/service/FileService.java | 121 + .../framework/aspectj/DataSourceAspect.java | 0 .../framework/config/ApplicationConfig.java | 0 .../framework/config/CaptchaConfig.java | 0 .../framework/config/DruidConfig.java | 0 .../config/FastJson2JsonRedisSerializer.java | 0 .../framework/config/FilterConfig.java | 0 .../config/JsonSerializerManage.java | 0 .../framework/config/KaptchaTextCreator.java | 0 .../framework/config/MyBatisPlusConfig.java | 0 .../framework/config/RedisConfig.java | 0 .../framework/config/ResourcesConfig.java | 0 .../framework/config/SecurityConfig.java | 0 .../config/SpringAsyncConfiguration.java | 0 .../framework/config/ThreadPoolConfig.java | 0 .../framework/config/WebMvcConfig.java | 0 .../config/properties/DruidProperties.java | 0 .../datasource/DynamicDataSource.java | 0 .../DynamicDataSourceContextHolder.java | 0 .../handler/StringArrayJoinTypeHandler.java | 0 .../interceptor/RepeatSubmitInterceptor.java | 0 .../impl/ClearPageHelperParamInterceptor.java | 0 .../impl/SameUrlDataInterceptor.java | 0 .../filter/JwtAuthenticationTokenFilter.java | 0 .../handle/AuthenticationEntryPointImpl.java | 0 .../handle/LogoutSuccessHandlerImpl.java | 0 .../framework/web/domain/Server.java | 0 .../framework/web/domain/server/Cpu.java | 0 .../framework/web/domain/server/Jvm.java | 0 .../framework/web/domain/server/Mem.java | 0 .../framework/web/domain/server/Sys.java | 0 .../framework/web/domain/server/SysFile.java | 0 .../web/exception/GlobalExceptionHandler.java | 0 .../framework/web/service/FileService.java | 0 {easywecom-quartz => easyink-quartz}/pom.xml | 14 +- .../easyink/quartz/config/ScheduleConfig.java | 55 + .../quartz/controller/SysJobController.java | 125 + .../controller/SysJobLogController.java | 82 + .../com/easyink/quartz/domain/SysJob.java | 170 + .../com/easyink/quartz/domain/SysJobLog.java | 155 + .../quartz/mapper/SysJobLogMapper.java | 64 + .../easyink/quartz/mapper/SysJobMapper.java | 67 + .../quartz/service/ISysJobLogService.java | 56 + .../quartz/service/ISysJobService.java | 102 + .../service/impl/SysJobLogServiceImpl.java | 81 + .../service/impl/SysJobServiceImpl.java | 230 ++ .../quartz/task/CustomerPortraitTask.java | 16 + .../EmpleCodeThroughFriendTimeSwitchTask.java | 70 + .../quartz/task/GroupChatStatisticTask.java | 152 + .../quartz/task/GroupCodeActualTimeTask.java | 119 + .../quartz/task/MessageResultTask.java | 79 + .../easyink/quartz/task/PageHomeDataTask.java | 65 + .../quartz/task/RemoveMaterialTask.java | 74 + .../java/com/easyink/quartz/task/RyTask.java | 222 ++ .../quartz/task/TaskFissionStatusTask.java | 20 + .../easyink/quartz/task/TodoReminderTask.java | 135 + .../task/TransferResignedResultTask.java | 97 + .../quartz/task/TransferResultTask.java | 143 + .../quartz/task/UserBehaviorDataTak.java | 125 + .../task/WeOperationsCenterSopTask.java | 455 +++ .../task/moment/MomentPublishStatusTask.java | 64 + .../task/moment/MomentStartCreateTask.java | 64 + .../moment/MomentUpdateCreatedStatusTask.java | 48 + .../quartz/util/AbstractQuartzJob.java | 96 + .../com/easyink/quartz/util/CronUtils.java | 56 + .../easyink/quartz/util/JobInvokeUtil.java | 162 + .../QuartzDisallowConcurrentExecution.java | 18 + .../quartz/util/QuartzJobExecution.java | 16 + .../easyink/quartz/util/ScheduleUtils.java | 98 + .../quartz/config/ScheduleConfig.java | 0 .../quartz/controller/SysJobController.java | 0 .../controller/SysJobLogController.java | 0 .../com/easywecom/quartz/domain/SysJob.java | 0 .../easywecom/quartz/domain/SysJobLog.java | 0 .../quartz/mapper/SysJobLogMapper.java | 0 .../easywecom/quartz/mapper/SysJobMapper.java | 0 .../quartz/service/ISysJobLogService.java | 0 .../quartz/service/ISysJobService.java | 0 .../service/impl/SysJobLogServiceImpl.java | 0 .../service/impl/SysJobServiceImpl.java | 0 .../quartz/task/CustomerPortraitTask.java | 0 .../EmpleCodeThroughFriendTimeSwitchTask.java | 0 .../quartz/task/GroupChatStatisticTask.java | 0 .../quartz/task/GroupCodeActualTimeTask.java | 0 .../quartz/task/MessageResultTask.java | 0 .../quartz/task/PageHomeDataTask.java | 0 .../quartz/task/RemoveMaterialTask.java | 0 .../com/easywecom/quartz/task/RyTask.java | 0 .../quartz/task/TaskFissionStatusTask.java | 0 .../quartz/task/TodoReminderTask.java | 0 .../task/TransferResignedResultTask.java | 0 .../quartz/task/TransferResultTask.java | 0 .../quartz/task/UserBehaviorDataTak.java | 0 .../task/WeOperationsCenterSopTask.java | 0 .../task/moment/MomentPublishStatusTask.java | 0 .../task/moment/MomentStartCreateTask.java | 0 .../moment/MomentUpdateCreatedStatusTask.java | 0 .../quartz/util/AbstractQuartzJob.java | 0 .../com/easywecom/quartz/util/CronUtils.java | 0 .../easywecom/quartz/util/JobInvokeUtil.java | 0 .../QuartzDisallowConcurrentExecution.java | 0 .../quartz/util/QuartzJobExecution.java | 0 .../easywecom/quartz/util/ScheduleUtils.java | 0 .../mapper/quartz/SysJobLogMapper.xml | 8 +- .../resources/mapper/quartz/SysJobMapper.xml | 10 +- {easywecom-wecom => easyink-wecom}/pom.xml | 14 +- .../annotation/CustomerTrajectoryRecord.java | 14 + .../annotation/aspect/DataScopeAspect.java | 127 + .../wecom/annotation/aspect/LogAspect.java | 194 + .../com/easyink/wecom/client/OrderClient.java | 71 + .../easyink/wecom/client/We3rdAppClient.java | 63 + .../easyink/wecom/client/We3rdUserClient.java | 65 + .../wecom/client/WeAccessTokenClient.java | 72 + .../easyink/wecom/client/WeAdminClient.java | 324 ++ .../easyink/wecom/client/WeAgentClient.java | 33 + .../easyink/wecom/client/WeCropTagClient.java | 69 + .../wecom/client/WeCustomerClient.java | 126 + .../wecom/client/WeCustomerGroupClient.java | 55 + .../client/WeCustomerMessagePushClient.java | 42 + .../wecom/client/WeDepartMentClient.java | 68 + .../wecom/client/WeExternalContactClient.java | 93 + .../wecom/client/WeGroupChatJoinClient.java | 35 + .../easyink/wecom/client/WeMediaClient.java | 51 + .../wecom/client/WeMessagePushClient.java | 37 + .../easyink/wecom/client/WeMomentClient.java | 132 + .../wecom/client/WeMsgAuditClient.java | 56 + .../easyink/wecom/client/WeTicketClient.java | 42 + .../easyink/wecom/client/WeUserClient.java | 144 + .../wecom/client/WeWelcomeMsgClient.java | 32 + .../wecom/client/WechatOpenClient.java | 81 + .../convert/autotag/AddTagRuleConvert.java | 19 + .../autotag/TagRuleUserRelConvert.java | 21 + .../convert/autotag/UpdateTagRuleConvert.java | 19 + .../customer/AddTagRuleCustomerConvert.java | 42 + .../UpdateTagRuleCustomerConvert.java | 44 + .../autotag/group/AddTagRuleGroupConvert.java | 41 + .../group/UpdateTagRuleGroupConvert.java | 42 + .../keyword/AddTagRuleKeywordConvert.java | 34 + .../keyword/UpdateTagRuleKeywordConvert.java | 32 + .../OrderGroupToOrderCustomerEntity.java | 73 + .../domain/OrderUserToOrderAccountEntity.java | 74 + .../java/com/easyink/wecom/domain/WeApp.java | 103 + .../wecom/domain/WeApplicationCenter.java | 91 + .../easyink/wecom/domain/WeAuthCorpInfo.java | 134 + .../wecom/domain/WeAuthCorpInfoExtend.java | 141 + .../com/easyink/wecom/domain/WeCategory.java | 73 + .../wecom/domain/WeChatCollection.java | 32 + .../wecom/domain/WeChatContactMapping.java | 133 + .../com/easyink/wecom/domain/WeCustomer.java | 228 ++ .../wecom/domain/WeCustomerAddGroup.java | 27 + .../wecom/domain/WeCustomerAddUser.java | 22 + .../wecom/domain/WeCustomerMessage.java | 76 + .../domain/WeCustomerMessageOriginal.java | 80 + .../domain/WeCustomerMessageTimeTask.java | 66 + .../wecom/domain/WeCustomerMessgaeResult.java | 85 + .../wecom/domain/WeCustomerPortrait.java | 119 + .../wecom/domain/WeCustomerSeedMessage.java | 118 + .../wecom/domain/WeCustomerSocialConn.java | 22 + .../wecom/domain/WeCustomerTagRel.java | 66 + .../wecom/domain/WeCustomerTrajectory.java | 105 + .../com/easyink/wecom/domain/WeEmpleCode.java | 209 + .../wecom/domain/WeEmpleCodeAnalyse.java | 52 + .../wecom/domain/WeEmpleCodeMaterial.java | 50 + .../easyink/wecom/domain/WeEmpleCodeTag.java | 43 + .../wecom/domain/WeEmpleCodeUseScop.java | 60 + .../domain/WeExternalUserMappingUser.java | 35 + .../wecom/domain/WeFlowerCustomerRel.java | 263 ++ .../wecom/domain/WeFlowerCustomerTagRel.java | 71 + .../com/easyink/wecom/domain/WeGroup.java | 139 + .../com/easyink/wecom/domain/WeGroupCode.java | 166 + .../wecom/domain/WeGroupCodeActual.java | 141 + .../easyink/wecom/domain/WeGroupMember.java | 94 + .../com/easyink/wecom/domain/WeGroupSop.java | 56 + .../easyink/wecom/domain/WeGroupSopChat.java | 30 + .../wecom/domain/WeGroupSopMaterial.java | 26 + .../easyink/wecom/domain/WeGroupSopPic.java | 22 + .../wecom/domain/WeGroupStatistic.java | 92 + .../com/easyink/wecom/domain/WeGroupTag.java | 43 + .../wecom/domain/WeGroupTagCategory.java | 39 + .../easyink/wecom/domain/WeGroupTagRel.java | 54 + .../easyink/wecom/domain/WeH5TicketDto.java | 21 + .../wecom/domain/WeKeywordGroupTask.java | 84 + .../com/easyink/wecom/domain/WeLeaveUser.java | 91 + .../com/easyink/wecom/domain/WeMaterial.java | 89 + .../wecom/domain/WeMaterialConfig.java | 46 + .../wecom/domain/WeMaterialTagEntity.java | 37 + .../wecom/domain/WeMaterialTagRelEntity.java | 37 + .../easyink/wecom/domain/WeMessagePush.java | 85 + .../com/easyink/wecom/domain/WeMsgTlp.java | 89 + .../wecom/domain/WeMsgTlpMaterial.java | 140 + .../wecom/domain/WeMsgTlpMaterialRel.java | 39 + .../easyink/wecom/domain/WeMsgTlpScope.java | 41 + .../wecom/domain/WeMsgTlpSpecialRule.java | 66 + .../easyink/wecom/domain/WeMyApplication.java | 60 + .../domain/WeMyApplicationUseScopeEntity.java | 50 + ...erationsCenterCustomerSopFilterEntity.java | 87 + ...ationsCenterGroupSopFilterCycleEntity.java | 50 + ...eOperationsCenterGroupSopFilterEntity.java | 66 + .../WeOperationsCenterSopDetailEntity.java | 97 + .../domain/WeOperationsCenterSopEntity.java | 78 + .../WeOperationsCenterSopMaterialEntity.java | 60 + .../WeOperationsCenterSopRulesEntity.java | 78 + .../WeOperationsCenterSopScopeEntity.java | 64 + .../WeOperationsCenterSopTaskEntity.java | 69 + .../wecom/domain/WePresTagGroupTask.java | 73 + .../wecom/domain/WePresTagGroupTaskScope.java | 32 + .../wecom/domain/WePresTagGroupTaskStat.java | 52 + .../wecom/domain/WePresTagGroupTaskTag.java | 27 + .../WeRedeemCodeWelcomeMsgAndMaterial.java | 31 + .../com/easyink/wecom/domain/WeSensitive.java | 115 + .../easyink/wecom/domain/WeSensitiveAct.java | 69 + .../wecom/domain/WeSensitiveActHit.java | 142 + .../wecom/domain/WeSensitiveAuditScope.java | 61 + .../java/com/easyink/wecom/domain/WeTag.java | 66 + .../com/easyink/wecom/domain/WeTagGroup.java | 73 + .../wecom/domain/WeUserBehaviorData.java | 92 + .../com/easyink/wecom/domain/WeUserRole.java | 37 + .../easyink/wecom/domain/WeWordsCategory.java | 71 + .../wecom/domain/WeWordsDetailEntity.java | 124 + .../wecom/domain/WeWordsGroupEntity.java | 74 + .../wecom/domain/WeWordsLastUseEntity.java | 60 + .../wecom/domain/dto/AddWeMaterialDTO.java | 34 + .../domain/dto/AllocateWeCustomerDTO.java | 39 + .../domain/dto/AllocateWeCustomerV2DTO.java | 35 + .../wecom/domain/dto/AllocateWeGroupDTO.java | 28 + .../wecom/domain/dto/AutoConfigDTO.java | 37 + .../wecom/domain/dto/BaseApplicationDTO.java | 22 + .../BatchSaveCustomerExtendPropertyDTO.java | 27 + .../domain/dto/BatchUpdateUserInfoDTO.java | 41 + .../wecom/domain/dto/BindDetailDTO.java | 28 + .../wecom/domain/dto/FindWeGroupCodeDTO.java | 23 + .../wecom/domain/dto/FindWeGroupDTO.java | 47 + .../domain/dto/FindWeGroupMemberDTO.java | 23 + .../wecom/domain/dto/FindWeMaterialDTO.java | 34 + .../wecom/domain/dto/GetJoinQrCodeResp.java | 17 + .../domain/dto/GroupChatStatisticDTO.java | 66 + .../wecom/domain/dto/LeaveWeUserListsDTO.java | 38 + .../wecom/domain/dto/QueryApplicationDTO.java | 26 + .../dto/QueryCustomerExtendPropertyDTO.java | 27 + .../domain/dto/QueryPresTagGroupDTO.java | 28 + .../domain/dto/QueryPresTagGroupStatDTO.java | 27 + .../wecom/domain/dto/QueryUserDTO.java | 40 + .../wecom/domain/dto/RemoveMaterialDTO.java | 29 + .../wecom/domain/dto/ResetCategoryDTO.java | 21 + .../wecom/domain/dto/RestoreMaterialDTO.java | 29 + .../dto/SaveCustomerExtendPropertyDTO.java | 53 + .../domain/dto/SetApplicationUseScopeDTO.java | 46 + .../domain/dto/ShowMaterialSwitchDTO.java | 37 + .../domain/dto/TemporaryMaterialDTO.java | 15 + .../wecom/domain/dto/UnBindOrderDTO.java | 31 + .../domain/dto/UpdateApplicationDTO.java | 22 + .../domain/dto/UpdateUserInfoDetailDTO.java | 22 + .../wecom/domain/dto/UpdateWeMaterialDTO.java | 33 + .../wecom/domain/dto/UserBehaviorDataDTO.java | 59 + .../wecom/domain/dto/WeAccessTokenDTO.java | 15 + .../domain/dto/WeAccessUserInfo3rdDTO.java | 25 + .../easyink/wecom/domain/dto/WeAppDTO.java | 27 + .../dto/WeCategorySidebarSwitchDTO.java | 29 + .../wecom/domain/dto/WeChatCollectionDTO.java | 19 + .../wecom/domain/dto/WeChatUserDTO.java | 16 + .../domain/dto/WeCommunityNewGroupDTO.java | 47 + .../wecom/domain/dto/WeCustomerDTO.java | 145 + .../domain/dto/WeCustomerExtendRest.java | 16 + .../domain/dto/WeCustomerMessageDTO.java | 55 + .../dto/WeCustomerMessagePushResultDTO.java | 40 + .../dto/WeCustomerMessageToUserDTO.java | 32 + .../domain/dto/WeCustomerPushMessageDTO.java | 41 + .../wecom/domain/dto/WeDepartMentDTO.java | 90 + .../wecom/domain/dto/WeEmpleCodeDTO.java | 39 + .../domain/dto/WeExternalContactDTO.java | 59 + .../wecom/domain/dto/WeGroupExtendDTO.java | 18 + .../wecom/domain/dto/WeGroupMemberDTO.java | 34 + .../wecom/domain/dto/WeGroupSopDTO.java | 74 + .../domain/dto/WeKeywordGroupTaskDTO.java | 36 + .../wecom/domain/dto/WeLoginUserInfoDTO.java | 50 + .../wecom/domain/dto/WeMaterialDTO.java | 28 + .../wecom/domain/dto/WeMaterialTagDTO.java | 26 + .../domain/dto/WeMaterialTagRelRemoveDTO.java | 27 + .../easyink/wecom/domain/dto/WeMediaDTO.java | 35 + .../wecom/domain/dto/WeMessagePushDTO.java | 92 + .../domain/dto/WeMessagePushGroupDTO.java | 28 + .../domain/dto/WeMessagePushResultDTO.java | 28 + .../dto/WeOperationsCenterSopSearchDTO.java | 26 + .../wecom/domain/dto/WePageCountDTO.java | 105 + .../wecom/domain/dto/WePageStaticDataDTO.java | 84 + .../wecom/domain/dto/WePermanentCodeDTO.java | 31 + .../domain/dto/WePresTagGroupTaskDTO.java | 56 + .../easyink/wecom/domain/dto/WeResultDTO.java | 29 + .../easyink/wecom/domain/dto/WeTagDTO.java | 16 + .../easyink/wecom/domain/dto/WeUserDTO.java | 106 + .../wecom/domain/dto/WeUserInfoDTO.java | 37 + .../wecom/domain/dto/WeUserListDTO.java | 36 + .../wecom/domain/dto/WeWelcomeMsg.java | 27 + .../domain/dto/WeWordsChangeSortDTO.java | 16 + .../easyink/wecom/domain/dto/WeWordsDTO.java | 70 + .../wecom/domain/dto/WeWordsDelDTO.java | 22 + .../wecom/domain/dto/WeWordsImportDTO.java | 29 + .../wecom/domain/dto/WeWordsQueryDTO.java | 41 + .../wecom/domain/dto/WeWordsSortDTO.java | 24 + .../domain/dto/app/ToOpenCorpIdResp.java | 29 + .../dto/app/UserIdToOpenUserIdResp.java | 45 + .../wecom/domain/dto/app/WeAdminListResp.java | 40 + .../domain/dto/app/WePermanentCodeResp.java | 266 ++ .../domain/dto/app/WePreAuthCodeResp.java | 31 + .../wecom/domain/dto/app/WeSuiteTokenReq.java | 38 + .../domain/dto/app/WeSuiteTokenResp.java | 32 + .../dto/autoconfig/BaseAdminResult.java | 34 + .../DomainOwnershipVerifyInfoResp.java | 15 + .../dto/autoconfig/InitApplicationModel.java | 36 + .../dto/autoconfig/MobileConfirmResp.java | 35 + .../autoconfig/WeApiAccessibleAppsResp.java | 25 + .../autoconfig/WeCheckCustomAppUrlResp.java | 18 + .../dto/autoconfig/WeConfirmMobileRsp.java | 31 + .../dto/autoconfig/WeCorpApplicationResp.java | 46 + .../dto/autoconfig/WeGetChatMenuResp.java | 34 + .../dto/autoconfig/WeGetGroupListResp.java | 31 + .../domain/dto/autoconfig/WeGetKeyResp.java | 21 + .../domain/dto/autoconfig/WeLoginResp.java | 61 + .../dto/autotag/AbstractTagRuleDTO.java | 18 + .../autotag/AbstractTagRuleWithUserDTO.java | 20 + .../dto/autotag/TagRuleBatchStatusDTO.java | 24 + .../wecom/domain/dto/autotag/TagRuleDTO.java | 40 + .../domain/dto/autotag/TagRuleDeleteDTO.java | 18 + .../dto/autotag/TagRuleWithUserDTO.java | 56 + .../customer/AbstractCustomerTagRuleDTO.java | 38 + .../customer/AddCustomerTagRuleDTO.java | 109 + .../autotag/customer/CustomerSceneDTO.java | 32 + .../autotag/customer/CustomerTagRuleDTO.java | 108 + .../customer/UpdateCustomerTagRuleDTO.java | 102 + .../group/AbstractGroupTagRuleDTO.java | 23 + .../dto/autotag/group/AddGroupTagRuleDTO.java | 98 + .../dto/autotag/group/GroupSceneDTO.java | 28 + .../dto/autotag/group/GroupTagRuleDTO.java | 75 + .../autotag/group/UpdateGroupTagRuleDTO.java | 92 + .../keyword/AbstractKeywordTagRuleDTO.java | 29 + .../autotag/keyword/AddKeywordTagRuleDTO.java | 77 + .../autotag/keyword/KeywordTagRuleDTO.java | 108 + .../keyword/UpdateKeywordTagRuleDTO.java | 72 + .../dto/autotag/test/KeywordTextListDTO.java | 15 + .../wecom/domain/dto/common/Attachment.java | 10 + .../domain/dto/common/AttachmentParam.java | 157 + .../wecom/domain/dto/common/Attachments.java | 21 + .../easyink/wecom/domain/dto/common/File.java | 23 + .../wecom/domain/dto/common/Image.java | 27 + .../easyink/wecom/domain/dto/common/Link.java | 35 + .../wecom/domain/dto/common/Messages.java | 31 + .../wecom/domain/dto/common/MiniProgram.java | 35 + .../easyink/wecom/domain/dto/common/Text.java | 24 + .../wecom/domain/dto/common/Video.java | 23 + .../dto/customer/CustomerGroupDetail.java | 78 + .../dto/customer/CustomerGroupList.java | 69 + .../dto/customer/CustomerGroupMember.java | 46 + .../CustomerGroupMemberInvitorDetail.java | 18 + .../domain/dto/customer/CustomerTagEdit.java | 34 + .../domain/dto/customer/EditCustomerDTO.java | 119 + .../domain/dto/customer/ExternalContact.java | 55 + .../dto/customer/ExternalUserDetail.java | 31 + .../domain/dto/customer/ExternalUserTag.java | 28 + .../wecom/domain/dto/customer/FollowInfo.java | 142 + .../wecom/domain/dto/customer/FollowUser.java | 55 + .../domain/dto/customer/FollowUserList.java | 44 + .../dto/customer/GetExternalDetailResp.java | 113 + .../domain/dto/customer/req/GetByUserReq.java | 48 + .../dto/customer/resp/GetByUserResp.java | 148 + .../dto/customersop/AddWeCustomerSopDTO.java | 21 + .../wecom/domain/dto/customersop/Column.java | 16 + .../domain/dto/customersop/EditUserDTO.java | 30 + .../dto/emplecode/AddWeEmpleCodeDTO.java | 24 + .../emplecode/FindWeEmpleCodeAnalyseDTO.java | 36 + .../dto/emplecode/FindWeEmpleCodeDTO.java | 37 + .../dto/emplecode/UpdateWeEmplyCodeDTO.java | 29 + .../domain/dto/group/AddJoinWayConfigDTO.java | 48 + .../domain/dto/group/AddJoinWayResult.java | 19 + .../domain/dto/group/DelJoinWayConfigDTO.java | 19 + .../domain/dto/group/DelJoinWayResult.java | 14 + .../domain/dto/group/GetJoinWayConfigDTO.java | 19 + .../domain/dto/group/GetJoinWayResult.java | 36 + .../domain/dto/group/GroupChatListReq.java | 68 + .../domain/dto/group/GroupChatListResp.java | 65 + .../dto/group/UpdateJoinWayConfigDTO.java | 27 + .../domain/dto/group/UpdateJoinWayResult.java | 15 + .../domain/dto/groupcode/AddCorpCodeDTO.java | 23 + .../domain/dto/groupcode/EditCorpCodeDTO.java | 13 + .../dto/groupsop/AddGroupSopFilterDTO.java | 23 + .../domain/dto/groupsop/AddWeGroupSopDTO.java | 40 + .../AddWeOperationsCenterSopRuleDTO.java | 26 + .../domain/dto/groupsop/DelWeGroupSopDTO.java | 34 + .../dto/groupsop/FindWeGroupSopDTO.java | 40 + .../dto/groupsop/FindWeSopDetailDTO.java | 61 + .../groupsop/FindWeSopExecutedRulesDTO.java | 34 + .../groupsop/FindWeSopExecutedUsersDTO.java | 33 + .../dto/groupsop/GetSopTaskDetailDTO.java | 48 + .../dto/groupsop/SopBatchSwitchDTO.java | 32 + .../domain/dto/groupsop/UpdateWeSopDTO.java | 52 + .../domain/dto/message/AsyncResultDTO.java | 25 + .../wecom/domain/dto/message/Attachment.java | 37 + .../dto/message/CustomerMessagePushDTO.java | 83 + .../message/DetailMessageStatusResultDTO.java | 32 + .../wecom/domain/dto/message/FileDTO.java | 30 + .../domain/dto/message/ImageMessageDTO.java | 37 + .../domain/dto/message/LinkMessageDTO.java | 56 + .../dto/message/MiniprogramMessageDTO.java | 26 + .../QueryCustomerMessageStatusResultDTO.java | 23 + ...tomerMessageStatusResultDataObjectDTO.java | 13 + .../domain/dto/message/RadarMessageDTO.java | 30 + .../dto/message/SendMessageResultDTO.java | 21 + .../domain/dto/message/TextMessageDTO.java | 27 + .../wecom/domain/dto/message/VideoDTO.java | 45 + .../dto/message/WeCustomerMessagePushDTO.java | 57 + .../domain/dto/moment/AddMomentTaskDTO.java | 33 + .../dto/moment/CreateMomentTaskDTO.java | 63 + .../domain/dto/moment/MomentAttachment.java | 102 + .../domain/dto/moment/MomentCommentsDTO.java | 25 + .../domain/dto/moment/MomentCustomerDTO.java | 30 + .../domain/dto/moment/MomentListDTO.java | 37 + .../domain/dto/moment/MomentStrategyDTO.java | 23 + .../dto/moment/MomentStrategyGetDTO.java | 21 + .../domain/dto/moment/MomentTaskDTO.java | 37 + .../dto/moment/MomentUserCustomerDTO.java | 33 + .../dto/moment/SearchMomentContentDTO.java | 52 + .../domain/dto/moment/SendToUserDTO.java | 35 + .../domain/dto/msgaudit/WeMsgAuditDTO.java | 89 + .../dto/pro/EditCustomerFromPlusDTO.java | 40 + .../dto/pro/QueryCustomerFromPlusDTO.java | 31 + .../dto/radar/DeleteRadarChannelDTO.java | 22 + .../domain/dto/radar/DeleteRadarDTO.java | 25 + .../domain/dto/radar/GetRadarShortUrlDTO.java | 27 + .../domain/dto/radar/RadarChannelDTO.java | 43 + .../domain/dto/radar/RadarClickRecordDTO.java | 63 + .../wecom/domain/dto/radar/RadarDTO.java | 91 + .../dto/radar/SearchChannelRecordDTO.java | 25 + .../radar/SearchChannelRecordDetailDTO.java | 31 + .../dto/radar/SearchCustomerRecordDTO.java | 34 + .../radar/SearchCustomerRecordDetailDTO.java | 27 + .../dto/radar/SearchRadarAnalyseDTO.java | 33 + .../dto/radar/SearchRadarChannelDTO.java | 25 + .../domain/dto/radar/SearchRadarDTO.java | 39 + .../redeemcode/WeRedeemCodeActivityDTO.java | 46 + .../WeRedeemCodeActivityDeleteDTO.java | 22 + .../dto/redeemcode/WeRedeemCodeDTO.java | 79 + .../dto/redeemcode/WeRedeemCodeDeleteDTO.java | 26 + .../dto/redeemcode/WeRedeemCodeImportDTO.java | 34 + .../dto/tag/RemoveWeCustomerTagDTO.java | 48 + .../wecom/domain/dto/tag/WeCropDelDTO.java | 23 + .../domain/dto/tag/WeCropGropTagDtlDTO.java | 15 + .../domain/dto/tag/WeCropGroupTagDTO.java | 64 + .../domain/dto/tag/WeCropGroupTagListDTO.java | 17 + .../wecom/domain/dto/tag/WeCropTagDTO.java | 48 + .../domain/dto/tag/WeFindCropTagParam.java | 18 + .../wecom/domain/dto/tag/WeGroupTagDTO.java | 23 + .../domain/dto/tag/WeMaterialTagAddDTO.java | 21 + .../dto/tag/WeWordsModifyCategoryDTO.java | 22 + .../GetResignedTransferDetailDTO.java | 34 + .../dto/transfer/GetUnassignedListReq.java | 28 + .../dto/transfer/GetUnassignedListResp.java | 99 + .../dto/transfer/TransferCustomerDTO.java | 43 + .../dto/transfer/TransferCustomerReq.java | 33 + .../dto/transfer/TransferCustomerResp.java | 72 + .../dto/transfer/TransferRecordPageDTO.java | 31 + .../transfer/TransferResignedCustomerReq.java | 69 + .../TransferResignedCustomerResp.java | 82 + .../TransferResignedGroupChatReq.java | 63 + .../TransferResignedGroupChatResp.java | 122 + .../dto/transfer/TransferResignedUserDTO.java | 50 + .../transfer/TransferResignedUserListDTO.java | 28 + .../dto/transfer/TransferResultReq.java | 33 + .../transfer/TransferResultResignedReq.java | 25 + .../transfer/TransferResultResignedResp.java | 71 + .../dto/transfer/TransferResultResp.java | 119 + .../wecom/domain/dto/unBindCustomerDTO.java | 26 + .../wegrouptag/AddWeGroupTagCategoryDTO.java | 23 + .../domain/dto/wegrouptag/BatchTagRelDTO.java | 33 + .../wegrouptag/DelWeGroupTagCategoryDTO.java | 24 + .../wegrouptag/FindWeGroupTagCategoryDTO.java | 25 + .../wegrouptag/PageWeGroupTagCategoryDTO.java | 25 + .../UpdateWeGroupTagCategoryDTO.java | 26 + .../dto/welcomemsg/GroupWelcomeMsgAddDTO.java | 34 + .../welcomemsg/GroupWelcomeMsgDeleteDTO.java | 18 + .../dto/welcomemsg/GroupWelcomeMsgResult.java | 19 + .../welcomemsg/GroupWelcomeMsgUpdateDTO.java | 29 + .../HitSpecialWelcomeMsgMaterialVO.java | 28 + .../dto/welcomemsg/WelComeMsgAddDTO.java | 28 + .../dto/welcomemsg/WelComeMsgDeleteDTO.java | 21 + .../dto/welcomemsg/WelComeMsgUpdateDTO.java | 38 + .../welcomemsg/WelComeMsgUpdateEmployDTO.java | 33 + .../welcomemsg/WelComeMsgUpdateGroupDTO.java | 16 + .../wordscategory/AddWeWordsCategoryDTO.java | 23 + .../DeleteWeWordsCategoryDTO.java | 25 + .../wordscategory/FindWeWordsCategoryDTO.java | 34 + .../UpdateWeWordsCategoryDTO.java | 44 + .../WeWordsCategoryChangeSort.java | 22 + .../WeWordsCategoryChangeSortDTO.java | 24 + .../WeWordsCategoryChildSortDTO.java | 25 + .../domain/entity/BaseExternalUserEntity.java | 20 + .../domain/entity/WeCustomerExportDTO.java | 24 + .../entity/appconfig/YiGeOrderAppConfig.java | 22 + .../WeAutoTagCustomerRuleEffectTime.java | 35 + .../autotag/WeAutoTagCustomerScene.java | 56 + .../autotag/WeAutoTagCustomerSceneTagRel.java | 38 + .../entity/autotag/WeAutoTagGroupScene.java | 39 + .../autotag/WeAutoTagGroupSceneGroupRel.java | 38 + .../autotag/WeAutoTagGroupSceneTagRel.java | 38 + .../entity/autotag/WeAutoTagKeyword.java | 39 + .../autotag/WeAutoTagKeywordTagRel.java | 34 + .../domain/entity/autotag/WeAutoTagRule.java | 52 + .../WeAutoTagRuleHitCustomerRecord.java | 46 + .../WeAutoTagRuleHitCustomerRecordTagRel.java | 42 + .../autotag/WeAutoTagRuleHitGroupRecord.java | 50 + .../WeAutoTagRuleHitGroupRecordTagRel.java | 41 + .../WeAutoTagRuleHitKeywordRecord.java | 55 + .../WeAutoTagRuleHitKeywordRecordTagRel.java | 42 + .../entity/autotag/WeAutoTagUserRel.java | 39 + .../ExtendPropertyMultipleOption.java | 42 + .../customer/WeCustomerExtendProperty.java | 116 + .../customer/WeCustomerExtendPropertyRel.java | 54 + .../wecom/domain/entity/moment/Location.java | 18 + .../wecom/domain/entity/moment/Moment.java | 40 + .../domain/entity/moment/MomentComments.java | 23 + .../domain/entity/moment/MomentCustomer.java | 21 + .../domain/entity/moment/MomentStrategy.java | 32 + .../domain/entity/moment/MomentTask.java | 20 + .../wecom/domain/entity/moment/Privilege.java | 22 + .../domain/entity/moment/VisibleRange.java | 71 + .../moment/WeMomentDetailRelEntity.java | 42 + .../entity/moment/WeMomentTaskEntity.java | 142 + .../moment/WeMomentTaskResultEntity.java | 58 + .../moment/WeMomentUserCustomerRelEntity.java | 40 + .../wecom/domain/entity/radar/WeRadar.java | 93 + .../domain/entity/radar/WeRadarChannel.java | 48 + .../entity/radar/WeRadarClickRecord.java | 83 + .../wecom/domain/entity/radar/WeRadarTag.java | 31 + .../wecom/domain/entity/radar/WeRadarUrl.java | 43 + .../redeemcode/RedeemCodeAlarmUser.java | 33 + .../entity/redeemcode/WeRedeemCode.java | 56 + .../redeemcode/WeRedeemCodeActivity.java | 88 + .../transfer/WeCustomerTransferConfig.java | 42 + .../transfer/WeCustomerTransferRecord.java | 105 + .../WeResignedCustomerTransferRecord.java | 49 + .../WeResignedGroupTransferRecord.java | 41 + .../transfer/WeResignedTransferRecord.java | 62 + .../entity/wechatopen/WeOpenConfig.java | 42 + .../com/easyink/wecom/domain/order/Order.java | 56 + .../wecom/domain/order/OrderBaseResp.java | 28 + .../wecom/domain/order/OrderBindInfoDTO.java | 28 + .../wecom/domain/order/OrderBindInfoVO.java | 29 + .../wecom/domain/order/OrderCreate.java | 24 + .../wecom/domain/order/OrderCreateDTO.java | 56 + .../wecom/domain/order/OrderCustomer.java | 26 + .../wecom/domain/order/OrderDetailDTO.java | 33 + .../wecom/domain/order/OrderHadlerDTO.java | 33 + .../wecom/domain/order/OrderHandlerVO.java | 24 + .../wecom/domain/order/OrderListDTO.java | 49 + .../wecom/domain/order/OrderListMainVO.java | 27 + .../wecom/domain/order/OrderListVO.java | 32 + .../wecom/domain/order/OrderLoginVO.java | 49 + .../wecom/domain/order/OrderNetworkVO.java | 33 + .../wecom/domain/order/OrderTotal.java | 32 + .../wecom/domain/order/OrderTotalDTO.java | 30 + .../easyink/wecom/domain/order/OrderUser.java | 30 + .../wecom/domain/order/OrderVerifyVO.java | 23 + .../domain/query/GroupChatStatisticQuery.java | 27 + .../domain/query/UserBehaviorDataQuery.java | 25 + .../wecom/domain/query/WePageStateQuery.java | 37 + .../domain/query/WeSensitiveHitQuery.java | 39 + .../autotag/CustomerTagRuleRecordQuery.java | 21 + .../autotag/GroupTagRuleRecordQuery.java | 17 + .../domain/query/autotag/RuleInfoQuery.java | 27 + .../domain/query/autotag/TagRuleQuery.java | 33 + .../TagRuleRecordKeywordDetailQuery.java | 31 + .../query/autotag/TagRuleRecordQuery.java | 27 + .../query/groupcode/GroupCodeDetailQuery.java | 21 + .../wecom/domain/req/GenerateUrlLinkReq.java | 77 + .../domain/req/UnionId2ExternalUserIdReq.java | 21 + .../wecom/domain/req/WePageBaseReq.java | 73 + .../domain/resp/GenerateUrlLinkResp.java | 18 + .../wecom/domain/resp/GetAccessTokenResp.java | 22 + .../wecom/domain/resp/GetAgentResp.java | 115 + .../domain/resp/GetOfficialAuthInfoResp.java | 26 + .../domain/resp/GetUnionUserInfoResp.java | 53 + .../wecom/domain/resp/SnsUserInfoResp.java | 63 + .../resp/UnionId2ExternalUserIdResp.java | 19 + .../wecom/domain/resp/WePageBaseResp.java | 42 + .../wecom/domain/resp/WechatOpenBaseResp.java | 32 + .../domain/vo/AllocateLeaveUserResp.java | 45 + .../domain/vo/AllocateWeCustomerResp.java | 39 + .../wecom/domain/vo/AllocateWeGroupResp.java | 41 + .../com/easyink/wecom/domain/vo/AppIdVO.java | 27 + .../domain/vo/ApplicationIntroductionVO.java | 55 + .../domain/vo/BatchUpdateUserInfoVO.java | 29 + .../easyink/wecom/domain/vo/BindDetailVO.java | 32 + .../wecom/domain/vo/BindOrderTotalVO.java | 21 + .../wecom/domain/vo/CheckCorpIdVO.java | 24 + .../domain/vo/ConversationArchiveVO.java | 364 ++ .../domain/vo/CustomerMessagePushVO.java | 114 + .../wecom/domain/vo/FindCollectionsVO.java | 44 + .../vo/FindExistWordsCategoryNameList.java | 18 + .../domain/vo/FindWeGroupMemberCountVO.java | 22 + .../wecom/domain/vo/GetWeEmployCodeVO.java | 38 + .../wecom/domain/vo/InsertWeMaterialVO.java | 21 + .../wecom/domain/vo/MomentStrategyGetVO.java | 17 + .../vo/MyApplicationIntroductionVO.java | 41 + .../domain/vo/PresTagExpectedReceptionVO.java | 29 + .../domain/vo/QueryCustomerFromPlusVO.java | 91 + .../wecom/domain/vo/ReleaseNotesVO.java | 24 + .../vo/SelectWeEmplyCodeWelcomeMsgVO.java | 105 + .../wecom/domain/vo/SuiteAuthStatusVO.java | 33 + .../com/easyink/wecom/domain/vo/UserVO.java | 23 + .../wecom/domain/vo/WeAdminQrcodeVO.java | 28 + .../domain/vo/WeAllocateCustomersVO.java | 79 + .../wecom/domain/vo/WeAllocateGroupsVO.java | 83 + .../domain/vo/WeApplicationDetailVO.java | 41 + .../wecom/domain/vo/WeCategoryBaseInfoVO.java | 28 + .../easyink/wecom/domain/vo/WeCategoryVO.java | 9 + .../wecom/domain/vo/WeCheckQrcodeVO.java | 34 + .../domain/vo/WeCommunityNewGroupVO.java | 102 + .../domain/vo/WeCommunityTaskEmplVO.java | 30 + .../easyink/wecom/domain/vo/WeCorpInfoVO.java | 25 + .../wecom/domain/vo/WeCustomerExportVO.java | 97 + .../domain/vo/WeCustomerMakeLabelVO.java | 18 + .../domain/vo/WeCustomerMessageResultVO.java | 33 + .../domain/vo/WeCustomerNameAndUserIdVO.java | 21 + .../domain/vo/WeCustomerSearchTermVO.java | 18 + .../domain/vo/WeCustomerSeedMessageVO.java | 75 + .../wecom/domain/vo/WeEmpleCodeVO.java | 50 + .../domain/vo/WeEmplyCodeAnalyseCountVO.java | 25 + .../wecom/domain/vo/WeEmplyCodeAnalyseVO.java | 28 + .../domain/vo/WeEmplyCodeDownloadVO.java | 28 + .../domain/vo/WeEmplyCodeScopeUserVO.java | 22 + .../domain/vo/WeGroupCodeActualExistVO.java | 23 + .../wecom/domain/vo/WeGroupCodeVO.java | 38 + .../easyink/wecom/domain/vo/WeGroupSopVO.java | 96 + .../domain/vo/WeInternalPreLoginParamVO.java | 46 + .../wecom/domain/vo/WeLeaveAllocateVO.java | 43 + .../domain/vo/WeLeaveUserInfoAllocateVO.java | 35 + .../wecom/domain/vo/WeLeaveUserV2VO.java | 58 + .../wecom/domain/vo/WeLeaveUserVO.java | 33 + .../wecom/domain/vo/WeMakeCustomerTagVO.java | 40 + .../wecom/domain/vo/WeMaterialAndTagRel.java | 25 + .../wecom/domain/vo/WeMaterialCountVO.java | 22 + .../wecom/domain/vo/WeMaterialFileVO.java | 23 + .../wecom/domain/vo/WeMaterialTagVO.java | 29 + .../easyink/wecom/domain/vo/WeMaterialVO.java | 105 + .../easyink/wecom/domain/vo/WeMsgAuditVO.java | 41 + .../domain/vo/WeOperationsCenterSopVo.java | 46 + .../wecom/domain/vo/WePreAuthCodeVO.java | 26 + .../wecom/domain/vo/WePreLoginParamVO.java | 24 + .../vo/WePresTagGroupTaskStatResultVO.java | 23 + .../domain/vo/WePresTagGroupTaskStatVO.java | 47 + .../wecom/domain/vo/WePresTagGroupTaskVO.java | 116 + .../wecom/domain/vo/WeServerTypeVO.java | 27 + .../wecom/domain/vo/WeUserBriefInfoVO.java | 41 + .../easyink/wecom/domain/vo/WeUserInfoVO.java | 36 + .../com/easyink/wecom/domain/vo/WeUserVO.java | 87 + .../wecom/domain/vo/WeWordsCategoryVO.java | 34 + .../wecom/domain/vo/WeWordsImportVO.java | 24 + .../easyink/wecom/domain/vo/WeWordsUrlVO.java | 24 + .../easyink/wecom/domain/vo/WeWordsVO.java | 53 + .../wecom/domain/vo/WxCpXmlMessageVO.java | 175 + .../wecom/domain/vo/autotag/GroupInfoVO.java | 19 + .../wecom/domain/vo/autotag/TagInfoVO.java | 16 + .../vo/autotag/TagRuleDepartmentInfoVO.java | 24 + .../domain/vo/autotag/TagRuleInfoVO.java | 25 + .../domain/vo/autotag/TagRuleListVO.java | 35 + .../domain/vo/autotag/TagRuleUserInfoVO.java | 20 + .../domain/vo/autotag/TagRuleUserListVO.java | 21 + .../vo/autotag/customer/CustomerSceneVO.java | 28 + .../customer/TagRuleCustomerInfoVO.java | 27 + .../vo/autotag/group/GroupSceneRuleVO.java | 23 + .../domain/vo/autotag/group/GroupSceneVO.java | 23 + .../vo/autotag/group/TagRuleGroupInfoVO.java | 22 + .../autotag/keyword/TagRuleKeywordInfoVO.java | 25 + .../vo/autotag/record/CustomerCountVO.java | 23 + .../vo/autotag/record/TagRuleRecordVO.java | 32 + .../customer/CustomerTagRuleRecordVO.java | 22 + .../record/group/GroupTagRuleRecordVO.java | 24 + .../record/keyword/KeywordRecordDetailVO.java | 20 + .../keyword/KeywordTagRuleRecordVO.java | 20 + .../domain/vo/customer/WeCustomerSumVO.java | 23 + .../vo/customer/WeCustomerUserListVO.java | 21 + .../domain/vo/customer/WeCustomerVO.java | 100 + .../groupcode/GroupCodeActivityFirstVO.java | 31 + .../vo/groupcode/GroupCodeDetailVO.java | 65 + .../domain/vo/groupcode/GroupDetailVO.java | 15 + .../domain/vo/moment/AddMomentTaskVO.java | 19 + .../domain/vo/moment/MomentAttachmentVO.java | 17 + .../domain/vo/moment/MomentCommentsVO.java | 25 + .../domain/vo/moment/MomentCustomerVO.java | 24 + .../wecom/domain/vo/moment/MomentListVO.java | 22 + .../vo/moment/MomentStrategyListVO.java | 20 + .../domain/vo/moment/MomentTaskResultVO.java | 35 + .../wecom/domain/vo/moment/MomentTaskVO.java | 24 + .../wecom/domain/vo/moment/MomentTotalVO.java | 30 + .../vo/moment/MomentUserCustomerVO.java | 36 + .../domain/vo/moment/SearchMomentVO.java | 115 + .../domain/vo/radar/RadarAnalyseCountVO.java | 31 + .../wecom/domain/vo/radar/RadarAnalyseVO.java | 29 + .../vo/radar/RadarChannelRecordDetailVO.java | 34 + .../domain/vo/radar/RadarChannelRecordVO.java | 30 + .../domain/vo/radar/RadarChannelSortVO.java | 27 + .../RadarCustomerClickRecordDetailVO.java | 49 + .../vo/radar/RadarCustomerRecordVO.java | 39 + .../domain/vo/radar/RadarRecordTotalVO.java | 29 + .../vo/radar/RadarSumClickRecordVO.java | 21 + .../domain/vo/radar/WeRadarChannelVO.java | 45 + .../wecom/domain/vo/radar/WeRadarVO.java | 69 + .../vo/redeemcode/ImportRedeemCodeVO.java | 25 + .../vo/redeemcode/RedeemCodeAlarmUserVO.java | 22 + .../vo/redeemcode/WeRedeemCodeActivityVO.java | 31 + .../domain/vo/redeemcode/WeRedeemCodeVO.java | 20 + .../domain/vo/sop/AbstractExecuteVO.java | 38 + .../domain/vo/sop/BaseCustomerSopTagVO.java | 26 + .../domain/vo/sop/BaseGroupSopTagVO.java | 26 + .../domain/vo/sop/BaseGroupSopWeUserVO.java | 26 + .../vo/sop/BaseWeOperationsCenterSopVo.java | 53 + .../wecom/domain/vo/sop/CustomerSopVO.java | 33 + .../wecom/domain/vo/sop/DepartmentVO.java | 28 + .../domain/vo/sop/FindGroupSopFilterVO.java | 48 + .../domain/vo/sop/GetCustomerSopFilterVO.java | 49 + .../domain/vo/sop/GetSopTaskByUserIdVO.java | 49 + .../vo/sop/GetTaskDetailByUserIdVO.java | 52 + .../wecom/domain/vo/sop/GroupSopVO.java | 42 + .../wecom/domain/vo/sop/SopAttachmentVO.java | 51 + .../wecom/domain/vo/sop/SopDetailVO.java | 81 + .../wecom/domain/vo/sop/SopRuleVO.java | 21 + .../wecom/domain/vo/sop/SopUserVO.java | 32 + ...perationsCenterSopDetailByCycleTypeVO.java | 21 + ...erationsCenterSopDetailByTimingTypeVO.java | 21 + .../WeOperationsCenterSopDetailChatVO.java | 22 + ...WeOperationsCenterSopDetailCustomerVO.java | 38 + .../vo/sop/WeOperationsCenterSopScopeVO.java | 31 + .../domain/vo/sop/WeSopExecutedRulesVO.java | 28 + .../domain/vo/sop/WeSopExecutedUsersVO.java | 24 + .../wecom/domain/vo/sop/WeSopTaskCountVO.java | 15 + .../vo/sop/WeSopUserIdAndTargetIdVO.java | 52 + ...AbstractWeOperationsCenterSopDetailVO.java | 12 + .../GetResignedTransferCustomerDetailVO.java | 52 + .../GetResignedTransferGroupDetailVO.java | 57 + .../vo/transfer/TransferResignedUserVO.java | 60 + .../transfer/WeCustomerTransferRecordVO.java | 40 + .../wegrouptag/PageWeGroupTagCategoryVO.java | 32 + .../vo/wegrouptag/PageWeGroupTagVO.java | 22 + .../vo/wegrouptag/WeGroupTagCategoryVO.java | 21 + .../vo/wegrouptag/WeGroupTagRelDetail.java | 22 + .../domain/vo/wegrouptag/WeGroupTagRelVO.java | 26 + .../vo/welcomemsg/WeEmployMaterialVO.java | 22 + .../vo/welcomemsg/WeMsgTlpListDetailVO.java | 15 + .../domain/vo/welcomemsg/WeMsgTlpListVO.java | 38 + .../vo/welcomemsg/WeUserUseScopeVO.java | 16 + .../WelcomeMsgGroupMaterialCountVO.java | 21 + .../wecom/factory/WeCallBackEventFactory.java | 14 + .../easyink/wecom/factory/WeEventHandle.java | 25 + .../wecom/factory/WeEventStrategy.java | 73 + .../wecom/factory/WeStrategyBeanFactory.java | 28 + .../impl/WeEventBatchJobResultImpl.java | 41 + .../impl/WeEventChangeContactImpl.java | 38 + .../impl/WeEventChangeExternalChatImpl.java | 43 + .../WeEventChangeExternalContactImpl.java | 41 + .../impl/WeEventChangeExternalTagImpl.java | 41 + .../factory/impl/WeEventSubscribeImpl.java | 140 + .../factory/impl/WeEventUnSubscribeImpl.java | 42 + .../impl/WeInfoTypeCancelAuthImpl.java | 39 + .../impl/WeInfoTypeChangeAuthImpl.java | 57 + .../impl/WeInfoTypeCreateAuthImpl.java | 39 + .../WeInfoTypeResetPermanentCodeImpl.java | 39 + .../impl/WeInfoTypeSuiteTicketImpl.java | 44 + .../WeCallBackAddExternalContactImpl.java | 493 +++ .../WeCallBackAddHalfExternalContactImpl.java | 27 + .../WeCallBackDelExternalContactImpl.java | 83 + .../customer/WeCallBackDelFollowUserImpl.java | 98 + .../WeCallBackEditExternalContactImpl.java | 38 + .../WeCallBackMsgAuditApprovedImpl.java | 60 + .../customer/WeCallbackTransferFailImpl.java | 60 + .../WeCallBackCreateGroupImpl.java | 45 + .../customergroup/WeCallBackDismissImpl.java | 40 + .../WeCallBackUpdateGroupImpl.java | 84 + .../impl/party/WeCallBackCreatePartyImpl.java | 45 + .../impl/party/WeCallBackDeletePartyImpl.java | 43 + .../impl/party/WeCallBackUpdatePartyImpl.java | 71 + .../tag/WeCallBackCreateCustomerTagImpl.java | 53 + .../tag/WeCallBackDeleteCustomerTagImpl.java | 52 + .../tag/WeCallBackUpdateCustomerTagImpl.java | 52 + .../impl/user/WeCallBackCreateUserImpl.java | 47 + .../impl/user/WeCallBackDeleteUserImpl.java | 40 + .../impl/user/WeCallBackUpdateUserImpl.java | 77 + .../user/WeCallBackUpdateUserTagImpl.java | 99 + .../wecom/handler/GenericTypeHandler.java | 92 + .../wecom/handler/ListTypeHandler.java | 94 + .../wecom/interceptor/OrderInterceptor.java | 123 + .../We3rdAccessTokenInterceptor.java | 92 + .../interceptor/WeAccessTokenInterceptor.java | 128 + .../interceptor/WeAutoConfigInterceptor.java | 288 ++ .../WeProviderAccessTokenInterceptor.java | 83 + .../WeProviderAccessTokenInterceptor1.java | 73 + .../WeSuiteAccessTokenInterceptor.java | 92 + ...WeSuiteAccessTokenWebLoginInterceptor.java | 94 + .../interceptor/WechatOpenInterceptor.java | 55 + .../ActualGroupCodeExpiredListener.java | 57 + .../listener/EmpleCodeExpiredListener.java | 81 + .../login/service/PermissionService.java | 147 + .../wecom/login/service/SysLoginService.java | 339 ++ .../login/service/UserDetailsServiceImpl.java | 75 + .../wecom/login/util/LoginTokenService.java | 202 + .../ExtendPropertyMultipleOptionMapper.java | 25 + .../OrderGroupToOrderCustomerMapper.java | 17 + .../mapper/OrderUserToOrderAccountMapper.java | 27 + .../mapper/WeApplicationCenterMapper.java | 17 + .../mapper/WeAuthCorpInfoExtendMapper.java | 17 + .../wecom/mapper/WeAuthCorpInfoMapper.java | 17 + .../wecom/mapper/WeCategoryMapper.java | 56 + .../mapper/WeChatContactMappingMapper.java | 65 + .../wecom/mapper/WeCorpAccountMapper.java | 33 + .../WeCustomerExtendPropertyMapper.java | 49 + .../WeCustomerExtendPropertyRelMapper.java | 45 + .../wecom/mapper/WeCustomerMapper.java | 176 + .../wecom/mapper/WeCustomerMessageMapper.java | 43 + .../WeCustomerMessageOriginalMapper.java | 38 + .../WeCustomerMessageTimeTaskMapper.java | 59 + .../mapper/WeCustomerMessgaeResultMapper.java | 86 + .../mapper/WeCustomerSeedMessageMapper.java | 24 + .../wecom/mapper/WeCustomerTagRelMapper.java | 63 + .../mapper/WeCustomerTrajectoryMapper.java | 12 + .../WeCustomerTransferConfigMapper.java | 15 + .../WeCustomerTransferRecordMapper.java | 34 + .../wecom/mapper/WeDepartmentMapper.java | 128 + .../mapper/WeEmpleCodeAnalyseMapper.java | 43 + .../wecom/mapper/WeEmpleCodeMapper.java | 125 + .../mapper/WeEmpleCodeMaterialMapper.java | 52 + .../wecom/mapper/WeEmpleCodeTagMapper.java | 93 + .../mapper/WeEmpleCodeUseScopMapper.java | 100 + .../WeExternalUserMappingUserMapper.java | 24 + .../mapper/WeFlowerCustomerRelMapper.java | 84 + .../mapper/WeFlowerCustomerTagRelMapper.java | 107 + .../wecom/mapper/WeGroupCodeActualMapper.java | 150 + .../wecom/mapper/WeGroupCodeMapper.java | 83 + .../easyink/wecom/mapper/WeGroupMapper.java | 71 + .../wecom/mapper/WeGroupMemberMapper.java | 56 + .../wecom/mapper/WeGroupStatisticMapper.java | 55 + .../mapper/WeGroupTagCategoryMapper.java | 65 + .../wecom/mapper/WeGroupTagMapper.java | 72 + .../wecom/mapper/WeGroupTagRelMapper.java | 55 + .../wecom/mapper/WeMaterialConfigMapper.java | 40 + .../wecom/mapper/WeMaterialMapper.java | 135 + .../wecom/mapper/WeMaterialTagMapper.java | 35 + .../wecom/mapper/WeMaterialTagRelMapper.java | 56 + .../wecom/mapper/WeMessagePushMapper.java | 15 + .../easyink/wecom/mapper/WeMsgTlpMapper.java | 52 + .../wecom/mapper/WeMsgTlpMaterialMapper.java | 36 + .../wecom/mapper/WeMsgTlpScopeMapper.java | 108 + .../mapper/WeMsgTlpSpecialRuleMapper.java | 24 + .../wecom/mapper/WeMyApplicationMapper.java | 57 + .../mapper/WeMyApplicationUseScopeMapper.java | 17 + ...erationsCenterCustomerSopFilterMapper.java | 16 + ...ationsCenterGroupSopFilterCycleMapper.java | 26 + ...eOperationsCenterGroupSopFilterMapper.java | 32 + .../WeOperationsCenterSopDetailMapper.java | 96 + .../mapper/WeOperationsCenterSopMapper.java | 66 + .../WeOperationsCenterSopMaterialMapper.java | 14 + .../WeOperationsCenterSopRulesMapper.java | 42 + .../WeOperationsCenterSopScopeMapper.java | 35 + .../WeOperationsCenterSopTaskMapper.java | 17 + .../mapper/WePresTagGroupTaskMapper.java | 89 + .../mapper/WePresTagGroupTaskScopeMapper.java | 40 + .../mapper/WePresTagGroupTaskStatMapper.java | 50 + .../mapper/WePresTagGroupTaskTagMapper.java | 40 + ...eResignedCustomerTransferRecordMapper.java | 59 + .../WeResignedGroupTransferRecordMapper.java | 35 + .../WeResignedTransferRecordMapper.java | 50 + .../wecom/mapper/WeSensitiveActHitMapper.java | 25 + .../wecom/mapper/WeSensitiveActMapper.java | 14 + .../mapper/WeSensitiveAuditScopeMapper.java | 81 + .../wecom/mapper/WeSensitiveMapper.java | 68 + .../wecom/mapper/WeTagGroupMapper.java | 60 + .../com/easyink/wecom/mapper/WeTagMapper.java | 57 + .../mapper/WeUserBehaviorDataMapper.java | 55 + .../easyink/wecom/mapper/WeUserMapper.java | 172 + .../wecom/mapper/WeUserRoleMapper.java | 86 + .../wecom/mapper/WeWordsCategoryMapper.java | 95 + .../wecom/mapper/WeWordsDetailMapper.java | 52 + .../wecom/mapper/WeWordsGroupMapper.java | 109 + .../wecom/mapper/WeWordsLastUseMapper.java | 32 + ...WeAutoTagCustomerRuleEffectTimeMapper.java | 37 + .../autotag/WeAutoTagCustomerSceneMapper.java | 46 + .../WeAutoTagCustomerSceneTagRelMapper.java | 63 + .../WeAutoTagGroupSceneGroupRelMapper.java | 57 + .../autotag/WeAutoTagGroupSceneMapper.java | 47 + .../WeAutoTagGroupSceneTagRelMapper.java | 66 + .../autotag/WeAutoTagKeywordMapper.java | 57 + .../autotag/WeAutoTagKeywordTagRelMapper.java | 55 + .../WeAutoTagRuleHitCustomerRecordMapper.java | 56 + ...oTagRuleHitCustomerRecordTagRelMapper.java | 48 + .../WeAutoTagRuleHitGroupRecordMapper.java | 56 + ...AutoTagRuleHitGroupRecordTagRelMapper.java | 46 + .../WeAutoTagRuleHitKeywordRecordMapper.java | 63 + ...toTagRuleHitKeywordRecordTagRelMapper.java | 45 + .../mapper/autotag/WeAutoTagRuleMapper.java | 108 + .../autotag/WeAutoTagUserRelMapper.java | 76 + .../moment/WeMomentDetailRelMapper.java | 27 + .../mapper/moment/WeMomentTaskMapper.java | 76 + .../moment/WeMomentTaskResultMapper.java | 14 + .../moment/WeMomentUserCustomerRelMapper.java | 24 + .../mapper/radar/WeRadarChannelMapper.java | 28 + .../radar/WeRadarClickRecordMapper.java | 77 + .../wecom/mapper/radar/WeRadarMapper.java | 77 + .../WeRedeemCodeActivityMapper.java | 100 + .../mapper/redeemcode/WeRedeemCodeMapper.java | 76 + .../mapper/wechatopen/WeOpenConfigMapper.java | 23 + .../ExtendPropertyMultipleOptionService.java | 46 + .../OrderGroupToOrderCustomerService.java | 38 + .../OrderUserToOrderAccountService.java | 93 + .../wecom/service/PageHomeService.java | 54 + .../wecom/service/We3rdAppService.java | 78 + .../wecom/service/WeAccessTokenService.java | 61 + .../service/WeApplicationCenterService.java | 37 + .../service/WeAuthCorpInfoExtendService.java | 38 + .../wecom/service/WeAuthCorpInfoService.java | 77 + .../wecom/service/WeAutoConfigService.java | 66 + .../wecom/service/WeCategoryService.java | 84 + .../service/WeChatContactMappingService.java | 75 + .../service/WeConversationArchiveService.java | 54 + .../wecom/service/WeCorpAccountService.java | 126 + .../WeCustomerExtendPropertyRelService.java | 31 + .../WeCustomerExtendPropertyService.java | 158 + .../WeCustomerMessageOriginalService.java | 58 + .../service/WeCustomerMessagePushService.java | 104 + .../service/WeCustomerMessageService.java | 85 + .../WeCustomerMessgaeResultService.java | 46 + .../service/WeCustomerSeedMessageService.java | 30 + .../wecom/service/WeCustomerService.java | 297 ++ .../service/WeCustomerTrajectoryService.java | 97 + .../WeCustomerTransferConfigService.java | 27 + .../WeCustomerTransferRecordService.java | 86 + .../wecom/service/WeDepartmentService.java | 102 + .../service/WeEmpleCodeAnalyseService.java | 42 + .../service/WeEmpleCodeMaterialService.java | 40 + .../wecom/service/WeEmpleCodeService.java | 142 + .../wecom/service/WeEmpleCodeTagService.java | 89 + .../service/WeEmpleCodeUseScopService.java | 97 + .../WeExternalUserMappingUserService.java | 58 + .../service/WeFlowerCustomerRelService.java | 120 + .../WeFlowerCustomerTagRelService.java | 114 + .../service/WeGroupCodeActualService.java | 175 + .../wecom/service/WeGroupCodeService.java | 118 + .../wecom/service/WeGroupMemberService.java | 57 + .../easyink/wecom/service/WeGroupService.java | 137 + .../wecom/service/WeGroupSopV2Service.java | 35 + .../service/WeGroupStatisticService.java | 58 + .../service/WeGroupTagCategoryService.java | 61 + .../wecom/service/WeGroupTagRelService.java | 49 + .../wecom/service/WeGroupTagService.java | 43 + .../easyink/wecom/service/WeInitService.java | 45 + .../service/WeMaterialConfigService.java | 38 + .../wecom/service/WeMaterialService.java | 164 + .../service/WeMaterialTagRelService.java | 36 + .../wecom/service/WeMaterialTagService.java | 64 + .../wecom/service/WeMessagePushService.java | 53 + .../service/WeMsgTlpMaterialService.java | 130 + .../wecom/service/WeMsgTlpScopeService.java | 46 + .../wecom/service/WeMsgTlpService.java | 99 + .../service/WeMsgTlpSpecialRuleService.java | 43 + .../wecom/service/WeMyApplicationService.java | 75 + .../WeMyApplicationUseScopeService.java | 48 + ...rationsCenterCustomerSopFilterService.java | 32 + ...tionsCenterGroupSopFilterCycleService.java | 43 + ...OperationsCenterGroupSopFilterService.java | 45 + .../WeOperationsCenterSopDetailService.java | 88 + .../WeOperationsCenterSopMaterialService.java | 24 + .../WeOperationsCenterSopRulesService.java | 59 + .../WeOperationsCenterSopScopeService.java | 54 + .../service/WeOperationsCenterSopService.java | 79 + .../WeOperationsCenterSopTaskService.java | 15 + .../service/WePresTagGroupTaskService.java | 189 + ...ResignedCustomerTransferRecordService.java | 22 + .../WeResignedGroupTransferRecordService.java | 13 + .../WeResignedTransferRecordService.java | 123 + .../service/WeSensitiveActHitService.java | 68 + .../wecom/service/WeSensitiveActService.java | 70 + .../service/WeSensitiveAuditScopeService.java | 73 + .../wecom/service/WeSensitiveService.java | 79 + .../wecom/service/WeTagGroupService.java | 95 + .../easyink/wecom/service/WeTagService.java | 63 + .../service/WeUserBehaviorDataService.java | 56 + .../wecom/service/WeUserRoleService.java | 47 + .../easyink/wecom/service/WeUserService.java | 306 ++ .../wecom/service/WeWordsCategoryService.java | 70 + .../wecom/service/WeWordsDetailService.java | 62 + .../wecom/service/WeWordsGroupService.java | 101 + .../wecom/service/WeWordsLastUseService.java | 33 + ...eAutoTagCustomerRuleEffectTimeService.java | 40 + .../WeAutoTagCustomerSceneService.java | 67 + .../WeAutoTagCustomerSceneTagRelService.java | 75 + .../WeAutoTagGroupSceneGroupRelService.java | 87 + .../autotag/WeAutoTagGroupSceneService.java | 57 + .../WeAutoTagGroupSceneTagRelService.java | 79 + .../autotag/WeAutoTagKeywordService.java | 88 + .../WeAutoTagKeywordTagRelService.java | 71 + ...WeAutoTagRuleHitCustomerRecordService.java | 45 + ...TagRuleHitCustomerRecordTagRelService.java | 28 + .../WeAutoTagRuleHitGroupRecordService.java | 59 + ...utoTagRuleHitGroupRecordTagRelService.java | 27 + .../WeAutoTagRuleHitKeywordRecordService.java | 55 + ...oTagRuleHitKeywordRecordTagRelService.java | 28 + .../service/autotag/WeAutoTagRuleService.java | 198 + .../autotag/WeAutoTagUserRelService.java | 79 + ...tendPropertyMultipleOptionServiceImpl.java | 101 + .../OrderGroupToOrderCustomerServiceImpl.java | 83 + .../OrderUserToOrderAccountServiceImpl.java | 182 + .../service/impl/PageHomeServiceImpl.java | 462 +++ .../service/impl/We3rdAppServiceImpl.java | 291 ++ .../impl/WeAccessTokenServiceImpl.java | 299 ++ .../impl/WeApplicationCenterServiceImpl.java | 119 + .../impl/WeAuthCorpInfoExtendServiceImpl.java | 95 + .../impl/WeAuthCorpInfoServiceImpl.java | 197 + .../service/impl/WeAutoConfigServiceImpl.java | 945 +++++ .../service/impl/WeCategoryServiceImpl.java | 264 ++ .../impl/WeChatContactMappingServiceImpl.java | 350 ++ .../WeConversationArchiveServiceImpl.java | 404 ++ .../impl/WeCorpAccountServiceImpl.java | 548 +++ ...eCustomerExtendPropertyRelServiceImpl.java | 79 + .../WeCustomerExtendPropertyServiceImpl.java | 411 ++ .../WeCustomerMessageOriginalServiceImpl.java | 157 + .../WeCustomerMessagePushServiceImpl.java | 554 +++ .../impl/WeCustomerMessageServiceImpl.java | 461 +++ .../WeCustomerMessgaeResultServiceImpl.java | 113 + .../WeCustomerSeedMessageServiceImpl.java | 144 + .../service/impl/WeCustomerServiceImpl.java | 893 +++++ .../impl/WeCustomerTrajectoryServiceImpl.java | 416 ++ .../WeCustomerTransferConfigServiceImpl.java | 60 + .../WeCustomerTransferRecordServiceImpl.java | 264 ++ .../service/impl/WeDepartmentServiceImpl.java | 271 ++ .../impl/WeEmpleCodeAnalyseServiceImpl.java | 111 + .../impl/WeEmpleCodeMaterialServiceImpl.java | 50 + .../service/impl/WeEmpleCodeServiceImpl.java | 797 ++++ .../impl/WeEmpleCodeTagServiceImpl.java | 117 + .../impl/WeEmpleCodeUseScopServiceImpl.java | 149 + .../WeExternalUserMappingUserServiceImpl.java | 190 + .../impl/WeFlowerCustomerRelServiceImpl.java | 304 ++ .../WeFlowerCustomerTagRelServiceImpl.java | 127 + .../impl/WeGroupCodeActualServiceImpl.java | 520 +++ .../service/impl/WeGroupCodeServiceImpl.java | 619 +++ .../impl/WeGroupMemberServiceImpl.java | 151 + .../service/impl/WeGroupServiceImpl.java | 570 +++ .../service/impl/WeGroupSopV2ServiceImpl.java | 478 +++ .../impl/WeGroupStatisticServiceImpl.java | 79 + .../impl/WeGroupTagCategoryServiceImpl.java | 131 + .../impl/WeGroupTagRelServiceImpl.java | 83 + .../service/impl/WeGroupTagServiceImpl.java | 81 + .../wecom/service/impl/WeInitServiceImpl.java | 128 + .../impl/WeMaterialConfigServiceImpl.java | 66 + .../service/impl/WeMaterialServiceImpl.java | 329 ++ .../impl/WeMaterialTagRelServiceImpl.java | 67 + .../impl/WeMaterialTagServiceImpl.java | 157 + .../impl/WeMessagePushServiceImpl.java | 77 + .../impl/WeMsgTlpMaterialServiceImpl.java | 685 ++++ .../impl/WeMsgTlpScopeServiceImpl.java | 88 + .../service/impl/WeMsgTlpServiceImpl.java | 571 +++ .../impl/WeMsgTlpSpecialRuleServiceImpl.java | 169 + .../impl/WeMyApplicationServiceImpl.java | 201 + .../WeMyApplicationUseScopeServiceImpl.java | 195 + ...onsCenterCustomerSopFilterServiceImpl.java | 49 + ...sCenterGroupSopFilterCycleServiceImpl.java | 60 + ...ationsCenterGroupSopFilterServiceImpl.java | 132 + ...eOperationsCenterSopDetailServiceImpl.java | 178 + ...perationsCenterSopMaterialServiceImpl.java | 33 + ...WeOperationsCenterSopRulesServiceImpl.java | 235 ++ ...WeOperationsCenterSopScopeServiceImpl.java | 106 + .../WeOperationsCenterSopServiceImpl.java | 409 ++ .../WeOperationsCenterSopTaskServiceImpl.java | 22 + .../impl/WePresTagGroupTaskServiceImpl.java | 1193 ++++++ ...gnedCustomerTransferRecordServiceImpl.java | 33 + ...esignedGroupTransferRecordServiceImpl.java | 26 + .../WeResignedTransferRecordServiceImpl.java | 323 ++ .../impl/WeSensitiveActHitServiceImpl.java | 225 ++ .../impl/WeSensitiveActServiceImpl.java | 123 + .../WeSensitiveAuditScopeServiceImpl.java | 102 + .../service/impl/WeSensitiveServiceImpl.java | 624 +++ .../service/impl/WeTagGroupServiceImpl.java | 432 +++ .../wecom/service/impl/WeTagServiceImpl.java | 164 + .../impl/WeUserBehaviorDataServiceImpl.java | 77 + .../service/impl/WeUserRoleServiceImpl.java | 107 + .../wecom/service/impl/WeUserServiceImpl.java | 993 +++++ .../impl/WeWordsCategoryServiceImpl.java | 411 ++ .../impl/WeWordsDetailServiceImpl.java | 191 + .../service/impl/WeWordsGroupServiceImpl.java | 420 ++ .../impl/WeWordsLastUseServiceImpl.java | 79 + ...oTagCustomerRuleEffectTimeServiceImpl.java | 84 + .../WeAutoTagCustomerSceneServiceImpl.java | 147 + ...AutoTagCustomerSceneTagRelServiceImpl.java | 160 + ...eAutoTagGroupSceneGroupRelServiceImpl.java | 201 + .../WeAutoTagGroupSceneServiceImpl.java | 114 + .../WeAutoTagGroupSceneTagRelServiceImpl.java | 158 + .../autotag/WeAutoTagKeywordServiceImpl.java | 197 + .../WeAutoTagKeywordTagRelServiceImpl.java | 137 + ...toTagRuleHitCustomerRecordServiceImpl.java | 152 + ...uleHitCustomerRecordTagRelServiceImpl.java | 45 + ...eAutoTagRuleHitGroupRecordServiceImpl.java | 181 + ...agRuleHitGroupRecordTagRelServiceImpl.java | 54 + ...utoTagRuleHitKeywordRecordServiceImpl.java | 256 ++ ...RuleHitKeywordRecordTagRelServiceImpl.java | 64 + .../autotag/WeAutoTagRuleServiceImpl.java | 545 +++ .../autotag/WeAutoTagUserRelServiceImpl.java | 149 + .../moment/WeMomentDetailRelServiceImpl.java | 13 + .../moment/WeMomentTaskResultServiceImpl.java | 13 + .../impl/moment/WeMomentTaskServiceImpl.java | 795 ++++ .../WeMomentUserCustomerRelServiceImpl.java | 19 + .../impl/radar/WeRadarChannelServiceImpl.java | 152 + .../radar/WeRadarClickRecordServiceImpl.java | 227 ++ .../impl/radar/WeRadarServiceImpl.java | 301 ++ .../WeRedeemCodeActivityServiceImpl.java | 244 ++ .../redeemcode/WeRedeemCodeServiceImpl.java | 420 ++ .../moment/WeMomentDetailRelService.java | 15 + .../moment/WeMomentTaskResultService.java | 15 + .../service/moment/WeMomentTaskService.java | 145 + .../WeMomentUserCustomerRelService.java | 15 + .../radar/MiniAppQrCodeUrlHandler.java | 89 + .../wecom/service/radar/RadarUrlHandler.java | 300 ++ .../service/radar/WeRadarChannelService.java | 70 + .../radar/WeRadarClickRecordService.java | 92 + .../wecom/service/radar/WeRadarService.java | 81 + .../WeRedeemCodeActivityService.java | 60 + .../redeemcode/WeRedeemCodeService.java | 62 + .../service/wechatopen/WechatOpenService.java | 62 + .../impl/WechatOpenServiceImpl.java | 185 + .../wecom/strategy/MessageContext.java | 22 + .../SendMessageToUserGroupStrategy.java | 91 + .../strategy/SendMessageToUserStrategy.java | 90 + .../com/easyink/wecom/strategy/Strategy.java | 15 + .../appstrategy/AppConfigHandler.java | 26 + .../appstrategy/AppConfigStrategy.java | 18 + .../YiGeOrderAppConfigStrategy.java | 72 + .../wecom/utils/ApplicationMessageUtil.java | 130 + .../wecom/utils/AttachmentService.java | 185 + .../com/easyink/wecom/utils/JsoupUtil.java | 111 + .../annotation/CustomerTrajectoryRecord.java | 0 .../annotation/aspect/DataScopeAspect.java | 0 .../wecom/annotation/aspect/LogAspect.java | 0 .../easywecom/wecom/client/OrderClient.java | 0 .../wecom/client/We3rdAppClient.java | 0 .../wecom/client/We3rdUserClient.java | 0 .../wecom/client/WeAccessTokenClient.java | 0 .../easywecom/wecom/client/WeAdminClient.java | 0 .../easywecom/wecom/client/WeAgentClient.java | 0 .../wecom/client/WeCropTagClient.java | 0 .../wecom/client/WeCustomerClient.java | 0 .../wecom/client/WeCustomerGroupClient.java | 0 .../client/WeCustomerMessagePushClient.java | 0 .../wecom/client/WeDepartMentClient.java | 0 .../wecom/client/WeExternalContactClient.java | 0 .../wecom/client/WeGroupChatJoinClient.java | 0 .../easywecom/wecom/client/WeMediaClient.java | 0 .../wecom/client/WeMessagePushClient.java | 0 .../wecom/client/WeMomentClient.java | 0 .../wecom/client/WeMsgAuditClient.java | 0 .../wecom/client/WeTicketClient.java | 0 .../easywecom/wecom/client/WeUserClient.java | 0 .../wecom/client/WeWelcomeMsgClient.java | 0 .../wecom/client/WechatOpenClient.java | 0 .../convert/autotag/AddTagRuleConvert.java | 0 .../autotag/TagRuleUserRelConvert.java | 0 .../convert/autotag/UpdateTagRuleConvert.java | 0 .../customer/AddTagRuleCustomerConvert.java | 0 .../UpdateTagRuleCustomerConvert.java | 0 .../autotag/group/AddTagRuleGroupConvert.java | 0 .../group/UpdateTagRuleGroupConvert.java | 0 .../keyword/AddTagRuleKeywordConvert.java | 0 .../keyword/UpdateTagRuleKeywordConvert.java | 0 .../OrderGroupToOrderCustomerEntity.java | 0 .../domain/OrderUserToOrderAccountEntity.java | 0 .../com/easywecom/wecom/domain/WeApp.java | 0 .../wecom/domain/WeApplicationCenter.java | 0 .../wecom/domain/WeAuthCorpInfo.java | 0 .../wecom/domain/WeAuthCorpInfoExtend.java | 0 .../easywecom/wecom/domain/WeCategory.java | 0 .../wecom/domain/WeChatCollection.java | 0 .../wecom/domain/WeChatContactMapping.java | 0 .../easywecom/wecom/domain/WeCustomer.java | 0 .../wecom/domain/WeCustomerAddGroup.java | 0 .../wecom/domain/WeCustomerAddUser.java | 0 .../wecom/domain/WeCustomerMessage.java | 0 .../domain/WeCustomerMessageOriginal.java | 0 .../domain/WeCustomerMessageTimeTask.java | 0 .../wecom/domain/WeCustomerMessgaeResult.java | 0 .../wecom/domain/WeCustomerPortrait.java | 0 .../wecom/domain/WeCustomerSeedMessage.java | 0 .../wecom/domain/WeCustomerSocialConn.java | 0 .../wecom/domain/WeCustomerTagRel.java | 0 .../wecom/domain/WeCustomerTrajectory.java | 0 .../easywecom/wecom/domain/WeEmpleCode.java | 0 .../wecom/domain/WeEmpleCodeAnalyse.java | 0 .../wecom/domain/WeEmpleCodeMaterial.java | 0 .../wecom/domain/WeEmpleCodeTag.java | 0 .../wecom/domain/WeEmpleCodeUseScop.java | 0 .../domain/WeExternalUserMappingUser.java | 0 .../wecom/domain/WeFlowerCustomerRel.java | 0 .../wecom/domain/WeFlowerCustomerTagRel.java | 0 .../com/easywecom/wecom/domain/WeGroup.java | 0 .../easywecom/wecom/domain/WeGroupCode.java | 0 .../wecom/domain/WeGroupCodeActual.java | 0 .../easywecom/wecom/domain/WeGroupMember.java | 0 .../easywecom/wecom/domain/WeGroupSop.java | 0 .../wecom/domain/WeGroupSopChat.java | 0 .../wecom/domain/WeGroupSopMaterial.java | 0 .../easywecom/wecom/domain/WeGroupSopPic.java | 0 .../wecom/domain/WeGroupStatistic.java | 0 .../easywecom/wecom/domain/WeGroupTag.java | 0 .../wecom/domain/WeGroupTagCategory.java | 0 .../easywecom/wecom/domain/WeGroupTagRel.java | 0 .../easywecom/wecom/domain/WeH5TicketDto.java | 0 .../wecom/domain/WeKeywordGroupTask.java | 0 .../easywecom/wecom/domain/WeLeaveUser.java | 0 .../easywecom/wecom/domain/WeMaterial.java | 0 .../wecom/domain/WeMaterialConfig.java | 0 .../wecom/domain/WeMaterialTagEntity.java | 0 .../wecom/domain/WeMaterialTagRelEntity.java | 0 .../easywecom/wecom/domain/WeMessagePush.java | 0 .../com/easywecom/wecom/domain/WeMsgTlp.java | 0 .../wecom/domain/WeMsgTlpMaterial.java | 0 .../wecom/domain/WeMsgTlpMaterialRel.java | 0 .../easywecom/wecom/domain/WeMsgTlpScope.java | 0 .../wecom/domain/WeMsgTlpSpecialRule.java | 0 .../wecom/domain/WeMyApplication.java | 0 .../domain/WeMyApplicationUseScopeEntity.java | 0 ...erationsCenterCustomerSopFilterEntity.java | 0 ...ationsCenterGroupSopFilterCycleEntity.java | 0 ...eOperationsCenterGroupSopFilterEntity.java | 0 .../WeOperationsCenterSopDetailEntity.java | 0 .../domain/WeOperationsCenterSopEntity.java | 0 .../WeOperationsCenterSopMaterialEntity.java | 0 .../WeOperationsCenterSopRulesEntity.java | 0 .../WeOperationsCenterSopScopeEntity.java | 0 .../WeOperationsCenterSopTaskEntity.java | 0 .../wecom/domain/WePresTagGroupTask.java | 0 .../wecom/domain/WePresTagGroupTaskScope.java | 0 .../wecom/domain/WePresTagGroupTaskStat.java | 0 .../wecom/domain/WePresTagGroupTaskTag.java | 0 .../WeRedeemCodeWelcomeMsgAndMaterial.java | 0 .../easywecom/wecom/domain/WeSensitive.java | 0 .../wecom/domain/WeSensitiveAct.java | 0 .../wecom/domain/WeSensitiveActHit.java | 0 .../wecom/domain/WeSensitiveAuditScope.java | 0 .../com/easywecom/wecom/domain/WeTag.java | 0 .../easywecom/wecom/domain/WeTagGroup.java | 0 .../wecom/domain/WeUserBehaviorData.java | 0 .../easywecom/wecom/domain/WeUserRole.java | 0 .../wecom/domain/WeWordsCategory.java | 0 .../wecom/domain/WeWordsDetailEntity.java | 0 .../wecom/domain/WeWordsGroupEntity.java | 0 .../wecom/domain/WeWordsLastUseEntity.java | 0 .../wecom/domain/dto/AddWeMaterialDTO.java | 0 .../domain/dto/AllocateWeCustomerDTO.java | 0 .../domain/dto/AllocateWeCustomerV2DTO.java | 0 .../wecom/domain/dto/AllocateWeGroupDTO.java | 0 .../wecom/domain/dto/AutoConfigDTO.java | 0 .../wecom/domain/dto/BaseApplicationDTO.java | 0 .../BatchSaveCustomerExtendPropertyDTO.java | 0 .../domain/dto/BatchUpdateUserInfoDTO.java | 0 .../wecom/domain/dto/BindDetailDTO.java | 0 .../wecom/domain/dto/FindWeGroupCodeDTO.java | 0 .../wecom/domain/dto/FindWeGroupDTO.java | 0 .../domain/dto/FindWeGroupMemberDTO.java | 0 .../wecom/domain/dto/FindWeMaterialDTO.java | 0 .../wecom/domain/dto/GetJoinQrCodeResp.java | 0 .../domain/dto/GroupChatStatisticDTO.java | 0 .../wecom/domain/dto/LeaveWeUserListsDTO.java | 0 .../wecom/domain/dto/QueryApplicationDTO.java | 0 .../dto/QueryCustomerExtendPropertyDTO.java | 0 .../domain/dto/QueryPresTagGroupDTO.java | 0 .../domain/dto/QueryPresTagGroupStatDTO.java | 0 .../wecom/domain/dto/QueryUserDTO.java | 0 .../wecom/domain/dto/RemoveMaterialDTO.java | 0 .../wecom/domain/dto/ResetCategoryDTO.java | 0 .../wecom/domain/dto/RestoreMaterialDTO.java | 0 .../dto/SaveCustomerExtendPropertyDTO.java | 0 .../domain/dto/SetApplicationUseScopeDTO.java | 0 .../domain/dto/ShowMaterialSwitchDTO.java | 0 .../domain/dto/TemporaryMaterialDTO.java | 0 .../wecom/domain/dto/UnBindOrderDTO.java | 0 .../domain/dto/UpdateApplicationDTO.java | 0 .../domain/dto/UpdateUserInfoDetailDTO.java | 0 .../wecom/domain/dto/UpdateWeMaterialDTO.java | 0 .../wecom/domain/dto/UserBehaviorDataDTO.java | 0 .../wecom/domain/dto/WeAccessTokenDTO.java | 0 .../domain/dto/WeAccessUserInfo3rdDTO.java | 0 .../easywecom/wecom/domain/dto/WeAppDTO.java | 0 .../dto/WeCategorySidebarSwitchDTO.java | 0 .../wecom/domain/dto/WeChatCollectionDTO.java | 0 .../wecom/domain/dto/WeChatUserDTO.java | 0 .../domain/dto/WeCommunityNewGroupDTO.java | 0 .../wecom/domain/dto/WeCustomerDTO.java | 0 .../domain/dto/WeCustomerExtendRest.java | 0 .../domain/dto/WeCustomerMessageDTO.java | 0 .../dto/WeCustomerMessagePushResultDTO.java | 0 .../dto/WeCustomerMessageToUserDTO.java | 0 .../domain/dto/WeCustomerPushMessageDTO.java | 0 .../wecom/domain/dto/WeDepartMentDTO.java | 0 .../wecom/domain/dto/WeEmpleCodeDTO.java | 0 .../domain/dto/WeExternalContactDTO.java | 0 .../wecom/domain/dto/WeGroupExtendDTO.java | 0 .../wecom/domain/dto/WeGroupMemberDTO.java | 0 .../wecom/domain/dto/WeGroupSopDTO.java | 0 .../domain/dto/WeKeywordGroupTaskDTO.java | 0 .../wecom/domain/dto/WeLoginUserInfoDTO.java | 0 .../wecom/domain/dto/WeMaterialDTO.java | 0 .../wecom/domain/dto/WeMaterialTagDTO.java | 0 .../domain/dto/WeMaterialTagRelRemoveDTO.java | 0 .../wecom/domain/dto/WeMediaDTO.java | 0 .../wecom/domain/dto/WeMessagePushDTO.java | 0 .../domain/dto/WeMessagePushGroupDTO.java | 0 .../domain/dto/WeMessagePushResultDTO.java | 0 .../dto/WeOperationsCenterSopSearchDTO.java | 0 .../wecom/domain/dto/WePageCountDTO.java | 0 .../wecom/domain/dto/WePageStaticDataDTO.java | 0 .../wecom/domain/dto/WePermanentCodeDTO.java | 0 .../domain/dto/WePresTagGroupTaskDTO.java | 0 .../wecom/domain/dto/WeResultDTO.java | 0 .../easywecom/wecom/domain/dto/WeTagDTO.java | 0 .../easywecom/wecom/domain/dto/WeUserDTO.java | 0 .../wecom/domain/dto/WeUserInfoDTO.java | 0 .../wecom/domain/dto/WeUserListDTO.java | 0 .../wecom/domain/dto/WeWelcomeMsg.java | 0 .../domain/dto/WeWordsChangeSortDTO.java | 0 .../wecom/domain/dto/WeWordsDTO.java | 0 .../wecom/domain/dto/WeWordsDelDTO.java | 0 .../wecom/domain/dto/WeWordsImportDTO.java | 0 .../wecom/domain/dto/WeWordsQueryDTO.java | 0 .../wecom/domain/dto/WeWordsSortDTO.java | 0 .../domain/dto/app/ToOpenCorpIdResp.java | 0 .../dto/app/UserIdToOpenUserIdResp.java | 0 .../wecom/domain/dto/app/WeAdminListResp.java | 0 .../domain/dto/app/WePermanentCodeResp.java | 0 .../domain/dto/app/WePreAuthCodeResp.java | 0 .../wecom/domain/dto/app/WeSuiteTokenReq.java | 0 .../domain/dto/app/WeSuiteTokenResp.java | 0 .../dto/autoconfig/BaseAdminResult.java | 0 .../DomainOwnershipVerifyInfoResp.java | 0 .../dto/autoconfig/InitApplicationModel.java | 0 .../dto/autoconfig/MobileConfirmResp.java | 0 .../autoconfig/WeApiAccessibleAppsResp.java | 0 .../autoconfig/WeCheckCustomAppUrlResp.java | 0 .../dto/autoconfig/WeConfirmMobileRsp.java | 0 .../dto/autoconfig/WeCorpApplicationResp.java | 0 .../dto/autoconfig/WeGetChatMenuResp.java | 0 .../dto/autoconfig/WeGetGroupListResp.java | 0 .../domain/dto/autoconfig/WeGetKeyResp.java | 0 .../domain/dto/autoconfig/WeLoginResp.java | 0 .../dto/autotag/AbstractTagRuleDTO.java | 0 .../autotag/AbstractTagRuleWithUserDTO.java | 0 .../dto/autotag/TagRuleBatchStatusDTO.java | 0 .../wecom/domain/dto/autotag/TagRuleDTO.java | 0 .../domain/dto/autotag/TagRuleDeleteDTO.java | 0 .../dto/autotag/TagRuleWithUserDTO.java | 0 .../customer/AbstractCustomerTagRuleDTO.java | 0 .../customer/AddCustomerTagRuleDTO.java | 0 .../autotag/customer/CustomerSceneDTO.java | 0 .../autotag/customer/CustomerTagRuleDTO.java | 0 .../customer/UpdateCustomerTagRuleDTO.java | 0 .../group/AbstractGroupTagRuleDTO.java | 0 .../dto/autotag/group/AddGroupTagRuleDTO.java | 0 .../dto/autotag/group/GroupSceneDTO.java | 0 .../dto/autotag/group/GroupTagRuleDTO.java | 0 .../autotag/group/UpdateGroupTagRuleDTO.java | 0 .../keyword/AbstractKeywordTagRuleDTO.java | 0 .../autotag/keyword/AddKeywordTagRuleDTO.java | 0 .../autotag/keyword/KeywordTagRuleDTO.java | 0 .../keyword/UpdateKeywordTagRuleDTO.java | 0 .../dto/autotag/test/KeywordTextListDTO.java | 0 .../wecom/domain/dto/common/Attachment.java | 0 .../domain/dto/common/AttachmentParam.java | 0 .../wecom/domain/dto/common/Attachments.java | 0 .../wecom/domain/dto/common/File.java | 0 .../wecom/domain/dto/common/Image.java | 0 .../wecom/domain/dto/common/Link.java | 0 .../wecom/domain/dto/common/Messages.java | 0 .../wecom/domain/dto/common/MiniProgram.java | 0 .../wecom/domain/dto/common/Text.java | 0 .../wecom/domain/dto/common/Video.java | 0 .../dto/customer/CustomerGroupDetail.java | 0 .../dto/customer/CustomerGroupList.java | 0 .../dto/customer/CustomerGroupMember.java | 0 .../CustomerGroupMemberInvitorDetail.java | 0 .../domain/dto/customer/CustomerTagEdit.java | 0 .../domain/dto/customer/EditCustomerDTO.java | 0 .../domain/dto/customer/ExternalContact.java | 0 .../dto/customer/ExternalUserDetail.java | 0 .../domain/dto/customer/ExternalUserTag.java | 0 .../wecom/domain/dto/customer/FollowInfo.java | 0 .../wecom/domain/dto/customer/FollowUser.java | 0 .../domain/dto/customer/FollowUserList.java | 0 .../dto/customer/GetExternalDetailResp.java | 0 .../domain/dto/customer/req/GetByUserReq.java | 0 .../dto/customer/resp/GetByUserResp.java | 0 .../dto/customersop/AddWeCustomerSopDTO.java | 0 .../wecom/domain/dto/customersop/Column.java | 0 .../domain/dto/customersop/EditUserDTO.java | 0 .../dto/emplecode/AddWeEmpleCodeDTO.java | 0 .../emplecode/FindWeEmpleCodeAnalyseDTO.java | 0 .../dto/emplecode/FindWeEmpleCodeDTO.java | 0 .../dto/emplecode/UpdateWeEmplyCodeDTO.java | 0 .../domain/dto/group/AddJoinWayConfigDTO.java | 0 .../domain/dto/group/AddJoinWayResult.java | 0 .../domain/dto/group/DelJoinWayConfigDTO.java | 0 .../domain/dto/group/DelJoinWayResult.java | 0 .../domain/dto/group/GetJoinWayConfigDTO.java | 0 .../domain/dto/group/GetJoinWayResult.java | 0 .../domain/dto/group/GroupChatListReq.java | 0 .../domain/dto/group/GroupChatListResp.java | 0 .../dto/group/UpdateJoinWayConfigDTO.java | 0 .../domain/dto/group/UpdateJoinWayResult.java | 0 .../domain/dto/groupcode/AddCorpCodeDTO.java | 0 .../domain/dto/groupcode/EditCorpCodeDTO.java | 0 .../dto/groupsop/AddGroupSopFilterDTO.java | 0 .../domain/dto/groupsop/AddWeGroupSopDTO.java | 0 .../AddWeOperationsCenterSopRuleDTO.java | 0 .../domain/dto/groupsop/DelWeGroupSopDTO.java | 0 .../dto/groupsop/FindWeGroupSopDTO.java | 0 .../dto/groupsop/FindWeSopDetailDTO.java | 0 .../groupsop/FindWeSopExecutedRulesDTO.java | 0 .../groupsop/FindWeSopExecutedUsersDTO.java | 0 .../dto/groupsop/GetSopTaskDetailDTO.java | 0 .../dto/groupsop/SopBatchSwitchDTO.java | 0 .../domain/dto/groupsop/UpdateWeSopDTO.java | 0 .../domain/dto/message/AsyncResultDTO.java | 0 .../wecom/domain/dto/message/Attachment.java | 0 .../dto/message/CustomerMessagePushDTO.java | 0 .../message/DetailMessageStatusResultDTO.java | 0 .../wecom/domain/dto/message/FileDTO.java | 0 .../domain/dto/message/ImageMessageDTO.java | 0 .../domain/dto/message/LinkMessageDTO.java | 0 .../dto/message/MiniprogramMessageDTO.java | 0 .../QueryCustomerMessageStatusResultDTO.java | 0 ...tomerMessageStatusResultDataObjectDTO.java | 0 .../domain/dto/message/RadarMessageDTO.java | 0 .../dto/message/SendMessageResultDTO.java | 0 .../domain/dto/message/TextMessageDTO.java | 0 .../wecom/domain/dto/message/VideoDTO.java | 0 .../dto/message/WeCustomerMessagePushDTO.java | 0 .../domain/dto/moment/AddMomentTaskDTO.java | 0 .../dto/moment/CreateMomentTaskDTO.java | 0 .../domain/dto/moment/MomentAttachment.java | 0 .../domain/dto/moment/MomentCommentsDTO.java | 0 .../domain/dto/moment/MomentCustomerDTO.java | 0 .../domain/dto/moment/MomentListDTO.java | 0 .../domain/dto/moment/MomentStrategyDTO.java | 0 .../dto/moment/MomentStrategyGetDTO.java | 0 .../domain/dto/moment/MomentTaskDTO.java | 0 .../dto/moment/MomentUserCustomerDTO.java | 0 .../dto/moment/SearchMomentContentDTO.java | 0 .../domain/dto/moment/SendToUserDTO.java | 0 .../domain/dto/msgaudit/WeMsgAuditDTO.java | 0 .../dto/pro/EditCustomerFromPlusDTO.java | 0 .../dto/pro/QueryCustomerFromPlusDTO.java | 0 .../dto/radar/DeleteRadarChannelDTO.java | 0 .../domain/dto/radar/DeleteRadarDTO.java | 0 .../domain/dto/radar/GetRadarShortUrlDTO.java | 0 .../domain/dto/radar/RadarChannelDTO.java | 0 .../domain/dto/radar/RadarClickRecordDTO.java | 0 .../wecom/domain/dto/radar/RadarDTO.java | 0 .../dto/radar/SearchChannelRecordDTO.java | 0 .../radar/SearchChannelRecordDetailDTO.java | 0 .../dto/radar/SearchCustomerRecordDTO.java | 0 .../radar/SearchCustomerRecordDetailDTO.java | 0 .../dto/radar/SearchRadarAnalyseDTO.java | 0 .../dto/radar/SearchRadarChannelDTO.java | 0 .../domain/dto/radar/SearchRadarDTO.java | 0 .../redeemcode/WeRedeemCodeActivityDTO.java | 0 .../WeRedeemCodeActivityDeleteDTO.java | 0 .../dto/redeemcode/WeRedeemCodeDTO.java | 0 .../dto/redeemcode/WeRedeemCodeDeleteDTO.java | 0 .../dto/redeemcode/WeRedeemCodeImportDTO.java | 0 .../dto/tag/RemoveWeCustomerTagDTO.java | 0 .../wecom/domain/dto/tag/WeCropDelDTO.java | 0 .../domain/dto/tag/WeCropGropTagDtlDTO.java | 0 .../domain/dto/tag/WeCropGroupTagDTO.java | 0 .../domain/dto/tag/WeCropGroupTagListDTO.java | 0 .../wecom/domain/dto/tag/WeCropTagDTO.java | 0 .../domain/dto/tag/WeFindCropTagParam.java | 0 .../wecom/domain/dto/tag/WeGroupTagDTO.java | 0 .../domain/dto/tag/WeMaterialTagAddDTO.java | 0 .../dto/tag/WeWordsModifyCategoryDTO.java | 0 .../GetResignedTransferDetailDTO.java | 0 .../dto/transfer/GetUnassignedListReq.java | 0 .../dto/transfer/GetUnassignedListResp.java | 0 .../dto/transfer/TransferCustomerDTO.java | 0 .../dto/transfer/TransferCustomerReq.java | 0 .../dto/transfer/TransferCustomerResp.java | 0 .../dto/transfer/TransferRecordPageDTO.java | 0 .../transfer/TransferResignedCustomerReq.java | 0 .../TransferResignedCustomerResp.java | 0 .../TransferResignedGroupChatReq.java | 0 .../TransferResignedGroupChatResp.java | 0 .../dto/transfer/TransferResignedUserDTO.java | 0 .../transfer/TransferResignedUserListDTO.java | 0 .../dto/transfer/TransferResultReq.java | 0 .../transfer/TransferResultResignedReq.java | 0 .../transfer/TransferResultResignedResp.java | 0 .../dto/transfer/TransferResultResp.java | 0 .../wecom/domain/dto/unBindCustomerDTO.java | 0 .../wegrouptag/AddWeGroupTagCategoryDTO.java | 0 .../domain/dto/wegrouptag/BatchTagRelDTO.java | 0 .../wegrouptag/DelWeGroupTagCategoryDTO.java | 0 .../wegrouptag/FindWeGroupTagCategoryDTO.java | 0 .../wegrouptag/PageWeGroupTagCategoryDTO.java | 0 .../UpdateWeGroupTagCategoryDTO.java | 0 .../dto/welcomemsg/GroupWelcomeMsgAddDTO.java | 0 .../welcomemsg/GroupWelcomeMsgDeleteDTO.java | 0 .../dto/welcomemsg/GroupWelcomeMsgResult.java | 0 .../welcomemsg/GroupWelcomeMsgUpdateDTO.java | 0 .../HitSpecialWelcomeMsgMaterialVO.java | 0 .../dto/welcomemsg/WelComeMsgAddDTO.java | 0 .../dto/welcomemsg/WelComeMsgDeleteDTO.java | 0 .../dto/welcomemsg/WelComeMsgUpdateDTO.java | 0 .../welcomemsg/WelComeMsgUpdateEmployDTO.java | 0 .../welcomemsg/WelComeMsgUpdateGroupDTO.java | 0 .../wordscategory/AddWeWordsCategoryDTO.java | 0 .../DeleteWeWordsCategoryDTO.java | 0 .../wordscategory/FindWeWordsCategoryDTO.java | 0 .../UpdateWeWordsCategoryDTO.java | 0 .../WeWordsCategoryChangeSort.java | 0 .../WeWordsCategoryChangeSortDTO.java | 0 .../WeWordsCategoryChildSortDTO.java | 0 .../domain/entity/BaseExternalUserEntity.java | 0 .../domain/entity/WeCustomerExportDTO.java | 0 .../entity/appconfig/YiGeOrderAppConfig.java | 0 .../WeAutoTagCustomerRuleEffectTime.java | 0 .../autotag/WeAutoTagCustomerScene.java | 0 .../autotag/WeAutoTagCustomerSceneTagRel.java | 0 .../entity/autotag/WeAutoTagGroupScene.java | 0 .../autotag/WeAutoTagGroupSceneGroupRel.java | 0 .../autotag/WeAutoTagGroupSceneTagRel.java | 0 .../entity/autotag/WeAutoTagKeyword.java | 0 .../autotag/WeAutoTagKeywordTagRel.java | 0 .../domain/entity/autotag/WeAutoTagRule.java | 0 .../WeAutoTagRuleHitCustomerRecord.java | 0 .../WeAutoTagRuleHitCustomerRecordTagRel.java | 0 .../autotag/WeAutoTagRuleHitGroupRecord.java | 0 .../WeAutoTagRuleHitGroupRecordTagRel.java | 0 .../WeAutoTagRuleHitKeywordRecord.java | 0 .../WeAutoTagRuleHitKeywordRecordTagRel.java | 0 .../entity/autotag/WeAutoTagUserRel.java | 0 .../ExtendPropertyMultipleOption.java | 0 .../customer/WeCustomerExtendProperty.java | 0 .../customer/WeCustomerExtendPropertyRel.java | 0 .../wecom/domain/entity/moment/Location.java | 0 .../wecom/domain/entity/moment/Moment.java | 0 .../domain/entity/moment/MomentComments.java | 0 .../domain/entity/moment/MomentCustomer.java | 0 .../domain/entity/moment/MomentStrategy.java | 0 .../domain/entity/moment/MomentTask.java | 0 .../wecom/domain/entity/moment/Privilege.java | 0 .../domain/entity/moment/VisibleRange.java | 0 .../moment/WeMomentDetailRelEntity.java | 0 .../entity/moment/WeMomentTaskEntity.java | 0 .../moment/WeMomentTaskResultEntity.java | 0 .../moment/WeMomentUserCustomerRelEntity.java | 0 .../wecom/domain/entity/radar/WeRadar.java | 0 .../domain/entity/radar/WeRadarChannel.java | 0 .../entity/radar/WeRadarClickRecord.java | 0 .../wecom/domain/entity/radar/WeRadarTag.java | 0 .../wecom/domain/entity/radar/WeRadarUrl.java | 0 .../redeemcode/RedeemCodeAlarmUser.java | 0 .../entity/redeemcode/WeRedeemCode.java | 0 .../redeemcode/WeRedeemCodeActivity.java | 0 .../transfer/WeCustomerTransferConfig.java | 0 .../transfer/WeCustomerTransferRecord.java | 0 .../WeResignedCustomerTransferRecord.java | 0 .../WeResignedGroupTransferRecord.java | 0 .../transfer/WeResignedTransferRecord.java | 0 .../entity/wechatopen/WeOpenConfig.java | 0 .../easywecom/wecom/domain/order/Order.java | 0 .../wecom/domain/order/OrderBaseResp.java | 0 .../wecom/domain/order/OrderBindInfoDTO.java | 0 .../wecom/domain/order/OrderBindInfoVO.java | 0 .../wecom/domain/order/OrderCreate.java | 0 .../wecom/domain/order/OrderCreateDTO.java | 0 .../wecom/domain/order/OrderCustomer.java | 0 .../wecom/domain/order/OrderDetailDTO.java | 0 .../wecom/domain/order/OrderHadlerDTO.java | 0 .../wecom/domain/order/OrderHandlerVO.java | 0 .../wecom/domain/order/OrderListDTO.java | 0 .../wecom/domain/order/OrderListMainVO.java | 0 .../wecom/domain/order/OrderListVO.java | 0 .../wecom/domain/order/OrderLoginVO.java | 0 .../wecom/domain/order/OrderNetworkVO.java | 0 .../wecom/domain/order/OrderTotal.java | 0 .../wecom/domain/order/OrderTotalDTO.java | 0 .../wecom/domain/order/OrderUser.java | 0 .../wecom/domain/order/OrderVerifyVO.java | 0 .../domain/query/GroupChatStatisticQuery.java | 0 .../domain/query/UserBehaviorDataQuery.java | 0 .../wecom/domain/query/WePageStateQuery.java | 0 .../domain/query/WeSensitiveHitQuery.java | 0 .../autotag/CustomerTagRuleRecordQuery.java | 0 .../autotag/GroupTagRuleRecordQuery.java | 0 .../domain/query/autotag/RuleInfoQuery.java | 0 .../domain/query/autotag/TagRuleQuery.java | 0 .../TagRuleRecordKeywordDetailQuery.java | 0 .../query/autotag/TagRuleRecordQuery.java | 0 .../query/groupcode/GroupCodeDetailQuery.java | 0 .../wecom/domain/req/GenerateUrlLinkReq.java | 0 .../domain/req/UnionId2ExternalUserIdReq.java | 0 .../wecom/domain/req/WePageBaseReq.java | 0 .../domain/resp/GenerateUrlLinkResp.java | 0 .../wecom/domain/resp/GetAccessTokenResp.java | 0 .../wecom/domain/resp/GetAgentResp.java | 0 .../domain/resp/GetOfficialAuthInfoResp.java | 0 .../domain/resp/GetUnionUserInfoResp.java | 0 .../wecom/domain/resp/SnsUserInfoResp.java | 0 .../resp/UnionId2ExternalUserIdResp.java | 0 .../wecom/domain/resp/WePageBaseResp.java | 0 .../wecom/domain/resp/WechatOpenBaseResp.java | 0 .../domain/vo/AllocateLeaveUserResp.java | 0 .../domain/vo/AllocateWeCustomerResp.java | 0 .../wecom/domain/vo/AllocateWeGroupResp.java | 0 .../easywecom/wecom/domain/vo/AppIdVO.java | 0 .../domain/vo/ApplicationIntroductionVO.java | 0 .../domain/vo/BatchUpdateUserInfoVO.java | 0 .../wecom/domain/vo/BindDetailVO.java | 0 .../wecom/domain/vo/BindOrderTotalVO.java | 0 .../wecom/domain/vo/CheckCorpIdVO.java | 0 .../domain/vo/ConversationArchiveVO.java | 0 .../domain/vo/CustomerMessagePushVO.java | 0 .../wecom/domain/vo/FindCollectionsVO.java | 0 .../vo/FindExistWordsCategoryNameList.java | 0 .../domain/vo/FindWeGroupMemberCountVO.java | 0 .../wecom/domain/vo/GetWeEmployCodeVO.java | 0 .../wecom/domain/vo/InsertWeMaterialVO.java | 0 .../wecom/domain/vo/MomentStrategyGetVO.java | 0 .../vo/MyApplicationIntroductionVO.java | 0 .../domain/vo/PresTagExpectedReceptionVO.java | 0 .../domain/vo/QueryCustomerFromPlusVO.java | 0 .../wecom/domain/vo/ReleaseNotesVO.java | 0 .../vo/SelectWeEmplyCodeWelcomeMsgVO.java | 0 .../wecom/domain/vo/SuiteAuthStatusVO.java | 0 .../wecom/domain/vo/WeAdminQrcodeVO.java | 0 .../domain/vo/WeAllocateCustomersVO.java | 0 .../wecom/domain/vo/WeAllocateGroupsVO.java | 0 .../domain/vo/WeApplicationDetailVO.java | 0 .../wecom/domain/vo/WeCategoryBaseInfoVO.java | 0 .../wecom/domain/vo/WeCategoryVO.java | 0 .../wecom/domain/vo/WeCheckQrcodeVO.java | 0 .../domain/vo/WeCommunityNewGroupVO.java | 0 .../domain/vo/WeCommunityTaskEmplVO.java | 0 .../wecom/domain/vo/WeCorpInfoVO.java | 0 .../wecom/domain/vo/WeCustomerExportVO.java | 0 .../domain/vo/WeCustomerMakeLabelVO.java | 0 .../domain/vo/WeCustomerMessageResultVO.java | 0 .../domain/vo/WeCustomerNameAndUserIdVO.java | 0 .../domain/vo/WeCustomerSearchTermVO.java | 0 .../domain/vo/WeCustomerSeedMessageVO.java | 0 .../wecom/domain/vo/WeEmpleCodeVO.java | 0 .../domain/vo/WeEmplyCodeAnalyseCountVO.java | 0 .../wecom/domain/vo/WeEmplyCodeAnalyseVO.java | 0 .../domain/vo/WeEmplyCodeDownloadVO.java | 0 .../domain/vo/WeEmplyCodeScopeUserVO.java | 0 .../domain/vo/WeGroupCodeActualExistVO.java | 0 .../wecom/domain/vo/WeGroupCodeVO.java | 0 .../wecom/domain/vo/WeGroupSopVO.java | 0 .../domain/vo/WeInternalPreLoginParamVO.java | 0 .../wecom/domain/vo/WeLeaveAllocateVO.java | 0 .../domain/vo/WeLeaveUserInfoAllocateVO.java | 0 .../wecom/domain/vo/WeLeaveUserV2VO.java | 0 .../wecom/domain/vo/WeLeaveUserVO.java | 0 .../wecom/domain/vo/WeMakeCustomerTagVO.java | 0 .../wecom/domain/vo/WeMaterialAndTagRel.java | 0 .../wecom/domain/vo/WeMaterialCountVO.java | 0 .../wecom/domain/vo/WeMaterialFileVO.java | 0 .../wecom/domain/vo/WeMaterialTagVO.java | 0 .../wecom/domain/vo/WeMaterialVO.java | 0 .../wecom/domain/vo/WeMsgAuditVO.java | 0 .../domain/vo/WeOperationsCenterSopVo.java | 0 .../wecom/domain/vo/WePreAuthCodeVO.java | 0 .../wecom/domain/vo/WePreLoginParamVO.java | 0 .../vo/WePresTagGroupTaskStatResultVO.java | 0 .../domain/vo/WePresTagGroupTaskStatVO.java | 0 .../wecom/domain/vo/WePresTagGroupTaskVO.java | 0 .../wecom/domain/vo/WeServerTypeVO.java | 0 .../wecom/domain/vo/WeUserBriefInfoVO.java | 0 .../wecom/domain/vo/WeUserInfoVO.java | 0 .../easywecom/wecom/domain/vo/WeUserVO.java | 0 .../wecom/domain/vo/WeWordsCategoryVO.java | 0 .../wecom/domain/vo/WeWordsImportVO.java | 0 .../wecom/domain/vo/WeWordsUrlVO.java | 0 .../easywecom/wecom/domain/vo/WeWordsVO.java | 0 .../wecom/domain/vo/WxCpXmlMessageVO.java | 0 .../wecom/domain/vo/autotag/GroupInfoVO.java | 0 .../wecom/domain/vo/autotag/TagInfoVO.java | 0 .../vo/autotag/TagRuleDepartmentInfoVO.java | 0 .../domain/vo/autotag/TagRuleInfoVO.java | 0 .../domain/vo/autotag/TagRuleListVO.java | 0 .../domain/vo/autotag/TagRuleUserInfoVO.java | 0 .../domain/vo/autotag/TagRuleUserListVO.java | 0 .../vo/autotag/customer/CustomerSceneVO.java | 0 .../customer/TagRuleCustomerInfoVO.java | 0 .../vo/autotag/group/GroupSceneRuleVO.java | 0 .../domain/vo/autotag/group/GroupSceneVO.java | 0 .../vo/autotag/group/TagRuleGroupInfoVO.java | 0 .../autotag/keyword/TagRuleKeywordInfoVO.java | 0 .../vo/autotag/record/CustomerCountVO.java | 0 .../vo/autotag/record/TagRuleRecordVO.java | 0 .../customer/CustomerTagRuleRecordVO.java | 0 .../record/group/GroupTagRuleRecordVO.java | 0 .../record/keyword/KeywordRecordDetailVO.java | 0 .../keyword/KeywordTagRuleRecordVO.java | 0 .../domain/vo/customer/WeCustomerSumVO.java | 0 .../vo/customer/WeCustomerUserListVO.java | 0 .../domain/vo/customer/WeCustomerVO.java | 0 .../groupcode/GroupCodeActivityFirstVO.java | 0 .../vo/groupcode/GroupCodeDetailVO.java | 0 .../domain/vo/groupcode/GroupDetailVO.java | 0 .../domain/vo/moment/AddMomentTaskVO.java | 0 .../domain/vo/moment/MomentAttachmentVO.java | 0 .../domain/vo/moment/MomentCommentsVO.java | 0 .../domain/vo/moment/MomentCustomerVO.java | 0 .../wecom/domain/vo/moment/MomentListVO.java | 0 .../vo/moment/MomentStrategyListVO.java | 0 .../domain/vo/moment/MomentTaskResultVO.java | 0 .../wecom/domain/vo/moment/MomentTaskVO.java | 0 .../wecom/domain/vo/moment/MomentTotalVO.java | 0 .../vo/moment/MomentUserCustomerVO.java | 0 .../domain/vo/moment/SearchMomentVO.java | 0 .../domain/vo/radar/RadarAnalyseCountVO.java | 0 .../wecom/domain/vo/radar/RadarAnalyseVO.java | 0 .../vo/radar/RadarChannelRecordDetailVO.java | 0 .../domain/vo/radar/RadarChannelRecordVO.java | 0 .../domain/vo/radar/RadarChannelSortVO.java | 0 .../RadarCustomerClickRecordDetailVO.java | 0 .../vo/radar/RadarCustomerRecordVO.java | 0 .../domain/vo/radar/RadarRecordTotalVO.java | 0 .../vo/radar/RadarSumClickRecordVO.java | 0 .../domain/vo/radar/WeRadarChannelVO.java | 0 .../wecom/domain/vo/radar/WeRadarVO.java | 0 .../vo/redeemcode/ImportRedeemCodeVO.java | 0 .../vo/redeemcode/RedeemCodeAlarmUserVO.java | 0 .../vo/redeemcode/WeRedeemCodeActivityVO.java | 0 .../domain/vo/redeemcode/WeRedeemCodeVO.java | 0 .../domain/vo/sop/AbstractExecuteVO.java | 0 .../domain/vo/sop/BaseCustomerSopTagVO.java | 0 .../domain/vo/sop/BaseGroupSopTagVO.java | 0 .../domain/vo/sop/BaseGroupSopWeUserVO.java | 0 .../vo/sop/BaseWeOperationsCenterSopVo.java | 0 .../wecom/domain/vo/sop/CustomerSopVO.java | 0 .../wecom/domain/vo/sop/DepartmentVO.java | 0 .../domain/vo/sop/FindGroupSopFilterVO.java | 0 .../domain/vo/sop/GetCustomerSopFilterVO.java | 0 .../domain/vo/sop/GetSopTaskByUserIdVO.java | 0 .../vo/sop/GetTaskDetailByUserIdVO.java | 0 .../wecom/domain/vo/sop/GroupSopVO.java | 0 .../wecom/domain/vo/sop/SopAttachmentVO.java | 0 .../wecom/domain/vo/sop/SopDetailVO.java | 0 .../wecom/domain/vo/sop/SopRuleVO.java | 0 .../wecom/domain/vo/sop/SopUserVO.java | 0 ...perationsCenterSopDetailByCycleTypeVO.java | 0 ...erationsCenterSopDetailByTimingTypeVO.java | 0 .../WeOperationsCenterSopDetailChatVO.java | 0 ...WeOperationsCenterSopDetailCustomerVO.java | 0 .../vo/sop/WeOperationsCenterSopScopeVO.java | 0 .../domain/vo/sop/WeSopExecutedRulesVO.java | 0 .../domain/vo/sop/WeSopExecutedUsersVO.java | 0 .../wecom/domain/vo/sop/WeSopTaskCountVO.java | 0 .../vo/sop/WeSopUserIdAndTargetIdVO.java | 0 ...AbstractWeOperationsCenterSopDetailVO.java | 0 .../GetResignedTransferCustomerDetailVO.java | 0 .../GetResignedTransferGroupDetailVO.java | 0 .../vo/transfer/TransferResignedUserVO.java | 0 .../transfer/WeCustomerTransferRecordVO.java | 0 .../wegrouptag/PageWeGroupTagCategoryVO.java | 0 .../vo/wegrouptag/PageWeGroupTagVO.java | 0 .../vo/wegrouptag/WeGroupTagCategoryVO.java | 0 .../vo/wegrouptag/WeGroupTagRelDetail.java | 0 .../domain/vo/wegrouptag/WeGroupTagRelVO.java | 0 .../vo/welcomemsg/WeEmployMaterialVO.java | 0 .../vo/welcomemsg/WeMsgTlpListDetailVO.java | 0 .../domain/vo/welcomemsg/WeMsgTlpListVO.java | 0 .../vo/welcomemsg/WeUserUseScopeVO.java | 0 .../WelcomeMsgGroupMaterialCountVO.java | 0 .../wecom/factory/WeCallBackEventFactory.java | 0 .../wecom/factory/WeEventHandle.java | 0 .../wecom/factory/WeEventStrategy.java | 0 .../wecom/factory/WeStrategyBeanFactory.java | 0 .../impl/WeEventBatchJobResultImpl.java | 0 .../impl/WeEventChangeContactImpl.java | 0 .../impl/WeEventChangeExternalChatImpl.java | 0 .../WeEventChangeExternalContactImpl.java | 0 .../impl/WeEventChangeExternalTagImpl.java | 0 .../factory/impl/WeEventSubscribeImpl.java | 0 .../factory/impl/WeEventUnSubscribeImpl.java | 0 .../impl/WeInfoTypeCancelAuthImpl.java | 0 .../impl/WeInfoTypeChangeAuthImpl.java | 0 .../impl/WeInfoTypeCreateAuthImpl.java | 0 .../WeInfoTypeResetPermanentCodeImpl.java | 0 .../impl/WeInfoTypeSuiteTicketImpl.java | 0 .../WeCallBackAddExternalContactImpl.java | 0 .../WeCallBackAddHalfExternalContactImpl.java | 0 .../WeCallBackDelExternalContactImpl.java | 0 .../customer/WeCallBackDelFollowUserImpl.java | 0 .../WeCallBackEditExternalContactImpl.java | 0 .../WeCallBackMsgAuditApprovedImpl.java | 0 .../customer/WeCallbackTransferFailImpl.java | 0 .../WeCallBackCreateGroupImpl.java | 0 .../customergroup/WeCallBackDismissImpl.java | 0 .../WeCallBackUpdateGroupImpl.java | 0 .../impl/party/WeCallBackCreatePartyImpl.java | 0 .../impl/party/WeCallBackDeletePartyImpl.java | 0 .../impl/party/WeCallBackUpdatePartyImpl.java | 0 .../tag/WeCallBackCreateCustomerTagImpl.java | 0 .../tag/WeCallBackDeleteCustomerTagImpl.java | 0 .../tag/WeCallBackUpdateCustomerTagImpl.java | 0 .../impl/user/WeCallBackCreateUserImpl.java | 0 .../impl/user/WeCallBackDeleteUserImpl.java | 0 .../impl/user/WeCallBackUpdateUserImpl.java | 0 .../user/WeCallBackUpdateUserTagImpl.java | 0 .../wecom/handler/GenericTypeHandler.java | 0 .../wecom/handler/ListTypeHandler.java | 0 .../wecom/interceptor/OrderInterceptor.java | 0 .../We3rdAccessTokenInterceptor.java | 0 .../interceptor/WeAccessTokenInterceptor.java | 0 .../interceptor/WeAutoConfigInterceptor.java | 0 .../WeProviderAccessTokenInterceptor.java | 0 .../WeProviderAccessTokenInterceptor1.java | 0 .../WeSuiteAccessTokenInterceptor.java | 0 ...WeSuiteAccessTokenWebLoginInterceptor.java | 0 .../interceptor/WechatOpenInterceptor.java | 0 .../ActualGroupCodeExpiredListener.java | 0 .../listener/EmpleCodeExpiredListener.java | 0 .../login/service/PermissionService.java | 0 .../wecom/login/service/SysLoginService.java | 0 .../login/service/UserDetailsServiceImpl.java | 0 .../wecom/login/util/LoginTokenService.java | 0 .../ExtendPropertyMultipleOptionMapper.java | 0 .../OrderGroupToOrderCustomerMapper.java | 0 .../mapper/OrderUserToOrderAccountMapper.java | 0 .../mapper/WeApplicationCenterMapper.java | 0 .../mapper/WeAuthCorpInfoExtendMapper.java | 0 .../wecom/mapper/WeAuthCorpInfoMapper.java | 0 .../wecom/mapper/WeCategoryMapper.java | 0 .../mapper/WeChatContactMappingMapper.java | 0 .../wecom/mapper/WeCorpAccountMapper.java | 0 .../WeCustomerExtendPropertyMapper.java | 0 .../WeCustomerExtendPropertyRelMapper.java | 0 .../wecom/mapper/WeCustomerMapper.java | 0 .../wecom/mapper/WeCustomerMessageMapper.java | 0 .../WeCustomerMessageOriginalMapper.java | 0 .../WeCustomerMessageTimeTaskMapper.java | 0 .../mapper/WeCustomerMessgaeResultMapper.java | 0 .../mapper/WeCustomerSeedMessageMapper.java | 0 .../wecom/mapper/WeCustomerTagRelMapper.java | 0 .../mapper/WeCustomerTrajectoryMapper.java | 0 .../WeCustomerTransferConfigMapper.java | 0 .../WeCustomerTransferRecordMapper.java | 0 .../wecom/mapper/WeDepartmentMapper.java | 0 .../mapper/WeEmpleCodeAnalyseMapper.java | 0 .../wecom/mapper/WeEmpleCodeMapper.java | 0 .../mapper/WeEmpleCodeMaterialMapper.java | 0 .../wecom/mapper/WeEmpleCodeTagMapper.java | 0 .../mapper/WeEmpleCodeUseScopMapper.java | 0 .../WeExternalUserMappingUserMapper.java | 0 .../mapper/WeFlowerCustomerRelMapper.java | 0 .../mapper/WeFlowerCustomerTagRelMapper.java | 0 .../wecom/mapper/WeGroupCodeActualMapper.java | 0 .../wecom/mapper/WeGroupCodeMapper.java | 0 .../easywecom/wecom/mapper/WeGroupMapper.java | 0 .../wecom/mapper/WeGroupMemberMapper.java | 0 .../wecom/mapper/WeGroupStatisticMapper.java | 0 .../mapper/WeGroupTagCategoryMapper.java | 0 .../wecom/mapper/WeGroupTagMapper.java | 0 .../wecom/mapper/WeGroupTagRelMapper.java | 0 .../wecom/mapper/WeMaterialConfigMapper.java | 0 .../wecom/mapper/WeMaterialMapper.java | 0 .../wecom/mapper/WeMaterialTagMapper.java | 0 .../wecom/mapper/WeMaterialTagRelMapper.java | 0 .../wecom/mapper/WeMessagePushMapper.java | 0 .../wecom/mapper/WeMsgTlpMapper.java | 0 .../wecom/mapper/WeMsgTlpMaterialMapper.java | 0 .../wecom/mapper/WeMsgTlpScopeMapper.java | 0 .../mapper/WeMsgTlpSpecialRuleMapper.java | 0 .../wecom/mapper/WeMyApplicationMapper.java | 0 .../mapper/WeMyApplicationUseScopeMapper.java | 0 ...erationsCenterCustomerSopFilterMapper.java | 0 ...ationsCenterGroupSopFilterCycleMapper.java | 0 ...eOperationsCenterGroupSopFilterMapper.java | 0 .../WeOperationsCenterSopDetailMapper.java | 0 .../mapper/WeOperationsCenterSopMapper.java | 0 .../WeOperationsCenterSopMaterialMapper.java | 0 .../WeOperationsCenterSopRulesMapper.java | 0 .../WeOperationsCenterSopScopeMapper.java | 0 .../WeOperationsCenterSopTaskMapper.java | 0 .../mapper/WePresTagGroupTaskMapper.java | 0 .../mapper/WePresTagGroupTaskScopeMapper.java | 0 .../mapper/WePresTagGroupTaskStatMapper.java | 0 .../mapper/WePresTagGroupTaskTagMapper.java | 0 ...eResignedCustomerTransferRecordMapper.java | 0 .../WeResignedGroupTransferRecordMapper.java | 0 .../WeResignedTransferRecordMapper.java | 0 .../wecom/mapper/WeSensitiveActHitMapper.java | 0 .../wecom/mapper/WeSensitiveActMapper.java | 0 .../mapper/WeSensitiveAuditScopeMapper.java | 0 .../wecom/mapper/WeSensitiveMapper.java | 0 .../wecom/mapper/WeTagGroupMapper.java | 0 .../easywecom/wecom/mapper/WeTagMapper.java | 0 .../mapper/WeUserBehaviorDataMapper.java | 0 .../easywecom/wecom/mapper/WeUserMapper.java | 0 .../wecom/mapper/WeUserRoleMapper.java | 0 .../wecom/mapper/WeWordsCategoryMapper.java | 0 .../wecom/mapper/WeWordsDetailMapper.java | 0 .../wecom/mapper/WeWordsGroupMapper.java | 0 .../wecom/mapper/WeWordsLastUseMapper.java | 0 ...WeAutoTagCustomerRuleEffectTimeMapper.java | 0 .../autotag/WeAutoTagCustomerSceneMapper.java | 0 .../WeAutoTagCustomerSceneTagRelMapper.java | 0 .../WeAutoTagGroupSceneGroupRelMapper.java | 0 .../autotag/WeAutoTagGroupSceneMapper.java | 0 .../WeAutoTagGroupSceneTagRelMapper.java | 0 .../autotag/WeAutoTagKeywordMapper.java | 0 .../autotag/WeAutoTagKeywordTagRelMapper.java | 0 .../WeAutoTagRuleHitCustomerRecordMapper.java | 0 ...oTagRuleHitCustomerRecordTagRelMapper.java | 0 .../WeAutoTagRuleHitGroupRecordMapper.java | 0 ...AutoTagRuleHitGroupRecordTagRelMapper.java | 0 .../WeAutoTagRuleHitKeywordRecordMapper.java | 0 ...toTagRuleHitKeywordRecordTagRelMapper.java | 0 .../mapper/autotag/WeAutoTagRuleMapper.java | 0 .../autotag/WeAutoTagUserRelMapper.java | 0 .../moment/WeMomentDetailRelMapper.java | 0 .../mapper/moment/WeMomentTaskMapper.java | 0 .../moment/WeMomentTaskResultMapper.java | 0 .../moment/WeMomentUserCustomerRelMapper.java | 0 .../mapper/radar/WeRadarChannelMapper.java | 0 .../radar/WeRadarClickRecordMapper.java | 0 .../wecom/mapper/radar/WeRadarMapper.java | 0 .../WeRedeemCodeActivityMapper.java | 0 .../mapper/redeemcode/WeRedeemCodeMapper.java | 0 .../mapper/wechatopen/WeOpenConfigMapper.java | 0 .../ExtendPropertyMultipleOptionService.java | 0 .../OrderGroupToOrderCustomerService.java | 0 .../OrderUserToOrderAccountService.java | 0 .../wecom/service/PageHomeService.java | 0 .../wecom/service/We3rdAppService.java | 0 .../wecom/service/WeAccessTokenService.java | 0 .../service/WeApplicationCenterService.java | 0 .../service/WeAuthCorpInfoExtendService.java | 0 .../wecom/service/WeAuthCorpInfoService.java | 0 .../wecom/service/WeAutoConfigService.java | 0 .../wecom/service/WeCategoryService.java | 0 .../service/WeChatContactMappingService.java | 0 .../service/WeConversationArchiveService.java | 0 .../wecom/service/WeCorpAccountService.java | 0 .../WeCustomerExtendPropertyRelService.java | 0 .../WeCustomerExtendPropertyService.java | 0 .../WeCustomerMessageOriginalService.java | 0 .../service/WeCustomerMessagePushService.java | 0 .../service/WeCustomerMessageService.java | 0 .../WeCustomerMessgaeResultService.java | 0 .../service/WeCustomerSeedMessageService.java | 0 .../wecom/service/WeCustomerService.java | 0 .../service/WeCustomerTrajectoryService.java | 0 .../WeCustomerTransferConfigService.java | 0 .../WeCustomerTransferRecordService.java | 0 .../wecom/service/WeDepartmentService.java | 0 .../service/WeEmpleCodeAnalyseService.java | 0 .../service/WeEmpleCodeMaterialService.java | 0 .../wecom/service/WeEmpleCodeService.java | 0 .../wecom/service/WeEmpleCodeTagService.java | 0 .../service/WeEmpleCodeUseScopService.java | 0 .../WeExternalUserMappingUserService.java | 0 .../service/WeFlowerCustomerRelService.java | 0 .../WeFlowerCustomerTagRelService.java | 0 .../service/WeGroupCodeActualService.java | 0 .../wecom/service/WeGroupCodeService.java | 0 .../wecom/service/WeGroupMemberService.java | 0 .../wecom/service/WeGroupService.java | 0 .../wecom/service/WeGroupSopV2Service.java | 0 .../service/WeGroupStatisticService.java | 0 .../service/WeGroupTagCategoryService.java | 0 .../wecom/service/WeGroupTagRelService.java | 0 .../wecom/service/WeGroupTagService.java | 0 .../wecom/service/WeInitService.java | 0 .../service/WeMaterialConfigService.java | 0 .../wecom/service/WeMaterialService.java | 0 .../service/WeMaterialTagRelService.java | 0 .../wecom/service/WeMaterialTagService.java | 0 .../wecom/service/WeMessagePushService.java | 0 .../service/WeMsgTlpMaterialService.java | 0 .../wecom/service/WeMsgTlpScopeService.java | 0 .../wecom/service/WeMsgTlpService.java | 0 .../service/WeMsgTlpSpecialRuleService.java | 0 .../wecom/service/WeMyApplicationService.java | 0 .../WeMyApplicationUseScopeService.java | 0 ...rationsCenterCustomerSopFilterService.java | 0 ...tionsCenterGroupSopFilterCycleService.java | 0 ...OperationsCenterGroupSopFilterService.java | 0 .../WeOperationsCenterSopDetailService.java | 0 .../WeOperationsCenterSopMaterialService.java | 0 .../WeOperationsCenterSopRulesService.java | 0 .../WeOperationsCenterSopScopeService.java | 0 .../service/WeOperationsCenterSopService.java | 0 .../WeOperationsCenterSopTaskService.java | 0 .../service/WePresTagGroupTaskService.java | 0 ...ResignedCustomerTransferRecordService.java | 0 .../WeResignedGroupTransferRecordService.java | 0 .../WeResignedTransferRecordService.java | 0 .../service/WeSensitiveActHitService.java | 0 .../wecom/service/WeSensitiveActService.java | 0 .../service/WeSensitiveAuditScopeService.java | 0 .../wecom/service/WeSensitiveService.java | 0 .../wecom/service/WeTagGroupService.java | 0 .../easywecom/wecom/service/WeTagService.java | 0 .../service/WeUserBehaviorDataService.java | 0 .../wecom/service/WeUserRoleService.java | 0 .../wecom/service/WeUserService.java | 0 .../wecom/service/WeWordsCategoryService.java | 0 .../wecom/service/WeWordsDetailService.java | 0 .../wecom/service/WeWordsGroupService.java | 0 .../wecom/service/WeWordsLastUseService.java | 0 ...eAutoTagCustomerRuleEffectTimeService.java | 0 .../WeAutoTagCustomerSceneService.java | 0 .../WeAutoTagCustomerSceneTagRelService.java | 0 .../WeAutoTagGroupSceneGroupRelService.java | 0 .../autotag/WeAutoTagGroupSceneService.java | 0 .../WeAutoTagGroupSceneTagRelService.java | 0 .../autotag/WeAutoTagKeywordService.java | 0 .../WeAutoTagKeywordTagRelService.java | 0 ...WeAutoTagRuleHitCustomerRecordService.java | 0 ...TagRuleHitCustomerRecordTagRelService.java | 0 .../WeAutoTagRuleHitGroupRecordService.java | 0 ...utoTagRuleHitGroupRecordTagRelService.java | 0 .../WeAutoTagRuleHitKeywordRecordService.java | 0 ...oTagRuleHitKeywordRecordTagRelService.java | 0 .../service/autotag/WeAutoTagRuleService.java | 0 .../autotag/WeAutoTagUserRelService.java | 0 ...tendPropertyMultipleOptionServiceImpl.java | 0 .../OrderGroupToOrderCustomerServiceImpl.java | 0 .../OrderUserToOrderAccountServiceImpl.java | 0 .../service/impl/PageHomeServiceImpl.java | 0 .../service/impl/We3rdAppServiceImpl.java | 0 .../impl/WeAccessTokenServiceImpl.java | 0 .../impl/WeApplicationCenterServiceImpl.java | 0 .../impl/WeAuthCorpInfoExtendServiceImpl.java | 0 .../impl/WeAuthCorpInfoServiceImpl.java | 0 .../service/impl/WeAutoConfigServiceImpl.java | 0 .../service/impl/WeCategoryServiceImpl.java | 0 .../impl/WeChatContactMappingServiceImpl.java | 0 .../WeConversationArchiveServiceImpl.java | 0 .../impl/WeCorpAccountServiceImpl.java | 0 ...eCustomerExtendPropertyRelServiceImpl.java | 0 .../WeCustomerExtendPropertyServiceImpl.java | 0 .../WeCustomerMessageOriginalServiceImpl.java | 0 .../WeCustomerMessagePushServiceImpl.java | 0 .../impl/WeCustomerMessageServiceImpl.java | 0 .../WeCustomerMessgaeResultServiceImpl.java | 0 .../WeCustomerSeedMessageServiceImpl.java | 0 .../service/impl/WeCustomerServiceImpl.java | 0 .../impl/WeCustomerTrajectoryServiceImpl.java | 0 .../WeCustomerTransferConfigServiceImpl.java | 0 .../WeCustomerTransferRecordServiceImpl.java | 0 .../service/impl/WeDepartmentServiceImpl.java | 0 .../impl/WeEmpleCodeAnalyseServiceImpl.java | 0 .../impl/WeEmpleCodeMaterialServiceImpl.java | 0 .../service/impl/WeEmpleCodeServiceImpl.java | 0 .../impl/WeEmpleCodeTagServiceImpl.java | 0 .../impl/WeEmpleCodeUseScopServiceImpl.java | 0 .../WeExternalUserMappingUserServiceImpl.java | 0 .../impl/WeFlowerCustomerRelServiceImpl.java | 0 .../WeFlowerCustomerTagRelServiceImpl.java | 0 .../impl/WeGroupCodeActualServiceImpl.java | 0 .../service/impl/WeGroupCodeServiceImpl.java | 0 .../impl/WeGroupMemberServiceImpl.java | 0 .../service/impl/WeGroupServiceImpl.java | 0 .../service/impl/WeGroupSopV2ServiceImpl.java | 0 .../impl/WeGroupStatisticServiceImpl.java | 0 .../impl/WeGroupTagCategoryServiceImpl.java | 0 .../impl/WeGroupTagRelServiceImpl.java | 0 .../service/impl/WeGroupTagServiceImpl.java | 0 .../wecom/service/impl/WeInitServiceImpl.java | 0 .../impl/WeMaterialConfigServiceImpl.java | 0 .../service/impl/WeMaterialServiceImpl.java | 0 .../impl/WeMaterialTagRelServiceImpl.java | 0 .../impl/WeMaterialTagServiceImpl.java | 0 .../impl/WeMessagePushServiceImpl.java | 0 .../impl/WeMsgTlpMaterialServiceImpl.java | 0 .../impl/WeMsgTlpScopeServiceImpl.java | 0 .../service/impl/WeMsgTlpServiceImpl.java | 0 .../impl/WeMsgTlpSpecialRuleServiceImpl.java | 0 .../impl/WeMyApplicationServiceImpl.java | 0 .../WeMyApplicationUseScopeServiceImpl.java | 0 ...onsCenterCustomerSopFilterServiceImpl.java | 0 ...sCenterGroupSopFilterCycleServiceImpl.java | 0 ...ationsCenterGroupSopFilterServiceImpl.java | 0 ...eOperationsCenterSopDetailServiceImpl.java | 0 ...perationsCenterSopMaterialServiceImpl.java | 0 ...WeOperationsCenterSopRulesServiceImpl.java | 0 ...WeOperationsCenterSopScopeServiceImpl.java | 0 .../WeOperationsCenterSopServiceImpl.java | 0 .../WeOperationsCenterSopTaskServiceImpl.java | 0 .../impl/WePresTagGroupTaskServiceImpl.java | 0 ...gnedCustomerTransferRecordServiceImpl.java | 0 ...esignedGroupTransferRecordServiceImpl.java | 0 .../WeResignedTransferRecordServiceImpl.java | 0 .../impl/WeSensitiveActHitServiceImpl.java | 0 .../impl/WeSensitiveActServiceImpl.java | 0 .../WeSensitiveAuditScopeServiceImpl.java | 0 .../service/impl/WeSensitiveServiceImpl.java | 0 .../service/impl/WeTagGroupServiceImpl.java | 0 .../wecom/service/impl/WeTagServiceImpl.java | 0 .../impl/WeUserBehaviorDataServiceImpl.java | 0 .../service/impl/WeUserRoleServiceImpl.java | 0 .../wecom/service/impl/WeUserServiceImpl.java | 0 .../impl/WeWordsCategoryServiceImpl.java | 0 .../impl/WeWordsDetailServiceImpl.java | 0 .../service/impl/WeWordsGroupServiceImpl.java | 0 .../impl/WeWordsLastUseServiceImpl.java | 0 ...oTagCustomerRuleEffectTimeServiceImpl.java | 0 .../WeAutoTagCustomerSceneServiceImpl.java | 0 ...AutoTagCustomerSceneTagRelServiceImpl.java | 0 ...eAutoTagGroupSceneGroupRelServiceImpl.java | 0 .../WeAutoTagGroupSceneServiceImpl.java | 0 .../WeAutoTagGroupSceneTagRelServiceImpl.java | 0 .../autotag/WeAutoTagKeywordServiceImpl.java | 0 .../WeAutoTagKeywordTagRelServiceImpl.java | 0 ...toTagRuleHitCustomerRecordServiceImpl.java | 0 ...uleHitCustomerRecordTagRelServiceImpl.java | 0 ...eAutoTagRuleHitGroupRecordServiceImpl.java | 0 ...agRuleHitGroupRecordTagRelServiceImpl.java | 0 ...utoTagRuleHitKeywordRecordServiceImpl.java | 0 ...RuleHitKeywordRecordTagRelServiceImpl.java | 0 .../autotag/WeAutoTagRuleServiceImpl.java | 0 .../autotag/WeAutoTagUserRelServiceImpl.java | 0 .../moment/WeMomentDetailRelServiceImpl.java | 0 .../moment/WeMomentTaskResultServiceImpl.java | 0 .../impl/moment/WeMomentTaskServiceImpl.java | 0 .../WeMomentUserCustomerRelServiceImpl.java | 0 .../impl/radar/WeRadarChannelServiceImpl.java | 0 .../radar/WeRadarClickRecordServiceImpl.java | 0 .../impl/radar/WeRadarServiceImpl.java | 0 .../WeRedeemCodeActivityServiceImpl.java | 0 .../redeemcode/WeRedeemCodeServiceImpl.java | 0 .../moment/WeMomentDetailRelService.java | 0 .../moment/WeMomentTaskResultService.java | 0 .../service/moment/WeMomentTaskService.java | 0 .../WeMomentUserCustomerRelService.java | 0 .../radar/MiniAppQrCodeUrlHandler.java | 0 .../wecom/service/radar/RadarUrlHandler.java | 0 .../service/radar/WeRadarChannelService.java | 0 .../radar/WeRadarClickRecordService.java | 0 .../wecom/service/radar/WeRadarService.java | 0 .../WeRedeemCodeActivityService.java | 0 .../redeemcode/WeRedeemCodeService.java | 0 .../service/wechatopen/WechatOpenService.java | 0 .../impl/WechatOpenServiceImpl.java | 0 .../wecom/strategy/MessageContext.java | 0 .../SendMessageToUserGroupStrategy.java | 0 .../strategy/SendMessageToUserStrategy.java | 0 .../easywecom/wecom/strategy/Strategy.java | 0 .../appstrategy/AppConfigHandler.java | 0 .../appstrategy/AppConfigStrategy.java | 0 .../YiGeOrderAppConfigStrategy.java | 0 .../wecom/utils/ApplicationMessageUtil.java | 0 .../wecom/utils/AttachmentService.java | 0 .../com/easywecom/wecom/utils/JsoupUtil.java | 0 .../main/java/com/tencent/wework/Finance.java | 2 +- .../java/com/tencent/wework/FinanceUtils.java | 40 +- .../java/com/tencent/wework/RSAKeyEnum.java | 0 .../src/main/resources/font/default.ttf | Bin .../ExtendPropertyMultipleOptionMapper.xml | 2 +- .../wecom/OrderGroupToOrderCustomerMapper.xml | 2 +- .../wecom/OrderUserToOrderAccountMapper.xml | 4 +- .../resources/mapper/wecom/WeAppMapper.xml | 2 +- .../wecom/WeApplicationCenterMapper.xml | 2 +- .../wecom/WeAuthCorpInfoExtendMapper.xml | 2 +- .../mapper/wecom/WeAuthCorpInfoMapper.xml | 2 +- .../mapper/wecom/WeCategoryMapper.xml | 17 +- .../wecom/WeChatContactMappingMapper.xml | 2 +- .../mapper/wecom/WeCorpAccountMapper.xml | 2 +- .../wecom/WeCustomerExtendPropertyMapper.xml | 10 +- .../WeCustomerExtendPropertyRelMapper.xml | 2 +- .../mapper/wecom/WeCustomerMapper.xml | 58 +- .../mapper/wecom/WeCustomerMessageMapper.xml | 2 +- .../wecom/WeCustomerMessageOriginalMapper.xml | 12 +- .../wecom/WeCustomerMessageTimeTaskMapper.xml | 24 +- .../wecom/WeCustomerMessgaeResultMapper.xml | 19 +- .../wecom/WeCustomerSeedMessageMapper.xml | 2 +- .../mapper/wecom/WeCustomerTagRelMapper.xml | 2 +- .../wecom/WeCustomerTrajectoryMapper.xml | 2 +- .../wecom/WeCustomerTransferConfigMapper.xml | 2 +- .../wecom/WeCustomerTransferRecordMapper.xml | 4 +- .../mapper/wecom/WeDepartmentMapper.xml | 10 +- .../mapper/wecom/WeEmpleCodeAnalyseMapper.xml | 12 +- .../mapper/wecom/WeEmpleCodeMapper.xml | 76 +- .../wecom/WeEmpleCodeMaterialMapper.xml | 6 +- .../mapper/wecom/WeEmpleCodeTagMapper.xml | 2 +- .../mapper/wecom/WeEmpleCodeUseScopMapper.xml | 12 +- .../wecom/WeExternalUserMappingUserMapper.xml | 2 +- .../wecom/WeFlowerCustomerRelMapper.xml | 8 +- .../wecom/WeFlowerCustomerTagRelMapper.xml | 4 +- .../mapper/wecom/WeGroupCodeActualMapper.xml | 20 +- .../mapper/wecom/WeGroupCodeMapper.xml | 16 +- .../resources/mapper/wecom/WeGroupMapper.xml | 20 +- .../mapper/wecom/WeGroupMemberMapper.xml | 16 +- .../mapper/wecom/WeGroupStatisticMapper.xml | 10 +- .../mapper/wecom/WeGroupTagCategoryMapper.xml | 10 +- .../mapper/wecom/WeGroupTagMapper.xml | 6 +- .../mapper/wecom/WeGroupTagRelMapper.xml | 6 +- .../mapper/wecom/WeMaterialConfigMapper.xml | 4 +- .../mapper/wecom/WeMaterialMapper.xml | 42 +- .../mapper/wecom/WeMaterialTagMapper.xml | 8 +- .../mapper/wecom/WeMaterialTagRelMapper.xml | 6 +- .../mapper/wecom/WeMessagePushMapper.xml | 0 .../resources/mapper/wecom/WeMsgTlpMapper.xml | 24 +- .../mapper/wecom/WeMsgTlpMaterialMapper.xml | 6 +- .../mapper/wecom/WeMsgTlpScopeMapper.xml | 6 +- .../wecom/WeMsgTlpSpecialRuleMapper.xml | 8 +- .../mapper/wecom/WeMyApplicationMapper.xml | 18 +- .../wecom/WeMyApplicationUseScopeMapper.xml | 2 +- ...perationsCenterCustomerSopFilterMapper.xml | 4 +- ...rationsCenterGroupSopFilterCycleMapper.xml | 2 +- ...WeOperationsCenterGroupSopFilterMapper.xml | 10 +- .../WeOperationsCenterSopDetailMapper.xml | 52 +- .../wecom/WeOperationsCenterSopMapper.xml | 8 +- .../WeOperationsCenterSopMaterialMapper.xml | 4 +- .../WeOperationsCenterSopRulesMapper.xml | 6 +- .../WeOperationsCenterSopScopeMapper.xml | 10 +- .../wecom/WeOperationsCenterSopTaskMapper.xml | 4 +- .../mapper/wecom/WePresTagGroupTaskMapper.xml | 6 +- .../wecom/WePresTagGroupTaskScopeMapper.xml | 2 +- .../wecom/WePresTagGroupTaskStatMapper.xml | 4 +- .../wecom/WePresTagGroupTaskTagMapper.xml | 2 +- ...WeResignedCustomerTransferRecordMapper.xml | 10 +- .../WeResignedGroupTransferRecordMapper.xml | 4 +- .../wecom/WeResignedTransferRecordMapper.xml | 6 +- .../mapper/wecom/WeSensitiveActHitMapper.xml | 4 +- .../wecom/WeSensitiveAuditScopeMapper.xml | 2 +- .../mapper/wecom/WeSensitiveMapper.xml | 6 +- .../mapper/wecom/WeTagGroupMapper.xml | 26 +- .../resources/mapper/wecom/WeTagMapper.xml | 6 +- .../mapper/wecom/WeUserBehaviorDataMapper.xml | 10 +- .../resources/mapper/wecom/WeUserMapper.xml | 56 +- .../mapper/wecom/WeUserRoleMapper.xml | 14 +- .../mapper/wecom/WeWordsCategoryMapper.xml | 12 +- .../mapper/wecom/WeWordsDetailMapper.xml | 10 +- .../mapper/wecom/WeWordsGroupMapper.xml | 20 +- .../mapper/wecom/WeWordsLastUseMapper.xml | 10 +- .../WeAutoTagCustomerRuleEffectTimeMapper.xml | 4 +- .../autotag/WeAutoTagCustomerSceneMapper.xml | 10 +- .../WeAutoTagCustomerSceneTagRelMapper.xml | 8 +- .../WeAutoTagGroupSceneGroupRelMapper.xml | 8 +- .../autotag/WeAutoTagGroupSceneMapper.xml | 14 +- .../WeAutoTagGroupSceneTagRelMapper.xml | 8 +- .../wecom/autotag/WeAutoTagKeywordMapper.xml | 8 +- .../autotag/WeAutoTagKeywordTagRelMapper.xml | 6 +- .../WeAutoTagRuleHitCustomerRecordMapper.xml | 8 +- ...toTagRuleHitCustomerRecordTagRelMapper.xml | 4 +- .../WeAutoTagRuleHitGroupRecordMapper.xml | 8 +- ...eAutoTagRuleHitGroupRecordTagRelMapper.xml | 4 +- .../WeAutoTagRuleHitKeywordRecordMapper.xml | 10 +- ...utoTagRuleHitKeywordRecordTagRelMapper.xml | 4 +- .../wecom/autotag/WeAutoTagRuleMapper.xml | 72 +- .../wecom/autotag/WeAutoTagUserRelMapper.xml | 20 +- .../wecom/moment/WeMomentDetailRelMapper.xml | 4 +- .../wecom/moment/WeMomentTaskMapper.xml | 18 +- .../moment/WeMomentUserCustomerRelMapper.xml | 2 +- .../wecom/radar/WeRadarChannelMapper.xml | 4 +- .../wecom/radar/WeRadarClickRecordMapper.xml | 17 +- .../mapper/wecom/radar/WeRadarMapper.xml | 12 +- .../redeemcode/WeRedeemCodeActivityMapper.xml | 16 +- .../wecom/redeemcode/WeRedeemCodeMapper.xml | 16 +- .../wecom/weopen/WeOpenConfigMapper.xml | 2 +- pom.xml | 44 +- sql/init/easyink.sql | 3420 +++++++++++++++++ sql/update/update-V1.17.0.sql | 2 +- sql/update/update-V1.18.0.sql | 15 + 3055 files changed, 123675 insertions(+), 681 deletions(-) rename {easywecom-admin => easyink-admin}/pom.xml (93%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/docker/Dockerfile (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/docker/Shanghai (100%) mode change 100755 => 100644 create mode 100644 easyink-admin/src/main/java/com/easyink/EasyWeComApplication.java create mode 100644 easyink-admin/src/main/java/com/easyink/EasyWeComServletInitializer.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/common/CaptchaController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/common/CommonController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/common/ShortUrlController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/monitor/ServerController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/monitor/SysLogininforController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/monitor/SysOperlogController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/monitor/SysUserOnlineController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/order/OrderLoginController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/order/OrderManagerController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/pro/WecomPlusController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/system/SysConfigController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/system/SysDeptController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/system/SysDictDataController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/system/SysDictTypeController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/system/SysLoginController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/system/SysMenuController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/system/SysNoticeController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/system/SysPostController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/system/SysProfileController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/system/SysRoleController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/system/SysUserController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/wechatopen/WechatOpenController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/wecom/PageHomeController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/wecom/We3rdAppController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeAdminController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeAppController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeApplicationManagerController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeCallBackController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeCategoryController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeChatCollectionController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeChatContactMappingController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeChatSideController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeCommunityGroupSopController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeCommunityH5Controller.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeCommunityKeywordGroupController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeCommunityNewGroupController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeCommunityPresTagGroupController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeCommunityPresTagGroupV2Controller.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeConversationArchiveController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeCorpAccountController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeCustomerController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeCustomerExtendPropertyController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeCustomerMessagePushController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeCustomerPortraitController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeCustomerTransferRecordController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeDepartmentController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeEmpleCodeController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeGroupCodeActualController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeGroupCodeController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeGroupCodeCorpActualController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeGroupController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeGroupSopController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeGroupTagController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeMaterialConfigController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeMaterialController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeMessagePushController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeMomentController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeMsgTlpController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/wecom/WePageDataController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeResignedTransferRecordController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeSensitiveActController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeSensitiveController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeTagGroupController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeTicketController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeUserController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeWordsCategoryController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeWordsGroupController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/wecom/autotag/WeAutoTagRuleController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/wecom/autotag/WeAutoTagRuleHitRecordController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/wecom/radar/WeRadarChannelController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/wecom/radar/WeRadarClickRecordController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/wecom/radar/WeRadarController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/wecom/redeemcode/WeRedeemCodeActivityController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/controller/wecom/redeemcode/WeRedeemCodeController.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/core/config/Knife4jConfig.java create mode 100644 easyink-admin/src/main/java/com/easyink/web/core/config/ResponseAdvice.java rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/EasyWeComApplication.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/EasyWeComServletInitializer.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/common/CaptchaController.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/common/CommonController.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/common/ShortUrlController.java (100%) rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/monitor/ServerController.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/monitor/SysLogininforController.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/monitor/SysOperlogController.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/monitor/SysUserOnlineController.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/order/OrderLoginController.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/order/OrderManagerController.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/pro/WecomPlusController.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/system/SysConfigController.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/system/SysDeptController.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/system/SysDictDataController.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/system/SysDictTypeController.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/system/SysLoginController.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/system/SysMenuController.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/system/SysNoticeController.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/system/SysPostController.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/system/SysProfileController.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/system/SysRoleController.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/system/SysUserController.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/wechatopen/WechatOpenController.java (100%) rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/wecom/PageHomeController.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/wecom/We3rdAppController.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/wecom/WeAdminController.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/wecom/WeAppController.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/wecom/WeApplicationManagerController.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/wecom/WeCallBackController.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/wecom/WeCategoryController.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/wecom/WeChatCollectionController.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/wecom/WeChatContactMappingController.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/wecom/WeChatSideController.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/wecom/WeCommunityGroupSopController.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/wecom/WeCommunityH5Controller.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/wecom/WeCommunityKeywordGroupController.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/wecom/WeCommunityNewGroupController.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/wecom/WeCommunityPresTagGroupController.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/wecom/WeCommunityPresTagGroupV2Controller.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/wecom/WeConversationArchiveController.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/wecom/WeCorpAccountController.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/wecom/WeCustomerController.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/wecom/WeCustomerExtendPropertyController.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/wecom/WeCustomerMessagePushController.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/wecom/WeCustomerPortraitController.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/wecom/WeCustomerTransferRecordController.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/wecom/WeDepartmentController.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/wecom/WeEmpleCodeController.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/wecom/WeGroupCodeActualController.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/wecom/WeGroupCodeController.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/wecom/WeGroupCodeCorpActualController.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/wecom/WeGroupController.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/wecom/WeGroupSopController.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/wecom/WeGroupTagController.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/wecom/WeMaterialConfigController.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/wecom/WeMaterialController.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/wecom/WeMessagePushController.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/wecom/WeMomentController.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/wecom/WeMsgTlpController.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/wecom/WePageDataController.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/wecom/WeResignedTransferRecordController.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/wecom/WeSensitiveActController.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/wecom/WeSensitiveController.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/wecom/WeTagGroupController.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/wecom/WeTicketController.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/wecom/WeUserController.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/wecom/WeWordsCategoryController.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/wecom/WeWordsGroupController.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/wecom/autotag/WeAutoTagRuleController.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/wecom/autotag/WeAutoTagRuleHitRecordController.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/wecom/radar/WeRadarChannelController.java (100%) rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/wecom/radar/WeRadarClickRecordController.java (100%) rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/wecom/radar/WeRadarController.java (100%) rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/wecom/redeemcode/WeRedeemCodeActivityController.java (100%) rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/controller/wecom/redeemcode/WeRedeemCodeController.java (100%) rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/core/config/Knife4jConfig.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/java/com/easywecom/web/core/config/ResponseAdvice.java (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/resources/META-INF/spring-devtools.properties (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/resources/application.yml (98%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/resources/banner.txt (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/resources/i18n/messages.properties (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/resources/lib/WeWorkFinanceSdk.dll (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/resources/lib/libWeWorkFinanceSdk_Java.so (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/resources/lib/libcrypto-1_1-x64.dll (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/resources/lib/libcurl-x64.dll (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/resources/lib/libssl-1_1-x64.dll (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/resources/logback-spring.xml (100%) mode change 100755 => 100644 rename {easywecom-admin => easyink-admin}/src/main/resources/mybatis/mybatis-config.xml (75%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/pom.xml (97%) mode change 100755 => 100644 create mode 100644 easyink-common/src/main/java/com/easyink/common/annotation/DataScope.java create mode 100644 easyink-common/src/main/java/com/easyink/common/annotation/DataSource.java create mode 100644 easyink-common/src/main/java/com/easyink/common/annotation/Excel.java create mode 100644 easyink-common/src/main/java/com/easyink/common/annotation/Excels.java create mode 100644 easyink-common/src/main/java/com/easyink/common/annotation/Log.java create mode 100644 easyink-common/src/main/java/com/easyink/common/annotation/RepeatSubmit.java create mode 100644 easyink-common/src/main/java/com/easyink/common/annotation/SysProperty.java create mode 100644 easyink-common/src/main/java/com/easyink/common/aop/CustomerTrajectoryAop.java create mode 100644 easyink-common/src/main/java/com/easyink/common/config/ChatRsaKeyConfig.java create mode 100644 easyink-common/src/main/java/com/easyink/common/config/CosConfig.java create mode 100644 easyink-common/src/main/java/com/easyink/common/config/ElasticSearchConfig.java create mode 100644 easyink-common/src/main/java/com/easyink/common/config/FileConfig.java create mode 100644 easyink-common/src/main/java/com/easyink/common/config/RuoYiConfig.java create mode 100644 easyink-common/src/main/java/com/easyink/common/config/ServerConfig.java create mode 100644 easyink-common/src/main/java/com/easyink/common/config/ThirdDefaultDomainConfig.java create mode 100644 easyink-common/src/main/java/com/easyink/common/config/WeComeConfig.java create mode 100644 easyink-common/src/main/java/com/easyink/common/config/WeCrypt.java create mode 100644 easyink-common/src/main/java/com/easyink/common/config/WeProvider.java create mode 100644 easyink-common/src/main/java/com/easyink/common/config/WechatOpenConfig.java create mode 100644 easyink-common/src/main/java/com/easyink/common/config/jackson/StringArrayDeserialize.java create mode 100644 easyink-common/src/main/java/com/easyink/common/constant/Constants.java create mode 100644 easyink-common/src/main/java/com/easyink/common/constant/ConversationConstants.java create mode 100644 easyink-common/src/main/java/com/easyink/common/constant/GenConstants.java create mode 100644 easyink-common/src/main/java/com/easyink/common/constant/GroupCodeConstants.java create mode 100644 easyink-common/src/main/java/com/easyink/common/constant/GroupConstants.java create mode 100644 easyink-common/src/main/java/com/easyink/common/constant/RedisKeyConstants.java create mode 100644 easyink-common/src/main/java/com/easyink/common/constant/ScheduleConstants.java create mode 100644 easyink-common/src/main/java/com/easyink/common/constant/UserConstants.java create mode 100644 easyink-common/src/main/java/com/easyink/common/constant/WeConstans.java create mode 100644 easyink-common/src/main/java/com/easyink/common/constant/radar/RadarConstants.java create mode 100644 easyink-common/src/main/java/com/easyink/common/constant/redeemcode/RedeemCodeConstants.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/MenuTree.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/controller/BaseController.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/AjaxResult.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/BaseEntity.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/ConversationArchiveQuery.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/FileVo.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/PageEntity.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/RootEntity.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/Tree.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/TreeEntity.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/TreeSelect.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/conversation/ChatBodyVO.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/conversation/ChatInfoVO.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/conversation/FinanceResVO.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/AgreeVO.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/AttachmentBaseVO.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/CalendarVO.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/CardVO.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/ChatRecordVO.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/CollectVO.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/DisagreeVO.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/DocmsgVO.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/EmotionVO.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/FileVO.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/ImageVO.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/LinkVO.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/LocationVO.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/MarkdownVO.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/MeetingVO.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/MeetingVoiceCallVO.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/MixedVO.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/MsgTypeEnum.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/NewsVO.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/RedpacketVO.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/RevokeVO.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/SphFeedVO.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/TextVO.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/TodoVO.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/VideoVO.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/VoiceVO.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/VoipDocShareVO.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/VoteVO.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/WeappVO.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/elastic/ElasticSearchDataVo.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/elastic/ElasticSearchEntity.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/elastic/ElasticSearchQueryVo.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/entity/SysDept.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/entity/SysDictData.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/entity/SysDictType.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/entity/SysMenu.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/entity/SysRole.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/entity/SysUser.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/entity/WeCorpAccount.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/model/LoginBody.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/model/LoginResult.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/model/LoginUser.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/model/LoginUserVO.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/system/MetaVo.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/system/RouterVo.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/system/SysConfig.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/system/SysLogininfor.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/system/SysNotice.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/system/SysOperLog.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/system/SysPost.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/system/SysRoleDept.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/system/SysRoleMenu.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/system/SysUserOnline.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/system/SysUserPost.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/system/SysUserRole.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/wecom/BaseExtendPropertyRel.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/wecom/WeDepartment.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/domain/wecom/WeUser.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/elasticsearch/ElasticSearch.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/page/PageDomain.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/page/TableDataInfo.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/page/TableSupport.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/redis/RedisCache.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/text/CharsetKit.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/text/Convert.java create mode 100644 easyink-common/src/main/java/com/easyink/common/core/text/StrFormatter.java create mode 100644 easyink-common/src/main/java/com/easyink/common/enums/AddWayEnum.java create mode 100644 easyink-common/src/main/java/com/easyink/common/enums/AppIdEnum.java create mode 100644 easyink-common/src/main/java/com/easyink/common/enums/AttachmentTypeEnum.java create mode 100644 easyink-common/src/main/java/com/easyink/common/enums/BaseStatusEnum.java create mode 100644 easyink-common/src/main/java/com/easyink/common/enums/BatchUpdateUserInfoTypeEnum.java create mode 100644 easyink-common/src/main/java/com/easyink/common/enums/BusinessStatus.java create mode 100644 easyink-common/src/main/java/com/easyink/common/enums/BusinessType.java create mode 100644 easyink-common/src/main/java/com/easyink/common/enums/CallSourceEnum.java create mode 100644 easyink-common/src/main/java/com/easyink/common/enums/CallbackEventUpdateDetail.java create mode 100644 easyink-common/src/main/java/com/easyink/common/enums/ChatType.java create mode 100644 easyink-common/src/main/java/com/easyink/common/enums/CommunityTaskType.java create mode 100644 easyink-common/src/main/java/com/easyink/common/enums/CustomerExtendPropertyEnum.java create mode 100644 easyink-common/src/main/java/com/easyink/common/enums/CustomerStatusEnum.java create mode 100644 easyink-common/src/main/java/com/easyink/common/enums/CustomerTrajectoryEnums.java create mode 100644 easyink-common/src/main/java/com/easyink/common/enums/CustomerTransferStatusEnum.java create mode 100644 easyink-common/src/main/java/com/easyink/common/enums/DataScopeEnum.java create mode 100644 easyink-common/src/main/java/com/easyink/common/enums/DataSourceType.java create mode 100644 easyink-common/src/main/java/com/easyink/common/enums/EmployCodeSourceEnum.java create mode 100644 easyink-common/src/main/java/com/easyink/common/enums/ExpressNameEnum.java create mode 100644 easyink-common/src/main/java/com/easyink/common/enums/ExternalGroupMemberTypeEnum.java create mode 100644 easyink-common/src/main/java/com/easyink/common/enums/GroupMessageType.java create mode 100644 easyink-common/src/main/java/com/easyink/common/enums/HttpMethod.java create mode 100644 easyink-common/src/main/java/com/easyink/common/enums/LoginTypeEnum.java create mode 100644 easyink-common/src/main/java/com/easyink/common/enums/LogoutReasonEnum.java create mode 100644 easyink-common/src/main/java/com/easyink/common/enums/MediaType.java create mode 100644 easyink-common/src/main/java/com/easyink/common/enums/MessageStatusEnum.java create mode 100644 easyink-common/src/main/java/com/easyink/common/enums/MessageType.java create mode 100644 easyink-common/src/main/java/com/easyink/common/enums/OperatorType.java create mode 100644 easyink-common/src/main/java/com/easyink/common/enums/PresTagGroupTaskSendScopeEnum.java create mode 100644 easyink-common/src/main/java/com/easyink/common/enums/PushType.java create mode 100644 easyink-common/src/main/java/com/easyink/common/enums/ResultTip.java create mode 100644 easyink-common/src/main/java/com/easyink/common/enums/RoleTypeEnum.java create mode 100644 easyink-common/src/main/java/com/easyink/common/enums/StaffActivateEnum.java create mode 100644 easyink-common/src/main/java/com/easyink/common/enums/TransferFailReason.java create mode 100644 easyink-common/src/main/java/com/easyink/common/enums/UserStatus.java create mode 100644 easyink-common/src/main/java/com/easyink/common/enums/WeCategoryMediaTypeEnum.java create mode 100644 easyink-common/src/main/java/com/easyink/common/enums/WeEmpleCodeAnalyseTypeEnum.java create mode 100644 easyink-common/src/main/java/com/easyink/common/enums/WeEmpleCodeType.java create mode 100644 easyink-common/src/main/java/com/easyink/common/enums/WeEmployCodeRemarkTypeEnum.java create mode 100644 easyink-common/src/main/java/com/easyink/common/enums/WeEmployCodeSkipVerifyEnum.java create mode 100644 easyink-common/src/main/java/com/easyink/common/enums/WeExceptionTip.java create mode 100644 easyink-common/src/main/java/com/easyink/common/enums/WeOperationsCenterSop.java create mode 100644 easyink-common/src/main/java/com/easyink/common/enums/WeSensitiveActEnum.java create mode 100644 easyink-common/src/main/java/com/easyink/common/enums/WeTempMaterialEnum.java create mode 100644 easyink-common/src/main/java/com/easyink/common/enums/WeWordsCategoryTypeEnum.java create mode 100644 easyink-common/src/main/java/com/easyink/common/enums/WelcomeMsgRuleTypeEnum.java create mode 100644 easyink-common/src/main/java/com/easyink/common/enums/WelcomeMsgTplTypeEnum.java create mode 100644 easyink-common/src/main/java/com/easyink/common/enums/autotag/AutoTagCustomerSceneType.java create mode 100644 easyink-common/src/main/java/com/easyink/common/enums/autotag/AutoTagLabelTypeEnum.java create mode 100644 easyink-common/src/main/java/com/easyink/common/enums/autotag/AutoTagMatchTypeEnum.java create mode 100644 easyink-common/src/main/java/com/easyink/common/enums/code/GroupCodeTypeEnum.java create mode 100644 easyink-common/src/main/java/com/easyink/common/enums/code/WelcomeMsgTypeEnum.java create mode 100644 easyink-common/src/main/java/com/easyink/common/enums/customer/CustomerTypeEnum.java create mode 100644 easyink-common/src/main/java/com/easyink/common/enums/moment/MomentPublishStatusEnum.java create mode 100644 easyink-common/src/main/java/com/easyink/common/enums/moment/MomentPushRangeEnum.java create mode 100644 easyink-common/src/main/java/com/easyink/common/enums/moment/MomentSelectUserEnum.java create mode 100644 easyink-common/src/main/java/com/easyink/common/enums/moment/MomentStatusEnum.java create mode 100644 easyink-common/src/main/java/com/easyink/common/enums/moment/MomentTaskTypeEnum.java create mode 100644 easyink-common/src/main/java/com/easyink/common/enums/moment/MomentTypeEnum.java create mode 100644 easyink-common/src/main/java/com/easyink/common/enums/radar/RadarChannelEnum.java create mode 100644 easyink-common/src/main/java/com/easyink/common/enums/radar/RadarTypeEnum.java create mode 100644 easyink-common/src/main/java/com/easyink/common/enums/redeemcode/RedeemCodeStatusEnum.java create mode 100644 easyink-common/src/main/java/com/easyink/common/enums/wecom/ServerTypeEnum.java create mode 100644 easyink-common/src/main/java/com/easyink/common/exception/BaseException.java create mode 100644 easyink-common/src/main/java/com/easyink/common/exception/CallBackNullPointerException.java create mode 100644 easyink-common/src/main/java/com/easyink/common/exception/CustomException.java create mode 100644 easyink-common/src/main/java/com/easyink/common/exception/file/FileException.java create mode 100644 easyink-common/src/main/java/com/easyink/common/exception/file/FileNameLengthLimitExceededException.java create mode 100644 easyink-common/src/main/java/com/easyink/common/exception/file/FileSizeLimitExceededException.java create mode 100644 easyink-common/src/main/java/com/easyink/common/exception/file/InvalidExtensionException.java create mode 100644 easyink-common/src/main/java/com/easyink/common/exception/job/TaskException.java create mode 100644 easyink-common/src/main/java/com/easyink/common/exception/user/CaptchaException.java create mode 100644 easyink-common/src/main/java/com/easyink/common/exception/user/CaptchaExpireException.java create mode 100644 easyink-common/src/main/java/com/easyink/common/exception/user/NoLoginTokenException.java create mode 100644 easyink-common/src/main/java/com/easyink/common/exception/user/QrCodeLoginException.java create mode 100644 easyink-common/src/main/java/com/easyink/common/exception/user/UserException.java create mode 100644 easyink-common/src/main/java/com/easyink/common/exception/user/UserNoCorpException.java create mode 100644 easyink-common/src/main/java/com/easyink/common/exception/user/UserPasswordNotMatchException.java create mode 100644 easyink-common/src/main/java/com/easyink/common/exception/wecom/WeComException.java create mode 100644 easyink-common/src/main/java/com/easyink/common/filter/RepeatableFilter.java create mode 100644 easyink-common/src/main/java/com/easyink/common/filter/RepeatedlyRequestWrapper.java create mode 100644 easyink-common/src/main/java/com/easyink/common/filter/XssFilter.java create mode 100644 easyink-common/src/main/java/com/easyink/common/filter/XssHttpServletRequestWrapper.java create mode 100644 easyink-common/src/main/java/com/easyink/common/lock/LockUtil.java create mode 100644 easyink-common/src/main/java/com/easyink/common/lock/Locker.java create mode 100644 easyink-common/src/main/java/com/easyink/common/lock/RedisLockConfig.java create mode 100644 easyink-common/src/main/java/com/easyink/common/lock/RedissonLocker.java create mode 100644 easyink-common/src/main/java/com/easyink/common/manager/AsyncManager.java create mode 100644 easyink-common/src/main/java/com/easyink/common/manager/ShutdownManager.java create mode 100644 easyink-common/src/main/java/com/easyink/common/manager/factory/AsyncFactory.java create mode 100644 easyink-common/src/main/java/com/easyink/common/mapper/SysConfigMapper.java create mode 100644 easyink-common/src/main/java/com/easyink/common/mapper/SysDeptMapper.java create mode 100644 easyink-common/src/main/java/com/easyink/common/mapper/SysDictDataMapper.java create mode 100644 easyink-common/src/main/java/com/easyink/common/mapper/SysDictTypeMapper.java create mode 100644 easyink-common/src/main/java/com/easyink/common/mapper/SysLogininforMapper.java create mode 100644 easyink-common/src/main/java/com/easyink/common/mapper/SysMenuMapper.java create mode 100644 easyink-common/src/main/java/com/easyink/common/mapper/SysOperLogMapper.java create mode 100644 easyink-common/src/main/java/com/easyink/common/mapper/SysRoleDeptMapper.java create mode 100644 easyink-common/src/main/java/com/easyink/common/mapper/SysRoleMapper.java create mode 100644 easyink-common/src/main/java/com/easyink/common/mapper/SysRoleMenuMapper.java create mode 100644 easyink-common/src/main/java/com/easyink/common/mapper/SysShortUrlMappingMapper.java create mode 100644 easyink-common/src/main/java/com/easyink/common/mapper/SysUserMapper.java create mode 100644 easyink-common/src/main/java/com/easyink/common/mapper/SysUserRoleMapper.java create mode 100644 easyink-common/src/main/java/com/easyink/common/service/ISysConfigService.java create mode 100644 easyink-common/src/main/java/com/easyink/common/service/ISysDeptService.java create mode 100644 easyink-common/src/main/java/com/easyink/common/service/ISysDictDataService.java create mode 100644 easyink-common/src/main/java/com/easyink/common/service/ISysDictTypeService.java create mode 100644 easyink-common/src/main/java/com/easyink/common/service/ISysLogininforService.java create mode 100644 easyink-common/src/main/java/com/easyink/common/service/ISysMenuService.java create mode 100644 easyink-common/src/main/java/com/easyink/common/service/ISysOperLogService.java create mode 100644 easyink-common/src/main/java/com/easyink/common/service/ISysRoleService.java create mode 100644 easyink-common/src/main/java/com/easyink/common/service/ISysUserOnlineService.java create mode 100644 easyink-common/src/main/java/com/easyink/common/service/ISysUserService.java create mode 100644 easyink-common/src/main/java/com/easyink/common/service/impl/SysConfigServiceImpl.java create mode 100644 easyink-common/src/main/java/com/easyink/common/service/impl/SysDeptServiceImpl.java create mode 100644 easyink-common/src/main/java/com/easyink/common/service/impl/SysDictDataServiceImpl.java create mode 100644 easyink-common/src/main/java/com/easyink/common/service/impl/SysDictTypeServiceImpl.java create mode 100644 easyink-common/src/main/java/com/easyink/common/service/impl/SysLogininforServiceImpl.java create mode 100644 easyink-common/src/main/java/com/easyink/common/service/impl/SysMenuServiceImpl.java create mode 100644 easyink-common/src/main/java/com/easyink/common/service/impl/SysOperLogServiceImpl.java create mode 100644 easyink-common/src/main/java/com/easyink/common/service/impl/SysRoleServiceImpl.java create mode 100644 easyink-common/src/main/java/com/easyink/common/service/impl/SysUserOnlineServiceImpl.java create mode 100644 easyink-common/src/main/java/com/easyink/common/service/impl/SysUserServiceImpl.java create mode 100644 easyink-common/src/main/java/com/easyink/common/shorturl/ShortUrlAppendInfo.java create mode 100644 easyink-common/src/main/java/com/easyink/common/shorturl/SysShortUrlMapping.java create mode 100644 easyink-common/src/main/java/com/easyink/common/shorturl/service/ShortUrlAdaptor.java create mode 100644 easyink-common/src/main/java/com/easyink/common/shorturl/service/ShortUrlService.java create mode 100644 easyink-common/src/main/java/com/easyink/common/shorturl/service/impl/ShortUrlServiceImpl.java create mode 100644 easyink-common/src/main/java/com/easyink/common/token/SysPermissionService.java create mode 100644 easyink-common/src/main/java/com/easyink/common/token/TokenService.java create mode 100644 easyink-common/src/main/java/com/easyink/common/utils/Arith.java create mode 100644 easyink-common/src/main/java/com/easyink/common/utils/ConvertUrlUtil.java create mode 100644 easyink-common/src/main/java/com/easyink/common/utils/DateUtils.java create mode 100644 easyink-common/src/main/java/com/easyink/common/utils/DictUtils.java create mode 100644 easyink-common/src/main/java/com/easyink/common/utils/ExceptionUtil.java create mode 100644 easyink-common/src/main/java/com/easyink/common/utils/LogUtils.java create mode 100644 easyink-common/src/main/java/com/easyink/common/utils/MessageUtils.java create mode 100644 easyink-common/src/main/java/com/easyink/common/utils/MyDateUtil.java create mode 100644 easyink-common/src/main/java/com/easyink/common/utils/OsUtils.java create mode 100644 easyink-common/src/main/java/com/easyink/common/utils/QREncode.java create mode 100644 easyink-common/src/main/java/com/easyink/common/utils/ReflectUtil.java create mode 100644 easyink-common/src/main/java/com/easyink/common/utils/SecurityUtils.java create mode 100644 easyink-common/src/main/java/com/easyink/common/utils/ServletUtils.java create mode 100644 easyink-common/src/main/java/com/easyink/common/utils/SnowFlakeUtil.java create mode 100644 easyink-common/src/main/java/com/easyink/common/utils/StringUtils.java create mode 100644 easyink-common/src/main/java/com/easyink/common/utils/Threads.java create mode 100644 easyink-common/src/main/java/com/easyink/common/utils/TreeUtil.java create mode 100644 easyink-common/src/main/java/com/easyink/common/utils/XmlUtil.java create mode 100644 easyink-common/src/main/java/com/easyink/common/utils/bean/BeanUtils.java create mode 100644 easyink-common/src/main/java/com/easyink/common/utils/file/FileUploadUtils.java create mode 100644 easyink-common/src/main/java/com/easyink/common/utils/file/FileUtils.java create mode 100644 easyink-common/src/main/java/com/easyink/common/utils/file/MimeTypeUtils.java create mode 100644 easyink-common/src/main/java/com/easyink/common/utils/html/EscapeUtil.java create mode 100644 easyink-common/src/main/java/com/easyink/common/utils/html/HTMLFilter.java create mode 100644 easyink-common/src/main/java/com/easyink/common/utils/http/HttpHelper.java create mode 100644 easyink-common/src/main/java/com/easyink/common/utils/http/HttpUtils.java create mode 100644 easyink-common/src/main/java/com/easyink/common/utils/ip/AddressUtils.java create mode 100644 easyink-common/src/main/java/com/easyink/common/utils/ip/IpUtils.java create mode 100644 easyink-common/src/main/java/com/easyink/common/utils/poi/ExcelUtil.java create mode 100644 easyink-common/src/main/java/com/easyink/common/utils/reflect/ReflectUtils.java create mode 100644 easyink-common/src/main/java/com/easyink/common/utils/sign/Base64.java create mode 100644 easyink-common/src/main/java/com/easyink/common/utils/sign/Md5Utils.java create mode 100644 easyink-common/src/main/java/com/easyink/common/utils/spring/SpringUtils.java create mode 100644 easyink-common/src/main/java/com/easyink/common/utils/sql/BatchInsertUtil.java create mode 100644 easyink-common/src/main/java/com/easyink/common/utils/sql/IBatchInsertExecutor.java create mode 100644 easyink-common/src/main/java/com/easyink/common/utils/sql/SqlUtil.java create mode 100644 easyink-common/src/main/java/com/easyink/common/utils/uuid/IdUtils.java create mode 100644 easyink-common/src/main/java/com/easyink/common/utils/uuid/UUID.java create mode 100644 easyink-common/src/main/java/com/easyink/common/utils/wecom/ByteGroup.java create mode 100644 easyink-common/src/main/java/com/easyink/common/utils/wecom/PKCS7Encoder.java create mode 100644 easyink-common/src/main/java/com/easyink/common/utils/wecom/RsaUtil.java create mode 100644 easyink-common/src/main/java/com/easyink/common/utils/wecom/SHA1.java create mode 100644 easyink-common/src/main/java/com/easyink/common/utils/wecom/TicketUtils.java create mode 100644 easyink-common/src/main/java/com/easyink/common/utils/wecom/WxCryptUtil.java rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/annotation/DataScope.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/annotation/DataSource.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/annotation/Excel.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/annotation/Excels.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/annotation/Log.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/annotation/RepeatSubmit.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/annotation/SysProperty.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/aop/CustomerTrajectoryAop.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/config/ChatRsaKeyConfig.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/config/CosConfig.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/config/ElasticSearchConfig.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/config/FileConfig.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/config/RuoYiConfig.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/config/ServerConfig.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/config/ThirdDefaultDomainConfig.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/config/WeComeConfig.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/config/WeCrypt.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/config/WeProvider.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/config/WechatOpenConfig.java (100%) rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/config/jackson/StringArrayDeserialize.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/constant/Constants.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/constant/ConversationConstants.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/constant/GenConstants.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/constant/GroupCodeConstants.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/constant/GroupConstants.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/constant/RedisKeyConstants.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/constant/ScheduleConstants.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/constant/UserConstants.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/constant/WeConstans.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/constant/radar/RadarConstants.java (100%) rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/constant/redeemcode/RedeemCodeConstants.java (100%) rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/MenuTree.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/controller/BaseController.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/AjaxResult.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/BaseEntity.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/ConversationArchiveQuery.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/FileVo.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/PageEntity.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/RootEntity.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/Tree.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/TreeEntity.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/TreeSelect.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/conversation/ChatBodyVO.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/conversation/ChatInfoVO.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/conversation/FinanceResVO.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/AgreeVO.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/AttachmentBaseVO.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/CalendarVO.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/CardVO.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/ChatRecordVO.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/CollectVO.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/DisagreeVO.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/DocmsgVO.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/EmotionVO.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/FileVO.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/ImageVO.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/LinkVO.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/LocationVO.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/MarkdownVO.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/MeetingVO.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/MeetingVoiceCallVO.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/MixedVO.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/MsgTypeEnum.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/NewsVO.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/RedpacketVO.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/RevokeVO.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/SphFeedVO.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/TextVO.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/TodoVO.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/VideoVO.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/VoiceVO.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/VoipDocShareVO.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/VoteVO.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/WeappVO.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/elastic/ElasticSearchDataVo.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/elastic/ElasticSearchEntity.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/elastic/ElasticSearchQueryVo.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/entity/SysDept.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/entity/SysDictData.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/entity/SysDictType.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/entity/SysMenu.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/entity/SysRole.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/entity/SysUser.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/entity/WeCorpAccount.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/model/LoginBody.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/model/LoginResult.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/model/LoginUser.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/model/LoginUserVO.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/system/MetaVo.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/system/RouterVo.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/system/SysConfig.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/system/SysLogininfor.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/system/SysNotice.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/system/SysOperLog.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/system/SysPost.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/system/SysRoleDept.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/system/SysRoleMenu.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/system/SysUserOnline.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/system/SysUserPost.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/system/SysUserRole.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/wecom/BaseExtendPropertyRel.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/wecom/WeDepartment.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/domain/wecom/WeUser.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/elasticsearch/ElasticSearch.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/page/PageDomain.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/page/TableDataInfo.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/page/TableSupport.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/redis/RedisCache.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/text/CharsetKit.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/text/Convert.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/core/text/StrFormatter.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/enums/AddWayEnum.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/enums/AppIdEnum.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/enums/AttachmentTypeEnum.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/enums/BaseStatusEnum.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/enums/BatchUpdateUserInfoTypeEnum.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/enums/BusinessStatus.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/enums/BusinessType.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/enums/CallSourceEnum.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/enums/CallbackEventUpdateDetail.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/enums/ChatType.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/enums/CommunityTaskType.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/enums/CustomerExtendPropertyEnum.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/enums/CustomerStatusEnum.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/enums/CustomerTrajectoryEnums.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/enums/CustomerTransferStatusEnum.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/enums/DataScopeEnum.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/enums/DataSourceType.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/enums/EmployCodeSourceEnum.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/enums/ExpressNameEnum.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/enums/ExternalGroupMemberTypeEnum.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/enums/GroupMessageType.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/enums/HttpMethod.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/enums/LoginTypeEnum.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/enums/LogoutReasonEnum.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/enums/MediaType.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/enums/MessageStatusEnum.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/enums/MessageType.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/enums/OperatorType.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/enums/PresTagGroupTaskSendScopeEnum.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/enums/PushType.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/enums/ResultTip.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/enums/RoleTypeEnum.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/enums/StaffActivateEnum.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/enums/TransferFailReason.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/enums/UserStatus.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/enums/WeCategoryMediaTypeEnum.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/enums/WeEmpleCodeAnalyseTypeEnum.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/enums/WeEmpleCodeType.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/enums/WeEmployCodeRemarkTypeEnum.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/enums/WeEmployCodeSkipVerifyEnum.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/enums/WeExceptionTip.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/enums/WeOperationsCenterSop.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/enums/WeSensitiveActEnum.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/enums/WeTempMaterialEnum.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/enums/WeWordsCategoryTypeEnum.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/enums/WelcomeMsgRuleTypeEnum.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/enums/WelcomeMsgTplTypeEnum.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/enums/autotag/AutoTagCustomerSceneType.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/enums/autotag/AutoTagLabelTypeEnum.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/enums/autotag/AutoTagMatchTypeEnum.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/enums/code/GroupCodeTypeEnum.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/enums/code/WelcomeMsgTypeEnum.java (100%) rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/enums/customer/CustomerTypeEnum.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/enums/moment/MomentPublishStatusEnum.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/enums/moment/MomentPushRangeEnum.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/enums/moment/MomentSelectUserEnum.java (100%) rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/enums/moment/MomentStatusEnum.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/enums/moment/MomentTaskTypeEnum.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/enums/moment/MomentTypeEnum.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/enums/radar/RadarChannelEnum.java (100%) rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/enums/radar/RadarTypeEnum.java (100%) rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/enums/redeemcode/RedeemCodeStatusEnum.java (100%) rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/enums/wecom/ServerTypeEnum.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/exception/BaseException.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/exception/CallBackNullPointerException.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/exception/CustomException.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/exception/file/FileException.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/exception/file/FileNameLengthLimitExceededException.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/exception/file/FileSizeLimitExceededException.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/exception/file/InvalidExtensionException.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/exception/job/TaskException.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/exception/user/CaptchaException.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/exception/user/CaptchaExpireException.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/exception/user/NoLoginTokenException.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/exception/user/QrCodeLoginException.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/exception/user/UserException.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/exception/user/UserNoCorpException.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/exception/user/UserPasswordNotMatchException.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/exception/wecom/WeComException.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/filter/RepeatableFilter.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/filter/RepeatedlyRequestWrapper.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/filter/XssFilter.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/filter/XssHttpServletRequestWrapper.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/lock/LockUtil.java (100%) rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/lock/Locker.java (100%) rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/lock/RedisLockConfig.java (100%) rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/lock/RedissonLocker.java (100%) rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/manager/AsyncManager.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/manager/ShutdownManager.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/manager/factory/AsyncFactory.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/mapper/SysConfigMapper.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/mapper/SysDeptMapper.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/mapper/SysDictDataMapper.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/mapper/SysDictTypeMapper.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/mapper/SysLogininforMapper.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/mapper/SysMenuMapper.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/mapper/SysOperLogMapper.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/mapper/SysRoleDeptMapper.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/mapper/SysRoleMapper.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/mapper/SysRoleMenuMapper.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/mapper/SysShortUrlMappingMapper.java (100%) rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/mapper/SysUserMapper.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/mapper/SysUserRoleMapper.java (100%) rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/service/ISysConfigService.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/service/ISysDeptService.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/service/ISysDictDataService.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/service/ISysDictTypeService.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/service/ISysLogininforService.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/service/ISysMenuService.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/service/ISysOperLogService.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/service/ISysRoleService.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/service/ISysUserOnlineService.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/service/ISysUserService.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/service/impl/SysConfigServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/service/impl/SysDeptServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/service/impl/SysDictDataServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/service/impl/SysDictTypeServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/service/impl/SysLogininforServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/service/impl/SysMenuServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/service/impl/SysOperLogServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/service/impl/SysRoleServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/service/impl/SysUserOnlineServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/service/impl/SysUserServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/shorturl/ShortUrlAppendInfo.java (100%) rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/shorturl/SysShortUrlMapping.java (100%) rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/shorturl/service/ShortUrlAdaptor.java (100%) rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/shorturl/service/ShortUrlService.java (100%) rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/shorturl/service/impl/ShortUrlServiceImpl.java (100%) rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/token/SysPermissionService.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/token/TokenService.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/utils/Arith.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/utils/ConvertUrlUtil.java (100%) rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/utils/DateUtils.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/utils/DictUtils.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/utils/ExceptionUtil.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/utils/LogUtils.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/utils/MessageUtils.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/utils/MyDateUtil.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/utils/OsUtils.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/utils/QREncode.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/utils/ReflectUtil.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/utils/SecurityUtils.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/utils/ServletUtils.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/utils/SnowFlakeUtil.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/utils/StringUtils.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/utils/Threads.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/utils/TreeUtil.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/utils/XmlUtil.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/utils/bean/BeanUtils.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/utils/file/FileUploadUtils.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/utils/file/FileUtils.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/utils/file/MimeTypeUtils.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/utils/html/EscapeUtil.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/utils/html/HTMLFilter.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/utils/http/HttpHelper.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/utils/http/HttpUtils.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/utils/ip/AddressUtils.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/utils/ip/IpUtils.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/utils/poi/ExcelUtil.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/utils/reflect/ReflectUtils.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/utils/sign/Base64.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/utils/sign/Md5Utils.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/utils/spring/SpringUtils.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/utils/sql/BatchInsertUtil.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/utils/sql/IBatchInsertExecutor.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/utils/sql/SqlUtil.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/utils/uuid/IdUtils.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/utils/uuid/UUID.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/utils/wecom/ByteGroup.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/utils/wecom/PKCS7Encoder.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/utils/wecom/RsaUtil.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/utils/wecom/SHA1.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/utils/wecom/TicketUtils.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/java/com/easywecom/common/utils/wecom/WxCryptUtil.java (100%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/resources/mapper/system/SysConfigMapper.xml (98%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/resources/mapper/system/SysDeptMapper.xml (96%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/resources/mapper/system/SysDictDataMapper.xml (98%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/resources/mapper/system/SysDictTypeMapper.xml (98%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/resources/mapper/system/SysLogininforMapper.xml (97%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/resources/mapper/system/SysMenuMapper.xml (92%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/resources/mapper/system/SysOperLogMapper.xml (98%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/resources/mapper/system/SysRoleDeptMapper.xml (97%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/resources/mapper/system/SysRoleMapper.xml (92%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/resources/mapper/system/SysRoleMenuMapper.xml (93%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/resources/mapper/system/SysShortUrlMappingMapper.xml (70%) rename {easywecom-common => easyink-common}/src/main/resources/mapper/system/SysUserMapper.xml (99%) mode change 100755 => 100644 rename {easywecom-common => easyink-common}/src/main/resources/mapper/system/SysUserRoleMapper.xml (88%) rename {easywecom-framework => easyink-framework}/pom.xml (62%) mode change 100755 => 100644 create mode 100644 easyink-framework/src/main/java/com/easyink/framework/aspectj/DataSourceAspect.java create mode 100644 easyink-framework/src/main/java/com/easyink/framework/config/ApplicationConfig.java create mode 100644 easyink-framework/src/main/java/com/easyink/framework/config/CaptchaConfig.java create mode 100644 easyink-framework/src/main/java/com/easyink/framework/config/DruidConfig.java create mode 100644 easyink-framework/src/main/java/com/easyink/framework/config/FastJson2JsonRedisSerializer.java create mode 100644 easyink-framework/src/main/java/com/easyink/framework/config/FilterConfig.java create mode 100644 easyink-framework/src/main/java/com/easyink/framework/config/JsonSerializerManage.java create mode 100644 easyink-framework/src/main/java/com/easyink/framework/config/KaptchaTextCreator.java create mode 100644 easyink-framework/src/main/java/com/easyink/framework/config/MyBatisPlusConfig.java create mode 100644 easyink-framework/src/main/java/com/easyink/framework/config/RedisConfig.java create mode 100644 easyink-framework/src/main/java/com/easyink/framework/config/ResourcesConfig.java create mode 100644 easyink-framework/src/main/java/com/easyink/framework/config/SecurityConfig.java create mode 100644 easyink-framework/src/main/java/com/easyink/framework/config/SpringAsyncConfiguration.java create mode 100644 easyink-framework/src/main/java/com/easyink/framework/config/ThreadPoolConfig.java create mode 100644 easyink-framework/src/main/java/com/easyink/framework/config/WebMvcConfig.java create mode 100644 easyink-framework/src/main/java/com/easyink/framework/config/properties/DruidProperties.java create mode 100644 easyink-framework/src/main/java/com/easyink/framework/datasource/DynamicDataSource.java create mode 100644 easyink-framework/src/main/java/com/easyink/framework/datasource/DynamicDataSourceContextHolder.java create mode 100644 easyink-framework/src/main/java/com/easyink/framework/handler/StringArrayJoinTypeHandler.java create mode 100644 easyink-framework/src/main/java/com/easyink/framework/interceptor/RepeatSubmitInterceptor.java create mode 100644 easyink-framework/src/main/java/com/easyink/framework/interceptor/impl/ClearPageHelperParamInterceptor.java create mode 100644 easyink-framework/src/main/java/com/easyink/framework/interceptor/impl/SameUrlDataInterceptor.java create mode 100644 easyink-framework/src/main/java/com/easyink/framework/security/filter/JwtAuthenticationTokenFilter.java create mode 100644 easyink-framework/src/main/java/com/easyink/framework/security/handle/AuthenticationEntryPointImpl.java create mode 100644 easyink-framework/src/main/java/com/easyink/framework/security/handle/LogoutSuccessHandlerImpl.java create mode 100644 easyink-framework/src/main/java/com/easyink/framework/web/domain/Server.java create mode 100644 easyink-framework/src/main/java/com/easyink/framework/web/domain/server/Cpu.java create mode 100644 easyink-framework/src/main/java/com/easyink/framework/web/domain/server/Jvm.java create mode 100644 easyink-framework/src/main/java/com/easyink/framework/web/domain/server/Mem.java create mode 100644 easyink-framework/src/main/java/com/easyink/framework/web/domain/server/Sys.java create mode 100644 easyink-framework/src/main/java/com/easyink/framework/web/domain/server/SysFile.java create mode 100644 easyink-framework/src/main/java/com/easyink/framework/web/exception/GlobalExceptionHandler.java create mode 100644 easyink-framework/src/main/java/com/easyink/framework/web/service/FileService.java rename {easywecom-framework => easyink-framework}/src/main/java/com/easywecom/framework/aspectj/DataSourceAspect.java (100%) mode change 100755 => 100644 rename {easywecom-framework => easyink-framework}/src/main/java/com/easywecom/framework/config/ApplicationConfig.java (100%) mode change 100755 => 100644 rename {easywecom-framework => easyink-framework}/src/main/java/com/easywecom/framework/config/CaptchaConfig.java (100%) mode change 100755 => 100644 rename {easywecom-framework => easyink-framework}/src/main/java/com/easywecom/framework/config/DruidConfig.java (100%) mode change 100755 => 100644 rename {easywecom-framework => easyink-framework}/src/main/java/com/easywecom/framework/config/FastJson2JsonRedisSerializer.java (100%) mode change 100755 => 100644 rename {easywecom-framework => easyink-framework}/src/main/java/com/easywecom/framework/config/FilterConfig.java (100%) mode change 100755 => 100644 rename {easywecom-framework => easyink-framework}/src/main/java/com/easywecom/framework/config/JsonSerializerManage.java (100%) mode change 100755 => 100644 rename {easywecom-framework => easyink-framework}/src/main/java/com/easywecom/framework/config/KaptchaTextCreator.java (100%) mode change 100755 => 100644 rename {easywecom-framework => easyink-framework}/src/main/java/com/easywecom/framework/config/MyBatisPlusConfig.java (100%) mode change 100755 => 100644 rename {easywecom-framework => easyink-framework}/src/main/java/com/easywecom/framework/config/RedisConfig.java (100%) mode change 100755 => 100644 rename {easywecom-framework => easyink-framework}/src/main/java/com/easywecom/framework/config/ResourcesConfig.java (100%) mode change 100755 => 100644 rename {easywecom-framework => easyink-framework}/src/main/java/com/easywecom/framework/config/SecurityConfig.java (100%) mode change 100755 => 100644 rename {easywecom-framework => easyink-framework}/src/main/java/com/easywecom/framework/config/SpringAsyncConfiguration.java (100%) mode change 100755 => 100644 rename {easywecom-framework => easyink-framework}/src/main/java/com/easywecom/framework/config/ThreadPoolConfig.java (100%) mode change 100755 => 100644 rename {easywecom-framework => easyink-framework}/src/main/java/com/easywecom/framework/config/WebMvcConfig.java (100%) mode change 100755 => 100644 rename {easywecom-framework => easyink-framework}/src/main/java/com/easywecom/framework/config/properties/DruidProperties.java (100%) mode change 100755 => 100644 rename {easywecom-framework => easyink-framework}/src/main/java/com/easywecom/framework/datasource/DynamicDataSource.java (100%) mode change 100755 => 100644 rename {easywecom-framework => easyink-framework}/src/main/java/com/easywecom/framework/datasource/DynamicDataSourceContextHolder.java (100%) mode change 100755 => 100644 rename {easywecom-framework => easyink-framework}/src/main/java/com/easywecom/framework/handler/StringArrayJoinTypeHandler.java (100%) mode change 100755 => 100644 rename {easywecom-framework => easyink-framework}/src/main/java/com/easywecom/framework/interceptor/RepeatSubmitInterceptor.java (100%) mode change 100755 => 100644 rename {easywecom-framework => easyink-framework}/src/main/java/com/easywecom/framework/interceptor/impl/ClearPageHelperParamInterceptor.java (100%) mode change 100755 => 100644 rename {easywecom-framework => easyink-framework}/src/main/java/com/easywecom/framework/interceptor/impl/SameUrlDataInterceptor.java (100%) mode change 100755 => 100644 rename {easywecom-framework => easyink-framework}/src/main/java/com/easywecom/framework/security/filter/JwtAuthenticationTokenFilter.java (100%) mode change 100755 => 100644 rename {easywecom-framework => easyink-framework}/src/main/java/com/easywecom/framework/security/handle/AuthenticationEntryPointImpl.java (100%) mode change 100755 => 100644 rename {easywecom-framework => easyink-framework}/src/main/java/com/easywecom/framework/security/handle/LogoutSuccessHandlerImpl.java (100%) mode change 100755 => 100644 rename {easywecom-framework => easyink-framework}/src/main/java/com/easywecom/framework/web/domain/Server.java (100%) mode change 100755 => 100644 rename {easywecom-framework => easyink-framework}/src/main/java/com/easywecom/framework/web/domain/server/Cpu.java (100%) mode change 100755 => 100644 rename {easywecom-framework => easyink-framework}/src/main/java/com/easywecom/framework/web/domain/server/Jvm.java (100%) mode change 100755 => 100644 rename {easywecom-framework => easyink-framework}/src/main/java/com/easywecom/framework/web/domain/server/Mem.java (100%) mode change 100755 => 100644 rename {easywecom-framework => easyink-framework}/src/main/java/com/easywecom/framework/web/domain/server/Sys.java (100%) mode change 100755 => 100644 rename {easywecom-framework => easyink-framework}/src/main/java/com/easywecom/framework/web/domain/server/SysFile.java (100%) mode change 100755 => 100644 rename {easywecom-framework => easyink-framework}/src/main/java/com/easywecom/framework/web/exception/GlobalExceptionHandler.java (100%) mode change 100755 => 100644 rename {easywecom-framework => easyink-framework}/src/main/java/com/easywecom/framework/web/service/FileService.java (100%) mode change 100755 => 100644 rename {easywecom-quartz => easyink-quartz}/pom.xml (74%) mode change 100755 => 100644 create mode 100644 easyink-quartz/src/main/java/com/easyink/quartz/config/ScheduleConfig.java create mode 100644 easyink-quartz/src/main/java/com/easyink/quartz/controller/SysJobController.java create mode 100644 easyink-quartz/src/main/java/com/easyink/quartz/controller/SysJobLogController.java create mode 100644 easyink-quartz/src/main/java/com/easyink/quartz/domain/SysJob.java create mode 100644 easyink-quartz/src/main/java/com/easyink/quartz/domain/SysJobLog.java create mode 100644 easyink-quartz/src/main/java/com/easyink/quartz/mapper/SysJobLogMapper.java create mode 100644 easyink-quartz/src/main/java/com/easyink/quartz/mapper/SysJobMapper.java create mode 100644 easyink-quartz/src/main/java/com/easyink/quartz/service/ISysJobLogService.java create mode 100644 easyink-quartz/src/main/java/com/easyink/quartz/service/ISysJobService.java create mode 100644 easyink-quartz/src/main/java/com/easyink/quartz/service/impl/SysJobLogServiceImpl.java create mode 100644 easyink-quartz/src/main/java/com/easyink/quartz/service/impl/SysJobServiceImpl.java create mode 100644 easyink-quartz/src/main/java/com/easyink/quartz/task/CustomerPortraitTask.java create mode 100644 easyink-quartz/src/main/java/com/easyink/quartz/task/EmpleCodeThroughFriendTimeSwitchTask.java create mode 100644 easyink-quartz/src/main/java/com/easyink/quartz/task/GroupChatStatisticTask.java create mode 100644 easyink-quartz/src/main/java/com/easyink/quartz/task/GroupCodeActualTimeTask.java create mode 100644 easyink-quartz/src/main/java/com/easyink/quartz/task/MessageResultTask.java create mode 100644 easyink-quartz/src/main/java/com/easyink/quartz/task/PageHomeDataTask.java create mode 100644 easyink-quartz/src/main/java/com/easyink/quartz/task/RemoveMaterialTask.java create mode 100644 easyink-quartz/src/main/java/com/easyink/quartz/task/RyTask.java create mode 100644 easyink-quartz/src/main/java/com/easyink/quartz/task/TaskFissionStatusTask.java create mode 100644 easyink-quartz/src/main/java/com/easyink/quartz/task/TodoReminderTask.java create mode 100644 easyink-quartz/src/main/java/com/easyink/quartz/task/TransferResignedResultTask.java create mode 100644 easyink-quartz/src/main/java/com/easyink/quartz/task/TransferResultTask.java create mode 100644 easyink-quartz/src/main/java/com/easyink/quartz/task/UserBehaviorDataTak.java create mode 100644 easyink-quartz/src/main/java/com/easyink/quartz/task/WeOperationsCenterSopTask.java create mode 100644 easyink-quartz/src/main/java/com/easyink/quartz/task/moment/MomentPublishStatusTask.java create mode 100644 easyink-quartz/src/main/java/com/easyink/quartz/task/moment/MomentStartCreateTask.java create mode 100644 easyink-quartz/src/main/java/com/easyink/quartz/task/moment/MomentUpdateCreatedStatusTask.java create mode 100644 easyink-quartz/src/main/java/com/easyink/quartz/util/AbstractQuartzJob.java create mode 100644 easyink-quartz/src/main/java/com/easyink/quartz/util/CronUtils.java create mode 100644 easyink-quartz/src/main/java/com/easyink/quartz/util/JobInvokeUtil.java create mode 100644 easyink-quartz/src/main/java/com/easyink/quartz/util/QuartzDisallowConcurrentExecution.java create mode 100644 easyink-quartz/src/main/java/com/easyink/quartz/util/QuartzJobExecution.java create mode 100644 easyink-quartz/src/main/java/com/easyink/quartz/util/ScheduleUtils.java rename {easywecom-quartz => easyink-quartz}/src/main/java/com/easywecom/quartz/config/ScheduleConfig.java (100%) mode change 100755 => 100644 rename {easywecom-quartz => easyink-quartz}/src/main/java/com/easywecom/quartz/controller/SysJobController.java (100%) mode change 100755 => 100644 rename {easywecom-quartz => easyink-quartz}/src/main/java/com/easywecom/quartz/controller/SysJobLogController.java (100%) mode change 100755 => 100644 rename {easywecom-quartz => easyink-quartz}/src/main/java/com/easywecom/quartz/domain/SysJob.java (100%) mode change 100755 => 100644 rename {easywecom-quartz => easyink-quartz}/src/main/java/com/easywecom/quartz/domain/SysJobLog.java (100%) mode change 100755 => 100644 rename {easywecom-quartz => easyink-quartz}/src/main/java/com/easywecom/quartz/mapper/SysJobLogMapper.java (100%) mode change 100755 => 100644 rename {easywecom-quartz => easyink-quartz}/src/main/java/com/easywecom/quartz/mapper/SysJobMapper.java (100%) mode change 100755 => 100644 rename {easywecom-quartz => easyink-quartz}/src/main/java/com/easywecom/quartz/service/ISysJobLogService.java (100%) mode change 100755 => 100644 rename {easywecom-quartz => easyink-quartz}/src/main/java/com/easywecom/quartz/service/ISysJobService.java (100%) mode change 100755 => 100644 rename {easywecom-quartz => easyink-quartz}/src/main/java/com/easywecom/quartz/service/impl/SysJobLogServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-quartz => easyink-quartz}/src/main/java/com/easywecom/quartz/service/impl/SysJobServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-quartz => easyink-quartz}/src/main/java/com/easywecom/quartz/task/CustomerPortraitTask.java (100%) mode change 100755 => 100644 rename {easywecom-quartz => easyink-quartz}/src/main/java/com/easywecom/quartz/task/EmpleCodeThroughFriendTimeSwitchTask.java (100%) mode change 100755 => 100644 rename {easywecom-quartz => easyink-quartz}/src/main/java/com/easywecom/quartz/task/GroupChatStatisticTask.java (100%) mode change 100755 => 100644 rename {easywecom-quartz => easyink-quartz}/src/main/java/com/easywecom/quartz/task/GroupCodeActualTimeTask.java (100%) mode change 100755 => 100644 rename {easywecom-quartz => easyink-quartz}/src/main/java/com/easywecom/quartz/task/MessageResultTask.java (100%) mode change 100755 => 100644 rename {easywecom-quartz => easyink-quartz}/src/main/java/com/easywecom/quartz/task/PageHomeDataTask.java (100%) mode change 100755 => 100644 rename {easywecom-quartz => easyink-quartz}/src/main/java/com/easywecom/quartz/task/RemoveMaterialTask.java (100%) mode change 100755 => 100644 rename {easywecom-quartz => easyink-quartz}/src/main/java/com/easywecom/quartz/task/RyTask.java (100%) mode change 100755 => 100644 rename {easywecom-quartz => easyink-quartz}/src/main/java/com/easywecom/quartz/task/TaskFissionStatusTask.java (100%) mode change 100755 => 100644 rename {easywecom-quartz => easyink-quartz}/src/main/java/com/easywecom/quartz/task/TodoReminderTask.java (100%) mode change 100755 => 100644 rename {easywecom-quartz => easyink-quartz}/src/main/java/com/easywecom/quartz/task/TransferResignedResultTask.java (100%) mode change 100755 => 100644 rename {easywecom-quartz => easyink-quartz}/src/main/java/com/easywecom/quartz/task/TransferResultTask.java (100%) mode change 100755 => 100644 rename {easywecom-quartz => easyink-quartz}/src/main/java/com/easywecom/quartz/task/UserBehaviorDataTak.java (100%) mode change 100755 => 100644 rename {easywecom-quartz => easyink-quartz}/src/main/java/com/easywecom/quartz/task/WeOperationsCenterSopTask.java (100%) mode change 100755 => 100644 rename {easywecom-quartz => easyink-quartz}/src/main/java/com/easywecom/quartz/task/moment/MomentPublishStatusTask.java (100%) mode change 100755 => 100644 rename {easywecom-quartz => easyink-quartz}/src/main/java/com/easywecom/quartz/task/moment/MomentStartCreateTask.java (100%) mode change 100755 => 100644 rename {easywecom-quartz => easyink-quartz}/src/main/java/com/easywecom/quartz/task/moment/MomentUpdateCreatedStatusTask.java (100%) mode change 100755 => 100644 rename {easywecom-quartz => easyink-quartz}/src/main/java/com/easywecom/quartz/util/AbstractQuartzJob.java (100%) mode change 100755 => 100644 rename {easywecom-quartz => easyink-quartz}/src/main/java/com/easywecom/quartz/util/CronUtils.java (100%) mode change 100755 => 100644 rename {easywecom-quartz => easyink-quartz}/src/main/java/com/easywecom/quartz/util/JobInvokeUtil.java (100%) mode change 100755 => 100644 rename {easywecom-quartz => easyink-quartz}/src/main/java/com/easywecom/quartz/util/QuartzDisallowConcurrentExecution.java (100%) mode change 100755 => 100644 rename {easywecom-quartz => easyink-quartz}/src/main/java/com/easywecom/quartz/util/QuartzJobExecution.java (100%) mode change 100755 => 100644 rename {easywecom-quartz => easyink-quartz}/src/main/java/com/easywecom/quartz/util/ScheduleUtils.java (100%) mode change 100755 => 100644 rename {easywecom-quartz => easyink-quartz}/src/main/resources/mapper/quartz/SysJobLogMapper.xml (91%) mode change 100755 => 100644 rename {easywecom-quartz => easyink-quartz}/src/main/resources/mapper/quartz/SysJobMapper.xml (91%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/pom.xml (70%) mode change 100755 => 100644 create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/annotation/CustomerTrajectoryRecord.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/annotation/aspect/DataScopeAspect.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/annotation/aspect/LogAspect.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/client/OrderClient.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/client/We3rdAppClient.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/client/We3rdUserClient.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/client/WeAccessTokenClient.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/client/WeAdminClient.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/client/WeAgentClient.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/client/WeCropTagClient.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/client/WeCustomerClient.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/client/WeCustomerGroupClient.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/client/WeCustomerMessagePushClient.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/client/WeDepartMentClient.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/client/WeExternalContactClient.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/client/WeGroupChatJoinClient.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/client/WeMediaClient.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/client/WeMessagePushClient.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/client/WeMomentClient.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/client/WeMsgAuditClient.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/client/WeTicketClient.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/client/WeUserClient.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/client/WeWelcomeMsgClient.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/client/WechatOpenClient.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/convert/autotag/AddTagRuleConvert.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/convert/autotag/TagRuleUserRelConvert.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/convert/autotag/UpdateTagRuleConvert.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/convert/autotag/customer/AddTagRuleCustomerConvert.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/convert/autotag/customer/UpdateTagRuleCustomerConvert.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/convert/autotag/group/AddTagRuleGroupConvert.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/convert/autotag/group/UpdateTagRuleGroupConvert.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/convert/autotag/keyword/AddTagRuleKeywordConvert.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/convert/autotag/keyword/UpdateTagRuleKeywordConvert.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/OrderGroupToOrderCustomerEntity.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/OrderUserToOrderAccountEntity.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeApp.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeApplicationCenter.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeAuthCorpInfo.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeAuthCorpInfoExtend.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeCategory.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeChatCollection.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeChatContactMapping.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeCustomer.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeCustomerAddGroup.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeCustomerAddUser.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeCustomerMessage.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeCustomerMessageOriginal.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeCustomerMessageTimeTask.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeCustomerMessgaeResult.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeCustomerPortrait.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeCustomerSeedMessage.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeCustomerSocialConn.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeCustomerTagRel.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeCustomerTrajectory.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeEmpleCode.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeEmpleCodeAnalyse.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeEmpleCodeMaterial.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeEmpleCodeTag.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeEmpleCodeUseScop.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeExternalUserMappingUser.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeFlowerCustomerRel.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeFlowerCustomerTagRel.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeGroup.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeGroupCode.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeGroupCodeActual.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeGroupMember.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeGroupSop.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeGroupSopChat.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeGroupSopMaterial.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeGroupSopPic.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeGroupStatistic.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeGroupTag.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeGroupTagCategory.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeGroupTagRel.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeH5TicketDto.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeKeywordGroupTask.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeLeaveUser.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeMaterial.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeMaterialConfig.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeMaterialTagEntity.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeMaterialTagRelEntity.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeMessagePush.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeMsgTlp.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeMsgTlpMaterial.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeMsgTlpMaterialRel.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeMsgTlpScope.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeMsgTlpSpecialRule.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeMyApplication.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeMyApplicationUseScopeEntity.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeOperationsCenterCustomerSopFilterEntity.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeOperationsCenterGroupSopFilterCycleEntity.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeOperationsCenterGroupSopFilterEntity.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeOperationsCenterSopDetailEntity.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeOperationsCenterSopEntity.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeOperationsCenterSopMaterialEntity.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeOperationsCenterSopRulesEntity.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeOperationsCenterSopScopeEntity.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeOperationsCenterSopTaskEntity.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WePresTagGroupTask.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WePresTagGroupTaskScope.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WePresTagGroupTaskStat.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WePresTagGroupTaskTag.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeRedeemCodeWelcomeMsgAndMaterial.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeSensitive.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeSensitiveAct.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeSensitiveActHit.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeSensitiveAuditScope.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeTag.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeTagGroup.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeUserBehaviorData.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeUserRole.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeWordsCategory.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeWordsDetailEntity.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeWordsGroupEntity.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/WeWordsLastUseEntity.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/AddWeMaterialDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/AllocateWeCustomerDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/AllocateWeCustomerV2DTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/AllocateWeGroupDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/AutoConfigDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/BaseApplicationDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/BatchSaveCustomerExtendPropertyDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/BatchUpdateUserInfoDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/BindDetailDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/FindWeGroupCodeDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/FindWeGroupDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/FindWeGroupMemberDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/FindWeMaterialDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/GetJoinQrCodeResp.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/GroupChatStatisticDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/LeaveWeUserListsDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/QueryApplicationDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/QueryCustomerExtendPropertyDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/QueryPresTagGroupDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/QueryPresTagGroupStatDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/QueryUserDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/RemoveMaterialDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/ResetCategoryDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/RestoreMaterialDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/SaveCustomerExtendPropertyDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/SetApplicationUseScopeDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/ShowMaterialSwitchDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/TemporaryMaterialDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/UnBindOrderDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/UpdateApplicationDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/UpdateUserInfoDetailDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/UpdateWeMaterialDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/UserBehaviorDataDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/WeAccessTokenDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/WeAccessUserInfo3rdDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/WeAppDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/WeCategorySidebarSwitchDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/WeChatCollectionDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/WeChatUserDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/WeCommunityNewGroupDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/WeCustomerDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/WeCustomerExtendRest.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/WeCustomerMessageDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/WeCustomerMessagePushResultDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/WeCustomerMessageToUserDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/WeCustomerPushMessageDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/WeDepartMentDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/WeEmpleCodeDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/WeExternalContactDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/WeGroupExtendDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/WeGroupMemberDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/WeGroupSopDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/WeKeywordGroupTaskDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/WeLoginUserInfoDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/WeMaterialDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/WeMaterialTagDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/WeMaterialTagRelRemoveDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/WeMediaDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/WeMessagePushDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/WeMessagePushGroupDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/WeMessagePushResultDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/WeOperationsCenterSopSearchDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/WePageCountDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/WePageStaticDataDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/WePermanentCodeDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/WePresTagGroupTaskDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/WeResultDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/WeTagDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/WeUserDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/WeUserInfoDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/WeUserListDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/WeWelcomeMsg.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/WeWordsChangeSortDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/WeWordsDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/WeWordsDelDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/WeWordsImportDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/WeWordsQueryDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/WeWordsSortDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/app/ToOpenCorpIdResp.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/app/UserIdToOpenUserIdResp.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/app/WeAdminListResp.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/app/WePermanentCodeResp.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/app/WePreAuthCodeResp.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/app/WeSuiteTokenReq.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/app/WeSuiteTokenResp.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/autoconfig/BaseAdminResult.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/autoconfig/DomainOwnershipVerifyInfoResp.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/autoconfig/InitApplicationModel.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/autoconfig/MobileConfirmResp.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/autoconfig/WeApiAccessibleAppsResp.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/autoconfig/WeCheckCustomAppUrlResp.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/autoconfig/WeConfirmMobileRsp.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/autoconfig/WeCorpApplicationResp.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/autoconfig/WeGetChatMenuResp.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/autoconfig/WeGetGroupListResp.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/autoconfig/WeGetKeyResp.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/autoconfig/WeLoginResp.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/autotag/AbstractTagRuleDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/autotag/AbstractTagRuleWithUserDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/autotag/TagRuleBatchStatusDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/autotag/TagRuleDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/autotag/TagRuleDeleteDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/autotag/TagRuleWithUserDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/autotag/customer/AbstractCustomerTagRuleDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/autotag/customer/AddCustomerTagRuleDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/autotag/customer/CustomerSceneDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/autotag/customer/CustomerTagRuleDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/autotag/customer/UpdateCustomerTagRuleDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/autotag/group/AbstractGroupTagRuleDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/autotag/group/AddGroupTagRuleDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/autotag/group/GroupSceneDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/autotag/group/GroupTagRuleDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/autotag/group/UpdateGroupTagRuleDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/autotag/keyword/AbstractKeywordTagRuleDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/autotag/keyword/AddKeywordTagRuleDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/autotag/keyword/KeywordTagRuleDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/autotag/keyword/UpdateKeywordTagRuleDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/autotag/test/KeywordTextListDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/common/Attachment.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/common/AttachmentParam.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/common/Attachments.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/common/File.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/common/Image.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/common/Link.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/common/Messages.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/common/MiniProgram.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/common/Text.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/common/Video.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/customer/CustomerGroupDetail.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/customer/CustomerGroupList.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/customer/CustomerGroupMember.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/customer/CustomerGroupMemberInvitorDetail.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/customer/CustomerTagEdit.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/customer/EditCustomerDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/customer/ExternalContact.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/customer/ExternalUserDetail.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/customer/ExternalUserTag.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/customer/FollowInfo.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/customer/FollowUser.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/customer/FollowUserList.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/customer/GetExternalDetailResp.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/customer/req/GetByUserReq.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/customer/resp/GetByUserResp.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/customersop/AddWeCustomerSopDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/customersop/Column.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/customersop/EditUserDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/emplecode/AddWeEmpleCodeDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/emplecode/FindWeEmpleCodeAnalyseDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/emplecode/FindWeEmpleCodeDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/emplecode/UpdateWeEmplyCodeDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/group/AddJoinWayConfigDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/group/AddJoinWayResult.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/group/DelJoinWayConfigDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/group/DelJoinWayResult.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/group/GetJoinWayConfigDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/group/GetJoinWayResult.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/group/GroupChatListReq.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/group/GroupChatListResp.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/group/UpdateJoinWayConfigDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/group/UpdateJoinWayResult.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/groupcode/AddCorpCodeDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/groupcode/EditCorpCodeDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/groupsop/AddGroupSopFilterDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/groupsop/AddWeGroupSopDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/groupsop/AddWeOperationsCenterSopRuleDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/groupsop/DelWeGroupSopDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/groupsop/FindWeGroupSopDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/groupsop/FindWeSopDetailDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/groupsop/FindWeSopExecutedRulesDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/groupsop/FindWeSopExecutedUsersDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/groupsop/GetSopTaskDetailDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/groupsop/SopBatchSwitchDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/groupsop/UpdateWeSopDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/message/AsyncResultDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/message/Attachment.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/message/CustomerMessagePushDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/message/DetailMessageStatusResultDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/message/FileDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/message/ImageMessageDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/message/LinkMessageDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/message/MiniprogramMessageDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/message/QueryCustomerMessageStatusResultDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/message/QueryCustomerMessageStatusResultDataObjectDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/message/RadarMessageDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/message/SendMessageResultDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/message/TextMessageDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/message/VideoDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/message/WeCustomerMessagePushDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/moment/AddMomentTaskDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/moment/CreateMomentTaskDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/moment/MomentAttachment.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/moment/MomentCommentsDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/moment/MomentCustomerDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/moment/MomentListDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/moment/MomentStrategyDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/moment/MomentStrategyGetDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/moment/MomentTaskDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/moment/MomentUserCustomerDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/moment/SearchMomentContentDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/moment/SendToUserDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/msgaudit/WeMsgAuditDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/pro/EditCustomerFromPlusDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/pro/QueryCustomerFromPlusDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/radar/DeleteRadarChannelDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/radar/DeleteRadarDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/radar/GetRadarShortUrlDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/radar/RadarChannelDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/radar/RadarClickRecordDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/radar/RadarDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/radar/SearchChannelRecordDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/radar/SearchChannelRecordDetailDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/radar/SearchCustomerRecordDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/radar/SearchCustomerRecordDetailDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/radar/SearchRadarAnalyseDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/radar/SearchRadarChannelDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/radar/SearchRadarDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/redeemcode/WeRedeemCodeActivityDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/redeemcode/WeRedeemCodeActivityDeleteDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/redeemcode/WeRedeemCodeDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/redeemcode/WeRedeemCodeDeleteDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/redeemcode/WeRedeemCodeImportDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/tag/RemoveWeCustomerTagDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/tag/WeCropDelDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/tag/WeCropGropTagDtlDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/tag/WeCropGroupTagDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/tag/WeCropGroupTagListDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/tag/WeCropTagDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/tag/WeFindCropTagParam.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/tag/WeGroupTagDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/tag/WeMaterialTagAddDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/tag/WeWordsModifyCategoryDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/transfer/GetResignedTransferDetailDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/transfer/GetUnassignedListReq.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/transfer/GetUnassignedListResp.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/transfer/TransferCustomerDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/transfer/TransferCustomerReq.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/transfer/TransferCustomerResp.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/transfer/TransferRecordPageDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/transfer/TransferResignedCustomerReq.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/transfer/TransferResignedCustomerResp.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/transfer/TransferResignedGroupChatReq.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/transfer/TransferResignedGroupChatResp.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/transfer/TransferResignedUserDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/transfer/TransferResignedUserListDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/transfer/TransferResultReq.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/transfer/TransferResultResignedReq.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/transfer/TransferResultResignedResp.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/transfer/TransferResultResp.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/unBindCustomerDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/wegrouptag/AddWeGroupTagCategoryDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/wegrouptag/BatchTagRelDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/wegrouptag/DelWeGroupTagCategoryDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/wegrouptag/FindWeGroupTagCategoryDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/wegrouptag/PageWeGroupTagCategoryDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/wegrouptag/UpdateWeGroupTagCategoryDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/welcomemsg/GroupWelcomeMsgAddDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/welcomemsg/GroupWelcomeMsgDeleteDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/welcomemsg/GroupWelcomeMsgResult.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/welcomemsg/GroupWelcomeMsgUpdateDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/welcomemsg/HitSpecialWelcomeMsgMaterialVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/welcomemsg/WelComeMsgAddDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/welcomemsg/WelComeMsgDeleteDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/welcomemsg/WelComeMsgUpdateDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/welcomemsg/WelComeMsgUpdateEmployDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/welcomemsg/WelComeMsgUpdateGroupDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/wordscategory/AddWeWordsCategoryDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/wordscategory/DeleteWeWordsCategoryDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/wordscategory/FindWeWordsCategoryDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/wordscategory/UpdateWeWordsCategoryDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/wordscategory/WeWordsCategoryChangeSort.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/wordscategory/WeWordsCategoryChangeSortDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/dto/wordscategory/WeWordsCategoryChildSortDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/entity/BaseExternalUserEntity.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/entity/WeCustomerExportDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/entity/appconfig/YiGeOrderAppConfig.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/entity/autotag/WeAutoTagCustomerRuleEffectTime.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/entity/autotag/WeAutoTagCustomerScene.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/entity/autotag/WeAutoTagCustomerSceneTagRel.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/entity/autotag/WeAutoTagGroupScene.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/entity/autotag/WeAutoTagGroupSceneGroupRel.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/entity/autotag/WeAutoTagGroupSceneTagRel.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/entity/autotag/WeAutoTagKeyword.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/entity/autotag/WeAutoTagKeywordTagRel.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/entity/autotag/WeAutoTagRule.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/entity/autotag/WeAutoTagRuleHitCustomerRecord.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/entity/autotag/WeAutoTagRuleHitCustomerRecordTagRel.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/entity/autotag/WeAutoTagRuleHitGroupRecord.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/entity/autotag/WeAutoTagRuleHitGroupRecordTagRel.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/entity/autotag/WeAutoTagRuleHitKeywordRecord.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/entity/autotag/WeAutoTagRuleHitKeywordRecordTagRel.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/entity/autotag/WeAutoTagUserRel.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/entity/customer/ExtendPropertyMultipleOption.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/entity/customer/WeCustomerExtendProperty.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/entity/customer/WeCustomerExtendPropertyRel.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/entity/moment/Location.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/entity/moment/Moment.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/entity/moment/MomentComments.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/entity/moment/MomentCustomer.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/entity/moment/MomentStrategy.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/entity/moment/MomentTask.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/entity/moment/Privilege.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/entity/moment/VisibleRange.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/entity/moment/WeMomentDetailRelEntity.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/entity/moment/WeMomentTaskEntity.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/entity/moment/WeMomentTaskResultEntity.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/entity/moment/WeMomentUserCustomerRelEntity.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/entity/radar/WeRadar.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/entity/radar/WeRadarChannel.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/entity/radar/WeRadarClickRecord.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/entity/radar/WeRadarTag.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/entity/radar/WeRadarUrl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/entity/redeemcode/RedeemCodeAlarmUser.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/entity/redeemcode/WeRedeemCode.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/entity/redeemcode/WeRedeemCodeActivity.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/entity/transfer/WeCustomerTransferConfig.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/entity/transfer/WeCustomerTransferRecord.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/entity/transfer/WeResignedCustomerTransferRecord.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/entity/transfer/WeResignedGroupTransferRecord.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/entity/transfer/WeResignedTransferRecord.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/entity/wechatopen/WeOpenConfig.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/order/Order.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/order/OrderBaseResp.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/order/OrderBindInfoDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/order/OrderBindInfoVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/order/OrderCreate.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/order/OrderCreateDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/order/OrderCustomer.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/order/OrderDetailDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/order/OrderHadlerDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/order/OrderHandlerVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/order/OrderListDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/order/OrderListMainVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/order/OrderListVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/order/OrderLoginVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/order/OrderNetworkVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/order/OrderTotal.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/order/OrderTotalDTO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/order/OrderUser.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/order/OrderVerifyVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/query/GroupChatStatisticQuery.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/query/UserBehaviorDataQuery.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/query/WePageStateQuery.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/query/WeSensitiveHitQuery.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/query/autotag/CustomerTagRuleRecordQuery.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/query/autotag/GroupTagRuleRecordQuery.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/query/autotag/RuleInfoQuery.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/query/autotag/TagRuleQuery.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/query/autotag/TagRuleRecordKeywordDetailQuery.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/query/autotag/TagRuleRecordQuery.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/query/groupcode/GroupCodeDetailQuery.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/req/GenerateUrlLinkReq.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/req/UnionId2ExternalUserIdReq.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/req/WePageBaseReq.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/resp/GenerateUrlLinkResp.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/resp/GetAccessTokenResp.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/resp/GetAgentResp.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/resp/GetOfficialAuthInfoResp.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/resp/GetUnionUserInfoResp.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/resp/SnsUserInfoResp.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/resp/UnionId2ExternalUserIdResp.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/resp/WePageBaseResp.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/resp/WechatOpenBaseResp.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/AllocateLeaveUserResp.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/AllocateWeCustomerResp.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/AllocateWeGroupResp.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/AppIdVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/ApplicationIntroductionVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/BatchUpdateUserInfoVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/BindDetailVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/BindOrderTotalVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/CheckCorpIdVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/ConversationArchiveVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/CustomerMessagePushVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/FindCollectionsVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/FindExistWordsCategoryNameList.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/FindWeGroupMemberCountVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/GetWeEmployCodeVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/InsertWeMaterialVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/MomentStrategyGetVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/MyApplicationIntroductionVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/PresTagExpectedReceptionVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/QueryCustomerFromPlusVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/ReleaseNotesVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/SelectWeEmplyCodeWelcomeMsgVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/SuiteAuthStatusVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/UserVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/WeAdminQrcodeVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/WeAllocateCustomersVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/WeAllocateGroupsVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/WeApplicationDetailVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/WeCategoryBaseInfoVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/WeCategoryVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/WeCheckQrcodeVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/WeCommunityNewGroupVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/WeCommunityTaskEmplVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/WeCorpInfoVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/WeCustomerExportVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/WeCustomerMakeLabelVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/WeCustomerMessageResultVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/WeCustomerNameAndUserIdVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/WeCustomerSearchTermVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/WeCustomerSeedMessageVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/WeEmpleCodeVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/WeEmplyCodeAnalyseCountVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/WeEmplyCodeAnalyseVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/WeEmplyCodeDownloadVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/WeEmplyCodeScopeUserVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/WeGroupCodeActualExistVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/WeGroupCodeVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/WeGroupSopVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/WeInternalPreLoginParamVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/WeLeaveAllocateVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/WeLeaveUserInfoAllocateVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/WeLeaveUserV2VO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/WeLeaveUserVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/WeMakeCustomerTagVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/WeMaterialAndTagRel.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/WeMaterialCountVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/WeMaterialFileVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/WeMaterialTagVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/WeMaterialVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/WeMsgAuditVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/WeOperationsCenterSopVo.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/WePreAuthCodeVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/WePreLoginParamVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/WePresTagGroupTaskStatResultVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/WePresTagGroupTaskStatVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/WePresTagGroupTaskVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/WeServerTypeVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/WeUserBriefInfoVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/WeUserInfoVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/WeUserVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/WeWordsCategoryVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/WeWordsImportVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/WeWordsUrlVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/WeWordsVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/WxCpXmlMessageVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/autotag/GroupInfoVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/autotag/TagInfoVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/autotag/TagRuleDepartmentInfoVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/autotag/TagRuleInfoVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/autotag/TagRuleListVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/autotag/TagRuleUserInfoVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/autotag/TagRuleUserListVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/autotag/customer/CustomerSceneVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/autotag/customer/TagRuleCustomerInfoVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/autotag/group/GroupSceneRuleVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/autotag/group/GroupSceneVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/autotag/group/TagRuleGroupInfoVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/autotag/keyword/TagRuleKeywordInfoVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/autotag/record/CustomerCountVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/autotag/record/TagRuleRecordVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/autotag/record/customer/CustomerTagRuleRecordVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/autotag/record/group/GroupTagRuleRecordVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/autotag/record/keyword/KeywordRecordDetailVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/autotag/record/keyword/KeywordTagRuleRecordVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/customer/WeCustomerSumVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/customer/WeCustomerUserListVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/customer/WeCustomerVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/groupcode/GroupCodeActivityFirstVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/groupcode/GroupCodeDetailVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/groupcode/GroupDetailVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/moment/AddMomentTaskVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/moment/MomentAttachmentVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/moment/MomentCommentsVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/moment/MomentCustomerVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/moment/MomentListVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/moment/MomentStrategyListVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/moment/MomentTaskResultVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/moment/MomentTaskVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/moment/MomentTotalVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/moment/MomentUserCustomerVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/moment/SearchMomentVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/radar/RadarAnalyseCountVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/radar/RadarAnalyseVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/radar/RadarChannelRecordDetailVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/radar/RadarChannelRecordVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/radar/RadarChannelSortVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/radar/RadarCustomerClickRecordDetailVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/radar/RadarCustomerRecordVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/radar/RadarRecordTotalVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/radar/RadarSumClickRecordVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/radar/WeRadarChannelVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/radar/WeRadarVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/redeemcode/ImportRedeemCodeVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/redeemcode/RedeemCodeAlarmUserVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/redeemcode/WeRedeemCodeActivityVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/redeemcode/WeRedeemCodeVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/sop/AbstractExecuteVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/sop/BaseCustomerSopTagVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/sop/BaseGroupSopTagVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/sop/BaseGroupSopWeUserVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/sop/BaseWeOperationsCenterSopVo.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/sop/CustomerSopVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/sop/DepartmentVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/sop/FindGroupSopFilterVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/sop/GetCustomerSopFilterVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/sop/GetSopTaskByUserIdVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/sop/GetTaskDetailByUserIdVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/sop/GroupSopVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/sop/SopAttachmentVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/sop/SopDetailVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/sop/SopRuleVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/sop/SopUserVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/sop/WeOperationsCenterSopDetailByCycleTypeVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/sop/WeOperationsCenterSopDetailByTimingTypeVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/sop/WeOperationsCenterSopDetailChatVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/sop/WeOperationsCenterSopDetailCustomerVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/sop/WeOperationsCenterSopScopeVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/sop/WeSopExecutedRulesVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/sop/WeSopExecutedUsersVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/sop/WeSopTaskCountVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/sop/WeSopUserIdAndTargetIdVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/sop/abs/AbstractWeOperationsCenterSopDetailVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/transfer/GetResignedTransferCustomerDetailVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/transfer/GetResignedTransferGroupDetailVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/transfer/TransferResignedUserVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/transfer/WeCustomerTransferRecordVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/wegrouptag/PageWeGroupTagCategoryVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/wegrouptag/PageWeGroupTagVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/wegrouptag/WeGroupTagCategoryVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/wegrouptag/WeGroupTagRelDetail.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/wegrouptag/WeGroupTagRelVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/welcomemsg/WeEmployMaterialVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/welcomemsg/WeMsgTlpListDetailVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/welcomemsg/WeMsgTlpListVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/welcomemsg/WeUserUseScopeVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/domain/vo/welcomemsg/WelcomeMsgGroupMaterialCountVO.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/factory/WeCallBackEventFactory.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/factory/WeEventHandle.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/factory/WeEventStrategy.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/factory/WeStrategyBeanFactory.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/factory/impl/WeEventBatchJobResultImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/factory/impl/WeEventChangeContactImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/factory/impl/WeEventChangeExternalChatImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/factory/impl/WeEventChangeExternalContactImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/factory/impl/WeEventChangeExternalTagImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/factory/impl/WeEventSubscribeImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/factory/impl/WeEventUnSubscribeImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/factory/impl/WeInfoTypeCancelAuthImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/factory/impl/WeInfoTypeChangeAuthImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/factory/impl/WeInfoTypeCreateAuthImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/factory/impl/WeInfoTypeResetPermanentCodeImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/factory/impl/WeInfoTypeSuiteTicketImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/factory/impl/customer/WeCallBackAddExternalContactImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/factory/impl/customer/WeCallBackAddHalfExternalContactImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/factory/impl/customer/WeCallBackDelExternalContactImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/factory/impl/customer/WeCallBackDelFollowUserImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/factory/impl/customer/WeCallBackEditExternalContactImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/factory/impl/customer/WeCallBackMsgAuditApprovedImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/factory/impl/customer/WeCallbackTransferFailImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/factory/impl/customergroup/WeCallBackCreateGroupImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/factory/impl/customergroup/WeCallBackDismissImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/factory/impl/customergroup/WeCallBackUpdateGroupImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/factory/impl/party/WeCallBackCreatePartyImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/factory/impl/party/WeCallBackDeletePartyImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/factory/impl/party/WeCallBackUpdatePartyImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/factory/impl/tag/WeCallBackCreateCustomerTagImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/factory/impl/tag/WeCallBackDeleteCustomerTagImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/factory/impl/tag/WeCallBackUpdateCustomerTagImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/factory/impl/user/WeCallBackCreateUserImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/factory/impl/user/WeCallBackDeleteUserImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/factory/impl/user/WeCallBackUpdateUserImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/factory/impl/user/WeCallBackUpdateUserTagImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/handler/GenericTypeHandler.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/handler/ListTypeHandler.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/interceptor/OrderInterceptor.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/interceptor/We3rdAccessTokenInterceptor.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/interceptor/WeAccessTokenInterceptor.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/interceptor/WeAutoConfigInterceptor.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/interceptor/WeProviderAccessTokenInterceptor.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/interceptor/WeProviderAccessTokenInterceptor1.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/interceptor/WeSuiteAccessTokenInterceptor.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/interceptor/WeSuiteAccessTokenWebLoginInterceptor.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/interceptor/WechatOpenInterceptor.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/listener/ActualGroupCodeExpiredListener.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/listener/EmpleCodeExpiredListener.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/login/service/PermissionService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/login/service/SysLoginService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/login/service/UserDetailsServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/login/util/LoginTokenService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/ExtendPropertyMultipleOptionMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/OrderGroupToOrderCustomerMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/OrderUserToOrderAccountMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeApplicationCenterMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeAuthCorpInfoExtendMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeAuthCorpInfoMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeCategoryMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeChatContactMappingMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeCorpAccountMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeCustomerExtendPropertyMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeCustomerExtendPropertyRelMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeCustomerMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeCustomerMessageMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeCustomerMessageOriginalMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeCustomerMessageTimeTaskMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeCustomerMessgaeResultMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeCustomerSeedMessageMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeCustomerTagRelMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeCustomerTrajectoryMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeCustomerTransferConfigMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeCustomerTransferRecordMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeDepartmentMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeEmpleCodeAnalyseMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeEmpleCodeMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeEmpleCodeMaterialMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeEmpleCodeTagMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeEmpleCodeUseScopMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeExternalUserMappingUserMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeFlowerCustomerRelMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeFlowerCustomerTagRelMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeGroupCodeActualMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeGroupCodeMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeGroupMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeGroupMemberMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeGroupStatisticMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeGroupTagCategoryMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeGroupTagMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeGroupTagRelMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeMaterialConfigMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeMaterialMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeMaterialTagMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeMaterialTagRelMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeMessagePushMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeMsgTlpMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeMsgTlpMaterialMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeMsgTlpScopeMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeMsgTlpSpecialRuleMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeMyApplicationMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeMyApplicationUseScopeMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeOperationsCenterCustomerSopFilterMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeOperationsCenterGroupSopFilterCycleMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeOperationsCenterGroupSopFilterMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeOperationsCenterSopDetailMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeOperationsCenterSopMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeOperationsCenterSopMaterialMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeOperationsCenterSopRulesMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeOperationsCenterSopScopeMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeOperationsCenterSopTaskMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WePresTagGroupTaskMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WePresTagGroupTaskScopeMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WePresTagGroupTaskStatMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WePresTagGroupTaskTagMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeResignedCustomerTransferRecordMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeResignedGroupTransferRecordMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeResignedTransferRecordMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeSensitiveActHitMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeSensitiveActMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeSensitiveAuditScopeMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeSensitiveMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeTagGroupMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeTagMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeUserBehaviorDataMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeUserMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeUserRoleMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeWordsCategoryMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeWordsDetailMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeWordsGroupMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/WeWordsLastUseMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/autotag/WeAutoTagCustomerRuleEffectTimeMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/autotag/WeAutoTagCustomerSceneMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/autotag/WeAutoTagCustomerSceneTagRelMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/autotag/WeAutoTagGroupSceneGroupRelMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/autotag/WeAutoTagGroupSceneMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/autotag/WeAutoTagGroupSceneTagRelMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/autotag/WeAutoTagKeywordMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/autotag/WeAutoTagKeywordTagRelMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/autotag/WeAutoTagRuleHitCustomerRecordMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/autotag/WeAutoTagRuleHitCustomerRecordTagRelMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/autotag/WeAutoTagRuleHitGroupRecordMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/autotag/WeAutoTagRuleHitGroupRecordTagRelMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/autotag/WeAutoTagRuleHitKeywordRecordMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/autotag/WeAutoTagRuleHitKeywordRecordTagRelMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/autotag/WeAutoTagRuleMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/autotag/WeAutoTagUserRelMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/moment/WeMomentDetailRelMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/moment/WeMomentTaskMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/moment/WeMomentTaskResultMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/moment/WeMomentUserCustomerRelMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/radar/WeRadarChannelMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/radar/WeRadarClickRecordMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/radar/WeRadarMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/redeemcode/WeRedeemCodeActivityMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/redeemcode/WeRedeemCodeMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/mapper/wechatopen/WeOpenConfigMapper.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/ExtendPropertyMultipleOptionService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/OrderGroupToOrderCustomerService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/OrderUserToOrderAccountService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/PageHomeService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/We3rdAppService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeAccessTokenService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeApplicationCenterService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeAuthCorpInfoExtendService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeAuthCorpInfoService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeAutoConfigService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeCategoryService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeChatContactMappingService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeConversationArchiveService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeCorpAccountService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeCustomerExtendPropertyRelService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeCustomerExtendPropertyService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeCustomerMessageOriginalService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeCustomerMessagePushService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeCustomerMessageService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeCustomerMessgaeResultService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeCustomerSeedMessageService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeCustomerService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeCustomerTrajectoryService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeCustomerTransferConfigService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeCustomerTransferRecordService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeDepartmentService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeEmpleCodeAnalyseService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeEmpleCodeMaterialService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeEmpleCodeService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeEmpleCodeTagService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeEmpleCodeUseScopService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeExternalUserMappingUserService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeFlowerCustomerRelService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeFlowerCustomerTagRelService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeGroupCodeActualService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeGroupCodeService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeGroupMemberService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeGroupService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeGroupSopV2Service.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeGroupStatisticService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeGroupTagCategoryService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeGroupTagRelService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeGroupTagService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeInitService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeMaterialConfigService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeMaterialService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeMaterialTagRelService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeMaterialTagService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeMessagePushService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeMsgTlpMaterialService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeMsgTlpScopeService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeMsgTlpService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeMsgTlpSpecialRuleService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeMyApplicationService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeMyApplicationUseScopeService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeOperationsCenterCustomerSopFilterService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeOperationsCenterGroupSopFilterCycleService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeOperationsCenterGroupSopFilterService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeOperationsCenterSopDetailService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeOperationsCenterSopMaterialService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeOperationsCenterSopRulesService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeOperationsCenterSopScopeService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeOperationsCenterSopService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeOperationsCenterSopTaskService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WePresTagGroupTaskService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeResignedCustomerTransferRecordService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeResignedGroupTransferRecordService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeResignedTransferRecordService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeSensitiveActHitService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeSensitiveActService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeSensitiveAuditScopeService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeSensitiveService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeTagGroupService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeTagService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeUserBehaviorDataService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeUserRoleService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeUserService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeWordsCategoryService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeWordsDetailService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeWordsGroupService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/WeWordsLastUseService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/autotag/WeAutoTagCustomerRuleEffectTimeService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/autotag/WeAutoTagCustomerSceneService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/autotag/WeAutoTagCustomerSceneTagRelService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/autotag/WeAutoTagGroupSceneGroupRelService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/autotag/WeAutoTagGroupSceneService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/autotag/WeAutoTagGroupSceneTagRelService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/autotag/WeAutoTagKeywordService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/autotag/WeAutoTagKeywordTagRelService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/autotag/WeAutoTagRuleHitCustomerRecordService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/autotag/WeAutoTagRuleHitCustomerRecordTagRelService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/autotag/WeAutoTagRuleHitGroupRecordService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/autotag/WeAutoTagRuleHitGroupRecordTagRelService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/autotag/WeAutoTagRuleHitKeywordRecordService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/autotag/WeAutoTagRuleHitKeywordRecordTagRelService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/autotag/WeAutoTagRuleService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/autotag/WeAutoTagUserRelService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/ExtendPropertyMultipleOptionServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/OrderGroupToOrderCustomerServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/OrderUserToOrderAccountServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/PageHomeServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/We3rdAppServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeAccessTokenServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeApplicationCenterServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeAuthCorpInfoExtendServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeAuthCorpInfoServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeAutoConfigServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeCategoryServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeChatContactMappingServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeConversationArchiveServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeCorpAccountServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeCustomerExtendPropertyRelServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeCustomerExtendPropertyServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeCustomerMessageOriginalServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeCustomerMessagePushServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeCustomerMessageServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeCustomerMessgaeResultServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeCustomerSeedMessageServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeCustomerServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeCustomerTrajectoryServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeCustomerTransferConfigServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeCustomerTransferRecordServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeDepartmentServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeEmpleCodeAnalyseServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeEmpleCodeMaterialServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeEmpleCodeServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeEmpleCodeTagServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeEmpleCodeUseScopServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeExternalUserMappingUserServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeFlowerCustomerRelServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeFlowerCustomerTagRelServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeGroupCodeActualServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeGroupCodeServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeGroupMemberServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeGroupServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeGroupSopV2ServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeGroupStatisticServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeGroupTagCategoryServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeGroupTagRelServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeGroupTagServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeInitServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeMaterialConfigServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeMaterialServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeMaterialTagRelServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeMaterialTagServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeMessagePushServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeMsgTlpMaterialServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeMsgTlpScopeServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeMsgTlpServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeMsgTlpSpecialRuleServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeMyApplicationServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeMyApplicationUseScopeServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeOperationsCenterCustomerSopFilterServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeOperationsCenterGroupSopFilterCycleServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeOperationsCenterGroupSopFilterServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeOperationsCenterSopDetailServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeOperationsCenterSopMaterialServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeOperationsCenterSopRulesServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeOperationsCenterSopScopeServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeOperationsCenterSopServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeOperationsCenterSopTaskServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WePresTagGroupTaskServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeResignedCustomerTransferRecordServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeResignedGroupTransferRecordServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeResignedTransferRecordServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeSensitiveActHitServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeSensitiveActServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeSensitiveAuditScopeServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeSensitiveServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeTagGroupServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeTagServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeUserBehaviorDataServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeUserRoleServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeUserServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeWordsCategoryServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeWordsDetailServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeWordsGroupServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/WeWordsLastUseServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/autotag/WeAutoTagCustomerRuleEffectTimeServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/autotag/WeAutoTagCustomerSceneServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/autotag/WeAutoTagCustomerSceneTagRelServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/autotag/WeAutoTagGroupSceneGroupRelServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/autotag/WeAutoTagGroupSceneServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/autotag/WeAutoTagGroupSceneTagRelServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/autotag/WeAutoTagKeywordServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/autotag/WeAutoTagKeywordTagRelServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/autotag/WeAutoTagRuleHitCustomerRecordServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/autotag/WeAutoTagRuleHitCustomerRecordTagRelServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/autotag/WeAutoTagRuleHitGroupRecordServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/autotag/WeAutoTagRuleHitGroupRecordTagRelServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/autotag/WeAutoTagRuleHitKeywordRecordServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/autotag/WeAutoTagRuleHitKeywordRecordTagRelServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/autotag/WeAutoTagRuleServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/autotag/WeAutoTagUserRelServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/moment/WeMomentDetailRelServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/moment/WeMomentTaskResultServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/moment/WeMomentTaskServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/moment/WeMomentUserCustomerRelServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/radar/WeRadarChannelServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/radar/WeRadarClickRecordServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/radar/WeRadarServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/redeemcode/WeRedeemCodeActivityServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/impl/redeemcode/WeRedeemCodeServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/moment/WeMomentDetailRelService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/moment/WeMomentTaskResultService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/moment/WeMomentTaskService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/moment/WeMomentUserCustomerRelService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/radar/MiniAppQrCodeUrlHandler.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/radar/RadarUrlHandler.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/radar/WeRadarChannelService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/radar/WeRadarClickRecordService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/radar/WeRadarService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/redeemcode/WeRedeemCodeActivityService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/redeemcode/WeRedeemCodeService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/wechatopen/WechatOpenService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/service/wechatopen/impl/WechatOpenServiceImpl.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/strategy/MessageContext.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/strategy/SendMessageToUserGroupStrategy.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/strategy/SendMessageToUserStrategy.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/strategy/Strategy.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/strategy/appstrategy/AppConfigHandler.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/strategy/appstrategy/AppConfigStrategy.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/strategy/appstrategy/YiGeOrderAppConfigStrategy.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/utils/ApplicationMessageUtil.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/utils/AttachmentService.java create mode 100644 easyink-wecom/src/main/java/com/easyink/wecom/utils/JsoupUtil.java rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/annotation/CustomerTrajectoryRecord.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/annotation/aspect/DataScopeAspect.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/annotation/aspect/LogAspect.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/client/OrderClient.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/client/We3rdAppClient.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/client/We3rdUserClient.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/client/WeAccessTokenClient.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/client/WeAdminClient.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/client/WeAgentClient.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/client/WeCropTagClient.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/client/WeCustomerClient.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/client/WeCustomerGroupClient.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/client/WeCustomerMessagePushClient.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/client/WeDepartMentClient.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/client/WeExternalContactClient.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/client/WeGroupChatJoinClient.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/client/WeMediaClient.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/client/WeMessagePushClient.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/client/WeMomentClient.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/client/WeMsgAuditClient.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/client/WeTicketClient.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/client/WeUserClient.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/client/WeWelcomeMsgClient.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/client/WechatOpenClient.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/convert/autotag/AddTagRuleConvert.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/convert/autotag/TagRuleUserRelConvert.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/convert/autotag/UpdateTagRuleConvert.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/convert/autotag/customer/AddTagRuleCustomerConvert.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/convert/autotag/customer/UpdateTagRuleCustomerConvert.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/convert/autotag/group/AddTagRuleGroupConvert.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/convert/autotag/group/UpdateTagRuleGroupConvert.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/convert/autotag/keyword/AddTagRuleKeywordConvert.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/convert/autotag/keyword/UpdateTagRuleKeywordConvert.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/OrderGroupToOrderCustomerEntity.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/OrderUserToOrderAccountEntity.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeApp.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeApplicationCenter.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeAuthCorpInfo.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeAuthCorpInfoExtend.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeCategory.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeChatCollection.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeChatContactMapping.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeCustomer.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeCustomerAddGroup.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeCustomerAddUser.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeCustomerMessage.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeCustomerMessageOriginal.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeCustomerMessageTimeTask.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeCustomerMessgaeResult.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeCustomerPortrait.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeCustomerSeedMessage.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeCustomerSocialConn.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeCustomerTagRel.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeCustomerTrajectory.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeEmpleCode.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeEmpleCodeAnalyse.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeEmpleCodeMaterial.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeEmpleCodeTag.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeEmpleCodeUseScop.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeExternalUserMappingUser.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeFlowerCustomerRel.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeFlowerCustomerTagRel.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeGroup.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeGroupCode.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeGroupCodeActual.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeGroupMember.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeGroupSop.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeGroupSopChat.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeGroupSopMaterial.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeGroupSopPic.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeGroupStatistic.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeGroupTag.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeGroupTagCategory.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeGroupTagRel.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeH5TicketDto.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeKeywordGroupTask.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeLeaveUser.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeMaterial.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeMaterialConfig.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeMaterialTagEntity.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeMaterialTagRelEntity.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeMessagePush.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeMsgTlp.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeMsgTlpMaterial.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeMsgTlpMaterialRel.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeMsgTlpScope.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeMsgTlpSpecialRule.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeMyApplication.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeMyApplicationUseScopeEntity.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeOperationsCenterCustomerSopFilterEntity.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeOperationsCenterGroupSopFilterCycleEntity.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeOperationsCenterGroupSopFilterEntity.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeOperationsCenterSopDetailEntity.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeOperationsCenterSopEntity.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeOperationsCenterSopMaterialEntity.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeOperationsCenterSopRulesEntity.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeOperationsCenterSopScopeEntity.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeOperationsCenterSopTaskEntity.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WePresTagGroupTask.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WePresTagGroupTaskScope.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WePresTagGroupTaskStat.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WePresTagGroupTaskTag.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeRedeemCodeWelcomeMsgAndMaterial.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeSensitive.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeSensitiveAct.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeSensitiveActHit.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeSensitiveAuditScope.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeTag.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeTagGroup.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeUserBehaviorData.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeUserRole.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeWordsCategory.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeWordsDetailEntity.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeWordsGroupEntity.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/WeWordsLastUseEntity.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/AddWeMaterialDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/AllocateWeCustomerDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/AllocateWeCustomerV2DTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/AllocateWeGroupDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/AutoConfigDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/BaseApplicationDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/BatchSaveCustomerExtendPropertyDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/BatchUpdateUserInfoDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/BindDetailDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/FindWeGroupCodeDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/FindWeGroupDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/FindWeGroupMemberDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/FindWeMaterialDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/GetJoinQrCodeResp.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/GroupChatStatisticDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/LeaveWeUserListsDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/QueryApplicationDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/QueryCustomerExtendPropertyDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/QueryPresTagGroupDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/QueryPresTagGroupStatDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/QueryUserDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/RemoveMaterialDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/ResetCategoryDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/RestoreMaterialDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/SaveCustomerExtendPropertyDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/SetApplicationUseScopeDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/ShowMaterialSwitchDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/TemporaryMaterialDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/UnBindOrderDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/UpdateApplicationDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/UpdateUserInfoDetailDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/UpdateWeMaterialDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/UserBehaviorDataDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/WeAccessTokenDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/WeAccessUserInfo3rdDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/WeAppDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/WeCategorySidebarSwitchDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/WeChatCollectionDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/WeChatUserDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/WeCommunityNewGroupDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/WeCustomerDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/WeCustomerExtendRest.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/WeCustomerMessageDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/WeCustomerMessagePushResultDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/WeCustomerMessageToUserDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/WeCustomerPushMessageDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/WeDepartMentDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/WeEmpleCodeDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/WeExternalContactDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/WeGroupExtendDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/WeGroupMemberDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/WeGroupSopDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/WeKeywordGroupTaskDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/WeLoginUserInfoDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/WeMaterialDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/WeMaterialTagDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/WeMaterialTagRelRemoveDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/WeMediaDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/WeMessagePushDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/WeMessagePushGroupDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/WeMessagePushResultDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/WeOperationsCenterSopSearchDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/WePageCountDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/WePageStaticDataDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/WePermanentCodeDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/WePresTagGroupTaskDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/WeResultDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/WeTagDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/WeUserDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/WeUserInfoDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/WeUserListDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/WeWelcomeMsg.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/WeWordsChangeSortDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/WeWordsDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/WeWordsDelDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/WeWordsImportDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/WeWordsQueryDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/WeWordsSortDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/app/ToOpenCorpIdResp.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/app/UserIdToOpenUserIdResp.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/app/WeAdminListResp.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/app/WePermanentCodeResp.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/app/WePreAuthCodeResp.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/app/WeSuiteTokenReq.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/app/WeSuiteTokenResp.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/autoconfig/BaseAdminResult.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/autoconfig/DomainOwnershipVerifyInfoResp.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/autoconfig/InitApplicationModel.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/autoconfig/MobileConfirmResp.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/autoconfig/WeApiAccessibleAppsResp.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/autoconfig/WeCheckCustomAppUrlResp.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/autoconfig/WeConfirmMobileRsp.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/autoconfig/WeCorpApplicationResp.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/autoconfig/WeGetChatMenuResp.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/autoconfig/WeGetGroupListResp.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/autoconfig/WeGetKeyResp.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/autoconfig/WeLoginResp.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/autotag/AbstractTagRuleDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/autotag/AbstractTagRuleWithUserDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/autotag/TagRuleBatchStatusDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/autotag/TagRuleDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/autotag/TagRuleDeleteDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/autotag/TagRuleWithUserDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/autotag/customer/AbstractCustomerTagRuleDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/autotag/customer/AddCustomerTagRuleDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/autotag/customer/CustomerSceneDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/autotag/customer/CustomerTagRuleDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/autotag/customer/UpdateCustomerTagRuleDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/autotag/group/AbstractGroupTagRuleDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/autotag/group/AddGroupTagRuleDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/autotag/group/GroupSceneDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/autotag/group/GroupTagRuleDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/autotag/group/UpdateGroupTagRuleDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/autotag/keyword/AbstractKeywordTagRuleDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/autotag/keyword/AddKeywordTagRuleDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/autotag/keyword/KeywordTagRuleDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/autotag/keyword/UpdateKeywordTagRuleDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/autotag/test/KeywordTextListDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/common/Attachment.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/common/AttachmentParam.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/common/Attachments.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/common/File.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/common/Image.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/common/Link.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/common/Messages.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/common/MiniProgram.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/common/Text.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/common/Video.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/customer/CustomerGroupDetail.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/customer/CustomerGroupList.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/customer/CustomerGroupMember.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/customer/CustomerGroupMemberInvitorDetail.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/customer/CustomerTagEdit.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/customer/EditCustomerDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/customer/ExternalContact.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/customer/ExternalUserDetail.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/customer/ExternalUserTag.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/customer/FollowInfo.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/customer/FollowUser.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/customer/FollowUserList.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/customer/GetExternalDetailResp.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/customer/req/GetByUserReq.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/customer/resp/GetByUserResp.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/customersop/AddWeCustomerSopDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/customersop/Column.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/customersop/EditUserDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/emplecode/AddWeEmpleCodeDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/emplecode/FindWeEmpleCodeAnalyseDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/emplecode/FindWeEmpleCodeDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/emplecode/UpdateWeEmplyCodeDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/group/AddJoinWayConfigDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/group/AddJoinWayResult.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/group/DelJoinWayConfigDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/group/DelJoinWayResult.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/group/GetJoinWayConfigDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/group/GetJoinWayResult.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/group/GroupChatListReq.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/group/GroupChatListResp.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/group/UpdateJoinWayConfigDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/group/UpdateJoinWayResult.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/groupcode/AddCorpCodeDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/groupcode/EditCorpCodeDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/groupsop/AddGroupSopFilterDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/groupsop/AddWeGroupSopDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/groupsop/AddWeOperationsCenterSopRuleDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/groupsop/DelWeGroupSopDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/groupsop/FindWeGroupSopDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/groupsop/FindWeSopDetailDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/groupsop/FindWeSopExecutedRulesDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/groupsop/FindWeSopExecutedUsersDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/groupsop/GetSopTaskDetailDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/groupsop/SopBatchSwitchDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/groupsop/UpdateWeSopDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/message/AsyncResultDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/message/Attachment.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/message/CustomerMessagePushDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/message/DetailMessageStatusResultDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/message/FileDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/message/ImageMessageDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/message/LinkMessageDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/message/MiniprogramMessageDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/message/QueryCustomerMessageStatusResultDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/message/QueryCustomerMessageStatusResultDataObjectDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/message/RadarMessageDTO.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/message/SendMessageResultDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/message/TextMessageDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/message/VideoDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/message/WeCustomerMessagePushDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/moment/AddMomentTaskDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/moment/CreateMomentTaskDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/moment/MomentAttachment.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/moment/MomentCommentsDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/moment/MomentCustomerDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/moment/MomentListDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/moment/MomentStrategyDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/moment/MomentStrategyGetDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/moment/MomentTaskDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/moment/MomentUserCustomerDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/moment/SearchMomentContentDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/moment/SendToUserDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/msgaudit/WeMsgAuditDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/pro/EditCustomerFromPlusDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/pro/QueryCustomerFromPlusDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/radar/DeleteRadarChannelDTO.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/radar/DeleteRadarDTO.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/radar/GetRadarShortUrlDTO.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/radar/RadarChannelDTO.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/radar/RadarClickRecordDTO.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/radar/RadarDTO.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/radar/SearchChannelRecordDTO.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/radar/SearchChannelRecordDetailDTO.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/radar/SearchCustomerRecordDTO.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/radar/SearchCustomerRecordDetailDTO.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/radar/SearchRadarAnalyseDTO.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/radar/SearchRadarChannelDTO.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/radar/SearchRadarDTO.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/redeemcode/WeRedeemCodeActivityDTO.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/redeemcode/WeRedeemCodeActivityDeleteDTO.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/redeemcode/WeRedeemCodeDTO.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/redeemcode/WeRedeemCodeDeleteDTO.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/redeemcode/WeRedeemCodeImportDTO.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/tag/RemoveWeCustomerTagDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/tag/WeCropDelDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/tag/WeCropGropTagDtlDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/tag/WeCropGroupTagDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/tag/WeCropGroupTagListDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/tag/WeCropTagDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/tag/WeFindCropTagParam.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/tag/WeGroupTagDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/tag/WeMaterialTagAddDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/tag/WeWordsModifyCategoryDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/transfer/GetResignedTransferDetailDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/transfer/GetUnassignedListReq.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/transfer/GetUnassignedListResp.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/transfer/TransferCustomerDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/transfer/TransferCustomerReq.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/transfer/TransferCustomerResp.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/transfer/TransferRecordPageDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/transfer/TransferResignedCustomerReq.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/transfer/TransferResignedCustomerResp.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/transfer/TransferResignedGroupChatReq.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/transfer/TransferResignedGroupChatResp.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/transfer/TransferResignedUserDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/transfer/TransferResignedUserListDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/transfer/TransferResultReq.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/transfer/TransferResultResignedReq.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/transfer/TransferResultResignedResp.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/transfer/TransferResultResp.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/unBindCustomerDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/wegrouptag/AddWeGroupTagCategoryDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/wegrouptag/BatchTagRelDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/wegrouptag/DelWeGroupTagCategoryDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/wegrouptag/FindWeGroupTagCategoryDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/wegrouptag/PageWeGroupTagCategoryDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/wegrouptag/UpdateWeGroupTagCategoryDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/welcomemsg/GroupWelcomeMsgAddDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/welcomemsg/GroupWelcomeMsgDeleteDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/welcomemsg/GroupWelcomeMsgResult.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/welcomemsg/GroupWelcomeMsgUpdateDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/welcomemsg/HitSpecialWelcomeMsgMaterialVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/welcomemsg/WelComeMsgAddDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/welcomemsg/WelComeMsgDeleteDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/welcomemsg/WelComeMsgUpdateDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/welcomemsg/WelComeMsgUpdateEmployDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/welcomemsg/WelComeMsgUpdateGroupDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/wordscategory/AddWeWordsCategoryDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/wordscategory/DeleteWeWordsCategoryDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/wordscategory/FindWeWordsCategoryDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/wordscategory/UpdateWeWordsCategoryDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/wordscategory/WeWordsCategoryChangeSort.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/wordscategory/WeWordsCategoryChangeSortDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/dto/wordscategory/WeWordsCategoryChildSortDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/entity/BaseExternalUserEntity.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/entity/WeCustomerExportDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/entity/appconfig/YiGeOrderAppConfig.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/entity/autotag/WeAutoTagCustomerRuleEffectTime.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/entity/autotag/WeAutoTagCustomerScene.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/entity/autotag/WeAutoTagCustomerSceneTagRel.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/entity/autotag/WeAutoTagGroupScene.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/entity/autotag/WeAutoTagGroupSceneGroupRel.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/entity/autotag/WeAutoTagGroupSceneTagRel.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/entity/autotag/WeAutoTagKeyword.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/entity/autotag/WeAutoTagKeywordTagRel.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/entity/autotag/WeAutoTagRule.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/entity/autotag/WeAutoTagRuleHitCustomerRecord.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/entity/autotag/WeAutoTagRuleHitCustomerRecordTagRel.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/entity/autotag/WeAutoTagRuleHitGroupRecord.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/entity/autotag/WeAutoTagRuleHitGroupRecordTagRel.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/entity/autotag/WeAutoTagRuleHitKeywordRecord.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/entity/autotag/WeAutoTagRuleHitKeywordRecordTagRel.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/entity/autotag/WeAutoTagUserRel.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/entity/customer/ExtendPropertyMultipleOption.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/entity/customer/WeCustomerExtendProperty.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/entity/customer/WeCustomerExtendPropertyRel.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/entity/moment/Location.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/entity/moment/Moment.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/entity/moment/MomentComments.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/entity/moment/MomentCustomer.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/entity/moment/MomentStrategy.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/entity/moment/MomentTask.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/entity/moment/Privilege.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/entity/moment/VisibleRange.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/entity/moment/WeMomentDetailRelEntity.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/entity/moment/WeMomentTaskEntity.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/entity/moment/WeMomentTaskResultEntity.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/entity/moment/WeMomentUserCustomerRelEntity.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/entity/radar/WeRadar.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/entity/radar/WeRadarChannel.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/entity/radar/WeRadarClickRecord.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/entity/radar/WeRadarTag.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/entity/radar/WeRadarUrl.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/entity/redeemcode/RedeemCodeAlarmUser.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/entity/redeemcode/WeRedeemCode.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/entity/redeemcode/WeRedeemCodeActivity.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/entity/transfer/WeCustomerTransferConfig.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/entity/transfer/WeCustomerTransferRecord.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/entity/transfer/WeResignedCustomerTransferRecord.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/entity/transfer/WeResignedGroupTransferRecord.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/entity/transfer/WeResignedTransferRecord.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/entity/wechatopen/WeOpenConfig.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/order/Order.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/order/OrderBaseResp.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/order/OrderBindInfoDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/order/OrderBindInfoVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/order/OrderCreate.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/order/OrderCreateDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/order/OrderCustomer.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/order/OrderDetailDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/order/OrderHadlerDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/order/OrderHandlerVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/order/OrderListDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/order/OrderListMainVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/order/OrderListVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/order/OrderLoginVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/order/OrderNetworkVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/order/OrderTotal.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/order/OrderTotalDTO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/order/OrderUser.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/order/OrderVerifyVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/query/GroupChatStatisticQuery.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/query/UserBehaviorDataQuery.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/query/WePageStateQuery.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/query/WeSensitiveHitQuery.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/query/autotag/CustomerTagRuleRecordQuery.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/query/autotag/GroupTagRuleRecordQuery.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/query/autotag/RuleInfoQuery.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/query/autotag/TagRuleQuery.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/query/autotag/TagRuleRecordKeywordDetailQuery.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/query/autotag/TagRuleRecordQuery.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/query/groupcode/GroupCodeDetailQuery.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/req/GenerateUrlLinkReq.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/req/UnionId2ExternalUserIdReq.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/req/WePageBaseReq.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/resp/GenerateUrlLinkResp.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/resp/GetAccessTokenResp.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/resp/GetAgentResp.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/resp/GetOfficialAuthInfoResp.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/resp/GetUnionUserInfoResp.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/resp/SnsUserInfoResp.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/resp/UnionId2ExternalUserIdResp.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/resp/WePageBaseResp.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/resp/WechatOpenBaseResp.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/AllocateLeaveUserResp.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/AllocateWeCustomerResp.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/AllocateWeGroupResp.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/AppIdVO.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/ApplicationIntroductionVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/BatchUpdateUserInfoVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/BindDetailVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/BindOrderTotalVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/CheckCorpIdVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/ConversationArchiveVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/CustomerMessagePushVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/FindCollectionsVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/FindExistWordsCategoryNameList.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/FindWeGroupMemberCountVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/GetWeEmployCodeVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/InsertWeMaterialVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/MomentStrategyGetVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/MyApplicationIntroductionVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/PresTagExpectedReceptionVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/QueryCustomerFromPlusVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/ReleaseNotesVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/SelectWeEmplyCodeWelcomeMsgVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/SuiteAuthStatusVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/WeAdminQrcodeVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/WeAllocateCustomersVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/WeAllocateGroupsVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/WeApplicationDetailVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/WeCategoryBaseInfoVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/WeCategoryVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/WeCheckQrcodeVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/WeCommunityNewGroupVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/WeCommunityTaskEmplVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/WeCorpInfoVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/WeCustomerExportVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/WeCustomerMakeLabelVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/WeCustomerMessageResultVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/WeCustomerNameAndUserIdVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/WeCustomerSearchTermVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/WeCustomerSeedMessageVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/WeEmpleCodeVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/WeEmplyCodeAnalyseCountVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/WeEmplyCodeAnalyseVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/WeEmplyCodeDownloadVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/WeEmplyCodeScopeUserVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/WeGroupCodeActualExistVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/WeGroupCodeVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/WeGroupSopVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/WeInternalPreLoginParamVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/WeLeaveAllocateVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/WeLeaveUserInfoAllocateVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/WeLeaveUserV2VO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/WeLeaveUserVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/WeMakeCustomerTagVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/WeMaterialAndTagRel.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/WeMaterialCountVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/WeMaterialFileVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/WeMaterialTagVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/WeMaterialVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/WeMsgAuditVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/WeOperationsCenterSopVo.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/WePreAuthCodeVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/WePreLoginParamVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/WePresTagGroupTaskStatResultVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/WePresTagGroupTaskStatVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/WePresTagGroupTaskVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/WeServerTypeVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/WeUserBriefInfoVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/WeUserInfoVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/WeUserVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/WeWordsCategoryVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/WeWordsImportVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/WeWordsUrlVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/WeWordsVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/WxCpXmlMessageVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/autotag/GroupInfoVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/autotag/TagInfoVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/autotag/TagRuleDepartmentInfoVO.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/autotag/TagRuleInfoVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/autotag/TagRuleListVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/autotag/TagRuleUserInfoVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/autotag/TagRuleUserListVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/autotag/customer/CustomerSceneVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/autotag/customer/TagRuleCustomerInfoVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/autotag/group/GroupSceneRuleVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/autotag/group/GroupSceneVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/autotag/group/TagRuleGroupInfoVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/autotag/keyword/TagRuleKeywordInfoVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/autotag/record/CustomerCountVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/autotag/record/TagRuleRecordVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/autotag/record/customer/CustomerTagRuleRecordVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/autotag/record/group/GroupTagRuleRecordVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/autotag/record/keyword/KeywordRecordDetailVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/autotag/record/keyword/KeywordTagRuleRecordVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/customer/WeCustomerSumVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/customer/WeCustomerUserListVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/customer/WeCustomerVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/groupcode/GroupCodeActivityFirstVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/groupcode/GroupCodeDetailVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/groupcode/GroupDetailVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/moment/AddMomentTaskVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/moment/MomentAttachmentVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/moment/MomentCommentsVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/moment/MomentCustomerVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/moment/MomentListVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/moment/MomentStrategyListVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/moment/MomentTaskResultVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/moment/MomentTaskVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/moment/MomentTotalVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/moment/MomentUserCustomerVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/moment/SearchMomentVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/radar/RadarAnalyseCountVO.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/radar/RadarAnalyseVO.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/radar/RadarChannelRecordDetailVO.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/radar/RadarChannelRecordVO.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/radar/RadarChannelSortVO.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/radar/RadarCustomerClickRecordDetailVO.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/radar/RadarCustomerRecordVO.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/radar/RadarRecordTotalVO.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/radar/RadarSumClickRecordVO.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/radar/WeRadarChannelVO.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/radar/WeRadarVO.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/redeemcode/ImportRedeemCodeVO.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/redeemcode/RedeemCodeAlarmUserVO.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/redeemcode/WeRedeemCodeActivityVO.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/redeemcode/WeRedeemCodeVO.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/sop/AbstractExecuteVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/sop/BaseCustomerSopTagVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/sop/BaseGroupSopTagVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/sop/BaseGroupSopWeUserVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/sop/BaseWeOperationsCenterSopVo.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/sop/CustomerSopVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/sop/DepartmentVO.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/sop/FindGroupSopFilterVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/sop/GetCustomerSopFilterVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/sop/GetSopTaskByUserIdVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/sop/GetTaskDetailByUserIdVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/sop/GroupSopVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/sop/SopAttachmentVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/sop/SopDetailVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/sop/SopRuleVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/sop/SopUserVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/sop/WeOperationsCenterSopDetailByCycleTypeVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/sop/WeOperationsCenterSopDetailByTimingTypeVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/sop/WeOperationsCenterSopDetailChatVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/sop/WeOperationsCenterSopDetailCustomerVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/sop/WeOperationsCenterSopScopeVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/sop/WeSopExecutedRulesVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/sop/WeSopExecutedUsersVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/sop/WeSopTaskCountVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/sop/WeSopUserIdAndTargetIdVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/sop/abs/AbstractWeOperationsCenterSopDetailVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/transfer/GetResignedTransferCustomerDetailVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/transfer/GetResignedTransferGroupDetailVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/transfer/TransferResignedUserVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/transfer/WeCustomerTransferRecordVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/wegrouptag/PageWeGroupTagCategoryVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/wegrouptag/PageWeGroupTagVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/wegrouptag/WeGroupTagCategoryVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/wegrouptag/WeGroupTagRelDetail.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/wegrouptag/WeGroupTagRelVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/welcomemsg/WeEmployMaterialVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/welcomemsg/WeMsgTlpListDetailVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/welcomemsg/WeMsgTlpListVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/welcomemsg/WeUserUseScopeVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/domain/vo/welcomemsg/WelcomeMsgGroupMaterialCountVO.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/factory/WeCallBackEventFactory.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/factory/WeEventHandle.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/factory/WeEventStrategy.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/factory/WeStrategyBeanFactory.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/factory/impl/WeEventBatchJobResultImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/factory/impl/WeEventChangeContactImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/factory/impl/WeEventChangeExternalChatImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/factory/impl/WeEventChangeExternalContactImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/factory/impl/WeEventChangeExternalTagImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/factory/impl/WeEventSubscribeImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/factory/impl/WeEventUnSubscribeImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/factory/impl/WeInfoTypeCancelAuthImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/factory/impl/WeInfoTypeChangeAuthImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/factory/impl/WeInfoTypeCreateAuthImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/factory/impl/WeInfoTypeResetPermanentCodeImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/factory/impl/WeInfoTypeSuiteTicketImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/factory/impl/customer/WeCallBackAddExternalContactImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/factory/impl/customer/WeCallBackAddHalfExternalContactImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/factory/impl/customer/WeCallBackDelExternalContactImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/factory/impl/customer/WeCallBackDelFollowUserImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/factory/impl/customer/WeCallBackEditExternalContactImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/factory/impl/customer/WeCallBackMsgAuditApprovedImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/factory/impl/customer/WeCallbackTransferFailImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/factory/impl/customergroup/WeCallBackCreateGroupImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/factory/impl/customergroup/WeCallBackDismissImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/factory/impl/customergroup/WeCallBackUpdateGroupImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/factory/impl/party/WeCallBackCreatePartyImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/factory/impl/party/WeCallBackDeletePartyImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/factory/impl/party/WeCallBackUpdatePartyImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/factory/impl/tag/WeCallBackCreateCustomerTagImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/factory/impl/tag/WeCallBackDeleteCustomerTagImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/factory/impl/tag/WeCallBackUpdateCustomerTagImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/factory/impl/user/WeCallBackCreateUserImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/factory/impl/user/WeCallBackDeleteUserImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/factory/impl/user/WeCallBackUpdateUserImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/factory/impl/user/WeCallBackUpdateUserTagImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/handler/GenericTypeHandler.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/handler/ListTypeHandler.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/interceptor/OrderInterceptor.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/interceptor/We3rdAccessTokenInterceptor.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/interceptor/WeAccessTokenInterceptor.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/interceptor/WeAutoConfigInterceptor.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/interceptor/WeProviderAccessTokenInterceptor.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/interceptor/WeProviderAccessTokenInterceptor1.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/interceptor/WeSuiteAccessTokenInterceptor.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/interceptor/WeSuiteAccessTokenWebLoginInterceptor.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/interceptor/WechatOpenInterceptor.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/listener/ActualGroupCodeExpiredListener.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/listener/EmpleCodeExpiredListener.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/login/service/PermissionService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/login/service/SysLoginService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/login/service/UserDetailsServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/login/util/LoginTokenService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/ExtendPropertyMultipleOptionMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/OrderGroupToOrderCustomerMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/OrderUserToOrderAccountMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeApplicationCenterMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeAuthCorpInfoExtendMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeAuthCorpInfoMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeCategoryMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeChatContactMappingMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeCorpAccountMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeCustomerExtendPropertyMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeCustomerExtendPropertyRelMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeCustomerMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeCustomerMessageMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeCustomerMessageOriginalMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeCustomerMessageTimeTaskMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeCustomerMessgaeResultMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeCustomerSeedMessageMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeCustomerTagRelMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeCustomerTrajectoryMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeCustomerTransferConfigMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeCustomerTransferRecordMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeDepartmentMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeEmpleCodeAnalyseMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeEmpleCodeMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeEmpleCodeMaterialMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeEmpleCodeTagMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeEmpleCodeUseScopMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeExternalUserMappingUserMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeFlowerCustomerRelMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeFlowerCustomerTagRelMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeGroupCodeActualMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeGroupCodeMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeGroupMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeGroupMemberMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeGroupStatisticMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeGroupTagCategoryMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeGroupTagMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeGroupTagRelMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeMaterialConfigMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeMaterialMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeMaterialTagMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeMaterialTagRelMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeMessagePushMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeMsgTlpMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeMsgTlpMaterialMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeMsgTlpScopeMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeMsgTlpSpecialRuleMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeMyApplicationMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeMyApplicationUseScopeMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeOperationsCenterCustomerSopFilterMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeOperationsCenterGroupSopFilterCycleMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeOperationsCenterGroupSopFilterMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeOperationsCenterSopDetailMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeOperationsCenterSopMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeOperationsCenterSopMaterialMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeOperationsCenterSopRulesMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeOperationsCenterSopScopeMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeOperationsCenterSopTaskMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WePresTagGroupTaskMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WePresTagGroupTaskScopeMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WePresTagGroupTaskStatMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WePresTagGroupTaskTagMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeResignedCustomerTransferRecordMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeResignedGroupTransferRecordMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeResignedTransferRecordMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeSensitiveActHitMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeSensitiveActMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeSensitiveAuditScopeMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeSensitiveMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeTagGroupMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeTagMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeUserBehaviorDataMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeUserMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeUserRoleMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeWordsCategoryMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeWordsDetailMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeWordsGroupMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/WeWordsLastUseMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/autotag/WeAutoTagCustomerRuleEffectTimeMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/autotag/WeAutoTagCustomerSceneMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/autotag/WeAutoTagCustomerSceneTagRelMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/autotag/WeAutoTagGroupSceneGroupRelMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/autotag/WeAutoTagGroupSceneMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/autotag/WeAutoTagGroupSceneTagRelMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/autotag/WeAutoTagKeywordMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/autotag/WeAutoTagKeywordTagRelMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/autotag/WeAutoTagRuleHitCustomerRecordMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/autotag/WeAutoTagRuleHitCustomerRecordTagRelMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/autotag/WeAutoTagRuleHitGroupRecordMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/autotag/WeAutoTagRuleHitGroupRecordTagRelMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/autotag/WeAutoTagRuleHitKeywordRecordMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/autotag/WeAutoTagRuleHitKeywordRecordTagRelMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/autotag/WeAutoTagRuleMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/autotag/WeAutoTagUserRelMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/moment/WeMomentDetailRelMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/moment/WeMomentTaskMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/moment/WeMomentTaskResultMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/moment/WeMomentUserCustomerRelMapper.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/radar/WeRadarChannelMapper.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/radar/WeRadarClickRecordMapper.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/radar/WeRadarMapper.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/redeemcode/WeRedeemCodeActivityMapper.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/redeemcode/WeRedeemCodeMapper.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/mapper/wechatopen/WeOpenConfigMapper.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/ExtendPropertyMultipleOptionService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/OrderGroupToOrderCustomerService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/OrderUserToOrderAccountService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/PageHomeService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/We3rdAppService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeAccessTokenService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeApplicationCenterService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeAuthCorpInfoExtendService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeAuthCorpInfoService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeAutoConfigService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeCategoryService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeChatContactMappingService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeConversationArchiveService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeCorpAccountService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeCustomerExtendPropertyRelService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeCustomerExtendPropertyService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeCustomerMessageOriginalService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeCustomerMessagePushService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeCustomerMessageService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeCustomerMessgaeResultService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeCustomerSeedMessageService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeCustomerService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeCustomerTrajectoryService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeCustomerTransferConfigService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeCustomerTransferRecordService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeDepartmentService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeEmpleCodeAnalyseService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeEmpleCodeMaterialService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeEmpleCodeService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeEmpleCodeTagService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeEmpleCodeUseScopService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeExternalUserMappingUserService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeFlowerCustomerRelService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeFlowerCustomerTagRelService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeGroupCodeActualService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeGroupCodeService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeGroupMemberService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeGroupService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeGroupSopV2Service.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeGroupStatisticService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeGroupTagCategoryService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeGroupTagRelService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeGroupTagService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeInitService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeMaterialConfigService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeMaterialService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeMaterialTagRelService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeMaterialTagService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeMessagePushService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeMsgTlpMaterialService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeMsgTlpScopeService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeMsgTlpService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeMsgTlpSpecialRuleService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeMyApplicationService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeMyApplicationUseScopeService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeOperationsCenterCustomerSopFilterService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeOperationsCenterGroupSopFilterCycleService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeOperationsCenterGroupSopFilterService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeOperationsCenterSopDetailService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeOperationsCenterSopMaterialService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeOperationsCenterSopRulesService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeOperationsCenterSopScopeService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeOperationsCenterSopService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeOperationsCenterSopTaskService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WePresTagGroupTaskService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeResignedCustomerTransferRecordService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeResignedGroupTransferRecordService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeResignedTransferRecordService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeSensitiveActHitService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeSensitiveActService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeSensitiveAuditScopeService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeSensitiveService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeTagGroupService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeTagService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeUserBehaviorDataService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeUserRoleService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeUserService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeWordsCategoryService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeWordsDetailService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeWordsGroupService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/WeWordsLastUseService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/autotag/WeAutoTagCustomerRuleEffectTimeService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/autotag/WeAutoTagCustomerSceneService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/autotag/WeAutoTagCustomerSceneTagRelService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/autotag/WeAutoTagGroupSceneGroupRelService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/autotag/WeAutoTagGroupSceneService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/autotag/WeAutoTagGroupSceneTagRelService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/autotag/WeAutoTagKeywordService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/autotag/WeAutoTagKeywordTagRelService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/autotag/WeAutoTagRuleHitCustomerRecordService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/autotag/WeAutoTagRuleHitCustomerRecordTagRelService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/autotag/WeAutoTagRuleHitGroupRecordService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/autotag/WeAutoTagRuleHitGroupRecordTagRelService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/autotag/WeAutoTagRuleHitKeywordRecordService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/autotag/WeAutoTagRuleHitKeywordRecordTagRelService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/autotag/WeAutoTagRuleService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/autotag/WeAutoTagUserRelService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/ExtendPropertyMultipleOptionServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/OrderGroupToOrderCustomerServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/OrderUserToOrderAccountServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/PageHomeServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/We3rdAppServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeAccessTokenServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeApplicationCenterServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeAuthCorpInfoExtendServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeAuthCorpInfoServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeAutoConfigServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeCategoryServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeChatContactMappingServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeConversationArchiveServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeCorpAccountServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeCustomerExtendPropertyRelServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeCustomerExtendPropertyServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeCustomerMessageOriginalServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeCustomerMessagePushServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeCustomerMessageServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeCustomerMessgaeResultServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeCustomerSeedMessageServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeCustomerServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeCustomerTrajectoryServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeCustomerTransferConfigServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeCustomerTransferRecordServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeDepartmentServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeEmpleCodeAnalyseServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeEmpleCodeMaterialServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeEmpleCodeServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeEmpleCodeTagServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeEmpleCodeUseScopServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeExternalUserMappingUserServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeFlowerCustomerRelServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeFlowerCustomerTagRelServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeGroupCodeActualServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeGroupCodeServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeGroupMemberServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeGroupServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeGroupSopV2ServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeGroupStatisticServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeGroupTagCategoryServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeGroupTagRelServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeGroupTagServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeInitServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeMaterialConfigServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeMaterialServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeMaterialTagRelServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeMaterialTagServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeMessagePushServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeMsgTlpMaterialServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeMsgTlpScopeServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeMsgTlpServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeMsgTlpSpecialRuleServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeMyApplicationServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeMyApplicationUseScopeServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeOperationsCenterCustomerSopFilterServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeOperationsCenterGroupSopFilterCycleServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeOperationsCenterGroupSopFilterServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeOperationsCenterSopDetailServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeOperationsCenterSopMaterialServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeOperationsCenterSopRulesServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeOperationsCenterSopScopeServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeOperationsCenterSopServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeOperationsCenterSopTaskServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WePresTagGroupTaskServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeResignedCustomerTransferRecordServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeResignedGroupTransferRecordServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeResignedTransferRecordServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeSensitiveActHitServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeSensitiveActServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeSensitiveAuditScopeServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeSensitiveServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeTagGroupServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeTagServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeUserBehaviorDataServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeUserRoleServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeUserServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeWordsCategoryServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeWordsDetailServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeWordsGroupServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/WeWordsLastUseServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/autotag/WeAutoTagCustomerRuleEffectTimeServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/autotag/WeAutoTagCustomerSceneServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/autotag/WeAutoTagCustomerSceneTagRelServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/autotag/WeAutoTagGroupSceneGroupRelServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/autotag/WeAutoTagGroupSceneServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/autotag/WeAutoTagGroupSceneTagRelServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/autotag/WeAutoTagKeywordServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/autotag/WeAutoTagKeywordTagRelServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/autotag/WeAutoTagRuleHitCustomerRecordServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/autotag/WeAutoTagRuleHitCustomerRecordTagRelServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/autotag/WeAutoTagRuleHitGroupRecordServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/autotag/WeAutoTagRuleHitGroupRecordTagRelServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/autotag/WeAutoTagRuleHitKeywordRecordServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/autotag/WeAutoTagRuleHitKeywordRecordTagRelServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/autotag/WeAutoTagRuleServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/autotag/WeAutoTagUserRelServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/moment/WeMomentDetailRelServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/moment/WeMomentTaskResultServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/moment/WeMomentTaskServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/moment/WeMomentUserCustomerRelServiceImpl.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/radar/WeRadarChannelServiceImpl.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/radar/WeRadarClickRecordServiceImpl.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/radar/WeRadarServiceImpl.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/redeemcode/WeRedeemCodeActivityServiceImpl.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/impl/redeemcode/WeRedeemCodeServiceImpl.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/moment/WeMomentDetailRelService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/moment/WeMomentTaskResultService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/moment/WeMomentTaskService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/moment/WeMomentUserCustomerRelService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/radar/MiniAppQrCodeUrlHandler.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/radar/RadarUrlHandler.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/radar/WeRadarChannelService.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/radar/WeRadarClickRecordService.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/radar/WeRadarService.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/redeemcode/WeRedeemCodeActivityService.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/redeemcode/WeRedeemCodeService.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/wechatopen/WechatOpenService.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/service/wechatopen/impl/WechatOpenServiceImpl.java (100%) rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/strategy/MessageContext.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/strategy/SendMessageToUserGroupStrategy.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/strategy/SendMessageToUserStrategy.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/strategy/Strategy.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/strategy/appstrategy/AppConfigHandler.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/strategy/appstrategy/AppConfigStrategy.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/strategy/appstrategy/YiGeOrderAppConfigStrategy.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/utils/ApplicationMessageUtil.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/utils/AttachmentService.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/easywecom/wecom/utils/JsoupUtil.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/tencent/wework/Finance.java (99%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/tencent/wework/FinanceUtils.java (94%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/java/com/tencent/wework/RSAKeyEnum.java (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/font/default.ttf (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/ExtendPropertyMultipleOptionMapper.xml (86%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/OrderGroupToOrderCustomerMapper.xml (66%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/OrderUserToOrderAccountMapper.xml (89%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeAppMapper.xml (74%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeApplicationCenterMapper.xml (68%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeAuthCorpInfoExtendMapper.xml (67%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeAuthCorpInfoMapper.xml (69%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeCategoryMapper.xml (75%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeChatContactMappingMapper.xml (98%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeCorpAccountMapper.xml (86%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeCustomerExtendPropertyMapper.xml (92%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeCustomerExtendPropertyRelMapper.xml (95%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeCustomerMapper.xml (93%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeCustomerMessageMapper.xml (94%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeCustomerMessageOriginalMapper.xml (91%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeCustomerMessageTimeTaskMapper.xml (83%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeCustomerMessgaeResultMapper.xml (92%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeCustomerSeedMessageMapper.xml (88%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeCustomerTagRelMapper.xml (97%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeCustomerTrajectoryMapper.xml (70%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeCustomerTransferConfigMapper.xml (66%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeCustomerTransferRecordMapper.xml (94%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeDepartmentMapper.xml (93%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeEmpleCodeAnalyseMapper.xml (77%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeEmpleCodeMapper.xml (84%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeEmpleCodeMaterialMapper.xml (86%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeEmpleCodeTagMapper.xml (98%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeEmpleCodeUseScopMapper.xml (90%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeExternalUserMappingUserMapper.xml (89%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeFlowerCustomerRelMapper.xml (97%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeFlowerCustomerTagRelMapper.xml (96%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeGroupCodeActualMapper.xml (91%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeGroupCodeMapper.xml (95%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeGroupMapper.xml (85%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeGroupMemberMapper.xml (82%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeGroupStatisticMapper.xml (93%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeGroupTagCategoryMapper.xml (81%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeGroupTagMapper.xml (88%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeGroupTagRelMapper.xml (87%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeMaterialConfigMapper.xml (90%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeMaterialMapper.xml (89%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeMaterialTagMapper.xml (79%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeMaterialTagRelMapper.xml (86%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeMessagePushMapper.xml (100%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeMsgTlpMapper.xml (79%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeMsgTlpMaterialMapper.xml (81%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeMsgTlpScopeMapper.xml (93%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeMsgTlpSpecialRuleMapper.xml (77%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeMyApplicationMapper.xml (82%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeMyApplicationUseScopeMapper.xml (66%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeOperationsCenterCustomerSopFilterMapper.xml (85%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeOperationsCenterGroupSopFilterCycleMapper.xml (86%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeOperationsCenterGroupSopFilterMapper.xml (80%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeOperationsCenterSopDetailMapper.xml (84%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeOperationsCenterSopMapper.xml (89%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeOperationsCenterSopMaterialMapper.xml (77%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeOperationsCenterSopRulesMapper.xml (85%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeOperationsCenterSopScopeMapper.xml (86%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeOperationsCenterSopTaskMapper.xml (80%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WePresTagGroupTaskMapper.xml (97%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WePresTagGroupTaskScopeMapper.xml (94%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WePresTagGroupTaskStatMapper.xml (94%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WePresTagGroupTaskTagMapper.xml (95%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeResignedCustomerTransferRecordMapper.xml (87%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeResignedGroupTransferRecordMapper.xml (91%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeResignedTransferRecordMapper.xml (90%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeSensitiveActHitMapper.xml (91%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeSensitiveAuditScopeMapper.xml (98%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeSensitiveMapper.xml (98%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeTagGroupMapper.xml (78%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeTagMapper.xml (87%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeUserBehaviorDataMapper.xml (95%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeUserMapper.xml (90%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeUserRoleMapper.xml (88%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeWordsCategoryMapper.xml (89%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeWordsDetailMapper.xml (89%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeWordsGroupMapper.xml (87%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/WeWordsLastUseMapper.xml (77%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/autotag/WeAutoTagCustomerRuleEffectTimeMapper.xml (88%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/autotag/WeAutoTagCustomerSceneMapper.xml (83%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/autotag/WeAutoTagCustomerSceneTagRelMapper.xml (87%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/autotag/WeAutoTagGroupSceneGroupRelMapper.xml (87%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/autotag/WeAutoTagGroupSceneMapper.xml (67%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/autotag/WeAutoTagGroupSceneTagRelMapper.xml (84%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/autotag/WeAutoTagKeywordMapper.xml (80%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/autotag/WeAutoTagKeywordTagRelMapper.xml (84%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/autotag/WeAutoTagRuleHitCustomerRecordMapper.xml (90%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/autotag/WeAutoTagRuleHitCustomerRecordTagRelMapper.xml (90%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/autotag/WeAutoTagRuleHitGroupRecordMapper.xml (90%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/autotag/WeAutoTagRuleHitGroupRecordTagRelMapper.xml (90%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/autotag/WeAutoTagRuleHitKeywordRecordMapper.xml (90%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/autotag/WeAutoTagRuleHitKeywordRecordTagRelMapper.xml (90%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/autotag/WeAutoTagRuleMapper.xml (73%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/autotag/WeAutoTagUserRelMapper.xml (81%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/moment/WeMomentDetailRelMapper.xml (73%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/moment/WeMomentTaskMapper.xml (86%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/moment/WeMomentUserCustomerRelMapper.xml (89%) mode change 100755 => 100644 rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/radar/WeRadarChannelMapper.xml (90%) rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/radar/WeRadarClickRecordMapper.xml (87%) rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/radar/WeRadarMapper.xml (92%) rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/redeemcode/WeRedeemCodeActivityMapper.xml (85%) rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/redeemcode/WeRedeemCodeMapper.xml (88%) rename {easywecom-wecom => easyink-wecom}/src/main/resources/mapper/wecom/weopen/WeOpenConfigMapper.xml (97%) create mode 100644 sql/init/easyink.sql create mode 100644 sql/update/update-V1.18.0.sql diff --git a/easywecom-admin/pom.xml b/easyink-admin/pom.xml old mode 100755 new mode 100644 similarity index 93% rename from easywecom-admin/pom.xml rename to easyink-admin/pom.xml index 84f086e..af90881 --- a/easywecom-admin/pom.xml +++ b/easyink-admin/pom.xml @@ -3,13 +3,13 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - easywecom - com.easywecom + easyink + com.easyink 3.1.0 4.0.0 jar - easywecom-admin + easyink-admin web服务入口 @@ -56,17 +56,18 @@ mysql mysql-connector-java + 8.0.28 - com.easywecom - easywecom-quartz + com.easyink + easyink-quartz - com.easywecom - easywecom-wecom + com.easyink + easyink-wecom diff --git a/easywecom-admin/src/main/docker/Dockerfile b/easyink-admin/src/main/docker/Dockerfile old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/docker/Dockerfile rename to easyink-admin/src/main/docker/Dockerfile diff --git a/easywecom-admin/src/main/docker/Shanghai b/easyink-admin/src/main/docker/Shanghai old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/docker/Shanghai rename to easyink-admin/src/main/docker/Shanghai diff --git a/easyink-admin/src/main/java/com/easyink/EasyWeComApplication.java b/easyink-admin/src/main/java/com/easyink/EasyWeComApplication.java new file mode 100644 index 0000000..07330ca --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/EasyWeComApplication.java @@ -0,0 +1,43 @@ +package com.easyink; + +import com.dtflys.forest.springboot.annotation.ForestScan; +import com.github.pagehelper.autoconfigure.PageHelperAutoConfiguration; +import lombok.extern.slf4j.Slf4j; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.scheduling.annotation.EnableAsync; + +/** + * 类名:启动程序 + * @author: 1*+ + * @date: 2021-08-17 14:18 + */ +@Slf4j +@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, PageHelperAutoConfiguration.class}) +@MapperScan("com.easyink.*.mapper") +@ForestScan(basePackages = {"com.easyink.wecom.client", "com.easyink.wecom.wxclient"}) +@EnableAsync +public class EasyWeComApplication { + public static void main(String[] args) { + SpringApplication.run(EasyWeComApplication.class, args); + log.info("\n" + + " ,----, ,----, \n" + + " ,/ .`| ,/ .`| \n" + + " .--.--. ,` .' : ,---, ,-.----. ,` .' : .--.--. ,----.. ,----.. ,---,. .--.--. .--.--. \n" + + " / / '. ; ; / ' .' \\ \\ / \\ ; ; / / / '. ,--, / / \\ / / \\ ,' .' | / / '. / / '. \n" + + "| : /`. / .'___,/ ,' / ; '. ; : \\ .'___,/ ,' | : /`. / ,'_ /| | : : | : : ,---.' | | : /`. / | : /`. / \n" + + "; | |--` | : | : : \\ | | .\\ : | : | ; | |--` .--. | | : . | ;. / . | ;. / | | .' ; | |--` ; | |--` \n" + + "| : ;_ ; |.'; ; : | /\\ \\ . : |: | ; |.'; ; | : ;_ ,'_ /| : . | . ; /--` . ; /--` : : |-, | : ;_ | : ;_ \n" + + " \\ \\ `. `----' | | | : ' ;. : | | \\ : `----' | | \\ \\ `. | ' | | . . ; | ; ; | ; : | ;/| \\ \\ `. \\ \\ `. \n" + + " `----. \\ ' : ; | | ;/ \\ \\ | : . / ' : ; `----. \\ | | ' | | | | : | | : | | : .' `----. \\ `----. \\ \n" + + " __ \\ \\ | | | ' ' : | \\ \\ ,' ; | | \\ | | ' __ \\ \\ | : | | : ' ; . | '___ . | '___ | | |-, __ \\ \\ | __ \\ \\ | \n" + + " / /`--' / ' : | | | ' '--' | | ;\\ \\ ' : | / /`--' / | ; ' | | ' ' ; : .'| ' ; : .'| ' : ;/| / /`--' / / /`--' / \n" + + "'--'. / ; |.' | : : : ' | \\.' ; |.' '--'. / : | : ; ; | ' | '/ : ' | '/ : | | \\ '--'. / '--'. / \n" + + " `--'---' '---' | | ,' : : :-' '---' `--'---' ' : `--' \\ | : / | : / | : .' `--'---' `--'---' \n" + + " `--'' | |.' : , .-./ \\ \\ .' \\ \\ .' | | ,' \n" + + " `---' `--`----' `---` `---` `----' \n" + + " \n"); + } +} diff --git a/easyink-admin/src/main/java/com/easyink/EasyWeComServletInitializer.java b/easyink-admin/src/main/java/com/easyink/EasyWeComServletInitializer.java new file mode 100644 index 0000000..3b5599c --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/EasyWeComServletInitializer.java @@ -0,0 +1,16 @@ +package com.easyink; + +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; + +/** + * web容器中进行部署 + * + * @author admin + */ +public class EasyWeComServletInitializer extends SpringBootServletInitializer { + @Override + protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { + return application.sources(EasyWeComApplication.class); + } +} diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/common/CaptchaController.java b/easyink-admin/src/main/java/com/easyink/web/controller/common/CaptchaController.java new file mode 100644 index 0000000..0e05a8a --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/common/CaptchaController.java @@ -0,0 +1,89 @@ +package com.easyink.web.controller.common; + +import com.easyink.common.constant.Constants; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.core.redis.RedisCache; +import com.easyink.common.utils.sign.Base64; +import com.easyink.common.utils.uuid.IdUtils; +import com.github.xiaoymin.knife4j.annotations.ApiSupport; +import com.google.code.kaptcha.Producer; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.util.FastByteArrayOutputStream; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import javax.imageio.ImageIO; +import javax.servlet.http.HttpServletResponse; +import java.awt.image.BufferedImage; +import java.io.IOException; +import java.util.concurrent.TimeUnit; + +/** + * 类名: CaptchaController + * + * @author: 1*+ + * @date: 2021-08-27 15:52 + */ +@Api(value = "CaptchaController", tags = "验证码接口") +@ApiSupport(order = 1, author = "1*+") +@RestController +public class CaptchaController { + @Resource(name = "captchaProducer") + private Producer captchaProducer; + + @Resource(name = "captchaProducerMath") + private Producer captchaProducerMath; + + @Autowired + private RedisCache redisCache; + + // 验证码类型 + @Value("${ruoyi.captchaType}") + private String captchaType; + + private static final String MATH = "math"; + + /** + * 生成验证码 + */ + @ApiOperation("生成验证码") + @GetMapping("/captchaImage") + public AjaxResult getCode(HttpServletResponse response) { + // 保存验证码信息 + String uuid = IdUtils.simpleUUID(); + String verifyKey = Constants.CAPTCHA_CODE_KEY + uuid; + + String capStr; + String code; + BufferedImage image; + + // 生成验证码 + if (MATH.equals(captchaType)) { + String capText = captchaProducerMath.createText(); + capStr = capText.substring(0, capText.lastIndexOf("@")); + code = capText.substring(capText.lastIndexOf("@") + 1); + image = captchaProducerMath.createImage(capStr); + } else { + capStr = code = captchaProducer.createText(); + image = captchaProducer.createImage(capStr); + } + + redisCache.setCacheObject(verifyKey, code, Constants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES); + // 转换流信息写出 + FastByteArrayOutputStream os = new FastByteArrayOutputStream(); + try { + ImageIO.write(image, "jpg", os); + } catch (IOException e) { + return AjaxResult.error(e.getMessage()); + } + + AjaxResult ajax = AjaxResult.success(); + ajax.put("uuid", uuid); + ajax.put("img", Base64.encode(os.toByteArray())); + return ajax; + } +} diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/common/CommonController.java b/easyink-admin/src/main/java/com/easyink/web/controller/common/CommonController.java new file mode 100644 index 0000000..d5311d0 --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/common/CommonController.java @@ -0,0 +1,186 @@ +package com.easyink.web.controller.common; + +import com.easyink.common.config.RuoYiConfig; +import com.easyink.common.config.ServerConfig; +import com.easyink.common.constant.Constants; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.core.domain.FileVo; +import com.easyink.common.utils.StringUtils; +import com.easyink.common.utils.file.FileUploadUtils; +import com.easyink.common.utils.file.FileUtils; +import com.easyink.framework.web.domain.server.SysFile; +import com.easyink.framework.web.service.FileService; +import com.github.xiaoymin.knife4j.annotations.ApiSupport; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +/** + * 类名: CommonController + * + * @author: 1*+ + * @date: 2021-08-27 16:09 + */ +@Slf4j +@RestController +@ApiSupport(order = 2, author = "1*+") +@Api(value = "CommonController", tags = "通用接口") +public class CommonController { + + @Autowired + private ServerConfig serverConfig; + + @Autowired + private FileService fileService; + + /** + * 通用下载请求 + * + * @param fileName 文件名称 + * @param delete 是否删除 + */ + @ApiOperation(value = "通用下载") + @GetMapping("common/download") + public void fileDownload(@ApiParam("文件名") String fileName, @ApiParam("是否删除本地文件") Boolean delete, HttpServletResponse response, HttpServletRequest request) { + try { + if (!FileUtils.isValidFilename(fileName)) { + throw new Exception(StringUtils.format("文件名称({})非法,不允许下载。 ", fileName)); + } + String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1); + String filePath = RuoYiConfig.getDownloadPath() + fileName; + + response.setCharacterEncoding("utf-8"); + response.setContentType("multipart/form-data"); + response.setHeader("Content-Disposition", + "attachment;fileName=" + FileUtils.setFileDownloadHeader(request, realFileName)); + FileUtils.writeBytes(filePath, response.getOutputStream()); + if (Boolean.TRUE.equals(delete)) { + FileUtils.deleteFile(filePath); + } + } catch (Exception e) { + log.error("下载文件失败", e); + } + } + + /** + * 通用上传请求 + */ + @ApiOperation(value = "通用上传") + @PostMapping(value = "/common/upload", headers = "content-type=multipart/form-data") + public AjaxResult uploadFile(@ApiParam(value = "上传文件", required = true) MultipartFile file) { + try { + // 上传文件路径 + String filePath = RuoYiConfig.getUploadPath(); + // 上传并返回新文件名称 + String fileName = FileUploadUtils.upload(filePath, file); + String url = serverConfig.getUrl() + fileName; + AjaxResult ajax = AjaxResult.success(); + ajax.put("fileName", fileName); + ajax.put("url", url); + return ajax; + } catch (Exception e) { + return AjaxResult.error(e.getMessage()); + } + } + + /** + * 通用上传请求 + */ + @ApiOperation(value = "上传域名校验证书") + @PostMapping("/common/uploadCert") + public AjaxResult uploadCert(@ApiParam("上传域名文件") MultipartFile file) { + try { + // 上传文件路径 + String filePath = RuoYiConfig.getUploadPath(); + // 上传并返回新文件名称 + String fileName = FileUploadUtils.uploadCert(filePath, file); + String url = serverConfig.getUrl() + fileName; + AjaxResult ajax = AjaxResult.success(); + ajax.put("fileName", fileName); + ajax.put("url", url); + return ajax; + } catch (Exception e) { + return AjaxResult.error(e.getMessage()); + } + } + + + /** + * 本地资源通用下载 + */ + @ApiOperation(value = "本地资源下载") + @GetMapping("/common/download/resource") + public void resourceDownload(@ApiParam("资源名") String name, HttpServletRequest request, HttpServletResponse response) throws IOException { + // 本地资源路径 + String localPath = RuoYiConfig.getProfile(); + // 数据库资源地址 + String downloadPath = localPath + StringUtils.substringAfter(name, Constants.RESOURCE_PREFIX); + // 下载名称 + String downloadName = StringUtils.substringAfterLast(downloadPath, "/"); + response.setCharacterEncoding("utf-8"); + response.setContentType("multipart/form-data"); + response.setHeader("Content-Disposition", + "attachment;fileName=" + FileUtils.setFileDownloadHeader(request, downloadName)); + FileUtils.writeBytes(downloadPath, response.getOutputStream()); + } + + + /** + * 网络资源通用下载 + */ + @ApiOperation(value = "网络资源通用下载") + @GetMapping("/common/download/url") + public void webResourceDownload(@ApiParam("资源链接") String url, HttpServletRequest request, HttpServletResponse response) throws IOException { + FileUtils.downloadFile(url, response.getOutputStream()); + } + + + /** + * 通用上传请求 + */ + @ApiOperation(value = "上传到云存储") + @PostMapping("/common/uploadFile2Cos") + public AjaxResult uploadFile2Cos(@ApiParam("资源文件") MultipartFile file,String fileName) { + try { + SysFile sysFile; + if (StringUtils.isNotBlank(fileName)) { + sysFile = fileService.upload2Cos(file, fileName); + } else { + sysFile = fileService.upload(file); + } + return AjaxResult.success( + FileVo.builder() + .fileName(sysFile.getFileName()) + .url(sysFile.getImgUrlPrefix() + sysFile.getFileName()) + .build() + ); + } catch (Exception e) { + return AjaxResult.error("不支持当前文件上传或文件过大建议传20MB以内的文件"); + } + } + + + /** + * 获取图片 + */ + @ApiOperation("获取图片") + @GetMapping("/common/findImage") + public void findImage(HttpServletResponse response, @ApiParam("文件名") String fileName) { + fileService.findImage(fileName, response); + } + + + + + +} diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/common/ShortUrlController.java b/easyink-admin/src/main/java/com/easyink/web/controller/common/ShortUrlController.java new file mode 100644 index 0000000..8717ade --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/common/ShortUrlController.java @@ -0,0 +1,66 @@ +package com.easyink.web.controller.common; + +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.utils.ServletUtils; +import com.easyink.common.utils.ip.IpUtils; +import com.easyink.wecom.service.radar.MiniAppQrCodeUrlHandler; +import com.easyink.wecom.service.radar.RadarUrlHandler; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.exception.ExceptionUtils; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.validation.constraints.NotBlank; + +/** + * 类名: 短链相关接口 + * + * @author : silver_chariot + * @date : 2022/7/18 17:08 + **/ +@RestController +@RequestMapping("/url") +@Api(value = "ShortUrlController", tags = "短链相关") +@Slf4j +public class ShortUrlController { + + + private final MiniAppQrCodeUrlHandler miniAppQrCodeUrlHandler; + private final RadarUrlHandler radarUrlHandler; + + public ShortUrlController(MiniAppQrCodeUrlHandler miniAppQrCodeUrlHandler, RadarUrlHandler radarUrlHandler) { + this.miniAppQrCodeUrlHandler = miniAppQrCodeUrlHandler; + this.radarUrlHandler = radarUrlHandler; + } + + @GetMapping("/empleCode") + @ApiOperation("根据短链获取员工活码") + public AjaxResult empleCode(@ApiParam("短链后缀的code") @Validated @NotBlank(message = "missing param") String code) { + return AjaxResult.success("success", miniAppQrCodeUrlHandler.getQrCode(code)); + } + + @GetMapping("/radar") + @ApiOperation("根据短链获取雷达链接并记录") + public AjaxResult radar(@ApiParam("短链后缀的code") String shortCode, @ApiParam("用户的公众号openid") String openId) { + String serverIp = ""; + try { + serverIp = IpUtils.getOutIp(); + } catch (Exception e) { + log.error("[雷达链接]获取服务器ip异常.e:{}", ExceptionUtils.getStackTrace(e)); + } + String ip = IpUtils.getIpAddr(ServletUtils.getRequest()); + log.info("[雷达短链]有人点击了短链,shortCode:{},openId:{},ip:{},serverIp:{}", shortCode, openId, ip, serverIp); + if (serverIp.equals(ip)) { + log.info("[雷达短链]ip与服务器ip一样,不处理,ip:{}", ip); + return AjaxResult.success(); + } + return AjaxResult.success("success", radarUrlHandler.getOriginUrlAndRecord(shortCode, openId)); + } + + +} diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/monitor/ServerController.java b/easyink-admin/src/main/java/com/easyink/web/controller/monitor/ServerController.java new file mode 100644 index 0000000..f59f861 --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/monitor/ServerController.java @@ -0,0 +1,35 @@ +package com.easyink.web.controller.monitor; + +import com.easyink.common.core.controller.BaseController; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.framework.web.domain.Server; +import com.github.xiaoymin.knife4j.annotations.ApiSupport; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 类名: ServerController + * + * @author: 1*+ + * @date: 2021-08-27 16:30 + */ +@RestController +@RequestMapping("/monitor/server") +@ApiSupport(order = 3, author = "1*+") +@Api(value = "ServerController", tags = "服务器监控接口") +public class ServerController extends BaseController { + + + @PreAuthorize("@ss.hasPermi('monitor:server:list')") + @GetMapping() + @ApiOperation("获取服务器监控信息") + public AjaxResult getInfo() throws Exception { + Server server = new Server(); + server.copyTo(); + return AjaxResult.success(server); + } +} diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/monitor/SysLogininforController.java b/easyink-admin/src/main/java/com/easyink/web/controller/monitor/SysLogininforController.java new file mode 100644 index 0000000..171566b --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/monitor/SysLogininforController.java @@ -0,0 +1,75 @@ +package com.easyink.web.controller.monitor; + +import com.easyink.common.annotation.Log; +import com.easyink.common.core.controller.BaseController; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.core.domain.system.SysLogininfor; +import com.easyink.common.core.page.TableDataInfo; +import com.easyink.common.enums.BusinessType; +import com.easyink.common.service.ISysLogininforService; +import com.easyink.common.utils.poi.ExcelUtil; +import com.easyink.wecom.login.util.LoginTokenService; +import com.github.xiaoymin.knife4j.annotations.ApiSupport; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 类名: SysLogininforController + * + * @author: 1*+ + * @date: 2021-08-27 16:40 + */ +@RestController +@RequestMapping("/monitor/logininfor") +@ApiSupport(order = 4, author = "1*+") +@Api(value = "SysLogininforController", tags = "系统访问记录接口") +public class SysLogininforController extends BaseController { + + @Autowired + private ISysLogininforService logininforService; + + + @PreAuthorize("@ss.hasPermi('monitor:logininfor:list')") + @GetMapping("/list") + @ApiOperation("系统访问日志列表") + public TableDataInfo list(SysLogininfor logininfor) { + startPage(); + logininfor.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + List list = logininforService.selectLogininforList(logininfor); + return getDataTable(list); + } + + @Log(title = "登录日志", businessType = BusinessType.EXPORT) + @PreAuthorize("@ss.hasPermi('monitor:logininfor:export')") + @GetMapping("/export") + @ApiOperation("导出系统访问日志") + public AjaxResult export(SysLogininfor logininfor) { + logininfor.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + List list = logininforService.selectLogininforList(logininfor); + ExcelUtil util = new ExcelUtil<>(SysLogininfor.class); + return util.exportExcel(list, "登录日志"); + } + + @PreAuthorize("@ss.hasPermi('monitor:logininfor:remove')") + @Log(title = "登录日志", businessType = BusinessType.DELETE) + @DeleteMapping("/{infoIds}") + @ApiOperation("批量移除系统访问日志") + public AjaxResult remove(@ApiParam("记录ID数组") @PathVariable Long[] infoIds) { + return toAjax(logininforService.deleteLogininforByIds(LoginTokenService.getLoginUser().getCorpId(), infoIds)); + } + + @PreAuthorize("@ss.hasPermi('monitor:logininfor:remove')") + @Log(title = "登录日志", businessType = BusinessType.CLEAN) + @DeleteMapping("/clean") + @ApiOperation("清空系统访问日志") + public AjaxResult clean() { + logininforService.cleanLogininfor(LoginTokenService.getLoginUser().getCorpId()); + return AjaxResult.success(); + } +} diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/monitor/SysOperlogController.java b/easyink-admin/src/main/java/com/easyink/web/controller/monitor/SysOperlogController.java new file mode 100644 index 0000000..7453300 --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/monitor/SysOperlogController.java @@ -0,0 +1,71 @@ +package com.easyink.web.controller.monitor; + +import com.easyink.common.annotation.Log; +import com.easyink.common.core.controller.BaseController; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.core.domain.system.SysOperLog; +import com.easyink.common.core.page.TableDataInfo; +import com.easyink.common.enums.BusinessType; +import com.easyink.common.service.ISysOperLogService; +import com.easyink.common.utils.poi.ExcelUtil; +import com.easyink.wecom.login.util.LoginTokenService; +import com.github.xiaoymin.knife4j.annotations.ApiSupport; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 操作日志记录 + * + * @author admin + */ +@RestController +@RequestMapping("/monitor/operlog") +@ApiSupport(order = 5, author = "1*+") +@Api(value = "SysOperlogController", tags = "系统操作记录接口") +public class SysOperlogController extends BaseController { + @Autowired + private ISysOperLogService operLogService; + + @PreAuthorize("@ss.hasPermi('monitor:operlog:list')") + @GetMapping("/list") + @ApiOperation("系统操作日志列表") + public TableDataInfo list(SysOperLog operLog) { + startPage(); + operLog.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + List list = operLogService.selectOperLogList(operLog); + return getDataTable(list); + } + + @Log(title = "操作日志", businessType = BusinessType.EXPORT) + @PreAuthorize("@ss.hasPermi('monitor:operlog:export')") + @GetMapping("/export") + @ApiOperation("导出系统操作日志") + public AjaxResult export(SysOperLog operLog) { + operLog.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + List list = operLogService.selectOperLogList(operLog); + ExcelUtil util = new ExcelUtil<>(SysOperLog.class); + return util.exportExcel(list, "操作日志"); + } + + @PreAuthorize("@ss.hasPermi('monitor:operlog:remove')") + @DeleteMapping("/{operIds}") + @ApiOperation("批量删除系统操作日志") + public AjaxResult remove(@ApiParam("记录ID数组") @PathVariable Long[] operIds) { + return toAjax(operLogService.deleteOperLogByIds(LoginTokenService.getLoginUser().getCorpId(), operIds)); + } + + @Log(title = "操作日志", businessType = BusinessType.CLEAN) + @PreAuthorize("@ss.hasPermi('monitor:operlog:remove')") + @DeleteMapping("/clean") + @ApiOperation("清空系统操作日志") + public AjaxResult clean() { + operLogService.cleanOperLog(LoginTokenService.getLoginUser().getCorpId()); + return AjaxResult.success(); + } +} diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/monitor/SysUserOnlineController.java b/easyink-admin/src/main/java/com/easyink/web/controller/monitor/SysUserOnlineController.java new file mode 100644 index 0000000..c9229bf --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/monitor/SysUserOnlineController.java @@ -0,0 +1,98 @@ +package com.easyink.web.controller.monitor; + +import com.easyink.common.annotation.Log; +import com.easyink.common.constant.Constants; +import com.easyink.common.constant.RedisKeyConstants; +import com.easyink.common.core.controller.BaseController; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.core.domain.model.LoginUser; +import com.easyink.common.core.domain.system.SysUserOnline; +import com.easyink.common.core.page.TableDataInfo; +import com.easyink.common.core.redis.RedisCache; +import com.easyink.common.enums.BusinessType; +import com.easyink.common.enums.LogoutReasonEnum; +import com.easyink.common.service.ISysUserOnlineService; +import com.easyink.common.utils.StringUtils; +import com.easyink.wecom.login.util.LoginTokenService; +import com.github.xiaoymin.knife4j.annotations.ApiSupport; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import java.util.*; +import java.util.concurrent.TimeUnit; + +import static java.util.stream.Collectors.collectingAndThen; +import static java.util.stream.Collectors.toCollection; + +/** + * 在线用户监控 + * + * @author admin + */ +@RestController +@RequestMapping("/monitor/online") +@ApiSupport(order = 6, author = "1*+") +@Api(value = "SysUserOnlineController", tags = "系统在线用户接口") +public class SysUserOnlineController extends BaseController { + @Autowired + private ISysUserOnlineService userOnlineService; + + @Autowired + private RedisCache redisCache; + + @PreAuthorize("@ss.hasPermi('monitor:online:list')") + @GetMapping("/list") + @ApiOperation("在线用户列表") + public TableDataInfo list(@ApiParam("Ip地址") String ipaddr, @ApiParam("用户昵称") String userName) { + String currentCorpId = LoginTokenService.getLoginUser().getCorpId(); + Collection keys = redisCache.keys(Constants.LOGIN_TOKEN_KEY + "*"); + List userOnlineList = new ArrayList<>(); + for (String key : keys) { + LoginUser user = redisCache.getCacheObject(key); + if (StringUtils.isNotEmpty(ipaddr) && StringUtils.isNotEmpty(userName)) { + if (StringUtils.equals(ipaddr, user.getIpaddr()) && StringUtils.equals(userName, user.getUsername())) { + userOnlineList.add(userOnlineService.selectOnlineByInfo(ipaddr, userName, user)); + } + } else if (StringUtils.isNotEmpty(ipaddr)) { + if (StringUtils.equals(ipaddr, user.getIpaddr())) { + userOnlineList.add(userOnlineService.selectOnlineByIpaddr(ipaddr, user)); + } + } else if (StringUtils.isNotEmpty(userName) && StringUtils.isNotNull(user.getUser())) { + if (StringUtils.equals(userName, user.getUsername())) { + userOnlineList.add(userOnlineService.selectOnlineByUserName(userName, user)); + } + } else { + userOnlineList.add(userOnlineService.loginUserToUserOnline(user)); + } + } + // 根据登录用户名+ip地址 按登录时间倒序排序后 去重,保留最新登录的信息(同一ip如果没有通过后台登出而是直接关闭浏览器,下次打开浏览器登录后redis若token还没过期,则会有该ip的两个同样登录用户) + List list = userOnlineList.stream().filter(user->currentCorpId.equals(user.getCorpId())) + .sorted(Comparator.comparing(SysUserOnline::getLoginTime).reversed()).collect( + collectingAndThen( + toCollection(() -> + new TreeSet<>( + Comparator.comparing(o -> o.getUserName() + ";" + o.getIpaddr())) + ), ArrayList::new)); + list.removeAll(Collections.singleton(null)); + return getDataTable(list); + } + + /** + * 强退用户 + */ + @PreAuthorize("@ss.hasPermi('monitor:online:forceLogout')") + @Log(title = "在线用户", businessType = BusinessType.FORCE) + @DeleteMapping("/{tokenId}") + @ApiOperation("强退用户列表") + public AjaxResult forceLogout(@ApiParam("tokenId") @PathVariable String tokenId) { + redisCache.deleteObject(Constants.LOGIN_TOKEN_KEY + tokenId); + // 设置登出原因缓存 + redisCache.setCacheObject(RedisKeyConstants.ACCOUNT_LOGOUT_REASON_KEY + tokenId, LogoutReasonEnum.FORCED.getCode() + , 30, TimeUnit.MINUTES); + return AjaxResult.success(); + } +} diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/order/OrderLoginController.java b/easyink-admin/src/main/java/com/easyink/web/controller/order/OrderLoginController.java new file mode 100644 index 0000000..9e3efe8 --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/order/OrderLoginController.java @@ -0,0 +1,133 @@ +package com.easyink.web.controller.order; + +import com.alibaba.fastjson.JSON; +import com.easyink.common.core.controller.BaseController; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.core.domain.model.LoginResult; +import com.easyink.common.core.domain.model.LoginUser; +import com.easyink.common.enums.AppIdEnum; +import com.easyink.common.enums.ExpressNameEnum; +import com.easyink.common.enums.LoginTypeEnum; +import com.easyink.common.enums.ResultTip; +import com.easyink.wecom.domain.entity.appconfig.YiGeOrderAppConfig; +import com.easyink.wecom.domain.order.OrderLoginVO; +import com.easyink.wecom.domain.order.OrderNetworkVO; +import com.easyink.wecom.domain.vo.MyApplicationIntroductionVO; +import com.easyink.wecom.login.service.SysLoginService; +import com.easyink.wecom.service.WeMyApplicationService; +import com.easyink.wecom.service.WeMyApplicationUseScopeService; +import io.swagger.annotations.*; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.util.ArrayList; +import java.util.List; + +/** + * 类名: OrderLoginController + * + * @author: 1*+ + * @date: 2021-12-14 10:55 + */ +@RestController +@RequestMapping("/wecom/order") +@Api(tags = "壹鸽工单应用接口") +@Slf4j +public class OrderLoginController extends BaseController { + + + private final SysLoginService loginService; + private final WeMyApplicationUseScopeService weMyApplicationUseScopeService; + private final WeMyApplicationService weMyApplicationService; + + @Autowired + public OrderLoginController(SysLoginService loginService, WeMyApplicationUseScopeService weMyApplicationUseScopeService, WeMyApplicationService weMyApplicationService) { + this.loginService = loginService; + this.weMyApplicationUseScopeService = weMyApplicationUseScopeService; + this.weMyApplicationService = weMyApplicationService; + } + + + @ApiOperation("AI系统企业三方扫码登录") + @ApiResponses({ + @ApiResponse(code = 1001, message = "所在企业未授权当前应用,请联系企业管理员进行授权"), + @ApiResponse(code = 7000, message = "所在企业未开通「壹鸽快递工单助手」,请联系管理员"), + @ApiResponse(code = 7001, message = "您没有访问权限,请联系管理员"), + @ApiResponse(code = 7002, message = "所在企业未开通「壹鸽快递工单助手」,请联系管理员") + }) + @GetMapping("/login") + public AjaxResult qrCodeLogin3rd(@ApiParam("扫码登录返回的授权码") @RequestParam("authCode") String authCode) { + //登录解析LoginUser + LoginResult loginResult = loginService.loginHandler(authCode, LoginTypeEnum.BY_THIRD_SCAN.getState()); + if (StringUtils.isNotBlank(loginResult.getErrorMsg())) { + return AjaxResult.error(loginResult.getErrorMsg()); + } + + LoginUser loginUser = loginResult.getLoginUser(); + if (loginUser == null || loginUser.getWeUser() == null) { + return AjaxResult.error(ResultTip.TIP_MISSING_LOGIN_INFO); + } + //判断当前LoginUser是否在可登陆AI系统范围内 + List userIdList = weMyApplicationUseScopeService.getUseScopeUserList(loginUser.getCorpId(), AppIdEnum.YIGE_ORDER.getCode()); + if (CollectionUtils.isEmpty(userIdList) || !userIdList.contains(loginUser.getWeUser().getUserId())) { + return AjaxResult.error(ResultTip.TIP_UN_USE_AI_SYSTEM); + } + OrderLoginVO orderLoginVO = new OrderLoginVO(loginUser); + + //获取网点配置 + MyApplicationIntroductionVO myApplicationIntroductionVO = weMyApplicationService.getMyApplicationDetail(loginUser.getCorpId(), AppIdEnum.YIGE_ORDER.getCode()); + if (StringUtils.isNotBlank(myApplicationIntroductionVO.getConfig())) { + YiGeOrderAppConfig yiGeOrderAppConfig = JSON.parseObject(myApplicationIntroductionVO.getConfig(), YiGeOrderAppConfig.class); + //如果网点id为空,直接返回未绑定网点 + if (StringUtils.isBlank(yiGeOrderAppConfig.getNetworkId())) { + return AjaxResult.error(ResultTip.TIP_UN_BIND_NETWORK); + } + orderLoginVO.setNetworkId(yiGeOrderAppConfig.getNetworkId()); + orderLoginVO.setNetworkName(yiGeOrderAppConfig.getNetworkName()); + orderLoginVO.setExpressName(ExpressNameEnum.getEnum(yiGeOrderAppConfig.getType()).getDesc()); + } else { + //配置为空也直接返回未绑定网点 + return AjaxResult.error(ResultTip.TIP_UN_BIND_NETWORK); + } + return AjaxResult.success(orderLoginVO); + } + + + @ApiOperation("AI系统拉取已绑定的网点列表") + @ApiResponses({ + }) + @GetMapping("/getNetworkList") + public AjaxResult getNetworkList() { + List result = new ArrayList<>(); + + List list = weMyApplicationService.listOfMyApplication(AppIdEnum.YIGE_ORDER.getCode()); + if (CollectionUtils.isEmpty(list)) { + return AjaxResult.success(result); + } + + for (MyApplicationIntroductionVO myApplicationIntroductionVO : list) { + if (StringUtils.isNotBlank(myApplicationIntroductionVO.getConfig())) { + YiGeOrderAppConfig yiGeOrderAppConfig = JSON.parseObject(myApplicationIntroductionVO.getConfig(), YiGeOrderAppConfig.class); + if (yiGeOrderAppConfig == null) { + continue; + } + OrderNetworkVO orderNetworkVO = new OrderNetworkVO(); + orderNetworkVO.setExpressName(ExpressNameEnum.getEnum(yiGeOrderAppConfig.getType()).getDesc()); + orderNetworkVO.setNetworkId(yiGeOrderAppConfig.getNetworkId()); + orderNetworkVO.setNetworkName(yiGeOrderAppConfig.getNetworkName()); + orderNetworkVO.setCompanyName(myApplicationIntroductionVO.getCompanyName()); + orderNetworkVO.setCorpId(myApplicationIntroductionVO.getCorpId()); + result.add(orderNetworkVO); + } + } + return AjaxResult.success(result); + } + + +} diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/order/OrderManagerController.java b/easyink-admin/src/main/java/com/easyink/web/controller/order/OrderManagerController.java new file mode 100644 index 0000000..6188f69 --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/order/OrderManagerController.java @@ -0,0 +1,183 @@ +package com.easyink.web.controller.order; + +import com.easyink.common.core.controller.BaseController; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.core.page.TableDataInfo; +import com.easyink.wecom.client.OrderClient; +import com.easyink.wecom.domain.OrderGroupToOrderCustomerEntity; +import com.easyink.wecom.domain.OrderUserToOrderAccountEntity; +import com.easyink.wecom.domain.dto.BindDetailDTO; +import com.easyink.wecom.domain.dto.UnBindOrderDTO; +import com.easyink.wecom.domain.dto.unBindCustomerDTO; +import com.easyink.wecom.domain.order.*; +import com.easyink.wecom.login.util.LoginTokenService; +import com.easyink.wecom.service.OrderGroupToOrderCustomerService; +import com.easyink.wecom.service.OrderUserToOrderAccountService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.validation.constraints.NotBlank; + +/** + * 类名: OrderManagerController + * + * @author: 1*+ + * @date: 2021-12-13 17:51 + */ +@RestController +@RequestMapping("/wecom/order") +@Api(tags = "壹鸽工单应用接口") +@Slf4j +public class OrderManagerController extends BaseController { + private final OrderClient orderClient; + private final OrderUserToOrderAccountService orderUserToOrderAccountService; + private final OrderGroupToOrderCustomerService groupToOrderCustomerService; + + @Autowired + public OrderManagerController(OrderClient orderClient, OrderUserToOrderAccountService orderUserToOrderAccountService, OrderGroupToOrderCustomerService groupToOrderCustomerService) { + this.orderClient = orderClient; + this.orderUserToOrderAccountService = orderUserToOrderAccountService; + this.groupToOrderCustomerService = groupToOrderCustomerService; + } + + /** + * 校验网点ID + */ + @GetMapping("/verifyNetwork") + @ApiOperation("校验网点ID") + public AjaxResult verifyNetwork(@Validated @NotBlank @RequestParam("networkId") String networkId) { + return AjaxResult.success(orderUserToOrderAccountService.verifyNetworkId(networkId)); + } + + /** + * 获取网点账号列表接口 + */ + @GetMapping("/networkUser") + @ApiOperation("获取工单账号列表接口") + public AjaxResult networkUser() { + return AjaxResult.success(orderUserToOrderAccountService.networkUser(LoginTokenService.getLoginUser().getCorpId())); + } + + + /** + * 获取网点客户列表接口 + */ + @GetMapping("/networkCustomer") + @ApiOperation("获取网点客户列表接口") + public AjaxResult networkCustomer() { + return AjaxResult.success(orderUserToOrderAccountService.networkCustomer(LoginTokenService.getLoginUser().getCorpId())); + } + + /** + * 工单列表接口 + */ + @PostMapping("/listOrder") + @ApiOperation("工单列表接口") + public AjaxResult listOrder(@Validated @RequestBody OrderListDTO orderListDTO) { + orderListDTO.setNetworkId(orderUserToOrderAccountService.getNetworkId(LoginTokenService.getLoginUser().getCorpId())); + orderListDTO.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + return AjaxResult.success(groupToOrderCustomerService.listOrder(orderListDTO)); + } + + /** + * 状态变更接口 + */ + @PostMapping("/handleOrder") + @ApiOperation("状态变更接口") + public AjaxResult handleOrder(@Validated @RequestBody OrderHadlerDTO orderHadlerDTO) { + orderHadlerDTO.setNetworkId(orderUserToOrderAccountService.getNetworkId(LoginTokenService.getLoginUser().getCorpId())); + return AjaxResult.success(orderClient.handleOrder(orderHadlerDTO).getResult()); + } + + /** + * 工单详情接口 + */ + @PostMapping("/descOrder") + @ApiOperation("工单详情接口") + public AjaxResult descOrder(@Validated @RequestBody OrderDetailDTO orderDetailDTO) { + orderDetailDTO.setNetworkId(orderUserToOrderAccountService.getNetworkId(LoginTokenService.getLoginUser().getCorpId())); + return AjaxResult.success(orderClient.descOrder(orderDetailDTO).getResult()); + } + + /** + * 工单数统计接口 + */ + @PostMapping("/totalNumOrder") + @ApiOperation("工单数统计接口") + public AjaxResult totalNumOrder(@Validated @RequestBody OrderTotalDTO orderTotalDTO) { + orderTotalDTO.setNetworkId(orderUserToOrderAccountService.getNetworkId(LoginTokenService.getLoginUser().getCorpId())); + return AjaxResult.success(orderClient.totalNumOrder(orderTotalDTO).getResult()); + } + + + @PostMapping("/bindUser") + @ApiOperation("绑定员工工单账号") + public AjaxResult bindUser(@Validated @RequestBody OrderUserToOrderAccountEntity orderAccountEntity) { + orderAccountEntity.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + orderUserToOrderAccountService.bindUser(orderAccountEntity); + return AjaxResult.success(); + } + + @PostMapping("/unbindUser") + @ApiOperation("解绑员工工单") + public AjaxResult unbindUser(@Validated @RequestBody UnBindOrderDTO orderAccountEntity) { + orderAccountEntity.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + orderUserToOrderAccountService.unbindUser(orderAccountEntity); + return AjaxResult.success(); + } + + @PostMapping("/bindCustomer") + @ApiOperation("绑定客户") + public AjaxResult bindCustomer(@Validated @RequestBody OrderGroupToOrderCustomerEntity groupToOrderCustomerEntity) { + groupToOrderCustomerEntity.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + groupToOrderCustomerService.bindCustomer(groupToOrderCustomerEntity); + return AjaxResult.success(); + } + + @PostMapping("/unbindCustomer") + @ApiOperation("解绑客户") + public AjaxResult unbindCustomer(@Validated @RequestBody unBindCustomerDTO unBindCustomerDTO) { + unBindCustomerDTO.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + groupToOrderCustomerService.unbindCustomer(unBindCustomerDTO); + return AjaxResult.success(); + } + + + @GetMapping("/getBindTotal") + @ApiOperation("获得员工数量绑定数量") + public AjaxResult getBindTotal() { + return AjaxResult.success(orderUserToOrderAccountService.getBindTotal(LoginTokenService.getLoginUser().getCorpId())); + } + + @GetMapping("/listOfBindDetail") + @ApiOperation("获取绑定详情") + public TableDataInfo listOfBindDetail(BindDetailDTO bindDetailDTO) { + bindDetailDTO.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + bindDetailDTO.setNetworkId(orderUserToOrderAccountService.getNetworkId(bindDetailDTO.getCorpId())); + startPage(); + return getDataTable(orderUserToOrderAccountService.listOfBindDetail(bindDetailDTO)); + } + + @GetMapping("/getBindInfo") + @ApiOperation("获取员工客户绑定信息") + public AjaxResult getBindInfo(OrderBindInfoDTO orderBindInfoDTO) { + if (!LoginTokenService.getLoginUser().isSuperAdmin()) { + orderBindInfoDTO.setUserId(LoginTokenService.getLoginUser().getWeUser().getUserId()); + } + orderBindInfoDTO.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + return AjaxResult.success(orderUserToOrderAccountService.getBindInfo(orderBindInfoDTO)); + } + + /** + * 机器人推送工单创建接口 + */ + @PostMapping("/createOrder") + @ApiOperation("创建工单") + public AjaxResult createOrder(@Validated @RequestBody OrderCreateDTO orderCreateDTO) { + return AjaxResult.success(orderClient.createOrder(orderCreateDTO)); + } +} diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/pro/WecomPlusController.java b/easyink-admin/src/main/java/com/easyink/web/controller/pro/WecomPlusController.java new file mode 100644 index 0000000..8b14517 --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/pro/WecomPlusController.java @@ -0,0 +1,55 @@ +package com.easyink.web.controller.pro; + +import com.easyink.common.core.controller.BaseController; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.wecom.domain.dto.pro.EditCustomerFromPlusDTO; +import com.easyink.wecom.domain.dto.pro.QueryCustomerFromPlusDTO; +import com.easyink.wecom.domain.vo.QueryCustomerFromPlusVO; +import com.easyink.wecom.service.WeCustomerService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.validation.constraints.NotNull; + +/** + * 类名: 对企微PRO提供的接口控制层 + * + * @author : silver_chariot + * @date : 2021/11/2 11:27 + */ +@RestController +@RequestMapping("/wecom/plus") +@Api(tags = "对企微PRO提供的接口") +@Slf4j +public class WecomPlusController extends BaseController { + + private final WeCustomerService weCustomerService; + + @Autowired + @Lazy + public WecomPlusController(@NotNull WeCustomerService weCustomerService) { + this.weCustomerService = weCustomerService; + } + + @GetMapping("/queryCustomer") + @ApiOperation("根据成员id和客户头像查询客户详情") + public AjaxResult queryCustomer(@Validated QueryCustomerFromPlusDTO dto) { + return AjaxResult.success(weCustomerService.getDetailByUserIdAndCustomerAvatar( + dto.getCorpId(), dto.getUserId(), dto.getAvatar() + )); + } + + @PostMapping("/editCustomer") + @ApiOperation("修改客户资料") + public AjaxResult editCustomer(@RequestBody @Validated EditCustomerFromPlusDTO dto) { + weCustomerService.editByUserIdAndCustomerAvatar(dto); + return AjaxResult.success(); + } + + +} diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/system/SysConfigController.java b/easyink-admin/src/main/java/com/easyink/web/controller/system/SysConfigController.java new file mode 100644 index 0000000..10f7fb5 --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/system/SysConfigController.java @@ -0,0 +1,111 @@ +package com.easyink.web.controller.system; + +import com.easyink.common.annotation.Log; +import com.easyink.common.annotation.RepeatSubmit; +import com.easyink.common.constant.UserConstants; +import com.easyink.common.core.controller.BaseController; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.core.domain.system.SysConfig; +import com.easyink.common.core.page.TableDataInfo; +import com.easyink.common.enums.BusinessType; +import com.easyink.common.service.ISysConfigService; +import com.easyink.common.utils.poi.ExcelUtil; +import com.easyink.wecom.login.util.LoginTokenService; +import com.github.xiaoymin.knife4j.annotations.ApiSupport; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 参数配置 信息操作处理 + * + * @author admin + */ +@RestController +@RequestMapping("/system/config") +@ApiSupport(order = 7, author = "1*+") +@Api(value = "SysUserOnlineController", tags = "参数配置接口") +public class SysConfigController extends BaseController { + @Autowired + private ISysConfigService configService; + + @PreAuthorize("@ss.hasPermi('system:config:list')") + @GetMapping("/list") + @ApiOperation("参数配置列表") + public TableDataInfo list(SysConfig config) { + startPage(); + List list = configService.selectConfigList(config); + return getDataTable(list); + } + + @Log(title = "参数管理", businessType = BusinessType.EXPORT) + @PreAuthorize("@ss.hasPermi('system:config:export')") + @GetMapping("/export") + @ApiOperation("导出参数配置") + public AjaxResult export(SysConfig config) { + List list = configService.selectConfigList(config); + ExcelUtil util = new ExcelUtil<>(SysConfig.class); + return util.exportExcel(list, "参数数据"); + } + + @PreAuthorize("@ss.hasPermi('system:config:query')") + @GetMapping(value = "/{configId}") + @ApiOperation("获取参数配置详情") + public AjaxResult getInfo(@ApiParam("配置ID") @PathVariable Long configId) { + return AjaxResult.success(configService.selectConfigById(configId)); + } + + @ApiOperation("获取参数值") + @GetMapping(value = "/configKey/{configKey}") + public AjaxResult getConfigKey(@ApiParam("配置键值") @PathVariable String configKey) { + return AjaxResult.success(configService.selectConfigByKey(configKey)); + } + + @PreAuthorize("@ss.hasPermi('system:config:add')") + @Log(title = "参数管理", businessType = BusinessType.INSERT) + @PostMapping + @RepeatSubmit + @ApiOperation("新增参数配置") + public AjaxResult add(@Validated @RequestBody SysConfig config) { + if (UserConstants.NOT_UNIQUE.equals(configService.checkConfigKeyUnique(config))) { + return AjaxResult.error("新增参数'" + config.getConfigName() + "'失败,参数键名已存在"); + } + config.setCreateBy(LoginTokenService.getUsername()); + return toAjax(configService.insertConfig(config)); + } + + @PreAuthorize("@ss.hasPermi('system:config:edit')") + @Log(title = "参数管理", businessType = BusinessType.UPDATE) + @PutMapping + @ApiOperation("编辑参数配置") + public AjaxResult edit(@Validated @RequestBody SysConfig config) { + if (UserConstants.NOT_UNIQUE.equals(configService.checkConfigKeyUnique(config))) { + return AjaxResult.error("修改参数'" + config.getConfigName() + "'失败,参数键名已存在"); + } + config.setUpdateBy(LoginTokenService.getUsername()); + return toAjax(configService.updateConfig(config)); + } + + @PreAuthorize("@ss.hasPermi('system:config:remove')") + @Log(title = "参数管理", businessType = BusinessType.DELETE) + @DeleteMapping("/{configIds}") + @ApiOperation("删除参数配置") + public AjaxResult remove(@ApiParam("配置ID数组") @PathVariable Long[] configIds) { + return toAjax(configService.deleteConfigByIds(configIds)); + } + + @PreAuthorize("@ss.hasPermi('system:config:remove')") + @Log(title = "参数管理", businessType = BusinessType.CLEAN) + @DeleteMapping("/clearCache") + @ApiOperation("清空参数缓存") + public AjaxResult clearCache() { + configService.clearCache(); + return AjaxResult.success(); + } +} diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/system/SysDeptController.java b/easyink-admin/src/main/java/com/easyink/web/controller/system/SysDeptController.java new file mode 100644 index 0000000..16d28cf --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/system/SysDeptController.java @@ -0,0 +1,115 @@ +package com.easyink.web.controller.system; + +import com.easyink.common.annotation.Log; +import com.easyink.common.constant.UserConstants; +import com.easyink.common.core.controller.BaseController; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.core.domain.entity.SysDept; +import com.easyink.common.core.domain.model.LoginUser; +import com.easyink.common.core.domain.wecom.WeDepartment; +import com.easyink.common.enums.BusinessType; +import com.easyink.common.service.ISysDeptService; +import com.easyink.common.utils.StringUtils; +import com.easyink.wecom.login.util.LoginTokenService; +import com.github.xiaoymin.knife4j.annotations.ApiSupport; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 部门信息 + * + * @author admin + */ +@RestController +@RequestMapping("/system/dept") +@ApiSupport(order = 8, author = "1*+") +@Api(value = "SysDeptController", tags = "系统部门接口", hidden = true) +public class SysDeptController extends BaseController { + @Autowired + private ISysDeptService deptService; + + + @PreAuthorize("@ss.hasPermi('system:dept:query')") + @GetMapping(value = "/{deptId}") + @ApiOperation(value = "根据部门编号获取详细信息", hidden = true) + @Deprecated + public AjaxResult getInfo(@ApiParam("部门ID") @PathVariable Long deptId) { + return AjaxResult.success(deptService.selectDeptById(deptId)); + } + + @GetMapping("/treeselect") + @ApiOperation(value = "获取部门下拉树列表", hidden = true) + public AjaxResult treeselect() { + LoginUser loginUser = LoginTokenService.getLoginUser(); + List depts = deptService.selectDeptList( + WeDepartment.builder().corpId(loginUser.getCorpId()).build(), + loginUser); + return AjaxResult.success(deptService.buildDeptTreeSelect(depts)); + } + + @ApiOperation(value = "加载对应角色部门列表树", hidden = true) + @GetMapping(value = "/roleDeptTreeselect/{roleId}") + public AjaxResult roleDeptTreeselect(@ApiParam("角色ID") @PathVariable("roleId") Long roleId) { + LoginUser loginUser = LoginTokenService.getLoginUser(); + List depts = deptService.selectDeptList( + WeDepartment.builder().corpId(loginUser.getCorpId()).build(), + loginUser); + AjaxResult ajax = AjaxResult.success(); + ajax.put("checkedKeys", deptService.selectDeptListByRoleId(roleId)); + ajax.put("depts", deptService.buildDeptTreeSelect(depts)); + return ajax; + } + + @ApiOperation(value = "新增部门", hidden = true) + @PreAuthorize("@ss.hasPermi('system:dept:add')") + @Log(title = "部门管理", businessType = BusinessType.INSERT) + @PostMapping + @Deprecated + public AjaxResult add(@Validated @RequestBody SysDept dept) { + if (UserConstants.NOT_UNIQUE.equals(deptService.checkDeptNameUnique(dept))) { + return AjaxResult.error("新增部门'" + dept.getDeptName() + "'失败,部门名称已存在"); + } + dept.setCreateBy(LoginTokenService.getUsername()); + return toAjax(deptService.insertDept(dept)); + } + + @ApiOperation(value = "修改部门", hidden = true) + @PreAuthorize("@ss.hasPermi('system:dept:edit')") + @Log(title = "部门管理", businessType = BusinessType.UPDATE) + @PutMapping + @Deprecated + public AjaxResult edit(@Validated @RequestBody SysDept dept) { + if (UserConstants.NOT_UNIQUE.equals(deptService.checkDeptNameUnique(dept))) { + return AjaxResult.error("修改部门'" + dept.getDeptName() + "'失败,部门名称已存在"); + } else if (dept.getParentId().equals(dept.getDeptId())) { + return AjaxResult.error("修改部门'" + dept.getDeptName() + "'失败,上级部门不能是自己"); + } else if (StringUtils.equals(UserConstants.DEPT_DISABLE, dept.getStatus()) + && deptService.selectNormalChildrenDeptById(dept.getDeptId()) > 0) { + return AjaxResult.error("该部门包含未停用的子部门!"); + } + dept.setUpdateBy(LoginTokenService.getUsername()); + return toAjax(deptService.updateDept(dept)); + } + + @ApiOperation(value = "删除部门", hidden = true) + @PreAuthorize("@ss.hasPermi('system:dept:remove')") + @Log(title = "部门管理", businessType = BusinessType.DELETE) + @DeleteMapping("/{deptId}") + @Deprecated + public AjaxResult remove(@ApiParam("部门ID") @PathVariable Long deptId) { + if (deptService.hasChildByDeptId(deptId)) { + return AjaxResult.error("存在下级部门,不允许删除"); + } + if (deptService.checkDeptExistUser(deptId)) { + return AjaxResult.error("部门存在用户,不允许删除"); + } + return toAjax(deptService.deleteDeptById(deptId)); + } +} diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/system/SysDictDataController.java b/easyink-admin/src/main/java/com/easyink/web/controller/system/SysDictDataController.java new file mode 100644 index 0000000..0910301 --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/system/SysDictDataController.java @@ -0,0 +1,94 @@ +package com.easyink.web.controller.system; + +import com.easyink.common.annotation.Log; +import com.easyink.common.core.controller.BaseController; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.core.domain.entity.SysDictData; +import com.easyink.common.core.page.TableDataInfo; +import com.easyink.common.enums.BusinessType; +import com.easyink.common.service.ISysDictDataService; +import com.easyink.common.service.ISysDictTypeService; +import com.easyink.common.utils.poi.ExcelUtil; +import com.easyink.wecom.login.util.LoginTokenService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 数据字典信息 + * + * @author admin + */ +@RestController +@RequestMapping("/system/dict/data") +@Api(value = "SysDictDataController", tags = "数据字典信息") +public class SysDictDataController extends BaseController { + @Autowired + private ISysDictDataService dictDataService; + + @Autowired + private ISysDictTypeService dictTypeService; + + @PreAuthorize("@ss.hasPermi('system:dict:list')") + @GetMapping("/list") + @ApiOperation("查询列表") + public TableDataInfo list(SysDictData dictData) { + startPage(); + List list = dictDataService.selectDictDataList(dictData); + return getDataTable(list); + } + + @Log(title = "字典数据", businessType = BusinessType.EXPORT) + @PreAuthorize("@ss.hasPermi('system:dict:export')") + @GetMapping("/export") + @ApiOperation("导出字典数据") + public AjaxResult export(SysDictData dictData) { + List list = dictDataService.selectDictDataList(dictData); + ExcelUtil util = new ExcelUtil<>(SysDictData.class); + return util.exportExcel(list, "字典数据"); + } + + @ApiOperation("查询字典数据详细") + @PreAuthorize("@ss.hasPermi('system:dict:query')") + @GetMapping(value = "/{dictCode}") + public AjaxResult getInfo(@PathVariable Long dictCode) { + return AjaxResult.success(dictDataService.selectDictDataById(dictCode)); + } + + @ApiOperation("根据字典类型查询字典数据信息") + @GetMapping(value = "/type/{dictType}") + public AjaxResult dictType(@PathVariable String dictType) { + return AjaxResult.success(dictTypeService.selectDictDataByType(dictType)); + } + + @ApiOperation("新增字典类型") + @PreAuthorize("@ss.hasPermi('system:dict:add')") + @Log(title = "字典数据", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@Validated @RequestBody SysDictData dict) { + dict.setCreateBy(LoginTokenService.getUsername()); + return toAjax(dictDataService.insertDictData(dict)); + } + + @ApiOperation("修改保存字典类型") + @PreAuthorize("@ss.hasPermi('system:dict:edit')") + @Log(title = "字典数据", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@Validated @RequestBody SysDictData dict) { + dict.setUpdateBy(LoginTokenService.getUsername()); + return toAjax(dictDataService.updateDictData(dict)); + } + + @ApiOperation("删除字典类型") + @PreAuthorize("@ss.hasPermi('system:dict:remove')") + @Log(title = "字典类型", businessType = BusinessType.DELETE) + @DeleteMapping("/{dictCodes}") + public AjaxResult remove(@PathVariable Long[] dictCodes) { + return toAjax(dictDataService.deleteDictDataByIds(dictCodes)); + } +} diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/system/SysDictTypeController.java b/easyink-admin/src/main/java/com/easyink/web/controller/system/SysDictTypeController.java new file mode 100644 index 0000000..e0f9009 --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/system/SysDictTypeController.java @@ -0,0 +1,108 @@ +package com.easyink.web.controller.system; + +import com.easyink.common.annotation.Log; +import com.easyink.common.constant.UserConstants; +import com.easyink.common.core.controller.BaseController; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.core.domain.entity.SysDictType; +import com.easyink.common.core.page.TableDataInfo; +import com.easyink.common.enums.BusinessType; +import com.easyink.common.service.ISysDictTypeService; +import com.easyink.common.utils.poi.ExcelUtil; +import com.easyink.wecom.login.util.LoginTokenService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 数据字典信息 + * + * @author admin + */ +@RestController +@RequestMapping("/system/dict/type") +@Api(value = "SysDictTypeController", tags = "数据字典信息") +public class SysDictTypeController extends BaseController { + @Autowired + private ISysDictTypeService dictTypeService; + + @PreAuthorize("@ss.hasPermi('system:dict:list')") + @GetMapping("/list") + @ApiOperation("列表查询") + public TableDataInfo list(SysDictType dictType) { + startPage(); + List list = dictTypeService.selectDictTypeList(dictType); + return getDataTable(list); + } + + @Log(title = "字典类型", businessType = BusinessType.EXPORT) + @PreAuthorize("@ss.hasPermi('system:dict:export')") + @GetMapping("/export") + @ApiOperation("导出字典数据") + public AjaxResult export(SysDictType dictType) { + List list = dictTypeService.selectDictTypeList(dictType); + ExcelUtil util = new ExcelUtil<>(SysDictType.class); + return util.exportExcel(list, "字典类型"); + } + + @PreAuthorize("@ss.hasPermi('system:dict:query')") + @GetMapping(value = "/{dictId}") + @ApiOperation("查询字典类型详细") + public AjaxResult getInfo(@PathVariable Long dictId) { + return AjaxResult.success(dictTypeService.selectDictTypeById(dictId)); + } + + @PreAuthorize("@ss.hasPermi('system:dict:add')") + @Log(title = "字典类型", businessType = BusinessType.INSERT) + @PostMapping + @ApiOperation("新增字典类型") + public AjaxResult add(@Validated @RequestBody SysDictType dict) { + if (UserConstants.NOT_UNIQUE.equals(dictTypeService.checkDictTypeUnique(dict))) { + return AjaxResult.error("新增字典'" + dict.getDictName() + "'失败,字典类型已存在"); + } + dict.setCreateBy(LoginTokenService.getUsername()); + return toAjax(dictTypeService.insertDictType(dict)); + } + + @PreAuthorize("@ss.hasPermi('system:dict:edit')") + @Log(title = "字典类型", businessType = BusinessType.UPDATE) + @PutMapping + @ApiOperation("修改字典类型") + public AjaxResult edit(@Validated @RequestBody SysDictType dict) { + if (UserConstants.NOT_UNIQUE.equals(dictTypeService.checkDictTypeUnique(dict))) { + return AjaxResult.error("修改字典'" + dict.getDictName() + "'失败,字典类型已存在"); + } + dict.setUpdateBy(LoginTokenService.getUsername()); + return toAjax(dictTypeService.updateDictType(dict)); + } + + + @PreAuthorize("@ss.hasPermi('system:dict:remove')") + @Log(title = "字典类型", businessType = BusinessType.DELETE) + @DeleteMapping("/{dictIds}") + @ApiOperation("删除字典类型") + public AjaxResult remove(@PathVariable Long[] dictIds) { + return toAjax(dictTypeService.deleteDictTypeByIds(dictIds)); + } + + @PreAuthorize("@ss.hasPermi('system:dict:remove')") + @Log(title = "字典类型", businessType = BusinessType.CLEAN) + @DeleteMapping("/clearCache") + @ApiOperation("清空缓存") + public AjaxResult clearCache() { + dictTypeService.clearCache(); + return AjaxResult.success(); + } + + @GetMapping("/optionselect") + @ApiOperation("获取字典选择框列表") + public AjaxResult optionselect() { + List dictTypes = dictTypeService.selectDictTypeAll(); + return AjaxResult.success(dictTypes); + } +} diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/system/SysLoginController.java b/easyink-admin/src/main/java/com/easyink/web/controller/system/SysLoginController.java new file mode 100644 index 0000000..7f8b002 --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/system/SysLoginController.java @@ -0,0 +1,139 @@ +package com.easyink.web.controller.system; + +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.core.domain.entity.SysMenu; +import com.easyink.common.core.domain.entity.WeCorpAccount; +import com.easyink.common.core.domain.model.LoginBody; +import com.easyink.common.core.domain.model.LoginResult; +import com.easyink.common.core.domain.model.LoginUser; +import com.easyink.common.core.domain.model.LoginUserVO; +import com.easyink.common.core.domain.system.RouterVo; +import com.easyink.common.enums.LoginTypeEnum; +import com.easyink.common.service.ISysMenuService; +import com.easyink.common.token.SysPermissionService; +import com.easyink.common.token.TokenService; +import com.easyink.common.utils.ServletUtils; +import com.easyink.wecom.domain.vo.WeInternalPreLoginParamVO; +import com.easyink.wecom.login.service.SysLoginService; +import com.easyink.wecom.login.util.LoginTokenService; +import com.easyink.wecom.service.WeCorpAccountService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +/** + * 类名: SysLoginController + * + * @author: 1*+ + * @date: 2021-09-14 10:32 + */ +@Api(tags = "登录接口") +@RestController +public class SysLoginController { + + private final SysLoginService loginService; + private final ISysMenuService menuService; + private final SysPermissionService permissionService; + private final TokenService tokenService; + private final WeCorpAccountService iWxCorpAccountService; + + @Autowired + public SysLoginController(SysLoginService loginService, ISysMenuService menuService, SysPermissionService permissionService, TokenService tokenService, WeCorpAccountService iWxCorpAccountService) { + this.loginService = loginService; + this.menuService = menuService; + this.permissionService = permissionService; + this.tokenService = tokenService; + this.iWxCorpAccountService = iWxCorpAccountService; + } + + @ApiOperation("登录方法") + @PostMapping("/login") + public AjaxResult login(@RequestBody LoginBody loginBody) { + // 生成令牌 + String token = loginService.login(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(), + loginBody.getUuid()); + return AjaxResult.success(new LoginResult(token)); + } + + @ApiOperation("内部扫码登录") + @GetMapping("/qrCodeLogin") + public AjaxResult qrCodeLogin(@ApiParam("扫码登录返回的授权码") @RequestParam("code") String code) { + LoginResult loginResult = loginService.loginHandler(code, LoginTypeEnum.BY_SCAN.getState()); + if (StringUtils.isNotBlank(loginResult.getErrorMsg())) { + return AjaxResult.error(loginResult.getErrorMsg()); + } + return AjaxResult.success(loginResult); + } + + @ApiOperation("网页登录") + @GetMapping("/webLogin") + public AjaxResult webLogin(@ApiParam("网页登录返回的授权码") @RequestParam("code") String code){ + LoginResult loginResult = loginService.loginHandler(code, LoginTypeEnum.BY_WEB.getState()); + if (StringUtils.isNotBlank(loginResult.getErrorMsg())){ + return AjaxResult.error(loginResult.getErrorMsg()); + } + return AjaxResult.success(loginResult); + } + + @ApiOperation("三方扫码登录") + @GetMapping("/qrCodeLogin3rd") + public AjaxResult qrCodeLogin3rd(@ApiParam("扫码登录返回的授权码") @RequestParam("authCode") String authCode) { + LoginResult loginResult = loginService.loginHandler(authCode,LoginTypeEnum.BY_THIRD_SCAN.getState()); + loginResult.setLoginUser(null); + if (StringUtils.isNotBlank(loginResult.getErrorMsg())) { + return AjaxResult.error(loginResult.getErrorMsg()); + } + return AjaxResult.success(loginResult); + } + + @ApiOperation("登录处理器(扫码、网页登录)") + @GetMapping("/loginHandler") + public AjaxResult loginHandler(@ApiParam("登录返回的授权码") @RequestParam("code") String code, + @ApiParam("登录返回的自定义state 内部扫码:INTERNAL_SCAN_LOGIN 三方扫码:THIRD_SCAN_LOGIN 网页登录:WEB_LOGIN ") @RequestParam("state") String state){ + LoginResult loginResult = loginService.loginHandler(code, state); + if (StringUtils.isNotBlank(loginResult.getErrorMsg())){ + return AjaxResult.error(loginResult.getErrorMsg()); + } + return AjaxResult.success(loginResult); + } + + @ApiOperation("获取用户信息") + @GetMapping("getInfo") + public AjaxResult getInfo() { + LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest()); + // 角色集合 + Set roles = permissionService.getRolePermission(loginUser); + // 权限集合 + Set permissions = permissionService.getMenuPermission(loginUser); + // 刷新TOKEN + LoginTokenService.refreshDataScope(); + return AjaxResult.success(new LoginUserVO(loginUser,(HashSet)roles,(HashSet)permissions)); + } + + @ApiOperation("获取路由信息") + @GetMapping("getRouters") + public AjaxResult getRouters() { + LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest()); + // 用户信息 + List menus = menuService.selectMenuTreeByLoginUser(loginUser); + return AjaxResult.success(menuService.buildMenus(menus)); + } + + @ApiOperation("获取内部应用登录二维码构造相关参数") + @GetMapping("/findWxQrLoginInfo") + public AjaxResult findWxQrLoginInfo() { + WeCorpAccount validWeCorpAccount = iWxCorpAccountService.findValidWeCorpAccount(); + return AjaxResult.success(new WeInternalPreLoginParamVO(validWeCorpAccount)); + } + + + + +} diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/system/SysMenuController.java b/easyink-admin/src/main/java/com/easyink/web/controller/system/SysMenuController.java new file mode 100644 index 0000000..831d47f --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/system/SysMenuController.java @@ -0,0 +1,127 @@ +package com.easyink.web.controller.system; + +import com.easyink.common.annotation.Log; +import com.easyink.common.constant.Constants; +import com.easyink.common.constant.UserConstants; +import com.easyink.common.core.MenuTree; +import com.easyink.common.core.controller.BaseController; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.core.domain.TreeSelect; +import com.easyink.common.core.domain.entity.SysMenu; +import com.easyink.common.core.domain.model.LoginUser; +import com.easyink.common.enums.BusinessType; +import com.easyink.common.service.ISysMenuService; +import com.easyink.common.token.TokenService; +import com.easyink.common.utils.ServletUtils; +import com.easyink.common.utils.StringUtils; +import com.easyink.wecom.login.util.LoginTokenService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 菜单信息 + * + * @author admin + */ +@RestController +@RequestMapping("/system/menu") +@Api(tags = "菜单信息") +public class SysMenuController extends BaseController { + @Autowired + private ISysMenuService menuService; + + @Autowired + private TokenService tokenService; + private static final String ERROR_INFO = "新增菜单'"; + + @PreAuthorize("@ss.hasPermi('system:menu:list')") + @GetMapping("/list") + @ApiOperation("获取菜单列表") + public AjaxResult> list(SysMenu menu) { + LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest()); + List menus = menuService.selectMenuList(menu, loginUser); + return AjaxResult.success(menus); + } + + /** + * 根据菜单编号获取详细信息 + */ +// @PreAuthorize("@ss.hasPermi('system:menu:query')") + @GetMapping(value = "/{menuId}") + @ApiOperation("根据菜单编号获取详细信息") + public AjaxResult getInfo(@PathVariable Long menuId) { + return AjaxResult.success(menuService.selectMenuById(menuId)); + } + + + @GetMapping("/treeselect") + @ApiOperation("获取菜单下拉树列表") + public AjaxResult> treeselect(SysMenu menu) { + LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest()); + List menus = menuService.selectMenuList(menu, loginUser); + return AjaxResult.success(menuService.buildMenuTreeSelect(menus)); + } + + @GetMapping(value = "/roleMenuTreeselect/{roleId}") + @ApiOperation("加载对应角色菜单列表树") + public AjaxResult roleMenuTreeselect(@PathVariable("roleId") Long roleId) { + LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest()); + MenuTree roleMenuTree = menuService.getRoleMenuTreeSelect(roleId,loginUser); + return AjaxResult.success(roleMenuTree); + } + + + @PreAuthorize("@ss.hasPermi('system:menu:add')") + @Log(title = "菜单管理", businessType = BusinessType.INSERT) + @PostMapping + @ApiOperation("新增菜单") + public AjaxResult add(@Validated @RequestBody SysMenu menu) { + if (UserConstants.NOT_UNIQUE.equals(menuService.checkMenuNameUnique(menu))) { + return AjaxResult.error(ERROR_INFO + menu.getMenuName() + "'失败,菜单名称已存在"); + } else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) + && !StringUtils.startsWithAny(menu.getPath(), Constants.HTTP, Constants.HTTPS)) { + return AjaxResult.error(ERROR_INFO + menu.getMenuName() + "'失败,地址必须以http(s)://开头"); + } + menu.setCreateBy(LoginTokenService.getUsername()); + return toAjax(menuService.insertMenu(menu)); + } + + + @PreAuthorize("@ss.hasPermi('system:menu:edit')") + @Log(title = "菜单管理", businessType = BusinessType.UPDATE) + @PutMapping + @ApiOperation("修改菜单") + public AjaxResult edit(@Validated @RequestBody SysMenu menu) { + if (UserConstants.NOT_UNIQUE.equals(menuService.checkMenuNameUnique(menu))) { + return AjaxResult.error("修改菜单'" + menu.getMenuName() + "'失败,菜单名称已存在"); + } else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) + && !StringUtils.startsWithAny(menu.getPath(), Constants.HTTP, Constants.HTTPS)) { + return AjaxResult.error(ERROR_INFO + menu.getMenuName() + "'失败,地址必须以http(s)://开头"); + } else if (menu.getMenuId().equals(menu.getParentId())) { + return AjaxResult.error(ERROR_INFO + menu.getMenuName() + "'失败,上级菜单不能选择自己"); + } + menu.setUpdateBy(LoginTokenService.getUsername()); + return toAjax(menuService.updateMenu(menu)); + } + + + @PreAuthorize("@ss.hasPermi('system:menu:remove')") + @Log(title = "菜单管理", businessType = BusinessType.DELETE) + @DeleteMapping("/{menuId}") + @ApiOperation("删除菜单") + public AjaxResult remove(@PathVariable("menuId") Long menuId) { + if (menuService.hasChildByMenuId(menuId)) { + return AjaxResult.error("存在子菜单,不允许删除"); + } + if (menuService.checkMenuExistRole(menuId)) { + return AjaxResult.error("菜单已分配,不允许删除"); + } + return toAjax(menuService.deleteMenuById(menuId)); + } +} \ No newline at end of file diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/system/SysNoticeController.java b/easyink-admin/src/main/java/com/easyink/web/controller/system/SysNoticeController.java new file mode 100644 index 0000000..e453160 --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/system/SysNoticeController.java @@ -0,0 +1,71 @@ +package com.easyink.web.controller.system; + +import com.easyink.common.annotation.Log; +import com.easyink.common.core.controller.BaseController; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.core.domain.system.SysNotice; +import com.easyink.common.core.page.TableDataInfo; +import com.easyink.common.enums.BusinessType; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.ArrayList; + +/** + * 公告 信息操作处理 + * + * @author admin + */ +@RestController +@RequestMapping("/system/notice") +@Api(tags = "信息操作处理") +@Deprecated +public class SysNoticeController extends BaseController { + + @PreAuthorize("@ss.hasPermi('system:notice:list')") + @GetMapping("/list") + @ApiOperation("获取通知公告列表") + @Deprecated + public TableDataInfo list(SysNotice notice) { + return getDataTable(new ArrayList<>()); + } + + @PreAuthorize("@ss.hasPermi('system:notice:query')") + @GetMapping(value = "/{noticeId}") + @ApiOperation("根据通知公告编号获取详细信息") + @Deprecated + public AjaxResult getInfo(@PathVariable Long noticeId) { + return AjaxResult.success(); + } + + + @PreAuthorize("@ss.hasPermi('system:notice:add')") + @Log(title = "通知公告", businessType = BusinessType.INSERT) + @PostMapping + @ApiOperation("新增通知公告") + @Deprecated + public AjaxResult add(@Validated @RequestBody SysNotice notice) { + return AjaxResult.success(); + } + + @PreAuthorize("@ss.hasPermi('system:notice:edit')") + @Log(title = "通知公告", businessType = BusinessType.UPDATE) + @PutMapping + @ApiOperation("修改通知公告") + @Deprecated + public AjaxResult edit(@Validated @RequestBody SysNotice notice) { + return AjaxResult.success(); + } + + + @PreAuthorize("@ss.hasPermi('system:notice:remove')") + @Log(title = "通知公告", businessType = BusinessType.DELETE) + @DeleteMapping("/{noticeIds}") + @ApiOperation("删除通知公告") + public AjaxResult remove(@PathVariable Long[] noticeIds) { + return AjaxResult.success(); + } +} diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/system/SysPostController.java b/easyink-admin/src/main/java/com/easyink/web/controller/system/SysPostController.java new file mode 100644 index 0000000..e6504a8 --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/system/SysPostController.java @@ -0,0 +1,100 @@ +package com.easyink.web.controller.system; + +import com.easyink.common.annotation.Log; +import com.easyink.common.core.controller.BaseController; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.core.domain.system.SysPost; +import com.easyink.common.core.page.TableDataInfo; +import com.easyink.common.enums.BusinessType; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.ArrayList; + +/** + * 岗位信息操作处理 + * + * @author admin + */ +@RestController +@RequestMapping("/system/post") +@Api(tags = "岗位信息操作处理") +@Deprecated +public class SysPostController extends BaseController { + /** + * 获取岗位列表 + */ + @PreAuthorize("@ss.hasPermi('system:post:list')") + @GetMapping("/list") + @ApiOperation("获取岗位列表") + public TableDataInfo list(SysPost post) { + return getDataTable(new ArrayList<>()); + } + + @Log(title = "岗位管理", businessType = BusinessType.EXPORT) + @PreAuthorize("@ss.hasPermi('system:post:export')") + @GetMapping("/export") + @ApiOperation("岗位管理") + public AjaxResult export(SysPost post) { + return AjaxResult.success(); + } + + /** + * 根据岗位编号获取详细信息 + */ + @ApiOperation("根据岗位编号获取详细信息") + @PreAuthorize("@ss.hasPermi('system:post:query')") + @GetMapping(value = "/{postId}") + public AjaxResult getInfo(@PathVariable Long postId) { + return AjaxResult.success(); + } + + /** + * 新增岗位 + */ + @PreAuthorize("@ss.hasPermi('system:post:add')") + @Log(title = "岗位管理", businessType = BusinessType.INSERT) + @PostMapping + @ApiOperation("新增岗位") + public AjaxResult add(@Validated @RequestBody SysPost post) { + return AjaxResult.success(); + + } + + /** + * 修改岗位 + */ + @PreAuthorize("@ss.hasPermi('system:post:edit')") + @Log(title = "岗位管理", businessType = BusinessType.UPDATE) + @PutMapping + @ApiOperation("修改岗位") + public AjaxResult edit(@Validated @RequestBody SysPost post) { + return AjaxResult.success(); + + } + + /** + * 删除岗位 + */ + @PreAuthorize("@ss.hasPermi('system:post:remove')") + @Log(title = "岗位管理", businessType = BusinessType.DELETE) + @DeleteMapping("/{postIds}") + @ApiOperation("删除岗位") + public AjaxResult remove(@PathVariable Long[] postIds) { + return AjaxResult.success(); + + } + + /** + * 获取岗位选择框列表 + */ + @GetMapping("/optionselect") + @ApiOperation("获取岗位选择框列表") + public AjaxResult optionselect() { + return AjaxResult.success(); + + } +} diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/system/SysProfileController.java b/easyink-admin/src/main/java/com/easyink/web/controller/system/SysProfileController.java new file mode 100644 index 0000000..62e5c9a --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/system/SysProfileController.java @@ -0,0 +1,150 @@ +package com.easyink.web.controller.system; + +import com.easyink.common.annotation.Log; +import com.easyink.common.config.RuoYiConfig; +import com.easyink.common.core.controller.BaseController; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.core.domain.entity.SysUser; +import com.easyink.common.core.domain.model.LoginUser; +import com.easyink.common.core.domain.wecom.WeUser; +import com.easyink.common.enums.BusinessType; +import com.easyink.common.enums.MediaType; +import com.easyink.common.service.ISysUserService; +import com.easyink.common.token.TokenService; +import com.easyink.common.utils.SecurityUtils; +import com.easyink.common.utils.ServletUtils; +import com.easyink.common.utils.file.FileUploadUtils; +import com.easyink.wecom.client.WeMediaClient; +import com.easyink.wecom.client.WeUserClient; +import com.easyink.wecom.domain.dto.WeMediaDTO; +import com.easyink.wecom.domain.dto.WeUserDTO; +import com.easyink.wecom.login.util.LoginTokenService; +import com.easyink.wecom.service.WeUserService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; + +/** + * 个人信息 业务处理 + * + * @author admin + */ +@RestController +@RequestMapping("/system/user/profile") +@Api(tags = "个人信息 业务处理") +public class SysProfileController extends BaseController { + @Autowired + private ISysUserService userService; + @Autowired + private TokenService tokenService; + @Autowired + private WeMediaClient weMediaClient; + @Autowired + private WeUserService weUserService; + @Autowired + private WeUserClient weUserClient; + /** + * 个人信息 + */ + @GetMapping + @ApiOperation("个人信息") + public AjaxResult profile() { + LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest()); + SysUser user = loginUser.getUser(); + AjaxResult ajax = AjaxResult.success(user); + ajax.put("roleGroup", userService.selectUserRoleGroup(loginUser.getUsername())); + return ajax; + } + + /** + * 修改用户 + */ + @Log(title = "个人信息", businessType = BusinessType.UPDATE) + @PutMapping + @ApiOperation("修改用户") + public AjaxResult updateProfile(@RequestBody SysUser user) { + if (userService.updateUserProfile(user) > 0) { + LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest()); + // 更新缓存用户信息 + loginUser.getUser().setNickName(user.getNickName()); + loginUser.getUser().setPhonenumber(user.getPhonenumber()); + loginUser.getUser().setEmail(user.getEmail()); + loginUser.getUser().setSex(user.getSex()); + tokenService.setLoginUser(loginUser); + return AjaxResult.success(); + } + return AjaxResult.error("修改个人信息异常,请联系管理员"); + } + + /** + * 重置密码 + */ + @Log(title = "个人信息", businessType = BusinessType.UPDATE) + @PutMapping("/updatePwd") + @ApiOperation("重置密码") + public AjaxResult updatePwd(String oldPassword, String newPassword) { + LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest()); + String userName = loginUser.getUsername(); + String password = loginUser.getPassword(); + if (!SecurityUtils.matchesPassword(oldPassword, password)) { + return AjaxResult.error("修改密码失败,旧密码错误"); + } + if (SecurityUtils.matchesPassword(newPassword, password)) { + return AjaxResult.error("新密码不能与旧密码相同"); + } + if (userService.resetUserPwd(userName, SecurityUtils.encryptPassword(newPassword)) > 0) { + // 更新缓存用户密码 + loginUser.getUser().setPassword(SecurityUtils.encryptPassword(newPassword)); + tokenService.setLoginUser(loginUser); + return AjaxResult.success(); + } + return AjaxResult.error("修改密码异常,请联系管理员"); + } + + /** + * 头像上传 + */ + @Log(title = "用户头像", businessType = BusinessType.UPDATE) + @PostMapping("/avatar") + @ApiOperation("头像上传") + public AjaxResult avatar(@RequestParam("avatarfile") MultipartFile file) throws IOException { + if (!file.isEmpty()) { + LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest()); + //判断是系统用户(超管)还是企微用户 + if (loginUser.isSuperAdmin()) { + String avatar = FileUploadUtils.upload(RuoYiConfig.getAvatarPath(), file); + userService.updateUserAvatar(loginUser.getUsername(), avatar); + AjaxResult ajax = AjaxResult.success(); + ajax.put("imgUrl", avatar); + // 更新缓存用户头像 + loginUser.getUser().setAvatar(avatar); + tokenService.setLoginUser(loginUser); + return ajax; + } + //企微用户 + if (!loginUser.isSuperAdmin()) { + WeUser weUser = loginUser.getWeUser(); + WeMediaDTO weMediaDTO = weMediaClient.upload(file.getInputStream(), file.getName(), MediaType.IMAGE.getMediaType(), LoginTokenService.getLoginUser().getCorpId()); + weUser.setAvatarMediaid(weMediaDTO.getMedia_id()); + //用临时素材更新头像 + weUserClient.updateUser(new WeUserDTO(weUser), loginUser.getCorpId()); + //获取头像地址 + WeUserDTO user = weUserClient.getUserByUserId(weUser.getUserId(), loginUser.getCorpId()); + loginUser.getWeUser().setAvatarMediaid(user.getAvatar()); + weUser.setAvatarMediaid(user.getAvatar()); + //更新本地 + weUserService.updateWeUserNoToWeCom(weUser); + tokenService.setLoginUser(loginUser); + AjaxResult ajax = AjaxResult.success(); + ajax.put("imgUrl", user.getAvatar()); + return ajax; + } + + } + return AjaxResult.error("上传图片异常,请联系管理员"); + } +} diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/system/SysRoleController.java b/easyink-admin/src/main/java/com/easyink/web/controller/system/SysRoleController.java new file mode 100644 index 0000000..d417e94 --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/system/SysRoleController.java @@ -0,0 +1,148 @@ +package com.easyink.web.controller.system; + +import com.easyink.common.annotation.Log; +import com.easyink.common.constant.UserConstants; +import com.easyink.common.core.controller.BaseController; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.core.domain.entity.SysRole; +import com.easyink.common.core.domain.model.LoginUser; +import com.easyink.common.core.page.TableDataInfo; +import com.easyink.common.enums.BusinessType; +import com.easyink.common.service.ISysRoleService; +import com.easyink.common.utils.poi.ExcelUtil; +import com.easyink.wecom.login.util.LoginTokenService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 角色信息 + * + * @author admin + */ +@RestController +@RequestMapping("/system/role") +@Api(tags = "角色信息") +public class SysRoleController extends BaseController { + @Autowired + private ISysRoleService roleService; + +// @PreAuthorize("@ss.hasPermi('system:role:list')") + @GetMapping("/list") + @ApiOperation("列表查询") + public TableDataInfo list(SysRole role) { + startPage(); + role.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + List list = roleService.selectRoleList(role); + return getDataTable(list); + } + + @Log(title = "角色管理", businessType = BusinessType.EXPORT) + @PreAuthorize("@ss.hasPermi('system:role:export')") + @GetMapping("/export") + @ApiOperation("导出") + public AjaxResult export(SysRole role) { + List list = roleService.selectRoleList(role); + role.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + ExcelUtil util = new ExcelUtil<>(SysRole.class); + return util.exportExcel(list, "角色数据"); + } + + /** + * 根据角色编号获取详细信息 + */ +// @PreAuthorize("@ss.hasPermi('system:role:query')") + @GetMapping(value = "/{roleId}") + @ApiOperation("根据角色编号获取详细信息") + public AjaxResult getInfo(@PathVariable Long roleId) { + LoginUser loginUser = LoginTokenService.getLoginUser(); + return AjaxResult.success(roleService.selectRoleById(loginUser.getCorpId(), roleId)); + } + + /** + * 新增角色 + */ + @PreAuthorize("@ss.hasPermi('system:role:add')") + @Log(title = "角色管理", businessType = BusinessType.INSERT) + @PostMapping + @ApiOperation("新增角色") + public AjaxResult add(@Validated @RequestBody SysRole role) { + role.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleNameUnique(role))) { + return AjaxResult.error("新增角色'" + role.getRoleName() + "'失败,角色名称已存在"); + } + role.setCreateBy(LoginTokenService.getUsername()); + return toAjax(roleService.insertRole(role)); + + } + + /** + * 修改保存角色 + */ + @ApiOperation("修改保存角色") + @PreAuthorize("@ss.hasPermi('system:role:edit')") + @Log(title = "角色管理", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@Validated @RequestBody SysRole role) { + role.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleNameUnique(role))) { + return AjaxResult.error("修改角色'" + role.getRoleName() + "'失败,角色名称已存在"); + } + // 检查是否修改了默认角色的名字 + roleService.checkDefaultRoleEditName(role); + role.setUpdateBy(LoginTokenService.getUsername()); + + if (roleService.updateRole(role) > 0) { + // 更新缓存用户权限 + LoginTokenService.refreshDataScope(); + return AjaxResult.success(); + } + return AjaxResult.error("修改角色'" + role.getRoleName() + "'失败,请联系管理员"); + } + + + @ApiOperation("修改保存数据权限") + @PreAuthorize("@ss.hasPermi('system:role:edit')") + @Log(title = "角色管理", businessType = BusinessType.UPDATE) + @PutMapping("/dataScope") + public AjaxResult dataScope(@RequestBody SysRole role) { + role.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + roleService.checkRoleAllowed(role); + return toAjax(roleService.authDataScope(role)); + } + + @ApiOperation("状态修改") + @PreAuthorize("@ss.hasPermi('system:role:edit')") + @Log(title = "角色管理", businessType = BusinessType.UPDATE) + @PutMapping("/changeStatus") + public AjaxResult changeStatus(@RequestBody SysRole role) { + roleService.checkRoleAllowed(role); + role.setUpdateBy(LoginTokenService.getUsername()); + return toAjax(roleService.updateRoleStatus(role)); + } + + + @ApiOperation("删除角色") + @PreAuthorize("@ss.hasPermi('system:role:remove')") + @Log(title = "角色管理", businessType = BusinessType.DELETE) + @DeleteMapping("/{roleIds}") + public AjaxResult remove(@PathVariable Long[] roleIds) { + String corpId = LoginTokenService.getLoginUser().getCorpId(); + return AjaxResult.success(roleService.deleteRoleByIds(corpId, roleIds)); + } + + /** + * 获取角色选择框列表 + */ + @ApiOperation("获取角色选择框列表") + @PreAuthorize("@ss.hasPermi('system:role:query')") + @GetMapping("/optionselect") + public AjaxResult> optionselect() { + return AjaxResult.success(roleService.selectRoleAll(LoginTokenService.getLoginUser().getCorpId())); + } +} diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/system/SysUserController.java b/easyink-admin/src/main/java/com/easyink/web/controller/system/SysUserController.java new file mode 100644 index 0000000..91e1822 --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/system/SysUserController.java @@ -0,0 +1,256 @@ +package com.easyink.web.controller.system; + +import cn.hutool.core.collection.CollectionUtil; +import com.easyink.common.annotation.Log; +import com.easyink.common.constant.UserConstants; +import com.easyink.common.core.controller.BaseController; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.core.domain.entity.SysRole; +import com.easyink.common.core.domain.entity.SysUser; +import com.easyink.common.core.domain.model.LoginUser; +import com.easyink.common.core.domain.wecom.WeUser; +import com.easyink.common.core.page.TableDataInfo; +import com.easyink.common.enums.BusinessType; +import com.easyink.common.mapper.SysUserMapper; +import com.easyink.common.service.ISysRoleService; +import com.easyink.common.service.ISysUserService; +import com.easyink.common.token.TokenService; +import com.easyink.common.utils.SecurityUtils; +import com.easyink.common.utils.ServletUtils; +import com.easyink.common.utils.StringUtils; +import com.easyink.common.utils.poi.ExcelUtil; +import com.easyink.wecom.login.util.LoginTokenService; +import com.easyink.wecom.mapper.WeUserMapper; +import com.easyink.wecom.service.WeUserService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import javax.validation.constraints.NotBlank; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 用户信息 + * + * @author admin + */ +@RestController +@RequestMapping("/system/user") +@Api(tags = "用户信息") +@Validated +public class SysUserController extends BaseController { + @Autowired + private ISysUserService userService; + + @Autowired + private ISysRoleService roleService; + + @Autowired + private TokenService tokenService; + + @Autowired + private WeUserService weUserService; + + @Autowired + private SysUserMapper sysUserMapper; + @Autowired + private WeUserMapper weUserMapper; + + /** + * 获取用户列表 + */ + @PreAuthorize("@ss.hasPermi('system:user:list')") + @GetMapping("/list") + @ApiOperation("获取用户列表") + public TableDataInfo list(SysUser user) { + startPage(); + + List list = userService.selectUserList(user); + return getDataTable(list); + } + + @Log(title = "用户管理", businessType = BusinessType.EXPORT) + @PreAuthorize("@ss.hasPermi('system:user:export')") + @GetMapping("/export") + @ApiOperation("导出数据") + public AjaxResult export(SysUser user) { + List list = userService.selectUserList(user); + ExcelUtil util = new ExcelUtil<>(SysUser.class); + return util.exportExcel(list, "用户数据"); + } + + @Log(title = "用户管理", businessType = BusinessType.IMPORT) + @PreAuthorize("@ss.hasPermi('system:user:import')") + @PostMapping("/importData") + @ApiOperation("导入数据") + public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception { + ExcelUtil util = new ExcelUtil<>(SysUser.class); + List userList = util.importExcel(file.getInputStream()); + LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest()); + String operName = loginUser.getUsername(); + String message = userService.importUser(userList, updateSupport, operName); + return AjaxResult.success(message); + } + + @GetMapping("/importTemplate") + @ApiOperation("导入模板") + public AjaxResult importTemplate() { + ExcelUtil util = new ExcelUtil<>(SysUser.class); + return util.importTemplateExcel("用户数据"); + } + + /** + * 根据用户编号获取详细信息 + */ + @ApiOperation("根据用户编号获取详细信息") + @PreAuthorize("@ss.hasPermi('system:user:query')") + @GetMapping(value = {"/", "/{userId}"}) + public AjaxResult getInfo(@PathVariable(value = "userId") Long userId) { + AjaxResult ajax = AjaxResult.success(); + List roles = roleService.selectRoleAll(LoginTokenService.getLoginUser().getCorpId()); + ajax.put("roles", SysUser.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList())); + if (StringUtils.isNotNull(userId)) { + ajax.put(AjaxResult.DATA_TAG, userService.selectUserById(userId)); + } + return ajax; + } + + /** + * 新增用户 + */ + @ApiOperation("新增用户") + @PreAuthorize("@ss.hasPermi('system:user:add')") + @Log(title = "用户管理", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@Validated @RequestBody SysUser user) { + if (UserConstants.NOT_UNIQUE.equals(userService.checkUserNameUnique(user.getUserName()))) { + return AjaxResult.error("新增用户'" + user.getUserName() + "'失败,登录账号已存在"); + } else if (UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(user))) { + return AjaxResult.error("新增用户'" + user.getUserName() + "'失败,手机号码已存在"); + } else if (UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user))) { + return AjaxResult.error("新增用户'" + user.getUserName() + "'失败,邮箱账号已存在"); + } + user.setCreateBy(LoginTokenService.getUsername()); + user.setPassword(SecurityUtils.encryptPassword(user.getPassword())); + return toAjax(userService.insertUser(user)); + } + + /** + * 修改用户 + */ + @PreAuthorize("@ss.hasPermi('system:user:edit')") + @Log(title = "用户管理", businessType = BusinessType.UPDATE) + @PutMapping + @ApiOperation("修改用户") + public AjaxResult edit(@Validated @RequestBody SysUser user) { + userService.checkUserAllowed(user); + if (UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(user))) { + return AjaxResult.error("修改用户'" + user.getUserName() + "'失败,手机号码已存在"); + } else if (UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user))) { + return AjaxResult.error("修改用户'" + user.getUserName() + "'失败,邮箱账号已存在"); + } + user.setUpdateBy(LoginTokenService.getUsername()); + user.setPassword(SecurityUtils.encryptPassword(user.getPassword())); + return toAjax(userService.updateUser(user)); + } + + /** + * 删除用户 + */ + @ApiOperation("删除用户") + @PreAuthorize("@ss.hasPermi('system:user:remove')") + @Log(title = "用户管理", businessType = BusinessType.DELETE) + @DeleteMapping("/{userIds}") + public AjaxResult remove(@PathVariable Long[] userIds) { + return toAjax(userService.deleteUserByIds(userIds)); + } + + /** + * 重置密码 + */ + @ApiOperation("重置密码") + @PreAuthorize("@ss.hasPermi('system:user:edit')") + @Log(title = "用户管理", businessType = BusinessType.UPDATE) + @PutMapping("/resetPwd") + public AjaxResult resetPwd(@RequestBody SysUser user) { + userService.checkUserAllowed(user); + user.setPassword(SecurityUtils.encryptPassword(user.getPassword())); + user.setUpdateBy(LoginTokenService.getUsername()); + return toAjax(userService.resetPwd(user)); + } + + /** + * 状态修改 + */ + @ApiOperation("状态修改") + @PreAuthorize("@ss.hasPermi('system:user:edit')") + @Log(title = "用户管理", businessType = BusinessType.UPDATE) + @PutMapping("/changeStatus") + public AjaxResult changeStatus(@RequestBody SysUser user) { + userService.checkUserAllowed(user); + user.setUpdateBy(LoginTokenService.getUsername()); + return toAjax(userService.updateUserStatus(user)); + } + + + @ApiOperation("查找当前登录用户") + @GetMapping("/findCurrentLoginUser") + public AjaxResult findCurrentLoginUser(HttpServletRequest request) { + String userId = ""; + LoginUser loginUser = tokenService.getLoginUser(request); + if (null != loginUser) { + SysUser user = loginUser.getUser(); + if (null != user) { + List weUsers = weUserService.selectWeUserList(WeUser.builder() + .mobile(user.getPhonenumber()) + .build()); + if (CollectionUtil.isNotEmpty(weUsers)) { + userId = weUsers.get(0).getUserId(); + + } + } + + } + return AjaxResult.success(userId); + } + + @ApiOperation(("修改当前用户的UI主题颜色")) + @GetMapping("/changeUiColor") + public AjaxResult changeUiColor(@ApiParam(value = "颜色(需要urlEncode后传入)") @NotBlank(message = "颜色不能为空") String color) { + try { + color = URLDecoder.decode(color,"utf-8"); + } catch (UnsupportedEncodingException e) { + return AjaxResult.error("请传入正确的颜色格式"); + } + LoginUser loginUser = LoginTokenService.getLoginUser(); + // 账密登录管理员更换主题颜色 + if (loginUser.isSuperAdmin()) { + sysUserMapper.updateUser( + SysUser.builder() + .userId(loginUser.getUser().getUserId()) + .uiColor(color) + .build() + ); + } else if (!loginUser.isSuperAdmin() && loginUser.getWeUser() != null) { + // 扫码用户更换主题颜色 + WeUser weUser = loginUser.getWeUser(); + weUser.setUiColor(color); + weUserMapper.updateWeUser(weUser); + } + // 刷新缓存 + LoginTokenService.refreshDataScope(); + return AjaxResult.success(); + } + + + +} diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/wechatopen/WechatOpenController.java b/easyink-admin/src/main/java/com/easyink/web/controller/wechatopen/WechatOpenController.java new file mode 100644 index 0000000..c5d7a18 --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/wechatopen/WechatOpenController.java @@ -0,0 +1,55 @@ +package com.easyink.web.controller.wechatopen; + +import com.easyink.common.core.controller.BaseController; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.core.domain.model.LoginUser; +import com.easyink.wecom.domain.entity.wechatopen.WeOpenConfig; +import com.easyink.wecom.domain.vo.AppIdVO; +import com.easyink.wecom.login.util.LoginTokenService; +import com.easyink.wecom.service.wechatopen.WechatOpenService; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import org.springframework.web.bind.annotation.*; + +/** + * 类名: 微信小程序/公众号相关接口 + * + * @author : silver_chariot + * @date : 2022/7/20 10:03 + **/ +@RestController +@RequestMapping("/wechatopen") +public class WechatOpenController extends BaseController { + + private final WechatOpenService wechatOpenService; + + public WechatOpenController(WechatOpenService wechatOpenService) { + this.wechatOpenService = wechatOpenService; + } + + @GetMapping("/appId") + @ApiOperation("获取公众号的appId") + public AjaxResult getAppId(String shortCode) { + return AjaxResult.success("操作成功", wechatOpenService.getAppId(shortCode)); + } + + @GetMapping("/openId") + @ApiOperation("获取公众号Openid") + public AjaxResult getOpenId(@ApiParam("用户的code") String code ,@ApiParam("corpId")String corpId) { + return AjaxResult.success("操作成功", wechatOpenService.getOpenId(code,corpId)); + } + + @GetMapping("/config") + @ApiOperation("获取企业的公众号配置") + public AjaxResult getConfig() { + LoginUser user = LoginTokenService.getLoginUser(); + return AjaxResult.success(wechatOpenService.getConfig(user.getCorpId())); + } + + @PostMapping("/config") + @ApiOperation("修改企业的公众号配置") + public AjaxResult updateConfig(@RequestBody WeOpenConfig config) { + wechatOpenService.updateConfig(config); + return AjaxResult.success(); + } +} diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/wecom/PageHomeController.java b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/PageHomeController.java new file mode 100644 index 0000000..9a8bfff --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/PageHomeController.java @@ -0,0 +1,54 @@ +package com.easyink.web.controller.wecom; + +import com.easyink.common.config.RuoYiConfig; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.wecom.domain.vo.ReleaseNotesVO; +import com.easyink.wecom.login.util.LoginTokenService; +import com.easyink.wecom.service.PageHomeService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 类名: PageHomeController + * + * @author: 1*+ + * @date: 2021-08-27 17:16 + */ +@Api(value = "PageHomeController", tags = "首页数据接口") +@RestController +@RequestMapping("/wecom/pagehome") +public class PageHomeController { + + + private final PageHomeService pageHomeService; + + private final RuoYiConfig ruoYiConfig; + + @Autowired + public PageHomeController(PageHomeService pageHomeService, RuoYiConfig ruoYiConfig) { + this.pageHomeService = pageHomeService; + this.ruoYiConfig = ruoYiConfig; + } + + /** + * 刷新统计数据缓存 + */ + @ApiOperation("刷新统计数据缓存") + @GetMapping("/reloadredis") + public AjaxResult reloadRedis() { + pageHomeService.reloadPageHome(LoginTokenService.getLoginUser().getCorpId()); + return AjaxResult.success(); + } + + @ApiOperation("获取当前版本") + @GetMapping("/getCurrVersion") + public AjaxResult getCurrVersion() { + ReleaseNotesVO notesVO = ReleaseNotesVO.builder().version(ruoYiConfig.getVersion()) + .notes(ruoYiConfig.getReleaseNotes()).build(); + return AjaxResult.success(notesVO); + } +} \ No newline at end of file diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/wecom/We3rdAppController.java b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/We3rdAppController.java new file mode 100644 index 0000000..9ebf846 --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/We3rdAppController.java @@ -0,0 +1,100 @@ +package com.easyink.web.controller.wecom; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.easyink.common.config.RuoYiConfig; +import com.easyink.common.constant.GenConstants; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.core.domain.entity.WeCorpAccount; +import com.easyink.wecom.domain.dto.WePermanentCodeDTO; +import com.easyink.wecom.domain.vo.*; +import com.easyink.wecom.login.util.LoginTokenService; +import com.easyink.wecom.service.We3rdAppService; +import com.easyink.wecom.service.WeAuthCorpInfoService; +import com.easyink.wecom.service.WeCorpAccountService; +import com.github.xiaoymin.knife4j.annotations.ApiSupport; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 类名: We3rdAppController + * + * @author: 1*+ + * @date: 2021-09-08 16:14 + */ +@RestController +@RequestMapping("/wecom/3rdapp") +@Slf4j +@ApiSupport(author = "1*+") +@Api(tags = "三方应用授权接口") +public class We3rdAppController { + + + private final We3rdAppService we3rdAppService; + private final WeAuthCorpInfoService weAuthCorpInfoService; + private final RuoYiConfig ruoYiConfig; + private final WeCorpAccountService weCorpAccountService; + + + @Autowired + public We3rdAppController(We3rdAppService we3rdAppService, WeAuthCorpInfoService weAuthCorpInfoService, RuoYiConfig ruoYiConfig, WeCorpAccountService weCorpAccountService) { + this.we3rdAppService = we3rdAppService; + this.weAuthCorpInfoService = weAuthCorpInfoService; + this.ruoYiConfig = ruoYiConfig; + this.weCorpAccountService = weCorpAccountService; + } + + @GetMapping("/getPreAuthCode") + @ApiOperation(value = "获取预授权码") + public AjaxResult getPreAuthCode() { + return AjaxResult.success(we3rdAppService.getPreAuthCode()); + } + + @GetMapping("/getPermanentCode") + @ApiOperation(value = "获取永久授权码") + public AjaxResult getPermanentCode(WePermanentCodeDTO wePermanentCodeDTO) { + we3rdAppService.handlePermanentCode(wePermanentCodeDTO.getAuthCode(), wePermanentCodeDTO.getSuiteId()); + return AjaxResult.success(); + } + + + @GetMapping("/getPreLoginParam") + @ApiOperation(value = "获取预登录参数") + public AjaxResult getPreLoginParam() { + return AjaxResult.success(we3rdAppService.getPreLoginParam()); + } + + + @GetMapping("/getServerType") + @ApiOperation(value = "获取当前服务器类型") + public AjaxResult getServerType() { + return AjaxResult.success(we3rdAppService.getServerType()); + } + + @GetMapping("/checkDkSuiteAuthStatus") + @ApiOperation(value = "检测代开发授权状态") + public AjaxResult checkDkSuiteAuthStatus() { + //授权未启用时 corpId是密文需要获得明文 + WeCorpAccount weCorpAccount = weCorpAccountService.getOne(new LambdaQueryWrapper().eq(WeCorpAccount::getExternalCorpId, LoginTokenService.getLoginUser().getCorpId()).last(GenConstants.LIMIT_1)); + String corpId = weCorpAccount == null ? LoginTokenService.getLoginUser().getCorpId() : weCorpAccount.getCorpId(); + SuiteAuthStatusVO result = SuiteAuthStatusVO.builder().authSuccess(weAuthCorpInfoService.corpAuthorized(corpId, ruoYiConfig.getProvider().getDkSuite().getDkId())) + .corpId(LoginTokenService.getLoginUser().getCorpId()).suiteId(ruoYiConfig.getProvider().getDkSuite().getDkId()).build(); + return AjaxResult.success(result); + } + + @GetMapping("/checkCorpId") + @ApiOperation(value = "检测企业id是否为代开发") + public AjaxResult checkCorpId() { + return AjaxResult.success(weAuthCorpInfoService.isDkCorp(LoginTokenService.getLoginUser().getCorpId())); + } + + @GetMapping("/getDkQrCode") + @ApiOperation(value = "获取待开发应用二维码") + public AjaxResult getDkQrCode(){ + return AjaxResult.success("操作成功", ruoYiConfig.getProvider().getDkSuite().getDkQrCode()); + } +} diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeAdminController.java b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeAdminController.java new file mode 100644 index 0000000..4e50fc7 --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeAdminController.java @@ -0,0 +1,88 @@ +package com.easyink.web.controller.wecom; + +import com.easyink.common.config.ThirdDefaultDomainConfig; +import com.easyink.common.core.controller.BaseController; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.wecom.domain.dto.AutoConfigDTO; +import com.easyink.wecom.domain.vo.WeAdminQrcodeVO; +import com.easyink.wecom.domain.vo.WeCheckQrcodeVO; +import com.easyink.wecom.login.util.LoginTokenService; +import com.easyink.wecom.service.WeAutoConfigService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; + +/** + * 类名: 企业微信后台接口 + * + * @author: 1*+ + * @date: 2021-08-06 16:53 + */ +@Api(value = "WeAdminController", tags = "企业微信后台接口") +@RestController +@RequestMapping("/wecom/admin") +public class WeAdminController extends BaseController { + + + private final WeAutoConfigService weAutoConfigService; + + @Autowired + public WeAdminController(WeAutoConfigService weAutoConfigService) { + this.weAutoConfigService = weAutoConfigService; + } + + @ApiOperation("获取登录企业微信后台的二维码") + @GetMapping("/getAdminLoginQrcode") + public AjaxResult getAdminLoginQrcode() { + WeAdminQrcodeVO weAdminQrcodeVO = weAutoConfigService.getAdminQrcode(); + return AjaxResult.success(weAdminQrcodeVO); + } + + @ApiOperation("检测登录企业微信后台的二维码") + @GetMapping("/checkAdminLoginQrcode") + public AjaxResult checkAdminLoginQrcode(@ApiParam("二维码Key") @RequestParam("qrcodeKey") String qrcodeKey, @ApiParam("二维码状态") @RequestParam("status") String status) { + WeCheckQrcodeVO weCheckQrcodeVO = weAutoConfigService.check(qrcodeKey, status, LoginTokenService.getLoginUser()); + return AjaxResult.success(weCheckQrcodeVO); + } + + /** + * 启动自动配置 + * + * @return + */ + @ApiOperation("启动自动配置") + @PostMapping("/autoConfig") + public AjaxResult autoConfig(@Valid @RequestBody AutoConfigDTO autoConfigDTO) { + weAutoConfigService.autoConfig(autoConfigDTO, LoginTokenService.getLoginUser()); + //主要是为了补偿admin帐号首次配置内部应用时,原本是没有corpid + LoginTokenService.refreshDataScope(); + return AjaxResult.success(); + } + + @ApiOperation("获取默认应用域名配置") + @GetMapping("/getDefaultDomainConfig") + public AjaxResult getDefaultDomainConfig() { + return AjaxResult.success(weAutoConfigService.getThirdDefaultDomainConfig()); + } + + @ApiOperation("扫码登录企微后台验证手机短信验证码") + @GetMapping("/confirmMobileCaptcha") + public AjaxResult confirmMobileCaptcha(@ApiParam(value = "短信验证码") String captcha, @ApiParam(value = "短信验证需要的tlKey") String tlKey, + @ApiParam(value = "qrKey由获取二维码接口返回") String qrcodeKey) { + weAutoConfigService.confirmMobileCaptcha(captcha, tlKey, qrcodeKey); + return AjaxResult.success(); + } + + @ApiOperation("重新发送手机验证码") + @GetMapping("/sendCaptcha") + public AjaxResult sendCaptcha(@ApiParam(value = "短信验证需要的tlKey") String tlKey, @ApiParam(value = "qrcodeKey") String qrcodeKey) { + weAutoConfigService.sendCaptcha(tlKey, qrcodeKey); + return AjaxResult.success(); + } + + +} diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeAppController.java b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeAppController.java new file mode 100644 index 0000000..ebf0007 --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeAppController.java @@ -0,0 +1,50 @@ +package com.easyink.web.controller.wecom; + +import com.easyink.common.core.controller.BaseController; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.wecom.domain.WeApp; +import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +/** + * 类名: WeAppController + * + * @author: 1*+ + * @date: 2021-08-27 17:19 + */ +@Api(value = "WeAppController", tags = "企业微信应用配置接口", hidden = true) +@RestController +@RequestMapping("/wecom/weapp") +public class WeAppController extends BaseController { + + + /** + * 应用列表 + * + * @return 应用列表 + */ + @ApiOperation("获取应用列表") + @GetMapping("/list") + public AjaxResult list() { + return AjaxResult.success(); + } + + @ApiOperation("添加应用") + @ApiOperationSupport(ignoreParameters = {"id"}) + @PostMapping("/addWeapp") + @Deprecated + public AjaxResult addWeApp(@RequestBody WeApp weApp) { + return AjaxResult.success(); + } + + @ApiOperation("更新应用") + @PutMapping("/updateWeApp") + @Deprecated + public AjaxResult updateWeApp(@RequestBody WeApp weApp) { + return AjaxResult.success(); + } + + +} diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeApplicationManagerController.java b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeApplicationManagerController.java new file mode 100644 index 0000000..2c9b808 --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeApplicationManagerController.java @@ -0,0 +1,103 @@ +package com.easyink.web.controller.wecom; + +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.wecom.domain.dto.BaseApplicationDTO; +import com.easyink.wecom.domain.dto.QueryApplicationDTO; +import com.easyink.wecom.domain.dto.SetApplicationUseScopeDTO; +import com.easyink.wecom.domain.dto.UpdateApplicationDTO; +import com.easyink.wecom.domain.vo.ApplicationIntroductionVO; +import com.easyink.wecom.domain.vo.MyApplicationIntroductionVO; +import com.easyink.wecom.domain.vo.WeApplicationDetailVO; +import com.easyink.wecom.login.util.LoginTokenService; +import com.easyink.wecom.service.WeApplicationCenterService; +import com.easyink.wecom.service.WeMyApplicationService; +import com.easyink.wecom.service.WeMyApplicationUseScopeService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * 类名: WeApplicationManagerController + * + * @author: 1*+ + * @date: 2021-10-15 17:17 + */ +@Api(value = "WeApplicationManagerController", tags = "应用管理接口") +@RestController +@RequestMapping("/wecom/application") +public class WeApplicationManagerController { + + private final WeApplicationCenterService weApplicationCenterService; + private final WeMyApplicationService weMyApplicationService; + private final WeMyApplicationUseScopeService weMyApplicationUseScopeService; + + @Autowired + public WeApplicationManagerController(WeApplicationCenterService weApplicationCenterService, WeMyApplicationService weMyApplicationService, WeMyApplicationUseScopeService weMyApplicationUseScopeService) { + this.weApplicationCenterService = weApplicationCenterService; + this.weMyApplicationService = weMyApplicationService; + this.weMyApplicationUseScopeService = weMyApplicationUseScopeService; + } + + + @ApiOperation("获取应用中心列表") + @GetMapping("/getApplicationList") + public AjaxResult> getApplicationList(@ApiParam @Valid QueryApplicationDTO queryApplicationDTO) { + return AjaxResult.success(weApplicationCenterService.listOfEnableApplication(queryApplicationDTO.getType(), queryApplicationDTO.getName())); + } + + + @ApiOperation("获取应用中心应用详情") + @GetMapping("/getApplicationDetail") + public AjaxResult getApplicationList(BaseApplicationDTO baseApplicationDTO) { + return AjaxResult.success(weApplicationCenterService.getApplicationDetail(baseApplicationDTO.getAppid(), LoginTokenService.getLoginUser().getCorpId())); + } + + @PreAuthorize("@ss.hasPermi('wecom:application:install')") + @ApiOperation("安装应用") + @PostMapping("/installApplication") + public AjaxResult installApplication(@RequestBody BaseApplicationDTO baseApplicationDTO) { + weMyApplicationService.installApplication(LoginTokenService.getLoginUser().getCorpId(), baseApplicationDTO.getAppid()); + return AjaxResult.success(); + } + + @ApiOperation("获取我的应用列表") + @GetMapping("/getMyApplicationList") + public AjaxResult> getMyApplicationList() { + return AjaxResult.success(weMyApplicationService.listOfMyApplication(LoginTokenService.getLoginUser().getCorpId())); + } + + @ApiOperation("获取我的应用列表-侧边栏") + @GetMapping("/getMyApplicationList2Sidebar") + public AjaxResult> getMyApplicationList2Sidebar() { + return AjaxResult.success(weMyApplicationService.listOfMyApplication2Sidebar(LoginTokenService.getLoginUser().getCorpId())); + } + + @ApiOperation("移除我的应用") + @PostMapping("/deleteMyApplication") + public AjaxResult> deleteMyApplication(@RequestBody BaseApplicationDTO baseApplicationDTO) { + weMyApplicationService.deleteMyApplication(LoginTokenService.getLoginUser().getCorpId(), baseApplicationDTO.getAppid()); + return AjaxResult.success(); + } + + @PreAuthorize("@ss.hasPermi('wecom:myApplication:update')") + @ApiOperation("更新我的应用配置") + @PostMapping("/updateMyApplicationConfig") + public AjaxResult> updateMyApplicationConfig(@RequestBody UpdateApplicationDTO updateApplicationDTO) { + weMyApplicationService.updateMyApplicationConfig(LoginTokenService.getLoginUser().getCorpId(), updateApplicationDTO.getAppid(), updateApplicationDTO.getConfig()); + return AjaxResult.success(); + } + + @ApiOperation("我的应用使用范围") + @PostMapping("/setMyApplicationUseScope") + public AjaxResult setMyApplicationUseScope(@Valid @RequestBody SetApplicationUseScopeDTO setApplicationUseScopeDTO) { + weMyApplicationUseScopeService.setMyApplicationUseScope(LoginTokenService.getLoginUser().getCorpId(), setApplicationUseScopeDTO.getAppid(), setApplicationUseScopeDTO.getUseScopeList()); + return AjaxResult.success(); + } + +} diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeCallBackController.java b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeCallBackController.java new file mode 100644 index 0000000..3bee3c0 --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeCallBackController.java @@ -0,0 +1,187 @@ +package com.easyink.web.controller.wecom; + +import com.alibaba.fastjson.JSON; +import com.easyink.common.config.RuoYiConfig; +import com.easyink.common.config.WeCrypt; +import com.easyink.common.enums.ResultTip; +import com.easyink.common.exception.CustomException; +import com.easyink.common.utils.Threads; +import com.easyink.common.utils.wecom.WxCryptUtil; +import com.easyink.wecom.domain.vo.WxCpXmlMessageVO; +import com.easyink.wecom.factory.WeCallBackEventFactory; +import com.easyink.wecom.factory.WeEventHandle; +import com.thoughtworks.xstream.XStream; +import com.thoughtworks.xstream.security.AnyTypePermission; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import me.chanjar.weixin.common.util.xml.XStreamInitializer; +import me.chanjar.weixin.cp.bean.WxCpTpXmlPackage; +import me.chanjar.weixin.cp.bean.WxCpXmlMessage; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.exception.ExceptionUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletRequest; + +/** + * 类名: 企业微信回调接口 + * + * @author: 1*+ + * @date: 2021-08-06 16:52 + */ +@Api(value = "WeCallBackController", tags = "企业微信回调接口") +@Slf4j +@RestController +@RequestMapping("/wecom/callback") +public class WeCallBackController { + private final WeEventHandle weEventHandle; + private final RuoYiConfig ruoYiConfig; + + @Autowired + public WeCallBackController(WeEventHandle weEventHandle, RuoYiConfig ruoYiConfig) { + this.weEventHandle = weEventHandle; + this.ruoYiConfig = ruoYiConfig; + } + + /** + * 企业微信官方回调入口 请求接收业务数据 + * (5秒内需要响应给企业微信,否则企业微信端会进行重试推送) + * + * @param msg bodymsg + * @param signature 企业微信加密签名 + * @param timestamp 时间戳 + * @param nonce 随机数。与timestamp结合使用,用于防止请求重放攻击。 + * @return 当接收成功后,http头部返回200表示接收ok,其他错误码企业微信后台会一律当做失败并发起重试 + */ + @ApiOperation("企业微信官方回调入口") + @PostMapping(value = "/recive") + public String receive(@RequestBody String msg, @RequestParam(name = "msg_signature") String signature, + String timestamp, String nonce) { + try { + WeCrypt weCrypt = ruoYiConfig.getSelfBuild(); + WxCryptUtil wxCryptUtil = new WxCryptUtil(weCrypt.getToken(), weCrypt.getEncodingAesKey()); + + String decrypt = wxCryptUtil.decrypt(signature, timestamp, nonce, msg); + WxCpXmlMessageVO wxCpXmlMessage = strXmlToBean(decrypt); + log.info("企微回调通知接口 wxCpXmlMessage:{}", JSON.toJSONString(wxCpXmlMessage)); + WeCallBackEventFactory factory = weEventHandle.factory(wxCpXmlMessage.getEvent()); + if (factory != null) { + Threads.SINGLE_THREAD_POOL.submit(() -> factory.eventHandle(wxCpXmlMessage)); + } else { + throw new CustomException(ResultTip.TIP_STRATEGY_IS_EMPTY); + } + } catch (Exception e) { + log.error("企微回调异常:{}", ExceptionUtils.getStackTrace(e)); + } + return "success"; + } + + /** + * 回调配置校验接口 请求验证URL有效性 + * + * @param request request + * @return 在1秒内响应GET请求,响应内容为上一步得到的明文消息内容(不能加引号,不能带bom头,不能带换行符) + */ + @ApiOperation("回调配置校验接口") + @GetMapping(value = "/recive") + public String recive(HttpServletRequest request) { + log.info("回调配置校验接口开始"); + // 微信加密签名 + String sVerifyMsgSig = request.getParameter("msg_signature"); + // 时间戳 + String sVerifyTimeStamp = request.getParameter("timestamp"); + // 随机数 + String sVerifyNonce = request.getParameter("nonce"); + // 随机字符串 + String sVerifyEchoStr = request.getParameter("echostr"); + + try { + WeCrypt weCrypt = ruoYiConfig.getSelfBuild(); + WxCryptUtil wxCryptUtil = new WxCryptUtil(weCrypt.getToken(), weCrypt.getEncodingAesKey()); + return wxCryptUtil.verifyURL(sVerifyMsgSig, sVerifyTimeStamp, sVerifyNonce, sVerifyEchoStr); + } catch (Exception e) { + log.error("回调配置校验接口:{}", ExceptionUtils.getStackTrace(e)); + return "error"; + } + } + + /** + * 企业微信官方回调入口 请求接收业务数据 + * (5秒内需要响应给企业微信,否则企业微信端会进行重试推送) + * + * @param msg bodymsg + * @param signature 企业微信加密签名 + * @param timestamp 时间戳 + * @param nonce 随机数。与timestamp结合使用,用于防止请求重放攻击。 + * @return 当接收成功后,http头部返回200表示接收ok,其他错误码企业微信后台会一律当做失败并发起重试 + */ + @ApiOperation("企业微信官方回调入口") + @PostMapping(value = "/recive3rdapp") + public String receive3rdapp(@RequestBody String msg, @RequestParam(name = "msg_signature") String signature, + String timestamp, String nonce) { + try { + WxCpTpXmlPackage wxCpTpXmlPackage = WxCpTpXmlPackage.fromXml(msg); + WeCrypt weCrypt = ruoYiConfig.getProvider().getCryptById(wxCpTpXmlPackage.getToUserName()); + WxCryptUtil wxCryptUtil = new WxCryptUtil(weCrypt.getToken(), weCrypt.getEncodingAesKey()); + + String decrypt = wxCryptUtil.decrypt(signature, timestamp, nonce, msg); + log.info("企微三方应用回调通知接口,转换前的xml :{}", decrypt); + WxCpXmlMessageVO wxCpXmlMessage = strXmlToBean(decrypt); + log.info("企微三方应用回调通知接口 wxCpXmlMessage:{}", JSON.toJSONString(wxCpXmlMessage)); + String event = StringUtils.isNotBlank(wxCpXmlMessage.getInfoType()) ? wxCpXmlMessage.getInfoType() : wxCpXmlMessage.getEvent(); + WeCallBackEventFactory factory = weEventHandle.factory(event); + if (factory != null) { + Threads.SINGLE_THREAD_POOL.submit(() -> factory.eventHandle(wxCpXmlMessage)); + } else { + throw new CustomException(ResultTip.TIP_STRATEGY_IS_EMPTY); + } + } catch (Exception e) { + log.error("企微三方应用回调通知接口异常:{}", ExceptionUtils.getStackTrace(e)); + } + return "success"; + } + + /** + * (三方应用)回调配置校验接口 请求验证URL有效性 + * + * @param msgSignature 企业微信加密签名,msg_signature结合了企业填写的token、请求中的timestamp、nonce参数、加密的消息体 + * @param timestamp 时间戳 + * @param nonce 随机数 + * @param echostr 加密的字符串。需要解密得到消息内容明文,解密后有random、msg_len、msg、receiveid四个字段,其中msg即为消息内容明文 + * @return 在1秒内响应GET请求,响应内容为上一步得到的明文消息内容(不能加引号,不能带bom头,不能带换行符) + */ + @ApiOperation("三方应用回调配置校验接口") + @GetMapping(value = "/recive3rdapp") + public String check3rdapp(@RequestParam("msg_signature") String msgSignature, + @RequestParam("timestamp") String timestamp, + @RequestParam("nonce") String nonce, + @RequestParam("echostr") String echostr) { + log.info("三方应用回调配置校验接口"); + try { + WeCrypt weCrypt = ruoYiConfig.getProvider().getCryptById(""); + WxCryptUtil wxCryptUtil = new WxCryptUtil(weCrypt.getToken(), weCrypt.getEncodingAesKey()); + return wxCryptUtil.verifyURL(msgSignature, timestamp, nonce, echostr); + } catch (Exception e) { + log.error("回调配置校验接口:{}", ExceptionUtils.getStackTrace(e)); + return "error"; + } + } + + + private WxCpXmlMessageVO strXmlToBean(String xmlStr) { + XStream xstream = XStreamInitializer.getInstance(); + xstream.addPermission(AnyTypePermission.ANY); + xstream.processAnnotations(WxCpXmlMessage.class); + xstream.processAnnotations(WxCpXmlMessageVO.class); + xstream.processAnnotations(WxCpXmlMessageVO.ScanCodeInfo.class); + xstream.processAnnotations(WxCpXmlMessageVO.SendPicsInfo.class); + xstream.processAnnotations(WxCpXmlMessageVO.SendPicsInfo.Item.class); + xstream.processAnnotations(WxCpXmlMessageVO.SendLocationInfo.class); + xstream.processAnnotations(WxCpXmlMessageVO.BatchJob.class); + return (WxCpXmlMessageVO) xstream.fromXML(xmlStr); + } + + +} diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeCategoryController.java b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeCategoryController.java new file mode 100644 index 0000000..65bf579 --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeCategoryController.java @@ -0,0 +1,116 @@ +package com.easyink.web.controller.wecom; + +import com.easyink.common.annotation.Log; +import com.easyink.common.core.controller.BaseController; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.enums.BusinessType; +import com.easyink.wecom.domain.WeCategory; +import com.easyink.wecom.domain.dto.WeCategorySidebarSwitchDTO; +import com.easyink.wecom.domain.vo.WeCategoryBaseInfoVO; +import com.easyink.wecom.login.util.LoginTokenService; +import com.easyink.wecom.service.WeCategoryService; +import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 类名: WeCategoryController + * + * @author: 1*+ + * @date: 2021-08-27 11:08 + */ +@RestController +@RequestMapping("/wecom/category") +@Api(value = "WeCategoryController", tags = "企业微信素材分类接口") +public class WeCategoryController extends BaseController { + + @Autowired + private WeCategoryService weCategoryService; + + + @PreAuthorize("@ss.hasPermi('wechat:category:list')") + @GetMapping("/list") + @ApiOperation("类目树") + public AjaxResult list(@ApiParam(value = "分类类型", allowableValues = "range[0, 5]") @RequestParam("mediaType") Integer mediaType) { + String corpId = LoginTokenService.getLoginUser().getCorpId(); + return AjaxResult.success(weCategoryService.findWeCategoryByMediaType(corpId, mediaType)); + } + + /** + * 通过id查询类目详细信息 + */ +// @PreAuthorize("@ss.hasPermi('wechat:category:query')") + @GetMapping(value = "/{id}") + @ApiOperation("通过id查询类目详细信息") + public AjaxResult getInfo(@ApiParam("类目ID") @PathVariable("id") Long id) { + return AjaxResult.success(weCategoryService.getById(id)); + } + + /** + * 添加类目 + */ +// @PreAuthorize("@ss.hasPermi('wechat:category:add')") + @Log(title = "添加类目", businessType = BusinessType.INSERT) + @PostMapping + @ApiOperationSupport(ignoreParameters = {"id"}) + @ApiOperation("添加类目") + public AjaxResult add(@RequestBody WeCategory category) { + category.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + weCategoryService.insertWeCategory(category); + return AjaxResult.success(); + } + + /** + * 更新目录 + */ +// @PreAuthorize("@ss.hasPermi('wechat:category:edit')") + @Log(title = "更新目录", businessType = BusinessType.UPDATE) + @PutMapping + @ApiOperation("更新目录") + public AjaxResult edit(@RequestBody WeCategory category) { + category.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + weCategoryService.updateWeCategory(category); + return AjaxResult.success(); + } + + + /** + * 删除类目 + */ +// @PreAuthorize("@ss.hasPermi('wechat:category:remove')") + @Log(title = "删除类目", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + @ApiOperation("删除类目") + public AjaxResult remove(@PathVariable Long[] ids) { + String corpId = LoginTokenService.getLoginUser().getCorpId(); + weCategoryService.deleteWeCategoryById(corpId, ids); + return AjaxResult.success(); + } + + @PreAuthorize("@ss.hasPermi('wechat:material:sidebar')") + @Log(title = "侧边栏开关", businessType = BusinessType.DELETE) + @PutMapping("/sidebarSwitch") + @ApiOperation("侧边栏开关") + public AjaxResult sidebarSwitch(@Validated @RequestBody WeCategorySidebarSwitchDTO sidebarSwitchDTO) { + String corpId = LoginTokenService.getLoginUser().getCorpId(); + sidebarSwitchDTO.setCorpId(corpId); + weCategoryService.sidebarSwitch(sidebarSwitchDTO); + return AjaxResult.success(); + } + + + @GetMapping("/getList") + @ApiOperation("获取所有类型列表") + public AjaxResult getList() { + String corpId = LoginTokenService.getLoginUser().getCorpId(); + List showWeCategory = weCategoryService.findListByCorpId(corpId); + return AjaxResult.success(showWeCategory); + } +} diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeChatCollectionController.java b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeChatCollectionController.java new file mode 100644 index 0000000..c02d58b --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeChatCollectionController.java @@ -0,0 +1,61 @@ +package com.easyink.web.controller.wecom; + +import com.easyink.common.annotation.Log; +import com.easyink.common.core.controller.BaseController; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.core.page.TableDataInfo; +import com.easyink.common.enums.BusinessType; +import com.easyink.wecom.domain.dto.WeChatCollectionDTO; +import com.easyink.wecom.domain.vo.FindCollectionsVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import org.springframework.web.bind.annotation.*; + +import java.util.ArrayList; + +/** + * 类名: WeChatCollectionController + * + * @author: 1*+ + * @date: 2021-08-27 17:43 + */ +@Api(value = "WeChatCollectionController", tags = "聊天侧边栏-素材收藏接口") +@RequestMapping(value = "/wecom/chat/collection") +@RestController +@Deprecated +public class WeChatCollectionController extends BaseController { + /** + * 添加收藏 + */ + //@PreAuthorize("@ss.hasPermi('chat:collection:add')") + @Log(title = "添加收藏", businessType = BusinessType.INSERT) + @PostMapping("addCollection") + @ApiOperation("添加收藏") + public AjaxResult addCollection(@RequestBody WeChatCollectionDTO chatCollectionDto) { + return AjaxResult.success(); + } + + + /** + * 取消收藏 + */ + // @PreAuthorize("@ss.hasPermi('chat:collection:delete')") + // @Log(title = "取消收藏", businessType = BusinessType.UPDATE) + @PostMapping(value = "cancleCollection") + @ApiOperation("取消收藏") + public AjaxResult cancleCollection(@RequestBody WeChatCollectionDTO chatCollectionDto) { + return AjaxResult.success(); + } + + /** + * 收藏列表 + */ + // @PreAuthorize("@ss.hasPermi('chat:collection:list')") + @GetMapping("/list") + @ApiOperation(value = "收藏列表") + public TableDataInfo list(@ApiParam("员工ID") @RequestParam(value = "userId") String userId, @ApiParam(value = "关键词", required = false) @RequestParam(value = "keyword") String keyword) { + return getDataTable(new ArrayList<>()); + } + +} diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeChatContactMappingController.java b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeChatContactMappingController.java new file mode 100644 index 0000000..9354486 --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeChatContactMappingController.java @@ -0,0 +1,125 @@ +package com.easyink.web.controller.wecom; + +import com.easyink.common.annotation.Log; +import com.easyink.common.core.controller.BaseController; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.core.page.TableDataInfo; +import com.easyink.common.enums.BusinessType; +import com.easyink.common.utils.poi.ExcelUtil; +import com.easyink.wecom.domain.WeChatContactMapping; +import com.easyink.wecom.domain.WeCustomer; +import com.easyink.wecom.login.util.LoginTokenService; +import com.easyink.wecom.service.WeChatContactMappingService; +import com.github.pagehelper.PageInfo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.ArrayList; +import java.util.List; + +/** + * 聊天关系映射Controller + * + * @author admin + * @date 2020-12-27 + */ +@Api(tags = "聊天关系映射Controller") +@RestController +@RequestMapping("/chat/mapping") +public class WeChatContactMappingController extends BaseController { + @Autowired + private WeChatContactMappingService weChatContactMappingService; + + /** + * 查询聊天关系映射列表 + */ +// @PreAuthorize("@ss.hasPermi('chat:mapping:list')") + @ApiOperation(value = "查询聊天关系映射列表", httpMethod = "GET") + @GetMapping("/list") + public TableDataInfo list(WeChatContactMapping weChatContactMapping) { + startPage(); + String corpId = LoginTokenService.getLoginUser().getCorpId(); + if (StringUtils.isBlank(corpId)) { + return getDataTable(new ArrayList<>()); + } + weChatContactMapping.setCorpId(corpId); + List list = weChatContactMappingService.selectWeChatContactMappingList(weChatContactMapping); + return getDataTable(list); + } + + /** + * 按客户查询关系映射列表 + */ +// @PreAuthorize("@ss.hasPermi('chat:mapping:listByCustomer')") + @Deprecated + @ApiOperation(value = "按客户查询关系映射列表", httpMethod = "GET") + @GetMapping("/listByCustomer") + public TableDataInfo> listByCustomer() { + return getDataTable(new ArrayList<>()); + } + + /** + * 导出聊天关系映射列表 + */ +// @PreAuthorize("@ss.hasPermi('chat:mapping:export')") + @Deprecated + @Log(title = "聊天关系映射", businessType = BusinessType.EXPORT) + @GetMapping("/export") + @ApiOperation("导出聊天关系映射列表") + public AjaxResult export(WeChatContactMapping weChatContactMapping) { + weChatContactMapping.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + List list = weChatContactMappingService.selectWeChatContactMappingList(weChatContactMapping); + ExcelUtil util = new ExcelUtil<>(WeChatContactMapping.class); + return util.exportExcel(list, "mapping"); + } + + /** + * 获取聊天关系映射详细信息 + */ +// @PreAuthorize("@ss.hasPermi('chat:mapping:query')") + @Deprecated + @GetMapping(value = "/{id}") + @ApiOperation("获取聊天关系映射详细信息") + public AjaxResult getInfo(@PathVariable("id") Long id) { + return AjaxResult.success(weChatContactMappingService.selectWeChatContactMappingById(id)); + } + + /** + * 新增聊天关系映射 + */ +// @PreAuthorize("@ss.hasPermi('chat:mapping:add')") + @Deprecated + @Log(title = "聊天关系映射", businessType = BusinessType.INSERT) + @PostMapping + @ApiOperation("新增聊天关系映射") + public AjaxResult add(@RequestBody WeChatContactMapping weChatContactMapping) { + return toAjax(weChatContactMappingService.insertWeChatContactMapping(weChatContactMapping)); + } + + /** + * 修改聊天关系映射 + */ +// @PreAuthorize("@ss.hasPermi('chat:mapping:edit')") + @Deprecated + @Log(title = "聊天关系映射", businessType = BusinessType.UPDATE) + @PutMapping + @ApiOperation("修改聊天关系映射") + public AjaxResult edit(@RequestBody WeChatContactMapping weChatContactMapping) { + return toAjax(weChatContactMappingService.updateWeChatContactMapping(weChatContactMapping)); + } + + /** + * 删除聊天关系映射 + */ +// @PreAuthorize("@ss.hasPermi('chat:mapping:remove')") + @Deprecated + @Log(title = "聊天关系映射", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + @ApiOperation("删除聊天关系映射") + public AjaxResult remove(@PathVariable Long[] ids) { + return toAjax(weChatContactMappingService.deleteWeChatContactMappingByIds(ids)); + } +} diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeChatSideController.java b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeChatSideController.java new file mode 100644 index 0000000..4597e0f --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeChatSideController.java @@ -0,0 +1,114 @@ +package com.easyink.web.controller.wecom; + +import com.easyink.common.constant.WeConstans; +import com.easyink.common.core.controller.BaseController; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.core.domain.entity.WeCorpAccount; +import com.easyink.common.core.domain.model.LoginResult; +import com.easyink.common.core.page.TableDataInfo; +import com.easyink.common.enums.ResultTip; +import com.easyink.common.exception.CustomException; +import com.easyink.wecom.domain.dto.FindWeMaterialDTO; +import com.easyink.wecom.domain.vo.WeCategoryBaseInfoVO; +import com.easyink.wecom.domain.vo.WeCorpInfoVO; +import com.easyink.wecom.domain.vo.WeMaterialVO; +import com.easyink.wecom.domain.vo.WeUserInfoVO; +import com.easyink.wecom.login.service.SysLoginService; +import com.easyink.wecom.login.util.LoginTokenService; +import com.easyink.wecom.service.WeCategoryService; +import com.easyink.wecom.service.WeCorpAccountService; +import com.easyink.wecom.service.WeMaterialService; +import com.easyink.wecom.service.WeUserService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * 聊天工具侧边栏 + * + * @author admin + */ +@RequestMapping(value = "/wecom/chat/side") +@RestController +@Api(tags = "聊天工具侧边栏") +public class WeChatSideController extends BaseController { + + private final WeCorpAccountService weCorpAccountService; + private final SysLoginService sysLoginService; + private final WeUserService weUserService; + private final WeCategoryService weCategoryService; + private final WeMaterialService weMaterialService; + + + @Autowired + public WeChatSideController(WeCorpAccountService weCorpAccountService, SysLoginService sysLoginService, WeUserService weUserService, WeCategoryService weCategoryService, WeMaterialService weMaterialService) { + this.weCorpAccountService = weCorpAccountService; + this.sysLoginService = sysLoginService; + this.weUserService = weUserService; + this.weCategoryService = weCategoryService; + this.weMaterialService = weMaterialService; + } + + /** + * 获取当前启用配置 + * update by Society my sister Li 增加code、corpId传参,用于确认成员信息,增加返回token,便于后续侧边栏接口直接获取corpId + * + * @return AjaxResult + */ + @GetMapping("/getCorpInfo") + @ApiOperation("获取当前启用配置") + public AjaxResult getCorpInfo(@ApiParam("code") @RequestParam(value = "code") String code, @ApiParam("corpId") @RequestParam(value = "corpId") String corpId) { + if (StringUtils.isBlank(corpId) || StringUtils.isBlank(code)) { + throw new CustomException(ResultTip.TIP_GENERAL_BAD_REQUEST); + } + WeCorpAccount validWeCorpAccount = weCorpAccountService.findValidWeCorpAccount(corpId); + if (validWeCorpAccount == null) { + throw new CustomException(ResultTip.TIP_NOT_CORP_CONFIG); + } + WeCorpInfoVO weCorpInfoVO = new WeCorpInfoVO(); + BeanUtils.copyProperties(validWeCorpAccount, weCorpInfoVO); + if (StringUtils.isBlank(weCorpInfoVO.getCorpId())) { + throw new CustomException(ResultTip.TIP_NOT_CORP_CONFIG); + } + WeUserInfoVO userInfo = weUserService.getUserInfo(code, validWeCorpAccount.getAgentId(), validWeCorpAccount.getCorpId()); + LoginResult loginResult = sysLoginService.loginByUserId(userInfo.getUserId(), validWeCorpAccount.getCorpId(), validWeCorpAccount, true, false); + weCorpInfoVO.setToken(loginResult.getToken()); + return AjaxResult.success(weCorpInfoVO); + } + + + /** + * 群发侧边栏列表 + * updateBy Society my sister Li 前端传参token后,可自行获取corpId + */ + @GetMapping("/h5List") + @ApiOperation("侧边栏素材类型列表") + public TableDataInfo h5List() { + startPage(); + String corpId = LoginTokenService.getLoginUser().getCorpId(); + List showWeCategory = weCategoryService.findShowWeCategory(corpId); + return getDataTable(showWeCategory); + } + + @GetMapping("/h5materialList") + @ApiOperation("侧边栏素材类型列表") + public TableDataInfo materialList(@Validated FindWeMaterialDTO findWeMaterialDTO) { + startPage(); + String corpId = LoginTokenService.getLoginUser().getCorpId(); + findWeMaterialDTO.setCorpId(corpId); + findWeMaterialDTO.setShowMaterial(WeConstans.DEFAULT_WE_MATERIAL_USING); + findWeMaterialDTO.setIsExpire(WeConstans.MATERIAL_UN_EXPIRE); + List weMaterials = weMaterialService.findWeMaterials(findWeMaterialDTO); + return getDataTable(weMaterials); + } +} diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeCommunityGroupSopController.java b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeCommunityGroupSopController.java new file mode 100644 index 0000000..d7b937f --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeCommunityGroupSopController.java @@ -0,0 +1,99 @@ +package com.easyink.web.controller.wecom; + +import com.easyink.common.core.controller.BaseController; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.core.page.TableDataInfo; +import com.easyink.wecom.domain.dto.WeGroupSopDTO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.ArrayList; + +/** + * 社区运营 - 群sop controller + */ +@Api(tags = "新客自动拉群 Controller") +@RestController +@RequestMapping(value = "/wecom/communityGroupSop") +@Deprecated +public class WeCommunityGroupSopController extends BaseController { + + /** + * 通过过滤条件获取群sop列表 + * + * @param ruleName 规则名称 + * @param createBy 创建者 + * @param beginTime 创建区间 - 开始时间 + * @param endTime 创建区间 - 结束时间 + * @return 群sop规则列表 + */ + @ApiOperation(value = "通过过滤条件获取群sop列表", httpMethod = "GET") +// @PreAuthorize("@ss.hasPermi('wecom:communityGroupSop:list')") + @GetMapping(path = "/list") + @Deprecated + public TableDataInfo getSopList( + @RequestParam(value = "ruleName") String ruleName, + @RequestParam(value = "createBy") String createBy, + @RequestParam(value = "beginTime") String beginTime, + @RequestParam(value = "endTime") String endTime + ) { + return getDataTable(new ArrayList<>()); + } + + /** + * 新增SOP规则 + * + * @param groupSopDto 更新数据 + * @return 结果 + */ + @ApiOperation(value = "新增SOP规则", httpMethod = "POST") +// @PreAuthorize("@ss.hasPermi('wecom:communityGroupSop:add')") + @PostMapping(path = "/") + @Deprecated + public AjaxResult addGroupSop(@Validated @RequestBody WeGroupSopDTO groupSopDto) { + return AjaxResult.success(); + } + + /** + * 通过规则id获取sop规则 + * + * @param ruleId 规则id + * @return 结果 + */ + @ApiOperation(value = "通过规则id获取sop规则详情", httpMethod = "GET") +// @PreAuthorize("@ss.hasPermi('wecom:communityGroupSop:query')") + @GetMapping(path = "/{ruleId}") + public AjaxResult getGroupSop(@PathVariable("ruleId") Long ruleId) { + return AjaxResult.success(); + } + + /** + * 更改SOP规则 + * + * @param ruleId SOP规则 id + * @param groupSopDto 更新数据 + * @return 结果 + */ + @ApiOperation(value = "更改SOP规则", httpMethod = "PUT") +// @PreAuthorize("@ss.hasPermi('wecom:communityGroupSop:edit')") + @PutMapping(path = "/{ruleId}") + public AjaxResult updateGroupSop(@PathVariable Long ruleId, @Validated @RequestBody WeGroupSopDTO groupSopDto) { + return AjaxResult.success(); + } + + /** + * 根据id列表批量删除群sop规则 + * + * @param ids 群sop规则列表 + * @return 结果 + */ + @ApiOperation(value = "根据id列表批量删除群sop规则", httpMethod = "DELETE") +// @PreAuthorize("@ss.hasPermi('wecom:communityGroupSop:remove')") + @DeleteMapping(path = "/{ids}") + public AjaxResult batchDeleteSopRule(@PathVariable("ids") Long[] ids) { + return AjaxResult.success(); + } + +} diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeCommunityH5Controller.java b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeCommunityH5Controller.java new file mode 100644 index 0000000..b94f4c8 --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeCommunityH5Controller.java @@ -0,0 +1,134 @@ +package com.easyink.web.controller.wecom; + +import com.easyink.common.core.controller.BaseController; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.core.domain.entity.SysUser; +import com.easyink.common.core.page.TableDataInfo; +import com.easyink.common.enums.CommunityTaskType; +import com.easyink.common.service.ISysUserService; +import com.easyink.wecom.domain.dto.groupsop.GetSopTaskDetailDTO; +import com.easyink.wecom.domain.vo.sop.GetSopTaskByUserIdVO; +import com.easyink.wecom.login.util.LoginTokenService; +import com.easyink.wecom.service.WeOperationsCenterSopDetailService; +import com.easyink.wecom.service.WePresTagGroupTaskService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.ArrayList; +import java.util.List; + +/** + * 社区运营H5接口 + * + * @author admin + * @Date 2021/3/24 10:54 + */ +@RestController +@RequestMapping(value = "/wecom/community/h5") +@Api(tags = "社区运营H5接口") +public class WeCommunityH5Controller extends BaseController { + + private final WePresTagGroupTaskService tagGroupTaskService; + private final ISysUserService userService; + private final WeOperationsCenterSopDetailService sopDetailService; + + @Autowired + public WeCommunityH5Controller(WePresTagGroupTaskService tagGroupTaskService, ISysUserService userService, WeOperationsCenterSopDetailService sopDetailService) { + this.tagGroupTaskService = tagGroupTaskService; + this.userService = userService; + this.sopDetailService = sopDetailService; + } + + /** + * 获取任务对应的执行人列表 + * + * @param taskId 任务id + * @param type 任务类型 1:标签建群任务 2:sop任务 + * @return + */ + @GetMapping("/scope/{taskId}") + @ApiOperation("获取任务对应的执行人列表") + public AjaxResult getTaskScopeList(@PathVariable("taskId") Long taskId, @RequestParam(value = "type") Integer type) { + String corpId = LoginTokenService.getLoginUser().getCorpId(); + if (CommunityTaskType.TAG.getType().equals(type)) { + return AjaxResult.success(tagGroupTaskService.getScopeListByTaskId(taskId, corpId)); + } + return AjaxResult.success(); + } + + /** + * h5页面根据员工id获取老客标签建群和群sop任务信息 + * + * @param emplId 员工id + * @param type 数据类型,0:全部数据 1:老客标签建群数据 2:群SOP数据 + * @return + */ + @GetMapping("/{emplId}") + @ApiOperation("员工id获取标签建群和群sop任务信息") + public AjaxResult getEmplTask(@PathVariable("emplId") String emplId, @RequestParam(value = "type") Integer type) { + AjaxResult res = AjaxResult.success(); + String corpId = LoginTokenService.getLoginUser().getCorpId(); + if (CommunityTaskType.TAG.getType().equals(type)) { + // 老客标签建群数据 + res.put("todo", tagGroupTaskService.getEmplTaskList(emplId, Boolean.FALSE, corpId)); + res.put("done", tagGroupTaskService.getEmplTaskList(emplId, Boolean.TRUE, corpId)); + } else { + // 全部数据 + List todoList = new ArrayList(); + List doneList = new ArrayList(); + todoList.addAll(tagGroupTaskService.getEmplTaskList(emplId, Boolean.FALSE, corpId)); + res.put("todo", todoList); + doneList.addAll(tagGroupTaskService.getEmplTaskList(emplId, Boolean.TRUE, corpId)); + res.put("done", doneList); + } + SysUser user = userService.selectUserByUserName(emplId); + boolean isAdmin = user != null && user.isAdmin(); + res.put("isAdmin", isAdmin); + return res; + } + + /** + * 员工发送老客标签建群任务信息或者发送sop到其客户群之后,变更其任务状态 + * + * @param taskId 老客标签建群时代表任务id,sop时,代表规则id + * @param emplId 老客标签建群时代表员工id,sop时,代表群主 + * @param type 类型 0:老客标签建群 1:sop + * @return 结果 + */ + @GetMapping("/changeStatus") + @ApiOperation("变更任务状态") + public AjaxResult changeStatus(@RequestParam("taskId") Long taskId, @RequestParam("emplId") String emplId, @RequestParam("type") Integer type) { + if (type.equals(0)) { + return toAjax(tagGroupTaskService.updateEmplTaskStatus(taskId, emplId)); + } + return AjaxResult.success(); + } + + /** + * 用于支持H5页面的名称和关键字检索 + * + * @param word 过滤字符 + * @return 结果 + */ + @GetMapping(path = "/filter") + @ApiOperation("H5页面的名称和关键字检索") + @Deprecated + public TableDataInfo filter(@RequestParam("word") String word) { + return getDataTable(new ArrayList<>()); + } + + + @GetMapping("/sopTaskDetail/{emplId}") + @ApiOperation("获取员工的SOP任务详情") + public TableDataInfo sopTaskDetail(@PathVariable("emplId") String emplId, GetSopTaskDetailDTO getSopTaskDetailDTO) { + startPage(); + getSopTaskDetailDTO.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + getSopTaskDetailDTO.setUserId(emplId); + List list = sopDetailService.getTaskDetailByUserId(getSopTaskDetailDTO); + return getDataTable(list); + } + + +} diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeCommunityKeywordGroupController.java b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeCommunityKeywordGroupController.java new file mode 100644 index 0000000..e3da838 --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeCommunityKeywordGroupController.java @@ -0,0 +1,84 @@ +package com.easyink.web.controller.wecom; + +import com.easyink.common.core.controller.BaseController; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.core.page.TableDataInfo; +import com.easyink.wecom.domain.WeKeywordGroupTask; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.ArrayList; + +/** + * 关键词拉群controller + */ +@Api(tags = "关键词拉群") +@RestController +@RequestMapping(value = "/wecom/communityKeywordGroup") +@Deprecated +public class WeCommunityKeywordGroupController extends BaseController { + + /** + * 根据过滤条件获取关键词拉群任务列表 + */ + @ApiOperation(value = "获取关键词拉群任务列表") +// @PreAuthorize("@ss.hasPermi('wecom:communityKeyword:list')") + @GetMapping(path = "/list") + public TableDataInfo list(WeKeywordGroupTask task) { + return getDataTable(new ArrayList<>()); + } + + /** + * 根据id获取任务详情 + * + * @param taskId 任务id + * @return 任务详情 + */ + @ApiOperation(value = "获取任务详情") + // @PreAuthorize("@ss.hasPermi('wecom:communityKeyword:query')") + @GetMapping(path = "/{taskId}") + public AjaxResult getTask(@ApiParam("任务id") @PathVariable("taskId") Long taskId) { + return AjaxResult.success(); + } + + /** + * 添加新任务 + * + * @param task 添加任务所需的数据 + * @return 结果 + */ + @ApiOperation(value = "添加新任务") + // @PreAuthorize("@ss.hasPermi('wecom:communityKeyword:add')") + @PostMapping(path = "/") + public AjaxResult addTask(@RequestBody @Validated WeKeywordGroupTask task) { + return AjaxResult.success(); + } + + /** + * 根据id及更新数据对指定任务进行更新 + */ + @ApiOperation(value = "更新任务") + // @PreAuthorize("@ss.hasPermi('wecom:communityKeyword:edit')") + @PutMapping("/{taskId}") + public AjaxResult updateTask( + @ApiParam("任务id") @PathVariable("taskId") Long taskId, @RequestBody @Validated WeKeywordGroupTask task) { + return AjaxResult.success(); + } + + /** + * 通过id列表批量删除任务 + * + * @param ids id列表 + * @return 结果 + */ + @ApiOperation(value = "批量删除任务") + // @PreAuthorize("@ss.hasPermi('wecom:communityKeyword:remove')") + @DeleteMapping(path = "/{ids}") + public AjaxResult batchDeleteTask(@ApiParam("待删除任务id数组") @PathVariable("ids") Long[] ids) { + return AjaxResult.success(); + } + +} diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeCommunityNewGroupController.java b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeCommunityNewGroupController.java new file mode 100644 index 0000000..14a48c3 --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeCommunityNewGroupController.java @@ -0,0 +1,187 @@ +package com.easyink.web.controller.wecom; + +import com.easyink.common.annotation.Log; +import com.easyink.common.core.controller.BaseController; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.core.page.TableDataInfo; +import com.easyink.common.enums.BusinessType; +import com.easyink.common.enums.EmployCodeSourceEnum; +import com.easyink.common.enums.ResultTip; +import com.easyink.common.exception.CustomException; +import com.easyink.common.utils.file.FileUtils; +import com.easyink.wecom.domain.WeEmpleCodeUseScop; +import com.easyink.wecom.domain.dto.emplecode.AddWeEmpleCodeDTO; +import com.easyink.wecom.domain.dto.emplecode.FindWeEmpleCodeDTO; +import com.easyink.wecom.domain.vo.WeCommunityNewGroupVO; +import com.easyink.wecom.domain.vo.WeEmpleCodeVO; +import com.easyink.wecom.domain.vo.WeEmplyCodeDownloadVO; +import com.easyink.wecom.login.util.LoginTokenService; +import com.easyink.wecom.service.WeEmpleCodeService; +import com.easyink.wecom.service.WeEmpleCodeUseScopService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.exception.ExceptionUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 社群运营 新客自动拉群 Controller + * + * @author admin + * @date 2021-02-19 + */ +@Api(tags = "新客自动拉群 Controller") +@RestController +@RequestMapping(value = "/wecom/communityNewGroup") +@Slf4j +public class WeCommunityNewGroupController extends BaseController { + + @Autowired + private WeEmpleCodeService weEmpleCodeService; + + @Autowired + private WeEmpleCodeUseScopService weEmpleCodeUseScopService; + + @ApiOperation(value = "新增新客自动拉群", httpMethod = "POST") + @PreAuthorize("@ss.hasPermi('wecom:communityNewGroup:add')") + @Log(title = "新客自动拉群", businessType = BusinessType.INSERT) + @PostMapping("/") + public AjaxResult add(@RequestBody AddWeEmpleCodeDTO addWeEmpleCodeDTO) { + addWeEmpleCodeDTO.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + addWeEmpleCodeDTO.setSource(EmployCodeSourceEnum.NEW_GROUP.getSource()); + weEmpleCodeService.insertWeEmpleCode(addWeEmpleCodeDTO); + return AjaxResult.success(); + } + + + /** + * 修改新客自动拉群 + */ + @ApiOperation(value = "修改新客自动拉群", httpMethod = "PUT") + @PreAuthorize("@ss.hasPermi('wecom:communityNewGroup:edit')") + @Log(title = "新客自动拉群", businessType = BusinessType.UPDATE) + @PutMapping("/{id}") + public AjaxResult edit(@PathVariable("id") String id, @RequestBody @Validated AddWeEmpleCodeDTO weEmpleCode) { + weEmpleCode.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + weEmpleCodeService.updateWeEmpleCode(weEmpleCode); + return AjaxResult.success(); + } + + /** + * 单个下载 + * + * @param id 待下载员工活码 + * @param response 响应 + */ + @ApiOperation(value = "新客建群下载", httpMethod = "GET") + @Log(title = "新客建群下载", businessType = BusinessType.OTHER) + @GetMapping("/download") + public void download(Long id, HttpServletResponse response) { + if (id == null) { + throw new CustomException(ResultTip.TIP_GENERAL_BAD_REQUEST); + } + List idList = new ArrayList<>(); + idList.add(id); + List empleCodeList = weEmpleCodeService.downloadWeEmplyCodeData(LoginTokenService.getLoginUser().getCorpId(), idList); + if (org.apache.commons.collections4.CollectionUtils.isEmpty(empleCodeList)) { + throw new CustomException(ResultTip.TIP_EMPLY_CODE_NOT_FOUND); + } + WeEmplyCodeDownloadVO emplyCode = empleCodeList.get(0); + try { + FileUtils.downloadFile(emplyCode.getQrCode(), response.getOutputStream()); + } catch (IOException exc) { + log.error("员工活码下载异常 ex:{}", ExceptionUtils.getStackTrace(exc)); + throw new CustomException(ResultTip.TIP_DOWNLOAD_ERROR); + } + } + + /** + * 员工活码批量下载 + * + * @param ids 新客自动拉群ids + * @param response 输出 + */ + @ApiOperation(value = "员工活码批量下载", httpMethod = "GET") + @Log(title = "员工活码批量下载", businessType = BusinessType.OTHER) + @GetMapping("/downloadBatch") + public void downloadBatch(Long[] ids, HttpServletResponse response) { + if (ids == null || ids.length == 0) { + throw new CustomException(ResultTip.TIP_GENERAL_BAD_REQUEST); + } + List idList = Arrays.asList(ids); + List list = weEmpleCodeService.downloadWeEmplyCodeData(LoginTokenService.getLoginUser().getCorpId(), idList); + + List> fileList = list.stream().map(e -> { + Map fileMap = new HashMap<>(); + List weEmployCodeUseScopes = weEmpleCodeUseScopService.selectWeEmpleCodeUseScopListById(e.getId(), LoginTokenService.getLoginUser().getCorpId()); + List userList = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(weEmployCodeUseScopes)) { + weEmployCodeUseScopes.forEach(useScope -> userList.add(useScope.getBusinessName())); + } + fileMap.put("fileName", StringUtils.join(userList, ",") + "-" + e.getScenario() + ".jpg"); + fileMap.put("url", e.getQrCode()); + return fileMap; + }).collect(Collectors.toList()); + + try { + FileUtils.batchDownloadFile(fileList, response.getOutputStream()); + } catch (IOException e) { + log.error("员工活码批量下载异常 ex:{}", ExceptionUtils.getStackTrace(e)); + throw new CustomException(ResultTip.TIP_DOWNLOAD_ERROR); + } + } + + /** + * 查询新客自动拉群列表 + */ + @ApiOperation(value = "查询新客自动拉群列表", httpMethod = "GET") + // @PreAuthorize("@ss.hasPermi('wecom:communityNewGroup:list')") + @GetMapping("/list") + public TableDataInfo list(FindWeEmpleCodeDTO weEmpleCode) { + startPage(); + weEmpleCode.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + weEmpleCode.setSource(EmployCodeSourceEnum.NEW_GROUP.getSource()); + List list = weEmpleCodeService.selectWeEmpleCodeList(weEmpleCode); + return getDataTable(list); + } + + /** + * 获取新客自动拉群详细信息 + */ + @ApiOperation(value = "获取新客自动拉群详细信息", httpMethod = "GET") +// @PreAuthorize("@ss.hasPermi('wecom:communityNewGroup:query')") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") @ApiParam("主键ID") Long id) { + return AjaxResult.success(weEmpleCodeService.selectWeEmpleCodeById(id, LoginTokenService.getLoginUser().getCorpId())); + } + + + /** + * 删除新客自动拉群 + */ + @ApiOperation(value = "删除新客进群", httpMethod = "DELETE") + @PreAuthorize("@ss.hasPermi('wecom:communityNewGroup:remove')") + @Log(title = "删除新客进群", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) { + if (ids == null || ids.length == 0) { + throw new CustomException(ResultTip.TIP_GENERAL_BAD_REQUEST); + } + String corpId = LoginTokenService.getLoginUser().getCorpId(); + List idList = Arrays.asList(ids); + return toAjax(weEmpleCodeService.batchRemoveWeEmpleCodeIds(corpId, idList)); + } + +} + diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeCommunityPresTagGroupController.java b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeCommunityPresTagGroupController.java new file mode 100644 index 0000000..dabcc26 --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeCommunityPresTagGroupController.java @@ -0,0 +1,149 @@ +package com.easyink.web.controller.wecom; + + +import com.easyink.common.core.controller.BaseController; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.core.domain.model.LoginUser; +import com.easyink.common.core.page.TableDataInfo; +import com.easyink.common.enums.ResultTip; +import com.easyink.common.utils.StringUtils; +import com.easyink.common.utils.bean.BeanUtils; +import com.easyink.wecom.domain.WePresTagGroupTask; +import com.easyink.wecom.domain.dto.WePresTagGroupTaskDTO; +import com.easyink.wecom.domain.vo.WePresTagGroupTaskStatResultVO; +import com.easyink.wecom.domain.vo.WePresTagGroupTaskStatVO; +import com.easyink.wecom.domain.vo.WePresTagGroupTaskVO; +import com.easyink.wecom.login.util.LoginTokenService; +import com.easyink.wecom.service.WeGroupCodeService; +import com.easyink.wecom.service.WePresTagGroupTaskService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 类名: WeCommunityPresTagGroupController + * + * @author 佚名 + * @date 2021/9/30 15:27 + */ +@RestController +@RequestMapping(value = "/wecom/communityPresTagGroup") +@Api(tags = "标签建群", hidden = true) +@Deprecated +public class WeCommunityPresTagGroupController extends BaseController { + + @Autowired + private WePresTagGroupTaskService taskService; + + @Autowired + private WeGroupCodeService groupCodeService; + private static final String ERROR_MSG = "群活码不存在"; + + /** + * 获取老客标签建群列表数据 + */ + // @PreAuthorize("@ss.hasPermi('wecom:communitytagGroup:list')") + @ApiOperation("获取标签建群列表数据") + @GetMapping(path = "/list") + public TableDataInfo getList( + @RequestParam(value = "taskName") String taskName, + @RequestParam(value = "sendType") Integer sendType, + @RequestParam(value = "createBy") String createBy, + @RequestParam(value = "beginTime") String beginTime, + @RequestParam(value = "endTime") String endTime) { + String corpId = LoginTokenService.getLoginUser().getCorpId(); + startPage(); + List wePresTagGroupTaskVoList = taskService.selectTaskList(corpId,taskName, sendType, createBy, beginTime, endTime); + return getDataTable(wePresTagGroupTaskVoList); + } + + /** + * 新建老客标签建群任务 + */ + @PreAuthorize("@ss.hasPermi('wecom:communitytagGroup:add')") + @PostMapping + @ApiOperation("新建标签建群任务") + public AjaxResult addTask(@RequestBody @Validated WePresTagGroupTaskDTO wePresTagGroupTaskDto) { + if (null == groupCodeService.getById(wePresTagGroupTaskDto.getGroupCodeId())) { + return AjaxResult.error(ResultTip.TIP_GENERAL_NOT_FOUND, ERROR_MSG); + } + WePresTagGroupTask task = new WePresTagGroupTask(); + BeanUtils.copyProperties(wePresTagGroupTaskDto, task); + task.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + + // 检测任务名是否可用 + if (taskService.isNameOccupied(task)) { + return AjaxResult.error("任务名已存在"); + } + LoginUser loginUser = LoginTokenService.getLoginUser(); + task.setCreateBy(LoginTokenService.getUsername()); + return toAjax(taskService.addTask(wePresTagGroupTaskDto, task, loginUser)); + } + + /** + * 根据获取任务详细信息 + */ + // @PreAuthorize("@ss.hasPermi('wecom:communitytagGroup:query')") + @GetMapping(path = "/{id}") + @ApiOperation("根据获取任务详细信息") + public AjaxResult getTask(@PathVariable("id") Long id) { + WePresTagGroupTaskVO taskVo = taskService.getTaskById(id, LoginTokenService.getLoginUser().getCorpId()); + if (StringUtils.isNull(taskVo)) { + return AjaxResult.error(ResultTip.TIP_GENERAL_NOT_FOUND, ERROR_MSG); + } + return AjaxResult.success(taskVo); + } + + /** + * 更新任务信息 + */ +// @PreAuthorize("@ss.hasPermi('wecom:communitytagGroup:edit')") + @PutMapping(path = "/{id}") + @ApiOperation("更新任务信息") + public AjaxResult updateTask(@PathVariable("id") Long id, @RequestBody @Validated WePresTagGroupTaskDTO wePresTagGroupTaskDto) { + if (null == groupCodeService.getById(wePresTagGroupTaskDto.getGroupCodeId())) { + return AjaxResult.error(ResultTip.TIP_GENERAL_NOT_FOUND, ERROR_MSG); + } + String corpId = LoginTokenService.getLoginUser().getCorpId(); + return toAjax(taskService.updateTask(corpId, id, wePresTagGroupTaskDto)); + } + + /** + * 批量删除老客标签建群任务 + */ + @ApiOperation("批量删除标签建群任务") + @PreAuthorize("@ss.hasPermi('wecom:communitytagGroup:remove')") + @DeleteMapping(path = "/{ids}") + public AjaxResult batchRemoveTask(@PathVariable("ids") Long[] ids) { + String corpId = LoginTokenService.getLoginUser().getCorpId(); + return toAjax(taskService.batchRemoveTaskByIds(corpId, ids)); + } + + /** + * 根据老客标签建群id及过滤条件,获取其统计信息 + */ + // @PreAuthorize("@ss.hasPermi('wecom:communitytagGroup:query')") + @GetMapping(path = "/stat/{id}") + @ApiOperation("获取统计信息") + public TableDataInfo getStatInfo(@PathVariable("id") Long id, + @RequestParam(value = "customerName", required = false) String customerName, + @RequestParam(value = "isInGroup", required = false) Integer isInGroup, + @RequestParam(value = "isSent", required = false) Integer isSent, + @RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) { + String corpId = LoginTokenService.getLoginUser().getCorpId(); + WePresTagGroupTaskStatResultVO resultVO = taskService.getStatByTaskId(corpId, id, customerName, isInGroup, isSent, pageNum, pageSize); + //total=null时,以sql查询的total为准 + if (resultVO.getTotal() == null) { + return getDataTable(resultVO.getData()); + } + return getDataTable(resultVO.getData(), Long.parseLong(String.valueOf(resultVO.getTotal()))); + } + + +} diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeCommunityPresTagGroupV2Controller.java b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeCommunityPresTagGroupV2Controller.java new file mode 100644 index 0000000..e753d02 --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeCommunityPresTagGroupV2Controller.java @@ -0,0 +1,133 @@ +package com.easyink.web.controller.wecom; + + +import com.easyink.common.core.controller.BaseController; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.core.page.TableDataInfo; +import com.easyink.common.enums.ResultTip; +import com.easyink.common.exception.CustomException; +import com.easyink.common.utils.StringUtils; +import com.easyink.wecom.domain.dto.QueryPresTagGroupDTO; +import com.easyink.wecom.domain.dto.QueryPresTagGroupStatDTO; +import com.easyink.wecom.domain.dto.WePresTagGroupTaskDTO; +import com.easyink.wecom.domain.vo.PresTagExpectedReceptionVO; +import com.easyink.wecom.domain.vo.WePresTagGroupTaskStatResultVO; +import com.easyink.wecom.domain.vo.WePresTagGroupTaskStatVO; +import com.easyink.wecom.domain.vo.WePresTagGroupTaskVO; +import com.easyink.wecom.login.util.LoginTokenService; +import com.easyink.wecom.service.WeGroupCodeService; +import com.easyink.wecom.service.WePresTagGroupTaskService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiResponse; +import io.swagger.annotations.ApiResponses; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 类名: 老客进群接口 + * + * @author: 1*+ + * @date: 2021-11-01 17:46 + */ +@RestController +@RequestMapping(value = "/wecom/communityPresTagGroupV2") +@Api(tags = "老客进群") +public class WeCommunityPresTagGroupV2Controller extends BaseController { + + private final WePresTagGroupTaskService taskService; + private final WeGroupCodeService groupCodeService; + + @Autowired + public WeCommunityPresTagGroupV2Controller(WePresTagGroupTaskService taskService, WeGroupCodeService groupCodeService) { + this.taskService = taskService; + this.groupCodeService = groupCodeService; + } + + @ApiOperation("获取标签入群列表数据") + @GetMapping(path = "/list") + public TableDataInfo getList(QueryPresTagGroupDTO queryPresTagGroupDTO) { + String corpId = LoginTokenService.getLoginUser().getCorpId(); + startPage(); + List wePresTagGroupTaskVoList = + taskService.selectTaskList(corpId, queryPresTagGroupDTO.getTaskName(), queryPresTagGroupDTO.getSendType() + , queryPresTagGroupDTO.getCreateBy(), queryPresTagGroupDTO.getBeginTime(), queryPresTagGroupDTO.getEndTime()); + return getDataTable(wePresTagGroupTaskVoList); + } + + @PreAuthorize("@ss.hasPermi('wecom:communitytagGroup:add')") + @PostMapping + @ApiOperation("新建标签建群任务") + @ApiResponses({ + @ApiResponse(code = 2024, message = "所选群活码失效,请重新选择"), + @ApiResponse(code = 2025, message = "任务已存在,请重新填写任务名"), + }) + public AjaxResult addTask(@RequestBody @Validated WePresTagGroupTaskDTO wePresTagGroupTaskDto) { + if(org.apache.commons.lang3.StringUtils.isBlank(wePresTagGroupTaskDto.getWelcomeMsg())||wePresTagGroupTaskDto.getGroupCodeId()==null){ + throw new CustomException(ResultTip.TIP_GENERAL_BAD_REQUEST); + } + taskService.addTaskV2(wePresTagGroupTaskDto, LoginTokenService.getLoginUser()); + return AjaxResult.success(); + } + + // @PreAuthorize("@ss.hasPermi('wecom:communitytagGroup:query')") + @GetMapping(path = "/{id}") + @ApiOperation("根据获取任务详细信息") + public AjaxResult getTask(@PathVariable("id") Long id) { + WePresTagGroupTaskVO taskVo = taskService.getTaskById(id, LoginTokenService.getLoginUser().getCorpId()); + if (StringUtils.isNull(taskVo)) { + return AjaxResult.error(ResultTip.TIP_ACTIVE_CODE_NOT_EXSIT); + } + return AjaxResult.success(taskVo); + } + +// @PreAuthorize("@ss.hasPermi('wecom:communitytagGroup:edit')") + @PutMapping(path = "/{id}") + @ApiOperation("更新任务信息") + public AjaxResult updateTask(@PathVariable("id") Long id, @RequestBody @Validated WePresTagGroupTaskDTO wePresTagGroupTaskDto) { + if(org.apache.commons.lang3.StringUtils.isBlank(wePresTagGroupTaskDto.getWelcomeMsg())||wePresTagGroupTaskDto.getGroupCodeId()==null){ + throw new CustomException(ResultTip.TIP_GENERAL_BAD_REQUEST); + } + if (null == groupCodeService.getById(wePresTagGroupTaskDto.getGroupCodeId())) { + return AjaxResult.error(ResultTip.TIP_ACTIVE_CODE_NOT_EXSIT); + } + String corpId = LoginTokenService.getLoginUser().getCorpId(); + return toAjax(taskService.updateTask(corpId, id, wePresTagGroupTaskDto)); + } + + @ApiOperation("批量删除标签建群任务") + @PreAuthorize("@ss.hasPermi('wecom:communitytagGroup:remove')") + @DeleteMapping(path = "/{ids}") + public AjaxResult batchRemoveTask(@PathVariable("ids") Long[] ids) { + String corpId = LoginTokenService.getLoginUser().getCorpId(); + return toAjax(taskService.batchRemoveTaskByIds(corpId, ids)); + } + + // @PreAuthorize("@ss.hasPermi('wecom:communitytagGroup:query')") + @GetMapping(path = "/stat/{id}") + @ApiOperation("获取进群详情") + public TableDataInfo getStatInfo(@PathVariable("id") Long id, + QueryPresTagGroupStatDTO queryPresTagGroupStatDTO) { + String corpId = LoginTokenService.getLoginUser().getCorpId(); + WePresTagGroupTaskStatResultVO resultVO = taskService.getStatByTaskId(corpId, id, queryPresTagGroupStatDTO.getCustomerName() + , queryPresTagGroupStatDTO.getIsInGroup(), queryPresTagGroupStatDTO.getIsSent() + , queryPresTagGroupStatDTO.getPageNum(), queryPresTagGroupStatDTO.getPageSize()); + //total=null时,以sql查询的total为准 + if (resultVO.getTotal() == null) { + return getDataTable(resultVO.getData()); + } + return getDataTable(resultVO.getData(), Long.parseLong(String.valueOf(resultVO.getTotal()))); + } + + @PostMapping(path = "/getExpectedReceptionData") + @ApiOperation("获取预计发送数据") + public AjaxResult getExpectedReceptionData(@RequestBody @Validated WePresTagGroupTaskDTO wePresTagGroupTaskDto) { + return AjaxResult.success(taskService.getExpectedReceptionData(wePresTagGroupTaskDto, LoginTokenService.getLoginUser())); + } + + +} diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeConversationArchiveController.java b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeConversationArchiveController.java new file mode 100644 index 0000000..17e3b6c --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeConversationArchiveController.java @@ -0,0 +1,89 @@ +package com.easyink.web.controller.wecom; + +import com.easyink.common.core.controller.BaseController; +import com.easyink.common.core.domain.ConversationArchiveQuery; +import com.easyink.common.core.page.TableDataInfo; +import com.easyink.common.token.TokenService; +import com.easyink.common.utils.ServletUtils; +import com.easyink.common.utils.StringUtils; +import com.easyink.wecom.domain.vo.ConversationArchiveVO; +import com.easyink.wecom.login.util.LoginTokenService; +import com.easyink.wecom.service.WeConversationArchiveService; +import com.github.pagehelper.PageInfo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.ArrayList; + +/** + * @author admin + * @description 会话存档controller + * @date 2020/12/19 13:51 + **/ +@Api(tags = "会话存档controller") +@Slf4j +@RestController +@RequestMapping("/wecom/finance") +public class WeConversationArchiveController extends BaseController { + @Autowired + private WeConversationArchiveService weConversationArchiveService; + @Autowired + private TokenService tokenService; + + /** + * 获取单聊会话数据接口 + * + * @param query 入参 + */ + @ApiOperation(value = "获取单聊会话数据接口", httpMethod = "GET") + @GetMapping("/getChatContactList") + public TableDataInfo> getChatContactList(ConversationArchiveQuery query) { + if (StringUtils.isEmpty(LoginTokenService.getLoginUser().getCorpId())){ + return getDataTable(new ArrayList<>()); + } + query.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + return getDataTable(weConversationArchiveService.getChatContactList(query)); + } + + + /** + * 获取群聊会话数据接口 + * + * @param query 入参 + * @param /fromId 发送人id + * @param /room 接收人id + * @return + */ + @ApiOperation(value = "获取群聊会话数据接口", httpMethod = "GET") + @GetMapping("/getChatRoomContactList") + public TableDataInfo> getChatRoomContactList(ConversationArchiveQuery query) { + if (StringUtils.isEmpty(LoginTokenService.getLoginUser().getCorpId())){ + return getDataTable(new ArrayList<>()); + } + query.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + return getDataTable(weConversationArchiveService.getChatRoomContactList(query)); + } + + + /** + * 获取全局会话数据接口 + * + * @param query 入参 + * @return + */ + @ApiOperation(value = "获取全局会话数据接口", httpMethod = "GET") + @GetMapping("/getChatAllList") + public TableDataInfo> getChatAllList(ConversationArchiveQuery query) { + if (StringUtils.isEmpty(LoginTokenService.getLoginUser().getCorpId())){ + return getDataTable(new ArrayList<>()); + } + query.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + return getDataTable(weConversationArchiveService.getChatAllList(query, tokenService.getLoginUser(ServletUtils.getRequest()))); + } + +} diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeCorpAccountController.java b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeCorpAccountController.java new file mode 100644 index 0000000..f742b82 --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeCorpAccountController.java @@ -0,0 +1,142 @@ +package com.easyink.web.controller.wecom; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.easyink.common.annotation.Log; +import com.easyink.common.config.ChatRsaKeyConfig; +import com.easyink.common.config.RuoYiConfig; +import com.easyink.common.constant.Constants; +import com.easyink.common.core.controller.BaseController; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.core.domain.entity.WeCorpAccount; +import com.easyink.common.core.page.TableDataInfo; +import com.easyink.common.enums.BusinessType; +import com.easyink.common.enums.ResultTip; +import com.easyink.common.exception.CustomException; +import com.easyink.common.exception.user.NoLoginTokenException; +import com.easyink.common.exception.user.UserNoCorpException; +import com.easyink.wecom.login.util.LoginTokenService; +import com.easyink.wecom.service.WeAuthCorpInfoExtendService; +import com.easyink.wecom.service.WeCorpAccountService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiResponse; +import io.swagger.annotations.ApiResponses; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 企业id相关配置Controller + * + * @author admin + * @date 2020-08-24 + */ +@RestController +@RequestMapping("/wecom/corp") +@Api(tags = "企业id配置接口") +public class WeCorpAccountController extends BaseController { + private final WeCorpAccountService weCorpAccountService; + private final RuoYiConfig ruoYiConfig; + private final WeAuthCorpInfoExtendService weAuthCorpInfoExtendService; + private final ChatRsaKeyConfig chatRsaKeyConfig; + + @Autowired + public WeCorpAccountController(WeCorpAccountService weCorpAccountService, RuoYiConfig ruoYiConfig, WeAuthCorpInfoExtendService weAuthCorpInfoExtendService, ChatRsaKeyConfig chatRsaKeyConfig) { + this.weCorpAccountService = weCorpAccountService; + this.ruoYiConfig = ruoYiConfig; + this.weAuthCorpInfoExtendService = weAuthCorpInfoExtendService; + this.chatRsaKeyConfig = chatRsaKeyConfig; + } + + + // @PreAuthorize("@ss.hasPermi('wechat:corp:list')") + @GetMapping("/list") + @Deprecated + @ApiOperation("查询企业id相关配置列表") + public TableDataInfo list(WeCorpAccount weCorpAccount) { + startPage(); + List list = weCorpAccountService.list(new LambdaQueryWrapper() + .eq(WeCorpAccount::getDelFlag, Constants.NORMAL_CODE) + .like(WeCorpAccount::getCompanyName, weCorpAccount.getCompanyName())); + list.forEach(corpAccount -> corpAccount.setIsCustomizedApp(weAuthCorpInfoExtendService.isCustomizedApp(corpAccount.getCorpId()))); + return getDataTable(list); + } + + @GetMapping("/get") + @ApiOperation("查询当前企业微信基础配置") + @ApiResponses({ + @ApiResponse(code = 503, message = "没有可用的企业微信配置,请联系管理员"), + @ApiResponse(code = 1017, message = "当前企业已授权但未启用待开发应用,无法使用该功能") + }) + public AjaxResult get(){ + WeCorpAccount account = null; + try { + //是内部应用服务器 + if (ruoYiConfig.isInternalServer()) { + account = weCorpAccountService.findValidWeCorpAccount(); + } else { + account = weCorpAccountService.findValidWeCorpAccount(LoginTokenService.getLoginUser().getCorpId()); + } + } catch (NoLoginTokenException | UserNoCorpException e) { + if (ruoYiConfig.isInternalServer()) { + account = weCorpAccountService.findValidWeCorpAccount(); + } + } + if(account == null) { + throw new CustomException(ResultTip.TIP_NOT_AVAILABLE_CONFIG_FOUND); + } + // 获取公司名称 + account.setCompanyName(weCorpAccountService.getCorpName(account.getCorpId())); + account.setIsCustomizedApp(weAuthCorpInfoExtendService.isCustomizedApp(account.getCorpId())); + return AjaxResult.success(account); + } + + + // @PreAuthorize("@ss.hasPermi('wechat:corp:add')") + @Log(title = "新增企业id相关配置", businessType = BusinessType.INSERT) + @PostMapping + @ApiOperation("新增企业id相关配置") + public AjaxResult add(@Validated @RequestBody WeCorpAccount weCorpAccount) { + weCorpAccountService.saveCorpConfig(weCorpAccount, LoginTokenService.getLoginUser()); + return AjaxResult.success(); + } + + @PreAuthorize("@ss.hasPermi('wechat:corp:edit')") + @Log(title = "修改企业id相关配置", businessType = BusinessType.UPDATE) + @PutMapping + @ApiOperation("修改企业id相关配置") + public AjaxResult edit(@Validated @RequestBody WeCorpAccount weCorpAccount) { + weCorpAccountService.updateWeCorpAccount(weCorpAccount, LoginTokenService.getLoginUser()); + return AjaxResult.success(); + } + + + + @PreAuthorize("@ss.hasPermi('wechat:corp:startCustomerChurnNoticeSwitch')") + @Log(title = "客户流失通知开关", businessType = BusinessType.UPDATE) + @PutMapping("/startCustomerChurnNoticeSwitch/{status}") + @ApiOperation("客户流失通知开关") + public AjaxResult startCustomerChurnNoticeSwitch(@PathVariable String status) { + weCorpAccountService.startCustomerChurnNoticeSwitch(LoginTokenService.getLoginUser().getCorpId(), status); + return AjaxResult.success(); + } + + + // @PreAuthorize("@ss.hasPermi('wechat:corp:getCustomerChurnNoticeSwitch')") + @Log(title = "客户流失通知开关查询", businessType = BusinessType.OTHER) + @GetMapping("/getCustomerChurnNoticeSwitch") + @ApiOperation("客户流失通知开关查询") + public AjaxResult getCustomerChurnNoticeSwitch() { + return AjaxResult.success("操作成功", weCorpAccountService.getCustomerChurnNoticeSwitch(LoginTokenService.getLoginUser().getCorpId())); + } + + @GetMapping("/getChatPublicKey") + @ApiOperation("获取会话存档加解密的公钥") + public AjaxResult getChatKey() { + return AjaxResult.success("操作成功", chatRsaKeyConfig.getPublicKey()); + } + +} diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeCustomerController.java b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeCustomerController.java new file mode 100644 index 0000000..983a5d2 --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeCustomerController.java @@ -0,0 +1,255 @@ +package com.easyink.web.controller.wecom; + +import com.easyink.common.annotation.Log; +import com.easyink.common.constant.WeConstans; +import com.easyink.common.core.controller.BaseController; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.core.domain.model.LoginUser; +import com.easyink.common.core.page.TableDataInfo; +import com.easyink.common.enums.BusinessType; +import com.easyink.wecom.domain.vo.AllocateWeCustomerResp; +import com.easyink.wecom.domain.WeCustomer; +import com.easyink.wecom.domain.dto.customer.EditCustomerDTO; +import com.easyink.wecom.domain.dto.tag.RemoveWeCustomerTagDTO; +import com.easyink.wecom.domain.entity.WeCustomerExportDTO; +import com.easyink.wecom.domain.vo.WeLeaveAllocateVO; +import com.easyink.wecom.domain.vo.WeMakeCustomerTagVO; +import com.easyink.wecom.domain.vo.customer.WeCustomerSumVO; +import com.easyink.wecom.domain.vo.customer.WeCustomerUserListVO; +import com.easyink.wecom.domain.vo.customer.WeCustomerVO; +import com.easyink.wecom.login.util.LoginTokenService; +import com.easyink.wecom.service.WeCustomerService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +/** + * 企业微信客户Controller + * + * @author admin + * @date 2020-09-13 + */ +@RestController +@RequestMapping("/wecom/customer") +@Slf4j +@Api(tags = "企业微信客户") +public class WeCustomerController extends BaseController { + + @Autowired + @Lazy + private WeCustomerService weCustomerService; + + /** + * 查询企业微信客户列表 + */ + @GetMapping("/list") + @ApiOperation("查询企业微信客户列表") + public TableDataInfo list(WeCustomer weCustomer) { + return getDataTable(new ArrayList<>()); + } + + /** + * @description: 由于之前离职客户和在职客户是分两个表存储, 本期将会把离职客户和在职客户存在同一张表(we_flower_customer_rel)中,用状态做区分 + * @since V1.7 + */ + @GetMapping("/listV2") + @ApiOperation("查询企业微信客户列表第二版") + public TableDataInfo listV2(WeCustomer weCustomer) { + startPage(); + weCustomer.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + List list = weCustomerService.selectWeCustomerListV2(weCustomer); + return getDataTable(list); + } + + /** + * 会话存档客户检索客户列表 + * + * @description: 因为会话存档模块的客户检索列表需要对客户去重, + * 因此使用该接口代替原本{@link com.easyink.web.controller.wecom.WeCustomerController#listV2(com.easyink.wecom.domain.WeCustomer)} 接口 + */ + @GetMapping("/listDistinct") + @ApiOperation("会话存档客户检索客户列表") + public TableDataInfo listDistinct(WeCustomer weCustomer) { + startPage(); + weCustomer.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + List list = weCustomerService.selectWeCustomerListDistinct(weCustomer); + return getDataTable(list); + } + + @GetMapping("/sum") + @ApiOperation("查询企业客户统计数据") + public AjaxResult sum(WeCustomer weCustomer) { + weCustomer.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + return AjaxResult.success(weCustomerService.weCustomerCount(weCustomer)); + } + + + /** + * 根据客户ID获取客户 + * + * @return + */ + @PreAuthorize("@ss.hasPermi('customerManage:lossRemind:view') || @ss.hasPermi('customerManage:customer:view')") + @GetMapping("/getCustomersByUserId/{externalUserid}/{userId}") + @ApiOperation("根据客户ID和员工ID获取客户详情") + @Deprecated + public AjaxResult> getCustomersByUserId(@PathVariable String externalUserid, @PathVariable String userId, @ApiParam("对应离职员工的离职时间,不传则获取在职员工客户") Date dimissionTime) { + return AjaxResult.success(); + } + + @PreAuthorize("@ss.hasPermi('customerManage:lossRemind:view') || @ss.hasPermi('customerManage:customer:view')") + @GetMapping("/getCustomersByUserIdV2/{externalUserid}/{userId}") + @ApiOperation("根据客户ID和员工ID获取客户详情V2") + public AjaxResult> getCustomersByUserIdV2(@PathVariable String externalUserid, @PathVariable String userId) { + return AjaxResult.success(weCustomerService.getCustomersByUserIdV2(externalUserid, userId, LoginTokenService.getLoginUser().getCorpId())); + } + + /** + * 导出企业微信客户列表 + */ + @PreAuthorize("@ss.hasPermi('customerManage:customer:export') || @ss.hasPermi('customerManage:lossRemind:export')") + @Log(title = "企业微信客户", businessType = BusinessType.EXPORT) + @GetMapping("/export") + @ApiOperation("导出企业微信客户列表") + public AjaxResult export(WeCustomerExportDTO dto) { + dto.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + return weCustomerService.export(dto); + } + + /** + * 获取企业微信客户详细信息-> 未被使用 + */ + @Deprecated + @GetMapping(value = "/{externalUserId}") + @ApiOperation("获取企业微信客户详细信息-> 未被使用") + public AjaxResult getInfo(@PathVariable("externalUserId") String externalUserId) { + String corpId = LoginTokenService.getLoginUser().getCorpId(); + return AjaxResult.success(weCustomerService.selectWeCustomerById(externalUserId, corpId)); + } + + + /** + * 修改企业微信客户 + */ + @PreAuthorize("@ss.hasPermi('customerManage:customer:edit')") + @Log(title = "企业微信客户", businessType = BusinessType.UPDATE) + @PutMapping + @ApiOperation("修改企业微信客户") + public AjaxResult edit(@Validated @RequestBody EditCustomerDTO dto) { + LoginUser loginUser = LoginTokenService.getLoginUser(); + dto.setCorpId(loginUser.getCorpId()); + dto.setUpdateBy(loginUser.getUsername()); + weCustomerService.editCustomer(dto); + return AjaxResult.success(); + } + + /** + * 离职分配单个客户 + * + * @param weLeaveAllocateVO + * @return + */ + @PostMapping({"/allocateSingleCustomer"}) + @ApiOperation("离职继承分配") + @Deprecated + public AjaxResult allocateSingleCustomer(@RequestBody WeLeaveAllocateVO weLeaveAllocateVO) { + return AjaxResult.success(); + } + + /** + * 客户同步接口 + * + * @return + */ + @Log(title = "企业微信客户同步接口", businessType = BusinessType.DELETE) + @GetMapping("/synchWeCustomer") + @PreAuthorize("@ss.hasPermi('customerManage:customer:sync')") + @ApiOperation("客户同步接口") + public AjaxResult synchWeCustomer() { + + weCustomerService.syncWeCustomerV2(LoginTokenService.getLoginUser().getCorpId()); + + return AjaxResult.success(WeConstans.SYNCH_TIP); + } + + /** + * 客户打标签 + * + * @param weMakeCustomerTag + * @return + */ + @Log(title = "客户打标签", businessType = BusinessType.UPDATE) + @PostMapping("/makeLabel") + @PreAuthorize("@ss.hasPermi('customerManage:customer:makeTag')") + @ApiOperation("客户打标签") + public AjaxResult makeLabel(@Validated @RequestBody WeMakeCustomerTagVO weMakeCustomerTag) { + LoginUser loginUser = LoginTokenService.getLoginUser(); + weMakeCustomerTag.setCorpId(loginUser.getCorpId()); + weMakeCustomerTag.setUpdateBy(loginUser.getUsername()); + weCustomerService.makeLabel(weMakeCustomerTag); + + return AjaxResult.success(); + } + + /** + * 客户批量打标签 + * + * @param weMakeCustomerTag + * @return + */ + @Log(title = "客户打标签", businessType = BusinessType.UPDATE) + @PostMapping("/makeLabelbatch") + @ApiOperation("客户批量打标签") + public AjaxResult makeLabelbatch(@Validated @RequestBody List weMakeCustomerTag) { + LoginUser loginUser = LoginTokenService.getLoginUser(); + weMakeCustomerTag.forEach(weMakeCustomerTagVO -> weMakeCustomerTagVO.setCorpId(loginUser.getCorpId())); + weCustomerService.makeLabelbatch(weMakeCustomerTag, loginUser.getUsername()); + return AjaxResult.success(); + } + + /** + * 移除客户标签 + * + * @return + */ + @PreAuthorize("@ss.hasPermi('customerManage:customer:removeTag')") + @Log(title = "移除客户标签", businessType = BusinessType.DELETE) + @DeleteMapping("/removeLabel") + @ApiOperation("移除客户标签") + public AjaxResult removeLabel(@RequestBody RemoveWeCustomerTagDTO removeWeCustomerTagDTO) { + removeWeCustomerTagDTO.getCustomerList().forEach(weUserCustomer -> weUserCustomer.setCorpId(LoginTokenService.getLoginUser().getCorpId())); + weCustomerService.removeLabel(removeWeCustomerTagDTO); + + return AjaxResult.success(); + + } + + /** + * 查询企业微信客户列表(六感) + */ + @Deprecated + @GetMapping("/listConcise") + @ApiOperation("查询企业微信客户列表(六感)") + public TableDataInfo listConcise(WeCustomer weCustomer) { + return getDataTable(new ArrayList<>()); + } + + + @ApiOperation("查询客户所属的员工列表") + @GetMapping("/listUserByCustomerId/{customerId}") + public AjaxResult getCustomerUserList(@PathVariable(value = "customerId") String customerId) { + List list = weCustomerService.listUserListByCustomerId(customerId, LoginTokenService.getLoginUser().getCorpId()); + return AjaxResult.success(list); + } + +} diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeCustomerExtendPropertyController.java b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeCustomerExtendPropertyController.java new file mode 100644 index 0000000..5d0fe7f --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeCustomerExtendPropertyController.java @@ -0,0 +1,104 @@ +package com.easyink.web.controller.wecom; + +import com.easyink.common.core.controller.BaseController; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.core.domain.model.LoginUser; +import com.easyink.common.utils.bean.BeanUtils; +import com.easyink.wecom.domain.dto.BatchSaveCustomerExtendPropertyDTO; +import com.easyink.wecom.domain.dto.QueryCustomerExtendPropertyDTO; +import com.easyink.wecom.domain.dto.SaveCustomerExtendPropertyDTO; +import com.easyink.wecom.domain.entity.customer.WeCustomerExtendProperty; +import com.easyink.wecom.login.util.LoginTokenService; +import com.easyink.wecom.service.WeCustomerExtendPropertyService; +import io.swagger.annotations.*; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * 类名: 员工扩展属性接口 + * + * @author : silver_chariot + * @date : 2021/11/10 18:01 + */ +@RequestMapping("/wecom/extendProperty") +@RestController +@Api(tags = "客户扩展属性接口") +public class WeCustomerExtendPropertyController extends BaseController { + private final WeCustomerExtendPropertyService weCustomerExtendPropertyService; + + @Autowired + public WeCustomerExtendPropertyController(@NotNull WeCustomerExtendPropertyService weCustomerExtendPropertyService) { + this.weCustomerExtendPropertyService = weCustomerExtendPropertyService; + } + + + @GetMapping("/list") + @ApiOperation(("获取客户扩展属性列表")) + public AjaxResult> list(@Validated QueryCustomerExtendPropertyDTO dto) { + WeCustomerExtendProperty property = new WeCustomerExtendProperty(); + BeanUtils.copyPropertiesASM(dto, property); + property.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + return AjaxResult.success(weCustomerExtendPropertyService.getList(property)); + } + + @PostMapping("/add") + @ApiOperation("保存客户扩展属性") + @ApiResponses({ + @ApiResponse(code = 4006, message = "该客户扩展标签已存在") + }) + @PreAuthorize("@ss.hasPermi('customer:extendProp:add')") + public AjaxResult add(@Validated @RequestBody SaveCustomerExtendPropertyDTO dto) { + LoginUser loginUser = LoginTokenService.getLoginUser(); + dto.setCreateBy(loginUser); + dto.setCorpId(loginUser.getCorpId()); + int result = weCustomerExtendPropertyService.add(dto); + return result > 0 ? AjaxResult.success() : AjaxResult.error(); + } + + @PutMapping("/edit") + @ApiOperation("编辑客户扩展属性") + @ApiResponses({ + @ApiResponse(code = 4006, message = "该客户扩展标签已存在"), + @ApiResponse(code = 4007, message = "更新客户自定义属性失败"), + @ApiResponse(code = 4008, message = "缺少多选选项值") + }) + @PreAuthorize("@ss.hasPermi('customer:extendProp:edit')") + public AjaxResult edit(@Validated @RequestBody SaveCustomerExtendPropertyDTO dto) { + LoginUser loginUser = LoginTokenService.getLoginUser(); + dto.setCorpId(loginUser.getCorpId()); + weCustomerExtendPropertyService.edit(dto); + return AjaxResult.success(); + } + + @PutMapping("/editBatch") + @ApiOperation("批量编辑客户扩展属性") + @ApiResponses({ + @ApiResponse(code = 4006, message = "该客户扩展标签已存在"), + @ApiResponse(code = 4007, message = "更新客户自定义属性失败"), + @ApiResponse(code = 4008, message = "缺少多选选项值"), + @ApiResponse(code = 4009, message = "标签类型无法编辑") + }) + @PreAuthorize("@ss.hasPermi('customer:extendProp:edit')") + public AjaxResult editBatch(@RequestBody BatchSaveCustomerExtendPropertyDTO dto) { + dto.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + weCustomerExtendPropertyService.editBatch(dto); + return AjaxResult.success(); + + } + + @DeleteMapping("/del/{ids}") + @ApiOperation("删除客户扩展属性") + @PreAuthorize("@ss.hasPermi('customer:extendProp:remove')") + public AjaxResult del(@Validated @NotEmpty(message = "id不能为空") @ApiParam("删除id数组") @PathVariable String[] ids) { + weCustomerExtendPropertyService.del(LoginTokenService.getLoginUser().getCorpId(), ids); + return AjaxResult.success(); + } + + +} diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeCustomerMessagePushController.java b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeCustomerMessagePushController.java new file mode 100644 index 0000000..a7911a8 --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeCustomerMessagePushController.java @@ -0,0 +1,170 @@ +package com.easyink.web.controller.wecom; + +import com.easyink.common.annotation.Log; +import com.easyink.common.core.controller.BaseController; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.core.domain.model.LoginUser; +import com.easyink.common.core.page.TableDataInfo; +import com.easyink.common.enums.BusinessType; +import com.easyink.common.utils.DateUtils; +import com.easyink.common.utils.StringUtils; +import com.easyink.wecom.domain.dto.WeCustomerMessageDTO; +import com.easyink.wecom.domain.dto.WeCustomerMessagePushResultDTO; +import com.easyink.wecom.domain.dto.WeCustomerMessageToUserDTO; +import com.easyink.wecom.domain.dto.message.AsyncResultDTO; +import com.easyink.wecom.domain.dto.message.CustomerMessagePushDTO; +import com.easyink.wecom.domain.vo.CustomerMessagePushVO; +import com.easyink.wecom.domain.vo.WeCustomerMessageResultVO; +import com.easyink.wecom.login.util.LoginTokenService; +import com.easyink.wecom.service.WeCustomerMessageOriginalService; +import com.easyink.wecom.service.WeCustomerMessagePushService; +import com.easyink.wecom.service.WeCustomerMessgaeResultService; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.github.pagehelper.PageHelper; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiResponse; +import io.swagger.annotations.ApiResponses; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.exception.ExceptionUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.text.ParseException; +import java.util.List; + +/** + * 类名: 企业微信 群发消息 + * + * @author 佚名 + * @date 2021/9/13 18:21 + */ +@Slf4j +@RestController +@RequestMapping("/wecom/customerMessagePush") +@Api(value = "WeCustomerMessagePushController", tags = "企业微信群发消息接口") +public class WeCustomerMessagePushController extends BaseController { + private final WeCustomerMessagePushService weCustomerMessagePushService; + private final WeCustomerMessageOriginalService weCustomerMessageOriginalService; + private final WeCustomerMessgaeResultService weCustomerMessgaeResultService; + + @Autowired + public WeCustomerMessagePushController(WeCustomerMessagePushService weCustomerMessagePushService, WeCustomerMessageOriginalService weCustomerMessageOriginalService, WeCustomerMessgaeResultService weCustomerMessgaeResultService) { + this.weCustomerMessagePushService = weCustomerMessagePushService; + this.weCustomerMessageOriginalService = weCustomerMessageOriginalService; + this.weCustomerMessgaeResultService = weCustomerMessgaeResultService; + } + + @PreAuthorize("@ss.hasPermi('customerMessagePush:push:add')") + @Log(title = "新增群发消息发送", businessType = BusinessType.INSERT) + @PostMapping(value = "add") + @ApiOperation("新增群发消息发送") + public AjaxResult add(@Validated @RequestBody CustomerMessagePushDTO customerMessagePushDTO) { + try { + customerMessagePushDTO.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + weCustomerMessagePushService.addWeCustomerMessagePush(customerMessagePushDTO, LoginTokenService.getLoginUser()); + } catch (JsonProcessingException | ParseException | CloneNotSupportedException e) { + log.error("新增群发消息发送异常 ex:{}", ExceptionUtils.getStackTrace(e)); + return AjaxResult.error("群发失败"); + } + return AjaxResult.success(); + } + + @PreAuthorize("@ss.hasPermi('customerMessagePush:push:list')") + @GetMapping(value = "/list") + @ApiOperation("获取群发消息列表") + public TableDataInfo list(@RequestParam(value = "sender", required = false) String sender + , @RequestParam(value = "content", required = false) String content + , @RequestParam(value = "pushType", required = false) String pushType + , @RequestParam(value = "beginTime", required = false) String beginTime + , @RequestParam(value = "endTime", required = false) String endTime) { + startPage(); + LoginUser loginUser = LoginTokenService.getLoginUser(); + WeCustomerMessageDTO weCustomerMessageDTO = new WeCustomerMessageDTO(loginUser.isSuperAdmin(), sender, content, pushType, DateUtils.parseBeginDay(beginTime), DateUtils.parseEndDay(endTime)); + weCustomerMessageDTO.setCorpId(loginUser.getCorpId()); + List list = weCustomerMessagePushService.customerMessagePushs(weCustomerMessageDTO); + return getDataTable(list); + } + + @PreAuthorize("@ss.hasPermi('customerMessagePush:push:view')") + @GetMapping(value = "/getInfo") + @ApiOperation("群发消息详情") + public AjaxResult getInfo(@RequestParam(value = "messageId") Long messageId) { + String corpId = LoginTokenService.getLoginUser().getCorpId(); + CustomerMessagePushVO customerMessagePushVo = weCustomerMessageOriginalService.customerMessagePushDetail(messageId, corpId); + return AjaxResult.success(customerMessagePushVo); + } + + @GetMapping(value = "/getMessageTask") + @ApiOperation("群发任务数据回显(编辑时使用)") + public AjaxResult getMessageTask(@RequestParam(value = "messageId") Long messageId){ + return AjaxResult.success(weCustomerMessagePushService.getCopyInfo(messageId)); + } + + @GetMapping(value = "/getCopyInfo") + @ApiOperation("群发任务复制") + public AjaxResult getCopyInfo(@RequestParam(value = "messageId") Long messageId) { + return AjaxResult.success(weCustomerMessagePushService.getCopyInfo(messageId)); + } + + @PostMapping(value = "/getSendSize") + @ApiOperation("获取消息发送人数") + public AjaxResult getSendSize(@Validated @RequestBody CustomerMessagePushDTO customerMessagePushDTO) { + return AjaxResult.success(weCustomerMessagePushService.getSendSize(customerMessagePushDTO, LoginTokenService.getLoginUser())); + } + + + @Log(title = "修改定时群发消息", businessType = BusinessType.INSERT) + @PostMapping(value = "/update") + @ApiOperation("修改定时群发消息") + public AjaxResult update(@Validated @RequestBody CustomerMessagePushDTO customerMessagePushDTO){ + try { + weCustomerMessagePushService.updateTimeTask(customerMessagePushDTO, LoginTokenService.getLoginUser()); + } catch (ParseException e) { + log.error("修改定时群发异常:ex:{}", ExceptionUtils.getStackTrace(e)); + } + return AjaxResult.success(); + } + + @Log(title = "删除定时群发消息", businessType = BusinessType.INSERT) + @DeleteMapping(value = "/delete") + @ApiOperation("删除定时群发消息") + public AjaxResult delete(@RequestParam(value = "messageId") Long messageId) { + weCustomerMessagePushService.delete(messageId, LoginTokenService.getLoginUser().getCorpId()); + return AjaxResult.success(); + } + + @PostMapping(value = "/pushResults") + @ApiOperation("群发消息结果列表") + public TableDataInfo customerMessagePushResult(@Validated @RequestBody WeCustomerMessagePushResultDTO weCustomerMessagePushResultDTO) { + weCustomerMessagePushResultDTO.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + if (StringUtils.isNotNull(weCustomerMessagePushResultDTO.getPageNum()) && StringUtils.isNotNull(weCustomerMessagePushResultDTO.getPageSize())) { + PageHelper.startPage(weCustomerMessagePushResultDTO.getPageNum(), weCustomerMessagePushResultDTO.getPageSize()); + } + List weCustomerMessageResuls = weCustomerMessgaeResultService.customerMessagePushs(weCustomerMessagePushResultDTO); + return getDataTable(weCustomerMessageResuls); + } + + @PreAuthorize("@ss.hasPermi('customerMessagePush:push:asyncResult')") + @PostMapping(value = "/asyncResult") + @ApiOperation("同步消息发送结果") + @ApiResponses( + {@ApiResponse(code = 2041, message = "正在派送群发任务,请稍后再试")} + ) + public AjaxResult asyncResult(@RequestBody AsyncResultDTO asyncResultDTO) throws JsonProcessingException { + weCustomerMessageOriginalService.asyncResult(asyncResultDTO, LoginTokenService.getLoginUser().getCorpId()); + return AjaxResult.success(); + } + + @PostMapping(value = "/sendToUser") + @ApiOperation("发送消息提醒员工接口") + public AjaxResult sendToUser(@Validated @RequestBody WeCustomerMessageToUserDTO weCustomerMessageToUserDTO) { + weCustomerMessageToUserDTO.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + weCustomerMessagePushService.sendToUser(weCustomerMessageToUserDTO); + return AjaxResult.success(); + } + + +} diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeCustomerPortraitController.java b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeCustomerPortraitController.java new file mode 100644 index 0000000..5614a2a --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeCustomerPortraitController.java @@ -0,0 +1,232 @@ +package com.easyink.web.controller.wecom; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.easyink.common.core.controller.BaseController; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.core.domain.model.LoginUser; +import com.easyink.common.core.page.TableDataInfo; +import com.easyink.common.enums.CustomerTrajectoryEnums; +import com.easyink.wecom.domain.WeCustomerPortrait; +import com.easyink.wecom.domain.WeCustomerTrajectory; +import com.easyink.wecom.domain.WeTagGroup; +import com.easyink.wecom.domain.vo.WeMakeCustomerTagVO; +import com.easyink.wecom.login.util.LoginTokenService; +import com.easyink.wecom.service.*; +import com.github.pagehelper.PageInfo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.validation.constraints.NotBlank; + +/** + * @author admin + * @description: 客户画像相关controller + * @create: 2021-03-03 15:10 + **/ +@RestController +@RequestMapping("/wecom/portrait") +@Api(tags = "客户画像相关controller") +public class WeCustomerPortraitController extends BaseController { + + + private final WeCustomerService weCustomerService; + private final WeTagGroupService weTagGroupService; + private final WeUserService weUserService; + private final WeGroupService weGroupService; + private final WeCustomerTrajectoryService weCustomerTrajectoryService; + private final WeOperationsCenterSopDetailService sopDetailService; + + @Autowired + public WeCustomerPortraitController(WeCustomerService weCustomerService, WeTagGroupService weTagGroupService, WeUserService weUserService, WeGroupService weGroupService, WeCustomerTrajectoryService weCustomerTrajectoryService, WeOperationsCenterSopDetailService sopDetailService) { + this.weCustomerService = weCustomerService; + this.weTagGroupService = weTagGroupService; + this.weUserService = weUserService; + this.weGroupService = weGroupService; + this.weCustomerTrajectoryService = weCustomerTrajectoryService; + this.sopDetailService = sopDetailService; + } + + /** + * 根据客户id和当前企业员工id获取客户详细信息 + * + * @param externalUserid + * @param userId + * @return + */ + @ApiOperation("获取客户详细信息") + @GetMapping(value = "/findWeCustomerInfo") + public AjaxResult findWeCustomerInfo(@NotBlank(message = "外部联系人ID不能为空") String externalUserid, @NotBlank(message = "员工ID不能为空") String userId) { + return AjaxResult.success(weCustomerService.findCustomerByOperUseridAndCustomerId(externalUserid, userId, LoginTokenService.getLoginUser().getCorpId())); + } + + + /** + * 客户画像资料更新 + * + * @param weCustomerPortrait + * @return + */ + @ApiOperation("客户画像资料更新") + @PostMapping(value = "/updateWeCustomerInfo") + @Deprecated + public AjaxResult updateWeCustomerInfo(@RequestBody WeCustomerPortrait weCustomerPortrait) { + return AjaxResult.success(); + } + + + /** + * 获取当前系统所有可用标签 + * + * @return + */ + @ApiOperation("获取当前系统所有可用标签") + @GetMapping(value = "/findAllTags") + public AjaxResult findAllTags() { + return AjaxResult.success(weTagGroupService.selectWeTagGroupList(WeTagGroup.builder() + .corpId(LoginTokenService.getLoginUser().getCorpId()) + .build())); + } + + + /** + * 更新客户画像标签 + * + * @param weMakeCustomerTag + * @return + */ + @ApiOperation("更新客户画像标签") + @PostMapping(value = "/updateWeCustomerPorTraitTag") + public AjaxResult updateWeCustomerPorTraitTag(@Validated @RequestBody WeMakeCustomerTagVO weMakeCustomerTag) { + weMakeCustomerTag.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + weCustomerService.makeLabel(weMakeCustomerTag); + return AjaxResult.success(); + } + + + /** + * 查看客户添加的员工 + * + * @param externalUserid + * @return + */ + @ApiOperation("查看客户添加的员工") + @GetMapping(value = "/findAddaddEmployes/{externalUserid}") + public AjaxResult findaddEmployes(@PathVariable String externalUserid) { + return AjaxResult.success( + weUserService.findWeUserByCutomerId(LoginTokenService.getLoginUser().getCorpId(),externalUserid) + ); + } + + + /** + * 获取用户添加的群 + * + * @param externalUserid + * @param userId + * @return + */ + @ApiOperation("获取用户添加的群") + @GetMapping(value = "/findAddGroupNum") + public AjaxResult findAddGroupNum(@NotBlank(message = "外部联系人ID不能为空") String externalUserid, @NotBlank(message = "员工ID不能为空") String userId) { + return AjaxResult.success(weGroupService.findWeGroupByCustomer(userId, externalUserid, LoginTokenService.getLoginUser().getCorpId())); + } + + + /** + * 获取轨迹信息 + * + * @param trajectoryType + * @return + */ + @ApiOperation("获取轨迹信息") + @GetMapping(value = "/findTrajectory") + public TableDataInfo findTrajectory(String userId, String externalUserid, Integer trajectoryType) { + startPage(); + LoginUser loginUser = LoginTokenService.getLoginUser(); + + return getDataTable( + weCustomerTrajectoryService.listOfTrajectory(loginUser.getCorpId(), externalUserid, trajectoryType, userId) + ); + } + + @ApiOperation("修改任务完成状态") + @PutMapping(value = "/finishTask") + public AjaxResult finishTask(@RequestParam("detailId") Long detailId){ + sopDetailService.finishTask(LoginTokenService.getLoginUser().getCorpId(),detailId); + return AjaxResult.success(); + } + + @ApiOperation("获取待办事项数量") + @GetMapping(value = "/todoCount") + public AjaxResult getUnFinishedCount(@ApiParam("跟进人userId") @NotBlank(message = "参数缺失") String userId, + @ApiParam("外部联系人userId") @NotBlank(message = "参数缺失") String externalUserid) { + LoginUser loginUser = LoginTokenService.getLoginUser(); + return AjaxResult.success(weCustomerTrajectoryService.count(new LambdaQueryWrapper() + .eq(WeCustomerTrajectory::getCorpId, loginUser.getCorpId()) + .ne(WeCustomerTrajectory::getStatus, CustomerTrajectoryEnums.TodoTaskStatusEnum.DEL.getCode()) + .eq(WeCustomerTrajectory::getExternalUserid, externalUserid) + .eq(WeCustomerTrajectory::getTrajectoryType, CustomerTrajectoryEnums.Type.TO_DO.getType()) + .eq(WeCustomerTrajectory::getUserId, userId) + .in(WeCustomerTrajectory::getStatus, new String[]{CustomerTrajectoryEnums.TodoTaskStatusEnum.NORMAL.getCode(), CustomerTrajectoryEnums.TodoTaskStatusEnum.INFORMED.getCode()}) + )); + } + + @Override + protected TableDataInfo getDataTable(PageInfo pageInfo) { + return super.getDataTable(pageInfo); + } + + /** + * 添加或编辑轨迹 + * + * @param trajectory + * @return + */ + @ApiOperation("添加或编辑轨迹") + @PostMapping(value = "/addOrEditWaitHandle") + public AjaxResult addOrEditWaitHandle(@RequestBody WeCustomerTrajectory trajectory) { + trajectory.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + weCustomerTrajectoryService.saveOrUpdate(trajectory); + return AjaxResult.success(); + } + + + /** + * 删除轨迹 + * + * @param trajectoryId + * @return + */ + @ApiOperation("删除轨迹") + @DeleteMapping(value = "/removeTrajectory/{trajectoryId}") + public AjaxResult removeTrajectory(@PathVariable String trajectoryId) { + weCustomerTrajectoryService.updateById(WeCustomerTrajectory.builder() + .id(trajectoryId) + .status(CustomerTrajectoryEnums.TodoTaskStatusEnum.DEL.getCode()) + .build()); + return AjaxResult.success(); + } + + + /** + * 完成待办 + * + * @param trajectoryId + * @return + */ + @ApiOperation("完成待办") + @DeleteMapping(value = "/handleWait/{trajectoryId}") + public AjaxResult handleWait(@PathVariable String trajectoryId) { + weCustomerTrajectoryService.updateById(WeCustomerTrajectory.builder() + .id(trajectoryId) + .status(CustomerTrajectoryEnums.TodoTaskStatusEnum.FINISHED.getCode()) + .build()); + return AjaxResult.success(); + } + + +} diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeCustomerTransferRecordController.java b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeCustomerTransferRecordController.java new file mode 100644 index 0000000..6b02003 --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeCustomerTransferRecordController.java @@ -0,0 +1,88 @@ +package com.easyink.web.controller.wecom; + +import com.easyink.common.core.controller.BaseController; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.core.page.TableDataInfo; +import com.easyink.wecom.domain.WeCustomer; +import com.easyink.wecom.domain.dto.transfer.TransferCustomerDTO; +import com.easyink.wecom.domain.dto.transfer.TransferRecordPageDTO; +import com.easyink.wecom.domain.entity.transfer.WeCustomerTransferConfig; +import com.easyink.wecom.domain.vo.customer.WeCustomerVO; +import com.easyink.wecom.domain.vo.transfer.WeCustomerTransferRecordVO; +import com.easyink.wecom.login.util.LoginTokenService; +import com.easyink.wecom.service.WeCustomerTransferConfigService; +import com.easyink.wecom.service.WeCustomerTransferRecordService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * 类名: 在职继承分配记录表控制层接口 + * + * @author : silver_chariot + * @date : 2021/11/29 17:56 + */ +@RestController +@RequestMapping("/wecom/transfer") +@Api(tags = "在职继承接口") +public class WeCustomerTransferRecordController extends BaseController { + + private final WeCustomerTransferRecordService weCustomerTransferRecordService; + private final WeCustomerTransferConfigService weCustomerTransferConfigService; + + @Autowired + public WeCustomerTransferRecordController(@NotNull WeCustomerTransferRecordService weCustomerTransferRecordService, @NotNull WeCustomerTransferConfigService weCustomerTransferConfigService) { + this.weCustomerTransferRecordService = weCustomerTransferRecordService; + this.weCustomerTransferConfigService = weCustomerTransferConfigService; + } + + @PostMapping + @ApiOperation("在职继承") + @PreAuthorize("@ss.hasPermi('customerManage:active:transfer')") + public AjaxResult transfer(@Validated @RequestBody TransferCustomerDTO dto) { + String corpId = LoginTokenService.getLoginUser().getCorpId(); + weCustomerTransferRecordService.transfer(corpId, dto.getCustomerList(), dto.getTakeoverUserid(), dto.getTransferSuccessMsg()); + return AjaxResult.success(); + + } + + @GetMapping("/recordList") + @ApiOperation("在职继承记录列表") + @PreAuthorize("@ss.hasPermi('customerManage:transfer:record')") + public TableDataInfo recordList(@Validated TransferRecordPageDTO dto) { + startPage(); + dto.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + return getDataTable(weCustomerTransferRecordService.getList(dto)); + } + + @GetMapping("/customerList") + @ApiOperation("在职继承客户列表") + public TableDataInfo transferCustomerList(WeCustomer weCustomer) { + startPage(); + weCustomer.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + List list = weCustomerTransferRecordService.transferCustomerList(weCustomer); + return getDataTable(list); + } + + @GetMapping("/config") + @ApiOperation("获取继承设置") + public AjaxResult getConfig() { + return AjaxResult.success(weCustomerTransferConfigService.getById(LoginTokenService.getLoginUser().getCorpId())); + } + + @PutMapping("/editConfig") + @ApiOperation("修改继承设置") + @PreAuthorize("@ss.hasPermi('customerManage:transfer:config')") + public AjaxResult editConfig(@RequestBody WeCustomerTransferConfig weCustomerTransferConfig) { + weCustomerTransferConfig.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + weCustomerTransferConfigService.editConfig(weCustomerTransferConfig); + return AjaxResult.success(); + } + +} diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeDepartmentController.java b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeDepartmentController.java new file mode 100644 index 0000000..3bc3766 --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeDepartmentController.java @@ -0,0 +1,98 @@ +package com.easyink.web.controller.wecom; + +import com.easyink.common.annotation.Log; +import com.easyink.common.core.controller.BaseController; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.core.domain.model.LoginUser; +import com.easyink.common.core.domain.wecom.WeDepartment; +import com.easyink.common.enums.BusinessType; +import com.easyink.common.service.ISysDeptService; +import com.easyink.wecom.login.util.LoginTokenService; +import com.easyink.wecom.service.WeDepartmentService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 企业微信组织架构相关Controller + * + * @author admin + * @date 2020-09-01 + */ +@Api(value = "WeDepartmentController",tags = "微信部门相关接口") +@RestController +@RequestMapping("/wecom/department") +public class WeDepartmentController extends BaseController { + @Autowired + private WeDepartmentService weDepartmentService; + @Autowired + private ISysDeptService sysDeptService; + + + /** + * 查询企业微信组织架构相关列表 + */ + // @PreAuthorize("@ss.hasPermi('contacts:organization:list')") + @GetMapping("/list") + @ApiOperation("获取部门列表") + public AjaxResult list(Integer isActivate) { + LoginUser loginUser = LoginTokenService.getLoginUser(); + List list = weDepartmentService.selectWeDepartmentList(loginUser.getCorpId(), isActivate, loginUser); + return AjaxResult.success(list); + } + + + /** + * 新增企业微信组织架构相关 + */ + // @PreAuthorize("@ss.hasPermi('contacts:organization:addMember')") + @Log(title = "企业微信组织架构相关", businessType = BusinessType.INSERT) + @PostMapping + @ApiOperation("添加部门") + public AjaxResult add(@Validated @RequestBody WeDepartment weDepartment) { + LoginUser loginUser = LoginTokenService.getLoginUser(); + weDepartment.setCorpId(loginUser.getCorpId()); + if (weDepartmentService.insertWeDepartment(weDepartment)) { + // 刷新loginUser中的部门数据权限信息 + LoginTokenService.refreshDataScope(); + return AjaxResult.success(); + } + return AjaxResult.error(); + + } + + /** + * 修改企业微信组织架构相关 + */ + // @PreAuthorize("@ss.hasPermi('contacts:organization:editDep')") + @Log(title = "企业微信组织架构相关", businessType = BusinessType.UPDATE) + @PutMapping + @ApiOperation("更新部门") + public AjaxResult edit(@Validated @RequestBody WeDepartment weDepartment) { + LoginUser loginUser = LoginTokenService.getLoginUser(); + weDepartment.setCorpId(loginUser.getCorpId()); + weDepartmentService.updateWeDepartment(weDepartment); + // 修改员工部门后刷新 登录用户的数据权限 + LoginTokenService.refreshDataScope(); + return AjaxResult.success(); + } + + /** + * 删除企业微信组织架构相关 + */ + // @PreAuthorize("@ss.hasPermi('wecom:department:remove')") + @Log(title = "企业微信组织架构相关", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + @ApiOperation("删除企业微信组织架构相关") + public AjaxResult remove(@PathVariable String[] ids) { + LoginUser loginUser = LoginTokenService.getLoginUser(); + weDepartmentService.deleteWeDepartmentByIds(loginUser.getCorpId(), ids); + LoginTokenService.refreshDataScope(); + return AjaxResult.success(); + } + +} diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeEmpleCodeController.java b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeEmpleCodeController.java new file mode 100644 index 0000000..b25c026 --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeEmpleCodeController.java @@ -0,0 +1,196 @@ +package com.easyink.web.controller.wecom; + +import com.easyink.common.annotation.Log; +import com.easyink.common.constant.WeConstans; +import com.easyink.common.core.controller.BaseController; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.core.page.TableDataInfo; +import com.easyink.common.enums.BusinessType; +import com.easyink.common.enums.EmployCodeSourceEnum; +import com.easyink.common.enums.ResultTip; +import com.easyink.common.exception.CustomException; +import com.easyink.common.utils.StringUtils; +import com.easyink.common.utils.file.FileUtils; +import com.easyink.wecom.domain.WeEmpleCode; +import com.easyink.wecom.domain.WeEmpleCodeUseScop; +import com.easyink.wecom.domain.dto.emplecode.AddWeEmpleCodeDTO; +import com.easyink.wecom.domain.dto.emplecode.FindWeEmpleCodeAnalyseDTO; +import com.easyink.wecom.domain.dto.emplecode.FindWeEmpleCodeDTO; +import com.easyink.wecom.domain.vo.WeEmpleCodeVO; +import com.easyink.wecom.domain.vo.WeEmplyCodeScopeUserVO; +import com.easyink.wecom.login.util.LoginTokenService; +import com.easyink.wecom.service.WeEmpleCodeAnalyseService; +import com.easyink.wecom.service.WeEmpleCodeService; +import com.easyink.wecom.service.WeEmpleCodeUseScopService; +import com.easyink.wecom.service.WeFlowerCustomerRelService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.exception.ExceptionUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 类名: WeEmpleCodeController + * + * @author 佚名 + * @date 2021/9/30 15:52 + */ +@RestController +@RequestMapping("/wecom/code") +@Slf4j +@Api(tags = "员工活码Controller") +public class WeEmpleCodeController extends BaseController { + + private final WeEmpleCodeService weEmpleCodeService; + private final WeFlowerCustomerRelService weFlowerCustomerRelService; + private final WeEmpleCodeUseScopService weEmpleCodeUseScopService; + private final WeEmpleCodeAnalyseService weEmpleCodeAnalyseService; + + @Autowired + public WeEmpleCodeController(WeEmpleCodeService weEmpleCodeService, WeFlowerCustomerRelService weFlowerCustomerRelService, WeEmpleCodeUseScopService weEmpleCodeUseScopService, WeEmpleCodeAnalyseService weEmpleCodeAnalyseService) { + this.weEmpleCodeService = weEmpleCodeService; + this.weFlowerCustomerRelService = weFlowerCustomerRelService; + this.weEmpleCodeUseScopService = weEmpleCodeUseScopService; + this.weEmpleCodeAnalyseService = weEmpleCodeAnalyseService; + } + + + @PreAuthorize("@ss.hasPermi('wecom:code:add')") + @Log(title = "员工活码", businessType = BusinessType.INSERT) + @PostMapping("/add") + @ApiOperation("新增员工活码") + public AjaxResult add(@RequestBody @Validated AddWeEmpleCodeDTO addWeEmpleCodeDTO) { + addWeEmpleCodeDTO.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + addWeEmpleCodeDTO.setSource(EmployCodeSourceEnum.CODE_CREATE.getSource()); + weEmpleCodeService.insertWeEmpleCode(addWeEmpleCodeDTO); + return AjaxResult.success(); + } + + + @GetMapping("/list") + @ApiOperation("查询员工活码列表") + public TableDataInfo list(FindWeEmpleCodeDTO weEmpleCode) { + weEmpleCode.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + startPage(); + weEmpleCode.setSource(EmployCodeSourceEnum.CODE_CREATE.getSource()); + List list = weEmpleCodeService.selectWeEmpleCodeList(weEmpleCode); + return getDataTable(list); + } + + + @PreAuthorize("@ss.hasPermi('wecom:code:query')") + @GetMapping(value = "/{id}") + @ApiOperation("获取员工活码详细信息") + public AjaxResult getInfo(@PathVariable("id") Long id) { + return AjaxResult.success(weEmpleCodeService.selectWeEmpleCodeById(id, LoginTokenService.getLoginUser().getCorpId())); + } + + @PreAuthorize("@ss.hasPermi('wecom:code:edit')") + @Log(title = "员工活码", businessType = BusinessType.UPDATE) + @PutMapping("/update") + @ApiOperation("修改员工活码") + public AjaxResult edit(@Validated @RequestBody AddWeEmpleCodeDTO weEmpleCode) { + weEmpleCode.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + weEmpleCodeService.updateWeEmpleCode(weEmpleCode); + return AjaxResult.success(); + } + + @PreAuthorize("@ss.hasPermi('wecom:code:remove')") + @Log(title = "员工活码", businessType = BusinessType.DELETE) + @DeleteMapping("/delete/{ids}") + @ApiOperation("删除员工活码") + public AjaxResult remove(@PathVariable String ids) { + String corpId = LoginTokenService.getLoginUser().getCorpId(); + List idList = Arrays.stream(StringUtils.split(ids, ",")).map(s -> Long.parseLong(s.trim())).collect(Collectors.toList()); + return toAjax(weEmpleCodeService.batchRemoveWeEmpleCodeIds(corpId, idList)); + } + + + // @PreAuthorize("@ss.hasPermi('wecom:code:qrcode')") + @Log(title = "获取员工二维码", businessType = BusinessType.DELETE) + @GetMapping("/getQrcode") + @ApiOperation("获取员工二维码") + public AjaxResult getQrcode(String userIds, String departmentIds) { + String corpId = LoginTokenService.getLoginUser().getCorpId(); + return AjaxResult.success(weEmpleCodeService.getQrcode(userIds, departmentIds, corpId)); + } + + /** + * 员工活码批量下载 + * + * @param ids 员工活码ids + * @param response 输出 + */ + @Log(title = "员工活码批量下载", businessType = BusinessType.OTHER) + @GetMapping("/downloadBatch") + @ApiOperation("员工活码批量下载") + public void downloadBatch(String ids, HttpServletResponse response) { + List> fileList = Arrays + .stream(Optional.ofNullable(ids).orElse(StringUtils.EMPTY).split(WeConstans.COMMA)) + .filter(StringUtils::isNotEmpty) + .map(id -> { + WeEmpleCode code = weEmpleCodeService.getById(id); + List weEmpleCodeUseScops = weEmpleCodeUseScopService.selectWeEmpleCodeUseScopListById(Long.parseLong(id), LoginTokenService.getLoginUser().getCorpId()); + Map fileMap = new HashMap<>(); + //code=null说明活码已被删除,不下载 + if (code != null) { + //查出使用者 + StringBuilder useUserName = new StringBuilder(); + if (CollectionUtils.isNotEmpty(weEmpleCodeUseScops)) { + weEmpleCodeUseScops.forEach(weEmpleCodeUseScop -> useUserName.append(weEmpleCodeUseScop.getBusinessName()).append(WeConstans.COMMA)); + useUserName.deleteCharAt(useUserName.lastIndexOf(WeConstans.COMMA)); + } + fileMap.put("fileName", useUserName + "-" + code.getScenario() + ".jpg"); + fileMap.put("url", code.getQrCode()); + } + return fileMap; + }) + .collect(Collectors.toList()); + try { + FileUtils.batchDownloadFile(fileList, response.getOutputStream()); + } catch (Exception e) { + log.error("员工活码批量下载异常 ex:{}", ExceptionUtils.getStackTrace(e)); + } + } + + @Log(title = "员工活码下载", businessType = BusinessType.OTHER) + @GetMapping("/download") + @ApiOperation("员工活码下载") + public void download(String id, HttpServletResponse response) { + WeEmpleCode weEmpleCode = weEmpleCodeService.selectWeEmpleCodeById(Long.valueOf(id), LoginTokenService.getLoginUser().getCorpId()); + if (StringUtils.isEmpty(weEmpleCode.getQrCode())) { + throw new CustomException("活码不存在"); + } + try { + FileUtils.downloadFile(weEmpleCode.getQrCode(), response.getOutputStream()); + } catch (IOException e) { + log.error("员工活码下载异常 ex:{}", ExceptionUtils.getStackTrace(e)); + throw new CustomException(ResultTip.TIP_DOWNLOAD_ERROR); + } + } + + @Log(title = "时间段内新增和流失客户数据统计", businessType = BusinessType.OTHER) + @GetMapping("/getTimeRangeAnalyseCount") + @ApiOperation("时间段内新增和流失客户数据统计") + public AjaxResult getTimeRangeAnalyseCount(@Validated FindWeEmpleCodeAnalyseDTO findWeEmpleCodeAnalyseDTO) { + findWeEmpleCodeAnalyseDTO.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + return AjaxResult.success(weEmpleCodeAnalyseService.getTimeRangeAnalyseCount(findWeEmpleCodeAnalyseDTO)); + } + + @Log(title = "获取员工活码的使用员工数据", businessType = BusinessType.OTHER) + @GetMapping("/getUserByEmplyCode/{id}") + @ApiOperation("获取员工活码的使用员工数据") + public AjaxResult> getUserByEmplyCode(@PathVariable Long id) { + return AjaxResult.success(weEmpleCodeService.getUserByEmplyCode(LoginTokenService.getLoginUser().getCorpId(), id)); + } + +} diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeGroupCodeActualController.java b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeGroupCodeActualController.java new file mode 100644 index 0000000..058a94e --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeGroupCodeActualController.java @@ -0,0 +1,92 @@ +package com.easyink.web.controller.wecom; + +import com.easyink.common.annotation.Log; +import com.easyink.common.constant.WeConstans; +import com.easyink.common.core.controller.BaseController; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.core.page.TableDataInfo; +import com.easyink.common.enums.BusinessType; +import com.easyink.common.enums.ResultTip; +import com.easyink.common.utils.DateUtils; +import com.easyink.common.utils.StringUtils; +import com.easyink.wecom.domain.WeGroupCodeActual; +import com.easyink.wecom.service.WeGroupCodeActualService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 实际群码接口 + * 类名: WeGroupCodeActualController + * + * @author 佚名 + * @date 2021/9/30 16:05 + */ +@RestController +@RequestMapping("/wecom/actual") +@Api(tags = "实际群码Controller") +public class WeGroupCodeActualController extends BaseController { + @Autowired + private WeGroupCodeActualService weGroupCodeActualService; + + // @PreAuthorize("@ss.hasPermi('wecom:actual:list')") + @GetMapping("/list") + @ApiOperation("查询实际群码列表") + public TableDataInfo list(WeGroupCodeActual weGroupCodeActual) { + startPage(); + List list = weGroupCodeActualService.selectWeGroupCodeActualList(weGroupCodeActual); + list.forEach(groupCode -> { + //如果为2099年 显示空值给前端 + if (DateUtils.isSameDay(groupCode.getEffectTime(), DateUtils.dateTime(com.easyink.common.utils.DateUtils.YYYY_MM_DD_HH_MM, WeConstans.DEFAULT_MATERIAL_NOT_EXPIRE))) { + groupCode.setEffectTime(null); + } + }); + return getDataTable(list); + } + + // @PreAuthorize("@ss.hasPermi('wecom:actual:query')") + @GetMapping(value = "/{id}") + @ApiOperation("获取实际群码详细信息") + public AjaxResult getInfo(@PathVariable("id") Long id) { + WeGroupCodeActual weGroupCodeActual = weGroupCodeActualService.selectWeGroupCodeActualById(id); + if (StringUtils.isNull(weGroupCodeActual)) { + return AjaxResult.error(ResultTip.TIP_GENERAL_NOT_FOUND, "数据不存在"); + } + return AjaxResult.success(weGroupCodeActual); + } + + // @PreAuthorize("@ss.hasPermi('wecom:actual:add')") + @Log(title = "实际群码", businessType = BusinessType.INSERT) + @PostMapping + @ApiOperation("新增实际群码查询") + @Deprecated + public AjaxResult add(@Validated @RequestBody WeGroupCodeActual weGroupCodeActual) { + return toAjax(weGroupCodeActualService.insertWeGroupCodeActual(weGroupCodeActual)); + } + + // @PreAuthorize("@ss.hasPermi('wecom:actual:edit')") + @Log(title = "实际群码", businessType = BusinessType.UPDATE) + @PutMapping + @ApiOperation("修改实际群码") + public AjaxResult edit(@RequestBody WeGroupCodeActual weGroupCodeActual) { + WeGroupCodeActual original = weGroupCodeActualService.selectWeGroupCodeActualById(weGroupCodeActual.getId()); + if (StringUtils.isNull(original)) { + return AjaxResult.error(ResultTip.TIP_GENERAL_NOT_FOUND, "数据不存在"); + } + return toAjax(weGroupCodeActualService.updateWeGroupCodeActual(weGroupCodeActual)); + } + + // @PreAuthorize("@ss.hasPermi('wecom:actual:remove')") + @Log(title = "实际群码", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + @ApiOperation("删除实际群码") + public AjaxResult remove(@PathVariable Long[] ids) { + return toAjax(weGroupCodeActualService.deleteWeGroupCodeActualByIds(ids)); + } + + +} diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeGroupCodeController.java b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeGroupCodeController.java new file mode 100644 index 0000000..da7b1ce --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeGroupCodeController.java @@ -0,0 +1,202 @@ +package com.easyink.web.controller.wecom; + +import com.easyink.common.annotation.Log; +import com.easyink.common.constant.WeConstans; +import com.easyink.common.core.controller.BaseController; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.core.page.TableDataInfo; +import com.easyink.common.enums.BusinessType; +import com.easyink.common.enums.ResultTip; +import com.easyink.common.utils.DateUtils; +import com.easyink.common.utils.StringUtils; +import com.easyink.common.utils.file.FileUtils; +import com.easyink.framework.web.service.FileService; +import com.easyink.wecom.domain.WeGroupCode; +import com.easyink.wecom.domain.WeGroupCodeActual; +import com.easyink.wecom.domain.dto.FindWeGroupCodeDTO; +import com.easyink.wecom.domain.query.groupcode.GroupCodeDetailQuery; +import com.easyink.wecom.domain.vo.groupcode.GroupCodeActivityFirstVO; +import com.easyink.wecom.domain.vo.groupcode.GroupCodeDetailVO; +import com.easyink.wecom.login.util.LoginTokenService; +import com.easyink.wecom.service.WeCorpAccountService; +import com.easyink.wecom.service.WeGroupCodeService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.exception.ExceptionUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.*; +import java.util.stream.Collectors; + + +/** + * 客户群活码Controller + * 类名: WeGroupCodeController + * + * @author 佚名 + * @date 2021/9/30 16:07 + */ +@Api(tags = "客户群活码Controller") +@RestController +@RequestMapping("/wecom/groupCode") +@Slf4j +@Validated +public class WeGroupCodeController extends BaseController { + + private final WeGroupCodeService groupCodeService; + private final FileService fileService; + private final WeCorpAccountService weCorpAccountService; + + @Autowired + public WeGroupCodeController(WeGroupCodeService groupCodeService, FileService fileService, WeCorpAccountService weCorpAccountService) { + this.groupCodeService = groupCodeService; + this.fileService = fileService; + this.weCorpAccountService = weCorpAccountService; + } + + /** + * 查询客户群活码列表 + */ + @ApiOperation(value = "查询客户群活码列表", httpMethod = "GET") +// @PreAuthorize("@ss.hasPermi('wecom:groupCode:list')") + @GetMapping("/list") + public TableDataInfo list(FindWeGroupCodeDTO weGroupCode) { + startPage(); + //设置企业id + weGroupCode.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + List list = groupCodeService.selectWeGroupCodeList(weGroupCode); + return getDataTable(list); + } + + @ApiOperation(value = "批量下载群活码", httpMethod = "GET") + @Log(title = "群活码批量下载", businessType = BusinessType.OTHER) + @GetMapping("/downloadBatch") + public void downloadBatch(String ids, HttpServletRequest request, HttpServletResponse response) { + // 构建文件信息列表 + List> fileList = Arrays + .stream(Optional.ofNullable(ids).orElse("").split(",")) + .filter(StringUtils::isNotEmpty) + .map(id -> { + WeGroupCode code = groupCodeService.getById(id); + Map fileMap = new HashMap<>(); + fileMap.put("fileName", code.getActivityName() + ".png"); + fileMap.put("url", code.getCodeUrl()); + return fileMap; + }) + .collect(Collectors.toList()); + try { + FileUtils.batchDownloadFile(fileList, response.getOutputStream()); + } catch (IOException e) { + log.error("下载群活码异常 ex:{}", ExceptionUtils.getStackTrace(e)); + } + } + + @ApiOperation(value = "群活码下载", httpMethod = "GET") + @Log(title = "群活码下载", businessType = BusinessType.OTHER) + @GetMapping("/download") + public void download(String id, HttpServletResponse response) { + WeGroupCode weGroupCode = groupCodeService.getById(Long.valueOf(id)); + try { + FileUtils.downloadFile(weGroupCode.getCodeUrl(), response.getOutputStream()); + } catch (IOException e) { + log.error("下载群活码异常 ex:{}", ExceptionUtils.getStackTrace(e)); + } + } + + @ApiOperation(value = "获取客户群活码详细信息", httpMethod = "GET") + @GetMapping + public AjaxResult getInfo(@Validated GroupCodeDetailQuery groupCodeDetailQuery) { + WeGroupCode weGroupCode = groupCodeService.getById(groupCodeDetailQuery.getId()); + if (StringUtils.isNull(weGroupCode)) { + return AjaxResult.error(ResultTip.TIP_GENERAL_NOT_FOUND, "数据不存在"); + } + startPage(); + List groupCodeDetailVOList = groupCodeService.getGroupCodeDetail(groupCodeDetailQuery, weGroupCode.getCreateType()); + groupCodeDetailVOList.forEach(groupCode -> { + //如果为2099年 显示空值给前端 + if (DateUtils.isSameDay(groupCode.getEffectTime(), DateUtils.dateTime(com.easyink.common.utils.DateUtils.YYYY_MM_DD_HH_MM, WeConstans.DEFAULT_MATERIAL_NOT_EXPIRE))) { + groupCode.setEffectTime(null); + } + }); + weGroupCode.setGroupCodeDetailVOList(groupCodeDetailVOList); + return AjaxResult.success(weGroupCode); + } + + /** + * 新增客户群活码 + */ + @PreAuthorize("@ss.hasPermi('wecom:groupCode:add')") + @Log(title = "客户群活码", businessType = BusinessType.INSERT) + @ApiOperation(value = "新增客户群活码", httpMethod = "POST") + @PostMapping + public AjaxResult add(@Validated @RequestBody WeGroupCode weGroupCode) { + weGroupCode.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + if (LoginTokenService.getLoginUser().isSuperAdmin()) { + weGroupCode.setCreateBy(LoginTokenService.getUsername()); + } else { + //员工则保存userId + weGroupCode.setCreateBy(LoginTokenService.getLoginUser().getWeUser().getUserId()); + } + groupCodeService.add(weGroupCode); + return AjaxResult.success(); + } + + /** + * 修改客户群活码 + */ + @ApiOperation(value = "修改客户群活码", httpMethod = "PUT") + @PreAuthorize("@ss.hasPermi('wecom:groupCode:edit')") + @Log(title = "客户群活码", businessType = BusinessType.UPDATE) + @PutMapping(value = "/{id}") + public AjaxResult edit(@PathVariable("id") Long id, @RequestBody WeGroupCode weGroupCode) { + weGroupCode.setId(id); + weGroupCode.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + if (LoginTokenService.getLoginUser().isSuperAdmin()) { + weGroupCode.setUpdateBy(LoginTokenService.getUsername()); + } else { + //员工则保存userId + weGroupCode.setUpdateBy(LoginTokenService.getLoginUser().getWeUser().getUserId()); + } + ; + return toAjax(groupCodeService.edit(weGroupCode)); + } + + /** + * 删除客户群活码 + */ + @ApiOperation(value = "删除客户群活码", httpMethod = "DELETE") + @PreAuthorize("@ss.hasPermi('wecom:groupCode:remove')") + @Log(title = "客户群活码", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult batchRemove(@PathVariable Long[] ids) { + return toAjax(groupCodeService.remove(ids)); + } + + /** + * 从群活码获取第一个可用的实际码 + */ + @ApiOperation(value = "从群活码获取第一个可用的实际码", httpMethod = "GET") + @GetMapping("/getActualCode/{groupCodeId}") + public AjaxResult getActual(@PathVariable("groupCodeId") Long id) { + WeGroupCode groupCode = groupCodeService.getById(id); + if (groupCode == null) { + return AjaxResult.success(ResultTip.TIP_NO_AVAILABLE_GROUP_CODE.getTipMsg()); + } + GroupCodeActivityFirstVO activityFirstVO = groupCodeService.doGetActual(id, groupCode); + + if (activityFirstVO != null) { + return AjaxResult.success(activityFirstVO); + } + // 找不到可用的实际群活码也不要抛出错误,否则前端H5页面不好处理。 + return AjaxResult.success(ResultTip.TIP_NO_AVAILABLE_GROUP_CODE.getTipMsg()); + } + + +} diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeGroupCodeCorpActualController.java b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeGroupCodeCorpActualController.java new file mode 100644 index 0000000..5dc2f15 --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeGroupCodeCorpActualController.java @@ -0,0 +1,63 @@ +package com.easyink.web.controller.wecom; + +import com.easyink.common.annotation.Log; +import com.easyink.common.core.controller.BaseController; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.enums.BusinessType; +import com.easyink.wecom.domain.WeGroupCodeActual; +import com.easyink.wecom.domain.dto.groupcode.AddCorpCodeDTO; +import com.easyink.wecom.domain.dto.groupcode.EditCorpCodeDTO; +import com.easyink.wecom.login.util.LoginTokenService; +import com.easyink.wecom.service.WeGroupCodeActualService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 企业微信活码Controller + * + * @author tigger + * 2022/2/9 16:14 + **/ +@RestController +@RequestMapping("/wecom/corp/actual") +@Api(tags = "企业微信活码Controller") +public class WeGroupCodeCorpActualController extends BaseController { + + private WeGroupCodeActualService weGroupCodeActualService; + + + @Autowired + public WeGroupCodeCorpActualController(WeGroupCodeActualService weGroupCodeActualService) { + this.weGroupCodeActualService = weGroupCodeActualService; + } + + + @Log(title = "新增企业微信活码", businessType = BusinessType.INSERT) + @PostMapping + @ApiOperation("新增企业微信活码") + public AjaxResult> addCorpCode(@Validated @RequestBody AddCorpCodeDTO addCorpCodeDTO) { + return AjaxResult.success(weGroupCodeActualService.addBatch(addCorpCodeDTO.getWeGroupCodeCorpActualList(), addCorpCodeDTO.getGroupCodeId(), LoginTokenService.getLoginUser().getCorpId())); + } + + + @Log(title = "修改企业微信活码", businessType = BusinessType.UPDATE) + @PutMapping + @ApiOperation("修改企业微信活码") + public AjaxResult editCorpCpde(@Validated @RequestBody EditCorpCodeDTO editCorpCodeDTO) { + return toAjax(weGroupCodeActualService.editBatch(editCorpCodeDTO.getWeGroupCodeCorpActualList(), editCorpCodeDTO.getGroupCodeId(), LoginTokenService.getLoginUser().getCorpId())); + } + + @Log(title = "删除企业微信活码", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + @ApiOperation("删除企业微信活码") + public AjaxResult removeCorpCode(@PathVariable(value = "ids") List removeIds) { + + return toAjax(weGroupCodeActualService.removeBatch(removeIds, LoginTokenService.getLoginUser().getCorpId())); + } + +} diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeGroupController.java b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeGroupController.java new file mode 100644 index 0000000..77ba57b --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeGroupController.java @@ -0,0 +1,128 @@ +package com.easyink.web.controller.wecom; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.easyink.common.constant.WeConstans; +import com.easyink.common.core.controller.BaseController; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.core.page.TableDataInfo; +import com.easyink.wecom.domain.vo.AllocateWeGroupResp; +import com.easyink.wecom.domain.WeGroup; +import com.easyink.wecom.domain.WeGroupMember; +import com.easyink.wecom.domain.dto.FindWeGroupDTO; +import com.easyink.wecom.domain.dto.FindWeGroupMemberDTO; +import com.easyink.wecom.domain.vo.FindWeGroupMemberCountVO; +import com.easyink.wecom.domain.vo.WeLeaveAllocateVO; +import com.easyink.wecom.login.util.LoginTokenService; +import com.easyink.wecom.service.WeGroupMemberService; +import com.easyink.wecom.service.WeGroupService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.exception.ExceptionUtils; +import org.apache.poi.ss.formula.functions.T; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.security.core.context.SecurityContext; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.web.bind.annotation.*; + +import javax.validation.constraints.NotBlank; +import java.util.List; + +/** + * 群组相关 + * + * @author admin + * @Description: + * @Date: create in 2020/9/21 0021 23:53 + */ + +@RestController +@RequestMapping("/wecom/group/chat") +@Slf4j +@Api(tags = "群组相关") +public class WeGroupController extends BaseController { + @Autowired + private WeGroupService weGroupService; + + @Autowired + private WeGroupMemberService weGroupMemberService; + + @GetMapping({"/list"}) + @ApiOperation("查看群列表") + public TableDataInfo list(FindWeGroupDTO weGroup) { + startPage(); + weGroup.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + List list = this.weGroupService.list(weGroup); + return getDataTable(list); + } + + + @PreAuthorize("@ss.hasPermi('customerManage:group:view')") + @GetMapping({"/members"}) + @ApiOperation("群成员列表") + public TableDataInfo list(FindWeGroupMemberDTO weGroupMember) { + startPage(); + weGroupMember.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + List list = this.weGroupMemberService.selectWeGroupMemberList(weGroupMember); + return getDataTable(list); + } + + @PreAuthorize("@ss.hasPermi('customerManage:group:sync')") + @GetMapping({"/synchWeGroup"}) + @ApiOperation("同步客户群") + public AjaxResult synchWeGroup() { + try { + SecurityContext context = SecurityContextHolder.getContext(); + SecurityContextHolder.setStrategyName(SecurityContextHolder.MODE_INHERITABLETHREADLOCAL); + SecurityContextHolder.setContext(context); + weGroupService.syncWeGroup(LoginTokenService.getLoginUser().getCorpId()); + } catch (Exception e) { + log.error("同步客户群异常 ex:{}", ExceptionUtils.getStackTrace(e)); + } + return AjaxResult.success(WeConstans.SYNCH_TIP); + } + + /** + * 离职分配单个客户群 + * + * @param weLeaveAllocateVO + * @return + */ + @PostMapping({"/allocateSingleGroup"}) + @ApiOperation("客户离职继承分配") + @Deprecated + public AjaxResult allocateSingleGroup(@RequestBody WeLeaveAllocateVO weLeaveAllocateVO) { + return AjaxResult.success(); + } + + /** + * 根据员工id获取员工相关群 + * + * @param userId + * @return + */ + @GetMapping({"/getGroupsByUserId/{userId}"}) + @ApiOperation("根据员工id获取员工相关群") + public AjaxResult getGroupsByUserId(@PathVariable String userId) { + return AjaxResult.success(weGroupService + .list(new LambdaQueryWrapper().eq(WeGroup::getOwner, userId))); + } + + + + @GetMapping(value = "/allocatedStaffDetail") + @ApiOperation("根据群聊id获取群聊详情") + public AjaxResult allocatedStaffDetail(@NotBlank(message = "群id不能为空") String charId){ + return AjaxResult.success(weGroupService.selectWeGroupDetail(charId,LoginTokenService.getLoginUser().getCorpId())); + } + + + @GetMapping(value = "/getMemberCount") + @ApiOperation("获取群成员数量") + public AjaxResult getMemberCount(FindWeGroupMemberDTO findWeGroupMemberDTO){ + findWeGroupMemberDTO.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + return AjaxResult.success(weGroupMemberService.selectWeGroupMemberCount(findWeGroupMemberDTO)); + } + +} diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeGroupSopController.java b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeGroupSopController.java new file mode 100644 index 0000000..8665e4b --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeGroupSopController.java @@ -0,0 +1,173 @@ +package com.easyink.web.controller.wecom; + +import com.easyink.common.annotation.Log; +import com.easyink.common.core.controller.BaseController; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.core.domain.model.LoginUser; +import com.easyink.common.core.page.TableDataInfo; +import com.easyink.common.enums.BusinessType; +import com.easyink.wecom.domain.dto.customersop.EditUserDTO; +import com.easyink.wecom.domain.dto.groupsop.*; +import com.easyink.wecom.domain.vo.sop.*; +import com.easyink.wecom.login.util.LoginTokenService; +import com.easyink.wecom.service.WeGroupSopV2Service; +import com.easyink.wecom.service.WeOperationsCenterSopDetailService; +import com.easyink.wecom.service.WeOperationsCenterSopService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 类名:WeGroupSopController + * + * @author Society my sister Li + * @date 2021-11-30 14:54 + */ +@RestController +@RequestMapping("/wecom/sop") +@Api(tags = "SOP相关接口") +public class WeGroupSopController extends BaseController { + + private final WeGroupSopV2Service weGroupSopV2Service; + private final WeOperationsCenterSopService sopService; + private final WeOperationsCenterSopDetailService weOperationsCenterSopDetailService; + + @Autowired + public WeGroupSopController(WeGroupSopV2Service weGroupSopV2Service, WeOperationsCenterSopService sopService, WeOperationsCenterSopDetailService weOperationsCenterSopDetailService) { + this.weGroupSopV2Service = weGroupSopV2Service; + this.sopService = sopService; + this.weOperationsCenterSopDetailService = weOperationsCenterSopDetailService; + } + + @Log(title = "新增SOP(客户sop/群sop)", businessType = BusinessType.INSERT) + @PostMapping + @ApiOperation("新增SOP(客户sop/群sop)") + @PreAuthorize("@ss.hasPermi('wecom:groupSop:add') || @ss.hasPermi('wecom:customerSop:add') || @ss.hasPermi('wecom:groupCalendar:add')") + public AjaxResult add(@Validated @RequestBody AddWeGroupSopDTO addWeGroupSopDTO) { + LoginUser loginUser = LoginTokenService.getLoginUser(); + addWeGroupSopDTO.setCreateBy(loginUser.getWeUser() == null ? loginUser.getUsername() : loginUser.getWeUser().getUserId()); + addWeGroupSopDTO.setCorpId(loginUser.getCorpId()); + weGroupSopV2Service.addSop(addWeGroupSopDTO); + return AjaxResult.success(); + } + + + @Log(title = "删除SOP(定时SOP/循环SOP)", businessType = BusinessType.DELETE) + @DeleteMapping("/del") + @ApiOperation("删除SOP(定时SOP/循环SOP)") + @PreAuthorize("@ss.hasPermi('wecom:groupSop:del') || @ss.hasPermi('wecom:customerSop:del') || @ss.hasPermi('wecom:groupCalendar:del')") + public AjaxResult delSop(@Validated @RequestBody DelWeGroupSopDTO delWeGroupSopDTO) { + LoginUser loginUser = LoginTokenService.getLoginUser(); + delWeGroupSopDTO.setCorpId(loginUser.getCorpId()); + weGroupSopV2Service.delSop(delWeGroupSopDTO); + return AjaxResult.success(); + } + + + @Log(title = "查询SOP列表", businessType = BusinessType.OTHER) + @GetMapping("/list") + @ApiOperation("查询SOP列表") + public TableDataInfo list(@Validated FindWeGroupSopDTO findWeGroupSopDTO) { + startPage(); + List list = sopService.list(LoginTokenService.getLoginUser().getCorpId(), findWeGroupSopDTO.getSopType(), findWeGroupSopDTO.getName(), findWeGroupSopDTO.getUserName(), findWeGroupSopDTO.getIsOpen()); + return getDataTable(list); + } + + + @Log(title = "SOP批量开关", businessType = BusinessType.UPDATE) + @PutMapping("/batchSwitch") + @ApiOperation("SOP批量开关") + @PreAuthorize("@ss.hasPermi('wecom:groupSop:switch') || @ss.hasPermi('wecom:customerSop:switch') || @ss.hasPermi('wecom:groupCalendar:switch')") + public AjaxResult batchSwitch(@Validated @RequestBody SopBatchSwitchDTO switchDTO) { + switchDTO.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + sopService.batchSwitch(switchDTO); + return AjaxResult.success(); + } + + @Log(title = "修改SOP", businessType = BusinessType.UPDATE) + @PutMapping("/update") + @ApiOperation("修改SOP") + @PreAuthorize("@ss.hasPermi('wecom:groupSop:edit') || @ss.hasPermi('wecom:customerSop:edit') || @ss.hasPermi('wecom:groupCalendar:edit')") + public AjaxResult update(@Validated @RequestBody UpdateWeSopDTO updateWeSopDTO) { + updateWeSopDTO.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + weGroupSopV2Service.update(updateWeSopDTO); + return AjaxResult.success(); + } + + @Log(title = "修改SOP使用员工", businessType = BusinessType.UPDATE) + @PutMapping("/editUser") + @ApiOperation("修改SOP使用员工") + @PreAuthorize("@ss.hasPermi('wecom:customerSop:edit')") + public AjaxResult editUser(@Validated @RequestBody EditUserDTO updateWeSopDTO) { + updateWeSopDTO.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + sopService.editUser(updateWeSopDTO); + return AjaxResult.success(); + } + + @ApiOperation("查询客户SOP类型的执行详情") + @GetMapping("/detail/list/customer") + public TableDataInfo listByCustomer(@Validated FindWeSopDetailDTO findWeSopDetailDTO){ + startPage(); + findWeSopDetailDTO.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + List list = weOperationsCenterSopDetailService.getSopDetailBySopIdWithCustomerType(findWeSopDetailDTO); + return getDataTable(list); + } + + @ApiOperation("查询群SOP定时类型的执行详情") + @GetMapping("/detail/list/timing") + public TableDataInfo listByTiming(@Validated FindWeSopDetailDTO findWeSopDetailDTO){ + startPage(); + findWeSopDetailDTO.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + List list = weOperationsCenterSopDetailService.getSopDetailBySopIdWithTimingType(findWeSopDetailDTO); + return getDataTable(list); + } + + @ApiOperation("查询群SOP循环类型的执行详情") + @GetMapping("/detail/list/cycle") + public TableDataInfo listByCycle(@Validated FindWeSopDetailDTO findWeSopDetailDTO){ + startPage(); + findWeSopDetailDTO.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + List list = weOperationsCenterSopDetailService.getSopDetailBySopIdWithCycleType(findWeSopDetailDTO); + return getDataTable(list); + } + + + @GetMapping("/listOfDetail") + @ApiOperation("sop详情") + public AjaxResult listOfDetail(@RequestParam("sopId") Long sopId) { + return AjaxResult.success(sopService.listOfDetail(sopId, LoginTokenService.getLoginUser().getCorpId())); + } + + @Log(title = "sop规则执行记录分页", businessType = BusinessType.OTHER) + @ApiOperation("sop规则执行记录分页") + @GetMapping("/rules") + public TableDataInfo listRecordByRule(@Validated FindWeSopExecutedRulesDTO findWeSopExecutedRulesDTO){ + startPage(); + findWeSopExecutedRulesDTO.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + List list = weOperationsCenterSopDetailService.getSopExecutedRulesBySopId(findWeSopExecutedRulesDTO); + return getDataTable(list); + } + + @Log(title = "sop员工执行记录分页", businessType = BusinessType.OTHER) + @ApiOperation("sop员工执行记录分页") + @GetMapping("/users") + public TableDataInfo listRecordByUser(@Validated FindWeSopExecutedUsersDTO findWeSopExecutedUsersDTO){ + startPage(); + findWeSopExecutedUsersDTO.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + List list = weOperationsCenterSopDetailService.getSopExecutedUsersBySopId(findWeSopExecutedUsersDTO); + return getDataTable(list); + } + + @Log(title = "sop任务统计", businessType = BusinessType.OTHER) + @ApiOperation("sop任务统计") + @GetMapping("/count") + public AjaxResult taskCount(@RequestParam("sopId") String sopId){ + return AjaxResult.success(weOperationsCenterSopDetailService.taskCount(sopId, LoginTokenService.getLoginUser().getCorpId())); + } + +} diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeGroupTagController.java b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeGroupTagController.java new file mode 100644 index 0000000..e714ee6 --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeGroupTagController.java @@ -0,0 +1,113 @@ +package com.easyink.web.controller.wecom; + +import com.easyink.common.annotation.Log; +import com.easyink.common.core.controller.BaseController; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.core.page.TableDataInfo; +import com.easyink.common.enums.BusinessType; +import com.easyink.wecom.domain.dto.wegrouptag.*; +import com.easyink.wecom.domain.vo.wegrouptag.PageWeGroupTagCategoryVO; +import com.easyink.wecom.login.util.LoginTokenService; +import com.easyink.wecom.service.WeGroupTagCategoryService; +import com.easyink.wecom.service.WeGroupTagRelService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +/** + * 类名:WeGroupTagController + * + * @author Society my sister Li + * @date 2021-11-12 15:55 + */ +@RestController +@RequestMapping("/wecom/grouptag") +@Api(tags = "群标签相关接口") +public class WeGroupTagController extends BaseController { + + private final WeGroupTagCategoryService weGroupTagCategoryService; + private final WeGroupTagRelService weGroupTagRelService; + + @Autowired + public WeGroupTagController(WeGroupTagCategoryService weGroupTagCategoryService, WeGroupTagRelService weGroupTagRelService) { + this.weGroupTagCategoryService = weGroupTagCategoryService; + this.weGroupTagRelService = weGroupTagRelService; + } + + @Log(title = "新增群标签组", businessType = BusinessType.INSERT) + @PostMapping + @ApiOperation("新增群标签组") + public AjaxResult add(@Validated @RequestBody AddWeGroupTagCategoryDTO weGroupTagCategory) { + weGroupTagCategory.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + weGroupTagCategoryService.add(weGroupTagCategory); + return AjaxResult.success(); + } + + @Log(title = "编辑群标签组", businessType = BusinessType.UPDATE) + @PutMapping + @ApiOperation("编辑群标签组") + public AjaxResult update(@Validated @RequestBody UpdateWeGroupTagCategoryDTO weGroupTagCategory) { + weGroupTagCategory.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + weGroupTagCategoryService.update(weGroupTagCategory); + return AjaxResult.success(); + } + + @Log(title = "删除群标签组", businessType = BusinessType.DELETE) + @DeleteMapping + @ApiOperation("删除群标签组") + public AjaxResult del(@Validated @RequestBody DelWeGroupTagCategoryDTO weGroupTagCategory) { + weGroupTagCategory.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + weGroupTagCategoryService.delete(weGroupTagCategory); + return AjaxResult.success(); + } + + @Log(title = "分页查询标签组列表", businessType = BusinessType.OTHER) + @GetMapping("/page") + @ApiOperation("分页查询标签组列表") + public TableDataInfo page(@Validated PageWeGroupTagCategoryDTO weGroupTagCategory) { + weGroupTagCategory.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + startPage(); + return getDataTable(weGroupTagCategoryService.page(weGroupTagCategory)); + } + + + @Log(title = "查询标签组列表", businessType = BusinessType.OTHER) + @GetMapping("/list") + @ApiOperation("查询标签组列表") + public AjaxResult list(@Validated FindWeGroupTagCategoryDTO weGroupTagCategory) { + weGroupTagCategory.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + return AjaxResult.success(weGroupTagCategoryService.list(weGroupTagCategory)); + } + + @Log(title = "查询标签组列表", businessType = BusinessType.OTHER) + @GetMapping("/get") + @ApiOperation("查询标签组列表") + public AjaxResult findInfo(@Validated FindWeGroupTagCategoryDTO weGroupTagCategory) { + weGroupTagCategory.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + return AjaxResult.success(weGroupTagCategoryService.findInfo(weGroupTagCategory)); + } + + + @Log(title = "批量打标签", businessType = BusinessType.INSERT) + @PostMapping("/batchAddTagRel") + @ApiOperation("批量打标签") + @PreAuthorize("@ss.hasPermi('customerManage:group:edit')") + public AjaxResult batchAddTagRel(@Validated @RequestBody BatchTagRelDTO batchTagRelDTO) { + batchTagRelDTO.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + weGroupTagRelService.batchAddTagRel(batchTagRelDTO); + return AjaxResult.success(); + } + + + @Log(title = "批量移除标签", businessType = BusinessType.DELETE) + @PostMapping("/batchDelTagRel") + @ApiOperation("批量打标签") + public AjaxResult batchDelTagRel(@Validated @RequestBody BatchTagRelDTO batchTagRelDTO) { + batchTagRelDTO.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + weGroupTagRelService.batchDelTagRel(batchTagRelDTO); + return AjaxResult.success(); + } +} diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeMaterialConfigController.java b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeMaterialConfigController.java new file mode 100644 index 0000000..866e81b --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeMaterialConfigController.java @@ -0,0 +1,49 @@ +package com.easyink.web.controller.wecom; + +import com.easyink.common.annotation.Log; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.enums.BusinessType; +import com.easyink.wecom.domain.WeMaterialConfig; +import com.easyink.wecom.login.util.LoginTokenService; +import com.easyink.wecom.service.WeMaterialConfigService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; + +/** + * 类名:WeMaterialConfigController + * + * @author Society my sister Li + * @date 2021-10-11 15:56 + */ +@Api(tags = "企业素材配置表") +@RestController +@RequestMapping("/wecom/materialConfig") +public class WeMaterialConfigController { + + private final WeMaterialConfigService weMaterialConfigService; + + @Autowired + public WeMaterialConfigController(WeMaterialConfigService weMaterialConfigService) { + this.weMaterialConfigService = weMaterialConfigService; + } + + @Log(title = "获取素材配置", businessType = BusinessType.OTHER) + @GetMapping(value = "/get") + @ApiOperation("获取素材配置信息") + public AjaxResult get() { + return AjaxResult.success(weMaterialConfigService.findByCorpId(LoginTokenService.getLoginUser().getCorpId())); + } + + @Log(title = "更新素材配置", businessType = BusinessType.OTHER) + @PutMapping("/update") + @ApiOperation("更新素材配置") + public AjaxResult upload(@Valid @RequestBody WeMaterialConfig weMaterialConfig) { + weMaterialConfig.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + weMaterialConfigService.update(weMaterialConfig); + return AjaxResult.success(); + } +} diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeMaterialController.java b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeMaterialController.java new file mode 100644 index 0000000..18dc7c3 --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeMaterialController.java @@ -0,0 +1,225 @@ +package com.easyink.web.controller.wecom; + +import com.easyink.common.annotation.Log; +import com.easyink.common.core.controller.BaseController; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.core.page.TableDataInfo; +import com.easyink.common.enums.BusinessType; +import com.easyink.common.enums.MediaType; +import com.easyink.wecom.domain.WeMaterial; +import com.easyink.wecom.domain.WeMaterialTagEntity; +import com.easyink.wecom.domain.dto.*; +import com.easyink.wecom.domain.dto.tag.WeMaterialTagAddDTO; +import com.easyink.wecom.domain.vo.*; +import com.easyink.wecom.login.util.LoginTokenService; +import com.easyink.wecom.service.WeMaterialService; +import com.easyink.wecom.service.WeMaterialTagService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.apache.ibatis.annotations.Param; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * 企业微信素材Controller + * + * @author admin + * @date 2020-10-08 + */ +@Api(tags = "企业微信素材管理接口") +@RestController +@RequestMapping("/wecom/material") +public class WeMaterialController extends BaseController { + private final WeMaterialService materialService; + private final WeMaterialTagService weMaterialTagService; + + @Autowired + public WeMaterialController(@NotNull WeMaterialService materialService, @NotNull WeMaterialTagService weMaterialTagService) { + this.materialService = materialService; + this.weMaterialTagService = weMaterialTagService; + } + + + // @PreAuthorize("@ss.hasPermi('wecom:material:list')") + @GetMapping("/list") + @ApiOperation("查询素材列表") + public TableDataInfo list(@Validated FindWeMaterialDTO findWeMaterialDTO) { + startPage(); + findWeMaterialDTO.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + List list = materialService.findWeMaterials(findWeMaterialDTO); + return getDataTable(list); + } + + + // @PreAuthorize("@ss.hasPermi('wechat:material:query')") + @GetMapping(value = "/{id}") + @ApiOperation("查询素材详细信息") + public AjaxResult getInfo(@PathVariable("id") Long id) { + return AjaxResult.success(materialService.findWeMaterialById(id)); + } + + + @PreAuthorize("@ss.hasPermi('wechat:material:add')") + @Log(title = "添加素材信息", businessType = BusinessType.INSERT) + @PostMapping + @ApiOperation("添加素材信息") + public AjaxResult add(@Validated @RequestBody AddWeMaterialDTO material) { + return AjaxResult.success(materialService.insertWeMaterial(material)); + } + + + @PreAuthorize("@ss.hasPermi('wechat:material:edit')") + @Log(title = "更新素材信息", businessType = BusinessType.UPDATE) + @PutMapping + @ApiOperation("更新素材信息") + public AjaxResult edit(@Validated @RequestBody UpdateWeMaterialDTO material) { + material.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + material.setUpdateBy(LoginTokenService.getUsername()); + return toAjax(materialService.updateWeMaterial(material)); + } + + + @PreAuthorize("@ss.hasPermi('wechat:material:remove')") + @Log(title = "删除素材信息", businessType = BusinessType.DELETE) + @DeleteMapping("/remove") + @ApiOperation("删除素材信息") + public AjaxResult remove(@Validated @RequestBody RemoveMaterialDTO removeMaterialDTO) { + removeMaterialDTO.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + materialService.deleteWeMaterialByIds(removeMaterialDTO); + return AjaxResult.success(); + } + + + // @PreAuthorize("@ss.hasPermi('wechat:material:upload')") + @Log(title = "上传素材信息", businessType = BusinessType.OTHER) + @PostMapping("/upload") + @ApiOperation("上传素材信息") + public AjaxResult upload(@RequestParam(value = "file") MultipartFile file, @RequestParam(value = "mediaType") String mediaType) { + WeMaterialFileVO weMaterialFileVO = materialService.uploadWeMaterialFile(file, mediaType); + return AjaxResult.success(weMaterialFileVO); + } + + + // @PreAuthorize("@ss.hasPermi('wechat:material:resetCategory')") + @Log(title = "更换分组", businessType = BusinessType.OTHER) + @PutMapping("/resetCategory") + @ApiOperation("更换分组") + public AjaxResult resetCategory(@RequestBody ResetCategoryDTO resetCategoryDTO) { + materialService.resetCategory(resetCategoryDTO.getCategoryId(), resetCategoryDTO.getMaterials()); + return AjaxResult.success(); + } + + + //@PreAuthorize("@ss.hasPermi('wechat:material:temporaryMaterialMediaId')") + @Log(title = "获取素材media_id", businessType = BusinessType.OTHER) + @GetMapping("/temporaryMaterialMediaId") + @ApiOperation("H5端发送获取素材media_id") + public AjaxResult temporaryMaterialMediaId(String url, String type, String name) { + String corpId = LoginTokenService.getLoginUser().getCorpId(); + WeMediaDTO weMediaDto = materialService.uploadTemporaryMaterial(url, type, name, corpId); + return AjaxResult.success(weMediaDto); + } + + + //@PreAuthorize("@ss.hasPermi('wechat:material:temporaryMaterialMediaId')") + @Log(title = "获取素材media_id", businessType = BusinessType.OTHER) + @PostMapping("/temporaryMaterialMediaIdForWeb") + @ApiOperation("web端发送获取素材media_id") + public AjaxResult temporaryMaterialMediaIdForWeb(@RequestBody TemporaryMaterialDTO temporaryMaterialDTO) { + String corpId = LoginTokenService.getLoginUser().getCorpId(); + WeMediaDTO weMediaDto = materialService.uploadTemporaryMaterial(temporaryMaterialDTO.getUrl(), + MediaType.of(temporaryMaterialDTO.getType()).get().getMediaType() + , temporaryMaterialDTO.getName(), corpId); + return AjaxResult.success(weMediaDto); + } + + + @Log(title = "上传素材图片", businessType = BusinessType.OTHER) + @PostMapping("/uploadimg") + @ApiOperation("上传素材图片") + public AjaxResult uploadImg(MultipartFile file, HttpServletRequest request) { + WeMediaDTO weMediaDto = new WeMediaDTO(); + WeMaterialFileVO weMaterialFileVO = materialService.uploadWeMaterialFile(file, MediaType.IMAGE.getType()); + weMediaDto.setFileName(weMaterialFileVO.getMaterialName()); + weMediaDto.setUrl(weMaterialFileVO.getMaterialUrl() + weMaterialFileVO.getMaterialName()); + return AjaxResult.success(weMediaDto); + } + + @Log(title = "保存素材标签", businessType = BusinessType.OTHER) + @ApiOperation("保存素材标签") + @PostMapping("/saveTag") + public AjaxResult saveTag(@Validated @RequestBody WeMaterialTagAddDTO weMaterialTagAddDTO) { + WeMaterialTagEntity weMaterialTagEntity = new WeMaterialTagEntity(); + weMaterialTagEntity.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + weMaterialTagEntity.setTagName(weMaterialTagAddDTO.getTagName().trim()); + weMaterialTagService.insertTag(weMaterialTagEntity); + return AjaxResult.success(); + } + + @Log(title = "删除素材标签", businessType = BusinessType.OTHER) + @ApiOperation("删除素材标签") + @DeleteMapping("/delTag/{tagId}") + public AjaxResult delTag(@PathVariable Long tagId) { + weMaterialTagService.delTag(tagId); + return AjaxResult.success(); + } + + @Log(title = "批量打标签", businessType = BusinessType.OTHER) + @PostMapping("/markTags") + @ApiOperation("批量打标签") + public AjaxResult markTags(@RequestBody WeMaterialTagDTO weMaterialTagDTO) { + weMaterialTagService.markTags(weMaterialTagDTO.getMaterialIds(), weMaterialTagDTO.getTagIds()); + return AjaxResult.success(); + } + + @Log(title = "批量移除标签", businessType = BusinessType.OTHER) + @PostMapping("/removeTags") + @ApiOperation("批量移除标签") + public AjaxResult removeTags(@Validated @RequestBody WeMaterialTagRelRemoveDTO weMaterialTagRelRemoveDTO) { + weMaterialTagService.removeTags(weMaterialTagRelRemoveDTO.getTagIds(), weMaterialTagRelRemoveDTO.getMaterialIds()); + return AjaxResult.success(); + } + + @Log(title = "查询标签列表", businessType = BusinessType.OTHER) + @GetMapping("/listTagByName") + @ApiOperation("查询标签列表") + public AjaxResult listTagByName(@Param("tagName") String tagName) { + return AjaxResult.success(weMaterialTagService.listByName(tagName, LoginTokenService.getLoginUser().getCorpId())); + } + + @PreAuthorize("@ss.hasPermi('wechat:material:publish')") + @Log(title = "素材发布/取消发布", businessType = BusinessType.OTHER) + @PutMapping("/showMaterialSwitch") + @ApiOperation("素材发布/取消发布") + public AjaxResult showMaterialSwitch(@Validated @RequestBody ShowMaterialSwitchDTO showMaterialSwitchDTO) { + showMaterialSwitchDTO.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + materialService.showMaterialSwitch(showMaterialSwitchDTO); + return AjaxResult.success(); + } + + @Log(title = "过期素材恢复/批量恢复", businessType = BusinessType.OTHER) + @PutMapping("/restore") + @ApiOperation("过期素材恢复/批量恢复") + public AjaxResult restore(@Validated @RequestBody RestoreMaterialDTO restoreMaterialDTO) { + String corpId = LoginTokenService.getLoginUser().getCorpId(); + restoreMaterialDTO.setCorpId(corpId); + materialService.restore(restoreMaterialDTO); + return AjaxResult.success(); + } + + @Log(title = "查询素材/侧边栏数量", businessType = BusinessType.OTHER) + @ApiOperation("查询素材/侧边栏数量接口") + @PostMapping("/getMaterialCount") + public AjaxResult getMaterialCount(@RequestBody FindWeMaterialDTO findWeMaterialDTO) { + findWeMaterialDTO.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + return AjaxResult.success(materialService.getMaterialCount(findWeMaterialDTO)); + } + +} diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeMessagePushController.java b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeMessagePushController.java new file mode 100644 index 0000000..d81724e --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeMessagePushController.java @@ -0,0 +1,77 @@ +package com.easyink.web.controller.wecom; + +import com.easyink.common.annotation.Log; +import com.easyink.common.core.controller.BaseController; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.core.page.TableDataInfo; +import com.easyink.common.enums.BusinessType; +import com.easyink.common.utils.poi.ExcelUtil; +import com.easyink.wecom.domain.WeMessagePush; +import com.easyink.wecom.login.util.LoginTokenService; +import com.easyink.wecom.service.WeMessagePushService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 消息发送的Controller + * + * @author admin + * @date 2020-10-28 + */ +@RestController +@RequestMapping("/wecom/push") +@Api(tags = "消息发送的Controller") +public class WeMessagePushController extends BaseController { + + @Autowired + private WeMessagePushService weMessagePushService; + + // @PreAuthorize("@ss.hasPermi('system:push:list')") + @GetMapping("/list") + @ApiOperation("查询消息发送的列表") + public TableDataInfo list(WeMessagePush weMessagePush) { + startPage(); + List list = weMessagePushService.selectWeMessagePushList(weMessagePush); + return getDataTable(list); + } + + // @PreAuthorize("@ss.hasPermi('system:push:export')") + @Log(title = "消息发送的", businessType = BusinessType.EXPORT) + @GetMapping("/export") + @ApiOperation("导出消息发送的列表") + public AjaxResult export(WeMessagePush weMessagePush) { + List list = weMessagePushService.selectWeMessagePushList(weMessagePush); + ExcelUtil util = new ExcelUtil<>(WeMessagePush.class); + return util.exportExcel(list, "push"); + } + + // @PreAuthorize("@ss.hasPermi('system:push:query')") + @GetMapping(value = "/{messagePushId}") + @ApiOperation("获取消息发送的详细信息") + public AjaxResult getInfo(@PathVariable("messagePushId") Long messagePushId) { + return AjaxResult.success(weMessagePushService.selectWeMessagePushById(messagePushId)); + } + + // @PreAuthorize("@ss.hasPermi('system:push:add')") + @Log(title = "消息发送的", businessType = BusinessType.INSERT) + @PostMapping(value = "add") + @ApiOperation("新增消息发送") + public AjaxResult add(@RequestBody WeMessagePush weMessagePush) { + String corpId = LoginTokenService.getLoginUser().getCorpId(); + weMessagePushService.insertWeMessagePush(weMessagePush, corpId); + return AjaxResult.success(); + } + + + // @PreAuthorize("@ss.hasPermi('system:push:remove')") + @Log(title = "消息发送的", businessType = BusinessType.DELETE) + @DeleteMapping("/{messagePushIds}") + @ApiOperation("删除消息发送") + public AjaxResult remove(@PathVariable Long[] messagePushIds) { + return toAjax(weMessagePushService.deleteWeMessagePushByIds(messagePushIds)); + } +} diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeMomentController.java b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeMomentController.java new file mode 100644 index 0000000..b998e50 --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeMomentController.java @@ -0,0 +1,119 @@ +package com.easyink.web.controller.wecom; + +import com.easyink.common.core.controller.BaseController; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.core.page.TableDataInfo; +import com.easyink.wecom.domain.dto.moment.CreateMomentTaskDTO; +import com.easyink.wecom.domain.dto.moment.MomentUserCustomerDTO; +import com.easyink.wecom.domain.dto.moment.SearchMomentContentDTO; +import com.easyink.wecom.domain.dto.moment.SendToUserDTO; +import com.easyink.wecom.domain.vo.moment.MomentTotalVO; +import com.easyink.wecom.domain.vo.moment.MomentUserCustomerVO; +import com.easyink.wecom.domain.vo.moment.SearchMomentVO; +import com.easyink.wecom.login.util.LoginTokenService; +import com.easyink.wecom.service.moment.WeMomentTaskService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +/** + * 类名: 朋友圈接口 + * + * @author 佚名 + * @date 2022/1/11 11:29 + */ +@RestController +@RequestMapping("/wecom/moment") +@Api(tags = "朋友圈") +public class WeMomentController extends BaseController { + private final WeMomentTaskService weMomentTaskService; + + @Autowired + public WeMomentController(WeMomentTaskService weMomentTaskService) { + this.weMomentTaskService = weMomentTaskService; + } + + @PreAuthorize("@ss.hasPermi('wecom:moments:publish')") + @PostMapping("/create") + @ApiOperation("创建朋友圈任务") + public AjaxResult createMoment(@Validated @RequestBody CreateMomentTaskDTO createMomentTaskDTO) { + createMomentTaskDTO.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + weMomentTaskService.createMomentTask(createMomentTaskDTO, LoginTokenService.getLoginUser()); + return AjaxResult.success(); + } + + @PreAuthorize("@ss.hasPermi('wecom:moments:del')") + @DeleteMapping("/deleteMoment") + @ApiOperation("删除朋友圈") + public AjaxResult deleteMoment(@RequestParam("momentTaskId") Long momentTaskId) { + weMomentTaskService.deleteMoment(momentTaskId); + return AjaxResult.success(); + } + + @PreAuthorize("@ss.hasPermi('wecom:moments:edit')") + @PostMapping("/updateMoment") + @ApiOperation("编辑朋友圈") + public AjaxResult updateMoment(@RequestBody CreateMomentTaskDTO createMomentTaskDTO) { + weMomentTaskService.updateMoment(createMomentTaskDTO); + return AjaxResult.success(); + } + + @GetMapping("/listOfMomentTask") + @ApiOperation("查询朋友圈发布记录") + public TableDataInfo listOfMomentTask(@Validated SearchMomentContentDTO searchMomentContentDTO) { + searchMomentContentDTO.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + return getDataTable(weMomentTaskService.listOfMomentTask(searchMomentContentDTO.initTime(), LoginTokenService.getLoginUser())); + } + + @PreAuthorize("@ss.hasPermi('wecom:moments:detail')") + @GetMapping("/listOfMomentPublishDetail") + @ApiOperation("查询朋友圈发布记录详情") + public TableDataInfo listOfMomentPublishDetail(@Validated MomentUserCustomerDTO momentUserCustomerDTO) { + startPage(); + return getDataTable(weMomentTaskService.listOfMomentPublishDetail(momentUserCustomerDTO)); + } + + @PreAuthorize("@ss.hasPermi('wecom:moments:detail')") + @GetMapping("/getTotal") + @ApiOperation("获取详情统计接口") + public AjaxResult getTotal(@RequestParam("momentTaskId") Long momentTaskId) { + return AjaxResult.success(weMomentTaskService.getTotal(momentTaskId)); + } + + @PreAuthorize("@ss.hasPermi('wecom:moments:detail')") + @GetMapping("/getMomentTaskBasicInfo") + @ApiOperation("获取朋友圈任务基础信息") + public AjaxResult getMomentTaskBasicInfo(@RequestParam("momentTaskId") Long momentTaskId) { + return AjaxResult.success(weMomentTaskService.getMomentTaskBasicInfo(momentTaskId)); + } + @PutMapping("/refreshMomentTask") + @ApiOperation("刷新朋友圈执行") + public AjaxResult refreshMomentTask(@RequestParam("momentTaskId") Long momentTaskId) { + weMomentTaskService.refreshMoment(momentTaskId); + return AjaxResult.success(); + } + + @PostMapping("/sendToUser") + @ApiOperation("发送提醒信息") + public AjaxResult sendToUser(@Validated @RequestBody SendToUserDTO sendToUserDTO) { + weMomentTaskService.sendToUser(sendToUserDTO.getUserIds(), sendToUserDTO.getType(), sendToUserDTO.getSendTime(), sendToUserDTO.getMomentTaskId()); + return AjaxResult.success(); + } + + @PutMapping("/updateUserMoment") + @ApiOperation("修改员工朋友圈执行详情(h5个人朋友圈)") + public AjaxResult updateUserMoment(@RequestParam("momentTaskId") Long momentTaskId, @RequestParam("userId") String userId) { + weMomentTaskService.updateUserMoment(momentTaskId, userId); + return AjaxResult.success(); + } + + @GetMapping("/getMomentTask") + @ApiOperation("h5查询接口") + public AjaxResult getMomentTask(@RequestParam("momentTaskId") Long momentTaskId, @RequestParam("userId") String userId) { + return AjaxResult.success(weMomentTaskService.getMomentTask(momentTaskId, userId)); + } + +} diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeMsgTlpController.java b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeMsgTlpController.java new file mode 100644 index 0000000..0d48a4e --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeMsgTlpController.java @@ -0,0 +1,148 @@ +package com.easyink.web.controller.wecom; + +import com.easyink.common.annotation.Log; +import com.easyink.common.core.controller.BaseController; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.core.domain.model.LoginUser; +import com.easyink.common.core.page.TableDataInfo; +import com.easyink.common.enums.BusinessType; +import com.easyink.common.enums.WelcomeMsgTplTypeEnum; +import com.easyink.wecom.domain.WeMsgTlp; +import com.easyink.wecom.domain.dto.welcomemsg.WelComeMsgAddDTO; +import com.easyink.wecom.domain.dto.welcomemsg.WelComeMsgDeleteDTO; +import com.easyink.wecom.domain.dto.welcomemsg.WelComeMsgUpdateEmployDTO; +import com.easyink.wecom.domain.dto.welcomemsg.WelComeMsgUpdateGroupDTO; +import com.easyink.wecom.domain.vo.welcomemsg.WeMsgTlpListVO; +import com.easyink.wecom.domain.vo.welcomemsg.WelcomeMsgGroupMaterialCountVO; +import com.easyink.wecom.login.util.LoginTokenService; +import com.easyink.wecom.service.WeMsgTlpService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 欢迎语模板Controller + * + * @author admin + * @date 2020-10-04 + */ +@RestController +@RequestMapping("/wecom/tlp") +@Api(tags = "欢迎语模板Controller") +public class WeMsgTlpController extends BaseController { + + private final WeMsgTlpService weMsgTlpService; + + @Autowired + public WeMsgTlpController(WeMsgTlpService weMsgTlpService) { + this.weMsgTlpService = weMsgTlpService; + } + + @PreAuthorize("@ss.hasPermi('wecom:tlp:add')") + @Log(title = "新增好友欢迎语模板", businessType = BusinessType.INSERT) + @PostMapping("employ") + @ApiOperation("新增好友欢迎语模板") + public AjaxResult addEmployMsg(@Validated @RequestBody WelComeMsgAddDTO welComeMsgAddDTO) { + LoginUser loginUser = LoginTokenService.getLoginUser(); + welComeMsgAddDTO.getWeMsgTlp().setCorpId(loginUser.getCorpId()); + if (loginUser.isSuperAdmin()) { + welComeMsgAddDTO.getWeMsgTlp().setCreateBy(loginUser.getUser().getUserId().toString()); + } else { + welComeMsgAddDTO.getWeMsgTlp().setCreateBy(loginUser.getWeUser().getUserId()); + } + welComeMsgAddDTO.getWeMsgTlp().setWelcomeMsgTplType(WelcomeMsgTplTypeEnum.EMP_WELCOME.getType()); + weMsgTlpService.insertWeMsgTlpWithEmploy(welComeMsgAddDTO); + return AjaxResult.success(); + } + + @PreAuthorize("@ss.hasPermi('wecom:groupWelcome:add')") + @Log(title = "新增群欢迎语模板", businessType = BusinessType.INSERT) + @PostMapping("group") + @ApiOperation("新增群欢迎语模板") + public AjaxResult addGroupMsg(@Validated @RequestBody WelComeMsgAddDTO welComeMsgAddDTO) { + LoginUser loginUser = LoginTokenService.getLoginUser(); + welComeMsgAddDTO.getWeMsgTlp().setCorpId(loginUser.getCorpId()); + if (loginUser.isSuperAdmin()) { + welComeMsgAddDTO.getWeMsgTlp().setCreateBy(loginUser.getUser().getUserId().toString()); + } else { + welComeMsgAddDTO.getWeMsgTlp().setCreateBy(loginUser.getWeUser().getUserId()); + } + welComeMsgAddDTO.getWeMsgTlp().setWelcomeMsgTplType(WelcomeMsgTplTypeEnum.GROUP_WELCOME.getType()); + weMsgTlpService.insertWeMsgTlpWithGroup(welComeMsgAddDTO); + return AjaxResult.success(); + } + + + @GetMapping("/list/employ") + @ApiOperation("查询欢迎语模板列表") + public TableDataInfo list(WeMsgTlp weMsgTlp) { + weMsgTlp.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + startPage(); + List list = weMsgTlpService.selectWeMsgTlpList(weMsgTlp); + return getDataTable(list); + } + + + // @PreAuthorize("@ss.hasPermi('wecom:tlp:query')") + @GetMapping(value = "/{id}") + @ApiOperation("获取欢迎语模板详细信息") + public AjaxResult getInfo(@ApiParam("默认欢迎语id") @PathVariable("id") Long id) { + + return AjaxResult.success( + weMsgTlpService.detail(WeMsgTlp.builder().corpId(LoginTokenService.getLoginUser().getCorpId()).id(id).build()) + ); + } + + + @PreAuthorize("@ss.hasPermi('wecom:tlp:edit')") + @Log(title = "修改好友迎语模板", businessType = BusinessType.UPDATE) + @PutMapping("/edit/employ") + @ApiOperation("修改好友迎语模板") + public AjaxResult editWithEmploy(@Validated @RequestBody WelComeMsgUpdateEmployDTO welComeMsgUpdateDTO) { + welComeMsgUpdateDTO.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + weMsgTlpService.updateWeMsgTlpWithEmploy(welComeMsgUpdateDTO); + return AjaxResult.success(); + } + + @PreAuthorize("@ss.hasPermi('wecom:groupWelcome:edit')") + @Log(title = "修改群欢迎语模板", businessType = BusinessType.UPDATE) + @PutMapping("/edit/group") + @ApiOperation("修改群欢迎语模板") + public AjaxResult editWithGroup(@Validated @RequestBody WelComeMsgUpdateGroupDTO welComeMsgUpdateDTO) { + welComeMsgUpdateDTO.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + weMsgTlpService.updateWeMsgTlpWithGroup(welComeMsgUpdateDTO); + return AjaxResult.success(); + } + + @PreAuthorize("@ss.hasPermi('wecom:tlp:remove')") + @Log(title = "删除好友欢迎语模板", businessType = BusinessType.DELETE) + @DeleteMapping("/employ") + @ApiOperation("删除好友欢迎语模板") + public AjaxResult removeWithEmploy(@Validated @RequestBody WelComeMsgDeleteDTO welComeMsgDeleteDTO) { + weMsgTlpService.deleteEmployWeMsgTlpById(LoginTokenService.getLoginUser().getCorpId(), welComeMsgDeleteDTO.getIds()); + return AjaxResult.success(); + } + + @PreAuthorize("@ss.hasPermi('wecom:groupWelcome:del')") + @Log(title = "删除群欢迎语模板", businessType = BusinessType.DELETE) + @DeleteMapping("/group") + @ApiOperation("删除群欢迎语模板") + public AjaxResult removeWithGroup(@Validated @RequestBody WelComeMsgDeleteDTO welComeMsgDeleteDTO) { + weMsgTlpService.deleteGroupWeMsgTlpById(LoginTokenService.getLoginUser().getCorpId(), welComeMsgDeleteDTO.getIds()); + return AjaxResult.success(); + } + + @GetMapping("/group/count") + @ApiOperation("群欢迎语模板统计") + public AjaxResult groupCount() { + WelcomeMsgGroupMaterialCountVO vo = weMsgTlpService.groupCount(LoginTokenService.getLoginUser().getCorpId()); + return AjaxResult.success(vo); + } + +} diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WePageDataController.java b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WePageDataController.java new file mode 100644 index 0000000..2a9956d --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WePageDataController.java @@ -0,0 +1,48 @@ +package com.easyink.web.controller.wecom; + +import com.easyink.common.constant.RedisKeyConstants; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.core.redis.RedisCache; +import com.easyink.wecom.domain.dto.WePageStaticDataDTO; +import com.easyink.wecom.login.util.LoginTokenService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author admin + * @description 首页统计 + * @date 2021/2/23 15:30 + **/ +@Api(tags = "首页统计controller") +@Slf4j +@RestController +@RequestMapping("wecom/page/") +public class WePageDataController { + private final RedisCache redisCache; + + @Autowired + public WePageDataController(RedisCache redisCache) { + this.redisCache = redisCache; + } + + /** + * + */ + @ApiOperation(value = "数据总览controller", httpMethod = "GET") + @GetMapping("/getCorpBasicData") + public AjaxResult getCorpBasicData() { + return AjaxResult.success(redisCache.getCacheMap(RedisKeyConstants.CORP_BASIC_DATA + LoginTokenService.getLoginUser().getCorpId())); + } + + @ApiOperation(value = "实时数据controller", httpMethod = "GET") + @GetMapping("/getCorpRealTimeData") + public AjaxResult getCorpRealTimeData() { + WePageStaticDataDTO wePageStaticDataDto = redisCache.getCacheObject(RedisKeyConstants.CORP_REAL_TIME + LoginTokenService.getLoginUser().getCorpId()); + return AjaxResult.success(wePageStaticDataDto); + } +} \ No newline at end of file diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeResignedTransferRecordController.java b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeResignedTransferRecordController.java new file mode 100644 index 0000000..df8966e --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeResignedTransferRecordController.java @@ -0,0 +1,83 @@ +package com.easyink.web.controller.wecom; + +import com.easyink.common.core.controller.BaseController; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.core.page.TableDataInfo; +import com.easyink.wecom.domain.dto.transfer.GetResignedTransferDetailDTO; +import com.easyink.wecom.domain.dto.transfer.TransferResignedUserDTO; +import com.easyink.wecom.domain.vo.transfer.GetResignedTransferCustomerDetailVO; +import com.easyink.wecom.domain.vo.transfer.GetResignedTransferGroupDetailVO; +import com.easyink.wecom.login.util.LoginTokenService; +import com.easyink.wecom.service.WeResignedTransferRecordService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiResponse; +import io.swagger.annotations.ApiResponses; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * 类名: 离职继承记录接口 V3 + * + * @author : silver_chariot + * @date : 2021/12/6 14:36 + */ +@RestController +@RequestMapping("/wecom/resigned/transfer") +@Api(tags = "离职继承记录接口V3") +public class WeResignedTransferRecordController extends BaseController { + + private final WeResignedTransferRecordService weResignedTransferRecordService; + + @Autowired + public WeResignedTransferRecordController(@NotNull WeResignedTransferRecordService weResignedTransferRecordService) { + this.weResignedTransferRecordService = weResignedTransferRecordService; + } + + @PostMapping + @ApiOperation("离职继承分配V3") + @ApiResponses({ + @ApiResponse(code = 3005, message = "接替成员不存在或未激活"), + @ApiResponse(code = 3006, message = "该企业不存在可分配员工"), + @ApiResponse(code = 3997, message = "该成员不存在可分配客户"), + @ApiResponse(code = 4011, message = "指定的客户不可被分配"), + @ApiResponse(code = 4012, message = "指定的群聊不可被分配"), + @ApiResponse(code = 4013, message = "原跟进人与接手人一样,不可继承") + }) + public AjaxResult transfer(@Validated @RequestBody TransferResignedUserDTO dto) { + weResignedTransferRecordService.transfer( + LoginTokenService.getLoginUser().getCorpId(), + dto.getHandoverUserList(), + dto.getTakeoverUserid(), + dto.getChatId(), + dto.getExternalUserid() + ); + return AjaxResult.success(); + } + + @ApiOperation("获取历史已分配客户详情列表V3") + @GetMapping("/customerRecord") + public TableDataInfo customerRecord(@Validated GetResignedTransferDetailDTO dto) { + startPage(); + dto.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + List list = weResignedTransferRecordService.listOfCustomerRecord(dto); + return getDataTable(list); + } + + @GetMapping("/groupRecord") + @ApiOperation("获取历史已分配的客户群V3") + public TableDataInfo groupRecord(@Validated GetResignedTransferDetailDTO dto ){ + startPage(); + dto.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + List list = weResignedTransferRecordService.listOfGroupRecord(dto); + return getDataTable(list); + } + + + + +} diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeSensitiveActController.java b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeSensitiveActController.java new file mode 100644 index 0000000..4600821 --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeSensitiveActController.java @@ -0,0 +1,145 @@ +package com.easyink.web.controller.wecom; + +import com.easyink.common.annotation.Log; +import com.easyink.common.core.controller.BaseController; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.core.domain.RootEntity; +import com.easyink.common.core.page.TableDataInfo; +import com.easyink.common.enums.BusinessType; +import com.easyink.common.enums.ResultTip; +import com.easyink.common.token.TokenService; +import com.easyink.common.utils.poi.ExcelUtil; +import com.easyink.wecom.domain.WeSensitiveAct; +import com.easyink.wecom.domain.WeSensitiveActHit; +import com.easyink.wecom.login.util.LoginTokenService; +import com.easyink.wecom.service.WeSensitiveActHitService; +import com.easyink.wecom.service.WeSensitiveActService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import javax.validation.constraints.NotNull; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 敏感行为管理接口 + * + * @author admin + * @version 1.0 + * @date 2021/1/12 18:07 + */ +@RestController +@RequestMapping("/wecom/sensitive/act") +@Api(tags = "敏感行为管理接口") +public class WeSensitiveActController extends BaseController { + private final WeSensitiveActService weSensitiveActService; + private final TokenService tokenService; + private final WeSensitiveActHitService weSensitiveActHitService; + + @Autowired + public WeSensitiveActController(@NotNull WeSensitiveActService weSensitiveActService, @NotNull TokenService tokenService, @NotNull WeSensitiveActHitService weSensitiveActHitService) { + this.weSensitiveActHitService = weSensitiveActHitService; + this.tokenService = tokenService; + this.weSensitiveActService = weSensitiveActService; + } + + @PreAuthorize("@ss.hasPermi('wecom:sensitiveact:list')") + @GetMapping("/list") + @ApiOperation("查询敏感行为列表") + public TableDataInfo list(WeSensitiveAct weSensitiveAct) { + startPage(); + String corpId = LoginTokenService.getLoginUser().getCorpId(); + if (StringUtils.isNotBlank(corpId)){ + weSensitiveAct.setCorpId(corpId); + } + List list = weSensitiveActService.selectWeSensitiveActList(weSensitiveAct); + return getDataTable(list); + } + + /** + * 获取敏感行为详细信息 + */ + // @PreAuthorize("@ss.hasPermi('wecom:sensitiveact:query')") + @GetMapping(value = "/{id}") + @ApiOperation("获取敏感行为详细信息") + public AjaxResult getInfo(@PathVariable("id") Long id) { + return AjaxResult.success(weSensitiveActService.selectWeSensitiveActById(id)); + } + + /** + * 新增敏感行为设置 + * @Deprecated 该接口暂时未暴露给前端调用 + */ + @Deprecated + @PreAuthorize("@ss.hasPermi('wecom:sensitiveact:add')") + @Log(title = "新增敏感行为", businessType = BusinessType.INSERT) + @PostMapping + @ApiOperation("新增敏感行为设置") + public AjaxResult add(@Valid @RequestBody WeSensitiveAct weSensitiveAct) { + return weSensitiveActService.insertWeSensitiveAct(weSensitiveAct) ? AjaxResult.success() : AjaxResult.error(); + } + + /** + * 修改敏感词设置 + */ + @PreAuthorize("@ss.hasPermi('wecom:sensitiveact:edit')") + @Log(title = "修改敏感行为", businessType = BusinessType.UPDATE) + @PutMapping + @ApiOperation("修改敏感词设置") + public AjaxResult edit(@RequestBody WeSensitiveAct weSensitiveAct) { + Long id = weSensitiveAct.getId(); + WeSensitiveAct originData = weSensitiveActService.selectWeSensitiveActById(id); + if (originData == null) { + return AjaxResult.error(ResultTip.TIP_GENERAL_NOT_FOUND, "数据不存在"); + } + return weSensitiveActService.updateWeSensitiveAct(weSensitiveAct) ? AjaxResult.success() : AjaxResult.error(); + } + + /** + * 删除敏感词设置 + */ + @PreAuthorize("@ss.hasPermi('wecom:sensitiveact:remove')") + @Log(title = "删除敏感行为", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + @ApiOperation("删除敏感词设置") + public AjaxResult remove(@PathVariable("ids") String ids) { + String[] id = ids.split(","); + Long[] idArray = new Long[id.length]; + Arrays.stream(id).map(Long::parseLong).collect(Collectors.toList()).toArray(idArray); + return weSensitiveActService.deleteWeSensitiveActByIds(idArray) ? AjaxResult.success() : AjaxResult.error(); + } + + /** + * 敏感词命中查询 + */ + // @PreAuthorize("@ss.hasPermi('wecom:sensitiveacthit:list')") + @GetMapping("/hit/list") + @ApiOperation("敏感词命中查询") + public TableDataInfo hitList() { + startPage(); + RootEntity rootEntity = new RootEntity(); + rootEntity.getParams().put("corpId", LoginTokenService.getLoginUser().getCorpId()); + List list = weSensitiveActHitService.selectWeSensitiveActHitList(rootEntity); + return getDataTable(list); + } + + /** + * 导出敏感行为记录 + * @Deprecated 暂未使用 + */ + @Deprecated + // @PreAuthorize("@ss.hasPermi('wecom:sensitiveacthit:export')") + @PostMapping("/hit/export") + @ApiOperation("导出敏感行为记录") + public AjaxResult export() { + List list = weSensitiveActHitService.list(); + ExcelUtil util = new ExcelUtil<>(WeSensitiveActHit.class); + return util.exportExcel(list, "敏感行为记录"); + } +} diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeSensitiveController.java b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeSensitiveController.java new file mode 100644 index 0000000..d040f66 --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeSensitiveController.java @@ -0,0 +1,110 @@ +package com.easyink.web.controller.wecom; + +import com.easyink.common.annotation.Log; +import com.easyink.common.core.controller.BaseController; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.core.page.TableDataInfo; +import com.easyink.common.enums.BusinessType; +import com.easyink.common.enums.ResultTip; +import com.easyink.wecom.domain.WeSensitive; +import com.easyink.wecom.domain.query.WeSensitiveHitQuery; +import com.easyink.wecom.login.util.LoginTokenService; +import com.easyink.wecom.service.WeSensitiveService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 敏感词Controller + * + * @author admin + * @date 2020-12-29 + */ +@RestController +@RequestMapping("/wecom/sensitive") +@Api(tags = "敏感词管理") +public class WeSensitiveController extends BaseController { + @Autowired + private WeSensitiveService weSensitiveService; + + /** + * 查询敏感词设置列表 + */ + @GetMapping("/list") + @ApiOperation("查询敏感词列表") + public TableDataInfo list(WeSensitive weSensitive) { + startPage(); + weSensitive.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + List list = weSensitiveService.selectWeSensitiveList(weSensitive); + return getDataTable(list); + } + + /** + * 获取敏感词设置详细信息 + */ + @GetMapping(value = "/{id}") + @ApiOperation("查询敏感词详情") + public AjaxResult getInfo(@PathVariable("id") Long id) { + return AjaxResult.success(weSensitiveService.selectWeSensitiveById(id)); + } + + /** + * 新增敏感词设置 + */ + @PreAuthorize("@ss.hasPermi('wecom:sensitive:add')") + @Log(title = "敏感词设置", businessType = BusinessType.INSERT) + @PostMapping + @ApiOperation("添加敏感词") + public AjaxResult add(@Valid @RequestBody WeSensitive weSensitive) { + weSensitive.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + return toAjax(weSensitiveService.insertWeSensitive(weSensitive)); + } + + /** + * 修改敏感词设置 + */ + @PreAuthorize("@ss.hasPermi('wecom:sensitive:edit')") + @Log(title = "敏感词设置", businessType = BusinessType.UPDATE) + @PutMapping + @ApiOperation("修改敏感词") + public AjaxResult edit(@Valid @RequestBody WeSensitive weSensitive) { + Long id = weSensitive.getId(); + WeSensitive originData = weSensitiveService.selectWeSensitiveById(id); + if (originData == null) { + return AjaxResult.error(ResultTip.TIP_GENERAL_NOT_FOUND, "数据不存在"); + } + weSensitive.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + return toAjax(weSensitiveService.updateWeSensitive(weSensitive)); + } + + /** + * 删除敏感词设置 + */ + @PreAuthorize("@ss.hasPermi('wecom:sensitive:remove')") + @Log(title = "敏感词设置", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + @ApiOperation("删除敏感词") + public AjaxResult remove(@PathVariable("ids") String ids) { + String[] id = ids.split(","); + Long[] idArray = new Long[id.length]; + Arrays.stream(id).map(Long::parseLong).collect(Collectors.toList()).toArray(idArray); + return toAjax(weSensitiveService.destroyWeSensitiveByIds(idArray)); + } + + /** + * 敏感词命中查询 + */ + @PreAuthorize("@ss.hasPermi('wecom:sensitive:list')") + @GetMapping("/hit/list") + @ApiOperation("敏感词命中查询") + public TableDataInfo hitList(WeSensitiveHitQuery query) { + return getDataTable(weSensitiveService.getHitSensitiveList(query, LoginTokenService.getLoginUser())); + } +} diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeTagGroupController.java b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeTagGroupController.java new file mode 100644 index 0000000..f05aa66 --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeTagGroupController.java @@ -0,0 +1,147 @@ +package com.easyink.web.controller.wecom; + + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.easyink.common.annotation.Log; +import com.easyink.common.constant.Constants; +import com.easyink.common.constant.WeConstans; +import com.easyink.common.core.controller.BaseController; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.core.domain.model.LoginUser; +import com.easyink.common.core.page.TableDataInfo; +import com.easyink.common.enums.BusinessType; +import com.easyink.wecom.domain.WeTag; +import com.easyink.wecom.domain.WeTagGroup; +import com.easyink.wecom.domain.dto.tag.WeGroupTagDTO; +import com.easyink.wecom.login.util.LoginTokenService; +import com.easyink.wecom.service.WeTagGroupService; +import io.swagger.annotations.*; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 标签组Controller + * + * @author admin + * @date 2020-09-07 + */ +@RestController +@RequestMapping("/wecom/group") +@Api(tags = "标签组相关接口") +public class WeTagGroupController extends BaseController { + @Autowired + private WeTagGroupService weTagGroupService; + + /** + * 查询标签组列表 + */ + @GetMapping("/list") + @ApiOperation("查询标签列表") + public TableDataInfo list(WeTagGroup weTagGroup) { + startPage(); + weTagGroup.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + return getDataTable(weTagGroupService.selectWeTagGroupList(weTagGroup)); + } + + /** + * 查询标签组是否存在 + * + * @param tagGroupName + * @return + */ + @GetMapping("/checkTagGroupName") + @ApiOperation("查询标签组是否已存在") + @ApiResponses({ + @ApiResponse(code = 500, message = "请求参数为空") + }) + public AjaxResult checkTagGroupName(@ApiParam(name = "tagGroupName", value = "标签组名", required = true) String tagGroupName) { + //状态码 + int repeat = 0; + if (tagGroupName == null || StringUtils.isEmpty(tagGroupName)) { + return AjaxResult.error("tagGroupName不能为空"); + } + //查询是否存在标签名为tagGroupName且是正常状态的群组 + int count = weTagGroupService.count(new LambdaQueryWrapper() + .eq(WeTagGroup::getGroupName, tagGroupName) + .eq(WeTagGroup::getCorpId, LoginTokenService.getLoginUser().getCorpId()) + .eq(WeTagGroup::getStatus, Constants.NORMAL_CODE)); + + //如果大于1则是存在数据库 + if (count > 0) { + repeat = 1; + } + + //创建返回参数返回 + return AjaxResult.success(WeGroupTagDTO.builder().repeat(repeat).build()); + } + + /** + * 新增标签组 + */ + @PreAuthorize("@ss.hasPermi('customerManage:tag:add')") + @Log(title = "标签组", businessType = BusinessType.INSERT) + @PostMapping + @ApiOperation("新增标签组") + public AjaxResult add(@Validated @RequestBody WeTagGroup weTagGroup) { + + //校验标签组名称与标签名称是否相同 + if (StrUtil.isNotBlank(weTagGroup.getGroupName())) { + List weTags = weTagGroup.getWeTags(); + if (CollUtil.isNotEmpty(weTags) && weTags.stream().anyMatch(m -> m.getName().equals(weTagGroup.getGroupName()))) { + return AjaxResult.error("标签组名称与标签名不可重复"); + } + } + weTagGroup.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + weTagGroupService.insertWeTagGroup(weTagGroup); + + return AjaxResult.success(); + } + + /** + * 修改标签组 + */ + @ApiOperation("修改标签组") + @PreAuthorize("@ss.hasPermi('customerManage:tag:edit')") + @Log(title = "标签组", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@Validated @RequestBody WeTagGroup weTagGroup) { + weTagGroup.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + weTagGroupService.updateWeTagGroup(weTagGroup); + return AjaxResult.success(); + } + + /** + * 删除标签组 + */ + @ApiOperation("删除标签组") + @PreAuthorize("@ss.hasPermi('customerManage:tag:remove')") + @Log(title = "标签组", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable String[] ids) { + return toAjax(weTagGroupService.deleteWeTagGroupByIds(ids, LoginTokenService.getLoginUser().getCorpId())); + } + + + /** + * 同步标签 + * + * @return + */ + @ApiOperation("同步标签") + @PreAuthorize("@ss.hasPermi('customerManage:tag:sync')") + @GetMapping("/synchWeTags") + public AjaxResult synchWeTags() { + LoginUser loginUser = LoginTokenService.getLoginUser(); + //异步同步一下标签库,解决标签不同步问题 + weTagGroupService.synchWeTags(loginUser.getCorpId()); + + return AjaxResult.success(WeConstans.SYNCH_TIP); + } +} diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeTicketController.java b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeTicketController.java new file mode 100644 index 0000000..979b59b --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeTicketController.java @@ -0,0 +1,83 @@ +package com.easyink.web.controller.wecom; + +import com.easyink.common.constant.WeConstans; +import com.easyink.common.core.controller.BaseController; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.core.redis.RedisCache; +import com.easyink.common.utils.StringUtils; +import com.easyink.common.utils.wecom.TicketUtils; +import com.easyink.wecom.client.WeTicketClient; +import com.easyink.wecom.domain.WeH5TicketDto; +import com.easyink.wecom.login.util.LoginTokenService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.concurrent.TimeUnit; + +/** + * @author admin + * @description h5 ticket校验接口 + * @date 2021/1/6 11:23 + **/ +@Slf4j +@RequestMapping(value = "/wecom/ticket/") +@Api(tags = "h5 ticket校验接口") +@RestController +public class WeTicketController extends BaseController { + @Autowired + private RedisCache redisCache; + @Autowired + private WeTicketClient weTicketClient; + + + /** + * 获取企业的jsapi_ticket + * + * @param url JS接口页面的完整URL + * @return + */ + @ApiOperation("获取企业的jsapi_ticket") + @GetMapping("/getAppTicket") + public AjaxResult getAppTicket(String url, String agentId) { + String corpId = LoginTokenService.getLoginUser().getCorpId(); + String key = WeConstans.APP_TICKET_KEY + ":" + corpId + ":" + agentId; + String ticketVaule = redisCache.getCacheObject(key); + if (StringUtils.isEmpty(ticketVaule)) { + WeH5TicketDto ticketRes = weTicketClient.getJsapiTicket(agentId, LoginTokenService.getLoginUser().getCorpId()); + if (ticketRes != null && StringUtils.isNotEmpty(ticketRes.getTicket())) { + redisCache.setCacheObject(key, ticketRes.getTicket(), ticketRes.getExpiresIn(), TimeUnit.SECONDS); + ticketVaule = ticketRes.getTicket(); + } + } + return AjaxResult.success(TicketUtils.getSignatureMap(ticketVaule, url)); + } + + /** + * 获取应用的jsapi_ticket + * + * @param url JS接口页面的完整URL + * @return + */ + @ApiOperation("获取应用的jsapi_ticket") + @GetMapping("/getAgentTicket") + public AjaxResult getAgentTicket(String url, String agentId) { + String corpId = LoginTokenService.getLoginUser().getCorpId(); + String key = WeConstans.AGENT_TICKET_KEY + ":" + corpId + ":" + agentId; + String ticketVaule = redisCache.getCacheObject(key); + if (StringUtils.isEmpty(ticketVaule)) { + WeH5TicketDto ticketRes = weTicketClient.getTicket("agent_config", agentId, LoginTokenService.getLoginUser().getCorpId()); + if (ticketRes != null && StringUtils.isNotEmpty(ticketRes.getTicket())) { + redisCache.setCacheObject(key, ticketRes.getTicket(), ticketRes.getExpiresIn(), TimeUnit.SECONDS); + ticketVaule = ticketRes.getTicket(); + } + } + return AjaxResult.success(TicketUtils.getSignatureMap(ticketVaule, url)); + } + + +} diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeUserController.java b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeUserController.java new file mode 100644 index 0000000..213ffee --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeUserController.java @@ -0,0 +1,369 @@ +package com.easyink.web.controller.wecom; + +import com.easyink.common.annotation.Log; +import com.easyink.common.constant.WeConstans; +import com.easyink.common.core.controller.BaseController; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.core.domain.model.LoginUser; +import com.easyink.common.core.domain.wecom.WeUser; +import com.easyink.common.core.page.TableDataInfo; +import com.easyink.common.enums.BusinessType; +import com.easyink.common.token.TokenService; +import com.easyink.common.utils.ServletUtils; +import com.easyink.common.utils.spring.SpringUtils; +import com.easyink.wecom.domain.vo.AllocateLeaveUserResp; +import com.easyink.wecom.domain.WeUserRole; +import com.easyink.wecom.domain.dto.BatchUpdateUserInfoDTO; +import com.easyink.wecom.domain.dto.QueryUserDTO; +import com.easyink.wecom.domain.dto.transfer.TransferResignedUserListDTO; +import com.easyink.wecom.domain.vo.*; +import com.easyink.wecom.domain.vo.transfer.TransferResignedUserVO; +import com.easyink.wecom.login.util.LoginTokenService; +import com.easyink.wecom.service.WeDepartmentService; +import com.easyink.wecom.service.WeResignedTransferRecordService; +import com.easyink.wecom.service.WeUserService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.ArrayList; +import java.util.List; + + +/** + * 通讯录相关客户Controller + * + * @author admin + * @date 2020-08-31 + */ +@RestController +@RequestMapping("/wecom/user") +@Api(tags = "通讯录人员接口") +@Slf4j +public class WeUserController extends BaseController { + + + private final WeUserService weUserService; + private final WeDepartmentService weDepartmentService; + private final WeResignedTransferRecordService weResignedTransferRecordService; + + @Autowired + @Lazy + public WeUserController(WeUserService weUserService,WeDepartmentService weDepartmentService, WeResignedTransferRecordService weResignedTransferRecordService) { + this.weUserService = weUserService; + this.weDepartmentService = weDepartmentService; + this.weResignedTransferRecordService = weResignedTransferRecordService; + } + + /** + * 查询员工信息 + * @param queryUserDTO 查询条件 + * @return TableDataInfo + */ + @GetMapping("/listOfUser") + @ApiOperation("查询员工信息") + public TableDataInfo listOfUser(@Validated QueryUserDTO queryUserDTO) { + startPage(); + queryUserDTO.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + return getDataTable(weUserService.listOfUser(queryUserDTO)); + } + + + @GetMapping("/getUser") + @ApiOperation("查询单个员工信息") + public AjaxResult getUser(String userId) { + return AjaxResult.success(weUserService.getUser(LoginTokenService.getLoginUser().getCorpId(), userId)); + } + + /** + * 查询员工详情列表 (需要校验数据权限) + * + * @param weUser + * @return + */ + @GetMapping("/list") + @ApiOperation("获取员工详细信息列表") + public TableDataInfo list(WeUser weUser) { + startPage(); + weUser.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + List list = weUserService.selectWeUserList(weUser); + return getDataTable(list); + } + + /** + * 查询员工简短信息列表 (无需校验功能权限和数据权限 ) + * + * @param weUser + * @return 所有员工 userId和name的集合 + */ + @GetMapping("/briefList") + @ApiOperation("获取员工id和名字列表") + public TableDataInfo briefList(WeUser weUser) { + startPage(); + weUser.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + List list = weUserService.selectWeUserBriefInfo(weUser); + return getDataTable(list); + } + + + /** + * 获取通讯录相关客户详细信息 + */ + @GetMapping(value = "/{userId}") + @ApiOperation("获取通讯录相关客户详细信息") + public AjaxResult getInfo(@PathVariable("userId") String userId) { + LoginUser loginUser = LoginTokenService.getLoginUser(); + return AjaxResult.success(weUserService.selectWeUserById(loginUser.getCorpId(), userId)); + } + + /** + * 新增通讯录相关客户 + */ + @Log(title = "新增成员", businessType = BusinessType.INSERT) + @PostMapping + @ApiOperation("新增成员") + public AjaxResult add(@Validated @RequestBody WeUser weUser) { + weUser.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + weUserService.insertWeUser(weUser); + return AjaxResult.success(); + } + + @GetMapping("/getJoinQrCode") + @ApiOperation("获取加入企业二维码") + public AjaxResult getJoinQrCode() { + return AjaxResult.success( + "获取成功",weUserService.getJoinQrCode(LoginTokenService.getLoginUser().getCorpId()) + ); + } + + /** + * 修改员工 + */ + @PreAuthorize("@ss.hasPermi('contacts:organization:edit')") + @Log(title = "修改员工信息", businessType = BusinessType.UPDATE) + @PutMapping + @ApiOperation("修改员工信息") + public AjaxResult edit(@Validated @RequestBody WeUser weUser) { + weUser.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + weUserService.updateWeUser(weUser); + if (weUser.getRoleId() != null){ + WeUserRole weUserRole = new WeUserRole(); + BeanUtils.copyProperties(weUser,weUserRole); + weUserService.updateUserRole(weUserRole); + } + //修改员工信息后 刷新数据权限范围 + LoginTokenService.refreshDataScope(); + return AjaxResult.success(); + } + + + /** + * 更新员工登录账号信息 + * + * @param weUser 员工信息 + * @return AjaxResult + */ + @PostMapping("/editUserAccount") + @ApiOperation("更新员工登录账号信息") + public AjaxResult editUserAccount(@Validated @RequestBody WeUser weUser) { + weUser.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + weUserService.updateWeUser(weUser); + return AjaxResult.success(); + } + + + + /** + * 启用或者禁止 + * + * @param weUser + * @return + */ + @PreAuthorize("@ss.hasPermi('contacts:organization:forbidden')") + @Log(title = "启用禁用用户", businessType = BusinessType.UPDATE) + @PutMapping("/startOrStop") + @ApiOperation("是否启用(1表示启用成员,0表示禁用成员)") + public AjaxResult startOrStop(@RequestBody WeUser weUser) { + weUser.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + weUserService.startOrStop(weUser); + return AjaxResult.success(); + } + + + /** + * 离职已分配,新接口 + * + * @param weLeaveUserV2VO + * @return + */ + @GetMapping({"/v2/leaveUserAllocateList"}) + @ApiOperation("获取离职已分配离职员工") + @Deprecated + public TableDataInfo leaveUserAllocateListV2(WeLeaveUserV2VO weLeaveUserV2VO) { + startPage(); + return getDataTable(new ArrayList<>()); + } + + /** + * 离职已分配 V3 + * + * @param dto + * @return + */ + @GetMapping("/v3/leaveUserAllocateList") + @ApiOperation("离职已分配员工列表V3") + public TableDataInfo leaveUserAllocateListV3(TransferResignedUserListDTO dto) { + startPage(); + dto.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + return getDataTable(weResignedTransferRecordService.listOfRecord(dto)); + + } + + /** + * 离职未分配,新接口 + * + * @param weLeaveUserV2VO + * @return + */ + @GetMapping({"/v2/leaveUserNoAllocateList"}) + @ApiOperation("获取离职未分配离职员工") + @Deprecated + public TableDataInfo leaveUserNoAllocateListV2(WeLeaveUserV2VO weLeaveUserV2VO) { + startPage(); + return getDataTable(new ArrayList<>()); + } + + @GetMapping("/v3/leaveUserNoAllocateList") + @ApiOperation("获取离职未分配离职员工V3") + public TableDataInfo leaveUserListV3(@Validated TransferResignedUserListDTO dto) { + LoginUser loginUser = LoginTokenService.getLoginUser(); + dto.setCorpId(loginUser.getCorpId()); + return getDataTable(weUserService.leaveUserListV3(dto)); + } + + /** + * 离职分配,新接口 + * + * @param weLeaveUserInfoAllocateVo + * @return + */ + @PutMapping({"/v2/allocateLeaveUserAboutData"}) + @ApiOperation("离职继承分配") + @Deprecated + public AjaxResult allocateLeaveUserAboutDataV2(@RequestBody WeLeaveUserInfoAllocateVO weLeaveUserInfoAllocateVo) { + return AjaxResult.success(); + } + + /** + * 同步成员 + * + * @return + */ + @PreAuthorize("@ss.hasPermi('contacts:organization:sync')") + @GetMapping({"/synchWeUser"}) + @ApiOperation("同步成员") + public AjaxResult syncWeUser() { + LoginUser loginUser = LoginTokenService.getLoginUser(); + // 1. 同步部门 (同步执行) + String userKey = SpringUtils.getBean(TokenService.class).getUserKey(ServletUtils.getRequest()); + weDepartmentService.synchWeDepartment(loginUser.getCorpId(),userKey); + // 2. 同步成员 (异步执行) + weUserService.syncWeUser(loginUser.getCorpId(), loginUser); + return AjaxResult.success(WeConstans.SYNCH_TIP); + } + + + /** + * 删除用户 + * + * @return + */ + @PreAuthorize("@ss.hasPermi('contacts:organization:removeMember')") + @DeleteMapping({"/{ids}"}) + @ApiOperation("删除客户") + public AjaxResult deleteUser(@PathVariable String[] ids) { + weUserService.deleteUser(LoginTokenService.getLoginUser().getCorpId(), ids); + return AjaxResult.success(); + } + + + /** + * 获取历史分配记录的成员 + * + * @param weAllocateCustomersVo + * @return + */ + @GetMapping({"/getAllocateCustomers"}) + @ApiOperation("获取历史分配记录的成员") + @Deprecated + public TableDataInfo getAllocateCustomers(WeAllocateCustomersVO weAllocateCustomersVo) { + startPage(); + return getDataTable(new ArrayList<>()); + } + + /** + * 获取历史分配记录的成员,新接口 + * + * @param weAllocateCustomersVo + * @return + */ + @GetMapping({"/v2/getAllocateCustomers"}) + @ApiOperation("获取历史分配记录的成员") + @Deprecated + public TableDataInfo getAllocateCustomersV2(WeAllocateCustomersVO weAllocateCustomersVo) { + return getDataTable(new ArrayList<>()); + } + + + /** + * 获取历史分配记录的群 + * @deprecated 已废弃 + * @param weAllocateGroupsVo + * @return + */ + @GetMapping({"/getAllocateGroups"}) + @Deprecated + public TableDataInfo getAllocateGroups(WeAllocateGroupsVO weAllocateGroupsVo) { + return getDataTable(new ArrayList<>()); + } + + /** + * 获取历史分配记录的群,新接口 + * + * @param weAllocateGroupsVo + * @return + */ + @ApiOperation("获取历史分配记录的群") + @GetMapping({"/v2/getAllocateGroups"}) + @Deprecated + public TableDataInfo getAllocateGroupsV2(WeAllocateGroupsVO weAllocateGroupsVo) { + return getDataTable(new ArrayList<>()); + } + + + /** + * 内部应用获取用户userId + * + * @param code + * @return + */ + @GetMapping("/getUserInfo") + @ApiOperation("内部应用获取用户userId") + public AjaxResult getUserInfo(String code, String agentId) { + WeUserInfoVO userInfo = weUserService.getUserInfo(code, agentId, LoginTokenService.getLoginUser().getCorpId()); + return AjaxResult.success(userInfo); + } + + @PostMapping("/batchUpdateUserInfo") + @ApiOperation("批量修改员工信息") + public AjaxResult batchUpdateUserInfo(@Validated @RequestBody BatchUpdateUserInfoDTO batchUpdateUserInfoDTO) { + batchUpdateUserInfoDTO.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + return AjaxResult.success(weUserService.batchUpdateUserInfo(batchUpdateUserInfoDTO)); + } +} diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeWordsCategoryController.java b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeWordsCategoryController.java new file mode 100644 index 0000000..ba99557 --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeWordsCategoryController.java @@ -0,0 +1,101 @@ +package com.easyink.web.controller.wecom; + +import com.easyink.common.annotation.Log; +import com.easyink.common.constant.WeConstans; +import com.easyink.common.core.controller.BaseController; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.core.domain.model.LoginUser; +import com.easyink.common.enums.BusinessType; +import com.easyink.common.enums.WeWordsCategoryTypeEnum; +import com.easyink.wecom.domain.dto.wordscategory.*; +import com.easyink.wecom.domain.vo.WeWordsCategoryVO; +import com.easyink.wecom.login.util.LoginTokenService; +import com.easyink.wecom.service.WeWordsCategoryService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.ArrayList; + +/** + * 类名: WeWordsCategoryController + * + * @author: Society my sister Li + * @date: 2021-10-25 10:32 + */ +@RestController +@RequestMapping("/wecom/wordscategory") +@Api(value = "WeWordsCategoryController", tags = "企业话术库文件夹接口") +public class WeWordsCategoryController extends BaseController { + + private final WeWordsCategoryService weWordsCategoryService; + + @Autowired + public WeWordsCategoryController(WeWordsCategoryService weWordsCategoryService) { + this.weWordsCategoryService = weWordsCategoryService; + } + + @Log(title = "新增文件夹", businessType = BusinessType.INSERT) + @PostMapping("/add") + @ApiOperation("新增文件夹") + public AjaxResult add(@Validated @RequestBody AddWeWordsCategoryDTO weWordsCategory) { + LoginUser loginUser = LoginTokenService.getLoginUser(); + weWordsCategory.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + weWordsCategoryService.insert(loginUser, weWordsCategory); + return AjaxResult.success(); + } + + + @Log(title = "修改文件夹", businessType = BusinessType.UPDATE) + @PutMapping("/update") + @ApiOperation("修改文件夹") + public AjaxResult update(@Validated @RequestBody UpdateWeWordsCategoryDTO updateWeWordsCategoryDTO) { + LoginUser loginUser = LoginTokenService.getLoginUser(); + updateWeWordsCategoryDTO.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + weWordsCategoryService.update(loginUser, updateWeWordsCategoryDTO); + return AjaxResult.success(); + } + + @Log(title = "删除文件夹", businessType = BusinessType.DELETE) + @DeleteMapping("/delete") + @ApiOperation("删除文件夹") + public AjaxResult delete(@Validated @RequestBody DeleteWeWordsCategoryDTO deleteWeWordsCategoryDTO) { + deleteWeWordsCategoryDTO.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + weWordsCategoryService.delete(deleteWeWordsCategoryDTO); + return AjaxResult.success(); + } + + @Log(title = "查询列表", businessType = BusinessType.OTHER) + @GetMapping("/list") + @ApiOperation("查询列表") + public AjaxResult list(@Validated FindWeWordsCategoryDTO findWeWordsCategoryDTO) { + LoginUser loginUser = LoginTokenService.getLoginUser(); + Integer type = findWeWordsCategoryDTO.getType(); + //设置权限范围,若为admin则 不能查询部门和个人文件夹 + if (WeWordsCategoryTypeEnum.CORP.getType().equals(type)) { + findWeWordsCategoryDTO.setUseRange(WeConstans.WE_ROOT_DEPARMENT_ID.toString()); + } else { + if (loginUser.getWeUser() == null) { + return AjaxResult.success(new ArrayList()); + } + if (WeWordsCategoryTypeEnum.DEPARTMENT.getType().equals(type)) { + findWeWordsCategoryDTO.setUseRange(loginUser.getWeUser().getMainDepartment().toString()); + } else { + findWeWordsCategoryDTO.setUseRange(loginUser.getWeUser().getUserId()); + } + } + findWeWordsCategoryDTO.setCorpId(loginUser.getCorpId()); + return AjaxResult.success(weWordsCategoryService.list(findWeWordsCategoryDTO)); + } + + + @Log(title = "文件夹上移/下移/置顶", businessType = BusinessType.OTHER) + @PutMapping("/changeSort") + @ApiOperation("文件夹上移/下移/置顶") + public AjaxResult changeSort(@Validated @RequestBody WeWordsCategoryChangeSortDTO weWordsCategoryChangeSortDTO) { + weWordsCategoryChangeSortDTO.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + return AjaxResult.success(weWordsCategoryService.changeSort(weWordsCategoryChangeSortDTO)); + } +} diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeWordsGroupController.java b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeWordsGroupController.java new file mode 100644 index 0000000..70377d8 --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/WeWordsGroupController.java @@ -0,0 +1,154 @@ +package com.easyink.web.controller.wecom; + +import com.easyink.common.constant.WeConstans; +import com.easyink.common.core.controller.BaseController; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.core.page.TableDataInfo; +import com.easyink.wecom.domain.WeWordsGroupEntity; +import com.easyink.wecom.domain.WeWordsLastUseEntity; +import com.easyink.wecom.domain.dto.WeWordsDTO; +import com.easyink.wecom.domain.dto.WeWordsDelDTO; +import com.easyink.wecom.domain.dto.WeWordsQueryDTO; +import com.easyink.wecom.domain.dto.WeWordsSortDTO; +import com.easyink.wecom.domain.dto.tag.WeWordsModifyCategoryDTO; +import com.easyink.wecom.domain.vo.WeWordsUrlVO; +import com.easyink.wecom.domain.vo.WeWordsVO; +import com.easyink.wecom.login.util.LoginTokenService; +import com.easyink.wecom.service.WeWordsGroupService; +import com.easyink.wecom.service.WeWordsLastUseService; +import com.github.pagehelper.PageHelper; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiResponse; +import io.swagger.annotations.ApiResponses; +import lombok.extern.slf4j.Slf4j; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +/** + * 类名: 企业话术库接口 + * + * @author 佚名 + * @date 2021/10/28 14:51 + */ +@RestController +@RequestMapping("/wecom/wordsGroup") +@Slf4j +@Api(value = "WeWordsGroupController", tags = "企业话术库接口") +public class WeWordsGroupController extends BaseController { + private final WeWordsGroupService weWordsGroupService; + private final WeWordsLastUseService weWordsLastUseService; + + public WeWordsGroupController(WeWordsGroupService weWordsGroupService, WeWordsLastUseService weWordsLastUseService) { + this.weWordsGroupService = weWordsGroupService; + this.weWordsLastUseService = weWordsLastUseService; + } + + @PostMapping("/add") + @ApiOperation("添加") + public AjaxResult add(@Validated @RequestBody WeWordsDTO weWordsDTO) { + weWordsDTO.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + //非admin 设置员工主部门 + if (!LoginTokenService.getLoginUser().isSuperAdmin()) { + weWordsDTO.setMainDepartment(LoginTokenService.getLoginUser().getWeUser().getMainDepartment()); + } + weWordsGroupService.add(weWordsDTO); + return AjaxResult.success(); + } + + @DeleteMapping("/delete") + @ApiOperation("删除") + public AjaxResult delete(@Validated @RequestBody WeWordsDelDTO weWordsDelDTO) { + weWordsGroupService.delete(weWordsDelDTO.getIds(), LoginTokenService.getLoginUser().getCorpId()); + return AjaxResult.success(); + } + + @PostMapping("/update") + @ApiOperation("修改") + public AjaxResult update(@Validated @RequestBody WeWordsDTO weWordsDTO) { + weWordsDTO.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + if (!LoginTokenService.getLoginUser().isSuperAdmin()) { + weWordsDTO.setMainDepartment(LoginTokenService.getLoginUser().getWeUser().getMainDepartment()); + } + weWordsGroupService.update(weWordsDTO); + return AjaxResult.success(); + } + + @PostMapping("/listOfWords") + @ApiOperation("查询") + public TableDataInfo listOfWords(@Validated @RequestBody WeWordsQueryDTO weWordsQueryDTO) { + weWordsQueryDTO.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + if (weWordsQueryDTO.getPageSize() != null) { + if (weWordsQueryDTO.getPageNum() == null) { + weWordsQueryDTO.setPageNum(WeConstans.FIRST_PAGE); + } + if (weWordsQueryDTO.getId() != null) { + WeWordsGroupEntity weWordsGroupEntity = weWordsGroupService.get(weWordsQueryDTO.getId()); + weWordsQueryDTO.setSort(weWordsGroupEntity.getSort()); + } + PageHelper.startPage(weWordsQueryDTO.getPageNum(), weWordsQueryDTO.getPageSize()); + } + return getDataTable(weWordsGroupService.listOfWords(weWordsQueryDTO)); + } + + @PostMapping("/updateCategory") + @ApiOperation("批量修改所属文件夹") + public AjaxResult updateCategory(@Validated @RequestBody WeWordsModifyCategoryDTO weWordsModifyCategoryDTO) { + weWordsGroupService.updateCategory(weWordsModifyCategoryDTO.getCategoryId(), weWordsModifyCategoryDTO.getIds(), LoginTokenService.getLoginUser().getCorpId()); + return AjaxResult.success(); + } + + @PostMapping("/importWords") + @ApiOperation("导入话术") + public AjaxResult importWords(MultipartFile file, @RequestParam("type") Integer type) { + return AjaxResult.success(weWordsGroupService.importWords(file, LoginTokenService.getLoginUser(), type)); + } + + @PostMapping("/addOrUpdateLastUse") + @ApiOperation("保存或更新最近使用") + public AjaxResult addOrUpdateLastUse(@RequestBody WeWordsLastUseEntity weWordsLastUseEntity) { + weWordsLastUseEntity.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + String userId; + if (LoginTokenService.getLoginUser().isSuperAdmin()) { + userId = LoginTokenService.getLoginUser().getUsername(); + } else { + userId = LoginTokenService.getLoginUser().getWeUser().getUserId(); + } + weWordsLastUseEntity.setUserId(userId); + weWordsLastUseService.addOrUpdateLastUse(weWordsLastUseEntity); + return AjaxResult.success(); + } + + @GetMapping("/getLastUse") + @ApiOperation("查询最近使用") + public AjaxResult getLastUse(@RequestParam("type") Integer type) { + String userId; + if (LoginTokenService.getLoginUser().isSuperAdmin()) { + userId = LoginTokenService.getLoginUser().getUsername(); + } else { + userId = LoginTokenService.getLoginUser().getWeUser().getUserId(); + } + return AjaxResult.success(weWordsLastUseService.listOfWordsVO(userId, LoginTokenService.getLoginUser().getCorpId(), type)); + } + + @GetMapping("/getUrlContent") + @ApiOperation("获取链接信息") + @ApiResponses({ + @ApiResponse(code = 2035, message = "话术库获取链接内容失败") + }) + public AjaxResult getUrlContent(@RequestParam("url") String url) { + return AjaxResult.success(weWordsGroupService.matchUrl(url)); + } + + @PostMapping("/changeSort") + @ApiOperation("修改排序") + @ApiResponses({ + @ApiResponse(code = 2036, message = "话术库缺少排序号、话术id,修改失败") + }) + public AjaxResult changeSort(@RequestBody WeWordsSortDTO weWordsSortDTO) { + weWordsSortDTO.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + weWordsGroupService.changeSort(weWordsSortDTO); + return AjaxResult.success(); + } +} diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/wecom/autotag/WeAutoTagRuleController.java b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/autotag/WeAutoTagRuleController.java new file mode 100644 index 0000000..32b5dcd --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/autotag/WeAutoTagRuleController.java @@ -0,0 +1,197 @@ +package com.easyink.web.controller.wecom.autotag; + + +import com.easyink.common.core.controller.BaseController; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.core.page.TableDataInfo; +import com.easyink.wecom.domain.dto.autotag.TagRuleBatchStatusDTO; +import com.easyink.wecom.domain.dto.autotag.TagRuleDeleteDTO; +import com.easyink.wecom.domain.dto.autotag.customer.AddCustomerTagRuleDTO; +import com.easyink.wecom.domain.dto.autotag.customer.UpdateCustomerTagRuleDTO; +import com.easyink.wecom.domain.dto.autotag.group.AddGroupTagRuleDTO; +import com.easyink.wecom.domain.dto.autotag.group.UpdateGroupTagRuleDTO; +import com.easyink.wecom.domain.dto.autotag.keyword.AddKeywordTagRuleDTO; +import com.easyink.wecom.domain.dto.autotag.keyword.UpdateKeywordTagRuleDTO; +import com.easyink.wecom.domain.query.autotag.RuleInfoQuery; +import com.easyink.wecom.domain.query.autotag.TagRuleQuery; +import com.easyink.wecom.domain.vo.autotag.TagRuleListVO; +import com.easyink.wecom.domain.vo.autotag.customer.TagRuleCustomerInfoVO; +import com.easyink.wecom.domain.vo.autotag.group.TagRuleGroupInfoVO; +import com.easyink.wecom.domain.vo.autotag.keyword.TagRuleKeywordInfoVO; +import com.easyink.wecom.login.util.LoginTokenService; +import com.easyink.wecom.service.autotag.WeAutoTagRuleService; +import com.github.pagehelper.PageHelper; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + + +/** + * 标签规则表(WeAutoTagRule)表控制层 + * + * @author tigger + * @since 2022-02-27 15:52:39 + */ +@Api(tags = "自动标签规则") +@RestController +@RequestMapping("wecom/auto/tag/rule") +public class WeAutoTagRuleController extends BaseController { + + @Autowired + private WeAutoTagRuleService weAutoTagRuleService; + + @PreAuthorize("@ss.hasPermi('customerManage:autoLabel:list')") + @ApiOperation("关键词规则列表") + @PostMapping("keyword/list") + public TableDataInfo listKeyword(@RequestBody TagRuleQuery query) { + query.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + PageHelper.startPage(query.getPageNum(), query.getPageSize(), null); + List list = weAutoTagRuleService.listKeyword(query); + return getDataTable(list); + } + + @PreAuthorize("@ss.hasPermi('customerManage:autoLabel:list')") + @ApiOperation("群规则列表") + @PostMapping("group/list") + public TableDataInfo listGroup(@RequestBody TagRuleQuery query) { + query.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + PageHelper.startPage(query.getPageNum(), query.getPageSize(), null); + List list = weAutoTagRuleService.listGroup(query); + return getDataTable(list); + } + + @PreAuthorize("@ss.hasPermi('customerManage:autoLabel:list')") + @ApiOperation("新客规则列表") + @PostMapping("customer/list") + public TableDataInfo listCustomer(@RequestBody TagRuleQuery query) { + query.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + PageHelper.startPage(query.getPageNum(), query.getPageSize(), null); + List list = weAutoTagRuleService.listCustomer(query); + return getDataTable(list); + } + + /** + * 详情 + */ + @ApiOperation("关键词规则详情") + @GetMapping("keyword/info") + public AjaxResult keywordInfo(RuleInfoQuery query) { + query.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + return AjaxResult.success(weAutoTagRuleService.keywordInfo(query)); + } + + @ApiOperation("群规则详情") + @GetMapping("group/info") + public AjaxResult groupInfo(RuleInfoQuery query) { + query.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + return AjaxResult.success(weAutoTagRuleService.groupInfo(query)); + } + + @ApiOperation("新客规则详情") + @GetMapping("customer/info") + public AjaxResult customerInfo(RuleInfoQuery query) { + query.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + return AjaxResult.success(weAutoTagRuleService.customerInfo(query)); + } + + @PreAuthorize("@ss.hasPermi('wecom:autotag:add')") + @ApiOperation("关键词规则新增") + @PostMapping("keyword/add") + public AjaxResult keywordAdd(@RequestBody AddKeywordTagRuleDTO addKeywordTagRuleDTO) { + if (LoginTokenService.getLoginUser().isSuperAdmin()) { + addKeywordTagRuleDTO.setCreateBy(LoginTokenService.getUsername()); + } else { + addKeywordTagRuleDTO.setCreateBy(LoginTokenService.getLoginUser().getWeUser().getUserId()); + } + addKeywordTagRuleDTO.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + return toAjax(weAutoTagRuleService.keywordAdd(addKeywordTagRuleDTO)); + } + + @PreAuthorize("@ss.hasPermi('wecom:autotag:add')") + @ApiOperation("入群规则新增") + @PostMapping("group/add") + public AjaxResult groupAdd(@RequestBody AddGroupTagRuleDTO addGroupTagRuleDTO) { + if (LoginTokenService.getLoginUser().isSuperAdmin()) { + addGroupTagRuleDTO.setCreateBy(LoginTokenService.getUsername()); + } else { + addGroupTagRuleDTO.setCreateBy(LoginTokenService.getLoginUser().getWeUser().getUserId()); + } + addGroupTagRuleDTO.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + return toAjax(weAutoTagRuleService.groupAdd(addGroupTagRuleDTO)); + } + + @PreAuthorize("@ss.hasPermi('wecom:autotag:add')") + @ApiOperation("新客规则新增") + @PostMapping("customer/add") + public AjaxResult customerAdd(@RequestBody AddCustomerTagRuleDTO addCustomerTagRuleDTO) { + addCustomerTagRuleDTO.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + if (LoginTokenService.getLoginUser().isSuperAdmin()) { + addCustomerTagRuleDTO.setCreateBy(LoginTokenService.getUsername()); + } else { + addCustomerTagRuleDTO.setCreateBy(LoginTokenService.getLoginUser().getWeUser().getUserId()); + } + return toAjax(weAutoTagRuleService.customerAdd(addCustomerTagRuleDTO)); + } + + @PreAuthorize("@ss.hasPermi('wecom:autotag:edit')") + @ApiOperation("关键词规则修改") + @PutMapping("keyword/edit") + public AjaxResult keywordEdit(@RequestBody UpdateKeywordTagRuleDTO updateKeywordTagRuleDTO) { + return toAjax(weAutoTagRuleService.keywordEdit(updateKeywordTagRuleDTO, LoginTokenService.getLoginUser().getCorpId())); + } + + @PreAuthorize("@ss.hasPermi('wecom:autotag:edit')") + @ApiOperation("入群规则修改") + @PutMapping("group/edit") + public AjaxResult groupEdit(@RequestBody UpdateGroupTagRuleDTO updateGroupTagRuleDTO) { + return toAjax(weAutoTagRuleService.groupEdit(updateGroupTagRuleDTO, LoginTokenService.getLoginUser().getCorpId())); + } + + @PreAuthorize("@ss.hasPermi('wecom:autotag:edit')") + @ApiOperation("新客规则修改") + @PutMapping("customer/edit") + public AjaxResult customerEdit(@RequestBody UpdateCustomerTagRuleDTO updateCustomerTagRuleDTO) { + return toAjax(weAutoTagRuleService.customerEdit(updateCustomerTagRuleDTO, LoginTokenService.getLoginUser().getCorpId())); + } + + /** + * 删除 + */ + @PreAuthorize("@ss.hasPermi('wecom:autotag:del')") + @ApiOperation("关键词规则删除") + @DeleteMapping("keyword/remove") + public AjaxResult keywordDelete(@Validated @RequestBody TagRuleDeleteDTO deleteDTO) { + return toAjax(weAutoTagRuleService.keywordDelete(deleteDTO, LoginTokenService.getLoginUser().getCorpId())); + } + + @PreAuthorize("@ss.hasPermi('wecom:autotag:del')") + @ApiOperation("入群规则删除") + @DeleteMapping("group/remove") + public AjaxResult groupDelete(@Validated @RequestBody TagRuleDeleteDTO deleteDTO) { + return toAjax(weAutoTagRuleService.groupDelete(deleteDTO, LoginTokenService.getLoginUser().getCorpId())); + } + + @PreAuthorize("@ss.hasPermi('wecom:autotag:del')") + @ApiOperation("新客规则删除") + @DeleteMapping("customer/remove") + public AjaxResult customerDelete(@Validated @RequestBody TagRuleDeleteDTO deleteDTO) { + return toAjax(weAutoTagRuleService.customerDelete(deleteDTO, LoginTokenService.getLoginUser().getCorpId())); + } + + @PreAuthorize("@ss.hasPermi('wecom:autotag:enable')") + @ApiOperation("批量启用禁用") + @PostMapping("batch/status") + public AjaxResult batchStatus(@Validated @RequestBody TagRuleBatchStatusDTO tagRuleBatchStatusDTO) { + tagRuleBatchStatusDTO.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + weAutoTagRuleService.batchStatus(tagRuleBatchStatusDTO); + return AjaxResult.success(); + } + + +} + diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/wecom/autotag/WeAutoTagRuleHitRecordController.java b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/autotag/WeAutoTagRuleHitRecordController.java new file mode 100644 index 0000000..0542437 --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/autotag/WeAutoTagRuleHitRecordController.java @@ -0,0 +1,118 @@ +package com.easyink.web.controller.wecom.autotag; + + +import com.easyink.common.core.controller.BaseController; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.core.page.TableDataInfo; +import com.easyink.wecom.domain.query.autotag.CustomerTagRuleRecordQuery; +import com.easyink.wecom.domain.query.autotag.GroupTagRuleRecordQuery; +import com.easyink.wecom.domain.query.autotag.TagRuleRecordKeywordDetailQuery; +import com.easyink.wecom.domain.query.autotag.TagRuleRecordQuery; +import com.easyink.wecom.domain.vo.autotag.record.CustomerCountVO; +import com.easyink.wecom.domain.vo.autotag.record.customer.CustomerTagRuleRecordVO; +import com.easyink.wecom.domain.vo.autotag.record.group.GroupTagRuleRecordVO; +import com.easyink.wecom.domain.vo.autotag.record.keyword.KeywordRecordDetailVO; +import com.easyink.wecom.domain.vo.autotag.record.keyword.KeywordTagRuleRecordVO; +import com.easyink.wecom.login.util.LoginTokenService; +import com.easyink.wecom.service.autotag.WeAutoTagRuleHitCustomerRecordService; +import com.easyink.wecom.service.autotag.WeAutoTagRuleHitGroupRecordService; +import com.easyink.wecom.service.autotag.WeAutoTagRuleHitKeywordRecordService; +import com.github.pagehelper.PageHelper; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + + +/** + * 客户打标签记录表(WeAutoTagRuleHitRecord)表控制层 + * + * @author tigger + * @since 2022-02-27 15:52:40 + */ +@Api(tags = "自动标签记录") +@RestController +@RequestMapping("wecom/auto/tag/hit/record") +public class WeAutoTagRuleHitRecordController extends BaseController { + + @Autowired + private WeAutoTagRuleHitKeywordRecordService weAutoTagRuleHitKeywordRecordService; + @Autowired + private WeAutoTagRuleHitGroupRecordService weAutoTagRuleHitGroupRecordService; + @Autowired + private WeAutoTagRuleHitCustomerRecordService weAutoTagRuleHitCustomerRecordService; + + + /** + * 列表 + */ + @ApiOperation("关键词规则记录列表") + @PostMapping("keyword/list") + public TableDataInfo listKeywordRecord(@Validated @RequestBody TagRuleRecordQuery query) { + query.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + PageHelper.startPage(query.getPageNum(), query.getPageSize(), null); + List list = weAutoTagRuleHitKeywordRecordService.listKeywordRecord(query); + return getDataTable(list); + } + + /** + * 列表 + */ + @ApiOperation("触发关键词详情列表") + @PostMapping("keyword/detail") + public TableDataInfo listKeywordDetail(@Validated @RequestBody TagRuleRecordKeywordDetailQuery query) { + query.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + PageHelper.startPage(query.getPageNum(), query.getPageSize(), null); + List list = weAutoTagRuleHitKeywordRecordService.listKeywordDetail(query); + return getDataTable(list); + } + + + /** + * 列表 + */ + @ApiOperation("群规则记录列表") + @PostMapping("group/list") + public TableDataInfo listGroupRecord(@Validated @RequestBody GroupTagRuleRecordQuery query) { + query.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + PageHelper.startPage(query.getPageNum(), query.getPageSize(), null); + List list = weAutoTagRuleHitGroupRecordService.listGroupRecord(query); + return getDataTable(list); + } + + + @ApiOperation("新客规则记录列表") + @PostMapping("customer/list") + public TableDataInfo listCustomerRecord(@RequestBody CustomerTagRuleRecordQuery query) { + query.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + PageHelper.startPage(query.getPageNum(), query.getPageSize(), null); + List list = weAutoTagRuleHitCustomerRecordService.listCustomerRecord(query); + return getDataTable(list); + } + + @ApiOperation("关键词记录统计") + @GetMapping("keyword/count/{id}") + public AjaxResult keywordCount(@PathVariable("id") Long ruleId) { + CustomerCountVO countVO = weAutoTagRuleHitKeywordRecordService.keywordCustomerCount(ruleId, LoginTokenService.getLoginUser().getCorpId()); + return AjaxResult.success(countVO); + } + + @ApiOperation("群记录统计") + @GetMapping("group/count/{id}") + public AjaxResult groupCount(@PathVariable("id") Long ruleId) { + CustomerCountVO countVO = weAutoTagRuleHitGroupRecordService.groupCustomerCount(ruleId, LoginTokenService.getLoginUser().getCorpId()); + return AjaxResult.success(countVO); + } + + @ApiOperation("新客记录统计") + @GetMapping("customer/count/{id}") + public AjaxResult customerCount(@PathVariable("id") Long ruleId) { + CustomerCountVO countVO = weAutoTagRuleHitCustomerRecordService.customerCustomerCount(ruleId, LoginTokenService.getLoginUser().getCorpId()); + return AjaxResult.success(countVO); + } + +} + diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/wecom/radar/WeRadarChannelController.java b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/radar/WeRadarChannelController.java new file mode 100644 index 0000000..3b630c1 --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/radar/WeRadarChannelController.java @@ -0,0 +1,85 @@ +package com.easyink.web.controller.wecom.radar; + +import com.easyink.common.annotation.Log; +import com.easyink.common.core.controller.BaseController; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.core.page.TableDataInfo; +import com.easyink.common.enums.BusinessType; +import com.easyink.wecom.domain.dto.radar.DeleteRadarChannelDTO; +import com.easyink.wecom.domain.dto.radar.RadarChannelDTO; +import com.easyink.wecom.domain.dto.radar.SearchRadarChannelDTO; +import com.easyink.wecom.domain.vo.radar.WeRadarChannelVO; +import com.easyink.wecom.login.util.LoginTokenService; +import com.easyink.wecom.service.radar.WeRadarChannelService; +import io.swagger.annotations.Api; + +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * ClassName: weRadarChannelController + * + * @author wx + * @date 2022/7/19 14:48 + */ +@Api(tags = "雷达渠道Controller") +@RestController +@RequestMapping("/wecom/radar/channel") +public class WeRadarChannelController extends BaseController { + + private final WeRadarChannelService radarChannelService; + + @Autowired + public WeRadarChannelController(WeRadarChannelService radarChannelService) { + this.radarChannelService = radarChannelService; + } + + @Log(title = "新增雷达渠道", businessType = BusinessType.INSERT) + @PostMapping("/add") + @ApiOperation("新增雷达渠道") +// @PreAuthorize("@ss.hasPermi('redeeomCode:activity:add')") + public AjaxResult add(@RequestBody @Validated RadarChannelDTO radarChannelDTO) { + radarChannelService.saveRadarChannel(radarChannelDTO); + return AjaxResult.success(); + } + + @GetMapping("/list") + @ApiOperation("查询雷达渠道序列") + public TableDataInfo list(SearchRadarChannelDTO radarChannelDTO) { + startPage(); + List list = radarChannelService.getRadarChannelList(radarChannelDTO); + return getDataTable(list); + } + + //@PreAuthorize("@ss.hasPermi('wecom:redeemcode:remove')") + @Log(title = "删除雷达渠道", businessType = BusinessType.DELETE) + @DeleteMapping("/remove") + @ApiOperation("删除雷达渠道") + public AjaxResult remove(@Validated @RequestBody DeleteRadarChannelDTO deleteDTO) { + radarChannelService.batchRemoveRadarChannel(deleteDTO); + return AjaxResult.success(); + } + + + @GetMapping("/get") + @ApiOperation("获取雷达渠道详情") + public AjaxResult get(@RequestParam("id") Long id) { + String corpId = LoginTokenService.getLoginUser().getCorpId(); + return AjaxResult.success(radarChannelService.getRadarChannel(corpId, id)); + } + + //@PreAuthorize("@ss.hasPermi('wecom:redeemcode:edit')") + @Log(title = "修改雷达渠道", businessType = BusinessType.UPDATE) + @PutMapping("/update") + @ApiOperation("修改雷达渠道") + // @PreAuthorize("@ss.hasPermi('redeeomCode:activity:edit')") + public AjaxResult edit(@Validated @RequestBody RadarChannelDTO radarChannelDTO) { + radarChannelService.updateRadarChannel(radarChannelDTO); + return AjaxResult.success(); + } + +} diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/wecom/radar/WeRadarClickRecordController.java b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/radar/WeRadarClickRecordController.java new file mode 100644 index 0000000..c4ea67d --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/radar/WeRadarClickRecordController.java @@ -0,0 +1,92 @@ +package com.easyink.web.controller.wecom.radar; + +import com.easyink.common.annotation.Log; +import com.easyink.common.core.controller.BaseController; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.core.page.TableDataInfo; +import com.easyink.common.enums.BusinessType; +import com.easyink.wecom.domain.dto.radar.*; +import com.easyink.wecom.domain.vo.radar.*; +import com.easyink.wecom.service.radar.WeRadarClickRecordService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +/** + * ClassName: WeRadarClickRecordController + * + * @author wx + * @date 2022/7/19 19:54 + */ +@Api(tags = "雷达点击记录Controller") +@RestController +@RequestMapping("/wecom/radar/record") +public class WeRadarClickRecordController extends BaseController { + + private final WeRadarClickRecordService radarClickRecordService; + + + @Autowired + public WeRadarClickRecordController(WeRadarClickRecordService radarClickRecordService) { + this.radarClickRecordService = radarClickRecordService; + } + + @Log(title = "新增雷达点击记录", businessType = BusinessType.INSERT) + @PostMapping("/add") + @ApiOperation("新增雷达点击记录") +// @PreAuthorize("@ss.hasPermi('redeeomCode:activity:add')") + public AjaxResult add(@RequestBody @Validated RadarClickRecordDTO clickRecordDTO) { + radarClickRecordService.saveClickRecord(clickRecordDTO); + return AjaxResult.success(); + } + + @GetMapping("/getTotal") + @ApiOperation("雷达详情数据总览") + public AjaxResult getTotal(@RequestParam("radarId") Long radarId) { + return AjaxResult.success(radarClickRecordService.getTotal(radarId)); + } + + @GetMapping("/getTimeRangeAnalyseCount") + @ApiOperation("时间段内雷达点击数据统计") + public AjaxResult getTimeRangeAnalyseCount(SearchRadarAnalyseDTO radarAnalyseDTO) { + return AjaxResult.success(radarClickRecordService.getTimeRangeAnalyseCount(radarAnalyseDTO)); + } + + @GetMapping("/getChannelSort") + @ApiOperation("获得渠道排序") + public AjaxResult getChannelSort(@RequestParam("radarId") Long radarId) { + return AjaxResult.success(radarClickRecordService.getChannelSort(radarId)); + } + + + @GetMapping("/getCustomerClickRecord") + @ApiOperation("获取客户点击记录") + public TableDataInfo getCustomerClickRecord(SearchCustomerRecordDTO customerRecordDTO) { + startPage(); + return getDataTable(radarClickRecordService.getCustomerClickRecord(customerRecordDTO)); + } + + @GetMapping("/getCustomerClickRecordDetail") + @ApiOperation("获取客户点击记录详情") + public AjaxResult getCustomerClickRecordDetail(SearchCustomerRecordDetailDTO customerRecordDTO) { + return AjaxResult.success(radarClickRecordService.getCustomerClickRecordDetail(customerRecordDTO)); + } + + + @GetMapping("/getChannelClickRecord") + @ApiOperation("获取渠道点击记录") + public TableDataInfo getChannelClickRecord(SearchChannelRecordDTO channelRecordDTO) { + startPage(); + return getDataTable(radarClickRecordService.getChannelClickRecord(channelRecordDTO)); + } + + @GetMapping("/getChannelClickRecordDetail") + @ApiOperation("获取渠道点击记录详情") + public TableDataInfo getChannelClickRecordDetail(SearchChannelRecordDetailDTO channelRecordDetailDTO) { + startPage(); + return getDataTable(radarClickRecordService.getChannelClickRecordDetail(channelRecordDetailDTO)); + } + +} diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/wecom/radar/WeRadarController.java b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/radar/WeRadarController.java new file mode 100644 index 0000000..d6a925f --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/radar/WeRadarController.java @@ -0,0 +1,100 @@ +package com.easyink.web.controller.wecom.radar; + +import com.easyink.common.annotation.Log; +import com.easyink.common.constant.radar.RadarConstants; +import com.easyink.common.core.controller.BaseController; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.core.page.TableDataInfo; +import com.easyink.common.enums.BusinessType; +import com.easyink.common.enums.radar.RadarChannelEnum; +import com.easyink.wecom.domain.dto.common.AttachmentParam; +import com.easyink.wecom.domain.dto.radar.DeleteRadarDTO; +import com.easyink.wecom.domain.dto.radar.GetRadarShortUrlDTO; +import com.easyink.wecom.domain.dto.radar.RadarDTO; +import com.easyink.wecom.domain.dto.radar.SearchRadarDTO; +import com.easyink.wecom.domain.vo.radar.WeRadarVO; +import com.easyink.wecom.login.util.LoginTokenService; +import com.easyink.wecom.service.radar.WeRadarChannelService; +import com.easyink.wecom.service.radar.WeRadarService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * ClassName: WeRadarController + * + * @author wx + * @date 2022/7/18 14:57 + */ + +@Api(tags = "雷达Controller") +@RestController +@RequestMapping("/wecom/radar") +public class WeRadarController extends BaseController { + + private final WeRadarService weRadarService; + private final WeRadarChannelService radarChannelService; + + @Autowired + public WeRadarController(WeRadarService weRadarService, WeRadarChannelService radarChannelService) { + this.weRadarService = weRadarService; + this.radarChannelService = radarChannelService; + } + + @Log(title = "新增雷达", businessType = BusinessType.INSERT) + @PostMapping("/add") + @ApiOperation("新增雷达") + //@PreAuthorize("@ss.hasPermi('redeeomCode:activity:add')") + public AjaxResult add(@RequestBody @Validated RadarDTO radarDTO) { + radarDTO.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + weRadarService.saveRadar(radarDTO); + return AjaxResult.success(); + } + + @GetMapping("/list") + @ApiOperation("查询雷达列表") + public TableDataInfo list(SearchRadarDTO radarDTO) { + radarDTO.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + List list = weRadarService.getRadarList(radarDTO); + return getDataTable(list); + } + + @GetMapping("/get") + @ApiOperation("获取雷达详情") + public AjaxResult get(@RequestParam("id") Long id) { + String corpId = LoginTokenService.getLoginUser().getCorpId(); + WeRadarVO weRadarVO = weRadarService.getRadar(corpId, id); + return AjaxResult.success(weRadarVO); + } + + @Log(title = "更新雷达", businessType = BusinessType.UPDATE) + @PutMapping("/update") + @ApiOperation("修改雷达") + //@PreAuthorize("@ss.hasPermi('redeeomCode:activity:edit')") + public AjaxResult edit(@RequestBody @Validated RadarDTO radarDTO) { + radarDTO.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + weRadarService.updateRadar(radarDTO); + return AjaxResult.success(); + } + + @Log(title = "删除雷达", businessType = BusinessType.DELETE) + @DeleteMapping("/remove") + @ApiOperation("删除雷达") + //@PreAuthorize("@ss.hasPermi('redeeomCode:activity:del')") + public AjaxResult remove(@Validated @RequestBody DeleteRadarDTO deleteDTO) { + String corpId = LoginTokenService.getLoginUser().getCorpId(); + return toAjax(weRadarService.batchRemoveRadar(corpId, deleteDTO)); + } + + @GetMapping("/getRadarShortUrl") + @ApiOperation("侧边栏获取雷达短链") + public AjaxResult getRadarShortUrl(GetRadarShortUrlDTO radarShortUrlDTO) { + String corpId = LoginTokenService.getLoginUser().getCorpId(); + return AjaxResult.success(weRadarService.getRadarShortUrl(radarShortUrlDTO.getRadarId(), RadarChannelEnum.SIDE_BAR.getTYPE(), radarShortUrlDTO.getUserId(), corpId, RadarConstants.RadarCustomerClickRecord.EMPTY_SCENARIO)); + } + +} diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/wecom/redeemcode/WeRedeemCodeActivityController.java b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/redeemcode/WeRedeemCodeActivityController.java new file mode 100644 index 0000000..c55ef7d --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/redeemcode/WeRedeemCodeActivityController.java @@ -0,0 +1,91 @@ +package com.easyink.web.controller.wecom.redeemcode; + +import com.easyink.common.annotation.Log; +import com.easyink.common.core.controller.BaseController; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.core.page.TableDataInfo; +import com.easyink.common.enums.BusinessType; +import com.easyink.wecom.domain.dto.redeemcode.WeRedeemCodeActivityDTO; +import com.easyink.wecom.domain.dto.redeemcode.WeRedeemCodeActivityDeleteDTO; +import com.easyink.wecom.domain.vo.redeemcode.WeRedeemCodeActivityVO; +import com.easyink.wecom.login.util.LoginTokenService; +import com.easyink.wecom.service.redeemcode.WeRedeemCodeActivityService; +import com.easyink.wecom.service.redeemcode.WeRedeemCodeService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 兑换码活动Controller + * + * @author wx + * @date 2022/7/4 14:09 + */ +@Api(tags = "兑换码活动Controller") +@RestController +@RequestMapping("/wecom/redeem") +public class WeRedeemCodeActivityController extends BaseController { + + + private final WeRedeemCodeActivityService weRedeemCodeActivityService; + private final WeRedeemCodeService weRedeemCodeService; + + @Autowired + public WeRedeemCodeActivityController(WeRedeemCodeActivityService weRedeemCodeActivityService, WeRedeemCodeService weRedeemCodeService) { + this.weRedeemCodeActivityService = weRedeemCodeActivityService; + this.weRedeemCodeService = weRedeemCodeService; + } + + //@PreAuthorize("@ss.hasPermi('wecom:redeemcode:add')") + @Log(title = "兑换码活动", businessType = BusinessType.INSERT) + @PostMapping("/add") + @ApiOperation("新增兑换码活动") + @PreAuthorize("@ss.hasPermi('redeeomCode:activity:add')") + public AjaxResult add(@RequestBody @Validated WeRedeemCodeActivityDTO weRedeemCodeActivityDTO) { + weRedeemCodeActivityDTO.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + return AjaxResult.success(weRedeemCodeActivityService.saveReemCodeActivity(weRedeemCodeActivityDTO)); + } + + @GetMapping("/list") + @ApiOperation("查询兑换码活动列表") + public TableDataInfo list(WeRedeemCodeActivityDTO weRedeemCodeActivityDTO) { + weRedeemCodeActivityDTO.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + startPage(); + List list = weRedeemCodeActivityService.getReemCodeActivityList(weRedeemCodeActivityDTO); + return getDataTable(list); + } + + //@PreAuthorize("@ss.hasPermi('wecom:redeemcode:edit')") + @Log(title = "兑换码活动", businessType = BusinessType.UPDATE) + @PutMapping("/update") + @ApiOperation("修改兑换码活动") + @PreAuthorize("@ss.hasPermi('redeeomCode:activity:edit')") + public AjaxResult edit(@Validated @RequestBody WeRedeemCodeActivityDTO weRedeemCodeActivityDTO) { + weRedeemCodeActivityDTO.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + weRedeemCodeActivityService.updateWeRedeemCodeActivity(weRedeemCodeActivityDTO); + return AjaxResult.success(); + } + + //@PreAuthorize("@ss.hasPermi('wecom:redeemcode:remove')") + @Log(title = "兑换码活动", businessType = BusinessType.DELETE) + @DeleteMapping("/remove") + @ApiOperation("删除兑换码活动") + @PreAuthorize("@ss.hasPermi('redeeomCode:activity:del')") + public AjaxResult remove(@Validated @RequestBody WeRedeemCodeActivityDeleteDTO deleteDTO) { + String corpId = LoginTokenService.getLoginUser().getCorpId(); + return toAjax(weRedeemCodeActivityService.batchRemoveRedeemCodeActivity(corpId, deleteDTO)); + } + + @GetMapping("/get") + @ApiOperation("获取兑换码活动详情") + public AjaxResult get(@RequestParam("id") Long id) { + String corpId = LoginTokenService.getLoginUser().getCorpId(); + return AjaxResult.success(weRedeemCodeActivityService.getRedeemCodeActivity(corpId, id)); + } + +} \ No newline at end of file diff --git a/easyink-admin/src/main/java/com/easyink/web/controller/wecom/redeemcode/WeRedeemCodeController.java b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/redeemcode/WeRedeemCodeController.java new file mode 100644 index 0000000..81f3f4e --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/controller/wecom/redeemcode/WeRedeemCodeController.java @@ -0,0 +1,114 @@ +package com.easyink.web.controller.wecom.redeemcode; + +import com.easyink.common.annotation.Log; +import com.easyink.common.core.controller.BaseController; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.core.page.TableDataInfo; +import com.easyink.common.enums.BusinessType; +import com.easyink.wecom.domain.dto.redeemcode.WeRedeemCodeDTO; +import com.easyink.wecom.domain.dto.redeemcode.WeRedeemCodeDeleteDTO; +import com.easyink.wecom.domain.vo.redeemcode.ImportRedeemCodeVO; +import com.easyink.wecom.domain.vo.redeemcode.WeRedeemCodeActivityVO; +import com.easyink.wecom.domain.vo.redeemcode.WeRedeemCodeVO; +import com.easyink.wecom.login.util.LoginTokenService; +import com.easyink.wecom.service.WeCustomerService; +import com.easyink.wecom.service.redeemcode.WeRedeemCodeService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import java.util.List; + +/** + * ClassName: WeRedeemCode + * + * @author wx + * @date 2022/7/6 10:43 + */ + +@Api(tags = "兑换码Controller") +@RestController +@RequestMapping("/wecom/redeemcode") +public class WeRedeemCodeController extends BaseController { + + private final WeRedeemCodeService weRedeemCodeService; + + private final WeCustomerService weCustomerService; + + @Autowired + public WeRedeemCodeController(WeRedeemCodeService weRedeemCodeService, WeCustomerService weCustomerService) { + this.weRedeemCodeService = weRedeemCodeService; + this.weCustomerService = weCustomerService; + } + + + @ApiOperation(value = "导入兑换码的excel", httpMethod = "POST") + @PostMapping("/importRedeemCode/{id}") + public AjaxResult importRedeemCode(@RequestParam("file") MultipartFile file, @PathVariable String id) throws Exception { + String corpId = LoginTokenService.getLoginUser().getCorpId(); + ImportRedeemCodeVO result = weRedeemCodeService.importRedeemCode(corpId, file, id); + return AjaxResult.success(result); + } + + @Log(title = "新增兑换码", businessType = BusinessType.INSERT) + @PostMapping("/add") + @ApiOperation("新增兑换码") + public AjaxResult add(@RequestBody @Validated WeRedeemCodeDTO weRedeemCodeDTO) { + weRedeemCodeService.saveRedeemCode(weRedeemCodeDTO); + return AjaxResult.success(); + } + + @Log(title = "编辑修改兑换码", businessType = BusinessType.UPDATE) + @PutMapping("/update") + @ApiOperation("编辑修改兑换码") + public AjaxResult edit(@RequestBody @Validated WeRedeemCodeDTO weRedeemCodeDTO) { + weRedeemCodeDTO.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + weRedeemCodeService.updateRedeemCode(weRedeemCodeDTO); + return AjaxResult.success(); + } + + @Log(title = "删除兑换码", businessType = BusinessType.DELETE) + @DeleteMapping("/remove") + @ApiOperation("删除兑换码活动") + public AjaxResult remove(@Validated @RequestBody WeRedeemCodeDeleteDTO deleteDTO) { + return toAjax(weRedeemCodeService.batchRemoveRedeemCode(deleteDTO)); + } + + @GetMapping("/list") + @ApiOperation("查询兑换码列表") + public TableDataInfo list(WeRedeemCodeDTO weRedeemCodeDTO) { + weRedeemCodeDTO.setCorpId(LoginTokenService.getLoginUser().getCorpId()); + List list = weRedeemCodeService.getReemCodeList(weRedeemCodeDTO); + return getDataTable(list); + } + + @GetMapping("/customerList") + @ApiOperation("查询联系人") + public AjaxResult getCustomerList(String customerName) { + String corpId = LoginTokenService.getLoginUser().getCorpId(); + return AjaxResult.success(weCustomerService.getCustomer(corpId, customerName)); + } + +} + + + + + + + + + + + + + + + + + + + diff --git a/easyink-admin/src/main/java/com/easyink/web/core/config/Knife4jConfig.java b/easyink-admin/src/main/java/com/easyink/web/core/config/Knife4jConfig.java new file mode 100644 index 0000000..8d4df0c --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/core/config/Knife4jConfig.java @@ -0,0 +1,83 @@ +package com.easyink.web.core.config; + +import com.easyink.common.config.RuoYiConfig; +import com.easyink.common.enums.ResultTip; +import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j; +import com.github.xiaoymin.knife4j.spring.extension.OpenApiExtensionResolver; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.HttpMethod; +import springfox.documentation.builders.ApiInfoBuilder; +import springfox.documentation.builders.PathSelectors; +import springfox.documentation.builders.RequestHandlerSelectors; +import springfox.documentation.service.ApiInfo; +import springfox.documentation.service.Contact; +import springfox.documentation.service.Response; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spring.web.plugins.Docket; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; + +/** + * 类名: Knife4jConfig + * + * @author: 1*+ + * @date: 2021-08-27 15:38 + */ +@EnableKnife4j +@Configuration +public class Knife4jConfig { + private final OpenApiExtensionResolver openApiExtensionResolver; + private final RuoYiConfig ruoYiConfig; + + @Autowired + public Knife4jConfig(OpenApiExtensionResolver openApiExtensionResolver, RuoYiConfig ruoYiConfig) { + this.openApiExtensionResolver = openApiExtensionResolver; + this.ruoYiConfig = ruoYiConfig; + } + + @Bean + public Docket createRestApi() { + return new Docket(DocumentationType.OAS_30) + .host("http://localhost:8090/") + .apiInfo(apiInfo()) + .groupName(ruoYiConfig.getVersion()) + .select() + .apis(RequestHandlerSelectors.basePackage("com.easyink.web.controller")) + .paths(PathSelectors.any()).build() + .globalResponses(HttpMethod.POST, globalResponses()) + .globalResponses(HttpMethod.GET, globalResponses()) + .globalResponses(HttpMethod.PUT, globalResponses()) + .globalResponses(HttpMethod.DELETE, globalResponses()) + .extensions(openApiExtensionResolver.buildExtensions(ruoYiConfig.getVersion())); + + } + + private ApiInfo apiInfo() { + Contact contact = new Contact("厦门联络易科技有限公司", "www.lianluoyi.cn", ""); + return new ApiInfoBuilder() + .title("Easyink企业微信SCRM系统") + .description("Easyink是一款开箱即用的企业微信SCRM系统,为企业提供私域流量营销系统的综合解决方案,帮助企业提高社交客户运营效率。") + .version(ruoYiConfig.getVersion()) + .contact(contact) + .build(); + } + + private List globalResponses() { + ResultTip[] array = ResultTip.values(); + List responseList = new ArrayList<>(array.length); + for (ResultTip resultTip : array) { + //现阶段错误码超过500的都不是通用的错误码 + if (resultTip.getCode() > 500) { + break; + } + Response response = new Response(String.valueOf(resultTip.getCode()), resultTip.getTipMsg(), true, new ArrayList<>(), new HashSet<>(), new ArrayList<>(), new ArrayList<>()); + responseList.add(response); + } + return responseList; + } + +} diff --git a/easyink-admin/src/main/java/com/easyink/web/core/config/ResponseAdvice.java b/easyink-admin/src/main/java/com/easyink/web/core/config/ResponseAdvice.java new file mode 100644 index 0000000..aec1a33 --- /dev/null +++ b/easyink-admin/src/main/java/com/easyink/web/core/config/ResponseAdvice.java @@ -0,0 +1,32 @@ +package com.easyink.web.core.config; + +import com.easyink.common.core.domain.AjaxResult; +import lombok.extern.slf4j.Slf4j; +import org.springframework.core.MethodParameter; +import org.springframework.http.MediaType; +import org.springframework.http.server.ServerHttpRequest; +import org.springframework.http.server.ServerHttpResponse; +import org.springframework.web.bind.annotation.RestControllerAdvice; +import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice; + +import java.util.Objects; + +@RestControllerAdvice(basePackages = "com.easyink") +@Slf4j +public class ResponseAdvice implements ResponseBodyAdvice { + @Override + public boolean supports(MethodParameter methodParameter, Class aClass) { + return true; + } + + @Override + public Object beforeBodyWrite(Object o, MethodParameter methodParameter, MediaType mediaType, Class aClass, ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) { + if (Objects.isNull(o)) { + return AjaxResult.success().build(); + } + if (o instanceof AjaxResult) { + return ((AjaxResult) o).build(); + } + return o; + } +} \ No newline at end of file diff --git a/easywecom-admin/src/main/java/com/easywecom/EasyWeComApplication.java b/easyink-admin/src/main/java/com/easywecom/EasyWeComApplication.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/EasyWeComApplication.java rename to easyink-admin/src/main/java/com/easywecom/EasyWeComApplication.java diff --git a/easywecom-admin/src/main/java/com/easywecom/EasyWeComServletInitializer.java b/easyink-admin/src/main/java/com/easywecom/EasyWeComServletInitializer.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/EasyWeComServletInitializer.java rename to easyink-admin/src/main/java/com/easywecom/EasyWeComServletInitializer.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/common/CaptchaController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/common/CaptchaController.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/common/CaptchaController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/common/CaptchaController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/common/CommonController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/common/CommonController.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/common/CommonController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/common/CommonController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/common/ShortUrlController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/common/ShortUrlController.java similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/common/ShortUrlController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/common/ShortUrlController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/monitor/ServerController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/monitor/ServerController.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/monitor/ServerController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/monitor/ServerController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/monitor/SysLogininforController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/monitor/SysLogininforController.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/monitor/SysLogininforController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/monitor/SysLogininforController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/monitor/SysOperlogController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/monitor/SysOperlogController.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/monitor/SysOperlogController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/monitor/SysOperlogController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/monitor/SysUserOnlineController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/monitor/SysUserOnlineController.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/monitor/SysUserOnlineController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/monitor/SysUserOnlineController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/order/OrderLoginController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/order/OrderLoginController.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/order/OrderLoginController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/order/OrderLoginController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/order/OrderManagerController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/order/OrderManagerController.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/order/OrderManagerController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/order/OrderManagerController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/pro/WecomPlusController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/pro/WecomPlusController.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/pro/WecomPlusController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/pro/WecomPlusController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/system/SysConfigController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/system/SysConfigController.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/system/SysConfigController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/system/SysConfigController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/system/SysDeptController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/system/SysDeptController.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/system/SysDeptController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/system/SysDeptController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/system/SysDictDataController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/system/SysDictDataController.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/system/SysDictDataController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/system/SysDictDataController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/system/SysDictTypeController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/system/SysDictTypeController.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/system/SysDictTypeController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/system/SysDictTypeController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/system/SysLoginController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/system/SysLoginController.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/system/SysLoginController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/system/SysLoginController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/system/SysMenuController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/system/SysMenuController.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/system/SysMenuController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/system/SysMenuController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/system/SysNoticeController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/system/SysNoticeController.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/system/SysNoticeController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/system/SysNoticeController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/system/SysPostController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/system/SysPostController.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/system/SysPostController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/system/SysPostController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/system/SysProfileController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/system/SysProfileController.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/system/SysProfileController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/system/SysProfileController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/system/SysRoleController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/system/SysRoleController.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/system/SysRoleController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/system/SysRoleController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/system/SysUserController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/system/SysUserController.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/system/SysUserController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/system/SysUserController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/wechatopen/WechatOpenController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/wechatopen/WechatOpenController.java similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/wechatopen/WechatOpenController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/wechatopen/WechatOpenController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/PageHomeController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/wecom/PageHomeController.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/PageHomeController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/wecom/PageHomeController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/We3rdAppController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/wecom/We3rdAppController.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/We3rdAppController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/wecom/We3rdAppController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeAdminController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeAdminController.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeAdminController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeAdminController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeAppController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeAppController.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeAppController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeAppController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeApplicationManagerController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeApplicationManagerController.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeApplicationManagerController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeApplicationManagerController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeCallBackController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeCallBackController.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeCallBackController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeCallBackController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeCategoryController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeCategoryController.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeCategoryController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeCategoryController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeChatCollectionController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeChatCollectionController.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeChatCollectionController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeChatCollectionController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeChatContactMappingController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeChatContactMappingController.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeChatContactMappingController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeChatContactMappingController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeChatSideController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeChatSideController.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeChatSideController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeChatSideController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeCommunityGroupSopController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeCommunityGroupSopController.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeCommunityGroupSopController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeCommunityGroupSopController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeCommunityH5Controller.java b/easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeCommunityH5Controller.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeCommunityH5Controller.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeCommunityH5Controller.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeCommunityKeywordGroupController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeCommunityKeywordGroupController.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeCommunityKeywordGroupController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeCommunityKeywordGroupController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeCommunityNewGroupController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeCommunityNewGroupController.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeCommunityNewGroupController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeCommunityNewGroupController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeCommunityPresTagGroupController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeCommunityPresTagGroupController.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeCommunityPresTagGroupController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeCommunityPresTagGroupController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeCommunityPresTagGroupV2Controller.java b/easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeCommunityPresTagGroupV2Controller.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeCommunityPresTagGroupV2Controller.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeCommunityPresTagGroupV2Controller.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeConversationArchiveController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeConversationArchiveController.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeConversationArchiveController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeConversationArchiveController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeCorpAccountController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeCorpAccountController.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeCorpAccountController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeCorpAccountController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeCustomerController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeCustomerController.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeCustomerController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeCustomerController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeCustomerExtendPropertyController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeCustomerExtendPropertyController.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeCustomerExtendPropertyController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeCustomerExtendPropertyController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeCustomerMessagePushController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeCustomerMessagePushController.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeCustomerMessagePushController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeCustomerMessagePushController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeCustomerPortraitController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeCustomerPortraitController.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeCustomerPortraitController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeCustomerPortraitController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeCustomerTransferRecordController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeCustomerTransferRecordController.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeCustomerTransferRecordController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeCustomerTransferRecordController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeDepartmentController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeDepartmentController.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeDepartmentController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeDepartmentController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeEmpleCodeController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeEmpleCodeController.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeEmpleCodeController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeEmpleCodeController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeGroupCodeActualController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeGroupCodeActualController.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeGroupCodeActualController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeGroupCodeActualController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeGroupCodeController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeGroupCodeController.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeGroupCodeController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeGroupCodeController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeGroupCodeCorpActualController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeGroupCodeCorpActualController.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeGroupCodeCorpActualController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeGroupCodeCorpActualController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeGroupController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeGroupController.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeGroupController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeGroupController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeGroupSopController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeGroupSopController.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeGroupSopController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeGroupSopController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeGroupTagController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeGroupTagController.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeGroupTagController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeGroupTagController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeMaterialConfigController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeMaterialConfigController.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeMaterialConfigController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeMaterialConfigController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeMaterialController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeMaterialController.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeMaterialController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeMaterialController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeMessagePushController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeMessagePushController.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeMessagePushController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeMessagePushController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeMomentController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeMomentController.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeMomentController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeMomentController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeMsgTlpController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeMsgTlpController.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeMsgTlpController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeMsgTlpController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WePageDataController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WePageDataController.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WePageDataController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WePageDataController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeResignedTransferRecordController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeResignedTransferRecordController.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeResignedTransferRecordController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeResignedTransferRecordController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeSensitiveActController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeSensitiveActController.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeSensitiveActController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeSensitiveActController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeSensitiveController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeSensitiveController.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeSensitiveController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeSensitiveController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeTagGroupController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeTagGroupController.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeTagGroupController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeTagGroupController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeTicketController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeTicketController.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeTicketController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeTicketController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeUserController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeUserController.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeUserController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeUserController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeWordsCategoryController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeWordsCategoryController.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeWordsCategoryController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeWordsCategoryController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeWordsGroupController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeWordsGroupController.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/WeWordsGroupController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/wecom/WeWordsGroupController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/autotag/WeAutoTagRuleController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/wecom/autotag/WeAutoTagRuleController.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/autotag/WeAutoTagRuleController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/wecom/autotag/WeAutoTagRuleController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/autotag/WeAutoTagRuleHitRecordController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/wecom/autotag/WeAutoTagRuleHitRecordController.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/autotag/WeAutoTagRuleHitRecordController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/wecom/autotag/WeAutoTagRuleHitRecordController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/radar/WeRadarChannelController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/wecom/radar/WeRadarChannelController.java similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/radar/WeRadarChannelController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/wecom/radar/WeRadarChannelController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/radar/WeRadarClickRecordController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/wecom/radar/WeRadarClickRecordController.java similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/radar/WeRadarClickRecordController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/wecom/radar/WeRadarClickRecordController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/radar/WeRadarController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/wecom/radar/WeRadarController.java similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/radar/WeRadarController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/wecom/radar/WeRadarController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/redeemcode/WeRedeemCodeActivityController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/wecom/redeemcode/WeRedeemCodeActivityController.java similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/redeemcode/WeRedeemCodeActivityController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/wecom/redeemcode/WeRedeemCodeActivityController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/redeemcode/WeRedeemCodeController.java b/easyink-admin/src/main/java/com/easywecom/web/controller/wecom/redeemcode/WeRedeemCodeController.java similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/controller/wecom/redeemcode/WeRedeemCodeController.java rename to easyink-admin/src/main/java/com/easywecom/web/controller/wecom/redeemcode/WeRedeemCodeController.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/core/config/Knife4jConfig.java b/easyink-admin/src/main/java/com/easywecom/web/core/config/Knife4jConfig.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/core/config/Knife4jConfig.java rename to easyink-admin/src/main/java/com/easywecom/web/core/config/Knife4jConfig.java diff --git a/easywecom-admin/src/main/java/com/easywecom/web/core/config/ResponseAdvice.java b/easyink-admin/src/main/java/com/easywecom/web/core/config/ResponseAdvice.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/java/com/easywecom/web/core/config/ResponseAdvice.java rename to easyink-admin/src/main/java/com/easywecom/web/core/config/ResponseAdvice.java diff --git a/easywecom-admin/src/main/resources/META-INF/spring-devtools.properties b/easyink-admin/src/main/resources/META-INF/spring-devtools.properties old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/resources/META-INF/spring-devtools.properties rename to easyink-admin/src/main/resources/META-INF/spring-devtools.properties diff --git a/easywecom-admin/src/main/resources/application.yml b/easyink-admin/src/main/resources/application.yml old mode 100755 new mode 100644 similarity index 98% rename from easywecom-admin/src/main/resources/application.yml rename to easyink-admin/src/main/resources/application.yml index 4acade9..fb3d7c2 --- a/easywecom-admin/src/main/resources/application.yml +++ b/easyink-admin/src/main/resources/application.yml @@ -22,7 +22,7 @@ ruoyi: # 企业微信用户首次登录系统默认密码 weUserDefaultPwd: admin # 默认应用名 - defaultAppName: ${DEFAULT_APP_NAME:easyWeCom} + defaultAppName: ${DEFAULT_APP_NAME:easyInk} # 服务器类型: internal内部应用,third三方应用 serverType: ${SERVER_TYPE:internal} # 是否允许返回异常详情给前端 @@ -231,8 +231,8 @@ token: mybatis-plus: mapper-locations: classpath*:mapper/**/*Mapper.xml - type-aliases-package: com.easywecom.**.domain - type-handlers-package: com.easywecom.wecom.handler.GenericTypeHandler,com.easywecom.framework.handler.StringArrayJoinTypeHandler + type-aliases-package: com.easyink.**.domain + type-handlers-package: com.easyink.wecom.handler.GenericTypeHandler,com.easyink.framework.handler.StringArrayJoinTypeHandler # configuration: # 开发调试使用 # log-impl: org.apache.ibatis.logging.stdout.StdOutImpl global-config: diff --git a/easywecom-admin/src/main/resources/banner.txt b/easyink-admin/src/main/resources/banner.txt old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/resources/banner.txt rename to easyink-admin/src/main/resources/banner.txt diff --git a/easywecom-admin/src/main/resources/i18n/messages.properties b/easyink-admin/src/main/resources/i18n/messages.properties old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/resources/i18n/messages.properties rename to easyink-admin/src/main/resources/i18n/messages.properties diff --git a/easywecom-admin/src/main/resources/lib/WeWorkFinanceSdk.dll b/easyink-admin/src/main/resources/lib/WeWorkFinanceSdk.dll old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/resources/lib/WeWorkFinanceSdk.dll rename to easyink-admin/src/main/resources/lib/WeWorkFinanceSdk.dll diff --git a/easywecom-admin/src/main/resources/lib/libWeWorkFinanceSdk_Java.so b/easyink-admin/src/main/resources/lib/libWeWorkFinanceSdk_Java.so old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/resources/lib/libWeWorkFinanceSdk_Java.so rename to easyink-admin/src/main/resources/lib/libWeWorkFinanceSdk_Java.so diff --git a/easywecom-admin/src/main/resources/lib/libcrypto-1_1-x64.dll b/easyink-admin/src/main/resources/lib/libcrypto-1_1-x64.dll old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/resources/lib/libcrypto-1_1-x64.dll rename to easyink-admin/src/main/resources/lib/libcrypto-1_1-x64.dll diff --git a/easywecom-admin/src/main/resources/lib/libcurl-x64.dll b/easyink-admin/src/main/resources/lib/libcurl-x64.dll old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/resources/lib/libcurl-x64.dll rename to easyink-admin/src/main/resources/lib/libcurl-x64.dll diff --git a/easywecom-admin/src/main/resources/lib/libssl-1_1-x64.dll b/easyink-admin/src/main/resources/lib/libssl-1_1-x64.dll old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/resources/lib/libssl-1_1-x64.dll rename to easyink-admin/src/main/resources/lib/libssl-1_1-x64.dll diff --git a/easywecom-admin/src/main/resources/logback-spring.xml b/easyink-admin/src/main/resources/logback-spring.xml old mode 100755 new mode 100644 similarity index 100% rename from easywecom-admin/src/main/resources/logback-spring.xml rename to easyink-admin/src/main/resources/logback-spring.xml diff --git a/easywecom-admin/src/main/resources/mybatis/mybatis-config.xml b/easyink-admin/src/main/resources/mybatis/mybatis-config.xml old mode 100755 new mode 100644 similarity index 75% rename from easywecom-admin/src/main/resources/mybatis/mybatis-config.xml rename to easyink-admin/src/main/resources/mybatis/mybatis-config.xml index 7536cd2..5db18b5 --- a/easywecom-admin/src/main/resources/mybatis/mybatis-config.xml +++ b/easyink-admin/src/main/resources/mybatis/mybatis-config.xml @@ -13,9 +13,9 @@ - - - + + + diff --git a/easywecom-common/pom.xml b/easyink-common/pom.xml old mode 100755 new mode 100644 similarity index 97% rename from easywecom-common/pom.xml rename to easyink-common/pom.xml index f3ca3c8..986c8b3 --- a/easywecom-common/pom.xml +++ b/easyink-common/pom.xml @@ -3,13 +3,13 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - easywecom - com.easywecom + easyink + com.easyink 3.1.0 4.0.0 - easywecom-common + easyink-common 3.17.3 @@ -35,6 +35,7 @@ org.springframework spring-web + 5.2.15.RELEASE @@ -78,6 +79,7 @@ commons-io commons-io + 2.5 @@ -213,7 +215,7 @@ com.thoughtworks.xstream xstream - 1.4.11.1 + 1.4.18 org.dom4j diff --git a/easyink-common/src/main/java/com/easyink/common/annotation/DataScope.java b/easyink-common/src/main/java/com/easyink/common/annotation/DataScope.java new file mode 100644 index 0000000..1c0c9d5 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/annotation/DataScope.java @@ -0,0 +1,18 @@ +package com.easyink.common.annotation; + +import java.lang.annotation.*; + +/** + * 数据权限过滤注解 + * + * @author admin + */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface DataScope { + /** + * 用户表的别名 + */ + String userAlias() default "wu"; +} diff --git a/easyink-common/src/main/java/com/easyink/common/annotation/DataSource.java b/easyink-common/src/main/java/com/easyink/common/annotation/DataSource.java new file mode 100644 index 0000000..7ca946b --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/annotation/DataSource.java @@ -0,0 +1,23 @@ +package com.easyink.common.annotation; + +import com.easyink.common.enums.DataSourceType; + +import java.lang.annotation.*; + +/** + * 自定义多数据源切换注解 + *

+ * 优先级:先方法,后类,如果方法覆盖了类上的数据源类型,以方法的为准,否则以类上的为准 + * + * @author admin + */ +@Target({ElementType.METHOD, ElementType.TYPE}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@Inherited +public @interface DataSource { + /** + * 切换数据源名称 + */ + DataSourceType value() default DataSourceType.MASTER; +} diff --git a/easyink-common/src/main/java/com/easyink/common/annotation/Excel.java b/easyink-common/src/main/java/com/easyink/common/annotation/Excel.java new file mode 100644 index 0000000..36ec3bc --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/annotation/Excel.java @@ -0,0 +1,132 @@ +package com.easyink.common.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import java.math.BigDecimal; + +/** + * 自定义导出Excel数据注解 + * + * @author admin + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.FIELD) +public @interface Excel { + /** + * 导出时在excel中排序 + */ + int sort() default Integer.MAX_VALUE; + + /** + * 导出到Excel中的名字. + */ + String name() default ""; + + /** + * 日期格式, 如: yyyy-MM-dd + */ + String dateFormat() default ""; + + /** + * 如果是字典类型,请设置字典的type值 (如: sys_user_sex) + */ + String dictType() default ""; + + /** + * 读取内容转表达式 (如: 0=男,1=女,2=未知) + */ + String readConverterExp() default ""; + + /** + * 分隔符,读取字符串组内容 + */ + String separator() default ","; + + /** + * BigDecimal 精度 默认:-1(默认不开启BigDecimal格式化) + */ + int scale() default -1; + + /** + * BigDecimal 舍入规则 默认:BigDecimal.ROUND_HALF_EVEN + */ + int roundingMode() default BigDecimal.ROUND_HALF_EVEN; + + /** + * 导出类型(0数字 1字符串) + */ + ColumnType cellType() default ColumnType.STRING; + + /** + * 导出时在excel中每个列的高度 单位为字符 + */ + double height() default 14; + + /** + * 导出时在excel中每个列的宽 单位为字符 + */ + double width() default 16; + + /** + * 文字后缀,如% 90 变成90% + */ + String suffix() default ""; + + /** + * 当值为空时,字段的默认值 + */ + String defaultValue() default ""; + + /** + * 提示信息 + */ + String prompt() default ""; + + /** + * 设置只能选择不能输入的列内容. + */ + String[] combo() default {}; + + /** + * 是否导出数据,应对需求:有时我们需要导出一份模板,这是标题需要但内容需要用户手工填写. + */ + boolean isExport() default true; + + /** + * 另一个类中的属性名称,支持多级获取,以小数点隔开 + */ + String targetAttr() default ""; + + /** + * 字段类型(0:导出导入;1:仅导出;2:仅导入) + */ + Type type() default Type.ALL; + + enum Type { + ALL(0), EXPORT(1), IMPORT(2); + private final int value; + + Type(int value) { + this.value = value; + } + + public int value() { + return this.value; + } + } + + enum ColumnType { + NUMERIC(0), STRING(1); + private final int value; + + ColumnType(int value) { + this.value = value; + } + + public int value() { + return this.value; + } + } +} \ No newline at end of file diff --git a/easyink-common/src/main/java/com/easyink/common/annotation/Excels.java b/easyink-common/src/main/java/com/easyink/common/annotation/Excels.java new file mode 100644 index 0000000..2e2e1a4 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/annotation/Excels.java @@ -0,0 +1,17 @@ +package com.easyink.common.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Excel注解集 + * + * @author admin + */ +@Target(ElementType.FIELD) +@Retention(RetentionPolicy.RUNTIME) +public @interface Excels { + Excel[] value(); +} diff --git a/easyink-common/src/main/java/com/easyink/common/annotation/Log.java b/easyink-common/src/main/java/com/easyink/common/annotation/Log.java new file mode 100644 index 0000000..4e5e51c --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/annotation/Log.java @@ -0,0 +1,36 @@ +package com.easyink.common.annotation; + +import com.easyink.common.enums.BusinessType; +import com.easyink.common.enums.OperatorType; + +import java.lang.annotation.*; + +/** + * 自定义操作日志记录注解 + * + * @author admin + */ +@Target({ElementType.PARAMETER, ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface Log { + /** + * 模块 + */ + String title() default ""; + + /** + * 功能 + */ + BusinessType businessType() default BusinessType.OTHER; + + /** + * 操作人类别 + */ + OperatorType operatorType() default OperatorType.MANAGE; + + /** + * 是否保存请求的参数 + */ + boolean isSaveRequestData() default true; +} diff --git a/easyink-common/src/main/java/com/easyink/common/annotation/RepeatSubmit.java b/easyink-common/src/main/java/com/easyink/common/annotation/RepeatSubmit.java new file mode 100644 index 0000000..f9e997f --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/annotation/RepeatSubmit.java @@ -0,0 +1,16 @@ +package com.easyink.common.annotation; + +import java.lang.annotation.*; + +/** + * 自定义注解防止表单重复提交 + * + * @author admin + */ +@Inherited +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface RepeatSubmit { + +} diff --git a/easyink-common/src/main/java/com/easyink/common/annotation/SysProperty.java b/easyink-common/src/main/java/com/easyink/common/annotation/SysProperty.java new file mode 100644 index 0000000..afb7572 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/annotation/SysProperty.java @@ -0,0 +1,27 @@ +package com.easyink.common.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 类名: 字段属性注解 + * + * @author : silver_chariot + * @date : 2021/11/19 18:04 + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.FIELD) +public @interface SysProperty { + /** + * 字段对应的中文名称 + */ + String name() default ""; + + /** + * 日期格式, 如: yyyy-MM-dd + */ + String dateFormat() default ""; + +} \ No newline at end of file diff --git a/easyink-common/src/main/java/com/easyink/common/aop/CustomerTrajectoryAop.java b/easyink-common/src/main/java/com/easyink/common/aop/CustomerTrajectoryAop.java new file mode 100644 index 0000000..2ef796f --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/aop/CustomerTrajectoryAop.java @@ -0,0 +1,32 @@ +package com.easyink.common.aop; + +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; +import org.springframework.stereotype.Component; + +/** + * @description: 客户轨迹记录AOP + * @author admin + * @create: 2021-05-02 22:51 + **/ +@Aspect +@Component +public class CustomerTrajectoryAop { + + @Pointcut("@annotation(com.easyink.wecom.annotation.CustomerTrajectoryRecord)") + public void customerTrajectoryPointCut() { + } + + + /** + * 记录轨迹 + * + * @param joinPoint + */ + @Around("customerTrajectoryPointCut()") + public void customerTrajectoryRecord(ProceedingJoinPoint joinPoint) { + + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/config/ChatRsaKeyConfig.java b/easyink-common/src/main/java/com/easyink/common/config/ChatRsaKeyConfig.java new file mode 100644 index 0000000..352fe46 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/config/ChatRsaKeyConfig.java @@ -0,0 +1,26 @@ +package com.easyink.common.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * 类名: 会话存档RSA秘钥配置 + * + * @author : silver_chariot + * @date : 2022/5/30 20:50 + */ +@Component +@ConfigurationProperties(prefix = "chatrsakey") +@Data +public class ChatRsaKeyConfig { + + /** + * 公钥 + */ + private String publicKey; + /** + * 秘钥 + */ + private String privateKey; +} diff --git a/easyink-common/src/main/java/com/easyink/common/config/CosConfig.java b/easyink-common/src/main/java/com/easyink/common/config/CosConfig.java new file mode 100644 index 0000000..ee57b60 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/config/CosConfig.java @@ -0,0 +1,31 @@ +package com.easyink.common.config; + +import com.easyink.common.constant.WeConstans; +import lombok.Data; +import org.springframework.stereotype.Component; + +/** + * @author admin + */ +@Component +@Data +public class CosConfig { + + private String secretId; + + private String secretKey; + + private String region; + + private String bucketName; + + private String cosImgUrlPrefix; + + public String getCosImgUrlPrefix() { + //判断是否以“/”结尾 + if(!cosImgUrlPrefix.endsWith(WeConstans.SLASH)){ + cosImgUrlPrefix += WeConstans.SLASH; + } + return cosImgUrlPrefix; + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/config/ElasticSearchConfig.java b/easyink-common/src/main/java/com/easyink/common/config/ElasticSearchConfig.java new file mode 100644 index 0000000..d7538f6 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/config/ElasticSearchConfig.java @@ -0,0 +1,101 @@ +package com.easyink.common.config; + +import lombok.Data; +import org.apache.http.HttpHost; +import org.apache.http.auth.AuthScope; +import org.apache.http.auth.UsernamePasswordCredentials; +import org.apache.http.client.CredentialsProvider; +import org.apache.http.impl.client.BasicCredentialsProvider; +import org.elasticsearch.client.RestClient; +import org.elasticsearch.client.RestClientBuilder; +import org.elasticsearch.client.RestHighLevelClient; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author admin + * @description ElasticSearch 配置 + * @date 2020/12/4 9:59 + **/ + +@Data +@Configuration +@ConditionalOnProperty(value = "elasticsearch.open",matchIfMissing = false) +@ConfigurationProperties(value = "elasticsearch") +public class ElasticSearchConfig { + /** + * 协议 + */ + private String schema = "http"; + /** + * 集群地址,如果有多个用“,”隔开 + */ + private String address; + + private String userName; + + private String password; + /** + * 连接超时时间 + */ + private int connectTimeout = 5000; + + /** + * Socket 连接超时时间 + */ + private int socketTimeout = 10000; + + /** + * 获取连接的超时时间 + */ + private int connectionRequestTimeout = 5000; + + /** + * 最大连接数 + */ + private int maxConnectNum = 100; + + /** + * 最大路由连接数 + */ + private int maxConnectPerRoute = 100; + + @Bean + public RestHighLevelClient restHighLevelClient() { + // 拆分地址 + List hostLists = new ArrayList<>(); + String[] hostList = address.split(","); + for (String addr : hostList) { + String host = addr.split(":")[0]; + String port = addr.split(":")[1]; + hostLists.add(new HttpHost(host, Integer.parseInt(port), schema)); + } + final CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); + credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(userName, password)); + // 转换成 HttpHost 数组 + HttpHost[] httpHost = hostLists.toArray(new HttpHost[]{}); + // 构建连接对象 + RestClientBuilder builder = RestClient.builder(httpHost); + // 异步连接延时配置 + builder.setRequestConfigCallback(requestConfigBuilder -> { + requestConfigBuilder.setConnectTimeout(connectTimeout); + requestConfigBuilder.setSocketTimeout(socketTimeout); + requestConfigBuilder.setConnectionRequestTimeout(connectionRequestTimeout); + return requestConfigBuilder; + }); + // 异步连接数配置 + builder.setHttpClientConfigCallback(httpClientBuilder -> { + httpClientBuilder.setMaxConnTotal(maxConnectNum); + httpClientBuilder.setMaxConnPerRoute(maxConnectPerRoute); + httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider); + return httpClientBuilder; + }); + return new RestHighLevelClient(builder); + + } +} \ No newline at end of file diff --git a/easyink-common/src/main/java/com/easyink/common/config/FileConfig.java b/easyink-common/src/main/java/com/easyink/common/config/FileConfig.java new file mode 100644 index 0000000..18817a8 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/config/FileConfig.java @@ -0,0 +1,20 @@ +package com.easyink.common.config; + +import lombok.Data; + +@Data +public class FileConfig { + + /** + * 是否开启云存储 + */ + private boolean startCosUpload = false; + /** + * 腾讯云存储相关配置 + */ + private CosConfig cos; + /** + * 文件前缀 + */ + private String imgUrlPrefix; +} diff --git a/easyink-common/src/main/java/com/easyink/common/config/RuoYiConfig.java b/easyink-common/src/main/java/com/easyink/common/config/RuoYiConfig.java new file mode 100644 index 0000000..2816a7c --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/config/RuoYiConfig.java @@ -0,0 +1,133 @@ +package com.easyink.common.config; + +import com.easyink.common.utils.OsUtils; +import lombok.Data; +import org.apache.commons.lang3.StringUtils; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * 读取项目相关配置 + * + * @author admin + */ +@Component +@Data +@ConfigurationProperties(prefix = "ruoyi") +public class RuoYiConfig { + + /** + * 当前代码版本 + */ + private String version; + /** + * icp 备案 + */ + private String icp; + /** + * 版本说明 + */ + private String releaseNotes; + /** + * 默认应用名 + */ + private String defaultAppName; + + /** + * 上传路径 + */ + private static String profile; + + /** + * 获取地址开关 + */ + private boolean addressEnabled; + + /** + * 企业微信账号登录系统默认密码 + */ + private String weUserDefaultPwd = "123456"; + + + private FileConfig file; + /** + * 服务器类型 + */ + private String serverType; + /** + * 三方引用默认域名 + */ + private ThirdDefaultDomainConfig thirdDefaultDomain; + + private WeProvider provider; + + private WeCrypt selfBuild; + + /** + * 匿名访问的URL + */ + private String[] anonUrl; + + /** + * 是否允许返回异常详情给前端 + */ + private boolean enableExceptionDetailResp; + + /** + * 是否内部应用服务器 + * + * @return true是内部,false三方应用 + */ + public boolean isInternalServer() { + String internalServerType = "internal"; + return StringUtils.isBlank(serverType) || internalServerType.equals(serverType); + } + + /** + * 是否三方应用服务器 + * + * @return true是三方应用,false内部 + */ + public boolean isThirdServer() { + return !isInternalServer(); + } + + public static String getProfile() { + if (OsUtils.isWindows()) { + return "C:/ruoyi/uploadPath"; + + } + return "/app/project/pic"; + } + + + /** + * 获取头像上传路径 + */ + public static String getAvatarPath() { + return getProfile() + "/avatar"; + } + + /** + * 获取下载路径 + */ + public static String getDownloadPath() { + return getProfile() + "/download/"; + } + + /** + * 获取会话存档素材下载路径 + */ + public static String getDownloadWeWorkPath() { + return getProfile() + "/download/media_data/{}/{}"; + } + + /** + * 获取上传路径 + */ + public static String getUploadPath() { + return getProfile(); + } + + +} diff --git a/easyink-common/src/main/java/com/easyink/common/config/ServerConfig.java b/easyink-common/src/main/java/com/easyink/common/config/ServerConfig.java new file mode 100644 index 0000000..3d00cf8 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/config/ServerConfig.java @@ -0,0 +1,32 @@ +package com.easyink.common.config; + +import com.easyink.common.utils.ServletUtils; +import org.springframework.stereotype.Component; + +import javax.servlet.http.HttpServletRequest; + +/** + * 服务相关配置 + * + * @author admin + */ +@Component +public class ServerConfig { + /** + * 获取完整的请求路径,包括:域名,端口,上下文访问路径 + * + * @return 服务地址 + */ + public String getUrl() { + HttpServletRequest request = ServletUtils.getRequest(); + return getDomain(request); + } + + public static String getDomain(HttpServletRequest request) { + StringBuffer url = request.getRequestURL(); + String contextPath = request.getServletContext().getContextPath(); + return url.delete(url.length() - request.getRequestURI().length(), url.length()).append(contextPath).toString(); + } + + +} diff --git a/easyink-common/src/main/java/com/easyink/common/config/ThirdDefaultDomainConfig.java b/easyink-common/src/main/java/com/easyink/common/config/ThirdDefaultDomainConfig.java new file mode 100644 index 0000000..eb18fb6 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/config/ThirdDefaultDomainConfig.java @@ -0,0 +1,31 @@ +package com.easyink.common.config; + +import com.easyink.common.utils.StringUtils; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 类名: ThirdDefaultDomainConfig + * + * @author: 1*+ + * @date: 2021-09-29 14:57 + */ +@Data +@ApiModel("三方应用服务默认域名配置") +public class ThirdDefaultDomainConfig { + + @ApiModelProperty("前端dashboard域名") + private String dashboard; + @ApiModelProperty("侧边栏sidebar域名") + private String sidebar; + @ApiModelProperty("后端scrm域名") + private String scrm; + + public String getSidebar() { + if (StringUtils.isBlank(sidebar)) { + return StringUtils.EMPTY; + } + return sidebar; + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/config/WeComeConfig.java b/easyink-common/src/main/java/com/easyink/common/config/WeComeConfig.java new file mode 100644 index 0000000..9b7bdeb --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/config/WeComeConfig.java @@ -0,0 +1,61 @@ +package com.easyink.common.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * @author admin + * @Description: 企业微信配置文件相关 + * @Date: create in 2020/9/3 0003 23:25 + */ +@Component +@ConfigurationProperties(prefix = "wecome") +@Data +public class WeComeConfig { + /** + * 企业微信后台地址 + */ + private String serverUrl; + + /** + * 企业微信后台地址前缀 + */ + private String weComePrefix; + + /** + * 企业微信端无需token的url + */ + private String[] noAccessTokenUrl; + + /** + * 需要使用联系人token的url + */ + private String[] needContactTokenUrl; + + /** + * 需要使用客户联系token的url + */ + private String[] needCustomTokenUrl; + + /** + * 文件上传url + */ + private String[] fileUplodUrl; + + + /** + * 会话存档所需token 的url + */ + private String[] needChatTokenUrl; + + /** + * 第三方自建应用得url + */ + private String[] thirdAppUrl; + /** + * 需要处理错误码的url + */ + private String[] needErrcodeUrl; + +} diff --git a/easyink-common/src/main/java/com/easyink/common/config/WeCrypt.java b/easyink-common/src/main/java/com/easyink/common/config/WeCrypt.java new file mode 100644 index 0000000..8794ca7 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/config/WeCrypt.java @@ -0,0 +1,41 @@ +package com.easyink.common.config; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 类名: WeCrypt + * + * @author: 1*+ + * @date: 2021-12-24 14:01 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class WeCrypt implements Serializable { + + private String token; + private String encodingAesKey; + + /** + * 获取默认服务商配置 + * + * @return {@link WeCrypt} + */ + public static WeCrypt getDefaultProviderWeCrypt() { + return new WeCrypt("rz0oBayoJBLM2AHlSHmYjAqgDLe9", "kzOip1U1zjfei8ZYtCDBczQoVjBrXjSOep65jvmYtCq"); + } + + /** + * 获取默认自建应用配置 + * + * @return {@link WeCrypt} + */ + public static WeCrypt getDefaultSelfBuildWeCrypt() { + return new WeCrypt("JBd03DAvevMr2DxWlYUrr", "K2Xh8oYwOEG86Ee1Cg3s680VVYjYsDhRvnE3wtqw54b"); + } + +} diff --git a/easyink-common/src/main/java/com/easyink/common/config/WeProvider.java b/easyink-common/src/main/java/com/easyink/common/config/WeProvider.java new file mode 100644 index 0000000..4ebabb7 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/config/WeProvider.java @@ -0,0 +1,78 @@ +package com.easyink.common.config; + +import lombok.Data; +import org.apache.commons.lang3.StringUtils; + +import java.io.Serializable; + +/** + * 类名: WeProvider + * + * @author: 1*+ + * @date: 2021-12-24 11:12 + */ +@Data +public class WeProvider extends WeCrypt implements Serializable { + + private String corpId; + private String secret; + private WebSuite webSuite; + private DkSuite dkSuite; + + @Data + public static class WebSuite extends WeCrypt implements Serializable { + private String suiteId; + private String secret; + } + + @Data + public static class DkSuite extends WeCrypt implements Serializable { + private String dkId; + private String secret; + private String dkQrCode; + } + + /** + * 获取解密参数 + * + * @param id corpId或者suiteId或者dkId + * @return {@link WeCrypt} + */ + public WeCrypt getCryptById(String id) { + if (StringUtils.isBlank(id)) { + return this; + } + + if (id.equals(corpId)) { + return this; + } else if (webSuite != null && id.equals(webSuite.getSuiteId())) { + return webSuite; + } else if (dkSuite != null && id.equals(dkSuite.getDkId())) { + return dkSuite; + } else { + return this; + } + } + + /** + * 获取密钥 + * + * @param id corpId或者suiteId或者dkId + * @return {@link String} + */ + public String getSecretById(String id) { + if (StringUtils.isBlank(id)) { + return ""; + } + + if (id.equals(corpId)) { + return this.getSecret(); + } else if (webSuite != null && id.equals(webSuite.getSuiteId())) { + return webSuite.getSecret(); + } else if (dkSuite != null && id.equals(dkSuite.getDkId())) { + return dkSuite.getSecret(); + } else { + return ""; + } + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/config/WechatOpenConfig.java b/easyink-common/src/main/java/com/easyink/common/config/WechatOpenConfig.java new file mode 100644 index 0000000..69e5ee8 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/config/WechatOpenConfig.java @@ -0,0 +1,71 @@ +package com.easyink.common.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * 类名: 微信公开平台配置 + * + * @author : silver_chariot + * @date : 2022/7/19 18:04 + **/ +@Component +@Data +@ConfigurationProperties(prefix = "wechatopen") +public class WechatOpenConfig { + /** + * 小程序配置 + */ + private MiniApp miniApp; + /** + * 公众号配置 + */ + private OfficialAccount officialAccount; + + @Data + public static class MiniApp { + /** + * 小程序appid + */ + private String appId; + /** + * 小程序秘钥 + */ + private String appSecret; + /** + * 域名 + */ + private String domain; + /** + * 小程序页面路径 + */ + private String codePath; + /** + * 所属环境 要打开的小程序版本。正式版为 "release", + * 体验版为"trial",开发版为"develop",仅在微信外打开时生效。 + */ + private String envVersion; + } + + @Data + public static class OfficialAccount { + /** + * 域名 + */ + private String domain; + /** + * appId + */ + private String appId; + /** + * appSecret + */ + private String appSecret; + + /** + * 需要token的接口 + */ + private String[] needTokenUrl; + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/config/jackson/StringArrayDeserialize.java b/easyink-common/src/main/java/com/easyink/common/config/jackson/StringArrayDeserialize.java new file mode 100644 index 0000000..8844081 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/config/jackson/StringArrayDeserialize.java @@ -0,0 +1,25 @@ +package com.easyink.common.config.jackson; + +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonDeserializer; +import com.easyink.common.utils.StringUtils; + +import java.io.IOException; + +/** + * @author admin + * @Description: + * @Date: create in 2020/9/15 0015 0:55 + */ +public class StringArrayDeserialize extends JsonDeserializer { + @Override + public String[] deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException { + + if (!StringUtils.isEmpty(jsonParser.getText())) { + return jsonParser.getText().split(","); + } + + return new String[0]; + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/constant/Constants.java b/easyink-common/src/main/java/com/easyink/common/constant/Constants.java new file mode 100644 index 0000000..59eb4c4 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/constant/Constants.java @@ -0,0 +1,266 @@ +package com.easyink.common.constant; + +/** + * 通用常量信息 + * + * @author admin + */ +public class Constants { + private Constants(){} + /** + * UTF-8 字符集 + */ + public static final String UTF8 = "UTF-8"; + + /** + * GBK 字符集 + */ + public static final String GBK = "GBK"; + + /** + * http请求 + */ + public static final String HTTP = "http://"; + + /** + * https请求 + */ + public static final String HTTPS = "https://"; + + /** + * 通用成功标识 + */ + public static final String SUCCESS = "0"; + + /** + * 通用失败标识 + */ + public static final String FAIL = "1"; + + /** + * 登录成功 + */ + public static final String LOGIN_SUCCESS = "Success"; + + /** + * 注销 + */ + public static final String LOGOUT = "Logout"; + + /** + * 登录失败 + */ + public static final String LOGIN_FAIL = "Error"; + /** + * 获取CODE失败 + */ + public static final String GET_CODE_FAIL = "no.code"; + /** + * 获取用户信息失败 + */ + public static final String GET_INFO_FAIL = "get.user.info.fail"; + + /** + * 企业未授权应用 + */ + public static final String CORP_NO_AUTH = "corp.no.auth"; + + /** + * 企业配置内部应用 + */ + public static final String CORP_NO_CONFIG_INTERNAL_APP = "corp.no.config.internal.app"; + + /** + * 非企业成员 + */ + public static final String NOT_IN_COMPANY = "not.in.company"; + + public static final String USER_LOGIN_SUCCESS = "user.login.success"; + + /** + * 验证码 redis key + */ + public static final String CAPTCHA_CODE_KEY = "captcha_codes:"; + + /** + * 登录用户 redis key + */ + public static final String LOGIN_TOKEN_KEY = "login_tokens_new2:"; + + /** + * 防重提交 redis key + */ + public static final String REPEAT_SUBMIT_KEY = "repeat_submit:"; + + /** + * 验证码有效期(分钟) + */ + public static final Integer CAPTCHA_EXPIRATION = 5; + + /** + * 令牌 + */ + public static final String TOKEN = "token"; + + /** + * 令牌前缀 + */ + public static final String TOKEN_PREFIX = "Bearer "; + + /** + * 令牌前缀 + */ + public static final String LOGIN_USER_KEY = "login_user_key"; + + + /** + * 用户ID + */ + public static final String JWT_USERID = "userid"; + + /** + * 用户名称 + */ + public static final String JWT_USERNAME = "sub"; + + /** + * 用户头像 + */ + public static final String JWT_AVATAR = "avatar"; + + /** + * 创建时间 + */ + public static final String JWT_CREATED = "created"; + + /** + * 用户权限 + */ + public static final String JWT_AUTHORITIES = "authorities"; + + /** + * 参数管理 cache key + */ + public static final String SYS_CONFIG_KEY = "sys_config:"; + + /** + * 字典管理 cache key + */ + public static final String SYS_DICT_KEY = "sys_dict_new2:"; + + /** + * 资源映射路径 前缀 + */ + public static final String RESOURCE_PREFIX = "/profile"; + + + /** + * 是否为系统默认(是) + */ + public static final int SERVICE_STATUS_ERROR = -1; + + + /** + * 启用状态 + */ + public static final String NORMAL_CODE = "0"; + + /** + * 删除状态(客户删除员工,流失客户) + */ + public static final String DELETE_CODES = "1"; + + /** + * 授权未启用状态 + */ + public static final String NOT_START_CODE = "2"; + + /** + * 删除状态 (员工删除客户) + */ + public static final String DELETE_CODE = "2"; + + /** + * 业务判断成功状态 + */ + public static final Integer SERVICE_RETURN_SUCCESS_CODE = 0; + + + /** + * 系统用户 + */ + public static final String USER_TYPE_SYS = "00"; + + /** + * 企业微信用户 + */ + public static final String USER_TYPE_WECOME = "11"; + + + /** + * 企业管理 + */ + public static final String USER_TYOE_CORP_ADMIN = "22"; + + + /** + * 企业微信用户系统中默认用户 + */ + public static final String DEFAULT_WECOME_ROLE_KEY = "WeCome"; + + + /** + * 企业微信用户系统中默认用户 + */ + public static final String DEFAULT_WECOME_CORP_ADMIN = "CROP_ADMIN_ROLE"; + + /** + * 完成待办 + */ + public static final String HANDLE_SUCCESS = "3"; + /** + * 扫码登录用户 + */ + public static final String QR_CODE_SCAN_USER = "qrCodeScanUser"; + /** + * 网页登录用户 + */ + public static final String WEB_USER = "WebUser"; + + /** + * 所有权限标识 + */ + public static final String ALL_PERMISSION = "*:*:*"; + + /** + * 管理员角色权限标识 + */ + public static final String SUPER_ADMIN = "admin"; + + /** + * 初始化的菜单权限的菜单ID + */ + public static final Long[] INIT_MENU_LIST = {2016L, 2014L, 2015L, 2022L, 2074L, 2020L, 2021L, 2002L, 2003L, 2001L, 2079L, 2080L}; + /** + * 默认排序 + */ + public static final String DEFAULT_SORT = "1"; + /** + * 缺省ID值 + */ + public static final Long DEFAULT_ID = -1L; + /** + * 系统默认后台主题颜色 + */ + public static final String DEFAULT_UI_COLOR = "#6BB4AB"; + /** + * 回调处理锁的时间 + */ + public static final Long CALLBACK_HANDLE_LOCK_TIME = 3L; + + /** + * 个人权限时,部门下有权限人数显示一人 + */ + public static final int ONE_NUM = 1; + +} diff --git a/easyink-common/src/main/java/com/easyink/common/constant/ConversationConstants.java b/easyink-common/src/main/java/com/easyink/common/constant/ConversationConstants.java new file mode 100644 index 0000000..e3a9f85 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/constant/ConversationConstants.java @@ -0,0 +1,13 @@ +package com.easyink.common.constant; + +/** + * 会话存档常量 + * + * @author tigger + * 2022/1/26 18:21 + **/ +public class ConversationConstants { + + + +} diff --git a/easyink-common/src/main/java/com/easyink/common/constant/GenConstants.java b/easyink-common/src/main/java/com/easyink/common/constant/GenConstants.java new file mode 100644 index 0000000..255446d --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/constant/GenConstants.java @@ -0,0 +1,235 @@ +package com.easyink.common.constant; + +/** + * 代码生成通用常量 + * + * @author admin + */ +public class GenConstants { + /** + * 单表(增删改查) + */ + public static final String TPL_CRUD = "crud"; + + /** + * 树表(增删改查) + */ + public static final String TPL_TREE = "tree"; + + /** + * 主子表(增删改查) + */ + public static final String TPL_SUB = "sub"; + + /** + * 树编码字段 + */ + public static final String TREE_CODE = "treeCode"; + + /** + * 树父编码字段 + */ + public static final String TREE_PARENT_CODE = "treeParentCode"; + + /** + * 树名称字段 + */ + public static final String TREE_NAME = "treeName"; + + /** + * 上级菜单ID字段 + */ + public static final String PARENT_MENU_ID = "parentMenuId"; + + /** + * 上级菜单名称字段 + */ + public static final String PARENT_MENU_NAME = "parentMenuName"; + + /** + * 数据库字符串类型 + */ + public static final String[] COLUMNTYPE_STR = {"char", "varchar", "narchar", "varchar2", "tinytext", "text", + "mediumtext", "longtext"}; + + /** + * 数据库文本类型 + */ + public static final String[] COLUMNTYPE_TEXT = {"tinytext", "text", "mediumtext", "longtext"}; + /** + * 数据库时间类型 + */ + public static final String[] COLUMNTYPE_TIME = {"datetime", "time", "date", "timestamp"}; + + /** + * 数据库数字类型 + */ + public static final String[] COLUMNTYPE_NUMBER = {"tinyint", "smallint", "mediumint", "int", "number", "integer", + "bigint", "float", "float", "double", "decimal"}; + + /** + * 页面不需要编辑字段 + */ + public static final String[] COLUMNNAME_NOT_EDIT = {"id", "create_by", "create_time", "del_flag"}; + + /** + * 页面不需要显示的列表字段 + */ + public static final String[] COLUMNNAME_NOT_LIST = {"id", "create_by", "create_time", "del_flag", "update_by", + "update_time"}; + + /** + * 页面不需要查询字段 + */ + public static final String[] COLUMNNAME_NOT_QUERY = {"id", "create_by", "create_time", "del_flag", "update_by", + "update_time", "remark"}; + + /** + * Entity基类字段 + */ + public static final String[] BASE_ENTITY = {"createBy", "createTime", "updateBy", "updateTime", "remark"}; + + /** + * Tree基类字段 + */ + public static final String[] TREE_ENTITY = {"parentName", "parentId", "orderNum", "ancestors", "children"}; + + /** + * 文本框 + */ + public static final String HTML_INPUT = "input"; + + /** + * 文本域 + */ + public static final String HTML_TEXTAREA = "textarea"; + + /** + * 下拉框 + */ + public static final String HTML_SELECT = "select"; + + /** + * 单选框 + */ + public static final String HTML_RADIO = "radio"; + + /** + * 复选框 + */ + public static final String HTML_CHECKBOX = "checkbox"; + + /** + * 日期控件 + */ + public static final String HTML_DATETIME = "datetime"; + + /** + * 图片上传控件 + */ + public static final String HTML_IMAGE_UPLOAD = "imageUpload"; + + /** + * 文件上传控件 + */ + public static final String HTML_FILE_UPLOAD = "fileUpload"; + + /** + * 富文本控件 + */ + public static final String HTML_EDITOR = "editor"; + + /** + * 字符串类型 + */ + public static final String TYPE_STRING = "String"; + + /** + * 整型 + */ + public static final String TYPE_INTEGER = "Integer"; + + /** + * 长整型 + */ + public static final String TYPE_LONG = "Long"; + + /** + * 浮点型 + */ + public static final String TYPE_DOUBLE = "Double"; + + /** + * 高精度计算类型 + */ + public static final String TYPE_BIGDECIMAL = "BigDecimal"; + + /** + * 时间类型 + */ + public static final String TYPE_DATE = "Date"; + + /** + * 模糊查询 + */ + public static final String QUERY_LIKE = "LIKE"; + + /** + * 需要 + */ + public static final String REQUIRE = "1"; + /** + * limit 1 + */ + public static final String LIMIT_1 = "LIMIT 1"; + /** + * 操作人占位符 + */ + public static final String OPERATOR = "${operator}"; + /** + * 群聊名称占位符 + */ + public static final String GROUP_NAME = "${groupName}"; + /** + * 客户昵称占位符 + */ + public static final String CUSTOMER = "${customer}"; + /** + * 属性名称占位符 + */ + public static final String PROPERTY_NAME = "${propertyName}"; + /** + * 员工名称占位符 + */ + public static final String USER_NAME = "${userName}"; + /** + * 图片url占位符 + */ + public static final String PIC_URL = "${picUrl}"; + /** + * 属性值占位符 + */ + public static final String PROPERTY_VALUE = "${propertyValue}"; + /** + * 雷达标题占位符 + */ + public static final String RADAR_TITLE = "${radarTitle}"; + /** + * 客户信息动态记录模板 + */ + public static final String EDIT_CUSTOMER_RECORD_MSG = "${userName}修改了${propertyName}为:"; + /** + * 客户标签 + */ + public static final String CUSTOMER_TAG = "客户标签"; + + + /** + * 文件类型 - txt + */ + public static final String SUFFIX_TXT = "txt"; + /** + * 网点ID + */ + public static final String NETWORK_ID = "networkId"; +} diff --git a/easyink-common/src/main/java/com/easyink/common/constant/GroupCodeConstants.java b/easyink-common/src/main/java/com/easyink/common/constant/GroupCodeConstants.java new file mode 100644 index 0000000..16465dc --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/constant/GroupCodeConstants.java @@ -0,0 +1,41 @@ +package com.easyink.common.constant; + + +/** + * 群活码常量 + * + * @author tigger + * 2022/2/10 10:34 + **/ +public class GroupCodeConstants { + + /** + * 群二维码人数上限 + */ + public final static int ACTUAL_GROUP_NUM_LIMIT = 200; + /** + * 群二维码人数默认值 + */ + public final static int DEFAULT_GROUP_NUM = 100; + + /** + * 企业微信群活码人数上限 + */ + public final static int CORP_ACTUAL_GROUP_NUM_LIMIT = 1000; + /** + * 企业微信活码人数默认值 + */ + public final static int DEFAULT_CORP_GROUP_NUM = CORP_ACTUAL_GROUP_NUM_LIMIT; + + /** + * com.easyink.wecom.domain.WeGroupCodeCorpActual#scene + */ + public final static int MINIPROGRAM_SCENE = 1; + public final static int GROUP_SCENE = 2; + + + /** + * 调用企业微信接口生成企业微信群活码最多关联5个群聊 + */ + public static final int CORP_ACTUAL_CODE_REF_GROUP_LIMIT = 5; +} diff --git a/easyink-common/src/main/java/com/easyink/common/constant/GroupConstants.java b/easyink-common/src/main/java/com/easyink/common/constant/GroupConstants.java new file mode 100644 index 0000000..42154e7 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/constant/GroupConstants.java @@ -0,0 +1,27 @@ +package com.easyink.common.constant; + +public class GroupConstants { + /** + * 群组状态 + * 0 - 正常;1 - 跟进人离职;2 - 离职继承中;3 - 离职继承完成; + */ + public static final Integer NARMAL = 0; + public static final Integer OWNER_LEAVE = 1; + public static final Integer OWNER_LEAVE_EXTEND = 2; + public static final Integer OWNER_LEAVE_EXTEND_SUCCESS = 3; + + + /** + * 1-代表群聊成员是员工 2-代码群聊成员是客户 + */ + private static final Integer ID_TYPE_USER = 1; + private static final Integer ID_TYPE_CUSTOMER = 2; + + public static final Integer MAX_ALLOCATE_GROUP = 300; + + public static final String UNKNOW_GROUP_NAME = "未知群聊"; + + + private GroupConstants() { + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/constant/RedisKeyConstants.java b/easyink-common/src/main/java/com/easyink/common/constant/RedisKeyConstants.java new file mode 100644 index 0000000..cc35622 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/constant/RedisKeyConstants.java @@ -0,0 +1,32 @@ +package com.easyink.common.constant; + +/** + * 类名: RedisKeyConstants + * + * @author 佚名 + * @date 2021/9/1 20:23 + */ +public class RedisKeyConstants { + /** + * 首页数据概览基础数据,redis对应的key + */ + public static final String CORP_BASIC_DATA = "getCorpBasicData-new2:"; + /** + * 首页数据概览实时数据,redis对应的key + */ + public static final String CORP_REAL_TIME = "getCorpRealTimeData-new2:"; + + /** + * 账号强退原因记录 键值 + */ + public static final String ACCOUNT_LOGOUT_REASON_KEY = "accountLogoutReason:"; + + /** + * 拉取离职员工数据 过期KEY + */ + public static final String DELETE_USER_KEY = "deleteUserKey:"; + + private RedisKeyConstants() { + + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/constant/ScheduleConstants.java b/easyink-common/src/main/java/com/easyink/common/constant/ScheduleConstants.java new file mode 100644 index 0000000..7983955 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/constant/ScheduleConstants.java @@ -0,0 +1,56 @@ +package com.easyink.common.constant; + +/** + * 任务调度通用常量 + * + * @author admin + */ +public class ScheduleConstants { + public static final String TASK_CLASS_NAME = "TASK_CLASS_NAME"; + + /** + * 执行目标key + */ + public static final String TASK_PROPERTIES = "TASK_PROPERTIES"; + + /** + * 默认 + */ + public static final String MISFIRE_DEFAULT = "0"; + + /** + * 立即触发执行 + */ + public static final String MISFIRE_IGNORE_MISFIRES = "1"; + + /** + * 触发一次执行 + */ + public static final String MISFIRE_FIRE_AND_PROCEED = "2"; + + /** + * 不触发立即执行 + */ + public static final String MISFIRE_DO_NOTHING = "3"; + + public enum Status { + /** + * 正常 + */ + NORMAL("0"), + /** + * 暂停 + */ + PAUSE("1"); + + private String value; + + Status(String value) { + this.value = value; + } + + public String getValue() { + return value; + } + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/constant/UserConstants.java b/easyink-common/src/main/java/com/easyink/common/constant/UserConstants.java new file mode 100644 index 0000000..df0442e --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/constant/UserConstants.java @@ -0,0 +1,155 @@ +package com.easyink.common.constant; + +/** + * 用户常量信息 + * + * @author admin + */ +public class UserConstants { + /** + * 平台内系统用户的唯一标志 + */ + public static final String SYS_USER = "SYS_USER"; + + /** + * 正常状态 + */ + public static final String NORMAL = "0"; + + /** + * 异常状态 + */ + public static final String EXCEPTION = "1"; + + /** + * 用户封禁状态 + */ + public static final String USER_DISABLE = "1"; + + /** + * 角色封禁状态 + */ + public static final String ROLE_DISABLE = "1"; + + /** + * 部门正常状态 + */ + public static final String DEPT_NORMAL = "0"; + + /** + * 部门停用状态 + */ + public static final String DEPT_DISABLE = "1"; + + /** + * 字典正常状态 + */ + public static final String DICT_NORMAL = "0"; + + /** + * 是否为系统默认(是) + */ + public static final String YES = "Y"; + + /** + * 是否菜单外链(是) + */ + public static final String YES_FRAME = "0"; + + /** + * 是否菜单外链(否) + */ + public static final String NO_FRAME = "1"; + + /** + * 菜单类型(目录) + */ + public static final String TYPE_DIR = "M"; + + /** + * 菜单类型(菜单) + */ + public static final String TYPE_MENU = "C"; + + /** + * 菜单类型(按钮) + */ + public static final String TYPE_BUTTON = "F"; + /** + * 菜单类型(页面) + */ + public static final String TYPE_PAGE = "P"; + + /** + * Layout组件标识 + */ + public static final String LAYOUT = "Layout"; + + /** + * 校验返回结果码 + */ + public static final String UNIQUE = "0"; + public static final String NOT_UNIQUE = "1"; + + /** + * 初始化的管理员角色 ID + */ + public static final Long INIT_ADMIN_ROLE_ID = 1L; + /** + * 初始化的部门经理角色 ID + */ + public static final Long INIT_DEPARTMENT_MANAGER_ROLE_ID = 6L; + /** + * 初始化的员工角色 ID + */ + public static final Long INIT_EMPLOYEE_ROLE_ID = 7L; + /** + * 初始化的管理员角色名称 + */ + public static final String INIT_ADMIN_ROLE_NAME = "管理员"; + /** + * 初始化的部门管理员角色名称 + */ + public static final String INIT_DEPARTMENT_ADMIN_ROLE_NAME = "部门管理员"; + /** + * 初始化的普通员工角色名称 + */ + public static final String INIT_EMPLOYEE_ROLE_NAME = "普通员工"; + /** + * 初始化的管理员角色key + */ + public static final String INIT_ADMIN_ROLE_KEY = "admin"; + /** + * 初始化的部门管理员角色key + */ + public static final String INIT_DEPARTMENT_ADMIN_ROLE_KEY = "depart"; + /*** + * 初始化的普通员工角色key + */ + public static final String INIT_EMPLOYEE_ROLE_KEY = "employee"; + /** + * 最上级菜单的父菜单id + */ + public static final String ROOT_MENU_PARENT_ID = "0"; + /** + * 初始化的管理员默认所有菜单id + */ + public static final String ADMIN_DEFAULT_MENU_IDS = "1,2,101,102,108,109,110,111,112,500,501,1009,1010,1011,1014,1015,1016,1018,1019,1020,1041,1044,1048,1050,1051,1052,1053,1054,2001,2002,2003,2004,2005,2006,2007,2010,2013,2014,2015,2016,2020,2021,2022,2023,2024,2025,2026,2028,2029,2051,2052,2053,2056,2060,2062,2071,2072,2073,2074,2076,2079,2080,2081,2082,2083,2084,2085,2086,2100,2101,2102,2105,2106,2107,2120,2124,2127,2131,2133,2134,2135,2138,2139,2141,2142,2151,2152,2153,2156,2157,2158,2159,2160,2163,2164,2165,2166,2179,2188,2189,2196,2201,2205,2206,2207,2208,2210,2211,2212,2213,2214,2215,2216,2217,2218,2219,2221,2222,2223,2224,2226,2227,2228,2229,2230,2231,2232,2233,2234,2235,2236,2237,2238,2239,2240,2241,2242,2243,2245,2247,2248,2249,2250,2251,2252,2256,2257,2258,2259,2260,2261,2262,2263,2264,2265,2266,2267,2268,2269,2270,2271,2272,2273,2274,2275,2276,2277,2280,2281,2282,2283,2284,2285,2286,2287,2288,2289,2292,2293,2296,2297,2298,2299,2301,2302"; + /** + * 初始化的部门管理员默认的所有菜单id + */ + public static final String DEPARTMENT_ADMIN_DEFAULT_IDS = "1,1018,1019,1020,2001,2002,2003,2004,2005,2006,2007,2013,2014,2015,2016,2020,2021,2022,2023,2024,2025,2026,2028,2029,2052,2053,2056,2060,2062,2074,2079,2080,2081,2082,2083,2084,2085,2086,2100,2101,2102,2105,2106,2107,2120,2124,2127,2131,2133,2134,2135,2138,2139,2141,2142,2151,2152,2153,2156,2157,2158,2160,2163,2164,2179,2188,2201,2205,2206,2207,2208,2210,2211,2212,2213,2214,2215,2217,2218,2219,2221,2222,2223,2224,2236,2238,2243,2245,2247,2248,2250,2251,2252,2256,2257,2258,2259,2260,2261,2262,2263,2264,2265,2266,2267,2268,2272,2273,2274,2275,2276,2277,2280,2282,2283,2285,2286,2287,2288,2289,2292,2293,2296,2297,2298,2299,2302"; + /** + * 初始化的员工默认的所有菜单id + */ + public static final String EMPLOYEE_DEFAULT_IDS = "2001,2002,2003,2006,2007,2014,2015,2016,2020,2021,2022,2028,2074,2079,2080,2105,2106,2107,2160,2163,2164,2188,2224,2236,2243,2280,2062,2282,2299"; + /** + * 三方应用需要屏蔽的菜单 + */ + public static final String THIRD_APP_BAN_MENU_IDS = "102,109,110,111,112,2284"; + /** + * 系统默认字段 + */ + public static final String[] SYS_DEFAULT_PROPERTIES = {"客户", "备注", "来源", "添加时间", "所属员工", "标签", "所属部门", "客户状态", "出生日期", "电话", "邮箱", "地址", "描述"}; + +} diff --git a/easyink-common/src/main/java/com/easyink/common/constant/WeConstans.java b/easyink-common/src/main/java/com/easyink/common/constant/WeConstans.java new file mode 100644 index 0000000..cf1961a --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/constant/WeConstans.java @@ -0,0 +1,886 @@ +package com.easyink.common.constant; + + +import lombok.Getter; + +/** + * @author admin + * @description: 企业微信相关常量 + * @create: 2020-08-26 17:01 + **/ +public class WeConstans { + public static final String SLASH = "/"; + public static final String VERTICAL_BAR = "|"; + public static final String SUFFIX = "等"; + /** + * 侧边栏顺序 + * 0 海报、1 语音(voice)、2 视频(video),3 普通文件(file) 4 文本 、5图文链接、6小程序 + */ + public static final String SIDE_SEQ = "0,5,2,3,6"; + //MAP初始化大小 + public static final int INIT_MAP_CAPACITY = 16; + //消息最大附件数量 + public static final int MAX_ATTACHMENT_NUM = 9; + // 群欢迎语最大附件数量 + public static final int GROUP_MAX_ATTACHMENT_NUM = 1; + /** + * 表示成员的入群方式 + * 0 - 由成员邀请入群(包括直接邀请入群和通过邀请链接入群) + * 3 - 通过扫描群二维码入群 + */ + public static final String CODE_JOIN_SCENE = "3"; + + /** + * 异步任务完成通知 + * sync_user:增量更新成员 + * replace_user:全量覆盖成员 + * invite_user:=邀请成员关注 + * replace_party:全量覆盖部门 + */ + public static final String SYNC_USER = "sync_user"; + public static final String REPLACE_USER = "replace_user"; + public static final String INVITE_USER = "invite_user"; + public static final String REPLACE_PARTY = "replace_party"; + + + /** + * 查询对应Serverurl和Prefix + */ + public static final String WECOM_SERVER_URL = "weComServerUrl"; + public static final String WECOM_PREFIX = "weComePrefix"; + public static final String ORDER_ACCESS_ID = "orderAccessId"; + public static final String ORDER_ACCESS_KEY = "orderAccessKey"; + public static final String ORDER_SERVER_URL = "orderServerUrl"; + + + /** + * 索引对应数据 + */ + public static final String FROM = "from"; + public static final String FROMM_INFO = "fromInfo"; + public static final String TO_LIST = "tolist"; + public static final String ROOMID = "roomid"; + public static final String ROOM_INFO = "roomInfo"; + public static final String TO_LIST_INFO = "toListInfo"; + public static final String MSG_TIME = "msgtime"; + public static final String MSG_TYPE = "msgtype"; + public static final String STATUS = "status"; + public static final String CONTENT = "content"; + public static final String PATTERN_WORDS = "pattern_words"; + public static final String MSG_ID = "msgid"; + public static final String PRE_MSG_ID = "revoke.pre_msgid"; + public static final String SEQ = "seq"; + public static final String ACTION = "action"; + public static final String PROPERTIES = "properties"; + public static final String TEXT = "text"; + + /** + * 侧边栏判断是否全选:0 全选 1 非全选 + */ + public static final String CHECK_ALL = "0"; + public static final String NO_CHECK_ALL = "1"; + + /** + * 微信授权token + */ + public static final String WX_AUTH_ACCESS_TOKEN = "wx_auth_access_token"; + public static final String WX_AUTH_REFRESH_ACCESS_TOKEN = "wx_auth_refresh_access_token"; + + /** + * 微信通用token + */ + public static final String WX_ACCESS_TOKEN = "wx_access_token"; + + /** + * 企业微信相关token + */ + public static final String WE_COMMON_ACCESS_TOKEN = "we_common_access_token"; + + + /** + * 自建应用token + */ + public static final String WE_THIRD_APP_TOKEN = "we_third_app_token"; + + + /** + * 获取外部联系人相关 token + */ + public static final String WE_CONTACT_ACCESS_TOKEN = "we_contact_access_token"; + /** + * 获取外部联系人相关 token + */ + public static final String WE_CUSTOM_ACCESS_TOKEN = "we_custom_access_token"; + + /** + * 供应商相关token + */ + public static final String WE_PROVIDER_ACCESS_TOKEN = "we_provider_access_token"; + + /** + * 会话存档相关token + */ + public static final String WE_CHAT_ACCESS_TOKEN = "we_chat_access_token"; + + /** + * 应用相关token + */ + public static final String WE_AGENT_ACCESS_TOKEN = "we_agent_access_token"; + + /** + * 三方应用相关token + */ + public static final String WE_SUITE_ACCESS_TOKEN = "we_suite_access_token:"; + + /** + * 三方应用授权企业相关token + */ + public static final String WE_AUTH_CORP_ACCESS_TOKEN = "we_auth_corp_access_token:"; + + + public static final String WE_EMPLE_CODE_KEY = "we_emple_code_key"; + + public static final String WE_ACTUAL_GROUP_CODE_KEY = "we_actual_group_code_key"; + /** + * 企业配置缓存 + */ + public static final String WE_CORP_ACCOUNT = "CurrentWeCorpAccount-new2"; + + /** + * 服务商ticket缓存 + */ + public static final String WE_SUITE_TICKET = "we_suite_ticket:"; + + + /** + * 企业微信接口返回成功code + */ + public static final Integer WE_SUCCESS_CODE = 0; + + + /** + * 企业微信端根部门id + */ + public static final Long WE_ROOT_DEPARMENT_ID = 1L; + + + /** + * 企业微信通讯录用户启用 + */ + public static final Integer WE_USER_START = 1; + + + /** + * 企业微信通讯录用户停用 + */ + public static final Integer WE_USER_STOP = 0; + + + /** + * 同步功能提示语 + */ + public static final String SYNCH_TIP = "后台开始同步数据,请稍后关注进度"; + + + /** + * 离职未分配 + */ + public static final Integer LEAVE_NO_ALLOCATE_STATE = 0; + + + /** + * 离职已分配分配 + */ + public static final Integer LEAVE_ALLOCATE_STATE = 1; + + + /** + * 已激活 + */ + public static final Integer WE_USER_IS_ACTIVATE = 1; + + + /** + * 已禁用 + */ + public static final Integer WE_USER_IS_FORBIDDEN = 2; + + + /** + * 已离职 + */ + public static final Integer WE_USER_IS_LEAVE = 6; + + + /** + * 未激活 + */ + public static final Integer WE_USER_IS_NO_ACTIVATE = 4; + + + /** + * 企业微信素材目录根id + */ + public static final Long WE_ROOT_CATEGORY_ID = 0L; + + /** + * 实际群活码正在使用中 + */ + public static final Integer WE_GROUP_CODE_ENABLE = 0; + + /** + * 群活码已禁用/达到扫码次数上限 + */ + public static final Integer WE_GROUP_CODE_DISABLE = 1; + + + /** + * 单人活码 + */ + public static final Integer SINGLE_EMPLE_CODE_TYPE = 1; + + + /** + * 多人活码 + */ + public static final Integer MANY_EMPLE_CODE_TYPE = 2; + + + /** + * 批量单人活码 + */ + public static final Integer BATCH_SINGLE_EMPLE_CODE_TYPE = 3; + + + /** + * 在小程序中联系场景 + */ + public static final Integer SMALL_ROUTINE_EMPLE_CODE_SCENE = 1; + + + /** + * 通过二维码联系场景 + */ + public static final Integer QR_CODE_EMPLE_CODE_SCENE = 2; + + /** + * 客户添加时无需经过确认自动成为好友,是 + */ + public static final Boolean IS_JOIN_CONFIR_MFRIENDS = true; + + /** + * 客户添加时无需经过确认自动成为好友,否 + */ + public static final Boolean NOT_IS_JOIN_CONFIR_MFRIENDS = false; + + /** + * 批量生成的单人码 活动场景 + */ + public static final String ONE_PERSON_CODE_GENERATED_BATCH = "批量生成的单人码"; + + /** + * 微信接口相应端错误字段 + */ + public static final String WE_ERROR_FIELD = "errcode"; + + + /** + * 递归 + */ + public static final Integer YES_IS_RECURSION = 0; + + + /** + * 获取所有子部门数据 + */ + public static final Integer DEPARTMENT_SUB_WEUSER = 1; + + + /** + * 获取当前部门 + */ + public static final Integer DEPARTMENT_CURRENT_WEUSER = 0; + + + /** + * 通讯录用户激活 + */ + public static final Integer YES_IS_ACTIVATE = 1; + + + /** + * 通讯录用户未激活 + */ + public static final Integer NO_IS_ACTIVATE = 2; + + + /** + * 不存在外部联系人的关系 + */ + public static final Integer NOT_EXIST_CONTACT = 84061; + + public static final String COMMA = ","; + + public static final String USER_ID = "userid"; + + public static final String CURSOR = "cursor"; + + public static final String CORPID = "CORP_ID"; + + public static final String PAGE_ID = "page_id"; + + public static final String PAGE_SIZE = "page_size"; + + /** + * 获取客户详情并同步客户数据 + */ + public static final String SYNCH_WE_CUSTOMER_ADD = "0"; + + public static final String SYNCH_WE_CUSTOMER_UPDATE = "1"; + /** + * 业务id类型1:组织机构id,2:成员id + */ + public static final Integer USE_SCOP_BUSINESSID_TYPE_USER = 2; + public static final Integer USE_SCOP_BUSINESSID_TYPE_ORG = 1; + public static final Integer USE_SCOP_BUSINESSID_TYPE_ALL = 3; + + /** + * 客户流失通知开关 0:关闭 1:开启 + */ + public static final String DEL_FOLLOW_USER_SWITCH_CLOSE = "0"; + public static final String DEL_FOLLOW_USER_SWITCH_OPEN = "1"; + + public static final String CONTACT_SEQ_KEY = "seq"; + + public static String getContactSeqKey(String corpId) { + return CONTACT_SEQ_KEY + ":" + corpId; + } + + /** + * id类型 0:成员 1:客户,2:机器 + */ + public static final Integer ID_TYPE_USER = 0; + public static final Integer ID_TYPE_EX = 1; + public static final Integer ID_TYPE_MACHINE = 2; + + /** + * 一次拉取的消息条数,最大值1000条,超过1000条会返回错误 + */ + public static final long LIMIT = 1_000L; + + /** + * 敏感词过滤查询用户分片 + */ + public static final Integer SENSITIVE_USER_PIECE = 50; + + /** + * 任务裂变用户活码state前缀 + */ + public static final String FISSION_PREFIX = "fis-"; + + public static final String APP_TICKET_KEY = "ticket:AppGet"; + public static final String AGENT_TICKET_KEY = "ticket:AgentGet"; + + + //性别,1表示男性,2表示女性 + //表示所在部门是否为上级,0-否,1-是,顺序与Department字段的部门逐一对应 + //激活状态:1=已激活 2=已禁用 4=未激活 已激活代表已激活企业微信或已关注微工作台(原企业号) 5=成员退出 + public enum corpUserEnum { + + USER_SEX_TYPE_MAN(1, "男性"), + USER_SEX_TYPE_WEMAN(2, "女性"), + + IS_DEPARTMENT_SUPERIOR_YES(1, "是"), + IS_DEPARTMENT_SUPERIOR_NO(0, "否"), + + ACTIVE_STATE_ONE(1, "已激活"), + ACTIVE_STATE_TWO(2, "已禁用"), + ACTIVE_STATE_FOUR(4, "未激活"), + ACTIVE_STATE_FIVE(5, "成员退出"); + + private Integer key; + private String value; + + /** + * 构造方法 + * + * @param key + * @param value + */ + corpUserEnum(int key, String value) { + this.setKey(key); + this.setValue(value); + } + + public Integer getKey() { + return key; + } + + public void setKey(Integer key) { + this.key = key; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + } + + @Getter + public enum sendMessageStatusEnum { + NOT_SEND("0", "未发送"), + SEND("1", "已发送"), + NOT_FRIEND_SEND("2", "因客户不是好友导致发送失败"), + RECEIVE_OTHER_MESSAGE("3", "-因客户已经收到其他群发消息导致发送失败"), + ; + + private String status; + private String desc; + + /** + * 构造方法 + * + * @param status + * @param desc + */ + sendMessageStatusEnum(String status, String desc) { + this.status = status; + this.desc = desc; + } + } + + + public static final String WECOM_SENSITIVE_HIT_INDEX = "sensitive"; + + /** + * 获取敏感词索引(字母小写化) + */ + public static String getWecomSensitiveHitIndex(String corpId) { + return (WECOM_SENSITIVE_HIT_INDEX + "-" + corpId).toLowerCase(); + } + + public static final String WECOM_CHAT_DATA_INDEX = "chatdata"; + + /** + * 获取会话存档索引(字母小写化) + */ + public static String getChatDataIndex(String corpId) { + return (WECOM_CHAT_DATA_INDEX + "-" + corpId).toLowerCase(); + } + + /** + * 开启会话存档成员列表 + **/ + public static final String WE_MSG_AUDIT_KEY = "wecom_msg_audit:user:ids"; + + + /** + * 第三方应用ID,参数标实 + */ + public static final String THIRD_APP_PARAM_TIP = "agentId"; + + public static final String WECUSTOMERS_KEY = "weCustomer:"; + + /** + * 群发数据常量 + * 发给客户 + */ + public static final String SEND_MESSAGE_CUSTOMER = "0"; + + /** + * 发给客户群 + */ + public static final String SEND_MESSAGE_GROUP = "1"; + + /** + * 定时发送 + */ + public static final String SEND_MESSAGE_JOB = "2"; + + /** + * 消息范围 0 全部客户 + */ + public static final String SEND_MESSAGE_CUSTOMER_ALL = "0"; + + /** + * 查询全部的客户列表 + */ + public static final String QUERY_ALL = "all"; + + /** + * 消息范围 1 指定客户 + */ + public static final String SEND_MESSAGE_CUSTOMER_PART = "1"; + + /** + * 是否删除:0 未删除 、1 已删除 + */ + public static final Integer WE_CUSTOMER_MSG_RESULT_NO_DEFALE = 0; + public static final Integer WE_CUSTOMER_MSG_RESULT_DEFALE = 1; + + /** + * 是否开启会话存档 0:关闭 1:开启 + */ + public static final Integer OPEN_CHAT = 1; + public static final Integer CLOSE_CHAT = 0; + + /** + * 客户员工关系表: + * createTime创建事假, + * total总数 + */ + + /** + * 判断是否需要获取群成员名字 + */ + public static final Integer NEED_NAME = 1; + + /** + * 判断是否是群聊 + */ + public static final Integer IS_ROOM = 1; + + /** + * 员工触发敏感词 消息通知审计人 1-开启通知 + */ + public static final Integer SENSITIVE_NOTICE = 1; + /** + * + */ + public static final String EXTENDS_OTHER_ENVIRONMENT = "已在客户端或第三方分配完成"; + + /** + * 保存员工活码key + * + * @param corpId 企业Id + * @param configId 二维码configId + * @return we_emple_code_key:{corpId}:{configId} + */ + public static String getWeEmployCodeKey(String corpId, String configId) { + return WE_EMPLE_CODE_KEY + ":" + corpId + ":" + configId; + } + + /** + * 保存实际群码key + * + * @param actualId 实际群码id + * @return we_actual_group_code_key:{actualId} + */ + public static String getWeActualGroupCodeKey(String actualId) { + return WE_ACTUAL_GROUP_CODE_KEY + ":" + actualId; + } + + /** + * 话术库根节点名称(默认:全部) + */ + public static final String DEFAULT_WE_WORDS_CATEGORY_ROOT_NAME = "全部"; + + /** + * 素材配置定时清理天数(默认7) + */ + public static final Integer DEFAULT_WE_MATERIAL_DEL_DAYS = 7; + + /** + * 素材配置(默认不删除) + */ + public static final Boolean DEFAULT_WE_MATERIAL_NOT_DEL = false; + + /** + * 素材发布状态(默认发布到侧边栏) + */ + public static final Boolean DEFAULT_WE_MATERIAL_USING = true; + + /** + * 素材发布状态(不发布) + */ + public static final Boolean WE_MATERIAL_NOT_USING = false; + + /** + * 素材过期时间(默认不过期) + */ + public static final String DEFAULT_MATERIAL_NOT_EXPIRE = "2099-01-01 00:00:00"; + /** + * 群发立即发送 + */ + public static final int NORMAL_TASK = 0; + /** + * 群发定时任务 + */ + public static final int TIME_TASK = 1; + /** + * 群发未发送 + */ + public static final String NOT_SEND = "0"; + /** + * 群发已发送 + */ + public static final String SEND = "1"; + + /** + * 话术库上级文件夹ID(默认:0) + */ + public static final Long DEFAULT_WE_WORDS_CATEGORY_PARENT_ID = 0L; + + /** + * 话术库最高排序(默认:0) + */ + public static final Integer DEFAULT_WE_WORDS_CATEGORY_HIGHEST_SORT = 0; + /** + * 素材未过期 + */ + public static final Boolean MATERIAL_UN_EXPIRE = false; + + /** + * 素材类型-发布 + */ + public static final Boolean WE_CATEGORY_USING = true; + + /** + * 默认值-空字符串 + */ + public static final String DEFAULT_EMPTY_STRING = ""; + /** + * 根部门 + */ + public static final String ROOT_DEPARTMENT = "1"; + + + /** + * 默认企微发视频大小 10M + */ + public static final Long DEFAULT_MAX_VIDEO_SIZE = 10 * 1024 * 1024L; + /** + * 默认企微发图片大小 10M + */ + public static final Long DEFAULT_MAX_IMAGE_SIZE = DEFAULT_MAX_VIDEO_SIZE; + /** + * 默认企微发文件大小 20M + */ + public static final Long DEFAULT_MAX_FILE_SIZE = 2 * 10 * 1024 * 1024L; + /** + * 朋友圈默认图片宽度 + */ + public static final int DEFAULT_MAX_IMAGE_WIDTH = 1440; + /** + * 朋友圈默认图片高度 + */ + public static final int DEFAULT_MAX_IMAGE_HEIGHT = 1080; + + /** + * 客户昵称替换 + */ + public static final String CUSTOMER_NICKNAME = "#客户昵称#"; + + /** + * 员工姓名替换 + */ + public static final String EMPLOYEE_NAME = "#员工姓名#"; + + /** + * 群欢迎语客户昵称占位符 + */ + public static final String GROUP_CUSTOMER_NICKNAME = "%NICKNAME%"; + + /** + * 点击查看视频 + */ + public static final String CLICK_SEE_VIDEO = "点击查看视频"; + + /** + * 默认视频封面 + */ + public static final String DEFAULT_VIDEO_COVER_URL = "https://wecomsaas-1253559996.cos.ap-guangzhou.myqcloud.com/2021/11/08/%E8%A7%86%E9%A2%91.png"; + + /** + * 默认群活码的mediaType=-1 + */ + public static final Integer DEFAULT_GROUP_CODE_MEDIA_TYPE = -1; + /** + * 第一个分页 + */ + public static final Integer FIRST_PAGE = 1; + + /** + * 话术详情附件文本类型 + */ + public static final Integer WE_WORDS_DETAIL_MEDIATYPE_TEXT = 4; + + + /** + * 客户群标签最大创建数量(默认值3000) + */ + public static final Integer DEFAULT_WE_GROUP_TAG_CATEGORY_SIZE = 3000; + + /** + * 成员类型:1 企业成员 + */ + public static final Integer WE_GROUP_MEMBER_TYPE_STAFF = 1; + + /** + * 成员类型:2 外部联系人 + */ + public static final Integer WE_GROUP_MEMBER_TYPE_CUSTOMER = 2; + + /** + * 发送信息模板 + */ + public static final String CUSTOMER_GROUP_MESSAGE_INFO = "【任务提醒】\n" + + "\n" + + "任务类型:群发任务\n" + + "\n" + + "发送对象:【替换内容】\n" + + "\n" + + "请及时前往【客户群】中确认发送"; + public static final String CUSTOMER_MESSAGE_INFO = "【任务提醒】\n" + + "\n" + + "任务类型:群发任务\n" + + "\n" + + "发送对象:【替换内容】\n" + + "\n" + + "请及时前往【客户联系】中确认发送"; + public static final String REPLACE_MSG = "【替换内容】"; + /** + * mediaId 缓存key + */ + public static final String MEDIA_KEY = "media_url:"; + /** + * 朋友圈mediaId 缓存key + */ + public static final String MOMENT_ATTACHMENT_MEDIA_KEY = "moment_attachment_media_url:"; + + + public static final String REVOKE_KEY = "revoke_msgid:"; + + /** + * 老客进群,发送失败过滤条件 (isSend=2) + */ + public static final Integer SEND_CORP_MESSAGE_ISSEND_FAIL = 2; + + /** + * 默认运营中心SOP的话术groupId为-1 + */ + public static final Long DEFAULT_SOP_WORDS_DETAIL_GROUP_ID = -1L; + + /** + * 运营中心SOP 默认开始时间 + */ + public static final String DEFAULT_SOP_START_TIME = "1970-01-01 00:00:00"; + + /** + * 运营中心SOP 默认结束时间 + */ + public static final String DEFAULT_SOP_END_TIME = "2099-01-01 00:00:00"; + + /** + * SOP 详情 对应字段is_finish , 是否已执行 0:未执行,1:已执行 + */ + public static final Integer UN_EXECUTE = 0; + public static final Integer EXECUTE = 1; + + /** + * SOP任务详情的type的过滤值定义 + */ + public static final String CUSTOMER_SOP_TYPE_VAL = "2,3,4"; + public static final String GROUP_SOP_TYPE_VAL = "0,1"; + public static final String GROUP_CALENDAR_TYPE_VAL = "5"; + + /** + * 运营中心 新增SOP 使用员工/部门 对应字段type 1:使用部门,0:使用员工 + */ + public static final Integer SOP_USE_DEPARTMENT = 1; + public static final Integer SOP_USE_EMPLOYEE = 2; + + /** + * 默认alterData1值 + */ + public static final Integer DEFAULT_SOP_ALTER_DATA1 = 0; + /** + * 接替中的备注提示 + */ + public static final String DEFAULT_TRANSFER_NOTICE = "已发起接替请求,24小时后自动接替"; + /** + * 待开发应用订阅锁key + */ + public static final String SUBSCRIBE_KEY = "subscribe:"; + /** + * 待开发应用订阅锁时长 + */ + public static final Long SUBSCRIBE_EXPIRE_TIME = 60L; + + /** + * 个人朋友圈消息模板 + */ + public static final String PERSONAL_MOMENT_MSG = "【朋友圈】\n" + + "\n" + + "提醒内容:您有一条发送朋友圈的任务\n" + + "\n" + + "创建时间:{0}\n" + + "\n" + + "{1}"; + + public static final String ENTERPRISE_MOMENT_USER_MSG = "【朋友圈】\n" + + "\n" + + "提醒内容:您有一条发送朋友圈的任务\n" + + "\n" + + "创建时间:{0}\n" + + "\n" + + "请从企业微信APP前往【客户朋友圈】确认发送,记得及时完成喔!"; + + public static final String PERSONAL_MOMENT_USER_MSG = "【朋友圈】\n" + + "\n" + + "提醒内容:您有一条发送朋友圈的任务\n" + + "\n" + + "创建时间:{0}\n" + + "\n" + + "{1}"; + public static final String MOMENT_NO_CUSTOMER ="该员工没有需触达客户"; + public static final String VIDEO_2_LINK_DEFAULT_URL = "https://wecomsaas-1253559996.cos.ap-guangzhou.myqcloud.com/2022/01/19/defauluVedio.jpg"; + + /** + * 自动标签关键词数量限制 + */ + public static final int AUTO_TAG_KEYWORD_NUM_LIMIT = 10; + + /** + * 自动标签标签数量限制 + */ + public static final int AUTO_TAG_TAG_NUM_LIMIT = 10; + + /** + * 自动标签群场景数量限制 + */ + public static final int AUTO_TAG_GROUP_SCENE_NUM_LIMIT = 10; + /** + * 自动标签群场景群聊数量限制 + */ + public static final int AUTO_TAG_GROUP_SCENE_GROUP_NUM_LIMIT = 10; + /** + * 自动标签群场景标签数量限制 + */ + public static final int AUTO_TAG_GROUP_SCENE_TAG_NUM_LIMIT = 10; + /** + * 自动标签新客场景数量限制 + */ + public static final int AUTO_TAG_CUSTOMER_SCENE_NUM_LIMIT = 10; + /** + * 自动标签新客场景标签数量限制 + */ + public static final int AUTO_TAG_CUSTOMER_SCENE_TAG_NUM_LIMIT = 10; + + /** + * 自动标签新建传入员工 + */ + public static final int AUTO_TAG_ADD_USER_TYPE = 2; + /** + * 自动标签传入部门 + */ + public static final int AUTO_TAG_ADD_DEPARTMENT_TYPE = 1; + + + + +} diff --git a/easyink-common/src/main/java/com/easyink/common/constant/radar/RadarConstants.java b/easyink-common/src/main/java/com/easyink/common/constant/radar/RadarConstants.java new file mode 100644 index 0000000..e573e46 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/constant/radar/RadarConstants.java @@ -0,0 +1,108 @@ +package com.easyink.common.constant.radar; + +import com.easyink.common.enums.radar.RadarChannelEnum; +import com.easyink.common.utils.StringUtils; + +/** + * ClassName: RadarConstants + * + * @author wx + * @date 2022/7/18 17:30 + */ +public class RadarConstants { + + + /** + * 参数校验异常 + */ + public static class ParamVerify { + /** + * 传输参数为空 + */ + public static final String PARAM_NULL = "传输参数为空"; + } + + /** + * 提示客户,自定义抛出异常给前端使用 + */ + public static class PromptCus { + /** + * 未选择标签 + */ + public static final String NOT_USE_TAG = "未选择客户标签"; + /** + * 渠道名称重复 + */ + public static final String RADAR_CHANNEL_REPEAT = "渠道名称重复"; + + public static final String RADAR_SHORT_PARAM_ERROR = "生成雷达短链参数错误"; + + public static final String RADAR_SHORT_ERROR = "雷达不存在"; + } + + /** + * 新增/更新通知员工 + */ + public static class UpdateNoticeToUser { + /** + * 发送消息,企业雷达库已更新 + */ + public static final String CORP_RADAR_UPDATE = "企业雷达库已更新"; + + /** + * 发送消息,部门雷达库已更新 + */ + public static final String DEPARTMENT_RADAR_UPDATE = "部门雷达库已更新"; + + // “{雷达标题}” + public static final String getUpdateMessage(String title) { + return "“{" + title + "}”"; + } + + public static final String SEND_ALL = "@all"; + } + + public static class RadarAnalyseCount { + /** + * 如果不传日期默认为7天的数据 + */ + public static final Integer DEFAULT_DAY = 7; + + /** + * 数量为0 + */ + public static final Integer ZERO = 0; + } + + /** + * 客户点击记录 + */ + public static class RadarCustomerClickRecord { + + public static String COMMON_MSG = "普通欢迎语"; + + public static String EMPTY_USERID = StringUtils.EMPTY; + + public static String EMPTY_SCENARIO = StringUtils.EMPTY; + /** + * 替换渠道来源内容 + */ + public static String REPlACR_WORD = "【替换内容】"; + + public static String getRecordText(String customerName, String userName, String detail, int type, String channelName) { + String msg = "客户“" + customerName + "”" + "点击了员工“" + userName + "”" + "在【" + RadarChannelEnum.getChannelByType(type) + REPlACR_WORD + "】发出的雷达链接"; + if (RadarChannelEnum.CUSTOMIZE.getTYPE().equals(type)) { + return msg.replace(REPlACR_WORD, "-{" + channelName + "}"); + } + if (StringUtils.isNotBlank(detail) + && !RadarChannelEnum.MOMENT.getTYPE().equals(type) + && !RadarChannelEnum.SIDE_BAR.getTYPE().equals(type) + && !RadarChannelEnum.WELCOME_MSG.getTYPE().equals(type)) { + return msg.replace(REPlACR_WORD, "-{" + detail + "}"); + } else { + return msg.replace(REPlACR_WORD, StringUtils.EMPTY); + } + } + } + +} diff --git a/easyink-common/src/main/java/com/easyink/common/constant/redeemcode/RedeemCodeConstants.java b/easyink-common/src/main/java/com/easyink/common/constant/redeemcode/RedeemCodeConstants.java new file mode 100644 index 0000000..d27eb0b --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/constant/redeemcode/RedeemCodeConstants.java @@ -0,0 +1,77 @@ +package com.easyink.common.constant.redeemcode; + +/** + * ClassName: Constants + * + * @author wx + * @date 2022/7/12 9:41 + */ +public class RedeemCodeConstants { + + /** + * 兑换码锁 + */ + public static String REDEEM_CODE_KEY = "redeemCode"; + + public static long CODE_WAIT_TIME = 5L; + + public static long CODE_LEASE_TIME = 5L; + + /** + * 获取兑换码活动锁,用来处理分配兑换码所引发的并发操作 + * + * @param corpId + * @param activityId + * @return + */ + public static String getRedeemCodeKey(String corpId, String activityId) { + return REDEEM_CODE_KEY + ":" + corpId + ":" + activityId; + } + + /** + * 兑换码 + */ + public static final String REDEEM_CODE = "#兑换码#"; + + /** + * 告警员工信息模板 + */ + public static final String REDEEM_CODE_ALARM_MESSAGE_INFO = "【兑换码活动库存告警提醒】\n" + + "\n" + + "兑换码活动名称:【活动名称】\n" + + "\n" + + "兑换码库存数:【库存个数】\n" + + "\n" + + "请及时前往该活动中添加库存"; + + public static final String REDEEM_CODE_ACTIVITY_NAME = "【活动名称】"; + + public static final String REDEEM_CODE_REAMIN_INVENTORY = "【库存个数】"; + + /** + * 兑换码员工告警 + */ + public static final Integer REDEEM_CODE_USER_ALARM = 1; + + /** + * 兑换码活动限制参与 + */ + public static final Integer REDEEM_CODE_ACTIVITY_LIMITED = 1; + + /** + * 兑换码已领取 + */ + public static final int REDEEM_CODE_RECEIVED = 1; + + /** + * 兑换码未领取 + */ + + public static final int REDEEM_CODE_NOT_RECEIVED = 0; + + /** + * 兑换码默认空时间 + */ + public static final String REDEEM_CODE_EMPTY_TIME = "0000-00-00"; + +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/MenuTree.java b/easyink-common/src/main/java/com/easyink/common/core/MenuTree.java new file mode 100644 index 0000000..4daa082 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/MenuTree.java @@ -0,0 +1,29 @@ +package com.easyink.common.core; + +import com.easyink.common.core.domain.TreeSelect; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * 菜单树对象实体 + * + * @author : silver_chariot + * @date : 2021/8/25 10:50 + */ +@ApiModel +@Data +@AllArgsConstructor +@NoArgsConstructor +public class MenuTree { + + @ApiModelProperty(value = "已选择的菜单") + private List checkedKeys; + + @ApiModelProperty(value = "菜单树") + private List menus; +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/controller/BaseController.java b/easyink-common/src/main/java/com/easyink/common/core/controller/BaseController.java new file mode 100644 index 0000000..a9ec0e9 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/controller/BaseController.java @@ -0,0 +1,119 @@ +package com.easyink.common.core.controller; + +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.core.page.PageDomain; +import com.easyink.common.core.page.TableDataInfo; +import com.easyink.common.core.page.TableSupport; +import com.easyink.common.enums.ResultTip; +import com.easyink.common.utils.DateUtils; +import com.easyink.common.utils.StringUtils; +import com.easyink.common.utils.sql.SqlUtil; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.WebDataBinder; +import org.springframework.web.bind.annotation.InitBinder; + +import java.beans.PropertyEditorSupport; +import java.util.Date; +import java.util.List; + +/** + * web层通用数据处理 + * + * @author admin + */ +@Slf4j +public class BaseController { + + /** + * 将前台传递过来的日期格式的字符串,自动转化为Date类型 + */ + @InitBinder + public void initBinder(WebDataBinder binder) { + // Date 类型转换 + binder.registerCustomEditor(Date.class, new PropertyEditorSupport() { + @Override + public void setAsText(String text) { + setValue(DateUtils.parseDate(text)); + } + }); + } + + /** + * 设置请求分页数据 + */ + protected void startPage() { + PageDomain pageDomain = TableSupport.buildPageRequest(); + Integer pageNum = pageDomain.getPageNum(); + Integer pageSize = pageDomain.getPageSize(); + if (StringUtils.isNotNull(pageNum) && StringUtils.isNotNull(pageSize)) { + String orderBy = SqlUtil.escapeOrderBySql(pageDomain.getOrderBy()); + PageHelper.startPage(pageNum, pageSize, orderBy); + } + } + + /** + * 响应请求分页数据 + */ + @SuppressWarnings({"rawtypes", "unchecked"}) + protected TableDataInfo getDataTable(List list) { + TableDataInfo rspData = new TableDataInfo(); + rspData.setCode(ResultTip.TIP_GENERAL_SUCCESS.getCode()); + rspData.setMsg("查询成功"); + rspData.setRows(list); + rspData.setTotal((int) new PageInfo(list).getTotal()); + return rspData; + } + + /** + * 响应请求分页数据 + * + * @param list 查询数据 + * @param total 总数 + * @param + * @return + */ + @SuppressWarnings({"rawtypes", "unchecked"}) + protected TableDataInfo getDataTable(List list, Long total) { + if (total == null) { + return getDataTable(list); + } + TableDataInfo rspData = new TableDataInfo(); + rspData.setCode(ResultTip.TIP_GENERAL_SUCCESS.getCode()); + rspData.setMsg("查询成功"); + rspData.setRows(list); + rspData.setTotal(total.intValue()); + return rspData; + } + + /** + * 响应请求分页数据 + */ + @SuppressWarnings({"rawtypes", "unchecked"}) + protected TableDataInfo getDataTable(PageInfo pageInfo) { + TableDataInfo rspData = new TableDataInfo(); + rspData.setCode(ResultTip.TIP_GENERAL_SUCCESS.getCode()); + rspData.setMsg("查询成功"); + rspData.setRows(pageInfo.getList()); + rspData.setTotal((int) pageInfo.getTotal()); + return rspData; + } + + /** + * 响应返回结果 + * + * @param rows 影响行数 + * @return 操作结果 + */ + protected AjaxResult toAjax(int rows) { + return rows > 0 ? AjaxResult.success() : AjaxResult.error(); + } + + /** + * 页面跳转 + */ + public String redirect(String url) { + return StringUtils.format("redirect:{}", url); + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/AjaxResult.java b/easyink-common/src/main/java/com/easyink/common/core/domain/AjaxResult.java new file mode 100644 index 0000000..137ab6b --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/AjaxResult.java @@ -0,0 +1,203 @@ +package com.easyink.common.core.domain; + +import com.alibaba.fastjson.JSONObject; +import com.easyink.common.config.RuoYiConfig; +import com.easyink.common.enums.ResultTip; +import com.easyink.common.utils.spring.SpringUtils; +import com.fasterxml.jackson.annotation.JsonIgnore; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.HashMap; +import java.util.Optional; + +/** + * 操作消息提醒 + * + * @author admin + */ +@ApiModel +@Data +public class AjaxResult implements Serializable { + + private static final long serialVersionUID = 7337293201809451832L; + /** + * 系统默认异常提醒 + */ + private static final String DEFAULT_NOTICE = "服务异常"; + + @JsonIgnore + private HashMap map; + + /** + * 状态码 + */ + public static final String CODE_TAG = "code"; + + @ApiModelProperty("状态码") + private int code; + + /** + * 返回内容 + */ + public static final String MSG_TAG = "msg"; + + @ApiModelProperty("返回内容") + private String msg; + + /** + * 数据对象 + */ + public static final String DATA_TAG = "data"; + + @ApiModelProperty("数据对象") + private T data; + + /** + * 初始化一个新创建的 AjaxResult 对象,使其表示一个空消息。 + */ + public AjaxResult() { + this.map = new HashMap<>(); + } + + /** + * 初始化一个新创建的 AjaxResult 对象 + * + * @param code 状态码 + * @param msg 返回内容 + */ + public AjaxResult(int code, String msg) { + this(); + this.code = code; + this.msg = msg; + } + + /** + * 初始化一个新创建的 AjaxResult 对象 + * + * @param code 状态码 + * @param msg 返回内容 + * @param data 数据对象 + */ + public AjaxResult(int code, String msg, T data) { + this(); + this.code = code; + this.msg = msg; + this.data = data; + } + + /** + * 返回成功消息 + * + * @return 成功消息 + */ + public static AjaxResult success() { + return AjaxResult.success("操作成功"); + } + + /** + * 返回成功数据 + * + * @return 成功消息 + */ + public static AjaxResult success(T data) { + return AjaxResult.success("操作成功", data); + } + + /** + * 返回成功消息 + * + * @param msg 返回内容 + * @return 成功消息 + */ + public static AjaxResult success(String msg) { + return AjaxResult.success(msg, null); + } + + /** + * 返回成功消息 + * + * @param msg 返回内容 + * @param data 数据对象 + * @return 成功消息 + */ + public static AjaxResult success(String msg, T data) { + return new AjaxResult(ResultTip.TIP_GENERAL_SUCCESS.getCode(), msg, data); + } + + /** + * 返回错误消息 + * + * @return + */ + public static AjaxResult error() { + return AjaxResult.error("操作失败"); + } + + /** + * 返回错误消息 + * + * @param msg 返回内容 + * @return 警告消息 + */ + public static AjaxResult error(String msg) { + return AjaxResult.error(msg, null); + } + + /** + * 返回异常消息 + * + * @param msg 异常详情 + * @return 如果系统配置可返回异常详情, ruoyi.enableExceptionDetailResp(默认为false) + * 则返回异常详情,否则返回系统默认异常提示 + */ + public static AjaxResult exception(String msg) { + RuoYiConfig ruoYiConfig = SpringUtils.getBean(RuoYiConfig.class); + return ruoYiConfig.isEnableExceptionDetailResp() ? error(msg) : error(DEFAULT_NOTICE); + } + + /** + * 返回错误消息 + * + * @param msg 返回内容 + * @param data 数据对象 + * @return 警告消息 + */ + public static AjaxResult error(String msg, Object data) { + return new AjaxResult(ResultTip.TIP_GENERAL_ERROR.getCode(), msg, data); + } + + /** + * 返回错误消息 + * + * @param code 状态码 + * @param msg 返回内容 + * @return 警告消息 + */ + public static AjaxResult error(int code, String msg) { + return new AjaxResult(code, msg, null); + } + + public static AjaxResult error(ResultTip resultTip) { + return new AjaxResult(resultTip.getCode(), resultTip.getTipMsg(), null); + } + + public static AjaxResult error(ResultTip resultTip, String msg) { + return new AjaxResult(resultTip.getCode(), msg, null); + } + + public void put(String key, Object value) { + this.map.put(key, value); + } + + public JSONObject build() { + JSONObject json = new JSONObject(); + json.put("code", getCode()); + json.put("msg", getMsg()); + json.put("data", getData()); + Optional.ofNullable(getMap()).ifPresent(m -> m.forEach(json::put)); + return json; + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/BaseEntity.java b/easyink-common/src/main/java/com/easyink/common/core/domain/BaseEntity.java new file mode 100644 index 0000000..88c9460 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/BaseEntity.java @@ -0,0 +1,191 @@ +package com.easyink.common.core.domain; + +import com.baomidou.mybatisplus.annotation.FieldStrategy; +import com.baomidou.mybatisplus.annotation.TableField; +import com.easyink.common.constant.Constants; +import com.easyink.common.core.domain.model.LoginUser; +import com.easyink.common.utils.DateUtils; +import com.easyink.common.utils.StringUtils; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.Date; + +/** + * Entity基类 + * + * @author admin + */ +@NoArgsConstructor +@AllArgsConstructor +public class BaseEntity extends RootEntity implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * 搜索值 + */ + @TableField(exist = false) + @ApiModelProperty(hidden = true) + private String searchValue; + + /** + * 创建者 + */ + @ApiModelProperty(hidden = true) + @TableField(whereStrategy = FieldStrategy.NOT_EMPTY) + private String createBy; + + /** + * 创建时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(hidden = true) + @TableField(whereStrategy = FieldStrategy.NOT_EMPTY) + private Date createTime = new Date(); + + /** + * 更新者 + */ + @ApiModelProperty(hidden = true) + @TableField(whereStrategy = FieldStrategy.NOT_EMPTY) + private String updateBy; + + /** + * 更新时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(hidden = true) + @TableField(whereStrategy = FieldStrategy.NOT_EMPTY) + private Date updateTime = new Date(); + + /** + * 备注 + */ + @TableField(exist = false) + @ApiModelProperty(hidden = true) + private String remark; + + /** + * 开始时间 + */ + @JsonIgnore + @TableField(exist = false) + private String beginTime; + + /** + * 结束时间 + */ + @JsonIgnore + @TableField(exist = false) + private String endTime; + + @TableField(exist = false) + @ApiModelProperty(value = "做游标分页时使用,查找userId > lastId的数据") + private String lastId; + + public String getLastId() { + return lastId; + } + + public void setLastId(String lastId) { + this.lastId = lastId; + } + + public String getSearchValue() { + return searchValue; + } + + public void setSearchValue(String searchValue) { + this.searchValue = searchValue; + } + + public String getCreateBy() { + return createBy; + } + + public void setCreateBy(String createBy) { + this.createBy = createBy; + } + + /** + * 根据登录用户设置创建人,如果是超级管理员则为admin,其他用户则为userId + * + * @param loginUser 登录用户 + */ + public void setCreateBy(LoginUser loginUser) { + if (loginUser.isSuperAdmin()) { + this.createBy = Constants.SUPER_ADMIN; + } else if (loginUser.getWeUser() != null && StringUtils.isNotBlank(loginUser.getWeUser().getUserId())) { + this.createBy = loginUser.getWeUser().getUserId(); + } + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + if (createTime == null) { + this.createTime = DateUtils.getNowDate(); + } else { + this.createTime = createTime; + } + + } + + public String getUpdateBy() { + return updateBy; + } + + public void setUpdateBy(String updateBy) { + this.updateBy = updateBy; + } + + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getBeginTime() { + return beginTime; + } + + /** + * 根据日期的格式 补全其开始时间传参,补全后格式:yyyy-MM-dd 00:00:00 + * + * @param beginTime 开始时间字符串 + */ + public void setBeginTime(String beginTime) { + this.beginTime = DateUtils.parseBeginDay(beginTime); + } + + public String getEndTime() { + return endTime; + } + + /** + * 根据日期的格式 补全其开始时间传参,补全后格式:yyyy-MM-dd 23:59:59 + * + * @param endTime 结束时间字符串 + */ + public void setEndTime(String endTime) { + this.endTime = DateUtils.parseEndDay(endTime); + } + + +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/ConversationArchiveQuery.java b/easyink-common/src/main/java/com/easyink/common/core/domain/ConversationArchiveQuery.java new file mode 100644 index 0000000..35d2f5d --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/ConversationArchiveQuery.java @@ -0,0 +1,79 @@ +package com.easyink.common.core.domain; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author admin + * @description 会话存档接口入参实体 + * @date 2020/12/29 14:23 + **/ +@ApiModel("会话存档接口入参实体") +@Data +public class ConversationArchiveQuery extends BaseEntity { + /** + * 发送人Id + */ + @ApiModelProperty("发送人Id") + private String fromId = ""; + + /** + * 成员名称 + */ + @ApiModelProperty("成员名称") + private String userName = ""; + + /** + * 接收人Id + */ + @ApiModelProperty("接收人Id") + private String receiveId = ""; + + /** + * 客户姓名 + */ + @ApiModelProperty("客户姓名") + private String customerName = ""; + + /** + * 群聊Id + */ + @ApiModelProperty("群聊Id") + private String roomId = ""; + + /** + * 消息类型(同企微api文档消息类型) + */ + @ApiModelProperty("消息类型(同企微api文档消息类型)") + private String msgType = ""; + + /** + * 关键词 + **/ + @ApiModelProperty("关键词") + private String keyWord = ""; + + /** + * 消息动作 + */ + @ApiModelProperty("消息动作") + private String action = ""; + + /** + * 公司id + */ + @ApiModelProperty("公司id") + private String corpId; + + /** + * 发送者 + */ + private String fromName; + + /** + * 接收者 + */ + private String receiveName; + +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/FileVo.java b/easyink-common/src/main/java/com/easyink/common/core/domain/FileVo.java new file mode 100644 index 0000000..f218044 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/FileVo.java @@ -0,0 +1,16 @@ +package com.easyink.common.core.domain; + +import lombok.Builder; +import lombok.Data; + +/** + * @description: + * @author admin + * @create: 2021-07-13 15:25 + **/ +@Data +@Builder +public class FileVo { + private String fileName; + private String url; +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/PageEntity.java b/easyink-common/src/main/java/com/easyink/common/core/domain/PageEntity.java new file mode 100644 index 0000000..2df5585 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/PageEntity.java @@ -0,0 +1,25 @@ +package com.easyink.common.core.domain; + +import java.io.Serializable; + +/** + * 分页entity + * + * @author tigger + * 2022/3/7 17:30 + **/ +public class PageEntity implements Serializable { + + private Integer pageSize = 10; + + private Integer pageNum = 1; + + + public Integer getPageSize() { + return pageSize; + } + + public Integer getPageNum() { + return pageNum; + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/RootEntity.java b/easyink-common/src/main/java/com/easyink/common/core/domain/RootEntity.java new file mode 100644 index 0000000..62d6e23 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/RootEntity.java @@ -0,0 +1,36 @@ +package com.easyink.common.core.domain; + +import com.baomidou.mybatisplus.annotation.TableField; +import io.swagger.annotations.ApiModelProperty; + +import java.io.Serializable; +import java.util.HashMap; +import java.util.Map; +/** + * 类名: RootEntity + * + * @author 佚名 + * @date 2021/8/27 16:50 + */ +public class RootEntity implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 请求参数 + */ + @TableField(exist = false) + @ApiModelProperty(hidden = true) + private Map params; + + public Map getParams() { + if (params == null) { + params = new HashMap<>(); + } + return params; + } + + public void setParams(Map params) { + this.params = params; + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/Tree.java b/easyink-common/src/main/java/com/easyink/common/core/domain/Tree.java new file mode 100644 index 0000000..f3c719e --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/Tree.java @@ -0,0 +1,43 @@ +package com.easyink.common.core.domain; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; + +@Data +public class Tree { + + @ApiModelProperty(name = "id", value = "id") + private Long id; + + /** + * 名称 + */ + @ApiModelProperty(name = "label", value = "名称") + private String name; + + /** + * 父的叶子信息 + */ + @ApiModelProperty(name = "children", value = "父的叶子信息") + private List> children; + + /** + * 父id + */ + @ApiModelProperty(name = "parentId", value = "父id") + private Long parentId; + + @ApiModelProperty(name = "hasParent", value = "是否有父节点") + private boolean hasParent = false; + + @ApiModelProperty(name = "false", value = "是否有叶子节点") + private boolean hasChildren = false; + + public void initChildren() { + this.children = new ArrayList<>(); + } + +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/TreeEntity.java b/easyink-common/src/main/java/com/easyink/common/core/domain/TreeEntity.java new file mode 100644 index 0000000..3fc95e6 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/TreeEntity.java @@ -0,0 +1,78 @@ +package com.easyink.common.core.domain; + +import java.util.ArrayList; +import java.util.List; + +/** + * Tree基类 + * + * @author admin + */ +public class TreeEntity extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** + * 父菜单名称 + */ + private String parentName; + + /** + * 父菜单ID + */ + private Long parentId; + + /** + * 显示顺序 + */ + private Integer orderNum; + + /** + * 祖级列表 + */ + private String ancestors; + + /** + * 子部门 + */ + private List children = new ArrayList<>(); + + public String getParentName() { + return parentName; + } + + public void setParentName(String parentName) { + this.parentName = parentName; + } + + public Long getParentId() { + return parentId; + } + + public void setParentId(Long parentId) { + this.parentId = parentId; + } + + public Integer getOrderNum() { + return orderNum; + } + + public void setOrderNum(Integer orderNum) { + this.orderNum = orderNum; + } + + public String getAncestors() { + return ancestors; + } + + public void setAncestors(String ancestors) { + this.ancestors = ancestors; + } + + public List getChildren() { + return children; + } + + public void setChildren(List children) { + this.children = children; + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/TreeSelect.java b/easyink-common/src/main/java/com/easyink/common/core/domain/TreeSelect.java new file mode 100644 index 0000000..53d82c9 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/TreeSelect.java @@ -0,0 +1,104 @@ +package com.easyink.common.core.domain; + +import com.easyink.common.core.domain.entity.SysDept; +import com.easyink.common.core.domain.entity.SysMenu; +import com.easyink.common.core.domain.wecom.WeDepartment; +import com.fasterxml.jackson.annotation.JsonInclude; + +import java.io.Serializable; +import java.util.List; +import java.util.stream.Collectors; + +/** + * Treeselect树结构实体类 + * + * @author admin + */ +public class TreeSelect implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * 节点ID + */ + private Long id; + + /** + * 节点名称 + */ + private String label; + /** + * 是否可选 + */ + private Boolean enable; + /** + * 是否可视 + */ + private String menuType; + + /** + * 子节点 + */ + @JsonInclude(JsonInclude.Include.NON_EMPTY) + private List children; + + + public TreeSelect(SysDept dept) { + this.id = dept.getDeptId(); + this.label = dept.getDeptName(); + this.children = dept.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList()); + } + + public TreeSelect(SysMenu menu) { + this.id = menu.getMenuId(); + this.label = menu.getMenuName(); + this.children = menu.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList()); + this.menuType = menu.getMenuType(); + } + + public TreeSelect(WeDepartment dept) { + this.id = dept.getId(); + this.label = dept.getName(); + this.enable = dept.getEnable(); + this.children = dept.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList()); + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getLabel() { + return label; + } + + public void setLabel(String label) { + this.label = label; + } + + public List getChildren() { + return children; + } + + public void setChildren(List children) { + this.children = children; + } + + public Boolean getEnable() { + return enable; + } + + public void setEnable(Boolean enable) { + this.enable = enable; + } + + public String getMenuType() { + return menuType; + } + + public void setMenuType(String menuType) { + this.menuType = menuType; + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/ChatBodyVO.java b/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/ChatBodyVO.java new file mode 100644 index 0000000..2f0fadb --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/ChatBodyVO.java @@ -0,0 +1,55 @@ +package com.easyink.common.core.domain.conversation; + +import com.easyink.common.core.domain.conversation.msgtype.*; +import lombok.Data; + +/** + * 基础消息VO + * + * @author tigger + * 2022/1/26 10:22 + **/ +@Data +public class ChatBodyVO { + + /** + * 组合消息类型实体 + */ + private TextVO text; + private ImageVO image; + private VideoVO video; + private VoiceVO voice; + private FileVO file; + private EmotionVO emotion; + private MixedVO mixed; + private RevokeVO revoke; + private CardVO card; + private MeetingVoiceCallVO meetingVoiceCall; + private ChatRecordVO chatRecord; + /** + * 内嵌消息的消息体(混合消息和会话记录) + * 可对应各种类型消息体数据,如text,image等等 + */ + private Object content; + + + /** + * 默认实现或则为实现的 + */ + private LinkVO link; + private AgreeVO agree; + private DisagreeVO disagree; + private CalendarVO calendar; + private CollectVO collect; + private LocationVO location; + private RedpacketVO redpacket; + private DocmsgVO docmsg; + private MarkdownVO markdown; + private MeetingVO meeting; + private NewsVO news; + private SphFeedVO sphfeed; + private TodoVO todo; + private VoipDocShareVO voip_doc_share; + private VoteVO vote; + private WeappVO weapp; +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/ChatInfoVO.java b/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/ChatInfoVO.java new file mode 100644 index 0000000..b54c247 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/ChatInfoVO.java @@ -0,0 +1,43 @@ +package com.easyink.common.core.domain.conversation; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * 聊天数据VO + * + * @author tigger + * 2022/1/25 16:43 + **/ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class ChatInfoVO extends ChatBodyVO { + private List tolist; + + private Long msgtime; + + private String msgid; + + private String action; + + private String from; + + private String msgtype; + + private String roomid; + + private Long seq; + + /***/ + private String voiceid; //音频存档消息 + private String voipid; //音频共享文档消息 + private Boolean isRevoke; + private Object fromInfo; + private Object toListInfo; + private Object roomInfo; + +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/FinanceResVO.java b/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/FinanceResVO.java new file mode 100644 index 0000000..d0d7052 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/FinanceResVO.java @@ -0,0 +1,40 @@ +package com.easyink.common.core.domain.conversation; + +import lombok.Data; +import lombok.Getter; + +import java.util.List; + +/** + * 返回结果VO + * + * @author tigger + * 2022/1/25 16:55 + **/ +@Data +public class FinanceResVO { + + private Integer errcode; + + private String errmsg; + + private List chatdata; + + + + + @Data + @Getter + public static class EncryptVO{ + private Integer publickey_ver; + + private String encrypt_chat_msg; + + private String msgid; + + private String encrypt_random_key; + + private Integer seq; + + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/AgreeVO.java b/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/AgreeVO.java new file mode 100644 index 0000000..8545cdc --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/AgreeVO.java @@ -0,0 +1,18 @@ +package com.easyink.common.core.domain.conversation.msgtype; + +import lombok.Data; + +/** + * 同意会话聊天VO + * + * @author tigger + * 2022/2/8 15:16 + **/ +@Data +public class AgreeVO { + + /**同意协议者的userid,外部企业默认为external_userid*/ + private String userid; + /**同意协议的时间,utc时间,ms单位。*/ + private Long agree_time; +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/AttachmentBaseVO.java b/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/AttachmentBaseVO.java new file mode 100644 index 0000000..20b14a5 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/AttachmentBaseVO.java @@ -0,0 +1,15 @@ +package com.easyink.common.core.domain.conversation.msgtype; + +import lombok.Data; + +/** + * 消息基础VO + * + * @author tigger + * 2022/1/25 18:17 + **/ +@Data +public class AttachmentBaseVO { + + private String attachment; +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/CalendarVO.java b/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/CalendarVO.java new file mode 100644 index 0000000..bbd408b --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/CalendarVO.java @@ -0,0 +1,30 @@ +package com.easyink.common.core.domain.conversation.msgtype; + +import lombok.Data; + +import java.util.List; + +/** + * 日程VO + * + * @author tigger + * 2022/2/8 14:50 + **/ +@Data +public class CalendarVO { + /** 日程主题*/ + private String title; + /** 日程组织者*/ + private String creatorname; + /**日程参与人*/ + private List attendeename; + /**日程开始时间。Utc时间,单位秒*/ + private Long starttime; + /**日程结束时间。Utc时间,单位秒*/ + private Long endtime; + /** 日程地点*/ + private String place; + /**日程备注*/ + private String remarks; + +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/CardVO.java b/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/CardVO.java new file mode 100644 index 0000000..b202191 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/CardVO.java @@ -0,0 +1,21 @@ +package com.easyink.common.core.domain.conversation.msgtype; + +import lombok.Data; + +/** + * 卡片VO + * + * @author tigger + * 2022/1/26 15:37 + **/ +@Data +public class CardVO extends AttachmentBaseVO { + private String corpname; + private String userid; + + /** + * 自定义数据 + */ + private String userName; + private String imageUrl; +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/ChatRecordVO.java b/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/ChatRecordVO.java new file mode 100644 index 0000000..699fdbb --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/ChatRecordVO.java @@ -0,0 +1,26 @@ +package com.easyink.common.core.domain.conversation.msgtype; + +import com.easyink.common.core.domain.conversation.ChatBodyVO; +import lombok.Data; + +import java.util.List; + +/** + * 聊天记录VO + * + * @author tigger + * 2022/1/26 16:09 + **/ +@Data +public class ChatRecordVO extends AttachmentBaseVO { + private String title; + private List item; + + @Data + public static class ChatRecordItem extends ChatBodyVO { + private String type; + private Integer msgtime; + private Boolean from_chatroom; + } + +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/CollectVO.java b/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/CollectVO.java new file mode 100644 index 0000000..6d0f4be --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/CollectVO.java @@ -0,0 +1,37 @@ +package com.easyink.common.core.domain.conversation.msgtype; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 填表VO + * + * @author tigger + * 2022/2/8 14:38 + **/ +@Data +public class CollectVO extends AttachmentBaseVO { + @ApiModelProperty("填表消息所在的群名称") + private String roomName; + + @ApiModelProperty("创建者在群中的名字") + private String creator; + + @ApiModelProperty("创建的时间") + private Long createTime; + + @ApiModelProperty("表名") + private String title; + + @ApiModelProperty("表内容") + private String details; + + @ApiModelProperty("表项id") + private Long id; + + @ApiModelProperty("表项名称") + private String ques; + + @ApiModelProperty("表项类型,有Text(文本),Number(数字),Date(日期),Time(时间)") + private String type; +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/DisagreeVO.java b/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/DisagreeVO.java new file mode 100644 index 0000000..ed57708 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/DisagreeVO.java @@ -0,0 +1,17 @@ +package com.easyink.common.core.domain.conversation.msgtype; + +import lombok.Data; + +/** + * 不同意会话聊天VO + * + * @author tigger + * 2022/2/8 15:14 + **/ +@Data +public class DisagreeVO { + /**不同意协议者的userid,外部企业默认为external_userid*/ + private String userid; + /**不同意协议的时间,utc时间,ms单位。*/ + private Long disagree_time; +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/DocmsgVO.java b/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/DocmsgVO.java new file mode 100644 index 0000000..380f760 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/DocmsgVO.java @@ -0,0 +1,21 @@ +package com.easyink.common.core.domain.conversation.msgtype; + +import lombok.Data; + +/** + * 在线文档VO + * + * @author tigger + * 2022/2/8 14:40 + **/ +@Data +public class DocmsgVO extends AttachmentBaseVO{ + /**在线文档名称*/ + private String title; + /**在线文档链接*/ + private String link_url; + /**在线文档创建者。本企业成员创建为userid;外部企业成员创建为external_userid*/ + private String doc_creator; + + +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/EmotionVO.java b/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/EmotionVO.java new file mode 100644 index 0000000..318e503 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/EmotionVO.java @@ -0,0 +1,21 @@ +package com.easyink.common.core.domain.conversation.msgtype; + +import lombok.Data; + +/** + * 自定义表情VO + * + * @author tigger + * 2022/1/25 18:48 + **/ +@Data +public class EmotionVO extends AttachmentBaseVO{ + + private String md5sum; + private String sdkfileid; + private Integer width; + private Integer imagesize; + private Integer type; + private Integer height; + +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/FileVO.java b/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/FileVO.java new file mode 100644 index 0000000..a481496 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/FileVO.java @@ -0,0 +1,27 @@ +package com.easyink.common.core.domain.conversation.msgtype; + +import lombok.Data; +import org.apache.ibatis.type.Alias; + +/** + * 文件消息VO + * + * @author tigger + * 2022/1/25 18:01 + **/ +@Data +@Alias("filev") +public class FileVO extends AttachmentBaseVO { + + private String filename; + + private String md5sum; + + private String sdkfileid; + + private Integer filesize; + + private String fileext; + + +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/ImageVO.java b/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/ImageVO.java new file mode 100644 index 0000000..168d5a9 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/ImageVO.java @@ -0,0 +1,19 @@ +package com.easyink.common.core.domain.conversation.msgtype; + +import lombok.Data; + +/** + * 图片VO + * + * @author tigger + * 2022/1/25 17:50 + **/ +@Data +public class ImageVO extends AttachmentBaseVO{ + private String md5sum; + + private String sdkfileid; + + private String filesize; + +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/LinkVO.java b/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/LinkVO.java new file mode 100644 index 0000000..da3fc40 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/LinkVO.java @@ -0,0 +1,19 @@ +package com.easyink.common.core.domain.conversation.msgtype; + +import lombok.Data; + +/** + * 链接VO + * + * @author tigger + * 2022/1/26 15:52 + **/ +@Data +public class LinkVO extends AttachmentBaseVO{ + + private String image_url; + private String description; + private String link_url; + private String title; + +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/LocationVO.java b/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/LocationVO.java new file mode 100644 index 0000000..1ece855 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/LocationVO.java @@ -0,0 +1,21 @@ +package com.easyink.common.core.domain.conversation.msgtype; + +import lombok.Data; + +import java.math.BigDecimal; + +/** + * 地理位置VO + * + * @author tigger + * 2022/1/26 15:50 + **/ +@Data +public class LocationVO extends AttachmentBaseVO{ + private String address; + private BigDecimal latitude; + private BigDecimal longitude; + private Integer zoom; + private String title; + +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/MarkdownVO.java b/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/MarkdownVO.java new file mode 100644 index 0000000..cd0c38f --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/MarkdownVO.java @@ -0,0 +1,21 @@ +package com.easyink.common.core.domain.conversation.msgtype; + +import lombok.Data; + +/** + * MarkDown格式VO + * + * @author tigger + * 2022/2/8 14:48 + **/ +@Data +public class MarkdownVO extends AttachmentBaseVO{ + /**markdown消息内容,目前为机器人发出的消息*/ + private Info info; + + @Data + public static class Info{ + private String content; + } + +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/MeetingVO.java b/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/MeetingVO.java new file mode 100644 index 0000000..7c5a2b3 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/MeetingVO.java @@ -0,0 +1,38 @@ +package com.easyink.common.core.domain.conversation.msgtype; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 会议邀请VO + * + * @author tigger + * 2022/2/8 14:39 + **/ +@Data +public class MeetingVO extends AttachmentBaseVO{ + @ApiModelProperty("会议主题") + private String topic; + + @ApiModelProperty("红包总个数") + private Long startTime; + + @ApiModelProperty("会议结束时间") + private Long endTime; + + @ApiModelProperty("会议地址") + private String address; + + @ApiModelProperty("会议备注") + private String remarks; + + @ApiModelProperty("会议消息类型。101发起会议邀请消息、102处理会议邀请消息") + private String meetingType; + + @ApiModelProperty("会议id。方便将发起、处理消息进行对照") + private Long meetingId; + + @ApiModelProperty("会议邀请处理状态。1 参加会议、2 拒绝会议、3 待定、4 未被邀请、5 会议已取消、6 会议已过期、7 不在房间内。" + + "只有meetingtype为102的时候此字段才有内容。") + private Integer status; +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/MeetingVoiceCallVO.java b/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/MeetingVoiceCallVO.java new file mode 100644 index 0000000..2e3a440 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/MeetingVoiceCallVO.java @@ -0,0 +1,46 @@ +package com.easyink.common.core.domain.conversation.msgtype; + +import lombok.Data; + +import java.util.List; + +/** + * meetingVoiceCallVO + * + * @author tigger + * 2022/1/26 17:31 + **/ +@Data +public class MeetingVoiceCallVO extends AttachmentBaseVO{ + + private Integer endtime; + private String sdkfileid; + private List demofiledata; + private List sharescreendata; + + /***/ + private String filename; + + @Data + public static class DemofiledataVO extends AttachmentBaseVO{ + private String filename; + private String demooperator; + private Integer starttime; + private Integer endtime; + } + + + @Data + public static class Sharescreendata{ + + + private String share; + private Integer starttime; + private Integer endtime; + + } + + + + +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/MixedVO.java b/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/MixedVO.java new file mode 100644 index 0000000..81c762b --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/MixedVO.java @@ -0,0 +1,25 @@ +package com.easyink.common.core.domain.conversation.msgtype; + +import com.easyink.common.core.domain.conversation.ChatBodyVO; +import lombok.Data; + +import java.util.List; + +/** + * 混合VO + * + * @author tigger + * 2022/1/25 18:56 + **/ +@Data +public class MixedVO extends AttachmentBaseVO{ + + private List item; + + + @Data + public static class ItemContext extends ChatBodyVO { + private String type; + + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/MsgTypeEnum.java b/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/MsgTypeEnum.java new file mode 100644 index 0000000..7f97697 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/MsgTypeEnum.java @@ -0,0 +1,60 @@ +package com.easyink.common.core.domain.conversation.msgtype; + +/** + * 消息类型枚举 + * + * @author tigger + * 2022/1/28 14:00 + **/ +public enum MsgTypeEnum { + + TEXT("text"), + IMAGE("image"), + REVOKE("revoke"), + VOICE("voice"), + VIDEO("video"), + EMOTION("emotion"), + FILE("file"), + CARD("card"), + MIXED("mixed"), + MEETING_VOICE_CALL("meeting_voice_call"), + VOIP_DOC_SHARE("voip_doc_share"), + CHATRECORD("chatrecord"), + CHATRECORD_TEXT("ChatRecordText"), + CHATRECORD_FILE("ChatRecordFile"), + CHATRECORD_IMAGE("ChatRecordImage"), + CHATRECORD_VIDEO("ChatRecordVideo"), + CHATRECORD_LINK("ChatRecordLink"), + CHATRECORD_LOCATION("ChatRecordLocation"), + CHATRECORD_MIXED("ChatRecordMixed"), + + /** + * 以下消息类型未实现 + */ + AGREE("agree"), + DISAGREE("disagree"), + LINK("link"), + RADAR("radar"), + WEAPP("weapp"), + VOTE("vote"), + COLLECT("collect"), + REDPACKET("redpacket"), + MEETING("meeting"), + DOCMSG("docmsg"), + MARKDOWN("markdown"), + NEWS("news"), + CALENDAR("calendar"), + EXTERNAL_REDPACKET("external_redpacket"), + SPHFEED("sphfeed"), + ; + + private String type; + + MsgTypeEnum(String type) { + this.type = type; + } + + public String getType() { + return type; + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/NewsVO.java b/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/NewsVO.java new file mode 100644 index 0000000..d30cf4c --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/NewsVO.java @@ -0,0 +1,37 @@ +package com.easyink.common.core.domain.conversation.msgtype; + +import lombok.Data; + +import java.util.List; + +/** + * 图文VO + * + * @author tigger + * 2022/2/8 14:42 + **/ +@Data +public class NewsVO extends AttachmentBaseVO { + /**图文消息的内容*/ + private Info info; + + + @Data + public static class Info{ + /**图文消息数组,每个item结构包含title、description、url、picurl等结构*/ + private List item; + } + + + @Data + public static class NewsItem { + /**图文消息标题*/ + private String title; + /**图文消息描述*/ + private String description; + /**图文消息点击跳转地址*/ + private String url; + /**图文消息配图的url*/ + private String picurl; + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/RedpacketVO.java b/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/RedpacketVO.java new file mode 100644 index 0000000..6b8d17c --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/RedpacketVO.java @@ -0,0 +1,21 @@ +package com.easyink.common.core.domain.conversation.msgtype; + +import lombok.Data; + +/** + * 红包VO + * + * @author tigger + * 2022/1/26 15:57 + **/ +@Data +public class RedpacketVO extends AttachmentBaseVO{ + /** 红包消息类型。1 普通红包、2 拼手气群红包、3 激励群红包。Uint32类型*/ + private Integer type; + /**红包祝福语。String类型*/ + private String wish; + /**红包总个数。Uint32类型*/ + private Integer totalcnt; + /**红包总金额。Uint32类型,单位为分。*/ + private Integer totalamount; +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/RevokeVO.java b/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/RevokeVO.java new file mode 100644 index 0000000..0574702 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/RevokeVO.java @@ -0,0 +1,18 @@ +package com.easyink.common.core.domain.conversation.msgtype; + +import com.easyink.common.core.domain.conversation.ChatInfoVO; +import lombok.Data; + +/** + * 撤回VO + * + * @author tigger + * 2022/1/26 11:33 + **/ +@Data +public class RevokeVO extends AttachmentBaseVO{ + private String pre_msgid; + + /**保存上一条消息详情*/ + private ChatInfoVO content; +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/SphFeedVO.java b/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/SphFeedVO.java new file mode 100644 index 0000000..7c68c15 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/SphFeedVO.java @@ -0,0 +1,23 @@ +package com.easyink.common.core.domain.conversation.msgtype; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 视频号VO + * + * @author tigger + * 2022/2/8 14:55 + **/ +@Data +public class SphFeedVO { + + @ApiModelProperty("视频号消息类型。2 图片、4 视频、9 直播。") + private Integer feedType; + + @ApiModelProperty("视频号账号名称") + private String sphName; + + @ApiModelProperty("视频号消息描述") + private String feedDesc; +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/TextVO.java b/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/TextVO.java new file mode 100644 index 0000000..4078e2f --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/TextVO.java @@ -0,0 +1,14 @@ +package com.easyink.common.core.domain.conversation.msgtype; + +import lombok.Data; + +/** + * 文本VO + * + * @author tigger + * 2022/1/25 17:40 + **/ +@Data +public class TextVO extends AttachmentBaseVO{ + private String content; +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/TodoVO.java b/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/TodoVO.java new file mode 100644 index 0000000..f31a998 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/TodoVO.java @@ -0,0 +1,20 @@ +package com.easyink.common.core.domain.conversation.msgtype; + +import lombok.Data; + + +/** + * 代办VO + * + * @author tigger + * 2022/2/8 14:33 + **/ +@Data +public class TodoVO extends AttachmentBaseVO{ + + /**待办的来源文本*/ + private String title; + /**待办的具体内容*/ + private Integer content; + +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/VideoVO.java b/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/VideoVO.java new file mode 100644 index 0000000..2d30f34 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/VideoVO.java @@ -0,0 +1,22 @@ +package com.easyink.common.core.domain.conversation.msgtype; + +import lombok.Data; + +/** + * 视频VO + * + * @author tigger + * 2022/1/25 18:25 + **/ +@Data +public class VideoVO extends AttachmentBaseVO { + private Integer play_length; + + private String md5sum; + + private String sdkfileid; + + private Integer filesize; + + +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/VoiceVO.java b/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/VoiceVO.java new file mode 100644 index 0000000..07b30a3 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/VoiceVO.java @@ -0,0 +1,21 @@ +package com.easyink.common.core.domain.conversation.msgtype; + +import lombok.Data; + +/** + * 音频VO + * + * @author tigger + * 2022/1/25 18:23 + **/ +@Data +public class VoiceVO extends AttachmentBaseVO{ + + private Integer play_length; + + private String md5sum; + + private String sdkfileid; + + private Integer voice_size; +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/VoipDocShareVO.java b/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/VoipDocShareVO.java new file mode 100644 index 0000000..8fcc2d7 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/VoipDocShareVO.java @@ -0,0 +1,18 @@ +package com.easyink.common.core.domain.conversation.msgtype; + +import lombok.Data; + +/** + * 音频共享文档VO + * + * @author tigger + * 2022/2/7 11:25 + **/ +@Data +public class VoipDocShareVO extends AttachmentBaseVO{ + + private String filename; + private String md5sum; + private Integer filesize; + private String sdkfileid; +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/VoteVO.java b/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/VoteVO.java new file mode 100644 index 0000000..a9ad3da --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/VoteVO.java @@ -0,0 +1,23 @@ +package com.easyink.common.core.domain.conversation.msgtype; + +import lombok.Data; + +import java.util.List; + +/** + * 投票VO + * + * @author tigger + * 2022/2/8 14:35 + **/ +@Data +public class VoteVO extends AttachmentBaseVO{ + /**投票主题*/ + private String votetitle; + /**投票选项*/ + private List voteitem; + /**投票类型*/ + private Integer votetype; + /**投票id*/ + private String voteid; +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/WeappVO.java b/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/WeappVO.java new file mode 100644 index 0000000..5d00c8e --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/conversation/msgtype/WeappVO.java @@ -0,0 +1,21 @@ +package com.easyink.common.core.domain.conversation.msgtype; + +import lombok.Data; + +/** + * 小程序VO + * + * @author tigger + * 2022/2/8 14:30 + **/ +@Data +public class WeappVO extends AttachmentBaseVO { + /**消息标题*/ + private String title; + /**消息描述*/ + private String description; + /**用户名称*/ + private String username; + /**小程序名称*/ + private String displayname; +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/elastic/ElasticSearchDataVo.java b/easyink-common/src/main/java/com/easyink/common/core/domain/elastic/ElasticSearchDataVo.java new file mode 100644 index 0000000..2ac7999 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/elastic/ElasticSearchDataVo.java @@ -0,0 +1,25 @@ +package com.easyink.common.core.domain.elastic; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author admin + * @description http交互Vo对象 + * @date 2020/12/9 14:14 + **/ + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class ElasticSearchDataVo { + /** + * 索引名 + */ + private String idxName; + /** + * 数据存储对象 + */ + private ElasticSearchEntity elasticSearchEntity; +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/elastic/ElasticSearchEntity.java b/easyink-common/src/main/java/com/easyink/common/core/domain/elastic/ElasticSearchEntity.java new file mode 100644 index 0000000..26e78e5 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/elastic/ElasticSearchEntity.java @@ -0,0 +1,27 @@ +package com.easyink.common.core.domain.elastic; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Map; + +/** + * @author admin + * @description + * @date 2020/12/9 14:11 + **/ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class ElasticSearchEntity { + /** + * 主键标识,用户ES持久化 + */ + private String id; + + /** + * JSON对象,实际存储数据 + */ + private Map data; +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/elastic/ElasticSearchQueryVo.java b/easyink-common/src/main/java/com/easyink/common/core/domain/elastic/ElasticSearchQueryVo.java new file mode 100644 index 0000000..ce243ca --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/elastic/ElasticSearchQueryVo.java @@ -0,0 +1,30 @@ +package com.easyink.common.core.domain.elastic; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Map; + +/** + * @author admin + * @description + * @date 2020/12/9 14:18 + **/ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class ElasticSearchQueryVo { + /** + * 索引名 + */ + private String idxName; + /** + * 需要反射的实体类型,用于对查询结果的封装 + */ + private String className; + /** + * 具体条件 + */ + private Map> query; +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/entity/SysDept.java b/easyink-common/src/main/java/com/easyink/common/core/domain/entity/SysDept.java new file mode 100644 index 0000000..d082c9a --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/entity/SysDept.java @@ -0,0 +1,70 @@ +package com.easyink.common.core.domain.entity; + +import com.easyink.common.core.domain.BaseEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +import javax.validation.constraints.Email; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; +import java.util.ArrayList; +import java.util.List; + +/** + * 部门表 sys_dept + * + * @author admin + */ +@Data +@ToString +@EqualsAndHashCode(callSuper = true) +@ApiModel("部门实体") +public class SysDept extends BaseEntity { + private static final long serialVersionUID = 1L; + + @ApiModelProperty("部门ID") + private Long deptId; + + @ApiModelProperty("父部门ID") + private Long parentId; + + @ApiModelProperty("祖级列表") + private String ancestors; + + @ApiModelProperty("部门名称") + @NotBlank(message = "部门名称不能为空") + @Size(min = 0, max = 30, message = "部门名称长度不能超过30个字符") + private String deptName; + + @ApiModelProperty("显示顺序") + @NotBlank(message = "显示顺序不能为空") + private String orderNum; + + @ApiModelProperty("负责人") + private String leader; + + @ApiModelProperty("联系电话") + @Size(max = 11, message = "联系电话长度不能超过11个字符") + private String phone; + + @ApiModelProperty("邮箱") + @Email(message = "邮箱格式不正确") + @Size(max = 50, message = "邮箱长度不能超过50个字符") + private String email; + + @ApiModelProperty("部门状态:0正常,1停用") + private String status; + + @ApiModelProperty("删除标志(0代表存在 2代表删除)") + private String delFlag; + + @ApiModelProperty("父部门名称") + private String parentName; + + @ApiModelProperty("子部门集合") + private List children = new ArrayList<>(); + +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/entity/SysDictData.java b/easyink-common/src/main/java/com/easyink/common/core/domain/entity/SysDictData.java new file mode 100644 index 0000000..6c5af31 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/entity/SysDictData.java @@ -0,0 +1,69 @@ +package com.easyink.common.core.domain.entity; + +import com.easyink.common.annotation.Excel; +import com.easyink.common.annotation.Excel.ColumnType; +import com.easyink.common.core.domain.BaseEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; + +/** + * 字典数据表 sys_dict_data + * + * @author admin + */ +@Data +@ToString +@EqualsAndHashCode(callSuper = true) +@ApiModel("字典数据表") +public class SysDictData extends BaseEntity { + private static final long serialVersionUID = 1L; + + @ApiModelProperty("字典编码") + @Excel(name = "字典编码", cellType = ColumnType.NUMERIC) + private Long dictCode; + + @ApiModelProperty("字典排序") + @Excel(name = "字典排序", cellType = ColumnType.NUMERIC) + private Long dictSort; + + @ApiModelProperty("字典标签") + @Excel(name = "字典标签") + @NotBlank(message = "字典标签不能为空") + @Size(max = 100, message = "字典标签长度不能超过100个字符") + private String dictLabel; + + + @ApiModelProperty("字典键值") + @Excel(name = "字典键值") + @NotBlank(message = "字典键值不能为空") + @Size(max = 100, message = "字典键值长度不能超过100个字符") + private String dictValue; + + @ApiModelProperty("字典类型") + @Excel(name = "字典类型") + @NotBlank(message = "字典类型不能为空") + @Size(max = 100, message = "字典类型长度不能超过100个字符") + private String dictType; + + @ApiModelProperty("样式属性(其他样式扩展)") + @Size(max = 100, message = "样式属性长度不能超过100个字符") + private String cssClass; + + @ApiModelProperty("表格字典样式") + private String listClass; + + @ApiModelProperty("是否默认(Y是 N否)") + @Excel(name = "是否默认", readConverterExp = "Y=是,N=否") + private String isDefault; + + @ApiModelProperty("状态(0正常 1停用)") + @Excel(name = "状态", readConverterExp = "0=正常,1=停用") + private String status; + +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/entity/SysDictType.java b/easyink-common/src/main/java/com/easyink/common/core/domain/entity/SysDictType.java new file mode 100644 index 0000000..5df2106 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/entity/SysDictType.java @@ -0,0 +1,91 @@ +package com.easyink.common.core.domain.entity; + +import com.easyink.common.annotation.Excel; +import com.easyink.common.annotation.Excel.ColumnType; +import com.easyink.common.core.domain.BaseEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; + +/** + * 字典类型表 sys_dict_type + * + * @author admin + */ +@ApiModel("字典类型表") +public class SysDictType extends BaseEntity { + private static final long serialVersionUID = 1L; + + @ApiModelProperty("字典主键") + @Excel(name = "字典主键", cellType = ColumnType.NUMERIC) + private Long dictId; + + @ApiModelProperty("字典名称") + @Excel(name = "字典名称") + private String dictName; + + @ApiModelProperty("字典类型") + @Excel(name = "字典类型") + private String dictType; + + @ApiModelProperty("状态(0正常 1停用)") + @Excel(name = "状态", readConverterExp = "0=正常,1=停用") + private String status; + + public Long getDictId() { + return dictId; + } + + public void setDictId(Long dictId) { + this.dictId = dictId; + } + + @NotBlank(message = "字典名称不能为空") + @Size(max = 100, message = "字典类型名称长度不能超过100个字符") + @ApiModelProperty("字典名称") + public String getDictName() { + return dictName; + } + + public void setDictName(String dictName) { + this.dictName = dictName; + } + + @NotBlank(message = "字典类型不能为空") + @Size(max = 100, message = "字典类型类型长度不能超过100个字符") + @ApiModelProperty("字典类型") + public String getDictType() { + return dictType; + } + + public void setDictType(String dictType) { + this.dictType = dictType; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("dictId", getDictId()) + .append("dictName", getDictName()) + .append("dictType", getDictType()) + .append("status", getStatus()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/entity/SysMenu.java b/easyink-common/src/main/java/com/easyink/common/core/domain/entity/SysMenu.java new file mode 100644 index 0000000..567e3b0 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/entity/SysMenu.java @@ -0,0 +1,209 @@ +package com.easyink.common.core.domain.entity; + +import com.easyink.common.core.domain.BaseEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; +import java.util.ArrayList; +import java.util.List; + +/** + * 菜单权限表 sys_menu + * + * @author admin + */ +@ApiModel("菜单权限表") +public class SysMenu extends BaseEntity { + private static final long serialVersionUID = 1L; + + @ApiModelProperty("菜单ID") + private Long menuId; + + @ApiModelProperty("菜单名称") + private String menuName; + + @ApiModelProperty("父菜单名称") + private String parentName; + + @ApiModelProperty("父菜单ID") + private Long parentId; + + @ApiModelProperty("显示顺序") + private String orderNum; + + + @ApiModelProperty("路由地址") + private String path; + + @ApiModelProperty("组件路径") + private String component; + + @ApiModelProperty("是否为外链(0是 1否)") + private String isFrame; + + @ApiModelProperty("类型(M目录 C菜单 F按钮)") + private String menuType; + + @ApiModelProperty("显示状态(0显示 1隐藏)") + private String visible; + + @ApiModelProperty("菜单状态(0显示 1隐藏)") + private String status; + + @ApiModelProperty("权限字符串") + private String perms; + + @ApiModelProperty("菜单图标") + private String icon; + + @ApiModelProperty("子菜单") + private List children = new ArrayList<>(); + + public Long getMenuId() { + return menuId; + } + + public void setMenuId(Long menuId) { + this.menuId = menuId; + } + + @NotBlank(message = "菜单名称不能为空") + @Size(max = 50, message = "菜单名称长度不能超过50个字符") + @ApiModelProperty("菜单名称") + public String getMenuName() { + return menuName; + } + + public void setMenuName(String menuName) { + this.menuName = menuName; + } + + public String getParentName() { + return parentName; + } + + public void setParentName(String parentName) { + this.parentName = parentName; + } + + public Long getParentId() { + return parentId; + } + + public void setParentId(Long parentId) { + this.parentId = parentId; + } + + @NotBlank(message = "显示顺序不能为空") + public String getOrderNum() { + return orderNum; + } + + public void setOrderNum(String orderNum) { + this.orderNum = orderNum; + } + + @Size(max = 200, message = "路由地址不能超过200个字符") + @ApiModelProperty("路由地址") + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } + + @Size(max = 200, message = "组件路径不能超过255个字符") + public String getComponent() { + return component; + } + + public void setComponent(String component) { + this.component = component; + } + + public String getIsFrame() { + return isFrame; + } + + public void setIsFrame(String isFrame) { + this.isFrame = isFrame; + } + + @NotBlank(message = "菜单类型不能为空") + public String getMenuType() { + return menuType; + } + + public void setMenuType(String menuType) { + this.menuType = menuType; + } + + public String getVisible() { + return visible; + } + + public void setVisible(String visible) { + this.visible = visible; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + @Size(min = 0, max = 100, message = "权限标识长度不能超过100个字符") + public String getPerms() { + return perms; + } + + public void setPerms(String perms) { + this.perms = perms; + } + + public String getIcon() { + return icon; + } + + public void setIcon(String icon) { + this.icon = icon; + } + + public List getChildren() { + return children; + } + + public void setChildren(List children) { + this.children = children; + } + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("menuId", getMenuId()) + .append("menuName", getMenuName()) + .append("parentId", getParentId()) + .append("orderNum", getOrderNum()) + .append("path", getPath()) + .append("component", getComponent()) + .append("isFrame", getIsFrame()) + .append("menuType", getMenuType()) + .append("visible", getVisible()) + .append("status ", getStatus()) + .append("perms", getPerms()) + .append("icon", getIcon()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/entity/SysRole.java b/easyink-common/src/main/java/com/easyink/common/core/domain/entity/SysRole.java new file mode 100644 index 0000000..d6696d2 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/entity/SysRole.java @@ -0,0 +1,281 @@ +package com.easyink.common.core.domain.entity; + +import com.easyink.common.annotation.Excel; +import com.easyink.common.annotation.Excel.ColumnType; +import com.easyink.common.constant.Constants; +import com.easyink.common.core.domain.BaseEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; +import java.util.Date; + +/** + * 角色表 sys_role + * + * @author admin + */ +@Builder +@AllArgsConstructor +@ApiModel("角色表") +public class SysRole extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** + * 角色ID + */ + @ApiModelProperty("角色ID") + @Excel(name = "角色序号", cellType = ColumnType.NUMERIC) + private Long roleId; + + /** + * 角色名称 + */ + @ApiModelProperty("角色名称") + @Size(max = 16, message = "角色名称长度已超出限制") + @Excel(name = "角色名称") + @NotBlank(message = "角色名不能为空") + private String roleName; + + /** + * 角色权限 + */ + @ApiModelProperty("角色权限") + @Excel(name = "角色权限") + private String roleKey; + + /** + * 角色排序 + */ + @ApiModelProperty("角色排序") + @Excel(name = "角色排序") + private String roleSort; + + /** + * 数据范围(1:所有数据权限;2:自定义数据权限;3:本部门数据权限;4:本部门及以下数据权限) + */ + @ApiModelProperty("数据范围(1:所有数据权限;2:自定义数据权限;3:本部门数据权限;4:本部门及以下数据权限)") + @Excel(name = "数据范围", readConverterExp = "1=所有数据权限,2=自定义数据权限,3=本部门数据权限,4=本部门及以下数据权限") + private String dataScope; + + /** + * 角色状态(0正常 1停用) + */ + @ApiModelProperty("角色状态(0正常 1停用)") + @Excel(name = "角色状态", readConverterExp = "0=正常,1=停用") + private String status; + + @ApiModelProperty("备注") + @Size(max = 64, message = "角色备注长度已超出限制") + private String remark; + + /** + * 删除标志(0代表存在 2代表删除) + */ + @ApiModelProperty("删除标志(0代表存在 2代表删除)") + private String delFlag; + + /** + * 用户是否存在此角色标识 默认不存在 + */ + @ApiModelProperty("用户是否存在此角色标识 默认不存在") + private boolean flag = false; + + /** + * 菜单组 + */ + @ApiModelProperty("菜单组") + private Long[] menuIds; + + /** + * 部门组(数据权限) + */ + @ApiModelProperty("部门组(数据权限)") + private Long[] deptIds; + /** + * 公司ID + */ + @ApiModelProperty("公司ID") + private String corpId; + + /** + * 角色类型(1:系统默认超级管理员角色, 2:系统默认角色,3:自定义角色) + */ + @ApiModelProperty("角色类型(1:系统默认超级管理员角色, 2:系统默认角色,3:自定义角色)") + private Integer roleType; + + public SysRole() { + + } + + /** + * 构造初始化角色实体 (用户初始化) + * + * @param corpId 公司ID + * @param roleName 角色名 + * @param roleKey 角色KEY + * @param createBy 创建者 + * @param dataScope 数据权限 + * @param roleType 角色类型 + */ + public SysRole(String corpId, String roleName, String roleKey, String createBy, String dataScope, Integer roleType) { + this.corpId = corpId; + this.roleName = roleName; + this.remark = roleName; + this.roleKey = roleKey; + this.setCreateBy(createBy); + this.setUpdateBy(createBy); + //默认排序都为1 + this.roleSort = Constants.DEFAULT_SORT; + this.dataScope = dataScope; + this.status = Constants.NORMAL_CODE; + this.delFlag = Constants.NORMAL_CODE; + Date now = new Date(); + this.setCreateTime(now); + this.setUpdateTime(now); + this.roleType = roleType; + } + + public SysRole(Long roleId) { + this.roleId = roleId; + } + + public Long getRoleId() { + return roleId; + } + + public void setRoleId(Long roleId) { + this.roleId = roleId; + } + + public boolean isAdmin() { + return isAdmin(this.roleId); + } + + public static boolean isAdmin(Long roleId) { + return roleId != null && 1L == roleId; + } + + public String getRoleName() { + return roleName; + } + + public void setRoleName(String roleName) { + this.roleName = roleName; + } + + public String getRoleKey() { + return roleKey; + } + + public void setRoleKey(String roleKey) { + this.roleKey = roleKey; + } + + public String getRoleSort() { + return roleSort; + } + + public void setRoleSort(String roleSort) { + this.roleSort = roleSort; + } + + public String getDataScope() { + return dataScope; + } + + public void setDataScope(String dataScope) { + this.dataScope = dataScope; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getDelFlag() { + return delFlag; + } + + public void setDelFlag(String delFlag) { + this.delFlag = delFlag; + } + + public boolean isFlag() { + return flag; + } + + public void setFlag(boolean flag) { + this.flag = flag; + } + + public Long[] getMenuIds() { + return menuIds; + } + + public void setMenuIds(Long[] menuIds) { + this.menuIds = menuIds; + } + + public Long[] getDeptIds() { + return deptIds; + } + + public void setDeptIds(Long[] deptIds) { + this.deptIds = deptIds; + } + + @Override + public String getRemark() { + return remark; + } + + @Override + public void setRemark(String remark) { + this.remark = remark; + } + + public String getCorpId() { + return corpId; + } + + public void setCorpId(String corpId) { + this.corpId = corpId; + } + + + public Integer getRoleType() { + return roleType; + } + + public void setRoleType(Integer roleType) { + this.roleType = roleType; + } + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("roleId", getRoleId()) + .append("roleName", getRoleName()) + .append("roleKey", getRoleKey()) + .append("roleSort", getRoleSort()) + .append("dataScope", getDataScope()) + .append("status", getStatus()) + .append("delFlag", getDelFlag()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .append("corpId",getCorpId()) + .toString(); + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/entity/SysUser.java b/easyink-common/src/main/java/com/easyink/common/core/domain/entity/SysUser.java new file mode 100644 index 0000000..4f6b626 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/entity/SysUser.java @@ -0,0 +1,414 @@ +package com.easyink.common.core.domain.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.easyink.common.annotation.Excel; +import com.easyink.common.annotation.Excel.ColumnType; +import com.easyink.common.annotation.Excel.Type; +import com.easyink.common.annotation.Excels; +import com.easyink.common.core.domain.BaseEntity; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import javax.validation.constraints.Email; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; +import java.util.Date; +import java.util.List; + +/** + * 用户对象 sys_user + * + * @author admin + */ +@Data +@Builder +@AllArgsConstructor +@ApiModel +public class SysUser extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** + * 用户ID + */ + @ApiModelProperty("用户ID") + @Excel(name = "用户序号", cellType = ColumnType.NUMERIC, prompt = "用户编号") + private Long userId; + + /** + * 部门ID + */ + @ApiModelProperty("部门ID") + @Excel(name = "部门编号", type = Type.IMPORT) + private Long deptId; + + /** + * 用户账号 + */ + @ApiModelProperty("用户账号") + @Excel(name = "登录名称") + private String userName; + + /** + * 用户昵称 + */ + @ApiModelProperty("用户昵称") + @Excel(name = "用户名称") + private String nickName; + + /** + * 用户类型(00系统用户)(11:企业微信用户) + */ + @ApiModelProperty("用户类型(00系统用户)(11:企业微信用户)") + private String userType; + + /** + * 当前微信用户对应微信端的id + */ + @ApiModelProperty("当前微信用户对应微信端的id") + private String weUserId; + + /** + * 用户邮箱 + */ + @ApiModelProperty("用户邮箱") + @Excel(name = "用户邮箱") + private String email; + + /** + * 手机号码 + */ + @Excel(name = "手机号码") + @ApiModelProperty("手机号码") + private String phonenumber; + + /** + * 用户性别 + */ + @Excel(name = "用户性别", readConverterExp = "0=男,1=女,2=未知") + @ApiModelProperty("用户性别") + private String sex; + + /** + * 用户头像 + */ + @ApiModelProperty("用户头像") + private String avatar; + + /** + * 密码 + */ + @ApiModelProperty("密码") + private String password; + + /** + * 盐加密 + */ + @ApiModelProperty("盐加密") + private String salt; + + /** + * 帐号状态(0正常 1停用) + */ + @ApiModelProperty("帐号状态(0正常 1停用)") + @Excel(name = "帐号状态", readConverterExp = "0=正常,1=停用") + private String status; + + /** + * 删除标志(0代表存在 2代表删除) + */ + @ApiModelProperty("帐号状态(0正常 1停用)") + private String delFlag; + + + @ApiModelProperty("最后登录IP") + @Excel(name = "最后登录IP", type = Type.EXPORT) + private String loginIp; + + /** + * 最后登录时间 + */ + @ApiModelProperty("最后登录时间") + @Excel(name = "最后登录时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss", type = Type.EXPORT) + private Date loginDate; + + /** + * 部门对象 + */ + @Excels({ + @Excel(name = "部门名称", targetAttr = "deptName", type = Type.EXPORT), + @Excel(name = "部门负责人", targetAttr = "leader", type = Type.EXPORT) + }) + @ApiModelProperty("部门对象") + private SysDept dept; + + /** + * 角色对象 + */ + @ApiModelProperty("角色对象") + private List roles; + + /** + * 角色组 + */ + @ApiModelProperty("角色组") + private Long[] roleIds; + + /** + * 岗位组 + */ + @ApiModelProperty("岗位组") + private Long[] postIds; + + /** + * 是否具有有效得cropId + */ + @ApiModelProperty("是否具有有效得cropId") + private boolean validCropId = false; + + @ApiModelProperty("企业账号") + private WeCorpAccount weCorpAccount; + + /** + * 公司ID + */ + @ApiModelProperty("公司ID") + private String corpId; + + + @TableField("ui_color") + @ApiModelProperty(value = "主题颜色") + private String uiColor; + + public SysUser() { + + } + + public SysUser(Long userId) { + this.userId = userId; + } + + public Long getUserId() { + return userId; + } + + public void setUserId(Long userId) { + this.userId = userId; + } + + public boolean isAdmin() { + return isAdmin(this.userId); + } + + public static boolean isAdmin(Long userId) { + return userId != null && 1L == userId; + } + + public Long getDeptId() { + return deptId; + } + + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + @Size(min = 0, max = 30, message = "用户昵称长度不能超过30个字符") + public String getNickName() { + return nickName; + } + + public void setNickName(String nickName) { + this.nickName = nickName; + } + + @NotBlank(message = "用户账号不能为空") + @Size(min = 0, max = 30, message = "用户账号长度不能超过30个字符") + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + @Email(message = "邮箱格式不正确") + @Size(min = 0, max = 50, message = "邮箱长度不能超过50个字符") + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + @Size(min = 0, max = 11, message = "手机号码长度不能超过11个字符") + public String getPhonenumber() { + return phonenumber; + } + + public void setPhonenumber(String phonenumber) { + this.phonenumber = phonenumber; + } + + public String getSex() { + return sex; + } + + public void setSex(String sex) { + this.sex = sex; + } + + public String getAvatar() { + return avatar; + } + + public void setAvatar(String avatar) { + this.avatar = avatar; + } + + @JsonIgnore + @JsonProperty + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getSalt() { + return salt; + } + + public void setSalt(String salt) { + this.salt = salt; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getDelFlag() { + return delFlag; + } + + public void setDelFlag(String delFlag) { + this.delFlag = delFlag; + } + + public String getLoginIp() { + return loginIp; + } + + public void setLoginIp(String loginIp) { + this.loginIp = loginIp; + } + + public Date getLoginDate() { + return loginDate; + } + + public void setLoginDate(Date loginDate) { + this.loginDate = loginDate; + } + + public SysDept getDept() { + return dept; + } + + public void setDept(SysDept dept) { + this.dept = dept; + } + + public List getRoles() { + return roles; + } + + public void setRoles(List roles) { + this.roles = roles; + } + + public Long[] getRoleIds() { + return roleIds; + } + + public void setRoleIds(Long[] roleIds) { + this.roleIds = roleIds; + } + + public Long[] getPostIds() { + return postIds; + } + + public void setPostIds(Long[] postIds) { + this.postIds = postIds; + } + + public String getCorpId() { + return corpId; + } + + public void setCorpId(String corpId) { + this.corpId = corpId; + } + + public String getUiColor() { + return uiColor; + } + + public void setUiColor(String uiColor) { + this.uiColor = uiColor; + } + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("userId", getUserId()) + .append("deptId", getDeptId()) + .append("userName", getUserName()) + .append("nickName", getNickName()) + .append("email", getEmail()) + .append("phonenumber", getPhonenumber()) + .append("sex", getSex()) + .append("avatar", getAvatar()) + .append("password", getPassword()) + .append("salt", getSalt()) + .append("status", getStatus()) + .append("delFlag", getDelFlag()) + .append("loginIp", getLoginIp()) + .append("loginDate", getLoginDate()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .append("dept", getDept()) + .toString(); + } + + /** + * 重写eq方法,若两个user corpId和userId相同,则相等 + * + * @param obj sysUser + * @return corpId和userId相等则返回true + */ + @Override + public boolean equals(Object obj) { + if (obj instanceof SysUser) { + SysUser sysUser = (SysUser) obj; + return this.corpId.equals(sysUser.getCorpId()) && this.userId.equals(sysUser.getUserId()); + } + return false; + } + +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/entity/WeCorpAccount.java b/easyink-common/src/main/java/com/easyink/common/core/domain/entity/WeCorpAccount.java new file mode 100644 index 0000000..075c123 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/entity/WeCorpAccount.java @@ -0,0 +1,142 @@ +package com.easyink.common.core.domain.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.easyink.common.config.RuoYiConfig; +import com.easyink.common.constant.Constants; +import com.easyink.common.core.domain.BaseEntity; +import com.easyink.common.utils.spring.SpringUtils; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 企业id相关配置对象 wx_corp_account + * + * @author admin + * @date 2020-08-24 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@ApiModel("企业id配置相关实体") +@TableName("we_corp_account") +public class WeCorpAccount extends BaseEntity { + private static final long serialVersionUID = 1L; + + @TableId(type = IdType.AUTO) + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty(value = "是否为代开发自建应用(0N1Y)") + @TableField(exist = false) + private Boolean isCustomizedApp; + + @ApiModelProperty("企业名称") + @TableField("company_name") + private String companyName; + + @ApiModelProperty("企业corpId") + @TableField("corp_id") + private String corpId; + + @ApiModelProperty("三方企业ID") + @TableField("external_corp_id") + private String externalCorpId; + + @ApiModelProperty("企业为corpSecret") + @TableField("corp_secret") + private String corpSecret; + + @ApiModelProperty("帐号状态(0正常 1停用 2已授权未启用)") + @TableField("status") + private String status; + + @ApiModelProperty("删除标志(0代表存在 2代表删除)") + @TableField("del_flag") + private String delFlag = "0"; + + + @ApiModelProperty("通讯录密钥") + @TableField("contact_secret") + private String contactSecret; + + @ApiModelProperty("应用id") + @TableField("agent_id") + private String agentId; + + @ApiModelProperty("应用密钥") + @TableField("agent_secret") + private String agentSecret; + + @ApiModelProperty("服务商密钥") + @TableField("provider_secret") + private String providerSecret; + + @ApiModelProperty("会话存档密钥") + @TableField("chat_secret") + private String chatSecret; + + + @ApiModelProperty("企业微信扫码登陆回调地址") + @TableField("wx_qr_login_redirect_uri") + private String wxQrLoginRedirectUri; + + @ApiModelProperty("客户流失通知开关 0:关闭 1:开启") + @TableField("customer_churn_notice_switch") + private String customerChurnNoticeSwitch = Constants.NORMAL_CODE; + + + @ApiModelProperty("企业管理员账号") + @TableField("corp_account") + private String corpAccount; + + @ApiModelProperty("客户联系密钥") + @TableField("custom_secret") + private String customSecret; + + @ApiModelProperty("应用回调aesKey") + @TableField("encoding_aes_key") + private String encodingAesKey; + + @ApiModelProperty("H5域名链接") + @TableField("h5_do_main_name") + private String h5DoMainName; + + @ApiModelProperty("应用回调token") + @TableField("token") + private String token; + + @ApiModelProperty("侧边栏证书") + @TableField("cert_file_path") + private String certFilePath; + + @ApiModelProperty("应用回调URL") + @TableField("callback_uri") + private String callbackUri; + + @ApiModelProperty("是否授权") + @TableField("authorized") + private Boolean authorized; + + /** + * 重写获取侧边栏域名 + * + * @return {@link String} + */ + public String getH5DoMainName() { + RuoYiConfig ruoYiConfig = SpringUtils.getBean(RuoYiConfig.class); + if (ruoYiConfig != null && ruoYiConfig.isThirdServer()) { + return ruoYiConfig.getThirdDefaultDomain().getSidebar(); + } + return this.h5DoMainName; + } + +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/model/LoginBody.java b/easyink-common/src/main/java/com/easyink/common/core/domain/model/LoginBody.java new file mode 100644 index 0000000..b6d1c9f --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/model/LoginBody.java @@ -0,0 +1,32 @@ +package com.easyink.common.core.domain.model; + +import lombok.Data; + +/** + * 用户登录对象 + * + * @author admin + */ +@Data +public class LoginBody { + /** + * 用户名 + */ + private String username; + + /** + * 用户密码 + */ + private String password; + + /** + * 验证码 + */ + private String code; + + /** + * 唯一标识 + */ + private String uuid = ""; + +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/model/LoginResult.java b/easyink-common/src/main/java/com/easyink/common/core/domain/model/LoginResult.java new file mode 100644 index 0000000..a042569 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/model/LoginResult.java @@ -0,0 +1,37 @@ +package com.easyink.common.core.domain.model; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 登录结果实体 + * + * @author : silver_chariot + * @date : 2021/8/23 14:01 + */ +@Data +@ApiModel("登录结果实体") +@NoArgsConstructor +@AllArgsConstructor +public class LoginResult { + + @ApiModelProperty(value = "访问后端接口的token") + private String token; + + @ApiModelProperty(value = "错误信息") + private String errorMsg; + @ApiModelProperty(value = "当前登录人", hidden = true) + private LoginUser loginUser; + + public LoginResult(String token) { + this.token = token; + } + + public LoginResult(String token, LoginUser loginUser) { + this.token = token; + this.loginUser = loginUser; + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/model/LoginUser.java b/easyink-common/src/main/java/com/easyink/common/core/domain/model/LoginUser.java new file mode 100644 index 0000000..81cccb1 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/model/LoginUser.java @@ -0,0 +1,397 @@ +package com.easyink.common.core.domain.model; + +import cn.hutool.core.util.ObjectUtil; +import com.easyink.common.constant.Constants; +import com.easyink.common.core.domain.entity.SysRole; +import com.easyink.common.core.domain.entity.SysUser; +import com.easyink.common.core.domain.wecom.WeUser; +import com.easyink.common.enums.ResultTip; +import com.easyink.common.exception.CustomException; +import com.easyink.common.exception.user.UserNoCorpException; +import com.fasterxml.jackson.annotation.JsonIgnore; +import lombok.Getter; +import lombok.Setter; +import org.apache.commons.lang3.StringUtils; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.userdetails.UserDetails; + +import java.util.Collection; +import java.util.Collections; +import java.util.Set; + +/** + * 登录用户身份权限 + * + * @author:admin + */ +public class LoginUser implements UserDetails { + private static final long serialVersionUID = 1L; + + /** + * 用户唯一标识 + */ + private String token; + + /** + * 登录时间 + */ + private Long loginTime; + + /** + * 过期时间 + */ + private Long expireTime; + + /** + * 登录IP地址 + */ + private String ipaddr; + + /** + * 登录地点 + */ + private String loginLocation; + + /** + * 浏览器类型 + */ + private String browser; + + /** + * 操作系统 + */ + private String os; + + /** + * 权限列表 + */ + private Set permissions; + /** + * 是否是超级管理员 + */ + private boolean isSuperAdmin; + + /** + * 用户信息 + */ + private SysUser user; + /** + * 企微用户信息 + */ + private WeUser weUser; + /** + * 所属的系统角色 + */ + private SysRole role; + /** + * 可见的部门数据范围(部门ID ,隔开) + */ + private String departmentDataScope; + /** + * ui界面颜色 + */ + private String uiColor; + + /** + * 企业名 + */ + @Getter + @Setter + private String corpName; + + + public String getToken() { + return token; + } + + public void setToken(String token) { + this.token = token; + } + + public LoginUser() { + } + + /** + * 根据账密登录的超级管理员用户 构建登录用户实体 + * + * @param user sysUser + * @param permissions 权限set + */ + public LoginUser(SysUser user, Set permissions) { + this.user = user; + this.permissions = permissions; + this.isSuperAdmin = true; + } + + /** + * 根据 扫码登录的企微用户构建 登录用户实体 + * + * @param weUser 企微用户实体 + * @param permissions 权限set + */ + public LoginUser(WeUser weUser, Set permissions) { + this.weUser = weUser; + this.permissions = permissions; + this.isSuperAdmin = false; + } + + @JsonIgnore + @Override + public String getPassword() { + if(user != null) { + return user.getPassword(); + } + return StringUtils.EMPTY; + } + + @Override + public String getUsername() { + if(isSuperAdmin){ + return user.getUserName(); + }else { + return weUser.getName(); + } + } + + /** + * 获取部门名字 + * + * @return + */ + public String getDepartmentName() { + if(isSuperAdmin && ObjectUtil.isNotNull(user) && ObjectUtil.isNotNull(user.getDept())) { + return user.getDept().getDeptName(); + }else if(!isSuperAdmin && ObjectUtil.isNotNull(weUser)) { + return weUser.getDepartmentName(); + } + return StringUtils.EMPTY; + } + + /** + * 账户是否未过期,过期无法验证 + */ + @JsonIgnore + @Override + public boolean isAccountNonExpired() { + return true; + } + + /** + * 指定用户是否解锁,锁定的用户无法进行身份验证 + * + * @return + */ + @JsonIgnore + @Override + public boolean isAccountNonLocked() { + return true; + } + + /** + * 指示是否已过期的用户的凭据(密码),过期的凭据防止认证 + * + * @return + */ + @JsonIgnore + @Override + public boolean isCredentialsNonExpired() { + return true; + } + /** + * 是否可用 ,禁用的用户不能身份验证 + * + * @return + */ + @JsonIgnore + @Override + public boolean isEnabled() { + return true; + } + + public Long getLoginTime() { + return loginTime; + } + + public void setLoginTime(Long loginTime) { + this.loginTime = loginTime; + } + + public String getIpaddr() { + return ipaddr; + } + + public void setIpaddr(String ipaddr) { + this.ipaddr = ipaddr; + } + + public String getLoginLocation() { + return loginLocation; + } + + public void setLoginLocation(String loginLocation) { + this.loginLocation = loginLocation; + } + + public String getBrowser() { + return browser; + } + + public void setBrowser(String browser) { + this.browser = browser; + } + + public String getOs() { + return os; + } + + public void setOs(String os) { + this.os = os; + } + + public Long getExpireTime() { + return expireTime; + } + + public void setExpireTime(Long expireTime) { + this.expireTime = expireTime; + } + + public Set getPermissions() { + return permissions; + } + + public void setPermissions(Set permissions) { + this.permissions = permissions; + } + + public SysUser getUser() { + return user; + } + + public void setUser(SysUser user) { + this.user = user; + } + + @Override + public Collection getAuthorities() { + return Collections.emptyList(); + } + + public boolean isSuperAdmin() { + return isSuperAdmin && this.user != null; + } + + public void setSuperAdmin(boolean superAdmin) { + isSuperAdmin = superAdmin; + } + + public WeUser getWeUser() { + return weUser; + } + + public void setWeUser(WeUser weUser) { + this.weUser = weUser; + } + + public String getDepartmentDataScope() { + return departmentDataScope; + } + + public void setDepartmentDataScope(String departmentDataScope) { + this.departmentDataScope = departmentDataScope; + } + + public SysRole getRole() { + return role; + } + + public void setRole(SysRole role) { + this.role = role; + } + + /** + * 获取当前登录用户的公司ID + * + * @return 公司ID + * @throws UserNoCorpException 获取用户企业异常 + */ + public String getCorpId() { + if (isSuperAdmin && null != user) { + return user.getCorpId(); + } else if (null != weUser && StringUtils.isNotBlank(weUser.getCorpId())) { + return weUser.getCorpId(); + } else { + throw new CustomException(ResultTip.TIP_MISS_CORP_ID); + } + } + + /** + * 给当前登录设置corpId + * + * @param corpId 需要设置的corpId + */ + public void setCorpId(String corpId) { + if (isSuperAdmin()) { + user.setCorpId(corpId); + } else if (weUser != null) { + weUser.setCorpId(corpId); + } + } + + /** + * 重写eq方法,若两个user corpId和userId相同 + * + * @param obj weUser + * @return corpId和userId相等则返回true + */ + @Override + public boolean equals(Object obj) { + if (!(obj instanceof LoginUser)) { + return false; + } + LoginUser loginUser = (LoginUser) obj; + if (isSuperAdmin() && loginUser.isSuperAdmin()) { + // 账密登录用户 比较corpId 和 userId + return this.user.equals(loginUser.user); + } else if (!isSuperAdmin() && !loginUser.isSuperAdmin()) { + if (this.weUser != null && loginUser.weUser != null) { + // 扫码登录用户比较corpId 和 userId + return this.weUser.equals(loginUser.getWeUser()); + } + } + return false; + } + + /** + * 获取当前登录用户所设置的主题颜色 + * + * @return 当前登录用户所设置的主题颜色 + */ + public String getUiColor() { + if (isSuperAdmin && null != user && StringUtils.isNotBlank(user.getUiColor())) { + return user.getUiColor(); + } else if (!isSuperAdmin && null != weUser && StringUtils.isNotBlank(weUser.getUiColor())) { + return weUser.getUiColor(); + } + // 返回默认颜色 + return Constants.DEFAULT_UI_COLOR; + } + + public void setUiColor(String uiColor) { + this.uiColor = uiColor; + } + + /** + * 获取登录人的userId admin用户返回admin + * @return userId + */ + public String getUserId(){ + if (this.isSuperAdmin()){ + return "admin"; + }else { + return this.getWeUser().getUserId(); + } + } + + +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/model/LoginUserVO.java b/easyink-common/src/main/java/com/easyink/common/core/domain/model/LoginUserVO.java new file mode 100644 index 0000000..09628f7 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/model/LoginUserVO.java @@ -0,0 +1,63 @@ +package com.easyink.common.core.domain.model; + +import cn.hutool.core.util.ObjectUtil; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.HashSet; + +/** + * 返回给前端的登录对象 + * + * @author : silver_chariot + * @date : 2021/8/23 20:38 + */ +@ApiModel +@Data +public class LoginUserVO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "用户名") + private String userName; + @ApiModelProperty(value = "用户ID") + private String userId; + @ApiModelProperty(value = "头像") + private String avatar; + @ApiModelProperty(value = "是否是超级管理员") + private Boolean isSuperAdmin; + @ApiModelProperty(value = "角色集合") + private HashSet roles; + @ApiModelProperty(value = "权限集合") + private HashSet permissions; + @ApiModelProperty(value = "主题颜色") + private String uiColor; + + /** + * 构建返回给前端的登录用户对象 + * + * @param loginUser 登录用户实体 + * @param roles + * @param permissions + */ + public LoginUserVO(LoginUser loginUser, HashSet roles, HashSet permissions) { + this.roles = roles; + this.permissions = permissions; + this.uiColor = loginUser.getUiColor(); + if (loginUser.isSuperAdmin() && ObjectUtil.isNotNull(loginUser.getUser())) { + //构建账密登录管理员用户实体 + this.isSuperAdmin = true; + this.userName = loginUser.getUser().getUserName(); + this.avatar = loginUser.getUser().getAvatar(); + this.userId = String.valueOf(loginUser.getUser().getUserId()); + } else if (!loginUser.isSuperAdmin() && ObjectUtil.isNotNull(loginUser.getWeUser())) { + //构建 扫码登录用户实体 + this.isSuperAdmin = false; + this.userName = loginUser.getWeUser().getName(); + this.avatar = loginUser.getWeUser().getAvatarMediaid(); + this.userId = loginUser.getWeUser().getUserId(); + } + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/system/MetaVo.java b/easyink-common/src/main/java/com/easyink/common/core/domain/system/MetaVo.java new file mode 100644 index 0000000..b729c76 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/system/MetaVo.java @@ -0,0 +1,42 @@ +package com.easyink.common.core.domain.system; + +/** + * 路由显示信息 + * + * @author admin + */ +public class MetaVo { + /** + * 设置该路由在侧边栏和面包屑中展示的名字 + */ + private String title; + + /** + * 设置该路由的图标,对应路径src/icons/svg + */ + private String icon; + + public MetaVo() { + } + + public MetaVo(String title, String icon) { + this.title = title; + this.icon = icon; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getIcon() { + return icon; + } + + public void setIcon(String icon) { + this.icon = icon; + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/system/RouterVo.java b/easyink-common/src/main/java/com/easyink/common/core/domain/system/RouterVo.java new file mode 100644 index 0000000..071226f --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/system/RouterVo.java @@ -0,0 +1,117 @@ +package com.easyink.common.core.domain.system; + +import com.fasterxml.jackson.annotation.JsonInclude; + +import java.util.List; + +/** + * 路由配置信息 + * + * @author admin + */ +@JsonInclude(JsonInclude.Include.NON_EMPTY) +public class RouterVo { + /** + * 路由名字 + */ + private String name; + + /** + * 路由地址 + */ + private String path; + + /** + * 是否隐藏路由,当设置 true 的时候该路由不会再侧边栏出现 + */ + private boolean hidden; + + /** + * 重定向地址,当设置 noRedirect 的时候该路由在面包屑导航中不可被点击 + */ + private String redirect; + + /** + * 组件地址 + */ + private String component; + + /** + * 当你一个路由下面的 children 声明的路由大于1个时,自动会变成嵌套的模式--如组件页面 + */ + private Boolean alwaysShow; + + /** + * 其他元素 + */ + private MetaVo meta; + + /** + * 子路由 + */ + private List children; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } + + public boolean getHidden() { + return hidden; + } + + public void setHidden(boolean hidden) { + this.hidden = hidden; + } + + public String getRedirect() { + return redirect; + } + + public void setRedirect(String redirect) { + this.redirect = redirect; + } + + public String getComponent() { + return component; + } + + public void setComponent(String component) { + this.component = component; + } + + public Boolean getAlwaysShow() { + return alwaysShow; + } + + public void setAlwaysShow(Boolean alwaysShow) { + this.alwaysShow = alwaysShow; + } + + public MetaVo getMeta() { + return meta; + } + + public void setMeta(MetaVo meta) { + this.meta = meta; + } + + public List getChildren() { + return children; + } + + public void setChildren(List children) { + this.children = children; + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/system/SysConfig.java b/easyink-common/src/main/java/com/easyink/common/core/domain/system/SysConfig.java new file mode 100644 index 0000000..06279c2 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/system/SysConfig.java @@ -0,0 +1,104 @@ +package com.easyink.common.core.domain.system; + +import com.easyink.common.annotation.Excel; +import com.easyink.common.annotation.Excel.ColumnType; +import com.easyink.common.core.domain.BaseEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; + +/** + * 参数配置表 sys_config + * + * @author admin + */ +@ApiModel("参数配置实体") +public class SysConfig extends BaseEntity { + private static final long serialVersionUID = 1L; + + @ApiModelProperty("参数主键") + @Excel(name = "参数主键", cellType = ColumnType.NUMERIC) + private Long configId; + + @ApiModelProperty("参数名称") + @Excel(name = "参数名称") + private String configName; + + @ApiModelProperty("参数键名") + @Excel(name = "参数键名") + private String configKey; + + @ApiModelProperty("参数键值") + @Excel(name = "参数键值") + private String configValue; + + @ApiModelProperty("系统内置(Y是 N否)") + @Excel(name = "系统内置", readConverterExp = "Y=是,N=否") + private String configType; + + public Long getConfigId() { + return configId; + } + + public void setConfigId(Long configId) { + this.configId = configId; + } + + @NotBlank(message = "参数名称不能为空") + @Size(min = 0, max = 100, message = "参数名称不能超过100个字符") + public String getConfigName() { + return configName; + } + + public void setConfigName(String configName) { + this.configName = configName; + } + + @NotBlank(message = "参数键名长度不能为空") + @Size(min = 0, max = 100, message = "参数键名长度不能超过100个字符") + public String getConfigKey() { + return configKey; + } + + public void setConfigKey(String configKey) { + this.configKey = configKey; + } + + @NotBlank(message = "参数键值不能为空") + @Size(min = 0, max = 500, message = "参数键值长度不能超过500个字符") + public String getConfigValue() { + return configValue; + } + + public void setConfigValue(String configValue) { + this.configValue = configValue; + } + + public String getConfigType() { + return configType; + } + + public void setConfigType(String configType) { + this.configType = configType; + } + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("configId", getConfigId()) + .append("configName", getConfigName()) + .append("configKey", getConfigKey()) + .append("configValue", getConfigValue()) + .append("configType", getConfigType()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/system/SysLogininfor.java b/easyink-common/src/main/java/com/easyink/common/core/domain/system/SysLogininfor.java new file mode 100644 index 0000000..5f6d5a7 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/system/SysLogininfor.java @@ -0,0 +1,152 @@ +package com.easyink.common.core.domain.system; + +import com.easyink.common.annotation.Excel; +import com.easyink.common.annotation.Excel.ColumnType; +import com.easyink.common.core.domain.BaseEntity; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +import java.util.Date; + +/** + * 系统访问记录表 sys_logininfor + * + * @author admin + */ +@ApiModel(value = "系统访问记录实体") +public class SysLogininfor extends BaseEntity { + private static final long serialVersionUID = 1L; + + @ApiModelProperty("ID") + @Excel(name = "序号", cellType = ColumnType.NUMERIC) + private Long infoId; + + @ApiModelProperty("用户账号") + @Excel(name = "用户账号") + private String userName; + + @ApiModelProperty("登录状态 0成功 1失败") + @Excel(name = "登录状态", readConverterExp = "0=成功,1=失败") + private String status; + + @ApiModelProperty("登录IP地址") + @Excel(name = "登录地址") + private String ipaddr; + + @ApiModelProperty("登录地点") + @Excel(name = "登录地点") + private String loginLocation; + + @ApiModelProperty("浏览器类型") + @Excel(name = "浏览器") + private String browser; + + @ApiModelProperty("操作系统") + @Excel(name = "操作系统") + private String os; + + @ApiModelProperty("提示消息") + @Excel(name = "提示消息") + private String msg; + + @ApiModelProperty("访问时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "访问时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + private Date loginTime; + + @ApiModelProperty("登录方式 (1账密登录 2 扫码登录)") + @Excel(name = "登录方式", readConverterExp = "1=账密登录,2=扫码登录") + private Integer loginType; + + @ApiModelProperty("企业ID") + private String corpId; + + public Long getInfoId() { + return infoId; + } + + public void setInfoId(Long infoId) { + this.infoId = infoId; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getIpaddr() { + return ipaddr; + } + + public void setIpaddr(String ipaddr) { + this.ipaddr = ipaddr; + } + + public String getLoginLocation() { + return loginLocation; + } + + public void setLoginLocation(String loginLocation) { + this.loginLocation = loginLocation; + } + + public String getBrowser() { + return browser; + } + + public void setBrowser(String browser) { + this.browser = browser; + } + + public String getOs() { + return os; + } + + public void setOs(String os) { + this.os = os; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public Date getLoginTime() { + return loginTime; + } + + public void setLoginTime(Date loginTime) { + this.loginTime = loginTime; + } + + public Integer getLoginType() { + return loginType; + } + + public void setLoginType(Integer loginType) { + this.loginType = loginType; + } + + public String getCorpId() { + return corpId; + } + + public void setCorpId(String corpId) { + this.corpId = corpId; + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/system/SysNotice.java b/easyink-common/src/main/java/com/easyink/common/core/domain/system/SysNotice.java new file mode 100644 index 0000000..565b9bc --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/system/SysNotice.java @@ -0,0 +1,93 @@ +package com.easyink.common.core.domain.system; + +import com.easyink.common.core.domain.BaseEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; + +/** + * 通知公告表 sys_notice + * + * @author admin + */ +@ApiModel("通知公告表") +public class SysNotice extends BaseEntity { + private static final long serialVersionUID = 1L; + + @ApiModelProperty("公告ID") + private Long noticeId; + + @ApiModelProperty("公告标题") + private String noticeTitle; + + @ApiModelProperty("公告类型(1通知 2公告)") + private String noticeType; + + @ApiModelProperty("公告内容") + private String noticeContent; + + @ApiModelProperty("公告状态(0正常 1关闭)") + private String status; + + public Long getNoticeId() { + return noticeId; + } + + public void setNoticeId(Long noticeId) { + this.noticeId = noticeId; + } + + public void setNoticeTitle(String noticeTitle) { + this.noticeTitle = noticeTitle; + } + + @NotBlank(message = "公告标题不能为空") + @Size(max = 50, message = "公告标题不能超过50个字符") + public String getNoticeTitle() { + return noticeTitle; + } + + public void setNoticeType(String noticeType) { + this.noticeType = noticeType; + } + + public String getNoticeType() { + return noticeType; + } + + public void setNoticeContent(String noticeContent) { + this.noticeContent = noticeContent; + } + + public String getNoticeContent() { + return noticeContent; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getStatus() { + return status; + } + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("noticeId", getNoticeId()) + .append("noticeTitle", getNoticeTitle()) + .append("noticeType", getNoticeType()) + .append("noticeContent", getNoticeContent()) + .append("status", getStatus()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/system/SysOperLog.java b/easyink-common/src/main/java/com/easyink/common/core/domain/system/SysOperLog.java new file mode 100644 index 0000000..ec25d52 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/system/SysOperLog.java @@ -0,0 +1,235 @@ +package com.easyink.common.core.domain.system; + +import com.easyink.common.annotation.Excel; +import com.easyink.common.annotation.Excel.ColumnType; +import com.easyink.common.core.domain.BaseEntity; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +import java.util.Date; + +/** + * 操作日志记录表 oper_log + * + * @author admin + */ +@ApiModel("操作日志实体") +public class SysOperLog extends BaseEntity { + private static final long serialVersionUID = 1L; + + @ApiModelProperty("操作序号") + @Excel(name = "操作序号", cellType = ColumnType.NUMERIC) + private Long operId; + + @ApiModelProperty("操作模块") + @Excel(name = "操作模块") + private String title; + + @ApiModelProperty("操作模块(0=其它,1=新增,2=修改,3=删除,4=授权,5=导出,6=导入,7=强退,8=生成代码,9=清空数据)") + @Excel(name = "业务类型", readConverterExp = "0=其它,1=新增,2=修改,3=删除,4=授权,5=导出,6=导入,7=强退,8=生成代码,9=清空数据") + private Integer businessType; + + @ApiModelProperty("业务类型数组") + private Integer[] businessTypes; + + @ApiModelProperty("请求方法") + @Excel(name = "请求方法") + private String method; + + @ApiModelProperty("请求方式") + @Excel(name = "请求方式") + private String requestMethod; + + @ApiModelProperty("操作类别(0其它 1后台用户 2手机端用户)") + @Excel(name = "操作类别", readConverterExp = "0=其它,1=后台用户,2=手机端用户") + private Integer operatorType; + + @ApiModelProperty("操作人员") + @Excel(name = "操作人员") + private String operName; + + @ApiModelProperty("部门名称") + @Excel(name = "部门名称") + private String deptName; + + @ApiModelProperty("请求地址") + @Excel(name = "请求地址") + private String operUrl; + + @ApiModelProperty("操作地址") + @Excel(name = "操作地址") + private String operIp; + + @ApiModelProperty("操作地点") + @Excel(name = "操作地点") + private String operLocation; + + @ApiModelProperty("请求参数") + @Excel(name = "请求参数") + private String operParam; + + @ApiModelProperty("返回参数") + @Excel(name = "返回参数") + private String jsonResult; + + @ApiModelProperty("操作状态(0正常 1异常)") + @Excel(name = "状态", readConverterExp = "0=正常,1=异常") + private Integer status; + + @ApiModelProperty("错误消息") + @Excel(name = "错误消息") + private String errorMsg; + + @ApiModelProperty("操作时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "操作时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + private Date operTime; + + @ApiModelProperty("公司ID") + private String corpId; + + public Long getOperId() { + return operId; + } + + public void setOperId(Long operId) { + this.operId = operId; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public Integer getBusinessType() { + return businessType; + } + + public void setBusinessType(Integer businessType) { + this.businessType = businessType; + } + + public Integer[] getBusinessTypes() { + return businessTypes; + } + + public void setBusinessTypes(Integer[] businessTypes) { + this.businessTypes = businessTypes; + } + + public String getMethod() { + return method; + } + + public void setMethod(String method) { + this.method = method; + } + + public String getRequestMethod() { + return requestMethod; + } + + public void setRequestMethod(String requestMethod) { + this.requestMethod = requestMethod; + } + + public Integer getOperatorType() { + return operatorType; + } + + public void setOperatorType(Integer operatorType) { + this.operatorType = operatorType; + } + + public String getOperName() { + return operName; + } + + public void setOperName(String operName) { + this.operName = operName; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getOperUrl() { + return operUrl; + } + + public void setOperUrl(String operUrl) { + this.operUrl = operUrl; + } + + public String getOperIp() { + return operIp; + } + + public void setOperIp(String operIp) { + this.operIp = operIp; + } + + public String getOperLocation() { + return operLocation; + } + + public void setOperLocation(String operLocation) { + this.operLocation = operLocation; + } + + public String getOperParam() { + return operParam; + } + + public void setOperParam(String operParam) { + this.operParam = operParam; + } + + public String getJsonResult() { + return jsonResult; + } + + public void setJsonResult(String jsonResult) { + this.jsonResult = jsonResult; + } + + public Integer getStatus() { + return status; + } + + public void setStatus(Integer status) { + this.status = status; + } + + public String getErrorMsg() { + return errorMsg; + } + + public void setErrorMsg(String errorMsg) { + this.errorMsg = errorMsg; + } + + public Date getOperTime() { + return operTime; + } + + public void setOperTime(Date operTime) { + this.operTime = operTime; + } + + public String getCorpId() { + return corpId; + } + + public void setCorpId(String corpId) { + this.corpId = corpId; + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/system/SysPost.java b/easyink-common/src/main/java/com/easyink/common/core/domain/system/SysPost.java new file mode 100644 index 0000000..f487bd4 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/system/SysPost.java @@ -0,0 +1,132 @@ +package com.easyink.common.core.domain.system; + +import com.easyink.common.annotation.Excel; +import com.easyink.common.annotation.Excel.ColumnType; +import com.easyink.common.core.domain.BaseEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; + +/** + * 岗位表 sys_post + * + * @author admin + */ +@ApiModel("岗位表") +public class SysPost extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** + * 岗位序号 + */ + @ApiModelProperty("岗位序号") + @Excel(name = "岗位序号", cellType = ColumnType.NUMERIC) + private Long postId; + + /** + * 岗位编码 + */ + @ApiModelProperty("岗位编码") + @Excel(name = "岗位编码") + private String postCode; + + /** + * 岗位名称 + */ + @ApiModelProperty("岗位名称") + @Excel(name = "岗位名称") + private String postName; + + /** + * 岗位排序 + */ + @ApiModelProperty("岗位排序") + @Excel(name = "岗位排序") + private String postSort; + + /** + * 状态(0正常 1停用) + */ + @ApiModelProperty("状态(0正常 1停用)") + @Excel(name = "状态", readConverterExp = "0=正常,1=停用") + private String status; + + /** + * 用户是否存在此岗位标识 默认不存在 + */ + @ApiModelProperty("用户是否存在此岗位标识 默认不存在") + private boolean flag = false; + + public Long getPostId() { + return postId; + } + + public void setPostId(Long postId) { + this.postId = postId; + } + + @NotBlank(message = "岗位编码不能为空") + @Size(min = 0, max = 64, message = "岗位编码长度不能超过64个字符") + public String getPostCode() { + return postCode; + } + + public void setPostCode(String postCode) { + this.postCode = postCode; + } + + @NotBlank(message = "岗位名称不能为空") + @Size(min = 0, max = 50, message = "岗位名称长度不能超过50个字符") + public String getPostName() { + return postName; + } + + public void setPostName(String postName) { + this.postName = postName; + } + + @NotBlank(message = "显示顺序不能为空") + public String getPostSort() { + return postSort; + } + + public void setPostSort(String postSort) { + this.postSort = postSort; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public boolean isFlag() { + return flag; + } + + public void setFlag(boolean flag) { + this.flag = flag; + } + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("postId", getPostId()) + .append("postCode", getPostCode()) + .append("postName", getPostName()) + .append("postSort", getPostSort()) + .append("status", getStatus()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/system/SysRoleDept.java b/easyink-common/src/main/java/com/easyink/common/core/domain/system/SysRoleDept.java new file mode 100644 index 0000000..e3f0e48 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/system/SysRoleDept.java @@ -0,0 +1,72 @@ +package com.easyink.common.core.domain.system; + +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 角色和部门关联 sys_role_dept + * + * @author admin + */ +public class SysRoleDept { + /** + * 角色ID + */ + private Long roleId; + /** + * 公司id + */ + private String corpId; + + /** + * 部门ID + */ + private Long deptId; + + public SysRoleDept() { + } + + public SysRoleDept(Long roleId, Long deptId) { + this.roleId = roleId; + this.deptId = deptId; + } + + public SysRoleDept(Long roleId,String corpId, Long deptId) { + this.roleId = roleId; + this.corpId = corpId; + this.deptId = deptId; + } + + + public Long getRoleId() { + return roleId; + } + + public void setRoleId(Long roleId) { + this.roleId = roleId; + } + + public Long getDeptId() { + return deptId; + } + + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + public String getCorpId() { + return corpId; + } + + public void setCorpId(String corpId) { + this.corpId = corpId; + } + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("roleId", getRoleId()) + .append("deptId", getDeptId()) + .toString(); + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/system/SysRoleMenu.java b/easyink-common/src/main/java/com/easyink/common/core/domain/system/SysRoleMenu.java new file mode 100644 index 0000000..e86fccc --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/system/SysRoleMenu.java @@ -0,0 +1,45 @@ +package com.easyink.common.core.domain.system; + +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 角色和菜单关联 sys_role_menu + * + * @author admin + */ +public class SysRoleMenu { + /** + * 角色ID + */ + private Long roleId; + + /** + * 菜单ID + */ + private Long menuId; + + public Long getRoleId() { + return roleId; + } + + public void setRoleId(Long roleId) { + this.roleId = roleId; + } + + public Long getMenuId() { + return menuId; + } + + public void setMenuId(Long menuId) { + this.menuId = menuId; + } + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("roleId", getRoleId()) + .append("menuId", getMenuId()) + .toString(); + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/system/SysUserOnline.java b/easyink-common/src/main/java/com/easyink/common/core/domain/system/SysUserOnline.java new file mode 100644 index 0000000..f2f601b --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/system/SysUserOnline.java @@ -0,0 +1,124 @@ +package com.easyink.common.core.domain.system; + +/** + * 当前在线会话 + * + * @author admin + */ +public class SysUserOnline { + /** + * 会话编号 + */ + private String tokenId; + + /** + * 部门名称 + */ + private String deptName; + + /** + * 用户名称 + */ + private String userName; + + /** + * 登录IP地址 + */ + private String ipaddr; + + /** + * 登录地址 + */ + private String loginLocation; + + /** + * 浏览器类型 + */ + private String browser; + + /** + * 操作系统 + */ + private String os; + + /** + * 登录时间 + */ + private Long loginTime; + /** + * 公司id + */ + private String corpId; + + public String getTokenId() { + return tokenId; + } + + public void setTokenId(String tokenId) { + this.tokenId = tokenId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getIpaddr() { + return ipaddr; + } + + public void setIpaddr(String ipaddr) { + this.ipaddr = ipaddr; + } + + public String getLoginLocation() { + return loginLocation; + } + + public void setLoginLocation(String loginLocation) { + this.loginLocation = loginLocation; + } + + public String getBrowser() { + return browser; + } + + public void setBrowser(String browser) { + this.browser = browser; + } + + public String getOs() { + return os; + } + + public void setOs(String os) { + this.os = os; + } + + public Long getLoginTime() { + return loginTime; + } + + public void setLoginTime(Long loginTime) { + this.loginTime = loginTime; + } + + public String getCorpId() { + return corpId; + } + + public void setCorpId(String corpId) { + this.corpId = corpId; + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/system/SysUserPost.java b/easyink-common/src/main/java/com/easyink/common/core/domain/system/SysUserPost.java new file mode 100644 index 0000000..6d0dd66 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/system/SysUserPost.java @@ -0,0 +1,45 @@ +package com.easyink.common.core.domain.system; + +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 用户和岗位关联 sys_user_post + * + * @author admin + */ +public class SysUserPost { + /** + * 用户ID + */ + private Long userId; + + /** + * 岗位ID + */ + private Long postId; + + public Long getUserId() { + return userId; + } + + public void setUserId(Long userId) { + this.userId = userId; + } + + public Long getPostId() { + return postId; + } + + public void setPostId(Long postId) { + this.postId = postId; + } + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("userId", getUserId()) + .append("postId", getPostId()) + .toString(); + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/system/SysUserRole.java b/easyink-common/src/main/java/com/easyink/common/core/domain/system/SysUserRole.java new file mode 100644 index 0000000..0b5b284 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/system/SysUserRole.java @@ -0,0 +1,45 @@ +package com.easyink.common.core.domain.system; + +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 用户和角色关联 sys_user_role + * + * @author admin + */ +public class SysUserRole { + /** + * 用户ID + */ + private Long userId; + + /** + * 角色ID + */ + private Long roleId; + + public Long getUserId() { + return userId; + } + + public void setUserId(Long userId) { + this.userId = userId; + } + + public Long getRoleId() { + return roleId; + } + + public void setRoleId(Long roleId) { + this.roleId = roleId; + } + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("userId", getUserId()) + .append("roleId", getRoleId()) + .toString(); + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/wecom/BaseExtendPropertyRel.java b/easyink-common/src/main/java/com/easyink/common/core/domain/wecom/BaseExtendPropertyRel.java new file mode 100644 index 0000000..115016f --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/wecom/BaseExtendPropertyRel.java @@ -0,0 +1,28 @@ +package com.easyink.common.core.domain.wecom; + +import com.baomidou.mybatisplus.annotation.TableField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 类名: 扩展字段关系基础实体 + * + * @author : silver_chariot + * @date : 2021/11/15 19:40 + */ +@Data +public class BaseExtendPropertyRel { + + /** + * 扩展属性id + */ + @TableField("extend_property_id") + @ApiModelProperty(value = "扩展属性id") + private Long extendPropertyId; + /** + * 自定义属性的值 + */ + @TableField("property_value") + @ApiModelProperty(value = "自定义属性的值") + private String propertyValue; +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/wecom/WeDepartment.java b/easyink-common/src/main/java/com/easyink/common/core/domain/wecom/WeDepartment.java new file mode 100644 index 0000000..34bdcb4 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/wecom/WeDepartment.java @@ -0,0 +1,72 @@ +package com.easyink.common.core.domain.wecom; + + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Pattern; +import javax.validation.constraints.Size; +import java.util.ArrayList; +import java.util.List; + +/** + * 企业微信组织架构相关对象 we_department + * + * @author 佚名 + * @date 2021-7-28 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@TableName("we_department") +@ApiModel("企业微信组织架构相关对象") +public class WeDepartment { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "企业id") + @TableField("corp_id") + private String corpId; + + @ApiModelProperty(value = "主键id") + @TableField("id") + private Long id; + + @ApiModelProperty(value = "部门名称") + @TableField("name") + @NotBlank(message = "部门名称不能为空") + @Size(max = 16, message = "部门名称长度已超出限制") + @Pattern(regexp = "^[^\"\\\\:*?<>\\|]{0,16}$", message = "不能包含特殊字符\\:*?”<>|") + private String name; + + @ApiModelProperty(value = "父节点id") + @TableField("parent_id") + @NotNull(message = "父节点的id不可为空") + private Long parentId; + + @ApiModelProperty(value = "父节点名称") + @TableField(exist = false) + private String mainDepartmentName; + + @ApiModelProperty(value = "子部门集合") + @TableField(exist = false) + private List children = new ArrayList<>(); + + @ApiModelProperty(value = "是否有权限") + @TableField(exist = false) + private Boolean enable; + + @ApiModelProperty(value = "部门及下级部门总人数") + @TableField(exist = false) + private Integer totalUserCount; + + +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/domain/wecom/WeUser.java b/easyink-common/src/main/java/com/easyink/common/core/domain/wecom/WeUser.java new file mode 100644 index 0000000..d70cacc --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/domain/wecom/WeUser.java @@ -0,0 +1,230 @@ +package com.easyink.common.core.domain.wecom; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.easyink.common.config.jackson.StringArrayDeserialize; +import com.easyink.common.core.domain.BaseEntity; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.apache.commons.lang3.StringUtils; + +import javax.validation.constraints.Email; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Pattern; +import javax.validation.constraints.Size; +import java.util.Date; +import java.util.Objects; + + +/** + * 通讯录相关客户对象 we_user + * + * @author 佚名 + * @date 2021-7-29 + */ +@ApiModel("通讯录相关客户对象") +@Data +@TableName("we_user") +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class WeUser extends BaseEntity { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "账号") + @NotBlank(message = "账号不可为空") + @TableId + @TableField("user_id") + @Size(max = 64, message = "员工账号长度已超过限制") + @Pattern(regexp = "^[a-zA-Z0-9][a-zA-Z0-9_@.\\-]+$", message = "账号应该由数字,字母和_-@.组成,第一个字符必须是数字或字母") + private String userId; + + @ApiModelProperty(value = "头像地址") + @TableField("head_image_url") + private String avatarMediaid; + + @ApiModelProperty(value = "用户名称") + @TableField("user_name") + @NotBlank(message = "员工姓名不能为空") + @Size(max = 64, message = "员工姓名长度已超出限制") + private String name; + + @ApiModelProperty(value = "用户昵称") + @TableField("alias") + @Size(max = 64, message = "员工别名长度已超出限制") + private String alias; + + @ApiModelProperty(value = "性别。1表示男性,2表示女性") + @TableField("gender") + private Integer gender; + + @ApiModelProperty(value = "手机号") + @TableField("mobile") + @Size(max = 20, message = "员工手机长度已超出限制") + @Pattern(regexp = "\\d{0,20}", message = "手机号只能是数字") + private String mobile; + + @ApiModelProperty(value = "邮箱") + @TableField("email") + @Email(message = "邮箱格式有误") + @Size(max = 200, message = "邮箱长度已超出限制") + private String email; + + @ApiModelProperty(value = "个人微信号") + @TableField("wx_account") + private String wxAccount; + + @ApiModelProperty(value = "用户所属部门,使用逗号隔开,字符串格式存储") + @TableField("department") + private String[] department; + + @ApiModelProperty(value = "职务") + @TableField("position") + @Size(max = 64, message = "员工职务长度已超出限制") + private String position; + + @ApiModelProperty(value = "1表示为上级,0表示普通成员(非上级)。") + @TableField("is_leader_in_dept") + private String[] isLeaderInDept; + + @ApiModelProperty(value = "入职时间") + @TableField("join_time") + @JsonFormat(pattern = "yyyy-MM-dd") + private Date joinTime; + + @ApiModelProperty(value = "是否启用(1表示启用成员,0表示禁用成员)") + @TableField("enable") + private Integer enable; + + @ApiModelProperty(value = "身份证号") + @TableField("id_card") + @Size(max = 30, message = "身份证长度已超出限制") + private String idCard; + + @ApiModelProperty(value = "QQ号") + @TableField("qq_account") + @Size(max = 20, message = "QQ号长度已超出限制") + @Pattern(regexp = "\\d{0,20}", message = "QQ号只能是数字") + private String qqAccount; + + @ApiModelProperty(value = "座机") + @TableField("telephone") + private String telephone; + + @ApiModelProperty(value = "地址") + @TableField("address") + @Size(max = 128, message = "员工地址长度已超出限制") + private String address; + + @ApiModelProperty(value = "生日") + @TableField("birthday") + @JsonFormat(pattern = "yyyy-MM-dd") + private Date birthday; + + @ApiModelProperty(value = "备注") + @TableField("remark") + private String remark; + + @ApiModelProperty(value = "客户标签,字符串使用逗号隔开") + @TableField("customer_tags") + private String customerTags; + + @ApiModelProperty(value = "离职时间") + @TableField("dimission_time") + private Date dimissionTime; + + @ApiModelProperty(value = "离职是否分配(1:已分配;0:未分配;)") + @TableField("is_allocate") + private Integer isAllocate; + + @ApiModelProperty(value = "激活状态: 1=已激活,2=已禁用,4=未激活,5=退出企业,6=删除") + @TableField("is_activate") + private Integer isActivate; + + @ApiModelProperty(value = "是否开启会话存档 0:关闭 1:开启") + @TableField("isOpenChat") + private Integer isOpenChat; + + @TableField(exist = false) + private String departmentStr; + + @TableField(exist = false) + private Long roleId; + + @TableField("main_department") + @ApiModelProperty(value = "主部门") + private Long mainDepartment; + /** + * 部门名字 多个用,隔开 + */ + @TableField(exist = false) + private String departmentName; + + @TableField("corp_id") + @ApiModelProperty(value = "公司ID") + private String corpId; + + @TableField("ui_color") + @ApiModelProperty(value = "主题颜色") + private String uiColor; + + @TableField(exist = false) + private String externalCorpId; + + @TableField(exist = false) + private String externalUserId; + + public WeUser(String corpId, String userId) { + this.corpId = corpId; + this.userId = userId; + } + + + @JsonDeserialize(using = StringArrayDeserialize.class) + public void setDepartment(String[] department) { + this.department = department; + } + + @JsonDeserialize(using = StringArrayDeserialize.class) + public void setIsLeaderInDept(String[] isLeaderInDept) { + this.isLeaderInDept = isLeaderInDept; + } + + + @Override + public int hashCode() { + return Objects.hash( userId); + } + + /** + * 重写eq方法,若两个user corpId和userId相同,则相等 + * ( update: 由于从API获取到WeUser对象都没有corpId,且本系统处理的时候应该corpId都是一样的,所以这里改成只通过userId) + * @param o weUser对象 + * @return + */ + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + WeUser weUser = (WeUser) o; + return userId.equals(weUser.userId) ; + } + + /** + * 是否是三方应用员工 + * 即userId与externalUserId一致 + * + * @return 一致为true,否则为false + */ + public boolean isExternalUser() { + return StringUtils.equals(this.getUserId(), this.getExternalUserId()); + } + +} \ No newline at end of file diff --git a/easyink-common/src/main/java/com/easyink/common/core/elasticsearch/ElasticSearch.java b/easyink-common/src/main/java/com/easyink/common/core/elasticsearch/ElasticSearch.java new file mode 100644 index 0000000..569d9a7 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/elasticsearch/ElasticSearch.java @@ -0,0 +1,545 @@ +package com.easyink.common.core.elasticsearch; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.easyink.common.core.domain.conversation.ChatInfoVO; +import com.easyink.common.core.domain.elastic.ElasticSearchEntity; +import com.easyink.common.exception.CustomException; +import com.easyink.common.utils.StringUtils; +import com.easyink.common.utils.spring.SpringUtils; +import com.github.pagehelper.PageInfo; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.exception.ExceptionUtils; +import org.elasticsearch.action.ActionListener; +import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest; +import org.elasticsearch.action.bulk.BulkRequest; +import org.elasticsearch.action.bulk.BulkResponse; +import org.elasticsearch.action.delete.DeleteRequest; +import org.elasticsearch.action.index.IndexRequest; +import org.elasticsearch.action.search.SearchRequest; +import org.elasticsearch.action.search.SearchResponse; +import org.elasticsearch.action.support.IndicesOptions; +import org.elasticsearch.action.update.UpdateRequest; +import org.elasticsearch.client.RequestOptions; +import org.elasticsearch.client.RestHighLevelClient; +import org.elasticsearch.client.indices.CreateIndexRequest; +import org.elasticsearch.client.indices.CreateIndexResponse; +import org.elasticsearch.client.indices.GetIndexRequest; +import org.elasticsearch.common.settings.Settings; +import org.elasticsearch.common.text.Text; +import org.elasticsearch.common.xcontent.XContentBuilder; +import org.elasticsearch.common.xcontent.XContentFactory; +import org.elasticsearch.common.xcontent.XContentType; +import org.elasticsearch.index.query.QueryBuilder; +import org.elasticsearch.index.reindex.DeleteByQueryRequest; +import org.elasticsearch.search.SearchHit; +import org.elasticsearch.search.builder.SearchSourceBuilder; +import org.elasticsearch.search.fetch.subphase.highlight.HighlightField; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.io.IOException; +import java.net.ConnectException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.function.BiConsumer; +import java.util.function.Consumer; + +/** + * @author admin + * @description es工具类 + * @date 2020/12/9 14:02 + **/ +@Slf4j +@Component +public class ElasticSearch { + @Autowired + private ThreadPoolTaskExecutor threadPoolTaskExecutor; + private static final String MSG_ID = "msgid"; + + /** + * @param idxName 索引名称 + * @param idxSQL 索引描述 + * @return void + * @throws + * @author admin + * @See + * @date 2019/10/17 17:30 + * @since + */ + public void createIndex(String idxName, String idxSQL) { + try { + if (!this.indexExist(idxName)) { + return; + } + CreateIndexRequest request = new CreateIndexRequest(idxName); + buildSetting(request); + request.mapping(idxSQL, XContentType.JSON); +// request.settings() 手工指定Setting + RestHighLevelClient restHighLevelClient = SpringUtils.getBean(RestHighLevelClient.class); + CreateIndexResponse res = restHighLevelClient.indices().create(request, RequestOptions.DEFAULT); + if (!res.isAcknowledged()) { + throw new CustomException("初始化失败"); + } + } catch (Exception e) { + log.error("createIndex Exception ex:【{}】", ExceptionUtils.getStackTrace(e)); + } + } + + /** + * @param idxName 索引名称 + * @param builder 索引描述 + * @return void + * @throws + * @author admin + * @See + * @date 2019/10/17 17:30 + * @since + */ + public void createIndex2(String idxName, XContentBuilder builder) { + try { + //将索引名称改成小写 + if (StringUtils.isNotBlank(idxName)) { + idxName = idxName.toLowerCase(); + } + CreateIndexRequest request = new CreateIndexRequest(idxName); + GetIndexRequest getIndexRequest = new GetIndexRequest(idxName); + buildSetting(request); + request.mapping(builder); + RestHighLevelClient restHighLevelClient = SpringUtils.getBean(RestHighLevelClient.class); + boolean exists = restHighLevelClient.indices().exists(getIndexRequest, RequestOptions.DEFAULT); + if (!exists) { + CreateIndexResponse res = restHighLevelClient.indices().create(request, RequestOptions.DEFAULT); + if (!res.isAcknowledged()) { + log.info("初始化失败"); + } + } else { + log.info("idxName={} 已经存在,idxSql={}", idxName, builder); + } + } catch (Exception e) { + log.error("创建es索引失败:{}", ExceptionUtils.getStackTrace(e)); + } + } + + /** + * 断某个index是否存在 + * + * @param idxName index名 + * @return boolean + * @throws + * @author admin + * @See + * @date 2019/10/17 17:27 + * @since + */ + public boolean indexExist(String idxName) throws IOException { + GetIndexRequest request = new GetIndexRequest(idxName); + request.local(false); + request.humanReadable(true); + request.includeDefaults(false); + request.indicesOptions(IndicesOptions.lenientExpandOpen()); + RestHighLevelClient restHighLevelClient = SpringUtils.getBean(RestHighLevelClient.class); + return restHighLevelClient.indices().exists(request, RequestOptions.DEFAULT); + } + + /** + * 设置分片 + * + * @param request + * @return void + * @throws + * @author admin + * @See + * @date 2019/10/17 19:27 + * @since + */ + public void buildSetting(CreateIndexRequest request) { + request.settings(Settings.builder().put("index.number_of_shards", 3) + .put("index.number_of_replicas", 2)); + } + + /** + * @param idxName index + * @param entity 对象 + * @return void + * @throws + * @author admin + * @See + * @date 2019/10/17 17:27 + * @since + */ + public void insertOrUpdateOne(String idxName, ElasticSearchEntity entity) { + IndexRequest request = new IndexRequest(idxName); + log.info("Data : id={},entity={}", entity.getId(), JSON.toJSONString(entity.getData())); + request.id(entity.getId()); + request.source(entity.getData(), XContentType.JSON); + try { + RestHighLevelClient restHighLevelClient = SpringUtils.getBean(RestHighLevelClient.class); + restHighLevelClient.index(request, RequestOptions.DEFAULT); + } catch (Exception e) { + log.error("ES exception ex:{}", ExceptionUtils.getStackTrace(e)); + } + } + + + /** + * 批量插入数据 + * + * @param idxName index + * @param list 带插入列表 + * @return void + * @throws + * @author admin + * @See + * @date 2019/10/17 17:26 + * @since + */ + public void insertBatch(String idxName, List list) { + BulkRequest request = new BulkRequest(); + + list.forEach(item -> request.add(new IndexRequest(idxName).id(item.getString(MSG_ID)) + .source(item, XContentType.JSON))); + try { + if (!CollectionUtils.isEmpty(request.requests())) { + RestHighLevelClient restHighLevelClient = SpringUtils.getBean(RestHighLevelClient.class); + BulkResponse bulk = restHighLevelClient.bulk(request, RequestOptions.DEFAULT); + log.info("ES insertBatch res={}", JSON.toJSONString(bulk)); + } + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + public void insertBatchEntity(String idxName, List list) { + BulkRequest request = new BulkRequest(); + list.forEach(item -> request.add(new IndexRequest(idxName).id(item.getId()) + .source(item.getData(), XContentType.JSON))); + try { + if (!CollectionUtils.isEmpty(request.requests())) { + RestHighLevelClient restHighLevelClient = SpringUtils.getBean(RestHighLevelClient.class); + restHighLevelClient.bulk(request, RequestOptions.DEFAULT); + } + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + /** + * 异步批量插入,并执行回调方法 + * + * @param idxName + * @param list + * @param consumer + */ + public void insertBatchAsync(String idxName, List list, BiConsumer consumer, Object param) { + BulkRequest request = new BulkRequest(); + list.parallelStream().forEach(item -> request.add(new IndexRequest(idxName).id(item.getId()) + .source(item.getData(), XContentType.JSON))); + try { + if (!CollectionUtils.isEmpty(request.requests())) { + RestHighLevelClient restHighLevelClient = SpringUtils.getBean(RestHighLevelClient.class); + restHighLevelClient.bulkAsync(request, RequestOptions.DEFAULT, getActionListener(consumer, list, param)); + } + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + public void insertBatchAsync(String idxName, List list, Consumer> consumer) { + BulkRequest request = new BulkRequest(); + list.forEach(item -> request.add(new IndexRequest(idxName).id(item.getString(MSG_ID)) + .source(item, XContentType.JSON))); + try { + if (!CollectionUtils.isEmpty(request.requests())) { + RestHighLevelClient restHighLevelClient = SpringUtils.getBean(RestHighLevelClient.class); + restHighLevelClient.bulkAsync(request, RequestOptions.DEFAULT, getActionListener(consumer, list)); + } + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + public void updateBatch(String idxName, List list) { + BulkRequest request = new BulkRequest(); + list.forEach(item -> request.add( +// new UpdateRequest(idxName,"doc", item.getId()).upsert(item.getData(), XContentType.JSON)) + new UpdateRequest(idxName, item.getId()).doc(item.getData(), XContentType.JSON)) + ); + try { + if (!CollectionUtils.isEmpty(request.requests())) { + RestHighLevelClient restHighLevelClient = SpringUtils.getBean(RestHighLevelClient.class); + restHighLevelClient.bulk(request, RequestOptions.DEFAULT); + } + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + public void updateBatchByJson(String idxName, List list) { + BulkRequest request = new BulkRequest(); + + list.forEach(item -> request.add(new UpdateRequest(idxName, item.getMsgid()) + .doc(JSONObject.toJSONString(item),XContentType.JSON))); + try { + if (!CollectionUtils.isEmpty(request.requests())) { + RestHighLevelClient restHighLevelClient = SpringUtils.getBean(RestHighLevelClient.class); + restHighLevelClient.bulk(request, RequestOptions.DEFAULT); + } + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + /** + * 批量删除 + * + * @param idxName index + * @param idList 待删除列表 + * @return void + * @throws + * @author admin + * @See + * @date 2019/10/17 17:14 + * @since + */ + public void deleteBatch(String idxName, Collection idList) { + BulkRequest request = new BulkRequest(); + idList.forEach(item -> request.add(new DeleteRequest(idxName, item.toString()))); + try { + if (!CollectionUtils.isEmpty(request.requests())) { + RestHighLevelClient restHighLevelClient = SpringUtils.getBean(RestHighLevelClient.class); + restHighLevelClient.bulk(request, RequestOptions.DEFAULT); + } + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + /** + * @param idxName index + * @param builder 查询参数 + * @param c 结果类对象 + * @return java.util.List + * @throws + * @author admin + * @See + * @date 2019/10/17 17:14 + * @since + */ + public List search(String idxName, SearchSourceBuilder builder, Class c) { + try { + this.createIndex2(idxName, this.getFinanceMapping()); + } catch (IOException e) { + log.error("创建es索引异常:{}", ExceptionUtils.getStackTrace(e)); + } + SearchRequest request = new SearchRequest(idxName); + request.source(builder); + try { + RestHighLevelClient restHighLevelClient = SpringUtils.getBean(RestHighLevelClient.class); + SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT); + SearchHit[] hits = response.getHits().getHits(); + List res = new ArrayList<>(hits.length); + for (SearchHit hit : hits) { + res.add(JSON.parseObject(hit.getSourceAsString(), c)); + } + return res; + } catch (ConnectException e) { + throw new CustomException("该系统未安装会话存档工具,请联系系统管理员或客服"); + } catch (Exception e) { + log.error("es搜索出现错误:{}", ExceptionUtils.getStackTrace(e)); + throw new RuntimeException(e); + } + } + + public PageInfo searchPage(String idxName, SearchSourceBuilder builder, int pageNum, int pageSize, Class c) { + try { + this.createIndex2(idxName, this.getFinanceMapping()); + } catch (IOException e) { + log.error("创建es索引异常:{}", ExceptionUtils.getStackTrace(e)); + } + SearchRequest request = new SearchRequest(idxName); + request.source(builder); + try { + RestHighLevelClient restHighLevelClient = SpringUtils.getBean(RestHighLevelClient.class); + SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT); + int totalHits = (int) response.getHits().getTotalHits().value; + SearchHit[] hits = response.getHits().getHits(); + List res = new ArrayList<>(hits.length); + for (SearchHit hit : hits) { + //解析高亮字段 + //获取当前命中的对象的高亮的字段 + Map highlightFields = hit.getHighlightFields(); + HighlightField hghlightContent = highlightFields.get("text.content"); + StringBuilder newName = new StringBuilder(); + if (hghlightContent != null) { + //获取该高亮字段的高亮信息 + Text[] fragments = hghlightContent.getFragments(); + //将前缀、关键词、后缀进行拼接 + for (Text fragment : fragments) { + newName.append(fragment.toString()); + } + } + Map sourceAsMap = hit.getSourceAsMap(); + sourceAsMap.put("content", newName.toString()); + res.add(JSON.parseObject(JSON.toJSONString(sourceAsMap), c)); + } + // 封装分页 + PageInfo page = new PageInfo<>(); + page.setList(res); + page.setPageNum(pageNum); + page.setPageSize(pageSize); + page.setTotal(totalHits); + int pages = totalHits; + if (totalHits != 0 && totalHits % pageNum == 0) { + pages = totalHits / pageNum; + } else if (totalHits != 0 && totalHits % pageNum != 0) { + pages = (totalHits / pageNum) + 1; + } + page.setPages(pages); + page.setHasNextPage(page.getPageNum() < page.getPages()); + return page; + } catch (ConnectException e) { + throw new CustomException("该系统未安装会话存档工具,请联系系统管理员或客服"); + } catch (Exception e) { + log.error("ES查询分页异常:e:{}", ExceptionUtils.getStackTrace(e)); + throw new RuntimeException(e); + } + } + + /** + * 删除index + * + * @param idxName + * @return void + * @throws + * @author admin + * @See + * @date 2019/10/17 17:13 + * @since + */ + public void deleteIndex(String idxName) { + try { + if (!this.indexExist(idxName)) { + return; + } + RestHighLevelClient restHighLevelClient = SpringUtils.getBean(RestHighLevelClient.class); + restHighLevelClient.indices().delete(new DeleteIndexRequest(idxName), RequestOptions.DEFAULT); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + + /** + * @param idxName + * @param builder + * @return void + * @throws + * @author admin + * @See + * @date 2019/10/17 17:13 + * @since + */ + public void deleteByQuery(String idxName, QueryBuilder builder) { + DeleteByQueryRequest request = new DeleteByQueryRequest(idxName); + request.setQuery(builder); + //设置批量操作数量,最大为10000 + request.setBatchSize(10000); + request.setConflicts("proceed"); + try { + RestHighLevelClient restHighLevelClient = SpringUtils.getBean(RestHighLevelClient.class); + restHighLevelClient.deleteByQuery(request, RequestOptions.DEFAULT); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + public ActionListener getActionListener(Consumer consumer, List list) { + return new ActionListener() { + @Override + public void onResponse(Object o) { + threadPoolTaskExecutor.submit(() -> consumer.accept(list)); + } + + @Override + public void onFailure(Exception e) { + log.warn("work with es failed, exception={}", ExceptionUtils.getStackTrace(e)); + } + }; + } + + public ActionListener getActionListener(BiConsumer consumer, List list, Object param) { + return new ActionListener() { + @Override + public void onResponse(Object o) { + threadPoolTaskExecutor.submit(() -> consumer.accept(list, param)); + } + + @Override + public void onFailure(Exception e) { + log.warn("work with es failed, exception={}", ExceptionUtils.getStackTrace(e)); + } + }; + } + + public XContentBuilder getFinanceMapping() throws IOException { + String keyword = "keyword"; + String properties = "properties"; + String type = "type"; + String seq = "seq"; + String action = "action"; + String roomid = "roomid"; + String msgtime = "msgtime"; + String msgtype = "msgtype"; + String longString = "long"; + String from = "from"; + // 创建 会话文本Mapping + return XContentFactory.jsonBuilder() + .startObject() + .startObject(properties) + .startObject(MSG_ID) + .field(type, keyword) + .endObject() + .startObject(seq) + .field(type, longString) + .endObject() + .startObject(action) + .field(type, keyword) + .endObject() + .startObject(from) + .field(type, keyword) + .endObject() + .startObject(roomid) + .field(type, keyword) + .endObject() + .startObject(msgtime) + .field(type, longString) + .endObject() + .startObject(msgtype) + .field(type, keyword) + .endObject() + .endObject() + .endObject(); + } + + public void insertBatch1(String idxName, List list) { + BulkRequest request = new BulkRequest(); + + list.forEach(item -> request.add(new IndexRequest(idxName).id(item.getMsgid()) + .source(JSONObject.toJSONString(item),XContentType.JSON))); + try { + if (!CollectionUtils.isEmpty(request.requests())) { + RestHighLevelClient restHighLevelClient = SpringUtils.getBean(RestHighLevelClient.class); + BulkResponse bulk = restHighLevelClient.bulk(request, RequestOptions.DEFAULT); + log.info("ES insertBatch res={}", JSON.toJSONString(bulk)); + } + } catch (Exception e) { + throw new RuntimeException(e); + } + + } +} \ No newline at end of file diff --git a/easyink-common/src/main/java/com/easyink/common/core/page/PageDomain.java b/easyink-common/src/main/java/com/easyink/common/core/page/PageDomain.java new file mode 100644 index 0000000..51de4b8 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/page/PageDomain.java @@ -0,0 +1,69 @@ +package com.easyink.common.core.page; + +import com.easyink.common.utils.StringUtils; + +/** + * 分页数据 + * + * @author admin + */ +public class PageDomain { + /** + * 当前记录起始索引 + */ + private Integer pageNum; + + /** + * 每页显示记录数 + */ + private Integer pageSize; + + /** + * 排序列 + */ + private String orderByColumn; + + /** + * 排序的方向desc或者asc + */ + private String isAsc = "asc"; + + public String getOrderBy() { + if (StringUtils.isEmpty(orderByColumn)) { + return ""; + } + return StringUtils.toUnderScoreCase(orderByColumn) + " " + isAsc; + } + + public Integer getPageNum() { + return pageNum; + } + + public void setPageNum(Integer pageNum) { + this.pageNum = pageNum; + } + + public Integer getPageSize() { + return pageSize; + } + + public void setPageSize(Integer pageSize) { + this.pageSize = pageSize; + } + + public String getOrderByColumn() { + return orderByColumn; + } + + public void setOrderByColumn(String orderByColumn) { + this.orderByColumn = orderByColumn; + } + + public String getIsAsc() { + return isAsc; + } + + public void setIsAsc(String isAsc) { + this.isAsc = isAsc; + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/page/TableDataInfo.java b/easyink-common/src/main/java/com/easyink/common/core/page/TableDataInfo.java new file mode 100644 index 0000000..f966e0b --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/page/TableDataInfo.java @@ -0,0 +1,77 @@ +package com.easyink.common.core.page; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +import java.io.Serializable; + +/** + * 表格分页数据对象 + * + * @author admin + */ +@ApiModel("表格分页数据对象") +public class TableDataInfo implements Serializable { + private static final long serialVersionUID = 1L; + + @ApiModelProperty("总记录数") + private int total; + + @ApiModelProperty("列表数据") + private T rows; + + @ApiModelProperty("消息状态码") + private int code; + + @ApiModelProperty("消息内容") + private String msg; + + /** + * 表格数据对象 + */ + public TableDataInfo() { + } + + /** + * 分页 + * + * @param list 列表数据 + * @param total 总记录数 + */ + public TableDataInfo(T list, int total) { + this.rows = list; + this.total = total; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public T getRows() { + return rows; + } + + public void setRows(T rows) { + this.rows = rows; + } + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/page/TableSupport.java b/easyink-common/src/main/java/com/easyink/common/core/page/TableSupport.java new file mode 100644 index 0000000..a4a1867 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/page/TableSupport.java @@ -0,0 +1,58 @@ +package com.easyink.common.core.page; + +import com.easyink.common.utils.ServletUtils; +import com.easyink.common.utils.StringUtils; + +/** + * 表格数据处理 + * + * @author admin + */ +public class TableSupport { + /** + * 当前记录起始索引 + */ + public static final String PAGE_NUM = "pageNum"; + + /** + * 每页显示记录数 + */ + public static final String PAGE_SIZE = "pageSize"; + + /** + * 游标分页,lastId表示获得userId = lastId后面的员工数据 + */ + public static final String LAST_ID = "lastId"; + + /** + * 排序列 + */ + public static final String ORDER_BY_COLUMN = "orderByColumn"; + + /** + * 排序的方向 "desc" 或者 "asc". + */ + public static final String IS_ASC = "isAsc"; + + /** + * 封装分页对象 + */ + public static PageDomain getPageDomain() { + PageDomain pageDomain = new PageDomain(); + //lastId存在,则采用游标分页方式 + if(StringUtils.isNotBlank(ServletUtils.getParameter(LAST_ID))){ + //默认从第一页开始 + pageDomain.setPageNum(Integer.valueOf("1")); + }else{ + pageDomain.setPageNum(ServletUtils.getParameterToInt(PAGE_NUM)); + } + pageDomain.setPageSize(ServletUtils.getParameterToInt(PAGE_SIZE)); + pageDomain.setOrderByColumn(ServletUtils.getParameter(ORDER_BY_COLUMN)); + pageDomain.setIsAsc(ServletUtils.getParameter(IS_ASC)); + return pageDomain; + } + + public static PageDomain buildPageRequest() { + return getPageDomain(); + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/redis/RedisCache.java b/easyink-common/src/main/java/com/easyink/common/core/redis/RedisCache.java new file mode 100644 index 0000000..56332ae --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/redis/RedisCache.java @@ -0,0 +1,221 @@ +package com.easyink.common.core.redis; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.HashOperations; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.ValueOperations; +import org.springframework.stereotype.Component; + +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.TimeUnit; + +/** + * spring redis 工具类 + * + * @author admin + **/ +@SuppressWarnings(value = {"unchecked", "rawtypes"}) +@Component +public class RedisCache { + @Autowired + public RedisTemplate redisTemplate; + + /** + * 缓存基本的对象,Integer、String、实体类等 + * + * @param key 缓存的键值 + * @param value 缓存的值 + */ + public void setCacheObject(final String key, final T value) { + redisTemplate.opsForValue().set(key, value); + } + + /** + * 添加redis锁 + * @param key + * @param value + * @param expireTime + * @return + */ + public Boolean addLock(String key, String value, Long expireTime){ + return redisTemplate.opsForValue().setIfAbsent(key, value, expireTime, TimeUnit.SECONDS); + } + + /** + * 缓存基本的对象,Integer、String、实体类等 + * + * @param key 缓存的键值 + * @param value 缓存的值 + * @param timeout 时间 + * @param timeUnit 时间颗粒度 + */ + public void setCacheObject(final String key, final T value, final Integer timeout, final TimeUnit timeUnit) { + redisTemplate.opsForValue().set(key, value, timeout, timeUnit); + } + + /** + * 设置有效时间 + * + * @param key Redis键 + * @param timeout 超时时间 + * @return true=设置成功;false=设置失败 + */ + public boolean expire(final String key, final long timeout) { + return expire(key, timeout, TimeUnit.SECONDS); + } + + /** + * 设置有效时间 + * + * @param key Redis键 + * @param timeout 超时时间 + * @param unit 时间单位 + * @return true=设置成功;false=设置失败 + */ + public boolean expire(final String key, final long timeout, final TimeUnit unit) { + return redisTemplate.expire(key, timeout, unit); + } + + /** + * 获得缓存的基本对象。 + * + * @param key 缓存键值 + * @return 缓存键值对应的数据 + */ + public T getCacheObject(final String key) { + ValueOperations operation = redisTemplate.opsForValue(); + return operation.get(key); + } + + /** + * 删除单个对象 + * + * @param key + */ + public boolean deleteObject(final String key) { + return redisTemplate.delete(key); + } + + /** + * 删除集合对象 + * + * @param collection 多个对象 + * @return + */ + public long deleteObject(final Collection collection) { + return redisTemplate.delete(collection); + } + + /** + * 缓存List数据 + * + * @param key 缓存的键值 + * @param dataList 待缓存的List数据 + * @return 缓存的对象 + */ + public long setCacheList(final String key, final List dataList) { + Long count = redisTemplate.opsForList().rightPushAll(key, dataList); + return count == null ? 0 : count; + } + + /** + * 获得缓存的list对象 + * + * @param key 缓存的键值 + * @return 缓存键值对应的数据 + */ + public List getCacheList(final String key) { + return redisTemplate.opsForList().range(key, 0, -1); + } + + /** + * 缓存Set + * + * @param key 缓存键值 + * @param dataSet 缓存的数据 + * @return 缓存数据的对象 + */ + public long setCacheSet(final String key, final Set dataSet) { + Long count = redisTemplate.opsForSet().add(key, dataSet); + return count == null ? 0 : count; + } + + /** + * 获得缓存的set + * + * @param key + * @return + */ + public Set getCacheSet(final String key) { + return redisTemplate.opsForSet().members(key); + } + + /** + * 缓存Map + * + * @param key + * @param dataMap + */ + public void setCacheMap(final String key, final Map dataMap) { + if (dataMap != null) { + redisTemplate.opsForHash().putAll(key, dataMap); + } + } + + /** + * 获得缓存的Map + * + * @param key + * @return + */ + public Map getCacheMap(final String key) { + return redisTemplate.opsForHash().entries(key); + } + + /** + * 往Hash中存入数据 + * + * @param key Redis键 + * @param hKey Hash键 + * @param value 值 + */ + public void setCacheMapValue(final String key, final String hKey, final T value) { + redisTemplate.opsForHash().put(key, hKey, value); + } + + /** + * 获取Hash中的数据 + * + * @param key Redis键 + * @param hKey Hash键 + * @return Hash中的对象 + */ + public T getCacheMapValue(final String key, final String hKey) { + HashOperations opsForHash = redisTemplate.opsForHash(); + return opsForHash.get(key, hKey); + } + + /** + * 获取多个Hash中的数据 + * + * @param key Redis键 + * @param hKeys Hash键集合 + * @return Hash对象集合 + */ + public List getMultiCacheMapValue(final String key, final Collection hKeys) { + return redisTemplate.opsForHash().multiGet(key, hKeys); + } + + /** + * 获得缓存的基本对象列表 + * + * @param pattern 字符串前缀 + * @return 对象列表 + */ + public Collection keys(final String pattern) { + return redisTemplate.keys(pattern); + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/text/CharsetKit.java b/easyink-common/src/main/java/com/easyink/common/core/text/CharsetKit.java new file mode 100644 index 0000000..6110074 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/text/CharsetKit.java @@ -0,0 +1,93 @@ +package com.easyink.common.core.text; + +import com.easyink.common.utils.StringUtils; + +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; + +/** + * 字符集工具类 + * + * @author admin + */ +public class CharsetKit { + /** + * ISO-8859-1 + */ + public static final String ISO_8859_1 = "ISO-8859-1"; + /** + * UTF-8 + */ + public static final String UTF_8 = "UTF-8"; + /** + * GBK + */ + public static final String GBK = "GBK"; + + /** + * ISO-8859-1 + */ + public static final Charset CHARSET_ISO_8859_1 = StandardCharsets.ISO_8859_1; + /** + * UTF-8 + */ + public static final Charset CHARSET_UTF_8 = StandardCharsets.UTF_8; + /** + * GBK + */ + public static final Charset CHARSET_GBK = Charset.forName(GBK); + + private CharsetKit(){} + + /** + * 转换为Charset对象 + * + * @param charset 字符集,为空则返回默认字符集 + * @return Charset + */ + public static Charset charset(String charset) { + return StringUtils.isEmpty(charset) ? Charset.defaultCharset() : Charset.forName(charset); + } + + /** + * 转换字符串的字符集编码 + * + * @param source 字符串 + * @param srcCharset 源字符集,默认ISO-8859-1 + * @param destCharset 目标字符集,默认UTF-8 + * @return 转换后的字符集 + */ + public static String convert(String source, String srcCharset, String destCharset) { + return convert(source, Charset.forName(srcCharset), Charset.forName(destCharset)); + } + + /** + * 转换字符串的字符集编码 + * + * @param source 字符串 + * @param srcCharset 源字符集,默认ISO-8859-1 + * @param destCharset 目标字符集,默认UTF-8 + * @return 转换后的字符集 + */ + public static String convert(String source, Charset srcCharset, Charset destCharset) { + if (null == srcCharset) { + srcCharset = StandardCharsets.ISO_8859_1; + } + + if (null == destCharset) { + srcCharset = StandardCharsets.UTF_8; + } + + if (StringUtils.isEmpty(source) || srcCharset.equals(destCharset)) { + return source; + } + return new String(source.getBytes(srcCharset), destCharset); + } + + /** + * @return 系统字符集编码 + */ + public static String systemCharset() { + return Charset.defaultCharset().name(); + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/text/Convert.java b/easyink-common/src/main/java/com/easyink/common/core/text/Convert.java new file mode 100644 index 0000000..0b83b66 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/text/Convert.java @@ -0,0 +1,850 @@ +package com.easyink.common.core.text; + +import com.easyink.common.utils.StringUtils; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.nio.ByteBuffer; +import java.nio.charset.Charset; +import java.text.NumberFormat; +import java.util.Set; + +/** + * 类型转换器 + * + * @author admin + */ +public class Convert { + private Convert(){} + /** + * 转换为字符串
+ * 如果给定的值为null,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static String toStr(Object value, String defaultValue) { + if (null == value) { + return defaultValue; + } + if (value instanceof String) { + return (String) value; + } + return value.toString(); + } + + /** + * 转换为字符串
+ * 如果给定的值为null,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static String toStr(Object value) { + return toStr(value, null); + } + + /** + * 转换为字符
+ * 如果给定的值为null,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Character toChar(Object value, Character defaultValue) { + if (null == value) { + return defaultValue; + } + if (value instanceof Character) { + return (Character) value; + } + + final String valueStr = toStr(value, null); + return StringUtils.isEmpty(valueStr) ? defaultValue : valueStr.charAt(0); + } + + /** + * 转换为字符
+ * 如果给定的值为null,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Character toChar(Object value) { + return toChar(value, null); + } + + /** + * 转换为byte
+ * 如果给定的值为null,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Byte toByte(Object value, Byte defaultValue) { + if (value == null) { + return defaultValue; + } + if (value instanceof Byte) { + return (Byte) value; + } + if (value instanceof Number) { + return ((Number) value).byteValue(); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) { + return defaultValue; + } + try { + return Byte.parseByte(valueStr); + } catch (Exception e) { + return defaultValue; + } + } + + /** + * 转换为byte
+ * 如果给定的值为null,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Byte toByte(Object value) { + return toByte(value, null); + } + + /** + * 转换为Short
+ * 如果给定的值为null,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Short toShort(Object value, Short defaultValue) { + if (value == null) { + return defaultValue; + } + if (value instanceof Short) { + return (Short) value; + } + if (value instanceof Number) { + return ((Number) value).shortValue(); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) { + return defaultValue; + } + try { + return Short.parseShort(valueStr.trim()); + } catch (Exception e) { + return defaultValue; + } + } + + /** + * 转换为Short
+ * 如果给定的值为null,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Short toShort(Object value) { + return toShort(value, null); + } + + /** + * 转换为Number
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Number toNumber(Object value, Number defaultValue) { + if (value == null) { + return defaultValue; + } + if (value instanceof Number) { + return (Number) value; + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) { + return defaultValue; + } + try { + return NumberFormat.getInstance().parse(valueStr); + } catch (Exception e) { + return defaultValue; + } + } + + /** + * 转换为Number
+ * 如果给定的值为空,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Number toNumber(Object value) { + return toNumber(value, null); + } + + /** + * 转换为int
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Integer toInt(Object value, Integer defaultValue) { + if (value == null) { + return defaultValue; + } + if (value instanceof Integer) { + return (Integer) value; + } + if (value instanceof Number) { + return ((Number) value).intValue(); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) { + return defaultValue; + } + try { + return Integer.parseInt(valueStr.trim()); + } catch (Exception e) { + return defaultValue; + } + } + + /** + * 转换为int
+ * 如果给定的值为null,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Integer toInt(Object value) { + return toInt(value, null); + } + + /** + * 转换为Integer数组
+ * + * @param str 被转换的值 + * @return 结果 + */ + public static Integer[] toIntArray(String str) { + return toIntArray(",", str); + } + + /** + * 转换为Long数组
+ * + * @param str 被转换的值 + * @return 结果 + */ + public static Long[] toLongArray(String str) { + return toLongArray(",", str); + } + + /** + * 转换为Integer数组
+ * + * @param split 分隔符 + * @param split 被转换的值 + * @return 结果 + */ + public static Integer[] toIntArray(String split, String str) { + if (StringUtils.isEmpty(str)) { + return new Integer[]{}; + } + String[] arr = str.split(split); + final Integer[] ints = new Integer[arr.length]; + for (int i = 0; i < arr.length; i++) { + final Integer v = toInt(arr[i], 0); + ints[i] = v; + } + return ints; + } + + /** + * 转换为Long数组
+ * + * @param split 分隔符 + * @param str 被转换的值 + * @return 结果 + */ + public static Long[] toLongArray(String split, String str) { + if (StringUtils.isEmpty(str)) { + return new Long[]{}; + } + String[] arr = str.split(split); + final Long[] longs = new Long[arr.length]; + for (int i = 0; i < arr.length; i++) { + final Long v = toLong(arr[i], null); + longs[i] = v; + } + return longs; + } + + /** + * 转换为String数组
+ * + * @param str 被转换的值 + * @return 结果 + */ + public static String[] toStrArray(String str) { + return toStrArray(",", str); + } + + /** + * 转换为String数组
+ * + * @param split 分隔符 + * @param split 被转换的值 + * @return 结果 + */ + public static String[] toStrArray(String split, String str) { + return str.split(split); + } + + /** + * 转换为long
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Long toLong(Object value, Long defaultValue) { + if (value == null) { + return defaultValue; + } + if (value instanceof Long) { + return (Long) value; + } + if (value instanceof Number) { + return ((Number) value).longValue(); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) { + return defaultValue; + } + try { + // 支持科学计数法 + return new BigDecimal(valueStr.trim()).longValue(); + } catch (Exception e) { + return defaultValue; + } + } + + /** + * 转换为long
+ * 如果给定的值为null,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Long toLong(Object value) { + return toLong(value, null); + } + + /** + * 转换为double
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Double toDouble(Object value, Double defaultValue) { + if (value == null) { + return defaultValue; + } + if (value instanceof Double) { + return (Double) value; + } + if (value instanceof Number) { + return ((Number) value).doubleValue(); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) { + return defaultValue; + } + try { + // 支持科学计数法 + return new BigDecimal(valueStr.trim()).doubleValue(); + } catch (Exception e) { + return defaultValue; + } + } + + /** + * 转换为double
+ * 如果给定的值为空,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Double toDouble(Object value) { + return toDouble(value, null); + } + + /** + * 转换为Float
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Float toFloat(Object value, Float defaultValue) { + if (value == null) { + return defaultValue; + } + if (value instanceof Float) { + return (Float) value; + } + if (value instanceof Number) { + return ((Number) value).floatValue(); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) { + return defaultValue; + } + try { + return Float.parseFloat(valueStr.trim()); + } catch (Exception e) { + return defaultValue; + } + } + + /** + * 转换为Float
+ * 如果给定的值为空,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Float toFloat(Object value) { + return toFloat(value, null); + } + + /** + * 转换为boolean
+ * String支持的值为:true、false、yes、ok、no,1,0 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Boolean toBool(Object value, Boolean defaultValue) { + if (value == null) { + return defaultValue; + } + if (value instanceof Boolean) { + return (Boolean) value; + } + String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) { + return defaultValue; + } + valueStr = valueStr.trim().toLowerCase(); + switch (valueStr) { + case "true": + return true; + case "false": + return false; + case "yes": + return true; + case "ok": + return true; + case "no": + return false; + case "1": + return true; + case "0": + return false; + default: + return defaultValue; + } + } + + /** + * 转换为boolean
+ * 如果给定的值为空,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Boolean toBool(Object value) { + return toBool(value, null); + } + + /** + * 转换为Enum对象
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * + * @param clazz Enum的Class + * @param value 值 + * @param defaultValue 默认值 + * @return Enum + */ + public static > E toEnum(Class clazz, Object value, E defaultValue) { + if (value == null) { + return defaultValue; + } + if (clazz.isAssignableFrom(value.getClass())) { + @SuppressWarnings("unchecked") + E myE = (E) value; + return myE; + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) { + return defaultValue; + } + try { + return Enum.valueOf(clazz, valueStr); + } catch (Exception e) { + return defaultValue; + } + } + + /** + * 转换为Enum对象
+ * 如果给定的值为空,或者转换失败,返回默认值null
+ * + * @param clazz Enum的Class + * @param value 值 + * @return Enum + */ + public static > E toEnum(Class clazz, Object value) { + return toEnum(clazz, value, null); + } + + /** + * 转换为BigInteger
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static BigInteger toBigInteger(Object value, BigInteger defaultValue) { + if (value == null) { + return defaultValue; + } + if (value instanceof BigInteger) { + return (BigInteger) value; + } + if (value instanceof Long) { + return BigInteger.valueOf((Long) value); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) { + return defaultValue; + } + try { + return new BigInteger(valueStr); + } catch (Exception e) { + return defaultValue; + } + } + + /** + * 转换为BigInteger
+ * 如果给定的值为空,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static BigInteger toBigInteger(Object value) { + return toBigInteger(value, null); + } + + /** + * 转换为BigDecimal
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static BigDecimal toBigDecimal(Object value, BigDecimal defaultValue) { + if (value == null) { + return defaultValue; + } + if (value instanceof BigDecimal) { + return (BigDecimal) value; + } + if (value instanceof Long) { + return new BigDecimal((Long) value); + } + if (value instanceof Double) { + return BigDecimal.valueOf((Double) value); + } + if (value instanceof Integer) { + return new BigDecimal((Integer) value); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) { + return defaultValue; + } + try { + return new BigDecimal(valueStr); + } catch (Exception e) { + return defaultValue; + } + } + + /** + * 转换为BigDecimal
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static BigDecimal toBigDecimal(Object value) { + return toBigDecimal(value, null); + } + + /** + * 将对象转为字符串
+ * 1、Byte数组和ByteBuffer会被转换为对应字符串的数组 2、对象数组会调用Arrays.toString方法 + * + * @param obj 对象 + * @return 字符串 + */ + public static String utf8Str(Object obj) { + return str(obj, CharsetKit.CHARSET_UTF_8); + } + + /** + * 将对象转为字符串
+ * 1、Byte数组和ByteBuffer会被转换为对应字符串的数组 2、对象数组会调用Arrays.toString方法 + * + * @param obj 对象 + * @param charsetName 字符集 + * @return 字符串 + */ + public static String str(Object obj, String charsetName) { + return str(obj, Charset.forName(charsetName)); + } + + /** + * 将对象转为字符串
+ * 1、Byte数组和ByteBuffer会被转换为对应字符串的数组 2、对象数组会调用Arrays.toString方法 + * + * @param obj 对象 + * @param charset 字符集 + * @return 字符串 + */ + public static String str(Object obj, Charset charset) { + if (null == obj) { + return null; + } + + if (obj instanceof String) { + return (String) obj; + } else if (obj instanceof byte[] || obj instanceof Byte[]) { + return str(obj, charset); + } else if (obj instanceof ByteBuffer) { + return str((ByteBuffer) obj, charset); + } + return obj.toString(); + } + + /** + * 将byte数组转为字符串 + * + * @param bytes byte数组 + * @param charset 字符集 + * @return 字符串 + */ + public static String str(byte[] bytes, String charset) { + return str(bytes, StringUtils.isEmpty(charset) ? Charset.defaultCharset() : Charset.forName(charset)); + } + + /** + * 解码字节码 + * + * @param data 字符串 + * @param charset 字符集,如果此字段为空,则解码的结果取决于平台 + * @return 解码后的字符串 + */ + public static String str(byte[] data, Charset charset) { + if (data == null) { + return null; + } + + if (null == charset) { + return new String(data); + } + return new String(data, charset); + } + + /** + * 将编码的byteBuffer数据转换为字符串 + * + * @param data 数据 + * @param charset 字符集,如果为空使用当前系统字符集 + * @return 字符串 + */ + public static String str(ByteBuffer data, String charset) { + if (data == null) { + return null; + } + + return str(data, Charset.forName(charset)); + } + + /** + * 将编码的byteBuffer数据转换为字符串 + * + * @param data 数据 + * @param charset 字符集,如果为空使用当前系统字符集 + * @return 字符串 + */ + public static String str(ByteBuffer data, Charset charset) { + if (null == charset) { + charset = Charset.defaultCharset(); + } + return charset.decode(data).toString(); + } + + // ----------------------------------------------------------------------- 全角半角转换 + + /** + * 半角转全角 + * + * @param input String. + * @return 全角字符串. + */ + public static String toSBC(String input) { + return toSBC(input, null); + } + + /** + * 半角转全角 + * + * @param input String + * @param notConvertSet 不替换的字符集合 + * @return 全角字符串. + */ + public static String toSBC(String input, Set notConvertSet) { + char[] c = input.toCharArray(); + for (int i = 0; i < c.length; i++) { + if (null != notConvertSet && notConvertSet.contains(c[i])) { + // 跳过不替换的字符 + continue; + } + + if (c[i] == ' ') { + c[i] = '\u3000'; + } else if (c[i] < '\177') { + c[i] = (char) (c[i] + 65248); + + } + } + return new String(c); + } + + /** + * 全角转半角 + * + * @param input String. + * @return 半角字符串 + */ + public static String toDBC(String input) { + return toDBC(input, null); + } + + /** + * 替换全角为半角 + * + * @param text 文本 + * @param notConvertSet 不替换的字符集合 + * @return 替换后的字符 + */ + public static String toDBC(String text, Set notConvertSet) { + char[] c = text.toCharArray(); + for (int i = 0; i < c.length; i++) { + if (null != notConvertSet && notConvertSet.contains(c[i])) { + // 跳过不替换的字符 + continue; + } + + if (c[i] == '\u3000') { + c[i] = ' '; + } else if (c[i] > '\uFF00' && c[i] < '\uFF5F') { + c[i] = (char) (c[i] - 65248); + } + } + return new String(c); + } + + /** + * 数字金额大写转换 先写个完整的然后将如零拾替换成零 + * + * @param n 数字 + * @return 中文大写数字 + */ + public static String digitUppercase(double n) { + String[] fraction = {"角", "分"}; + String[] digit = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"}; + String[][] unit = {{"元", "万", "亿"}, {"", "拾", "佰", "仟"}}; + + String head = n < 0 ? "负" : ""; + n = Math.abs(n); + + String s = ""; + String replaceString = "(零.)+"; + for (int i = 0; i < fraction.length; i++) { + s += (digit[(int) (Math.floor(n * 10 * Math.pow(10, i)) % 10)] + fraction[i]).replaceAll(replaceString, ""); + } + if (s.length() < 1) { + s = "整"; + } + int integerPart = (int) Math.floor(n); + + for (int i = 0; i < unit[0].length && integerPart > 0; i++) { + String p = ""; + for (int j = 0; j < unit[1].length && n > 0; j++) { + p = digit[integerPart % 10] + unit[1][j] + p; + integerPart = integerPart / 10; + } + s = p.replaceAll("(零.)*零$", "").replaceAll("^$", "零") + unit[0][i] + s; + } + return head + s.replaceAll("(零.)*零元", "元").replaceFirst(replaceString, "").replaceAll(replaceString, "零").replaceAll("^整$", "零元整"); + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/core/text/StrFormatter.java b/easyink-common/src/main/java/com/easyink/common/core/text/StrFormatter.java new file mode 100644 index 0000000..3a77e7e --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/core/text/StrFormatter.java @@ -0,0 +1,76 @@ +package com.easyink.common.core.text; + +import com.easyink.common.utils.StringUtils; + +/** + * 字符串格式化 + * + * @author admin + */ +public class StrFormatter { + public static final String EMPTY_JSON = "{}"; + public static final char C_BACKSLASH = '\\'; + public static final char C_DELIM_START = '{'; + public static final char C_DELIM_END = '}'; + + /** + * 格式化字符串
+ * 此方法只是简单将占位符 {} 按照顺序替换为参数
+ * 如果想输出 {} 使用 \\转义 { 即可,如果想输出 {} 之前的 \ 使用双转义符 \\\\ 即可
+ * 例:
+ * 通常使用:format("this is {} for {}", "a", "b") -> this is a for b
+ * 转义{}: format("this is \\{} for {}", "a", "b") -> this is \{} for a
+ * 转义\: format("this is \\\\{} for {}", "a", "b") -> this is \a for b
+ * + * @param strPattern 字符串模板 + * @param argArray 参数列表 + * @return 结果 + */ + public static String format(final String strPattern, final Object... argArray) { + if (StringUtils.isEmpty(strPattern) || StringUtils.isEmpty(argArray)) { + return strPattern; + } + final int strPatternLength = strPattern.length(); + + // 初始化定义好的长度以获得更好的性能 + StringBuilder sbuf = new StringBuilder(strPatternLength + 50); + + int handledPosition = 0; + int delimIndex;// 占位符所在位置 + for (int argIndex = 0; argIndex < argArray.length; argIndex++) { + delimIndex = strPattern.indexOf(EMPTY_JSON, handledPosition); + if (delimIndex == -1) { + if (handledPosition == 0) { + return strPattern; + } else { // 字符串模板剩余部分不再包含占位符,加入剩余部分后返回结果 + sbuf.append(strPattern, handledPosition, strPatternLength); + return sbuf.toString(); + } + } else { + if (delimIndex > 0 && strPattern.charAt(delimIndex - 1) == C_BACKSLASH) { + if (delimIndex > 1 && strPattern.charAt(delimIndex - 2) == C_BACKSLASH) { + // 转义符之前还有一个转义符,占位符依旧有效 + sbuf.append(strPattern, handledPosition, delimIndex - 1); + sbuf.append(Convert.utf8Str(argArray[argIndex])); + handledPosition = delimIndex + 2; + } else { + // 占位符被转义 + argIndex--; + sbuf.append(strPattern, handledPosition, delimIndex - 1); + sbuf.append(C_DELIM_START); + handledPosition = delimIndex + 1; + } + } else { + // 正常占位符 + sbuf.append(strPattern, handledPosition, delimIndex); + sbuf.append(Convert.utf8Str(argArray[argIndex])); + handledPosition = delimIndex + 2; + } + } + } + // 加入最后一个占位符后所有的字符 + sbuf.append(strPattern, handledPosition, strPattern.length()); + + return sbuf.toString(); + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/enums/AddWayEnum.java b/easyink-common/src/main/java/com/easyink/common/enums/AddWayEnum.java new file mode 100644 index 0000000..69433e3 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/enums/AddWayEnum.java @@ -0,0 +1,36 @@ +package com.easyink.common.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 类名: 客户来源枚举 + * + * @author : silver_chariot + * @date : 2021/12/3 10:55 + */ +@AllArgsConstructor +@Getter +public enum AddWayEnum { + + UN_KNOWN(0, "未知来源"), + SCAN(1, "扫描二维码"), + MOBILE(2, "搜索手机号"), + CARD(3, "名片分享"), + MOBILE_CONTACT(5, "手机通讯录"), + WE_CHAT_CONTACT(6, "微信联系人"), + WECHAT(6, "微信联系人"), + THIRD(8, "安装第三方应用时自动添加的客服人员"), + EMAIL(9, "搜索邮箱"), + VIDEO_OFFICIAL(10, "视频号主页添加"), + INNER_USER_SHARE(201, "内部成员共享"), + TRANSFER(202, "管理员/负责人分配"); + /** + * 状态码 + */ + public final Integer code; + /** + * 含义 + */ + private final String desc; +} diff --git a/easyink-common/src/main/java/com/easyink/common/enums/AppIdEnum.java b/easyink-common/src/main/java/com/easyink/common/enums/AppIdEnum.java new file mode 100644 index 0000000..6ca707f --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/enums/AppIdEnum.java @@ -0,0 +1,45 @@ +package com.easyink.common.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 类名: 应用id枚举 + * + * @author 佚名 + * @date 2021/12/13 18:05 + */ +@Getter +@AllArgsConstructor +public enum AppIdEnum { + /** + * 无应用 + */ + NO_APP(0, "无应用"), + /** + * 企微plus + */ + WECHAT_SERVICE_PLUS(1, "企微plus"), + /** + * 韵达 + */ + YIGE_ORDER(2, "壹鸽快递工单助手"), + ; + /** + * 状态码 + */ + public final Integer code; + /** + * 含义 + */ + private final String desc; + + public static AppIdEnum getEnum(Integer code) { + for (AppIdEnum appIdEnum : values()) { + if (appIdEnum.getCode().equals(code)) { + return appIdEnum; + } + } + return NO_APP; + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/enums/AttachmentTypeEnum.java b/easyink-common/src/main/java/com/easyink/common/enums/AttachmentTypeEnum.java new file mode 100644 index 0000000..a5472de --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/enums/AttachmentTypeEnum.java @@ -0,0 +1,121 @@ +package com.easyink.common.enums; + + +import com.easyink.common.utils.StringUtils; + +/** + * 公共素材类型枚举 + * + * @author tigger + * 2022/1/5 9:45 + **/ +public enum AttachmentTypeEnum { + + /** + * 文本素材 + */ + TEXT(0, "text"), + /** + * 图片素材 + */ + IMAGE(1, "image"), + /** + * 链接素材 + */ + LINK(2, "link"), + /** + * 小程序素材 + */ + MINIPROGRAM(3, "miniprogram"), + /** + * 文件素材 + */ + FILE(4, "file"), + /** + * 视频媒体文件素材 + */ + VIDEO(5, "video"), + + /** + * 雷达链接 + */ + RADAR(7, "radar"); + + /** + * 素材类型 + */ + private Integer messageType; + + /** + * 数据值 + */ + private String typeStr; + + public Integer getMessageType() { + return messageType; + } + + public String getTypeStr() { + return typeStr; + } + + AttachmentTypeEnum(Integer messageType, String typeStr) { + this.messageType = messageType; + this.typeStr = typeStr; + } + + /** + * 根据messageType获取枚举 + */ + public static AttachmentTypeEnum getByMessageType(Integer type) { + if (type == null) { + return null; + } + for (AttachmentTypeEnum value : values()) { + if (value.getMessageType().equals(type)) { + return value; + } + } + return null; + } + public static AttachmentTypeEnum getByTypeStr(String typeStr) { + if (StringUtils.isEmpty(typeStr)) { + return null; + } + for (AttachmentTypeEnum value : values()) { + if (value.getTypeStr().equals(typeStr)) { + return value; + } + } + return null; + } + + /** + * 将{@link GroupMessageType} 的素材枚举类型映射为为欢迎语素材枚举 {@link AttachmentTypeEnum} + * 素材类型:0海报、1语音、2视频、3普通文件、4文本、5链接、6小程序 + */ + public static AttachmentTypeEnum mappingFromGroupMessageType(Integer typeNum) { + if(typeNum == null){ + return null; + } + switch (typeNum) { + case 0: + return IMAGE; + case 2: + return VIDEO; + case 3: + return FILE; + case 4: + return TEXT; + case 5: + return LINK; + case 6: + return MINIPROGRAM; + case 7: + return RADAR; + default: + return null; + } + } + +} diff --git a/easyink-common/src/main/java/com/easyink/common/enums/BaseStatusEnum.java b/easyink-common/src/main/java/com/easyink/common/enums/BaseStatusEnum.java new file mode 100644 index 0000000..f0bbfc0 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/enums/BaseStatusEnum.java @@ -0,0 +1,35 @@ +package com.easyink.common.enums; + +/** + * 基础的0,1状态枚举类 + * + * @author 佚名 + * @ClassName BaseStatusEnum + * @date 2021/8/10 16:51 + * @Version 1.0 + */ +public enum BaseStatusEnum { + /** + * 开启 + */ + OPEN(1,"开启"), + + /** + * 关闭 + */ + CLOSE(0,"关闭"); + private final Integer code; + private final String info; + + BaseStatusEnum(Integer code, String info) { + this.code = code; + this.info = info; + } + + public Integer getCode() { + return code; + } + + public String getInfo() { + return info; + }} diff --git a/easyink-common/src/main/java/com/easyink/common/enums/BatchUpdateUserInfoTypeEnum.java b/easyink-common/src/main/java/com/easyink/common/enums/BatchUpdateUserInfoTypeEnum.java new file mode 100644 index 0000000..a473d53 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/enums/BatchUpdateUserInfoTypeEnum.java @@ -0,0 +1,25 @@ +package com.easyink.common.enums; + +import lombok.Getter; + +/** + * 类名: BatchUpdateUserInfoTypeEnum 批量修改员工信息的类型枚举值定义 + * + * @author Society my sister Li + * @date 2021-11-16 17:14 + */ +public enum BatchUpdateUserInfoTypeEnum { + + //角色 + ROLE(1), + //职务 + POSITION(2), + //所在部门 + DEPARTMENT(3); + @Getter + private Integer type; + + BatchUpdateUserInfoTypeEnum(Integer type) { + this.type = type; + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/enums/BusinessStatus.java b/easyink-common/src/main/java/com/easyink/common/enums/BusinessStatus.java new file mode 100644 index 0000000..087e11c --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/enums/BusinessStatus.java @@ -0,0 +1,18 @@ +package com.easyink.common.enums; + +/** + * 操作状态 + * + * @author admin + */ +public enum BusinessStatus { + /** + * 成功 + */ + SUCCESS, + + /** + * 失败 + */ + FAIL, +} diff --git a/easyink-common/src/main/java/com/easyink/common/enums/BusinessType.java b/easyink-common/src/main/java/com/easyink/common/enums/BusinessType.java new file mode 100644 index 0000000..dc2c9f3 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/enums/BusinessType.java @@ -0,0 +1,58 @@ +package com.easyink.common.enums; + +/** + * 业务操作类型 + * + * @author admin + */ +public enum BusinessType { + /** + * 其它 + */ + OTHER, + + /** + * 新增 + */ + INSERT, + + /** + * 修改 + */ + UPDATE, + + /** + * 删除 + */ + DELETE, + + /** + * 授权 + */ + GRANT, + + /** + * 导出 + */ + EXPORT, + + /** + * 导入 + */ + IMPORT, + + /** + * 强退 + */ + FORCE, + + /** + * 生成代码 + */ + GENCODE, + + /** + * 清空数据 + */ + CLEAN, +} diff --git a/easyink-common/src/main/java/com/easyink/common/enums/CallSourceEnum.java b/easyink-common/src/main/java/com/easyink/common/enums/CallSourceEnum.java new file mode 100644 index 0000000..3bd55b7 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/enums/CallSourceEnum.java @@ -0,0 +1,26 @@ +package com.easyink.common.enums; + +import lombok.Getter; + +/** + * 区分接口调用来源 + * + * @author Society my sister Li + * @date 2021/9/22 + */ +public enum CallSourceEnum { + + //系统调用 + SYSTEM("0"), + + //客户端调用 + H5("1"); + + @Getter + private String source; + + CallSourceEnum(String source) { + this.source = source; + } + +} diff --git a/easyink-common/src/main/java/com/easyink/common/enums/CallbackEventUpdateDetail.java b/easyink-common/src/main/java/com/easyink/common/enums/CallbackEventUpdateDetail.java new file mode 100644 index 0000000..967d94d --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/enums/CallbackEventUpdateDetail.java @@ -0,0 +1,27 @@ +package com.easyink.common.enums; + +import lombok.Getter; + +/** + * 客户群变更时间的回调参数 UpdateDetail + * 变更详情。目前有以下几种: + * add_member : 成员入群 + * del_member : 成员退群 + * change_owner : 群主变更 + * change_name : 群名变更 + * change_notice : 群公告变更 + */ +@Getter +public enum CallbackEventUpdateDetail { + ADD_MEMBER("add_member"), + DEL_MEMBER("del_member"), + CHANGE_OWNER("change_owner"), + CHANGE_NAME("change_name"), + CHANGE_NOTICE("change_notice"); + + private final String type; + + CallbackEventUpdateDetail(String type) { + this.type = type; + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/enums/ChatType.java b/easyink-common/src/main/java/com/easyink/common/enums/ChatType.java new file mode 100644 index 0000000..814e800 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/enums/ChatType.java @@ -0,0 +1,37 @@ +package com.easyink.common.enums; + +import lombok.Getter; + +import java.util.stream.Stream; + +/** + * 群发任务的类型,默认为single,表示发送给客户,group表示发送给客户群 + */ +@Getter +public enum ChatType { + + /** + * 发给客户 + */ + SINGLE("single", "0"), + + /** + * 发给客户群 + */ + GROUP("group", "1"); + + private String name; + + private String type; + + + ChatType(String name, String type) { + this.name = name; + this.type = type; + } + + public static ChatType of(String type) { + return Stream.of(values()).filter(s -> type.equals(s.getType())).findFirst().orElseGet(null); + } + +} diff --git a/easyink-common/src/main/java/com/easyink/common/enums/CommunityTaskType.java b/easyink-common/src/main/java/com/easyink/common/enums/CommunityTaskType.java new file mode 100644 index 0000000..512db81 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/enums/CommunityTaskType.java @@ -0,0 +1,33 @@ +package com.easyink.common.enums; + +import lombok.Getter; + +/** + * 社群运营H5列表页数据类型 + * + * @author admin + * @Date 2021/3/24 11:02 + */ +@Getter +public enum CommunityTaskType { + + TAG(1, "老客标签建群"), + + SOP(2, "(旧)群sop"), + + GROUP_SOP(3,"改造后的群sop"), + + CUSTOMER_SOP(4,"客户SOP") + + ; + + + private final String name; + + private final Integer type; + + CommunityTaskType(Integer type, String name) { + this.name = name; + this.type = type; + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/enums/CustomerExtendPropertyEnum.java b/easyink-common/src/main/java/com/easyink/common/enums/CustomerExtendPropertyEnum.java new file mode 100644 index 0000000..66c5b3c --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/enums/CustomerExtendPropertyEnum.java @@ -0,0 +1,99 @@ +package com.easyink.common.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 类名: 客户扩展属性类型枚举 + * + * @author : silver_chariot + * @date : 2021/11/10 17:49 + */ +@AllArgsConstructor +public enum CustomerExtendPropertyEnum { + + SYS_DEFAULT(1, "系统默认字段", CustomerTrajectoryEnums.SubType.EDIT_CHOICE), + + SINGLE_ROW(2, "单行文本", CustomerTrajectoryEnums.SubType.EDIT_CHOICE), + + MULTI_ROWS(3, "多行文本", CustomerTrajectoryEnums.SubType.EDIT_CHOICE), + + RADIO_BOX(4, "单选框", CustomerTrajectoryEnums.SubType.EDIT_MULTI), + + CHECK_BOX(5, "多选框", CustomerTrajectoryEnums.SubType.EDIT_MULTI), + + COMBO_BOX(6, "下拉框", CustomerTrajectoryEnums.SubType.EDIT_MULTI), + + DATE(7, "日期", CustomerTrajectoryEnums.SubType.EDIT_CHOICE), + + PIC(8, "图片", CustomerTrajectoryEnums.SubType.EDIT_PIC), + + FILE(9, "文件", CustomerTrajectoryEnums.SubType.EDIT_FILE); + /** + * 类型 + */ + @Getter + private final Integer type; + /** + * 描述 + */ + @Getter + private final String desc; + /** + * 编辑该类型属性对应的操作子类型枚举 + */ + @Getter + private final CustomerTrajectoryEnums.SubType oprSubType; + + /** + * 判断是否是多选属性 + * + * @param type 属性类型值 + * @return true or false + */ + public static boolean isMultiple(Integer type) { + if (type == null) { + return false; + } + return type.equals(RADIO_BOX.getType()) + || type.equals(CHECK_BOX.getType()) + || type.equals(COMBO_BOX.getType()); + + } + + /** + * 根据type获取扩展属性类型 + * + * @param type 类型 + * @return 对应的枚举 + */ + public static CustomerExtendPropertyEnum getByType(Integer type) { + return Arrays.stream(values()).filter(a -> a.type.equals(type)).findFirst().orElse(null); + } + + /** + * 获取所有多选选项类型的集合 + * + * @return 多选字段类型ID集合 + */ + public static List multipleTypeList() { + return Arrays.stream(values()).filter(a -> isMultiple(a.getType())).map(CustomerExtendPropertyEnum::getType).collect(Collectors.toList()); + } + + /** + * 根据type判断是否是文件或者图片 + * + * @param type 类型 + * @return true or false + */ + public static boolean isFileOrPic(Integer type) { + if (type == null) { + return false; + } + return type.equals(PIC.getType()) || type.equals(FILE.getType()); + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/enums/CustomerStatusEnum.java b/easyink-common/src/main/java/com/easyink/common/enums/CustomerStatusEnum.java new file mode 100644 index 0000000..eb8cb8b --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/enums/CustomerStatusEnum.java @@ -0,0 +1,51 @@ +package com.easyink.common.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 类名: 客户状态枚举 + * + * @author : silver_chariot + * @date : 2021/11/23 10:48 + */ +@AllArgsConstructor +@Getter +public enum CustomerStatusEnum { + /** + * 正常 + */ + NORMAL(0), + /** + * 已流失 + */ + DRAIN(1), + /** + * 员工删除客户 + */ + DELETE(2), + /** + * 待继承 + */ + TO_BE_TRANSFERRED(3), + /** + * 转接中 + */ + TRANSFERRING(4), + ; + + private final Integer code; + + /** + * 是流失 或者被删除的 客户关系 + * + * @param status 状态 + * @return true or false + */ + public static boolean isDel(Integer status) { + if (status == null) { + return false; + } + return DRAIN.getCode().equals(status) || DELETE.getCode().equals(status); + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/enums/CustomerTrajectoryEnums.java b/easyink-common/src/main/java/com/easyink/common/enums/CustomerTrajectoryEnums.java new file mode 100644 index 0000000..3506d03 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/enums/CustomerTrajectoryEnums.java @@ -0,0 +1,265 @@ +package com.easyink.common.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.Arrays; + +/** + * 类名: 客户轨迹枚举 + * + * @author : silver_chariot + * @date : 2021/11/19 18:12 + */ +public class CustomerTrajectoryEnums { + /** + * 类名: 待办事项状态枚举 + * + * @author : silver_chariot + * @date : 2021/11/19 14:56 + */ + @AllArgsConstructor + public enum TodoTaskStatusEnum { + /** + * 正常 + */ + NORMAL("0"), + /** + * 已通知未完成 + */ + INFORMED("1"), + /** + * 已删除 + */ + DEL("2"), + /** + * 已完成 + */ + FINISHED("3"), + ; + + @Getter + private final String code; + } + + /** + * 老客标签建群任务群发类型 + * + * @author admin + * @Date 2021/3/24 9:56 + */ + @Getter + public enum TaskSendType { + /** + * 企业群发 + */ + CROP(0, "企业群发"), + + /** + * 个人群发 + */ + SINGLE(1, "个人群发"); + + private final String name; + + private final Integer type; + + TaskSendType(Integer type, String name) { + this.name = name; + this.type = type; + } + } + + /** + * 客户轨迹枚举 + */ + @Getter + public enum Type { + + + INFO(1, "信息动态"), + SOCIAL(2, "社交动态"), + ACTIVITY(3, "活动轨迹"), + TO_DO(4, "待办动态"); + + private String name; + + private Integer type; + + + Type(Integer type, String name) { + this.name = name; + this.type = type; + } + + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Integer getType() { + return type; + } + + public void setType(Integer type) { + this.type = type; + } + + + } + + public enum SceneType { + /** + * 编辑资料 + */ + EDIT_INFO(Type.INFO.getType(), "信息动态-补充资料", 1), + /** + * 信息动态,打标签 + */ + MAKE_TAGS(Type.INFO.getType(), "信息动态-设置标签", 2); + + + private String name; + + private Integer type; + + + private Integer key; + + + SceneType(Integer type, String name, Integer key) { + this.name = name; + this.type = type; + this.key = key; + } + + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Integer getType() { + return type; + } + + public void setType(Integer type) { + this.type = type; + } + + public Integer getKey() { + return key; + } + + public void setKey(Integer key) { + this.key = key; + } + } + + /** + * 客户轨迹:子类型枚举 + */ + @AllArgsConstructor + public enum SubType { + + /** + * 修改备注 + */ + EDIT_REMARK("edit_remark", "${operator}修改了备注为:"), + /** + * 修改标签 + */ + EDIT_TAG("edit_tag", "${operator}修改了客户标签为:"), + /** + * 编辑多选框 + */ + EDIT_MULTI("edit_multi", "${operator}修改了${propertyName}为:"), + /** + * 编辑单选框 + */ + EDIT_CHOICE("edit_choice", "${operator}修改了${propertyName}为:"), + /*** + * 编辑图片 + */ + EDIT_PIC("edit_pic", "${operator}修改了${propertyName}为:"), + /** + * 编辑文件 + */ + EDIT_FILE("edit_file", "${operator}修改了${propertyName}为:"), + /** + * 添加好友 + */ + ADD_USER("add_user", "${customer}添加了员工${picUrl}${userName}为好友"), + /** + * 删除好友 + */ + DEL_USER("del_user", "${customer}删除了员工${picUrl}${userName}"), + /** + * 进入群聊 + */ + JOIN_GROUP("join_group", "${customer}加入了群聊【${groupName}】"), + /** + * 退出群聊 + */ + QUIT_GROUP("quit_group", "${customer}退出了群聊【${groupName}】"), + CLICK_RADAR("click_radar", "${customer}打开了雷达链接“${radarTitle}”"), + UNKNOWN("un_known", ""), + ; + /** + * 子类型标识 + */ + @Getter + private final String type; + /** + * 对应的客户轨迹记录描述 + */ + @Getter + private final String desc; + + /** + * 根据类型获取子类型枚举 + * + * @param type 子类型标识 + * @return 对应的枚举 + */ + public static SubType getByType(String type) { + return Arrays.stream(values()).filter(a -> a.type.equals(type)).findFirst().orElse(UNKNOWN); + } + + /** + * 判断是否是进群/退群操作 + * + * @param subType 子类型 + */ + public static boolean isGroupOperation(String subType) { + if (subType == null) { + return false; + } + return subType.equals(JOIN_GROUP.getType()) + || subType.equals(QUIT_GROUP.getType()); + } + + /** + * 判断是否是 添加/删除跟进人操作 + * + * @param subType 子类型 + * @return true or false + */ + public static boolean isUserOperation(String subType) { + if (subType == null) { + return false; + } + return subType.equals(ADD_USER.getType()) + || subType.equals(DEL_USER.getType()); + } + + + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/enums/CustomerTransferStatusEnum.java b/easyink-common/src/main/java/com/easyink/common/enums/CustomerTransferStatusEnum.java new file mode 100644 index 0000000..bceb7f9 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/enums/CustomerTransferStatusEnum.java @@ -0,0 +1,88 @@ +package com.easyink.common.enums; + +import com.easyink.common.utils.StringUtils; +import lombok.Getter; + +import java.util.Arrays; + +/** + * 类名: CustomerTransferStatusEnum 客户接替状态 + * + * @author 佚名 + * @date 2021/8/30 19:21 + */ +@Getter +public enum CustomerTransferStatusEnum { + + // 接替状态, 1-接替完毕 2-等待接替 3-客户拒绝 4-接替成员客户达到上限 5-无接替记录 + FAIL("接替失败", 0, ""), + SUCCEED("接替完毕", 1, ""), + WAIT("等待接替", 2, ""), + REFUSE("客户拒绝", 3, "customer_refused"), + CUSTOMER_EXCEED_LIMIT("接替成员客户达到上限", 4, "customer_limit_exceed"), + NO_RECORD("无接替记录", 5, ""); + + /** + * 描述 + */ + private final String describeType; + + /** + * 类型 + */ + private final Integer type; + + /** + * 接替失败原因 + */ + private final String failReason; + + CustomerTransferStatusEnum(String describeType, Integer type, String failReason) { + this.describeType = describeType; + this.type = type; + this.failReason = failReason; + } + + /** + * 获取可在在职继承客户列表中显示的接替状态数组 + * + * @return 可在在职继承列表客户中显示的接替状态数组 + */ + public static Integer[] getTransferAvailTypes() { + return new Integer[]{ + WAIT.getType(), REFUSE.getType(), CUSTOMER_EXCEED_LIMIT.getType() + }; + } + + /** + * 获取详细的失败原因 + * + * @param failReason 企微返回的失败原因 + * @return 失败原因(中文) + */ + public static CustomerTransferStatusEnum getByFailReason(String failReason) { + if (StringUtils.isBlank(failReason)) { + return null; + } + return Arrays.stream(values()).filter(a -> a.getFailReason().equals(failReason)).findFirst().orElse(null); + } + + /** + * 更具状态码获取描述 + * + * @param status 状态码 + * @return 描述 + */ + public static String getDescByStatus(Integer status) { + if (status == null) { + return StringUtils.EMPTY; + } + CustomerTransferStatusEnum customerTransferStatusEnum = Arrays.stream(values()).filter(a -> a.getType().equals(status)).findFirst().orElse(null); + if (customerTransferStatusEnum != null) { + return customerTransferStatusEnum.getDescribeType(); + } + return StringUtils.EMPTY; + } + + +} diff --git a/easyink-common/src/main/java/com/easyink/common/enums/DataScopeEnum.java b/easyink-common/src/main/java/com/easyink/common/enums/DataScopeEnum.java new file mode 100644 index 0000000..0073af6 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/enums/DataScopeEnum.java @@ -0,0 +1,52 @@ +package com.easyink.common.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.Arrays; +/** + * 类名: DataScopeEnum + * + * @author : silver_chariot + * @date : 2021/8/26 20:33 + */ +@AllArgsConstructor +public enum DataScopeEnum { + /** + * 全部数据权限 + */ + ALL("1"), + + /** + * 自定数据权限 + */ + CUSTOM("2"), + + /** + * 部门数据权限 + */ + SELF_DEPT("3"), + + /** + * 部门及以下数据权限 + */ + DEPT_AND_CHILD("4"), + + /** + * 仅本人数据权限 + */ + SELF("5"), + ; + @Getter + private final String code; + + /** + * 根据CODE获取数据权限 + * + * @param code + * @return + */ + public static DataScopeEnum getDataScope(String code) { + return Arrays.stream(values()).filter(value -> value.getCode().equals(code)).findFirst().orElse(null); + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/enums/DataSourceType.java b/easyink-common/src/main/java/com/easyink/common/enums/DataSourceType.java new file mode 100644 index 0000000..b27443e --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/enums/DataSourceType.java @@ -0,0 +1,18 @@ +package com.easyink.common.enums; + +/** + * 数据源 + * + * @author admin + */ +public enum DataSourceType { + /** + * 主库 + */ + MASTER, + + /** + * 从库 + */ + SLAVE +} diff --git a/easyink-common/src/main/java/com/easyink/common/enums/EmployCodeSourceEnum.java b/easyink-common/src/main/java/com/easyink/common/enums/EmployCodeSourceEnum.java new file mode 100644 index 0000000..d881926 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/enums/EmployCodeSourceEnum.java @@ -0,0 +1,28 @@ +package com.easyink.common.enums; + +import lombok.Getter; + +/** + * 员工活码来源类型枚举值说明 + * + * @author Society my sister Li + * @date 2021/9/14 + */ +public enum EmployCodeSourceEnum { + + //活码创建 + CODE_CREATE(0), + + //新客建群 + NEW_GROUP(1), + + ; + + @Getter + private final Integer source; + + EmployCodeSourceEnum(Integer source) { + this.source = source; + } + +} diff --git a/easyink-common/src/main/java/com/easyink/common/enums/ExpressNameEnum.java b/easyink-common/src/main/java/com/easyink/common/enums/ExpressNameEnum.java new file mode 100644 index 0000000..b23215c --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/enums/ExpressNameEnum.java @@ -0,0 +1,82 @@ +package com.easyink.common.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 类名: 快递公司名称枚举 + * + * @author 佚名 + * @date 2021/12/13 16:47 + */ +@AllArgsConstructor +@Getter +public enum ExpressNameEnum { + /** + * 无 + */ + DEFAULT(0, "", "无"), + /** + * 圆通 + */ + YUAN_TONG(1, "yuantong", "圆通速递"), + /** + * 韵达 + */ + YUN_DA(2, "yunda", "韵达快递"), + /** + * 中通 + */ + ZHONG_TONG(3, "zhongtong", "中通快递"), + /** + * 极兔 + */ + JI_TU(4, "jitu", "极兔快递"), + + /** + * 申通快递 + */ + SHEN_TONG(5, "shentong", "申通快递"), + + /** + * 跨越速递 + */ + KUA_YUE(6, "kuayue", "跨越速递"), + ; + /** + * 状态码 + */ + public final Integer code; + /** + * 含义 + */ + private final String desc; + /** + * 公司名称 + */ + private final String name; + + /** + * 通过状态码获取 + */ + public static ExpressNameEnum getEnum(Integer code) { + for (ExpressNameEnum expressNameEnum : values()) { + if (expressNameEnum.getCode().equals(code)) { + return expressNameEnum; + } + } + return DEFAULT; + } + + /** + * 通过名称获取 + */ + public static ExpressNameEnum getEnum(String name) { + for (ExpressNameEnum expressNameEnum : values()) { + if (expressNameEnum.getName().equals(name)) { + return expressNameEnum; + } + } + return DEFAULT; + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/enums/ExternalGroupMemberTypeEnum.java b/easyink-common/src/main/java/com/easyink/common/enums/ExternalGroupMemberTypeEnum.java new file mode 100644 index 0000000..f9b2d95 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/enums/ExternalGroupMemberTypeEnum.java @@ -0,0 +1,25 @@ +package com.easyink.common.enums; + +import lombok.Getter; + +/** + * 外部群 群成员类型定义 + * + * @author Society my sister Li + * @date 2021/9/9 + */ +public enum ExternalGroupMemberTypeEnum { + + //内部成员 + INTERNAL(1), + //外部成员 + EXTERNAL(2), + ; + + @Getter + private final Integer type; + + ExternalGroupMemberTypeEnum(Integer type) { + this.type = type; + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/enums/GroupMessageType.java b/easyink-common/src/main/java/com/easyink/common/enums/GroupMessageType.java new file mode 100644 index 0000000..2c290fa --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/enums/GroupMessageType.java @@ -0,0 +1,107 @@ +package com.easyink.common.enums; + +import lombok.Getter; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; + +import java.util.Optional; +import java.util.stream.Stream; + +/** + * 群发消息 0 图片消息 2视频 3文件 4 文本消息 5 链接消息 6 小程序消息 7 雷达 用逗号隔开 + * 注意:修改type请修改 {@link AttachmentTypeEnum#mappingFromGroupMessageType(java.lang.Integer)} + */ +@SuppressWarnings("all") +@Getter +@Slf4j +public enum GroupMessageType { + + + /** + * 图片海报消息 + */ + IMAGE("0", "image"), + /** + * 视频 + */ + VIDEO("2", "video"), + /** + * 文件 + */ + FILE("3", "file"), + /** + * 文本消息 + */ + TEXT("4", "text"), + /** + * 链接消息 + */ + LINK("5", "link"), + /** + * 小程序消息 + */ + MINIPROGRAM("6", "miniprogram"), + + /** + * 雷达消息 + */ + RADAR("7", "radar"); + /** + * 媒体类型 + */ + String messageType; + + /** + * 数据值 + */ + String type; + + GroupMessageType(String type, String messageType) { + this.type = type; + this.messageType = messageType; + } + + public static Optional of(String type) { + return Stream.of(values()).filter(s -> s.type.equals(type)).findFirst(); + } + + /** + * 根据type查询枚举值 + * + * @param type type + * @return GroupMessageType + */ + public static GroupMessageType getGroupMessageTypeByType(String type) { + if (StringUtils.isBlank(type)) { + return null; + } + for (GroupMessageType groupMessageType : values()) { + if (groupMessageType.getType().equals(type)) { + return groupMessageType; + } + } + return null; + } + + /** + * 判断是否为合法的类型 + * + * @param type 附件数值 + * @param validTypes 规定的合法类型 + * @return + */ + public static boolean isValidType(String type, GroupMessageType... validTypes) { + if (StringUtils.isBlank(type)) { + log.error("附件类型不合法: 附件类型为空"); + return false; + } + for (GroupMessageType groupMessageType : validTypes) { + if (groupMessageType.getType().equals(type)) { + return true; + } else { + log.error("附件类型不合法: unValidType={}", groupMessageType.getType()); + } + } + return false; + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/enums/HttpMethod.java b/easyink-common/src/main/java/com/easyink/common/enums/HttpMethod.java new file mode 100644 index 0000000..f8659c7 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/enums/HttpMethod.java @@ -0,0 +1,32 @@ +package com.easyink.common.enums; + +import org.springframework.lang.Nullable; + +import java.util.HashMap; +import java.util.Map; + +/** + * 请求方式 + * + * @author admin + */ +public enum HttpMethod { + GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE; + + private static final Map mappings = new HashMap<>(16); + + static { + for (HttpMethod httpMethod : values()) { + mappings.put(httpMethod.name(), httpMethod); + } + } + + @Nullable + public static HttpMethod resolve(@Nullable String method) { + return (method != null ? mappings.get(method) : null); + } + + public boolean matches(String method) { + return (this == resolve(method)); + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/enums/LoginTypeEnum.java b/easyink-common/src/main/java/com/easyink/common/enums/LoginTypeEnum.java new file mode 100644 index 0000000..8bfc7c9 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/enums/LoginTypeEnum.java @@ -0,0 +1,53 @@ +package com.easyink.common.enums; + +import com.easyink.common.core.domain.model.LoginUser; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 登录类型枚举 + * + * @author : silver_chariot + * @date : 2021/8/17 18:45 + */ +@AllArgsConstructor +public enum LoginTypeEnum { + /** + * 账密登录 + */ + BY_PASSWORD(1,"PASSWORD_LOGIN"), + /** + * 内部扫码登录 + */ + BY_SCAN(2,"INTERNAL_SCAN_LOGIN"), + /** + * 网页登录 + */ + BY_WEB(3,"WEB_LOGIN"), + /** + * 三方扫码登录 + */ + BY_THIRD_SCAN(4,"THIRD_SCAN_LOGIN"), + /** + * 未知 + */ + UN_KNOWN(0,"UN_KNOWN"); + @Getter + private final Integer type; + + @Getter + private final String state; + + /** + * 根据登录用户判断 是账密登录还是扫码登录 + * + * @param loginUser 登录用户实体 + * @return + */ + public static LoginTypeEnum getByUser(LoginUser loginUser) { + if (loginUser == null) { + return UN_KNOWN; + } + return loginUser.isSuperAdmin() ? BY_PASSWORD : BY_SCAN; + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/enums/LogoutReasonEnum.java b/easyink-common/src/main/java/com/easyink/common/enums/LogoutReasonEnum.java new file mode 100644 index 0000000..950b71c --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/enums/LogoutReasonEnum.java @@ -0,0 +1,55 @@ +package com.easyink.common.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.Arrays; + +/** + * 类名: 登出原因枚举 + * + * @author : silver_chariot + * @date : 2021/10/21 21:42 + */ +@AllArgsConstructor +public enum LogoutReasonEnum { + /** + * 未知原因 + */ + UN_KNOWN(0, ResultTip.TIP_GENERAL_UNAUTHORIZED), + /** + * 强制退出 + */ + FORCED(1, ResultTip.TIP_GENERAL_FORCE_LOGOUT), + /** + * 企业信息发生改变· + */ + CORP_ID_CHANGED(2, ResultTip.TIP_GENERAL_CORP_ID_CHANGED), + /** + * 登录信息已过期 + */ + EXPIRED(3, ResultTip.TIP_GENERAL_UNAUTHORIZED); + /** + * 登出状态码 + */ + @Getter + private final Integer code; + /** + * 应返回给前端的错误提示 + */ + @Getter + private final ResultTip resultTip; + + /** + * 根据CODE获取登出原因类型 + * + * @param code 登出CODE + * @return 登出类型枚举 不存在则返回UN_KNOWN + */ + public static LogoutReasonEnum getByCode(Integer code) { + if (null == code) { + return UN_KNOWN; + } + return Arrays.stream(values()).filter(obj -> obj.getCode().equals(code)).findFirst().orElse(UN_KNOWN); + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/enums/MediaType.java b/easyink-common/src/main/java/com/easyink/common/enums/MediaType.java new file mode 100644 index 0000000..dc6e691 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/enums/MediaType.java @@ -0,0 +1,47 @@ +package com.easyink.common.enums; + +import lombok.Getter; + +import java.util.Optional; +import java.util.stream.Stream; + +/** + * 媒体类型:媒体文件类型,分别有图片(image)、语音(voice)、视频(video),普通文件(file) + */ +@Getter +public enum MediaType { + + IMAGE("0", "image"), + VOICE("1", "voice"), + VIDEO("2", "video"), + FILE("3", "file"), + TEXT("4","text"), + /** + * 海报 + */ + POSTER("5", "poster"), + /** + * 海报字体 + */ + POSTER_FONT("6", "poster_font"); + + /** + * 媒体类型 + */ + String mediaType; + + /** + * 0 图片(image)、1 语音(voice)、2 视频(video),3 普通文件(file) 4 文本 5 海报 6 海报字体 + */ + String type; + + + MediaType(String type, String mediaType) { + this.type = type; + this.mediaType = mediaType; + } + + public static Optional of(String type) { + return Stream.of(values()).filter(s -> type.equals(s.type)).findFirst(); + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/enums/MessageStatusEnum.java b/easyink-common/src/main/java/com/easyink/common/enums/MessageStatusEnum.java new file mode 100644 index 0000000..27a0b92 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/enums/MessageStatusEnum.java @@ -0,0 +1,56 @@ +package com.easyink.common.enums; + +import lombok.Getter; + +/** + * 类名: MessageStatusEnum + * + * @author 佚名 + * @date 2021/11/16 14:05 + */ +@Getter +public enum MessageStatusEnum { + /** + * (员工未执行群发操作) + */ + NOT_SEND("0", "未执行"), + /** + * (员工执行群发并成功送达客户) + */ + SEND_SUCCEED("1", "发送成功"), + /** + * (员工执行群发,但客户已不是好友) + */ + NOT_FRIEND("2", "已不是好友"), + /** + * (员工执行群发,但本次群发中其他员工对该客户执行了群发) + */ + ALREADY_SEND("3", "其他员工已发送"), + /** + * (该客户的群发接收次数上限) + */ + MAX_TIMES("4", "接收已达上限"), + /** + * (小程序不可发送) + */ + MINI_PROGRAM_ERROR("5", "创建失败,小程序未关联企业或信息错误"), + /** + * (获取附件失败) + */ + MEDIA_ID_ERROR("6", "创建失败,未获取到有效附件信息"), + /** + * (当员工对群群发时只选择了部分群,剩余群未发送) + */ + NOT_SEND_GROUP("7", "未发送"), + PARAM_ERROR("8", "创建失败,群发内容异常"); + + + private final String name; + + private final String type; + + MessageStatusEnum(String type, String name) { + this.name = name; + this.type = type; + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/enums/MessageType.java b/easyink-common/src/main/java/com/easyink/common/enums/MessageType.java new file mode 100644 index 0000000..5d4f1c9 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/enums/MessageType.java @@ -0,0 +1,84 @@ +package com.easyink.common.enums; + +import lombok.Getter; + +import java.util.Optional; +import java.util.stream.Stream; + +/** + * 应用支持推送文本、图片、视频、文件、图文等类型 + */ +@SuppressWarnings("all") +@Getter +public enum MessageType { + + /** + * 文本消息 + */ + TEXT("0", "text"), + /** + * 图片消息 + */ + IMAGE("1", "image"), + /** + * 语音消息 + */ + VOICE("2", "voice"), + /** + * 视频消息 + */ + VIDEO("3", "video"), + /** + * 文件sucai + */ + FILE("4", "file"), + + /** + * 文本卡片消息 + */ + TEXTCARD("5", "textcard"), + + /** + * 图文消息 + */ + NEWS("6", "news"), + + /** + * 图文消息(mpnews) + */ + MPNEWS("7", "mpnews"), + + /** + * markdown消息 + */ + MARKDOWN("8", "markdown"), + + /** + * 小程序通知消息 + */ + MINIPROGRAM_NOTICE("9", "miniprogram_notice"), + + /** + * 任务卡片消息 + */ + TASKCARD("10", "taskcard"),; + /** + * 媒体类型 + */ + String messageType; + + /** + * 数据值 + */ + String type; + + MessageType(String type, String messageType) { + this.type = type; + this.messageType = messageType; + } + + public static Optional of(String type) { + return Stream.of(values()).filter(s -> type.equals(s.type)).findFirst(); + } + +} diff --git a/easyink-common/src/main/java/com/easyink/common/enums/OperatorType.java b/easyink-common/src/main/java/com/easyink/common/enums/OperatorType.java new file mode 100644 index 0000000..9614918 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/enums/OperatorType.java @@ -0,0 +1,23 @@ +package com.easyink.common.enums; + +/** + * 操作人类别 + * + * @author admin + */ +public enum OperatorType { + /** + * 其它 + */ + OTHER, + + /** + * 后台用户 + */ + MANAGE, + + /** + * 手机端用户 + */ + MOBILE +} diff --git a/easyink-common/src/main/java/com/easyink/common/enums/PresTagGroupTaskSendScopeEnum.java b/easyink-common/src/main/java/com/easyink/common/enums/PresTagGroupTaskSendScopeEnum.java new file mode 100644 index 0000000..ba3c35f --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/enums/PresTagGroupTaskSendScopeEnum.java @@ -0,0 +1,27 @@ +package com.easyink.common.enums; + +import lombok.Getter; + +/** + * 标签建群-发送范围 枚举值说明 + * + * @author Society my sister Li + * @date 2021/9/14 + */ +public enum PresTagGroupTaskSendScopeEnum { + + //0: 全部客户 + ALL(0), + + //1:部分客户 + SOME(1); + + @Getter + private final Integer sendScope; + + PresTagGroupTaskSendScopeEnum(Integer sendScope) { + this.sendScope = sendScope; + } + + +} diff --git a/easyink-common/src/main/java/com/easyink/common/enums/PushType.java b/easyink-common/src/main/java/com/easyink/common/enums/PushType.java new file mode 100644 index 0000000..fd30263 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/enums/PushType.java @@ -0,0 +1,32 @@ +package com.easyink.common.enums; + +import lombok.Getter; +import lombok.NoArgsConstructor; + +/** + * 群发类型 0 发给客户 1 发给客户群 + */ +@NoArgsConstructor +@Getter +public enum PushType { + + /** + * 发给客户 + */ + SEND_TO_USER(0, "发给客户"), + + /** + * 发给客户群 + */ + SENT_TO_USER_GROUP(1, "发给客户群"); + + private String name; + + private Integer type; + + PushType(Integer type, String name) { + this.name = name; + this.type = type; + } + +} diff --git a/easyink-common/src/main/java/com/easyink/common/enums/ResultTip.java b/easyink-common/src/main/java/com/easyink/common/enums/ResultTip.java new file mode 100644 index 0000000..db39dda --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/enums/ResultTip.java @@ -0,0 +1,243 @@ +package com.easyink.common.enums; + +import lombok.Getter; +import org.springframework.util.ObjectUtils; + +/** + * 类名: ResultTip + * + * @author: 1*+ + * @date: 2021-09-26 10:15 + */ +public enum ResultTip { + + /** + * edit by 1*+ + * 基础错误码: 1xxx + * 运营中心错误码: 2xxx + * 员工模块错误码: 3XXX + * 客户模块错误码: 4xxx + * 会话存档错误码: 5xxx + * 报表模块错误码: 6xxx + * 三方错误码: 7xxx + * 应用中心错误码:8xxx + * 其他第三方接口错误码: 9xxx + */ + //通用返回码 + TIP_GENERAL_SUCCESS(200, "操作成功"), + TIP_GENERAL_BAD_REQUEST(400, "服务异常,请联系客服或技术人员"), + TIP_GENERAL_UNAUTHORIZED(401, "没有操作权限,请在合规渠道使用系统"), + TIP_GENERAL_FORBIDDEN(403, "没有操作权限,请联系管理员"), + TIP_GENERAL_NOT_FOUND(404, "资源,服务未找到!"), + TIP_GENERAL_FORCE_LOGOUT(405, "你已被管理员强制退出,请重新登录或联系管理员"), + TIP_GENERAL_CORP_ID_CHANGED(406, "企业信息变更,为保证系统正常使用,请重新登录"), + TIP_GENERAL_ERROR(500, "服务异常,请联系客服或技术人员"), + + //系统自定义业务返回码 + TIP_ATTRIBUTED(501, "有员工在使用该角色,不可删除"), + TIP_NOT_AVAILABLE_CONFIG_FOUND(503, "没有可用的企业微信配置,请联系管理员"), + TIP_MISS_CORP_ID(600, "获取企业信息异常,请重新登录或联系管理员配置企业ID"), + TIP_MISS_APPID(601, "获取应用信息异常,请重新登录或联系管理员配置应用ID"), + TIP_MISS_PROVIDER_CONFIG(602, "没有找到企业服务商配置"), + TIP_MISS_SUITE_TICKET(603, "缺失服务商Ticket,请检查缓存或者在服务商后台重新获取"), + + TIP_NO_SHORT_CODE(604, "shortCode不能为空"), + TIP_CANNOT_FIND_PAGE(605, "找不到指定页面"), + TIP_ERROR_CREATE_SHORT_URL(606, "生成短链失败"), + + TIP_NO_MINI_APP_CONFIG(607, "没有配置小程序,请联系管理员"), + TIP_NO_OFFICAIL_ACCOUNT_CONFIG(608, "没有配置公众号配置,请联系管理员"), + + TIP_NEED_SHORT_CODE(609, "缺失code"), + TIP_CANNOT_FIND_LONG_URL(610, "找不到对应的原始链接"), + TIP_MISSING_LONG_URL (611,"缺失长链接"), + TIP_NOT_CONFIG_CONTACT(1000, "所在企业未配置通讯录,请联系企业管理员登录系统并完善配置!"), + TIP_NOT_AUTH_CORP(1001, "所在企业未授权当前应用,请联系企业管理员进行授权"), + TIP_SERVER_NOT_SUPPORT(1002, "当前环境不支持通过该二维码登录,请联系客服或技术人员"), + TIP_SERVER_NOT_SUPPORT_INTERFACE(1003, "当前环境不支持该请求,请联系客服或技术人员"), + TIP_CORP_MISMATCH(1004, "登录企业与原有企业不一致"), + TIP_TIME_FORMAT_ERROR(1005, "时间格式错误!"), + TIP_FAIL_GET_JOIN_CORP_QRCODE(1006, "获取加入企业二维码失败"), + TIP_ROLE_NOT_EXIST(1007, "角色不存在"), + TIP_DEPARTMENT_NOT_EXIST(1008, "部门不存在"), + TIP_TIME_RANGE_FORMAT_ERROR(1009, "时间段范围填写错误!"), + TIP_DOWNLOAD_ERROR(1010, "下载异常!"), + TIP_NO_DATA_TO_EXPORT(1011, "没有可导出的数据"), + TIP_START_AFTER_END_TIME(1012, "开始时间不能大于结束时间!"), + TIP_NOT_CORP_CONFIG(1013, "当前企业未完成企微配置,无法使用该功能"), + TIP_GENERAL_RESET_TIME(1014, "填写时间过于接近当前,请重新调整时间!"), + TIP_STRATEGY_IS_EMPTY(1015, "未找到对应的策略处理器"), + TIP_MISS_SUITE_ID_HEADER(1016, "没有增加suiteId请求头"), + TIP_NOT_START_APP_CONFIG(1017, "当前企业已授权但未启用待开发应用,无法使用该功能"), + TIP_NOT_AUTH_DK_CORP(1018, "所在企业未授权当前代开发应用,请联系企业管理员进行授权"), + TIP_ILLEGAL_DOMAIN(1019, "填写的服务器信息域名主体与当前企业不一致"), + TIP_NO_CAPTCHA_OR_TLKEY(1020, "短信验证码或者tlKey为空"), + TIP_ERROR_CAPTCHA(1021, "短信验证码错误"), + TIP_CONFIRM_CAPTCHA(1022, "验证短信失败"), + + + //运营模块返回码 + TIP_ATTACHMENT_OVER(2001, "附件数量已达上限,请重新选择"), + TIP_SEND_MESSAGE_ERROR(2002, "请填写发送内容"), + TIP_NO_CUSTOMER(2003, "所选员工没有可以群发的客户,请重新选择"), + TIP_MATERIAL_COVER(2004, "素材标签不能重复,请重新设置"), + TIP_TIME_TASK_LESS_CURR(2005, "定时发送时间不能小于当前时间"), + TIP_EXPIRETIME_LESS_CURR(2006, "过期时间不能小于当前时间!"), + TIP_EXPIRETIME_DATA_ERROR(2007, "过期时间格式错误!"), + TIP_MISS_MATERIAL_ID(2008, "服务异常,请联系客服或技术人员"), + TIP_MISS_MATERIAL_TAG_PARAMETER(2009, "操作失败,请联系客服或技术人员"), + TIP_CHECK_STAFF(2010, "请选择使用人员"), + TIP_NO_GROUP(2011, "所选员工没有可以群发的客户群,请重新选择"), + TIP_PARENT_NOT_LEVEL1_CATEGORY(2012, "上级分组名非一级分组名"), + TIP_WORDS_CATEGORY_DUPLICATION_NAME(2013, "分组名重名"), + TIP_ROOT_NODE_CANNOT_DELETE(2014, "不能删除根节点数据!"), + TIP_ROOT_NODE_UN_FIND(2015, "查无根节点数据!"), + TIP_WORDS_CATEGORY_SAME_NAME(2016, "已存在!"), + TIP_GENERAL_PARAM_ERROR(2017, "参数值填写错误"), + TIP_ADMIN_NOT_CREATE_DEPART_WORDS_CATEGORY(2018, "管理员不能创建部门话术分组名"), + TIP_PARENT_WORDS_CATEGORY_NOT_EXIST(2019, "上级分组名不存在"), + TIP_MISS_WORDS_PARAMETER(2020, "话术库缺少必要参数,保存更新失败,请检查参数"), + TIP_MISS_WORDS_GROUP_ID(2021, "话术库缺少话术ID,删除失败,请检查参数"), + TIP_MISS_WORDS_CATEGORY_ID(2022, "话术库缺少话术分组名ID,请检查参数"), + TIP_MISS_WORDS_ATTACHMENT_CONTENT(2023, "话术库附件缺少内容,保存更新失败,请检查参数"), + TIP_ACTIVE_CODE_NOT_EXSIT(2024, "所选群活码失效,请重新选择"), + TIP_TASK_NAME_EXSIT(2025, "任务已存在,请重新填写任务名"), + TIP_NOT_SELECT_STAFF(2026, "未选择使用员工,请重新选择"), + TIP_MESSAGE_TASK_DELETE_ERROR(2027, "群发任务删除失败,只能删除未执行的任务"), + TIP_MESSAGE_TASK_UPDATE_ERROR(2028, "群发任务更新失败,只能更新未执行的任务"), + TIP_MESSAGE_TO_LONG_ERROR(2029, "创建失败,文字内容过长"), + + TIP_GROUP_CODE_NAME_OCCUPIED(2030, "客户群活码名称已存在,添加群活码失败!"), + TIP_ACTUAL_GROUP_CODE_EXIST(2031, "新增实际群码失败,该群聊二维码已重复存在"), + TIP_ACTUAL_GROUP_OVER_NUM_TWO_HUNDRED(2032, "实际群码扫码入群人数超过上限200人"), + TIP_MISS_ACTUAL_GROUP(2033, "实际群码未选择客户群"), + TIP_WORDS_OVER_TITLE(2034, "话术附件标题长度超出限制"), + TIP_URL_CONTENT_ERROR(2035, "未获取到链接信息,请自定义链接信息"), + TIP_MISS_WORDS_SORT_INFO(2036, "话术库缺少排序号、话术id,修改失败"), + TIP_LAST_USE_OVER_NUM(2037, "话术库最近使用不能保存超过5个"), + TIP_EMPLY_CODE_NOT_FOUND(2038, "员工活码数据未找到"), + TIP_NO_AVAILABLE_GROUP_CODE(2039, "没有可用的客户群"), + TIP_ADD_CUSTOMER_SOP_ERROR(2040, "添加客户sop失败,缺少员工id"), + TIP_SENDING_MESSAGE(2041, "正在派送群发任务,请稍后再试"), + TIP_GROUP_CALENDAR_ADD_PARAMETER_ERROR(2042, "群SOP添加失败,使用群聊、日历名称或任务规则为空"), + TIP_PLEASE_INPUT_DEFAULT_MSG(2043, "请填写默认欢迎语"), + TIP_PLEASE_INPUT_SPECIAL_MSG_TIME(2044, "请选择特殊时段时间"), + TIP_DEFAULT_MSG_TOO_LONG(2045, "欢迎语长度超过限制"), + TIP_MSG_TYPE_NOT_FUND(2046, "欢迎语模板类型未找到"), + TIP_MSG_REPEATED_TIME(2047, "欢迎语时段重叠"), + TIP_NOT_FIND_ATTACHMENT_TYPE(2048, "未找到欢迎语对应素材类型"), + TIP_MOMENT_ATTACHMENT_TYPE_ERROR(2049, "创建朋友圈任务失败,附件类型不合法只允许图片、链接、视频中的一种"), + TIP_MOMENT_ATTACHMENT_NUM_ERROR(2050, "创建朋友圈任务失败,附件数量不合法"), + TIP_MOMENT_ATTACHMENT_CONTENT_ERROR(2051, "创建朋友圈任务失败,发布内容不能为空"), + TIP_MOMENT_ATTACHMENT_SEND_TIME_ERROR(2052, "创建朋友圈任务失败,定时发布时间不能为空"), + TIP_MOMENT_UPDATE_ERROR(2053, "更新朋友圈失败,只有定时未发送的朋友圈可编辑"), + TIP_MOMENT_CREATE_ERROR(2054, "所选可见范围下没有微信客户,无法创建朋友圈"), + TIP_MOMENT_ATTACHMENT_CREATE_ERROR(2055, "朋友圈素材超出限定大小,请重新选择"), + TIP_ACTUAL_GROUP_OVER_NUM_ONE_THOUSAND(2056, "实际群码扫码入群人数超过上限1000人"), + TIP_ACTUAL_GROUP_REF_GROUP_LIMIT_SIZE(2057, "每个企业微信活码最多关联5个群聊"), + TIP_URL_ERROR(2058, "请填写http或https开头的合法链接地址"), + TIP_URL_UNKNOWN_HOST(2059, "链接地址域名无法访问"), + TIP_URL_MATCH_ERROR(2060, "获取链接默认信息失败"), + TIP_REDEEM_CODE_INPUT_TIME_ERROR(2061, "未填写时间"), + TIP_REDEEM_CODE_EMPTY_THRESHOLD(2062, "阈值不能为负值"), + TIP_REDEEM_CODE_EMPTY_USERS(2063, "未选择员工"), + TIP_REDEEM_CODE_END_TIME_GE_START_TIME(2064, "结束时间应大于开始时间"), + TIP_REDEEM_CODE_REPEAT(2065, "兑换码重复"), + TIP_REDEEM_CODE_EMPTY_FILE(2066, "请上传兑换码文件"), + TIP_REDEEM_CODE_FILE_IS_EMPTY(2067, "兑换码文件数据为空"), + TIP_REDEEM_CODE_ACTIVITY_ID_IS_EMPTY(2068, "未选择兑换码活动"), + TIP_REDEEM_CODE_INPUT_EXCEL(2069, "请上传Excel文件"), + TIP_REDEEM_CODE_ACTIVITY_IS_EMPTY(2079, "未选择兑换码活动"), + TIP_REDEEM_CODE_WELCOME_MSG_IS_EMPTY(2080, "活动欢迎语,三个内容框必须有一个有内容"), + TIP_REDEEM_CODE_FILE_DATA_IS_EMPTY(2081, "文件中数据为空"), + TIP_REDEEM_CODE_ACTIVITY_LIMIT_ADD_USER(2082, "活动已开启参与限制,同一客户不能多次领取"), + + //员工模块错误码 + TIP_PARAM_MISSING(3001, "请填写完整的员工信息"), + TIP_ERROR_UPLOAD_HEAD_IMG(3002, "上传头像失败"), + TIP_USER_NOT_ACTIVE(3003, "员工不存在或者未激活"), + TIP_HANDOVER_USER_ERROR(3004, "原跟进成员不存在或者错误"), + TIP_TAKEOVER_USER_ERROR(3005, "接替成员不存在或者未激活"), + TIP_CORP_NO_CUSTOMER_ASSIGNABLE(3006, "该企业不存在可分配的员工"), + TIP_USER_NO_CUSTOMER_ASSIGNABLE(3007, "该成员不存在可分配的客户"), + TIP_BIND_USER_MAPPING_ERROR(3008, "所在企业未绑定三方员工映射关系"), + + //客户中心返回码 + TIP_EXTENDS_CUSTOMER_FALSE(4000, "分配失败,请联系客服或技术人员"), + TIP_SELECT_ALLOCATE_CUSTOMER(4001, "获取待分配列表失败,请联系客服或技术人员"), + TIP_CUSTOMER_NOT_EXIST(4002, "客户不存在"), + TIP_GROUP_TAG_CATEGORY_SAME_NAME(4003, "客户群标签组“%s”已存在"), + TIP_GROUP_TAG_CATEGORY_OVER_MAX_SIZE(4004, "客户群标签组最多可设置3000个标签组"), + TIP_GROUP_TAG_EXIST(4005, "存在标签重名!"), + TIP_EXTEND_PROP_NAME_EXISTED(4006, "字段名称不能重复,请重新设置"), + TIP_UPDATE_EXTEND_PROP_FAIL(4007, "更新客户自定义属性失败"), + TIP_MULTIPLE_OPTION_MISSING(4008, "缺少多选选项值"), + TIP_PROP_TYPE_CANNOT_CHANGE(4009, "标签类型无法编辑"), + TIP_IS_SYS_PROP_NAME(4010, "该字段是系统默认字段名称,请重新设置"), + TIP_CUSTOMER_CANNOT_BE_ASSIGNED(4011, "指定的客户不可被分配"), + TIP_GROUP_CANNOT_BE_ASSIGNED(4012, "指定的群聊不可被分配"), + TIP_CAN_TRANSFER_SELF_CUSTOMER(4013, "原跟进人与接手人一样,不可继承"), + TIP_CANNOT_FIND_TRANSFER_RECORD(4014, "找不到该分配记录详情"), + TIP_AUTO_TAG_KEYWORD_NUM_LIMIT(4015, "最多可设置10个关键词"), + TIP_AUTO_TAG_KEYWORD_REPEATED(4016, "同一匹配方式下关键词不能重复"), + TIP_AUTO_TAG_TAG_NUM_LIMIT(4017, "最多可设置10个标签"), + TIP_AUTO_TAG_GROUP_SCENE_NUM_LIMIT(4018, "“最多可设置10个场景"), + TIP_AUTO_TAG_SCENE_NOT_NULL(4019, "“请设置场景"), + TIP_AUTO_TAG_SCENE_TAG_NOT_NULL(4020, "“请设置场景标签"), + TIP_AUTO_TAG_SCENE_GROUP_NOT_NULL(4021, "“请设置场景群"), + TIP_AUTO_TAG_SCENE_GROUP_NUM_LIMIT(4022, "最多可设置10个群聊"), + TIP_AUTO_TAG_SCENE_TAG_NUM_LIMIT(4023, "最多可设置10个标签"), + TIP_AUTO_TAG_MATCH_KEYWORD_NOT_BOTH_NULL(4024, "模糊匹配和精确匹配类型的关键词不能同时为空"), + TIP_DELETE_TAG_NOT_PERMISSIONS(4025, "无权限操作标签,若标签不是在本系统创建,请前往企微后台操作"), + TIP_FAIL_TO_GET_CUSTOMER_INFO(4026,"无法获取客户详情"), + + //三方错误码 + TIP_MISSING_LOGIN_INFO(7000, "所在企业未开通「壹鸽快递工单助手」,请联系管理员"), + TIP_UN_USE_AI_SYSTEM(7001, "您没有访问权限,请联系管理员"), + TIP_UN_BIND_NETWORK(7002, "所在企业未开通「壹鸽快递工单助手」,请联系管理员"), + + + //应用中心 + TIP_APP_INSTALLED(8000, "应用已安装"), + TIP_NETWORK_ID_ERROR(8001, "未在工单系统找到与{0}匹配的企业,请填写有效网点ID"), + TIP_ORDER_USER_ID_BIND_ERROR(8002, "账号已被绑定"), + TIP_NETWORK_ID_BIND_ERROR(8003, "该企业未绑定网点ID"), + TIP_YIGE_APP_CONFIG_ERROR(8004, "该企业未绑定网点"), + TIP_YIGE_CHAT_BIND_ERROR(8005, "该群已绑定其它客户"), + TIP_YIGE_CHAT_NOT_BIND_ERROR(8006, "该群未绑定客户"), + TIP_YIGE_USER_NOT_BIND_ERROR(8007, "该员工未绑定客户"), + TIP_NO_APP_ID_CONFIG(9001, "没有配置公众号的appId"), + TIP_MISSING_USER_CODE(9002, "缺失公众号用户code"), + TIP_NO_APP_SECRET(9003,"没有配置公众号秘钥"), + TIP_WECHAT_OPEN_GET_AUTH_ERROR(9004,"获取用户授权信息异常"), + TIP_WECHAT_OPEN_OFFICIAL_NO_DOMAIN(9005,"未配置公众号域名"), + TIP_ERROR_GET_UNION_ID(9007,"获取unionId异常"), + TIP_OPEN_ID_CANNOT_BE_NULL (9008,"缺失openId"), + TIP_CANNOT_FIND_USER_BY_UNION_ID(9009,"无法通过union_id匹配到员工,请重新同步员工后再重试"), + ; + + @Getter + private Integer code; + + @Getter + private String tipMsg; + + ResultTip(Integer code, String tipMsg) { + this.code = code; + this.tipMsg = tipMsg; + } + + public static ResultTip getTip(Integer code) { + if (ObjectUtils.isEmpty(code)) { + return TIP_GENERAL_ERROR; + } + ResultTip[] values = ResultTip.values(); + + for (ResultTip resultTip : values) { + if (resultTip.getCode().equals(code)) { + return resultTip; + } + } + return TIP_GENERAL_ERROR; + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/enums/RoleTypeEnum.java b/easyink-common/src/main/java/com/easyink/common/enums/RoleTypeEnum.java new file mode 100644 index 0000000..d38aa20 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/enums/RoleTypeEnum.java @@ -0,0 +1,32 @@ +package com.easyink.common.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 类名: RoleTypeEnum + * + * @author : silver_chariot + * @date : 2021/9/22 15:40 + */ +@AllArgsConstructor +public enum RoleTypeEnum { + /** + * 系统默认超级管理员角色 + */ + SYS_ADMIN(1), + /** + * 系统默认角色 + */ + SYS_DEFAULT(2), + /** + * 用户自定义角色 + */ + CUSTOM(3) + ; + /** + * 角色类型 + */ + @Getter + private final Integer type; +} diff --git a/easyink-common/src/main/java/com/easyink/common/enums/StaffActivateEnum.java b/easyink-common/src/main/java/com/easyink/common/enums/StaffActivateEnum.java new file mode 100644 index 0000000..e776eed --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/enums/StaffActivateEnum.java @@ -0,0 +1,46 @@ +package com.easyink.common.enums; + +/** + * @author 佚名 + * @ClassName StaffActivateEnum + * @date 2021/8/10 16:34 + * @Version 1.0 + */ +public enum StaffActivateEnum { + /** + * 已激活 + */ + ACTIVE(1, "已激活"), + /** + * 已禁止 + */ + FORBIDDEN(2, "已禁止"), + /** + * 未激活 + */ + NOT_ACTIVE(4, "未激活"), + /** + * 离职 + */ + RETIRE(5, "离职"), + /** + * 已删除 + */ + DELETE(6, "已删除"), + ; + private final Integer code; + private final String info; + + StaffActivateEnum(Integer code, String info) { + this.code = code; + this.info = info; + } + + public Integer getCode() { + return code; + } + + public String getInfo() { + return info; + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/enums/TransferFailReason.java b/easyink-common/src/main/java/com/easyink/common/enums/TransferFailReason.java new file mode 100644 index 0000000..f1040b4 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/enums/TransferFailReason.java @@ -0,0 +1,55 @@ +package com.easyink.common.enums; + +import lombok.Getter; + +/** + * @author admin + * @description 接替失败的原因 + * @date 2021/1/20 0:14 + **/ +@Getter +public enum TransferFailReason { + /** + * 客户拒绝 + */ + CUSTOMER_REFUSED(3, "customer_refused", "客户拒绝"), + + /** + * 接替成员的客户数达到上限 + */ + CUSTOMER_LIMIT_EXCEED(4, "customer_limit_exceed", "接替成员的客户数达到上限"); + + private int num; + + private String name; + + private String reason; + + TransferFailReason(int num, String name, String reason) { + this.num = num; + this.name = name; + this.reason = reason; + } + + public static String getReason(String name) { + TransferFailReason[] values = TransferFailReason.values(); + + for (TransferFailReason transferFailReason : values) { + if (transferFailReason.getName().equals(name)) { + return transferFailReason.getReason(); + } + } + throw new RuntimeException("无对应原因"); + } + + public static int getNum(String name) { + TransferFailReason[] values = TransferFailReason.values(); + + for (TransferFailReason transferFailReason : values) { + if (transferFailReason.getName().equals(name)) { + return transferFailReason.getNum(); + } + } + throw new RuntimeException("无对应类型"); + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/enums/UserStatus.java b/easyink-common/src/main/java/com/easyink/common/enums/UserStatus.java new file mode 100644 index 0000000..1f2ae72 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/enums/UserStatus.java @@ -0,0 +1,26 @@ +package com.easyink.common.enums; + +/** + * 用户状态 + * + * @author admin + */ +public enum UserStatus { + OK("0", "正常"), DISABLE("1", "停用"), DELETED("2", "删除"); + + private final String code; + private final String info; + + UserStatus(String code, String info) { + this.code = code; + this.info = info; + } + + public String getCode() { + return code; + } + + public String getInfo() { + return info; + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/enums/WeCategoryMediaTypeEnum.java b/easyink-common/src/main/java/com/easyink/common/enums/WeCategoryMediaTypeEnum.java new file mode 100644 index 0000000..321a987 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/enums/WeCategoryMediaTypeEnum.java @@ -0,0 +1,54 @@ +package com.easyink.common.enums; + +import lombok.Getter; + +import java.util.ArrayList; +import java.util.List; + +/** + * 素材分组数据初始化枚举定义 + * + * @author Society my sister Li + * @date 2021/9/22 + */ +public enum WeCategoryMediaTypeEnum { + + //素材分组 素材类型和 名称定义 + + IMAGE(0, "海报"), + VIDEO(2, "视频"), + FILE(3, "文件"), + LINK(5, "链接"), + MINI_APP(6, "小程序"), + RADAR(7, "雷达") + ; + /** + * 素材类型 + */ + @Getter + private Integer mediaType; + + /** + * 名称 + */ + @Getter + private String name; + + WeCategoryMediaTypeEnum(Integer mediaType, String name) { + this.mediaType = mediaType; + this.name = name; + } + + /** + * 获取所有mediaType + * + * @return List + */ + public static List getMediaTypeList() { + List list = new ArrayList<>(); + for (WeCategoryMediaTypeEnum weCategoryMediaTypeEnum : values()) { + list.add(weCategoryMediaTypeEnum.getMediaType()); + } + return list; + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/enums/WeEmpleCodeAnalyseTypeEnum.java b/easyink-common/src/main/java/com/easyink/common/enums/WeEmpleCodeAnalyseTypeEnum.java new file mode 100644 index 0000000..9c8e7ae --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/enums/WeEmpleCodeAnalyseTypeEnum.java @@ -0,0 +1,26 @@ +package com.easyink.common.enums; + +/** + * 类名:WeEmpleCodeAnalyseTypeEnum 员工活码数据分析type值定义 + * + * @author Society my sister Li + * @date 2021-11-08 21:42 + */ +public enum WeEmpleCodeAnalyseTypeEnum { + + //新增 + ADD(1), + //删除 + DEL(0); + + private final Integer type; + + WeEmpleCodeAnalyseTypeEnum(Integer type) { + this.type = type; + } + + public Integer getType() { + return type; + } + +} diff --git a/easyink-common/src/main/java/com/easyink/common/enums/WeEmpleCodeType.java b/easyink-common/src/main/java/com/easyink/common/enums/WeEmpleCodeType.java new file mode 100644 index 0000000..8b7410a --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/enums/WeEmpleCodeType.java @@ -0,0 +1,29 @@ +package com.easyink.common.enums; + + +/** + * 群活码运用场景: 单人、多人、批量 + */ +public enum WeEmpleCodeType { + + // 员工活码类型:1:单人;2:多人;3:批量; + SINGLE(1, "单人"), + MULTI(2, "多人"), + BATCH(3, "批量"); + + private final Integer type; + private final String info; + + WeEmpleCodeType(Integer type, String info) { + this.type = type; + this.info = info; + } + + public Integer getType() { + return type; + } + + public String getInfo() { + return info; + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/enums/WeEmployCodeRemarkTypeEnum.java b/easyink-common/src/main/java/com/easyink/common/enums/WeEmployCodeRemarkTypeEnum.java new file mode 100644 index 0000000..85144d0 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/enums/WeEmployCodeRemarkTypeEnum.java @@ -0,0 +1,26 @@ +package com.easyink.common.enums; + +import lombok.Getter; + +/** + * 类名:WeEmployCodeRemarkTypeEnum 员工活码设置备注类型枚举值说明 + * + * @author Society my sister Li + * @date 2021-11-02 13:50 + */ +public enum WeEmployCodeRemarkTypeEnum { + + //不设置 + NO(0), + //在昵称前设置备注 + BEFORT_NICKNAME(1), + //在昵称后设置备注 + AFTER_NICKNAME(2); + @Getter + private Integer remarkType; + + WeEmployCodeRemarkTypeEnum(Integer remarkType) { + this.remarkType = remarkType; + } + +} diff --git a/easyink-common/src/main/java/com/easyink/common/enums/WeEmployCodeSkipVerifyEnum.java b/easyink-common/src/main/java/com/easyink/common/enums/WeEmployCodeSkipVerifyEnum.java new file mode 100644 index 0000000..6237305 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/enums/WeEmployCodeSkipVerifyEnum.java @@ -0,0 +1,53 @@ +package com.easyink.common.enums; + +import com.easyink.common.exception.CustomException; +import com.easyink.common.utils.DateUtils; +import lombok.Getter; +import org.apache.commons.lang3.StringUtils; + +/** + * 类名:WeEmpleCodeSkipVerifyEnum 员工活码SkipVerify枚举值说明 + * + * @author Society my sister Li + * @date 2021-11-02 13:50 + */ +public enum WeEmployCodeSkipVerifyEnum { + + //不自动通过 + NO_PASS(0), + //全天通过 + ALL_PASS(1), + //时间段通过 + TIME_PASS(2); + @Getter + private Integer skipVerify; + + WeEmployCodeSkipVerifyEnum(Integer skipVerify) { + this.skipVerify = skipVerify; + } + + /** + * 校验是否可设置为自动通过好友 + * + * @param skipVerify 通过好友类型 + * @param effectTimeOpen 开启时间 + * @param effectTimeClose 结束时间 + * @return Boolean + */ + public static Boolean isPassByNow(Integer skipVerify, String effectTimeOpen, String effectTimeClose) { + if (skipVerify == null) { + throw new CustomException(ResultTip.TIP_GENERAL_BAD_REQUEST); + } + if (NO_PASS.getSkipVerify().equals(skipVerify)) { + return false; + } + if (ALL_PASS.getSkipVerify().equals(skipVerify)) { + return true; + } + //当skipVerify=2时,需要校验当前时间是否在指定时间范围内 + if (StringUtils.isBlank(effectTimeOpen) || StringUtils.isBlank(effectTimeClose)) { + throw new CustomException(ResultTip.TIP_GENERAL_BAD_REQUEST); + } + return DateUtils.verifyCurrTimeEithinTimeRange(effectTimeOpen, effectTimeClose); + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/enums/WeExceptionTip.java b/easyink-common/src/main/java/com/easyink/common/enums/WeExceptionTip.java new file mode 100644 index 0000000..a856553 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/enums/WeExceptionTip.java @@ -0,0 +1,641 @@ +package com.easyink.common.enums; + +/** + * 企业微信接口错误码提示 + */ +public enum WeExceptionTip { + + WE_EXCEPTION_TIP_LOSS_1(-1, "系统繁忙", "服务器暂不可用,建议稍候重试。建议重试次数不超过3次。"), + WE_EXCEPTION_TIP_40001(40001, "Secret错误,请检查企微配置", "secret在应用详情/通讯录管理助手可查看"), + WE_EXCEPTION_TIP_40003(40003, "未在通讯录找到该成员", "1)有效的UserID需要满足:长度1~64字符,由英文字母、数字、中划线、下划线以及点号构成。2)除了创建用户,其余使用UserID的接口,还要保证UserID必须在通讯录中存在。"), + WE_EXCEPTION_TIP_40004(40004, "文件不符合要求", "不满足系统文件要求【图片(image)、语音(voice)、视频(video),普通文件(file)】。"), + WE_EXCEPTION_TIP_40005(40005, "文件类型错误", "合法的type类型【媒体文件类型,分别有图片(image)、语音(voice)、视频(video),普通文件(file)】"), + WE_EXCEPTION_TIP_40006(40006, "文件小于或超出限定大小", "系统文件要求【所有文件size必须大于5个字节,图片(image):2MB,语音(voice) :2MB,视频(video) :10MB,普通文件(file):20MB】"), + WE_EXCEPTION_TIP_40007(40007, "媒体文件获取失败", "不合法的媒体文件。确认【1)媒体文件ID的获取方式,是否存在。注:上传临时素材生成的medida_id,有效期是3天。2)媒体文件类型应符合接口要求(比如发送图片消息,此时不能用音频文件的media_id)。\n】"), + WE_EXCEPTION_TIP_40008(40008, "消息类型错误", "合法的msgtype取值【文本消息、图片消息、语音消息、视频消息、文件消息、文本卡片消息、图文消息、图文消息(mpnews)、markdown消息、小程序通知消息、任务卡片消息】"), + WE_EXCEPTION_TIP_40009(40009, "图片超出限定大小", "图片大小的系统限制,图片(image):2MB"), + WE_EXCEPTION_TIP_40011(40011, "视频超出限定大小", "视频大小的系统限制,视频(video) :10MB"), + WE_EXCEPTION_TIP_40013(40013, "未找到该企业", "需确认CorpID是否填写正确,在 web管理端-设置 可查看"), + WE_EXCEPTION_TIP_40014(40014, "登录已过期", "access_token参数错误。确认:【1)access_token的获取方式 ,2)access_token是否已过期】,可以重新获取一次access_token解决"), + WE_EXCEPTION_TIP_40016(40016, "不合法的按钮个数", "菜单按钮1-3个"), + WE_EXCEPTION_TIP_40017(40017, "不合法的按钮类型", "支持的类型【click、view、scancode_push、scancode_waitmsg、pic_sysphoto、pic_photo_or_album、pic_weixin、location_select、view_miniprogram】"), + WE_EXCEPTION_TIP_40018(40018, "不合法的按钮名字长度", "长度应不超过16个字节"), + WE_EXCEPTION_TIP_40019(40019, "不合法的按钮KEY长度", "长度应不超过128字节"), + WE_EXCEPTION_TIP_40020(40020, "不合法的按钮URL长度", "长度应不超过1024字节"), + WE_EXCEPTION_TIP_40022(40022, "不合法的子菜单级数", "只能包含一级菜单和二级菜单"), + WE_EXCEPTION_TIP_40023(40023, "不合法的子菜单按钮个数", "子菜单按钮1-5个"), + WE_EXCEPTION_TIP_40024(40024, "不合法的子菜单按钮类型", "支持的类型,参考:按钮类型"), + WE_EXCEPTION_TIP_40025(40025, "不合法的子菜单按钮名字长度", "支持的类型,参考:按钮类型"), + WE_EXCEPTION_TIP_40026(40026, "不合法的子菜单按钮KEY长度", "-"), + WE_EXCEPTION_TIP_40027(40027, "不合法的子菜单按钮URL长度", "长度应不超过1024字节"), + WE_EXCEPTION_TIP_40029(40029, "oauth_code已失效", "查看帮助"), + WE_EXCEPTION_TIP_40031(40031, "有成员未在通讯录中,请重新选择", "指定的UserID列表,至少存在一个UserID不在通讯录中"), + WE_EXCEPTION_TIP_40032(40032, "成员过多,请分批操作", "查看帮助"), + WE_EXCEPTION_TIP_40033(40033, "服务异常", "不能包含\\uxxxx格式的字符"), + WE_EXCEPTION_TIP_40035(40035, "服务异常", "查看帮助"), + WE_EXCEPTION_TIP_40039(40039, "URL超出限定长度", "url长度限制1024个字节"), + WE_EXCEPTION_TIP_40050(40050, "请先创建会话", "会话需要先创建后,才可修改会话详情或者发起聊天"), + WE_EXCEPTION_TIP_40054(40054, "服务异常", "查看帮助"), + WE_EXCEPTION_TIP_40055(40055, "服务异常", "查看帮助"), + WE_EXCEPTION_TIP_40056(40056, "未在企业下找到该应用", "查看帮助"), + WE_EXCEPTION_TIP_40057(40057, "不合法的callbackurl或者callbackurl验证失败", "可自助到开发调试工具重现"), + WE_EXCEPTION_TIP_40058(40058, "服务异常", "传递参数不符合系统要求,需要参照具体API接口说明"), + WE_EXCEPTION_TIP_40059(40059, "服务异常", "开关标志位只能填 0 或者 1"), + WE_EXCEPTION_TIP_40063(40063, "服务异常", "查看帮助"), + WE_EXCEPTION_TIP_40066(40066, "有部门未在通讯录中,请重新选择", "部门列表为空,或者至少存在一个部门ID不存在于通讯录中"), + WE_EXCEPTION_TIP_40068(40068, "请先选择标签", "标签ID未指定,或者指定的标签ID不存在"), + WE_EXCEPTION_TIP_40070(40070, "未在通讯录找到指定的成员或部门", "查看帮助"), + WE_EXCEPTION_TIP_40071(40071, "该标签已存在", "标签名字已经存在"), + WE_EXCEPTION_TIP_40072(40072, "标签名为空或超出限定长度", "不允许为空,最大长度限制为32个字(汉字或英文字母)"), + WE_EXCEPTION_TIP_40073(40073, "用户不存在", "openid不存在,需确认获取来源"), + WE_EXCEPTION_TIP_40074(40074, "服务异常", "图文消息支持保密类型需改用mpnews"), + WE_EXCEPTION_TIP_40077(40077, "服务异常", "预授权码不存在,参考:获取预授权码"), + WE_EXCEPTION_TIP_40078(40078, "服务异常", "需确认获取来源,并且只能消费一次"), + WE_EXCEPTION_TIP_40080(40080, "Secret错误,请重新设置", "套件secret可在第三方管理端套件详情查看"), + WE_EXCEPTION_TIP_40082(40082, "第三方应用授权已失效", "查看帮助"), + WE_EXCEPTION_TIP_40083(40083, "第三方应用不存在", "suite_id不存在"), + WE_EXCEPTION_TIP_40084(40084, "授权码异常,请重新获取", "查看帮助"), + WE_EXCEPTION_TIP_40085(40085, "服务异常", "suite_ticket不存在或者已失效"), + WE_EXCEPTION_TIP_40086(40086, "未找到部分应用", "至少有一个不存在应用id"), + WE_EXCEPTION_TIP_40088(40088, "jobid不存在", "请检查 jobid 来源"), + WE_EXCEPTION_TIP_40089(40089, "批量任务的结果已清理", "系统仅保存最近5次批量任务的结果。可在通讯录查看实际导入情况"), + WE_EXCEPTION_TIP_40091(40091, "Secret错误,请检查企微配置", "可能用了别的企业的secret"), + WE_EXCEPTION_TIP_40092(40092, "导入文件存在不合法的内容", "查看帮助"), + WE_EXCEPTION_TIP_40093(40093, "服务异常", "请检查用于签名的jsapi_ticket是否是正确的,是否过期。可以通过获取相应jsapi_ticket接口获取当前的jsapi_ticket跟用于签名的jsapi_ticket比对是否一致,若jsapi_ticket还在有效期内,当前获取到的jsapi_ticket是一致的。若jsapi_ticket没问题,请检查用于签名的url参数是不是正确的, url(当前网页的URL, 不包含#及其后面部分)。"), + WE_EXCEPTION_TIP_40094(40094, "服务异常", "缺少主页URL参数,或者URL不合法(链接需要带上协议头,以 http:// 或者 https:// 开头)"), + WE_EXCEPTION_TIP_40096(40096, "未找到该客户", "-"), + WE_EXCEPTION_TIP_40097(40097, "该成员尚未离职", "离职成员外部联系人转移接口要求转出用户必须已经离职"), + WE_EXCEPTION_TIP_40098(40098, "有员工未完成实名认证,请重新选择", "确认传入的userid是已经过实名认证成员的"), + WE_EXCEPTION_TIP_40099(40099, "继承员工的客户已达上限,请重新选择", "-"), + WE_EXCEPTION_TIP_40100(40100, "此员工的该客户已经在转移流程中", "-"), + WE_EXCEPTION_TIP_40102(40102, "服务异常", "-"), + WE_EXCEPTION_TIP_40123(40123, "服务异常", "请确认上传的内容是否为合法的图片内容"), + WE_EXCEPTION_TIP_40124(40124, "推广活动里的sn禁止绑定", "-"), + WE_EXCEPTION_TIP_40125(40125, "服务异常", "-"), + WE_EXCEPTION_TIP_40126(40126, "企业标签个数达到上限,最多为3000个", "-"), + WE_EXCEPTION_TIP_40127(40127, "服务异常", "检查uri链接的schema是否符合参数要求"), + WE_EXCEPTION_TIP_40128(40128, "客户转接过于频繁(90天内只允许转接一次,同一个客户最多只能转接两次)", "-"), + WE_EXCEPTION_TIP_40129(40129, "当前客户正在转接中", "-"), + WE_EXCEPTION_TIP_40130(40130, "原跟进人与接手人一样,不可继承", "-"), + WE_EXCEPTION_TIP_40131(40131, "当前客户已在客户端或第三方应用操作分配", "-"), + WE_EXCEPTION_TIP_41001(41001, "认证失败,请重新登录", "-"), + WE_EXCEPTION_TIP_41002(41002, "获取企业信息失败,请重新登录或联系管理员配置企业ID", "-"), + WE_EXCEPTION_TIP_41004(41004, "获取应用配置失败,请联系管理员配置Secret", "-"), + WE_EXCEPTION_TIP_41006(41006, "服务异常,请联系客服或技术人员", "media_id为调用接口必填参数,请确认是否有传递"), + WE_EXCEPTION_TIP_41008(41008, "服务异常,请联系客服或技术人员", "-"), + WE_EXCEPTION_TIP_41009(41009, "请选择员工", "-"), + WE_EXCEPTION_TIP_41010(41010, "请填写url", "-"), + WE_EXCEPTION_TIP_41011(41011, "获取应用信息失败,请重新登录或联系管理员配置应用ID", "-"), + WE_EXCEPTION_TIP_41016(41016, "请填写标题", "发送图文消息,标题是必填参数。请确认参数是否有传递。"), + WE_EXCEPTION_TIP_41019(41019, "请选择部门", "查看帮助"), + WE_EXCEPTION_TIP_41017(41017, "请选择标签", "-"), + WE_EXCEPTION_TIP_41021(41021, "获取第三方应用信息异常,请联系客服或技术人员", "-"), + WE_EXCEPTION_TIP_41022(41022, "第三方应用授权信息异常,请联系客服或技术人员", "-"), + WE_EXCEPTION_TIP_41023(41023, "获取第三方应用令牌信息异常,请联系客服或技术人员", "-"), + WE_EXCEPTION_TIP_41024(41024, "获取应用配置失败,请联系管理员配置Secret", "-"), + WE_EXCEPTION_TIP_41025(41025, "服务异常", "-"), + WE_EXCEPTION_TIP_41033(41033, "服务异常", "发送文本卡片消息接口,description 是必填字段"), + WE_EXCEPTION_TIP_41035(41035, "请选择客户", "-"), + WE_EXCEPTION_TIP_41036(41036, "请填写已认证的企业对外简称", "企业对外简称必须是认证过的,如果要改回默认简称,传空字符串把对外简称清除就可以了"), + WE_EXCEPTION_TIP_41037(41037, "服务异常,请联系客服或技术人员", "-"), + WE_EXCEPTION_TIP_41038(41038, "服务异常,请联系客服或技术人员", "-"), + WE_EXCEPTION_TIP_41039(41039, "服务异常,请联系客服或技术人员", "-"), + WE_EXCEPTION_TIP_41040(41040, "服务异常,请联系客服或技术人员", "-"), + WE_EXCEPTION_TIP_41041(41041, "每次最多可选择100人,请分批操作", "默认限制不超过100人(包括部门展开后的人数)"), + WE_EXCEPTION_TIP_41042(41042, "服务异常,请联系客服或技术人员", "-"), + WE_EXCEPTION_TIP_41043(41043, "服务异常,请联系客服或技术人员", "-"), + WE_EXCEPTION_TIP_41044(41044, "服务异常,请联系客服或技术人员", "-"), + WE_EXCEPTION_TIP_41045(41045, "每个企业最多可配置50万个,当前企业已达上限", "-"), + WE_EXCEPTION_TIP_41046(41046, "服务异常,请联系客服或技术人员", "-"), + WE_EXCEPTION_TIP_41047(41047, "服务异常,请联系客服或技术人员", "-"), + WE_EXCEPTION_TIP_41048(41048, "所选客户本月企业群发已达上限或客户不存在", "-"), + WE_EXCEPTION_TIP_41049(41049, "服务异常,请联系客服或技术人员", "-"), + WE_EXCEPTION_TIP_41050(41050, "服务异常,请联系客服或技术人员", "欢迎语code(welcome_code)具有时效性,须在添加好友后20秒内使用"), + WE_EXCEPTION_TIP_41051(41051, "客户和服务人员已经开始聊天了", "已经开始的聊天的客户不能发送欢迎语"), + WE_EXCEPTION_TIP_41052(41052, "请选择有效的发送时间", "-"), + WE_EXCEPTION_TIP_41053(41053, "客户未同意聊天存档", "须外部联系人同意服务须知后,成员才可发送欢迎语"), + WE_EXCEPTION_TIP_41054(41054, "有员工还未激活企业微信客户端,请重新选择", "-"), + WE_EXCEPTION_TIP_41055(41055, "群欢迎语模板数量达到上限", "-"), + WE_EXCEPTION_TIP_41056(41056, "服务异常,请联系客服或技术人员", "-"), + WE_EXCEPTION_TIP_41057(41057, "企业或服务商未绑定微信开发者账号", "-"), + WE_EXCEPTION_TIP_41063(41063, "群发消息正在被派发中,请稍后再试", "创建企业群发后,立刻调用获取企业的全部群发记录的相关接口,将可能出现该错误"), + WE_EXCEPTION_TIP_41078(41078, "创建朋友圈正在进行的异步任务总数超过了限制", "-"), + WE_EXCEPTION_TIP_41079(41079, "朋友圈正在被派发中,请稍后再试", "-"), + WE_EXCEPTION_TIP_41080(41080, "附件资源大小超过限制", "-"), + WE_EXCEPTION_TIP_41081(41081, "附件资源的图片分辨率超过限制", "-"), + WE_EXCEPTION_TIP_41082(41082, "附件资源的视频时长超过限制", "-"), + WE_EXCEPTION_TIP_41102(41102, "请填写菜单名", "-"), + WE_EXCEPTION_TIP_42001(42001, "授权已过期,请重新登录", "access_token有时效性,需要重新获取一次"), + WE_EXCEPTION_TIP_42007(42007, "授权已过期,请重新登录", "pre_auth_code有时效性,需要重新获取一次"), + WE_EXCEPTION_TIP_42009(42009, "服务异常", "suite_access_token有时效性,需要重新获取一次"), + WE_EXCEPTION_TIP_42012(42012, "服务异常", "如果是agentConfig使用,请特别注意是否是使用”获取应用身份的ticket“来获取jsapi_ticket"), + WE_EXCEPTION_TIP_42013(42013, "服务异常", "需要重新走登陆流程"), + WE_EXCEPTION_TIP_42014(42014, "服务异常,请联系客服或技术人员", "-"), + WE_EXCEPTION_TIP_42015(42015, "服务异常,请联系客服或技术人员", "-"), + WE_EXCEPTION_TIP_42016(42016, "更新的task_id不存在", "-"), + WE_EXCEPTION_TIP_42017(42017, "按钮key值不存在", "-"), + WE_EXCEPTION_TIP_42018(42018, "按钮key值不合法", "-"), + WE_EXCEPTION_TIP_42019(42019, "缺少按钮key值不合法", "-"), + WE_EXCEPTION_TIP_42020(42020, "缺少按钮名称", "-"), + WE_EXCEPTION_TIP_42021(42021, "device_access_token 过期", "-"), + WE_EXCEPTION_TIP_42022(42022, "code已经被使用过。只能使用一次", "-"), + WE_EXCEPTION_TIP_43004(43004, "指定的员工未绑定微信或未关注微工作台", "需要成员使用微信登录企业微信或者关注微工作台才能获取openid"), + WE_EXCEPTION_TIP_43009(43009, "企业未验证主体", "-"), + WE_EXCEPTION_TIP_44001(44001, "多媒体文件为空", "上传格式参考:上传临时素材,确认header和body的内容正确。"), + WE_EXCEPTION_TIP_44004(44004, "消息不能为空", "发文本消息content为必填参数,且不能为空"), + WE_EXCEPTION_TIP_45001(45001, "多媒体文件大小超过限制", "图片不可超过5M;音频不可超过5M;文件不可超过20M"), + WE_EXCEPTION_TIP_45002(45002, "消息内容大小超过限制", "查看帮助"), + WE_EXCEPTION_TIP_45004(45004, "描述内容长度需在4~120个字符之间", "设置应用若带有description参数,则长度必须为4至120个字符"), + WE_EXCEPTION_TIP_45007(45007, "语音播放时间超过限制", "语音播放时长不能超过60秒"), + WE_EXCEPTION_TIP_45008(45008, "图文消息的文章数量不能超过8条", "图文消息的文章数量不能超过8条"), + WE_EXCEPTION_TIP_45009(45009, "系统繁忙,请稍后再试", "查看帮助"), + WE_EXCEPTION_TIP_45022(45022, "应用name参数长度不符合系统限制", "设置应用若带有name参数,则不允许为空,且不超过32个字符"), + WE_EXCEPTION_TIP_45024(45024, "帐号数量超过上限", "查看帮助"), + WE_EXCEPTION_TIP_45026(45026, "触发删除用户数的保护", "限制参考:全量覆盖成员"), + WE_EXCEPTION_TIP_45029(45029, "服务异常,请联系客服或技术人员", "查看帮助"), + WE_EXCEPTION_TIP_45032(45032, "图文消息author参数长度超过限制", "最长64个字节"), + WE_EXCEPTION_TIP_45033(45033, "系统繁忙,请稍后再试", "查看帮助"), + WE_EXCEPTION_TIP_45034(45034, "url必须有协议头", "在url前面加上协议头 http:// 或 https://"), + WE_EXCEPTION_TIP_46003(46003, "菜单未设置", "菜单需发布后才能获取到数据"), + WE_EXCEPTION_TIP_46004(46004, "未在通讯录下找到该成员", "需要确认指定的用户存在于通讯录中"), + WE_EXCEPTION_TIP_48002(48002, "没有操作权限,请检查企业微信管理后台配置是否与系统企微配置一致", "查看帮助"), + WE_EXCEPTION_TIP_48003(48003, "第三方应用授权信息异常,请联系客服或技术人员", "确认suite_access_token由指定的suite_id生成"), + WE_EXCEPTION_TIP_48004(48004, "没有操作权限,请检查企业微信管理后台是否授权应用", "可能是无授权或授权已被取消"), + WE_EXCEPTION_TIP_48005(48005, "服务异常", "接口已不再支持,建议改用新接口或者新方案"), + WE_EXCEPTION_TIP_48006(48006, "企业长时间未使用应用,应用操作权限被回收,请在企业微信管理后台重新启用", "由于企业长时间未使用应用,接口权限被收回,需企业管理员重新启用"), + WE_EXCEPTION_TIP_50001(50001, "服务异常", "查看帮助"), + WE_EXCEPTION_TIP_50002(50002, "成员不在权限范围,请在企业微信管理后台检查应用的权限范围", "请检查应用或管理组的权限范围"), + WE_EXCEPTION_TIP_50003(50003, "应用已禁用,请在企业微信管理后台开启", "查看帮助"), + WE_EXCEPTION_TIP_60001(60001, "部门长度不符合限制", "部门名称不能为空且长度不能超过32个字"), + WE_EXCEPTION_TIP_60003(60003, "未在通讯录找到该部门", "需要确认部门ID是否有带,并且存在通讯录中"), + WE_EXCEPTION_TIP_60004(60004, "未在通讯录找到父部门", "需要确认父亲部门ID是否有带,并且存在通讯录中"), + WE_EXCEPTION_TIP_60005(60005, "部门下存在成员,不可删除", "不允许删除有成员的部门"), + WE_EXCEPTION_TIP_60006(60006, "部门下存在子部门,不可删除", "不允许删除有子部门的部门"), + WE_EXCEPTION_TIP_60007(60007, "不允许删除根部门", "-"), + WE_EXCEPTION_TIP_60008(60008, "部门已存在", "部门ID或者部门名称已存在"), + WE_EXCEPTION_TIP_60009(60009, "部门名称含有非法字符", "不能含有 \\:?*“<>| 等字符"), + WE_EXCEPTION_TIP_60010(60010, "部门存在循环关系", "查看帮助"), + WE_EXCEPTION_TIP_60011(60011, "请在企业微信管理后台检查应用的可见范围", "查看帮助"), + WE_EXCEPTION_TIP_60012(60012, "不允许删除默认应用", "默认应用的id为0"), + WE_EXCEPTION_TIP_60020(60020, "访问ip不在服务商白名单,请联系客服", "查看帮助"), + WE_EXCEPTION_TIP_60021(60021, "员工不在应用可见范围内,请在企业微信管理后台设置", "-"), + WE_EXCEPTION_TIP_60028(60028, "不允许修改第三方应用的主页 URL", "第三方应用类型,不允许通过接口修改该应用的主页 URL"), + WE_EXCEPTION_TIP_60102(60102, "该成员已存在", "-"), + WE_EXCEPTION_TIP_60103(60103, "手机号码仅支持数字、+、-,且不超过32位", "长度不超过32位,字符仅支持数字,加号和减号"), + WE_EXCEPTION_TIP_60104(60104, "手机号码已存在,成员手机号不能重复", "同一个企业内,成员的手机号不能重复。建议更换手机号,或者更新已有的手机记录。"), + WE_EXCEPTION_TIP_60105(60105, "邮箱仅支持有效的email格式,且不超过64位", "长度不超过64位,且为有效的email格式"), + WE_EXCEPTION_TIP_60106(60106, "邮箱已存在,成员邮箱不能重复", "同一个企业内,成员的邮箱不能重复。建议更换邮箱,或者更新已有的邮箱记录。"), + WE_EXCEPTION_TIP_60107(60107, "微信号不合法", "微信号格式由字母、数字、”-“、”_“组成,长度为 3-20 字节,首字符必须是字母或”-“或”_“"), + WE_EXCEPTION_TIP_60110(60110, "成员最多可归属于20个部门", "用户同时归属部门不超过20个"), + WE_EXCEPTION_TIP_60111(60111, "未在通讯录找到该成员", "UserID参数为空,或者不存在通讯录中"), + WE_EXCEPTION_TIP_60112(60112, "成员姓名不能超过64字符", "不能为空,且不能超过64字符"), + WE_EXCEPTION_TIP_60123(60123, "未在通讯录找到该部门", "部门不存在通讯录中"), + WE_EXCEPTION_TIP_60124(60124, "未在通讯录找到父部门", "父部门不存在通讯录中"), + WE_EXCEPTION_TIP_60125(60125, "部门名字不能为空,且不超过64字符,不包含\\:*?”<>|等特殊字符", "不能为空,且不能超过64字节,且不能含有\\:*?”<>|等字符"), + WE_EXCEPTION_TIP_60127(60127, "请选择部门", "-"), + WE_EXCEPTION_TIP_60129(60129, "成员手机和邮箱不能都为空", "成员手机和邮箱至少有个非空"), + WE_EXCEPTION_TIP_60132(60132, "is_leader_in_dept和department的元素个数不一致", "-"), + WE_EXCEPTION_TIP_60136(60136, "记录不存在", "-"), + WE_EXCEPTION_TIP_60137(60137, "家长手机号重复", "同一个家校通讯录中,家长的手机号不能重复。建议更换手机号,或者更新已有的手机记录。"), + WE_EXCEPTION_TIP_60203(60203, "不合法的模版ID", "-"), + WE_EXCEPTION_TIP_60204(60204, "模版状态不可用", "-"), + WE_EXCEPTION_TIP_60205(60205, "模版关键词不匹配", "-"), + WE_EXCEPTION_TIP_60206(60206, "该种类型的消息只支持第三方独立应用使用", "-"), + WE_EXCEPTION_TIP_60207(60207, "第三方独立应用只允许发送模板消息", "-"), + WE_EXCEPTION_TIP_60208(60208, "第三方独立应用不支持指定@all,不支持参数toparty和totag", "-"), + WE_EXCEPTION_TIP_65000(65000, "学校已经迁移", "-"), + WE_EXCEPTION_TIP_65001(65001, "无效的关注模式", "-"), + WE_EXCEPTION_TIP_65002(65002, "导入家长信息数量过多", "批量导入家长每次最多1000个"), + WE_EXCEPTION_TIP_65003(65003, "学校尚未迁移", "-"), + WE_EXCEPTION_TIP_65004(65004, "组织架构不存在", "-"), + WE_EXCEPTION_TIP_65005(65005, "无效的同步模式", "-"), + WE_EXCEPTION_TIP_65006(65006, "无效的管理员类型", "-"), + WE_EXCEPTION_TIP_65007(65007, "无效的家校部门类型", "-"), + WE_EXCEPTION_TIP_65008(65008, "无效的入学年份", "-"), + WE_EXCEPTION_TIP_65009(65009, "无效的标准年级类型", "-"), + WE_EXCEPTION_TIP_65010(65010, "此userid并不是学生", "-"), + WE_EXCEPTION_TIP_65011(65011, "家长userid数量超过限制", "每次最多批量处理100个家长"), + WE_EXCEPTION_TIP_65012(65012, "学生userid数量超过限制", "每次最多批量处理10个学生"), + WE_EXCEPTION_TIP_65013(65013, "学生已有家长", "-"), + WE_EXCEPTION_TIP_65014(65014, "非学校企业", "-"), + WE_EXCEPTION_TIP_65015(65015, "父部门类型不匹配", "添加学校部门,需满足层级关机,班级需要以年级为父部门"), + WE_EXCEPTION_TIP_65018(65018, "家长人数达到上限", "未验证的学校企业最多可添加2000名家长,验证过的学校企业最多可添加20000名家长"), + WE_EXCEPTION_TIP_72023(72023, "发票已被其他公众号锁定", "查看帮助"), + WE_EXCEPTION_TIP_72024(72024, "发票状态错误", "reimburse_status状态错误,参考:更新发票状态"), + WE_EXCEPTION_TIP_72037(72037, "存在发票不属于该用户", "只能批量更新该openid的发票,参考:批量更新发票状态"), + WE_EXCEPTION_TIP_80001(80001, "可信域名不正确,或者无ICP备案", "查看帮助"), + WE_EXCEPTION_TIP_81001(81001, "部门下的结点数超过限制(3W)", "-"), + WE_EXCEPTION_TIP_81002(81002, "部门最多15层", "-"), + WE_EXCEPTION_TIP_81003(81003, "标签下节点个数超过30000个", "-"), + WE_EXCEPTION_TIP_81011(81011, "无权限操作标签", "查看帮助"), + WE_EXCEPTION_TIP_81012(81012, "请选择使用范围", "请求没有填写UserID、部门ID、标签ID"), + WE_EXCEPTION_TIP_81013(81013, "没有操作权限,请检查企业微信管理后台应用的可见范围", "查看帮助"), + WE_EXCEPTION_TIP_81014(81014, "标签添加成员,单次添加user或party过多", "-"), + WE_EXCEPTION_TIP_81015(81015, "邮箱域名需要跟企业邮箱域名一致", "-"), + WE_EXCEPTION_TIP_81016(81016, "logined_userid字段缺失", "-"), + WE_EXCEPTION_TIP_81017(81017, "items字段大小超过限制(20)", "-"), + WE_EXCEPTION_TIP_81018(81018, "该服务商可获取名字数量配额不足", "-"), + WE_EXCEPTION_TIP_81019(81019, "服务异常", "-"), + WE_EXCEPTION_TIP_81020(81020, "服务异常", "-"), + WE_EXCEPTION_TIP_81021(81021, "服务异常", "-"), + WE_EXCEPTION_TIP_82001(82001, "服务异常", "查看帮助"), + WE_EXCEPTION_TIP_82002(82002, "每次最多可选择100个部门,请分批操作", "发消息,单次不能超过100个部门"), + WE_EXCEPTION_TIP_82003(82003, "每次最多可选择100个标签,请分批操作", "发消息,单次不能超过100个标签"), + WE_EXCEPTION_TIP_84014(84014, "成员票据过期", "查看帮助"), + WE_EXCEPTION_TIP_84015(84015, "成员票据无效", "确认user_ticket参数来源是否正确。参考接口:根据code获取成员信息"), + WE_EXCEPTION_TIP_84019(84019, "服务异常", "-"), + WE_EXCEPTION_TIP_84020(84020, "服务异常", "确认参数是否有带,并且已创建"), + WE_EXCEPTION_TIP_84021(84021, "服务异常", "-"), + WE_EXCEPTION_TIP_84022(84022, "服务异常", "-"), + WE_EXCEPTION_TIP_84023(84023, "服务异常", "-"), + WE_EXCEPTION_TIP_84024(84024, "无注册信息", "查看帮助"), + WE_EXCEPTION_TIP_84025(84025, "服务异常", "必须是[a-zA-Z0-9]的参数值,长度不可超过128个字节"), + WE_EXCEPTION_TIP_84052(84052, "服务异常", "-"), + WE_EXCEPTION_TIP_84053(84053, "服务异常", "-"), + WE_EXCEPTION_TIP_84054(84054, "服务异常", "-"), + WE_EXCEPTION_TIP_84055(84055, "超过拨打公费电话频率,同一客服5s内只能拨打一次", "同一个客服5秒内只能调用api拨打一次公费电话"), + WE_EXCEPTION_TIP_84056(84056, "被拨打用户安装应用时未授权拨打公费电话权限", "-"), + WE_EXCEPTION_TIP_84057(84057, "公费电话余额不足", "-"), + WE_EXCEPTION_TIP_84058(84058, "拨号人 呼叫号码不支持", "-"), + WE_EXCEPTION_TIP_84059(84059, "号码非法", "-"), + WE_EXCEPTION_TIP_84060(84060, "被拨号人 呼叫号码不支持", "-"), + WE_EXCEPTION_TIP_84061(84061, "不存在外部联系人的关系", "-"), + WE_EXCEPTION_TIP_84062(84062, "未开启公费电话应用", "-"), + WE_EXCEPTION_TIP_84063(84063, "拨号人不存在", "-"), + WE_EXCEPTION_TIP_84064(84064, "被拨号人不存在", "-"), + WE_EXCEPTION_TIP_84065(84065, "拨号人与被拨号者不能为同一个人", "不允许自己拨打给自己"), + WE_EXCEPTION_TIP_84066(84066, "服务商拨打次数超过限制", "单个企业管理员,在一天(以上午10:00为起始时间)内,对应单个服务商,只能被呼叫【4】次。"), + WE_EXCEPTION_TIP_84067(84067, "管理员收到的服务商公费电话个数超过限制", "单个企业管理员,在一天(以上午10:00为起始时间)内,一共只能被【3】个服务商成功呼叫。"), + WE_EXCEPTION_TIP_84069(84069, "拨打方被限制拨打公费电话", "-"), + WE_EXCEPTION_TIP_84070(84070, "不支持的电话号码", "拨打方或者被拨打方电话号码不支持"), + WE_EXCEPTION_TIP_84071(84071, "不合法的外部联系人授权码", "非法或者已经消费过"), + WE_EXCEPTION_TIP_84072(84072, "应用未配置客服", "-"), + WE_EXCEPTION_TIP_84073(84073, "客服不在应用配置的客服列表中", "-"), + WE_EXCEPTION_TIP_84074(84074, "成员不在客户联系配置的使用范围内,请在企业微信管理后台 客户联系->配置->配置使用范围添加该成员", "-"), + WE_EXCEPTION_TIP_84075(84075, "服务异常", "-"), + WE_EXCEPTION_TIP_84076(84076, "服务异常", "-"), + WE_EXCEPTION_TIP_84077(84077, "订单价格过高,无法受理", "-"), + WE_EXCEPTION_TIP_84078(84078, "购买人数不正确", "-"), + WE_EXCEPTION_TIP_84079(84079, "价格策略不存在", "-"), + WE_EXCEPTION_TIP_84080(84080, "订单不存在", "-"), + WE_EXCEPTION_TIP_84081(84081, "存在未支付订单", "-"), + WE_EXCEPTION_TIP_84082(84082, "存在申请退款中的订单", "-"), + WE_EXCEPTION_TIP_84083(84083, "非服务人员", "-"), + WE_EXCEPTION_TIP_84084(84084, "非跟进用户", "-"), + WE_EXCEPTION_TIP_84085(84085, "应用已下架", "-"), + WE_EXCEPTION_TIP_84086(84086, "订单人数超过可购买最大人数", "-"), + WE_EXCEPTION_TIP_84087(84087, "打开订单支付前禁止关闭订单", "-"), + WE_EXCEPTION_TIP_84088(84088, "禁止关闭已支付的订单", "-"), + WE_EXCEPTION_TIP_84089(84089, "订单已支付", "-"), + WE_EXCEPTION_TIP_84090(84090, "服务异常", "-"), + WE_EXCEPTION_TIP_84091(84091, "订单价格不可低于下限", "-"), + WE_EXCEPTION_TIP_84092(84092, "无法发起代下单操作", "-"), + WE_EXCEPTION_TIP_84093(84093, "代理关系已占用,无法代下单", "-"), + WE_EXCEPTION_TIP_84094(84094, "该应用未配置代理分润规则,请先联系应用服务商处理", "-"), + WE_EXCEPTION_TIP_84095(84095, "免费试用版,无法扩容", "-"), + WE_EXCEPTION_TIP_84096(84096, "免费试用版,无法续期", "-"), + WE_EXCEPTION_TIP_84097(84097, "当前企业有未处理订单", "-"), + WE_EXCEPTION_TIP_84098(84098, "固定总量,无法扩容", "-"), + WE_EXCEPTION_TIP_84099(84099, "非购买状态,无法扩容", "-"), + WE_EXCEPTION_TIP_84100(84100, "未购买过此应用,无法续期", "-"), + WE_EXCEPTION_TIP_84101(84101, "企业已试用付费版本,无法全新购买", "-"), + WE_EXCEPTION_TIP_84102(84102, "企业当前应用状态已过期,无法扩容", "-"), + WE_EXCEPTION_TIP_84103(84103, "仅可修改未支付订单", "-"), + WE_EXCEPTION_TIP_84104(84104, "订单已支付,无法修改", "-"), + WE_EXCEPTION_TIP_84105(84105, "订单已被取消,无法修改", "-"), + WE_EXCEPTION_TIP_84106(84106, "企业含有该应用的待支付订单,无法代下单", "-"), + WE_EXCEPTION_TIP_84107(84107, "企业含有该应用的退款中订单,无法代下单", "-"), + WE_EXCEPTION_TIP_84108(84108, "企业含有该应用的待生效订单,无法代下单", "-"), + WE_EXCEPTION_TIP_84109(84109, "订单定价不能未0", "-"), + WE_EXCEPTION_TIP_84110(84110, "新安装应用不在试用状态,无法升级为付费版", "-"), + WE_EXCEPTION_TIP_84111(84111, "无足够可用优惠券", "-"), + WE_EXCEPTION_TIP_84112(84112, "无法关闭未支付订单", "-"), + WE_EXCEPTION_TIP_84113(84113, "无付费信息", "-"), + WE_EXCEPTION_TIP_84114(84114, "虚拟版本不支持下单", "-"), + WE_EXCEPTION_TIP_84115(84115, "虚拟版本不支持扩容", "-"), + WE_EXCEPTION_TIP_84116(84116, "虚拟版本不支持续期", "-"), + WE_EXCEPTION_TIP_84117(84117, "在虚拟正式版期内不能扩容", "-"), + WE_EXCEPTION_TIP_84118(84118, "虚拟正式版期内不能变更版本", "-"), + WE_EXCEPTION_TIP_84119(84119, "当前企业未报备,无法进行代下单", "-"), + WE_EXCEPTION_TIP_84120(84120, "当前应用版本已删除", "-"), + WE_EXCEPTION_TIP_84121(84121, "应用版本已删除,无法扩容", "-"), + WE_EXCEPTION_TIP_84122(84122, "应用版本已删除,无法续期", "-"), + WE_EXCEPTION_TIP_84123(84123, "非虚拟版本,无法升级", "-"), + WE_EXCEPTION_TIP_84124(84124, "非行业方案订单,不能添加部分应用版本的订单", "-"), + WE_EXCEPTION_TIP_84125(84125, "购买人数不能少于最少购买人数", "-"), + WE_EXCEPTION_TIP_84126(84126, "购买人数不能多于最大购买人数", "-"), + WE_EXCEPTION_TIP_84127(84127, "无应用管理权限", "-"), + WE_EXCEPTION_TIP_84128(84128, "无该行业方案下全部应用的管理权限", "-"), + WE_EXCEPTION_TIP_84129(84129, "付费策略已被删除,无法下单", "-"), + WE_EXCEPTION_TIP_84130(84130, "订单生效时间不合法", "-"), + WE_EXCEPTION_TIP_84200(84200, "文件转译解析错误", "只支持utf8文件转译,可能是不支持的文件类型或者格式"), + WE_EXCEPTION_TIP_85002(85002, "包含不合法的词语", "-"), + WE_EXCEPTION_TIP_85004(85004, "每企业每个月设置的可信域名不可超过20个", "-"), + WE_EXCEPTION_TIP_85005(85005, "可信域名未通过所有权校验", "查看帮助"), + WE_EXCEPTION_TIP_86001(86001, "服务异常", "-"), + WE_EXCEPTION_TIP_86003(86003, "聊天对象不存在", "-"), + WE_EXCEPTION_TIP_86004(86004, "群名不合法,请重新设置", "-"), + WE_EXCEPTION_TIP_86005(86005, "服务异常", "-"), + WE_EXCEPTION_TIP_86006(86006, "群成员数过多或过少", "-"), + WE_EXCEPTION_TIP_86007(86007, "不合法的群成员", "-"), + WE_EXCEPTION_TIP_86008(86008, "非法操作非自己创建的群", "-"), + WE_EXCEPTION_TIP_86101(86101, "仅群主才有操作权限", "-"), + WE_EXCEPTION_TIP_86201(86201, "请选择群聊", "-"), + WE_EXCEPTION_TIP_86202(86202, "请填写群名", "-"), + WE_EXCEPTION_TIP_86203(86203, "服务异常", "-"), + WE_EXCEPTION_TIP_86204(86204, "请添加群成员", "-"), + WE_EXCEPTION_TIP_86205(86205, "服务异常", "-"), + WE_EXCEPTION_TIP_86206(86206, "服务异常", "-"), + WE_EXCEPTION_TIP_86207(86207, "群主不在群成员列表", "-"), + WE_EXCEPTION_TIP_86215(86215, "会话ID已经存在", "-"), + WE_EXCEPTION_TIP_86216(86216, "未找到该成员", "查看帮助"), + WE_EXCEPTION_TIP_86217(86217, "会话发送者不在会话成员列表中", "会话的发送者,必须是会话的成员列表之一"), + WE_EXCEPTION_TIP_86220(86220, "服务异常", "查看帮助"), + WE_EXCEPTION_TIP_86224(86224, "不是受限群,不允许使用该接口", "-"), + WE_EXCEPTION_TIP_90001(90001, "未认证摇一摇周边", "-"), + WE_EXCEPTION_TIP_90002(90002, "服务异常", "-"), + WE_EXCEPTION_TIP_90003(90003, "服务异常", "-"), + WE_EXCEPTION_TIP_90100(90100, "非法的对外属性类型", "-"), + WE_EXCEPTION_TIP_90101(90101, "文本长度不可超过12字符", "文本长度不可超过12个UTF8字符"), + WE_EXCEPTION_TIP_90102(90102, "链接标题长度不可超过12字符", "标题长度不可超过12个UTF8字符"), + WE_EXCEPTION_TIP_90103(90103, "URL无法访问", "-"), + WE_EXCEPTION_TIP_90104(90104, "小程序标题长度不可超过12字符", "标题长度不可超过12个UTF8字符"), + WE_EXCEPTION_TIP_90105(90105, "小程序访问路径无效", "-"), + WE_EXCEPTION_TIP_90106(90106, "服务异常", "-"), + WE_EXCEPTION_TIP_90200(90200, "请填写小程序appid", "-"), + WE_EXCEPTION_TIP_90201(90201, "小程序通知的content_item不能超过10个", "item个数不能超过10个"), + WE_EXCEPTION_TIP_90202(90202, "小程序通知中的key不能为空或超过10个汉字", "不能为空或超过10个汉字"), + WE_EXCEPTION_TIP_90203(90203, "小程序通知中的value长度不能为空或超过30个汉字", "不能为空或超过30个汉字"), + WE_EXCEPTION_TIP_90204(90204, "服务异常", "-"), + WE_EXCEPTION_TIP_90206(90206, "小程序未关联到企业中,请在小程序开发后台关联当前企业", "-"), + WE_EXCEPTION_TIP_90207(90207, "小程序appid无效", "-"), + WE_EXCEPTION_TIP_90208(90208, "小程序appid不匹配", "-"), + WE_EXCEPTION_TIP_90300(90300, "服务异常", "-"), + WE_EXCEPTION_TIP_90302(90302, "付费应用已过期", "-"), + WE_EXCEPTION_TIP_90303(90303, "付费应用超过最大使用人数", "-"), + WE_EXCEPTION_TIP_90304(90304, "订单中心服务异常,请稍后重试", "-"), + WE_EXCEPTION_TIP_90305(90305, "服务异常", "-"), + WE_EXCEPTION_TIP_90306(90306, "服务异常", "-"), + WE_EXCEPTION_TIP_90307(90307, "登录态过期", "-"), + WE_EXCEPTION_TIP_90308(90308, "在开启IP鉴权的前提下,识别为无效的请求IP", "-"), + WE_EXCEPTION_TIP_90309(90309, "订单已经存在,请勿重复下单", "-"), + WE_EXCEPTION_TIP_90310(90310, "找不到订单", "-"), + WE_EXCEPTION_TIP_90311(90311, "关单失败, 可能原因:该单并没被拉起支付页面; 已经关单;已经支付;渠道失败;单处于保护状态;等等", "-"), + WE_EXCEPTION_TIP_90312(90312, "退款请求失败, 详情请看errmsg", "-"), + WE_EXCEPTION_TIP_90313(90313, "退款调用频率限制,超过规定的阈值", "-"), + WE_EXCEPTION_TIP_90314(90314, "订单状态错误,可能未支付,或者当前状态操作受限", "-"), + WE_EXCEPTION_TIP_90315(90315, "退款请求失败,主键冲突,请核实退款refund_id是否已使用", "-"), + WE_EXCEPTION_TIP_90316(90316, "退款原因编号不对", "-"), + WE_EXCEPTION_TIP_90317(90317, "尚未注册成为供应商", "-"), + WE_EXCEPTION_TIP_90318(90318, "服务异常", "-"), + WE_EXCEPTION_TIP_90319(90319, "服务异常", "-"), + WE_EXCEPTION_TIP_90320(90320, "订单token无效", "-"), + WE_EXCEPTION_TIP_90321(90321, "订单token已过有效时间", "-"), + WE_EXCEPTION_TIP_90322(90322, "旧套件(包含多个应用的套件)不支持支付系统", "-"), + WE_EXCEPTION_TIP_90323(90323, "单价超过限额", "-"), + WE_EXCEPTION_TIP_90324(90324, "商品数量超过限额", "-"), + WE_EXCEPTION_TIP_90325(90325, "预支单已经存在", "-"), + WE_EXCEPTION_TIP_90326(90326, "预支单单号非法", "-"), + WE_EXCEPTION_TIP_90327(90327, "该预支单已经结算下单", "-"), + WE_EXCEPTION_TIP_90328(90328, "结算下单失败,详情请看errmsg", "-"), + WE_EXCEPTION_TIP_90329(90329, "该订单号已经被预支单占用", "-"), + WE_EXCEPTION_TIP_90330(90330, "创建供应商失败", "-"), + WE_EXCEPTION_TIP_90331(90331, "更新供应商失败", "-"), + WE_EXCEPTION_TIP_90332(90332, "还没签署合同", "-"), + WE_EXCEPTION_TIP_90333(90333, "创建合同失败", "-"), + WE_EXCEPTION_TIP_90338(90338, "已经过了可退款期限", "-"), + WE_EXCEPTION_TIP_90339(90339, "供应商主体名包含非法字符", "-"), + WE_EXCEPTION_TIP_90340(90340, "创建客户失败,可能信息真实性校验失败", "-"), + WE_EXCEPTION_TIP_90341(90341, "退款金额大于付款金额", "-"), + WE_EXCEPTION_TIP_90342(90342, "退款金额超过账户余额", "-"), + WE_EXCEPTION_TIP_90343(90343, "退款单号已经存在", "-"), + WE_EXCEPTION_TIP_90344(90344, "指定的付款渠道无效", "-"), + WE_EXCEPTION_TIP_90345(90345, "超过5w人民币不可指定微信支付渠道", "-"), + WE_EXCEPTION_TIP_90346(90346, "同一单的退款次数超过限制", "-"), + WE_EXCEPTION_TIP_90347(90347, "退款金额不可为0", "-"), + WE_EXCEPTION_TIP_90348(90348, "管理端没配置支付密钥", "-"), + WE_EXCEPTION_TIP_90349(90349, "记录数量太大", "-"), + WE_EXCEPTION_TIP_90350(90350, "银行信息真实性校验失败", "-"), + WE_EXCEPTION_TIP_90351(90351, "应用状态异常", "-"), + WE_EXCEPTION_TIP_90352(90352, "延迟试用期天数超过限制", "-"), + WE_EXCEPTION_TIP_90353(90353, "预支单列表不可为空", "-"), + WE_EXCEPTION_TIP_90354(90354, "预支单列表数量超过限制", "-"), + WE_EXCEPTION_TIP_90355(90355, "关联有退款预支单,不可删除", "-"), + WE_EXCEPTION_TIP_90356(90356, "不能0金额下单", "-"), + WE_EXCEPTION_TIP_90357(90357, "代下单必须指定支付渠道", "-"), + WE_EXCEPTION_TIP_90358(90358, "预支单或代下单,不支持部分退款", "-"), + WE_EXCEPTION_TIP_90359(90359, "预支单与下单者企业不匹配", "-"), + WE_EXCEPTION_TIP_90456(90456, "必须指定组织者", "-"), + WE_EXCEPTION_TIP_90457(90457, "日历ID异常", "-"), + WE_EXCEPTION_TIP_90458(90458, "日历ID列表不能为空", "-"), + WE_EXCEPTION_TIP_90459(90459, "日历已删除", "-"), + WE_EXCEPTION_TIP_90460(90460, "日程已删除", "-"), + WE_EXCEPTION_TIP_90461(90461, "日程ID异常", "-"), + WE_EXCEPTION_TIP_90462(90462, "日程ID列表不能为空", "-"), + WE_EXCEPTION_TIP_90463(90463, "不能变更组织者", "-"), + WE_EXCEPTION_TIP_90464(90464, "参与者数量超过限制", "-"), + WE_EXCEPTION_TIP_90465(90465, "不支持的重复类型", "-"), + WE_EXCEPTION_TIP_90466(90466, "不能操作别的应用创建的日历/日程", "-"), + WE_EXCEPTION_TIP_90467(90467, "星期参数异常", "-"), + WE_EXCEPTION_TIP_90468(90468, "不能变更组织者", "-"), + WE_EXCEPTION_TIP_90469(90469, "每页大小超过限制", "-"), + WE_EXCEPTION_TIP_90470(90470, "页数异常", "-"), + WE_EXCEPTION_TIP_90471(90471, "提醒时间异常", "-"), + WE_EXCEPTION_TIP_90472(90472, "没有日历/日程操作权限", "-"), + WE_EXCEPTION_TIP_90473(90473, "颜色参数异常", "-"), + WE_EXCEPTION_TIP_90474(90474, "组织者不能与参与者重叠", "-"), + WE_EXCEPTION_TIP_90475(90475, "不是组织者的日历", "-"), + WE_EXCEPTION_TIP_90479(90479, "不允许操作用户创建的日程", "-"), + WE_EXCEPTION_TIP_90500(90500, "群主并未离职", "-"), + WE_EXCEPTION_TIP_90501(90501, "该群不是客户群", "-"), + WE_EXCEPTION_TIP_90502(90502, "群主已经离职", "-"), + WE_EXCEPTION_TIP_90503(90503, "满人 & 99个微信成员,没办法踢,要客户端确认", "-"), + WE_EXCEPTION_TIP_90504(90504, "群主没变", "-"), + WE_EXCEPTION_TIP_90507(90507, "离职群正在继承处理中", "-"), + WE_EXCEPTION_TIP_90508(90508, "离职群已经继承", "-"), + WE_EXCEPTION_TIP_91040(91040, "服务异常", "查看帮助"), + WE_EXCEPTION_TIP_92000(92000, "成员不在应用可见范围之内", "-"), + WE_EXCEPTION_TIP_92001(92001, "应用没有敏感信息权限", "-"), + WE_EXCEPTION_TIP_92002(92002, "不允许跨企业调用", "-"), + WE_EXCEPTION_TIP_93000(93000, "机器人webhookurl不合法或者机器人已经被移除出群", "-"), + WE_EXCEPTION_TIP_93004(93004, "机器人被停用", "-"), + WE_EXCEPTION_TIP_93008(93008, "不在群里", "-"), + WE_EXCEPTION_TIP_94000(94000, "应用未开启工作台自定义模式", "请在管理端后台应用详情里面开启自定义工作台模式"), + WE_EXCEPTION_TIP_94001(94001, "服务异常", "-"), + WE_EXCEPTION_TIP_94002(94002, "服务异常", "-"), + WE_EXCEPTION_TIP_94003(94003, "服务异常", "-"), + WE_EXCEPTION_TIP_94005(94005, "服务异常", "-"), + WE_EXCEPTION_TIP_94006(94006, "服务异常", "-"), + WE_EXCEPTION_TIP_94007(94007, "服务异常", "-"), + WE_EXCEPTION_TIP_94008(94008, "应用未设置自定义工作台模版类型", "-"), + WE_EXCEPTION_TIP_301002(301002, "无权限操作指定的应用", "查看帮助"), + WE_EXCEPTION_TIP_301005(301005, "不允许删除创建者", "创建者不允许从通讯录中删除。如果需要删除该成员,需要先在WEB管理端转移创建者身份。"), + WE_EXCEPTION_TIP_301012(301012, "服务异常", "长度不允许超过128个字符"), + WE_EXCEPTION_TIP_301013(301013, "服务异常", "telephone必须由1-32位的纯数字或’-‘号组成。"), + WE_EXCEPTION_TIP_301014(301014, "服务异常", "参数如果有传递,不允许为空字符串,同时不能超过64字节,只能是由字母、数字、点(.)、减号(-)、空格或下划线(_)组成"), + WE_EXCEPTION_TIP_301015(301015, "服务异常", "请检查 mediaid 来源,应该通过上传临时素材的图片类型获得mediaid"), + WE_EXCEPTION_TIP_301016(301016, "上传语音文件不符合系统要求", "语音文件的系统限制,参考上传的媒体文件限制"), + WE_EXCEPTION_TIP_301017(301017, "上传语音文件仅支持AMR格式", "语音文件的系统限制,参考上传的媒体文件限制"), + WE_EXCEPTION_TIP_301021(301021, "未在通讯录下找到部分成员", "至少有一个userid不存在于通讯录中"), + WE_EXCEPTION_TIP_301022(301022, "获取打卡数据失败", "系统失败,可重试处理"), + WE_EXCEPTION_TIP_301023(301023, "每次最多可选择100个,请分批操作", "列表数量不能为0且不超过100"), + WE_EXCEPTION_TIP_301024(301024, "获取打卡记录时间间隔超限", "保证开始时间大于0 且结束时间大于 0 且结束时间大于开始时间,且间隔少于一个月"), + WE_EXCEPTION_TIP_301025(301025, "服务异常", "请参考参数说明正确填写"), + WE_EXCEPTION_TIP_301036(301036, "不允许更新该用户的userid", "查看帮助"), + WE_EXCEPTION_TIP_302003(302003, "有成员重复,请重新操作", "-"), + WE_EXCEPTION_TIP_302004(302004, "组织架构不合法(1不是一棵树,2 多个一样的partyid,3 partyid空,4 partyid name 空,5 同一个父节点下有两个子节点 部门名字一样 可能是以上情况,请一一排查)", "-"), + WE_EXCEPTION_TIP_302005(302005, "批量导入系统失败,请重新尝试导入", "-"), + WE_EXCEPTION_TIP_302006(302006, "批量导入任务的文件中partyid有重复", "-"), + WE_EXCEPTION_TIP_302007(302007, "批量导入任务的文件中,同一个部门下有两个子部门名字一样", "-"), + WE_EXCEPTION_TIP_2000002(2000002, "应用不存在", "指定的CorpId不存在"), + WE_EXCEPTION_TIP_600001(600001, "不合法的sn", "sn可能尚未进行登记"), + WE_EXCEPTION_TIP_600002(600002, "设备已注册", "可能设备已经建立过长连接"), + WE_EXCEPTION_TIP_600003(600003, "不合法的硬件activecode", "-"), + WE_EXCEPTION_TIP_600004(600004, "该硬件尚未授权任何企业", "-"), + WE_EXCEPTION_TIP_600005(600005, "硬件Secret无效", "-"), + WE_EXCEPTION_TIP_600007(600007, "服务异常", "-"), + WE_EXCEPTION_TIP_600008(600008, "服务异常", "-"), + WE_EXCEPTION_TIP_600009(600009, "服务异常", "-"), + WE_EXCEPTION_TIP_600010(600010, "服务异常", "-"), + WE_EXCEPTION_TIP_600011(600011, "签名校验失败", "-"), + WE_EXCEPTION_TIP_600012(600012, "长连接已经注册过设备", "-"), + WE_EXCEPTION_TIP_600013(600013, "缺少activecode参数", "-"), + WE_EXCEPTION_TIP_600014(600014, "设备未网络注册", "-"), + WE_EXCEPTION_TIP_600015(600015, "服务异常", "-"), + WE_EXCEPTION_TIP_600016(600016, "设备未激活", "-"), + WE_EXCEPTION_TIP_600018(600018, "无效的起始结束时间", "-"), + WE_EXCEPTION_TIP_600020(600020, "设备未登录", "-"), + WE_EXCEPTION_TIP_600021(600021, "设备sn已存在", "-"), + WE_EXCEPTION_TIP_600023(600023, "时间戳已失效", "-"), + WE_EXCEPTION_TIP_600024(600024, "固件大小超过5M", "-"), + WE_EXCEPTION_TIP_600025(600025, "固件名为空或者超过20字节", "-"), + WE_EXCEPTION_TIP_600026(600026, "固件信息不存在", "-"), + WE_EXCEPTION_TIP_600027(600027, "服务异常", "-"), + WE_EXCEPTION_TIP_600028(600028, "固件版本已存在", "-"), + WE_EXCEPTION_TIP_600029(600029, "非法的固件版本", "-"), + WE_EXCEPTION_TIP_600030(600030, "服务异常", "-"), + WE_EXCEPTION_TIP_600031(600031, "硬件固件不允许升级", "-"), + WE_EXCEPTION_TIP_600032(600032, "无法解析硬件二维码", "-"), + WE_EXCEPTION_TIP_600033(600033, "设备型号id冲突", "-"), + WE_EXCEPTION_TIP_600034(600034, "指纹数据大小超过限制", "-"), + WE_EXCEPTION_TIP_600035(600035, "人脸数据大小超过限制", "-"), + WE_EXCEPTION_TIP_600036(600036, "设备sn冲突", "-"), + WE_EXCEPTION_TIP_600037(600037, "缺失设备型号id", "-"), + WE_EXCEPTION_TIP_600038(600038, "设备型号不存在", "-"), + WE_EXCEPTION_TIP_600039(600039, "不支持的设备类型", "-"), + WE_EXCEPTION_TIP_600040(600040, "打印任务id不存在", "-"), + WE_EXCEPTION_TIP_600041(600041, "无效的offset或limit参数值", "-"), + WE_EXCEPTION_TIP_600042(600042, "无效的设备型号id", "-"), + WE_EXCEPTION_TIP_600043(600043, "门禁规则未设置", "-"), + WE_EXCEPTION_TIP_600044(600044, "门禁规则不合法", "-"), + WE_EXCEPTION_TIP_600045(600045, "设备已订阅企业信息", "-"), + WE_EXCEPTION_TIP_600046(600046, "操作id和用户userid不匹配", "-"), + WE_EXCEPTION_TIP_600047(600047, "secretno的status非法", "请确认是否是使用统一初始secretno的设备,如果是无有正确执行换secretno的流程"), + WE_EXCEPTION_TIP_600048(600048, "无效的指纹算法", "-"), + WE_EXCEPTION_TIP_600049(600049, "无效的人脸识别算法", "-"), + WE_EXCEPTION_TIP_600050(600050, "无效的算法长度", "-"), + WE_EXCEPTION_TIP_600051(600051, "设备过期", "-"), + WE_EXCEPTION_TIP_600052(600052, "无效的文件分块", "-"), + WE_EXCEPTION_TIP_600053(600053, "该链接已经激活", "-"), + WE_EXCEPTION_TIP_600054(600054, "该链接已经订阅", "-"), + WE_EXCEPTION_TIP_600055(600055, "无效的用户类型", "-"), + WE_EXCEPTION_TIP_600056(600056, "无效的健康状态", "-"), + WE_EXCEPTION_TIP_600057(600057, "缺少体温参数", "-"), + WE_EXCEPTION_TIP_610001(610001, "永久二维码超过每个员工5000的限制", "-"), + WE_EXCEPTION_TIP_610003(610003, "服务异常", "有效的scene长度为1~64字符,由英文字母、数字、中划线、下划线以及点号构成"), + WE_EXCEPTION_TIP_610004(610004, "成员不在客户联系配置的使用范围内,请在企业微信管理后台 客户联系->配置->配置使用范围添加该成员", "请在管理端后台 客户联系->配置->配置使用范围配置该用户"), + WE_EXCEPTION_TIP_640001(640001, "微盘不存在当前空间", "判断spaceid是否填错"), + WE_EXCEPTION_TIP_640002(640002, "文件不存在", "判断fileid是否填错"), + WE_EXCEPTION_TIP_640003(640003, "文件已删除", "判断fileid对应的文件是否已经被删除"), + WE_EXCEPTION_TIP_640004(640004, "无权限访问", "判断当前用户是否有访问"), + WE_EXCEPTION_TIP_640005(640005, "成员不在空间内", "判断当前成员是否在空间内"), + WE_EXCEPTION_TIP_640006(640006, "超出当前成员拥有的容量", "判断当前用户的个人容量是否超出了限制"), + WE_EXCEPTION_TIP_640007(640007, "超出微盘的容量", "在管理端查看微盘的容量是否要满了"), + WE_EXCEPTION_TIP_640008(640008, "没有空间权限", "判断当前userid是否有空间权限"), + WE_EXCEPTION_TIP_640009(640009, "非法文件名", "判断file_name字段是否为空"), + WE_EXCEPTION_TIP_640010(640010, "超出空间的最大成员数", "判断当前空间的成员数是否超过了管理端设置的空间最大成员数"), + WE_EXCEPTION_TIP_640011(640011, "服务异常", "判断是否的json格式是否有误"), + WE_EXCEPTION_TIP_640012(640012, "服务异常", "判断userid字段是否设置错误"), + WE_EXCEPTION_TIP_640013(640013, "服务异常", "判断departmentid字段是否设置错误"), + WE_EXCEPTION_TIP_640014(640014, "空间没有有效的管理员", "判断当前空间是否没有有效的管理员"), + WE_EXCEPTION_TIP_640015(640015, "不支持设置预览权限", "文件预览权限只有VIP用户才能设置"), + WE_EXCEPTION_TIP_640016(640016, "不支持设置文件水印", "文件水印只有VIP用户才能设置"), + WE_EXCEPTION_TIP_640017(640017, "微盘管理端未开通API 权限", "在微盘管理端进行打开"), + WE_EXCEPTION_TIP_640018(640018, "微盘管理端未设置编辑权限", "在微盘管理端进行打开编辑权限"), + WE_EXCEPTION_TIP_640019(640019, "API 调用次数超出限制", "免费版:1000次/企业/月; 付费版:100,000次/企业/月"), + WE_EXCEPTION_TIP_640020(640020, "非法的权限类型", "普通文件:可下载、仅预览; 微文档:可编辑、仅浏览"), + WE_EXCEPTION_TIP_640021(640021, "服务异常", "fatherid应该为:文件所在的目录fileid, 在根目录时为fileid(判断当前字段是否为空)"), + WE_EXCEPTION_TIP_640022(640022, "服务异常", "文件内容base64,判断本字段是否为空"), + WE_EXCEPTION_TIP_640023(640023, "服务异常", "auth_scope应该为三个中的其中一个:1:指定人 2:企业内 3:企业外"), + WE_EXCEPTION_TIP_640024(640024, "服务异常", "判断fileid字段是否为空"), + WE_EXCEPTION_TIP_640025(640025, "服务异常", "判断space_name字段是否空"), + WE_EXCEPTION_TIP_640026(640026, "服务异常", "判断spaceid字段是否空"), + WE_EXCEPTION_TIP_640027(640027, "服务异常", "判断输入的参数是否有误"), + WE_EXCEPTION_TIP_640028(640028, "空间设置了关闭成员邀请链接", "查看空间的安全设置的成员邀请链接按钮是否处于关闭状态"), + WE_EXCEPTION_TIP_640029(640029, "只支持下载普通文件,不支持下载文件夹等其他非文件实体类型", "检查fileid对应的文件是否为普通文件"),;; + + private Integer code; + + private String tipMsg; + + private String solveTipMsg; + + WeExceptionTip(Integer code, String tipMsg, String solveTipMsg) { + this.code = code; + this.tipMsg = tipMsg; + this.solveTipMsg = solveTipMsg; + } + + public Integer getCode() { + return code; + } + + public void setCode(Integer code) { + this.code = code; + } + + public String getTipMsg() { + return tipMsg; + } + + public void setTipMsg(String tipMsg) { + this.tipMsg = tipMsg; + } + + public String getSolveTipMsg() { + return solveTipMsg; + } + + public void setSolveTipMsg(String solveTipMsg) { + this.solveTipMsg = solveTipMsg; + } + + + public static String getTipMsg(Integer code) { + WeExceptionTip[] values = WeExceptionTip.values(); + + for (WeExceptionTip weExceptionTip : values) { + if (weExceptionTip.getCode().equals(code)) { + return weExceptionTip.getTipMsg(); + } + } + throw new RuntimeException("企业微信端位置错误类型,请联系管理员工"); + } + + /** + * 根据对应code查找枚举所有类型,如果没有就返回自定义错误描述 + * @param code 错误码 + * @param msg 错误描述 + * @return + */ + public static String getTipMsg(Integer code, String msg) { + WeExceptionTip[] values = WeExceptionTip.values(); + + for (WeExceptionTip weExceptionTip : values) { + if (weExceptionTip.getCode().equals(code)) { + return weExceptionTip.getTipMsg(); + } + } + return msg; + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/enums/WeOperationsCenterSop.java b/easyink-common/src/main/java/com/easyink/common/enums/WeOperationsCenterSop.java new file mode 100644 index 0000000..f3721da --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/enums/WeOperationsCenterSop.java @@ -0,0 +1,187 @@ +package com.easyink.common.enums; + +import com.easyink.common.exception.CustomException; +import com.easyink.common.utils.DateUtils; +import lombok.Getter; +import org.apache.commons.lang3.StringUtils; + +/** + * 类名:WeOperationsCenterSop 运营中心SOP定义 + * + * @author Society my sister Li + * @date 2021-11-30 15:53 + */ +public enum WeOperationsCenterSop { + + ; + + //SOP请求类型 + public enum SopTypeEnum { + //0:定时sop + TIME_TASK(0, "【群SOP】\nSOP名称:{0}\n发送对象:「{1}」等{2}个客户群\n提醒内容:{3}\n{4}"), + //1:循环sop + CYCLE(1,"【群SOP】\nSOP名称:{0}\n发送对象:「{1}」等{2}个客户群\n提醒内容:{3}\n{4}"), + //2:新客sop + NEW_CUSTOMER(2,"【新客SOP】\nSOP名称:{0}\n发送对象:「{1}」等{2}个客户\n提醒内容:{3}\n{4}"), + //3:活动sop + ACTIVITY(3,"【活动SOP】\nSOP名称:{0}\n发送对象:「{1}」等{2}个客户\n提醒内容:{3}\n{4}"), + //4:生日sop + BIRTH_DAT(4,"【生日SOP】\nSOP名称:{0}\n发送对象:「{1}」等{2}个客户\n提醒内容:{3}\n{4}"), + //5:群日历 + GROUP_CALENDAR(5, "【群日历】\n日历名称:{0}\n发送对象:「{1}」 等{2}个客户群\n提醒内容:{3}\n{4}"); + + @Getter + private Integer sopType; + + @Getter + private String content; + + SopTypeEnum(Integer sopType, String content) { + this.sopType = sopType; + this.content = content; + } + + /** + * 是否为客户sop + * + * @param sopType sop类型 + * @return true/false + */ + public static boolean isCustomerSop(Integer sopType) { + return !TIME_TASK.getSopType().equals(sopType) && !CYCLE.getSopType().equals(sopType) && !GROUP_CALENDAR.getSopType().equals(sopType); + } + + /** + * 获取对应sopType的枚举值 + */ + public static SopTypeEnum getSopTypeEnumByType(Integer sopType) { + if (sopType == null) { + throw new CustomException(ResultTip.TIP_GENERAL_BAD_REQUEST); + } + + for (SopTypeEnum sopTypeEnum : values()) { + if (sopTypeEnum.getSopType().equals(sopType)) { + return sopTypeEnum; + } + } + throw new CustomException(ResultTip.TIP_GENERAL_BAD_REQUEST); + } + + + } + + //群聊过滤类型 + public enum FilterTypeEnum { + //0:指定群聊 + SPECIFY(0), + //1:筛选群聊 + FILTER(1); + @Getter + private Integer filterType; + + FilterTypeEnum(Integer filterType) { + this.filterType = filterType; + } + } + + //提醒类型 + public enum AlertTypeEnum { + //0:xx小时xx分钟提醒 + TYPE_0(0, 0, 23, DateUtils.MM), + //1:xx天xx:xx提醒 + TYPE_1(1, 1, 999, DateUtils.HH_MM), + //2:每天xx:xx提醒 + TYPE_2(2, null, null, DateUtils.HH_MM), + //3:每周周x的xx:xx提醒 + TYPE_3(3, 1, 7, DateUtils.HH_MM), + //4:每月x日xx:xx提醒 + TYPE_4(4, 1, 31, DateUtils.HH_MM), + //5:具体提醒时间 yyyy-MM-dd HH:mm:dd + TYPE_5(5, null, null, DateUtils.YYYY_MM_DD_HH_MM), + //6:提前xx天xx:xx提醒 + TYPE_6(6, 1, 999, DateUtils.HH_MM), + //7: 生日第**天xx:xx提醒 + TYPE_7(7, 1, 999, DateUtils.HH_MM), + ; + @Getter + private Integer alertType; + @Getter + private Integer alertMin; + @Getter + private Integer alertMax; + @Getter + private String dateFormat; + + AlertTypeEnum(Integer alertType, Integer alertMin, Integer alertMax, String dateFormat) { + this.alertType = alertType; + this.alertMin = alertMin; + this.alertMax = alertMax; + this.dateFormat = dateFormat; + } + + /** + * 校验请求参数格式 + */ + public static void checkParam(Integer alertType, Integer alertData1, String alertData2) { + if (alertType == null || alertData1 == null || StringUtils.isBlank(alertData2)) { + throw new CustomException(ResultTip.TIP_GENERAL_BAD_REQUEST); + } + //校验alertData1、alertData2 + for (AlertTypeEnum alertTypeEnum : values()) { + if (alertTypeEnum.getAlertType().equals(alertType)) { + try { + if (!DateUtils.isMatchFormat(alertData2, alertTypeEnum.getDateFormat())) { + throw new CustomException(ResultTip.TIP_TIME_FORMAT_ERROR); + } + } catch (Exception e) { + int mm; + try { + mm = Integer.parseInt(alertData2); + } catch (Exception e1) { + throw new CustomException(ResultTip.TIP_TIME_FORMAT_ERROR); + } + //判断是否为1分钟后执行 + if (alertData1 == 0 && mm <= 1) { + throw new CustomException(ResultTip.TIP_GENERAL_RESET_TIME); + } + //使用isMatchFormat方法校验时分钟为个位数的情况下会报错,所以在前面+0 + String alertData3 = "0" + alertData2; + if (!DateUtils.isMatchFormat(alertData3, alertTypeEnum.getDateFormat())) { + throw new CustomException(ResultTip.TIP_TIME_FORMAT_ERROR); + } + } + + if (alertTypeEnum.getAlertMin() != null) { + if (alertTypeEnum.getAlertMin() > alertData1) { + throw new CustomException(ResultTip.TIP_TIME_FORMAT_ERROR); + } + } + if (alertTypeEnum.getAlertMax() != null) { + if (alertTypeEnum.getAlertMax() < alertData1) { + throw new CustomException(ResultTip.TIP_TIME_FORMAT_ERROR); + } + } + } + } + } + + /** + * 获取提醒类型枚举值 + * + * @param alertType alertType + * @return AlertTypeEnum + */ + public static AlertTypeEnum getAlertTypeEnumByType(Integer alertType) { + if (alertType == null) { + throw new CustomException(ResultTip.TIP_GENERAL_BAD_REQUEST); + } + for (AlertTypeEnum alertTypeEnum : values()) { + if (alertTypeEnum.getAlertType().equals(alertType)) { + return alertTypeEnum; + } + } + throw new CustomException(ResultTip.TIP_GENERAL_BAD_REQUEST); + } + } + +} diff --git a/easyink-common/src/main/java/com/easyink/common/enums/WeSensitiveActEnum.java b/easyink-common/src/main/java/com/easyink/common/enums/WeSensitiveActEnum.java new file mode 100644 index 0000000..378e4c8 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/enums/WeSensitiveActEnum.java @@ -0,0 +1,48 @@ +package com.easyink.common.enums; + +import lombok.Getter; + +@Getter +public enum WeSensitiveActEnum { + /** + * 开启记录敏感行为 + */ + OPEN(1, "", "开启"), + + /** + * 删除拉黑好友 + */ + DELETE(2, "deletefriend", "拉黑/删除客户"), + + /** + * 发名片 + */ + SEND_CARD(3, "card", "员工发送名片"), + + /** + * 发红包 + */ + SEND_REDPACK(4, "redpacket", "员工/客户发送红包"), + + /** + * 企微发红包 + */ + SEND_EXTERNAL_REDPACK(4, "external_redpacket", "员工/客户发送红包"), + + /** + * 关闭记录敏感行为 + */ + CLOSE(0, "", "关闭"); + + + private final Integer code; + private final String name; + private final String info; + + WeSensitiveActEnum(Integer code, String name, String info) { + this.code = code; + this.name = name; + this.info = info; + } + +} diff --git a/easyink-common/src/main/java/com/easyink/common/enums/WeTempMaterialEnum.java b/easyink-common/src/main/java/com/easyink/common/enums/WeTempMaterialEnum.java new file mode 100644 index 0000000..f4ece1d --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/enums/WeTempMaterialEnum.java @@ -0,0 +1,24 @@ +package com.easyink.common.enums; + +import lombok.Getter; + +/** + * 类名:WeTempMaterialEnum 员工活码临时素材枚举值说明 + * + * @author Society my sister Li + * @date 2021-11-08 13:50 + */ +public enum WeTempMaterialEnum { + + //临时素材 + TEMP(1), + //素材 + MATERIAL(0); + @Getter + private Integer tempFlag; + + WeTempMaterialEnum(Integer tempFlag) { + this.tempFlag = tempFlag; + } + +} diff --git a/easyink-common/src/main/java/com/easyink/common/enums/WeWordsCategoryTypeEnum.java b/easyink-common/src/main/java/com/easyink/common/enums/WeWordsCategoryTypeEnum.java new file mode 100644 index 0000000..8e631e5 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/enums/WeWordsCategoryTypeEnum.java @@ -0,0 +1,25 @@ +package com.easyink.common.enums; + +import lombok.Getter; + +/** + * 类名:WeWordsCategoryTypeEnum 话术库类型枚举类 + * + * @author Society my sister Li + * @date 2021-10-25 10:56 + */ +public enum WeWordsCategoryTypeEnum { + + //企业 + CORP(0), + //部门 + DEPARTMENT(1), + //个人 + SELF(2); + @Getter + private Integer type; + + WeWordsCategoryTypeEnum(Integer type) { + this.type = type; + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/enums/WelcomeMsgRuleTypeEnum.java b/easyink-common/src/main/java/com/easyink/common/enums/WelcomeMsgRuleTypeEnum.java new file mode 100644 index 0000000..bf27169 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/enums/WelcomeMsgRuleTypeEnum.java @@ -0,0 +1,22 @@ +package com.easyink.common.enums; + +/** + * 欢迎语特殊规则类型枚举 + * + * @author tigger + * 2022/1/11 16:23 + **/ +public enum WelcomeMsgRuleTypeEnum { + WEEKEND(1); + + private Integer type; + + + WelcomeMsgRuleTypeEnum(Integer type) { + this.type = type; + } + + public Integer getType() { + return type; + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/enums/WelcomeMsgTplTypeEnum.java b/easyink-common/src/main/java/com/easyink/common/enums/WelcomeMsgTplTypeEnum.java new file mode 100644 index 0000000..43944a2 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/enums/WelcomeMsgTplTypeEnum.java @@ -0,0 +1,57 @@ +package com.easyink.common.enums; + +import com.easyink.common.exception.CustomException; +import lombok.Getter; +import org.apache.commons.lang3.StringUtils; + +/** + * 运营中心-欢迎语模板类型和长度限制枚举值 + * + * @author Society my sister Li + * @date 2021/9/13 + */ +public enum WelcomeMsgTplTypeEnum { + + //员工欢迎语 + EMP_WELCOME(1, 1000), + + //入群欢迎语 + GROUP_WELCOME(2, 1000), + + //活码欢迎语 + LIVE_CODE(3, 1500), + ; + @Getter + private final Integer type; + @Getter + private final Integer length; + + WelcomeMsgTplTypeEnum(Integer type, Integer length) { + this.type = type; + this.length = length; + } + + + /** + * 验证欢迎语长度 + * + * @param type 请求类型 + * @param msg 内容 + */ + public static void validLength(Integer type, String msg) { + if (type == null) { + throw new CustomException(ResultTip.TIP_GENERAL_BAD_REQUEST); + } + int length = StringUtils.isBlank(msg) ? 0 : msg.length(); + for (WelcomeMsgTplTypeEnum typeEnum : values()) { + if (typeEnum.type.equals(type)) { + if (length > typeEnum.length) { + throw new CustomException(ResultTip.TIP_DEFAULT_MSG_TOO_LONG); + } + return; + } + } + throw new CustomException(ResultTip.TIP_MSG_TYPE_NOT_FUND); + } + +} diff --git a/easyink-common/src/main/java/com/easyink/common/enums/autotag/AutoTagCustomerSceneType.java b/easyink-common/src/main/java/com/easyink/common/enums/autotag/AutoTagCustomerSceneType.java new file mode 100644 index 0000000..387138a --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/enums/autotag/AutoTagCustomerSceneType.java @@ -0,0 +1,73 @@ +package com.easyink.common.enums.autotag; + +import java.sql.Time; +import java.time.LocalDate; + +/** + * 新客标签规则场景类型枚举 + * + * @author tigger + * 2022/3/3 16:01 + **/ +public enum AutoTagCustomerSceneType { + /** + * 天 + */ + DAY(1) { + @Override + public boolean match(Integer loopPoint, Time loopBeginTime, Time loopEndTime, Time now) { + + if (inTime(loopBeginTime, loopEndTime, now)) { + return true; + } + return false; + } + }, + /** + * 周 + */ + WEEK(2) { + @Override + public boolean match(Integer loopPoint, Time loopBeginTime, Time loopEndTime, Time now) { + if (LocalDate.now().getDayOfWeek().getValue() == loopPoint && inTime(loopBeginTime, loopEndTime, now)) { + return true; + } + return false; + } + }, + /** + * 月 + */ + MONTH(3) { + @Override + public boolean match(Integer loopPoint, Time loopBeginTime, Time loopEndTime, Time now) { + if (LocalDate.now().getDayOfMonth() == loopPoint && inTime(loopBeginTime, loopEndTime, now)) { + return true; + } + return false; + } + }, + ; + + public boolean inTime(Time loopBeginTime, Time loopEndTime, Time now) { + return now.compareTo(loopBeginTime) >= 0 && now.compareTo(loopEndTime) <= 0; + } + + + private Integer type; + + AutoTagCustomerSceneType(Integer type) { + this.type = type; + } + + public abstract boolean match(Integer loopPoint, Time loopBeginTime, Time loopEndTime, Time now); + + public static AutoTagCustomerSceneType getByType(Integer type) { + for (AutoTagCustomerSceneType value : AutoTagCustomerSceneType.values()) { + if (value.type.equals(type)) { + return value; + } + } + return null; + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/enums/autotag/AutoTagLabelTypeEnum.java b/easyink-common/src/main/java/com/easyink/common/enums/autotag/AutoTagLabelTypeEnum.java new file mode 100644 index 0000000..3463c6f --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/enums/autotag/AutoTagLabelTypeEnum.java @@ -0,0 +1,36 @@ +package com.easyink.common.enums.autotag; + +import lombok.Getter; + +/** + * 标签类型 + * + * @author tigger + * 2022/2/27 20:15 + **/ +public enum AutoTagLabelTypeEnum { + /**关键词*/ + KEYWORD(1), + /**群*/ + GROUP(2), + /**新客*/ + CUSTOMER(3), + ; + + + @Getter + private Integer type; + + AutoTagLabelTypeEnum(Integer type) { + this.type = type; + } + + public static boolean existType(Integer type) { + for (AutoTagLabelTypeEnum value : AutoTagLabelTypeEnum.values()) { + if (value.getType().equals(type)) { + return true; + } + } + return false; + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/enums/autotag/AutoTagMatchTypeEnum.java b/easyink-common/src/main/java/com/easyink/common/enums/autotag/AutoTagMatchTypeEnum.java new file mode 100644 index 0000000..b9e473b --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/enums/autotag/AutoTagMatchTypeEnum.java @@ -0,0 +1,51 @@ +package com.easyink.common.enums.autotag; + +import lombok.Getter; + +/** + * 自动标签匹配类型枚举 + * + * @author tigger + * 2022/2/27 18:51 + **/ +public enum AutoTagMatchTypeEnum { + /** + * 模糊匹配 + */ + FUZZY(1) { + @Override + public boolean match(String originText, String matchText) { + return originText.contains(matchText); + } + }, + /** + * 精确匹配 + */ + EXACT(2) { + @Override + public boolean match(String originText, String matchText) { + return originText.equals(matchText); + } + }, + ; + + @Getter + private Integer type; + + AutoTagMatchTypeEnum(Integer type) { + this.type = type; + } + + + public static AutoTagMatchTypeEnum getByType(Integer type) { + for (AutoTagMatchTypeEnum value : AutoTagMatchTypeEnum.values()) { + + if (value.getType().equals(type)) { + return value; + } + } + return null; + } + + public abstract boolean match(String originText, String matchText); +} diff --git a/easyink-common/src/main/java/com/easyink/common/enums/code/GroupCodeTypeEnum.java b/easyink-common/src/main/java/com/easyink/common/enums/code/GroupCodeTypeEnum.java new file mode 100644 index 0000000..e59ed3d --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/enums/code/GroupCodeTypeEnum.java @@ -0,0 +1,62 @@ +package com.easyink.common.enums.code; + +import com.easyink.common.enums.ResultTip; +import com.easyink.common.exception.CustomException; +import lombok.extern.slf4j.Slf4j; + +/** + * 群活码类型枚举 + * + * @author tigger + * 2022/2/9 19:23 + **/ +@Slf4j +public enum GroupCodeTypeEnum { + /** + * 群二维码活码 + */ + GROUP_QR(1), + /** + * 企业微信活码 + */ + CORP_QR(2), + ; + + + private Integer type; + + GroupCodeTypeEnum(Integer type) { + this.type = type; + } + + + public Integer getType() { + return type; + } + + public static GroupCodeTypeEnum getByType(Integer type) { + if (type == null) { + return null; + } + for (GroupCodeTypeEnum value : GroupCodeTypeEnum.values()) { + if (value.getType().equals(type)) { + return value; + } + } + return null; + } + + public static void assertNotNull(Integer createType) { + if (createType == null) { + log.error("com.easyink.common.enums.code.GroupCodeTypeEnum.assertNotNull: createType is null"); + throw new CustomException(ResultTip.TIP_GENERAL_BAD_REQUEST); + } + for (GroupCodeTypeEnum value : GroupCodeTypeEnum.values()) { + if (value.getType().equals(createType)) { + return; + } + } + log.error("com.easyink.common.enums.code.GroupCodeTypeEnum.assertNotNull: createType is not exist"); + throw new CustomException(ResultTip.TIP_GENERAL_BAD_REQUEST); + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/enums/code/WelcomeMsgTypeEnum.java b/easyink-common/src/main/java/com/easyink/common/enums/code/WelcomeMsgTypeEnum.java new file mode 100644 index 0000000..5d2ba72 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/enums/code/WelcomeMsgTypeEnum.java @@ -0,0 +1,40 @@ +package com.easyink.common.enums.code; + +import lombok.extern.slf4j.Slf4j; + + +/** + * ClassName: welcomeMsgTypeEnum + * + * @author wx + * @date 2022/7/11 14:46 + */ +@Slf4j +public enum WelcomeMsgTypeEnum { + + + /** + * 员工/新客 发送普通欢迎语 0 + */ + COMMON_WELCOME_MSG_TYPE(0), + /** + * 员工/新客 发送兑换码欢迎语1 + */ + REDEEM_CODE_WELCOME_MSG_TYPE(1), + ; + + + private Integer type; + + + WelcomeMsgTypeEnum(Integer type) { + this.type = type; + } + + + public Integer getType() { + return type; + } + + +} diff --git a/easyink-common/src/main/java/com/easyink/common/enums/customer/CustomerTypeEnum.java b/easyink-common/src/main/java/com/easyink/common/enums/customer/CustomerTypeEnum.java new file mode 100644 index 0000000..c8e8a9b --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/enums/customer/CustomerTypeEnum.java @@ -0,0 +1,27 @@ +package com.easyink.common.enums.customer; + +/** + * @author tigger + * 2022/1/24 18:26 + **/ +public enum CustomerTypeEnum { + /** + * 微信用户 + */ + WX_CUSTOMER(1), + /** + * 企业微信用户 + */ + CORP_CUSTOMER(2); + + + private Integer type; + + CustomerTypeEnum(Integer type) { + this.type = type; + } + + public Integer getType() { + return type; + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/enums/moment/MomentPublishStatusEnum.java b/easyink-common/src/main/java/com/easyink/common/enums/moment/MomentPublishStatusEnum.java new file mode 100644 index 0000000..a1b94d9 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/enums/moment/MomentPublishStatusEnum.java @@ -0,0 +1,38 @@ +package com.easyink.common.enums.moment; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 类名: MomentPublishStatusEnum + * + * @author 佚名 + * @date 2022/1/12 10:36 + */ +@AllArgsConstructor +@Getter +public enum MomentPublishStatusEnum { + /** + * 待发布 + */ + NOT_PUBLISH(0, "待发布"), + /** + * 已发布 + */ + PUBLISH(1, "已发布"), + /** + * 已过期 + */ + EXPIRE(2, "已过期"), + + NO_AUTHORITY(3, "不可发布"), + ; + /** + * 状态码 + */ + public final Integer type; + /** + * 含义 + */ + private final String desc; +} diff --git a/easyink-common/src/main/java/com/easyink/common/enums/moment/MomentPushRangeEnum.java b/easyink-common/src/main/java/com/easyink/common/enums/moment/MomentPushRangeEnum.java new file mode 100644 index 0000000..999fb48 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/enums/moment/MomentPushRangeEnum.java @@ -0,0 +1,31 @@ +package com.easyink.common.enums.moment; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 类名: MomentPushRangeEnum + * + * @author 佚名 + * @date 2022/1/16 13:54 + */ +@AllArgsConstructor +@Getter +public enum MomentPushRangeEnum { + /** + * 全部客户 + */ + ALL_CUSTOMER(0,"全部客户"), + /** + * 选择部分客户 + */ + SELECT_CUSTOMER(1, "选择部分客户"),; + /** + * 状态码 + */ + public final Integer type; + /** + * 含义 + */ + private final String desc; +} diff --git a/easyink-common/src/main/java/com/easyink/common/enums/moment/MomentSelectUserEnum.java b/easyink-common/src/main/java/com/easyink/common/enums/moment/MomentSelectUserEnum.java new file mode 100644 index 0000000..ac4164f --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/enums/moment/MomentSelectUserEnum.java @@ -0,0 +1,32 @@ +package com.easyink.common.enums.moment; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * ClassName: MomentSelectUserEnum + * + * @author wx + * @date 2022/7/15 15:05 + */ +@AllArgsConstructor +@Getter +public enum MomentSelectUserEnum { + /** + * 未选择员工 + */ + NOT_SELECT_USER(0, "未选择员工"), + /** + * 已选择员工 + */ + SELECT_USER(1, "已选择员工"), + ; + /** + * 状态码 + */ + public final Integer type; + /** + * 含义 + */ + private final String desc; +} diff --git a/easyink-common/src/main/java/com/easyink/common/enums/moment/MomentStatusEnum.java b/easyink-common/src/main/java/com/easyink/common/enums/moment/MomentStatusEnum.java new file mode 100644 index 0000000..fa12703 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/enums/moment/MomentStatusEnum.java @@ -0,0 +1,45 @@ +package com.easyink.common.enums.moment; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 类名: 朋友圈任务创建状态 + * + * @author 佚名 + * @date 2022/1/10 16:40 + */ +@AllArgsConstructor +@Getter +public enum MomentStatusEnum { + + /** + * 定时任务未创建 + */ + NOT_START(0,"未创建"), + /** + * 开始创建任务 + */ + START(1, "开始创建任务"), + /** + * 2表示正在创建任务中 + */ + PROCESS(2, "正在创建任务中"), + /** + * 3表示创建任务已完成 + */ + FINISH(3, "创建任务已完成"), + /** + * 已删除 + */ + DEL(4,"已删除"), + ; + /** + * 状态码 + */ + public final Integer type; + /** + * 含义 + */ + private final String desc; +} diff --git a/easyink-common/src/main/java/com/easyink/common/enums/moment/MomentTaskTypeEnum.java b/easyink-common/src/main/java/com/easyink/common/enums/moment/MomentTaskTypeEnum.java new file mode 100644 index 0000000..330a240 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/enums/moment/MomentTaskTypeEnum.java @@ -0,0 +1,32 @@ +package com.easyink.common.enums.moment; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 类名: MomentTaskTypeEnum + * + * @author 佚名 + * @date 2022/1/12 17:23 + */ +@AllArgsConstructor +@Getter +public enum MomentTaskTypeEnum { + /** + * 立即发送 + */ + RIGHT_NOW(0, "立即发送"), + /** + * 定时发送 + */ + SETTING_TIME(1, "定时发送"), + ; + /** + * 状态码 + */ + public final Integer type; + /** + * 含义 + */ + private final String desc; +} diff --git a/easyink-common/src/main/java/com/easyink/common/enums/moment/MomentTypeEnum.java b/easyink-common/src/main/java/com/easyink/common/enums/moment/MomentTypeEnum.java new file mode 100644 index 0000000..ac5f5a0 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/enums/moment/MomentTypeEnum.java @@ -0,0 +1,32 @@ +package com.easyink.common.enums.moment; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 类名: 朋友圈类型 + * + * @author 佚名 + * @date 2022/1/10 16:11 + */ +@AllArgsConstructor +@Getter +public enum MomentTypeEnum { + /** + * 企业朋友圈 + */ + ENTERPRISE_MOMENT(0, "企业朋友圈"), + /** + * 个人朋友圈 + */ + PERSONAL_MOMENT(1, "个人朋友圈"), + ; + /** + * 状态码 + */ + public final Integer type; + /** + * 含义 + */ + private final String desc; +} diff --git a/easyink-common/src/main/java/com/easyink/common/enums/radar/RadarChannelEnum.java b/easyink-common/src/main/java/com/easyink/common/enums/radar/RadarChannelEnum.java new file mode 100644 index 0000000..242a095 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/enums/radar/RadarChannelEnum.java @@ -0,0 +1,55 @@ +package com.easyink.common.enums.radar; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.Arrays; + +/** + * 类名: 雷达渠道枚举 + * + * @author : silver_chariot + * @date : 2022/7/19 10:45 + **/ +@AllArgsConstructor +@Getter +public enum RadarChannelEnum { + UNKNOWN(0, "未知渠道"), + EMPLE_CODE(1, "员工活码"), + MOMENT(2, "朋友圈"), + GROUP_TASK(3, "客户群发"), + SIDE_BAR(4, "侧边栏-雷达库"), + WELCOME_MSG(5, "好友欢迎语"), + CUSTOMER_SOP(6, "客户SOP"), + GROUP_SOP(7, "群SOP"), + NEW_IN_GROUP(8, "新客进群"), + GROUP_CALENDAR(9, "群日历"), + CUSTOMIZE(10, "自定义渠道"); + private final Integer TYPE; + private final String NAME; + + /** + * 根据类型获取系统默认的渠道 + * + * @param type 类型 + * @return 渠道 + */ + public static String getChannelByType(int type) { + + RadarChannelEnum channel = Arrays.stream(values()).filter(a -> type == a.TYPE).findFirst().orElse(UNKNOWN); + return channel.NAME; + } + + /** + * 判断是否是系统默认的渠道类型 + * + * @param type 类型 + * @return true 是系统默认的渠道 false 不是 + */ + public static boolean isSysChannel(int type) { + if (type == UNKNOWN.TYPE ||type == CUSTOMIZE.TYPE) { + return false; + } + return true; + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/enums/radar/RadarTypeEnum.java b/easyink-common/src/main/java/com/easyink/common/enums/radar/RadarTypeEnum.java new file mode 100644 index 0000000..751625b --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/enums/radar/RadarTypeEnum.java @@ -0,0 +1,46 @@ +package com.easyink.common.enums.radar; + +import lombok.Getter; + +import java.util.Arrays; + +/** + * ClassName: RadarTypeEnum 雷达类型 + * + * @author wx + * @date 2022/7/19 10:59 + */ + +public enum RadarTypeEnum { + + //企业 + CORP(3, "企业雷达库已更新“${radarTitle}"), + //部门 + DEPARTMENT(2, "部门雷达库已更新“${radarTitle}”"), + //个人 + SELF(1, ""), + /** + * 未知 + */ + UNKNOWN(0, ""), + + ; + @Getter + private final Integer type; + @Getter + private final String updateNotice; + + RadarTypeEnum(Integer type, String updateNotice) { + this.type = type; + this.updateNotice = updateNotice; + } + + public static RadarTypeEnum getByType(Integer type) { + if (type == null) { + return UNKNOWN; + } + return Arrays.stream(values()).filter(a -> type.equals(a.getType())).findFirst().orElse(UNKNOWN); + } + + +} diff --git a/easyink-common/src/main/java/com/easyink/common/enums/redeemcode/RedeemCodeStatusEnum.java b/easyink-common/src/main/java/com/easyink/common/enums/redeemcode/RedeemCodeStatusEnum.java new file mode 100644 index 0000000..9c53ded --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/enums/redeemcode/RedeemCodeStatusEnum.java @@ -0,0 +1,34 @@ +package com.easyink.common.enums.redeemcode; + +/** + * ClassName: RedeemCodeStatusEnum + * + * @author wx + * @date 2022/7/12 9:54 + */ +public enum RedeemCodeStatusEnum { + + /** + * 已分配 + */ + ASSIGNED(1), + /** + * 未分配 + */ + NOT_ASSIGN(0), + ; + + + private Integer type; + + + RedeemCodeStatusEnum(Integer type) { + this.type = type; + } + + + public Integer getType() { + return type; + } + +} diff --git a/easyink-common/src/main/java/com/easyink/common/enums/wecom/ServerTypeEnum.java b/easyink-common/src/main/java/com/easyink/common/enums/wecom/ServerTypeEnum.java new file mode 100644 index 0000000..b359ef5 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/enums/wecom/ServerTypeEnum.java @@ -0,0 +1,25 @@ +package com.easyink.common.enums.wecom; + +/** + * 应用类型枚举 + * + * @author tigger + * 2022/2/10 9:49 + **/ +public enum ServerTypeEnum { + /**三方*/ + THIRD("third"), + /**自建*/ + INTERNAL("internal"); + + + private String type; + + ServerTypeEnum(String type) { + this.type = type; + } + + public String getType() { + return type; + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/exception/BaseException.java b/easyink-common/src/main/java/com/easyink/common/exception/BaseException.java new file mode 100644 index 0000000..379c747 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/exception/BaseException.java @@ -0,0 +1,84 @@ +package com.easyink.common.exception; + +import com.easyink.common.utils.MessageUtils; +import com.easyink.common.utils.StringUtils; + +/** + * 基础异常 + * + * @author admin + */ +public class BaseException extends RuntimeException { + private static final long serialVersionUID = 1L; + + /** + * 所属模块 + */ + private final String module; + + /** + * 错误码 + */ + private final String code; + + /** + * 错误码对应的参数 + */ + private final Object[] args; + + /** + * 错误消息 + */ + private final String defaultMessage; + + public BaseException(String module, String code, Object[] args, String defaultMessage) { + this.module = module; + this.code = code; + this.args = args; + this.defaultMessage = defaultMessage; + } + + public BaseException(String module, String code, Object[] args) { + this(module, code, args, null); + } + + public BaseException(String module, String defaultMessage) { + this(module, null, null, defaultMessage); + } + + public BaseException(String code, Object[] args) { + this(null, code, args, null); + } + + public BaseException(String defaultMessage) { + this(null, null, null, defaultMessage); + } + + @Override + public String getMessage() { + String message = null; + if (!StringUtils.isEmpty(code)) { + message = MessageUtils.message(code, args); + } + if (message == null) { + message = defaultMessage; + } + return message; + } + + public String getModule() { + return module; + } + + public String getCode() { + return code; + } + + public Object[] getArgs() { + return args; + } + + public String getDefaultMessage() { + return defaultMessage; + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/exception/CallBackNullPointerException.java b/easyink-common/src/main/java/com/easyink/common/exception/CallBackNullPointerException.java new file mode 100644 index 0000000..88b970c --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/exception/CallBackNullPointerException.java @@ -0,0 +1,9 @@ +package com.easyink.common.exception; + +public class CallBackNullPointerException extends NullPointerException{ + private static final long serialVersionUID = 1L; + + public CallBackNullPointerException(String message) { + super("user"+message); + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/exception/CustomException.java b/easyink-common/src/main/java/com/easyink/common/exception/CustomException.java new file mode 100644 index 0000000..7f08fd3 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/exception/CustomException.java @@ -0,0 +1,72 @@ +package com.easyink.common.exception; + +import com.easyink.common.enums.ResultTip; + +import java.text.MessageFormat; + +/** + * 自定义异常 + * + * @author admin + */ +public class CustomException extends RuntimeException { + private static final long serialVersionUID = 1L; + + private Integer code; + + private final String message; + + public CustomException(String message) { + this.message = message; + } + + public CustomException(String message, Integer code) { + this.message = message; + this.code = code; + } + + public CustomException(String message, Throwable e) { + super(message, e); + this.message = message; + } + + /** + * 直接使用ResultTip构造 + * + * @param resultTip ${@link ResultTip} + */ + public CustomException(ResultTip resultTip) { + this.message = resultTip.getTipMsg(); + this.code = resultTip.getCode(); + } + + /** + * 直接使用ResultTip构造,msgParam替换占位符{0}、{1} + * + * @param resultTip ${@link ResultTip} + */ + public CustomException(ResultTip resultTip, String msg, String... msgParam) { + this.message = MessageFormat.format(msg, msgParam); + this.code = resultTip.getCode(); + } + + /** + * 提供自定义返回消息的构造方法 + * + * @param resultTip ${@link ResultTip} + * @param msg 自定义消息 + */ + public CustomException(ResultTip resultTip, String msg) { + this.message = msg; + this.code = resultTip.getCode(); + } + + @Override + public String getMessage() { + return message; + } + + public Integer getCode() { + return code; + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/exception/file/FileException.java b/easyink-common/src/main/java/com/easyink/common/exception/file/FileException.java new file mode 100644 index 0000000..609b8a2 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/exception/file/FileException.java @@ -0,0 +1,17 @@ +package com.easyink.common.exception.file; + +import com.easyink.common.exception.BaseException; + +/** + * 文件信息异常类 + * + * @author admin + */ +public class FileException extends BaseException { + private static final long serialVersionUID = 1L; + + public FileException(String code, Object[] args) { + super("file", code, args, null); + } + +} diff --git a/easyink-common/src/main/java/com/easyink/common/exception/file/FileNameLengthLimitExceededException.java b/easyink-common/src/main/java/com/easyink/common/exception/file/FileNameLengthLimitExceededException.java new file mode 100644 index 0000000..ea2e5f6 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/exception/file/FileNameLengthLimitExceededException.java @@ -0,0 +1,14 @@ +package com.easyink.common.exception.file; + +/** + * 文件名称超长限制异常类 + * + * @author admin + */ +public class FileNameLengthLimitExceededException extends FileException { + private static final long serialVersionUID = 1L; + + public FileNameLengthLimitExceededException(int defaultFileNameLength) { + super("upload.filename.exceed.length", new Object[]{defaultFileNameLength}); + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/exception/file/FileSizeLimitExceededException.java b/easyink-common/src/main/java/com/easyink/common/exception/file/FileSizeLimitExceededException.java new file mode 100644 index 0000000..e0301fa --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/exception/file/FileSizeLimitExceededException.java @@ -0,0 +1,14 @@ +package com.easyink.common.exception.file; + +/** + * 文件名大小限制异常类 + * + * @author admin + */ +public class FileSizeLimitExceededException extends FileException { + private static final long serialVersionUID = 1L; + + public FileSizeLimitExceededException(long defaultMaxSize) { + super("upload.exceed.maxSize", new Object[]{defaultMaxSize}); + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/exception/file/InvalidExtensionException.java b/easyink-common/src/main/java/com/easyink/common/exception/file/InvalidExtensionException.java new file mode 100644 index 0000000..adebd48 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/exception/file/InvalidExtensionException.java @@ -0,0 +1,61 @@ +package com.easyink.common.exception.file; + +import org.apache.commons.fileupload.FileUploadException; + +import java.util.Arrays; + +/** + * 文件上传 误异常类 + * + * @author admin + */ +public class InvalidExtensionException extends FileUploadException { + private static final long serialVersionUID = 1L; + + private final String[] allowedExtension; + private final String extension; + private final String filename; + + public InvalidExtensionException(String[] allowedExtension, String extension, String filename) { + super("filename : [" + filename + "], extension : [" + extension + "], allowed extension : [" + Arrays.toString(allowedExtension) + "]"); + this.allowedExtension = allowedExtension; + this.extension = extension; + this.filename = filename; + } + + public String[] getAllowedExtension() { + return allowedExtension; + } + + public String getExtension() { + return extension; + } + + public String getFilename() { + return filename; + } + + public static class InvalidImageExtensionException extends InvalidExtensionException { + private static final long serialVersionUID = 1L; + + public InvalidImageExtensionException(String[] allowedExtension, String extension, String filename) { + super(allowedExtension, extension, filename); + } + } + + public static class InvalidFlashExtensionException extends InvalidExtensionException { + private static final long serialVersionUID = 1L; + + public InvalidFlashExtensionException(String[] allowedExtension, String extension, String filename) { + super(allowedExtension, extension, filename); + } + } + + public static class InvalidMediaExtensionException extends InvalidExtensionException { + private static final long serialVersionUID = 1L; + + public InvalidMediaExtensionException(String[] allowedExtension, String extension, String filename) { + super(allowedExtension, extension, filename); + } + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/exception/job/TaskException.java b/easyink-common/src/main/java/com/easyink/common/exception/job/TaskException.java new file mode 100644 index 0000000..03edfaf --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/exception/job/TaskException.java @@ -0,0 +1,29 @@ +package com.easyink.common.exception.job; + +/** + * 计划策略异常 + * + * @author admin + */ +public class TaskException extends Exception { + private static final long serialVersionUID = 1L; + + private final Code code; + + public TaskException(String msg, Code code) { + this(msg, code, null); + } + + public TaskException(String msg, Code code, Exception nestedEx) { + super(msg, nestedEx); + this.code = code; + } + + public Code getCode() { + return code; + } + + public enum Code { + TASK_EXISTS, NO_TASK_EXISTS, TASK_ALREADY_STARTED, UNKNOWN, CONFIG_ERROR, TASK_NODE_NOT_AVAILABLE + } +} \ No newline at end of file diff --git a/easyink-common/src/main/java/com/easyink/common/exception/user/CaptchaException.java b/easyink-common/src/main/java/com/easyink/common/exception/user/CaptchaException.java new file mode 100644 index 0000000..505b492 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/exception/user/CaptchaException.java @@ -0,0 +1,14 @@ +package com.easyink.common.exception.user; + +/** + * 验证码错误异常类 + * + * @author admin + */ +public class CaptchaException extends UserException { + private static final long serialVersionUID = 1L; + + public CaptchaException() { + super("user.jcaptcha.error", null); + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/exception/user/CaptchaExpireException.java b/easyink-common/src/main/java/com/easyink/common/exception/user/CaptchaExpireException.java new file mode 100644 index 0000000..bc50c62 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/exception/user/CaptchaExpireException.java @@ -0,0 +1,14 @@ +package com.easyink.common.exception.user; + +/** + * 验证码失效异常类 + * + * @author admin + */ +public class CaptchaExpireException extends UserException { + private static final long serialVersionUID = 1L; + + public CaptchaExpireException() { + super("user.jcaptcha.expire", null); + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/exception/user/NoLoginTokenException.java b/easyink-common/src/main/java/com/easyink/common/exception/user/NoLoginTokenException.java new file mode 100644 index 0000000..2d1313b --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/exception/user/NoLoginTokenException.java @@ -0,0 +1,15 @@ +package com.easyink.common.exception.user; + +/** + * 类名: 缺少登录后的TOKEN信息异常类 + * + * @author : silver_chariot + * @date : 2021/8/30 14:40 + */ +public class NoLoginTokenException extends RuntimeException { + private static final long serialVersionUID = 1L; + + public NoLoginTokenException(String message) { + super(message); + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/exception/user/QrCodeLoginException.java b/easyink-common/src/main/java/com/easyink/common/exception/user/QrCodeLoginException.java new file mode 100644 index 0000000..ccee4cf --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/exception/user/QrCodeLoginException.java @@ -0,0 +1,19 @@ +package com.easyink.common.exception.user; + +/** + * 二维码扫码登录异常类 + * + * @author silver_chariot + */ +public class QrCodeLoginException extends UserException { + private static final long serialVersionUID = 1L; + + public QrCodeLoginException() { + super("qrcode.login.error", null); + } + + public QrCodeLoginException(String message) { + super(message, null); + } + +} diff --git a/easyink-common/src/main/java/com/easyink/common/exception/user/UserException.java b/easyink-common/src/main/java/com/easyink/common/exception/user/UserException.java new file mode 100644 index 0000000..b25ef16 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/exception/user/UserException.java @@ -0,0 +1,16 @@ +package com.easyink.common.exception.user; + +import com.easyink.common.exception.BaseException; + +/** + * 用户信息异常类 + * + * @author admin + */ +public class UserException extends BaseException { + private static final long serialVersionUID = 1L; + + public UserException(String code, Object[] args) { + super("user", code, args, null); + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/exception/user/UserNoCorpException.java b/easyink-common/src/main/java/com/easyink/common/exception/user/UserNoCorpException.java new file mode 100644 index 0000000..458458c --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/exception/user/UserNoCorpException.java @@ -0,0 +1,16 @@ +package com.easyink.common.exception.user; + +/** + * 类名: UserNoCorpException + * 若获取不到缓存中用户的公司ID,则抛出此异常 + * + * @author : silver_chariot + * @date : 2021/8/30 14:40 + */ +public class UserNoCorpException extends RuntimeException { + private static final long serialVersionUID = 1L; + + public UserNoCorpException(String message) { + super(message); + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/exception/user/UserPasswordNotMatchException.java b/easyink-common/src/main/java/com/easyink/common/exception/user/UserPasswordNotMatchException.java new file mode 100644 index 0000000..240347c --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/exception/user/UserPasswordNotMatchException.java @@ -0,0 +1,14 @@ +package com.easyink.common.exception.user; + +/** + * 用户密码不正确或不符合规范异常类 + * + * @author admin + */ +public class UserPasswordNotMatchException extends UserException { + private static final long serialVersionUID = 1L; + + public UserPasswordNotMatchException() { + super("user.password.not.match", null); + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/exception/wecom/WeComException.java b/easyink-common/src/main/java/com/easyink/common/exception/wecom/WeComException.java new file mode 100644 index 0000000..8e4b6ed --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/exception/wecom/WeComException.java @@ -0,0 +1,41 @@ +package com.easyink.common.exception.wecom; + +/** + * @description: 企业微信相关异常类 + * @author admin + * @create: 2020-08-26 16:52 + **/ +public class WeComException extends RuntimeException { + + private static final long serialVersionUID = 1L; + + protected String message; + + private Integer code; + + public WeComException(String message) { + this.message = message; + } + + public WeComException(Integer code, String message) { + this.code = code; + this.message = message; + } + + @Override + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public Integer getCode() { + return code; + } + + public void setCode(Integer code) { + this.code = code; + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/filter/RepeatableFilter.java b/easyink-common/src/main/java/com/easyink/common/filter/RepeatableFilter.java new file mode 100644 index 0000000..d68c42f --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/filter/RepeatableFilter.java @@ -0,0 +1,40 @@ +package com.easyink.common.filter; + +import com.easyink.common.utils.StringUtils; +import org.springframework.http.MediaType; + +import javax.servlet.*; +import javax.servlet.http.HttpServletRequest; +import java.io.IOException; + +/** + * Repeatable 过滤器 + * + * @author admin + */ +public class RepeatableFilter implements Filter { + @Override + public void init(FilterConfig filterConfig) { + + } + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) + throws IOException, ServletException { + ServletRequest requestWrapper = null; + if (request instanceof HttpServletRequest && StringUtils.equalsAnyIgnoreCase(request.getContentType(), + MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_JSON_UTF8_VALUE)) { + requestWrapper = new RepeatedlyRequestWrapper((HttpServletRequest) request, response); + } + if (null == requestWrapper) { + chain.doFilter(request, response); + } else { + chain.doFilter(requestWrapper, response); + } + } + + @Override + public void destroy() { + + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/filter/RepeatedlyRequestWrapper.java b/easyink-common/src/main/java/com/easyink/common/filter/RepeatedlyRequestWrapper.java new file mode 100644 index 0000000..09247cf --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/filter/RepeatedlyRequestWrapper.java @@ -0,0 +1,65 @@ +package com.easyink.common.filter; + +import com.easyink.common.utils.http.HttpHelper; + +import javax.servlet.ReadListener; +import javax.servlet.ServletInputStream; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletRequestWrapper; +import java.io.BufferedReader; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; + +/** + * 构建可重复读取inputStream的request + * + * @author admin + */ +public class RepeatedlyRequestWrapper extends HttpServletRequestWrapper { + private final byte[] body; + + public RepeatedlyRequestWrapper(HttpServletRequest request, ServletResponse response) throws IOException { + super(request); + request.setCharacterEncoding("UTF-8"); + response.setCharacterEncoding("UTF-8"); + + body = HttpHelper.getBodyString(request).getBytes(StandardCharsets.UTF_8); + } + + @Override + public BufferedReader getReader() throws IOException { + return new BufferedReader(new InputStreamReader(getInputStream())); + } + + @Override + public ServletInputStream getInputStream() { + + final ByteArrayInputStream bais = new ByteArrayInputStream(body); + + return new ServletInputStream() { + + @Override + public int read() { + return bais.read(); + } + + @Override + public boolean isFinished() { + return false; + } + + @Override + public boolean isReady() { + return false; + } + + @Override + public void setReadListener(ReadListener readListener) { + + } + }; + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/filter/XssFilter.java b/easyink-common/src/main/java/com/easyink/common/filter/XssFilter.java new file mode 100644 index 0000000..0510eeb --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/filter/XssFilter.java @@ -0,0 +1,80 @@ +package com.easyink.common.filter; + +import com.easyink.common.utils.StringUtils; + +import javax.servlet.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * 防止XSS攻击的过滤器 + * + * @author admin + */ +public class XssFilter implements Filter { + /** + * 排除链接 + */ + public List excludes = new ArrayList<>(); + + /** + * xss过滤开关 + */ + public boolean enabled = false; + + @Override + public void init(FilterConfig filterConfig) { + String tempExcludes = filterConfig.getInitParameter("excludes"); + String tempEnabled = filterConfig.getInitParameter("enabled"); + if (StringUtils.isNotEmpty(tempExcludes)) { + String[] url = tempExcludes.split(","); + for (int i = 0; url != null && i < url.length; i++) { + excludes.add(url[i]); + } + } + if (StringUtils.isNotEmpty(tempEnabled)) { + enabled = Boolean.valueOf(tempEnabled); + } + } + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) + throws IOException, ServletException { + HttpServletRequest req = (HttpServletRequest) request; + HttpServletResponse resp = (HttpServletResponse) response; + if (handleExcludeURL(req, resp)) { + chain.doFilter(request, response); + return; + } + XssHttpServletRequestWrapper xssRequest = new XssHttpServletRequestWrapper((HttpServletRequest) request); + chain.doFilter(xssRequest, response); + } + + private boolean handleExcludeURL(HttpServletRequest request, HttpServletResponse response) { + if (!enabled) { + return true; + } + if (excludes == null || excludes.isEmpty()) { + return false; + } + String url = request.getServletPath(); + for (String pattern : excludes) { + Pattern p = Pattern.compile("^" + pattern); + Matcher m = p.matcher(url); + if (m.find()) { + return true; + } + } + return false; + } + + @Override + public void destroy() { + + } +} \ No newline at end of file diff --git a/easyink-common/src/main/java/com/easyink/common/filter/XssHttpServletRequestWrapper.java b/easyink-common/src/main/java/com/easyink/common/filter/XssHttpServletRequestWrapper.java new file mode 100644 index 0000000..325e56c --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/filter/XssHttpServletRequestWrapper.java @@ -0,0 +1,93 @@ +package com.easyink.common.filter; + +import com.easyink.common.utils.StringUtils; +import com.easyink.common.utils.html.EscapeUtil; +import org.apache.commons.io.IOUtils; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; + +import javax.servlet.ReadListener; +import javax.servlet.ServletInputStream; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletRequestWrapper; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.nio.charset.StandardCharsets; + +/** + * XSS过滤处理 + * + * @author admin + */ +public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper { + /** + * @param request + */ + public XssHttpServletRequestWrapper(HttpServletRequest request) { + super(request); + } + + @Override + public String[] getParameterValues(String name) { + String[] values = super.getParameterValues(name); + if (values != null) { + int length = values.length; + String[] escapseValues = new String[length]; + for (int i = 0; i < length; i++) { + // 防xss攻击和过滤前后空格 + escapseValues[i] = EscapeUtil.clean(values[i]).trim(); + } + return escapseValues; + } + return super.getParameterValues(name); + } + + @Override + public ServletInputStream getInputStream() throws IOException { + // 非json类型,直接返回 + if (!isJsonRequest()) { + return super.getInputStream(); + } + + // 为空,直接返回 + String json = IOUtils.toString(super.getInputStream(), StandardCharsets.UTF_8); + if (StringUtils.isEmpty(json)) { + return super.getInputStream(); + } + + // xss过滤 + json = EscapeUtil.clean(json).trim(); + final ByteArrayInputStream bis = new ByteArrayInputStream(json.getBytes(StandardCharsets.UTF_8)); + return new ServletInputStream() { + @Override + public boolean isFinished() { + return true; + } + + @Override + public boolean isReady() { + return true; + } + + @Override + public void setReadListener(ReadListener readListener) { + } + + @Override + public int read() { + return bis.read(); + } + }; + } + + /** + * 是否是Json请求 + * + * @param request + */ + public boolean isJsonRequest() { + String header = super.getHeader(HttpHeaders.CONTENT_TYPE); + return MediaType.APPLICATION_JSON_VALUE.equalsIgnoreCase(header) + || MediaType.APPLICATION_JSON_UTF8_VALUE.equalsIgnoreCase(header); + } +} \ No newline at end of file diff --git a/easyink-common/src/main/java/com/easyink/common/lock/LockUtil.java b/easyink-common/src/main/java/com/easyink/common/lock/LockUtil.java new file mode 100644 index 0000000..66cad88 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/lock/LockUtil.java @@ -0,0 +1,100 @@ +package com.easyink.common.lock; + + +import org.springframework.stereotype.Component; + +import java.util.concurrent.TimeUnit; + +/** + * redis分布式锁工具类 + * @author jie.zhao + */ +@Component +public final class LockUtil { + + private static Locker locker; + + /** + * 设置工具类使用的locker + * + * @param locker + */ + public static void setLocker(Locker locker) { + LockUtil.locker = locker; + } + + /** + * 获取锁 + * + * @param lockKey + */ + public static void lock(String lockKey) { + locker.lock(lockKey); + } + + /** + * 释放锁 + * + * @param lockKey + */ + public static void unlock(String lockKey) { + locker.unlock(lockKey); + } + + /** + * 获取锁,超时释放 + * + * @param lockKey + * @param timeout + */ + public static void lock(String lockKey, int timeout) { + locker.lock(lockKey, timeout); + } + + /** + * 获取锁,超时释放,指定时间单位 + * + * @param lockKey + * @param unit + * @param timeout + */ + public static void lock(String lockKey, TimeUnit unit, int timeout) { + locker.lock(lockKey, unit, timeout); + } + + + /** + * 尝试获取锁,获取到立即返回true,获取失败立即返回false + * + * @param lockKey + * @return + */ + public static boolean tryLock(String lockKey) { + return locker.tryLock(lockKey); + } + + /** + * 尝试获取锁,在给定的waitTime时间内尝试,获取到返回true,获取失败返回false,获取到后再给定的leaseTime时间超时释放 + * + * @param lockKey + * @param waitTime + * @param leaseTime + * @param unit + * @return + * @throws InterruptedException + */ + public static boolean tryLock(String lockKey, long waitTime, long leaseTime, + TimeUnit unit) throws InterruptedException { + return locker.tryLock(lockKey, waitTime, leaseTime, unit); + } + + /** + * 锁释放被任意一个线程持有 + * + * @param lockKey + * @return + */ + public static boolean isLocked(String lockKey) { + return locker.isLocked(lockKey); + } +} \ No newline at end of file diff --git a/easyink-common/src/main/java/com/easyink/common/lock/Locker.java b/easyink-common/src/main/java/com/easyink/common/lock/Locker.java new file mode 100644 index 0000000..6b01a33 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/lock/Locker.java @@ -0,0 +1,70 @@ +package com.easyink.common.lock; +import java.util.concurrent.TimeUnit; + +/** + * 锁接口 + * @author jie.zhao + */ +public interface Locker { + + /** + * 获取锁,如果锁不可用,则当前线程处于休眠状态,直到获得锁为止。 + * + * @param lockKey + */ + void lock(String lockKey); + + /** + * 释放锁 + * + * @param lockKey + */ + void unlock(String lockKey); + + /** + * 获取锁,如果锁不可用,则当前线程处于休眠状态,直到获得锁为止。如果获取到锁后,执行结束后解锁或达到超时时间后会自动释放锁 + * + * @param lockKey + * @param timeout + */ + void lock(String lockKey, int timeout); + + /** + * 获取锁,如果锁不可用,则当前线程处于休眠状态,直到获得锁为止。如果获取到锁后,执行结束后解锁或达到超时时间后会自动释放锁 + * + * @param lockKey + * @param unit + * @param timeout + */ + void lock(String lockKey, TimeUnit unit, int timeout); + + /** + * 尝试获取锁,获取到立即返回true,未获取到立即返回false + * + * @param lockKey + * @return + */ + boolean tryLock(String lockKey); + + /** + * 尝试获取锁,在等待时间内获取到锁则返回true,否则返回false,如果获取到锁,则要么执行完后程序释放锁, + * 要么在给定的超时时间leaseTime后释放锁 + * + * @param lockKey + * @param waitTime + * @param leaseTime + * @param unit + * @return + */ + boolean tryLock(String lockKey, long waitTime, long leaseTime, TimeUnit unit) + throws InterruptedException; + + /** + * 锁是否被任意一个线程锁持有 + * + * @param lockKey + * @return + */ + boolean isLocked(String lockKey); + +} \ No newline at end of file diff --git a/easyink-common/src/main/java/com/easyink/common/lock/RedisLockConfig.java b/easyink-common/src/main/java/com/easyink/common/lock/RedisLockConfig.java new file mode 100644 index 0000000..2a3cf3b --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/lock/RedisLockConfig.java @@ -0,0 +1,63 @@ +package com.easyink.common.lock; + +import org.redisson.Redisson; +import org.redisson.api.RedissonClient; +import org.redisson.config.Config; +import org.redisson.config.SingleServerConfig; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.io.IOException; + + +/** + * redis分布式锁配置 + * + * @author : wangzimo + * @date : 2021-3-17 20:05:34 + */ +@Configuration +public class RedisLockConfig { + + @Value("${spring.redis.host}") + private String host; + @Value("${spring.redis.port}") + private String port; + @Value("${spring.redis.password}") + private String password; + @Value("${spring.redis.timeout}") + private String timeout; + @Value("${spring.redis.database}") + private int database; + + /** + * RedissonClient,单机模式 + * + * @return + * @throws IOException + */ + @Bean(destroyMethod = "shutdown") + public RedissonClient redisson() { + Config config = new Config(); + SingleServerConfig singleServerConfig = config.useSingleServer(); + singleServerConfig.setAddress("redis://" + host + ":" + port); +// String timeOutStr = timeout.replaceAll("s", "") +// .replaceAll("ms", ""); +// singleServerConfig.setTimeout(Integer.parseInt(timeOutStr)); + singleServerConfig.setDatabase(database); + //有密码 + if (password != null && !"".equals(password)) { + singleServerConfig.setPassword(password); + } + return Redisson.create(config); + } + + @Bean + public RedissonLocker redissonLocker(RedissonClient redissonClient) { + RedissonLocker locker = new RedissonLocker(redissonClient); + //设置LockUtil的锁处理对象 + LockUtil.setLocker(locker); + return locker; + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/lock/RedissonLocker.java b/easyink-common/src/main/java/com/easyink/common/lock/RedissonLocker.java new file mode 100644 index 0000000..65a2db9 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/lock/RedissonLocker.java @@ -0,0 +1,69 @@ +package com.easyink.common.lock; + + +import org.redisson.api.RLock; +import org.redisson.api.RedissonClient; + +import java.util.concurrent.TimeUnit; + +/** + * 基于Redisson的分布式锁 + * @author jie.zhao + */ +public class RedissonLocker implements Locker { + + private RedissonClient redissonClient; + + public RedissonLocker(RedissonClient redissonClient) { + super(); + this.redissonClient = redissonClient; + } + + @Override + public void lock(String lockKey) { + RLock lock = redissonClient.getLock(lockKey); + lock.lock(); + } + + @Override + public void unlock(String lockKey) { + RLock lock = redissonClient.getLock(lockKey); + lock.forceUnlock(); + } + + @Override + public void lock(String lockKey, int leaseTime) { + RLock lock = redissonClient.getLock(lockKey); + lock.lock(leaseTime, TimeUnit.SECONDS); + } + + @Override + public void lock(String lockKey, TimeUnit unit, int timeout) { + RLock lock = redissonClient.getLock(lockKey); + lock.lock(timeout, unit); + } + + public void setRedissonClient(RedissonClient redissonClient) { + this.redissonClient = redissonClient; + } + + @Override + public boolean tryLock(String lockKey) { + RLock lock = redissonClient.getLock(lockKey); + return lock.tryLock(); + } + + @Override + public boolean tryLock(String lockKey, long waitTime, long leaseTime, + TimeUnit unit) throws InterruptedException { + RLock lock = redissonClient.getLock(lockKey); + return lock.tryLock(waitTime, leaseTime, unit); + } + + @Override + public boolean isLocked(String lockKey) { + RLock lock = redissonClient.getLock(lockKey); + return lock.isLocked(); + } + +} \ No newline at end of file diff --git a/easyink-common/src/main/java/com/easyink/common/manager/AsyncManager.java b/easyink-common/src/main/java/com/easyink/common/manager/AsyncManager.java new file mode 100644 index 0000000..25a2a97 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/manager/AsyncManager.java @@ -0,0 +1,53 @@ +package com.easyink.common.manager; + +import com.easyink.common.utils.Threads; +import com.easyink.common.utils.spring.SpringUtils; + +import java.util.TimerTask; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; + +/** + * 异步任务管理器 + * + * @author admin + */ +public class AsyncManager { + /** + * 操作延迟10毫秒 + */ + private int operateDelayTime = 10; + + /** + * 异步操作任务调度线程池 + */ + private ScheduledExecutorService executor = SpringUtils.getBean("scheduledExecutorService"); + + /** + * 单例模式 + */ + private AsyncManager() { + } + + private static AsyncManager me = new AsyncManager(); + + public static AsyncManager me() { + return me; + } + + /** + * 执行任务 + * + * @param task 任务 + */ + public void execute(TimerTask task) { + executor.schedule(task, operateDelayTime, TimeUnit.MILLISECONDS); + } + + /** + * 停止任务线程池 + */ + public void shutdown() { + Threads.shutdownAndAwaitTermination(executor); + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/manager/ShutdownManager.java b/easyink-common/src/main/java/com/easyink/common/manager/ShutdownManager.java new file mode 100644 index 0000000..552796c --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/manager/ShutdownManager.java @@ -0,0 +1,38 @@ +package com.easyink.common.manager; + +import com.easyink.common.utils.Threads; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import javax.annotation.PreDestroy; + +/** + * 确保应用退出时能关闭后台线程 + * + * @author admin + */ +@Component +public class ShutdownManager { + private static final Logger logger = LoggerFactory.getLogger("sys-user"); + + @PreDestroy + public void destroy() { + shutdownAsyncManager(); + } + + /** + * 停止异步执行任务 + */ + private void shutdownAsyncManager() { + try { + logger.info("====关闭后台线程池===="); + Threads.shutdownAndAwaitTermination(Threads.SINGLE_THREAD_POOL); + logger.info("====关闭后台任务任务线程池===="); + AsyncManager.me().shutdown(); + + } catch (Exception e) { + logger.error(e.getMessage(), e); + } + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/manager/factory/AsyncFactory.java b/easyink-common/src/main/java/com/easyink/common/manager/factory/AsyncFactory.java new file mode 100644 index 0000000..cf957a8 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/manager/factory/AsyncFactory.java @@ -0,0 +1,101 @@ +package com.easyink.common.manager.factory; + +import com.easyink.common.constant.Constants; +import com.easyink.common.core.domain.system.SysLogininfor; +import com.easyink.common.core.domain.system.SysOperLog; +import com.easyink.common.service.ISysLogininforService; +import com.easyink.common.service.ISysOperLogService; +import com.easyink.common.utils.LogUtils; +import com.easyink.common.utils.ServletUtils; +import com.easyink.common.utils.ip.AddressUtils; +import com.easyink.common.utils.ip.IpUtils; +import com.easyink.common.utils.spring.SpringUtils; +import eu.bitwalker.useragentutils.UserAgent; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.TimerTask; + +/** + * 异步工厂(产生任务用) + * + * @author admin + */ +public class AsyncFactory { + private static final Logger sys_user_logger = LoggerFactory.getLogger("sys-user"); + + private AsyncFactory(){ + //不能有公共构造方法 + } + + /** + * 记录登录信息 + * + * @param corpId 公司ID + * @param username 用户名 + * @param status 状态 + * @param message 消息 + * @param loginType 登录类型 + * @param args 列表 + * @return 任务task + */ + public static TimerTask recordLogininfor(final String corpId, final String username, final String status, final String message, + Integer loginType, final Object... args) { + final UserAgent userAgent = UserAgent.parseUserAgentString(ServletUtils.getRequest().getHeader("User-Agent")); + final String ip = IpUtils.getIpAddr(ServletUtils.getRequest()); + return new TimerTask() { + @Override + public void run() { + String address = AddressUtils.getRealAddressByIP(ip); + StringBuilder s = new StringBuilder(); + s.append(LogUtils.getBlock(ip)); + s.append(address); + s.append(LogUtils.getBlock(username)); + s.append(LogUtils.getBlock(status)); + s.append(LogUtils.getBlock(message)); + // 打印信息到日志 + sys_user_logger.info(s.toString(), args); + // 获取客户端操作系统 + String os = userAgent.getOperatingSystem().getName(); + // 获取客户端浏览器 + String browser = userAgent.getBrowser().getName(); + // 封装对象 + SysLogininfor logininfor = new SysLogininfor(); + logininfor.setUserName(username); + logininfor.setIpaddr(ip); + logininfor.setLoginLocation(address); + logininfor.setBrowser(browser); + logininfor.setOs(os); + logininfor.setMsg(message); + logininfor.setLoginType(loginType); + logininfor.setCorpId(corpId); + // 日志状态 + if (Constants.LOGIN_SUCCESS.equals(status) || Constants.LOGOUT.equals(status)) { + logininfor.setStatus(Constants.SUCCESS); + } else if (Constants.LOGIN_FAIL.equals(status)) { + logininfor.setStatus(Constants.FAIL); + } + // 插入数据 + SpringUtils.getBean(ISysLogininforService.class).insertLogininfor(logininfor); + } + }; + } + + + /** + * 操作日志记录 + * + * @param operLog 操作日志信息 + * @return 任务task + */ + public static TimerTask recordOper(final SysOperLog operLog) { + return new TimerTask() { + @Override + public void run() { + // 远程查询操作地点 + operLog.setOperLocation(AddressUtils.getRealAddressByIP(operLog.getOperIp())); + SpringUtils.getBean(ISysOperLogService.class).insertOperlog(operLog); + } + }; + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/mapper/SysConfigMapper.java b/easyink-common/src/main/java/com/easyink/common/mapper/SysConfigMapper.java new file mode 100644 index 0000000..fe57ab9 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/mapper/SysConfigMapper.java @@ -0,0 +1,71 @@ +package com.easyink.common.mapper; + +import com.easyink.common.core.domain.system.SysConfig; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * 参数配置 数据层 + * + * @author admin + */ + +@Repository +public interface SysConfigMapper { + /** + * 查询参数配置信息 + * + * @param config 参数配置信息 + * @return 参数配置信息 + */ + SysConfig selectConfig(SysConfig config); + + /** + * 查询参数配置列表 + * + * @param config 参数配置信息 + * @return 参数配置集合 + */ + List selectConfigList(SysConfig config); + + /** + * 根据键名查询参数配置信息 + * + * @param configKey 参数键名 + * @return 参数配置信息 + */ + SysConfig checkConfigKeyUnique(String configKey); + + /** + * 新增参数配置 + * + * @param config 参数配置信息 + * @return 结果 + */ + int insertConfig(SysConfig config); + + /** + * 修改参数配置 + * + * @param config 参数配置信息 + * @return 结果 + */ + int updateConfig(SysConfig config); + + /** + * 删除参数配置 + * + * @param configId 参数ID + * @return 结果 + */ + int deleteConfigById(Long configId); + + /** + * 批量删除参数信息 + * + * @param configIds 需要删除的参数ID + * @return 结果 + */ + int deleteConfigByIds(Long[] configIds); +} diff --git a/easyink-common/src/main/java/com/easyink/common/mapper/SysDeptMapper.java b/easyink-common/src/main/java/com/easyink/common/mapper/SysDeptMapper.java new file mode 100644 index 0000000..dc22e3e --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/mapper/SysDeptMapper.java @@ -0,0 +1,121 @@ +package com.easyink.common.mapper; + +import com.easyink.common.core.domain.entity.SysDept; +import com.easyink.common.core.domain.wecom.WeDepartment; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * 部门管理 数据层 + * + * @author admin + */ + +@Repository +public interface SysDeptMapper { + /** + * 查看企微部门管理数据 + * + * @param weDepartment 部门信息 + * @return 部门信息集合 + */ + List selectDeptList(WeDepartment weDepartment); + + /** + * 根据角色ID查询部门树信息 + * + * @param roleId 角色ID + * @return 选中部门列表 + */ + List selectDeptListByRoleId(Long roleId); + + /** + * 根据部门ID查询信息 + * + * @param deptId 部门ID + * @return 部门信息 + */ + SysDept selectDeptById(Long deptId); + + /** + * 根据ID查询所有子部门 + * + * @param deptId 部门ID + * @return 部门列表 + */ + List selectChildrenDeptById(Long deptId); + + /** + * 根据ID查询所有子部门(正常状态) + * + * @param deptId 部门ID + * @return 子部门数 + */ + int selectNormalChildrenDeptById(Long deptId); + + /** + * 是否存在子节点 + * + * @param deptId 部门ID + * @return 结果 + */ + int hasChildByDeptId(Long deptId); + + /** + * 查询部门是否存在用户 + * + * @param deptId 部门ID + * @return 结果 + */ + int checkDeptExistUser(Long deptId); + + /** + * 校验部门名称是否唯一 + * + * @param deptName 部门名称 + * @param parentId 父部门ID + * @return 结果 + */ + SysDept checkDeptNameUnique(@Param("deptName") String deptName, @Param("parentId") Long parentId); + + /** + * 新增部门信息 + * + * @param dept 部门信息 + * @return 结果 + */ + int insertDept(SysDept dept); + + /** + * 修改部门信息 + * + * @param dept 部门信息 + * @return 结果 + */ + int updateDept(SysDept dept); + + /** + * 修改所在部门的父级部门状态 + * + * @param dept 部门 + */ + void updateDeptStatus(SysDept dept); + + /** + * 修改子元素关系 + * + * @param depts 子元素 + * @return 结果 + */ + int updateDeptChildren(@Param("depts") List depts); + + /** + * 删除部门管理信息 + * + * @param deptId 部门ID + * @return 结果 + */ + int deleteDeptById(Long deptId); +} diff --git a/easyink-common/src/main/java/com/easyink/common/mapper/SysDictDataMapper.java b/easyink-common/src/main/java/com/easyink/common/mapper/SysDictDataMapper.java new file mode 100644 index 0000000..f3bb875 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/mapper/SysDictDataMapper.java @@ -0,0 +1,98 @@ +package com.easyink.common.mapper; + +import com.easyink.common.core.domain.entity.SysDictData; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * 字典表 数据层 + * + * @author admin + */ + +@Repository +public interface SysDictDataMapper { + /** + * 根据条件分页查询字典数据 + * + * @param dictData 字典数据信息 + * @return 字典数据集合信息 + */ + List selectDictDataList(SysDictData dictData); + + /** + * 根据字典类型查询字典数据 + * + * @param dictType 字典类型 + * @return 字典数据集合信息 + */ + List selectDictDataByType(String dictType); + + /** + * 根据字典类型和字典键值查询字典数据信息 + * + * @param dictType 字典类型 + * @param dictValue 字典键值 + * @return 字典标签 + */ + String selectDictLabel(@Param("dictType") String dictType, @Param("dictValue") String dictValue); + + /** + * 根据字典数据ID查询信息 + * + * @param dictCode 字典数据ID + * @return 字典数据 + */ + SysDictData selectDictDataById(Long dictCode); + + /** + * 查询字典数据 + * + * @param dictType 字典类型 + * @return 字典数据 + */ + int countDictDataByType(String dictType); + + /** + * 通过字典ID删除字典数据信息 + * + * @param dictCode 字典数据ID + * @return 结果 + */ + int deleteDictDataById(Long dictCode); + + /** + * 批量删除字典数据信息 + * + * @param dictCodes 需要删除的字典数据ID + * @return 结果 + */ + int deleteDictDataByIds(Long[] dictCodes); + + /** + * 新增字典数据信息 + * + * @param dictData 字典数据信息 + * @return 结果 + */ + int insertDictData(SysDictData dictData); + + /** + * 修改字典数据信息 + * + * @param dictData 字典数据信息 + * @return 结果 + */ + int updateDictData(SysDictData dictData); + + /** + * 同步修改字典类型 + * + * @param oldDictType 旧字典类型 + * @param newDictType 新旧字典类型 + * @return 结果 + */ + int updateDictDataType(@Param("oldDictType") String oldDictType, @Param("newDictType") String newDictType); +} diff --git a/easyink-common/src/main/java/com/easyink/common/mapper/SysDictTypeMapper.java b/easyink-common/src/main/java/com/easyink/common/mapper/SysDictTypeMapper.java new file mode 100644 index 0000000..318f120 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/mapper/SysDictTypeMapper.java @@ -0,0 +1,86 @@ +package com.easyink.common.mapper; + +import com.easyink.common.core.domain.entity.SysDictType; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * 字典表 数据层 + * + * @author admin + */ +@Repository + +public interface SysDictTypeMapper { + /** + * 根据条件分页查询字典类型 + * + * @param dictType 字典类型信息 + * @return 字典类型集合信息 + */ + List selectDictTypeList(SysDictType dictType); + + /** + * 根据所有字典类型 + * + * @return 字典类型集合信息 + */ + List selectDictTypeAll(); + + /** + * 根据字典类型ID查询信息 + * + * @param dictId 字典类型ID + * @return 字典类型 + */ + SysDictType selectDictTypeById(Long dictId); + + /** + * 根据字典类型查询信息 + * + * @param dictType 字典类型 + * @return 字典类型 + */ + SysDictType selectDictTypeByType(String dictType); + + /** + * 通过字典ID删除字典信息 + * + * @param dictId 字典ID + * @return 结果 + */ + int deleteDictTypeById(Long dictId); + + /** + * 批量删除字典类型信息 + * + * @param dictIds 需要删除的字典ID + * @return 结果 + */ + int deleteDictTypeByIds(Long[] dictIds); + + /** + * 新增字典类型信息 + * + * @param dictType 字典类型信息 + * @return 结果 + */ + int insertDictType(SysDictType dictType); + + /** + * 修改字典类型信息 + * + * @param dictType 字典类型信息 + * @return 结果 + */ + int updateDictType(SysDictType dictType); + + /** + * 校验字典类型称是否唯一 + * + * @param dictType 字典类型 + * @return 结果 + */ + SysDictType checkDictTypeUnique(String dictType); +} diff --git a/easyink-common/src/main/java/com/easyink/common/mapper/SysLogininforMapper.java b/easyink-common/src/main/java/com/easyink/common/mapper/SysLogininforMapper.java new file mode 100644 index 0000000..51a746f --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/mapper/SysLogininforMapper.java @@ -0,0 +1,47 @@ +package com.easyink.common.mapper; + +import com.easyink.common.core.domain.system.SysLogininfor; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * 系统访问日志情况信息 数据层 + * + * @author admin + */ + +@Repository +public interface SysLogininforMapper { + /** + * 新增系统登录日志 + * + * @param logininfor 访问日志对象 + */ + void insertLogininfor(SysLogininfor logininfor); + + /** + * 查询系统登录日志集合 + * + * @param logininfor 访问日志对象 + * @return 登录记录集合 + */ + List selectLogininforList(SysLogininfor logininfor); + + /** + * 批量删除系统登录日志 + * + * @param corpId 企业ID + * @param infoIds 需要删除的登录日志ID + * @return 结果 + */ + int deleteLogininforByIds(@Param("corpId") String corpId, @Param("array") Long[] infoIds); + + /** + * 清空系统登录日志 + * + * @return 结果 + */ + int cleanLogininfor(); +} diff --git a/easyink-common/src/main/java/com/easyink/common/mapper/SysMenuMapper.java b/easyink-common/src/main/java/com/easyink/common/mapper/SysMenuMapper.java new file mode 100644 index 0000000..7d2fd44 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/mapper/SysMenuMapper.java @@ -0,0 +1,130 @@ +package com.easyink.common.mapper; + +import com.easyink.common.core.domain.entity.SysMenu; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * 菜单表 数据层 + * + * @author admin + */ + +@Repository +public interface SysMenuMapper { + /** + * 查询系统菜单列表 + * + * @param menu 菜单信息 + * @return 菜单列表 + */ + List selectMenuList(SysMenu menu); + + /** + * 根据用户查询系统菜单列表 + * + * @param menu 菜单信息 + * @return 菜单列表 + */ + List selectMenuListByUserId(SysMenu menu); + + + /** + * 根据企微用户ID 查询权限 + * + * @param corpId 公司ID + * @param weUserId 企微用户ID + * @return + */ + List selectMenuPermsByWeUserId(@Param("corpId") String corpId, @Param("weUserId") String weUserId); + + /** + * 根据用户ID查询菜单 + * + * @return 菜单列表 + */ + List selectMenuTreeAll(); + + /** + * 根据角色ID查询菜单树信息 + * + * @param roleId 角色ID + * @return 选中菜单列表 + */ + List selectMenuListByRoleId(@Param("roleId") Long roleId); + + /** + * 根据菜单ID查询信息 + * + * @param menuId 菜单ID + * @return 菜单信息 + */ + SysMenu selectMenuById(Long menuId); + + /** + * 是否存在菜单子节点 + * + * @param menuId 菜单ID + * @return 结果 + */ + int hasChildByMenuId(Long menuId); + + /** + * 新增菜单信息 + * + * @param menu 菜单信息 + * @return 结果 + */ + int insertMenu(SysMenu menu); + + /** + * 修改菜单信息 + * + * @param menu 菜单信息 + * @return 结果 + */ + int updateMenu(SysMenu menu); + + /** + * 删除菜单管理信息 + * + * @param menuId 菜单ID + * @return 结果 + */ + int deleteMenuById(Long menuId); + + /** + * 校验菜单名称是否唯一 + * + * @param menuName 菜单名称 + * @param parentId 父菜单ID + * @return 结果 + */ + SysMenu checkMenuNameUnique(@Param("menuName") String menuName, @Param("parentId") Long parentId); + + /** + * 根据企微userID 获取其所属角色下的所有菜单树信息 + * + * @param corpId 企业id + * @param weUserId 企微userId + * @return 菜单树 + */ + List selectMenuTreeByWeUserId(@Param("corpId") String corpId, @Param("userId") String weUserId); + + /** + * 获取所传菜单的所有父菜单 + * + * @param menuIds 菜单 ,隔开 + * @return + */ + List selectParentMenuList(@Param("array") Long[] menuIds); + + /** + * 查询默认菜单 + * + * @return + */ + List selectDefaultPage(); +} diff --git a/easyink-common/src/main/java/com/easyink/common/mapper/SysOperLogMapper.java b/easyink-common/src/main/java/com/easyink/common/mapper/SysOperLogMapper.java new file mode 100644 index 0000000..bc92948 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/mapper/SysOperLogMapper.java @@ -0,0 +1,53 @@ +package com.easyink.common.mapper; + +import com.easyink.common.core.domain.system.SysOperLog; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * 操作日志 数据层 + * + * @author admin + */ + +@Repository +public interface SysOperLogMapper { + /** + * 新增操作日志 + * + * @param operLog 操作日志对象 + */ + void insertOperlog(SysOperLog operLog); + + /** + * 查询系统操作日志集合 + * + * @param operLog 操作日志对象 + * @return 操作日志集合 + */ + List selectOperLogList(SysOperLog operLog); + + /** + * 批量删除系统操作日志 + * + * @param corpId 公司ID + * @param operIds 需要删除的操作日志ID + * @return 结果 + */ + int deleteOperLogByIds(@Param("corpId") String corpId, @Param("array") Long[] operIds); + + /** + * 查询操作日志详细 + * + * @param operId 操作ID + * @return 操作日志对象 + */ + SysOperLog selectOperLogById(Long operId); + + /** + * 清空操作日志 + */ + void cleanOperLog(); +} diff --git a/easyink-common/src/main/java/com/easyink/common/mapper/SysRoleDeptMapper.java b/easyink-common/src/main/java/com/easyink/common/mapper/SysRoleDeptMapper.java new file mode 100644 index 0000000..15d98dc --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/mapper/SysRoleDeptMapper.java @@ -0,0 +1,75 @@ +package com.easyink.common.mapper; + +import com.easyink.common.core.domain.system.SysRoleDept; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * 角色与部门关联表 数据层 + * + * @author admin + */ + +@Repository +public interface SysRoleDeptMapper { + /** + * 通过角色ID删除角色和部门关联 + * + * @param roleId 角色ID + * @return 结果 + */ + int deleteRoleDeptByRoleId(Long roleId); + + /** + * 批量删除角色部门关联信息 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + int deleteRoleDept(Long[] ids); + + /** + * 查询部门使用数量 + * + * @param deptId 部门ID + * @return 结果 + */ + int selectCountRoleDeptByDeptId(Long deptId); + + /** + * 批量新增角色部门信息 + * + * @param roleDeptList 角色部门列表 + * @return 结果 + */ + int batchRoleDept(List roleDeptList); + + /** + * 根据部门ID获取其当前部门和所有下级部门ID + * + * @param corpId 公司ID + * @param departmentId 所属部门ID + * @return + */ + String getDeptAndChildDept(@Param("corpId") String corpId, @Param("departmentId") Long departmentId); + + + /** + * 根据角色id获取部门数组 + * + * @param corpId 公司Id + * @param roleId 角色Id + * @return + */ + List getDeptByRoleId(@Param("corpId") String corpId, @Param("roleId") Long roleId); + + /** + * 根据企业id获取所有的部门id集合 + * + * @param corpId 企业id + * @return 部门id 集合 + */ + List getAllDeptList(String corpId); +} diff --git a/easyink-common/src/main/java/com/easyink/common/mapper/SysRoleMapper.java b/easyink-common/src/main/java/com/easyink/common/mapper/SysRoleMapper.java new file mode 100644 index 0000000..e43e449 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/mapper/SysRoleMapper.java @@ -0,0 +1,117 @@ +package com.easyink.common.mapper; + +import com.easyink.common.core.domain.entity.SysRole; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * 角色表 数据层 + * + * @author admin + */ + +@Repository +public interface SysRoleMapper { + /** + * 根据条件分页查询角色数据 + * + * @param role 角色信息 + * @return 角色数据集合信息 + */ + List selectRoleList(SysRole role); + + /** + * 根据用户ID查询角色 + * + * @param corpId 公司ID + * @param userId 用户ID + * @return 角色列表 + */ + List selectRolePermissionByUserId(@Param("corpId") String corpId, @Param("userId") String userId); + + /** + * 根据企微userId 查询角色 + * + * @param corpId 企业ID + * @param userId 用户ID + * @return + */ + SysRole selectRoleByWeUserId(@Param("corpId") String corpId, @Param("userId") String userId); + + /** + * 查询所有角色 + * + * @return 角色列表 + */ + List selectRoleAll(); + + + /** + * 通过公司ID和角色ID查询角色 + * + * @param corpId 公司ID + * @param roleId 角色ID + * @return 角色对象信息 + */ + SysRole selectByCorpAndRoleId(@Param("corpId") String corpId, @Param("roleId") Long roleId); + + /** + * 根据用户ID查询角色 + * + * @param userName 用户名 + * @return 角色列表 + */ + List selectRolesByUserName(String userName); + + /** + * 校验角色名称是否唯一 + * + * @param role 角色 + * @return 角色信息 + */ + SysRole checkRoleNameUnique(SysRole role); + + /** + * 校验角色权限是否唯一 + * + * @param roleKey 角色权限 + * @return 角色信息 + */ + SysRole checkRoleKeyUnique(String roleKey); + + /** + * 修改角色信息 + * + * @param role 角色信息 + * @return 结果 + */ + int updateRole(SysRole role); + + /** + * 新增角色信息 + * + * @param role 角色信息 + * @return 结果 + */ + int insertRole(SysRole role); + + /** + * 通过角色ID删除角色 + * + * @param roleId 角色ID + * @return 结果 + */ + int deleteRoleById(Long roleId); + + /** + * 批量删除角色信息 + * + * @param corpId corpId + * @param roleIds 需要批量删除的角色Ids + * @return + */ + int deleteRoleByIds(@Param("corpId") String corpId, @Param("roleIds") Long[] roleIds); +} + diff --git a/easyink-common/src/main/java/com/easyink/common/mapper/SysRoleMenuMapper.java b/easyink-common/src/main/java/com/easyink/common/mapper/SysRoleMenuMapper.java new file mode 100644 index 0000000..5e1c5b1 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/mapper/SysRoleMenuMapper.java @@ -0,0 +1,40 @@ +package com.easyink.common.mapper; + +import com.easyink.common.core.domain.system.SysRoleMenu; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * 角色与菜单关联表 数据层 + * + * @author admin + */ + +@Repository +public interface SysRoleMenuMapper { + /** + * 查询菜单使用数量 + * + * @param menuId 菜单ID + * @return 结果 + */ + int checkMenuExistRole(Long menuId); + + /** + * 通过角色ID删除角色和菜单关联 + * + * @param roleId 角色ID + * @return 结果 + */ + Integer deleteRoleMenuByRoleId(@Param("roleId") Long roleId); + + /** + * 批量新增角色菜单信息 + * + * @param roleMenuList 角色菜单列表 + * @return 结果 + */ + int batchRoleMenu(List roleMenuList); +} diff --git a/easyink-common/src/main/java/com/easyink/common/mapper/SysShortUrlMappingMapper.java b/easyink-common/src/main/java/com/easyink/common/mapper/SysShortUrlMappingMapper.java new file mode 100644 index 0000000..403e406 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/mapper/SysShortUrlMappingMapper.java @@ -0,0 +1,18 @@ +package com.easyink.common.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.easyink.common.shorturl.SysShortUrlMapping; +import org.apache.ibatis.annotations.Mapper; +import org.springframework.stereotype.Repository; + +/** + * 类名: 短链映射持久层接口 + * + * @author : silver_chariot + * @date : 2022/7/18 16:49 + **/ +@Mapper +@Repository +public interface SysShortUrlMappingMapper extends BaseMapper { + +} diff --git a/easyink-common/src/main/java/com/easyink/common/mapper/SysUserMapper.java b/easyink-common/src/main/java/com/easyink/common/mapper/SysUserMapper.java new file mode 100644 index 0000000..2921556 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/mapper/SysUserMapper.java @@ -0,0 +1,114 @@ +package com.easyink.common.mapper; + +import com.easyink.common.core.domain.entity.SysUser; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * 用户表 数据层 + * + * @author admin + */ + +@Repository +public interface SysUserMapper { + /** + * 根据条件分页查询用户列表 + * + * @param sysUser 用户信息 + * @return 用户信息集合信息 + */ + List selectUserList(SysUser sysUser); + + /** + * 通过用户名查询用户 + * + * @param userName 用户名 + * @return 用户对象信息 + */ + SysUser selectUserByUserName(String userName); + + /** + * 通过用户ID查询用户 + * + * @param userId 用户ID + * @return 用户对象信息 + */ + SysUser selectUserById(Long userId); + + /** + * 新增用户信息 + * + * @param user 用户信息 + * @return 结果 + */ + int insertUser(SysUser user); + + /** + * 修改用户信息 + * + * @param user 用户信息 + * @return 结果 + */ + int updateUser(SysUser user); + + /** + * 修改用户头像 + * + * @param userName 用户名 + * @param avatar 头像地址 + * @return 结果 + */ + int updateUserAvatar(@Param("userName") String userName, @Param("avatar") String avatar); + + /** + * 重置用户密码 + * + * @param userName 用户名 + * @param password 密码 + * @return 结果 + */ + int resetUserPwd(@Param("userName") String userName, @Param("password") String password); + + /** + * 通过用户ID删除用户 + * + * @param userId 用户ID + * @return 结果 + */ + int deleteUserById(Long userId); + + /** + * 批量删除用户信息 + * + * @param userIds 需要删除的用户ID + * @return 结果 + */ + int deleteUserByIds(Long[] userIds); + + /** + * 校验用户名称是否唯一 + * + * @param userName 用户名称 + * @return 结果 + */ + int checkUserNameUnique(String userName); + + /** + * 校验手机号码是否唯一 + * + * @param phonenumber 手机号码 + * @return 结果 + */ + SysUser checkPhoneUnique(String phonenumber); + + /** + * 校验email是否唯一 + * + * @param email 用户邮箱 + * @return 结果 + */ + SysUser checkEmailUnique(String email); +} diff --git a/easyink-common/src/main/java/com/easyink/common/mapper/SysUserRoleMapper.java b/easyink-common/src/main/java/com/easyink/common/mapper/SysUserRoleMapper.java new file mode 100644 index 0000000..5d3cb50 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/mapper/SysUserRoleMapper.java @@ -0,0 +1,20 @@ +package com.easyink.common.mapper; + +import org.springframework.stereotype.Repository; + +/** + * 用户与角色关联表 数据层 + * + * @author admin + */ + +@Repository +public interface SysUserRoleMapper { + /** + * 通过角色ID查询角色使用数量 + * + * @param roleId 角色ID + * @return 结果 + */ + int countUserRoleByRoleId(Long roleId); +} diff --git a/easyink-common/src/main/java/com/easyink/common/service/ISysConfigService.java b/easyink-common/src/main/java/com/easyink/common/service/ISysConfigService.java new file mode 100644 index 0000000..00bb903 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/service/ISysConfigService.java @@ -0,0 +1,73 @@ +package com.easyink.common.service; + +import com.easyink.common.core.domain.system.SysConfig; + +import java.util.List; + +/** + * 参数配置 服务层 + * + * @author admin + */ +public interface ISysConfigService { + /** + * 查询参数配置信息 + * + * @param configId 参数配置ID + * @return 参数配置信息 + */ + SysConfig selectConfigById(Long configId); + + /** + * 根据键名查询参数配置信息 + * + * @param configKey 参数键名 + * @return 参数键值 + */ + String selectConfigByKey(String configKey); + + /** + * 查询参数配置列表 + * + * @param config 参数配置信息 + * @return 参数配置集合 + */ + List selectConfigList(SysConfig config); + + /** + * 新增参数配置 + * + * @param config 参数配置信息 + * @return 结果 + */ + int insertConfig(SysConfig config); + + /** + * 修改参数配置 + * + * @param config 参数配置信息 + * @return 结果 + */ + int updateConfig(SysConfig config); + + /** + * 批量删除参数信息 + * + * @param configIds 需要删除的参数ID + * @return 结果 + */ + int deleteConfigByIds(Long[] configIds); + + /** + * 清空缓存数据 + */ + void clearCache(); + + /** + * 校验参数键名是否唯一 + * + * @param config 参数信息 + * @return 结果 + */ + String checkConfigKeyUnique(SysConfig config); +} diff --git a/easyink-common/src/main/java/com/easyink/common/service/ISysDeptService.java b/easyink-common/src/main/java/com/easyink/common/service/ISysDeptService.java new file mode 100644 index 0000000..41f6906 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/service/ISysDeptService.java @@ -0,0 +1,134 @@ +package com.easyink.common.service; + +import com.easyink.common.core.domain.TreeSelect; +import com.easyink.common.core.domain.entity.SysDept; +import com.easyink.common.core.domain.model.LoginUser; +import com.easyink.common.core.domain.wecom.WeDepartment; + +import java.util.List; + +/** + * 部门管理 服务层 + * + * @author admin + */ +public interface ISysDeptService { + /** + * 查询企微部门管理数据 + * + * @param dept 部门信息 + * @param loginUser + * @return 部门信息集合 + */ + List selectDeptList(WeDepartment dept, LoginUser loginUser); + + /** + * 构建前端所需要树结构 + * + * @param depts 部门列表 + * @return 树结构列表 + */ + + List buildDeptTree(List depts); + + /** + * 构建前端所需要下拉树结构 + * + * @param depts 部门列表 + * @return 下拉树结构列表 + */ + List buildDeptTreeSelect(List depts); + + /** + * 根据角色ID查询部门树信息 + * + * @param roleId 角色ID + * @return 选中部门列表 + */ + List selectDeptListByRoleId(Long roleId); + + /** + * 根据部门ID查询信息 + * + * @param deptId 部门ID + * @return 部门信息 + */ + SysDept selectDeptById(Long deptId); + + /** + * 根据ID查询所有子部门(正常状态) + * + * @param deptId 部门ID + * @return 子部门数 + */ + int selectNormalChildrenDeptById(Long deptId); + + /** + * 是否存在部门子节点 + * + * @param deptId 部门ID + * @return 结果 + */ + boolean hasChildByDeptId(Long deptId); + + /** + * 查询部门是否存在用户 + * + * @param deptId 部门ID + * @return 结果 true 存在 false 不存在 + */ + boolean checkDeptExistUser(Long deptId); + + /** + * 校验部门名称是否唯一 + * + * + * @param dept 部门信息 + * @return 结果 + */ + String checkDeptNameUnique( SysDept dept); + + /** + * 新增保存部门信息 + * + * @param dept 部门信息 + * @return 结果 + */ + int insertDept(SysDept dept); + + /** + * 修改保存部门信息 + * + * @param dept 部门信息 + * @return 结果 + */ + int updateDept(SysDept dept); + + /** + * 删除部门管理信息 + * + * @param deptId 部门ID + * @return 结果 + */ + int deleteDeptById(Long deptId); + + /** + * 过滤部门数据权限,留下有权限的部门 + * + * @param list 部门集合 + * @param loginUser 登录用户实体 + * @return 过滤后的部门集合 + */ + List filterDepartmentDataScope(List list, LoginUser loginUser); + + + /** + * 为部门设置权限标识 + * + * @param list 部门集合 + * @param loginUser 登录用户实体 + * @return 返回所有部门,在每个部门中设置权限 + */ + List filterDataScope(List list, LoginUser loginUser); + +} diff --git a/easyink-common/src/main/java/com/easyink/common/service/ISysDictDataService.java b/easyink-common/src/main/java/com/easyink/common/service/ISysDictDataService.java new file mode 100644 index 0000000..56a72ab --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/service/ISysDictDataService.java @@ -0,0 +1,53 @@ +package com.easyink.common.service; + +import com.easyink.common.core.domain.entity.SysDictData; + +import java.util.List; + +/** + * 字典 业务层 + * + * @author admin + */ +public interface ISysDictDataService { + /** + * 根据条件分页查询字典数据 + * + * @param dictData 字典数据信息 + * @return 字典数据集合信息 + */ + List selectDictDataList(SysDictData dictData); + + + /** + * 根据字典数据ID查询信息 + * + * @param dictCode 字典数据ID + * @return 字典数据 + */ + SysDictData selectDictDataById(Long dictCode); + + /** + * 批量删除字典数据信息 + * + * @param dictCodes 需要删除的字典数据ID + * @return 结果 + */ + int deleteDictDataByIds(Long[] dictCodes); + + /** + * 新增保存字典数据信息 + * + * @param dictData 字典数据信息 + * @return 结果 + */ + int insertDictData(SysDictData dictData); + + /** + * 修改保存字典数据信息 + * + * @param dictData 字典数据信息 + * @return 结果 + */ + int updateDictData(SysDictData dictData); +} diff --git a/easyink-common/src/main/java/com/easyink/common/service/ISysDictTypeService.java b/easyink-common/src/main/java/com/easyink/common/service/ISysDictTypeService.java new file mode 100644 index 0000000..cb9fbdf --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/service/ISysDictTypeService.java @@ -0,0 +1,81 @@ +package com.easyink.common.service; + +import com.easyink.common.core.domain.entity.SysDictData; +import com.easyink.common.core.domain.entity.SysDictType; + +import java.util.List; + +/** + * 字典 业务层 + * + * @author admin + */ +public interface ISysDictTypeService { + /** + * 根据条件分页查询字典类型 + * + * @param dictType 字典类型信息 + * @return 字典类型集合信息 + */ + List selectDictTypeList(SysDictType dictType); + + /** + * 根据所有字典类型 + * + * @return 字典类型集合信息 + */ + List selectDictTypeAll(); + + /** + * 根据字典类型查询字典数据 + * + * @param dictType 字典类型 + * @return 字典数据集合信息 + */ + List selectDictDataByType(String dictType); + + /** + * 根据字典类型ID查询信息 + * + * @param dictId 字典类型ID + * @return 字典类型 + */ + SysDictType selectDictTypeById(Long dictId); + + /** + * 批量删除字典信息 + * + * @param dictIds 需要删除的字典ID + * @return 结果 + */ + int deleteDictTypeByIds(Long[] dictIds); + + /** + * 清空缓存数据 + */ + void clearCache(); + + /** + * 新增保存字典类型信息 + * + * @param dictType 字典类型信息 + * @return 结果 + */ + int insertDictType(SysDictType dictType); + + /** + * 修改保存字典类型信息 + * + * @param dictType 字典类型信息 + * @return 结果 + */ + int updateDictType(SysDictType dictType); + + /** + * 校验字典类型称是否唯一 + * + * @param dictType 字典类型 + * @return 结果 + */ + String checkDictTypeUnique(SysDictType dictType); +} diff --git a/easyink-common/src/main/java/com/easyink/common/service/ISysLogininforService.java b/easyink-common/src/main/java/com/easyink/common/service/ISysLogininforService.java new file mode 100644 index 0000000..4f8ed11 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/service/ISysLogininforService.java @@ -0,0 +1,43 @@ +package com.easyink.common.service; + +import com.easyink.common.core.domain.system.SysLogininfor; + +import java.util.List; + +/** + * 系统访问日志情况信息 服务层 + * + * @author admin + */ +public interface ISysLogininforService { + /** + * 新增系统登录日志 + * + * @param logininfor 访问日志对象 + */ + void insertLogininfor(SysLogininfor logininfor); + + /** + * 查询系统登录日志集合 + * + * @param logininfor 访问日志对象 + * @return 登录记录集合 + */ + List selectLogininforList(SysLogininfor logininfor); + + /** + * 批量删除系统登录日志 + * + * + * @param corpId 公司ID + * @param infoIds 需要删除的登录日志ID + * @return + */ + int deleteLogininforByIds(String corpId, Long[] infoIds); + + /** + * 清空系统登录日志 + * @param corpId + */ + void cleanLogininfor(String corpId); +} diff --git a/easyink-common/src/main/java/com/easyink/common/service/ISysMenuService.java b/easyink-common/src/main/java/com/easyink/common/service/ISysMenuService.java new file mode 100644 index 0000000..08172fa --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/service/ISysMenuService.java @@ -0,0 +1,166 @@ +package com.easyink.common.service; + +import com.easyink.common.core.MenuTree; +import com.easyink.common.core.domain.TreeSelect; +import com.easyink.common.core.domain.entity.SysMenu; +import com.easyink.common.core.domain.model.LoginUser; +import com.easyink.common.core.domain.system.RouterVo; + +import java.util.List; +import java.util.Set; + +/** + * 菜单 业务层 + * + * @author admin + */ +public interface ISysMenuService { + /** + * 根据用户查询系统菜单列表 + * + * @param loginUser 用户ID + * @return 菜单列表 + */ + List selectMenuList(LoginUser loginUser); + + /** + * 根据用户查询系统菜单列表 + * + * @param menu 菜单信息 + * @param userId 用户ID + * @return 菜单列表 + */ + List selectMenuList(SysMenu menu, Long userId); + /** + * 查询系统菜单列表 + * + * @param menu 菜单信息 + * @return 菜单列表 + */ + List selectMenuList(SysMenu menu, LoginUser user); + + /** + * 根据企微用户ID查询权限 + * + * @param corpId 公司ID + * @param userId 用户ID + * @return 权限列表 + */ + Set selectMenuPermsByWeUserId(String corpId, String userId); + + + /** + * 根据角色ID查询菜单树信息 + * + * @param roleId 角色ID + * @return 选中菜单列表 + */ + List selectMenuListByRoleId(Long roleId); + + /** + * 构建前端路由所需要的菜单 + * + * @param menus 菜单列表 + * @return 路由列表 + */ + List buildMenus(List menus); + + /** + * 构建前端所需要树结构 + * + * @param menus 菜单列表 + * @return 树结构列表 + */ + List buildMenuTree(List menus); + + List buildMenuTreeForRoleManage(List menus); + + /** + * 构建前端所需要下拉树结构 + * + * @param menus 菜单列表 + * @return 下拉树结构列表 + */ + List buildMenuTreeSelect(List menus); + + /** + * 构建角色-菜单 前端所需要下拉树结构 + * + * @param menus 菜单列表 + * @return 下拉树结构列表 + */ + List buildMenuTreeSelectForRole(List menus); + + /** + * 根据菜单ID查询信息 + * + * @param menuId 菜单ID + * @return 菜单信息 + */ + SysMenu selectMenuById(Long menuId); + + /** + * 是否存在菜单子节点 + * + * @param menuId 菜单ID + * @return 结果 true 存在 false 不存在 + */ + boolean hasChildByMenuId(Long menuId); + + /** + * 查询菜单是否存在角色 + * + * @param menuId 菜单ID + * @return 结果 true 存在 false 不存在 + */ + boolean checkMenuExistRole(Long menuId); + + /** + * 新增保存菜单信息 + * + * @param menu 菜单信息 + * @return 结果 + */ + int insertMenu(SysMenu menu); + + /** + * 修改保存菜单信息 + * + * @param menu 菜单信息 + * @return 结果 + */ + int updateMenu(SysMenu menu); + + /** + * 删除菜单管理信息 + * + * @param menuId 菜单ID + * @return 结果 + */ + int deleteMenuById(Long menuId); + + /** + * 校验菜单名称是否唯一 + * + * @param menu 菜单信息 + * @return 结果 + */ + String checkMenuNameUnique(SysMenu menu); + + /** + * 根据缓存的登录用户实体选择菜单 + * + * @param loginUser 登录用户信息 + * @return + */ + List selectMenuTreeByLoginUser(LoginUser loginUser); + + /** + * 根据角色id 获取角色管理中的菜单树 + * + * @param roleId 角色ID + * @param loginUser 登录用户实体 + * @return 菜单树 + */ + MenuTree getRoleMenuTreeSelect(Long roleId, LoginUser loginUser); +} diff --git a/easyink-common/src/main/java/com/easyink/common/service/ISysOperLogService.java b/easyink-common/src/main/java/com/easyink/common/service/ISysOperLogService.java new file mode 100644 index 0000000..ac98010 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/service/ISysOperLogService.java @@ -0,0 +1,43 @@ +package com.easyink.common.service; + +import com.easyink.common.core.domain.system.SysOperLog; + +import java.util.List; + +/** + * 操作日志 服务层 + * + * @author admin + */ +public interface ISysOperLogService { + /** + * 新增操作日志 + * + * @param operLog 操作日志对象 + */ + void insertOperlog(SysOperLog operLog); + + /** + * 查询系统操作日志集合 + * + * @param operLog 操作日志对象 + * @return 操作日志集合 + */ + List selectOperLogList(SysOperLog operLog); + + /** + * 批量删除系统操作日志 + * + * @param corpId 公司ID + * @param operIds 需要删除的操作日志ID + * @return 结果 + */ + int deleteOperLogByIds(String corpId, Long[] operIds); + + /** + * 清空操作日志 + * + * @param corpId 公司ID + */ + void cleanOperLog(String corpId); +} diff --git a/easyink-common/src/main/java/com/easyink/common/service/ISysRoleService.java b/easyink-common/src/main/java/com/easyink/common/service/ISysRoleService.java new file mode 100644 index 0000000..4a2f115 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/service/ISysRoleService.java @@ -0,0 +1,136 @@ +package com.easyink.common.service; + +import com.easyink.common.core.domain.entity.SysRole; + +import java.util.List; +import java.util.Set; + +/** + * 角色业务层 + * + * @author admin + */ +public interface ISysRoleService { + /** + * 根据条件分页查询角色数据 + * + * @param role 角色信息 + * @return 角色数据集合信息 + */ + List selectRoleList(SysRole role); + + /** + * 根据用户ID查询角色 + * + * @param corpId 企业ID + * @param userId 用户ID + * @return 权限列表 + */ + Set selectRolePermissionByUserId(String corpId, String userId); + + /** + * 查询所有角色 + * + * @param corpId 公司ID + * @return 角色列表 + */ + List selectRoleAll(String corpId); + + /** + * 通过角色ID查询角色 + * + * @param corpId 公司ID + * @param roleId 角色ID + * @return 角色对象信息 + */ + SysRole selectRoleById(String corpId, Long roleId); + + /** + * 校验角色名称是否唯一 + * + * @param role 角色信息 + * @return 结果 + */ + String checkRoleNameUnique(SysRole role); + + /** + * 校验角色是否允许操作 + * + * @param role 角色信息 + */ + void checkRoleAllowed(SysRole role); + + /** + * 判断是否是系统默认角色 + * + * @param corpId 公司ID + * @param roleId 角色ID + * @return TRUE or FALSE + */ + boolean isDefaultRole(String corpId, Long roleId); + + /** + * 判断是否是系统默认角色 + * + * @param role 角色 + * @return TRUE or FALSE + */ + boolean isDefaultRole(SysRole role); + + /** + * 检查是否是默认角色且修改了默认角色的名字 + * + * @param editRole 修改后的角色 + */ + void checkDefaultRoleEditName(SysRole editRole); + + /** + * 通过角色ID查询角色使用数量 + * + * @param roleId 角色ID + * @return 结果 + */ + int countUserRoleByRoleId(Long roleId); + + /** + * 新增保存角色信息 + * + * @param role 角色信息 + * @return 结果 + */ + int insertRole(SysRole role); + + /** + * 修改保存角色信息 + * + * @param role 角色信息 + * @return 结果 + */ + int updateRole(SysRole role); + + /** + * 修改角色状态 + * + * @param role 角色信息 + * @return 结果 + */ + int updateRoleStatus(SysRole role); + + /** + * 修改数据权限信息 + * + * @param role 角色信息 + * @return 结果 + */ + int authDataScope(SysRole role); + + /** + * 批量删除角色信息 + * + * + * @param corpId 公司ID + * @param roleIds 需要删除的角色ID + * @return 结果 + */ + int deleteRoleByIds(String corpId, Long[] roleIds); +} diff --git a/easyink-common/src/main/java/com/easyink/common/service/ISysUserOnlineService.java b/easyink-common/src/main/java/com/easyink/common/service/ISysUserOnlineService.java new file mode 100644 index 0000000..f76285f --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/service/ISysUserOnlineService.java @@ -0,0 +1,47 @@ +package com.easyink.common.service; + +import com.easyink.common.core.domain.model.LoginUser; +import com.easyink.common.core.domain.system.SysUserOnline; + +/** + * 在线用户 服务层 + * + * @author admin + */ +public interface ISysUserOnlineService { + /** + * 通过登录地址查询信息 + * + * @param ipaddr 登录地址 + * @param user 用户信息 + * @return 在线用户信息 + */ + SysUserOnline selectOnlineByIpaddr(String ipaddr, LoginUser user); + + /** + * 通过用户名称查询信息 + * + * @param userName 用户名称 + * @param user 用户信息 + * @return 在线用户信息 + */ + SysUserOnline selectOnlineByUserName(String userName, LoginUser user); + + /** + * 通过登录地址/用户名称查询信息 + * + * @param ipaddr 登录地址 + * @param userName 用户名称 + * @param user 用户信息 + * @return 在线用户信息 + */ + SysUserOnline selectOnlineByInfo(String ipaddr, String userName, LoginUser user); + + /** + * 设置在线用户信息 + * + * @param user 用户信息 + * @return 在线用户 + */ + SysUserOnline loginUserToUserOnline(LoginUser user); +} diff --git a/easyink-common/src/main/java/com/easyink/common/service/ISysUserService.java b/easyink-common/src/main/java/com/easyink/common/service/ISysUserService.java new file mode 100644 index 0000000..6ec7603 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/service/ISysUserService.java @@ -0,0 +1,152 @@ +package com.easyink.common.service; + +import com.easyink.common.core.domain.entity.SysUser; + +import java.util.List; + +/** + * 用户 业务层 + * + * @author admin + */ +public interface ISysUserService { + /** + * 根据条件分页查询用户列表 + * + * @param user 用户信息 + * @return 用户信息集合信息 + */ + List selectUserList(SysUser user); + + /** + * 通过用户名查询用户 + * + * @param userName 用户名 + * @return 用户对象信息 + */ + SysUser selectUserByUserName(String userName); + + /** + * 通过用户ID查询用户 + * + * @param userId 用户ID + * @return 用户对象信息 + */ + SysUser selectUserById(Long userId); + + /** + * 根据用户ID查询用户所属角色组 + * + * @param userName 用户名 + * @return 结果 + */ + String selectUserRoleGroup(String userName); + + + /** + * 校验用户名称是否唯一 + * + * @param userName 用户名称 + * @return 结果 + */ + String checkUserNameUnique(String userName); + + /** + * 校验手机号码是否唯一 + * + * @param user 用户信息 + * @return 结果 + */ + String checkPhoneUnique(SysUser user); + + /** + * 校验email是否唯一 + * + * @param user 用户信息 + * @return 结果 + */ + String checkEmailUnique(SysUser user); + + /** + * 校验用户是否允许操作 + * + * @param user 用户信息 + */ + void checkUserAllowed(SysUser user); + + /** + * 新增用户信息 + * + * @param user 用户信息 + * @return 结果 + */ + int insertUser(SysUser user); + + /** + * 修改用户信息 + * + * @param user 用户信息 + * @return 结果 + */ + int updateUser(SysUser user); + + /** + * 修改用户状态 + * + * @param user 用户信息 + * @return 结果 + */ + int updateUserStatus(SysUser user); + + /** + * 修改用户基本信息 + * + * @param user 用户信息 + * @return 结果 + */ + int updateUserProfile(SysUser user); + + /** + * 修改用户头像 + * + * @param userName 用户名 + * @param avatar 头像地址 + * @return 结果 + */ + boolean updateUserAvatar(String userName, String avatar); + + /** + * 重置用户密码 + * + * @param user 用户信息 + * @return 结果 + */ + int resetPwd(SysUser user); + + /** + * 重置用户密码 + * + * @param userName 用户名 + * @param password 密码 + * @return 结果 + */ + int resetUserPwd(String userName, String password); + + /** + * 批量删除用户信息 + * + * @param userIds 需要删除的用户ID + * @return 结果 + */ + int deleteUserByIds(Long[] userIds); + + /** + * 导入用户数据 + * + * @param userList 用户数据列表 + * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据 + * @param operName 操作用户 + * @return 结果 + */ + String importUser(List userList, Boolean isUpdateSupport, String operName); +} diff --git a/easyink-common/src/main/java/com/easyink/common/service/impl/SysConfigServiceImpl.java b/easyink-common/src/main/java/com/easyink/common/service/impl/SysConfigServiceImpl.java new file mode 100644 index 0000000..b9a4ba3 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/service/impl/SysConfigServiceImpl.java @@ -0,0 +1,171 @@ +package com.easyink.common.service.impl; + +import com.easyink.common.annotation.DataSource; +import com.easyink.common.constant.Constants; +import com.easyink.common.constant.UserConstants; +import com.easyink.common.core.domain.system.SysConfig; +import com.easyink.common.core.redis.RedisCache; +import com.easyink.common.core.text.Convert; +import com.easyink.common.enums.DataSourceType; +import com.easyink.common.mapper.SysConfigMapper; +import com.easyink.common.service.ISysConfigService; +import com.easyink.common.utils.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.PostConstruct; +import java.util.Collection; +import java.util.List; + +/** + * 参数配置 服务层实现 + * + * @author admin + */ +@Service +public class SysConfigServiceImpl implements ISysConfigService { + @Autowired + private SysConfigMapper configMapper; + + @Autowired + private RedisCache redisCache; + + /** + * 项目启动时,初始化参数到缓存 + */ + @PostConstruct + public void init() { + List configsList = configMapper.selectConfigList(new SysConfig()); + for (SysConfig config : configsList) { + redisCache.setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue()); + } + } + + /** + * 查询参数配置信息 + * + * @param configId 参数配置ID + * @return 参数配置信息 + */ + @Override + @DataSource(DataSourceType.MASTER) + public SysConfig selectConfigById(Long configId) { + SysConfig config = new SysConfig(); + config.setConfigId(configId); + return configMapper.selectConfig(config); + } + + /** + * 根据键名查询参数配置信息 + * + * @param configKey 参数key + * @return 参数键值 + */ + @Override + public String selectConfigByKey(String configKey) { + String configValue = Convert.toStr(redisCache.getCacheObject(getCacheKey(configKey))); + if (StringUtils.isNotEmpty(configValue)) { + return configValue; + } + SysConfig config = new SysConfig(); + config.setConfigKey(configKey); + SysConfig retConfig = configMapper.selectConfig(config); + if (StringUtils.isNotNull(retConfig)) { + redisCache.setCacheObject(getCacheKey(configKey), retConfig.getConfigValue()); + return retConfig.getConfigValue(); + } + return org.apache.commons.lang3.StringUtils.EMPTY; + } + + /** + * 查询参数配置列表 + * + * @param config 参数配置信息 + * @return 参数配置集合 + */ + @Override + public List selectConfigList(SysConfig config) { + return configMapper.selectConfigList(config); + } + + /** + * 新增参数配置 + * + * @param config 参数配置信息 + * @return 结果 + */ + @Override + public int insertConfig(SysConfig config) { + int row = configMapper.insertConfig(config); + if (row > 0) { + redisCache.setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue()); + } + return row; + } + + /** + * 修改参数配置 + * + * @param config 参数配置信息 + * @return 结果 + */ + @Override + public int updateConfig(SysConfig config) { + int row = configMapper.updateConfig(config); + if (row > 0) { + redisCache.setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue()); + } + return row; + } + + /** + * 批量删除参数信息 + * + * @param configIds 需要删除的参数ID + * @return 结果 + */ + @Override + public int deleteConfigByIds(Long[] configIds) { + int count = configMapper.deleteConfigByIds(configIds); + if (count > 0) { + Collection keys = redisCache.keys(Constants.SYS_CONFIG_KEY + "*"); + redisCache.deleteObject(keys); + } + return count; + } + + /** + * 清空缓存数据 + */ + @Override + public void clearCache() { + Collection keys = redisCache.keys(Constants.SYS_CONFIG_KEY + "*"); + redisCache.deleteObject(keys); + } + + /** + * 校验参数键名是否唯一 + * + * @param config 参数配置信息 + * @return 结果 + */ + @Override + public String checkConfigKeyUnique(SysConfig config) { + Long configId = StringUtils.isNull(config.getConfigId()) ? -1L : config.getConfigId(); + SysConfig info = configMapper.checkConfigKeyUnique(config.getConfigKey()); + if (StringUtils.isNotNull(info) && info.getConfigId().longValue() != configId.longValue()) { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 设置cache key + * + * @param configKey 参数键 + * @return 缓存键key + */ + private String getCacheKey(String configKey) { + return Constants.SYS_CONFIG_KEY + configKey; + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/service/impl/SysDeptServiceImpl.java b/easyink-common/src/main/java/com/easyink/common/service/impl/SysDeptServiceImpl.java new file mode 100644 index 0000000..2b61fdd --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/service/impl/SysDeptServiceImpl.java @@ -0,0 +1,331 @@ +package com.easyink.common.service.impl; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.collection.CollectionUtil; +import com.easyink.common.constant.UserConstants; +import com.easyink.common.core.domain.TreeSelect; +import com.easyink.common.core.domain.entity.SysDept; +import com.easyink.common.core.domain.model.LoginUser; +import com.easyink.common.core.domain.wecom.WeDepartment; +import com.easyink.common.exception.CustomException; +import com.easyink.common.mapper.SysDeptMapper; +import com.easyink.common.service.ISysDeptService; +import com.easyink.common.utils.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Iterator; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 部门管理 服务实现 + * + * @author admin + */ +@Service +public class SysDeptServiceImpl implements ISysDeptService { + @Autowired + private SysDeptMapper deptMapper; + + /** + * 查询部门管理数据 + * + * @param dept 部门信息 + * @param loginUser + * @return 部门信息集合 + */ + @Override + public List selectDeptList(WeDepartment dept, LoginUser loginUser) { + List list = deptMapper.selectDeptList(dept); + return filterDataScope(list, loginUser); + } + + /** + * 判断是否有该部门的可视权限 + * + * @param deptScope 数据部门权限范围 + * @param id 部门id + * @return true or false + */ + public boolean inDeptScope(List deptScope, Long id) { + return CollectionUtil.isNotEmpty(deptScope) && deptScope.contains(id.toString()); + } + + + /** + * 构建前端所需要树结构 + * + * @param depts 部门列表 + * @return 树结构列表 + */ + @Override + public List buildDeptTree(List depts) { + List returnList = new ArrayList<>(); + List tempList = new ArrayList<>(); + for (WeDepartment dept : depts) { + tempList.add(dept.getId()); + } + for (Iterator iterator = depts.iterator(); iterator.hasNext(); ) { + WeDepartment dept = iterator.next(); + // 如果是顶级节点, 遍历该父节点的所有子节点 + if (!tempList.contains(dept.getParentId())) { + recursionFn(depts, dept); + returnList.add(dept); + } + } + if (returnList.isEmpty()) { + returnList = depts; + } + return returnList; + } + + + /** + * 构建前端所需要下拉树结构 + * + * @param depts 部门列表 + * @return 下拉树结构列表 + */ + @Override + public List buildDeptTreeSelect(List depts) { + List deptTrees = buildDeptTree(depts); + return deptTrees.stream().map(TreeSelect::new).collect(Collectors.toList()); + } + + /** + * 根据角色ID查询部门树信息 + * + * @param roleId 角色ID + * @return 选中部门列表 + */ + @Override + public List selectDeptListByRoleId(Long roleId) { + return deptMapper.selectDeptListByRoleId(roleId); + } + + /** + * 根据部门ID查询信息 + * + * @param deptId 部门ID + * @return 部门信息 + */ + @Override + public SysDept selectDeptById(Long deptId) { + return deptMapper.selectDeptById(deptId); + } + + /** + * 根据ID查询所有子部门(正常状态) + * + * @param deptId 部门ID + * @return 子部门数 + */ + @Override + public int selectNormalChildrenDeptById(Long deptId) { + return deptMapper.selectNormalChildrenDeptById(deptId); + } + + /** + * 是否存在子节点 + * + * @param deptId 部门ID + * @return 结果 + */ + @Override + public boolean hasChildByDeptId(Long deptId) { + int result = deptMapper.hasChildByDeptId(deptId); + return result > 0; + } + + /** + * 查询部门是否存在用户 + * + * @param deptId 部门ID + * @return 结果 true 存在 false 不存在 + */ + @Override + public boolean checkDeptExistUser(Long deptId) { + int result = deptMapper.checkDeptExistUser(deptId); + return result > 0; + } + + /** + * 校验部门名称是否唯一 + * + * @param dept 部门信息 + * @return 结果 + */ + @Override + public String checkDeptNameUnique(SysDept dept) { + Long deptId = StringUtils.isNull(dept.getDeptId()) ? -1L : dept.getDeptId(); + SysDept info = deptMapper.checkDeptNameUnique(dept.getDeptName(), dept.getParentId()); + if (StringUtils.isNotNull(info) && info.getDeptId().longValue() != deptId.longValue()) { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 新增保存部门信息 + * + * @param dept 部门信息 + * @return 结果 + */ + @Override + public int insertDept(SysDept dept) { + SysDept info = deptMapper.selectDeptById(dept.getParentId()); + // 如果父节点不为正常状态,则不允许新增子节点 + if (!UserConstants.DEPT_NORMAL.equals(info.getStatus())) { + throw new CustomException("部门停用,不允许新增"); + } + dept.setAncestors(info.getAncestors() + "," + dept.getParentId()); + return deptMapper.insertDept(dept); + } + + /** + * 修改保存部门信息 + * + * @param dept 部门信息 + * @return 结果 + */ + @Override + public int updateDept(SysDept dept) { + SysDept newParentDept = deptMapper.selectDeptById(dept.getParentId()); + SysDept oldDept = deptMapper.selectDeptById(dept.getDeptId()); + if (StringUtils.isNotNull(newParentDept) && StringUtils.isNotNull(oldDept)) { + String newAncestors = newParentDept.getAncestors() + "," + newParentDept.getDeptId(); + String oldAncestors = oldDept.getAncestors(); + dept.setAncestors(newAncestors); + updateDeptChildren(dept.getDeptId(), newAncestors, oldAncestors); + } + int result = deptMapper.updateDept(dept); + if (UserConstants.DEPT_NORMAL.equals(dept.getStatus())) { + // 如果该部门是启用状态,则启用该部门的所有上级部门 + updateParentDeptStatus(dept); + } + return result; + } + + /** + * 修改该部门的父级部门状态 + * + * @param dept 当前部门 + */ + private void updateParentDeptStatus(SysDept dept) { + String updateBy = dept.getUpdateBy(); + dept = deptMapper.selectDeptById(dept.getDeptId()); + dept.setUpdateBy(updateBy); + deptMapper.updateDeptStatus(dept); + } + + /** + * 修改子元素关系 + * + * @param deptId 被修改的部门ID + * @param newAncestors 新的父ID集合 + * @param oldAncestors 旧的父ID集合 + */ + public void updateDeptChildren(Long deptId, String newAncestors, String oldAncestors) { + List children = deptMapper.selectChildrenDeptById(deptId); + for (SysDept child : children) { + child.setAncestors(child.getAncestors().replace(oldAncestors, newAncestors)); + } + if (CollUtil.isNotEmpty(children)) { + deptMapper.updateDeptChildren(children); + } + } + + /** + * 删除部门管理信息 + * + * @param deptId 部门ID + * @return 结果 + */ + @Override + public int deleteDeptById(Long deptId) { + return deptMapper.deleteDeptById(deptId); + } + + /** + * 递归获取所有子部门 + * + * @param list + * @param t + */ + private void recursionFn(List list, WeDepartment t) { + // 得到子节点列表 + List childList = getChildList(list, t); + t.setChildren(childList); + for (WeDepartment tChild : childList) { + if (hasChild(list, tChild)) { + // 判断是否有子节点 + Iterator it = childList.iterator(); + while (it.hasNext()) { + WeDepartment n = it.next(); + recursionFn(list, n); + } + } + } + } + + /** + * 得到子节点列表 + * + * @param list 集合 + * @param t 部门 + * @return + */ + private List getChildList(List list, WeDepartment t) { + List tlist = new ArrayList<>(); + Iterator it = list.iterator(); + while (it.hasNext()) { + WeDepartment n = it.next(); + if (StringUtils.isNotNull(n.getParentId()) && n.getParentId().longValue() == t.getId().longValue()) { + tlist.add(n); + } + } + return tlist; + } + + /** + * 判断是否有子节点 + * + * @param list + * @param t + * @return + */ + private boolean hasChild(List list, WeDepartment t) { + return CollUtil.isNotEmpty(getChildList(list, t)); + } + + @Override + public List filterDataScope(List list, LoginUser loginUser) { + String deptScope = loginUser.getDepartmentDataScope(); + if (StringUtils.isBlank(deptScope)) { + return list; + } + List deptScopeList = Arrays.asList(deptScope.split(",")); + list.forEach(department -> department.setEnable(inDeptScope(deptScopeList, department.getId()))); + return list; + } + + /** + * 过滤部门数据权限范围 + * + * @param list 部门集合 + * @param loginUser 登录用户实体 + * @return 过滤后的部门集合 + */ + @Override + public List filterDepartmentDataScope(List list, LoginUser loginUser) { + String deptScope = loginUser.getDepartmentDataScope(); + if (StringUtils.isBlank(deptScope)) { + return list; + } + List deptScopeList = Arrays.asList(deptScope.split(",")); + return list.stream().filter(item -> inDeptScope(deptScopeList, item.getId())).collect(Collectors.toList()); + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/service/impl/SysDictDataServiceImpl.java b/easyink-common/src/main/java/com/easyink/common/service/impl/SysDictDataServiceImpl.java new file mode 100644 index 0000000..d71520f --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/service/impl/SysDictDataServiceImpl.java @@ -0,0 +1,89 @@ +package com.easyink.common.service.impl; + +import com.easyink.common.core.domain.entity.SysDictData; +import com.easyink.common.mapper.SysDictDataMapper; +import com.easyink.common.service.ISysDictDataService; +import com.easyink.common.utils.DictUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 字典 业务层处理 + * + * @author admin + */ +@Service +public class SysDictDataServiceImpl implements ISysDictDataService { + @Autowired + private SysDictDataMapper dictDataMapper; + + /** + * 根据条件分页查询字典数据 + * + * @param dictData 字典数据信息 + * @return 字典数据集合信息 + */ + @Override + public List selectDictDataList(SysDictData dictData) { + return dictDataMapper.selectDictDataList(dictData); + } + + + /** + * 根据字典数据ID查询信息 + * + * @param dictCode 字典数据ID + * @return 字典数据 + */ + @Override + public SysDictData selectDictDataById(Long dictCode) { + return dictDataMapper.selectDictDataById(dictCode); + } + + /** + * 批量删除字典数据信息 + * + * @param dictCodes 需要删除的字典数据ID + * @return 结果 + */ + @Override + public int deleteDictDataByIds(Long[] dictCodes) { + int row = dictDataMapper.deleteDictDataByIds(dictCodes); + if (row > 0) { + DictUtils.clearDictCache(); + } + return row; + } + + /** + * 新增保存字典数据信息 + * + * @param dictData 字典数据信息 + * @return 结果 + */ + @Override + public int insertDictData(SysDictData dictData) { + int row = dictDataMapper.insertDictData(dictData); + if (row > 0) { + DictUtils.clearDictCache(); + } + return row; + } + + /** + * 修改保存字典数据信息 + * + * @param dictData 字典数据信息 + * @return 结果 + */ + @Override + public int updateDictData(SysDictData dictData) { + int row = dictDataMapper.updateDictData(dictData); + if (row > 0) { + DictUtils.clearDictCache(); + } + return row; + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/service/impl/SysDictTypeServiceImpl.java b/easyink-common/src/main/java/com/easyink/common/service/impl/SysDictTypeServiceImpl.java new file mode 100644 index 0000000..cea1bc4 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/service/impl/SysDictTypeServiceImpl.java @@ -0,0 +1,175 @@ +package com.easyink.common.service.impl; + +import com.easyink.common.constant.UserConstants; +import com.easyink.common.core.domain.entity.SysDictData; +import com.easyink.common.core.domain.entity.SysDictType; +import com.easyink.common.exception.CustomException; +import com.easyink.common.mapper.SysDictDataMapper; +import com.easyink.common.mapper.SysDictTypeMapper; +import com.easyink.common.service.ISysDictTypeService; +import com.easyink.common.utils.DictUtils; +import com.easyink.common.utils.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.PostConstruct; +import java.util.Collections; +import java.util.List; + +/** + * 字典 业务层处理 + * + * @author admin + */ +@Service +public class SysDictTypeServiceImpl implements ISysDictTypeService { + @Autowired + private SysDictTypeMapper dictTypeMapper; + + @Autowired + private SysDictDataMapper dictDataMapper; + + /** + * 项目启动时,初始化字典到缓存 + */ + @PostConstruct + public void init() { + List dictTypeList = dictTypeMapper.selectDictTypeAll(); + for (SysDictType dictType : dictTypeList) { + List dictDatas = dictDataMapper.selectDictDataByType(dictType.getDictType()); + DictUtils.setDictCache(dictType.getDictType(), dictDatas); + } + } + + /** + * 根据条件分页查询字典类型 + * + * @param dictType 字典类型信息 + * @return 字典类型集合信息 + */ + @Override + public List selectDictTypeList(SysDictType dictType) { + return dictTypeMapper.selectDictTypeList(dictType); + } + + /** + * 根据所有字典类型 + * + * @return 字典类型集合信息 + */ + @Override + public List selectDictTypeAll() { + return dictTypeMapper.selectDictTypeAll(); + } + + /** + * 根据字典类型查询字典数据 + * + * @param dictType 字典类型 + * @return 字典数据集合信息 + */ + @Override + public List selectDictDataByType(String dictType) { + List dictDatas = DictUtils.getDictCache(dictType); + if (StringUtils.isNotNull(dictDatas)) { + return dictDatas; + } + dictDatas = dictDataMapper.selectDictDataByType(dictType); + if (StringUtils.isNotNull(dictDatas)) { + DictUtils.setDictCache(dictType, dictDatas); + return dictDatas; + } + return Collections.emptyList(); + } + + /** + * 根据字典类型ID查询信息 + * + * @param dictId 字典类型ID + * @return 字典类型 + */ + @Override + public SysDictType selectDictTypeById(Long dictId) { + return dictTypeMapper.selectDictTypeById(dictId); + } + + + /** + * 批量删除字典类型信息 + * + * @param dictIds 需要删除的字典ID + * @return 结果 + */ + @Override + public int deleteDictTypeByIds(Long[] dictIds) { + for (Long dictId : dictIds) { + SysDictType dictType = selectDictTypeById(dictId); + if (dictDataMapper.countDictDataByType(dictType.getDictType()) > 0) { + throw new CustomException(String.format("%1$s已分配,不能删除", dictType.getDictName())); + } + } + int count = dictTypeMapper.deleteDictTypeByIds(dictIds); + if (count > 0) { + DictUtils.clearDictCache(); + } + return count; + } + + /** + * 清空缓存数据 + */ + @Override + public void clearCache() { + DictUtils.clearDictCache(); + } + + /** + * 新增保存字典类型信息 + * + * @param dictType 字典类型信息 + * @return 结果 + */ + @Override + public int insertDictType(SysDictType dictType) { + int row = dictTypeMapper.insertDictType(dictType); + if (row > 0) { + DictUtils.clearDictCache(); + } + return row; + } + + /** + * 修改保存字典类型信息 + * + * @param dictType 字典类型信息 + * @return 结果 + */ + @Override + @Transactional + public int updateDictType(SysDictType dictType) { + SysDictType oldDict = dictTypeMapper.selectDictTypeById(dictType.getDictId()); + dictDataMapper.updateDictDataType(oldDict.getDictType(), dictType.getDictType()); + int row = dictTypeMapper.updateDictType(dictType); + if (row > 0) { + DictUtils.clearDictCache(); + } + return row; + } + + /** + * 校验字典类型称是否唯一 + * + * @param dict 字典类型 + * @return 结果 + */ + @Override + public String checkDictTypeUnique(SysDictType dict) { + Long dictId = StringUtils.isNull(dict.getDictId()) ? -1L : dict.getDictId(); + SysDictType dictType = dictTypeMapper.checkDictTypeUnique(dict.getDictType()); + if (StringUtils.isNotNull(dictType) && dictType.getDictId().longValue() != dictId.longValue()) { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/service/impl/SysLogininforServiceImpl.java b/easyink-common/src/main/java/com/easyink/common/service/impl/SysLogininforServiceImpl.java new file mode 100644 index 0000000..1753fe9 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/service/impl/SysLogininforServiceImpl.java @@ -0,0 +1,64 @@ +package com.easyink.common.service.impl; + +import com.easyink.common.core.domain.system.SysLogininfor; +import com.easyink.common.mapper.SysLogininforMapper; +import com.easyink.common.service.ISysLogininforService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 系统访问日志情况信息 服务层处理 + * + * @author admin + */ +@Service +public class SysLogininforServiceImpl implements ISysLogininforService { + + @Autowired + private SysLogininforMapper logininforMapper; + + /** + * 新增系统登录日志 + * + * @param logininfor 访问日志对象 + */ + @Override + public void insertLogininfor(SysLogininfor logininfor) { + logininforMapper.insertLogininfor(logininfor); + } + + /** + * 查询系统登录日志集合 + * + * @param logininfor 访问日志对象 + * @return 登录记录集合 + */ + @Override + public List selectLogininforList(SysLogininfor logininfor) { + return logininforMapper.selectLogininforList(logininfor); + } + + /** + * 批量删除系统登录日志 + * + * + * @param corpId + * @param infoIds 需要删除的登录日志ID + * @return + */ + @Override + public int deleteLogininforByIds(String corpId, Long[] infoIds) { + return logininforMapper.deleteLogininforByIds(corpId,infoIds); + } + + /** + * 清空系统登录日志 + * @param corpId + */ + @Override + public void cleanLogininfor(String corpId) { + logininforMapper.deleteLogininforByIds(corpId,null); + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/service/impl/SysMenuServiceImpl.java b/easyink-common/src/main/java/com/easyink/common/service/impl/SysMenuServiceImpl.java new file mode 100644 index 0000000..7b191a3 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/service/impl/SysMenuServiceImpl.java @@ -0,0 +1,546 @@ +package com.easyink.common.service.impl; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.collection.ListUtil; +import cn.hutool.core.util.ObjectUtil; +import com.easyink.common.config.RuoYiConfig; +import com.easyink.common.constant.UserConstants; +import com.easyink.common.core.MenuTree; +import com.easyink.common.core.domain.TreeSelect; +import com.easyink.common.core.domain.entity.SysMenu; +import com.easyink.common.core.domain.entity.SysUser; +import com.easyink.common.core.domain.model.LoginUser; +import com.easyink.common.core.domain.system.MetaVo; +import com.easyink.common.core.domain.system.RouterVo; +import com.easyink.common.enums.BaseStatusEnum; +import com.easyink.common.mapper.SysMenuMapper; +import com.easyink.common.mapper.SysRoleMenuMapper; +import com.easyink.common.service.ISysMenuService; +import com.easyink.common.utils.StringUtils; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.exception.ExceptionUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.validation.constraints.NotNull; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 菜单 业务层处理 + * + * @author admin + */ +@Slf4j +@Service +public class SysMenuServiceImpl implements ISysMenuService { + + private final SysMenuMapper menuMapper; + private final SysRoleMenuMapper roleMenuMapper; + private final RuoYiConfig ruoYiConfig; + + @Autowired + public SysMenuServiceImpl(@NotNull SysMenuMapper menuMapper, @NotNull SysRoleMenuMapper roleMenuMapper, @NotNull RuoYiConfig ruoYiConfig) { + this.menuMapper = menuMapper; + this.roleMenuMapper = roleMenuMapper; + this.ruoYiConfig = ruoYiConfig; + } + + /** + * 根据用户查询系统菜单列表 + * + * @param loginUser 用户ID + * @return 菜单列表 + */ + @Override + public List selectMenuList(LoginUser loginUser) { + SysMenu sysMenu = new SysMenu(); + sysMenu.setVisible(BaseStatusEnum.CLOSE.getCode().toString()); + return menuMapper.selectMenuList(sysMenu); + } + + + /** + * 查询系统菜单列表 + * + * @param menu 菜单信息 + * @return 菜单列表 + */ + @Override + public List selectMenuList(SysMenu menu, Long userId) { + List menuList = null; + // 管理员显示所有菜单信息 + if (SysUser.isAdmin(userId)) { + menuList = menuMapper.selectMenuList(menu); + } else { + menu.getParams().put("userId", userId); + menuList = menuMapper.selectMenuListByUserId(menu); + } + return menuList; + } + + /** + * 查询系统菜单列表 + * + * @param menu 菜单信息 + * @return 菜单列表 + */ + @Override + public List selectMenuList(SysMenu menu, LoginUser user) { + List menuList = null; + // 管理员显示所有菜单信息 + if (user.isSuperAdmin()) { + menuList = menuMapper.selectMenuList(menu); + } else if (ObjectUtil.isNotNull(user.getWeUser())) { + menu.getParams().put("userId", user.getWeUser().getUserId()); + menu.getParams().put("corpId",user.getCorpId()); + menuList = menuMapper.selectMenuListByUserId(menu); + } + return menuList; + } + + + /** + * 根据企微用户ID查询权限 + * + * @param corpId + * @param userId 用户ID + * @return 权限列表 + */ + @Override + public Set selectMenuPermsByWeUserId(String corpId, String userId) { + List perms = menuMapper.selectMenuPermsByWeUserId(corpId, userId); + Set permsSet = new HashSet<>(); + for (String perm : perms) { + if (StringUtils.isNotEmpty(perm)) { + permsSet.addAll(Arrays.asList(perm.trim().split(","))); + } + } + return permsSet; + } + + + /** + * 根据角色ID查询菜单树信息 + * + * @param roleId 角色ID + * @return 选中菜单列表 + */ + @Override + public List selectMenuListByRoleId(Long roleId) { + return menuMapper.selectMenuListByRoleId(roleId); + } + + /** + * 构建前端路由所需要的菜单 + * + * @param menus 菜单列表 + * @return 路由列表 + */ + @Override + public List buildMenus(List menus) { + List routers = new LinkedList<>(); + for (SysMenu menu : menus) { + // 如果是三方应用需要屏蔽一些菜单 + if (ruoYiConfig.isThirdServer() && isBanMenu(menu)) { + continue; + } + RouterVo router = new RouterVo(); + router.setHidden("1".equals(menu.getVisible())); + router.setName(getRouteName(menu)); + router.setPath(getRouterPath(menu)); + router.setComponent(getComponent(menu)); + router.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon())); + List cMenus = menu.getChildren(); + if (!cMenus.isEmpty() && CollUtil.isNotEmpty(cMenus) && UserConstants.TYPE_DIR.equals(menu.getMenuType())) { + router.setAlwaysShow(true); + router.setRedirect("noRedirect"); + router.setChildren(buildMenus(cMenus)); + } else if (isMeunFrame(menu)) { + List childrenList = new ArrayList<>(); + RouterVo children = new RouterVo(); + children.setPath(menu.getPath()); + children.setComponent(menu.getComponent()); + children.setName(org.apache.commons.lang3.StringUtils.capitalize(menu.getPath())); + children.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon())); + childrenList.add(children); + router.setChildren(childrenList); + } + routers.add(router); + } + return routers; + } + + /** + * 判断是否是第三方应用服务且是被屏蔽的菜单 + * + * @param menu 菜单实体 + * @return + */ + private boolean isBanMenu(SysMenu menu) { + if (menu == null || menu.getMenuId() == null) { + return false; + } + try { + return ListUtil.toList(UserConstants.THIRD_APP_BAN_MENU_IDS.split(",")).contains(String.valueOf(menu.getMenuId())); + } catch (Exception e) { + log.info("解析第三方应用屏蔽菜单失败,e:{}", ExceptionUtils.getStackTrace(e)); + } + return false; + } + + /** + * 构建前端所需要树结构 + * + * @param menus 菜单列表 + * @return 树结构列表 + */ + @Override + public List buildMenuTree(List menus) { + List returnList = new ArrayList<>(); + Iterator iterator = menus.iterator(); + while (iterator.hasNext()){ + SysMenu t = iterator.next(); + // 根据传入的某个父节点ID,遍历该父节点的所有子节点 + if (t.getParentId() == 0) { + recursionFn(menus, t); + returnList.add(t); + } + } + + if (returnList.isEmpty()) { + returnList = menus; + } + return returnList; + } + + + /** + * 构建角色管理所需要树结构 + * + * @param menus 菜单列表 + * @return 树结构列表 + */ + @Override + public List buildMenuTreeForRoleManage(List menus) { + List roleReturnList = new ArrayList<>(); + Iterator iterator = menus.iterator(); + while (iterator.hasNext()) { + SysMenu t = iterator.next(); + // 根据传入的某个父节点ID,遍历该父节点的所有子节点 + if (UserConstants.ROOT_MENU_PARENT_ID.equals(t.getParentId().toString())) { + recursionFnForRoleManage(menus, t); + roleReturnList.add(t); + } + } + if (roleReturnList.isEmpty()) { + roleReturnList = menus; + } + return roleReturnList; + } + + /** + * 构建前端所需要下拉树结构 + * + * @param menus 菜单列表 + * @return 下拉树结构列表 + */ + @Override + public List buildMenuTreeSelect(List menus) { + List menuTrees = buildMenuTree(menus); + return menuTrees.stream().map(TreeSelect::new).collect(Collectors.toList()); + } + + + /** + * 构建角色-菜单 前端所需要下拉树结构 + * + * @param menus 菜单列表 + * @return 下拉树结构列表 + */ + @Override + public List buildMenuTreeSelectForRole(List menus) { + List menuTrees = buildMenuTreeForRoleManage(menus); + return menuTrees.stream().map(TreeSelect::new).collect(Collectors.toList()); + } + + /** + * 根据菜单ID查询信息 + * + * @param menuId 菜单ID + * @return 菜单信息 + */ + @Override + public SysMenu selectMenuById(Long menuId) { + return menuMapper.selectMenuById(menuId); + } + + /** + * 是否存在菜单子节点 + * + * @param menuId 菜单ID + * @return 结果 + */ + @Override + public boolean hasChildByMenuId(Long menuId) { + int result = menuMapper.hasChildByMenuId(menuId); + return result > 0; + } + + /** + * 查询菜单使用数量 + * + * @param menuId 菜单ID + * @return 结果 + */ + @Override + public boolean checkMenuExistRole(Long menuId) { + int result = roleMenuMapper.checkMenuExistRole(menuId); + return result > 0; + } + + /** + * 新增保存菜单信息 + * + * @param menu 菜单信息 + * @return 结果 + */ + @Override + public int insertMenu(SysMenu menu) { + return menuMapper.insertMenu(menu); + } + + /** + * 修改保存菜单信息 + * + * @param menu 菜单信息 + * @return 结果 + */ + @Override + public int updateMenu(SysMenu menu) { + return menuMapper.updateMenu(menu); + } + + /** + * 删除菜单管理信息 + * + * @param menuId 菜单ID + * @return 结果 + */ + @Override + public int deleteMenuById(Long menuId) { + return menuMapper.deleteMenuById(menuId); + } + + /** + * 校验菜单名称是否唯一 + * + * @param menu 菜单信息 + * @return 结果 + */ + @Override + public String checkMenuNameUnique(SysMenu menu) { + Long menuId = StringUtils.isNull(menu.getMenuId()) ? -1L : menu.getMenuId(); + SysMenu info = menuMapper.checkMenuNameUnique(menu.getMenuName(), menu.getParentId()); + if (StringUtils.isNotNull(info) && info.getMenuId().longValue() != menuId.longValue()) { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 根据缓存的登录用户实体选择菜单 + * + * @param loginUser 登录用户信息 + * @return + */ + @Override + public List selectMenuTreeByLoginUser(LoginUser loginUser) { + List menus = null; + if (loginUser.isSuperAdmin()) { + menus = menuMapper.selectMenuTreeAll(); + } else if (StringUtils.isNotNull(loginUser.getWeUser())) { + menus = menuMapper.selectMenuTreeByWeUserId(loginUser.getCorpId(), loginUser.getWeUser().getUserId()); + } + return getChildPerms(menus, 0); + } + + @Override + public MenuTree getRoleMenuTreeSelect(Long roleId, LoginUser loginUser) { + List menus = this.selectMenuList(loginUser); + List checkedKeys = this.selectMenuListByRoleId(roleId); + List menusTreeList = this.buildMenuTreeSelectForRole(menus); + return new MenuTree(checkedKeys, menusTreeList); + } + + /** + * 获取路由名称 + * + * @param menu 菜单信息 + * @return 路由名称 + */ + public String getRouteName(SysMenu menu) { + String routerName = org.apache.commons.lang3.StringUtils.capitalize(menu.getPath()); + // 非外链并且是一级目录(类型为目录) + if (isMeunFrame(menu)) { + routerName = org.apache.commons.lang3.StringUtils.EMPTY; + } + return routerName; + } + + /** + * 获取路由地址 + * + * @param menu 菜单信息 + * @return 路由地址 + */ + public String getRouterPath(SysMenu menu) { + String symbol ="/"; + String routerPath = menu.getPath(); + // 非外链并且是一级目录(类型为目录) + if (0 == menu.getParentId().intValue() && UserConstants.TYPE_DIR.equals(menu.getMenuType()) + && UserConstants.NO_FRAME.equals(menu.getIsFrame())) { + routerPath = symbol + menu.getPath(); + } + // 非外链并且是一级目录(类型为菜单) + else if (isMeunFrame(menu)) { + routerPath = symbol; + } + return routerPath; + } + + /** + * 获取组件信息 + * + * @param menu 菜单信息 + * @return 组件信息 + */ + public String getComponent(SysMenu menu) { + String component = UserConstants.LAYOUT; + if (StringUtils.isNotEmpty(menu.getComponent()) && !isMeunFrame(menu)) { + component = menu.getComponent(); + } + return component; + } + + /** + * 是否为菜单内部跳转 + * + * @param menu 菜单信息 + * @return 结果 + */ + public boolean isMeunFrame(SysMenu menu) { + return menu.getParentId().intValue() == 0 && UserConstants.TYPE_MENU.equals(menu.getMenuType()) + && menu.getIsFrame().equals(UserConstants.NO_FRAME); + } + + /** + * 根据父节点的ID获取所有子节点 + * + * @param list 分类表 + * @param parentId 传入的父节点ID + * @return String + */ + public List getChildPerms(List list, int parentId) { + List returnList = new ArrayList<>(); + for (Iterator iterator = list.iterator(); iterator.hasNext(); ) { + SysMenu t = iterator.next(); + // 一、根据传入的某个父节点ID,遍历该父节点的所有子节点 + if (t.getParentId() == parentId) { + recursionFn(list, t); + returnList.add(t); + } + } + return returnList; + } + + /** + * 递归列表 + * + * @param list + * @param t + */ + private void recursionFn(List list, SysMenu t) { + // 得到子节点列表 + List childList = getChildList(list, t); + t.setChildren(childList); + for (SysMenu tChild : childList) { + if (hasChild(list, tChild)) { + // 判断是否有子节点 + Iterator it = childList.iterator(); + while (it.hasNext()) { + SysMenu n = it.next(); + recursionFn(list, n); + } + } + } + } + + /** + * 角色管理-递归获取菜单树 + * + * @param list 菜单结合 + * @param t 菜单对象 + */ + private void recursionFnForRoleManage(List list, SysMenu t) { + // 得到子节点列表 + List childList = getChildListForRole(list, t); + t.setChildren(childList); + for (SysMenu tChild : childList) { + if (hasChild(list, tChild)) { + // 判断是否有子节点 + Iterator it = childList.iterator(); + while (it.hasNext()) { + SysMenu n = it.next(); + recursionFnForRoleManage(list, n); + } + } + } + } + + /** + * 得到子节点列表 + */ + private List getChildList(List list, SysMenu t) { + List tlist = new ArrayList<>(); + Iterator it = list.iterator(); + while (it.hasNext()) { + SysMenu n = it.next(); + if (n.getParentId().longValue() == t.getMenuId().longValue()) { + tlist.add(n); + } + } + return tlist; + } + + /** + * 角色管理- 获取子节点列表 + * + * @param list 菜单集合 + * @param t 菜单 + * @return 子菜单集合 + */ + private List getChildListForRole(List list, SysMenu t) { + List tlist = new ArrayList<>(); + Iterator it = list.iterator(); + while (it.hasNext()) { + SysMenu n = it.next(); + if (n.getParentId().longValue() == t.getMenuId().longValue()) { + // 如果子菜单 是目录菜单则直接再去下一级的菜单 + if (UserConstants.TYPE_DIR.equals(n.getMenuType())) { + tlist.addAll(getChildListForRole(list, n)); + } else { + tlist.add(n); + } + } + } + return tlist; + } + + /** + * 判断是否有子节点 + */ + private boolean hasChild(List list, SysMenu t) { + return CollUtil.isNotEmpty(getChildList(list, t)); + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/service/impl/SysOperLogServiceImpl.java b/easyink-common/src/main/java/com/easyink/common/service/impl/SysOperLogServiceImpl.java new file mode 100644 index 0000000..14c8945 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/service/impl/SysOperLogServiceImpl.java @@ -0,0 +1,63 @@ +package com.easyink.common.service.impl; + +import com.easyink.common.core.domain.system.SysOperLog; +import com.easyink.common.mapper.SysOperLogMapper; +import com.easyink.common.service.ISysOperLogService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 操作日志 服务层处理 + * + * @author admin + */ +@Service +public class SysOperLogServiceImpl implements ISysOperLogService { + @Autowired + private SysOperLogMapper operLogMapper; + + /** + * 新增操作日志 + * + * @param operLog 操作日志对象 + */ + @Override + public void insertOperlog(SysOperLog operLog) { + operLogMapper.insertOperlog(operLog); + } + + /** + * 查询系统操作日志集合 + * + * @param operLog 操作日志对象 + * @return 操作日志集合 + */ + @Override + public List selectOperLogList(SysOperLog operLog) { + return operLogMapper.selectOperLogList(operLog); + } + + /** + * 批量删除系统操作日志 + * + * @param corpId + * @param operIds 需要删除的操作日志ID + * @return 结果 + */ + @Override + public int deleteOperLogByIds(String corpId, Long[] operIds) { + return operLogMapper.deleteOperLogByIds(corpId, operIds); + } + + + /** + * 清空操作日志 + * @param corpId + */ + @Override + public void cleanOperLog(String corpId) { + operLogMapper.deleteOperLogByIds(corpId, null); + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/service/impl/SysRoleServiceImpl.java b/easyink-common/src/main/java/com/easyink/common/service/impl/SysRoleServiceImpl.java new file mode 100644 index 0000000..40a18d7 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/service/impl/SysRoleServiceImpl.java @@ -0,0 +1,369 @@ +package com.easyink.common.service.impl; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; +import com.easyink.common.constant.Constants; +import com.easyink.common.constant.UserConstants; +import com.easyink.common.core.domain.entity.SysMenu; +import com.easyink.common.core.domain.entity.SysRole; +import com.easyink.common.core.domain.system.SysRoleDept; +import com.easyink.common.core.domain.system.SysRoleMenu; +import com.easyink.common.enums.BaseStatusEnum; +import com.easyink.common.enums.DataScopeEnum; +import com.easyink.common.enums.ResultTip; +import com.easyink.common.enums.RoleTypeEnum; +import com.easyink.common.exception.CustomException; +import com.easyink.common.exception.wecom.WeComException; +import com.easyink.common.mapper.*; +import com.easyink.common.service.ISysRoleService; +import com.easyink.common.utils.StringUtils; +import com.easyink.common.utils.spring.SpringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.math.BigDecimal; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 角色 业务层处理 + * + * @author admin + */ +@Service +public class SysRoleServiceImpl implements ISysRoleService { + @Autowired + private SysRoleMapper roleMapper; + + @Autowired + private SysRoleMenuMapper roleMenuMapper; + + @Autowired + private SysRoleDeptMapper roleDeptMapper; + + @Autowired + private SysMenuMapper sysMenuMapper; + + @Autowired + private SysUserRoleMapper userRoleMapper; + + /** + * 根据条件分页查询角色数据 + * + * @param role 角色信息 + * @return 角色数据集合信息 + */ + @Override +// @DataScope(deptAlias = "d") + public List selectRoleList(SysRole role) { + return roleMapper.selectRoleList(role); + } + + /** + * 根据用户ID查询权限 + * + * @param corpId 公司ID + * @param userId 用户ID + * @return 权限列表 + */ + @Override + public Set selectRolePermissionByUserId(String corpId, String userId) { + List perms = roleMapper.selectRolePermissionByUserId(corpId, userId); + Set permsSet = new HashSet<>(); + for (SysRole perm : perms) { + if (StringUtils.isNotNull(perm)) { + permsSet.addAll(Arrays.asList(perm.getRoleKey().trim().split(","))); + } + } + return permsSet; + } + + /** + * 查询所有角色 + * + * @param corpId + * @return 角色列表 + */ + @Override + public List selectRoleAll(String corpId) { + return SpringUtils.getAopProxy(this).selectRoleList(SysRole.builder().corpId(corpId).build()); + } + + /** + * 通过角色ID查询角色 + * + * @param corpId + * @param roleId 角色ID + * @return 角色对象信息 + */ + @Override + public SysRole selectRoleById(String corpId, Long roleId) { + SysRole role = roleMapper.selectByCorpAndRoleId(corpId, roleId); + if (DataScopeEnum.CUSTOM.getCode().equals(role.getDataScope())) { + role.setDeptIds( + roleDeptMapper.getDeptByRoleId(corpId, role.getRoleId()).toArray(new Long[]{}) + ); + } + return role; + } + + /** + * 校验角色名称是否唯一 + * + * @param role 角色信息 + * @return 结果 + */ + @Override + public String checkRoleNameUnique(SysRole role) { + Long roleId = StringUtils.isNull(role.getRoleId()) ? -1L : role.getRoleId(); + SysRole info = roleMapper.checkRoleNameUnique(role); + if (StringUtils.isNotNull(info) && info.getRoleId().longValue() != roleId.longValue()) { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 校验角色是否允许操作 + * + * @param role 角色信息 + */ + @Override + public void checkRoleAllowed(SysRole role) { + SysRole checkRole = roleMapper.selectByCorpAndRoleId(role.getCorpId(), role.getRoleId()); + if (ObjectUtil.isNull(checkRole)) { + throw new CustomException("不存在该角色"); + } + if (RoleTypeEnum.SYS_ADMIN.getType().equals(checkRole.getRoleType())) { + throw new CustomException("不允许修改超级管理员角色"); + } + } + + /** + * 判断是否是系统默认角色 + * + * @param corpId + * @param roleId 角色ID + * @return TRUE or FALSE + */ + @Override + public boolean isDefaultRole(String corpId, Long roleId) { + SysRole role = roleMapper.selectByCorpAndRoleId(corpId, roleId); + return this.isDefaultRole(role); + } + + @Override + public boolean isDefaultRole(SysRole role) { + if (ObjectUtil.isNull(role)) { + return false; + } + return RoleTypeEnum.SYS_ADMIN.getType().equals(role.getRoleType()) + || RoleTypeEnum.SYS_DEFAULT.getType().equals(role.getRoleType()); + } + + @Override + public void checkDefaultRoleEditName(SysRole editRole) { + // 原角色信息 + SysRole originRole = roleMapper.selectByCorpAndRoleId(editRole.getCorpId(), editRole.getRoleId()); + // 判断是否是默认角色 + if (!isDefaultRole(originRole)) { + return; + } + String originName = originRole.getRoleName(); + if (StringUtils.isBlank(originName)) { + return; + } + // 判断是否修改了默认角色的角色名字 + if (!originName.equals(editRole.getRoleName())) { + throw new WeComException("系统默认角色的名字不可修改"); + } + } + /** + * 通过角色ID查询角色使用数量 + * + * @param roleId 角色ID + * @return 结果 + */ + @Override + public int countUserRoleByRoleId(Long roleId) { + return userRoleMapper.countUserRoleByRoleId(roleId); + } + + /** + * 新增保存角色信息 + * + * @param role 角色信息 + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int insertRole(SysRole role) { + // 新增角色信息 + role.setStatus(BaseStatusEnum.CLOSE.getCode().toString()); + role.setMenuIds(Constants.INIT_MENU_LIST); + roleMapper.insertRole(role); + // 如果自定义数据范围则插入 + insertRoleDeptRelation(role); + return insertRoleMenu(role); + } + + /** + * 插入角色和部门关系 + * + * @param role 系统角色实体 + */ + public void insertRoleDeptRelation(SysRole role) { + if(StringUtils.isBlank(role.getCorpId())) { + return; + } + List list = new ArrayList<>(); + if (role.getDeptIds() != null && role.getDeptIds().length > 0) { + for (Long dept : role.getDeptIds()) { + list.add(new SysRoleDept(role.getRoleId(), role.getCorpId(),dept)); + } + roleDeptMapper.batchRoleDept(list); + } + + } + + /** + * 修改保存角色信息 + * + * @param role 角色信息 + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int updateRole(SysRole role) { + // 修改角色信息 + roleMapper.updateRole(role); + // 删除角色与菜单关联 + roleMenuMapper.deleteRoleMenuByRoleId(role.getRoleId()); + //修改 部门的数据权限 + if (DataScopeEnum.CUSTOM.getCode().equals(role.getDataScope()) + && null != role.getDeptIds() ) { + roleDeptMapper.deleteRoleDeptByRoleId(role.getRoleId()); + insertRoleDept(role); + } + return insertRoleMenu(role); + } + + /** + * 修改角色状态 + * + * @param role 角色信息 + * @return 结果 + */ + @Override + public int updateRoleStatus(SysRole role) { + return roleMapper.updateRole(role); + } + + /** + * 修改数据权限信息 + * + * @param role 角色信息 + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int authDataScope(SysRole role) { + // 修改角色信息 + roleMapper.updateRole(role); + // 删除角色与部门关联 + roleDeptMapper.deleteRoleDeptByRoleId(role.getRoleId()); + // 新增角色和部门信息(数据权限) + return insertRoleDept(role); + } + + /** + * 新增角色菜单信息 + * + * @param role 角色对象 + * @return 成功插入的数量 + */ + public int insertRoleMenu(SysRole role) { + // 新增用户与角色管理 + List list = genRoleMenuList(role.getMenuIds(), role.getRoleId()); + // 绑定指定新增菜单的父菜单(防止有部分2级菜单在不存在于角色管理中没有角色绑定到) + List parentMenuIds = sysMenuMapper.selectParentMenuList(role.getMenuIds()).stream().map(SysMenu::getParentId).collect(Collectors.toList()); + List parentList = genRoleMenuList(parentMenuIds.toArray(new Long[]{}), role.getRoleId()); + list.addAll(parentList); + // 获取默认页面 + List defaultPageIds = sysMenuMapper.selectDefaultPage().stream().map(SysMenu::getMenuId).collect(Collectors.toList()); + List defaultRoleMenuList = genRoleMenuList(defaultPageIds.toArray(new Long[]{}), role.getRoleId()); + list.addAll(defaultRoleMenuList); + if (CollUtil.isNotEmpty(list)) { + return roleMenuMapper.batchRoleMenu(list); + } + return BigDecimal.ONE.intValue(); + } + + /** + * 生成角色-菜单 实体集合 + * @param menuIds + * @return + */ + private List genRoleMenuList(Long[] menuIds,Long roleId) { + List list = new ArrayList<>(); + for (Long menuId : menuIds) { + if (menuId == null) { + continue; + } + //新增菜单 + SysRoleMenu rm = new SysRoleMenu(); + rm.setRoleId(roleId); + rm.setMenuId(menuId); + list.add(rm); + } + return list; + } + + /** + * 新增角色部门信息(数据权限) + * + * @param role 角色对象 + * @return 成功插入的条数 + */ + public int insertRoleDept(SysRole role) { + int rows = 1; + if (ObjectUtil.isNull(role) || StringUtils.isBlank(role.getCorpId()) || StringUtils.isEmpty(role.getDeptIds())) { + return rows; + } + // 新增角色与部门(数据权限)管理 + List list = new ArrayList<>(); + for (Long deptId : role.getDeptIds()) { + SysRoleDept rd = new SysRoleDept(); + rd.setRoleId(role.getRoleId()); + rd.setDeptId(deptId); + rd.setCorpId(role.getCorpId()); + list.add(rd); + } + if (CollUtil.isNotEmpty(list)) { + rows = roleDeptMapper.batchRoleDept(list); + } + return rows; + } + + /** + * 批量删除角色信息 + * + * @param corpId 公司ID + * @param roleIds 需要删除的角色ID + * @return 成功删除的条数 + */ + @Override + public int deleteRoleByIds(String corpId, Long[] roleIds) { + for (Long roleId : roleIds) { + if (isDefaultRole(corpId, roleId)) { + throw new CustomException("系统默认角色无法删除"); + } + SysRole role = selectRoleById(corpId, roleId); + if (countUserRoleByRoleId(roleId) > 0) { + throw new CustomException(ResultTip.TIP_ATTRIBUTED, String.format("%1$s已分配,不能删除", role.getRoleName())); + } + } + return roleMapper.deleteRoleByIds(corpId, roleIds); + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/service/impl/SysUserOnlineServiceImpl.java b/easyink-common/src/main/java/com/easyink/common/service/impl/SysUserOnlineServiceImpl.java new file mode 100644 index 0000000..dacc04f --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/service/impl/SysUserOnlineServiceImpl.java @@ -0,0 +1,86 @@ +package com.easyink.common.service.impl; + +import com.easyink.common.core.domain.model.LoginUser; +import com.easyink.common.core.domain.system.SysUserOnline; +import com.easyink.common.service.ISysUserOnlineService; +import com.easyink.common.utils.StringUtils; +import org.springframework.stereotype.Service; + +/** + * 在线用户 服务层处理 + * + * @author admin + */ +@Service +public class SysUserOnlineServiceImpl implements ISysUserOnlineService { + /** + * 通过登录地址查询信息 + * + * @param ipaddr 登录地址 + * @param user 用户信息 + * @return 在线用户信息 + */ + @Override + public SysUserOnline selectOnlineByIpaddr(String ipaddr, LoginUser user) { + if (org.apache.commons.lang3.StringUtils.equals(ipaddr, user.getIpaddr())) { + return loginUserToUserOnline(user); + } + return null; + } + + /** + * 通过用户名称查询信息 + * + * @param userName 用户名称 + * @param user 用户信息 + * @return 在线用户信息 + */ + @Override + public SysUserOnline selectOnlineByUserName(String userName, LoginUser user) { + if (org.apache.commons.lang3.StringUtils.equals(userName, user.getUsername())) { + return loginUserToUserOnline(user); + } + return null; + } + + /** + * 通过登录地址/用户名称查询信息 + * + * @param ipaddr 登录地址 + * @param userName 用户名称 + * @param user 用户信息 + * @return 在线用户信息 + */ + @Override + public SysUserOnline selectOnlineByInfo(String ipaddr, String userName, LoginUser user) { + if (org.apache.commons.lang3.StringUtils.equals(ipaddr, user.getIpaddr()) && org.apache.commons.lang3.StringUtils.equals(userName, user.getUsername())) { + return loginUserToUserOnline(user); + } + return null; + } + + + /** + * 设置在线用户信息 + * + * @param user 用户信息 + * @return 在线用户 + */ + @Override + public SysUserOnline loginUserToUserOnline(LoginUser user) { + if (StringUtils.isNull(user)) { + return null; + } + SysUserOnline sysUserOnline = new SysUserOnline(); + sysUserOnline.setTokenId(user.getToken()); + sysUserOnline.setUserName(user.getUsername()); + sysUserOnline.setIpaddr(user.getIpaddr()); + sysUserOnline.setLoginLocation(user.getLoginLocation()); + sysUserOnline.setBrowser(user.getBrowser()); + sysUserOnline.setOs(user.getOs()); + sysUserOnline.setLoginTime(user.getLoginTime()); + sysUserOnline.setDeptName(user.getDepartmentName()); + sysUserOnline.setCorpId(user.getCorpId()); + return sysUserOnline; + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/service/impl/SysUserServiceImpl.java b/easyink-common/src/main/java/com/easyink/common/service/impl/SysUserServiceImpl.java new file mode 100644 index 0000000..017573e --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/service/impl/SysUserServiceImpl.java @@ -0,0 +1,330 @@ +package com.easyink.common.service.impl; + +import cn.hutool.core.collection.CollUtil; +import com.easyink.common.annotation.DataScope; +import com.easyink.common.constant.UserConstants; +import com.easyink.common.core.domain.entity.SysRole; +import com.easyink.common.core.domain.entity.SysUser; +import com.easyink.common.core.domain.system.SysUserPost; +import com.easyink.common.exception.CustomException; +import com.easyink.common.mapper.SysRoleMapper; +import com.easyink.common.mapper.SysUserMapper; +import com.easyink.common.service.ISysConfigService; +import com.easyink.common.service.ISysUserService; +import com.easyink.common.utils.SecurityUtils; +import com.easyink.common.utils.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.List; + +/** + * 用户 业务层处理 + * + * @author admin + */ +@Service +public class SysUserServiceImpl implements ISysUserService { + private static final Logger log = LoggerFactory.getLogger(SysUserServiceImpl.class); + + @Autowired + private SysUserMapper userMapper; + + @Autowired + private SysRoleMapper roleMapper; + + @Autowired + private ISysConfigService configService; + + /** + * 根据条件分页查询用户列表 + * + * @param user 用户信息 + * @return 用户信息集合信息 + */ + @Override + @DataScope() + public List selectUserList(SysUser user) { + return userMapper.selectUserList(user); + } + + /** + * 通过用户名查询用户 + * + * @param userName 用户名 + * @return 用户对象信息 + */ + @Override + public SysUser selectUserByUserName(String userName) { + return userMapper.selectUserByUserName(userName); + } + + /** + * 通过用户ID查询用户 + * + * @param userId 用户ID + * @return 用户对象信息 + */ + @Override + public SysUser selectUserById(Long userId) { + return userMapper.selectUserById(userId); + } + + /** + * 查询用户所属角色组 + * + * @param userName 用户名 + * @return 结果 + */ + @Override + public String selectUserRoleGroup(String userName) { + List list = roleMapper.selectRolesByUserName(userName); + StringBuilder idsStr = new StringBuilder(); + for (SysRole role : list) { + idsStr.append(role.getRoleName()).append(","); + } + if (StringUtils.isNotEmpty(idsStr.toString())) { + return idsStr.substring(0, idsStr.length() - 1); + } + return idsStr.toString(); + } + + /** + * 校验用户名称是否唯一 + * + * @param userName 用户名称 + * @return 结果 + */ + @Override + public String checkUserNameUnique(String userName) { + int count = userMapper.checkUserNameUnique(userName); + if (count > 0) { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 校验用户名称是否唯一 + * + * @param user 用户信息 + * @return + */ + @Override + public String checkPhoneUnique(SysUser user) { + Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId(); + SysUser info = userMapper.checkPhoneUnique(user.getPhonenumber()); + if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue()) { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 校验email是否唯一 + * + * @param user 用户信息 + * @return + */ + @Override + public String checkEmailUnique(SysUser user) { + Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId(); + SysUser info = userMapper.checkEmailUnique(user.getEmail()); + if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue()) { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 校验用户是否允许操作 + * + * @param user 用户信息 + */ + @Override + public void checkUserAllowed(SysUser user) { + if (StringUtils.isNotNull(user.getUserId()) && user.isAdmin()) { + throw new CustomException("不允许操作超级管理员用户"); + } + } + + /** + * 新增保存用户信息 + * + * @param user 用户信息 + * @return 结果 + */ + @Override + @Transactional + public int insertUser(SysUser user) { + // 新增用户信息 + int rows = userMapper.insertUser(user); + // 新增用户岗位关联 + insertUserPost(user); + return rows; + } + + /** + * 修改保存用户信息 + * + * @param user 用户信息 + * @return 结果 + */ + @Override + @Transactional + public int updateUser(SysUser user) { + // 新增用户与岗位管理 + insertUserPost(user); + return userMapper.updateUser(user); + } + + /** + * 修改用户状态 + * + * @param user 用户信息 + * @return 结果 + */ + @Override + public int updateUserStatus(SysUser user) { + return userMapper.updateUser(user); + } + + /** + * 修改用户基本信息 + * + * @param user 用户信息 + * @return 结果 + */ + @Override + public int updateUserProfile(SysUser user) { + return userMapper.updateUser(user); + } + + /** + * 修改用户头像 + * + * @param userName 用户名 + * @param avatar 头像地址 + * @return 结果 + */ + @Override + public boolean updateUserAvatar(String userName, String avatar) { + return userMapper.updateUserAvatar(userName, avatar) > 0; + } + + /** + * 重置用户密码 + * + * @param user 用户信息 + * @return 结果 + */ + @Override + public int resetPwd(SysUser user) { + return userMapper.updateUser(user); + } + + /** + * 重置用户密码 + * + * @param userName 用户名 + * @param password 密码 + * @return 结果 + */ + @Override + public int resetUserPwd(String userName, String password) { + return userMapper.resetUserPwd(userName, password); + } + + + /** + * 新增用户岗位信息 + * + * @param user 用户对象 + */ + public void insertUserPost(SysUser user) { + Long[] posts = user.getPostIds(); + if (StringUtils.isNotNull(posts)) { + // 新增用户与岗位管理 + List list = new ArrayList<>(); + for (Long postId : posts) { + SysUserPost up = new SysUserPost(); + up.setUserId(user.getUserId()); + up.setPostId(postId); + list.add(up); + } + } + } + + /** + * 批量删除用户信息 + * + * @param userIds 需要删除的用户ID + * @return 结果 + */ + @Override + public int deleteUserByIds(Long[] userIds) { + for (Long userId : userIds) { + checkUserAllowed(new SysUser(userId)); + } + return userMapper.deleteUserByIds(userIds); + } + + /** + * 导入用户数据 + * + * @param userList 用户数据列表 + * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据 + * @param operName 操作用户 + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public String importUser(List userList, Boolean isUpdateSupport, String operName) { + if (StringUtils.isNull(userList) || CollUtil.isEmpty(userList)) { + throw new CustomException("导入用户数据不能为空!"); + } + String symbolBr = "
"; + int successNum = 0; + int failureNum = 0; + StringBuilder successMsg = new StringBuilder(); + StringBuilder failureMsg = new StringBuilder(); + String password = configService.selectConfigByKey("sys.user.initPassword"); + for (SysUser user : userList) { + try { + // 验证是否存在这个用户 + SysUser u = userMapper.selectUserByUserName(user.getUserName()); + if (StringUtils.isNull(u)) { + user.setPassword(SecurityUtils.encryptPassword(password)); + user.setCreateBy(operName); + this.insertUser(user); + successNum++; + successMsg.append(symbolBr + successNum + "、账号 " + user.getUserName() + " 导入成功"); + } else if (isUpdateSupport) { + user.setUpdateBy(operName); + this.updateUser(user); + successNum++; + successMsg.append(symbolBr + successNum + "、账号 " + user.getUserName() + " 更新成功"); + } else { + failureNum++; + failureMsg.append(symbolBr + failureNum + "、账号 " + user.getUserName() + " 已存在"); + } + } catch (Exception e) { + failureNum++; + String msg = symbolBr + failureNum + "、账号 " + user.getUserName() + " 导入失败:"; + failureMsg.append(msg + e.getMessage()); + log.error(msg, e); + } + } + if (failureNum > 0) { + failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:"); + throw new CustomException(failureMsg.toString()); + } else { + successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:"); + } + return successMsg.toString(); + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/shorturl/ShortUrlAppendInfo.java b/easyink-common/src/main/java/com/easyink/common/shorturl/ShortUrlAppendInfo.java new file mode 100644 index 0000000..db1ae6b --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/shorturl/ShortUrlAppendInfo.java @@ -0,0 +1,42 @@ +package com.easyink.common.shorturl; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 类名: 短链附加信息 + * + * @author : silver_chariot + * @date : 2022/7/21 11:40 + **/ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ShortUrlAppendInfo { + /** + * 使用雷达的员工id + */ + private String userId; + /** + * 雷达id + */ + private Long radarId; + /** + * 渠道id ,如果是系统默认的渠道使用{@link com.easyink.common.enums.radar.RadarChannelEnum} + */ + private Integer channelType; + + /** + * 详情(如果是员工活码,则为员工活码使用场景,如果是新客进群则为新客进群的活码名称,如果是SOP则为SOP名称,如果是群日历,则为日历名称,如果是自定义渠道则为自定义渠道的渠道名) + */ + private String detail; + /** + * 企业id ( 主要用于获取appid配置,如果后续改成后端直接跳转则可去除) + */ + private String corpId; + + +} diff --git a/easyink-common/src/main/java/com/easyink/common/shorturl/SysShortUrlMapping.java b/easyink-common/src/main/java/com/easyink/common/shorturl/SysShortUrlMapping.java new file mode 100644 index 0000000..494779d --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/shorturl/SysShortUrlMapping.java @@ -0,0 +1,75 @@ +package com.easyink.common.shorturl; + +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.annotation.TableField; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.apache.commons.lang3.StringUtils; + +import java.util.Date; + +/** + * 类名: 短链长链映射实体 + * + * @author : silver_chariot + * @date : 2022/7/18 16:41 + **/ +@Data +@ApiModel("长链-短链映射表实体") +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class SysShortUrlMapping { + @TableField("id") + @ApiModelProperty(value = "id,短链 ") + private Long id; + + @TableField("short_code") + @ApiModelProperty(value = "短链后面的唯一字符串(用于和域名拼接成短链) ") + private String shortCode; + + @TableField("long_url") + @ApiModelProperty(value = "原链接(长链接) ") + private String longUrl; + + @TableField("append_info") + @ApiModelProperty(value = "附加信息") + private String appendInfo; + + @TableField("create_time") + @ApiModelProperty(value = "创建时间 ") + private Date createTime; + + @TableField("create_by") + @ApiModelProperty(value = "创建人 ") + private String createBy; + + /** + * 设置附加信息 + * + * @param appendInfo 附加信息 实体{@link ShortUrlAppendInfo} + */ + public void setAppend(ShortUrlAppendInfo appendInfo) { + if (appendInfo != null) { + this.appendInfo = JSON.toJSONString(appendInfo); + } + } + + /** + * 获取附加信息 + * + * @return 附件信息 {@link ShortUrlAppendInfo } + */ + public ShortUrlAppendInfo getAppend() { + if (StringUtils.isBlank(this.appendInfo)) { + return null; + } + return JSON.parseObject(this.appendInfo, ShortUrlAppendInfo.class); + } + + +} diff --git a/easyink-common/src/main/java/com/easyink/common/shorturl/service/ShortUrlAdaptor.java b/easyink-common/src/main/java/com/easyink/common/shorturl/service/ShortUrlAdaptor.java new file mode 100644 index 0000000..40d7863 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/shorturl/service/ShortUrlAdaptor.java @@ -0,0 +1,93 @@ +package com.easyink.common.shorturl.service; + +import com.easyink.common.constant.WeConstans; +import com.easyink.common.shorturl.ShortUrlAppendInfo; +import com.easyink.common.shorturl.SysShortUrlMapping; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +/** + * 类名: 短链服务适配器 (对应业务继承后 可依据自身业务实现创建短链和获取长链) + * + * @author : silver_chariot + * @date : 2022/7/19 17:50 + **/ +@Component("shortUrlAdaptor") +public class ShortUrlAdaptor { + + @Resource(name = "shortUrlService") + private ShortUrlService shortUrlService; + + /** + * 创建短链 + * + * @param longUrl 长链接 + * @param createBy 创建人,如果是员工则是userId,管理员为admin + * @return 短链接 + */ + public String createShortCode(String longUrl, String createBy) { + return shortUrlService.createShortCode(longUrl, createBy, null); + } + + /** + * 创建短链 + * + * @param longUrl 长链接 + * @param createBy 创建人,如果是员工则是userId,管理员为admin + * @param appendInfo 附件信息{@link ShortUrlAppendInfo} + * @return 短链接 + */ + public String createShortCode(String longUrl, String createBy, ShortUrlAppendInfo appendInfo) { + return shortUrlService.createShortCode(longUrl, createBy, appendInfo); + } + + /** + * 创建短链 + * + * @param longUrl 长链接 + * @return 短链接 + */ + public String createShortCode(String longUrl) { + return shortUrlService.createShortCode(longUrl, "admin", null); + + } + + /** + * 根据短链后面的字符串 获取其原有的长链接映射详情 + * + * @param shortCode 短链接后面的字符串 + * @return 对应的原有的长链接映射 {@link SysShortUrlMapping } + */ + public SysShortUrlMapping getLongUrlMapping(String shortCode) { + return shortUrlService.getUrlByMapping(shortCode); + } + + /** + * 根据短链后面的字符串 获取其原有的长链接 + * + * @param shortCode 短链接后面的字符串 + * @return 对应的原有的长链接 + */ + public String getLongUrl(String shortCode) { + SysShortUrlMapping mapping = getLongUrlMapping(shortCode); + if (mapping != null && StringUtils.isNotBlank(mapping.getLongUrl())) { + return mapping.getLongUrl(); + } + return null; + } + + /** + * 生成完整的短链 + * + * @param domain 域名 + * @param code 短链后缀的字符串 + * @return 完整的短链 + */ + public String genShortUrl(String domain, String code) { + return domain + WeConstans.SLASH + code; + } + + +} diff --git a/easyink-common/src/main/java/com/easyink/common/shorturl/service/ShortUrlService.java b/easyink-common/src/main/java/com/easyink/common/shorturl/service/ShortUrlService.java new file mode 100644 index 0000000..29a18a9 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/shorturl/service/ShortUrlService.java @@ -0,0 +1,30 @@ +package com.easyink.common.shorturl.service; + +import com.easyink.common.shorturl.ShortUrlAppendInfo; +import com.easyink.common.shorturl.SysShortUrlMapping; + +/** + * 类名: 短链处理接口 + * + * @author : silver_chariot + * @date : 2022/7/18 16:42 + **/ +public interface ShortUrlService { + /** + * 创建短链 + * + * @param longUrl 长链接 + * @param createBy 创建人,如果是员工则是userId,管理员为admin + * @param appendInfo 附加信息(用于埋点,非必传) {@link ShortUrlAppendInfo } + * @return 短链接 + */ + String createShortCode(String longUrl, String createBy, ShortUrlAppendInfo appendInfo); + + /** + * 根据短链后面的字符串 获取其原有的长链接 + * + * @param shortCode 短链接后面的字符串 + * @return 对应的原有的长链接 + */ + SysShortUrlMapping getUrlByMapping(String shortCode); +} diff --git a/easyink-common/src/main/java/com/easyink/common/shorturl/service/impl/ShortUrlServiceImpl.java b/easyink-common/src/main/java/com/easyink/common/shorturl/service/impl/ShortUrlServiceImpl.java new file mode 100644 index 0000000..2d9a325 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/shorturl/service/impl/ShortUrlServiceImpl.java @@ -0,0 +1,137 @@ +package com.easyink.common.shorturl.service.impl; + +import cn.hutool.bloomfilter.BitMapBloomFilter; +import cn.hutool.bloomfilter.BloomFilterUtil; +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.easyink.common.constant.GenConstants; +import com.easyink.common.core.redis.RedisCache; +import com.easyink.common.enums.ResultTip; +import com.easyink.common.exception.CustomException; +import com.easyink.common.mapper.SysShortUrlMappingMapper; +import com.easyink.common.shorturl.ShortUrlAppendInfo; +import com.easyink.common.shorturl.SysShortUrlMapping; +import com.easyink.common.shorturl.service.ShortUrlService; +import com.easyink.common.utils.ConvertUrlUtil; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.exception.ExceptionUtils; +import org.springframework.dao.DuplicateKeyException; +import org.springframework.stereotype.Service; + +import java.util.Date; +import java.util.concurrent.TimeUnit; + +/** + * 类名: 短链处理接口实现类 + * + * @author : silver_chariot + * @date : 2022/7/18 16:43 + **/ +@Service("shortUrlService") +@Slf4j +public class ShortUrlServiceImpl implements ShortUrlService { + + private final SysShortUrlMappingMapper sysShortUrlMappingMapper; + private final RedisCache redisCache; + /** + * 布隆过滤器 + */ + private static final BitMapBloomFilter BLOOM_FILTER = BloomFilterUtil.createBitMap(16); + /** + * 存储短链长链的redis映射 + */ + private static final String SHORT_URL_REDIS_KEY = "shortUrl:"; + /** + * 如果已有重复的短链code,给长链接拼接额外字符再生成code所需要增加的字符串 + */ + private final static String DUPLICATE_SUB = "*"; + /** + * 缓存存储时间 单位分钟 + */ + private final static int REDIS_TIME_OUT = 2; + + public ShortUrlServiceImpl(SysShortUrlMappingMapper sysShortUrlMappingMapper, RedisCache redisCache) { + this.sysShortUrlMappingMapper = sysShortUrlMappingMapper; + this.redisCache = redisCache; + } + + @Override + public String createShortCode(String longUrl, String createBy, ShortUrlAppendInfo appendInfo) { + if (StringUtils.isBlank(longUrl)) { + log.info("[创建短链]长连接为空,创建失败 "); + return null; + } + String code = null; + // 用于生成短链的长链url,由于生成的短链可能重复,如果重复则需要添加占位符后重新生成 + String genLongUrl = BLOOM_FILTER.contains(longUrl) ? longUrl + DUPLICATE_SUB : longUrl; + boolean success = false; + do { + try { + // 生成短链的code + code = ConvertUrlUtil.getShortCode(genLongUrl); + // 保存映射 + SysShortUrlMapping mapping = SysShortUrlMapping.builder().shortCode(code).longUrl(longUrl).createBy(createBy).createTime(new Date()).build(); + mapping.setAppend(appendInfo); + success = sysShortUrlMappingMapper.insert(mapping) > 0; + // 增加至布隆过滤器 + BLOOM_FILTER.add(code); + log.info("[创建短链]创建成功,longUrl:{},shortCode:{},createBy:{}", longUrl, code, createBy); + } catch (DuplicateKeyException e) { + log.error("[创建短链]生成的code,db中已有重复的,重新生成,url:{},code:{}", longUrl, code); + genLongUrl = genLongUrl + DUPLICATE_SUB; + } catch (Exception e) { + log.error("[创建短链]生成短链异常,url:{},e:{}", longUrl, ExceptionUtils.getStackTrace(e)); + throw new CustomException(ResultTip.TIP_ERROR_CREATE_SHORT_URL); + } + } while (!success); + return code; + } + + public static void main(String[] args) { + String url = "http://lianluoyi.net?id=1314515&type=23&channel=1&userId=1414151faafa&faf=raewtatoraewt&ids=1414151515135515"; + String code = ConvertUrlUtil.getShortCode(url); + System.out.println(code); + + String test = "测试"; + String str = String.format("jkhaod1是的1dfag%s", test); + System.out.println(str); + + } + + @Override + public SysShortUrlMapping getUrlByMapping(String shortCode) { + if (StringUtils.isBlank(shortCode)) { + log.info("[获取长链]短链接code为空,获取失败"); + throw new CustomException(ResultTip.TIP_NO_SHORT_CODE); + } + // 先从缓存获取 + String redisKey = getRedisKey(shortCode); + String cacheMappingStr = redisCache.getCacheObject(redisKey); + if (StringUtils.isNotBlank(cacheMappingStr)) { + SysShortUrlMapping cacheMapping = JSON.parseObject(cacheMappingStr, SysShortUrlMapping.class); + redisCache.expire(redisKey, REDIS_TIME_OUT, TimeUnit.MINUTES); + log.info("[获取长链]缓存中获取成功code:{},mapping:{}", shortCode, cacheMapping); + return cacheMapping; + } + // 查询db中的映射 + SysShortUrlMapping mapping = sysShortUrlMappingMapper.selectOne(new LambdaQueryWrapper().eq(SysShortUrlMapping::getShortCode, shortCode).last(GenConstants.LIMIT_1)); + if (mapping == null || StringUtils.isBlank(mapping.getLongUrl())) { + throw new CustomException(ResultTip.TIP_CANNOT_FIND_PAGE); + } + // 缓存并返回 + redisCache.setCacheObject(redisKey, JSON.toJSONString(mapping), REDIS_TIME_OUT, TimeUnit.MINUTES); + log.info("[获取长链]获取成功code:{},mapping:{}", shortCode, mapping); + return mapping; + } + + /** + * redis获取 + * + * @param shortCode 短链code + * @return 获取长链的 redisKey + */ + public String getRedisKey(String shortCode) { + return SHORT_URL_REDIS_KEY + shortCode; + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/token/SysPermissionService.java b/easyink-common/src/main/java/com/easyink/common/token/SysPermissionService.java new file mode 100644 index 0000000..7d5bcb1 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/token/SysPermissionService.java @@ -0,0 +1,171 @@ +package com.easyink.common.token; + +import cn.hutool.core.util.ObjectUtil; +import com.easyink.common.constant.Constants; +import com.easyink.common.core.domain.entity.SysRole; +import com.easyink.common.core.domain.entity.SysUser; +import com.easyink.common.core.domain.model.LoginUser; +import com.easyink.common.core.domain.wecom.WeUser; +import com.easyink.common.enums.DataScopeEnum; +import com.easyink.common.mapper.SysRoleDeptMapper; +import com.easyink.common.mapper.SysRoleMapper; +import com.easyink.common.service.ISysMenuService; +import com.easyink.common.service.ISysRoleService; +import com.easyink.common.utils.StringUtils; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +/** + * 用户权限处理 + * + * @author admin + */ +@Component +@Slf4j +public class SysPermissionService { + @Autowired + private ISysRoleService roleService; + + @Autowired + private ISysMenuService menuService; + @Autowired + private SysRoleMapper sysRoleMapper; + @Autowired + private SysRoleDeptMapper sysRoleDeptMapper; + + + /** + * 获取角色数据权限 + * + * @param user 用户信息 + * @return 角色权限信息 + */ + public Set getRolePermission(LoginUser user) { + Set roles = new HashSet<>(); + // 管理员拥有所有权限 + if (user.isSuperAdmin()) { + roles.add(Constants.SUPER_ADMIN); + } else if (user.getWeUser() != null) { + roles.addAll(roleService.selectRolePermissionByUserId(user.getCorpId(), user.getWeUser().getUserId())); + } + return roles; + } + + /** + * 设置登录用户 可以查看的部门 数据权限范围和角色 + * + * @param user 登录用户实体 + * @return 部门id ,隔开 + */ + public void setRoleAndDepartmentDataScope(LoginUser user) { + if (ObjectUtil.isNull(user)) { + return; + } + //如果系统管理员第一次登录后,不存在corpId则不设置数据权限范围 + if (ObjectUtil.isNotNull(user.getUser()) && StringUtils.isBlank(user.getUser().getCorpId())) { + return; + } + String corpId = user.getCorpId(); + // 部门范围(,隔开) + String departmentScope = null; + if (user.isSuperAdmin()) { + user.setDepartmentDataScope(this.getAllDept(corpId)); + return; + } + if (ObjectUtil.isNull(user.getWeUser())) { + return; + } + //设置权限 + SysRole role = sysRoleMapper.selectRoleByWeUserId(corpId, user.getWeUser().getUserId()); + if (role == null && org.apache.commons.lang3.StringUtils.isNotBlank(user.getWeUser().getExternalCorpId())) { + role = sysRoleMapper.selectRoleByWeUserId(user.getWeUser().getExternalCorpId(), user.getWeUser().getUserId()); + } + if(ObjectUtil.isNull(role)) { + return; + } + user.setRole(role); + //根据权限获取可查看部门 + DataScopeEnum dataScopeEnum = DataScopeEnum.getDataScope(role.getDataScope()); + switch (dataScopeEnum) { + case ALL: + departmentScope = this.getAllDept(corpId); + break; + case SELF_DEPT: + case SELF: + departmentScope = String.valueOf(user.getWeUser().getMainDepartment()); + break; + case CUSTOM: + departmentScope = StringUtils.join(sysRoleDeptMapper.getDeptByRoleId(corpId, role.getRoleId()), ","); + break; + case DEPT_AND_CHILD: + departmentScope = sysRoleDeptMapper.getDeptAndChildDept(corpId, user.getWeUser().getMainDepartment()); + break; + default: + break; + } + // 如果为空字符串 设置为-1 缺省值,防止后续SQL报错 + if (StringUtils.isBlank(departmentScope)) { + departmentScope = "-1"; + } + log.info("corpId:{},name:{},type:{},设置可见部门:{}", corpId, user.getUsername(), dataScopeEnum, departmentScope); + user.setDepartmentDataScope(departmentScope); + } + + /** + * 根据corpId获取全部的部门 + * + * @return 全部部门id, 用逗号隔开 + */ + public String getAllDept(String corpId) { + if (StringUtils.isBlank(corpId)) { + return StringUtils.EMPTY; + } + List list = sysRoleDeptMapper.getAllDeptList(corpId); + return org.apache.commons.lang3.StringUtils.join(list, ","); + } + + + /** + * 获取菜单数据权限 + * + * @param user 用户信息 + * @return 菜单权限信息 + */ + public Set getMenuPermission(SysUser user) { + Set perms = new HashSet<>(); + // 管理员拥有所有权限 + if (user != null && user.isAdmin()) { + perms.add(Constants.ALL_PERMISSION); + } + return perms; + } + + public Set getMenuPermission(WeUser weUser) { + Set perms = new HashSet<>(); + if (weUser != null) { + Set menuSet = menuService.selectMenuPermsByWeUserId(weUser.getCorpId(), weUser.getUserId()); + if (CollectionUtils.isEmpty(menuSet) && org.apache.commons.lang3.StringUtils.isNotBlank(weUser.getExternalCorpId())) { + menuSet = menuService.selectMenuPermsByWeUserId(weUser.getExternalCorpId(), weUser.getUserId()); + } + perms.addAll(menuSet); + } + return perms; + } + + + public Set getMenuPermission(LoginUser loginUser) { + if (loginUser.getWeUser() != null) { + return getMenuPermission(loginUser.getWeUser()); + } else if (loginUser.getUser() != null) { + return getMenuPermission(loginUser.getUser()); + } + return Collections.emptySet(); + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/token/TokenService.java b/easyink-common/src/main/java/com/easyink/common/token/TokenService.java new file mode 100644 index 0000000..252f001 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/token/TokenService.java @@ -0,0 +1,289 @@ +package com.easyink.common.token; + +import com.easyink.common.config.RuoYiConfig; +import com.easyink.common.constant.Constants; +import com.easyink.common.core.domain.model.LoginUser; +import com.easyink.common.core.redis.RedisCache; +import com.easyink.common.utils.ServletUtils; +import com.easyink.common.utils.StringUtils; +import com.easyink.common.utils.ip.AddressUtils; +import com.easyink.common.utils.ip.IpUtils; +import com.easyink.common.utils.uuid.IdUtils; +import eu.bitwalker.useragentutils.UserAgent; +import io.jsonwebtoken.Claims; +import io.jsonwebtoken.Jwts; +import io.jsonwebtoken.SignatureAlgorithm; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.exception.ExceptionUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; +import org.springframework.util.PatternMatchUtils; + +import javax.servlet.http.HttpServletRequest; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.TimeUnit; + +/** + * token验证处理 + * + * @author admin + */ +@Component +@Slf4j +public class TokenService { + // 令牌自定义标识 + @Value("${token.header}") + private String header; + + // 令牌秘钥 + @Value("${token.secret}") + private String secret; + + // 令牌有效期(默认30分钟) + public static int expireTime; + + @Autowired + private RuoYiConfig ruoYiConfig; + + protected static final long MILLIS_SECOND = 1000; + + public static final long MILLIS_MINUTE = 60 * MILLIS_SECOND; + + private static final Long MILLIS_MINUTE_TEN = 20 * 60 * 1000L; + + @Autowired + private RedisCache redisCache; + @Autowired + private SysPermissionService sysPermissionService; + + /** + * 获取用户身份信息 (http请求) + * + * @return 登录用户信息 + */ + public LoginUser getLoginUser(HttpServletRequest request) { + // 获取REDIS缓存登录用户的键 + String userKey = getUserKey(request); + return this.getLoginUserByUserKey(userKey); + } + + /** + * 获取用户身份信息 (userKey) + * + * @return 登录用户信息 + */ + public LoginUser getLoginUserByUserKey(String userKey) { + if (StringUtils.isBlank(userKey)) { + return null; + } + return redisCache.getCacheObject(userKey); + } + + + /** + * 生成保存登录用户信息的redisKEY + * + * @return 用户登录信息的redis键 + */ + public String getUserKey(HttpServletRequest request) { + // 获取TOKEN + String tokenId = getTokenId(request); + if (StringUtils.isNotBlank(tokenId)) { + return getUserKey(tokenId); + } + return StringUtils.EMPTY; + } + + /** + * 获取用户tokenId + * + * @param request + * @return tokenId + */ + public String getTokenId(HttpServletRequest request) { + String token = getToken(request); + if (StringUtils.isNotEmpty(token)) { + // 从令牌中获取声明 + Claims claims = parseToken(token); + // 从声明中获取登录的uuid + String uuid = (String) claims.get(Constants.LOGIN_USER_KEY); + return uuid; + } + return StringUtils.EMPTY; + } + + /** + * 设置用户身份信息 + */ + public void setLoginUser(LoginUser loginUser) { + if (StringUtils.isNotNull(loginUser) && StringUtils.isNotEmpty(loginUser.getToken())) { + refreshToken(loginUser); + } + } + + /** + * 删除用户身份信息 + */ + public void delLoginUser(String token) { + if (StringUtils.isNotEmpty(token)) { + String userKey = getUserKey(token); + redisCache.deleteObject(userKey); + } + } + + /** + * 创建令牌 + * + * @param loginUser 用户信息 + * @return 令牌 + */ + public String createToken(LoginUser loginUser) { + String token = IdUtils.fastUUID(); + loginUser.setToken(token); + setUserAgent(loginUser); + refreshToken(loginUser); + + Map claims = new HashMap<>(); + claims.put(Constants.LOGIN_USER_KEY, token); + return createToken(claims); + } + + /** + * 验证令牌有效期,相差不足20分钟,自动刷新缓存 + * + * @param loginUser + * @return 令牌 + */ + public void verifyToken(LoginUser loginUser) { + long expireTimes = loginUser.getExpireTime(); + long currentTime = System.currentTimeMillis(); + if (expireTimes - currentTime <= MILLIS_MINUTE_TEN) { + refreshToken(loginUser); + } + } + + /** + * 刷新令牌有效期 + * + * @param loginUser 登录信息 + */ + public void refreshToken(LoginUser loginUser) { + loginUser.setLoginTime(System.currentTimeMillis()); + loginUser.setExpireTime(loginUser.getLoginTime() + expireTime * MILLIS_MINUTE); + // 刷新部门权限 + try { + sysPermissionService.setRoleAndDepartmentDataScope(loginUser); + } catch (Exception e) { + log.info("【登录】:设置可见部门权限异常,loginUser:{},e:{}", loginUser, ExceptionUtils.getStackTrace(e)); + } + // 根据uuid将loginUser缓存 + String userKey = getUserKey(loginUser.getToken()); + redisCache.setCacheObject(userKey, loginUser, expireTime, TimeUnit.MINUTES); + } + + /** + * 刷新令牌weUser + * + * @param loginUser 登录信息 + */ + public void refreshWeUser(LoginUser loginUser){ + loginUser.setLoginTime(System.currentTimeMillis()); + loginUser.setExpireTime(loginUser.getLoginTime() + expireTime * MILLIS_MINUTE); + String userKey = getUserKey(loginUser.getToken()); + redisCache.setCacheObject(userKey, loginUser, expireTime, TimeUnit.MINUTES); + } + + + + /** + * 设置用户代理信息 + * + * @param loginUser 登录信息 + */ + public void setUserAgent(LoginUser loginUser) { + UserAgent userAgent = UserAgent.parseUserAgentString(ServletUtils.getRequest().getHeader("User-Agent")); + String ip = IpUtils.getIpAddr(ServletUtils.getRequest()); + loginUser.setIpaddr(ip); + loginUser.setLoginLocation(AddressUtils.getRealAddressByIP(ip)); + loginUser.setBrowser(userAgent.getBrowser().getName()); + loginUser.setOs(userAgent.getOperatingSystem().getName()); + } + + /** + * 从数据声明生成令牌 + * + * @param claims 数据声明 + * @return 令牌 + */ + private String createToken(Map claims) { + long nowTime = System.currentTimeMillis(); + long expTime = 360 * 24 * 3600 * 1000L; + return Jwts.builder() + .setClaims(claims) + .setExpiration(new Date(nowTime + expTime)) + .signWith(SignatureAlgorithm.HS512, secret).compact(); + } + + /** + * 从令牌中获取数据声明 + * + * @param token 令牌 + * @return 数据声明 + */ + private Claims parseToken(String token) { + return Jwts.parser() + .setSigningKey(secret) + .parseClaimsJws(token) + .getBody(); + } + + /** + * 从令牌中获取用户名 + * + * @param token 令牌 + * @return 用户名 + */ + public String getUsernameFromToken(String token) { + Claims claims = parseToken(token); + return claims.getSubject(); + } + + /** + * 获取请求token + * + * @param request + * @return token + */ + private String getToken(HttpServletRequest request) { + String token = ""; + //移除匿名接口中请求头的token + if (!PatternMatchUtils.simpleMatch(ruoYiConfig.getAnonUrl(), request.getRequestURI())) { + token = request.getHeader(header); + if (StringUtils.isNotEmpty(token) && token.startsWith(Constants.TOKEN_PREFIX)) { + token = token.replace(Constants.TOKEN_PREFIX, ""); + } + } + + + return token; + } + + /** + * 根据token获取缓存登录用户的redis key + * + * @param token 登录token + * @return key + */ + public String getUserKey(String token) { + return Constants.LOGIN_TOKEN_KEY + token; + } + + @Value("${token.expireTime}") + public void setExpireTime(int expireTime) { + TokenService.expireTime = expireTime; + } + +} diff --git a/easyink-common/src/main/java/com/easyink/common/utils/Arith.java b/easyink-common/src/main/java/com/easyink/common/utils/Arith.java new file mode 100644 index 0000000..76f0b3c --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/utils/Arith.java @@ -0,0 +1,113 @@ +package com.easyink.common.utils; + +import java.math.BigDecimal; +import java.math.RoundingMode; + +/** + * 精确的浮点数运算 + * + * @author admin + */ +public class Arith { + + /** + * 默认除法运算精度 + */ + private static final int DEF_DIV_SCALE = 10; + + /** + * 这个类不能实例化 + */ + private Arith() { + } + + /** + * 提供精确的加法运算。 + * + * @param v1 被加数 + * @param v2 加数 + * @return 两个参数的和 + */ + public static double add(double v1, double v2) { + BigDecimal b1 = new BigDecimal(Double.toString(v1)); + BigDecimal b2 = new BigDecimal(Double.toString(v2)); + return b1.add(b2).doubleValue(); + } + + /** + * 提供精确的减法运算。 + * + * @param v1 被减数 + * @param v2 减数 + * @return 两个参数的差 + */ + public static double sub(double v1, double v2) { + BigDecimal b1 = new BigDecimal(Double.toString(v1)); + BigDecimal b2 = new BigDecimal(Double.toString(v2)); + return b1.subtract(b2).doubleValue(); + } + + /** + * 提供精确的乘法运算。 + * + * @param v1 被乘数 + * @param v2 乘数 + * @return 两个参数的积 + */ + public static double mul(double v1, double v2) { + BigDecimal b1 = new BigDecimal(Double.toString(v1)); + BigDecimal b2 = new BigDecimal(Double.toString(v2)); + return b1.multiply(b2).doubleValue(); + } + + /** + * 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到 + * 小数点以后10位,以后的数字四舍五入。 + * + * @param v1 被除数 + * @param v2 除数 + * @return 两个参数的商 + */ + public static double div(double v1, double v2) { + return div(v1, v2, DEF_DIV_SCALE); + } + + /** + * 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指 + * 定精度,以后的数字四舍五入。 + * + * @param v1 被除数 + * @param v2 除数 + * @param scale 表示表示需要精确到小数点以后几位。 + * @return 两个参数的商 + */ + public static double div(double v1, double v2, int scale) { + if (scale < 0) { + throw new IllegalArgumentException( + "The scale must be a positive integer or zero"); + } + BigDecimal b1 = new BigDecimal(Double.toString(v1)); + BigDecimal b2 = new BigDecimal(Double.toString(v2)); + if (b1.compareTo(BigDecimal.ZERO) == 0) { + return BigDecimal.ZERO.doubleValue(); + } + return b1.divide(b2, scale, RoundingMode.HALF_UP).doubleValue(); + } + + /** + * 提供精确的小数位四舍五入处理。 + * + * @param v 需要四舍五入的数字 + * @param scale 小数点后保留几位 + * @return 四舍五入后的结果 + */ + public static double round(double v, int scale) { + if (scale < 0) { + throw new IllegalArgumentException( + "The scale must be a positive integer or zero"); + } + BigDecimal b = new BigDecimal(Double.toString(v)); + BigDecimal one = new BigDecimal("1"); + return b.divide(one, scale, RoundingMode.HALF_UP).doubleValue(); + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/utils/ConvertUrlUtil.java b/easyink-common/src/main/java/com/easyink/common/utils/ConvertUrlUtil.java new file mode 100644 index 0000000..ed94285 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/utils/ConvertUrlUtil.java @@ -0,0 +1,71 @@ +package com.easyink.common.utils; + +import cn.hutool.core.lang.hash.MurmurHash; + +/** + * 类名: 短链转换工具 + * + * @author : silver_chariot + * @date : 2022/7/18 18:10 + **/ + +public class ConvertUrlUtil { + + private static final char[] CHARS = new char[]{ + '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', + 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', + 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' + }; + private static final int SIZE = CHARS.length; + /** + * 短链code长度 + */ + private static final int CODE_SIZE = 6; + /** + * 占位符 + */ + private static final char SUB = '0'; + + /** + * 转62进制 + * + * @param num 数字 + * @return 62进制字符 + */ + private static String convert2Base62(long num) { + StringBuilder sb = new StringBuilder(); + while (num > 0) { + int i = (int) (num % SIZE); + sb.append(CHARS[i]); + num /= SIZE; + } + return sb.reverse().toString(); + } + + /** + * 字符串 转成 base62 (先通过murhash 再转 62进制) + * + * @param str 字符串 + * @return base62进制字符 + */ + public static String url2hash2Base62(String str) { + int i = MurmurHash.hash32(str); + long num = i < 0 ? Integer.MAX_VALUE - (long) i : i; + return convert2Base62(num); + } + + /** + * 根据长链获取短链code + * + * @param str 长链 + * @return 短链code + */ + public static String getShortCode(String str) { + String code = url2hash2Base62(str); + return StringUtils.leftPad(code, CODE_SIZE, SUB); + + } + +} + + diff --git a/easyink-common/src/main/java/com/easyink/common/utils/DateUtils.java b/easyink-common/src/main/java/com/easyink/common/utils/DateUtils.java new file mode 100644 index 0000000..2b39425 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/utils/DateUtils.java @@ -0,0 +1,568 @@ +package com.easyink.common.utils; + +import com.easyink.common.enums.ResultTip; +import com.easyink.common.enums.WeOperationsCenterSop; +import com.easyink.common.exception.CustomException; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.exception.ExceptionUtils; +import org.apache.commons.lang3.time.DateFormatUtils; + +import java.lang.management.ManagementFactory; +import java.text.ParseException; +import java.text.ParsePosition; +import java.text.SimpleDateFormat; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +/** + * 时间工具类 + * + * @author admin + */ +@Slf4j +public class DateUtils extends org.apache.commons.lang3.time.DateUtils { + public static final String YYYY = "yyyy"; + + public static final String YYYY_MM = "yyyy-MM"; + + public static final String YYYY_MM_DD = "yyyy-MM-dd"; + + public static final String YYYYMMDD = "yyyyMMdd"; + + public static final String YYYYMMDDHHMMSS = "yyyyMMddHHmmss"; + + public static final String YYYY_MM_DD_HH_MM = "yyyy-MM-dd HH:mm"; + + public static final String HH_MM = "HH:mm"; + + public static final String MM = "mm"; + + public static final String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss"; + + public static final String HH_MM_SS = "HH:mm:ss"; + + private static String[] parsePatterns = { + "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM", + "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM", + "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"}; + /** + * 开始时间后缀 + */ + public static final String BEGIN_TIME_SUFFIX = " 00:00:00"; + /** + * 结束时间后缀 + */ + public static final String END_TIME_SUFFIX = " 23:59:59"; + + /** + * 获取当前Date型日期 + * + * @return Date() 当前日期 + */ + public static Date getNowDate() { + return new Date(); + } + + /** + * 获取当前日期, 默认格式为yyyy-MM-dd + * + * @return String + */ + public static String getDate() { + return dateTimeNow(YYYY_MM_DD); + } + + + public static final String getTime() { + return dateTimeNow(YYYY_MM_DD_HH_MM_SS); + } + + public static final String dateTimeNow() { + return dateTimeNow(YYYYMMDDHHMMSS); + } + + public static final String dateTimeNow(final String format) { + return parseDateToStr(format, new Date()); + } + + public static final String dateTime(final Date date) { + return parseDateToStr(YYYY_MM_DD, date); + } + + public static final String parseDateToStr(final String format, final Date date) { + return new SimpleDateFormat(format).format(date); + } + + public static final Date dateTime(final String format, final String ts) { + try { + return new SimpleDateFormat(format).parse(ts); + } catch (ParseException e) { + throw new RuntimeException(e); + } + } + + /*** + * 转换日期格式 + * @param dateStr 日期 + * @param oldFormat 旧格式 + * @param newFormat 新格式 + * @return newFormat + */ + public static final String timeFormatTrans(String dateStr, String oldFormat, String newFormat) { + if (org.apache.commons.lang3.StringUtils.isBlank(dateStr) + || org.apache.commons.lang3.StringUtils.isBlank(oldFormat) + || org.apache.commons.lang3.StringUtils.isBlank(newFormat)) { + throw new CustomException(ResultTip.TIP_GENERAL_BAD_REQUEST); + } + if (!isMatchFormat(dateStr, oldFormat)) { + throw new CustomException(ResultTip.TIP_TIME_FORMAT_ERROR); + } + Date date = dateTime(oldFormat, dateStr); + return parseDateToStr(newFormat, date); + } + + /** + * 日期路径 即年/月/日 如2018/08/08 + */ + public static final String datePath() { + Date now = new Date(); + return DateFormatUtils.format(now, "yyyy/MM/dd"); + } + + /** + * 日期路径 即年/月/日 如20180808 + */ + public static final String dateTime() { + Date now = new Date(); + return DateFormatUtils.format(now, "yyyyMMdd"); + } + + + /** + * 日期型字符串转化为日期 格式 + */ + public static Date parseDate(Object str) { + if (str == null) { + return null; + } + try { + return parseDate(str.toString(), parsePatterns); + } catch (ParseException e) { + return null; + } + } + + /** + * 获取服务器启动时间 + */ + public static Date getServerStartDate() { + long time = ManagementFactory.getRuntimeMXBean().getStartTime(); + return new Date(time); + } + + /** + * 计算两个时间差 + */ + public static String getDatePoor(Date endDate, Date nowDate) { + long nd = (long) 1000 * 24 * 60 * 60; + long nh = (long) 1000 * 60 * 60; + long nm = (long) 1000 * 60; + // 获得两个时间的毫秒时间差异 + long diff = endDate.getTime() - nowDate.getTime(); + // 计算差多少天 + long day = diff / nd; + // 计算差多少小时 + long hour = diff % nd / nh; + // 计算差多少分钟 + long min = diff % nd % nh / nm; + // 计算差多少秒//输出结果 + // long sec = diff % nd % nh % nm / ns; + return day + "天" + hour + "小时" + min + "分钟"; + } + + /** + * 计算两个时间差 + */ + public static long diffTime(Date endDate, Date nowDate) { + return endDate.getTime() - nowDate.getTime(); + } + + /** + * 获取时间段内所有日期 + * + * @param dBegin + * @param dEnd + * @return + */ + public static List findDates(Date dBegin, Date dEnd) { + List lDate = new ArrayList(); + lDate.add(dBegin); + Calendar calBegin = Calendar.getInstance(); + // 使用给定的 Date 设置此 Calendar 的时间 + calBegin.setTime(dBegin); + Calendar calEnd = Calendar.getInstance(); + // 使用给定的 Date 设置此 Calendar 的时间 + calEnd.setTime(dEnd); + // 测试此日期是否在指定日期之后 + while (dEnd.after(calBegin.getTime())) { + // 根据日历的规则,为给定的日历字段添加或减去指定的时间量 + calBegin.add(Calendar.DAY_OF_MONTH, 1); + lDate.add(calBegin.getTime()); + } + return lDate; + } + + public static long getMillionSceondsBydate(String date) throws ParseException { + SimpleDateFormat sdf = new SimpleDateFormat(YYYY_MM_DD_HH_MM_SS); + return sdf.parse(date).getTime(); + } + + + public static int getAge(Date birthDay) { + Calendar cal = Calendar.getInstance(); + if (cal.before(birthDay)) { //出生日期晚于当前时间,无法计算 + throw new IllegalArgumentException( + "The birthDay is before Now.It's unbelievable!"); + } + int yearNow = cal.get(Calendar.YEAR); //当前年份 + int monthNow = cal.get(Calendar.MONTH); //当前月份 + int dayOfMonthNow = cal.get(Calendar.DAY_OF_MONTH); //当前日期 + cal.setTime(birthDay); + int yearBirth = cal.get(Calendar.YEAR); + int monthBirth = cal.get(Calendar.MONTH); + int dayOfMonthBirth = cal.get(Calendar.DAY_OF_MONTH); + int age = yearNow - yearBirth; //计算整岁数 + if (monthNow <= monthBirth) { + if (monthNow == monthBirth) { + if (dayOfMonthNow < dayOfMonthBirth) { + age--;//当前日期在生日之前,年龄减一 + } + } else { + age--;//当前月份在生日之前,年龄减一 + } + } + return age; + + } + + /** + * 判断日期字符是否符合某个日期格式 + * + * @param dateStr 日期字符 + * @param format 日期格式 + * @return true 是 false 否 + */ + public static Boolean isMatchFormat(String dateStr, String format) { + // 样式和字符串长度不等则不匹配 + if (StringUtils.isBlank(dateStr) + || StringUtils.isBlank(format) + || format.length() != dateStr.length()) { + return false; + } + SimpleDateFormat sdf = new SimpleDateFormat(format); + ParsePosition pos = new ParsePosition(0); + sdf.parse(dateStr, pos); + // pos.index==0 则解析失败 + return pos.getIndex() != 0; + } + + /** + * 把 传入开始时间的日期转换成 yyyy-MM-dd 00:00:00格式 + * + * @param dayTime 传入日期字符串,正确格式为:2020-10-01 或 2021-10 + * @return 获取开始时间字符串, 格式:2020-10-01 00:00:00 + */ + public static String parseBeginDay(String dayTime) { + // 如果格式是yyyy-MM 需要后面1号,转换成yyyy-MM-dd 格式 + if (isMatchFormat(dayTime, YYYY_MM)) { + //每个月第一天 + String firstDayOfMonth = "-01"; + dayTime = dayTime + firstDayOfMonth; + } + return getTargetDate(dayTime, BEGIN_TIME_SUFFIX); + } + + /** + * 把 传入结束时间的日期转换成 yyyy-MM-dd 23:59:59格式 + * + * @param dayTime 传入日期字符串,正确格式为:2020-10-01 或 2021-10 + * @return 获取截止时间字符串, 格式:2020-10-01 23:59:59 + */ + public static String parseEndDay(String dayTime) { + // 如果是yyyy-MM 需要先获取当月最后一天并转换成 yyyy-MM-dd 格式 + if (isMatchFormat(dayTime, YYYY_MM)) { + try { + Date lastDayOfMonth = getLastDayOfMonth(dayTime); + dayTime = parseDateToStr(YYYY_MM_DD, lastDayOfMonth); + } catch (ParseException e) { + // 如果转换格式异常则不处理 + log.warn("获取指定月份最后一天:日期格式转换有误,e:{}", ExceptionUtils.getStackTrace(e)); + } + } + return getTargetDate(dayTime, END_TIME_SUFFIX); + } + + /** + * 检查传入日期格式是否正确 + * + * @param dayTime 传入日期字符串,正确格式为:2020-10-01 + * @return 检查结果 + */ + private static boolean checkDayTime(String dayTime) { + boolean checkResult = true; + if (org.apache.commons.lang3.StringUtils.isBlank(dayTime)) { + checkResult = false; + } else { + SimpleDateFormat simpleDateFormat = new SimpleDateFormat(YYYY_MM_DD); + try { + simpleDateFormat.parse(dayTime); + } catch (ParseException e) { + checkResult = false; + log.warn("时间格式不正确:{}", ExceptionUtil.getExceptionMessage(e)); + } + } + + return checkResult; + } + + /** + * 获取传入日期的目标Date + * + * @param dayTime 传入日期字符串,正确格式为:2020-10-01 + * @param hourTime 传入的小时,格式为:(此处考虑mysql的datetime精度为秒,使用23:59:59足够) + * com.easyink.common.utils.DateUtils#START_TIME + * com.easyink.common.utils.DateUtils#END_TIME + * @return 目标日期字符串, 格式 “2020-10-01 00:00:00” ,格式错误则返回null + */ + private static String getTargetDate(String dayTime, String hourTime) { + if (isMatchFormat(dayTime, YYYY_MM_DD)) { + return dayTime + hourTime; + } + if (isMatchFormat(dayTime, YYYY_MM_DD_HH_MM_SS)) { + return dayTime; + } + return null; + } + + /** + * 获取一个月的最后一天 + * + * @param dateStr 月份的日期字符串 格式yyyy-MM + * @return 对应月的最后一天的日期字符串 格式 + * @throws ParseException 如传传入的日期字符串有误,会抛出格式转换异常 + */ + public static Date getLastDayOfMonth(String dateStr) throws ParseException { + SimpleDateFormat sdf = new SimpleDateFormat(YYYY_MM); + Date date = sdf.parse(dateStr); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + calendar.add(Calendar.MONTH, 1); + calendar.add(Calendar.DAY_OF_MONTH, -1); + return calendar.getTime(); + } + + /** + * 校验当前时间是否在指定的时间范围内 + * + * @param effectTimeOpen 开始时间 HH:mm + * @param effectTimeClose 结束时间HH:mm + * @return Boolean + */ + public static Boolean verifyCurrTimeEithinTimeRange(String effectTimeOpen, String effectTimeClose) { + if (org.apache.commons.lang3.StringUtils.isBlank(effectTimeOpen) || org.apache.commons.lang3.StringUtils.isBlank(effectTimeClose)) { + throw new CustomException(ResultTip.TIP_GENERAL_BAD_REQUEST); + } + if (!isMatchFormat(effectTimeOpen, HH_MM) + || !isMatchFormat(effectTimeClose, HH_MM)) { + throw new CustomException(ResultTip.TIP_TIME_FORMAT_ERROR); + } + String[] split = effectTimeOpen.split(":"); + if (split.length < 2) { + throw new CustomException(ResultTip.TIP_TIME_FORMAT_ERROR); + } + Integer effectTimeOpenHH = Integer.valueOf(split[0]); + Integer effectTimeOpenMM = Integer.valueOf(split[1]); + LocalDateTime localDateStart = LocalDateTime.now().withHour(effectTimeOpenHH).withMinute(effectTimeOpenMM); + + split = effectTimeClose.split(":"); + if (split.length < 2) { + throw new CustomException(ResultTip.TIP_TIME_FORMAT_ERROR); + } + Integer effectTimeCloseHH = Integer.valueOf(split[0]); + Integer effectTimeCloseMM = Integer.valueOf(split[1]); + LocalDateTime localDateEnd = LocalDateTime.now().withHour(effectTimeCloseHH).withMinute(effectTimeCloseMM); + + //校验开始时间和结束时间是否在合理范围(即:开始时间要小于结束时间) + if(localDateStart.isAfter(localDateEnd)){ + throw new CustomException(ResultTip.TIP_TIME_RANGE_FORMAT_ERROR); + } + LocalDateTime now = LocalDateTime.now(); + if (localDateStart.isBefore(now) && localDateEnd.isAfter(now)) { + return true; + } + return false; + } + /** + * 把unix时间戳转换成Date + * + * @param unixTimestamp + * @return {@link Date} + */ + public static Date unix2Date(long unixTimestamp) { + return new Date(unixTimestamp * 1000); + } + + /** + * 日期减几天 + */ + public static Date dateSubDay(Date date, Integer subDay) { + Calendar rightNow = Calendar.getInstance(); + //使用给定的 Date 设置此 Calendar 的时间。 + rightNow.setTime(date); + // 日期减 + rightNow.add(Calendar.DAY_OF_YEAR, -subDay); + //返回一个表示此 Calendar 时间值的 Date 对象。 + return rightNow.getTime(); + } + + /** + * 日期减几小时 + */ + public static Date dateSubHour(Date date, Integer subHour) { + Calendar rightNow = Calendar.getInstance(); + //使用给定的 Date 设置此 Calendar 的时间。 + rightNow.setTime(date); + // 日期减 + rightNow.add(Calendar.HOUR, -subHour); + //返回一个表示此 Calendar 时间值的 Date 对象。 + return rightNow.getTime(); + } + + + /** + * 校验SOP时间是否符合条件 + * + * @param nowDate 当前时间 + * @param createTime 加入sop的时间 + * @param alertType 提醒类型 + * @param alertData1 alertData1 + * @param alertData2 alertData2 + * @return boolean + */ + public static boolean isConformTime(Date nowDate, Date createTime, Integer alertType, Integer alertData1, String alertData2) { + LocalDateTime now = nowDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime().withSecond(0); + int hour; + int minute; + boolean flag = false; + LocalDateTime createLocalTime = createTime.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); + LocalDateTime finishTime; + switch (WeOperationsCenterSop.AlertTypeEnum.getAlertTypeEnumByType(alertType)) { + case TYPE_0: + finishTime = createLocalTime.plusHours(alertData1).plusMinutes(Integer.parseInt(alertData2)); + flag = finishTime.getYear() == now.getYear() && finishTime.getMonth() == now.getMonth() && finishTime.getDayOfMonth() == now.getDayOfMonth() + && finishTime.getHour() == now.getHour() && finishTime.getMinute() == now.getMinute(); + break; + case TYPE_1:{ + + LocalDateTime localDateTime = createLocalTime.plusDays(alertData1 - 1); + int alertHH = Integer.parseInt(alertData2.split(":")[0]); + int alertMM = Integer.parseInt(alertData2.split(":")[1]); + + flag = localDateTime.getYear() == now.getYear() && localDateTime.getMonthValue() == now.getMonthValue() && localDateTime.getDayOfMonth() == now.getDayOfMonth() + && now.getHour() == alertHH && now.getMinute() == alertMM; + } + break; + case TYPE_2: + hour = Integer.parseInt(alertData2.split(":")[0]); + minute = Integer.parseInt(alertData2.split(":")[1]); + flag = now.getHour() == hour && now.getMinute() == minute; + break; + case TYPE_3: + if (now.getDayOfWeek().getValue() != alertData1) { + break; + } + hour = Integer.parseInt(alertData2.split(":")[0]); + minute = Integer.parseInt(alertData2.split(":")[1]); + flag = now.getHour() == hour && now.getMinute() == minute; + break; + case TYPE_4: + if (now.getDayOfMonth() != alertData1) { + break; + } + hour = Integer.parseInt(alertData2.split(":")[0]); + minute = Integer.parseInt(alertData2.split(":")[1]); + flag = now.getHour() == hour && now.getMinute() == minute; + break; + case TYPE_5: + Date date = dateTime(YYYY_MM_DD_HH_MM, alertData2); + LocalDateTime activeTime = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime().withSecond(0); + flag = now.getYear() == activeTime.getYear() && now.getMonth() == activeTime.getMonth() && now.getDayOfMonth() == activeTime.getDayOfMonth() + && now.getHour() == activeTime.getHour() && now.getMinute() == activeTime.getMinute(); + break; + case TYPE_6: + //生日提前发送 + if (alertData1>0){ + alertData1 = Math.negateExact(alertData1); + } + case TYPE_7: { + if (alertData1 > 0){ + alertData1 -= 1; + } + LocalDateTime birthTime = createLocalTime.plusDays(alertData1); + int alertHH = Integer.parseInt(alertData2.split(":")[0]); + int alertMM = Integer.parseInt(alertData2.split(":")[1]); + + flag = birthTime.getMonthValue() == now.getMonthValue() && birthTime.getDayOfMonth() == now.getDayOfMonth() + && now.getHour() == alertHH && now.getMinute() == alertMM; + } + break; + } + return flag; + } + + /** + * 给时间拼上HHmm (且设置second=0) + * + * @param alertDate yyyy-MM-dd + * @param hour HH + * @param minute mm + * @return Date + */ + public static Date getSopTaskDateStart(String alertDate, Integer hour, Integer minute) { + if (org.apache.commons.lang3.StringUtils.isBlank(alertDate) || hour == null || minute == null) { + throw new CustomException(ResultTip.TIP_GENERAL_BAD_REQUEST); + } + if (!isMatchFormat(alertDate, YYYY_MM_DD)) { + throw new CustomException(ResultTip.TIP_TIME_FORMAT_ERROR); + } + Date date = dateTime(YYYY_MM_DD, alertDate); + LocalDateTime localDateTime = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime().withHour(hour).withMinute(minute).withSecond(0); + Date start = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant()); + return start; + } + + /** + * 给时间拼上HHmm (且设置second=59) + * + * @param alertDate yyyy-MM-dd + * @param hour HH + * @param minute mm + * @return Date + */ + public static Date getSopTaskDateEnd(String alertDate,Integer hour,Integer minute){ + if(org.apache.commons.lang3.StringUtils.isBlank(alertDate)||hour==null||minute==null){ + throw new CustomException(ResultTip.TIP_GENERAL_BAD_REQUEST); + } + if(!isMatchFormat(alertDate,YYYY_MM_DD)){ + throw new CustomException(ResultTip.TIP_TIME_FORMAT_ERROR); + } + Date date = dateTime(YYYY_MM_DD,alertDate); + LocalDateTime localDateTime = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime().withHour(hour).withMinute(minute).withSecond(59); + Date end = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant()); + return end; + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/utils/DictUtils.java b/easyink-common/src/main/java/com/easyink/common/utils/DictUtils.java new file mode 100644 index 0000000..e232860 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/utils/DictUtils.java @@ -0,0 +1,151 @@ +package com.easyink.common.utils; + +import com.easyink.common.constant.Constants; +import com.easyink.common.core.domain.entity.SysDictData; +import com.easyink.common.core.redis.RedisCache; +import com.easyink.common.utils.spring.SpringUtils; + +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +/** + * 字典工具类 + * + * @author admin + */ +public class DictUtils { + private DictUtils() { + } + + /** + * 分隔符 + */ + public static final String SEPARATOR = ","; + + /** + * 设置字典缓存 + * + * @param key 参数键 + * @param dictDatas 字典数据列表 + */ + public static void setDictCache(String key, List dictDatas) { + SpringUtils.getBean(RedisCache.class).setCacheObject(getCacheKey(key), dictDatas); + } + + /** + * 获取字典缓存 + * + * @param key 参数键 + * @return dictDatas 字典数据列表 + */ + public static List getDictCache(String key) { + Object cacheObj = SpringUtils.getBean(RedisCache.class).getCacheObject(getCacheKey(key)); + if (StringUtils.isNotNull(cacheObj)) { + return StringUtils.cast(cacheObj); + } + return Collections.emptyList(); + } + + /** + * 根据字典类型和字典值获取字典标签 + * + * @param dictType 字典类型 + * @param dictValue 字典值 + * @return 字典标签 + */ + public static String getDictLabel(String dictType, String dictValue) { + return getDictLabel(dictType, dictValue, SEPARATOR); + } + + /** + * 根据字典类型和字典标签获取字典值 + * + * @param dictType 字典类型 + * @param dictLabel 字典标签 + * @return 字典值 + */ + public static String getDictValue(String dictType, String dictLabel) { + return getDictValue(dictType, dictLabel, SEPARATOR); + } + + /** + * 根据字典类型和字典值获取字典标签 + * + * @param dictType 字典类型 + * @param dictValue 字典值 + * @param separator 分隔符 + * @return 字典标签 + */ + public static String getDictLabel(String dictType, String dictValue, String separator) { + StringBuilder propertyString = new StringBuilder(); + List datas = getDictCache(dictType); + + if (StringUtils.containsAny(separator, dictValue) && StringUtils.isNotEmpty(datas)) { + for (SysDictData dict : datas) { + for (String value : dictValue.split(separator)) { + if (value.equals(dict.getDictValue())) { + propertyString.append(dict.getDictLabel() + separator); + break; + } + } + } + } else { + for (SysDictData dict : datas) { + if (dictValue.equals(dict.getDictValue())) { + return dict.getDictLabel(); + } + } + } + return StringUtils.stripEnd(propertyString.toString(), separator); + } + + /** + * 根据字典类型和字典标签获取字典值 + * + * @param dictType 字典类型 + * @param dictLabel 字典标签 + * @param separator 分隔符 + * @return 字典值 + */ + public static String getDictValue(String dictType, String dictLabel, String separator) { + StringBuilder propertyString = new StringBuilder(); + List datas = getDictCache(dictType); + + if (StringUtils.containsAny(separator, dictLabel) && StringUtils.isNotEmpty(datas)) { + for (SysDictData dict : datas) { + for (String label : dictLabel.split(separator)) { + if (label.equals(dict.getDictLabel())) { + propertyString.append(dict.getDictValue() + separator); + break; + } + } + } + } else { + for (SysDictData dict : datas) { + if (dictLabel.equals(dict.getDictLabel())) { + return dict.getDictValue(); + } + } + } + return StringUtils.stripEnd(propertyString.toString(), separator); + } + + /** + * 清空字典缓存 + */ + public static void clearDictCache() { + Collection keys = SpringUtils.getBean(RedisCache.class).keys(Constants.SYS_DICT_KEY + "*"); + SpringUtils.getBean(RedisCache.class).deleteObject(keys); + } + + /** + * 设置cache key + * + * @param configKey 参数键 + * @return 缓存键key + */ + public static String getCacheKey(String configKey) { + return Constants.SYS_DICT_KEY + configKey; + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/utils/ExceptionUtil.java b/easyink-common/src/main/java/com/easyink/common/utils/ExceptionUtil.java new file mode 100644 index 0000000..56dbe45 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/utils/ExceptionUtil.java @@ -0,0 +1,36 @@ +package com.easyink.common.utils; + +import org.apache.commons.lang3.exception.ExceptionUtils; + +import java.io.PrintWriter; +import java.io.StringWriter; + +/** + * 错误信息处理类。 + * + * @author admin + */ +public class ExceptionUtil { + private ExceptionUtil(){} + /** + * 获取exception的详细错误信息。 + */ + public static String getExceptionMessage(Throwable e) { + StringWriter sw = new StringWriter(); + e.printStackTrace(new PrintWriter(sw, true)); + return sw.toString(); + } + + public static String getRootErrorMseeage(Exception e) { + Throwable root = ExceptionUtils.getRootCause(e); + root = (root == null ? e : root); + if (root == null) { + return ""; + } + String msg = root.getMessage(); + if (msg == null) { + return "null"; + } + return StringUtils.defaultString(msg); + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/utils/LogUtils.java b/easyink-common/src/main/java/com/easyink/common/utils/LogUtils.java new file mode 100644 index 0000000..60d2dbf --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/utils/LogUtils.java @@ -0,0 +1,15 @@ +package com.easyink.common.utils; + +/** + * 处理并记录日志文件 + * + * @author admin + */ +public class LogUtils { + public static String getBlock(Object msg) { + if (msg == null) { + msg = ""; + } + return "[" + msg.toString() + "]"; + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/utils/MessageUtils.java b/easyink-common/src/main/java/com/easyink/common/utils/MessageUtils.java new file mode 100644 index 0000000..df2e847 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/utils/MessageUtils.java @@ -0,0 +1,24 @@ +package com.easyink.common.utils; + +import com.easyink.common.utils.spring.SpringUtils; +import org.springframework.context.MessageSource; +import org.springframework.context.i18n.LocaleContextHolder; + +/** + * 获取i18n资源文件 + * + * @author admin + */ +public class MessageUtils { + /** + * 根据消息键和参数 获取消息 委托给spring messageSource + * + * @param code 消息键 + * @param args 参数 + * @return 获取国际化翻译值 + */ + public static String message(String code, Object... args) { + MessageSource messageSource = SpringUtils.getBean(MessageSource.class); + return messageSource.getMessage(code, args, LocaleContextHolder.getLocale()); + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/utils/MyDateUtil.java b/easyink-common/src/main/java/com/easyink/common/utils/MyDateUtil.java new file mode 100644 index 0000000..e7b6384 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/utils/MyDateUtil.java @@ -0,0 +1,47 @@ +package com.easyink.common.utils; + +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.exception.ExceptionUtils; + +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +/** + * 类名: MyDateUtil + * 这个是获取时间的开始和结束 + * + * @author 佚名 + * @date 2021/9/1 23:14 + */ +@Slf4j +public class MyDateUtil { + /** + * + * @param days 第几天 如:-1代表昨天 + * @param type 0代表一天的开始,1代表一天的结束 + * @return + */ + public static Long strToDate(int days, Integer type) { + Long time = null; + DateFormat format2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date date = null; + Calendar cale = Calendar.getInstance(); + cale.add(Calendar.DATE, days); + String tarday = new SimpleDateFormat("yyyy-MM-dd").format(cale.getTime()); + if (type.equals(0)) { + tarday += " 00:00:00"; + } else { + tarday += " 23:59:59"; + } + // String转Date + try { + date = format2.parse(tarday); + time = date.getTime() / 1000; + } catch (ParseException e) { + log.error("字符串转日期异常 ex:【{}】", ExceptionUtils.getStackTrace(e)); + } + return time; + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/utils/OsUtils.java b/easyink-common/src/main/java/com/easyink/common/utils/OsUtils.java new file mode 100644 index 0000000..61140bd --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/utils/OsUtils.java @@ -0,0 +1,13 @@ +package com.easyink.common.utils; + + +/** + * 操作系统相关判断 + */ +public class OsUtils { + + public static boolean isWindows() { + String osName = System.getProperties().getProperty("os.name"); + return osName.toUpperCase().indexOf("WINDOWS") != -1; + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/utils/QREncode.java b/easyink-common/src/main/java/com/easyink/common/utils/QREncode.java new file mode 100644 index 0000000..6d9d07d --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/utils/QREncode.java @@ -0,0 +1,188 @@ +package com.easyink.common.utils; + +import com.easyink.common.constant.Constants; +import com.google.zxing.BarcodeFormat; +import com.google.zxing.EncodeHintType; +import com.google.zxing.common.BitMatrix; +import com.google.zxing.qrcode.QRCodeWriter; +import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.exception.ExceptionUtils; +import org.springframework.mock.web.MockMultipartFile; +import org.springframework.web.multipart.MultipartFile; + +import javax.imageio.ImageIO; +import java.awt.*; +import java.awt.geom.RoundRectangle2D; +import java.awt.image.BufferedImage; +import java.io.*; +import java.net.URL; +import java.util.HashMap; +import java.util.UUID; + +@Slf4j +public class QREncode { + + private static final int BLACK = 0xFF000000; + private static final int WHITE = 0xFFFFFFFF; + /** + * 默认宽度 + */ + private static final Integer WIDTH = 396; + /** + * 默认高度 + */ + private static final Integer HEIGHT = 396; + + /** + * LOGO 默认宽度 + */ + private static final Integer LOGO_WIDTH = 85; + /** + * LOGO 默认高度 + */ + private static final Integer LOGO_HEIGHT = 85; + + /** + * 图片格式 + */ + private static final String IMAGE_FORMAT = "png"; + + + private QREncode() { + } + + + public static BufferedImage toBufferedImage(BitMatrix matrix) { + int width = matrix.getWidth(); + int height = matrix.getHeight(); + BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); + for (int x = 0; x < width; x++) { + for (int y = 0; y < height; y++) { + image.setRGB(x, y, matrix.get(x, y) ? BLACK : WHITE); + } + } + return image; + } + + public static void writeToFile(BitMatrix matrix, String format, File file) + throws IOException { + BufferedImage image = toBufferedImage(matrix); + if (!ImageIO.write(image, format, file)) { + throw new IOException("Could not write an image of format " + format + " to " + file); + } + } + + public static void writeToStream(BitMatrix matrix, String format, OutputStream stream) + throws IOException { + BufferedImage image = toBufferedImage(matrix); + if (!ImageIO.write(image, format, stream)) { + throw new IOException("Could not write an image of format " + format); + } + } + + /** + * 生成带头像的二维码 + * + * @param content 内容 + * @param logoUrl logo在线地址 + * @return + */ + public static BufferedImage crateQRCode(String content, String logoUrl) { + if (org.apache.commons.lang3.StringUtils.isNotBlank(content)) { + HashMap hints = new HashMap<>(4); + // 指定字符编码为utf-8 + hints.put(EncodeHintType.CHARACTER_SET, Constants.UTF8); + // 指定二维码的纠错等级为中级 + hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M); + // 设置图片的边距 + hints.put(EncodeHintType.MARGIN, 1); + try { + QRCodeWriter writer = new QRCodeWriter(); + BitMatrix bitMatrix = writer.encode(content, BarcodeFormat.QR_CODE, WIDTH, HEIGHT, hints); + BufferedImage bufferedImage = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB); + for (int x = 0; x < WIDTH; x++) { + for (int y = 0; y < HEIGHT; y++) { + bufferedImage.setRGB(x, y, bitMatrix.get(x, y) ? 0xFF000000 : 0xFFFFFFFF); + } + } + if (org.apache.commons.lang3.StringUtils.isNotBlank(logoUrl)) { + insertLogo(bufferedImage, logoUrl); + } + return bufferedImage; + } catch (Exception e) { + log.error("Exception ex:【{}】", ExceptionUtils.getStackTrace(e)); + } + } + return null; + } + + /** + * 二维码插入logo + * + * @param source 二维码 + * @param logoUrl logo 在线地址 + * @throws Exception + */ + private static void insertLogo(BufferedImage source, String logoUrl) throws IOException { + // logo 源可为 File/InputStream/URL + Image src = ImageIO.read(new URL(logoUrl)); + // 插入LOGO + Graphics2D graph = source.createGraphics(); + int x = (WIDTH - LOGO_WIDTH) / 2; + int y = (HEIGHT - LOGO_HEIGHT) / 2; + graph.drawImage(src, x, y, LOGO_WIDTH, LOGO_HEIGHT, null); + Shape shape = new RoundRectangle2D.Float(x, y, LOGO_WIDTH, LOGO_HEIGHT, 6, 6); + graph.setStroke(new BasicStroke(3f)); + graph.draw(shape); + graph.dispose(); + } + + /** + * 生成带二维码并生成流文件进行传输 + * + * @param content 内容 + * @param output 输出流 + * @throws Exception + */ + public void getQRCode(String content, OutputStream output) throws IOException { + BufferedImage image = crateQRCode(content, null); + if (StringUtils.isNotNull(image)) { + ImageIO.write(image, IMAGE_FORMAT, output); + } + } + + /** + * 生成带logo的二维码并生成流文件进行传输 + * + * @param content 内容 + * @param logoUrl logo资源 + * @param output 输出流 + * @throws Exception + */ + public void getQRCode(String content, String logoUrl, OutputStream output) throws IOException { + BufferedImage image = crateQRCode(content, logoUrl); + if (StringUtils.isNotNull(image)) { + ImageIO.write(image, IMAGE_FORMAT, output); + } + } + + public static InputStream writeToInputStream(BufferedImage bufferedImage) throws IOException { + ByteArrayOutputStream os = new ByteArrayOutputStream(); + try { + ImageIO.write(bufferedImage, IMAGE_FORMAT, os); + return new ByteArrayInputStream(os.toByteArray()); + } catch (Exception e) { + throw new IOException(e.getMessage(), e); + } + } + + public static MultipartFile getQRCodeMultipartFile(String content, String logoUrl) throws IOException { + BufferedImage bufferedImage = crateQRCode(content, logoUrl); + //读取图片转换为 BufferedImage + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + ImageIO.write(bufferedImage, "jpg", baos); + //转换为MultipartFile + return new MockMultipartFile("groupQrCode", UUID.randomUUID().toString().substring(0, 8) + "groupQrCode.jpg", "text/plain", baos.toByteArray()); + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/utils/ReflectUtil.java b/easyink-common/src/main/java/com/easyink/common/utils/ReflectUtil.java new file mode 100644 index 0000000..50cab4f --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/utils/ReflectUtil.java @@ -0,0 +1,125 @@ +package com.easyink.common.utils; + +import com.google.common.collect.Maps; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.beanutils.PropertyUtilsBean; +import org.springframework.cglib.beans.BeanGenerator; +import org.springframework.cglib.beans.BeanMap; + +import java.beans.PropertyDescriptor; +import java.util.Map; + +/** + * 动态添加属性和属性值 + */ +@Slf4j +public class ReflectUtil { + + /** + * 动态添加属性 + * + * @param dest 原对象 + * @param addProperties 新加属性的信息 + * @return {@link Object} 新增属性和属性值之后的对象 + */ + public static Object getTarget(Object dest, Map addProperties) { + // get property map + PropertyUtilsBean propertyUtilsBean = new PropertyUtilsBean(); + PropertyDescriptor[] descriptors = propertyUtilsBean.getPropertyDescriptors(dest); + Map propertyMap = Maps.newHashMap(); + for (PropertyDescriptor d : descriptors) { + if (!"class".equalsIgnoreCase(d.getName())) { + propertyMap.put(d.getName(), d.getPropertyType()); + } + } + // add extra properties + addProperties.forEach((k, v) -> propertyMap.put(k, v.getClass())); + // new dynamic bean + DynamicBean dynamicBean = new DynamicBean(dest.getClass(), propertyMap); + // add old value + propertyMap.forEach((k, v) -> { + try { + // filter extra properties + if (!addProperties.containsKey(k)) { + dynamicBean.setValue(k, propertyUtilsBean.getNestedProperty(dest, k)); + } + } catch (Exception e) { + log.error(e.getMessage(), e); + } + }); + // add extra value + addProperties.forEach((k, v) -> { + try { + dynamicBean.setValue(k, v); + } catch (Exception e) { + log.error(e.getMessage(), e); + } + }); + return dynamicBean.getTarget(); + } + + public static class DynamicBean { + /** + * 目标对象 + */ + private Object target; + + /** + * 属性集合 + */ + private BeanMap beanMap; + + public DynamicBean(Class superclass, Map propertyMap) { + this.target = generateBean(superclass, propertyMap); + this.beanMap = BeanMap.create(this.target); + } + + /** + * bean 添加属性和值 + * + * @param property + * @param value + */ + public void setValue(String property, Object value) { + beanMap.put(property, value); + } + + /** + * 获取属性值 + * + * @param property + * @return + */ + public Object getValue(String property) { + return beanMap.get(property); + } + + /** + * 获取对象 + * + * @return + */ + public Object getTarget() { + return this.target; + } + + /** + * 根据属性生成对象 + * + * @param superclass + * @param propertyMap + * @return + */ + private Object generateBean(Class superclass, Map propertyMap) { + BeanGenerator generator = new BeanGenerator(); + if (null != superclass) { + generator.setSuperclass(superclass); + } + BeanGenerator.addProperties(generator, propertyMap); + return generator.create(); + } + + } + + +} diff --git a/easyink-common/src/main/java/com/easyink/common/utils/SecurityUtils.java b/easyink-common/src/main/java/com/easyink/common/utils/SecurityUtils.java new file mode 100644 index 0000000..8bbbe7e --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/utils/SecurityUtils.java @@ -0,0 +1,53 @@ +package com.easyink.common.utils; + +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; + +/** + * 安全服务工具类 + * + * @author admin + */ +public class SecurityUtils { + + /** + * 获取Authentication + */ + public static Authentication getAuthentication() { + return SecurityContextHolder.getContext().getAuthentication(); + } + + /** + * 生成BCryptPasswordEncoder密码 + * + * @param password 密码 + * @return 加密字符串 + */ + public static String encryptPassword(String password) { + BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); + return passwordEncoder.encode(password); + } + + /** + * 判断密码是否相同 + * + * @param rawPassword 真实密码 + * @param encodedPassword 加密后字符 + * @return 结果 + */ + public static boolean matchesPassword(String rawPassword, String encodedPassword) { + BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); + return passwordEncoder.matches(rawPassword, encodedPassword); + } + + /** + * 是否为管理员 + * + * @param userId 用户ID + * @return 结果 + */ + public static boolean isAdmin(Long userId) { + return userId != null && 1L == userId; + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/utils/ServletUtils.java b/easyink-common/src/main/java/com/easyink/common/utils/ServletUtils.java new file mode 100644 index 0000000..409baeb --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/utils/ServletUtils.java @@ -0,0 +1,126 @@ +package com.easyink.common.utils; + +import com.easyink.common.core.text.Convert; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.exception.ExceptionUtils; +import org.springframework.web.context.request.RequestAttributes; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; +import java.io.IOException; + +/** + * 客户端工具类 + * + * @author admin + */ +@Slf4j +public class ServletUtils { + private ServletUtils() { + } + + /** + * 获取String参数 + */ + public static String getParameter(String name) { + return getRequest().getParameter(name); + } + + /** + * 获取String参数 + */ + public static String getParameter(String name, String defaultValue) { + return Convert.toStr(getRequest().getParameter(name), defaultValue); + } + + /** + * 获取Integer参数 + */ + public static Integer getParameterToInt(String name) { + return Convert.toInt(getRequest().getParameter(name)); + } + + /** + * 获取Integer参数 + */ + public static Integer getParameterToInt(String name, Integer defaultValue) { + return Convert.toInt(getRequest().getParameter(name), defaultValue); + } + + /** + * 获取request + */ + public static HttpServletRequest getRequest() { + return getRequestAttributes().getRequest(); + } + + /** + * 获取response + */ + public static HttpServletResponse getResponse() { + return getRequestAttributes().getResponse(); + } + + /** + * 获取session + */ + public static HttpSession getSession() { + return getRequest().getSession(); + } + + public static ServletRequestAttributes getRequestAttributes() { + RequestAttributes attributes = RequestContextHolder.getRequestAttributes(); + return (ServletRequestAttributes) attributes; + } + + /** + * 将字符串渲染到客户端 + * + * @param response 渲染对象 + * @param string 待渲染的字符串 + * @return null + */ + public static String renderString(HttpServletResponse response, String string) { + try { + response.setStatus(200); + response.setContentType("application/json"); + response.setCharacterEncoding("utf-8"); + response.getWriter().print(string); + } catch (IOException e) { + log.error("IOException ex:【{}】", ExceptionUtils.getStackTrace(e)); + } + return null; + } + + /** + * 是否是Ajax异步请求 + * + * @param request + */ + public static boolean isAjaxRequest(HttpServletRequest request) { + String application = "application/json"; + String accept = request.getHeader("accept"); + if (accept != null && accept.indexOf(application) != -1) { + return true; + } + + String xRequestedWith = request.getHeader("X-Requested-With"); + String xmlHttpRequest = "XMLHttpRequest"; + String json = ".json"; + String xml = ".xml"; + if (xRequestedWith != null && xRequestedWith.indexOf(xmlHttpRequest) != -1) { + return true; + } + + String uri = request.getRequestURI(); + if (StringUtils.inStringIgnoreCase(uri, json, xml)) { + return true; + } + + String ajax = request.getParameter("__ajax"); + return StringUtils.inStringIgnoreCase(ajax, "json", "xml"); + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/utils/SnowFlakeUtil.java b/easyink-common/src/main/java/com/easyink/common/utils/SnowFlakeUtil.java new file mode 100644 index 0000000..4671739 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/utils/SnowFlakeUtil.java @@ -0,0 +1,21 @@ +package com.easyink.common.utils; + +import cn.hutool.core.lang.Snowflake; +import cn.hutool.core.util.IdUtil; + +/** + * @author admin + * @Description: + * @Date: create in 2020/9/6 0006 21:44 + */ +public class SnowFlakeUtil { + /** + * 派号器workid:0~31 + * 机房datacenterid:0~31 + */ + private static Snowflake snowflake = IdUtil.createSnowflake(1, 1); + + public static Long nextId() { + return snowflake.nextId(); + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/utils/StringUtils.java b/easyink-common/src/main/java/com/easyink/common/utils/StringUtils.java new file mode 100644 index 0000000..a01e90f --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/utils/StringUtils.java @@ -0,0 +1,459 @@ +package com.easyink.common.utils; + +import com.easyink.common.constant.WeConstans; +import com.easyink.common.core.text.StrFormatter; +import com.easyink.common.enums.ResultTip; +import com.easyink.common.exception.CustomException; + +import java.util.*; + +/** + * 字符串工具类 + * + * @author admin + */ +public class StringUtils extends org.apache.commons.lang3.StringUtils { + /** + * 空字符串 + */ + private static final String NULLSTR = ""; + + /** + * 下划线 + */ + private static final char SEPARATOR = '_'; + + /** + * 获取参数不为空值 + * + * @param value defaultValue 要判断的value + * @return value 返回值 + */ + public static T nvl(T value, T defaultValue) { + return value != null ? value : defaultValue; + } + + /** + * * 判断一个Collection是否为空, 包含List,Set,Queue + * + * @param coll 要判断的Collection + * @return true:为空 false:非空 + */ + public static boolean isEmpty(Collection coll) { + return isNull(coll) || coll.isEmpty(); + } + + /** + * * 判断一个Collection是否非空,包含List,Set,Queue + * + * @param coll 要判断的Collection + * @return true:非空 false:空 + */ + public static boolean isNotEmpty(Collection coll) { + return !isEmpty(coll); + } + + /** + * * 判断一个对象数组是否为空 + * + * @param objects 要判断的对象数组 + * * @return true:为空 false:非空 + */ + public static boolean isEmpty(Object[] objects) { + return isNull(objects) || (objects.length == 0); + } + + /** + * * 判断一个对象数组是否非空 + * + * @param objects 要判断的对象数组 + * @return true:非空 false:空 + */ + public static boolean isNotEmpty(Object[] objects) { + return !isEmpty(objects); + } + + /** + * * 判断一个Map是否为空 + * + * @param map 要判断的Map + * @return true:为空 false:非空 + */ + public static boolean isEmpty(Map map) { + return isNull(map) || map.isEmpty(); + } + + /** + * * 判断一个Map是否为空 + * + * @param map 要判断的Map + * @return true:非空 false:空 + */ + public static boolean isNotEmpty(Map map) { + return !isEmpty(map); + } + + /** + * * 判断一个字符串是否为空串 + * + * @param str String + * @return true:为空 false:非空 + */ + public static boolean isEmpty(String str) { + return isNull(str) || NULLSTR.equals(str.trim()); + } + + /** + * * 判断一个字符串是否为非空串 + * + * @param str String + * @return true:非空串 false:空串 + */ + public static boolean isNotEmpty(String str) { + return !isEmpty(str); + } + + /** + * * 判断一个对象是否为空 + * + * @param object Object + * @return true:为空 false:非空 + */ + public static boolean isNull(Object object) { + return object == null; + } + + /** + * * 判断一个对象是否非空 + * + * @param object Object + * @return true:非空 false:空 + */ + public static boolean isNotNull(Object object) { + return !isNull(object); + } + + /** + * * 判断一个对象是否是数组类型(Java基本型别的数组) + * + * @param object 对象 + * @return true:是数组 false:不是数组 + */ + public static boolean isArray(Object object) { + return isNotNull(object) && object.getClass().isArray(); + } + + /** + * 去空格 + */ + public static String trim(String str) { + return (str == null ? "" : str.trim()); + } + + /** + * 截取字符串 + * + * @param str 字符串 + * @param start 开始 + * @return 结果 + */ + public static String substring(final String str, int start) { + if (str == null) { + return NULLSTR; + } + + if (start < 0) { + start = str.length() + start; + } + + if (start < 0) { + start = 0; + } + if (start > str.length()) { + return NULLSTR; + } + + return str.substring(start); + } + + /** + * 截取字符串 + * + * @param str 字符串 + * @param start 开始 + * @param end 结束 + * @return 结果 + */ + public static String substring(final String str, int start, int end) { + if (str == null) { + return NULLSTR; + } + + if (end < 0) { + end = str.length() + end; + } + if (start < 0) { + start = str.length() + start; + } + + if (end > str.length()) { + end = str.length(); + } + + if (start > end) { + return NULLSTR; + } + + if (start < 0) { + start = 0; + } + if (end < 0) { + end = 0; + } + + return str.substring(start, end); + } + + /** + * 格式化文本, {} 表示占位符
+ * 此方法只是简单将占位符 {} 按照顺序替换为参数
+ * 如果想输出 {} 使用 \\转义 { 即可,如果想输出 {} 之前的 \ 使用双转义符 \\\\ 即可
+ * 例:
+ * 通常使用:format("this is {} for {}", "a", "b") -> this is a for b
+ * 转义{}: format("this is \\{} for {}", "a", "b") -> this is \{} for a
+ * 转义\: format("this is \\\\{} for {}", "a", "b") -> this is \a for b
+ * + * @param template 文本模板,被替换的部分用 {} 表示 + * @param params 参数值 + * @return 格式化后的文本 + */ + public static String format(String template, Object... params) { + if (isEmpty(params) || isEmpty(template)) { + return template; + } + return StrFormatter.format(template, params); + } + + /** + * 字符串转set + * + * @param str 字符串 + * @param sep 分隔符 + * @return set集合 + */ + public static final Set str2Set(String str, String sep) { + return new HashSet<>(str2List(str, sep, true, false)); + } + + /** + * 字符串转list + * + * @param str 字符串 + * @param sep 分隔符 + * @param filterBlank 过滤纯空白 + * @param trim 去掉首尾空白 + * @return list集合 + */ + public static final List str2List(String str, String sep, boolean filterBlank, boolean trim) { + List list = new ArrayList<>(); + if (StringUtils.isEmpty(str)) { + return list; + } + + // 过滤空白字符串 + if (filterBlank && StringUtils.isBlank(str)) { + return list; + } + String[] split = str.split(sep); + for (String string : split) { + if (filterBlank && StringUtils.isBlank(string)) { + continue; + } + if (trim) { + string = string.trim(); + } + list.add(string); + } + + return list; + } + + /** + * 下划线转驼峰命名 + */ + public static String toUnderScoreCase(String str) { + if (str == null) { + return null; + } + StringBuilder sb = new StringBuilder(); + // 前置字符是否大写 + boolean preCharIsUpperCase = true; + // 当前字符是否大写 + boolean curreCharIsUpperCase = true; + // 下一字符是否大写 + boolean nexteCharIsUpperCase = true; + for (int i = 0; i < str.length(); i++) { + char c = str.charAt(i); + if (i > 0) { + preCharIsUpperCase = Character.isUpperCase(str.charAt(i - 1)); + } else { + preCharIsUpperCase = false; + } + + curreCharIsUpperCase = Character.isUpperCase(c); + + if (i < (str.length() - 1)) { + nexteCharIsUpperCase = Character.isUpperCase(str.charAt(i + 1)); + } + + if (preCharIsUpperCase && curreCharIsUpperCase && !nexteCharIsUpperCase) { + sb.append(SEPARATOR); + } else if ((i != 0 && !preCharIsUpperCase) && curreCharIsUpperCase) { + sb.append(SEPARATOR); + } + sb.append(Character.toLowerCase(c)); + } + + return sb.toString(); + } + + /** + * 是否包含字符串 + * + * @param str 验证字符串 + * @param strs 字符串组 + * @return 包含返回true + */ + public static boolean inStringIgnoreCase(String str, String... strs) { + if (str != null && strs != null) { + for (String s : strs) { + if (str.equalsIgnoreCase(trim(s))) { + return true; + } + } + } + return false; + } + + /** + * 将下划线大写方式命名的字符串转换为驼峰式。如果转换前的下划线大写方式命名的字符串为空,则返回空字符串。 例如:HELLO_WORLD->HelloWorld + * + * @param name 转换前的下划线大写方式命名的字符串 + * @return 转换后的驼峰式命名的字符串 + */ + public static String convertToCamelCase(String name) { + StringBuilder result = new StringBuilder(); + // 快速检查 + if (name == null || name.isEmpty()) { + // 没必要转换 + return ""; + } else if (!name.contains("_")) { + // 不含下划线,仅将首字母大写 + return name.substring(0, 1).toUpperCase() + name.substring(1); + } + // 用下划线将原始字符串分割 + String[] camels = name.split("_"); + for (String camel : camels) { + // 跳过原始字符串中开头、结尾的下换线或双重下划线 + if (camel.isEmpty()) { + continue; + } + // 首字母大写 + result.append(camel.substring(0, 1).toUpperCase()); + result.append(camel.substring(1).toLowerCase()); + } + return result.toString(); + } + + /** + * 驼峰式命名法 例如:user_name->userName + */ + public static String toCamelCase(String s) { + if (s == null) { + return null; + } + s = s.toLowerCase(); + StringBuilder sb = new StringBuilder(s.length()); + boolean upperCase = false; + for (int i = 0; i < s.length(); i++) { + char c = s.charAt(i); + + if (c == SEPARATOR) { + upperCase = true; + } else if (upperCase) { + sb.append(Character.toUpperCase(c)); + upperCase = false; + } else { + sb.append(c); + } + } + return sb.toString(); + } + + @SuppressWarnings("unchecked") + public static T cast(Object obj) { + return (T) obj; + } + + /** + * 将数组使用分隔符变为字符串 + * + * @param array + * @param separator + * @return + */ + public static String join(Object[] array, String separator) { + return join(array, 0, array.length, separator); + } + + private static String join(Object[] array, int startIndex, int endIndex, String separator) { + if (separator == null) { + return ""; + } + StringBuilder sb = new StringBuilder(); + + for (int i = startIndex; i < endIndex; i++) { + /** + * 在前面加,就不会出瑞最后多一个分隔符的现象同时判断不是第一个才加分隔符 + */ + if (i > startIndex) { + sb.append(separator); + } + + if (array[i] != null) { + sb.append(array[i]); + } + } + return sb.toString(); + + } + + /** + * 企微用户客户机器判断 + * + * @param str + * @return + */ + public static int weCustomTypeJudgment(String str) { + if (isNotEmpty(str)) { + if (str.startsWith("wo") || str.startsWith("wm")) { + return WeConstans.ID_TYPE_EX; + } + if (str.startsWith("wb")) { + return WeConstans.ID_TYPE_MACHINE; + } + } + return WeConstans.ID_TYPE_USER; + } + + /** + * 校验corpId + * + * @param corpId 企业id + */ + public static void checkCorpId(String corpId) { + if (StringUtils.isBlank(corpId)) { + throw new CustomException(ResultTip.TIP_MISS_CORP_ID); + } + } +} \ No newline at end of file diff --git a/easyink-common/src/main/java/com/easyink/common/utils/Threads.java b/easyink-common/src/main/java/com/easyink/common/utils/Threads.java new file mode 100644 index 0000000..ead44f4 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/utils/Threads.java @@ -0,0 +1,93 @@ +package com.easyink.common.utils; + +import com.google.common.util.concurrent.ThreadFactoryBuilder; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.exception.ExceptionUtils; + +import java.util.concurrent.*; + +/** + * 线程相关工具类. + * + * @author admin + */ +@Slf4j +@NoArgsConstructor(access = AccessLevel.PRIVATE) +public class Threads { + + private static final int CORE_POOL_SIZE = Runtime.getRuntime().availableProcessors(); + + private static final ThreadFactory NAMED_THREAD_FACTORY = new ThreadFactoryBuilder().setNameFormat("common-pool-%d").build(); + + + /** + * 创建线程池 + */ + public static final ThreadPoolExecutor SINGLE_THREAD_POOL = new ThreadPoolExecutor(CORE_POOL_SIZE, CORE_POOL_SIZE + 1, 10L, TimeUnit.SECONDS, + new SynchronousQueue<>(), NAMED_THREAD_FACTORY, (r, executor) -> { + try { + executor.getQueue().put(r); + } catch (InterruptedException e) { + log.error("InterruptedException e:{}", ExceptionUtils.getStackTrace(e)); + } + }); + + + /** + * sleep等待,单位为毫秒 + */ + public static void sleep(long milliseconds) throws InterruptedException { + Thread.sleep(milliseconds); + } + + /** + * 停止线程池 + * 先使用shutdown, 停止接收新任务并尝试完成所有已存在任务. + * 如果超时, 则调用shutdownNow, 取消在workQueue中Pending的任务,并中断所有阻塞函数. + * 如果仍人超時,則強制退出. + * 另对在shutdown时线程本身被调用中断做了处理. + */ + public static void shutdownAndAwaitTermination(ExecutorService pool) { + int timeOut = 120; + if (pool != null && !pool.isShutdown()) { + pool.shutdown(); + try { + if (!pool.awaitTermination(timeOut, TimeUnit.SECONDS)) { + pool.shutdownNow(); + if (!pool.awaitTermination(timeOut, TimeUnit.SECONDS)) { + log.info("Pool did not terminate"); + } + } + } catch (InterruptedException ie) { + pool.shutdownNow(); + Thread.currentThread().interrupt(); + } + } + } + + /** + * 打印线程异常信息 + */ + public static void printException(Runnable r, Throwable t) { + if (t == null && r instanceof Future) { + try { + Future future = (Future) r; + if (future.isDone()) { + future.get(); + } + } catch (CancellationException ce) { + t = ce; + } catch (ExecutionException ee) { + t = ee.getCause(); + } catch (InterruptedException ie) { + Thread.currentThread().interrupt(); + } + } + if (t != null) { + log.error(t.getMessage(), t); + } + } + +} diff --git a/easyink-common/src/main/java/com/easyink/common/utils/TreeUtil.java b/easyink-common/src/main/java/com/easyink/common/utils/TreeUtil.java new file mode 100644 index 0000000..f43f419 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/utils/TreeUtil.java @@ -0,0 +1,53 @@ +package com.easyink.common.utils; + + +import com.easyink.common.core.domain.Tree; + +import java.util.ArrayList; +import java.util.List; + +/** + * 树工具类 + */ +public class TreeUtil { + + private final static Long TOP_NODE_ID = 0L; + + /** + * 御用构建树 + * + * @param nodes nodes + * @return List + */ + public static List> build(List> nodes) { + if (nodes == null) { + return null; + } + List> topNodes = new ArrayList<>(); + nodes.forEach(node -> { + Long pid = node.getParentId(); + if (pid == null || TOP_NODE_ID.equals(pid)) { + topNodes.add(node); + return; + } + for (Tree n : nodes) { + Long id = n.getId(); + if (id != null && id.equals(pid)) { + if (n.getChildren() == null) { + n.initChildren(); + } + n.getChildren().add(node); + node.setHasParent(true); + n.setHasChildren(true); + n.setHasParent(true); + return; + } + } + if (topNodes.isEmpty()) { + topNodes.add(node); + } + }); + return topNodes; + } + +} \ No newline at end of file diff --git a/easyink-common/src/main/java/com/easyink/common/utils/XmlUtil.java b/easyink-common/src/main/java/com/easyink/common/utils/XmlUtil.java new file mode 100644 index 0000000..be0efb0 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/utils/XmlUtil.java @@ -0,0 +1,76 @@ +package com.easyink.common.utils; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.dom4j.*; + +import java.util.List; + +/** + * 类名: XmlUtil + * + * @author: 1*+ + * @date: 2021-11-19 15:11 + */ +public class XmlUtil { + + + /** + * String 转 org.dom4j.Document + * + * @param xml + * @return + * @throws DocumentException + */ + private static Document strToDocument(String xml) throws DocumentException { + return DocumentHelper.parseText(xml); + } + + /** + * xml 转 com.alibaba.fastjson.JSONObject + * + * @param xml + * @return + * @throws DocumentException + */ + public static JSONObject documentToJSONObject(String xml) { + JSONObject jsonObject = null; + try { + jsonObject = elementToJSONObject(strToDocument(xml).getRootElement()); + } catch (DocumentException e) { + e.printStackTrace(); + } finally { + return jsonObject; + } + } + + + /** + * org.dom4j.Element 转 com.alibaba.fastjson.JSONObject + * + * @param node + * @return + */ + public static JSONObject elementToJSONObject(Element node) { + JSONObject result = new JSONObject(); + // 当前节点的名称、文本内容和属性 + List listAttr = node.attributes();// 当前节点的所有属性的list + for (Attribute attr : listAttr) {// 遍历当前节点的所有属性 + result.put(attr.getName(), attr.getValue()); + } + // 递归遍历当前节点所有的子节点 + List listElement = node.elements();// 所有一级子节点的list + if (!listElement.isEmpty()) { + for (Element e : listElement) {// 遍历所有一级子节点 + if (e.attributes().isEmpty() && e.elements().isEmpty()) // 判断一级节点是否有属性和子节点 + result.put(e.getName(), e.getTextTrim());// 沒有则将当前节点作为上级节点的属性对待 + else { + if (!result.containsKey(e.getName())) // 判断父节点是否存在该一级节点名称的属性 + result.put(e.getName(), new JSONArray());// 没有则创建 + ((JSONArray) result.get(e.getName())).add(elementToJSONObject(e));// 将该一级节点放入该节点名称的属性对应的值中 + } + } + } + return result; + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/utils/bean/BeanUtils.java b/easyink-common/src/main/java/com/easyink/common/utils/bean/BeanUtils.java new file mode 100644 index 0000000..093b021 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/utils/bean/BeanUtils.java @@ -0,0 +1,259 @@ +package com.easyink.common.utils.bean; + +import com.esotericsoftware.reflectasm.MethodAccess; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.ObjectUtils; +import org.apache.commons.lang3.exception.ExceptionUtils; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * Bean 工具类 + * + * @author admin + */ +@Slf4j +public class BeanUtils extends org.springframework.beans.BeanUtils { + /** + * Bean方法名中属性名开始的下标 + */ + private static final int BEAN_METHOD_PROP_INDEX = 3; + + /** + * 匹配getter方法的正则表达式 + */ + private static final Pattern GET_PATTERN = Pattern.compile("get(\\p{javaUpperCase}\\w*)"); + + /** + * 匹配setter方法的正则表达式 + */ + private static final Pattern SET_PATTERN = Pattern.compile("set(\\p{javaUpperCase}\\w*)"); + + /** + * Bean属性复制工具方法。 + * + * @param dest 目标对象 + * @param src 源对象 + */ + public static void copyBeanProp(Object dest, Object src) { + try { + copyProperties(src, dest); + } catch (Exception e) { + log.error("Bean属性复制异常 ex:【{}】", ExceptionUtils.getStackTrace(e)); + } + } + + /** + * 获取对象的setter方法。 + * + * @param obj 对象 + * @return 对象的setter方法列表 + */ + public static List getSetterMethods(Object obj) { + // setter方法列表 + List setterMethods = new ArrayList<>(); + + // 获取所有方法 + Method[] methods = obj.getClass().getMethods(); + + // 查找setter方法 + + for (Method method : methods) { + Matcher m = SET_PATTERN.matcher(method.getName()); + if (m.matches() && (method.getParameterTypes().length == 1)) { + setterMethods.add(method); + } + } + // 返回setter方法列表 + return setterMethods; + } + + /** + * 获取对象的getter方法。 + * + * @param obj 对象 + * @return 对象的getter方法列表 + */ + + public static List getGetterMethods(Object obj) { + // getter方法列表 + List getterMethods = new ArrayList<>(); + // 获取所有方法 + Method[] methods = obj.getClass().getMethods(); + // 查找getter方法 + for (Method method : methods) { + Matcher m = GET_PATTERN.matcher(method.getName()); + if (m.matches() && (method.getParameterTypes().length == 0)) { + getterMethods.add(method); + } + } + // 返回getter方法列表 + return getterMethods; + } + + /** + * 检查Bean方法名中的属性名是否相等。
+ * 如getName()和setName()属性名一样,getName()和setAge()属性名不一样。 + * + * @param m1 方法名1 + * @param m2 方法名2 + * @return 属性名一样返回true,否则返回false + */ + + public static boolean isMethodPropEquals(String m1, String m2) { + return m1.substring(BEAN_METHOD_PROP_INDEX).equals(m2.substring(BEAN_METHOD_PROP_INDEX)); + } + + + /** + * 通过 ASM反射 速度比 Spring BeanUtils.copyProperties(source,target) 快一倍 + * 类型不同可以转换 + * 大小写可以忽略 + * 下划线 _ 被忽略 + * + * @param source 数据源 + * @param target 目标是数据 + * @param + * @return + */ + public static T copyPropertiesASM(Object source, Object target) { + MethodAccess sourceMethodAccess = CacheMethodAccess.getMethodAccess(source.getClass()); + MethodAccess targetMethodAccess = CacheMethodAccess.getMethodAccess(target.getClass()); + Map sourceGet = CacheAsmFiledMethod.getMethod("get", source.getClass()); + Map targetSet = CacheAsmFiledMethod.getMethod("set", target.getClass()); + CacheFieldMap.getFieldMap(target.getClass()).keySet().forEach(it -> { + String sourceIndex = sourceGet.get(it); + if (sourceIndex != null) { + Object value = sourceMethodAccess.invoke(source, sourceIndex); + String setIndex = targetSet.get(it); + targetMethodAccess.invoke(target, setIndex, value); + } + }); + return (T) target; + } + + /** + * 模仿Spring中 BeanUtils.copyProperties(source,target) + * 类 型不同不可以转换 + * 但是 + * 大小写可以忽略 + * 下划线 _ 被忽略 + * + * @param source + * @param target + * @param + * @return + */ + public static T copyPropertiesignoreOther(Object source, Object target) { + Map sourceMap = CacheFieldMap.getFieldMap(source.getClass()); + CacheFieldMap.getFieldMap(target.getClass()).values().forEach(it -> { + Field field = sourceMap.get(it.getName().toLowerCase().replace("_", "")); + if (field != null) { + it.setAccessible(true); + field.setAccessible(true); + try { + it.set(target, field.get(source)); + } catch (IllegalAccessException e) { + log.error("IllegalAccessException ex:【{}】",ExceptionUtils.getStackTrace(e)); + } + } + }); + return (T) target; + } + + private static class CacheAsmFiledMethod { + private static Map> cacheGetMethod = new HashMap<>(); + private static Map> cacheSetMethod = new HashMap<>(); + + private static Map getMethod(String type, Class clazz) { + String getString = "get"; + String setString = "set"; + Map allFields = CacheFieldMap.getFieldMap(clazz); + Map result = null; + if (getString.equals(type)) { + result = cacheGetMethod.get(clazz.getName()); + } else if (setString.equals(type)) { + result = cacheSetMethod.get(clazz.getName()); + } + if (ObjectUtils.isEmpty(result)) { + synchronized (CacheAsmFiledMethod.class) { + if (ObjectUtils.isEmpty(result)) { + Map set = new HashMap<>(); + Map get = new HashMap<>(); + allFields.values().forEach(it -> { + //判断是否是静态 + if (!Modifier.isStatic(it.getModifiers())) { + //首字母大写 + char[] f = it.getName().toCharArray(); + f[0] -= 32; + String fieldName = new String(f); + get.put(fieldName.toLowerCase().replace("_", ""), "get" + fieldName); + set.put(fieldName.toLowerCase().replace("_", ""), "set" + fieldName); + } + }); + cacheGetMethod.put(clazz.getName(), get); + cacheSetMethod.put(clazz.getName(), set); + if (getString.equals(type)) { + result = cacheGetMethod.get(clazz.getName()); + } else if (setString.equals(type)) { + result = cacheSetMethod.get(clazz.getName()); + } + } + } + } + return result; + } + } + + private static class CacheMethodAccess { + + private CacheMethodAccess() { + } + + private static Map cache = new HashMap<>(); + + private static MethodAccess getMethodAccess(Class clazz) { + MethodAccess result = cache.get(clazz.getName()); + if (ObjectUtils.isEmpty(result)) { + synchronized (CacheMethodAccess.class) { + if (result == null) { + cache.put(clazz.getName(), MethodAccess.get(clazz)); + result = cache.get(clazz.getName()); + } + } + } + return result; + } + } + + private static class CacheFieldMap { + private static Map> cacheMap = new HashMap<>(); + + private static Map getFieldMap(Class clazz) { + Map result = cacheMap.get(clazz.getName()); + if (ObjectUtils.isEmpty(result)) { + synchronized (CacheFieldMap.class) { + if (ObjectUtils.isEmpty(result)) { + Map fieldMap = new HashMap<>(); + for (Field field : clazz.getDeclaredFields()) { + fieldMap.put(field.getName().toLowerCase().replace("_", ""), field); + } + cacheMap.put(clazz.getName(), fieldMap); + result = cacheMap.get(clazz.getName()); + } + } + } + return result; + } + } + + +} diff --git a/easyink-common/src/main/java/com/easyink/common/utils/file/FileUploadUtils.java b/easyink-common/src/main/java/com/easyink/common/utils/file/FileUploadUtils.java new file mode 100644 index 0000000..38348a7 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/utils/file/FileUploadUtils.java @@ -0,0 +1,415 @@ +package com.easyink.common.utils.file; + +import com.easyink.common.config.CosConfig; +import com.easyink.common.config.RuoYiConfig; +import com.easyink.common.constant.Constants; +import com.easyink.common.constant.WeConstans; +import com.easyink.common.exception.file.FileNameLengthLimitExceededException; +import com.easyink.common.exception.file.FileSizeLimitExceededException; +import com.easyink.common.exception.file.InvalidExtensionException; +import com.easyink.common.utils.DateUtils; +import com.easyink.common.utils.StringUtils; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.qcloud.cos.COSClient; +import com.qcloud.cos.ClientConfig; +import com.qcloud.cos.auth.BasicCOSCredentials; +import com.qcloud.cos.auth.COSCredentials; +import com.qcloud.cos.model.ObjectMetadata; +import com.qcloud.cos.model.PutObjectRequest; +import com.qcloud.cos.model.PutObjectResult; +import com.qcloud.cos.region.Region; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.io.FilenameUtils; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; + +/** + * 文件上传工具类 + * + * @author admin + */ +@Slf4j +public class FileUploadUtils { + private FileUploadUtils() { + } + + /** + * 默认大小 50M + */ + private static final long DEFAULT_MAX_SIZE = (long) 50 * 1024 * 1024; + + /** + * 默认的文件名最大长度 100 + */ + private static final int DEFAULT_FILE_NAME_LENGTH = 100; + + /** + * 默认上传的地址 + */ + private static String defaultBaseDir = RuoYiConfig.getProfile(); + + + private static String getDefaultBaseDir() { + return defaultBaseDir; + } + + + /** + * 以默认配置进行文件上传 + * + * @param file 上传的文件 + * @return 文件名称 + */ + public static String upload(MultipartFile file) throws IOException { + try { + return upload(getDefaultBaseDir(), file, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION); + } catch (Exception e) { + throw new IOException(e.getMessage(), e); + } + } + + + /** + * 根据文件路径上传 + * + * @param baseDir 相对应用的基目录 + * @param file 上传的文件 + * @return 文件名称 + */ + public static String upload(String baseDir, MultipartFile file) throws IOException { + try { + return upload(baseDir, file, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION); + } catch (Exception e) { + throw new IOException(e.getMessage(), e); + } + } + + /** + * 根据文件路径上传 + * + * @param baseDir 相对应用的基目录 + * @param file 上传的文件 + * @return 文件名称 + * @throws IOException + */ + public static String uploadCert(String baseDir, MultipartFile file) throws IOException, InvalidExtensionException { + int fileNamelength = 0; + String fileName = StringUtils.EMPTY; + File desc; + if (file != null) { + if (StringUtils.isNotEmpty(file.getOriginalFilename())) { + fileNamelength = file.getOriginalFilename().length(); + } + fileName = file.getOriginalFilename(); + desc = getAbsoluteFile(baseDir, fileName); + file.transferTo(desc); + } + if (fileNamelength > FileUploadUtils.DEFAULT_FILE_NAME_LENGTH) { + throw new FileNameLengthLimitExceededException(FileUploadUtils.DEFAULT_FILE_NAME_LENGTH); + } + assertAllowed(file, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION); + return getPathFileName(baseDir, fileName); + } + + /** + * 文件上传 + * + * @param baseDir 相对应用的基目录 + * @param file 上传的文件 + * @param allowedExtension 上传文件类型 + * @return 返回上传成功的文件名 + * @throws FileSizeLimitExceededException 如果超出最大大小 + * @throws FileNameLengthLimitExceededException 文件名太长 + * @throws IOException 比如读写文件出错时 + * @throws InvalidExtensionException 文件校验异常 + */ + public static String upload(String baseDir, MultipartFile file, String[] allowedExtension) + throws FileSizeLimitExceededException, IOException, FileNameLengthLimitExceededException, InvalidExtensionException { + int fileNamelength = 0; + String pathFileName = StringUtils.EMPTY; + if (file != null) { + checkFile(file, allowedExtension, fileNamelength); + String fileName = extractFilename(file); + File desc = getAbsoluteFile(baseDir, fileName); + file.transferTo(desc); + pathFileName = getPathFileName(baseDir, fileName); + } + return pathFileName; + } + + /** + * 检查文件大小,文件名称大小,扩展名 + * + * @param file 文件 + * @param allowedExtension 允许的扩展名 + * @param fileNamelength 文件名长度 + * @throws InvalidExtensionException + */ + private static void checkFile(MultipartFile file, String[] allowedExtension, int fileNamelength) throws InvalidExtensionException { + checkFile(file,fileNamelength); + assertAllowed(file, allowedExtension); + } + + /** + * 检查文件大小,文件名称大小 + * @param file 文件 + * @param fileNamelength 文件名长度 + */ + private static void checkFile(MultipartFile file, int fileNamelength) { + if (StringUtils.isNotEmpty(file.getOriginalFilename())) { + fileNamelength = file.getOriginalFilename().length(); + } + if (fileNamelength > FileUploadUtils.DEFAULT_FILE_NAME_LENGTH) { + throw new FileNameLengthLimitExceededException(FileUploadUtils.DEFAULT_FILE_NAME_LENGTH); + } + assertFileSize(file); + } + + + + /** + * 通过流进行文件上传 + * + * @param in 流 + */ + public static String upload2Cos(InputStream in,String fileName, String fileExtension, CosConfig cosConfig) throws IOException { + try { + return upload2Cos(in,fileName, fileExtension, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION, cosConfig); + } catch (Exception e) { + throw new IOException(e.getMessage(), e); + } + } + + + /** + * 文件上传 + * + * @param file 上传的文件 + * @return 返回上传成功的文件名 + * @throws FileSizeLimitExceededException 如果超出最大大小 + * @throws FileNameLengthLimitExceededException 文件名太长 + * @throws IOException 比如读写文件出错时 + */ + public static String upload2Cos(MultipartFile file, CosConfig cosConfig) + throws FileSizeLimitExceededException, IOException, FileNameLengthLimitExceededException { + int fileNamelength = 0; + String fileName = StringUtils.EMPTY; + if (file != null) { + checkFile(file,fileNamelength); + fileName = extractFilename(file); + uploadCosClient(cosConfig, fileName, file); + + } + return fileName; + } + + public static String upload2Cos(MultipartFile file, CosConfig cosConfig, String fileName) + throws FileSizeLimitExceededException, IOException, FileNameLengthLimitExceededException { + int fileNamelength = 0; + if (file != null) { + checkFile(file, fileNamelength); + uploadCosClient(cosConfig, fileName, file); + } + return fileName; + } + + private static void uploadCosClient(CosConfig cosConfig, String fileName, MultipartFile file) throws IOException { + COSClient cosClient = getCosClient(cosConfig); + // 指定要上传到 COS 上对象键 + ObjectMetadata objectMetadata = new ObjectMetadata(); + PutObjectRequest putObjectRequest = new PutObjectRequest(cosConfig.getBucketName(), fileName, file.getInputStream(), objectMetadata); + PutObjectResult putObjectResult = cosClient.putObject(putObjectRequest); + String cosImgUrlPrefix = cosConfig.getCosImgUrlPrefix(); + log.info("{}", cosImgUrlPrefix + fileName); + log.info("腾讯cos上传信息:{}", new ObjectMapper().writeValueAsString(putObjectResult)); + cosClient.shutdown(); + } + + /** + * 生成 cos 客户端 + * @param cosConfig 云配置 + * @return cos 客户端 + */ + private static COSClient getCosClient(CosConfig cosConfig){ + // 1 初始化用户身份信息(secretId, secretKey)。 + COSCredentials cred = new BasicCOSCredentials(cosConfig.getSecretId(), cosConfig.getSecretKey()); + // 2 设置 bucket 的区域, COS 地域的简称请参照 https://cloud.tencent.com/document/product/436/6224 + // clientConfig 中包含了设置 region, https(默认 http), 超时, 代理等 set 方法, 使用可参见源码或者常见问题 Java SDK 部分。 + Region region = new Region(cosConfig.getRegion()); + ClientConfig clientConfig = new ClientConfig(region); + // 3 生成 cos 客户端。 + return new COSClient(cred, clientConfig); + } + /** + * 将流中的文件传到腾讯云 + * + * @param inputStream 输入流 + * @param fileExtension 被写入流的文件的后缀名 + * @param allowedExtension 允许的后缀名 + * @throws FileSizeLimitExceededException 文件大小超过上限 + * @throws InvalidExtensionException 文件后缀名非法 + */ + private static String upload2Cos(InputStream inputStream, String originFileName, String fileExtension, String[] allowedExtension, CosConfig cosConfig) throws FileSizeLimitExceededException, InvalidExtensionException { + + String fileName = DateUtils.datePath() + WeConstans.SLASH + originFileName; + if (!isAllowedExtension(fileExtension, allowedExtension)) { + throw new InvalidExtensionException.InvalidImageExtensionException(allowedExtension, fileExtension, fileName); + } + COSClient cosClient = getCosClient(cosConfig); + ObjectMetadata objectMetadata = new ObjectMetadata(); + PutObjectRequest putObjectRequest = new PutObjectRequest(cosConfig.getBucketName(), fileName, inputStream, objectMetadata); + cosClient.putObject(putObjectRequest); + cosClient.shutdown(); + return fileName; + } + + /** + * 不校验后缀名的上传方法 + * + * @param inputStream + * @param originFileName + * @param cosConfig + * @return + * @throws FileSizeLimitExceededException + * @throws InvalidExtensionException + */ + public static String upload2Cos(InputStream inputStream, String originFileName, CosConfig cosConfig) throws FileSizeLimitExceededException { + + String fileName = DateUtils.datePath() + WeConstans.SLASH + originFileName; + COSClient cosClient = getCosClient(cosConfig); + ObjectMetadata objectMetadata = new ObjectMetadata(); + PutObjectRequest putObjectRequest = new PutObjectRequest(cosConfig.getBucketName(), fileName, inputStream, objectMetadata); + cosClient.putObject(putObjectRequest); + cosClient.shutdown(); + return fileName; + } + + + public static String uploadFile(String baseDir, MultipartFile file) + throws FileSizeLimitExceededException, IOException, FileNameLengthLimitExceededException { + int fileNamelength = file.getOriginalFilename().length(); + if (fileNamelength > FileUploadUtils.DEFAULT_FILE_NAME_LENGTH) { + throw new FileNameLengthLimitExceededException(FileUploadUtils.DEFAULT_FILE_NAME_LENGTH); + } + + String fileName = extractFilename(file); + + File desc = getAbsoluteFile(baseDir, fileName); + file.transferTo(desc); + return getPathFileName(baseDir, fileName); + } + + /** + * 编码文件名 + */ + private static String extractFilename(MultipartFile file) { + String fileName; + fileName = DateUtils.datePath() + WeConstans.SLASH + file.getOriginalFilename(); + return fileName; + } + + private static File getAbsoluteFile(String uploadDir, String fileName) throws IOException { + File desc = new File(uploadDir + File.separator + fileName); + + if (!desc.getParentFile().exists()) { + desc.getParentFile().mkdirs(); + } + if (!desc.exists()) { + boolean isCreate = desc.createNewFile(); + if (!isCreate){ + log.error("文件创建失败"); + } + } + return desc; + } + + private static String getPathFileName(String uploadDir, String fileName) { + int dirLastIndex = RuoYiConfig.getProfile().length() + 1; + String currentDir = StringUtils.substring(uploadDir, dirLastIndex); + String pathFileName; + if (org.apache.commons.lang3.StringUtils.isBlank(currentDir)) { + pathFileName = Constants.RESOURCE_PREFIX + WeConstans.SLASH + fileName; + } else { + pathFileName = Constants.RESOURCE_PREFIX + WeConstans.SLASH + currentDir + WeConstans.SLASH + fileName; + } + return pathFileName; + } + + /** + * 文件大小校验,扩展名校验 + * + * @param file 上传的文件 + * @throws FileSizeLimitExceededException 如果超出最大大小 + */ + public static void assertAllowed(MultipartFile file, String[] allowedExtension) + throws FileSizeLimitExceededException, InvalidExtensionException { + String fileName = StringUtils.EMPTY; + if (file != null) { + assertFileSize(file); + fileName = file.getOriginalFilename(); + } + + String extension = getExtension(file); + if (allowedExtension != null && !isAllowedExtension(extension, allowedExtension)) { + if (allowedExtension == MimeTypeUtils.IMAGE_EXTENSION) { + throw new InvalidExtensionException.InvalidImageExtensionException(allowedExtension, extension, + fileName); + } else if (allowedExtension == MimeTypeUtils.FLASH_EXTENSION) { + throw new InvalidExtensionException.InvalidFlashExtensionException(allowedExtension, extension, + fileName); + } else if (allowedExtension == MimeTypeUtils.MEDIA_EXTENSION) { + throw new InvalidExtensionException.InvalidMediaExtensionException(allowedExtension, extension, + fileName); + } else { + throw new InvalidExtensionException(allowedExtension, extension, fileName); + } + } + + } + + /** + * 文件大小校验 + * + * @param file 文件 + */ + public static void assertFileSize(MultipartFile file) { + if (file != null && file.getSize() > DEFAULT_MAX_SIZE) { + throw new FileSizeLimitExceededException(DEFAULT_MAX_SIZE / 1024 / 1024); + } + } + /** + * 判断MIME类型是否是允许的MIME类型 + * + * @param extension 扩展名 + * @param allowedExtension 允许的扩展名 + * @return 是否是允许 + */ + private static boolean isAllowedExtension(String extension, String[] allowedExtension) { + for (String str : allowedExtension) { + if (str.equalsIgnoreCase(extension)) { + return true; + } + } + return false; + } + + /** + * 获取文件名的后缀 + * + * @param file 表单文件 + * @return 后缀名 + */ + private static String getExtension(MultipartFile file) { + String extension = StringUtils.EMPTY; + if (file != null) { + extension = FilenameUtils.getExtension(file.getOriginalFilename()); + if (StringUtils.isEmpty(extension) && file.getContentType() != null) { + extension = MimeTypeUtils.getExtension(file.getContentType()); + } + } + return extension; + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/utils/file/FileUtils.java b/easyink-common/src/main/java/com/easyink/common/utils/file/FileUtils.java new file mode 100644 index 0000000..ffd4636 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/utils/file/FileUtils.java @@ -0,0 +1,275 @@ +package com.easyink.common.utils.file; + +import com.easyink.common.utils.StringUtils; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.exception.ExceptionUtils; +import ws.schild.jave.MultimediaObject; + +import javax.servlet.http.HttpServletRequest; +import java.io.*; +import java.net.*; +import java.util.List; +import java.util.Map; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; + +/** + * 文件处理工具类 + * + * @author admin + */ +@Slf4j +public class FileUtils extends org.apache.commons.io.FileUtils { + public static final String FILENAME_PATTERN = "[a-zA-Z0-9_\\-\\|\\.\\u4e00-\\u9fa5]+"; + + /** + * 输出指定文件的byte数组 + * + * @param filePath 文件路径 + * @param os 输出流 + * @return + */ + public static void writeBytes(String filePath, OutputStream os) throws IOException { + FileInputStream fis = null; + try { + File file = new File(filePath); + if (!file.exists()) { + throw new FileNotFoundException(filePath); + } + fis = new FileInputStream(file); + byte[] b = new byte[1024]; + int length; + while ((length = fis.read(b)) > 0) { + os.write(b, 0, length); + } + } catch (IOException e) { + throw e; + } finally { + if (os != null) { + try { + os.close(); + } catch (IOException e1) { + log.error("异常信息 e:{}", e1.getMessage()); + } + } + if (fis != null) { + try { + fis.close(); + } catch (IOException e1) { + log.error("异常信息 e:{}", e1.getMessage()); + } + } + } + } + + /** + * 批量下载文件,打包为zip。 + * + * @param fileList 文件列表,每个元素应包含fileName、url,前者即为文件名,后者为下载所需链接 + * @param os 输出流 + */ + public static void batchDownloadFile(List> fileList, OutputStream os) { + try { + ZipOutputStream zos = new ZipOutputStream(os); + for (Map fileInfo : fileList) { + String fileName = fileInfo.get("fileName"); + String url = fileInfo.get("url"); + // 跳过不包含指定键位的对象 + if (StringUtils.isEmpty(url) || StringUtils.isEmpty(fileName)) { + continue; + } + URL newUrl = new URL(url); + zos.putNextEntry(new ZipEntry(fileName)); + InputStream fis = newUrl.openConnection().getInputStream(); + byte[] buffer = new byte[1024]; + int r = 0; + while ((r = fis.read(buffer)) != -1) { + zos.write(buffer, 0, r); + } + fis.close(); + } + //关闭zip输出流 + zos.flush(); + zos.close(); + } catch (IOException e) { + log.error("输入输出异常 ex:【{}】", ExceptionUtils.getStackTrace(e)); + } + + } + + /** + * @param urlPath 下载路径 + * @param os 输出流 + * @return 返回下载文件 + * @throws Exception + */ + public static void downloadFile(String urlPath, OutputStream os) { + InputStream inputStream = null; + try { + URL url = new URL(urlPath); + // 连接类的父类,抽象类 + URLConnection urlConnection = url.openConnection(); + // http的连接类 + HttpURLConnection httpURLConnection = (HttpURLConnection) urlConnection; + // 设定请求的方法,默认是GET(对于知识库的附件服务器必须是GET,如果是POST会返回405。流程附件迁移功能里面必须是POST,有所区分。) + httpURLConnection.setRequestMethod("GET"); + // 设置字符编码 + httpURLConnection.setRequestProperty("Charset", "UTF-8"); + // 打开到此 URL 引用的资源的通信链接(如果尚未建立这样的连接)。 + httpURLConnection.getResponseCode(); + + inputStream = httpURLConnection.getInputStream(); + + byte[] b = new byte[1024]; + int length; + while ((length = inputStream.read(b)) > 0) { + os.write(b, 0, length); + } + inputStream.close(); + os.close(); + } catch (IOException e) { + log.error("输入输出异常 ex:【{}】", ExceptionUtils.getStackTrace(e)); + } catch (Exception e) { + log.error("downloadFile Exception ex:【{}】", ExceptionUtils.getStackTrace(e)); + } finally { + if (os != null) { + try { + os.close(); + } catch (IOException e1) { + log.error("异常信息:{}", e1.getMessage()); + } + } + if (inputStream != null) { + try { + inputStream.close(); + } catch (IOException e1) { + log.error("异常信息:{}", e1.getMessage()); + } + } + } + } + + + /** + * 删除文件 + * + * @param filePath 文件 + * @return + */ + public static boolean deleteFile(String filePath) { + boolean flag = false; + File file = new File(filePath); + // 路径为文件且不为空则进行删除 + if (file.isFile() && file.exists()) { + file.delete(); + flag = true; + } + return flag; + } + + /** + * 文件名称验证 + * + * @param filename 文件名称 + * @return true 正常 false 非法 + */ + public static boolean isValidFilename(String filename) { + return filename.matches(FILENAME_PATTERN); + } + + /** + * 下载文件名重新编码 + * + * @param request 请求对象 + * @param fileName 文件名 + * @return 编码后的文件名 + */ + public static String setFileDownloadHeader(HttpServletRequest request, String fileName) + throws UnsupportedEncodingException { + final String agent = request.getHeader("USER-AGENT"); + String filename = fileName; + String utf8 = "utf-8"; + String firefox = "Firefox"; + String chrome = "Chrome"; + String charsetName = "ISO8859-1"; + String msie = "MSIE"; + if (agent.contains(msie)) { + // IE浏览器 + filename = URLEncoder.encode(filename, utf8); + filename = filename.replace("+", " "); + } else if (agent.contains(firefox)) { + // 火狐浏览器 + filename = new String(fileName.getBytes(), charsetName); + } else if (agent.contains(chrome)) { + // google浏览器 + filename = URLEncoder.encode(filename, utf8); + } else { + // 其它浏览器 + filename = URLEncoder.encode(filename, utf8); + } + return filename; + } + + /** + * 获取网络文件,暂存为临时文件 + * + * @param url url + * @return 临时文件 + * @throws UnknownHostException + * @throws IOException + */ + public static File getFileByUrl(String url) throws UnknownHostException, IOException { + //创建临时文件 + File tmpFile = File.createTempFile("temp", ".tmp"); + toLocalFile(url, tmpFile.getCanonicalPath()); + return tmpFile; + } + + /** + * 网络文件转换为本地文件 + * + * @param urlStr url + * @param localUrl 本地路径 + * @throws IOException + * @throws UnknownHostException + */ + private static void toLocalFile(String urlStr, String localUrl) throws IOException, UnknownHostException { + byte[] data = toByteArray(urlStr); + FileOutputStream out = new FileOutputStream(localUrl); + out.write(data); + out.close(); + } + + /** + * 网络文件转换为byte二进制 + * + * @param urlStr + * @return + * @throws IOException + */ + private static byte[] toByteArray(String urlStr) throws IOException { + URL url = new URL(urlStr); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + DataInputStream in = new DataInputStream(conn.getInputStream()); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + byte[] buffer = new byte[1024 * 4]; + int n; + while ((n = in.read(buffer)) != -1) { + out.write(buffer, 0, n); + } + return out.toByteArray(); + } + + /** + * 获取时长 + * + * @param file 文件路径 + * @return 时长(秒) + * @throws ws.schild.jave.EncoderException + */ + public static long getDuration(File file) throws ws.schild.jave.EncoderException { + MultimediaObject multimediaObject = new MultimediaObject(file); + return multimediaObject.getInfo().getDuration() / 1000; + } + +} diff --git a/easyink-common/src/main/java/com/easyink/common/utils/file/MimeTypeUtils.java b/easyink-common/src/main/java/com/easyink/common/utils/file/MimeTypeUtils.java new file mode 100644 index 0000000..a0e7494 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/utils/file/MimeTypeUtils.java @@ -0,0 +1,60 @@ +package com.easyink.common.utils.file; + +/** + * 媒体类型工具类 + * + * @author admin + */ +public class MimeTypeUtils { + public static final String IMAGE_PNG = "image/png"; + + public static final String IMAGE_JPG = "image/jpg"; + + public static final String IMAGE_JPEG = "image/jpeg"; + + public static final String IMAGE_BMP = "image/bmp"; + + public static final String IMAGE_GIF = "image/gif"; + + public static final String XLSX = "xlsx"; + + public static final String XLS = "xls"; + + public static final String[] IMAGE_EXTENSION = {"bmp", "gif", "jpg", "jpeg", "png"}; + + public static final String[] FLASH_EXTENSION = {"swf", "flv"}; + + public static final String[] MEDIA_EXTENSION = {"swf", "flv", "mp3", "wav", "wma", "wmv", "mid", "avi", "mpg", + "asf", "rm", "rmvb"}; + + public static final String[] DEFAULT_ALLOWED_EXTENSION = { + // 图片 + "bmp", "gif", "jpg", "jpeg", "png", + // word excel powerpoint + "doc", "docx", "xls", "xlsx", "ppt", "pptx", "html", "htm", "txt", + // 压缩文件 + "rar", "zip", "gz", "bz2", + // pdf + "pdf", "wav", "amr", "mp4", "mp3"}; + + public static String getExtension(String prefix) { + switch (prefix) { + case IMAGE_PNG: + return "png"; + case IMAGE_JPG: + return "jpg"; + case IMAGE_JPEG: + return "jpeg"; + case IMAGE_BMP: + return "bmp"; + case IMAGE_GIF: + return "gif"; + case XLSX: + return "xlsx"; + case XLS: + return "xls"; + default: + return ""; + } + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/utils/html/EscapeUtil.java b/easyink-common/src/main/java/com/easyink/common/utils/html/EscapeUtil.java new file mode 100644 index 0000000..c976889 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/utils/html/EscapeUtil.java @@ -0,0 +1,128 @@ +package com.easyink.common.utils.html; + +import com.easyink.common.utils.StringUtils; + +/** + * 转义和反转义工具类 + * + * @author admin + */ +public class EscapeUtil { + public static final String RE_HTML_MARK = "(<[^<]*?>)|(<[\\s]*?/[^<]*?>)|(<[^<]*?/[\\s]*?>)"; + private static final int INT64 = 64; + private static final char[][] TEXT = new char[64][]; + private EscapeUtil(){} + + static { + for (int i = 0; i < INT64; i++) { + TEXT[i] = new char[]{(char) i}; + } + + // special HTML characters + // 单引号 + TEXT['\''] = "'".toCharArray(); + // 单引号 + TEXT['"'] = """.toCharArray(); + // &符 + TEXT['&'] = "&".toCharArray(); + // 小于号 + TEXT['<'] = "<".toCharArray(); + // 大于号 + TEXT['>'] = ">".toCharArray(); + } + + /** + * 转义文本中的HTML字符为安全的字符 + * + * @param text 被转义的文本 + * @return 转义后的文本 + */ + public static String escape(String text) { + return encode(text); + } + + /** + * 还原被转义的HTML特殊字符 + * + * @param content 包含转义符的HTML内容 + * @return 转换后的字符串 + */ + public static String unescape(String content) { + return decode(content); + } + + /** + * 清除所有HTML标签,但是不删除标签内的内容 + * + * @param content 文本 + * @return 清除标签后的文本 + */ + public static String clean(String content) { + return new HTMLFilter().filter(content); + } + + /** + * Escape编码 + * + * @param text 被编码的文本 + * @return 编码后的字符 + */ + private static String encode(String text) { + int len; + if ((text == null) || ((len = text.length()) == 0)) { + return StringUtils.EMPTY; + } + StringBuilder buffer = new StringBuilder(len + (len >> 2)); + char c; + for (int i = 0; i < len; i++) { + c = text.charAt(i); + if (c < 64) { + buffer.append(TEXT[c]); + } else { + buffer.append(c); + } + } + return buffer.toString(); + } + + /** + * Escape解码 + * + * @param content 被转义的内容 + * @return 解码后的字符串 + */ + public static String decode(String content) { + if (StringUtils.isEmpty(content)) { + return content; + } + + StringBuilder tmp = new StringBuilder(content.length()); + int lastPos = 0; + int pos; + char ch; + while (lastPos < content.length()) { + pos = content.indexOf("%", lastPos); + if (pos == lastPos) { + if (content.charAt(pos + 1) == 'u') { + ch = (char) Integer.parseInt(content.substring(pos + 2, pos + 6), 16); + tmp.append(ch); + lastPos = pos + 6; + } else { + ch = (char) Integer.parseInt(content.substring(pos + 1, pos + 3), 16); + tmp.append(ch); + lastPos = pos + 3; + } + } else { + if (pos == -1) { + tmp.append(content.substring(lastPos)); + lastPos = content.length(); + } else { + tmp.append(content.substring(lastPos, pos)); + lastPos = pos; + } + } + } + return tmp.toString(); + } + +} diff --git a/easyink-common/src/main/java/com/easyink/common/utils/html/HTMLFilter.java b/easyink-common/src/main/java/com/easyink/common/utils/html/HTMLFilter.java new file mode 100644 index 0000000..e8515ac --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/utils/html/HTMLFilter.java @@ -0,0 +1,498 @@ +package com.easyink.common.utils.html; + +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * HTML过滤器,用于去除XSS漏洞隐患。 + * + * @author admin + */ +public final class HTMLFilter { + /** + * regex flag union representing /si modifiers in php + **/ + private static final int REGEX_FLAGS_SI = Pattern.CASE_INSENSITIVE | Pattern.DOTALL; + private static final Pattern P_COMMENTS = Pattern.compile("", Pattern.DOTALL); + private static final Pattern P_COMMENT = Pattern.compile("^!--(.*)--$", REGEX_FLAGS_SI); + private static final Pattern P_TAGS = Pattern.compile("<(.*?)>", Pattern.DOTALL); + private static final Pattern P_END_TAG = Pattern.compile("^/([a-z0-9]+)", REGEX_FLAGS_SI); + private static final Pattern P_START_TAG = Pattern.compile("^([a-z0-9]+)(.*?)(/?)$", REGEX_FLAGS_SI); + private static final Pattern P_QUOTED_ATTRIBUTES = Pattern.compile("([a-z0-9]+)=([\"'])(.*?)\\2", REGEX_FLAGS_SI); + private static final Pattern P_UNQUOTED_ATTRIBUTES = Pattern.compile("([a-z0-9]+)(=)([^\"\\s']+)", REGEX_FLAGS_SI); + private static final Pattern P_PROTOCOL = Pattern.compile("^([^:]+):", REGEX_FLAGS_SI); + private static final Pattern P_ENTITY = Pattern.compile("&#(\\d+);?"); + private static final Pattern P_ENTITY_UNICODE = Pattern.compile("&#x([0-9a-f]+);?"); + private static final Pattern P_ENCODE = Pattern.compile("%([0-9a-f]{2});?"); + private static final Pattern P_VALID_ENTITIES = Pattern.compile("&([^&;]*)(?=(;|&|$))"); + private static final Pattern P_VALID_QUOTES = Pattern.compile("(>|^)([^<]+?)(<|$)", Pattern.DOTALL); + private static final Pattern P_END_ARROW = Pattern.compile("^>"); + private static final Pattern P_BODY_TO_END = Pattern.compile("<([^>]*?)(?=<|$)"); + private static final Pattern P_XML_CONTENT = Pattern.compile("(^|>)([^<]*?)(?=>)"); + private static final Pattern P_STRAY_LEFT_ARROW = Pattern.compile("<([^>]*?)(?=<|$)"); + private static final Pattern P_STRAY_RIGHT_ARROW = Pattern.compile("(^|>)([^<]*?)(?=>)"); + private static final Pattern P_AMP = Pattern.compile("&"); + private static final Pattern P_QUOTE = Pattern.compile("\""); + private static final Pattern P_LEFT_ARROW = Pattern.compile("<"); + private static final Pattern P_RIGHT_ARROW = Pattern.compile(">"); + private static final Pattern P_BOTH_ARROWS = Pattern.compile("<>"); + + // @xxx could grow large... maybe use sesat's ReferenceMap + private static final ConcurrentMap P_REMOVE_PAIR_BLANKS = new ConcurrentHashMap<>(); + private static final ConcurrentMap P_REMOVE_SELF_BLANKS = new ConcurrentHashMap<>(); + + /** + * set of allowed html elements, along with allowed attributes for each element + **/ + private final Map> vAllowed; + /** + * counts of open tags for each (allowable) html element + **/ + private final Map vTagCounts = new HashMap<>(); + + /** + * html elements which must always be self-closing (e.g. "") + **/ + private final String[] vSelfClosingTags; + /** + * html elements which must always have separate opening and closing tags (e.g. "") + **/ + private final String[] vNeedClosingTags; + /** + * set of disallowed html elements + **/ + private final String[] vDisallowed; + /** + * attributes which should be checked for valid protocols + **/ + private final String[] vProtocolAtts; + /** + * allowed protocols + **/ + private final String[] vAllowedProtocols; + /** + * tags which should be removed if they contain no content (e.g. "" or "") + **/ + private final String[] vRemoveBlanks; + /** + * entities allowed within html markup + **/ + private final String[] vAllowedEntities; + /** + * flag determining whether comments are allowed in input String. + */ + private final boolean stripComment; + private final boolean encodeQuotes; + /** + * flag determining whether to try to make tags when presented with "unbalanced" angle brackets (e.g. "" + * becomes " text "). If set to false, unbalanced angle brackets will be html escaped. + */ + private final boolean alwaysMakeTags; + + /** + * Default constructor. + */ + public HTMLFilter() { + vAllowed = new HashMap<>(); + + final ArrayList a_atts = new ArrayList<>(); + a_atts.add("href"); + a_atts.add("target"); + vAllowed.put("a", a_atts); + + final ArrayList img_atts = new ArrayList<>(); + img_atts.add("src"); + img_atts.add("width"); + img_atts.add("height"); + img_atts.add("alt"); + vAllowed.put("img", img_atts); + + final ArrayList no_atts = new ArrayList<>(); + vAllowed.put("b", no_atts); + vAllowed.put("strong", no_atts); + vAllowed.put("i", no_atts); + vAllowed.put("em", no_atts); + + vSelfClosingTags = new String[]{"img"}; + vNeedClosingTags = new String[]{"a", "b", "strong", "i", "em"}; + vDisallowed = new String[]{}; + vAllowedProtocols = new String[]{"http", "mailto", "https"}; // no ftp. + vProtocolAtts = new String[]{"src", "href"}; + vRemoveBlanks = new String[]{"a", "b", "strong", "i", "em"}; + vAllowedEntities = new String[]{"amp", "gt", "lt", "quot"}; + stripComment = true; + encodeQuotes = true; + alwaysMakeTags = false; + } + + /** + * Map-parameter configurable constructor. + * + * @param conf map containing configuration. keys match field names. + */ + @SuppressWarnings("unchecked") + public HTMLFilter(final Map conf) { + + assert conf.containsKey("vAllowed") : "configuration requires vAllowed"; + assert conf.containsKey("vSelfClosingTags") : "configuration requires vSelfClosingTags"; + assert conf.containsKey("vNeedClosingTags") : "configuration requires vNeedClosingTags"; + assert conf.containsKey("vDisallowed") : "configuration requires vDisallowed"; + assert conf.containsKey("vAllowedProtocols") : "configuration requires vAllowedProtocols"; + assert conf.containsKey("vProtocolAtts") : "configuration requires vProtocolAtts"; + assert conf.containsKey("vRemoveBlanks") : "configuration requires vRemoveBlanks"; + assert conf.containsKey("vAllowedEntities") : "configuration requires vAllowedEntities"; + + vAllowed = Collections.unmodifiableMap((HashMap>) conf.get("vAllowed")); + vSelfClosingTags = (String[]) conf.get("vSelfClosingTags"); + vNeedClosingTags = (String[]) conf.get("vNeedClosingTags"); + vDisallowed = (String[]) conf.get("vDisallowed"); + vAllowedProtocols = (String[]) conf.get("vAllowedProtocols"); + vProtocolAtts = (String[]) conf.get("vProtocolAtts"); + vRemoveBlanks = (String[]) conf.get("vRemoveBlanks"); + vAllowedEntities = (String[]) conf.get("vAllowedEntities"); + stripComment = conf.containsKey("stripComment") ? (Boolean) conf.get("stripComment") : true; + encodeQuotes = conf.containsKey("encodeQuotes") ? (Boolean) conf.get("encodeQuotes") : true; + alwaysMakeTags = conf.containsKey("alwaysMakeTags") ? (Boolean) conf.get("alwaysMakeTags") : true; + } + + private void reset() { + vTagCounts.clear(); + } + + // --------------------------------------------------------------- + // my versions of some PHP library functions + public static String chr(final int decimal) { + return String.valueOf((char) decimal); + } + + public static String htmlSpecialChars(final String s) { + String result = s; + result = regexReplace(P_AMP, "&", result); + result = regexReplace(P_QUOTE, """, result); + result = regexReplace(P_LEFT_ARROW, "<", result); + result = regexReplace(P_RIGHT_ARROW, ">", result); + return result; + } + + // --------------------------------------------------------------- + + /** + * given a user submitted input String, filter out any invalid or restricted html. + * + * @param input text (i.e. submitted by a user) than may contain html + * @return "clean" version of input, with only valid, whitelisted html elements allowed + */ + public String filter(final String input) { + reset(); + String s = input; + + s = escapeComments(s); + + s = balanceHTML(s); + + s = checkTags(s); + + s = processRemoveBlanks(s); + + // s = validateEntities(s); + + return s; + } + + public boolean isAlwaysMakeTags() { + return alwaysMakeTags; + } + + public boolean isStripComments() { + return stripComment; + } + + private String escapeComments(final String s) { + final Matcher m = P_COMMENTS.matcher(s); + final StringBuffer buf = new StringBuffer(); + if (m.find()) { + final String match = m.group(1); // (.*?) + m.appendReplacement(buf, Matcher.quoteReplacement("")); + } + m.appendTail(buf); + + return buf.toString(); + } + + private String balanceHTML(String s) { + if (alwaysMakeTags) { + // + // try and form html + // + s = regexReplace(P_END_ARROW, "", s); + // 不追加结束标签 + s = regexReplace(P_BODY_TO_END, "<$1>", s); + s = regexReplace(P_XML_CONTENT, "$1<$2", s); + + } else { + // + // escape stray brackets + // + s = regexReplace(P_STRAY_LEFT_ARROW, "<$1", s); + s = regexReplace(P_STRAY_RIGHT_ARROW, "$1$2><", s); + + // + // the last regexp causes '<>' entities to appear + // (we need to do a lookahead assertion so that the last bracket can + // be used in the next pass of the regexp) + // + s = regexReplace(P_BOTH_ARROWS, "", s); + } + + return s; + } + + private String checkTags(String s) { + Matcher m = P_TAGS.matcher(s); + + final StringBuffer buf = new StringBuffer(); + while (m.find()) { + String replaceStr = m.group(1); + replaceStr = processTag(replaceStr); + m.appendReplacement(buf, Matcher.quoteReplacement(replaceStr)); + } + m.appendTail(buf); + + // these get tallied in processTag + // (remember to reset before subsequent calls to filter method) + final StringBuilder sBuilder = new StringBuilder(buf.toString()); + for (String key : vTagCounts.keySet()) { + for (int ii = 0; ii < vTagCounts.get(key); ii++) { + sBuilder.append(""); + } + } + s = sBuilder.toString(); + + return s; + } + + private String processRemoveBlanks(final String s) { + String result = s; + for (String tag : vRemoveBlanks) { + if (!P_REMOVE_PAIR_BLANKS.containsKey(tag)) { + P_REMOVE_PAIR_BLANKS.putIfAbsent(tag, Pattern.compile("<" + tag + "(\\s[^>]*)?>")); + } + result = regexReplace(P_REMOVE_PAIR_BLANKS.get(tag), "", result); + if (!P_REMOVE_SELF_BLANKS.containsKey(tag)) { + P_REMOVE_SELF_BLANKS.putIfAbsent(tag, Pattern.compile("<" + tag + "(\\s[^>]*)?/>")); + } + result = regexReplace(P_REMOVE_SELF_BLANKS.get(tag), "", result); + } + + return result; + } + + private static String regexReplace(final Pattern regex_pattern, final String replacement, final String s) { + Matcher m = regex_pattern.matcher(s); + return m.replaceAll(replacement); + } + + private String processTag(final String s) { + // ending tags + Matcher m = P_END_TAG.matcher(s); + if (m.find()) { + final String name = m.group(1).toLowerCase(); + if (allowed(name)) { + if (false == inArray(name, vSelfClosingTags)) { + if (vTagCounts.containsKey(name)) { + vTagCounts.put(name, vTagCounts.get(name) - 1); + return ""; + } + } + } + } + + // starting tags + m = P_START_TAG.matcher(s); + if (m.find()) { + final String name = m.group(1).toLowerCase(); + final String body = m.group(2); + String ending = m.group(3); + + // debug( "in a starting tag, name='" + name + "'; body='" + body + "'; ending='" + ending + "'" ); + if (allowed(name)) { + final StringBuilder params = new StringBuilder(); + + final Matcher m2 = P_QUOTED_ATTRIBUTES.matcher(body); + final Matcher m3 = P_UNQUOTED_ATTRIBUTES.matcher(body); + final List paramNames = new ArrayList<>(); + final List paramValues = new ArrayList<>(); + while (m2.find()) { + paramNames.add(m2.group(1)); // ([a-z0-9]+) + paramValues.add(m2.group(3)); // (.*?) + } + while (m3.find()) { + paramNames.add(m3.group(1)); // ([a-z0-9]+) + paramValues.add(m3.group(3)); // ([^\"\\s']+) + } + + String paramName, paramValue; + for (int ii = 0; ii < paramNames.size(); ii++) { + paramName = paramNames.get(ii).toLowerCase(); + paramValue = paramValues.get(ii); + + // debug( "paramName='" + paramName + "'" ); + // debug( "paramValue='" + paramValue + "'" ); + // debug( "allowed? " + vAllowed.get( name ).contains( paramName ) ); + + if (allowedAttribute(name, paramName)) { + if (inArray(paramName, vProtocolAtts)) { + paramValue = processParamProtocol(paramValue); + } + params.append(' ').append(paramName).append("=\"").append(paramValue).append("\""); + } + } + + if (inArray(name, vSelfClosingTags)) { + ending = " /"; + } + + if (inArray(name, vNeedClosingTags)) { + ending = ""; + } + + if (ending == null || ending.length() < 1) { + if (vTagCounts.containsKey(name)) { + vTagCounts.put(name, vTagCounts.get(name) + 1); + } else { + vTagCounts.put(name, 1); + } + } else { + ending = " /"; + } + return "<" + name + params + ending + ">"; + } else { + return ""; + } + } + + // comments + m = P_COMMENT.matcher(s); + if (!stripComment && m.find()) { + return "<" + m.group() + ">"; + } + + return ""; + } + + private String processParamProtocol(String s) { + String start = "#//"; + s = decodeEntities(s); + final Matcher m = P_PROTOCOL.matcher(s); + if (m.find()) { + final String protocol = m.group(1); + if (!inArray(protocol, vAllowedProtocols)) { + // bad protocol, turn into local anchor link instead + s = "#" + s.substring(protocol.length() + 1); + if (s.startsWith(start)) { + s = "#" + s.substring(3); + } + } + } + + return s; + } + + private String decodeEntities(String s) { + StringBuffer buf = new StringBuffer(); + + Matcher m = P_ENTITY.matcher(s); + while (m.find()) { + final String match = m.group(1); + final int decimal = Integer.decode(match).intValue(); + m.appendReplacement(buf, Matcher.quoteReplacement(chr(decimal))); + } + m.appendTail(buf); + s = buf.toString(); + + buf = new StringBuffer(); + m = P_ENTITY_UNICODE.matcher(s); + while (m.find()) { + final String match = m.group(1); + final int decimal = Integer.valueOf(match, 16).intValue(); + m.appendReplacement(buf, Matcher.quoteReplacement(chr(decimal))); + } + m.appendTail(buf); + s = buf.toString(); + + buf = new StringBuffer(); + m = P_ENCODE.matcher(s); + while (m.find()) { + final String match = m.group(1); + final int decimal = Integer.valueOf(match, 16).intValue(); + m.appendReplacement(buf, Matcher.quoteReplacement(chr(decimal))); + } + m.appendTail(buf); + s = buf.toString(); + + s = validateEntities(s); + return s; + } + + private String validateEntities(final String s) { + StringBuffer buf = new StringBuffer(); + + // validate entities throughout the string + Matcher m = P_VALID_ENTITIES.matcher(s); + while (m.find()) { + final String one = m.group(1); // ([^&;]*) + final String two = m.group(2); // (?=(;|&|$)) + m.appendReplacement(buf, Matcher.quoteReplacement(checkEntity(one, two))); + } + m.appendTail(buf); + + return encodeQuotes(buf.toString()); + } + + private String encodeQuotes(final String s) { + if (encodeQuotes) { + StringBuffer buf = new StringBuffer(); + Matcher m = P_VALID_QUOTES.matcher(s); + while (m.find()) { + final String one = m.group(1); // (>|^) + final String two = m.group(2); // ([^<]+?) + final String three = m.group(3); // (<|$) + // 不替换双引号为",防止json格式无效 regexReplace(P_QUOTE, """, two) + m.appendReplacement(buf, Matcher.quoteReplacement(one + two + three)); + } + m.appendTail(buf); + return buf.toString(); + } else { + return s; + } + } + + private String checkEntity(final String preamble, final String term) { + + return ";".equals(term) && isValidEntity(preamble) ? '&' + preamble : "&" + preamble; + } + + private boolean isValidEntity(final String entity) { + return inArray(entity, vAllowedEntities); + } + + private static boolean inArray(final String s, final String[] array) { + for (String item : array) { + if (item != null && item.equals(s)) { + return true; + } + } + return false; + } + + private boolean allowed(final String name) { + return (vAllowed.isEmpty() || vAllowed.containsKey(name)) && !inArray(name, vDisallowed); + } + + private boolean allowedAttribute(final String name, final String paramName) { + return allowed(name) && (vAllowed.isEmpty() || vAllowed.get(name).contains(paramName)); + } +} \ No newline at end of file diff --git a/easyink-common/src/main/java/com/easyink/common/utils/http/HttpHelper.java b/easyink-common/src/main/java/com/easyink/common/utils/http/HttpHelper.java new file mode 100644 index 0000000..7fe1892 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/utils/http/HttpHelper.java @@ -0,0 +1,47 @@ +package com.easyink.common.utils.http; + +import org.apache.commons.lang3.exception.ExceptionUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.servlet.ServletRequest; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; + +/** + * 通用http工具封装 + * + * @author admin + */ +public class HttpHelper { + private static final Logger LOGGER = LoggerFactory.getLogger(HttpHelper.class); + + private HttpHelper() { + } + + public static String getBodyString(ServletRequest request) { + StringBuilder sb = new StringBuilder(); + BufferedReader reader = null; + try (InputStream inputStream = request.getInputStream()) { + reader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8)); + String line; + while ((line = reader.readLine()) != null) { + sb.append(line); + } + } catch (IOException e) { + LOGGER.warn("getBodyString出现问题!"); + } finally { + if (reader != null) { + try { + reader.close(); + } catch (IOException e) { + LOGGER.error(ExceptionUtils.getMessage(e)); + } + } + } + return sb.toString(); + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/utils/http/HttpUtils.java b/easyink-common/src/main/java/com/easyink/common/utils/http/HttpUtils.java new file mode 100644 index 0000000..28d53a8 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/utils/http/HttpUtils.java @@ -0,0 +1,211 @@ +package com.easyink.common.utils.http; + +import com.easyink.common.constant.Constants; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.net.ssl.*; +import java.io.*; +import java.net.ConnectException; +import java.net.SocketTimeoutException; +import java.net.URL; +import java.net.URLConnection; +import java.nio.charset.StandardCharsets; +import java.security.cert.X509Certificate; + +/** + * 通用http发送方法 + * + * @author admin + */ +public class HttpUtils { + private static final Logger log = LoggerFactory.getLogger(HttpUtils.class); + private static final String ACCEPT = "accept"; + private static final String CONNECTION = "connection"; + private static final String KEEP = "Keep-Alive"; + private static final String AGENT = "user-agent"; + private static final String MOZILLA = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"; + private static final String RECV = "recv - {}"; + private static final String PARAM = ",param="; + private static final String CHARSET = "utf-8"; + + private HttpUtils() { + } + + /** + * 向指定 URL 发送GET方法的请求 + * + * @param url 发送请求的 URL + * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 + * @return 所代表远程资源的响应结果 + */ + public static String sendGet(String url, String param) { + return sendGet(url, param, Constants.UTF8); + } + + /** + * 向指定 URL 发送GET方法的请求 + * + * @param url 发送请求的 URL + * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 + * @param contentType 编码类型 + * @return 所代表远程资源的响应结果 + */ + public static String sendGet(String url, String param, String contentType) { + StringBuilder result = new StringBuilder(); + BufferedReader in = null; + try { + String urlNameString = url + "?" + param; + log.info("sendGet - {}", urlNameString); + URL realUrl = new URL(urlNameString); + URLConnection connection = realUrl.openConnection(); + connection.setRequestProperty(ACCEPT, "*/*"); + connection.setRequestProperty(CONNECTION, KEEP); + connection.setRequestProperty(AGENT, MOZILLA); + connection.connect(); + in = new BufferedReader(new InputStreamReader(connection.getInputStream(), contentType)); + String line; + while ((line = in.readLine()) != null) { + result.append(line); + } + log.info(RECV, result); + } catch (ConnectException e) { + log.error("调用HttpUtils.sendGet ConnectException, url=" + url + PARAM + param, e); + } catch (SocketTimeoutException e) { + log.error("调用HttpUtils.sendGet SocketTimeoutException, url=" + url + PARAM + param, e); + } catch (IOException e) { + log.error("调用HttpUtils.sendGet IOException, url=" + url + PARAM + param, e); + } catch (Exception e) { + log.error("调用HttpsUtil.sendGet Exception, url=" + url + PARAM + param, e); + } finally { + try { + if (in != null) { + in.close(); + } + } catch (Exception ex) { + log.error("调用in.close Exception, url=" + url + PARAM + param, ex); + } + } + return result.toString(); + } + + /** + * 向指定 URL 发送POST方法的请求 + * + * @param url 发送请求的 URL + * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 + * @return 所代表远程资源的响应结果 + */ + public static String sendPost(String url, String param) { + PrintWriter out = null; + BufferedReader in = null; + StringBuilder result = new StringBuilder(); + try { + String urlNameString = url; + log.info("sendPost - {}", urlNameString); + URL realUrl = new URL(urlNameString); + URLConnection conn = realUrl.openConnection(); + conn.setRequestProperty(ACCEPT, "*/*"); + conn.setRequestProperty(CONNECTION, KEEP); + conn.setRequestProperty(AGENT, MOZILLA); + conn.setRequestProperty("Accept-Charset", CHARSET); + conn.setRequestProperty("contentType", CHARSET); + conn.setDoOutput(true); + conn.setDoInput(true); + out = new PrintWriter(conn.getOutputStream()); + out.print(param); + out.flush(); + in = new BufferedReader(new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8)); + String line; + while ((line = in.readLine()) != null) { + result.append(line); + } + log.info(RECV, result); + } catch (ConnectException e) { + log.error("调用HttpUtils.sendPost ConnectException, url=" + url + PARAM + param, e); + } catch (SocketTimeoutException e) { + log.error("调用HttpUtils.sendPost SocketTimeoutException, url=" + url + PARAM + param, e); + } catch (IOException e) { + log.error("调用HttpUtils.sendPost IOException, url=" + url + PARAM + param, e); + } catch (Exception e) { + log.error("调用HttpsUtil.sendPost Exception, url=" + url + PARAM + param, e); + } finally { + try { + if (out != null) { + out.close(); + } + if (in != null) { + in.close(); + } + } catch (IOException ex) { + log.error("调用in.close Exception, url=" + url + PARAM + param, ex); + } + } + return result.toString(); + } + + public static String sendSSLPost(String url, String param) { + StringBuilder result = new StringBuilder(); + String urlNameString = url + "?" + param; + try { + log.info("sendSSLPost - {}", urlNameString); + SSLContext sc = SSLContext.getInstance("SSL"); + sc.init(null, new TrustManager[]{new TrustAnyTrustManager()}, new java.security.SecureRandom()); + URL console = new URL(urlNameString); + HttpsURLConnection conn = (HttpsURLConnection) console.openConnection(); + conn.setRequestProperty(ACCEPT, "*/*"); + conn.setRequestProperty(CONNECTION, KEEP); + conn.setRequestProperty(AGENT, MOZILLA); + conn.setRequestProperty("Accept-Charset", CHARSET); + conn.setRequestProperty("contentType", CHARSET); + conn.setDoOutput(true); + conn.setDoInput(true); + + conn.setSSLSocketFactory(sc.getSocketFactory()); + conn.setHostnameVerifier(new TrustAnyHostnameVerifier()); + conn.connect(); + InputStream is = conn.getInputStream(); + BufferedReader br = new BufferedReader(new InputStreamReader(is)); + String ret = ""; + while ((ret = br.readLine()) != null) { + if (!"".equals(ret.trim())) { + result.append(new String(ret.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8)); + } + } + log.info(RECV, result); + conn.disconnect(); + br.close(); + } catch (ConnectException e) { + log.error("调用HttpUtils.sendSSLPost ConnectException, url=" + url + PARAM + param, e); + } catch (SocketTimeoutException e) { + log.error("调用HttpUtils.sendSSLPost SocketTimeoutException, url=" + url + PARAM + param, e); + } catch (IOException e) { + log.error("调用HttpUtils.sendSSLPost IOException, url=" + url + PARAM + param, e); + } catch (Exception e) { + log.error("调用HttpsUtil.sendSSLPost Exception, url=" + url + PARAM + param, e); + } + return result.toString(); + } + + private static class TrustAnyTrustManager implements X509TrustManager { + @Override + public void checkClientTrusted(X509Certificate[] chain, String authType) { + } + + @Override + public void checkServerTrusted(X509Certificate[] chain, String authType) { + } + + @Override + public X509Certificate[] getAcceptedIssuers() { + return new X509Certificate[]{}; + } + } + + private static class TrustAnyHostnameVerifier implements HostnameVerifier { + @Override + public boolean verify(String hostname, SSLSession session) { + return true; + } + } +} \ No newline at end of file diff --git a/easyink-common/src/main/java/com/easyink/common/utils/ip/AddressUtils.java b/easyink-common/src/main/java/com/easyink/common/utils/ip/AddressUtils.java new file mode 100644 index 0000000..2fa5a6d --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/utils/ip/AddressUtils.java @@ -0,0 +1,49 @@ +package com.easyink.common.utils.ip; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.easyink.common.config.RuoYiConfig; +import com.easyink.common.constant.Constants; +import com.easyink.common.utils.StringUtils; +import com.easyink.common.utils.http.HttpUtils; +import com.easyink.common.utils.spring.SpringUtils; +import lombok.extern.slf4j.Slf4j; + +/** + * 获取地址类 + * + * @author admin + */ +@Slf4j +public class AddressUtils { + + // IP地址查询 + private static final String IP_URL = "http://whois.pconline.com.cn/ipJson.jsp"; + + // 未知地址 + private static final String UNKNOWN = "XX XX"; + + public static String getRealAddressByIP(String ip) { + // 内网不查询 + if (IpUtils.internalIp(ip)) { + return "内网IP"; + } + RuoYiConfig ruoYiConfig = SpringUtils.getBean(RuoYiConfig.class); + if (ruoYiConfig.isAddressEnabled()) { + try { + String rspStr = HttpUtils.sendGet(IP_URL, "ip=" + ip + "&json=true", Constants.GBK); + if (StringUtils.isEmpty(rspStr)) { + log.error("获取地理位置异常 {}", ip); + return UNKNOWN; + } + JSONObject obj = JSON.parseObject(rspStr); + String region = obj.getString("pro"); + String city = obj.getString("city"); + return String.format("%s %s", region, city); + } catch (Exception e) { + log.error("获取地理位置异常 {}", ip); + } + } + return UNKNOWN; + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/utils/ip/IpUtils.java b/easyink-common/src/main/java/com/easyink/common/utils/ip/IpUtils.java new file mode 100644 index 0000000..fbeacb3 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/utils/ip/IpUtils.java @@ -0,0 +1,201 @@ +package com.easyink.common.utils.ip; + +import com.easyink.common.utils.StringUtils; +import com.easyink.common.utils.html.EscapeUtil; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.ArrayUtils; +import org.apache.commons.lang3.ObjectUtils; +import org.apache.commons.lang3.exception.ExceptionUtils; +import org.jsoup.Connection; +import org.jsoup.Jsoup; +import org.jsoup.nodes.Document; +import org.jsoup.select.Elements; + +import javax.servlet.http.HttpServletRequest; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.*; +import java.util.ArrayList; +import java.util.Enumeration; +import java.util.List; +import java.util.Optional; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * 获取IP方法 + * + * @author admin + */ +@Slf4j +public class IpUtils { + private static final String LOCAL_HOST = "127.0.0.1"; + public static String getIpAddr(HttpServletRequest request) { + String unknown = "unknown"; + if (request == null) { + return unknown; + } + String ip = request.getHeader("x-forwarded-for"); + if (ip == null || ip.length() == 0 || unknown.equalsIgnoreCase(ip)) { + ip = request.getHeader("Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || unknown.equalsIgnoreCase(ip)) { + ip = request.getHeader("X-Forwarded-For"); + } + if (ip == null || ip.length() == 0 || unknown.equalsIgnoreCase(ip)) { + ip = request.getHeader("WL-Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || unknown.equalsIgnoreCase(ip)) { + ip = request.getHeader("X-Real-IP"); + } + + if (ip == null || ip.length() == 0 || unknown.equalsIgnoreCase(ip)) { + ip = request.getRemoteAddr(); + } + return "0:0:0:0:0:0:0:1".equals(ip) ? LOCAL_HOST : EscapeUtil.clean(ip); + } + + public static boolean internalIp(String ip) { + byte[] addr = textToNumericFormatV4(ip); + return internalIp(addr) || LOCAL_HOST.equals(ip); + } + + private static boolean internalIp(byte[] addr) { + if (StringUtils.isNull(addr) || addr.length < 2) { + return true; + } + final byte b0 = addr[0]; + final byte b1 = addr[1]; + // 10.x.x.x/8 + final byte SECTION_1 = 0x0A; + // 172.16.x.x/12 + final byte SECTION_2 = (byte) 0xAC; + final byte SECTION_3 = (byte) 0x10; + final byte SECTION_4 = (byte) 0x1F; + // 192.168.x.x/16 + final byte SECTION_5 = (byte) 0xC0; + final byte SECTION_6 = (byte) 0xA8; + switch (b0) { + case SECTION_1: + return true; + case SECTION_2: + if (b1 >= SECTION_3 && b1 <= SECTION_4) { + return true; + } + case SECTION_5: + if (b1 == SECTION_6) { + return true; + } + default: + return false; + } + } + + /** + * 将IPv4地址转换成字节 + * + * @param text IPv4地址 + * @return byte 字节 + */ + public static byte[] textToNumericFormatV4(String text) { + if (text.length() == 0) { + return ArrayUtils.EMPTY_BYTE_ARRAY; + } + + byte[] bytes = new byte[4]; + String[] elements = text.split("\\.", -1); + try { + long l; + int i; + switch (elements.length) { + case 1: + l = Long.parseLong(elements[0]); + if ((l < 0L) || (l > 4294967295L)) { + return ArrayUtils.EMPTY_BYTE_ARRAY; + } + bytes[0] = (byte) (int) (l >> 24 & 0xFF); + bytes[1] = (byte) (int) ((l & 0xFFFFFF) >> 16 & 0xFF); + bytes[2] = (byte) (int) ((l & 0xFFFF) >> 8 & 0xFF); + bytes[3] = (byte) (int) (l & 0xFF); + break; + case 2: + l = Integer.parseInt(elements[0]); + if ((l < 0L) || (l > 255L)) { + return ArrayUtils.EMPTY_BYTE_ARRAY; + } + bytes[0] = (byte) (int) (l & 0xFF); + l = Integer.parseInt(elements[1]); + if ((l < 0L) || (l > 16777215L)) { + return ArrayUtils.EMPTY_BYTE_ARRAY; + } + bytes[1] = (byte) (int) (l >> 16 & 0xFF); + bytes[2] = (byte) (int) ((l & 0xFFFF) >> 8 & 0xFF); + bytes[3] = (byte) (int) (l & 0xFF); + break; + case 3: + for (i = 0; i < 2; ++i) { + l = Integer.parseInt(elements[i]); + if ((l < 0L) || (l > 255L)) { + return ArrayUtils.EMPTY_BYTE_ARRAY; + } + bytes[i] = (byte) (int) (l & 0xFF); + } + l = Integer.parseInt(elements[2]); + if ((l < 0L) || (l > 65535L)) { + return ArrayUtils.EMPTY_BYTE_ARRAY; + } + bytes[2] = (byte) (int) (l >> 8 & 0xFF); + bytes[3] = (byte) (int) (l & 0xFF); + break; + case 4: + for (i = 0; i < 4; ++i) { + l = Integer.parseInt(elements[i]); + if ((l < 0L) || (l > 255L)) { + return ArrayUtils.EMPTY_BYTE_ARRAY; + } + bytes[i] = (byte) (int) (l & 0xFF); + } + break; + default: + return ArrayUtils.EMPTY_BYTE_ARRAY; + } + } catch (NumberFormatException e) { + return ArrayUtils.EMPTY_BYTE_ARRAY; + } + return bytes; + } + + public static String getHostIp() { + try { + return InetAddress.getLocalHost().getHostAddress(); + } catch (UnknownHostException e) { + log.error("getHostIp Exception e:{}", ExceptionUtils.getStackTrace(e)); + } + return LOCAL_HOST; + } + + public static String getHostName() { + try { + return InetAddress.getLocalHost().getHostName(); + } catch (UnknownHostException e) { + log.error("getHostIp Exception e:{}", ExceptionUtils.getStackTrace(e)); + + } + return "未知"; + } + public static String getOutIp() { + Document document = null; + try { + document = Jsoup.connect("https://ip.chinaz.com/").get(); + } catch (IOException e) { + e.printStackTrace(); + } + Elements select = document.select("#leftinfo > div.IcpMain02.bor-t1s02 > div.WhoIpWrap.jspu > div.WhwtdWrap.bor-b1s.col-gray03 > span:nth-child(1)"); + String s = select.toString(); + String ip = s.substring(s.indexOf(">") + 1, s.lastIndexOf("<")); + return ip; + } + + +} \ No newline at end of file diff --git a/easyink-common/src/main/java/com/easyink/common/utils/poi/ExcelUtil.java b/easyink-common/src/main/java/com/easyink/common/utils/poi/ExcelUtil.java new file mode 100644 index 0000000..3d611e2 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/utils/poi/ExcelUtil.java @@ -0,0 +1,981 @@ +package com.easyink.common.utils.poi; + +import com.easyink.common.annotation.Excel; +import com.easyink.common.annotation.Excel.ColumnType; +import com.easyink.common.annotation.Excel.Type; +import com.easyink.common.annotation.Excels; +import com.easyink.common.config.RuoYiConfig; +import com.easyink.common.core.domain.AjaxResult; +import com.easyink.common.core.text.Convert; +import com.easyink.common.exception.CustomException; +import com.easyink.common.utils.DateUtils; +import com.easyink.common.utils.DictUtils; +import com.easyink.common.utils.StringUtils; +import com.easyink.common.utils.reflect.ReflectUtils; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.exception.ExceptionUtils; +import org.apache.poi.hssf.usermodel.HSSFDateUtil; +import org.apache.poi.openxml4j.exceptions.InvalidFormatException; +import org.apache.poi.ss.usermodel.*; +import org.apache.poi.ss.util.CellRangeAddressList; +import org.apache.poi.xssf.streaming.SXSSFWorkbook; +import org.apache.poi.xssf.usermodel.XSSFDataValidation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.*; +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.math.BigDecimal; +import java.text.DecimalFormat; +import java.util.*; +import java.util.stream.Collectors; + +/** + * Excel相关处理 + * + * @author admin + */ +public class ExcelUtil { + private static final Logger log = LoggerFactory.getLogger(ExcelUtil.class); + + /** + * Excel sheet最大行数,默认65536 + */ + public static final int SHEET_SIZE = 65536; + + /** + * 工作表名称 + */ + private String sheetName; + + /** + * 导出类型(EXPORT:导出数据;IMPORT:导入模板) + */ + private Type type; + + /** + * 工作薄对象 + */ + private Workbook wb; + + /** + * 工作表对象 + */ + private Sheet sheet; + + /** + * 样式列表 + */ + private Map styles; + + /** + * 导入导出数据列表 + */ + private List list; + + /** + * 注解列表 + */ + private List fields; + + /** + * 实体对象 + */ + private Class clazz; + /** + * 是否是自定义选择导出字段 + */ + private Boolean isCustom; + /** + * 自定义选中导出的字段名集合 + */ + private List selectedProperties = new ArrayList<>(); + + + public ExcelUtil(Class clazz) { + this.clazz = clazz; + } + + public void init(List list, String sheetName, Type type) { + if (list == null) { + list = new ArrayList<>(); + } + this.list = list; + this.sheetName = sheetName; + this.type = type; + createExcelField(); + createWorkbook(); + } + + /** + * 初始化自定义导出 (V2支持导出自定义字段) + * + * @param list 导出的集合 + * @param sheetName 表单名 + * @param type 类型 + * @param selectProperties 选中的字段名集合,不传默认导出所有默认字段 + */ + public void initV2(List list, String sheetName, Type type, List selectProperties) { + if (list == null) { + list = new ArrayList<>(); + } + this.list = list; + this.sheetName = sheetName; + this.type = type; + this.isCustom = CollectionUtils.isNotEmpty(selectProperties); + this.selectedProperties = selectProperties; + createExcelFieldV2(); + createWorkbook(); + } + + + /** + * 对excel表单默认第一个索引名转换成list + * + * @param is 输入流 + * @return 转换后集合 + */ + public List importExcel(InputStream is) throws Exception { + return importExcel(StringUtils.EMPTY, is); + } + + /** + * 对excel表单指定表格索引名转换成list + * + * @param sheetName 表格索引名 + * @param is 输入流 + * @return 转换后集合 + */ + public List importExcel(String sheetName, InputStream is) throws IOException, InvalidFormatException, IllegalAccessException, InstantiationException { + this.type = Type.IMPORT; + this.wb = WorkbookFactory.create(is); + List arrayList = new ArrayList<>(); + Sheet mySheet; + if (StringUtils.isNotEmpty(sheetName)) { + // 如果指定sheet名,则取指定sheet中的内容. + mySheet = wb.getSheet(sheetName); + } else { + // 如果传入的sheet名不存在则默认指向第1个sheet. + mySheet = wb.getSheetAt(0); + } + + if (mySheet == null) { + throw new IOException("文件sheet不存在"); + } + + int rows = mySheet.getPhysicalNumberOfRows(); + + if (rows > 0) { + // 定义一个map用于存放excel列的序号和field. + Map cellMap = new HashMap<>(); + // 获取表头 + Row heard = mySheet.getRow(0); + for (int i = 0; i < heard.getPhysicalNumberOfCells(); i++) { + Cell cell = heard.getCell(i); + if (StringUtils.isNotNull(cell)) { + String value = this.getCellValue(heard, i).toString(); + cellMap.put(value, i); + } else { + cellMap.put(null, i); + } + } + // 有数据时才处理 得到类的所有field. + Field[] allFields = clazz.getDeclaredFields(); + // 定义一个map用于存放列的序号和field. + Map fieldsMap = new HashMap<>(); + for (int col = 0; col < allFields.length; col++) { + Field field = allFields[col]; + Excel attr = field.getAnnotation(Excel.class); + if (attr != null && (attr.type() == Type.ALL || attr.type() == type)) { + // 设置类的私有字段属性可访问. + field.setAccessible(true); + Integer column = cellMap.get(attr.name()); + if (column != null) { + fieldsMap.put(column, field); + } + } + } + for (int i = 1; i < rows; i++) { + // 从第2行开始取数据,默认第一行是表头. + Row row = mySheet.getRow(i); + T entity = null; + for (Map.Entry entry : fieldsMap.entrySet()) { + Object val = this.getCellValue(row, entry.getKey()); + + // 如果不存在实例则新建. + entity = (entity == null ? clazz.newInstance() : entity); + // 从map中得到对应列的field. + Field field = fieldsMap.get(entry.getKey()); + // 取得类型,并根据对象类型设置值. + Class fieldType = field.getType(); + if (String.class == fieldType) { + String s = Convert.toStr(val); + if (StringUtils.endsWith(s, ".0")) { + val = StringUtils.substringBefore(s, ".0"); + } else { + val = Convert.toStr(val); + } + } else if ((Integer.TYPE == fieldType) || (Integer.class == fieldType)) { + val = Convert.toInt(val); + } else if ((Long.TYPE == fieldType) || (Long.class == fieldType)) { + val = Convert.toLong(val); + } else if ((Double.TYPE == fieldType) || (Double.class == fieldType)) { + val = Convert.toDouble(val); + } else if ((Float.TYPE == fieldType) || (Float.class == fieldType)) { + val = Convert.toFloat(val); + } else if (BigDecimal.class == fieldType) { + val = Convert.toBigDecimal(val); + } else if (Date.class == fieldType) { + if (val instanceof String) { + val = DateUtils.parseDate(val); + } else if (val instanceof Double) { + val = DateUtil.getJavaDate((Double) val); + } + } + if (StringUtils.isNotNull(fieldType)) { + Excel attr = field.getAnnotation(Excel.class); + String propertyName = field.getName(); + if (StringUtils.isNotEmpty(attr.targetAttr())) { + propertyName = field.getName() + "." + attr.targetAttr(); + } else if (StringUtils.isNotEmpty(attr.readConverterExp())) { + val = reverseByExp(Convert.toStr(val), attr.readConverterExp(), attr.separator()); + } else if (StringUtils.isNotEmpty(attr.dictType())) { + val = reverseDictByExp(Convert.toStr(val), attr.dictType(), attr.separator()); + } + ReflectUtils.invokeSetter(entity, propertyName, val); + } + } + arrayList.add(entity); + } + } + return arrayList; + } + + /** + * 对list数据源将其里面的数据导入到excel表单 + * + * @param list 导出数据集合 + * @param sheetName 工作表的名称 + * @return 结果 + */ + public AjaxResult exportExcel(List list, String sheetName) { + this.init(list, sheetName, Type.EXPORT); + return exportExcel(); + } + + /** + * 导出excel V2 + * + * @param list 导出的列表 + * @param sheetName 表单名 + * @param selectedProperties 指定的字段名集合 + * @return excel文件名 + */ + public AjaxResult exportExcelV2(List list, String sheetName, List selectedProperties) { + this.initV2(list, sheetName, Type.EXPORT, selectedProperties); + return exportExcelV2(); + } + + /** + * 对list数据源将其里面的数据导入到excel表单 + * + * @param sheetName 工作表的名称 + * @return 结果 + */ + public AjaxResult importTemplateExcel(String sheetName) { + this.init(null, sheetName, Type.IMPORT); + return exportExcel(); + } + + /** + * 对list数据源将其里面的数据导入到excel表单 + * + * @return 结果 + */ + public AjaxResult exportExcel() { + OutputStream out = null; + try { + // 取出一共有多少个sheet. + double sheetNo = Math.ceil((double) list.size() / SHEET_SIZE); + for (int index = 0; index <= sheetNo; index++) { + createSheet(sheetNo, index); + + // 产生一行 + Row row = sheet.createRow(0); + int column = 0; + // 写入各个字段的列头名称 + for (Object[] os : fields) { + Excel excel = (Excel) os[1]; + this.createCell(excel, row, column++); + } + if (Type.EXPORT.equals(type)) { + fillExcelData(index); + } + } + String filename = encodingFilename(sheetName); + out = new FileOutputStream(getAbsoluteFile(filename)); + wb.write(out); + return AjaxResult.success(filename); + } catch (Exception e) { + log.error("导出Excel异常{}", ExceptionUtils.getStackTrace(e)); + throw new CustomException("导出Excel失败,请联系网站管理员!"); + } finally { + if (wb != null) { + try { + wb.close(); + } catch (IOException e1) { + log.error("异常信息:{}", e1.getMessage()); + } + } + if (out != null) { + try { + out.close(); + } catch (IOException e1) { + log.error("异常信息:{}", e1.getMessage()); + } + } + } + } + + /** + * 对list数据源将其里面的数据导入到excel表单(第二版) + * + * @return 结果 + */ + public AjaxResult exportExcelV2() { + OutputStream out = null; + try { + // 取出一共有多少个sheet. + double sheetNo = Math.ceil((double) list.size() / SHEET_SIZE); + for (int index = 0; index < sheetNo; index++) { + createSheet(sheetNo, index); + + // 产生一行 + Row row = sheet.createRow(0); + int column = 0; + // 写入各个字段的列头名称 + if (isCustom) { + for (String colName : selectedProperties) { + this.createCell(colName, row, column++); + } + } else { + for (Object[] os : fields) { + Excel excel = (Excel) os[1]; + this.createCell(excel, row, column++); + } + } + if (Type.EXPORT.equals(type)) { + fillExcelDataV2(index); + } + } + String filename = encodingFilename(sheetName); + out = new FileOutputStream(getAbsoluteFile(filename)); + wb.write(out); + return AjaxResult.success(filename); + } catch (Exception e) { + log.error("导出Excel异常{}", ExceptionUtils.getStackTrace(e)); + throw new CustomException("导出Excel失败,请联系网站管理员!"); + } finally { + if (wb != null) { + try { + wb.close(); + } catch (IOException e1) { + log.error("异常信息:{}", e1.getMessage()); + } + } + if (out != null) { + try { + out.close(); + } catch (IOException e1) { + log.error("异常信息:{}", e1.getMessage()); + } + } + } + } + + /** + * 填充excel数据 + * + * @param index 序号 + */ + public void fillExcelData(int index) { + int startNo = index * SHEET_SIZE; + int endNo = Math.min(startNo + SHEET_SIZE, list.size()); + Row row; + for (int i = startNo; i < endNo; i++) { + row = sheet.createRow(i + 1 - startNo); + // 得到导出对象. + T vo = list.get(i); + int column = 0; + for (Object[] os : fields) { + Field field = (Field) os[0]; + Excel excel = (Excel) os[1]; + // 设置实体类私有属性可访问 + field.setAccessible(true); + this.addCell(excel, row, vo, field, column++); + } + } + } + + /** + * 填充表单数据 + * + * @param index 索引 + * @throws IllegalAccessException + * @throws NoSuchFieldException + */ + public void fillExcelDataV2(int index) throws IllegalAccessException, NoSuchFieldException { + int startNo = index * SHEET_SIZE; + int endNo = Math.min(startNo + SHEET_SIZE, list.size()); + Row row; + for (int i = startNo; i < endNo; i++) { + row = sheet.createRow(i + 1 - startNo); + // 得到导出对象. + T vo = list.get(i); + int column = 0; + for (Object[] os : fields) { + Field field = (Field) os[0]; + Excel excel = (Excel) os[1]; + field.setAccessible(true); + // 非自定义导出 或者 指定导出该字段才填充该数据 + if (!isCustom || selectedProperties.contains(excel.name())) { + // 设置实体类私有属性可访问 + this.addCell(excel, row, vo, field, column++); + } + } + // 自定义导出:填充自定义字段 + if (isCustom) { + //通过反射获取扩展字段映射 + Field mapperField = vo.getClass().getDeclaredField("extendPropMapper"); + mapperField.setAccessible(true); + Map map = (Map) mapperField.get(vo); + for (Map.Entry entry : map.entrySet()) { + // 当前列的字段 + this.addCell(row, entry.getValue(), column++); + } + } + } + } + + + /** + * 创建表格样式 + * + * @param wb 工作薄对象 + * @return 样式列表 + */ + private Map createStyles(Workbook wb) { + // 写入各条记录,每条记录对应excel表中的一行 + Map styleMap = new HashMap<>(); + CellStyle style = wb.createCellStyle(); + style.setAlignment(HorizontalAlignment.CENTER); + style.setVerticalAlignment(VerticalAlignment.CENTER); + style.setBorderRight(BorderStyle.THIN); + style.setRightBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + style.setBorderLeft(BorderStyle.THIN); + style.setLeftBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + style.setBorderTop(BorderStyle.THIN); + style.setTopBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + style.setBorderBottom(BorderStyle.THIN); + style.setBottomBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + Font dataFont = wb.createFont(); + dataFont.setFontName("Arial"); + dataFont.setFontHeightInPoints((short) 10); + style.setFont(dataFont); + styleMap.put("data", style); + + style = wb.createCellStyle(); + style.cloneStyleFrom(styleMap.get("data")); + style.setAlignment(HorizontalAlignment.CENTER); + style.setVerticalAlignment(VerticalAlignment.CENTER); + style.setFillForegroundColor(IndexedColors.GREY_50_PERCENT.getIndex()); + style.setFillPattern(FillPatternType.SOLID_FOREGROUND); + Font headerFont = wb.createFont(); + headerFont.setFontName("Arial"); + headerFont.setFontHeightInPoints((short) 10); + headerFont.setBold(true); + headerFont.setColor(IndexedColors.WHITE.getIndex()); + style.setFont(headerFont); + styleMap.put("header", style); + + return styleMap; + } + + /** + * 创建单元格 + */ + public Cell createCell(Excel attr, Row row, int column) { + // 创建列 + Cell cell = row.createCell(column); + // 写入列信息 + cell.setCellValue(attr.name()); + setDataValidation(attr, row, column); + cell.setCellStyle(styles.get("header")); + return cell; + } + + /** + * 创建单元格 + * + * @param name 单元格名称 + * @param row 行 + * @param column 列 + * @return {@link Cell } + */ + public Cell createCell(String name, Row row, int column) { + // 创建列 + Cell cell = row.createCell(column); + // 写入列信息 + cell.setCellValue(name); + setDataValidation(name, row, column); + cell.setCellStyle(styles.get("header")); + return cell; + } + + /** + * 设置单元格信息 + * + * @param value 单元格值 + * @param attr 注解相关 + * @param cell 单元格信息 + */ + public void setCellVo(Object value, Excel attr, Cell cell) { + if (ColumnType.STRING == attr.cellType()) { + cell.setCellType(CellType.STRING); + cell.setCellValue(StringUtils.isNull(value) ? attr.defaultValue() : value + attr.suffix()); + } else if (ColumnType.NUMERIC == attr.cellType()) { + cell.setCellType(CellType.NUMERIC); + cell.setCellValue(Integer.parseInt(value + "")); + } + } + + /** + * 创建表格样式 + */ + public void setDataValidation(Excel attr, Row row, int column) { + String columnString = "注:"; + if (attr.name().indexOf(columnString) >= 0) { + sheet.setColumnWidth(column, 6000); + } else { + // 设置列宽 + sheet.setColumnWidth(column, (int) ((attr.width() + 0.72) * 256)); + row.setHeight((short) (attr.height() * 20)); + } + // 如果设置了提示信息则鼠标放上去提示. + if (StringUtils.isNotEmpty(attr.prompt())) { + // 这里默认设了2-101列提示. + setXSSFPrompt(sheet, "", attr.prompt(), 1, 100, column, column); + } + // 如果设置了combo属性则本列只能选择不能输入 + if (attr.combo().length > 0) { + // 这里默认设了2-101列只能选择不能输入. + setXSSFValidation(sheet, attr.combo(), 1, 100, column, column); + } + } + + /** + * 创建表格样式 + */ + public void setDataValidation(String colName, Row row, int column) { + String columnString = "注:"; + if (colName.indexOf(columnString) >= 0) { + sheet.setColumnWidth(column, 6000); + } else { + // 设置列宽 + sheet.setColumnWidth(column, (int) ((16 + 0.72) * 256)); + row.setHeight((short) (14 * 20)); + } + } + + /** + * 添加单元格 + */ + public Cell addCell(Excel attr, Row row, T vo, Field field, int column) { + Cell cell = null; + try { + // 设置行高 + row.setHeight((short) (attr.height() * 20)); + // 根据Excel中设置情况决定是否导出,有些情况需要保持为空,希望用户填写这一列. + if (attr.isExport()) { + // 创建cell + cell = row.createCell(column); + cell.setCellStyle(styles.get("data")); + + // 用于读取对象中的属性 + Object value = getTargetValue(vo, field, attr); + String dateFormat = attr.dateFormat(); + String readConverterExp = attr.readConverterExp(); + String separator = attr.separator(); + String dictType = attr.dictType(); + if (StringUtils.isNotEmpty(dateFormat) && StringUtils.isNotNull(value)) { + cell.setCellValue(DateUtils.parseDateToStr(dateFormat, (Date) value)); + } else if (StringUtils.isNotEmpty(readConverterExp) && StringUtils.isNotNull(value)) { + cell.setCellValue(convertByExp(Convert.toStr(value), readConverterExp, separator)); + } else if (StringUtils.isNotEmpty(dictType) && StringUtils.isNotNull(value)) { + cell.setCellValue(convertDictByExp(Convert.toStr(value), dictType, separator)); + } else if (value instanceof BigDecimal && -1 != attr.scale()) { + cell.setCellValue((((BigDecimal) value).setScale(attr.scale(), attr.roundingMode())).toString()); + } else { + // 设置列类型 + setCellVo(value, attr, cell); + } + } + } catch (Exception e) { + log.error("导出Excel失败 e:{}", ExceptionUtils.getStackTrace(e)); + } + return cell; + } + + + /** + * 添加单元格 + */ + public Cell addCell(Row row, String value, int column) { + Cell cell = null; + try { + // 设置行高 + row.setHeight((short) (14 * 20)); + // 创建cell + cell = row.createCell(column); + cell.setCellStyle(styles.get("data")); + // 用于读取对象中的属性 + cell.setCellType(CellType.STRING); + cell.setCellValue(value == null ? StringUtils.EMPTY : value); + + } catch (Exception e) { + log.error("导出Excel失败 e:{}", ExceptionUtils.getStackTrace(e)); + } + return cell; + } + + /** + * 设置 POI XSSFSheet 单元格提示 + * + * @param sheet 表单 + * @param promptTitle 提示标题 + * @param promptContent 提示内容 + * @param firstRow 开始行 + * @param endRow 结束行 + * @param firstCol 开始列 + * @param endCol 结束列 + */ + public void setXSSFPrompt(Sheet sheet, String promptTitle, String promptContent, int firstRow, int endRow, + int firstCol, int endCol) { + DataValidationHelper helper = sheet.getDataValidationHelper(); + DataValidationConstraint constraint = helper.createCustomConstraint("DD1"); + CellRangeAddressList regions = new CellRangeAddressList(firstRow, endRow, firstCol, endCol); + DataValidation dataValidation = helper.createValidation(constraint, regions); + dataValidation.createPromptBox(promptTitle, promptContent); + dataValidation.setShowPromptBox(true); + sheet.addValidationData(dataValidation); + } + + /** + * 设置某些列的值只能输入预制的数据,显示下拉框. + * + * @param sheet 要设置的sheet. + * @param textlist 下拉框显示的内容 + * @param firstRow 开始行 + * @param endRow 结束行 + * @param firstCol 开始列 + * @param endCol 结束列 + * @return 设置好的sheet. + */ + public void setXSSFValidation(Sheet sheet, String[] textlist, int firstRow, int endRow, int firstCol, int endCol) { + DataValidationHelper helper = sheet.getDataValidationHelper(); + // 加载下拉列表内容 + DataValidationConstraint constraint = helper.createExplicitListConstraint(textlist); + // 设置数据有效性加载在哪个单元格上,四个参数分别是:起始行、终止行、起始列、终止列 + CellRangeAddressList regions = new CellRangeAddressList(firstRow, endRow, firstCol, endCol); + // 数据有效性对象 + DataValidation dataValidation = helper.createValidation(constraint, regions); + // 处理Excel兼容性问题 + if (dataValidation instanceof XSSFDataValidation) { + dataValidation.setSuppressDropDownArrow(true); + dataValidation.setShowErrorBox(true); + } else { + dataValidation.setSuppressDropDownArrow(false); + } + + sheet.addValidationData(dataValidation); + } + + /** + * 解析导出值 0=男,1=女,2=未知 + * + * @param propertyValue 参数值 + * @param converterExp 翻译注解 + * @param separator 分隔符 + * @return 解析后值 + */ + public static String convertByExp(String propertyValue, String converterExp, String separator) { + StringBuilder propertyString = new StringBuilder(); + String[] convertSource = converterExp.split(","); + for (String item : convertSource) { + String[] itemArray = item.split("="); + if (StringUtils.containsAny(separator, propertyValue)) { + for (String value : propertyValue.split(separator)) { + if (itemArray[0].equals(value)) { + propertyString.append(itemArray[1] + separator); + break; + } + } + } else { + if (itemArray[0].equals(propertyValue)) { + return itemArray[1]; + } + } + } + return StringUtils.stripEnd(propertyString.toString(), separator); + } + + /** + * 反向解析值 男=0,女=1,未知=2 + * + * @param propertyValue 参数值 + * @param converterExp 翻译注解 + * @param separator 分隔符 + * @return 解析后值 + */ + public static String reverseByExp(String propertyValue, String converterExp, String separator) { + StringBuilder propertyString = new StringBuilder(); + String[] convertSource = converterExp.split(","); + for (String item : convertSource) { + String[] itemArray = item.split("="); + if (StringUtils.containsAny(separator, propertyValue)) { + for (String value : propertyValue.split(separator)) { + if (itemArray[1].equals(value)) { + propertyString.append(itemArray[0] + separator); + break; + } + } + } else { + if (itemArray[1].equals(propertyValue)) { + return itemArray[0]; + } + } + } + return StringUtils.stripEnd(propertyString.toString(), separator); + } + + /** + * 解析字典值 + * + * @param dictValue 字典值 + * @param dictType 字典类型 + * @param separator 分隔符 + * @return 字典标签 + */ + public static String convertDictByExp(String dictValue, String dictType, String separator) { + return DictUtils.getDictLabel(dictType, dictValue, separator); + } + + /** + * 反向解析值字典值 + * + * @param dictLabel 字典标签 + * @param dictType 字典类型 + * @param separator 分隔符 + * @return 字典值 + */ + public static String reverseDictByExp(String dictLabel, String dictType, String separator) { + return DictUtils.getDictValue(dictType, dictLabel, separator); + } + + /** + * 编码文件名 + */ + public String encodingFilename(String filename) { + filename = UUID.randomUUID().toString() + "_" + filename + ".xlsx"; + return filename; + } + + /** + * 获取下载路径 + * + * @param filename 文件名称 + */ + public String getAbsoluteFile(String filename) { + String downloadPath = RuoYiConfig.getDownloadPath() + filename; + File desc = new File(downloadPath); + if (!desc.getParentFile().exists()) { + desc.getParentFile().mkdirs(); + } + return downloadPath; + } + + /** + * 获取bean中的属性值 + * + * @param vo 实体对象 + * @param field 字段 + * @param excel 注解 + * @return 最终的属性值 + * @throws Exception + */ + private Object getTargetValue(T vo, Field field, Excel excel) throws Exception { + String dot = "."; + Object o = field.get(vo); + if (StringUtils.isNotEmpty(excel.targetAttr())) { + String target = excel.targetAttr(); + if (target.indexOf(dot) > -1) { + String[] targets = target.split("[.]"); + for (String name : targets) { + o = getValue(o, name); + } + } else { + o = getValue(o, target); + } + } + return o; + } + + /** + * 以类的属性的get方法方法形式获取值 + * + * @param o + * @param name + * @return value + * @throws Exception + */ + private Object getValue(Object o, String name) throws InvocationTargetException, IllegalAccessException, NoSuchMethodException { + if (StringUtils.isNotEmpty(name)) { + Class aClass = o.getClass(); + String methodName = "get" + name.substring(0, 1).toUpperCase() + name.substring(1); + Method method = aClass.getMethod(methodName); + o = method.invoke(o); + } + return o; + } + + /** + * 得到所有定义字段 + */ + private void createExcelField() { + this.fields = new ArrayList<>(); + List tempFields = new ArrayList<>(); + tempFields.addAll(Arrays.asList(clazz.getSuperclass().getDeclaredFields())); + tempFields.addAll(Arrays.asList(clazz.getDeclaredFields())); + for (Field field : tempFields) { + // 单注解 + if (field.isAnnotationPresent(Excel.class)) { + putToField(field, field.getAnnotation(Excel.class)); + } + + // 多注解 + if (field.isAnnotationPresent(Excels.class)) { + Excels attrs = field.getAnnotation(Excels.class); + Excel[] excels = attrs.value(); + for (Excel excel : excels) { + putToField(field, excel); + } + } + } + this.fields = this.fields.stream().sorted(Comparator.comparing(objects -> ((Excel) objects[1]).sort())).collect(Collectors.toList()); + } + + /** + * 创建excel的行标题(第二版:支持自定义导出字段) + */ + private void createExcelFieldV2() { + this.fields = new ArrayList<>(); + List tempFields = new ArrayList<>(); + tempFields.addAll(Arrays.asList(clazz.getSuperclass().getDeclaredFields())); + tempFields.addAll(Arrays.asList(clazz.getDeclaredFields())); + for (Field field : tempFields) { + // 单注解 + if (field.isAnnotationPresent(Excel.class)) { + putToField(field, field.getAnnotation(Excel.class)); + } + // 多注解 + if (field.isAnnotationPresent(Excels.class)) { + Excels attrs = field.getAnnotation(Excels.class); + Excel[] excels = attrs.value(); + for (Excel excel : excels) { + // 非自定义导出 或者 包含导出字段时才填充相应的表头 + if (!isCustom || selectedProperties.contains(excel.name())) { + putToField(field, excel); + } + } + } + } + this.fields = this.fields.stream().sorted(Comparator.comparing(objects -> ((Excel) objects[1]).sort())).collect(Collectors.toList()); + } + + + /** + * 放到字段集合中 + */ + private void putToField(Field field, Excel attr) { + if (attr != null && (attr.type() == Type.ALL || attr.type() == type)) { + this.fields.add(new Object[]{field, attr}); + } + } + + /** + * 创建一个工作簿 + */ + public void createWorkbook() { + this.wb = new SXSSFWorkbook(500); + } + + /** + * 创建工作表 + * + * @param sheetNo sheet数量 + * @param index 序号 + */ + public void createSheet(double sheetNo, int index) { + this.sheet = wb.createSheet(); + this.styles = createStyles(wb); + // 设置工作表的名称. + if (sheetNo == 0) { + wb.setSheetName(index, sheetName); + } else { + wb.setSheetName(index, sheetName + index); + } + } + + /** + * 获取单元格值 + * + * @param row 获取的行 + * @param column 获取单元格列号 + * @return 单元格值 + */ + public Object getCellValue(Row row, int column) { + if (row == null) { + return row; + } + Object val = ""; + try { + Cell cell = row.getCell(column); + if (StringUtils.isNotNull(cell)) { + if (cell.getCellTypeEnum() == CellType.NUMERIC || cell.getCellTypeEnum() == CellType.FORMULA) { + val = cell.getNumericCellValue(); + if (HSSFDateUtil.isCellDateFormatted(cell)) { + val = DateUtil.getJavaDate((Double) val); // POI Excel 日期格式转换 + } else { + if ((Double) val % 1 > 0) { + val = new BigDecimal(val.toString()); + } else { + val = new DecimalFormat("0").format(val); + } + } + } else if (cell.getCellTypeEnum() == CellType.STRING) { + val = cell.getStringCellValue(); + } else if (cell.getCellTypeEnum() == CellType.BOOLEAN) { + val = cell.getBooleanCellValue(); + } else if (cell.getCellTypeEnum() == CellType.ERROR) { + val = cell.getErrorCellValue(); + } + + } + } catch (Exception e) { + return val; + } + return val; + } +} \ No newline at end of file diff --git a/easyink-common/src/main/java/com/easyink/common/utils/reflect/ReflectUtils.java b/easyink-common/src/main/java/com/easyink/common/utils/reflect/ReflectUtils.java new file mode 100644 index 0000000..5c706ed --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/utils/reflect/ReflectUtils.java @@ -0,0 +1,323 @@ +package com.easyink.common.utils.reflect; + +import com.easyink.common.core.text.Convert; +import com.easyink.common.utils.DateUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.Validate; +import org.apache.poi.ss.usermodel.DateUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.lang.reflect.*; +import java.util.Date; + +/** + * 反射工具类. 提供调用getter/setter方法, 访问私有变量, 调用私有方法, 获取泛型类型Class, 被AOP过的真实类等工具函数. + * + * @author admin + */ +@SuppressWarnings("rawtypes") +public class ReflectUtils { + private static final String SETTER_PREFIX = "set"; + + private static final String GETTER_PREFIX = "get"; + + private static final String CGLIB_CLASS_SEPARATOR = "$$"; + + private static Logger logger = LoggerFactory.getLogger(ReflectUtils.class); + + /** + * 调用Getter方法. + * 支持多级,如:对象名.对象名.方法 + */ + @SuppressWarnings("unchecked") + public static E invokeGetter(Object obj, String propertyName) { + Object object = obj; + String dot = "."; + for (String name : StringUtils.split(propertyName, dot)) { + String getterMethodName = GETTER_PREFIX + StringUtils.capitalize(name); + object = invokeMethod(object, getterMethodName, new Class[]{}, new Object[]{}); + } + return (E) object; + } + + /** + * 调用Setter方法, 仅匹配方法名。 + * 支持多级,如:对象名.对象名.方法 + */ + public static void invokeSetter(Object obj, String propertyName, E value) { + Object object = obj; + String[] names = StringUtils.split(propertyName, "."); + for (int i = 0; i < names.length; i++) { + if (i < names.length - 1) { + String getterMethodName = GETTER_PREFIX + StringUtils.capitalize(names[i]); + object = invokeMethod(object, getterMethodName, new Class[]{}, new Object[]{}); + } else { + String setterMethodName = SETTER_PREFIX + StringUtils.capitalize(names[i]); + invokeMethodByName(object, setterMethodName, new Object[]{value}); + } + } + } + + /** + * 直接读取对象属性值, 无视private/protected修饰符, 不经过getter函数. + */ + @SuppressWarnings("unchecked") + public static E getFieldValue(final Object obj, final String fieldName) { + Field field = getAccessibleField(obj, fieldName); + if (field == null) { + logger.debug("在 [" + obj.getClass() + "] 中,没有找到 [" + fieldName + "] 字段 "); + return null; + } + E result = null; + try { + result = (E) field.get(obj); + } catch (IllegalAccessException e) { + logger.error("不可能抛出的异常{}", e.getMessage()); + } + return result; + } + + /** + * 直接设置对象属性值, 无视private/protected修饰符, 不经过setter函数. + */ + public static void setFieldValue(final Object obj, final String fieldName, final E value) { + Field field = getAccessibleField(obj, fieldName); + if (field == null) { + // throw new IllegalArgumentException("在 [" + obj.getClass() + "] 中,没有找到 [" + fieldName + "] 字段 "); + logger.debug("在 [" + obj.getClass() + "] 中,没有找到 [" + fieldName + "] 字段 "); + return; + } + try { + field.set(obj, value); + } catch (IllegalAccessException e) { + logger.error("不可能抛出的异常: {}", e.getMessage()); + } + } + + /** + * 直接调用对象方法, 无视private/protected修饰符. + * 用于一次性调用的情况,否则应使用getAccessibleMethod()函数获得Method后反复调用. + * 同时匹配方法名+参数类型, + */ + @SuppressWarnings("unchecked") + public static E invokeMethod(final Object obj, final String methodName, final Class[] parameterTypes, + final Object[] args) { + if (obj == null || methodName == null) { + return null; + } + Method method = getAccessibleMethod(obj, methodName, parameterTypes); + if (method == null) { + logger.debug("在 [" + obj.getClass() + "] 中,没有找到 [" + methodName + "] 方法 "); + return null; + } + try { + return (E) method.invoke(obj, args); + } catch (Exception e) { + String msg = "method: " + method + ", obj: " + obj + ", args: " + args + ""; + throw convertReflectionExceptionToUnchecked(msg, e); + } + } + + /** + * 直接调用对象方法, 无视private/protected修饰符, + * 用于一次性调用的情况,否则应使用getAccessibleMethodByName()函数获得Method后反复调用. + * 只匹配函数名,如果有多个同名函数调用第一个。 + */ + @SuppressWarnings("unchecked") + public static E invokeMethodByName(final Object obj, final String methodName, final Object[] args) { + Method method = getAccessibleMethodByName(obj, methodName, args.length); + if (method == null) { + // 如果为空不报错,直接返回空。 + logger.debug("在 [" + obj.getClass() + "] 中,没有找到 [" + methodName + "] 方法 "); + return null; + } + try { + // 类型转换(将参数数据类型转换为目标方法参数类型) + Class[] cs = method.getParameterTypes(); + for (int i = 0; i < cs.length; i++) { + if (args[i] != null && !args[i].getClass().equals(cs[i])) { + if (cs[i] == String.class) { + args[i] = Convert.toStr(args[i]); + if (StringUtils.endsWith((String) args[i], ".0")) { + args[i] = StringUtils.substringBefore((String) args[i], ".0"); + } + } else if (cs[i] == Integer.class) { + args[i] = Convert.toInt(args[i]); + } else if (cs[i] == Long.class) { + args[i] = Convert.toLong(args[i]); + } else if (cs[i] == Double.class) { + args[i] = Convert.toDouble(args[i]); + } else if (cs[i] == Float.class) { + args[i] = Convert.toFloat(args[i]); + } else if (cs[i] == Date.class) { + if (args[i] instanceof String) { + args[i] = DateUtils.parseDate(args[i]); + } else { + args[i] = DateUtil.getJavaDate((Double) args[i]); + } + } + } + } + return (E) method.invoke(obj, args); + } catch (Exception e) { + String msg = "method: " + method + ", obj: " + obj + ", args: " + args + ""; + throw convertReflectionExceptionToUnchecked(msg, e); + } + } + + /** + * 循环向上转型, 获取对象的DeclaredField, 并强制设置为可访问. + * 如向上转型到Object仍无法找到, 返回null. + */ + public static Field getAccessibleField(final Object obj, final String fieldName) { + // 为空不报错。直接返回 null + if (obj == null) { + return null; + } + Validate.notBlank(fieldName, "fieldName can't be blank"); + for (Class superClass = obj.getClass(); superClass != Object.class; superClass = superClass.getSuperclass()) { + try { + Field field = superClass.getDeclaredField(fieldName); + makeAccessible(field); + return field; + } catch (NoSuchFieldException e) { + continue; + } + } + return null; + } + + /** + * 循环向上转型, 获取对象的DeclaredMethod,并强制设置为可访问. + * 如向上转型到Object仍无法找到, 返回null. + * 匹配函数名+参数类型。 + * 用于方法需要被多次调用的情况. 先使用本函数先取得Method,然后调用Method.invoke(Object obj, Object... args) + */ + public static Method getAccessibleMethod(final Object obj, final String methodName, + final Class... parameterTypes) { + // 为空不报错。直接返回 null + if (obj == null) { + return null; + } + Validate.notBlank(methodName, "methodName can't be blank"); + for (Class searchType = obj.getClass(); searchType != Object.class; searchType = searchType.getSuperclass()) { + try { + Method method = searchType.getDeclaredMethod(methodName, parameterTypes); + makeAccessible(method); + return method; + } catch (NoSuchMethodException e) { + continue; + } + } + return null; + } + + /** + * 循环向上转型, 获取对象的DeclaredMethod,并强制设置为可访问. + * 如向上转型到Object仍无法找到, 返回null. + * 只匹配函数名。 + * 用于方法需要被多次调用的情况. 先使用本函数先取得Method,然后调用Method.invoke(Object obj, Object... args) + */ + public static Method getAccessibleMethodByName(final Object obj, final String methodName, int argsNum) { + // 为空不报错。直接返回 null + if (obj == null) { + return null; + } + Validate.notBlank(methodName, "methodName can't be blank"); + for (Class searchType = obj.getClass(); searchType != Object.class; searchType = searchType.getSuperclass()) { + Method[] methods = searchType.getDeclaredMethods(); + for (Method method : methods) { + if (method.getName().equals(methodName) && method.getParameterTypes().length == argsNum) { + makeAccessible(method); + return method; + } + } + } + return null; + } + + /** + * 改变private/protected的方法为public,尽量不调用实际改动的语句,避免JDK的SecurityManager抱怨。 + */ + public static void makeAccessible(Method method) { + if ((!Modifier.isPublic(method.getModifiers()) || !Modifier.isPublic(method.getDeclaringClass().getModifiers())) + && !method.isAccessible()) { + method.setAccessible(true); + } + } + + /** + * 改变private/protected的成员变量为public,尽量不调用实际改动的语句,避免JDK的SecurityManager抱怨。 + */ + public static void makeAccessible(Field field) { + if ((!Modifier.isPublic(field.getModifiers()) || !Modifier.isPublic(field.getDeclaringClass().getModifiers()) + || Modifier.isFinal(field.getModifiers())) && !field.isAccessible()) { + field.setAccessible(true); + } + } + + /** + * 通过反射, 获得Class定义中声明的泛型参数的类型, 注意泛型必须定义在父类处 + * 如无法找到, 返回Object.class. + */ + @SuppressWarnings("unchecked") + public static Class getClassGenricType(final Class clazz) { + return getClassGenricType(clazz, 0); + } + + /** + * 通过反射, 获得Class定义中声明的父类的泛型参数的类型. + * 如无法找到, 返回Object.class. + */ + public static Class getClassGenricType(final Class clazz, final int index) { + Type genType = clazz.getGenericSuperclass(); + + if (!(genType instanceof ParameterizedType)) { + logger.debug(clazz.getSimpleName() + "'s superclass not ParameterizedType"); + return Object.class; + } + + Type[] params = ((ParameterizedType) genType).getActualTypeArguments(); + + if (index >= params.length || index < 0) { + logger.debug("Index: " + index + ", Size of " + clazz.getSimpleName() + "'s Parameterized Type: " + + params.length); + return Object.class; + } + if (!(params[index] instanceof Class)) { + logger.debug(clazz.getSimpleName() + " not set the actual class on superclass generic parameter"); + return Object.class; + } + + return (Class) params[index]; + } + + public static Class getUserClass(Object instance) { + if (instance == null) { + throw new RuntimeException("Instance must not be null"); + } + Class clazz = instance.getClass(); + if (clazz != null && clazz.getName().contains(CGLIB_CLASS_SEPARATOR)) { + Class superClass = clazz.getSuperclass(); + if (superClass != null && !Object.class.equals(superClass)) { + return superClass; + } + } + return clazz; + + } + + /** + * 将反射时的checked exception转换为unchecked exception. + */ + public static RuntimeException convertReflectionExceptionToUnchecked(String msg, Exception e) { + if (e instanceof IllegalAccessException || e instanceof IllegalArgumentException + || e instanceof NoSuchMethodException) { + return new IllegalArgumentException(msg, e); + } else if (e instanceof InvocationTargetException) { + return new RuntimeException(msg, ((InvocationTargetException) e).getTargetException()); + } + return new RuntimeException(msg, e); + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/utils/sign/Base64.java b/easyink-common/src/main/java/com/easyink/common/utils/sign/Base64.java new file mode 100644 index 0000000..f29f64c --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/utils/sign/Base64.java @@ -0,0 +1,274 @@ +package com.easyink.common.utils.sign; + +import org.apache.commons.lang.ArrayUtils; + +/** + * Base64工具类 + * + * @author admin + */ +public final class Base64 { + private static final int BASELENGTH = 128; + private static final int LOOKUPLENGTH = 64; + private static final int TWENTYFOURBITGROUP = 24; + private static final int EIGHTBIT = 8; + private static final int SIXTEENBIT = 16; + private static final int FOURBYTE = 4; + private static final int SIGN = -128; + private static final int INT25 = 25; + private static final int INT26 = 26; + private static final int INT51 = 51; + private static final int INT52 = 52; + private static final int INT61 = 61; + private static final int XF0 = 0xf; + private static final int X3 = 0x3; + private static final char PAD = '='; + private static final char A = 'A'; + private static final char LA = 'a'; + private static final char Z = 'Z'; + private static final char LZ = 'z'; + private static final char NUM9 = '9'; + private static final char NUM0 = '0'; + + private static final byte[] base64Alphabet = new byte[BASELENGTH]; + private static final char[] lookUpBase64Alphabet = new char[LOOKUPLENGTH]; + private Base64(){} + static { + for (int i = 0; i < BASELENGTH; ++i) { + base64Alphabet[i] = -1; + } + for (int i = Z; i >= A; i--) { + base64Alphabet[i] = (byte) (i - A); + } + for (int i = LZ; i >= LA; i--) { + base64Alphabet[i] = (byte) (i - LA + INT26); + } + + for (int i = NUM9; i >= NUM0; i--) { + base64Alphabet[i] = (byte) (i - NUM0 + 52); + } + + base64Alphabet['+'] = 62; + base64Alphabet['/'] = 63; + + for (int i = 0; i <= INT25; i++) { + lookUpBase64Alphabet[i] = (char) (A + i); + } + + for (int i = INT26, j = 0; i <= INT51; i++, j++) { + lookUpBase64Alphabet[i] = (char) (LA + j); + } + + for (int i = INT52, j = 0; i <= INT61; i++, j++) { + lookUpBase64Alphabet[i] = (char) (NUM0 + j); + } + lookUpBase64Alphabet[62] = '+'; + lookUpBase64Alphabet[63] = '/'; + } + + private static boolean isWhiteSpace(char octect) { + return (octect == 0x20 || octect == 0xd || octect == 0xa || octect == 0x9); + } + + private static boolean isPad(char octect) { + return (octect == PAD); + } + + private static boolean isData(char octect) { + return (octect < BASELENGTH && base64Alphabet[octect] != -1); + } + + /** + * Encodes hex octects into Base64 + * + * @param binaryData Array containing binaryData + * @return Encoded Base64 array + */ + public static String encode(byte[] binaryData) { + if (binaryData == null) { + return null; + } + + int lengthDataBits = binaryData.length * EIGHTBIT; + if (lengthDataBits == 0) { + return ""; + } + + int fewerThan24bits = lengthDataBits % TWENTYFOURBITGROUP; + int numberTriplets = lengthDataBits / TWENTYFOURBITGROUP; + int numberQuartet = fewerThan24bits != 0 ? numberTriplets + 1 : numberTriplets; + char[] encodedData = new char[numberQuartet * 4]; + + byte k = 0; + byte l = 0; + byte b1 = 0; + byte b2 = 0; + byte b3 = 0; + + int encodedIndex = 0; + int dataIndex = 0; + + for (int i = 0; i < numberTriplets; i++) { + b1 = binaryData[dataIndex++]; + b2 = binaryData[dataIndex++]; + b3 = binaryData[dataIndex++]; + + l = (byte) (b2 & 0x0f); + k = (byte) (b1 & 0x03); + + byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2) : (byte) ((b1) >> 2 ^ 0xc0); + byte val2 = ((b2 & SIGN) == 0) ? (byte) (b2 >> 4) : (byte) ((b2) >> 4 ^ 0xf0); + byte val3 = ((b3 & SIGN) == 0) ? (byte) (b3 >> 6) : (byte) ((b3) >> 6 ^ 0xfc); + + encodedData[encodedIndex++] = lookUpBase64Alphabet[val1]; + encodedData[encodedIndex++] = lookUpBase64Alphabet[val2 | (k << 4)]; + encodedData[encodedIndex++] = lookUpBase64Alphabet[(l << 2) | val3]; + encodedData[encodedIndex++] = lookUpBase64Alphabet[b3 & 0x3f]; + } + + // form integral number of 6-bit groups + if (fewerThan24bits == EIGHTBIT) { + b1 = binaryData[dataIndex]; + k = (byte) (b1 & 0x03); + byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2) : (byte) ((b1) >> 2 ^ 0xc0); + encodedData[encodedIndex++] = lookUpBase64Alphabet[val1]; + encodedData[encodedIndex++] = lookUpBase64Alphabet[k << 4]; + encodedData[encodedIndex++] = PAD; + encodedData[encodedIndex++] = PAD; + } else if (fewerThan24bits == SIXTEENBIT) { + b1 = binaryData[dataIndex]; + b2 = binaryData[dataIndex + 1]; + l = (byte) (b2 & 0x0f); + k = (byte) (b1 & 0x03); + + byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2) : (byte) ((b1) >> 2 ^ 0xc0); + byte val2 = ((b2 & SIGN) == 0) ? (byte) (b2 >> 4) : (byte) ((b2) >> 4 ^ 0xf0); + + encodedData[encodedIndex++] = lookUpBase64Alphabet[val1]; + encodedData[encodedIndex++] = lookUpBase64Alphabet[val2 | (k << 4)]; + encodedData[encodedIndex++] = lookUpBase64Alphabet[l << 2]; + encodedData[encodedIndex++] = PAD; + } + return new String(encodedData); + } + + /** + * Decodes Base64 data into octects + * + * @param encoded string containing Base64 data + * @return Array containind decoded data. + */ + public static byte[] decode(String encoded) { + if (encoded == null) { + return ArrayUtils.EMPTY_BYTE_ARRAY; + } + + char[] base64Data = encoded.toCharArray(); + // remove white spaces + int len = removeWhiteSpace(base64Data); + + if (len % FOURBYTE != 0) { + return ArrayUtils.EMPTY_BYTE_ARRAY;// should be divisible by four + } + + int numberQuadruple = (len / FOURBYTE); + + if (numberQuadruple == 0) { + return new byte[0]; + } + + byte[] decodedData = new byte[(numberQuadruple) * 3]; + byte b1; + byte b2; + byte b3; + byte b4; + char d1; + char d2; + char d3; + char d4; + int i = 0; + int encodedIndex = 0; + int dataIndex = 0; + for (; i < numberQuadruple - 1; i++) { + + if (!isData((d1 = base64Data[dataIndex++])) || !isData((d2 = base64Data[dataIndex++])) + || !isData((d3 = base64Data[dataIndex++])) || !isData((d4 = base64Data[dataIndex++]))) { + return ArrayUtils.EMPTY_BYTE_ARRAY; + } // if found "no data" just return null + + b1 = base64Alphabet[d1]; + b2 = base64Alphabet[d2]; + b3 = base64Alphabet[d3]; + b4 = base64Alphabet[d4]; + + decodedData[encodedIndex++] = (byte) (b1 << 2 | b2 >> 4); + decodedData[encodedIndex++] = (byte) (((b2 & XF0) << 4) | ((b3 >> 2) & XF0)); + decodedData[encodedIndex++] = (byte) (b3 << 6 | b4); + } + + if (!isData((d1 = base64Data[dataIndex++])) || !isData((d2 = base64Data[dataIndex++]))) { + return ArrayUtils.EMPTY_BYTE_ARRAY;// if found "no data" just return null + } + + b1 = base64Alphabet[d1]; + b2 = base64Alphabet[d2]; + + d3 = base64Data[dataIndex++]; + d4 = base64Data[dataIndex++]; + if (!isData((d3)) || !isData((d4))) {// Check if they are PAD characters + if (isPad(d3) && isPad(d4)) { + if ((b2 & XF0) != 0)// last 4 bits should be zero + { + return ArrayUtils.EMPTY_BYTE_ARRAY; + } + byte[] tmp = new byte[i * 3 + 1]; + System.arraycopy(decodedData, 0, tmp, 0, i * 3); + tmp[encodedIndex] = (byte) (b1 << 2 | b2 >> 4); + return tmp; + } else if (!isPad(d3) && isPad(d4)) { + b3 = base64Alphabet[d3]; + if ((b3 & X3) != 0)// last 2 bits should be zero + { + return ArrayUtils.EMPTY_BYTE_ARRAY; + } + byte[] tmp = new byte[i * 3 + 2]; + System.arraycopy(decodedData, 0, tmp, 0, i * 3); + tmp[encodedIndex++] = (byte) (b1 << 2 | b2 >> 4); + tmp[encodedIndex] = (byte) (((b2 & XF0) << 4) | ((b3 >> 2) & XF0)); + return tmp; + } else { + return ArrayUtils.EMPTY_BYTE_ARRAY; + } + } else { // No PAD e.g 3cQl + b3 = base64Alphabet[d3]; + b4 = base64Alphabet[d4]; + decodedData[encodedIndex++] = (byte) (b1 << 2 | b2 >> 4); + decodedData[encodedIndex++] = (byte) (((b2 & XF0) << 4) | ((b3 >> 2) & XF0)); + decodedData[encodedIndex++] = (byte) (b3 << 6 | b4); + + } + return decodedData; + } + + /** + * remove WhiteSpace from MIME containing encoded Base64 data. + * + * @param data the byte array of base64 data (with WS) + * @return the new length + */ + private static int removeWhiteSpace(char[] data) { + if (data == null) { + return 0; + } + + // count characters that's not whitespace + int newSize = 0; + int len = data.length; + for (int i = 0; i < len; i++) { + if (!isWhiteSpace(data[i])) { + data[newSize++] = data[i]; + } + } + return newSize; + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/utils/sign/Md5Utils.java b/easyink-common/src/main/java/com/easyink/common/utils/sign/Md5Utils.java new file mode 100644 index 0000000..feec6a3 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/utils/sign/Md5Utils.java @@ -0,0 +1,55 @@ +package com.easyink.common.utils.sign; + +import org.apache.commons.lang3.exception.ExceptionUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.nio.charset.StandardCharsets; +import java.security.MessageDigest; + +/** + * Md5加密方法 + * + * @author admin + */ +public class Md5Utils { + private static final Logger log = LoggerFactory.getLogger(Md5Utils.class); + + private static byte[] md5(String s) { + MessageDigest algorithm; + try { + algorithm = MessageDigest.getInstance("MD5"); + algorithm.reset(); + algorithm.update(s.getBytes(StandardCharsets.UTF_8)); + return algorithm.digest(); + } catch (Exception e) { + log.error("MD5 Error...", e); + } + return null; + } + + private static final String toHex(byte[] hash) { + if (hash == null) { + return null; + } + StringBuffer buf = new StringBuffer(hash.length * 2); + int i; + + for (i = 0; i < hash.length; i++) { + if ((hash[i] & 0xff) < 0x10) { + buf.append("0"); + } + buf.append(Long.toString(hash[i] & 0xff, 16)); + } + return buf.toString(); + } + + public static String hash(String s) { + try { + return new String(toHex(md5(s)).getBytes(StandardCharsets.UTF_8), StandardCharsets.UTF_8); + } catch (Exception e) { + log.error("not supported charset e:{}", ExceptionUtils.getStackTrace(e)); + return s; + } + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/utils/spring/SpringUtils.java b/easyink-common/src/main/java/com/easyink/common/utils/spring/SpringUtils.java new file mode 100644 index 0000000..b33d087 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/utils/spring/SpringUtils.java @@ -0,0 +1,130 @@ +package com.easyink.common.utils.spring; + +import com.easyink.common.utils.StringUtils; +import org.springframework.aop.framework.AopContext; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.NoSuchBeanDefinitionException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.stereotype.Component; + +/** + * spring工具类 方便在非spring管理环境中获取bean + * + * @author admin + */ +@Component +public final class SpringUtils implements BeanFactoryPostProcessor, ApplicationContextAware { + /** + * Spring应用上下文环境 + */ + private static ConfigurableListableBeanFactory beanFactory; + + private static ApplicationContext applicationContext; + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringUtils.beanFactory = beanFactory; + } + + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringUtils.applicationContext = applicationContext; + } + + /** + * 获取对象 + * + * @param name + * @return Object 一个以所给名字注册的bean的实例 + * @throws BeansException + */ + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + /** + * 获取类型为requiredType的对象 + * + * @param clz + * @return + * @throws BeansException + */ + public static T getBean(Class clz) throws BeansException { + return beanFactory.getBean(clz); + } + + /** + * 如果BeanFactory包含一个与所给名称匹配的bean定义,则返回true + * + * @param name + * @return boolean + */ + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + /** + * 判断以给定名字注册的bean定义是一个singleton还是一个prototype。 如果与给定名字相应的bean定义没有被找到,将会抛出一个异常(NoSuchBeanDefinitionException) + * + * @param name + * @return boolean + * @throws NoSuchBeanDefinitionException + */ + public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException { + return beanFactory.isSingleton(name); + } + + /** + * @param name + * @return Class 注册对象的类型 + * @throws NoSuchBeanDefinitionException + */ + public static Class getType(String name) throws NoSuchBeanDefinitionException { + return beanFactory.getType(name); + } + + /** + * 如果给定的bean名字在bean定义中有别名,则返回这些别名 + * + * @param name + * @return + * @throws NoSuchBeanDefinitionException + */ + public static String[] getAliases(String name) throws NoSuchBeanDefinitionException { + return beanFactory.getAliases(name); + } + + /** + * 获取aop代理对象 + * + * @param invoker + * @return + */ + @SuppressWarnings("unchecked") + public static T getAopProxy(T invoker) { + return (T) AopContext.currentProxy(); + } + + /** + * 获取当前的环境配置,无配置返回null + * + * @return 当前的环境配置 + */ + public static String[] getActiveProfiles() { + return applicationContext.getEnvironment().getActiveProfiles(); + } + + /** + * 获取当前的环境配置,当有多个环境配置时,只获取第一个 + * + * @return 当前的环境配置 + */ + public static String getActiveProfile() { + final String[] activeProfiles = getActiveProfiles(); + return StringUtils.isNotEmpty(activeProfiles) ? activeProfiles[0] : null; + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/utils/sql/BatchInsertUtil.java b/easyink-common/src/main/java/com/easyink/common/utils/sql/BatchInsertUtil.java new file mode 100644 index 0000000..3e6ca40 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/utils/sql/BatchInsertUtil.java @@ -0,0 +1,59 @@ +package com.easyink.common.utils.sql; + +import org.springframework.util.CollectionUtils; + +import java.util.List; + +/** + * 类名: 分批批量插入工具 + * + * @author : silver_chariot + * @date : 2021/11/4 10:58 + */ +public class BatchInsertUtil { + + private BatchInsertUtil() { + } + + /** + * 默认单次最大插入量为500 + */ + public static final int DEFAULT_MAX_SINGLE_BATCH_NUM = 500; + + /** + * 分批批量插入集合 + * + * @param list 集合 + * @param executor 执行方法 {@link IBatchInsertExecutor} + * @param batchNum 单次最大插入量 + * @param 元素类型 + */ + public static void doInsert(List list, IBatchInsertExecutor executor, int batchNum) { + if (CollectionUtils.isEmpty(list)) { + return; + } + int listSize = list.size(); + // 起始索引 + int index = 0; + // 大于最大单次插入量时需要分批插入 + while (listSize > batchNum) { + executor.insert(list.subList(index, index + batchNum)); + index += batchNum; + listSize -= batchNum; + } + if (listSize > 0) { + executor.insert(list.subList(index, index + listSize)); + } + } + + /** + * 分批批量插入集合 + * + * @param list 集合 + * @param executor 执行方法 {@link IBatchInsertExecutor} + * @param 元素类型 + */ + public static void doInsert(List list, IBatchInsertExecutor executor) { + doInsert(list, executor, DEFAULT_MAX_SINGLE_BATCH_NUM); + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/utils/sql/IBatchInsertExecutor.java b/easyink-common/src/main/java/com/easyink/common/utils/sql/IBatchInsertExecutor.java new file mode 100644 index 0000000..06fc876 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/utils/sql/IBatchInsertExecutor.java @@ -0,0 +1,18 @@ +package com.easyink.common.utils.sql; + +import java.util.List; + +/** + * 类名: 分批批量插入执行器接口 + * + * @author : silver_chariot + * @date : 2021/11/4 11:01 + */ +public interface IBatchInsertExecutor { + /** + * 批量插入 + * + * @param list 需要插入的集合 + */ + void insert(List list); +} diff --git a/easyink-common/src/main/java/com/easyink/common/utils/sql/SqlUtil.java b/easyink-common/src/main/java/com/easyink/common/utils/sql/SqlUtil.java new file mode 100644 index 0000000..ce73cc4 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/utils/sql/SqlUtil.java @@ -0,0 +1,33 @@ +package com.easyink.common.utils.sql; + +import com.easyink.common.exception.BaseException; +import com.easyink.common.utils.StringUtils; + +/** + * sql操作工具类 + * + * @author admin + */ +public class SqlUtil { + /** + * 仅支持字母、数字、下划线、空格、逗号、小数点(支持多个字段排序) + */ + public final static String SQL_PATTERN = "[a-zA-Z0-9_\\ \\,\\.]+"; + + /** + * 检查字符,防止注入绕过 + */ + public static String escapeOrderBySql(String value) { + if (StringUtils.isNotEmpty(value) && !isValidOrderBySql(value)) { + throw new BaseException("参数不符合规范,不能进行查询"); + } + return value; + } + + /** + * 验证 order by 语法是否符合规范 + */ + public static boolean isValidOrderBySql(String value) { + return value.matches(SQL_PATTERN); + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/utils/uuid/IdUtils.java b/easyink-common/src/main/java/com/easyink/common/utils/uuid/IdUtils.java new file mode 100644 index 0000000..dd6c2c1 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/utils/uuid/IdUtils.java @@ -0,0 +1,44 @@ +package com.easyink.common.utils.uuid; + +/** + * ID生成器工具类 + * + * @author admin + */ +public class IdUtils { + /** + * 获取随机UUID + * + * @return 随机UUID + */ + public static String randomUUID() { + return UUID.randomUUID().toString(); + } + + /** + * 简化的UUID,去掉了横线 + * + * @return 简化的UUID,去掉了横线 + */ + public static String simpleUUID() { + return UUID.randomUUID().toString(true); + } + + /** + * 获取随机UUID,使用性能更好的ThreadLocalRandom生成UUID + * + * @return 随机UUID + */ + public static String fastUUID() { + return UUID.fastUUID().toString(); + } + + /** + * 简化的UUID,去掉了横线,使用性能更好的ThreadLocalRandom生成UUID + * + * @return 简化的UUID,去掉了横线 + */ + public static String fastSimpleUUID() { + return UUID.fastUUID().toString(true); + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/utils/uuid/UUID.java b/easyink-common/src/main/java/com/easyink/common/utils/uuid/UUID.java new file mode 100644 index 0000000..de8333f --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/utils/uuid/UUID.java @@ -0,0 +1,453 @@ +package com.easyink.common.utils.uuid; + +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.security.SecureRandom; +import java.util.Random; +import java.util.concurrent.ThreadLocalRandom; + +/** + * 提供通用唯一识别码(universally unique identifier)(UUID)实现 + * + * @author admin + */ +public final class UUID implements java.io.Serializable, Comparable { + private static final long serialVersionUID = -1185015143654744140L; + + /** + * SecureRandom 的单例 + */ + private static class Holder { + static final SecureRandom numberGenerator = getSecureRandom(); + } + + /** + * 此UUID的最高64有效位 + */ + private final long mostSigBits; + + /** + * 此UUID的最低64有效位 + */ + private final long leastSigBits; + + /** + * 私有构造 + * + * @param data 数据 + */ + private UUID(byte[] data) { + int size = 8; + int length = 16; + long msb = 0; + long lsb = 0; + assert data.length == length : "data must be 16 bytes in length"; + for (int i = 0; i < size; i++) { + msb = (msb << size) | (data[i] & 0xff); + } + for (int i = size; i < length; i++) { + lsb = (lsb << size) | (data[i] & 0xff); + } + this.mostSigBits = msb; + this.leastSigBits = lsb; + } + + /** + * 使用指定的数据构造新的 UUID。 + * + * @param mostSigBits 用于 {@code UUID} 的最高有效 64 位 + * @param leastSigBits 用于 {@code UUID} 的最低有效 64 位 + */ + public UUID(long mostSigBits, long leastSigBits) { + this.mostSigBits = mostSigBits; + this.leastSigBits = leastSigBits; + } + + /** + * 获取类型 4(伪随机生成的)UUID 的静态工厂。 使用加密的本地线程伪随机数生成器生成该 UUID。 + * + * @return 随机生成的 {@code UUID} + */ + public static UUID fastUUID() { + return randomUUID(false); + } + + /** + * 获取类型 4(伪随机生成的)UUID 的静态工厂。 使用加密的强伪随机数生成器生成该 UUID。 + * + * @return 随机生成的 {@code UUID} + */ + public static UUID randomUUID() { + return randomUUID(true); + } + + /** + * 获取类型 4(伪随机生成的)UUID 的静态工厂。 使用加密的强伪随机数生成器生成该 UUID。 + * + * @param isSecure 是否使用{@link SecureRandom}如果是可以获得更安全的随机码,否则可以得到更好的性能 + * @return 随机生成的 {@code UUID} + */ + public static UUID randomUUID(boolean isSecure) { + final Random ng = isSecure ? Holder.numberGenerator : getRandom(); + + byte[] randomBytes = new byte[16]; + ng.nextBytes(randomBytes); + randomBytes[6] &= 0x0f; /* clear version */ + randomBytes[6] |= 0x40; /* set to version 4 */ + randomBytes[8] &= 0x3f; /* clear variant */ + randomBytes[8] |= 0x80; /* set to IETF variant */ + return new UUID(randomBytes); + } + + /** + * 根据指定的字节数组获取类型 3(基于名称的)UUID 的静态工厂。 + * + * @param name 用于构造 UUID 的字节数组。 + * @return 根据指定数组生成的 {@code UUID} + */ + public static UUID nameUUIDFromBytes(byte[] name) { + MessageDigest md; + try { + md = MessageDigest.getInstance("MD5"); + } catch (NoSuchAlgorithmException nsae) { + throw new InternalError("MD5 not supported"); + } + byte[] md5Bytes = md.digest(name); + md5Bytes[6] &= 0x0f; /* clear version */ + md5Bytes[6] |= 0x30; /* set to version 3 */ + md5Bytes[8] &= 0x3f; /* clear variant */ + md5Bytes[8] |= 0x80; /* set to IETF variant */ + return new UUID(md5Bytes); + } + + /** + * 根据 {@link #toString()} 方法中描述的字符串标准表示形式创建{@code UUID}。 + * + * @param name 指定 {@code UUID} 字符串 + * @return 具有指定值的 {@code UUID} + * @throws IllegalArgumentException 如果 name 与 {@link #toString} 中描述的字符串表示形式不符抛出此异常 + */ + public static UUID fromString(String name) { + int num5 = 5; + String[] components = name.split("-"); + if (components.length != num5) { + throw new IllegalArgumentException("Invalid UUID string: " + name); + } + for (int i = 0; i < num5; i++) { + components[i] = "0x" + components[i]; + } + + long mostSigBits = Long.decode(components[0]).longValue(); + mostSigBits <<= 16; + mostSigBits |= Long.decode(components[1]).longValue(); + mostSigBits <<= 16; + mostSigBits |= Long.decode(components[2]).longValue(); + + long leastSigBits = Long.decode(components[3]).longValue(); + leastSigBits <<= 48; + leastSigBits |= Long.decode(components[4]).longValue(); + + return new UUID(mostSigBits, leastSigBits); + } + + /** + * 返回此 UUID 的 128 位值中的最低有效 64 位。 + * + * @return 此 UUID 的 128 位值中的最低有效 64 位。 + */ + public long getLeastSignificantBits() { + return leastSigBits; + } + + /** + * 返回此 UUID 的 128 位值中的最高有效 64 位。 + * + * @return 此 UUID 的 128 位值中最高有效 64 位。 + */ + public long getMostSignificantBits() { + return mostSigBits; + } + + /** + * 与此 {@code UUID} 相关联的版本号. 版本号描述此 {@code UUID} 是如何生成的。 + *

+ * 版本号具有以下含意: + *

    + *
  • 1 基于时间的 UUID + *
  • 2 DCE 安全 UUID + *
  • 3 基于名称的 UUID + *
  • 4 随机生成的 UUID + *
+ * + * @return 此 {@code UUID} 的版本号 + */ + public int version() { + // Version is bits masked by 0x000000000000F000 in MS long + return (int) ((mostSigBits >> 12) & 0x0f); + } + + /** + * 与此 {@code UUID} 相关联的变体号。变体号描述 {@code UUID} 的布局。 + *

+ * 变体号具有以下含意: + *

    + *
  • 0 为 NCS 向后兼容保留 + *
  • 2 IETF RFC 4122(Leach-Salz), 用于此类 + *
  • 6 保留,微软向后兼容 + *
  • 7 保留供以后定义使用 + *
+ * + * @return 此 {@code UUID} 相关联的变体号 + */ + public int variant() { + // This field is composed of a varying number of bits. + // 0 - - Reserved for NCS backward compatibility + // 1 0 - The IETF aka Leach-Salz variant (used by this class) + // 1 1 0 Reserved, Microsoft backward compatibility + // 1 1 1 Reserved for future definition. + return (int) ((leastSigBits >>> (64 - (leastSigBits >>> 62))) & (leastSigBits >> 63)); + } + + /** + * 与此 UUID 相关联的时间戳值。 + *

+ *

+ * 60 位的时间戳值根据此 {@code UUID} 的 time_low、time_mid 和 time_hi 字段构造。
+ * 所得到的时间戳以 100 毫微秒为单位,从 UTC(通用协调时间) 1582 年 10 月 15 日零时开始。 + *

+ *

+ * 时间戳值仅在在基于时间的 UUID(其 version 类型为 1)中才有意义。
+ * 如果此 {@code UUID} 不是基于时间的 UUID,则此方法抛出 UnsupportedOperationException。 + * + * @throws UnsupportedOperationException 如果此 {@code UUID} 不是 version 为 1 的 UUID。 + */ + public long timestamp() throws UnsupportedOperationException { + checkTimeBase(); + return (mostSigBits & 0x0FFFL) << 48// + | ((mostSigBits >> 16) & 0x0FFFFL) << 32// + | mostSigBits >>> 32; + } + + /** + * 与此 UUID 相关联的时钟序列值。 + *

+ *

+ * 14 位的时钟序列值根据此 UUID 的 clock_seq 字段构造。clock_seq 字段用于保证在基于时间的 UUID 中的时间唯一性。 + *

+ * {@code clockSequence} 值仅在基于时间的 UUID(其 version 类型为 1)中才有意义。 如果此 UUID 不是基于时间的 UUID,则此方法抛出 + * UnsupportedOperationException。 + * + * @return 此 {@code UUID} 的时钟序列 + * @throws UnsupportedOperationException 如果此 UUID 的 version 不为 1 + */ + public int clockSequence() throws UnsupportedOperationException { + checkTimeBase(); + return (int) ((leastSigBits & 0x3FFF000000000000L) >>> 48); + } + + /** + * 与此 UUID 相关的节点值。 + *

+ *

+ * 48 位的节点值根据此 UUID 的 node 字段构造。此字段旨在用于保存机器的 IEEE 802 地址,该地址用于生成此 UUID 以保证空间唯一性。 + *

+ * 节点值仅在基于时间的 UUID(其 version 类型为 1)中才有意义。
+ * 如果此 UUID 不是基于时间的 UUID,则此方法抛出 UnsupportedOperationException。 + * + * @return 此 {@code UUID} 的节点值 + * @throws UnsupportedOperationException 如果此 UUID 的 version 不为 1 + */ + public long node() throws UnsupportedOperationException { + checkTimeBase(); + return leastSigBits & 0x0000FFFFFFFFFFFFL; + } + + /** + * 返回此{@code UUID} 的字符串表现形式。 + *

+ *

+ * UUID 的字符串表示形式由此 BNF 描述: + *

+ *

+     * {@code
+     * UUID                   = ----
+     * time_low               = 4*
+     * time_mid               = 2*
+     * time_high_and_version  = 2*
+     * variant_and_sequence   = 2*
+     * node                   = 6*
+     * hexOctet               = 
+     * hexDigit               = [0-9a-fA-F]
+     * }
+     * 
+ *

+ * + * + * @return 此{@code UUID} 的字符串表现形式 + * @see #toString(boolean) + */ + @Override + public String toString() { + return toString(false); + } + + /** + * 返回此{@code UUID} 的字符串表现形式。 + *

+ *

+ * UUID 的字符串表示形式由此 BNF 描述: + *

+ *

+     * {@code
+     * UUID                   = ----
+     * time_low               = 4*
+     * time_mid               = 2*
+     * time_high_and_version  = 2*
+     * variant_and_sequence   = 2*
+     * node                   = 6*
+     * hexOctet               = 
+     * hexDigit               = [0-9a-fA-F]
+     * }
+     * 
+ *

+ * + * + * @param isSimple 是否简单模式,简单模式为不带'-'的UUID字符串 + * @return 此{@code UUID} 的字符串表现形式 + */ + public String toString(boolean isSimple) { + final StringBuilder builder = new StringBuilder(isSimple ? 32 : 36); + // time_low + builder.append(digits(mostSigBits >> 32, 8)); + if (Boolean.FALSE.equals(isSimple)) { + builder.append('-'); + } + // time_mid + builder.append(digits(mostSigBits >> 16, 4)); + if (Boolean.FALSE.equals(isSimple)) { + builder.append('-'); + } + // time_high_and_version + builder.append(digits(mostSigBits, 4)); + if (Boolean.FALSE.equals(isSimple)) { + builder.append('-'); + } + // variant_and_sequence + builder.append(digits(leastSigBits >> 48, 4)); + if (Boolean.FALSE.equals(isSimple)) { + builder.append('-'); + } + // node + builder.append(digits(leastSigBits, 12)); + + return builder.toString(); + } + + /** + * 返回此 UUID 的哈希码。 + * + * @return UUID 的哈希码值。 + */ + @Override + public int hashCode() { + long hilo = mostSigBits ^ leastSigBits; + return ((int) (hilo >> 32)) ^ (int) hilo; + } + + /** + * 将此对象与指定对象比较。 + *

+ * 当且仅当参数不为 {@code null}、而是一个 UUID 对象、具有与此 UUID 相同的 varriant、包含相同的值(每一位均相同)时,结果才为 {@code true}。 + * + * @param obj 要与之比较的对象 + * @return 如果对象相同,则返回 {@code true};否则返回 {@code false} + */ + @Override + public boolean equals(Object obj) { + if ((null == obj) || (obj.getClass() != UUID.class)) { + return false; + } + UUID id = (UUID) obj; + return (mostSigBits == id.mostSigBits && leastSigBits == id.leastSigBits); + } + + // Comparison Operations + + /** + * 将此 UUID 与指定的 UUID 比较。 + *

+ *

+ * 如果两个 UUID 不同,且第一个 UUID 的最高有效字段大于第二个 UUID 的对应字段,则第一个 UUID 大于第二个 UUID。 + * + * @param val 与此 UUID 比较的 UUID + * @return 在此 UUID 小于、等于或大于 val 时,分别返回 -1、0 或 1。 + */ + @Override + public int compareTo(UUID val) { + // The ordering is intentionally set up so that the UUIDs + // can simply be numerically compared as two numbers + return (this.mostSigBits < val.mostSigBits ? -1 : // + (this.mostSigBits > val.mostSigBits ? 1 : // + (this.leastSigBits < val.leastSigBits ? -1 : // + (this.leastSigBits > val.leastSigBits ? 1 : // + 0)))); + } + + // ------------------------------------------------------------------------------------------------------------------- + // Private method start + + /** + * 返回指定数字对应的hex值 + * + * @param val 值 + * @param digits 位 + * @return 值 + */ + private static String digits(long val, int digits) { + long hi = 1L << (digits * 4); + return Long.toHexString(hi | (val & (hi - 1))).substring(1); + } + + /** + * 检查是否为time-based版本UUID + */ + private void checkTimeBase() { + if (version() != 1) { + throw new UnsupportedOperationException("Not a time-based UUID"); + } + } + + /** + * 获取{@link SecureRandom},类提供加密的强随机数生成器 (RNG) + * + * @return {@link SecureRandom} + */ + public static SecureRandom getSecureRandom() { + try { + return SecureRandom.getInstance("SHA1PRNG"); + } catch (NoSuchAlgorithmException e) { + throw new UtilException(e); + } + } + + /** + * 获取随机数生成器对象
+ * ThreadLocalRandom是JDK 7之后提供并发产生随机数,能够解决多个线程发生的竞争争夺。 + * + * @return {@link ThreadLocalRandom} + */ + public static ThreadLocalRandom getRandom() { + return ThreadLocalRandom.current(); + } + + /** + * 内部异常类 + */ + private static class UtilException extends RuntimeException { + private static final long serialVersionUID = 8247610319171014183L; + + UtilException(Throwable e) { + super(e.getMessage(), e); + } + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/utils/wecom/ByteGroup.java b/easyink-common/src/main/java/com/easyink/common/utils/wecom/ByteGroup.java new file mode 100644 index 0000000..91d3a09 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/utils/wecom/ByteGroup.java @@ -0,0 +1,26 @@ +package com.easyink.common.utils.wecom; + +import java.util.ArrayList; + +public class ByteGroup { + ArrayList byteContainer = new ArrayList<>(); + + public byte[] toBytes() { + byte[] bytes = new byte[this.byteContainer.size()]; + for (int i = 0; i < this.byteContainer.size(); i++) { + bytes[i] = this.byteContainer.get(i); + } + return bytes; + } + + public ByteGroup addBytes(byte[] bytes) { + for (byte b : bytes) { + this.byteContainer.add(b); + } + return this; + } + + public int size() { + return this.byteContainer.size(); + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/utils/wecom/PKCS7Encoder.java b/easyink-common/src/main/java/com/easyink/common/utils/wecom/PKCS7Encoder.java new file mode 100644 index 0000000..19876a6 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/utils/wecom/PKCS7Encoder.java @@ -0,0 +1,65 @@ +/* + * 对公众平台发送给公众账号的消息加解密示例代码. + * + * @copyright Copyright (c) 1998-2014 Tencent Inc. + */ + +package com.easyink.common.utils.wecom; + +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; +import java.util.Arrays; + +/** + * 提供基于PKCS7算法的加解. + * + * @author admin + */ +public class PKCS7Encoder { + private static final Charset CHARSET = StandardCharsets.UTF_8; + private static final int BLOCK_SIZE = 32; + + /** + * 获得对明文进行补位填充的字节. + * + * @param count 需要进行填充补位操作的明文字节个数 + * @return 补齐用的字节数组 + */ + public static byte[] encode(int count) { + // 计算需要填充的位数 + int amountToPad = BLOCK_SIZE - (count % BLOCK_SIZE); + // 获得补位所用的字符 + char padChr = chr(amountToPad); + StringBuilder tmp = new StringBuilder(); + for (int index = 0; index < amountToPad; index++) { + tmp.append(padChr); + } + return tmp.toString().getBytes(CHARSET); + } + + /** + * 删除解密后明文的补位字符. + * + * @param decrypted 解密后的明文 + * @return 删除补位字符后的明文 + */ + public static byte[] decode(byte[] decrypted) { + int pad = decrypted[decrypted.length - 1]; + if (pad < 1 || pad > 32) { + pad = 0; + } + return Arrays.copyOfRange(decrypted, 0, decrypted.length - pad); + } + + /** + * 将数字转化成ASCII码对应的字符,用于对明文进行补码. + * + * @param a 需要转化的数字 + * @return 转化得到的字符 + */ + private static char chr(int a) { + byte target = (byte) (a & 0xFF); + return (char) target; + } + +} diff --git a/easyink-common/src/main/java/com/easyink/common/utils/wecom/RsaUtil.java b/easyink-common/src/main/java/com/easyink/common/utils/wecom/RsaUtil.java new file mode 100644 index 0000000..22cc7c8 --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/utils/wecom/RsaUtil.java @@ -0,0 +1,90 @@ +package com.easyink.common.utils.wecom; + +import com.easyink.common.utils.StringUtils; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; +import org.bouncycastle.jce.provider.BouncyCastleProvider; +import org.bouncycastle.openssl.PEMKeyPair; +import org.bouncycastle.openssl.PEMParser; +import org.bouncycastle.openssl.jcajce.JcaPEMKeyConverter; + +import javax.crypto.BadPaddingException; +import javax.crypto.Cipher; +import javax.crypto.IllegalBlockSizeException; +import javax.crypto.NoSuchPaddingException; +import java.io.IOException; +import java.io.Reader; +import java.io.StringReader; +import java.nio.charset.StandardCharsets; +import java.security.*; +import java.util.Base64; + +/** + * 类名: RSA工具类 + * + * @author: 1*+ + * @date: 2021-08-18 9:18 + */ +@NoArgsConstructor(access = AccessLevel.PRIVATE) +public class RsaUtil { + + private static final String BC = "BC"; + + /** + * RSA pkcs1 2048bit 解密工具, + * 获取私钥PrivateKey + * + * @param privateKeyPem 2048bit pkcs1格式,base64编码后的RSA字符串 + * @return PrivateKey, 用于解密 decryptRSA + * @throws IOException 异常 + */ + public static PrivateKey getPrivateKey(String privateKeyPem) throws IOException { + PrivateKey privateKey = null; + Reader privateKeyReader = new StringReader(addPrefixSuffix(privateKeyPem)); + PEMParser privatePemParser = new PEMParser(privateKeyReader); + Object privateObject = privatePemParser.readObject(); + if (privateObject instanceof PEMKeyPair) { + PEMKeyPair pemKeyPair = (PEMKeyPair) privateObject; + if (Security.getProvider(BC) == null) { + Security.addProvider(new BouncyCastleProvider()); + } + JcaPEMKeyConverter converter = new JcaPEMKeyConverter().setProvider(BC); + privateKey = converter.getPrivateKey(pemKeyPair.getPrivateKeyInfo()); + } + return privateKey; + } + + /** + * 给私钥拼接字符串 -----BEGIN RSA PRIVATE KEY-----\n 和 \n-----END RSA PRIVATE KEY----- + * + * @param privateKey 私钥 + * @return + */ + public static String addPrefixSuffix(String privateKey) { + if (StringUtils.isBlank(privateKey)) { + return StringUtils.EMPTY; + } + return "-----BEGIN RSA PRIVATE KEY-----\n" + privateKey + "\n-----END RSA PRIVATE KEY-----"; + } + + /** + * RSA pkcs1 2048bit 解密工具, + * + * @param str 被解密的字符串 + * @param privateKey 私钥对象 从 getPrivateKey 获取 + * @return 解密后数据 + * @throws NoSuchPaddingException 异常 + * @throws NoSuchAlgorithmException 异常 + * @throws InvalidKeyException 异常 + * @throws BadPaddingException 异常 + * @throws IllegalBlockSizeException 异常 + */ + public static String decryptRSA(String str, PrivateKey privateKey) throws NoSuchPaddingException, + NoSuchAlgorithmException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException, NoSuchProviderException { + Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()); + Cipher rsa = Cipher.getInstance("RSA/ECB/PKCS1Padding", BC); + rsa.init(Cipher.DECRYPT_MODE, privateKey); + byte[] utf8 = rsa.doFinal(Base64.getDecoder().decode(str)); + return new String(utf8, StandardCharsets.UTF_8); + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/utils/wecom/SHA1.java b/easyink-common/src/main/java/com/easyink/common/utils/wecom/SHA1.java new file mode 100644 index 0000000..48dc4af --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/utils/wecom/SHA1.java @@ -0,0 +1,88 @@ +package com.easyink.common.utils.wecom; + +import com.easyink.common.exception.wecom.WeComException; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.codec.digest.DigestUtils; +import org.apache.commons.lang3.StringUtils; + +import java.security.MessageDigest; +import java.util.Arrays; + +/** + * @author admin + * @date 14/10/19 + */ +@Slf4j +public class SHA1 { + + private SHA1(){} + /** + * 串接arr参数,生成sha1 digest. + */ + public static String gen(String... arr) { + if (StringUtils.isAnyEmpty(arr)) { + throw new IllegalArgumentException("非法请求参数,有部分参数为空 : " + Arrays.toString(arr)); + } + + Arrays.sort(arr); + StringBuilder sb = new StringBuilder(); + for (String a : arr) { + sb.append(a); + } + return DigestUtils.sha1Hex(sb.toString()); + } + + /** + * 用&串接arr参数,生成sha1 digest. + */ + public static String genWithAmple(String... arr) { + if (StringUtils.isAnyEmpty(arr)) { + throw new IllegalArgumentException("非法请求参数,有部分参数为空 : " + Arrays.toString(arr)); + } + + Arrays.sort(arr); + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < arr.length; i++) { + String a = arr[i]; + sb.append(a); + if (i != arr.length - 1) { + sb.append('&'); + } + } + return DigestUtils.sha1Hex(sb.toString()); + } + + + public static String getSHA1(String token, String timestamp, String nonce, String encrypt) throws WeComException { + try { + String[] array = new String[]{token, timestamp, nonce, encrypt}; + StringBuffer sb = new StringBuffer(); + Arrays.sort(array); + int size = 4; + for (int i = 0; i < size; ++i) { + sb.append(array[i]); + } + + String str = sb.toString(); + MessageDigest md = MessageDigest.getInstance("SHA-1"); + md.update(str.getBytes()); + byte[] digest = md.digest(); + StringBuffer hexstr = new StringBuffer(); + String shaHex = ""; + + for (int i = 0; i < digest.length; ++i) { + shaHex = Integer.toHexString(digest[i] & 255); + if (shaHex.length() < 2) { + hexstr.append(0); + } + + hexstr.append(shaHex); + } + + return hexstr.toString(); + } catch (Exception var12) { + log.error("异常信息:{}", var12.getMessage()); + throw new WeComException("sha加密生成签名失败"); + } + } +} diff --git a/easyink-common/src/main/java/com/easyink/common/utils/wecom/TicketUtils.java b/easyink-common/src/main/java/com/easyink/common/utils/wecom/TicketUtils.java new file mode 100644 index 0000000..a8bb2eb --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/utils/wecom/TicketUtils.java @@ -0,0 +1,34 @@ +package com.easyink.common.utils.wecom; + +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.codec.digest.DigestUtils; +import org.apache.commons.lang3.RandomStringUtils; + +import java.util.HashMap; + +/** + * @author admin + * @description + * @date 2021/1/6 12:00 + **/ +@Slf4j +public class TicketUtils { + + public static HashMap getSignatureMap(String ticketVaule, String url) { + String nonceStr = RandomStringUtils.randomAlphanumeric(10); + Long timestamp = System.currentTimeMillis() / 1000; + StringBuilder strBuild = new StringBuilder(); + strBuild.append("jsapi_ticket=").append(ticketVaule) + .append("&noncestr=").append(nonceStr) + .append("×tamp=").append(timestamp) + .append("&url=").append(url); + log.info("H5加密串:{}", strBuild.toString()); + String signature = DigestUtils.sha1Hex(strBuild.toString()); + return new HashMap(16) {{ + put("nonceStr", nonceStr); + put("timestamp", timestamp); + put("signature", signature); + }}; + } + +} diff --git a/easyink-common/src/main/java/com/easyink/common/utils/wecom/WxCryptUtil.java b/easyink-common/src/main/java/com/easyink/common/utils/wecom/WxCryptUtil.java new file mode 100644 index 0000000..4ca355e --- /dev/null +++ b/easyink-common/src/main/java/com/easyink/common/utils/wecom/WxCryptUtil.java @@ -0,0 +1,174 @@ +package com.easyink.common.utils.wecom; + +import com.easyink.common.exception.wecom.WeComException; +import com.google.common.base.CharMatcher; +import com.google.common.io.BaseEncoding; +import lombok.NoArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.codec.binary.Base64; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.xml.sax.InputSource; + +import javax.crypto.Cipher; +import javax.crypto.spec.IvParameterSpec; +import javax.crypto.spec.SecretKeySpec; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import java.io.StringReader; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; +import java.util.Arrays; + +/** + *

+ * 对公众平台发送给公众账号的消息加解密示例代码.
+ * Copyright (c) 1998-2014 Tencent Inc.
+ * 针对org.apache.commons.codec.binary.Base64,
+ * 需要导入架包commons-codec-1.9(或commons-codec-1.8等其他版本)
+ * 官方下载地址:http://commons.apache.org/proper/commons-codec/download_codec.cgi
+ * 
+ * + * @author admin + */ +@NoArgsConstructor +@Slf4j +public class WxCryptUtil { + + private static final Charset CHARSET = StandardCharsets.UTF_8; + + private static final ThreadLocal BUILDER_LOCAL = ThreadLocal.withInitial(() -> { + try { + final DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + factory.setExpandEntityReferences(false); + factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); + return factory.newDocumentBuilder(); + } catch (ParserConfigurationException exc) { + throw new IllegalArgumentException(exc); + } + }); + + protected byte[] aesKey; + protected String token; + + + /** + * 构造函数. + * + * @param token 公众平台上,开发者设置的token + * @param encodingAesKey 公众平台上,开发者设置的EncodingAESKey + */ + public WxCryptUtil(String token, String encodingAesKey) { + this.token = token; + this.aesKey = BaseEncoding.base64().decode(CharMatcher.whitespace().removeFrom(encodingAesKey)); + } + + private static String extractEncryptPart(String xml) { + try { + DocumentBuilder db = BUILDER_LOCAL.get(); + Document document = db.parse(new InputSource(new StringReader(xml))); + + Element root = document.getDocumentElement(); + return root.getElementsByTagName("Encrypt").item(0).getTextContent(); + } catch (Exception e) { + throw new WeComException(e.getMessage()); + } + } + + + /** + * 4个字节的网络字节序bytes数组还原成一个数字. + */ + private static int bytesNetworkOrder2Number(byte[] bytesInNetworkOrder) { + int sourceNumber = 0; + int size = 4; + for (int i = 0; i < size; i++) { + sourceNumber <<= 8; + sourceNumber |= bytesInNetworkOrder[i] & 0xff; + } + return sourceNumber; + } + + + /** + * 检验消息的真实性,并且获取解密后的明文. + *
    + *
  1. 利用收到的密文生成安全签名,进行签名验证
  2. + *
  3. 若验证通过,则提取xml中的加密消息
  4. + *
  5. 对消息进行解密
  6. + *
+ * + * @param msgSignature 签名串,对应URL参数的msg_signature + * @param timeStamp 时间戳,对应URL参数的timestamp + * @param nonce 随机串,对应URL参数的nonce + * @param encryptedXml 密文,对应POST请求的数据 + * @return 解密后的原文 + */ + public String decrypt(String msgSignature, String timeStamp, String nonce, String encryptedXml) { + // 密钥,公众账号的app corpSecret + // 提取密文 + String cipherText = extractEncryptPart(encryptedXml); + + // 验证安全签名 + String signature = SHA1.gen(this.token, timeStamp, nonce, cipherText); + if (!signature.equals(msgSignature)) { + throw new WeComException("加密消息签名校验失败"); + } + + // 解密 + return decrypt(cipherText); + } + + /** + * 对密文进行解密. + * + * @param cipherText 需要解密的密文 + * @return 解密得到的明文 + */ + public String decrypt(String cipherText) { + byte[] original; + try { + // 设置解密模式为AES的CBC模式 + Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding"); + SecretKeySpec keySpec = new SecretKeySpec(this.aesKey, "AES"); + IvParameterSpec iv = new IvParameterSpec(Arrays.copyOfRange(this.aesKey, 0, 16)); + cipher.init(Cipher.DECRYPT_MODE, keySpec, iv); + // 使用BASE64对密文进行解码 + byte[] encrypted = Base64.decodeBase64(cipherText); + + // 解密 + original = cipher.doFinal(encrypted); + } catch (Exception e) { + throw new WeComException(e.getMessage()); + } + + String xmlContent; + try { + // 去除补位字符 + byte[] bytes = PKCS7Encoder.decode(original); + + // 分离16位随机字符串,网络字节序和AppId + byte[] networkOrder = Arrays.copyOfRange(bytes, 16, 20); + + int xmlLength = bytesNetworkOrder2Number(networkOrder); + + xmlContent = new String(Arrays.copyOfRange(bytes, 20, 20 + xmlLength), CHARSET); + } catch (Exception e) { + throw new WeComException(e.getMessage()); + } + + return xmlContent; + + } + + public String verifyURL(String msgSignature, String timeStamp, String nonce, String echoStr) throws WeComException { + String signature = SHA1.getSHA1(this.token, timeStamp, nonce, echoStr); + log.info("回调配置校验接口,生成的签名:{}", signature); + if (!signature.equals(msgSignature)) { + throw new WeComException("签名验证错误"); + } else { + return this.decrypt(echoStr); + } + } +} diff --git a/easywecom-common/src/main/java/com/easywecom/common/annotation/DataScope.java b/easyink-common/src/main/java/com/easywecom/common/annotation/DataScope.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/annotation/DataScope.java rename to easyink-common/src/main/java/com/easywecom/common/annotation/DataScope.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/annotation/DataSource.java b/easyink-common/src/main/java/com/easywecom/common/annotation/DataSource.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/annotation/DataSource.java rename to easyink-common/src/main/java/com/easywecom/common/annotation/DataSource.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/annotation/Excel.java b/easyink-common/src/main/java/com/easywecom/common/annotation/Excel.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/annotation/Excel.java rename to easyink-common/src/main/java/com/easywecom/common/annotation/Excel.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/annotation/Excels.java b/easyink-common/src/main/java/com/easywecom/common/annotation/Excels.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/annotation/Excels.java rename to easyink-common/src/main/java/com/easywecom/common/annotation/Excels.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/annotation/Log.java b/easyink-common/src/main/java/com/easywecom/common/annotation/Log.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/annotation/Log.java rename to easyink-common/src/main/java/com/easywecom/common/annotation/Log.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/annotation/RepeatSubmit.java b/easyink-common/src/main/java/com/easywecom/common/annotation/RepeatSubmit.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/annotation/RepeatSubmit.java rename to easyink-common/src/main/java/com/easywecom/common/annotation/RepeatSubmit.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/annotation/SysProperty.java b/easyink-common/src/main/java/com/easywecom/common/annotation/SysProperty.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/annotation/SysProperty.java rename to easyink-common/src/main/java/com/easywecom/common/annotation/SysProperty.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/aop/CustomerTrajectoryAop.java b/easyink-common/src/main/java/com/easywecom/common/aop/CustomerTrajectoryAop.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/aop/CustomerTrajectoryAop.java rename to easyink-common/src/main/java/com/easywecom/common/aop/CustomerTrajectoryAop.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/config/ChatRsaKeyConfig.java b/easyink-common/src/main/java/com/easywecom/common/config/ChatRsaKeyConfig.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/config/ChatRsaKeyConfig.java rename to easyink-common/src/main/java/com/easywecom/common/config/ChatRsaKeyConfig.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/config/CosConfig.java b/easyink-common/src/main/java/com/easywecom/common/config/CosConfig.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/config/CosConfig.java rename to easyink-common/src/main/java/com/easywecom/common/config/CosConfig.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/config/ElasticSearchConfig.java b/easyink-common/src/main/java/com/easywecom/common/config/ElasticSearchConfig.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/config/ElasticSearchConfig.java rename to easyink-common/src/main/java/com/easywecom/common/config/ElasticSearchConfig.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/config/FileConfig.java b/easyink-common/src/main/java/com/easywecom/common/config/FileConfig.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/config/FileConfig.java rename to easyink-common/src/main/java/com/easywecom/common/config/FileConfig.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/config/RuoYiConfig.java b/easyink-common/src/main/java/com/easywecom/common/config/RuoYiConfig.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/config/RuoYiConfig.java rename to easyink-common/src/main/java/com/easywecom/common/config/RuoYiConfig.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/config/ServerConfig.java b/easyink-common/src/main/java/com/easywecom/common/config/ServerConfig.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/config/ServerConfig.java rename to easyink-common/src/main/java/com/easywecom/common/config/ServerConfig.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/config/ThirdDefaultDomainConfig.java b/easyink-common/src/main/java/com/easywecom/common/config/ThirdDefaultDomainConfig.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/config/ThirdDefaultDomainConfig.java rename to easyink-common/src/main/java/com/easywecom/common/config/ThirdDefaultDomainConfig.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/config/WeComeConfig.java b/easyink-common/src/main/java/com/easywecom/common/config/WeComeConfig.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/config/WeComeConfig.java rename to easyink-common/src/main/java/com/easywecom/common/config/WeComeConfig.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/config/WeCrypt.java b/easyink-common/src/main/java/com/easywecom/common/config/WeCrypt.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/config/WeCrypt.java rename to easyink-common/src/main/java/com/easywecom/common/config/WeCrypt.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/config/WeProvider.java b/easyink-common/src/main/java/com/easywecom/common/config/WeProvider.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/config/WeProvider.java rename to easyink-common/src/main/java/com/easywecom/common/config/WeProvider.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/config/WechatOpenConfig.java b/easyink-common/src/main/java/com/easywecom/common/config/WechatOpenConfig.java similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/config/WechatOpenConfig.java rename to easyink-common/src/main/java/com/easywecom/common/config/WechatOpenConfig.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/config/jackson/StringArrayDeserialize.java b/easyink-common/src/main/java/com/easywecom/common/config/jackson/StringArrayDeserialize.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/config/jackson/StringArrayDeserialize.java rename to easyink-common/src/main/java/com/easywecom/common/config/jackson/StringArrayDeserialize.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/constant/Constants.java b/easyink-common/src/main/java/com/easywecom/common/constant/Constants.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/constant/Constants.java rename to easyink-common/src/main/java/com/easywecom/common/constant/Constants.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/constant/ConversationConstants.java b/easyink-common/src/main/java/com/easywecom/common/constant/ConversationConstants.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/constant/ConversationConstants.java rename to easyink-common/src/main/java/com/easywecom/common/constant/ConversationConstants.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/constant/GenConstants.java b/easyink-common/src/main/java/com/easywecom/common/constant/GenConstants.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/constant/GenConstants.java rename to easyink-common/src/main/java/com/easywecom/common/constant/GenConstants.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/constant/GroupCodeConstants.java b/easyink-common/src/main/java/com/easywecom/common/constant/GroupCodeConstants.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/constant/GroupCodeConstants.java rename to easyink-common/src/main/java/com/easywecom/common/constant/GroupCodeConstants.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/constant/GroupConstants.java b/easyink-common/src/main/java/com/easywecom/common/constant/GroupConstants.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/constant/GroupConstants.java rename to easyink-common/src/main/java/com/easywecom/common/constant/GroupConstants.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/constant/RedisKeyConstants.java b/easyink-common/src/main/java/com/easywecom/common/constant/RedisKeyConstants.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/constant/RedisKeyConstants.java rename to easyink-common/src/main/java/com/easywecom/common/constant/RedisKeyConstants.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/constant/ScheduleConstants.java b/easyink-common/src/main/java/com/easywecom/common/constant/ScheduleConstants.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/constant/ScheduleConstants.java rename to easyink-common/src/main/java/com/easywecom/common/constant/ScheduleConstants.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/constant/UserConstants.java b/easyink-common/src/main/java/com/easywecom/common/constant/UserConstants.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/constant/UserConstants.java rename to easyink-common/src/main/java/com/easywecom/common/constant/UserConstants.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/constant/WeConstans.java b/easyink-common/src/main/java/com/easywecom/common/constant/WeConstans.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/constant/WeConstans.java rename to easyink-common/src/main/java/com/easywecom/common/constant/WeConstans.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/constant/radar/RadarConstants.java b/easyink-common/src/main/java/com/easywecom/common/constant/radar/RadarConstants.java similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/constant/radar/RadarConstants.java rename to easyink-common/src/main/java/com/easywecom/common/constant/radar/RadarConstants.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/constant/redeemcode/RedeemCodeConstants.java b/easyink-common/src/main/java/com/easywecom/common/constant/redeemcode/RedeemCodeConstants.java similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/constant/redeemcode/RedeemCodeConstants.java rename to easyink-common/src/main/java/com/easywecom/common/constant/redeemcode/RedeemCodeConstants.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/MenuTree.java b/easyink-common/src/main/java/com/easywecom/common/core/MenuTree.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/MenuTree.java rename to easyink-common/src/main/java/com/easywecom/common/core/MenuTree.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/controller/BaseController.java b/easyink-common/src/main/java/com/easywecom/common/core/controller/BaseController.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/controller/BaseController.java rename to easyink-common/src/main/java/com/easywecom/common/core/controller/BaseController.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/AjaxResult.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/AjaxResult.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/AjaxResult.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/AjaxResult.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/BaseEntity.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/BaseEntity.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/BaseEntity.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/BaseEntity.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/ConversationArchiveQuery.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/ConversationArchiveQuery.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/ConversationArchiveQuery.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/ConversationArchiveQuery.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/FileVo.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/FileVo.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/FileVo.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/FileVo.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/PageEntity.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/PageEntity.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/PageEntity.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/PageEntity.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/RootEntity.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/RootEntity.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/RootEntity.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/RootEntity.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/Tree.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/Tree.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/Tree.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/Tree.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/TreeEntity.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/TreeEntity.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/TreeEntity.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/TreeEntity.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/TreeSelect.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/TreeSelect.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/TreeSelect.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/TreeSelect.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/conversation/ChatBodyVO.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/conversation/ChatBodyVO.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/conversation/ChatBodyVO.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/conversation/ChatBodyVO.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/conversation/ChatInfoVO.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/conversation/ChatInfoVO.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/conversation/ChatInfoVO.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/conversation/ChatInfoVO.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/conversation/FinanceResVO.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/conversation/FinanceResVO.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/conversation/FinanceResVO.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/conversation/FinanceResVO.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/AgreeVO.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/AgreeVO.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/AgreeVO.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/AgreeVO.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/AttachmentBaseVO.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/AttachmentBaseVO.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/AttachmentBaseVO.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/AttachmentBaseVO.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/CalendarVO.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/CalendarVO.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/CalendarVO.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/CalendarVO.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/CardVO.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/CardVO.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/CardVO.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/CardVO.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/ChatRecordVO.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/ChatRecordVO.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/ChatRecordVO.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/ChatRecordVO.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/CollectVO.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/CollectVO.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/CollectVO.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/CollectVO.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/DisagreeVO.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/DisagreeVO.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/DisagreeVO.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/DisagreeVO.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/DocmsgVO.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/DocmsgVO.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/DocmsgVO.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/DocmsgVO.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/EmotionVO.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/EmotionVO.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/EmotionVO.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/EmotionVO.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/FileVO.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/FileVO.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/FileVO.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/FileVO.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/ImageVO.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/ImageVO.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/ImageVO.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/ImageVO.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/LinkVO.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/LinkVO.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/LinkVO.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/LinkVO.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/LocationVO.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/LocationVO.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/LocationVO.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/LocationVO.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/MarkdownVO.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/MarkdownVO.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/MarkdownVO.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/MarkdownVO.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/MeetingVO.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/MeetingVO.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/MeetingVO.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/MeetingVO.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/MeetingVoiceCallVO.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/MeetingVoiceCallVO.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/MeetingVoiceCallVO.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/MeetingVoiceCallVO.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/MixedVO.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/MixedVO.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/MixedVO.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/MixedVO.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/MsgTypeEnum.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/MsgTypeEnum.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/MsgTypeEnum.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/MsgTypeEnum.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/NewsVO.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/NewsVO.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/NewsVO.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/NewsVO.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/RedpacketVO.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/RedpacketVO.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/RedpacketVO.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/RedpacketVO.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/RevokeVO.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/RevokeVO.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/RevokeVO.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/RevokeVO.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/SphFeedVO.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/SphFeedVO.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/SphFeedVO.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/SphFeedVO.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/TextVO.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/TextVO.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/TextVO.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/TextVO.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/TodoVO.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/TodoVO.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/TodoVO.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/TodoVO.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/VideoVO.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/VideoVO.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/VideoVO.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/VideoVO.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/VoiceVO.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/VoiceVO.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/VoiceVO.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/VoiceVO.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/VoipDocShareVO.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/VoipDocShareVO.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/VoipDocShareVO.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/VoipDocShareVO.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/VoteVO.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/VoteVO.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/VoteVO.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/VoteVO.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/WeappVO.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/WeappVO.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/WeappVO.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/conversation/msgtype/WeappVO.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/elastic/ElasticSearchDataVo.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/elastic/ElasticSearchDataVo.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/elastic/ElasticSearchDataVo.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/elastic/ElasticSearchDataVo.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/elastic/ElasticSearchEntity.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/elastic/ElasticSearchEntity.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/elastic/ElasticSearchEntity.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/elastic/ElasticSearchEntity.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/elastic/ElasticSearchQueryVo.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/elastic/ElasticSearchQueryVo.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/elastic/ElasticSearchQueryVo.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/elastic/ElasticSearchQueryVo.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/entity/SysDept.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/entity/SysDept.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/entity/SysDept.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/entity/SysDept.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/entity/SysDictData.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/entity/SysDictData.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/entity/SysDictData.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/entity/SysDictData.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/entity/SysDictType.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/entity/SysDictType.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/entity/SysDictType.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/entity/SysDictType.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/entity/SysMenu.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/entity/SysMenu.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/entity/SysMenu.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/entity/SysMenu.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/entity/SysRole.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/entity/SysRole.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/entity/SysRole.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/entity/SysRole.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/entity/SysUser.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/entity/SysUser.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/entity/SysUser.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/entity/SysUser.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/entity/WeCorpAccount.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/entity/WeCorpAccount.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/entity/WeCorpAccount.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/entity/WeCorpAccount.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/model/LoginBody.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/model/LoginBody.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/model/LoginBody.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/model/LoginBody.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/model/LoginResult.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/model/LoginResult.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/model/LoginResult.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/model/LoginResult.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/model/LoginUser.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/model/LoginUser.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/model/LoginUser.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/model/LoginUser.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/model/LoginUserVO.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/model/LoginUserVO.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/model/LoginUserVO.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/model/LoginUserVO.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/system/MetaVo.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/system/MetaVo.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/system/MetaVo.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/system/MetaVo.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/system/RouterVo.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/system/RouterVo.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/system/RouterVo.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/system/RouterVo.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/system/SysConfig.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/system/SysConfig.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/system/SysConfig.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/system/SysConfig.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/system/SysLogininfor.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/system/SysLogininfor.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/system/SysLogininfor.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/system/SysLogininfor.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/system/SysNotice.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/system/SysNotice.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/system/SysNotice.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/system/SysNotice.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/system/SysOperLog.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/system/SysOperLog.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/system/SysOperLog.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/system/SysOperLog.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/system/SysPost.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/system/SysPost.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/system/SysPost.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/system/SysPost.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/system/SysRoleDept.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/system/SysRoleDept.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/system/SysRoleDept.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/system/SysRoleDept.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/system/SysRoleMenu.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/system/SysRoleMenu.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/system/SysRoleMenu.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/system/SysRoleMenu.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/system/SysUserOnline.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/system/SysUserOnline.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/system/SysUserOnline.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/system/SysUserOnline.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/system/SysUserPost.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/system/SysUserPost.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/system/SysUserPost.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/system/SysUserPost.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/system/SysUserRole.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/system/SysUserRole.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/system/SysUserRole.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/system/SysUserRole.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/wecom/BaseExtendPropertyRel.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/wecom/BaseExtendPropertyRel.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/wecom/BaseExtendPropertyRel.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/wecom/BaseExtendPropertyRel.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/wecom/WeDepartment.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/wecom/WeDepartment.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/wecom/WeDepartment.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/wecom/WeDepartment.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/domain/wecom/WeUser.java b/easyink-common/src/main/java/com/easywecom/common/core/domain/wecom/WeUser.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/domain/wecom/WeUser.java rename to easyink-common/src/main/java/com/easywecom/common/core/domain/wecom/WeUser.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/elasticsearch/ElasticSearch.java b/easyink-common/src/main/java/com/easywecom/common/core/elasticsearch/ElasticSearch.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/elasticsearch/ElasticSearch.java rename to easyink-common/src/main/java/com/easywecom/common/core/elasticsearch/ElasticSearch.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/page/PageDomain.java b/easyink-common/src/main/java/com/easywecom/common/core/page/PageDomain.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/page/PageDomain.java rename to easyink-common/src/main/java/com/easywecom/common/core/page/PageDomain.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/page/TableDataInfo.java b/easyink-common/src/main/java/com/easywecom/common/core/page/TableDataInfo.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/page/TableDataInfo.java rename to easyink-common/src/main/java/com/easywecom/common/core/page/TableDataInfo.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/page/TableSupport.java b/easyink-common/src/main/java/com/easywecom/common/core/page/TableSupport.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/page/TableSupport.java rename to easyink-common/src/main/java/com/easywecom/common/core/page/TableSupport.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/redis/RedisCache.java b/easyink-common/src/main/java/com/easywecom/common/core/redis/RedisCache.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/redis/RedisCache.java rename to easyink-common/src/main/java/com/easywecom/common/core/redis/RedisCache.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/text/CharsetKit.java b/easyink-common/src/main/java/com/easywecom/common/core/text/CharsetKit.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/text/CharsetKit.java rename to easyink-common/src/main/java/com/easywecom/common/core/text/CharsetKit.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/text/Convert.java b/easyink-common/src/main/java/com/easywecom/common/core/text/Convert.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/text/Convert.java rename to easyink-common/src/main/java/com/easywecom/common/core/text/Convert.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/core/text/StrFormatter.java b/easyink-common/src/main/java/com/easywecom/common/core/text/StrFormatter.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/core/text/StrFormatter.java rename to easyink-common/src/main/java/com/easywecom/common/core/text/StrFormatter.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/enums/AddWayEnum.java b/easyink-common/src/main/java/com/easywecom/common/enums/AddWayEnum.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/enums/AddWayEnum.java rename to easyink-common/src/main/java/com/easywecom/common/enums/AddWayEnum.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/enums/AppIdEnum.java b/easyink-common/src/main/java/com/easywecom/common/enums/AppIdEnum.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/enums/AppIdEnum.java rename to easyink-common/src/main/java/com/easywecom/common/enums/AppIdEnum.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/enums/AttachmentTypeEnum.java b/easyink-common/src/main/java/com/easywecom/common/enums/AttachmentTypeEnum.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/enums/AttachmentTypeEnum.java rename to easyink-common/src/main/java/com/easywecom/common/enums/AttachmentTypeEnum.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/enums/BaseStatusEnum.java b/easyink-common/src/main/java/com/easywecom/common/enums/BaseStatusEnum.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/enums/BaseStatusEnum.java rename to easyink-common/src/main/java/com/easywecom/common/enums/BaseStatusEnum.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/enums/BatchUpdateUserInfoTypeEnum.java b/easyink-common/src/main/java/com/easywecom/common/enums/BatchUpdateUserInfoTypeEnum.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/enums/BatchUpdateUserInfoTypeEnum.java rename to easyink-common/src/main/java/com/easywecom/common/enums/BatchUpdateUserInfoTypeEnum.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/enums/BusinessStatus.java b/easyink-common/src/main/java/com/easywecom/common/enums/BusinessStatus.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/enums/BusinessStatus.java rename to easyink-common/src/main/java/com/easywecom/common/enums/BusinessStatus.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/enums/BusinessType.java b/easyink-common/src/main/java/com/easywecom/common/enums/BusinessType.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/enums/BusinessType.java rename to easyink-common/src/main/java/com/easywecom/common/enums/BusinessType.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/enums/CallSourceEnum.java b/easyink-common/src/main/java/com/easywecom/common/enums/CallSourceEnum.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/enums/CallSourceEnum.java rename to easyink-common/src/main/java/com/easywecom/common/enums/CallSourceEnum.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/enums/CallbackEventUpdateDetail.java b/easyink-common/src/main/java/com/easywecom/common/enums/CallbackEventUpdateDetail.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/enums/CallbackEventUpdateDetail.java rename to easyink-common/src/main/java/com/easywecom/common/enums/CallbackEventUpdateDetail.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/enums/ChatType.java b/easyink-common/src/main/java/com/easywecom/common/enums/ChatType.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/enums/ChatType.java rename to easyink-common/src/main/java/com/easywecom/common/enums/ChatType.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/enums/CommunityTaskType.java b/easyink-common/src/main/java/com/easywecom/common/enums/CommunityTaskType.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/enums/CommunityTaskType.java rename to easyink-common/src/main/java/com/easywecom/common/enums/CommunityTaskType.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/enums/CustomerExtendPropertyEnum.java b/easyink-common/src/main/java/com/easywecom/common/enums/CustomerExtendPropertyEnum.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/enums/CustomerExtendPropertyEnum.java rename to easyink-common/src/main/java/com/easywecom/common/enums/CustomerExtendPropertyEnum.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/enums/CustomerStatusEnum.java b/easyink-common/src/main/java/com/easywecom/common/enums/CustomerStatusEnum.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/enums/CustomerStatusEnum.java rename to easyink-common/src/main/java/com/easywecom/common/enums/CustomerStatusEnum.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/enums/CustomerTrajectoryEnums.java b/easyink-common/src/main/java/com/easywecom/common/enums/CustomerTrajectoryEnums.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/enums/CustomerTrajectoryEnums.java rename to easyink-common/src/main/java/com/easywecom/common/enums/CustomerTrajectoryEnums.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/enums/CustomerTransferStatusEnum.java b/easyink-common/src/main/java/com/easywecom/common/enums/CustomerTransferStatusEnum.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/enums/CustomerTransferStatusEnum.java rename to easyink-common/src/main/java/com/easywecom/common/enums/CustomerTransferStatusEnum.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/enums/DataScopeEnum.java b/easyink-common/src/main/java/com/easywecom/common/enums/DataScopeEnum.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/enums/DataScopeEnum.java rename to easyink-common/src/main/java/com/easywecom/common/enums/DataScopeEnum.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/enums/DataSourceType.java b/easyink-common/src/main/java/com/easywecom/common/enums/DataSourceType.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/enums/DataSourceType.java rename to easyink-common/src/main/java/com/easywecom/common/enums/DataSourceType.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/enums/EmployCodeSourceEnum.java b/easyink-common/src/main/java/com/easywecom/common/enums/EmployCodeSourceEnum.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/enums/EmployCodeSourceEnum.java rename to easyink-common/src/main/java/com/easywecom/common/enums/EmployCodeSourceEnum.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/enums/ExpressNameEnum.java b/easyink-common/src/main/java/com/easywecom/common/enums/ExpressNameEnum.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/enums/ExpressNameEnum.java rename to easyink-common/src/main/java/com/easywecom/common/enums/ExpressNameEnum.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/enums/ExternalGroupMemberTypeEnum.java b/easyink-common/src/main/java/com/easywecom/common/enums/ExternalGroupMemberTypeEnum.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/enums/ExternalGroupMemberTypeEnum.java rename to easyink-common/src/main/java/com/easywecom/common/enums/ExternalGroupMemberTypeEnum.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/enums/GroupMessageType.java b/easyink-common/src/main/java/com/easywecom/common/enums/GroupMessageType.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/enums/GroupMessageType.java rename to easyink-common/src/main/java/com/easywecom/common/enums/GroupMessageType.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/enums/HttpMethod.java b/easyink-common/src/main/java/com/easywecom/common/enums/HttpMethod.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/enums/HttpMethod.java rename to easyink-common/src/main/java/com/easywecom/common/enums/HttpMethod.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/enums/LoginTypeEnum.java b/easyink-common/src/main/java/com/easywecom/common/enums/LoginTypeEnum.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/enums/LoginTypeEnum.java rename to easyink-common/src/main/java/com/easywecom/common/enums/LoginTypeEnum.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/enums/LogoutReasonEnum.java b/easyink-common/src/main/java/com/easywecom/common/enums/LogoutReasonEnum.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/enums/LogoutReasonEnum.java rename to easyink-common/src/main/java/com/easywecom/common/enums/LogoutReasonEnum.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/enums/MediaType.java b/easyink-common/src/main/java/com/easywecom/common/enums/MediaType.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/enums/MediaType.java rename to easyink-common/src/main/java/com/easywecom/common/enums/MediaType.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/enums/MessageStatusEnum.java b/easyink-common/src/main/java/com/easywecom/common/enums/MessageStatusEnum.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/enums/MessageStatusEnum.java rename to easyink-common/src/main/java/com/easywecom/common/enums/MessageStatusEnum.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/enums/MessageType.java b/easyink-common/src/main/java/com/easywecom/common/enums/MessageType.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/enums/MessageType.java rename to easyink-common/src/main/java/com/easywecom/common/enums/MessageType.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/enums/OperatorType.java b/easyink-common/src/main/java/com/easywecom/common/enums/OperatorType.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/enums/OperatorType.java rename to easyink-common/src/main/java/com/easywecom/common/enums/OperatorType.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/enums/PresTagGroupTaskSendScopeEnum.java b/easyink-common/src/main/java/com/easywecom/common/enums/PresTagGroupTaskSendScopeEnum.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/enums/PresTagGroupTaskSendScopeEnum.java rename to easyink-common/src/main/java/com/easywecom/common/enums/PresTagGroupTaskSendScopeEnum.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/enums/PushType.java b/easyink-common/src/main/java/com/easywecom/common/enums/PushType.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/enums/PushType.java rename to easyink-common/src/main/java/com/easywecom/common/enums/PushType.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/enums/ResultTip.java b/easyink-common/src/main/java/com/easywecom/common/enums/ResultTip.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/enums/ResultTip.java rename to easyink-common/src/main/java/com/easywecom/common/enums/ResultTip.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/enums/RoleTypeEnum.java b/easyink-common/src/main/java/com/easywecom/common/enums/RoleTypeEnum.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/enums/RoleTypeEnum.java rename to easyink-common/src/main/java/com/easywecom/common/enums/RoleTypeEnum.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/enums/StaffActivateEnum.java b/easyink-common/src/main/java/com/easywecom/common/enums/StaffActivateEnum.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/enums/StaffActivateEnum.java rename to easyink-common/src/main/java/com/easywecom/common/enums/StaffActivateEnum.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/enums/TransferFailReason.java b/easyink-common/src/main/java/com/easywecom/common/enums/TransferFailReason.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/enums/TransferFailReason.java rename to easyink-common/src/main/java/com/easywecom/common/enums/TransferFailReason.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/enums/UserStatus.java b/easyink-common/src/main/java/com/easywecom/common/enums/UserStatus.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/enums/UserStatus.java rename to easyink-common/src/main/java/com/easywecom/common/enums/UserStatus.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/enums/WeCategoryMediaTypeEnum.java b/easyink-common/src/main/java/com/easywecom/common/enums/WeCategoryMediaTypeEnum.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/enums/WeCategoryMediaTypeEnum.java rename to easyink-common/src/main/java/com/easywecom/common/enums/WeCategoryMediaTypeEnum.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/enums/WeEmpleCodeAnalyseTypeEnum.java b/easyink-common/src/main/java/com/easywecom/common/enums/WeEmpleCodeAnalyseTypeEnum.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/enums/WeEmpleCodeAnalyseTypeEnum.java rename to easyink-common/src/main/java/com/easywecom/common/enums/WeEmpleCodeAnalyseTypeEnum.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/enums/WeEmpleCodeType.java b/easyink-common/src/main/java/com/easywecom/common/enums/WeEmpleCodeType.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/enums/WeEmpleCodeType.java rename to easyink-common/src/main/java/com/easywecom/common/enums/WeEmpleCodeType.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/enums/WeEmployCodeRemarkTypeEnum.java b/easyink-common/src/main/java/com/easywecom/common/enums/WeEmployCodeRemarkTypeEnum.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/enums/WeEmployCodeRemarkTypeEnum.java rename to easyink-common/src/main/java/com/easywecom/common/enums/WeEmployCodeRemarkTypeEnum.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/enums/WeEmployCodeSkipVerifyEnum.java b/easyink-common/src/main/java/com/easywecom/common/enums/WeEmployCodeSkipVerifyEnum.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/enums/WeEmployCodeSkipVerifyEnum.java rename to easyink-common/src/main/java/com/easywecom/common/enums/WeEmployCodeSkipVerifyEnum.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/enums/WeExceptionTip.java b/easyink-common/src/main/java/com/easywecom/common/enums/WeExceptionTip.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/enums/WeExceptionTip.java rename to easyink-common/src/main/java/com/easywecom/common/enums/WeExceptionTip.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/enums/WeOperationsCenterSop.java b/easyink-common/src/main/java/com/easywecom/common/enums/WeOperationsCenterSop.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/enums/WeOperationsCenterSop.java rename to easyink-common/src/main/java/com/easywecom/common/enums/WeOperationsCenterSop.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/enums/WeSensitiveActEnum.java b/easyink-common/src/main/java/com/easywecom/common/enums/WeSensitiveActEnum.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/enums/WeSensitiveActEnum.java rename to easyink-common/src/main/java/com/easywecom/common/enums/WeSensitiveActEnum.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/enums/WeTempMaterialEnum.java b/easyink-common/src/main/java/com/easywecom/common/enums/WeTempMaterialEnum.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/enums/WeTempMaterialEnum.java rename to easyink-common/src/main/java/com/easywecom/common/enums/WeTempMaterialEnum.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/enums/WeWordsCategoryTypeEnum.java b/easyink-common/src/main/java/com/easywecom/common/enums/WeWordsCategoryTypeEnum.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/enums/WeWordsCategoryTypeEnum.java rename to easyink-common/src/main/java/com/easywecom/common/enums/WeWordsCategoryTypeEnum.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/enums/WelcomeMsgRuleTypeEnum.java b/easyink-common/src/main/java/com/easywecom/common/enums/WelcomeMsgRuleTypeEnum.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/enums/WelcomeMsgRuleTypeEnum.java rename to easyink-common/src/main/java/com/easywecom/common/enums/WelcomeMsgRuleTypeEnum.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/enums/WelcomeMsgTplTypeEnum.java b/easyink-common/src/main/java/com/easywecom/common/enums/WelcomeMsgTplTypeEnum.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/enums/WelcomeMsgTplTypeEnum.java rename to easyink-common/src/main/java/com/easywecom/common/enums/WelcomeMsgTplTypeEnum.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/enums/autotag/AutoTagCustomerSceneType.java b/easyink-common/src/main/java/com/easywecom/common/enums/autotag/AutoTagCustomerSceneType.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/enums/autotag/AutoTagCustomerSceneType.java rename to easyink-common/src/main/java/com/easywecom/common/enums/autotag/AutoTagCustomerSceneType.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/enums/autotag/AutoTagLabelTypeEnum.java b/easyink-common/src/main/java/com/easywecom/common/enums/autotag/AutoTagLabelTypeEnum.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/enums/autotag/AutoTagLabelTypeEnum.java rename to easyink-common/src/main/java/com/easywecom/common/enums/autotag/AutoTagLabelTypeEnum.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/enums/autotag/AutoTagMatchTypeEnum.java b/easyink-common/src/main/java/com/easywecom/common/enums/autotag/AutoTagMatchTypeEnum.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/enums/autotag/AutoTagMatchTypeEnum.java rename to easyink-common/src/main/java/com/easywecom/common/enums/autotag/AutoTagMatchTypeEnum.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/enums/code/GroupCodeTypeEnum.java b/easyink-common/src/main/java/com/easywecom/common/enums/code/GroupCodeTypeEnum.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/enums/code/GroupCodeTypeEnum.java rename to easyink-common/src/main/java/com/easywecom/common/enums/code/GroupCodeTypeEnum.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/enums/code/WelcomeMsgTypeEnum.java b/easyink-common/src/main/java/com/easywecom/common/enums/code/WelcomeMsgTypeEnum.java similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/enums/code/WelcomeMsgTypeEnum.java rename to easyink-common/src/main/java/com/easywecom/common/enums/code/WelcomeMsgTypeEnum.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/enums/customer/CustomerTypeEnum.java b/easyink-common/src/main/java/com/easywecom/common/enums/customer/CustomerTypeEnum.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/enums/customer/CustomerTypeEnum.java rename to easyink-common/src/main/java/com/easywecom/common/enums/customer/CustomerTypeEnum.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/enums/moment/MomentPublishStatusEnum.java b/easyink-common/src/main/java/com/easywecom/common/enums/moment/MomentPublishStatusEnum.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/enums/moment/MomentPublishStatusEnum.java rename to easyink-common/src/main/java/com/easywecom/common/enums/moment/MomentPublishStatusEnum.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/enums/moment/MomentPushRangeEnum.java b/easyink-common/src/main/java/com/easywecom/common/enums/moment/MomentPushRangeEnum.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/enums/moment/MomentPushRangeEnum.java rename to easyink-common/src/main/java/com/easywecom/common/enums/moment/MomentPushRangeEnum.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/enums/moment/MomentSelectUserEnum.java b/easyink-common/src/main/java/com/easywecom/common/enums/moment/MomentSelectUserEnum.java similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/enums/moment/MomentSelectUserEnum.java rename to easyink-common/src/main/java/com/easywecom/common/enums/moment/MomentSelectUserEnum.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/enums/moment/MomentStatusEnum.java b/easyink-common/src/main/java/com/easywecom/common/enums/moment/MomentStatusEnum.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/enums/moment/MomentStatusEnum.java rename to easyink-common/src/main/java/com/easywecom/common/enums/moment/MomentStatusEnum.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/enums/moment/MomentTaskTypeEnum.java b/easyink-common/src/main/java/com/easywecom/common/enums/moment/MomentTaskTypeEnum.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/enums/moment/MomentTaskTypeEnum.java rename to easyink-common/src/main/java/com/easywecom/common/enums/moment/MomentTaskTypeEnum.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/enums/moment/MomentTypeEnum.java b/easyink-common/src/main/java/com/easywecom/common/enums/moment/MomentTypeEnum.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/enums/moment/MomentTypeEnum.java rename to easyink-common/src/main/java/com/easywecom/common/enums/moment/MomentTypeEnum.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/enums/radar/RadarChannelEnum.java b/easyink-common/src/main/java/com/easywecom/common/enums/radar/RadarChannelEnum.java similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/enums/radar/RadarChannelEnum.java rename to easyink-common/src/main/java/com/easywecom/common/enums/radar/RadarChannelEnum.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/enums/radar/RadarTypeEnum.java b/easyink-common/src/main/java/com/easywecom/common/enums/radar/RadarTypeEnum.java similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/enums/radar/RadarTypeEnum.java rename to easyink-common/src/main/java/com/easywecom/common/enums/radar/RadarTypeEnum.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/enums/redeemcode/RedeemCodeStatusEnum.java b/easyink-common/src/main/java/com/easywecom/common/enums/redeemcode/RedeemCodeStatusEnum.java similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/enums/redeemcode/RedeemCodeStatusEnum.java rename to easyink-common/src/main/java/com/easywecom/common/enums/redeemcode/RedeemCodeStatusEnum.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/enums/wecom/ServerTypeEnum.java b/easyink-common/src/main/java/com/easywecom/common/enums/wecom/ServerTypeEnum.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/enums/wecom/ServerTypeEnum.java rename to easyink-common/src/main/java/com/easywecom/common/enums/wecom/ServerTypeEnum.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/exception/BaseException.java b/easyink-common/src/main/java/com/easywecom/common/exception/BaseException.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/exception/BaseException.java rename to easyink-common/src/main/java/com/easywecom/common/exception/BaseException.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/exception/CallBackNullPointerException.java b/easyink-common/src/main/java/com/easywecom/common/exception/CallBackNullPointerException.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/exception/CallBackNullPointerException.java rename to easyink-common/src/main/java/com/easywecom/common/exception/CallBackNullPointerException.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/exception/CustomException.java b/easyink-common/src/main/java/com/easywecom/common/exception/CustomException.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/exception/CustomException.java rename to easyink-common/src/main/java/com/easywecom/common/exception/CustomException.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/exception/file/FileException.java b/easyink-common/src/main/java/com/easywecom/common/exception/file/FileException.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/exception/file/FileException.java rename to easyink-common/src/main/java/com/easywecom/common/exception/file/FileException.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/exception/file/FileNameLengthLimitExceededException.java b/easyink-common/src/main/java/com/easywecom/common/exception/file/FileNameLengthLimitExceededException.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/exception/file/FileNameLengthLimitExceededException.java rename to easyink-common/src/main/java/com/easywecom/common/exception/file/FileNameLengthLimitExceededException.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/exception/file/FileSizeLimitExceededException.java b/easyink-common/src/main/java/com/easywecom/common/exception/file/FileSizeLimitExceededException.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/exception/file/FileSizeLimitExceededException.java rename to easyink-common/src/main/java/com/easywecom/common/exception/file/FileSizeLimitExceededException.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/exception/file/InvalidExtensionException.java b/easyink-common/src/main/java/com/easywecom/common/exception/file/InvalidExtensionException.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/exception/file/InvalidExtensionException.java rename to easyink-common/src/main/java/com/easywecom/common/exception/file/InvalidExtensionException.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/exception/job/TaskException.java b/easyink-common/src/main/java/com/easywecom/common/exception/job/TaskException.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/exception/job/TaskException.java rename to easyink-common/src/main/java/com/easywecom/common/exception/job/TaskException.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/exception/user/CaptchaException.java b/easyink-common/src/main/java/com/easywecom/common/exception/user/CaptchaException.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/exception/user/CaptchaException.java rename to easyink-common/src/main/java/com/easywecom/common/exception/user/CaptchaException.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/exception/user/CaptchaExpireException.java b/easyink-common/src/main/java/com/easywecom/common/exception/user/CaptchaExpireException.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/exception/user/CaptchaExpireException.java rename to easyink-common/src/main/java/com/easywecom/common/exception/user/CaptchaExpireException.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/exception/user/NoLoginTokenException.java b/easyink-common/src/main/java/com/easywecom/common/exception/user/NoLoginTokenException.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/exception/user/NoLoginTokenException.java rename to easyink-common/src/main/java/com/easywecom/common/exception/user/NoLoginTokenException.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/exception/user/QrCodeLoginException.java b/easyink-common/src/main/java/com/easywecom/common/exception/user/QrCodeLoginException.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/exception/user/QrCodeLoginException.java rename to easyink-common/src/main/java/com/easywecom/common/exception/user/QrCodeLoginException.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/exception/user/UserException.java b/easyink-common/src/main/java/com/easywecom/common/exception/user/UserException.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/exception/user/UserException.java rename to easyink-common/src/main/java/com/easywecom/common/exception/user/UserException.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/exception/user/UserNoCorpException.java b/easyink-common/src/main/java/com/easywecom/common/exception/user/UserNoCorpException.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/exception/user/UserNoCorpException.java rename to easyink-common/src/main/java/com/easywecom/common/exception/user/UserNoCorpException.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/exception/user/UserPasswordNotMatchException.java b/easyink-common/src/main/java/com/easywecom/common/exception/user/UserPasswordNotMatchException.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/exception/user/UserPasswordNotMatchException.java rename to easyink-common/src/main/java/com/easywecom/common/exception/user/UserPasswordNotMatchException.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/exception/wecom/WeComException.java b/easyink-common/src/main/java/com/easywecom/common/exception/wecom/WeComException.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/exception/wecom/WeComException.java rename to easyink-common/src/main/java/com/easywecom/common/exception/wecom/WeComException.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/filter/RepeatableFilter.java b/easyink-common/src/main/java/com/easywecom/common/filter/RepeatableFilter.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/filter/RepeatableFilter.java rename to easyink-common/src/main/java/com/easywecom/common/filter/RepeatableFilter.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/filter/RepeatedlyRequestWrapper.java b/easyink-common/src/main/java/com/easywecom/common/filter/RepeatedlyRequestWrapper.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/filter/RepeatedlyRequestWrapper.java rename to easyink-common/src/main/java/com/easywecom/common/filter/RepeatedlyRequestWrapper.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/filter/XssFilter.java b/easyink-common/src/main/java/com/easywecom/common/filter/XssFilter.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/filter/XssFilter.java rename to easyink-common/src/main/java/com/easywecom/common/filter/XssFilter.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/filter/XssHttpServletRequestWrapper.java b/easyink-common/src/main/java/com/easywecom/common/filter/XssHttpServletRequestWrapper.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/filter/XssHttpServletRequestWrapper.java rename to easyink-common/src/main/java/com/easywecom/common/filter/XssHttpServletRequestWrapper.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/lock/LockUtil.java b/easyink-common/src/main/java/com/easywecom/common/lock/LockUtil.java similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/lock/LockUtil.java rename to easyink-common/src/main/java/com/easywecom/common/lock/LockUtil.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/lock/Locker.java b/easyink-common/src/main/java/com/easywecom/common/lock/Locker.java similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/lock/Locker.java rename to easyink-common/src/main/java/com/easywecom/common/lock/Locker.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/lock/RedisLockConfig.java b/easyink-common/src/main/java/com/easywecom/common/lock/RedisLockConfig.java similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/lock/RedisLockConfig.java rename to easyink-common/src/main/java/com/easywecom/common/lock/RedisLockConfig.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/lock/RedissonLocker.java b/easyink-common/src/main/java/com/easywecom/common/lock/RedissonLocker.java similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/lock/RedissonLocker.java rename to easyink-common/src/main/java/com/easywecom/common/lock/RedissonLocker.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/manager/AsyncManager.java b/easyink-common/src/main/java/com/easywecom/common/manager/AsyncManager.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/manager/AsyncManager.java rename to easyink-common/src/main/java/com/easywecom/common/manager/AsyncManager.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/manager/ShutdownManager.java b/easyink-common/src/main/java/com/easywecom/common/manager/ShutdownManager.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/manager/ShutdownManager.java rename to easyink-common/src/main/java/com/easywecom/common/manager/ShutdownManager.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/manager/factory/AsyncFactory.java b/easyink-common/src/main/java/com/easywecom/common/manager/factory/AsyncFactory.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/manager/factory/AsyncFactory.java rename to easyink-common/src/main/java/com/easywecom/common/manager/factory/AsyncFactory.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/mapper/SysConfigMapper.java b/easyink-common/src/main/java/com/easywecom/common/mapper/SysConfigMapper.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/mapper/SysConfigMapper.java rename to easyink-common/src/main/java/com/easywecom/common/mapper/SysConfigMapper.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/mapper/SysDeptMapper.java b/easyink-common/src/main/java/com/easywecom/common/mapper/SysDeptMapper.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/mapper/SysDeptMapper.java rename to easyink-common/src/main/java/com/easywecom/common/mapper/SysDeptMapper.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/mapper/SysDictDataMapper.java b/easyink-common/src/main/java/com/easywecom/common/mapper/SysDictDataMapper.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/mapper/SysDictDataMapper.java rename to easyink-common/src/main/java/com/easywecom/common/mapper/SysDictDataMapper.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/mapper/SysDictTypeMapper.java b/easyink-common/src/main/java/com/easywecom/common/mapper/SysDictTypeMapper.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/mapper/SysDictTypeMapper.java rename to easyink-common/src/main/java/com/easywecom/common/mapper/SysDictTypeMapper.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/mapper/SysLogininforMapper.java b/easyink-common/src/main/java/com/easywecom/common/mapper/SysLogininforMapper.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/mapper/SysLogininforMapper.java rename to easyink-common/src/main/java/com/easywecom/common/mapper/SysLogininforMapper.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/mapper/SysMenuMapper.java b/easyink-common/src/main/java/com/easywecom/common/mapper/SysMenuMapper.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/mapper/SysMenuMapper.java rename to easyink-common/src/main/java/com/easywecom/common/mapper/SysMenuMapper.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/mapper/SysOperLogMapper.java b/easyink-common/src/main/java/com/easywecom/common/mapper/SysOperLogMapper.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/mapper/SysOperLogMapper.java rename to easyink-common/src/main/java/com/easywecom/common/mapper/SysOperLogMapper.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/mapper/SysRoleDeptMapper.java b/easyink-common/src/main/java/com/easywecom/common/mapper/SysRoleDeptMapper.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/mapper/SysRoleDeptMapper.java rename to easyink-common/src/main/java/com/easywecom/common/mapper/SysRoleDeptMapper.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/mapper/SysRoleMapper.java b/easyink-common/src/main/java/com/easywecom/common/mapper/SysRoleMapper.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/mapper/SysRoleMapper.java rename to easyink-common/src/main/java/com/easywecom/common/mapper/SysRoleMapper.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/mapper/SysRoleMenuMapper.java b/easyink-common/src/main/java/com/easywecom/common/mapper/SysRoleMenuMapper.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/mapper/SysRoleMenuMapper.java rename to easyink-common/src/main/java/com/easywecom/common/mapper/SysRoleMenuMapper.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/mapper/SysShortUrlMappingMapper.java b/easyink-common/src/main/java/com/easywecom/common/mapper/SysShortUrlMappingMapper.java similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/mapper/SysShortUrlMappingMapper.java rename to easyink-common/src/main/java/com/easywecom/common/mapper/SysShortUrlMappingMapper.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/mapper/SysUserMapper.java b/easyink-common/src/main/java/com/easywecom/common/mapper/SysUserMapper.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/mapper/SysUserMapper.java rename to easyink-common/src/main/java/com/easywecom/common/mapper/SysUserMapper.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/mapper/SysUserRoleMapper.java b/easyink-common/src/main/java/com/easywecom/common/mapper/SysUserRoleMapper.java similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/mapper/SysUserRoleMapper.java rename to easyink-common/src/main/java/com/easywecom/common/mapper/SysUserRoleMapper.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/service/ISysConfigService.java b/easyink-common/src/main/java/com/easywecom/common/service/ISysConfigService.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/service/ISysConfigService.java rename to easyink-common/src/main/java/com/easywecom/common/service/ISysConfigService.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/service/ISysDeptService.java b/easyink-common/src/main/java/com/easywecom/common/service/ISysDeptService.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/service/ISysDeptService.java rename to easyink-common/src/main/java/com/easywecom/common/service/ISysDeptService.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/service/ISysDictDataService.java b/easyink-common/src/main/java/com/easywecom/common/service/ISysDictDataService.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/service/ISysDictDataService.java rename to easyink-common/src/main/java/com/easywecom/common/service/ISysDictDataService.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/service/ISysDictTypeService.java b/easyink-common/src/main/java/com/easywecom/common/service/ISysDictTypeService.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/service/ISysDictTypeService.java rename to easyink-common/src/main/java/com/easywecom/common/service/ISysDictTypeService.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/service/ISysLogininforService.java b/easyink-common/src/main/java/com/easywecom/common/service/ISysLogininforService.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/service/ISysLogininforService.java rename to easyink-common/src/main/java/com/easywecom/common/service/ISysLogininforService.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/service/ISysMenuService.java b/easyink-common/src/main/java/com/easywecom/common/service/ISysMenuService.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/service/ISysMenuService.java rename to easyink-common/src/main/java/com/easywecom/common/service/ISysMenuService.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/service/ISysOperLogService.java b/easyink-common/src/main/java/com/easywecom/common/service/ISysOperLogService.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/service/ISysOperLogService.java rename to easyink-common/src/main/java/com/easywecom/common/service/ISysOperLogService.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/service/ISysRoleService.java b/easyink-common/src/main/java/com/easywecom/common/service/ISysRoleService.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/service/ISysRoleService.java rename to easyink-common/src/main/java/com/easywecom/common/service/ISysRoleService.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/service/ISysUserOnlineService.java b/easyink-common/src/main/java/com/easywecom/common/service/ISysUserOnlineService.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/service/ISysUserOnlineService.java rename to easyink-common/src/main/java/com/easywecom/common/service/ISysUserOnlineService.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/service/ISysUserService.java b/easyink-common/src/main/java/com/easywecom/common/service/ISysUserService.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/service/ISysUserService.java rename to easyink-common/src/main/java/com/easywecom/common/service/ISysUserService.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/service/impl/SysConfigServiceImpl.java b/easyink-common/src/main/java/com/easywecom/common/service/impl/SysConfigServiceImpl.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/service/impl/SysConfigServiceImpl.java rename to easyink-common/src/main/java/com/easywecom/common/service/impl/SysConfigServiceImpl.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/service/impl/SysDeptServiceImpl.java b/easyink-common/src/main/java/com/easywecom/common/service/impl/SysDeptServiceImpl.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/service/impl/SysDeptServiceImpl.java rename to easyink-common/src/main/java/com/easywecom/common/service/impl/SysDeptServiceImpl.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/service/impl/SysDictDataServiceImpl.java b/easyink-common/src/main/java/com/easywecom/common/service/impl/SysDictDataServiceImpl.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/service/impl/SysDictDataServiceImpl.java rename to easyink-common/src/main/java/com/easywecom/common/service/impl/SysDictDataServiceImpl.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/service/impl/SysDictTypeServiceImpl.java b/easyink-common/src/main/java/com/easywecom/common/service/impl/SysDictTypeServiceImpl.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/service/impl/SysDictTypeServiceImpl.java rename to easyink-common/src/main/java/com/easywecom/common/service/impl/SysDictTypeServiceImpl.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/service/impl/SysLogininforServiceImpl.java b/easyink-common/src/main/java/com/easywecom/common/service/impl/SysLogininforServiceImpl.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/service/impl/SysLogininforServiceImpl.java rename to easyink-common/src/main/java/com/easywecom/common/service/impl/SysLogininforServiceImpl.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/service/impl/SysMenuServiceImpl.java b/easyink-common/src/main/java/com/easywecom/common/service/impl/SysMenuServiceImpl.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/service/impl/SysMenuServiceImpl.java rename to easyink-common/src/main/java/com/easywecom/common/service/impl/SysMenuServiceImpl.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/service/impl/SysOperLogServiceImpl.java b/easyink-common/src/main/java/com/easywecom/common/service/impl/SysOperLogServiceImpl.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/service/impl/SysOperLogServiceImpl.java rename to easyink-common/src/main/java/com/easywecom/common/service/impl/SysOperLogServiceImpl.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/service/impl/SysRoleServiceImpl.java b/easyink-common/src/main/java/com/easywecom/common/service/impl/SysRoleServiceImpl.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/service/impl/SysRoleServiceImpl.java rename to easyink-common/src/main/java/com/easywecom/common/service/impl/SysRoleServiceImpl.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/service/impl/SysUserOnlineServiceImpl.java b/easyink-common/src/main/java/com/easywecom/common/service/impl/SysUserOnlineServiceImpl.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/service/impl/SysUserOnlineServiceImpl.java rename to easyink-common/src/main/java/com/easywecom/common/service/impl/SysUserOnlineServiceImpl.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/service/impl/SysUserServiceImpl.java b/easyink-common/src/main/java/com/easywecom/common/service/impl/SysUserServiceImpl.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/service/impl/SysUserServiceImpl.java rename to easyink-common/src/main/java/com/easywecom/common/service/impl/SysUserServiceImpl.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/shorturl/ShortUrlAppendInfo.java b/easyink-common/src/main/java/com/easywecom/common/shorturl/ShortUrlAppendInfo.java similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/shorturl/ShortUrlAppendInfo.java rename to easyink-common/src/main/java/com/easywecom/common/shorturl/ShortUrlAppendInfo.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/shorturl/SysShortUrlMapping.java b/easyink-common/src/main/java/com/easywecom/common/shorturl/SysShortUrlMapping.java similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/shorturl/SysShortUrlMapping.java rename to easyink-common/src/main/java/com/easywecom/common/shorturl/SysShortUrlMapping.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/shorturl/service/ShortUrlAdaptor.java b/easyink-common/src/main/java/com/easywecom/common/shorturl/service/ShortUrlAdaptor.java similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/shorturl/service/ShortUrlAdaptor.java rename to easyink-common/src/main/java/com/easywecom/common/shorturl/service/ShortUrlAdaptor.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/shorturl/service/ShortUrlService.java b/easyink-common/src/main/java/com/easywecom/common/shorturl/service/ShortUrlService.java similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/shorturl/service/ShortUrlService.java rename to easyink-common/src/main/java/com/easywecom/common/shorturl/service/ShortUrlService.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/shorturl/service/impl/ShortUrlServiceImpl.java b/easyink-common/src/main/java/com/easywecom/common/shorturl/service/impl/ShortUrlServiceImpl.java similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/shorturl/service/impl/ShortUrlServiceImpl.java rename to easyink-common/src/main/java/com/easywecom/common/shorturl/service/impl/ShortUrlServiceImpl.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/token/SysPermissionService.java b/easyink-common/src/main/java/com/easywecom/common/token/SysPermissionService.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/token/SysPermissionService.java rename to easyink-common/src/main/java/com/easywecom/common/token/SysPermissionService.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/token/TokenService.java b/easyink-common/src/main/java/com/easywecom/common/token/TokenService.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/token/TokenService.java rename to easyink-common/src/main/java/com/easywecom/common/token/TokenService.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/utils/Arith.java b/easyink-common/src/main/java/com/easywecom/common/utils/Arith.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/utils/Arith.java rename to easyink-common/src/main/java/com/easywecom/common/utils/Arith.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/utils/ConvertUrlUtil.java b/easyink-common/src/main/java/com/easywecom/common/utils/ConvertUrlUtil.java similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/utils/ConvertUrlUtil.java rename to easyink-common/src/main/java/com/easywecom/common/utils/ConvertUrlUtil.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/utils/DateUtils.java b/easyink-common/src/main/java/com/easywecom/common/utils/DateUtils.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/utils/DateUtils.java rename to easyink-common/src/main/java/com/easywecom/common/utils/DateUtils.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/utils/DictUtils.java b/easyink-common/src/main/java/com/easywecom/common/utils/DictUtils.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/utils/DictUtils.java rename to easyink-common/src/main/java/com/easywecom/common/utils/DictUtils.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/utils/ExceptionUtil.java b/easyink-common/src/main/java/com/easywecom/common/utils/ExceptionUtil.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/utils/ExceptionUtil.java rename to easyink-common/src/main/java/com/easywecom/common/utils/ExceptionUtil.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/utils/LogUtils.java b/easyink-common/src/main/java/com/easywecom/common/utils/LogUtils.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/utils/LogUtils.java rename to easyink-common/src/main/java/com/easywecom/common/utils/LogUtils.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/utils/MessageUtils.java b/easyink-common/src/main/java/com/easywecom/common/utils/MessageUtils.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/utils/MessageUtils.java rename to easyink-common/src/main/java/com/easywecom/common/utils/MessageUtils.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/utils/MyDateUtil.java b/easyink-common/src/main/java/com/easywecom/common/utils/MyDateUtil.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/utils/MyDateUtil.java rename to easyink-common/src/main/java/com/easywecom/common/utils/MyDateUtil.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/utils/OsUtils.java b/easyink-common/src/main/java/com/easywecom/common/utils/OsUtils.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/utils/OsUtils.java rename to easyink-common/src/main/java/com/easywecom/common/utils/OsUtils.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/utils/QREncode.java b/easyink-common/src/main/java/com/easywecom/common/utils/QREncode.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/utils/QREncode.java rename to easyink-common/src/main/java/com/easywecom/common/utils/QREncode.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/utils/ReflectUtil.java b/easyink-common/src/main/java/com/easywecom/common/utils/ReflectUtil.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/utils/ReflectUtil.java rename to easyink-common/src/main/java/com/easywecom/common/utils/ReflectUtil.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/utils/SecurityUtils.java b/easyink-common/src/main/java/com/easywecom/common/utils/SecurityUtils.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/utils/SecurityUtils.java rename to easyink-common/src/main/java/com/easywecom/common/utils/SecurityUtils.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/utils/ServletUtils.java b/easyink-common/src/main/java/com/easywecom/common/utils/ServletUtils.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/utils/ServletUtils.java rename to easyink-common/src/main/java/com/easywecom/common/utils/ServletUtils.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/utils/SnowFlakeUtil.java b/easyink-common/src/main/java/com/easywecom/common/utils/SnowFlakeUtil.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/utils/SnowFlakeUtil.java rename to easyink-common/src/main/java/com/easywecom/common/utils/SnowFlakeUtil.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/utils/StringUtils.java b/easyink-common/src/main/java/com/easywecom/common/utils/StringUtils.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/utils/StringUtils.java rename to easyink-common/src/main/java/com/easywecom/common/utils/StringUtils.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/utils/Threads.java b/easyink-common/src/main/java/com/easywecom/common/utils/Threads.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/utils/Threads.java rename to easyink-common/src/main/java/com/easywecom/common/utils/Threads.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/utils/TreeUtil.java b/easyink-common/src/main/java/com/easywecom/common/utils/TreeUtil.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/utils/TreeUtil.java rename to easyink-common/src/main/java/com/easywecom/common/utils/TreeUtil.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/utils/XmlUtil.java b/easyink-common/src/main/java/com/easywecom/common/utils/XmlUtil.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/utils/XmlUtil.java rename to easyink-common/src/main/java/com/easywecom/common/utils/XmlUtil.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/utils/bean/BeanUtils.java b/easyink-common/src/main/java/com/easywecom/common/utils/bean/BeanUtils.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/utils/bean/BeanUtils.java rename to easyink-common/src/main/java/com/easywecom/common/utils/bean/BeanUtils.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/utils/file/FileUploadUtils.java b/easyink-common/src/main/java/com/easywecom/common/utils/file/FileUploadUtils.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/utils/file/FileUploadUtils.java rename to easyink-common/src/main/java/com/easywecom/common/utils/file/FileUploadUtils.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/utils/file/FileUtils.java b/easyink-common/src/main/java/com/easywecom/common/utils/file/FileUtils.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/utils/file/FileUtils.java rename to easyink-common/src/main/java/com/easywecom/common/utils/file/FileUtils.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/utils/file/MimeTypeUtils.java b/easyink-common/src/main/java/com/easywecom/common/utils/file/MimeTypeUtils.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/utils/file/MimeTypeUtils.java rename to easyink-common/src/main/java/com/easywecom/common/utils/file/MimeTypeUtils.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/utils/html/EscapeUtil.java b/easyink-common/src/main/java/com/easywecom/common/utils/html/EscapeUtil.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/utils/html/EscapeUtil.java rename to easyink-common/src/main/java/com/easywecom/common/utils/html/EscapeUtil.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/utils/html/HTMLFilter.java b/easyink-common/src/main/java/com/easywecom/common/utils/html/HTMLFilter.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/utils/html/HTMLFilter.java rename to easyink-common/src/main/java/com/easywecom/common/utils/html/HTMLFilter.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/utils/http/HttpHelper.java b/easyink-common/src/main/java/com/easywecom/common/utils/http/HttpHelper.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/utils/http/HttpHelper.java rename to easyink-common/src/main/java/com/easywecom/common/utils/http/HttpHelper.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/utils/http/HttpUtils.java b/easyink-common/src/main/java/com/easywecom/common/utils/http/HttpUtils.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/utils/http/HttpUtils.java rename to easyink-common/src/main/java/com/easywecom/common/utils/http/HttpUtils.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/utils/ip/AddressUtils.java b/easyink-common/src/main/java/com/easywecom/common/utils/ip/AddressUtils.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/utils/ip/AddressUtils.java rename to easyink-common/src/main/java/com/easywecom/common/utils/ip/AddressUtils.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/utils/ip/IpUtils.java b/easyink-common/src/main/java/com/easywecom/common/utils/ip/IpUtils.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/utils/ip/IpUtils.java rename to easyink-common/src/main/java/com/easywecom/common/utils/ip/IpUtils.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/utils/poi/ExcelUtil.java b/easyink-common/src/main/java/com/easywecom/common/utils/poi/ExcelUtil.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/utils/poi/ExcelUtil.java rename to easyink-common/src/main/java/com/easywecom/common/utils/poi/ExcelUtil.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/utils/reflect/ReflectUtils.java b/easyink-common/src/main/java/com/easywecom/common/utils/reflect/ReflectUtils.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/utils/reflect/ReflectUtils.java rename to easyink-common/src/main/java/com/easywecom/common/utils/reflect/ReflectUtils.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/utils/sign/Base64.java b/easyink-common/src/main/java/com/easywecom/common/utils/sign/Base64.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/utils/sign/Base64.java rename to easyink-common/src/main/java/com/easywecom/common/utils/sign/Base64.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/utils/sign/Md5Utils.java b/easyink-common/src/main/java/com/easywecom/common/utils/sign/Md5Utils.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/utils/sign/Md5Utils.java rename to easyink-common/src/main/java/com/easywecom/common/utils/sign/Md5Utils.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/utils/spring/SpringUtils.java b/easyink-common/src/main/java/com/easywecom/common/utils/spring/SpringUtils.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/utils/spring/SpringUtils.java rename to easyink-common/src/main/java/com/easywecom/common/utils/spring/SpringUtils.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/utils/sql/BatchInsertUtil.java b/easyink-common/src/main/java/com/easywecom/common/utils/sql/BatchInsertUtil.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/utils/sql/BatchInsertUtil.java rename to easyink-common/src/main/java/com/easywecom/common/utils/sql/BatchInsertUtil.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/utils/sql/IBatchInsertExecutor.java b/easyink-common/src/main/java/com/easywecom/common/utils/sql/IBatchInsertExecutor.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/utils/sql/IBatchInsertExecutor.java rename to easyink-common/src/main/java/com/easywecom/common/utils/sql/IBatchInsertExecutor.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/utils/sql/SqlUtil.java b/easyink-common/src/main/java/com/easywecom/common/utils/sql/SqlUtil.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/utils/sql/SqlUtil.java rename to easyink-common/src/main/java/com/easywecom/common/utils/sql/SqlUtil.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/utils/uuid/IdUtils.java b/easyink-common/src/main/java/com/easywecom/common/utils/uuid/IdUtils.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/utils/uuid/IdUtils.java rename to easyink-common/src/main/java/com/easywecom/common/utils/uuid/IdUtils.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/utils/uuid/UUID.java b/easyink-common/src/main/java/com/easywecom/common/utils/uuid/UUID.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/utils/uuid/UUID.java rename to easyink-common/src/main/java/com/easywecom/common/utils/uuid/UUID.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/utils/wecom/ByteGroup.java b/easyink-common/src/main/java/com/easywecom/common/utils/wecom/ByteGroup.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/utils/wecom/ByteGroup.java rename to easyink-common/src/main/java/com/easywecom/common/utils/wecom/ByteGroup.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/utils/wecom/PKCS7Encoder.java b/easyink-common/src/main/java/com/easywecom/common/utils/wecom/PKCS7Encoder.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/utils/wecom/PKCS7Encoder.java rename to easyink-common/src/main/java/com/easywecom/common/utils/wecom/PKCS7Encoder.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/utils/wecom/RsaUtil.java b/easyink-common/src/main/java/com/easywecom/common/utils/wecom/RsaUtil.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/utils/wecom/RsaUtil.java rename to easyink-common/src/main/java/com/easywecom/common/utils/wecom/RsaUtil.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/utils/wecom/SHA1.java b/easyink-common/src/main/java/com/easywecom/common/utils/wecom/SHA1.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/utils/wecom/SHA1.java rename to easyink-common/src/main/java/com/easywecom/common/utils/wecom/SHA1.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/utils/wecom/TicketUtils.java b/easyink-common/src/main/java/com/easywecom/common/utils/wecom/TicketUtils.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/utils/wecom/TicketUtils.java rename to easyink-common/src/main/java/com/easywecom/common/utils/wecom/TicketUtils.java diff --git a/easywecom-common/src/main/java/com/easywecom/common/utils/wecom/WxCryptUtil.java b/easyink-common/src/main/java/com/easywecom/common/utils/wecom/WxCryptUtil.java old mode 100755 new mode 100644 similarity index 100% rename from easywecom-common/src/main/java/com/easywecom/common/utils/wecom/WxCryptUtil.java rename to easyink-common/src/main/java/com/easywecom/common/utils/wecom/WxCryptUtil.java diff --git a/easywecom-common/src/main/resources/mapper/system/SysConfigMapper.xml b/easyink-common/src/main/resources/mapper/system/SysConfigMapper.xml old mode 100755 new mode 100644 similarity index 98% rename from easywecom-common/src/main/resources/mapper/system/SysConfigMapper.xml rename to easyink-common/src/main/resources/mapper/system/SysConfigMapper.xml index 94c03c8..4790b88 --- a/easywecom-common/src/main/resources/mapper/system/SysConfigMapper.xml +++ b/easyink-common/src/main/resources/mapper/system/SysConfigMapper.xml @@ -2,7 +2,7 @@ - + diff --git a/easywecom-common/src/main/resources/mapper/system/SysDeptMapper.xml b/easyink-common/src/main/resources/mapper/system/SysDeptMapper.xml old mode 100755 new mode 100644 similarity index 96% rename from easywecom-common/src/main/resources/mapper/system/SysDeptMapper.xml rename to easyink-common/src/main/resources/mapper/system/SysDeptMapper.xml index 58b813e..0c3eafa --- a/easywecom-common/src/main/resources/mapper/system/SysDeptMapper.xml +++ b/easyink-common/src/main/resources/mapper/system/SysDeptMapper.xml @@ -2,7 +2,7 @@ - + @@ -28,7 +28,7 @@ from sys_dept d - select d.id, d.name, d.parent_id from we_department d WHERE d.corp_id = #{corpId} diff --git a/easywecom-common/src/main/resources/mapper/system/SysDictDataMapper.xml b/easyink-common/src/main/resources/mapper/system/SysDictDataMapper.xml old mode 100755 new mode 100644 similarity index 98% rename from easywecom-common/src/main/resources/mapper/system/SysDictDataMapper.xml rename to easyink-common/src/main/resources/mapper/system/SysDictDataMapper.xml index 05df9c9..7d0d83a --- a/easywecom-common/src/main/resources/mapper/system/SysDictDataMapper.xml +++ b/easyink-common/src/main/resources/mapper/system/SysDictDataMapper.xml @@ -2,7 +2,7 @@ - + diff --git a/easywecom-common/src/main/resources/mapper/system/SysDictTypeMapper.xml b/easyink-common/src/main/resources/mapper/system/SysDictTypeMapper.xml old mode 100755 new mode 100644 similarity index 98% rename from easywecom-common/src/main/resources/mapper/system/SysDictTypeMapper.xml rename to easyink-common/src/main/resources/mapper/system/SysDictTypeMapper.xml index bf31471..c57e02c --- a/easywecom-common/src/main/resources/mapper/system/SysDictTypeMapper.xml +++ b/easyink-common/src/main/resources/mapper/system/SysDictTypeMapper.xml @@ -2,7 +2,7 @@ - + diff --git a/easywecom-common/src/main/resources/mapper/system/SysLogininforMapper.xml b/easyink-common/src/main/resources/mapper/system/SysLogininforMapper.xml old mode 100755 new mode 100644 similarity index 97% rename from easywecom-common/src/main/resources/mapper/system/SysLogininforMapper.xml rename to easyink-common/src/main/resources/mapper/system/SysLogininforMapper.xml index 2a31973..ff2d1f5 --- a/easywecom-common/src/main/resources/mapper/system/SysLogininforMapper.xml +++ b/easyink-common/src/main/resources/mapper/system/SysLogininforMapper.xml @@ -2,7 +2,7 @@ - + diff --git a/easywecom-common/src/main/resources/mapper/system/SysMenuMapper.xml b/easyink-common/src/main/resources/mapper/system/SysMenuMapper.xml old mode 100755 new mode 100644 similarity index 92% rename from easywecom-common/src/main/resources/mapper/system/SysMenuMapper.xml rename to easyink-common/src/main/resources/mapper/system/SysMenuMapper.xml index c553c83..72d2a36 --- a/easywecom-common/src/main/resources/mapper/system/SysMenuMapper.xml +++ b/easyink-common/src/main/resources/mapper/system/SysMenuMapper.xml @@ -2,7 +2,7 @@ - + @@ -51,7 +51,7 @@ select distinct m.menu_id, m.parent_id, m.menu_name, m.path, m.component, m.visible, m.status, ifnull(m.perms,'') as perms, m.is_frame, m.menu_type, m.icon, m.order_num, m.create_time from sys_menu m where m.menu_type in - ('${@com.easywecom.common.constant.UserConstants@TYPE_MENU}', '${@com.easywecom.common.constant.UserConstants@TYPE_DIR}','${@com.easywecom.common.constant.UserConstants@TYPE_PAGE}') + ('${@com.easyink.common.constant.UserConstants@TYPE_MENU}', '${@com.easyink.common.constant.UserConstants@TYPE_DIR}','${@com.easyink.common.constant.UserConstants@TYPE_PAGE}') and m.status = 0 order by m.parent_id, m.order_num @@ -118,7 +118,7 @@ where menu_name=#{menuName} and parent_id = #{parentId} limit 1 - SELECT DISTINCT m.menu_id, m.parent_id, m.menu_name, @@ -140,7 +140,7 @@ WHERE u.corp_id = #{corpId} AND u.user_id = #{userId} AND m.STATUS = 0 AND ro.STATUS = 0 - AND m.menu_type IN ('${@com.easywecom.common.constant.UserConstants@TYPE_MENU}', '${@com.easywecom.common.constant.UserConstants@TYPE_DIR}') + AND m.menu_type IN ('${@com.easyink.common.constant.UserConstants@TYPE_MENU}', '${@com.easyink.common.constant.UserConstants@TYPE_DIR}') UNION SELECT m.menu_id, @@ -158,11 +158,11 @@ m.create_time FROM sys_menu m - WHERE m.menu_type = '${@com.easywecom.common.constant.UserConstants@TYPE_PAGE}' + WHERE m.menu_type = '${@com.easyink.common.constant.UserConstants@TYPE_PAGE}' AND m.status = 0 ORDER BY parent_id,order_num - SELECT menu_id, menu_name, parent_id, order_num, path, component, is_frame, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark FROM sys_menu @@ -175,9 +175,9 @@ AND - menu_type != '${@com.easywecom.common.constant.UserConstants@TYPE_PAGE}' + menu_type != '${@com.easyink.common.constant.UserConstants@TYPE_PAGE}' - SELECT m.menu_id, m.parent_id, m.menu_name, diff --git a/easywecom-common/src/main/resources/mapper/system/SysOperLogMapper.xml b/easyink-common/src/main/resources/mapper/system/SysOperLogMapper.xml old mode 100755 new mode 100644 similarity index 98% rename from easywecom-common/src/main/resources/mapper/system/SysOperLogMapper.xml rename to easyink-common/src/main/resources/mapper/system/SysOperLogMapper.xml index f4c457b..67fa552 --- a/easywecom-common/src/main/resources/mapper/system/SysOperLogMapper.xml +++ b/easyink-common/src/main/resources/mapper/system/SysOperLogMapper.xml @@ -2,7 +2,7 @@ - + diff --git a/easywecom-common/src/main/resources/mapper/system/SysRoleDeptMapper.xml b/easyink-common/src/main/resources/mapper/system/SysRoleDeptMapper.xml old mode 100755 new mode 100644 similarity index 97% rename from easywecom-common/src/main/resources/mapper/system/SysRoleDeptMapper.xml rename to easyink-common/src/main/resources/mapper/system/SysRoleDeptMapper.xml index ae5693b..056b77e --- a/easywecom-common/src/main/resources/mapper/system/SysRoleDeptMapper.xml +++ b/easyink-common/src/main/resources/mapper/system/SysRoleDeptMapper.xml @@ -2,7 +2,7 @@ - + diff --git a/easywecom-common/src/main/resources/mapper/system/SysRoleMapper.xml b/easyink-common/src/main/resources/mapper/system/SysRoleMapper.xml old mode 100755 new mode 100644 similarity index 92% rename from easywecom-common/src/main/resources/mapper/system/SysRoleMapper.xml rename to easyink-common/src/main/resources/mapper/system/SysRoleMapper.xml index 9608a50..654ac6a --- a/easywecom-common/src/main/resources/mapper/system/SysRoleMapper.xml +++ b/easyink-common/src/main/resources/mapper/system/SysRoleMapper.xml @@ -2,7 +2,7 @@ - + @@ -52,7 +52,7 @@ r.role_type FROM `sys_role` r - where r.del_flag = '${@com.easywecom.common.constant.Constants@NORMAL_CODE}' + where r.del_flag = '${@com.easyink.common.constant.Constants@NORMAL_CODE}' AND r.corp_id = #{corpId} AND r.role_name like concat('%', #{roleName}, '%') @@ -81,7 +81,7 @@ left join we_user_role ur on ur.role_id = r.role_id left join we_user u on u.user_id = ur.user_id left join we_department d on u.department = d.id - WHERE r.del_flag = '${@com.easywecom.common.constant.Constants@NORMAL_CODE}' + WHERE r.del_flag = '${@com.easyink.common.constant.Constants@NORMAL_CODE}' and r.corp_id = #{corpId} and ur.user_id = #{userId} @@ -104,7 +104,7 @@ LEFT JOIN we_department d ON u.department = d.id ANd d.corp_id = u.corp_id WHERE u.corp_id = #{corpId} - AND r.del_flag = '${@com.easywecom.common.constant.Constants@NORMAL_CODE}' + AND r.del_flag = '${@com.easyink.common.constant.Constants@NORMAL_CODE}' AND ur.user_id = #{userId} LIMIT 1 @@ -121,7 +121,7 @@ + + + UPDATE we_category - set del_flag= ${@com.easywecom.common.constant.WeConstans@WE_CUSTOMER_MSG_RESULT_DEFALE} + set del_flag= ${@com.easyink.common.constant.WeConstans@WE_CUSTOMER_MSG_RESULT_DEFALE} corp_id = #{corpId} and id in @@ -42,7 +42,7 @@ - SELECT id ,corp_id @@ -55,7 +55,7 @@ FROM we_category WHERE - del_flag = ${@com.easywecom.common.constant.WeConstans@WE_CUSTOMER_MSG_RESULT_NO_DEFALE} + del_flag = ${@com.easyink.common.constant.WeConstans@WE_CUSTOMER_MSG_RESULT_NO_DEFALE} AND corp_id = #{corpId} AND media_type IN @@ -74,7 +74,7 @@ and id = #{id} - SELECT id ,media_type @@ -84,10 +84,11 @@ we_category WHERE corp_id = #{corpId} - AND del_flag = ${@com.easywecom.common.constant.WeConstans@WE_CUSTOMER_MSG_RESULT_NO_DEFALE} + AND del_flag = ${@com.easyink.common.constant.WeConstans@WE_CUSTOMER_MSG_RESULT_NO_DEFALE} - AND `using` = #{using} + AND `using` = #{using} + AND media_type != ${@com.easyink.common.enums.WeCategoryMediaTypeEnum@RADAR.getMediaType()} - ORDER BY FIELD(`media_type`,${@com.easywecom.common.constant.WeConstans@SIDE_SEQ}) + ORDER BY FIELD(`media_type`,${@com.easyink.common.constant.WeConstans@SIDE_SEQ}) \ No newline at end of file diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/WeChatContactMappingMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/WeChatContactMappingMapper.xml old mode 100755 new mode 100644 similarity index 98% rename from easywecom-wecom/src/main/resources/mapper/wecom/WeChatContactMappingMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/WeChatContactMappingMapper.xml index 3e4a9dd..52ac1e8 --- a/easywecom-wecom/src/main/resources/mapper/wecom/WeChatContactMappingMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/WeChatContactMappingMapper.xml @@ -2,7 +2,7 @@ - + diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/WeCorpAccountMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/WeCorpAccountMapper.xml old mode 100755 new mode 100644 similarity index 86% rename from easywecom-wecom/src/main/resources/mapper/wecom/WeCorpAccountMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/WeCorpAccountMapper.xml index 5044347..32d4e8a --- a/easywecom-wecom/src/main/resources/mapper/wecom/WeCorpAccountMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/WeCorpAccountMapper.xml @@ -2,7 +2,7 @@ - + diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/WeCustomerExtendPropertyMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/WeCustomerExtendPropertyMapper.xml old mode 100755 new mode 100644 similarity index 92% rename from easywecom-wecom/src/main/resources/mapper/wecom/WeCustomerExtendPropertyMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/WeCustomerExtendPropertyMapper.xml index 2202027..4d5766a --- a/easywecom-wecom/src/main/resources/mapper/wecom/WeCustomerExtendPropertyMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/WeCustomerExtendPropertyMapper.xml @@ -2,11 +2,11 @@ - + + parameterType="com.easyink.wecom.domain.entity.customer.WeCustomerExtendProperty"> INSERT INTO we_customer_extend_property @@ -108,7 +108,7 @@ + parameterType="com.easyink.wecom.domain.entity.customer.WeCustomerExtendProperty"> INSERT INTO we_customer_extend_property ( `corp_id`, @@ -139,7 +139,7 @@ - + @@ -150,7 +150,7 @@ + ofType="com.easyink.wecom.domain.entity.customer.ExtendPropertyMultipleOption"> diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/WeCustomerExtendPropertyRelMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/WeCustomerExtendPropertyRelMapper.xml old mode 100755 new mode 100644 similarity index 95% rename from easywecom-wecom/src/main/resources/mapper/wecom/WeCustomerExtendPropertyRelMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/WeCustomerExtendPropertyRelMapper.xml index 8d43a96..8cf5ed3 --- a/easywecom-wecom/src/main/resources/mapper/wecom/WeCustomerExtendPropertyRelMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/WeCustomerExtendPropertyRelMapper.xml @@ -2,7 +2,7 @@ - + diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/WeCustomerMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/WeCustomerMapper.xml old mode 100755 new mode 100644 similarity index 93% rename from easywecom-wecom/src/main/resources/mapper/wecom/WeCustomerMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/WeCustomerMapper.xml index 0c1a563..e06233a --- a/easywecom-wecom/src/main/resources/mapper/wecom/WeCustomerMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/WeCustomerMapper.xml @@ -2,10 +2,10 @@ - + - + @@ -23,7 +23,7 @@ - - + @@ -131,7 +131,7 @@ - + @@ -152,7 +152,7 @@ @@ -160,7 +160,7 @@ - + @@ -187,7 +187,7 @@ @@ -195,7 +195,7 @@ @@ -204,7 +204,7 @@ - + @@ -212,14 +212,14 @@ - SELECT id, user_id, external_userid, @@ -365,7 +365,7 @@ AND wfcr.status= #{status} - AND wfcr.status != '${@com.easywecom.common.enums.CustomerStatusEnum@DELETE.code}' + AND wfcr.status != '${@com.easyink.common.enums.CustomerStatusEnum@DELETE.code}' @@ -382,7 +382,7 @@ ORDER BY wfcr.create_time DESC - SELECT wc.corp_id, wc.external_userid, @@ -429,14 +429,14 @@ - where corp_id = #{corpId} AND external_userid = #{externalUserId} LIMIT 1 - SELECT c.external_userid externalUserId, c.name, @@ -488,7 +488,7 @@ #{isOpenChat} - + INSERT INTO we_customer (`external_userid`, `unionid`, `name`, `avatar`, `type`, `gender`, `corp_id`, `corp_name`, `corp_full_name`, `position`) @@ -506,7 +506,7 @@ VALUES(gender) , unionid = VALUES(unionid) - + update we_customer external_userid = #{externalUserid}, @@ -646,7 +646,7 @@ - SELECT wc.`name`, wfcr.remark, wfcr.remark_mobiles, @@ -674,7 +674,7 @@ - SELECT ( SELECT count(*) FROM we_flower_customer_rel wfcr @@ -712,9 +712,9 @@ INNER JOIN we_customer wc ON wfcr.external_userid = wc.external_userid WHERE wfcr.corp_id = #{corpId} and wfcr.status IN ( - ${@com.easywecom.common.enums.CustomerStatusEnum@NORMAL.code}, - ${@com.easywecom.common.enums.CustomerStatusEnum@TO_BE_TRANSFERRED.code}, - ${@com.easywecom.common.enums.CustomerStatusEnum@TRANSFERRING.code} + ${@com.easyink.common.enums.CustomerStatusEnum@NORMAL.code}, + ${@com.easyink.common.enums.CustomerStatusEnum@TO_BE_TRANSFERRED.code}, + ${@com.easyink.common.enums.CustomerStatusEnum@TRANSFERRING.code} ) ) AS wecustomers @@ -803,7 +803,7 @@ AND wfcr.status= #{status} - AND wfcr.status != '${@com.easywecom.common.enums.CustomerStatusEnum@DELETE.code}' + AND wfcr.status != '${@com.easyink.common.enums.CustomerStatusEnum@DELETE.code}' @@ -820,17 +820,17 @@ ORDER BY wfcr.create_time DESC - SELECT DISTINCT external_userid, unionid, name, type FROM we_customer diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/WeCustomerMessageMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/WeCustomerMessageMapper.xml old mode 100755 new mode 100644 similarity index 94% rename from easywecom-wecom/src/main/resources/mapper/wecom/WeCustomerMessageMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/WeCustomerMessageMapper.xml index 1c493f0..635e0bf --- a/easywecom-wecom/src/main/resources/mapper/wecom/WeCustomerMessageMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/WeCustomerMessageMapper.xml @@ -2,7 +2,7 @@ - + UPDATE we_customer_message diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/WeCustomerMessageOriginalMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/WeCustomerMessageOriginalMapper.xml old mode 100755 new mode 100644 similarity index 91% rename from easywecom-wecom/src/main/resources/mapper/wecom/WeCustomerMessageOriginalMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/WeCustomerMessageOriginalMapper.xml index 43e72f9..dc5f0eb --- a/easywecom-wecom/src/main/resources/mapper/wecom/WeCustomerMessageOriginalMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/WeCustomerMessageOriginalMapper.xml @@ -2,8 +2,8 @@ - - + + @@ -19,13 +19,13 @@ - diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/WeCustomerMessgaeResultMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/WeCustomerMessgaeResultMapper.xml old mode 100755 new mode 100644 similarity index 92% rename from easywecom-wecom/src/main/resources/mapper/wecom/WeCustomerMessgaeResultMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/WeCustomerMessgaeResultMapper.xml index b855631..6a49b40 --- a/easywecom-wecom/src/main/resources/mapper/wecom/WeCustomerMessgaeResultMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/WeCustomerMessgaeResultMapper.xml @@ -2,7 +2,7 @@ - + INSERT INTO we_customer_messgaeResult ( @@ -193,8 +193,8 @@ - SELECT wcm.user_name, wu.user_id, @@ -219,8 +219,8 @@ GROUP BY wcm.user_name - SELECT wcm.user_name, wc.avatar head_image_url, @@ -228,7 +228,8 @@ ( wcm.`status` != '1', '3', '2' ) sendStatus, wcm.remark, IF - ( wcm.external_name = '', wg.group_name, wcm.external_name ) customers + ( wcm.external_name = '', wg.group_name, wcm.external_name ) customers, + IF(wcm.external_userid = '',wcm.chat_id,wcm.external_userid) receiverId FROM we_customer_messgaeResult wcm LEFT JOIN we_group wg ON wg.chat_id = wcm.chat_id @@ -260,14 +261,14 @@ GROUP BY - customers,wcm.user_name + customers,receiverId - + + typeHandler="com.easyink.framework.handler.StringArrayJoinTypeHandler"/> + @@ -64,7 +64,7 @@ AND @ids IS NOT NULL ) t - WHERE corp_id = #{corpId} @@ -80,7 +80,7 @@ ) and corp_id = #{corpId} - SELECT wd.id departmentId, wd.name departmentName, wd.parent_id parentId, IFNULL ( (SELECT name FROM we_department WHERE we_department.corp_id = #{corpId} AND we_department.id = wd.parent_id LIMIT 1) ,'')mainDepartmentName @@ -93,7 +93,7 @@ - SELECT T2.level_, T3.* FROM (SELECT @ids as _ids, ( SELECT @ids := GROUP_CONCAT(id) diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/WeEmpleCodeAnalyseMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/WeEmpleCodeAnalyseMapper.xml old mode 100755 new mode 100644 similarity index 77% rename from easywecom-wecom/src/main/resources/mapper/wecom/WeEmpleCodeAnalyseMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/WeEmpleCodeAnalyseMapper.xml index 241a3c3..fd406e7 --- a/easywecom-wecom/src/main/resources/mapper/wecom/WeEmpleCodeAnalyseMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/WeEmpleCodeAnalyseMapper.xml @@ -2,10 +2,10 @@ - + - SELECT `id`, `corp_id`, @@ -31,8 +31,8 @@ - SELECT SUM(IF( `type` = 1, 1, 0 )) addCount, SUM(IF( `type` = 0, 1, 0 )) loseCount, @@ -56,7 +56,7 @@ - + INSERT IGNORE INTO `we_emple_code_analyse` ( `corp_id`, diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/WeEmpleCodeMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/WeEmpleCodeMapper.xml old mode 100755 new mode 100644 similarity index 84% rename from easywecom-wecom/src/main/resources/mapper/wecom/WeEmpleCodeMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/WeEmpleCodeMapper.xml index 31fbd30..1c06ab5 --- a/easywecom-wecom/src/main/resources/mapper/wecom/WeEmpleCodeMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/WeEmpleCodeMapper.xml @@ -2,9 +2,9 @@ - + - + @@ -27,7 +27,7 @@ + typeHandler="com.easyink.framework.handler.StringArrayJoinTypeHandler"/> @@ -35,28 +35,28 @@ + typeHandler="com.easyink.framework.handler.StringArrayJoinTypeHandler"/> + typeHandler="com.easyink.framework.handler.StringArrayJoinTypeHandler"/> - + typeHandler="com.easyink.framework.handler.StringArrayJoinTypeHandler"/> + - + - - + + - + @@ -65,18 +65,18 @@ + typeHandler="com.easyink.framework.handler.StringArrayJoinTypeHandler"/> + typeHandler="com.easyink.framework.handler.StringArrayJoinTypeHandler"/> + typeHandler="com.easyink.framework.handler.StringArrayJoinTypeHandler"/> + typeHandler="com.easyink.framework.handler.StringArrayJoinTypeHandler"/> @@ -174,12 +174,12 @@ and id = #{id} - - + insert into we_emple_code id, @@ -262,21 +262,21 @@ #{effectTimeOpen}, #{effectTimeClose}, - #{materialSort,jdbcType=OTHER,typeHandler=com.easywecom.framework.handler.StringArrayJoinTypeHandler}, + #{materialSort,jdbcType=OTHER,typeHandler=com.easyink.framework.handler.StringArrayJoinTypeHandler}, #{tagFlag}, #{welcomeMsgType}, #{codeActivityId}, - #{codeSuccessMaterialSort,jdbcType=OTHER,typeHandler=com.easywecom.framework.handler.StringArrayJoinTypeHandler}, + #{codeSuccessMaterialSort,jdbcType=OTHER,typeHandler=com.easyink.framework.handler.StringArrayJoinTypeHandler}, #{codeSuccessMsg}, - #{codeFailMaterialSort,jdbcType=OTHER,typeHandler=com.easywecom.framework.handler.StringArrayJoinTypeHandler}, + #{codeFailMaterialSort,jdbcType=OTHER,typeHandler=com.easyink.framework.handler.StringArrayJoinTypeHandler}, #{codeFailMsg}, - #{codeRepeatMaterialSort,jdbcType=OTHER,typeHandler=com.easywecom.framework.handler.StringArrayJoinTypeHandler}, + #{codeRepeatMaterialSort,jdbcType=OTHER,typeHandler=com.easyink.framework.handler.StringArrayJoinTypeHandler}, #{codeRepeatMsg}, #{appLink} @@ -284,7 +284,7 @@ - + update we_emple_code config_id = #{configId}, @@ -301,22 +301,22 @@ effect_time_open = #{effectTimeOpen}, effect_time_close = #{effectTimeClose}, material_sort = - #{materialSort,jdbcType=OTHER,typeHandler=com.easywecom.framework.handler.StringArrayJoinTypeHandler}, + #{materialSort,jdbcType=OTHER,typeHandler=com.easyink.framework.handler.StringArrayJoinTypeHandler}, tag_flag = #{tagFlag}, welcome_msg_type = #{welcomeMsgType}, code_activity_id = {codeActivityId}, code_success_material_sort = - #{codeSuccessMaterialSort,jdbcType=OTHER,typeHandler=com.easywecom.framework.handler.StringArrayJoinTypeHandler}, + #{codeSuccessMaterialSort,jdbcType=OTHER,typeHandler=com.easyink.framework.handler.StringArrayJoinTypeHandler}, code_success_msg = #{codeSuccessMsg}, code_fail_material_sort = - #{codeFailMaterialSort,jdbcType=OTHER,typeHandler=com.easywecom.framework.handler.StringArrayJoinTypeHandler}, + #{codeFailMaterialSort,jdbcType=OTHER,typeHandler=com.easyink.framework.handler.StringArrayJoinTypeHandler}, code_fail_msg = #{codeFailMsg}, code_repeat_material_sort = - #{codeRepeatMaterialSort,jdbcType=OTHER,typeHandler=com.easywecom.framework.handler.StringArrayJoinTypeHandler}, + #{codeRepeatMaterialSort,jdbcType=OTHER,typeHandler=com.easyink.framework.handler.StringArrayJoinTypeHandler}, code_repeat_msg = #{codeRepeatMsg} @@ -335,7 +335,7 @@ - select wecode.id as emple_code_id, wecode.welcome_msg , @@ -351,7 +351,7 @@ left join we_material wm on wm .id = wecode.media_id where wecode.corp_id = #{corpId} - and wecode.del_flag = ${@com.easywecom.common.constant.WeConstans@WE_CUSTOMER_MSG_RESULT_NO_DEFALE} + and wecode.del_flag = ${@com.easyink.common.constant.WeConstans@WE_CUSTOMER_MSG_RESULT_NO_DEFALE} and wecode.scenario = #{scenario} @@ -379,12 +379,12 @@ code_activity_id, welcome_msg_type FROM we_emple_code wecode - WHERE wecode.del_flag = '${@com.easywecom.common.constant.Constants@NORMAL_CODE}' + WHERE wecode.del_flag = '${@com.easyink.common.constant.Constants@NORMAL_CODE}' AND wecode.corp_id = #{corpId} AND wecode.state = #{state} LIMIT 1 - SELECT wecode.id, wecode.code_type, wecode.corp_id, @@ -404,15 +404,15 @@ wecode.effect_time_close, wecode.material_sort FROM we_emple_code wecode - WHERE wecode.skip_verify = '${@com.easywecom.common.enums.WeEmployCodeSkipVerifyEnum@TIME_PASS.skipVerify}' - AND wecode.del_flag = '${@com.easywecom.common.constant.Constants@NORMAL_CODE}' + WHERE wecode.skip_verify = '${@com.easyink.common.enums.WeEmployCodeSkipVerifyEnum@TIME_PASS.skipVerify}' + AND wecode.del_flag = '${@com.easyink.common.constant.Constants@NORMAL_CODE}' AND ( wecode.effect_time_open = #{HHmm} OR wecode.effect_time_close = #{HHmm} ) - SELECT id, qr_code, @@ -421,7 +421,7 @@ we_emple_code WHERE corp_id = #{corpId} - AND del_flag = '${@com.easywecom.common.constant.Constants@NORMAL_CODE}' + AND del_flag = '${@com.easyink.common.constant.Constants@NORMAL_CODE}' AND id IN @@ -430,15 +430,15 @@ - SELECT wu.user_id, wu.user_name FROM (SELECT wec.corp_id, wecus.business_id user_id FROM we_emple_code wec LEFT JOIN we_emple_code_use_scop wecus ON wecus.emple_code_id = wec.id AND wecus.del_flag = - '${@com.easywecom.common.constant.Constants@NORMAL_CODE}' AND + '${@com.easyink.common.constant.Constants@NORMAL_CODE}' AND wecus.business_id_type = - '${@com.easywecom.common.constant.Constants@USE_SCOP_BUSINESSID_TYPE_USER}' + '${@com.easyink.common.constant.Constants@USE_SCOP_BUSINESSID_TYPE_USER}' WHERE wec.id = #{id} AND wec.corp_id = #{corpId} GROUP BY wecus.business_id diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/WeEmpleCodeMaterialMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/WeEmpleCodeMaterialMapper.xml old mode 100755 new mode 100644 similarity index 86% rename from easywecom-wecom/src/main/resources/mapper/wecom/WeEmpleCodeMaterialMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/WeEmpleCodeMaterialMapper.xml index c65bccc..826c15b --- a/easywecom-wecom/src/main/resources/mapper/wecom/WeEmpleCodeMaterialMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/WeEmpleCodeMaterialMapper.xml @@ -2,7 +2,7 @@ - + insert into we_emple_code_material( @@ -18,7 +18,7 @@ ) - SELECT id, emple_code_id,media_id,media_type FROM @@ -35,7 +35,7 @@ SET media_id =#{mediaId} WHERE emple_code_id = #{emplyCodeId} - AND media_type = ${@com.easywecom.common.constant.WeConstans@DEFAULT_GROUP_CODE_MEDIA_TYPE} + AND media_type = ${@com.easyink.common.constant.WeConstans@DEFAULT_GROUP_CODE_MEDIA_TYPE} diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/WeEmpleCodeTagMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/WeEmpleCodeTagMapper.xml old mode 100755 new mode 100644 similarity index 98% rename from easywecom-wecom/src/main/resources/mapper/wecom/WeEmpleCodeTagMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/WeEmpleCodeTagMapper.xml index 78a4f4c..d7de44b --- a/easywecom-wecom/src/main/resources/mapper/wecom/WeEmpleCodeTagMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/WeEmpleCodeTagMapper.xml @@ -2,7 +2,7 @@ - + diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/WeEmpleCodeUseScopMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/WeEmpleCodeUseScopMapper.xml old mode 100755 new mode 100644 similarity index 90% rename from easywecom-wecom/src/main/resources/mapper/wecom/WeEmpleCodeUseScopMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/WeEmpleCodeUseScopMapper.xml index ebed8cb..6d1c6c6 --- a/easywecom-wecom/src/main/resources/mapper/wecom/WeEmpleCodeUseScopMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/WeEmpleCodeUseScopMapper.xml @@ -2,7 +2,7 @@ - + @@ -26,7 +26,7 @@ we_emple_code_use_scop wecus LEFT JOIN we_user wu ON wu.user_id = wecus.business_id WHERE - wecus.del_flag = ${@com.easywecom.common.constant.WeConstans@WE_CUSTOMER_MSG_RESULT_NO_DEFALE} + wecus.del_flag = ${@com.easyink.common.constant.WeConstans@WE_CUSTOMER_MSG_RESULT_NO_DEFALE} AND wu.corp_id = #{corpId} AND wecus.emple_code_id=#{empleCodeId} @@ -40,7 +40,7 @@ we_emple_code_use_scop wecus LEFT JOIN we_user wu ON wu.user_id = wecus.business_id WHERE - wecus.del_flag = ${@com.easywecom.common.constant.WeConstans@WE_CUSTOMER_MSG_RESULT_NO_DEFALE} + wecus.del_flag = ${@com.easyink.common.constant.WeConstans@WE_CUSTOMER_MSG_RESULT_NO_DEFALE} and wu.corp_id = #{corpId} and wecus.emple_code_id in @@ -57,14 +57,14 @@ select left(wfcr.create_time,10) as createTime , diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/WeFlowerCustomerTagRelMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/WeFlowerCustomerTagRelMapper.xml old mode 100755 new mode 100644 similarity index 96% rename from easywecom-wecom/src/main/resources/mapper/wecom/WeFlowerCustomerTagRelMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/WeFlowerCustomerTagRelMapper.xml index dd25ce2..04c6da2 --- a/easywecom-wecom/src/main/resources/mapper/wecom/WeFlowerCustomerTagRelMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/WeFlowerCustomerTagRelMapper.xml @@ -2,7 +2,7 @@ - + @@ -108,7 +108,7 @@ - + INSERT INTO we_flower_customer_tag_rel (id, flower_customer_rel_id, tag_id,external_userid) VALUES diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/WeGroupCodeActualMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/WeGroupCodeActualMapper.xml old mode 100755 new mode 100644 similarity index 91% rename from easywecom-wecom/src/main/resources/mapper/wecom/WeGroupCodeActualMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/WeGroupCodeActualMapper.xml index 7d76d04..4c081d7 --- a/easywecom-wecom/src/main/resources/mapper/wecom/WeGroupCodeActualMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/WeGroupCodeActualMapper.xml @@ -2,7 +2,7 @@ - + @@ -53,7 +53,7 @@ we_group_code_actual wgca LEFT JOIN we_group_code wgc ON wgc.id = wgca.group_code_id - wgca.del_flag = ${@com.easywecom.common.constant.WeConstans@WE_CUSTOMER_MSG_RESULT_NO_DEFALE} + wgca.del_flag = ${@com.easyink.common.constant.WeConstans@WE_CUSTOMER_MSG_RESULT_NO_DEFALE} and wgca.actual_group_qr_code = #{actualGroupQrCode} @@ -86,7 +86,7 @@ FROM we_group_code_actual wgca LEFT JOIN we_group_code wgc ON wgc.id = wgca.group_code_id WHERE wgca.group_code_id = #{groupCodeId} - AND wgca.del_flag = ${@com.easywecom.common.constant.WeConstans@WE_CUSTOMER_MSG_RESULT_NO_DEFALE} + AND wgca.del_flag = ${@com.easyink.common.constant.WeConstans@WE_CUSTOMER_MSG_RESULT_NO_DEFALE} ORDER BY wgca.sort_no ASC @@ -94,7 +94,7 @@ chat_id = #{chatId} - AND del_flag = ${@com.easywecom.common.constant.WeConstans@WE_CUSTOMER_MSG_RESULT_NO_DEFALE} + AND del_flag = ${@com.easyink.common.constant.WeConstans@WE_CUSTOMER_MSG_RESULT_NO_DEFALE} @@ -102,10 +102,10 @@ - SELECT count( 1 ) as `count`, GROUP_CONCAT(wgca.chat_id) as chat_ids @@ -118,13 +118,13 @@ #{item.chatId} AND wgca.group_code_id != #{groupId} - AND wgca.del_flag = ${@com.easywecom.common.constant.WeConstans@WE_CUSTOMER_MSG_RESULT_NO_DEFALE} + AND wgca.del_flag = ${@com.easyink.common.constant.WeConstans@WE_CUSTOMER_MSG_RESULT_NO_DEFALE} @@ -217,7 +217,7 @@ where group_code_id = #{groupCodeId} WHERE - w.`del_flag` = ${@com.easywecom.common.constant.WeConstans@WE_CUSTOMER_MSG_RESULT_NO_DEFALE} + w.`del_flag` = ${@com.easyink.common.constant.WeConstans@WE_CUSTOMER_MSG_RESULT_NO_DEFALE} and w.corp_id = #{corpId} - SELECT id, actual_group_qr_code, group_name, @@ -105,11 +105,11 @@ `status` FROM we_group_code_actual WHERE group_code_id = #{groupCodeId} - AND del_flag = ${@com.easywecom.common.constant.WeConstans@WE_CUSTOMER_MSG_RESULT_NO_DEFALE} + AND del_flag = ${@com.easyink.common.constant.WeConstans@WE_CUSTOMER_MSG_RESULT_NO_DEFALE} AND DATE_ADD(NOW(), INTERVAL 1 DAY) > effect_time AND status = 0 - + - SELECT wg.chat_id, wg.group_name, @@ -80,7 +80,7 @@ (SELECT wd.name FROM we_department wd WHERE wu.main_department = wd.id AND wd.corp_id = wg.corp_id) as mainDepartmentName, wg.status, wg.`owner`, - IF( wg.`status` = ${@com.easywecom.common.constant.GroupConstants@NARMAL} OR wg.`status` = ${@com.easywecom.common.constant.GroupConstants@OWNER_LEAVE_EXTEND_SUCCESS}, 0, 1 ) groupStatus + IF( wg.`status` = ${@com.easyink.common.constant.GroupConstants@NARMAL} OR wg.`status` = ${@com.easyink.common.constant.GroupConstants@OWNER_LEAVE_EXTEND_SUCCESS}, 0, 1 ) groupStatus FROM we_group wg LEFT JOIN we_user wu ON wg.corp_id = wu.corp_id AND wg.`owner`= wu.user_id @@ -105,10 +105,10 @@ AND wg.create_time <= #{endTime} - AND wg.status IN (${@com.easywecom.common.constant.GroupConstants@NARMAL},${@com.easywecom.common.constant.GroupConstants@OWNER_LEAVE_EXTEND_SUCCESS}) + AND wg.status IN (${@com.easyink.common.constant.GroupConstants@NARMAL},${@com.easyink.common.constant.GroupConstants@OWNER_LEAVE_EXTEND_SUCCESS}) - AND wg.status IN (${@com.easywecom.common.constant.GroupConstants@OWNER_LEAVE},${@com.easywecom.common.constant.GroupConstants@OWNER_LEAVE_EXTEND}) + AND wg.status IN (${@com.easyink.common.constant.GroupConstants@OWNER_LEAVE},${@com.easyink.common.constant.GroupConstants@OWNER_LEAVE_EXTEND}) @@ -139,7 +139,7 @@ - SELECT wg.chat_id, wg.group_name, @@ -156,7 +156,7 @@ GROUP BY wg.chat_id - SELECT wg.chat_id, wg.group_name, wg.create_time, @@ -171,7 +171,7 @@ LEFT JOIN we_user wu ON wu.corp_id = wg.corp_id and wg.owner = wu.user_id WHERE wg.corp_id = #{corpId} and wgm.user_id = #{userId} - SELECT wg.chat_id, wg.group_name, diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/WeGroupMemberMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/WeGroupMemberMapper.xml old mode 100755 new mode 100644 similarity index 82% rename from easywecom-wecom/src/main/resources/mapper/wecom/WeGroupMemberMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/WeGroupMemberMapper.xml index 0641466..3914e53 --- a/easywecom-wecom/src/main/resources/mapper/wecom/WeGroupMemberMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/WeGroupMemberMapper.xml @@ -2,9 +2,9 @@ - + - SELECT wgm.chat_id, wgm.join_time, @@ -15,9 +15,9 @@ FROM we_group_member wgm left join we_user wu on wu.user_id = wgm.user_id and wgm.type = - ${@com.easywecom.common.constant.GroupConstants@ID_TYPE_USER} and wu.corp_id = wgm.corp_id + ${@com.easyink.common.constant.GroupConstants@ID_TYPE_USER} and wu.corp_id = wgm.corp_id left join we_customer wc on wc.external_userid = wgm.user_id and wgm.type = - ${@com.easywecom.common.constant.GroupConstants@ID_TYPE_CUSTOMER} and wc.corp_id = wgm.corp_id + ${@com.easyink.common.constant.GroupConstants@ID_TYPE_CUSTOMER} and wc.corp_id = wgm.corp_id and wgm.chat_id = #{chatId} @@ -57,10 +57,10 @@ - SELECT - SUM(if(`type` = ${@com.easywecom.common.constant.WeConstans@WE_GROUP_MEMBER_TYPE_STAFF},1,0)) staffCount, - SUM(if(`type` = ${@com.easywecom.common.constant.WeConstans@WE_GROUP_MEMBER_TYPE_CUSTOMER},1,0)) customerCount + SUM(if(`type` = ${@com.easyink.common.constant.WeConstans@WE_GROUP_MEMBER_TYPE_STAFF},1,0)) staffCount, + SUM(if(`type` = ${@com.easyink.common.constant.WeConstans@WE_GROUP_MEMBER_TYPE_CUSTOMER},1,0)) customerCount FROM we_group_member WHERE @@ -80,7 +80,7 @@ - SELECT wgm.id, wgm.user_id, diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/WeGroupStatisticMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/WeGroupStatisticMapper.xml old mode 100755 new mode 100644 similarity index 93% rename from easywecom-wecom/src/main/resources/mapper/wecom/WeGroupStatisticMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/WeGroupStatisticMapper.xml index 24286f1..d466f94 --- a/easywecom-wecom/src/main/resources/mapper/wecom/WeGroupStatisticMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/WeGroupStatisticMapper.xml @@ -2,7 +2,7 @@ - + @@ -17,7 +17,7 @@ - select date_format(wgsc.stat_time, '%Y-%m-%d') as x_time, IFNULL(sum(wgsc.new_chat_cnt), 0) as new_chat_cnt, @@ -39,7 +39,7 @@ - SELECT tbl._date AS x_time, IFNULL(sum(new_chat_cnt), 0) as new_chat_cnt, @@ -79,7 +79,7 @@ ) AS tbr ON tbl._date = tbr.finish_date GROUP BY tbl._date; - select CONCAT(left(tbl._date,4),'年',right(tbl._date,2),'周') as x_time, IFNULL(sum(new_chat_cnt), 0) as new_chat_cnt, IFNULL(sum(chat_total), 0) as chat_total, @@ -120,7 +120,7 @@ group by tbl._date; - select tbl._date as x_time, IFNULL(sum(new_chat_cnt), 0) as new_chat_cnt, IFNULL(sum(chat_total), 0) as chat_total, diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/WeGroupTagCategoryMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/WeGroupTagCategoryMapper.xml old mode 100755 new mode 100644 similarity index 81% rename from easywecom-wecom/src/main/resources/mapper/wecom/WeGroupTagCategoryMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/WeGroupTagCategoryMapper.xml index a8fa6cc..349902f --- a/easywecom-wecom/src/main/resources/mapper/wecom/WeGroupTagCategoryMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/WeGroupTagCategoryMapper.xml @@ -2,20 +2,20 @@ - + - + - + - + - + + - SELECT `id` AS `tagId`, `corp_id`, diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/WeGroupTagRelMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/WeGroupTagRelMapper.xml old mode 100755 new mode 100644 similarity index 87% rename from easywecom-wecom/src/main/resources/mapper/wecom/WeGroupTagRelMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/WeGroupTagRelMapper.xml index 14088bc..02e55af --- a/easywecom-wecom/src/main/resources/mapper/wecom/WeGroupTagRelMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/WeGroupTagRelMapper.xml @@ -2,14 +2,14 @@ - + - + - + diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/WeMaterialConfigMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/WeMaterialConfigMapper.xml old mode 100755 new mode 100644 similarity index 90% rename from easywecom-wecom/src/main/resources/mapper/wecom/WeMaterialConfigMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/WeMaterialConfigMapper.xml index f1f6f0d..19a70d7 --- a/easywecom-wecom/src/main/resources/mapper/wecom/WeMaterialConfigMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/WeMaterialConfigMapper.xml @@ -2,9 +2,9 @@ - + - + diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/WeMaterialMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/WeMaterialMapper.xml old mode 100755 new mode 100644 similarity index 89% rename from easywecom-wecom/src/main/resources/mapper/wecom/WeMaterialMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/WeMaterialMapper.xml index bc047cf..b9bc458 --- a/easywecom-wecom/src/main/resources/mapper/wecom/WeMaterialMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/WeMaterialMapper.xml @@ -2,9 +2,9 @@ - + - + @@ -24,7 +24,7 @@ - + @@ -44,7 +44,7 @@ - + @@ -64,8 +64,8 @@ + ofType="com.easyink.wecom.domain.vo.WeMaterialAndTagRel" + select="com.easyink.wecom.mapper.WeMaterialTagRelMapper.listOfTagRelByMaterialId"/> @@ -275,7 +275,7 @@ update_time = sysdate() where id=#{id} and category_id in (SELECT id FROM we_category WHERE corp_id = #{corpId} AND media_type = #{mediaType} AND - del_flag = ${@com.easywecom.common.constant.WeConstans@WE_CUSTOMER_MSG_RESULT_NO_DEFALE}) + del_flag = ${@com.easyink.common.constant.WeConstans@WE_CUSTOMER_MSG_RESULT_NO_DEFALE}) UPDATE we_material @@ -300,14 +300,14 @@ SELECT wm.id,wm.category_id,wm.material_url,wm.content,wm.material_name, wm.digest,wm.cover_url,wm.create_by,wm.create_time,wm.update_by,wm.update_time, wm.audio_time,wm.show_material,wc.media_type,#{tagIds} tagIds,wm.is_defined,wm.enable_convert_radar,wm.radar_id, - IF(wm.expire_time='${@com.easywecom.common.constant.WeConstans@DEFAULT_MATERIAL_NOT_EXPIRE}',NULL,wm.expire_time) + IF(wm.expire_time='${@com.easyink.common.constant.WeConstans@DEFAULT_MATERIAL_NOT_EXPIRE}',NULL,wm.expire_time) expire_time FROM we_material wm LEFT JOIN we_category wc ON wm.category_id = wc.id LEFT JOIN we_material_tag_rel wmr ON wmr.material_id = wm.id - WHERE wc.del_flag = ${@com.easywecom.common.constant.WeConstans@WE_CUSTOMER_MSG_RESULT_NO_DEFALE} + WHERE wc.del_flag = ${@com.easyink.common.constant.WeConstans@WE_CUSTOMER_MSG_RESULT_NO_DEFALE} AND corp_id = #{corpId} - AND wm.temp_flag = '${@com.easywecom.common.enums.WeTempMaterialEnum@MATERIAL.tempFlag}' + AND wm.temp_flag = '${@com.easyink.common.enums.WeTempMaterialEnum@MATERIAL.tempFlag}' AND wc.media_type=#{mediaType} @@ -354,10 +354,10 @@ UPDATE we_material - set expire_time = '${@com.easywecom.common.constant.WeConstans@DEFAULT_MATERIAL_NOT_EXPIRE}', - show_material = ${@com.easywecom.common.constant.WeConstans@WE_MATERIAL_NOT_USING} + set expire_time = '${@com.easyink.common.constant.WeConstans@DEFAULT_MATERIAL_NOT_EXPIRE}', + show_material = ${@com.easyink.common.constant.WeConstans@WE_MATERIAL_NOT_USING} - category_id in ( SELECT id FROM we_category WHERE corp_id = #{corpId} AND media_type = #{mediaType} AND del_flag = ${@com.easywecom.common.constant.WeConstans@WE_CUSTOMER_MSG_RESULT_NO_DEFALE}) + category_id in ( SELECT id FROM we_category WHERE corp_id = #{corpId} AND media_type = #{mediaType} AND del_flag = ${@com.easyink.common.constant.WeConstans@WE_CUSTOMER_MSG_RESULT_NO_DEFALE}) AND id in #{item} @@ -369,14 +369,14 @@ UPDATE we_material set show_material=#{showMaterial} - category_id in (SELECT id FROM we_category WHERE corp_id = #{corpId} AND media_type = #{mediaType} AND del_flag = ${@com.easywecom.common.constant.WeConstans@WE_CUSTOMER_MSG_RESULT_NO_DEFALE} ) + category_id in (SELECT id FROM we_category WHERE corp_id = #{corpId} AND media_type = #{mediaType} AND del_flag = ${@com.easyink.common.constant.WeConstans@WE_CUSTOMER_MSG_RESULT_NO_DEFALE} ) AND id in (${ids}) delete from we_material - where category_id in (SELECT id FROM we_category WHERE corp_id = #{corpId} AND media_type = #{mediaType} AND del_flag = ${@com.easywecom.common.constant.WeConstans@WE_CUSTOMER_MSG_RESULT_NO_DEFALE}) + where category_id in (SELECT id FROM we_category WHERE corp_id = #{corpId} AND media_type = #{mediaType} AND del_flag = ${@com.easyink.common.constant.WeConstans@WE_CUSTOMER_MSG_RESULT_NO_DEFALE}) AND id in (${ids}) @@ -388,12 +388,12 @@ LEFT JOIN we_category wc ON wm.category_id = wc.id WHERE wc.corp_id = #{corpId} - AND wc.del_flag = ${@com.easywecom.common.constant.WeConstans@WE_CUSTOMER_MSG_RESULT_NO_DEFALE} + AND wc.del_flag = ${@com.easyink.common.constant.WeConstans@WE_CUSTOMER_MSG_RESULT_NO_DEFALE} AND wm.expire_time <= #{lastRemoveDate} - SELECT COUNT( 1 ) AS material_num, IFNULL(sum( CASE WHEN ( t.show_material = 1 ) THEN 1 ELSE 0 END ),0) AS material_side_bar_num @@ -406,7 +406,7 @@ LEFT JOIN we_material_tag_rel wmtl ON wmtl.material_id = wm.id wc.corp_id = #{corpId} - AND wm.temp_flag = '${@com.easywecom.common.enums.WeTempMaterialEnum@MATERIAL.tempFlag}' + AND wm.temp_flag = '${@com.easyink.common.enums.WeTempMaterialEnum@MATERIAL.tempFlag}' AND wc.media_type=#{mediaType} @@ -436,7 +436,7 @@ delete from we_material - where category_id IN (SELECT id FROM we_category WHERE corp_id = #{corpId} AND del_flag = ${@com.easywecom.common.constant.WeConstans@WE_CUSTOMER_MSG_RESULT_NO_DEFALE}) + where category_id IN (SELECT id FROM we_category WHERE corp_id = #{corpId} AND del_flag = ${@com.easyink.common.constant.WeConstans@WE_CUSTOMER_MSG_RESULT_NO_DEFALE}) AND id in #{item} @@ -444,7 +444,7 @@ - SELECT wc.media_type, wm.id, wm.material_url,wm.content,wm.material_name,wm.digest,wm.audio_time,wm.cover_url, wm.create_by,wm.create_time,wm.update_by,wm.update_time,wm.is_defined,wm.enable_convert_radar,wm.radar_id diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/WeMaterialTagMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/WeMaterialTagMapper.xml old mode 100755 new mode 100644 similarity index 79% rename from easywecom-wecom/src/main/resources/mapper/wecom/WeMaterialTagMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/WeMaterialTagMapper.xml index 7867c31..34a6105 --- a/easywecom-wecom/src/main/resources/mapper/wecom/WeMaterialTagMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/WeMaterialTagMapper.xml @@ -1,16 +1,16 @@ - + - + - SELECT id ,tag_name @@ -24,7 +24,7 @@ ORDER BY id DESC - SELECT wmt.id ,wmt.tag_name diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/WeMaterialTagRelMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/WeMaterialTagRelMapper.xml old mode 100755 new mode 100644 similarity index 86% rename from easywecom-wecom/src/main/resources/mapper/wecom/WeMaterialTagRelMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/WeMaterialTagRelMapper.xml index 760ad6f..d197d51 --- a/easywecom-wecom/src/main/resources/mapper/wecom/WeMaterialTagRelMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/WeMaterialTagRelMapper.xml @@ -1,10 +1,10 @@ - + - + @@ -45,7 +45,7 @@ - select id relId,material_tag_id materialTagId from we_material_tag_rel rel WHERE rel.material_id = #{materialId} diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/WeMessagePushMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/WeMessagePushMapper.xml old mode 100755 new mode 100644 similarity index 100% rename from easywecom-wecom/src/main/resources/mapper/wecom/WeMessagePushMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/WeMessagePushMapper.xml diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/WeMsgTlpMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/WeMsgTlpMapper.xml old mode 100755 new mode 100644 similarity index 79% rename from easywecom-wecom/src/main/resources/mapper/wecom/WeMsgTlpMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/WeMsgTlpMapper.xml index 4e312fd..638e854 --- a/easywecom-wecom/src/main/resources/mapper/wecom/WeMsgTlpMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/WeMsgTlpMapper.xml @@ -2,9 +2,9 @@ - + - + @@ -13,9 +13,9 @@ - + select="com.easyink.wecom.mapper.WeMsgTlpMaterialMapper.selectWeMsgTlpMaterialListByDefaultMsgId"> @@ -27,15 +27,15 @@ - + select="com.easyink.wecom.mapper.WeMsgTlpScopeMapper.selectUserNameListByDefaultMsgId"> - + select="com.easyink.wecom.mapper.WeMsgTlpSpecialRuleMapper.getListByDefaultMsgId"> @@ -60,7 +60,7 @@ - - SELECT wmt.id, wmt.corp_id, wmt.default_welcome_msg, @@ -101,7 +101,7 @@ SELECT count(1) as created_num FROM we_msg_tlp WHERE corp_id = #{corpId} - AND welcome_msg_tpl_type = '${@com.easywecom.common.enums.WelcomeMsgTplTypeEnum@GROUP_WELCOME.type}' + AND welcome_msg_tpl_type = '${@com.easyink.common.enums.WelcomeMsgTplTypeEnum@GROUP_WELCOME.type}' diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/WeMsgTlpMaterialMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/WeMsgTlpMaterialMapper.xml old mode 100755 new mode 100644 similarity index 81% rename from easywecom-wecom/src/main/resources/mapper/wecom/WeMsgTlpMaterialMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/WeMsgTlpMaterialMapper.xml index 615fbe9..72d3455 --- a/easywecom-wecom/src/main/resources/mapper/wecom/WeMsgTlpMaterialMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/WeMsgTlpMaterialMapper.xml @@ -2,7 +2,7 @@ - + SELECT id, @@ -18,14 +18,14 @@ + resultType="com.easyink.wecom.domain.vo.welcomemsg.WeUserUseScopeVO"> SELECT wu.user_id, wu.user_name FROM we_msg_tlp_scope wmts LEFT JOIN we_user wu ON wu.user_id = wmts.use_user_id AND wu.corp_id = #{corpId} diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/WeMsgTlpSpecialRuleMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/WeMsgTlpSpecialRuleMapper.xml old mode 100755 new mode 100644 similarity index 77% rename from easywecom-wecom/src/main/resources/mapper/wecom/WeMsgTlpSpecialRuleMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/WeMsgTlpSpecialRuleMapper.xml index 2e258e5..d046949 --- a/easywecom-wecom/src/main/resources/mapper/wecom/WeMsgTlpSpecialRuleMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/WeMsgTlpSpecialRuleMapper.xml @@ -2,10 +2,10 @@ - + - + @@ -13,9 +13,9 @@ - + select="com.easyink.wecom.mapper.WeMsgTlpMaterialMapper.selectWeMsgTlpMaterialListBySpecialMsgId"> diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/WeMyApplicationMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/WeMyApplicationMapper.xml old mode 100755 new mode 100644 similarity index 82% rename from easywecom-wecom/src/main/resources/mapper/wecom/WeMyApplicationMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/WeMyApplicationMapper.xml index c6fe4ce..d4e494b --- a/easywecom-wecom/src/main/resources/mapper/wecom/WeMyApplicationMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/WeMyApplicationMapper.xml @@ -1,8 +1,8 @@ - + - SELECT myapp.appid, myapp.config, @@ -20,10 +20,10 @@ we_my_application myapp LEFT JOIN we_application_center app ON myapp.appid = app.appid WHERE - myapp.corp_id = #{corpId} AND myapp.enable = ${@com.easywecom.common.enums.BaseStatusEnum@OPEN.getCode()} + myapp.corp_id = #{corpId} AND myapp.enable = ${@com.easyink.common.enums.BaseStatusEnum@OPEN.getCode()} - SELECT myapp.appid, myapp.config, @@ -41,12 +41,12 @@ we_my_application myapp LEFT JOIN we_application_center app ON myapp.appid = app.appid WHERE - myapp.corp_id = #{corpId} AND myapp.enable = ${@com.easywecom.common.enums.BaseStatusEnum@OPEN.getCode()} + myapp.corp_id = #{corpId} AND myapp.enable = ${@com.easyink.common.enums.BaseStatusEnum@OPEN.getCode()} AND app.sidebar_redirect_url != '' - SELECT myapp.appid, myapp.config, @@ -64,12 +64,12 @@ we_my_application myapp LEFT JOIN we_application_center app ON myapp.appid = app.appid WHERE - myapp.corp_id = #{corpId} AND myapp.enable = ${@com.easywecom.common.enums.BaseStatusEnum@OPEN.getCode()} + myapp.corp_id = #{corpId} AND myapp.enable = ${@com.easyink.common.enums.BaseStatusEnum@OPEN.getCode()} AND app.appid = #{appid} LIMIT 1 - SELECT myapp.appid, myapp.config, @@ -90,6 +90,6 @@ LEFT JOIN we_application_center app ON myapp.appid = app.appid LEFT JOIN we_corp_account ca ON myapp.corp_id = ca.corp_id WHERE - myapp.appid = #{appid} AND myapp.enable = ${@com.easywecom.common.enums.BaseStatusEnum@OPEN.getCode()} + myapp.appid = #{appid} AND myapp.enable = ${@com.easyink.common.enums.BaseStatusEnum@OPEN.getCode()} \ No newline at end of file diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/WeMyApplicationUseScopeMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/WeMyApplicationUseScopeMapper.xml old mode 100755 new mode 100644 similarity index 66% rename from easywecom-wecom/src/main/resources/mapper/wecom/WeMyApplicationUseScopeMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/WeMyApplicationUseScopeMapper.xml index 6f50b19..e7f7c9d --- a/easywecom-wecom/src/main/resources/mapper/wecom/WeMyApplicationUseScopeMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/WeMyApplicationUseScopeMapper.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/WeOperationsCenterCustomerSopFilterMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/WeOperationsCenterCustomerSopFilterMapper.xml old mode 100755 new mode 100644 similarity index 85% rename from easywecom-wecom/src/main/resources/mapper/wecom/WeOperationsCenterCustomerSopFilterMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/WeOperationsCenterCustomerSopFilterMapper.xml index bb713e3..bf43856 --- a/easywecom-wecom/src/main/resources/mapper/wecom/WeOperationsCenterCustomerSopFilterMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/WeOperationsCenterCustomerSopFilterMapper.xml @@ -1,10 +1,10 @@ - + - + diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/WeOperationsCenterGroupSopFilterCycleMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/WeOperationsCenterGroupSopFilterCycleMapper.xml old mode 100755 new mode 100644 similarity index 86% rename from easywecom-wecom/src/main/resources/mapper/wecom/WeOperationsCenterGroupSopFilterCycleMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/WeOperationsCenterGroupSopFilterCycleMapper.xml index c8b6751..4f05a92 --- a/easywecom-wecom/src/main/resources/mapper/wecom/WeOperationsCenterGroupSopFilterCycleMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/WeOperationsCenterGroupSopFilterCycleMapper.xml @@ -1,7 +1,7 @@ - + INSERT INTO `we_operations_center_group_sop_filter_cycle` diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/WeOperationsCenterGroupSopFilterMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/WeOperationsCenterGroupSopFilterMapper.xml old mode 100755 new mode 100644 similarity index 80% rename from easywecom-wecom/src/main/resources/mapper/wecom/WeOperationsCenterGroupSopFilterMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/WeOperationsCenterGroupSopFilterMapper.xml index b1d3817..177847c --- a/easywecom-wecom/src/main/resources/mapper/wecom/WeOperationsCenterGroupSopFilterMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/WeOperationsCenterGroupSopFilterMapper.xml @@ -1,10 +1,10 @@ - + - + @@ -82,15 +82,15 @@ - SELECT id, corp_id, sop_id, `owner`, tag_id, - IF(create_time='${@com.easywecom.common.constant.WeConstans@DEFAULT_SOP_START_TIME}',null,create_time) create_time, - IF(end_time='${@com.easywecom.common.constant.WeConstans@DEFAULT_SOP_END_TIME}',null,end_time) end_time + IF(create_time='${@com.easyink.common.constant.WeConstans@DEFAULT_SOP_START_TIME}',null,create_time) create_time, + IF(end_time='${@com.easyink.common.constant.WeConstans@DEFAULT_SOP_END_TIME}',null,end_time) end_time FROM we_operations_center_group_sop_filter WHERE diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/WeOperationsCenterSopDetailMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/WeOperationsCenterSopDetailMapper.xml old mode 100755 new mode 100644 similarity index 84% rename from easywecom-wecom/src/main/resources/mapper/wecom/WeOperationsCenterSopDetailMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/WeOperationsCenterSopDetailMapper.xml index 65fcac9..6bdc15b --- a/easywecom-wecom/src/main/resources/mapper/wecom/WeOperationsCenterSopDetailMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/WeOperationsCenterSopDetailMapper.xml @@ -1,10 +1,10 @@ - + - + @@ -16,7 +16,7 @@ - + @@ -31,7 +31,7 @@ - + @@ -88,7 +88,7 @@ - SELECT wocsd.is_finish, wocsd.alert_time, - IF(wocsd.finish_time = '${@com.easywecom.common.constant.WeConstans@DEFAULT_SOP_END_TIME}', NULL, wocsd.finish_time) AS finish_time, + IF(wocsd.finish_time = '${@com.easyink.common.constant.WeConstans@DEFAULT_SOP_END_TIME}', NULL, wocsd.finish_time) AS finish_time, wg.group_name AS chat_name, wu.user_name AS chat_creator_name, wocsr.name AS rule_name @@ -176,11 +176,11 @@ - SELECT ( SELECT COUNT( 1 ) FROM we_operations_center_sop_detail WHERE corp_id = #{corpId} AND sop_id = #{sopId} ) AS task_count, - ( SELECT COUNT( 1 ) FROM we_operations_center_sop_detail WHERE is_finish = ${@com.easywecom.common.constant.WeConstans@EXECUTE} AND corp_id = #{corpId} AND sop_id = #{sopId}) AS task_execute_count, - ( SELECT COUNT( 1 ) FROM we_operations_center_sop_detail WHERE is_finish = ${@com.easywecom.common.constant.WeConstans@UN_EXECUTE} AND corp_id = #{corpId} AND sop_id = #{sopId}) AS task_un_execute_count + ( SELECT COUNT( 1 ) FROM we_operations_center_sop_detail WHERE is_finish = ${@com.easyink.common.constant.WeConstans@EXECUTE} AND corp_id = #{corpId} AND sop_id = #{sopId}) AS task_execute_count, + ( SELECT COUNT( 1 ) FROM we_operations_center_sop_detail WHERE is_finish = ${@com.easyink.common.constant.WeConstans@UN_EXECUTE} AND corp_id = #{corpId} AND sop_id = #{sopId}) AS task_un_execute_count - SELECT wocs.id sopId, wocsd.alert_time, @@ -342,12 +342,12 @@ UPDATE we_operations_center_sop_detail - SET is_finish = ${@com.easywecom.common.constant.WeConstans@EXECUTE}, + SET is_finish = ${@com.easyink.common.constant.WeConstans@EXECUTE}, finish_time = #{finishTime} WHERE corp_id = #{corpId} AND id = #{detailId} - AND is_finish = ${@com.easywecom.common.constant.WeConstans@UN_EXECUTE} + AND is_finish = ${@com.easyink.common.constant.WeConstans@UN_EXECUTE} \ No newline at end of file diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/WeOperationsCenterSopMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/WeOperationsCenterSopMapper.xml old mode 100755 new mode 100644 similarity index 89% rename from easywecom-wecom/src/main/resources/mapper/wecom/WeOperationsCenterSopMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/WeOperationsCenterSopMapper.xml index 9035c1c..bf8b90e --- a/easywecom-wecom/src/main/resources/mapper/wecom/WeOperationsCenterSopMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/WeOperationsCenterSopMapper.xml @@ -1,9 +1,9 @@ - + - + @@ -14,11 +14,11 @@ - + - SELECT wocs.id, wocs.`name`, diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/WeOperationsCenterSopMaterialMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/WeOperationsCenterSopMaterialMapper.xml old mode 100755 new mode 100644 similarity index 77% rename from easywecom-wecom/src/main/resources/mapper/wecom/WeOperationsCenterSopMaterialMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/WeOperationsCenterSopMaterialMapper.xml index 94867fc..0c526a3 --- a/easywecom-wecom/src/main/resources/mapper/wecom/WeOperationsCenterSopMaterialMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/WeOperationsCenterSopMaterialMapper.xml @@ -1,10 +1,10 @@ - + - + diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/WeOperationsCenterSopRulesMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/WeOperationsCenterSopRulesMapper.xml old mode 100755 new mode 100644 similarity index 85% rename from easywecom-wecom/src/main/resources/mapper/wecom/WeOperationsCenterSopRulesMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/WeOperationsCenterSopRulesMapper.xml index 3ca315a..41c991f --- a/easywecom-wecom/src/main/resources/mapper/wecom/WeOperationsCenterSopRulesMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/WeOperationsCenterSopRulesMapper.xml @@ -1,7 +1,7 @@ - + wocsr.id @@ -14,7 +14,7 @@ - + @@ -22,7 +22,7 @@ - + diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/WeOperationsCenterSopScopeMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/WeOperationsCenterSopScopeMapper.xml old mode 100755 new mode 100644 similarity index 86% rename from easywecom-wecom/src/main/resources/mapper/wecom/WeOperationsCenterSopScopeMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/WeOperationsCenterSopScopeMapper.xml index 31b34a4..36eca8c --- a/easywecom-wecom/src/main/resources/mapper/wecom/WeOperationsCenterSopScopeMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/WeOperationsCenterSopScopeMapper.xml @@ -1,10 +1,10 @@ - + - + @@ -48,7 +48,7 @@ - SELECT wocss.id, wocss.target_id, @@ -61,7 +61,7 @@ LEFT JOIN we_group wg ON wocss.corp_id = wg.corp_id AND wocss.target_id = wg.chat_id WHERE wocss.corp_id = #{corpId} - AND wocss.sop_id = #{sopId} AND wocss.type = ${@com.easywecom.common.constant.WeConstans@SOP_USE_EMPLOYEE} + AND wocss.sop_id = #{sopId} AND wocss.type = ${@com.easyink.common.constant.WeConstans@SOP_USE_EMPLOYEE} UNION SELECT wocss.id, @@ -74,7 +74,7 @@ LEFT JOIN we_department wd ON wocss.target_id = wd.id AND wd.corp_id = wocss.corp_id WHERE wocss.corp_id = #{corpId} - AND wocss.sop_id = #{sopId} AND wocss.type = ${@com.easywecom.common.constant.WeConstans@SOP_USE_DEPARTMENT} + AND wocss.sop_id = #{sopId} AND wocss.type = ${@com.easyink.common.constant.WeConstans@SOP_USE_DEPARTMENT} diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/WeOperationsCenterSopTaskMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/WeOperationsCenterSopTaskMapper.xml old mode 100755 new mode 100644 similarity index 80% rename from easywecom-wecom/src/main/resources/mapper/wecom/WeOperationsCenterSopTaskMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/WeOperationsCenterSopTaskMapper.xml index 347acc6..1181c34 --- a/easywecom-wecom/src/main/resources/mapper/wecom/WeOperationsCenterSopTaskMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/WeOperationsCenterSopTaskMapper.xml @@ -1,10 +1,10 @@ - + - + diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/WePresTagGroupTaskMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/WePresTagGroupTaskMapper.xml old mode 100755 new mode 100644 similarity index 97% rename from easywecom-wecom/src/main/resources/mapper/wecom/WePresTagGroupTaskMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/WePresTagGroupTaskMapper.xml index c9c0fb2..6b04513 --- a/easywecom-wecom/src/main/resources/mapper/wecom/WePresTagGroupTaskMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/WePresTagGroupTaskMapper.xml @@ -2,7 +2,7 @@ - + @@ -64,7 +64,7 @@ wptg.corp_id = #{corpId} - AND wptg.`del_flag` = ${@com.easywecom.common.constant.WeConstans@WE_CUSTOMER_MSG_RESULT_NO_DEFALE} + AND wptg.`del_flag` = ${@com.easyink.common.constant.WeConstans@WE_CUSTOMER_MSG_RESULT_NO_DEFALE} AND wptg.task_name LIKE CONCAT("%",#{taskName},"%") @@ -144,7 +144,7 @@ - SELECT wfcr.`external_userid`, wfcr.`user_id`, diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/WePresTagGroupTaskScopeMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/WePresTagGroupTaskScopeMapper.xml old mode 100755 new mode 100644 similarity index 94% rename from easywecom-wecom/src/main/resources/mapper/wecom/WePresTagGroupTaskScopeMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/WePresTagGroupTaskScopeMapper.xml index 1f4566b..f874e9e --- a/easywecom-wecom/src/main/resources/mapper/wecom/WePresTagGroupTaskScopeMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/WePresTagGroupTaskScopeMapper.xml @@ -2,7 +2,7 @@ - + diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/WePresTagGroupTaskStatMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/WePresTagGroupTaskStatMapper.xml old mode 100755 new mode 100644 similarity index 94% rename from easywecom-wecom/src/main/resources/mapper/wecom/WePresTagGroupTaskStatMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/WePresTagGroupTaskStatMapper.xml index 00f7538..176f2ef --- a/easywecom-wecom/src/main/resources/mapper/wecom/WePresTagGroupTaskStatMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/WePresTagGroupTaskStatMapper.xml @@ -2,7 +2,7 @@ - + @@ -22,7 +22,7 @@ wptg.task_id = #{taskId} - SELECT wc.`name` as customerName, wfcr.`remark`, diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/WePresTagGroupTaskTagMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/WePresTagGroupTaskTagMapper.xml old mode 100755 new mode 100644 similarity index 95% rename from easywecom-wecom/src/main/resources/mapper/wecom/WePresTagGroupTaskTagMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/WePresTagGroupTaskTagMapper.xml index e34fb15..673a1af --- a/easywecom-wecom/src/main/resources/mapper/wecom/WePresTagGroupTaskTagMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/WePresTagGroupTaskTagMapper.xml @@ -2,7 +2,7 @@ - + diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/WeResignedCustomerTransferRecordMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/WeResignedCustomerTransferRecordMapper.xml old mode 100755 new mode 100644 similarity index 87% rename from easywecom-wecom/src/main/resources/mapper/wecom/WeResignedCustomerTransferRecordMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/WeResignedCustomerTransferRecordMapper.xml index 7ac943a..e049d66 --- a/easywecom-wecom/src/main/resources/mapper/wecom/WeResignedCustomerTransferRecordMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/WeResignedCustomerTransferRecordMapper.xml @@ -1,6 +1,6 @@ - + UPDATE we_resigned_customer_transfer_record @@ -31,7 +31,7 @@ + resultType="com.easyink.wecom.domain.vo.transfer.GetResignedTransferGroupDetailVO"> SELECT wrgtr.record_id, wrgtr.chat_id, wrgtr.status as allocateResult, diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/WeResignedTransferRecordMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/WeResignedTransferRecordMapper.xml old mode 100755 new mode 100644 similarity index 90% rename from easywecom-wecom/src/main/resources/mapper/wecom/WeResignedTransferRecordMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/WeResignedTransferRecordMapper.xml index a1c72ec..b5e3309 --- a/easywecom-wecom/src/main/resources/mapper/wecom/WeResignedTransferRecordMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/WeResignedTransferRecordMapper.xml @@ -1,6 +1,6 @@ - + INSERT INTO we_resigned_customer_transfer_record @@ -16,7 +16,7 @@ `status` = VALUES (`status`),remark = VALUES(remark) - SELECT id, corp_id, handover_userid, @@ -35,7 +35,7 @@ LIMIT 1 - SELECT wrtr.id, wrtr.corp_id, wrtr.handover_userid as userId, wrtr.takeover_userid, wrtr.dimission_time, wrtr.handover_username as userName, wrtr.takeover_username, wrtr.handover_department_name as mainDepartmentName, wrtr.takeover_department_name, diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/WeSensitiveActHitMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/WeSensitiveActHitMapper.xml old mode 100755 new mode 100644 similarity index 91% rename from easywecom-wecom/src/main/resources/mapper/wecom/WeSensitiveActHitMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/WeSensitiveActHitMapper.xml index 088875b..683656f --- a/easywecom-wecom/src/main/resources/mapper/wecom/WeSensitiveActHitMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/WeSensitiveActHitMapper.xml @@ -1,10 +1,10 @@ - + - + diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/WeSensitiveAuditScopeMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/WeSensitiveAuditScopeMapper.xml old mode 100755 new mode 100644 similarity index 98% rename from easywecom-wecom/src/main/resources/mapper/wecom/WeSensitiveAuditScopeMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/WeSensitiveAuditScopeMapper.xml index c689797..46b1e29 --- a/easywecom-wecom/src/main/resources/mapper/wecom/WeSensitiveAuditScopeMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/WeSensitiveAuditScopeMapper.xml @@ -2,7 +2,7 @@ - + diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/WeSensitiveMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/WeSensitiveMapper.xml old mode 100755 new mode 100644 similarity index 98% rename from easywecom-wecom/src/main/resources/mapper/wecom/WeSensitiveMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/WeSensitiveMapper.xml index 324d077..d9faaa4 --- a/easywecom-wecom/src/main/resources/mapper/wecom/WeSensitiveMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/WeSensitiveMapper.xml @@ -2,7 +2,7 @@ - + @@ -16,7 +16,7 @@ - + @@ -34,7 +34,7 @@ select a.* from we_sensitive a - select b.id,b.audit_scope_id,b.audit_scope_name,b.scope_type,b.corp_id from we_sensitive_audit_scope b WHERE b.sensitive_id = #{id} diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/WeTagGroupMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/WeTagGroupMapper.xml old mode 100755 new mode 100644 similarity index 78% rename from easywecom-wecom/src/main/resources/mapper/wecom/WeTagGroupMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/WeTagGroupMapper.xml index bb5f146..834e2fb --- a/easywecom-wecom/src/main/resources/mapper/wecom/WeTagGroupMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/WeTagGroupMapper.xml @@ -2,14 +2,14 @@ - + - + - + @@ -17,12 +17,12 @@ - + - + @@ -30,7 +30,7 @@ - select wt.tag_id , wt.seq_id, @@ -47,7 +47,7 @@ from we_tag_group - SELECT wtg.*, wtg.create_by, @@ -56,7 +56,7 @@ we_tag_group wtg where wtg.corp_id = #{corpId} AND - wtg.status=${@com.easywecom.common.constant.Constants@NORMAL_CODE} + wtg.status=${@com.easyink.common.constant.Constants@NORMAL_CODE} and wtg.group_name like concat('%', #{groupName}, '%') @@ -67,8 +67,8 @@ select wtg.* FROM we_tag_group wtg LEFT JOIN we_tag wt ON wtg.group_id = wt.group_id AND - wt.status = ${@com.easywecom.common.constant.Constants@NORMAL_CODE} - WHERE wtg.corp_id = #{corpId} AND wtg.status = ${@com.easywecom.common.constant.Constants@NORMAL_CODE} + wt.status = ${@com.easyink.common.constant.Constants@NORMAL_CODE} + WHERE wtg.corp_id = #{corpId} AND wtg.status = ${@com.easyink.common.constant.Constants@NORMAL_CODE} AND (wt.name like concat('%', #{searchName}, '%') OR wtg.group_name like concat('%', #{searchName}, '%')) group by wtg.group_name @@ -77,7 +77,7 @@ - update we_tag_group set status= ${@com.easywecom.common.constant.Constants@DELETE_CODE} + update we_tag_group set status= ${@com.easyink.common.constant.Constants@DELETE_CODE} where corp_id = #{corpId} and group_id in #{id} @@ -108,8 +108,8 @@ FROM we_flower_customer_tag_rel wfctr INNER JOIN we_tag wt ON wfctr.tag_id = wt.tag_id INNER JOIN we_tag_group wtg ON wt.group_id = wtg.group_id - WHERE wt.`status` = ${@com.easywecom.common.constant.Constants@NORMAL_CODE} - and wtg.`status` = ${@com.easywecom.common.constant.Constants@NORMAL_CODE} + WHERE wt.`status` = ${@com.easyink.common.constant.Constants@NORMAL_CODE} + and wtg.`status` = ${@com.easyink.common.constant.Constants@NORMAL_CODE} and wfctr.flower_customer_rel_id = #{flowerCustomerRelId} diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/WeTagMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/WeTagMapper.xml old mode 100755 new mode 100644 similarity index 87% rename from easywecom-wecom/src/main/resources/mapper/wecom/WeTagMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/WeTagMapper.xml index 3c508ab..bc19b82 --- a/easywecom-wecom/src/main/resources/mapper/wecom/WeTagMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/WeTagMapper.xml @@ -2,7 +2,7 @@ - + @@ -39,14 +39,14 @@ - update we_tag set status=${@com.easywecom.common.constant.Constants@DELETE_CODE} where group_id in + update we_tag set status=${@com.easyink.common.constant.Constants@DELETE_CODE} where group_id in #{groupId} - update we_tag set status=${@com.easywecom.common.constant.Constants@DELETE_CODE} where corp_id = #{corpId} and tag_id = #{id} + update we_tag set status=${@com.easyink.common.constant.Constants@DELETE_CODE} where corp_id = #{corpId} and tag_id = #{id} diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/WeUserBehaviorDataMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/WeUserBehaviorDataMapper.xml old mode 100755 new mode 100644 similarity index 95% rename from easywecom-wecom/src/main/resources/mapper/wecom/WeUserBehaviorDataMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/WeUserBehaviorDataMapper.xml index d09cda3..87e4925 --- a/easywecom-wecom/src/main/resources/mapper/wecom/WeUserBehaviorDataMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/WeUserBehaviorDataMapper.xml @@ -2,7 +2,7 @@ - + @@ -17,7 +17,7 @@ - select date_format(stat_time, '%Y-%m-%d') as x_time, IFNULL(sum(new_apply_cnt),0) as new_apply_cnt, @@ -40,7 +40,7 @@ - SELECT tbl._date AS x_time, IFNULL(tbr.new_apply_cnt, 0) as new_apply_cnt, IFNULL(tbr.new_contact_cnt, 0) as new_contact_cnt, @@ -76,7 +76,7 @@ GROUP BY tbl._date; - select CONCAT(left(tbl._date,4),'年', right(tbl._date,2),'周') as x_time, IFNULL(tbr.new_apply_cnt, 0) as new_apply_cnt, IFNULL(tbr.new_contact_cnt, 0) as new_contact_cnt, @@ -113,7 +113,7 @@ group by tbl._date; - select tbl._date as x_time, IFNULL(tbr.new_apply_cnt, 0) as new_apply_cnt, IFNULL(tbr.new_contact_cnt, 0) as new_contact_cnt, diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/WeUserMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/WeUserMapper.xml old mode 100755 new mode 100644 similarity index 90% rename from easywecom-wecom/src/main/resources/mapper/wecom/WeUserMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/WeUserMapper.xml index bf7040f..05e306f --- a/easywecom-wecom/src/main/resources/mapper/wecom/WeUserMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/WeUserMapper.xml @@ -2,9 +2,9 @@ - + - + @@ -15,10 +15,10 @@ + typeHandler="com.easyink.framework.handler.StringArrayJoinTypeHandler"/> + typeHandler="com.easyink.framework.handler.StringArrayJoinTypeHandler"/> @@ -57,7 +57,7 @@ from we_user wu - select wu.is_activate, wu.head_image_url, wu.user_name, @@ -92,7 +92,7 @@ AND wu.is_activate = #{isActivate} - AND wu.is_activate != ${@com.easywecom.common.constant.WeConstans@WE_USER_IS_LEAVE} + AND wu.is_activate != ${@com.easyink.common.constant.WeConstans@WE_USER_IS_LEAVE} AND position(#{userName} IN wu.user_name) @@ -103,7 +103,7 @@ AND CONCAT(',',wu.main_department,',') REGEXP CONCAT(',(',REPLACE(#{departments},',','|'),'),') - select wu.is_activate, wu.head_image_url, @@ -133,7 +133,7 @@ left join we_department wd on wu.main_department = wd.id and wd.corp_id = wu.corp_id WHERE wu.corp_id = #{corpId} - AND wu.is_activate != ${@com.easywecom.common.constant.WeConstans@WE_USER_IS_LEAVE} + AND wu.is_activate != ${@com.easyink.common.constant.WeConstans@WE_USER_IS_LEAVE} AND wu.user_id in @@ -146,7 +146,7 @@ WHERE wu.corp_id = #{corpId} - AND wu.is_activate != ${@com.easywecom.common.constant.WeConstans@WE_USER_IS_LEAVE} + AND wu.is_activate != ${@com.easyink.common.constant.WeConstans@WE_USER_IS_LEAVE} ${params.dataScope} and wu.is_activate = #{isActivate} and wu.head_image_url = #{avatarMediaid} @@ -218,11 +218,11 @@ #{email}, #{wxAccount}, - #{department,jdbcType=OTHER,typeHandler=com.easywecom.framework.handler.StringArrayJoinTypeHandler}, + #{department,jdbcType=OTHER,typeHandler=com.easyink.framework.handler.StringArrayJoinTypeHandler}, #{position}, - #{isLeaderInDept,jdbcType=OTHER,typeHandler=com.easywecom.framework.handler.StringArrayJoinTypeHandler}, + #{isLeaderInDept,jdbcType=OTHER,typeHandler=com.easyink.framework.handler.StringArrayJoinTypeHandler}, #{joinTime}, #{enable}, @@ -250,11 +250,11 @@ email = #{email}, wx_account = #{wxAccount}, department = - #{department,jdbcType=OTHER,typeHandler=com.easywecom.framework.handler.StringArrayJoinTypeHandler}, + #{department,jdbcType=OTHER,typeHandler=com.easyink.framework.handler.StringArrayJoinTypeHandler}, position = #{position}, is_leader_in_dept = - #{isLeaderInDept,jdbcType=OTHER,typeHandler=com.easywecom.framework.handler.StringArrayJoinTypeHandler}, + #{isLeaderInDept,jdbcType=OTHER,typeHandler=com.easyink.framework.handler.StringArrayJoinTypeHandler}, join_time = #{joinTime}, enable = #{enable}, @@ -296,11 +296,11 @@ email = #{weUser.email}, wx_account = #{weUser.wxAccount}, department = - #{weUser.department,jdbcType=OTHER,typeHandler=com.easywecom.framework.handler.StringArrayJoinTypeHandler}, + #{weUser.department,jdbcType=OTHER,typeHandler=com.easyink.framework.handler.StringArrayJoinTypeHandler}, position = #{weUser.position}, is_leader_in_dept = - #{weUser.isLeaderInDept,jdbcType=OTHER,typeHandler=com.easywecom.framework.handler.StringArrayJoinTypeHandler}, + #{weUser.isLeaderInDept,jdbcType=OTHER,typeHandler=com.easyink.framework.handler.StringArrayJoinTypeHandler}, join_time = #{weUser.joinTime}, enable = #{weUser.enable}, @@ -360,7 +360,7 @@ is_activate = VALUES(is_activate) , dimission_time = VALUES(dimission_time) - SELECT wu.user_name, wu.user_id, wu.head_image_url, @@ -369,7 +369,7 @@ INNER JOIN we_user wu ON wfcr.user_id = wu.user_id AND wu.corp_id = wfcr.corp_id WHERE wfcr.external_userid = #{externalUserid} and wfcr.corp_id = #{corpId} - SELECT is_activate, head_image_url AS avatarMediaid, @@ -405,7 +405,7 @@ LEFT JOIN we_department wd ON wd.id = wu.department WHERE wu.corp_id = #{corpId} - and wu.is_activate = ${@com.easywecom.common.constant.WeConstans@WE_USER_IS_ACTIVATE} + and wu.is_activate = ${@com.easyink.common.constant.WeConstans@WE_USER_IS_ACTIVATE} AND wu.main_department in @@ -415,7 +415,7 @@ GROUP BY wu.user_id - SELECT wu.is_activate, wu.head_image_url, wu.user_name, @@ -447,11 +447,11 @@ LIMIT 1 - WHERE wu.corp_id = #{corpId} - and wu.is_activate != ${@com.easywecom.common.constant.WeConstans@WE_USER_IS_LEAVE} + and wu.is_activate != ${@com.easyink.common.constant.WeConstans@WE_USER_IS_LEAVE} AND wu.main_department IN @@ -459,7 +459,7 @@ - SELECT wu.is_activate, wu.head_image_url as avatarMediaid, wu.user_name as name, @@ -504,7 +504,7 @@ - SELECT wu.user_id, wu.user_name, wu.head_image_url, @@ -514,19 +514,19 @@ wd.name as mainDepartmentName, wu.is_allocate, (SELECT count(id) FROM we_flower_customer_rel WHERE corp_id = #{corpId} AND user_id = wu.user_id - and status = ${@com.easywecom.common.enums.CustomerStatusEnum@TO_BE_TRANSFERRED.code} + and status = ${@com.easyink.common.enums.CustomerStatusEnum@TO_BE_TRANSFERRED.code} ) as allocateCustomerNum, (SELECT count(chat_id) FROM we_group WHERE corp_id =#{corpId} AND owner = wu.user_id - and status = ${@com.easywecom.common.constant.GroupConstants@OWNER_LEAVE} + and status = ${@com.easyink.common.constant.GroupConstants@OWNER_LEAVE} ) as allocateGroupNum FROM we_user wu LEFT JOIN we_department wd ON wu.corp_id = wd.corp_id AND wd.id = wu.main_department wu.corp_id = #{corpId} ${params.dataScope} - AND wu.is_activate in (${@com.easywecom.common.enums.StaffActivateEnum@RETIRE.code}, - ${@com.easywecom.common.enums.StaffActivateEnum@DELETE.code}) - AND wu.is_allocate = ${@com.easywecom.common.constant.WeConstans@LEAVE_NO_ALLOCATE_STATE} + AND wu.is_activate in (${@com.easyink.common.enums.StaffActivateEnum@RETIRE.code}, + ${@com.easyink.common.enums.StaffActivateEnum@DELETE.code}) + AND wu.is_allocate = ${@com.easyink.common.constant.WeConstans@LEAVE_NO_ALLOCATE_STATE} AND position(#{userName} IN wu.user_name) diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/WeUserRoleMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/WeUserRoleMapper.xml old mode 100755 new mode 100644 similarity index 88% rename from easywecom-wecom/src/main/resources/mapper/wecom/WeUserRoleMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/WeUserRoleMapper.xml index 653fc7d..5822b45 --- a/easywecom-wecom/src/main/resources/mapper/wecom/WeUserRoleMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/WeUserRoleMapper.xml @@ -2,7 +2,7 @@ - + @@ -58,7 +58,7 @@ role_id = VALUES(role_id) - SELECT role_id, corp_id, role_name, @@ -75,12 +75,12 @@ FROM sys_role WHERE corp_id = #{corpId} AND role_key = #{roleKey} - AND status = '${@com.easywecom.common.constant.Constants@NORMAL_CODE}' - AND del_flag = '${@com.easywecom.common.constant.Constants@NORMAL_CODE}' + AND status = '${@com.easyink.common.constant.Constants@NORMAL_CODE}' + AND del_flag = '${@com.easyink.common.constant.Constants@NORMAL_CODE}' LIMIT 1 - SELECT role_id, corp_id, role_name, @@ -97,8 +97,8 @@ FROM sys_role WHERE corp_id = #{corpId} AND role_id = #{roleId} - AND status = '${@com.easywecom.common.constant.Constants@NORMAL_CODE}' - AND del_flag = '${@com.easywecom.common.constant.Constants@NORMAL_CODE}' + AND status = '${@com.easyink.common.constant.Constants@NORMAL_CODE}' + AND del_flag = '${@com.easyink.common.constant.Constants@NORMAL_CODE}' LIMIT 1 diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/WeWordsCategoryMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/WeWordsCategoryMapper.xml old mode 100755 new mode 100644 similarity index 89% rename from easywecom-wecom/src/main/resources/mapper/wecom/WeWordsCategoryMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/WeWordsCategoryMapper.xml index a3318d2..68f2626 --- a/easywecom-wecom/src/main/resources/mapper/wecom/WeWordsCategoryMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/WeWordsCategoryMapper.xml @@ -2,9 +2,9 @@ - + - + @@ -23,7 +23,7 @@ from we_words_category wwc - WHERE wwc.corp_id = #{corpId} @@ -103,7 +103,7 @@ ORDER BY wwc.parent_id ASC, wwc.sort DESC - select wwc.id, wwc.name from we_words_category wwc WHERE wwc.corp_id = #{corpId} diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/WeWordsDetailMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/WeWordsDetailMapper.xml old mode 100755 new mode 100644 similarity index 89% rename from easywecom-wecom/src/main/resources/mapper/wecom/WeWordsDetailMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/WeWordsDetailMapper.xml index efe7b50..fadd907 --- a/easywecom-wecom/src/main/resources/mapper/wecom/WeWordsDetailMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/WeWordsDetailMapper.xml @@ -1,10 +1,10 @@ - + - + @@ -17,7 +17,7 @@ - + @@ -26,9 +26,9 @@ - + select="com.easyink.wecom.mapper.radar.WeRadarMapper.getOne"> diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/WeWordsGroupMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/WeWordsGroupMapper.xml old mode 100755 new mode 100644 similarity index 87% rename from easywecom-wecom/src/main/resources/mapper/wecom/WeWordsGroupMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/WeWordsGroupMapper.xml index 62d0841..e1541ef --- a/easywecom-wecom/src/main/resources/mapper/wecom/WeWordsGroupMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/WeWordsGroupMapper.xml @@ -1,24 +1,24 @@ - + - + - + + javaType="java.util.List" ofType="com.easyink.wecom.domain.WeWordsDetailEntity" + select="com.easyink.wecom.mapper.WeWordsDetailMapper.listOfGroupId"> - INSERT INTO we_words_group ( @@ -36,7 +36,7 @@ #{categoryId}, #{title}, - #{seq,jdbcType=OTHER,typeHandler=com.easywecom.framework.handler.StringArrayJoinTypeHandler}, + #{seq,jdbcType=OTHER,typeHandler=com.easyink.framework.handler.StringArrayJoinTypeHandler}, #{isPush}, @@ -47,7 +47,7 @@ UPDATE we_words_group SET `seq` = CASE `id` - WHEN #{item.id} THEN #{item.seq,jdbcType=OTHER,typeHandler=com.easywecom.framework.handler.StringArrayJoinTypeHandler} + WHEN #{item.id} THEN #{item.seq,jdbcType=OTHER,typeHandler=com.easyink.framework.handler.StringArrayJoinTypeHandler} END WHERE @@ -74,7 +74,7 @@ #{item.corpId} ,#{item.categoryId} ,#{item.title} - ,#{item.seq,jdbcType=OTHER,typeHandler=com.easywecom.framework.handler.StringArrayJoinTypeHandler} + ,#{item.seq,jdbcType=OTHER,typeHandler=com.easyink.framework.handler.StringArrayJoinTypeHandler} ,#{item.isPush} ,#{item.sort} ) @@ -100,7 +100,7 @@ title = #{title}, - seq = #{seq,jdbcType=OTHER,typeHandler=com.easywecom.framework.handler.StringArrayJoinTypeHandler}, + seq = #{seq,jdbcType=OTHER,typeHandler=com.easyink.framework.handler.StringArrayJoinTypeHandler}, is_push = #{isPush}, diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/WeWordsLastUseMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/WeWordsLastUseMapper.xml old mode 100755 new mode 100644 similarity index 77% rename from easywecom-wecom/src/main/resources/mapper/wecom/WeWordsLastUseMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/WeWordsLastUseMapper.xml index df698d7..08811b3 --- a/easywecom-wecom/src/main/resources/mapper/wecom/WeWordsLastUseMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/WeWordsLastUseMapper.xml @@ -1,16 +1,16 @@ - + - + + typeHandler="com.easyink.framework.handler.StringArrayJoinTypeHandler"/> @@ -33,7 +33,7 @@ - INSERT INTO we_words_last_use ( @@ -50,7 +50,7 @@ #{userId}, #{type}, - #{wordsIds,jdbcType=OTHER,typeHandler=com.easywecom.framework.handler.StringArrayJoinTypeHandler}, + #{wordsIds,jdbcType=OTHER,typeHandler=com.easyink.framework.handler.StringArrayJoinTypeHandler}, ) diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagCustomerRuleEffectTimeMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagCustomerRuleEffectTimeMapper.xml old mode 100755 new mode 100644 similarity index 88% rename from easywecom-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagCustomerRuleEffectTimeMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagCustomerRuleEffectTimeMapper.xml index 7575f55..debcecc --- a/easywecom-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagCustomerRuleEffectTimeMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagCustomerRuleEffectTimeMapper.xml @@ -1,8 +1,8 @@ - + - diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagCustomerSceneMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagCustomerSceneMapper.xml old mode 100755 new mode 100644 similarity index 83% rename from easywecom-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagCustomerSceneMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagCustomerSceneMapper.xml index e1497ee..ee1d48e --- a/easywecom-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagCustomerSceneMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagCustomerSceneMapper.xml @@ -1,8 +1,8 @@ - + - + @@ -10,15 +10,15 @@ - + - + select="com.easyink.wecom.mapper.autotag.WeAutoTagCustomerSceneTagRelMapper.listTagListByCustomerSceneId"> diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagCustomerSceneTagRelMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagCustomerSceneTagRelMapper.xml old mode 100755 new mode 100644 similarity index 87% rename from easywecom-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagCustomerSceneTagRelMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagCustomerSceneTagRelMapper.xml index e1d01e1..f1b77a9 --- a/easywecom-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagCustomerSceneTagRelMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagCustomerSceneTagRelMapper.xml @@ -1,8 +1,8 @@ - + - @@ -32,14 +32,14 @@ LEFT JOIN we_tag wt ON wt.tag_id = cstr.tag_id AND wt.corp_id = #{corpId} WHERE cstr.rule_id = #{ruleId} - SELECT wt.tag_id, wt.name AS tag_name FROM we_auto_tag_customer_scene_tag_rel cstr LEFT JOIN we_tag wt ON wt.tag_id = cstr.tag_id AND wt.corp_id = #{corpId} WHERE cstr.customer_scene_id = #{customerSceneId} - SELECT wt.tag_id, wt.name AS tag_name FROM we_auto_tag_customer_scene_tag_rel cstr diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagGroupSceneGroupRelMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagGroupSceneGroupRelMapper.xml old mode 100755 new mode 100644 similarity index 87% rename from easywecom-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagGroupSceneGroupRelMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagGroupSceneGroupRelMapper.xml index 0d30917..505de7e --- a/easywecom-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagGroupSceneGroupRelMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagGroupSceneGroupRelMapper.xml @@ -1,8 +1,8 @@ - + - @@ -26,14 +26,14 @@ on duplicate key update rule_id = values(rule_id),group_scene_id = values(group_scene_id),group_id = values(group_id) - SELECT wg.chat_id, wg.group_name FROM we_auto_tag_group_scene_group_rel gsgr LEFT JOIN we_group wg ON wg.chat_id = gsgr.group_id AND wg.corp_id = #{corpId} WHERE gsgr.group_scene_id = #{groupSceneId} - SELECT gsgr.rule_id, gsgr.group_scene_id FROM we_auto_tag_group_scene_group_rel gsgr LEFT JOIN we_auto_tag_rule r ON r.id = gsgr.rule_id diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagGroupSceneMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagGroupSceneMapper.xml old mode 100755 new mode 100644 similarity index 67% rename from easywecom-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagGroupSceneMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagGroupSceneMapper.xml index 9dcbba6..afddf19 --- a/easywecom-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagGroupSceneMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagGroupSceneMapper.xml @@ -1,22 +1,22 @@ - + - + - + - + select="com.easyink.wecom.mapper.autotag.WeAutoTagGroupSceneGroupRelMapper.listGroupListByGroupSceneId"> - + select="com.easyink.wecom.mapper.autotag.WeAutoTagGroupSceneTagRelMapper.listTagListByGroupSceneId"> diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagGroupSceneTagRelMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagGroupSceneTagRelMapper.xml old mode 100755 new mode 100644 similarity index 84% rename from easywecom-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagGroupSceneTagRelMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagGroupSceneTagRelMapper.xml index b78cafd..3fbaaeb --- a/easywecom-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagGroupSceneTagRelMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagGroupSceneTagRelMapper.xml @@ -1,8 +1,8 @@ - + - @@ -32,14 +32,14 @@ LEFT JOIN we_tag wt ON wt.tag_id = gstr.tag_id AND wt.corp_id = #{corpId} WHERE gstr.rule_id = #{ruleId} - SELECT wt.tag_id, wt.`name` AS tag_name FROM we_auto_tag_group_scene_tag_rel gstr LEFT JOIN we_tag wt ON wt.tag_id = gstr.tag_id AND wt.corp_id = #{corpId} WHERE gstr.group_scene_id = #{groupSceneId} - SELECT wt.tag_id, wt.`name` AS tag_name FROM we_auto_tag_group_scene_tag_rel gstr diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagKeywordMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagKeywordMapper.xml old mode 100755 new mode 100644 similarity index 80% rename from easywecom-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagKeywordMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagKeywordMapper.xml index e8e66ef..061546e --- a/easywecom-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagKeywordMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagKeywordMapper.xml @@ -1,8 +1,8 @@ - + - + @@ -29,13 +29,13 @@ diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagKeywordTagRelMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagKeywordTagRelMapper.xml old mode 100755 new mode 100644 similarity index 84% rename from easywecom-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagKeywordTagRelMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagKeywordTagRelMapper.xml index 4c893d3..9720522 --- a/easywecom-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagKeywordTagRelMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagKeywordTagRelMapper.xml @@ -1,8 +1,8 @@ - + - + @@ -25,7 +25,7 @@ on duplicate key update rule_id = values(rule_id),tag_id = values(tag_id) - SELECT wt.tag_id, wt.`name` AS tag_name FROM we_auto_tag_keyword_tag_rel ktr diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagRuleHitCustomerRecordMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagRuleHitCustomerRecordMapper.xml old mode 100755 new mode 100644 similarity index 90% rename from easywecom-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagRuleHitCustomerRecordMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagRuleHitCustomerRecordMapper.xml index 6728bc8..8aec956 --- a/easywecom-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagRuleHitCustomerRecordMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagRuleHitCustomerRecordMapper.xml @@ -1,8 +1,8 @@ - + - @@ -12,7 +12,7 @@ - @@ -24,7 +24,7 @@ + select="com.easyink.wecom.mapper.autotag.WeAutoTagRuleHitCustomerRecordTagRelMapper.listDistinctTagNameList"> diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagRuleHitCustomerRecordTagRelMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagRuleHitCustomerRecordTagRelMapper.xml old mode 100755 new mode 100644 similarity index 90% rename from easywecom-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagRuleHitCustomerRecordTagRelMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagRuleHitCustomerRecordTagRelMapper.xml index 79752d0..917d8dc --- a/easywecom-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagRuleHitCustomerRecordTagRelMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagRuleHitCustomerRecordTagRelMapper.xml @@ -1,8 +1,8 @@ - + - diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagRuleHitGroupRecordMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagRuleHitGroupRecordMapper.xml old mode 100755 new mode 100644 similarity index 90% rename from easywecom-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagRuleHitGroupRecordMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagRuleHitGroupRecordMapper.xml index 396bbc5..7dae5d6 --- a/easywecom-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagRuleHitGroupRecordMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagRuleHitGroupRecordMapper.xml @@ -1,8 +1,8 @@ - + - @@ -12,7 +12,7 @@ - @@ -25,7 +25,7 @@ + select="com.easyink.wecom.mapper.autotag.WeAutoTagRuleHitGroupRecordTagRelMapper.listDistinctTagNameList"> diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagRuleHitGroupRecordTagRelMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagRuleHitGroupRecordTagRelMapper.xml old mode 100755 new mode 100644 similarity index 90% rename from easywecom-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagRuleHitGroupRecordTagRelMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagRuleHitGroupRecordTagRelMapper.xml index ce541a1..68a53a6 --- a/easywecom-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagRuleHitGroupRecordTagRelMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagRuleHitGroupRecordTagRelMapper.xml @@ -1,8 +1,8 @@ - + - diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagRuleHitKeywordRecordMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagRuleHitKeywordRecordMapper.xml old mode 100755 new mode 100644 similarity index 90% rename from easywecom-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagRuleHitKeywordRecordMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagRuleHitKeywordRecordMapper.xml index 5d863d6..506e553 --- a/easywecom-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagRuleHitKeywordRecordMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagRuleHitKeywordRecordMapper.xml @@ -1,8 +1,8 @@ - + - @@ -14,7 +14,7 @@ - @@ -26,7 +26,7 @@ + select="com.easyink.wecom.mapper.autotag.WeAutoTagRuleHitKeywordRecordTagRelMapper.listDistinctTagNameList"> @@ -83,7 +83,7 @@ ORDER BY hkr.hit_time DESC diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagUserRelMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagUserRelMapper.xml old mode 100755 new mode 100644 similarity index 81% rename from easywecom-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagUserRelMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagUserRelMapper.xml index 7a53332..638f04c --- a/easywecom-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagUserRelMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/autotag/WeAutoTagUserRelMapper.xml @@ -1,8 +1,8 @@ - + - + @@ -28,15 +28,15 @@ - SELECT wu.user_id, wu.user_name, wd.name AS main_department_name @@ -44,18 +44,18 @@ LEFT JOIN we_user wu ON wu.user_id = ur.target_id AND wu.corp_id = #{corpId} LEFT JOIN we_department wd ON wd.id = wu.main_department AND wd.corp_id = wu.corp_id WHERE ur.rule_id = #{ruleId} - AND ur.type = ${@com.easywecom.common.constant.WeConstans@AUTO_TAG_ADD_USER_TYPE} + AND ur.type = ${@com.easyink.common.constant.WeConstans@AUTO_TAG_ADD_USER_TYPE} + + - SELECT wmt.id ,wmt.corp_id @@ -55,14 +55,14 @@ - + - + - SELECT SUM(IF(wmtr.publish_status = 0,1,0)) as notPublishNum ,SUM(IF(wmtr.publish_status = 1,1,0)) as publishNum diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/moment/WeMomentUserCustomerRelMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/moment/WeMomentUserCustomerRelMapper.xml old mode 100755 new mode 100644 similarity index 89% rename from easywecom-wecom/src/main/resources/mapper/wecom/moment/WeMomentUserCustomerRelMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/moment/WeMomentUserCustomerRelMapper.xml index 7bdfe92..3d0db89 --- a/easywecom-wecom/src/main/resources/mapper/wecom/moment/WeMomentUserCustomerRelMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/moment/WeMomentUserCustomerRelMapper.xml @@ -1,7 +1,7 @@ - + moment_task_id diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/radar/WeRadarChannelMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/radar/WeRadarChannelMapper.xml similarity index 90% rename from easywecom-wecom/src/main/resources/mapper/wecom/radar/WeRadarChannelMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/radar/WeRadarChannelMapper.xml index 9287a9e..8e15370 100644 --- a/easywecom-wecom/src/main/resources/mapper/wecom/radar/WeRadarChannelMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/radar/WeRadarChannelMapper.xml @@ -2,9 +2,9 @@ - + - + diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/radar/WeRadarClickRecordMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/radar/WeRadarClickRecordMapper.xml similarity index 87% rename from easywecom-wecom/src/main/resources/mapper/wecom/radar/WeRadarClickRecordMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/radar/WeRadarClickRecordMapper.xml index a773484..23fdb0f 100644 --- a/easywecom-wecom/src/main/resources/mapper/wecom/radar/WeRadarClickRecordMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/radar/WeRadarClickRecordMapper.xml @@ -2,9 +2,9 @@ - + - + @@ -42,7 +42,7 @@ and create_date = #{nowDate} ) as nowadaysClick on sumClick.radar_id = nowadaysClick.radar_id - SELECT COUNT(DISTINCT external_user_id) as `clickPersonNum`, COUNT(id) as `sumClickNum`, @@ -54,7 +54,7 @@ GROUP BY create_date - SELECT COUNT(DISTINCT external_user_id) clickNum, `channel_name` channelName FROM we_radar_click_record @@ -62,7 +62,7 @@ group by channelName order by clickNum desc - SELECT external_user_id externalId, external_user_name `customerName`, COUNT(id) clickNum, @@ -93,7 +93,7 @@ ORDER BY clickTime desc - SELECT channel_name `channelName`, COUNT(id) clickNum, COUNT(DISTINCT channel_name) clickPersonNum @@ -103,9 +103,10 @@ AND channel_name like concat('%', #{channelRecord.channelName}, '%') group by `channelName` + order by clickNum desc - SELECT tag_id FROM diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/redeemcode/WeRedeemCodeActivityMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/redeemcode/WeRedeemCodeActivityMapper.xml similarity index 85% rename from easywecom-wecom/src/main/resources/mapper/wecom/redeemcode/WeRedeemCodeActivityMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/redeemcode/WeRedeemCodeActivityMapper.xml index 65455c8..850ae71 100644 --- a/easywecom-wecom/src/main/resources/mapper/wecom/redeemcode/WeRedeemCodeActivityMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/redeemcode/WeRedeemCodeActivityMapper.xml @@ -2,7 +2,7 @@ - + INSERT INTO we_redeem_code_alarm_employee_rel (activity_id,target_id,type) @@ -18,7 +18,7 @@ update we_redeem_code_activity - SET del_flag = ${@com.easywecom.common.constant.WeConstans@WE_CUSTOMER_MSG_RESULT_DEFALE} + SET del_flag = ${@com.easyink.common.constant.WeConstans@WE_CUSTOMER_MSG_RESULT_DEFALE} where corp_id = #{corpId} AND id IN @@ -39,7 +39,7 @@ - @@ -61,16 +61,16 @@ SELECT count(receive_user_id) remainInventory FROM we_redeem_code WHERE activity_id = #{activityId} - and status = ${@com.easywecom.common.enums.redeemcode.RedeemCodeStatusEnum@NOT_ASSIGN.getType()} + and status = ${@com.easyink.common.enums.redeemcode.RedeemCodeStatusEnum@NOT_ASSIGN.getType()} SELECT user_name FROM sys_user WHERE user_id = #{userId} - SELECT wrcaer.activity_id, wrcaer.target_id, wu.user_name businessName, diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/redeemcode/WeRedeemCodeMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/redeemcode/WeRedeemCodeMapper.xml similarity index 88% rename from easywecom-wecom/src/main/resources/mapper/wecom/redeemcode/WeRedeemCodeMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/redeemcode/WeRedeemCodeMapper.xml index a71fba1..f8d6938 100644 --- a/easywecom-wecom/src/main/resources/mapper/wecom/redeemcode/WeRedeemCodeMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/redeemcode/WeRedeemCodeMapper.xml @@ -2,9 +2,9 @@ - + - + @@ -16,7 +16,7 @@ - + @@ -102,7 +102,7 @@ ORDER BY `status` ASC, redeem_time desc - SELECT code, status, effective_time, @@ -133,15 +133,15 @@ ON wrc.activity_id = wrca.id AND wrca.corp_id = #{corpId} AND (wrca.end_time >= #{effectiveTime} OR wrca.end_time = - ${@com.easywecom.common.constant.redeemcode.RedeemCodeConstants@REDEEM_CODE_EMPTY_TIME}) + ${@com.easyink.common.constant.redeemcode.RedeemCodeConstants@REDEEM_CODE_EMPTY_TIME}) WHERE wrc.activity_id = #{activityId} - and status = ${@com.easywecom.common.enums.redeemcode.RedeemCodeStatusEnum@NOT_ASSIGN.getType()} + and status = ${@com.easyink.common.enums.redeemcode.RedeemCodeStatusEnum@NOT_ASSIGN.getType()} AND (wrc.effective_time = ]]> #{effectiveTime} OR wrc.effective_time = - ${@com.easywecom.common.constant.redeemcode.RedeemCodeConstants@REDEEM_CODE_EMPTY_TIME}) + ${@com.easyink.common.constant.redeemcode.RedeemCodeConstants@REDEEM_CODE_EMPTY_TIME}) order by wrc.effective_time LIMIT 1 - select activity_id, code, status, effective_time, receive_user_id, effective_time, redeem_time from we_redeem_code where activity_id = #{id} diff --git a/easywecom-wecom/src/main/resources/mapper/wecom/weopen/WeOpenConfigMapper.xml b/easyink-wecom/src/main/resources/mapper/wecom/weopen/WeOpenConfigMapper.xml similarity index 97% rename from easywecom-wecom/src/main/resources/mapper/wecom/weopen/WeOpenConfigMapper.xml rename to easyink-wecom/src/main/resources/mapper/wecom/weopen/WeOpenConfigMapper.xml index 21d80a6..6a9bbd1 100644 --- a/easywecom-wecom/src/main/resources/mapper/wecom/weopen/WeOpenConfigMapper.xml +++ b/easyink-wecom/src/main/resources/mapper/wecom/weopen/WeOpenConfigMapper.xml @@ -3,7 +3,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - + diff --git a/pom.xml b/pom.xml index c591daf..fd45b57 100755 --- a/pom.xml +++ b/pom.xml @@ -4,16 +4,16 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - com.easywecom - easywecom + com.easyink + easyink 3.1.0 - easywecom + easyink 企业微信管理系统 2.3.7.RELEASE - 3.1.0 + 3.1.0 UTF-8 UTF-8 1.8 @@ -22,7 +22,7 @@ 1.19 2.3.2 1.3.0 - 1.2.73 + 1.2.83 3.9.1 2.5 1.3.3 @@ -179,31 +179,31 @@ - com.easywecom - easywecom-quartz - ${easywecom.version} + com.easyink + easyink-quartz + ${easyink.version} - com.easywecom - easywecom-framework - ${easywecom.version} + com.easyink + easyink-framework + ${easyink.version} - com.easywecom - easywecom-common - ${easywecom.version} + com.easyink + easyink-common + ${easyink.version} - com.easywecom - easywecom-wecom - ${easywecom.version} + com.easyink + easyink-wecom + ${easyink.version} @@ -280,11 +280,11 @@ - easywecom-admin - easywecom-framework - easywecom-quartz - easywecom-common - easywecom-wecom + easyink-admin + easyink-framework + easyink-quartz + easyink-common + easyink-wecom pom diff --git a/sql/init/easyink.sql b/sql/init/easyink.sql new file mode 100644 index 0000000..de704c1 --- /dev/null +++ b/sql/init/easyink.sql @@ -0,0 +1,3420 @@ +/* + Navicat Premium Data Transfer + + Source Server : wecom_scrm_test + Source Server Type : MySQL + Source Server Version : 50735 + Source Host : localhost:9999 + Source Schema : wecomscrm + + Target Server Type : MySQL + Target Server Version : 50735 + File Encoding : 65001 + + Date: 09/08/2021 22:01:10 +*/ + +SET NAMES utf8mb4; +SET +FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for sys_config +-- ---------------------------- +DROP TABLE IF EXISTS `sys_config`; +CREATE TABLE `sys_config` +( + `config_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '参数主键', + `config_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '参数名称', + `config_key` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '参数键名', + `config_value` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '参数键值', + `config_type` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT 'N' COMMENT '系统内置(Y是 N否)', + `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`config_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '参数配置表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of sys_config +-- ---------------------------- +INSERT INTO `sys_config` +VALUES (1, '主框架页-默认皮肤样式名称', 'sys.index.skinName', 'skin-blue', 'Y', 'admin', '2018-03-16 11:33:00', 'ry', + '2018-03-16 11:33:00', '蓝色 skin-blue、绿色 skin-green、紫色 skin-purple、红色 skin-red、黄色 skin-yellow'); +INSERT INTO `sys_config` +VALUES (2, '用户管理-账号初始密码', 'sys.user.initPassword', 'easyink2021', 'Y', 'admin', '2018-03-16 11:33:00', 'ry', + '2018-03-16 11:33:00', '初始化密码 easyink2021'); +INSERT INTO `sys_config` +VALUES (3, '主框架页-侧边栏主题', 'sys.index.sideTheme', 'theme-dark', 'Y', 'admin', '2018-03-16 11:33:00', 'ry', + '2018-03-16 11:33:00', '深色主题theme-dark,浅色主题theme-light'); + +-- ---------------------------- +-- Table structure for sys_dept +-- ---------------------------- +DROP TABLE IF EXISTS `sys_dept`; +CREATE TABLE `sys_dept` +( + `dept_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '部门id', + `parent_id` bigint(20) NULL DEFAULT 0 COMMENT '父部门id', + `ancestors` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '祖级列表', + `dept_name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '部门名称', + `order_num` int(11) NULL DEFAULT 0 COMMENT '显示顺序', + `leader` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '负责人', + `phone` varchar(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '联系电话', + `email` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '邮箱', + `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '部门状态(0正常 1停用)', + `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)', + `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`dept_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 103 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '部门表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of sys_dept +-- ---------------------------- +INSERT INTO `sys_dept` +VALUES (100, 0, '0', 'EasyInk', 0, 'EasyInk', '', '', '0', '0', 'admin', '2018-03-16 11:33:00', 'admin', + '2021-08-09 20:34:24'); +INSERT INTO `sys_dept` +VALUES (101, 100, '0,100', '总经理办公室', 1, 'admin', NULL, NULL, '0', '0', 'admin', '2021-08-09 20:33:52', '', NULL); +INSERT INTO `sys_dept` +VALUES (102, 100, '0,100', '研发部', 2, 'depart', NULL, NULL, '0', '0', 'admin', '2021-08-09 20:34:10', 'admin', + '2021-08-09 20:34:24'); + +-- ---------------------------- +-- Table structure for sys_dict_data +-- ---------------------------- +DROP TABLE IF EXISTS `sys_dict_data`; +CREATE TABLE `sys_dict_data` +( + `dict_code` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '字典编码', + `dict_sort` int(11) NULL DEFAULT 0 COMMENT '字典排序', + `dict_label` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '字典标签', + `dict_value` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '字典键值', + `dict_type` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '字典类型', + `css_class` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '样式属性(其他样式扩展)', + `list_class` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '表格回显样式', + `is_default` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT 'N' COMMENT '是否默认(Y是 N否)', + `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '状态(0正常 1停用)', + `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`dict_code`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 29 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '字典数据表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of sys_dict_data +-- ---------------------------- +INSERT INTO `sys_dict_data` +VALUES (1, 1, '男', '0', 'sys_user_sex', '', '', 'Y', '0', 'admin', '2018-03-16 11:33:00', 'ry', '2018-03-16 11:33:00', + '性别男'); +INSERT INTO `sys_dict_data` +VALUES (2, 2, '女', '1', 'sys_user_sex', '', '', 'N', '0', 'admin', '2018-03-16 11:33:00', 'ry', '2018-03-16 11:33:00', + '性别女'); +INSERT INTO `sys_dict_data` +VALUES (3, 3, '未知', '2', 'sys_user_sex', '', '', 'N', '0', 'admin', '2018-03-16 11:33:00', 'ry', '2018-03-16 11:33:00', + '性别未知'); +INSERT INTO `sys_dict_data` +VALUES (4, 1, '显示', '0', 'sys_show_hide', '', 'primary', 'Y', '0', 'admin', '2018-03-16 11:33:00', 'ry', + '2018-03-16 11:33:00', '显示菜单'); +INSERT INTO `sys_dict_data` +VALUES (5, 2, '隐藏', '1', 'sys_show_hide', '', 'danger', 'N', '0', 'admin', '2018-03-16 11:33:00', 'ry', + '2018-03-16 11:33:00', '隐藏菜单'); +INSERT INTO `sys_dict_data` +VALUES (6, 1, '正常', '0', 'sys_normal_disable', '', 'primary', 'Y', '0', 'admin', '2018-03-16 11:33:00', 'ry', + '2018-03-16 11:33:00', '正常状态'); +INSERT INTO `sys_dict_data` +VALUES (7, 2, '停用', '1', 'sys_normal_disable', '', 'danger', 'N', '0', 'admin', '2018-03-16 11:33:00', 'ry', + '2018-03-16 11:33:00', '停用状态'); +INSERT INTO `sys_dict_data` +VALUES (8, 1, '正常', '0', 'sys_job_status', '', 'primary', 'Y', '0', 'admin', '2018-03-16 11:33:00', 'ry', + '2018-03-16 11:33:00', '正常状态'); +INSERT INTO `sys_dict_data` +VALUES (9, 2, '暂停', '1', 'sys_job_status', '', 'danger', 'N', '0', 'admin', '2018-03-16 11:33:00', 'ry', + '2018-03-16 11:33:00', '停用状态'); +INSERT INTO `sys_dict_data` +VALUES (10, 1, '默认', 'DEFAULT', 'sys_job_group', '', '', 'Y', '0', 'admin', '2018-03-16 11:33:00', 'ry', + '2018-03-16 11:33:00', '默认分组'); +INSERT INTO `sys_dict_data` +VALUES (11, 2, '系统', 'SYSTEM', 'sys_job_group', '', '', 'N', '0', 'admin', '2018-03-16 11:33:00', 'ry', + '2018-03-16 11:33:00', '系统分组'); +INSERT INTO `sys_dict_data` +VALUES (12, 1, '是', 'Y', 'sys_yes_no', '', 'primary', 'Y', '0', 'admin', '2018-03-16 11:33:00', 'ry', + '2018-03-16 11:33:00', '系统默认是'); +INSERT INTO `sys_dict_data` +VALUES (13, 2, '否', 'N', 'sys_yes_no', '', 'danger', 'N', '0', 'admin', '2018-03-16 11:33:00', 'ry', + '2018-03-16 11:33:00', '系统默认否'); +INSERT INTO `sys_dict_data` +VALUES (14, 1, '通知', '1', 'sys_notice_type', '', 'warning', 'Y', '0', 'admin', '2018-03-16 11:33:00', 'ry', + '2018-03-16 11:33:00', '通知'); +INSERT INTO `sys_dict_data` +VALUES (15, 2, '公告', '2', 'sys_notice_type', '', 'success', 'N', '0', 'admin', '2018-03-16 11:33:00', 'ry', + '2018-03-16 11:33:00', '公告'); +INSERT INTO `sys_dict_data` +VALUES (16, 1, '正常', '0', 'sys_notice_status', '', 'primary', 'Y', '0', 'admin', '2018-03-16 11:33:00', 'ry', + '2018-03-16 11:33:00', '正常状态'); +INSERT INTO `sys_dict_data` +VALUES (17, 2, '关闭', '1', 'sys_notice_status', '', 'danger', 'N', '0', 'admin', '2018-03-16 11:33:00', 'ry', + '2018-03-16 11:33:00', '关闭状态'); +INSERT INTO `sys_dict_data` +VALUES (18, 1, '新增', '1', 'sys_oper_type', '', 'info', 'N', '0', 'admin', '2018-03-16 11:33:00', 'ry', + '2018-03-16 11:33:00', '新增操作'); +INSERT INTO `sys_dict_data` +VALUES (19, 2, '修改', '2', 'sys_oper_type', '', 'info', 'N', '0', 'admin', '2018-03-16 11:33:00', 'ry', + '2018-03-16 11:33:00', '修改操作'); +INSERT INTO `sys_dict_data` +VALUES (20, 3, '删除', '3', 'sys_oper_type', '', 'danger', 'N', '0', 'admin', '2018-03-16 11:33:00', 'ry', + '2018-03-16 11:33:00', '删除操作'); +INSERT INTO `sys_dict_data` +VALUES (21, 4, '授权', '4', 'sys_oper_type', '', 'primary', 'N', '0', 'admin', '2018-03-16 11:33:00', 'ry', + '2018-03-16 11:33:00', '授权操作'); +INSERT INTO `sys_dict_data` +VALUES (22, 5, '导出', '5', 'sys_oper_type', '', 'warning', 'N', '0', 'admin', '2018-03-16 11:33:00', 'ry', + '2018-03-16 11:33:00', '导出操作'); +INSERT INTO `sys_dict_data` +VALUES (23, 6, '导入', '6', 'sys_oper_type', '', 'warning', 'N', '0', 'admin', '2018-03-16 11:33:00', 'ry', + '2018-03-16 11:33:00', '导入操作'); +INSERT INTO `sys_dict_data` +VALUES (24, 7, '强退', '7', 'sys_oper_type', '', 'danger', 'N', '0', 'admin', '2018-03-16 11:33:00', 'ry', + '2018-03-16 11:33:00', '强退操作'); +INSERT INTO `sys_dict_data` +VALUES (25, 8, '生成代码', '8', 'sys_oper_type', '', 'warning', 'N', '0', 'admin', '2018-03-16 11:33:00', 'ry', + '2018-03-16 11:33:00', '生成操作'); +INSERT INTO `sys_dict_data` +VALUES (26, 9, '清空数据', '9', 'sys_oper_type', '', 'danger', 'N', '0', 'admin', '2018-03-16 11:33:00', 'ry', + '2018-03-16 11:33:00', '清空操作'); +INSERT INTO `sys_dict_data` +VALUES (27, 1, '成功', '0', 'sys_common_status', '', 'primary', 'N', '0', 'admin', '2018-03-16 11:33:00', 'ry', + '2018-03-16 11:33:00', '正常状态'); +INSERT INTO `sys_dict_data` +VALUES (28, 2, '失败', '1', 'sys_common_status', '', 'danger', 'N', '0', 'admin', '2018-03-16 11:33:00', 'ry', + '2018-03-16 11:33:00', '停用状态'); + +-- ---------------------------- +-- Table structure for sys_dict_type +-- ---------------------------- +DROP TABLE IF EXISTS `sys_dict_type`; +CREATE TABLE `sys_dict_type` +( + `dict_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '字典主键', + `dict_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '字典名称', + `dict_type` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '字典类型', + `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '状态(0正常 1停用)', + `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`dict_id`) USING BTREE, + UNIQUE INDEX `dict_type`(`dict_type`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 11 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '字典类型表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of sys_dict_type +-- ---------------------------- +INSERT INTO `sys_dict_type` +VALUES (1, '用户性别', 'sys_user_sex', '0', 'admin', '2018-03-16 11:33:00', 'ry', '2018-03-16 11:33:00', '用户性别列表'); +INSERT INTO `sys_dict_type` +VALUES (2, '菜单状态', 'sys_show_hide', '0', 'admin', '2018-03-16 11:33:00', 'ry', '2018-03-16 11:33:00', '菜单状态列表'); +INSERT INTO `sys_dict_type` +VALUES (3, '系统开关', 'sys_normal_disable', '0', 'admin', '2018-03-16 11:33:00', 'ry', '2018-03-16 11:33:00', '系统开关列表'); +INSERT INTO `sys_dict_type` +VALUES (4, '任务状态', 'sys_job_status', '0', 'admin', '2018-03-16 11:33:00', 'ry', '2018-03-16 11:33:00', '任务状态列表'); +INSERT INTO `sys_dict_type` +VALUES (5, '任务分组', 'sys_job_group', '0', 'admin', '2018-03-16 11:33:00', 'ry', '2018-03-16 11:33:00', '任务分组列表'); +INSERT INTO `sys_dict_type` +VALUES (6, '系统是否', 'sys_yes_no', '0', 'admin', '2018-03-16 11:33:00', 'ry', '2018-03-16 11:33:00', '系统是否列表'); +INSERT INTO `sys_dict_type` +VALUES (7, '通知类型', 'sys_notice_type', '0', 'admin', '2018-03-16 11:33:00', 'ry', '2018-03-16 11:33:00', '通知类型列表'); +INSERT INTO `sys_dict_type` +VALUES (8, '通知状态', 'sys_notice_status', '0', 'admin', '2018-03-16 11:33:00', 'ry', '2018-03-16 11:33:00', '通知状态列表'); +INSERT INTO `sys_dict_type` +VALUES (9, '操作类型', 'sys_oper_type', '0', 'admin', '2018-03-16 11:33:00', 'ry', '2018-03-16 11:33:00', '操作类型列表'); +INSERT INTO `sys_dict_type` +VALUES (10, '系统状态', 'sys_common_status', '0', 'admin', '2018-03-16 11:33:00', 'ry', '2018-03-16 11:33:00', '登录状态列表'); + +-- ---------------------------- +-- Table structure for sys_job +-- ---------------------------- +DROP TABLE IF EXISTS `sys_job`; +CREATE TABLE `sys_job` +( + `job_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '任务ID', + `job_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '任务名称', + `job_group` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT 'DEFAULT' COMMENT '任务组名', + `invoke_target` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '调用目标字符串', + `cron_expression` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT 'cron执行表达式', + `misfire_policy` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '3' COMMENT '计划执行错误策略(1立即执行 2执行一次 3放弃执行)', + `concurrent` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '1' COMMENT '是否并发执行(0允许 1禁止)', + `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '状态(0正常 1暂停)', + `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注信息', + PRIMARY KEY (`job_id`, `job_name`, `job_group`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 14 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '定时任务调度表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of sys_job +-- ---------------------------- +INSERT INTO `sys_job` +VALUES (4, '会话存档', 'SYSTEM', 'ryTask.FinanceTask', '0 */2 * * * ?', '3', '1', '0', 'admin', '2020-12-13 12:14:38', + 'admin', '2021-07-30 15:23:08', ''); +INSERT INTO `sys_job` +VALUES (6, '定时消息群发', 'SYSTEM', 'ryTask.messageTask', '0 */2 * * * ?', '1', '1', '0', 'admin', '2021-02-10 10:07:22', + 'admin', '2021-07-27 09:09:55', ''); +INSERT INTO `sys_job` +VALUES (7, '联系客户统计数据拉取', 'SYSTEM', 'UserBehaviorDataTak.getUserBehaviorData()', '0 0 2 * * ?', '1', '1', '0', 'admin', + '2021-02-25 16:47:59', 'admin', '2021-02-25 23:45:03', ''); +INSERT INTO `sys_job` +VALUES (8, '群聊数据统计数据拉取', 'SYSTEM', 'GroupChatStatisticTask.getGroupChatData()', '0 0 2 * * ? ', '1', '1', '0', 'admin', + '2021-02-25 16:49:44', '', '2021-02-25 23:45:05', ''); +INSERT INTO `sys_job` +VALUES (9, '首页数据统计', 'SYSTEM', 'PageHomeDataTask.getPageHomeDataData()', '0 0 3 * * ? ', '1', '1', '0', 'admin', + '2021-02-25 16:52:23', '', '2021-02-25 23:45:07', ''); +INSERT INTO `sys_job` +VALUES (10, '删除过期素材', 'SYSTEM', 'RemoveMaterialTask.removeExpireMaterial()', '0 0 4 * * ? ', '1', '1', '0', 'admin', + '2021-10-13 00:00:00', 'admin', '2021-10-13 00:00:00', ''); +INSERT INTO `sys_job` +VALUES (11, '通过好友的开启关闭时间检测', 'SYSTEM', 'EmpleCodeThroughFriendTimeSwitchTask.empleCodeThroughFriendTimeSwitch()', + '0 * * * * ? ', '1', '1', '0', 'admin', '2021-11-03 00:00:00', 'admin', '2021-11-03 00:00:00', ''); +INSERT INTO `sys_job` +VALUES (12, '定时检查客户群活码', 'SYSTEM', 'GroupCodeActualTimeTask.findExpireCode()', '0 0 10 * * ? *', '1', '1', '0', 'admin', + '2021-11-8 00:00:00', 'admin', '2021-11-8 00:00:00', ''); +INSERT INTO `sys_job` +VALUES (13, '定时拉取群发未发送消息结果', 'SYSTEM', 'MessageResultTask.asyncSendResult()', '0 0/2 * * * ? ', '1', '1', '0', 'admin', + '2021-11-16 00:00:00', 'admin', '2021-11-16 00:00:00', ''); +INSERT INTO `sys_job` +VALUES (14, '待办事项提醒任务', 'SYSTEM', 'todoReminderTask.execute', '0 */5 * * * ?', '1', '1', '0', 'admin', + '2021-11-19 16:06:51', 'admin', '2021-11-19 16:19:19', ''); +INSERT INTO `sys_job` +VALUES (15, '运营中心SOP任务', 'SYSTEM', 'weOperationsCenterSopTask.execute', '0 * * * * ?', '1', '1', '0', 'admin', + '2021-12-03 00:00:00', 'admin', '2021-12-03 00:00:00', ''); +INSERT INTO `sys_job` +VALUES (16, '更新离职员工客户接替结果任务', 'SYSTEM', 'transferResignedResultTask.execute', '0 /10 * * * ? *', '1', '1', '0', + 'admin', '2021-12-08 14:43:11', '', '2021-12-08 14:43:17', ''); +INSERT INTO `sys_job` +VALUES (17, '更新企业朋友圈创建结果', 'SYSTEM', 'momentUpdateCreatedStatusTask.updateMomentTaskStatus()', '0/10 * * * * ? ', '1', + '1', '0', + 'admin', '2022-1-11 14:43:11', '', '2022-1-11 14:43:11', ''); +INSERT INTO `sys_job` +VALUES (18, '更新企业朋友圈执行结果', 'SYSTEM', 'momentPublishStatusTask.updateMomentPublishStatus()', '0 0/30 * * * ? *', '1', + '1', '0', + 'admin', '2022-1-12 14:43:11', '', '2022-1-12 14:43:11', ''); +INSERT INTO `sys_job` +VALUES (19, '发送定时朋友圈任务', 'SYSTEM', 'momentStartCreateTask.createMoment()', '0 0/2 * * * ? *', '1', '1', '0', + 'admin', '2022-1-12 14:43:11', '', '2022-1-12 14:43:11', ''); + +INSERT INTO `sys_job` +VALUES (20, '定期查询客户分配情况任务', 'SYSTEM', 'transferResultTask.execute', '0 */5 * * * ?', '2', '1', '0', 'admin', + '2021-12-01 18:25:03', 'admin', '2021-12-01 18:25:51', ''); + +-- ---------------------------- +-- Table structure for sys_menu +-- ---------------------------- +DROP TABLE IF EXISTS `sys_menu`; +CREATE TABLE `sys_menu` +( + `menu_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '菜单ID', + `menu_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '菜单名称', + `parent_id` bigint(20) NULL DEFAULT 0 COMMENT '父菜单ID', + `order_num` int(11) NULL DEFAULT 0 COMMENT '显示顺序', + `path` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '路由地址', + `component` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '组件路径', + `is_frame` int(11) NULL DEFAULT 1 COMMENT '是否为外链(0是 1否)', + `menu_type` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '菜单类型(M目录 C菜单 F按钮)', + `visible` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '菜单状态(0显示 1隐藏)', + `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '菜单状态(0正常 1停用)', + `perms` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '权限标识', + `icon` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '#' COMMENT '菜单图标', + `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注', + PRIMARY KEY (`menu_id`) USING BTREE +) ENGINE = InnoDB + AUTO_INCREMENT = 10000 + CHARACTER SET = utf8mb4 + COLLATE = utf8mb4_general_ci COMMENT = '菜单权限表' + ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of sys_menu +-- ---------------------------- +INSERT INTO `sys_menu` +VALUES ('1', '系统设置', '0', '70', 'system', null, '1', 'M', '0', '0', '', 'tree', 'admin', '2018-03-16 11:33:00', 'admin', + '2021-08-04 14:13:51', '系统管理目录'); +INSERT INTO `sys_menu` +VALUES ('2', '系统监控', '0', '90', 'monitor', null, '1', 'M', '0', '0', '', 'monitor', 'admin', '2018-03-16 11:33:00', + 'admin', '2020-10-22 01:22:31', '系统监控目录'); +INSERT INTO `sys_menu` +VALUES ('101', '角色管理', '2283', '6', 'role', 'system/role/index', '1', 'C', '0', '0', 'system:role:list', '#', 'admin', + '2018-03-16 11:33:00', 'admin', '2021-08-25 22:43:01', '角色管理菜单'); +INSERT INTO `sys_menu` +VALUES ('102', '菜单管理', '2283', '11', 'menu', 'system/menu/index', '1', 'C', '0', '0', 'system:menu:list', '#', 'admin', + '2018-03-16 11:33:00', 'admin', '2021-08-27 21:32:15', '菜单管理菜单'); +INSERT INTO `sys_menu` +VALUES ('108', '日志管理', '2', '9', 'log', 'system/log/index', '1', 'M', '0', '0', '', 'log-analyse', 'admin', + '2018-03-16 11:33:00', 'admin', '2022-02-28 11:27:53', '日志管理菜单'); +INSERT INTO `sys_menu` +VALUES ('109', '在线账号', '2284', '1', 'online', 'monitor/online/index', '1', 'C', '0', '0', 'monitor:online:list', '#', + 'admin', '2018-03-16 11:33:00', 'admin', '2021-08-09 17:17:53', '在线用户菜单'); +INSERT INTO `sys_menu` +VALUES ('110', '定时任务', '2284', '2', 'job', 'monitor/job/index', '1', 'C', '0', '0', 'monitor:job:list', '#', 'admin', + '2018-03-16 11:33:00', 'admin', '2021-08-06 15:33:30', '定时任务菜单'); +INSERT INTO `sys_menu` +VALUES ('112', '服务监控', '2284', '4', 'server', 'monitor/server/index', '1', 'C', '0', '0', 'monitor:server:list', '#', + 'admin', '2018-03-16 11:33:00', 'admin', '2021-08-06 15:33:35', '服务监控菜单'); +INSERT INTO `sys_menu` +VALUES ('500', '操作日志', '108', '3', 'operlog', 'monitor/operlog/index', '1', 'C', '0', '0', 'monitor:operlog:list', '#', + 'admin', '2018-03-16 11:33:00', 'admin', '2021-08-09 13:59:07', '操作日志菜单'); +INSERT INTO `sys_menu` +VALUES ('501', '登录日志', '108', '2', 'logininfor', 'monitor/logininfor/index', '1', 'C', '0', '0', + 'monitor:logininfor:list', '#', 'admin', '2018-03-16 11:33:00', 'admin', '2021-08-09 17:18:10', '登录日志菜单'); +INSERT INTO `sys_menu` +VALUES ('1009', '新增角色', '101', '2', '', '', '1', 'F', '0', '0', 'system:role:add', '#', 'admin', '2018-03-16 11:33:00', + 'ry', '2018-03-16 11:33:00', ''); +INSERT INTO `sys_menu` +VALUES ('1010', '编辑角色', '101', '3', '', '', '1', 'F', '0', '0', 'system:role:edit', '#', 'admin', '2018-03-16 11:33:00', + 'ry', '2018-03-16 11:33:00', ''); +INSERT INTO `sys_menu` +VALUES ('1011', '删除角色', '101', '4', '', '', '1', 'F', '0', '0', 'system:role:remove', '#', 'admin', + '2018-03-16 11:33:00', 'ry', '2018-03-16 11:33:00', ''); +INSERT INTO `sys_menu` +VALUES ('1014', '新增', '102', '2', '', '', '1', 'F', '0', '0', 'system:menu:add', '#', 'admin', '2018-03-16 11:33:00', + 'admin', '2021-08-30 11:12:47', ''); +INSERT INTO `sys_menu` +VALUES ('1015', '修改', '102', '3', '', '', '1', 'F', '0', '0', 'system:menu:edit', '#', 'admin', '2018-03-16 11:33:00', + 'admin', '2021-08-30 11:12:56', ''); +INSERT INTO `sys_menu` +VALUES ('1016', '删除', '102', '4', '', '', '1', 'F', '0', '0', 'system:menu:remove', '#', 'admin', '2018-03-16 11:33:00', + 'admin', '2021-08-30 11:13:00', ''); +INSERT INTO `sys_menu` +VALUES ('1018', '新增部门', '2201', '9', '', '', '1', 'F', '0', '0', 'system:dept:add', '#', 'admin', '2018-03-16 11:33:00', + 'admin', '2021-08-26 11:32:52', ''); +INSERT INTO `sys_menu` +VALUES ('1019', '编辑部门', '2201', '10', '', '', '1', 'F', '0', '0', 'system:dept:edit', '#', 'admin', + '2018-03-16 11:33:00', 'admin', '2021-08-26 11:33:02', ''); +INSERT INTO `sys_menu` +VALUES ('1020', '删除部门', '2201', '11', '', '', '1', 'F', '0', '0', 'system:dept:remove', '#', 'admin', + '2018-03-16 11:33:00', 'admin', '2021-08-26 11:33:07', ''); +INSERT INTO `sys_menu` +VALUES ('1041', '删除日志', '500', '2', '#', '', '1', 'F', '0', '0', 'monitor:operlog:remove', '#', 'admin', + '2018-03-16 11:33:00', 'ry', '2018-03-16 11:33:00', ''); +INSERT INTO `sys_menu` +VALUES ('1044', '删除日志', '501', '2', '#', '', '1', 'F', '0', '0', 'monitor:logininfor:remove', '#', 'admin', + '2018-03-16 11:33:00', 'ry', '2018-03-16 11:33:00', ''); +INSERT INTO `sys_menu` +VALUES ('1048', '强制退出', '109', '3', '#', '', '1', 'F', '0', '0', 'monitor:online:forceLogout', '#', 'admin', + '2018-03-16 11:33:00', 'ry', '2018-03-16 11:33:00', ''); +INSERT INTO `sys_menu` +VALUES ('1050', '新增定时任务', '110', '2', '#', '', '1', 'F', '0', '0', 'monitor:job:add', '#', 'admin', + '2018-03-16 11:33:00', 'ry', '2018-03-16 11:33:00', ''); +INSERT INTO `sys_menu` +VALUES ('1051', '编辑定时任务', '110', '3', '#', '', '1', 'F', '0', '0', 'monitor:job:edit', '#', 'admin', + '2018-03-16 11:33:00', 'ry', '2018-03-16 11:33:00', ''); +INSERT INTO `sys_menu` +VALUES ('1052', '删除定时任务', '110', '4', '#', '', '1', 'F', '0', '0', 'monitor:job:remove', '#', 'admin', + '2018-03-16 11:33:00', 'ry', '2018-03-16 11:33:00', ''); +INSERT INTO `sys_menu` +VALUES ('1053', '执行定时任务', '110', '5', '#', '', '1', 'F', '0', '0', 'monitor:job:changeStatus', '#', 'admin', + '2018-03-16 11:33:00', 'ry', '2018-03-16 11:33:00', ''); +INSERT INTO `sys_menu` +VALUES ('1054', '导出定时任务', '110', '7', '#', '', '1', 'F', '0', '0', 'monitor:job:export', '#', 'admin', + '2018-03-16 11:33:00', 'ry', '2018-03-16 11:33:00', ''); +INSERT INTO `sys_menu` +VALUES ('2001', '客户中心', '0', '2', 'customerManage', null, '1', 'M', '0', '0', '', 'customer-manage', 'admin', + '2020-10-20 22:03:52', '王子默', '2021-09-02 21:46:21', ''); +INSERT INTO `sys_menu` +VALUES ('2002', '客户', '2280', '10', 'customer', 'customerManage/customer', '1', 'C', '0', '0', + 'customerManage:customer:list', '#', 'admin', '2020-10-20 22:15:31', 'admin', '2021-08-03 16:41:08', ''); +INSERT INTO `sys_menu` +VALUES ('2003', '客户群', '2280', '20', 'group', 'customerManage/group', '1', 'C', '0', '0', 'customerManage:group:list', + '#', 'admin', '2020-10-20 22:32:55', 'admin', '2021-08-04 14:51:34', ''); +INSERT INTO `sys_menu` +VALUES ('2004', '标签管理', '2280', '30', 'tag', 'customerManage/tag', '1', 'C', '0', '0', 'customerManage:tag:list', '#', + 'admin', '2020-10-20 22:33:45', 'admin', '2021-08-03 16:42:19', ''); +INSERT INTO `sys_menu` +VALUES ('2005', '离职继承', '2179', '40', 'dimission', 'customerManage/dimission/index', '1', 'C', '0', '0', + 'customerManage:dimission:list', '#', 'admin', '2020-10-20 22:34:59', 'admin', '2021-08-06 10:06:15', ''); +INSERT INTO `sys_menu` +VALUES ('2006', '客户详情', '2001', '11', 'customerCenter/customerDetail', 'customerManage/customerDetail', '1', 'P', '1', + '0', + 'customerManage:customerDetail:list', '#', 'admin', '2020-10-20 22:37:06', 'admin', '2021-09-01 22:57:07', ''); +INSERT INTO `sys_menu` +VALUES ('2007', '客户群聊详情', '2001', '21', 'customerCenter/groupDetail', 'customerManage/groupDetail', '1', 'P', '1', '0', + 'customerManage:groupDetail:list', '#', 'admin', '2020-10-20 22:37:59', 'admin', '2021-09-01 22:58:02', ''); +INSERT INTO `sys_menu` +VALUES ('2010', '企微配置', '2283', '7', 'enterpriseWechat', 'enterpriseWechat/list', '1', 'C', '0', '0', + 'system:enterpriseWechat:list', '#', 'admin', '2020-10-20 22:48:05', 'admin', '2021-08-27 21:31:57', ''); +INSERT INTO `sys_menu` +VALUES ('2013', '导出列表', '2002', '2', '', null, '1', 'F', '0', '0', 'customerManage:customer:export', '#', 'admin', + '2020-10-22 18:22:39', '', null, ''); +INSERT INTO `sys_menu` +VALUES ('2014', '打标签', '2002', '3', '', null, '1', 'F', '0', '0', 'customerManage:customer:makeTag', '#', 'admin', + '2020-10-22 18:25:47', '', null, ''); +INSERT INTO `sys_menu` +VALUES ('2015', '移除标签', '2002', '4', '', null, '1', 'F', '0', '0', 'customerManage:customer:removeTag', '#', 'admin', + '2020-10-22 18:26:24', 'admin', '2021-08-09 18:14:24', ''); +INSERT INTO `sys_menu` +VALUES ('2016', '同步客户', '2002', '1', '', null, '1', 'F', '0', '0', 'customerManage:customer:sync', '#', 'admin', + '2020-10-22 18:28:27', 'admin', '2021-08-30 10:55:33', ''); +INSERT INTO `sys_menu` +VALUES ('2020', '同步客户群', '2003', '3', '', null, '1', 'F', '0', '0', 'customerManage:group:sync', '#', 'admin', + '2020-10-22 18:35:13', '', null, ''); +INSERT INTO `sys_menu` +VALUES ('2021', '查看客户群详情', '2003', '4', '', null, '1', 'F', '0', '0', 'customerManage:group:view', '#', 'admin', + '2020-10-22 18:40:52', 'admin', '2021-08-09 19:12:47', ''); +INSERT INTO `sys_menu` +VALUES ('2022', '查看客户详情', '2002', '7', '', null, '1', 'F', '0', '0', 'customerManage:customer:view', '#', 'admin', + '2020-10-22 18:43:41', 'admin', '2021-08-09 18:17:58', ''); +INSERT INTO `sys_menu` +VALUES ('2023', '新建标签组', '2004', '1', '', null, '1', 'F', '0', '0', 'customerManage:tag:add', '#', 'admin', + '2020-10-22 18:46:02', '', null, ''); +INSERT INTO `sys_menu` +VALUES ('2024', '同步标签组', '2004', '2', '', null, '1', 'F', '0', '0', 'customerManage:tag:sync', '#', 'admin', + '2020-10-22 18:46:33', '', null, ''); +INSERT INTO `sys_menu` +VALUES ('2025', '编辑标签组', '2004', '3', '', null, '1', 'F', '0', '0', 'customerManage:tag:edit', '#', 'admin', + '2020-10-22 18:47:00', '', null, ''); +INSERT INTO `sys_menu` +VALUES ('2026', '删除标签组', '2004', '4', '', null, '1', 'F', '0', '0', 'customerManage:tag:remove', '#', 'admin', + '2020-10-22 18:47:20', '', null, ''); +INSERT INTO `sys_menu` +VALUES ('2028', '查看已分配员工', '2179', '2', 'allocatedStaffList', 'customerManage/dimission/allocatedStaffList', '1', 'P', + '1', '0', '', '#', 'admin', '2020-10-22 18:55:40', 'admin', '2021-09-02 15:17:29', ''); +INSERT INTO `sys_menu` +VALUES ('2029', '分配离职员工', '2005', '3', '', null, '1', 'F', '0', '0', 'customerManage:dimission:allocate', '#', 'admin', + '2020-10-22 18:56:28', '', null, ''); +INSERT INTO `sys_menu` +VALUES ('2050', '已分配离职员工', '2005', '41', 'allocatedStaffList', 'customerManage/dimission/allocatedStaffList', '1', 'C', + '1', '0', 'customerManage:dimission:allocatedStaffList', '#', 'admin', '2020-10-28 15:11:17', 'admin', + '2020-12-13 16:25:53', ''); +INSERT INTO `sys_menu` +VALUES ('2051', '查看已分配员工详情', '2179', '3', 'allocatedStaffDetail', 'customerManage/dimission/allocatedStaffDetail', '1', + 'P', '1', '0', '', '#', 'admin', '2020-10-28 15:12:49', 'admin', '2021-09-02 20:31:00', ''); +INSERT INTO `sys_menu` +VALUES ('2052', '引流获客', '2188', '2', 'drainageCode', null, '1', 'M', '0', '0', '', 'huoma-manage', 'admin', + '2020-11-08 12:11:44', 'admin', '2022-02-28 11:02:27', ''); +INSERT INTO `sys_menu` +VALUES ('2053', '员工活码', '2052', '10', 'staff', 'drainageCode/staff/list', '1', 'C', '0', '0', '', '#', 'admin', + '2020-11-08 12:13:21', 'admin', '2021-08-04 15:29:55', ''); +INSERT INTO `sys_menu` +VALUES ('2056', '客户群活码', '2052', '12', 'customerGroup', 'drainageCode/group/list', '1', 'C', '0', '0', '', '#', 'admin', + '2020-11-08 12:26:15', 'admin', '2021-02-22 15:32:34', ''); +INSERT INTO `sys_menu` +VALUES ('2060', '欢迎语', '2052', '45', 'welcome', 'drainageCode/welcome/list', '1', 'C', '0', '0', '', '#', 'admin', + '2020-11-08 12:39:34', 'admin', '2021-11-08 16:43:15', ''); +INSERT INTO `sys_menu` +VALUES ('2062', '内容管理', '2188', '5', 'material', null, '1', 'M', '0', '0', '', 'content-manage', 'admin', + '2020-11-08 12:41:21', 'admin', '2022-02-28 11:14:37', ''); +INSERT INTO `sys_menu` +VALUES ('2071', '添加素材', '2189', '4', '', null, '1', 'F', '0', '0', 'wechat:material:add', '#', 'admin', + '2020-11-08 13:04:22', 'admin', '2021-08-09 18:08:25', ''); +INSERT INTO `sys_menu` +VALUES ('2072', '删除素材', '2189', '6', '', null, '1', 'F', '0', '0', 'wechat:material:remove', '#', 'admin', + '2020-11-08 13:04:57', 'admin', '2021-08-30 11:11:33', ''); +INSERT INTO `sys_menu` +VALUES ('2073', '编辑素材', '2189', '5', '', null, '1', 'F', '0', '0', 'wechat:material:edit', '#', 'admin', + '2020-11-08 13:05:22', 'admin', '2021-08-30 11:11:29', ''); +INSERT INTO `sys_menu` +VALUES ('2074', '编辑客户', '2002', '10', '', null, '1', 'F', '0', '0', 'customerManage:customer:edit', '#', 'admin', + '2020-11-08 15:46:19', 'admin', '2021-08-09 18:17:07', ''); +INSERT INTO `sys_menu` +VALUES ('2076', '发布素材', '2189', '8', '', null, '1', 'F', '0', '0', 'wechat:material:publish', '#', 'admin', + '2020-11-09 11:12:29', 'admin', '2021-08-09 18:09:06', ''); +INSERT INTO `sys_menu` +VALUES ('2079', '企业风控', '0', '8', 'conversation', null, '1', 'M', '0', '0', '', 'chat-archive', 'admin', + '2020-12-07 10:33:45', 'admin', '2021-08-05 15:13:00', ''); +INSERT INTO `sys_menu` +VALUES ('2080', '会话存档', '2282', '10', 'content', 'conversation/content', '1', 'C', '0', '0', '', '#', 'admin', + '2020-12-07 10:35:56', 'admin', '2021-08-05 16:31:57', ''); +INSERT INTO `sys_menu` +VALUES ('2081', '消息审计', '2282', '20', 'security', 'conversation/security', '1', 'C', '0', '0', '', '#', 'admin', + '2020-12-07 10:38:12', 'admin', '2021-08-05 16:32:01', ''); +INSERT INTO `sys_menu` +VALUES ('2082', '流失提醒', '2179', '50', 'lossRemind', 'customerManage/lossRemind', '1', 'C', '0', '0', + 'customerManage:lossRemind', '#', 'admin', '2020-12-13 16:22:25', 'admin', '2020-12-13 16:23:18', ''); +INSERT INTO `sys_menu` +VALUES ('2083', '群发管理', '2188', '20', 'groupMessage', null, '1', 'M', '0', '0', '', 'guide', 'admin', + '2020-12-14 21:40:40', 'admin', '2022-02-28 11:11:08', ''); +INSERT INTO `sys_menu` +VALUES ('2084', '新增群发', '2083', '10', 'add', 'groupMessage/add', '1', 'C', '0', '0', 'customerMessagePush:push:add', + '#', 'admin', '2020-12-14 21:41:38', '王子默', '2021-09-02 22:21:35', ''); +INSERT INTO `sys_menu` +VALUES ('2085', '群发记录', '2083', '20', 'record', 'groupMessage/record', '1', 'C', '0', '0', + 'customerMessagePush:push:list', '#', 'admin', '2020-12-14 21:44:36', 'admin', '2021-02-21 23:16:52', ''); +INSERT INTO `sys_menu` +VALUES ('2086', '设置通知提醒', '2082', '1', 'wechatCorp', 'wechat:corp:startCustomerChurnNoticeSwitch', '1', 'F', '0', '0', + 'wechat:corp:startCustomerChurnNoticeSwitch', 'switch', 'admin', '2020-12-15 01:52:19', 'admin', + '2020-12-15 01:55:07', ''); +INSERT INTO `sys_menu` +VALUES ('2100', '社群管理', '2188', '25', 'communityOperating', null, '1', 'M', '0', '1', '', '#', 'admin', + '2020-12-30 21:27:29', 'admin', '2021-08-09 17:15:03', ''); +INSERT INTO `sys_menu` +VALUES ('2101', '新客进群', '2052', '15', 'newCustomer', 'communityOperating/newCustomer/list', '1', 'C', '0', '0', + 'communityOperating/newCustomer/list', '#', 'admin', '2020-12-30 21:29:50', 'admin', '2021-08-04 16:13:54', ''); +INSERT INTO `sys_menu` +VALUES ('2102', '老客进群', '2052', '30', 'tag', 'communityOperating/oldCustomer/list', '1', 'C', '0', '0', + 'oldCustomer/list', '#', 'admin', '2020-12-30 21:30:31', 'admin', '2021-08-27 21:26:30', ''); +INSERT INTO `sys_menu` +VALUES ('2105', '查看群发详情', '2083', '1', 'detail', 'groupMessage/detail', '1', 'P', '1', '0', '', '#', 'admin', + '2020-12-30 22:35:29', 'admin', '2021-08-30 11:19:12', ''); +INSERT INTO `sys_menu` +VALUES ('2106', '新客拉群增改查', '2052', '20', 'newCustomerAev', 'communityOperating/newCustomer/aev', '1', 'P', '1', '0', + 'communityOperating/newCustomer/aev', '#', 'admin', '2020-12-31 19:36:24', 'admin', '2021-09-02 15:07:45', ''); +INSERT INTO `sys_menu` +VALUES ('2107', '编辑老客进群', '2052', '40', 'oldCustomerAev', 'communityOperating/oldCustomer/aev', '1', 'P', '1', '0', + 'communityOperating/oldCustomer/aev', '#', 'admin', '2020-12-31 19:37:51', 'admin', '2021-09-02 15:08:07', ''); +INSERT INTO `sys_menu` +VALUES ('2120', '同步群发结果', '2085', '3', '', null, '1', 'F', '0', '0', 'customerMessagePush:push:asyncResult', '#', + 'admin', '2021-02-21 23:19:49', 'admin', '2021-08-30 11:09:29', ''); +INSERT INTO `sys_menu` +VALUES ('2124', '查看敏感行为记录', '2081', '5', '', null, '1', 'F', '0', '0', 'wecom:sensitiveact:list', '#', 'WeCome', + '2021-02-22 11:48:41', 'admin', '2021-08-30 11:04:16', ''); +INSERT INTO `sys_menu` +VALUES ('2127', '管理敏感行为', '2081', '6', '', null, '1', 'F', '0', '0', 'wecom:sensitiveact:edit', '#', 'admin', + '2021-02-22 11:50:59', 'admin', '2021-08-30 11:04:26', ''); +INSERT INTO `sys_menu` +VALUES ('2131', '查看敏感消息', '2081', '1', '', null, '1', 'F', '0', '0', 'wecom:sensitive:list', '#', 'admin', + '2021-02-22 15:16:10', 'admin', '2021-08-30 10:56:51', ''); +INSERT INTO `sys_menu` +VALUES ('2133', '添加敏感词', '2081', '2', '', null, '1', 'F', '0', '0', 'wecom:sensitive:add', '#', 'admin', + '2021-02-22 15:16:52', 'admin', '2021-08-30 10:57:02', ''); +INSERT INTO `sys_menu` +VALUES ('2134', '编辑敏感词', '2081', '3', '', null, '1', 'F', '0', '0', 'wecom:sensitive:edit', '#', 'admin', + '2021-02-22 15:17:27', 'admin', '2021-08-30 11:03:50', ''); +INSERT INTO `sys_menu` +VALUES ('2135', '删除敏感词', '2081', '4', '', null, '1', 'F', '0', '0', 'wecom:sensitive:remove', '#', 'admin', + '2021-02-22 15:17:51', 'admin', '2021-08-30 11:04:08', ''); +INSERT INTO `sys_menu` +VALUES ('2138', '查看活码详情', '2053', '7', '', null, '1', 'F', '0', '0', 'wecom:code:query', '#', 'admin', + '2021-02-22 15:35:10', 'admin', '2021-08-30 11:07:25', ''); +INSERT INTO `sys_menu` +VALUES ('2139', '新增员工活码', '2053', '2', '', null, '1', 'F', '0', '0', 'wecom:code:add', '#', 'admin', + '2021-02-22 15:35:29', 'admin', '2021-08-30 11:06:49', ''); +INSERT INTO `sys_menu` +VALUES ('2141', '编辑员工活码', '2053', '6', '', null, '1', 'F', '0', '0', 'wecom:code:edit', '#', 'admin', + '2021-02-22 15:36:17', 'admin', '2021-08-30 11:07:18', ''); +INSERT INTO `sys_menu` +VALUES ('2142', '删除员工活码', '2053', '3', '', null, '1', 'F', '0', '0', 'wecom:code:remove', '#', 'admin', + '2021-02-22 15:36:34', 'admin', '2021-08-30 11:06:58', ''); +INSERT INTO `sys_menu` +VALUES ('2151', '新建群活码', '2056', '1', '', null, '1', 'F', '0', '0', 'wecom:groupCode:add', '#', 'admin', + '2021-02-22 15:42:43', 'admin', '2021-08-30 11:07:41', ''); +INSERT INTO `sys_menu` +VALUES ('2152', '编辑群活码', '2056', '6', '', null, '1', 'F', '0', '0', 'wecom:groupCode:edit', '#', 'admin', + '2021-02-22 15:43:06', '', null, ''); +INSERT INTO `sys_menu` +VALUES ('2153', '删除群活码', '2056', '2', '', null, '1', 'F', '0', '0', 'wecom:groupCode:remove', '#', 'admin', + '2021-02-22 15:43:24', 'admin', '2021-08-30 11:07:47', ''); +INSERT INTO `sys_menu` +VALUES ('2156', '新增好友欢迎语', '2060', '3', '', null, '1', 'F', '0', '0', 'wecom:tlp:add', '#', 'admin', + '2021-02-22 15:44:30', '', null, ''); +INSERT INTO `sys_menu` +VALUES ('2157', '编辑好友欢迎语', '2060', '4', '', null, '1', 'F', '0', '0', 'wecom:tlp:edit', '#', 'admin', + '2021-02-22 15:44:46', '', null, ''); +INSERT INTO `sys_menu` +VALUES ('2158', '删除好友欢迎语', '2060', '5', '', null, '1', 'F', '0', '0', 'wecom:tlp:remove', '#', 'admin', + '2021-02-22 15:45:00', '', null, ''); +INSERT INTO `sys_menu` +VALUES ('2159', '员工活码详情', '2052', '12', 'staffDetail', 'drainageCode/staff/detail', '1', 'P', '1', '0', + 'drainageCode:staff:detail', '#', 'admin', '2021-02-22 16:32:05', 'admin', '2021-09-02 20:36:14', ''); +INSERT INTO `sys_menu` +VALUES ('2160', '新建员工活码', '2052', '11', 'staffAdd', 'drainageCode/staff/add', '1', 'P', '1', '0', + 'drainageCode:staff:add', '#', 'admin', '2021-02-22 16:38:11', 'admin', '2021-09-02 15:04:43', ''); +INSERT INTO `sys_menu` +VALUES ('2163', '新增/修改欢迎语', '2052', '81', 'welcomeAdd', 'drainageCode/welcome/add', '1', 'P', '1', '0', + 'drainageCode:welcome:add', '#', 'admin', '2021-02-22 23:23:40', 'admin', '2021-09-02 15:08:37', ''); +INSERT INTO `sys_menu` +VALUES ('2164', '新建群活码', '2052', '50', 'groupAdd', 'drainageCode/group/add', '1', 'P', '1', '0', + 'drainageCode:group:add', '#', 'admin', '2021-02-23 00:11:41', 'admin', '2021-09-02 15:05:22', ''); +INSERT INTO `sys_menu` +VALUES ('2165', '客户群活码信息', '2052', '60', 'customerGroupDetail', 'drainageCode/group/detail', '1', 'P', '1', '0', + 'drainageCode:group:detail', '#', 'admin', '2021-02-23 00:14:50', 'admin', '2021-09-02 17:53:07', ''); +INSERT INTO `sys_menu` +VALUES ('2166', '客户群信息', '2052', '70', 'groupBaseInfo', 'drainageCode/group/baseInfo', '1', 'P', '1', '0', + 'drainageCode:group:baseInfo', '#', 'admin', '2021-02-23 00:17:18', 'admin', '2021-09-02 20:34:49', ''); +INSERT INTO `sys_menu` +VALUES ('2179', '客户继承', '2001', '35', 'extend', null, '1', 'M', '0', '0', '', 'customer-inheritance', 'admin', + '2021-08-03 16:43:19', 'admin', '2022-02-28 11:17:59', ''); +INSERT INTO `sys_menu` +VALUES ('2188', '运营中心', '0', '1', 'operationsCenter', null, '1', 'M', '0', '0', '', 'content-manage1', 'admin', + '2021-08-05 10:42:01', 'admin', '2022-02-28 11:16:10', ''); +INSERT INTO `sys_menu` +VALUES ('2189', '素材库', '2062', '2', 'materialManage', 'material/materialManage', '1', 'C', '0', '0', + 'wechat:category:list', '#', 'admin', '2021-08-05 11:11:57', 'admin', '2021-10-29 16:41:34', ''); +INSERT INTO `sys_menu` +VALUES ('2196', '编辑配置', '2010', '4', '', null, '1', 'F', '0', '0', 'wechat:corp:edit', '#', 'admin', + '2021-08-09 11:26:55', '', null, ''); +INSERT INTO `sys_menu` +VALUES ('2201', '员工管理', '2283', '5', 'staff', 'system/staff/index', '1', 'C', '0', '0', 'system:user:list', '#', + 'admin', '2021-08-24 09:43:01', 'admin', '2021-08-27 21:31:33', ''); +INSERT INTO `sys_menu` +VALUES ('2205', '编辑定时待群发任务', '2085', '2', '', null, '1', 'F', '0', '0', 'customerMessagePush:push:edit', '#', 'admin', + '2021-08-25 18:35:16', 'admin', '2021-08-30 11:09:22', ''); +INSERT INTO `sys_menu` +VALUES ('2206', '新建自动拉群', '2101', '1', '', null, '1', 'F', '0', '0', 'wecom:communityNewGroup:add', '#', 'admin', + '2021-08-25 18:41:10', '', null, ''); +INSERT INTO `sys_menu` +VALUES ('2207', '编辑自动拉群', '2101', '2', '', null, '1', 'F', '0', '0', 'wecom:communityNewGroup:edit', '#', 'admin', + '2021-08-25 18:44:21', '', null, ''); +INSERT INTO `sys_menu` +VALUES ('2208', '删除自动拉群', '2101', '3', '', null, '1', 'F', '0', '0', 'wecom:communityNewGroup:remove', '#', 'admin', + '2021-08-25 18:44:50', '', null, ''); +INSERT INTO `sys_menu` +VALUES ('2210', '新建任务', '2102', '1', '', null, '1', 'F', '0', '0', 'wecom:communitytagGroup:add', '#', 'admin', + '2021-08-25 20:31:14', '', null, ''); +INSERT INTO `sys_menu` +VALUES ('2212', '删除任务', '2102', '3', '', null, '1', 'F', '0', '0', 'wecom:communitytagGroup:remove', '#', 'admin', + '2021-08-25 20:32:51', '', null, ''); +INSERT INTO `sys_menu` +VALUES ('2213', '同步员工', '2201', '1', '', null, '1', 'F', '0', '0', 'contacts:organization:sync', '#', 'admin', + '2021-08-26 11:23:56', '', null, ''); +INSERT INTO `sys_menu` +VALUES ('2214', '查看员工详情', '2201', '12', '', null, '1', 'F', '0', '0', 'contacts:organization:info', '#', 'admin', + '2021-08-26 11:31:58', 'admin', '2021-08-26 11:33:27', ''); +INSERT INTO `sys_menu` +VALUES ('2215', '禁用/启用员工', '2201', '14', '', null, '1', 'F', '0', '0', 'contacts:organization:forbidden', '#', 'admin', + '2021-08-26 11:32:45', 'admin', '2021-08-26 11:33:37', ''); +INSERT INTO `sys_menu` +VALUES ('2216', '编辑员工详情', '2201', '13', '', null, '1', 'F', '0', '0', 'contacts:organization:edit', '#', 'admin', + '2021-08-26 11:35:40', '', null, ''); +INSERT INTO `sys_menu` +VALUES ('2217', '删除员工', '2201', '15', '', null, '1', 'F', '0', '0', 'contacts:organization:removeMember', '#', 'admin', + '2021-08-26 11:36:18', '', null, ''); +INSERT INTO `sys_menu` +VALUES ('2218', '查看已分配员工', '2005', '43', '', null, '1', 'F', '0', '0', 'customerManage:dimission:allocatedStaffList', + '#', 'admin', '2021-08-26 22:05:08', '', null, ''); +INSERT INTO `sys_menu` +VALUES ('2219', '查看已分配员工详情', '2005', '44', '', null, '1', 'F', '0', '0', + 'customerManage:dimission/allocatedStaffDetail', '#', 'admin', '2021-08-26 22:16:14', '', null, ''); +INSERT INTO `sys_menu` +VALUES ('2221', '查看流失客户详情', '2082', '2', '', null, '1', 'F', '0', '0', 'customerManage:lossRemind:view', '#', 'admin', + '2021-08-30 10:52:33', 'admin', '2021-08-30 10:52:45', ''); +INSERT INTO `sys_menu` +VALUES ('2222', '导出列表', '2082', '3', '', null, '1', 'F', '0', '0', 'customerManage:lossRemind:export', '#', 'admin', + '2021-08-30 10:53:03', '', null, ''); +INSERT INTO `sys_menu` +VALUES ('2223', '查看群发详情', '2085', '1', '', null, '1', 'F', '0', '0', 'customerMessagePush:push:view', '#', 'admin', + '2021-08-30 11:19:07', '', null, ''); +INSERT INTO `sys_menu` +VALUES ('2224', '定时任务日志查看', '2', '10', 'sysMonitor/job/log', 'monitor/job/log', '1', 'P', '1', '0', '', '#', 'admin', + '2021-09-01 13:41:15', 'admin', '2021-09-01 23:44:20', ''); +INSERT INTO `sys_menu` +VALUES ('2226', '侧边栏展示开关', '2189', '1', '', null, '1', 'F', '0', '0', 'wechat:material:sidebar', '#', 'admin', + '2021-10-13 17:34:02', '', null, ''); +INSERT INTO `sys_menu` +VALUES ('2227', '管理过期素材', '2189', '2', '', null, '1', 'F', '0', '0', 'wechat:material:expireManage', '#', 'admin', + '2021-10-13 17:34:35', '', null, ''); +INSERT INTO `sys_menu` +VALUES ('2228', '管理素材标签', '2189', '3', '', null, '1', 'F', '0', '0', 'wechat:material:tagManage', '#', 'admin', + '2021-10-13 17:35:24', '', null, ''); +INSERT INTO `sys_menu` +VALUES ('2229', '应用管理', '0', '5', 'appManage', null, '1', 'M', '0', '0', '', 'ApplicationManagement', 'admin', + '2021-10-18 17:34:09', 'admin', '2021-10-18 17:37:22', ''); +INSERT INTO `sys_menu` +VALUES ('2230', '我的应用', '2281', '1', 'myApp', 'appManage/myApp/index', '1', 'C', '0', '0', '', '#', 'admin', + '2021-10-18 17:41:24', 'admin', '2021-10-18 17:42:42', ''); +INSERT INTO `sys_menu` +VALUES ('2231', '应用设置', '2230', '1', '', null, '1', 'F', '0', '0', 'wecom:myApplication:update', '#', 'admin', + '2021-10-18 17:48:21', 'admin', '2021-10-18 17:49:44', ''); +INSERT INTO `sys_menu` +VALUES ('2232', '应用中心', '2281', '2', 'appCenter', 'appManage/appCenter/index', '1', 'C', '0', '0', null, '#', 'admin', + '2021-10-18 17:49:08', '', null, ''); +INSERT INTO `sys_menu` +VALUES ('2233', '添加应用', '2232', '1', '', null, '1', 'F', '0', '0', 'wecom:application:install', '#', 'admin', + '2021-10-18 17:49:35', '', null, ''); +INSERT INTO `sys_menu` +VALUES ('2234', '应用设置页面', '2229', '30', 'appManage/appConfig', 'appManage/appConfig/index', '1', 'P', '1', '0', '', '#', + 'admin', + '2021-10-18 20:24:52', 'admin', '2021-10-20 10:01:52', ''); +INSERT INTO `sys_menu` +VALUES ('2235', '应用详情页面', '2229', '79', 'appManage/appDetails', 'appManage/appDetails/index', '1', 'P', '1', '0', '', + '#', + 'admin', '2021-10-18 21:40:20', 'admin', '2021-10-20 10:02:00', ''); +INSERT INTO `sys_menu` +VALUES ('2236', '话术库', '2062', '1', 'verbalTrickManage', 'verbalTrickLibrary/verbalTrickManage', '1', 'C', '0', '0', + null, '#', 'admin', '2021-10-29 16:41:12', '', null, ''); +INSERT INTO `sys_menu` +VALUES ('2237', '管理企业话术', '2236', '5', '', null, '1', 'F', '0', '0', 'wecom:corpWords:manage', '#', 'admin', + '2021-11-02 10:38:49', '', null, ''); +INSERT INTO `sys_menu` +VALUES ('2238', '管理部门话术', '2236', '10', '', null, '1', 'F', '0', '0', 'wecom:deptWords:manage', '#', 'admin', + '2021-11-02 10:39:26', '', null, ''); +INSERT INTO `sys_menu` +VALUES ('2239', '客户设置', '2280', '32', 'customerSetting', 'customerManage/customerSetting', '1', 'C', '0', '0', null, + '#', 'admin', '2021-11-15 11:33:57', '', null, ''); +INSERT INTO `sys_menu` +VALUES ('2240', '新增字段', '2239', '1', '', null, '1', 'F', '0', '0', 'customer:extendProp:add', '#', 'admin', + '2021-11-16 13:56:31', '', null, ''); +INSERT INTO `sys_menu` +VALUES ('2241', '编辑字段', '2239', '3', '', null, '1', 'F', '0', '0', 'customer:extendProp:edit', '#', 'admin', + '2021-11-16 14:33:16', '', null, ''); +INSERT INTO `sys_menu` +VALUES ('2242', '删除字段', '2239', '6', '', null, '1', 'F', '0', '0', 'customer:extendProp:remove', '#', 'admin', + '2021-11-16 14:33:56', '', null, ''); +INSERT INTO `sys_menu` +VALUES ('2243', '编辑客户群', '2003', '5', '', null, '1', 'F', '0', '0', 'customerManage:group:edit', '#', 'admin', + '2021-11-23 15:30:54', '', null, ''); +INSERT INTO `sys_menu` +VALUES ('2245', '在职继承', '2179', '45', 'inherit', 'customerManage/inherit/index', '1', 'C', '0', '0', '', '#', 'admin', + '2021-11-29 14:35:48', 'admin', '2021-12-01 13:48:49', ''); +INSERT INTO `sys_menu` +VALUES ('2246', '分配记录', '2179', '46', 'inheritRecord', 'customerManage/inherit/record', '1', 'P', '1', '0', '', '#', + 'admin', '2021-12-01 13:50:48', 'admin', '2021-12-01 14:21:25', ''); +INSERT INTO `sys_menu` +VALUES ('2247', '分配客户', '2245', '2', '', null, '1', 'F', '0', '0', 'customerManage:active:transfer', '#', 'admin', + '2021-12-03 10:30:36', '', null, ''); +INSERT INTO `sys_menu` +VALUES ('2248', '查看分配记录', '2245', '6', '', null, '1', 'F', '0', '0', 'customerManage:transfer:record', '#', 'admin', + '2021-12-03 10:31:18', 'admin', '2021-12-03 10:32:38', ''); +INSERT INTO `sys_menu` +VALUES ('2249', '继承设置', '2245', '12', '', null, '1', 'F', '0', '0', 'customerManage:transfer:config', '#', 'admin', + '2021-12-03 10:31:48', '', null, ''); +INSERT INTO `sys_menu` +VALUES ('2250', '留存转化', '2188', '31', 'retainedConversion', null, '1', 'M', '0', '0', '', 'transform-retained', 'admin', + '2021-11-29 15:36:04', 'admin', '2022-02-28 11:15:56', ''); +INSERT INTO `sys_menu` +VALUES ('2251', '客户SOP', '2250', '3', 'customerSOP', 'retainedConversion/SOP/customerSOP', '1', 'C', '0', '0', '', '#', + 'admin', '2021-11-29 15:41:36', 'admin', '2021-11-30 13:49:09', ''); +INSERT INTO `sys_menu` +VALUES ('2252', '群SOP', '2250', '4', 'groupSOP', 'retainedConversion/SOP/groupSOP', '1', 'C', '0', '0', '', '#', + 'admin', '2021-11-29 15:43:48', 'admin', '2021-11-30 13:46:18', ''); +INSERT INTO `sys_menu` +VALUES ('2254', '新增SOP页面', '2250', '8', 'addSOP', 'retainedConversion/SOP/addSOP', '1', 'P', '1', '0', '', '#', 'admin', + '2021-11-30 11:35:36', 'admin', '2021-12-07 10:08:28', ''); +INSERT INTO `sys_menu` +VALUES ('2255', 'SOP详情', '2250', '9', 'SOPDetail', 'retainedConversion/SOP/SOPDetail', '1', 'P', '1', '0', null, '#', + 'admin', '2021-12-01 19:19:47', '', null, ''); +INSERT INTO `sys_menu` +VALUES ('2256', '新增SOP', '2251', '1', '', null, '1', 'F', '0', '0', 'wecom:customerSop:add', '#', 'admin', + '2021-12-08 10:26:25', 'admin', '2021-12-08 10:27:10', ''); +INSERT INTO `sys_menu` +VALUES ('2257', '启用/关闭SOP', '2251', '5', '', null, '1', 'F', '0', '0', 'wecom:customerSop:switch', '#', 'admin', + '2021-12-08 10:27:02', '', null, ''); +INSERT INTO `sys_menu` +VALUES ('2258', '删除SOP', '2251', '10', '', null, '1', 'F', '0', '0', 'wecom:customerSop:del', '#', 'admin', + '2021-12-08 10:27:36', '', null, ''); +INSERT INTO `sys_menu` +VALUES ('2259', '编辑SOP', '2251', '20', '', null, '1', 'F', '0', '0', 'wecom:customerSop:edit', '#', 'admin', + '2021-12-08 10:28:00', 'admin', '2021-12-08 10:28:15', ''); +INSERT INTO `sys_menu` +VALUES ('2260', '新增SOP', '2252', '1', '', null, '1', 'F', '0', '0', 'wecom:groupSop:add', '#', 'admin', + '2021-12-08 10:28:46', '', null, ''); +INSERT INTO `sys_menu` +VALUES ('2261', '启用/关闭SOP', '2252', '5', '', null, '1', 'F', '0', '0', 'wecom:groupSop:switch', '#', 'admin', + '2021-12-08 10:29:16', '', null, ''); +INSERT INTO `sys_menu` +VALUES ('2262', '删除SOP', '2252', '10', '', null, '1', 'F', '0', '0', 'wecom:groupSop:del', '#', 'admin', + '2021-12-08 10:29:50', '', null, ''); +INSERT INTO `sys_menu` +VALUES ('2263', '编辑SOP', '2252', '15', '', null, '1', 'F', '0', '0', 'wecom:groupSop:edit', '#', 'admin', + '2021-12-08 10:30:19', '', null, ''); +INSERT INTO `sys_menu` +VALUES ('2264', '群日历', '2250', '5', 'groupCalendarSOP', 'retainedConversion/SOP/groupCalendarSOP', '1', 'C', '0', '0', + null, '#', 'admin', '2021-12-21 10:50:37', '', null, ''); +INSERT INTO `sys_menu` +VALUES ('2265', '新增日历', '2264', '2', '', null, '1', 'F', '0', '0', 'wecom:groupCalendar:add', '#', 'admin', + '2021-12-21 15:27:38', '', null, ''); +INSERT INTO `sys_menu` +VALUES ('2266', '启用/关闭日历', '2264', '6', '', null, '1', 'F', '0', '0', 'wecom:groupCalendar:switch', '#', 'admin', + '2021-12-21 15:28:50', '', null, ''); +INSERT INTO `sys_menu` +VALUES ('2267', '编辑日历', '2264', '10', '', null, '1', 'F', '0', '0', 'wecom:groupCalendar:edit', '#', 'admin', + '2021-12-21 15:29:21', '', null, ''); +INSERT INTO `sys_menu` +VALUES ('2268', '删除日历', '2264', '8', '', null, '1', 'F', '0', '0', 'wecom:groupCalendar:del', '#', 'admin', + '2021-12-22 09:19:24', '', null, ''); +INSERT INTO `sys_menu` +VALUES ('2269', '新增入群欢迎语', '2060', '7', '', null, '1', 'F', '0', '0', 'wecom:groupWelcome:add', '#', 'admin', + '2022-01-12 14:42:38', '', null, ''); +INSERT INTO `sys_menu` +VALUES ('2270', '编辑入群欢迎语', '2060', '10', '', null, '1', 'F', '0', '0', 'wecom:groupWelcome:edit', '#', 'admin', + '2022-01-12 14:43:00', '', null, ''); +INSERT INTO `sys_menu` +VALUES ('2271', '删除入群欢迎语', '2060', '15', '', null, '1', 'F', '0', '0', 'wecom:groupWelcome:del', '#', 'admin', + '2022-01-12 14:43:23', '', null, ''); +INSERT INTO `sys_menu` +VALUES ('2272', '朋友圈', '2188', '25', 'moments', null, '1', 'M', '0', '0', '', 'friend-circle', 'admin', + '2022-01-13 10:53:17', 'admin', '2022-02-28 11:12:45', ''); +INSERT INTO `sys_menu` +VALUES ('2273', '发布朋友圈', '2272', '1', 'release', 'friendsCircle/release', '1', 'C', '0', '0', 'wecom:moments:publish', + '#', 'admin', '2022-01-13 10:55:03', 'admin', '2022-01-13 14:32:16', ''); +INSERT INTO `sys_menu` +VALUES ('2274', '发布记录', '2272', '5', 'record', 'friendsCircle/record', '1', 'C', '0', '0', '', '#', 'admin', + '2022-01-13 10:55:35', 'admin', '2022-01-13 14:36:58', ''); +INSERT INTO `sys_menu` +VALUES ('2275', '查看朋友圈详情', '2274', '5', '', null, '1', 'F', '0', '0', 'wecom:moments:detail', '#', 'admin', + '2022-01-13 10:56:02', '', null, ''); +INSERT INTO `sys_menu` +VALUES ('2276', '编辑定时朋友圈', '2274', '10', '', null, '1', 'F', '0', '0', 'wecom:moments:edit', '#', 'admin', + '2022-01-13 10:56:40', '', null, ''); +INSERT INTO `sys_menu` +VALUES ('2277', '删除朋友圈', '2274', '15', '', null, '1', 'F', '0', '0', 'wecom:moments:del', '#', 'admin', + '2022-01-13 10:57:03', '', null, ''); +INSERT INTO `sys_menu` +VALUES ('2278', '查看朋友圈详情页面', '2272', '33', 'detail', 'friendsCircle/detail', '1', 'P', '1', '0', null, '#', 'admin', + '2022-01-13 14:38:36', '', null, ''); +INSERT INTO `sys_menu` +VALUES ('2279', '新增/修改入群欢迎语', '2052', '82', 'groupWelcomeAdd', 'drainageCode/welcome/groupWelcomeAdd', '1', 'P', '1', + '0', '', '#', 'admin', '2022-01-13 17:58:19', 'admin', '2022-01-13 20:12:22', ''); +INSERT INTO `sys_menu` +VALUES ('2280', '客户管理', '2001', '10', 'customerCenter', null, '1', 'M', '0', '0', '', 'customer-manage', 'admin', + '2022-02-28 10:32:21', 'admin', '2022-02-28 11:16:42', ''); +INSERT INTO `sys_menu` +VALUES ('2281', '应用管理', '2229', '10', 'appManage', null, '1', 'M', '0', '0', '', 'application-manage', 'admin', + '2022-02-28 10:41:37', 'admin', '2022-02-28 11:19:35', ''); +INSERT INTO `sys_menu` +VALUES ('2282', '企业风控', '2079', '10', 'corpSecurity', null, '1', 'M', '0', '0', '', 'enterprise-risk-control', 'admin', + '2022-02-28 10:46:49', 'admin', '2022-02-28 11:21:05', ''); +INSERT INTO `sys_menu` +VALUES ('2283', '系统设置', '1', '10', 'sysSetting', null, '1', 'M', '0', '0', '', 'system-hollow', 'admin', + '2022-02-28 10:52:43', 'admin', '2022-02-28 11:24:52', ''); +INSERT INTO `sys_menu` +VALUES ('2284', '系统监控', '2', '5', 'sysMonitor', null, '1', 'M', '0', '0', '', 'system-monitor', 'admin', + '2022-02-28 10:56:04', 'admin', '2022-02-28 11:27:45', ''); + +INSERT INTO `sys_menu`(`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `menu_type`, + `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, + `remark`) +VALUES (2285, '自动标签', 2280, 25, 'autoLabel', 'customerManage/autoLabel', 1, 'C', '0', '0', + 'customerManage:autoLabel:list', '#', 'admin', '2022-03-04 13:47:45', 'admin', '2022-03-04 17:37:12', ''); +INSERT INTO `sys_menu`(`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `menu_type`, + `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, + `remark`) +VALUES (2286, '新增规则', 2285, 10, '', NULL, 1, 'F', '0', '0', 'wecom:autotag:add', '#', 'admin', '2022-03-04 13:53:47', + '', NULL, ''); +INSERT INTO `sys_menu`(`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `menu_type`, + `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, + `remark`) +VALUES (2287, '启用/关闭规则', 2285, 20, '', NULL, 1, 'F', '0', '0', 'wecom:autotag:enable', '#', 'admin', + '2022-03-04 13:56:42', + '', NULL, ''); +INSERT INTO `sys_menu`(`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `menu_type`, + `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, + `remark`) +VALUES (2288, '删除规则', 2285, 30, '', NULL, 1, 'F', '0', '0', 'wecom:autotag:del', '#', 'admin', '2022-03-04 13:57:12', + '', NULL, ''); +INSERT INTO `sys_menu`(`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `menu_type`, + `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, + `remark`) +VALUES (2289, '编辑规则', 2285, 40, '', NULL, 1, 'F', '0', '0', 'wecom:autotag:edit', '#', 'admin', '2022-03-04 13:57:36', + '', NULL, ''); +INSERT INTO `sys_menu`(`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `menu_type`, + `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, + `remark`) +VALUES (2290, '规则详情', 2280, 33, 'labelDetail', 'customerManage/autoLabel/labelDetail', 1, 'P', '1', '0', NULL, '#', + 'admin', '2022-03-04 18:10:05', '', NULL, ''); +INSERT INTO `sys_menu`(`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `menu_type`, + `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, + `remark`) +VALUES (2291, '新增规则页面', 2280, 22, 'addRule', 'customerManage/autoLabel/addRule', 1, 'P', '1', '0', '', '#', 'admin', + '2022-03-04 16:22:16', 'admin', '2022-03-04 18:08:09', ''); +INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `menu_type`, + `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, + `remark`) +VALUES ('2292', '营销活动', '2188', '3', 'conversionCode', NULL, '1', 'M', '0', '0', '', 'conversion-code', 'admin', + '2022-07-08 09:15:22', 'admin', '2022-07-08 09:15:32', ''); +INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `menu_type`, + `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, + `remark`) +VALUES ('2293', '兑换码', '2292', '10', 'list', 'marketingActivities/conversionCode/list', '1', 'C', '0', '0', '', '#', + 'admin', '2022-07-08 09:17:54', 'admin', '2022-07-08 09:54:33', ''); +INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `menu_type`, + `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, + `remark`) +VALUES ('2294', '新建兑换活动', '2292', '11', 'conversionCodeAdd', 'marketingActivities/conversionCode/add', '1', 'P', '1', + '0', '', '#', 'admin', '2022-07-08 09:19:54', 'admin', '2022-07-08 09:52:25', ''); +INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `menu_type`, + `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, + `remark`) +VALUES ('2295', '兑换码详情', '2292', '1', 'conversionCodeDetail', 'marketingActivities/conversionCode/detail', '1', 'P', + '1', '0', '', '#', 'admin', '2022-07-08 09:21:59', 'admin', '2022-07-08 09:52:17', ''); +INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `menu_type`, + `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, + `remark`) +VALUES ('2296', '新增兑换活动', '2293', '5', '', NULL, '1', 'F', '0', '0', 'redeeomCode:activity:add', '#', 'admin', + '2022-07-11 09:52:22', '', NULL, ''); +INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `menu_type`, + `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, + `remark`) +VALUES ('2297', '删除兑换活动', '2293', '10', '', NULL, '1', 'F', '0', '0', 'redeeomCode:activity:del', '#', 'admin', + '2022-07-11 09:53:02', '', NULL, ''); +INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `menu_type`, + `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, + `remark`) +VALUES ('2298', '编辑兑换活动', '2293', '15', '', NULL, '1', 'F', '0', '0', 'redeeomCode:activity:edit', '#', 'admin', + '2022-07-11 09:53:33', '', NULL, ''); +INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `menu_type`, + `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, + `remark`) +VALUES ('2299', '雷达库', '2062', '3', 'radarManage', 'radarLibrary/radarManage', '1', 'C', '0', '0', '', '#', 'admin', + '2022-07-15 15:14:42', 'admin', '2022-07-15 15:27:08', ''); +INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `menu_type`, + `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, + `remark`) +VALUES ('2300', '查看雷达链接详情', '2062', '1', 'radarDetail', 'radarLibrary/radarDetail', '1', 'P', '1', '0', NULL, '#', + 'admin', '2022-07-19 09:12:38', '', NULL, ''); +INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `menu_type`, + `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, + `remark`) +VALUES ('2301', '管理企业雷达', '2299', '5', '', NULL, '1', 'F', '0', '0', 'radar:corp:manage', '#', 'admin', + '2022-07-23 21:52:48', 'admin', '2022-07-24 16:07:55', ''); +INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `is_frame`, `menu_type`, + `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, + `remark`) +VALUES ('2302', '管理部门雷达', '2299', '10', '', NULL, '1', 'F', '0', '0', 'radar:department:manage', '#', 'admin', + '2022-07-23 21:53:42', 'admin', '2022-07-24 16:08:00', ''); + + +-- ---------------------------- +-- Table structure for sys_role +-- ---------------------------- +DROP TABLE IF EXISTS `sys_role`; +CREATE TABLE `sys_role` +( + `role_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '角色ID', + `corp_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '公司id', + `role_name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '角色名称', + `role_key` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '角色权限字符串', + `role_sort` int(11) NOT NULL DEFAULT '0' COMMENT '显示顺序', + `data_scope` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '1' COMMENT '数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限)', + `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '角色状态(0正常 1停用)', + `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)', + `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', + `role_type` tinyint(4) NOT NULL DEFAULT '3' COMMENT '角色类型(1:系统默认超级管理员角色, 2:系统默认角色,3:自定义角色)', + PRIMARY KEY (`role_id`), + KEY `idx_corp_id` (`corp_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 8 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '角色信息表' ROW_FORMAT = Dynamic; + + +-- ---------------------------- +-- Table structure for sys_role_dept +-- ---------------------------- +DROP TABLE IF EXISTS `sys_role_dept`; +CREATE TABLE `sys_role_dept` +( + `role_id` bigint(20) NOT NULL COMMENT '角色ID', + `corp_id` varchar(64) NOT NULL DEFAULT '' COMMENT '公司Id', + `dept_id` bigint(20) NOT NULL COMMENT '部门ID', + PRIMARY KEY (`role_id`, `corp_id`, `dept_id`) +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '角色和部门关联表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of sys_role_dept +-- ---------------------------- + + +-- ---------------------------- +-- Table structure for sys_role_menu +-- ---------------------------- +DROP TABLE IF EXISTS `sys_role_menu`; +CREATE TABLE `sys_role_menu` +( + `role_id` bigint(20) NOT NULL COMMENT '角色ID', + `menu_id` bigint(20) NOT NULL COMMENT '菜单ID', + PRIMARY KEY (`role_id`, `menu_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '角色和菜单关联表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of sys_role_menu +-- ---------------------------- + + +-- ---------------------------- +-- Table structure for sys_user +-- ---------------------------- +DROP TABLE IF EXISTS `sys_user`; +CREATE TABLE `sys_user` +( + `user_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '用户ID', + `dept_id` bigint(20) NULL DEFAULT NULL COMMENT '部门ID', + `user_name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户账号', + `nick_name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户昵称', + `user_type` varchar(2) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '00' COMMENT '用户类型(00系统用户)(11:企业微信用户)', + `email` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '用户邮箱', + `phonenumber` varchar(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '手机号码', + `sex` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '用户性别(0男 1女 2未知)', + `avatar` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '头像地址', + `password` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '密码', + `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '帐号状态(0正常 1停用)', + `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)', + `login_ip` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '最后登陆IP', + `login_date` datetime(0) NULL DEFAULT NULL COMMENT '最后登陆时间', + `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', + `crop_account` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `we_user_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `ui_color` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '#6BB4AB' COMMENT '后台界面主题颜色', + PRIMARY KEY (`user_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户信息表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of sys_user +-- ---------------------------- +INSERT INTO `sys_user` +VALUES (1, 100, 'admin', 'admin', '00', NULL, NULL, '0', '', + '$2a$10$EYb5boK0XMy8c4kzXnm3e.SSrSOg4TpHfe4PrVtvZL135jizzfiOi', '0', '0', '127.0.0.1', now(), 'admin', now(), + 'ry', now(), '管理员', NULL, NULL, '#6BB4AB'); + +-- ---------------------------- +-- Table structure for we_user_role +-- ---------------------------- +DROP TABLE IF EXISTS `we_user_role`; +CREATE TABLE `we_user_role` +( + `corp_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '公司ID', + `user_id` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '企微用户ID', + `role_id` BIGINT (20) NOT NULL COMMENT '角色ID', + PRIMARY KEY (`corp_id`, `user_id`, `role_id`), + UNIQUE KEY `un_corp_user_id` (`corp_id`,`user_id`) USING BTREE +) ENGINE = INNODB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '企微用户和角色关联表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for sys_job_log +-- ---------------------------- +DROP TABLE IF EXISTS `sys_job_log`; +CREATE TABLE `sys_job_log` +( + `job_log_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '任务日志ID', + `job_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '任务名称', + `job_group` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '任务组名', + `invoke_target` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '调用目标字符串', + `job_message` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '日志信息', + `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '执行状态(0正常 1失败)', + `exception_info` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '异常信息', + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + PRIMARY KEY (`job_log_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 14006 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '定时任务调度日志表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for sys_logininfor +-- ---------------------------- +DROP TABLE IF EXISTS `sys_logininfor`; +CREATE TABLE `sys_logininfor` +( + `info_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '访问ID', + `corp_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '企业ID', + `user_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '用户账号', + `ipaddr` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '登录IP地址', + `login_location` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '登录地点', + `browser` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '浏览器类型', + `os` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '操作系统', + `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '登录状态(0成功 1失败)', + `msg` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '提示消息', + `login_time` datetime(0) NULL DEFAULT NULL COMMENT '访问时间', + `login_type` tinyint(2) NOT NULL DEFAULT '1' COMMENT '登录方式(1账号密码登录,2企微扫码登录)', + PRIMARY KEY (`info_id`) USING BTREE, + KEY `idx_corp_id` (`corp_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 24 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '系统访问记录' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for sys_oper_log +-- ---------------------------- +DROP TABLE IF EXISTS `sys_oper_log`; +CREATE TABLE `sys_oper_log` +( + `oper_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '日志主键', + `corp_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '公司ID', + `title` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '模块标题', + `business_type` int(11) NULL DEFAULT 0 COMMENT '业务类型(0其它 1新增 2修改 3删除)', + `method` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '方法名称', + `request_method` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '请求方式', + `operator_type` int(11) NULL DEFAULT 0 COMMENT '操作类别(0其它 1后台用户 2手机端用户)', + `oper_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '操作人员', + `dept_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '部门名称', + `oper_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '请求URL', + `oper_ip` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '主机地址', + `oper_location` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '操作地点', + `oper_param` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '请求参数', + `json_result` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '返回参数', + `status` int(11) NULL DEFAULT 0 COMMENT '操作状态(0正常 1异常)', + `error_msg` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '错误消息', + `oper_time` datetime(0) NULL DEFAULT NULL COMMENT '操作时间', + PRIMARY KEY (`oper_id`) USING BTREE, + KEY `idx_corp_id` (`corp_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '操作日志记录' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for we_category +-- ---------------------------- +DROP TABLE IF EXISTS `we_category`; +CREATE TABLE `we_category` +( + `id` bigint(100) NOT NULL COMMENT '主键id', + `corp_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '授权企业ID', + `media_type` int(1) NOT NULL DEFAULT 0 COMMENT '0 海报、1 语音(voice)、2 视频(video),3 普通文件(file) 4 文本 、5图文链接、6小程序', + `using` tinyint(1) NOT NULL DEFAULT 1 COMMENT '是否启用到侧边栏(0否,1是)', + `name` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '分类名称', + `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '创建人', + `create_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '修改人', + `update_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间', + `del_flag` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0 未删除 1 已删除', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '素材分类表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of we_category +-- ---------------------------- +-- INSERT INTO `we_category` VALUES (1425730086098833408, 0, 0, '图片', '', '2021-08-12 16:05:16', '', '2021-08-12 16:05:16', 0); +-- INSERT INTO `we_category` VALUES (1425730155204186112, 0, 2, '视频', '', '2021-08-12 16:05:32', '', '2021-08-12 16:05:32', 0); +-- INSERT INTO `we_category` VALUES (1425730190193070080, 0, 3, '文件', '', '2021-08-12 16:05:41', '', '2021-08-12 16:05:41', 0); +-- INSERT INTO `we_category` VALUES (1425730227862114304, 0, 4, '文本', '', '2021-08-12 16:05:50', '', '2021-08-12 16:05:50', 0); + + +-- ---------------------------- +-- Table structure for we_chat_contact_mapping +-- ---------------------------- +DROP TABLE IF EXISTS `we_chat_contact_mapping`; +CREATE TABLE `we_chat_contact_mapping` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id', + `from_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '发送人id', + `receive_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '接收人id', + `room_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '群聊id', + `is_custom` tinyint(4) NOT NULL DEFAULT 0 COMMENT '接收人是否为客户 0-成员 1-客户 2-机器人', + `corp_id` varchar(64) NOT NULL DEFAULT '' COMMENT '企业id', + PRIMARY KEY (`id`) USING BTREE, + INDEX `we_chat_contact_mapping_from_id_IDX`(`from_id`, `is_custom`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 23 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '聊天关系映射表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for we_chat_side +-- ---------------------------- +DROP TABLE IF EXISTS `we_chat_side`; +CREATE TABLE `we_chat_side` +( + `side_id` bigint(20) NOT NULL COMMENT '主键id', + `corp_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '授权企业ID', + `media_type` tinyint(4) NOT NULL DEFAULT -1 COMMENT '素材类型 0 图片(image)、1 语音(voice)、2 视频(video),3 普通文件(file) 4 文本 5 海报', + `side_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '聊天工具栏名称', + `total` int(10) NOT NULL DEFAULT 0 COMMENT '已抓取素材数量', + `using` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否启用 0 启用 1 未启用', + `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '创建人', + `create_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '更新人', + `update_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', + `del_flag` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0 未删除 1 已删除', + PRIMARY KEY (`side_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '侧边栏表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of we_chat_side +-- ---------------------------- +-- INSERT INTO `we_chat_side` VALUES (1, 0, '图片', 1, 0, 'admin', '2021-08-05 21:38:00', 'admin', '2021-08-05 21:38:00', 0); +-- INSERT INTO `we_chat_side` VALUES (2, 1, '语音', 0, 0, 'admin', '2021-08-05 21:38:42', 'admin', '2021-08-05 21:38:42', 0); +-- INSERT INTO `we_chat_side` VALUES (3, 2, '视频', 0, 0, 'admin', '2021-08-05 21:38:58', 'admin', '2021-08-05 21:38:58', 0); +-- INSERT INTO `we_chat_side` VALUES (4, 3, '文件', 0, 0, 'admin', '2021-08-05 21:39:20', 'admin', '2021-08-05 21:39:20', 0); +-- INSERT INTO `we_chat_side` VALUES (5, 4, '文本', 0, 0, 'admin', '2021-08-05 21:39:33', 'admin', '2021-08-05 21:39:33', 0); +-- INSERT INTO `we_chat_side` VALUES (6, 5, '海报', 0, 0, 'admin', '2021-08-05 21:39:53', 'admin', '2021-08-05 21:39:53', 0); + +-- ---------------------------- +-- Table structure for we_community_new_group +-- ---------------------------- +DROP TABLE IF EXISTS `we_community_new_group`; +CREATE TABLE `we_community_new_group` +( + `id` bigint(20) NOT NULL COMMENT '主键ID', + `corp_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '企业Id', + `group_code_id` bigint(64) NOT NULL DEFAULT 0 COMMENT '群活码ID', + `empl_code_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '员工活码id', + `new_group_id` bigint(20) NOT NULL DEFAULT 0, + `empl_code_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '员工活码名称', + `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '创建人', + `create_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '修改人', + `update_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间', + `del_flag` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:正常;1:删除;', + PRIMARY KEY (`id`) USING BTREE, + INDEX `idx_create_time`(`create_time`) USING BTREE COMMENT '创建时间', + INDEX `idx_create_by`(`create_by`) USING BTREE COMMENT '创建人', + INDEX `idx_empl_code`(`empl_code_name`, `empl_code_id`) USING BTREE COMMENT '员工活码' +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '客户进群活码表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for we_corp_account +-- ---------------------------- +DROP TABLE IF EXISTS `we_corp_account`; +CREATE TABLE `we_corp_account` +( + `id` int(11) NOT NULL AUTO_INCREMENT, + `company_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '企业名称', + `corp_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '企业ID', + `external_corp_id` VARCHAR(255) CHARACTER SET utf8mb4 + COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' + COMMENT '三方应用企业ID', + `crop_account` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '企业管理员账号', + `corp_secret` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '应用的密钥凭证', + `contact_secret` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '外部联系人密钥', + `wx_qr_login_redirect_uri` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '企业微信扫码登陆系统回调地址', + `provider_secret` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '服务商密钥', + `chat_secret` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '会话存档密钥', + `agent_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '应用id', + `agent_secret` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '应用密钥', + `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '帐号状态(0正常 1停用 2已授权未启用)', + `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '0 未删除 1 已删除', + `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '创建人', + `create_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '更新人', + `update_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', + `customer_churn_notice_switch` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '客户流失通知开关 0:关闭 1:开启', + `corp_account` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '企业管理员账号', + `custom_secret` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '', + `encoding_aes_key` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '应用回调aesKey', + `h5_do_main_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT 'H5域名链接', + `token` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '应用回调token', + `cert_file_path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '侧边栏证书', + `callback_uri` VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '应用回调url', + `authorized` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否授权', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '企业id相关配置' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for we_customer +-- ---------------------------- +DROP TABLE IF EXISTS `we_customer`; +CREATE TABLE `we_customer` +( + `external_userid` VARCHAR(32) CHARACTER SET utf8mb4 + COLLATE utf8mb4_general_ci NOT NULL + COMMENT '外部联系人的userid', + `unionid` VARCHAR(32) CHARACTER SET utf8mb4 + COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' + COMMENT '外部联系人在微信开放平台的唯一身份标识,通过此字段企业可将外部联系人与公众号/小程序用户关联起来。', + `name` VARCHAR(128) CHARACTER SET utf8mb4 + COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' + COMMENT '外部联系人名称', + `corp_id` VARCHAR(64) CHARACTER SET utf8mb4 + COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' + COMMENT '企业ID', + `avatar` VARCHAR(200) CHARACTER SET utf8mb4 + COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' + COMMENT '外部联系人头像', + `type` TINYINT(4) NOT NULL DEFAULT 0 + COMMENT '外部联系人的类型,1表示该外部联系人是微信用户,2表示该外部联系人是企业微信用户', + `gender` TINYINT(4) NOT NULL DEFAULT 0 + COMMENT '外部联系人性别 0-未知 1-男性 2-女性', + `birthday` DATETIME(0) NOT NULL DEFAULT '0000-00-00 00:00:00' + COMMENT '生日', + `corp_name` VARCHAR(100) CHARACTER SET utf8mb4 + COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' + COMMENT '客户企业简称', + `corp_full_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '客户企业全称', + `position` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '客户职位', + `is_open_chat` tinyint(4) NOT NULL DEFAULT 0 COMMENT '是否开启会话存档 0:关闭 1:开启', + `create_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', + `create_by` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '创建人', + `update_by` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '更新人', + PRIMARY KEY (`external_userid`, `corp_id`) USING BTREE, + KEY `idx_union_id` (`unionid`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '企业微信客户表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for we_customer_message +-- ---------------------------- +DROP TABLE IF EXISTS `we_customer_message`; +CREATE TABLE `we_customer_message` +( + `message_id` bigint(64) NOT NULL, + `original_id` bigint(64) NOT NULL DEFAULT 0 COMMENT '原始数据表id', + `chat_type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '群发任务的类型,默认为0表示发送给客户,1表示发送给客户群', + `sender` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '发送企业群发消息的成员userid,当类型为发送给客户群时必填(和企微客户沟通后确认是群主id)', + `check_status` varchar(2) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '消息发送状态 0 未发送 1 已发送', + `msgid` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '企业群发消息的id,可用于获取群发消息发送结果', + `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '消息内容', + `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '创建人', + `create_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '更新人', + `update_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', + `del_flag` int(11) NOT NULL DEFAULT 0 COMMENT '删除标志(0代表存在 1代表删除)', + `setting_time` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '发送时间', + `expect_send` int(11) NOT NULL DEFAULT 0 COMMENT '预计发送消息数(客户对应多少人 客户群对应多个群)', + `actual_send` int(11) NOT NULL DEFAULT 0 COMMENT '实际发送消息数(客户对应多少人 客户群对应多个群)', + `timed_task` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否定时任务 0 常规 1 定时发送', + PRIMARY KEY (`message_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '群发消息 微信消息表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for we_customer_messageoriginal +-- ---------------------------- +DROP TABLE IF EXISTS `we_customer_messageoriginal`; +CREATE TABLE `we_customer_messageoriginal` +( + `message_original_Id` bigint(64) NOT NULL, + `corp_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '企业ID', + `staff_id` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '员工id', + `task_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '任务名称', + `department` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '部门id', + `group` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '群组名称id', + `tag` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '客户标签id列表', + `filter_tags` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '过滤标签id列表', + `gender` tinyint(1) NOT NULL DEFAULT 0 COMMENT '外部联系人性别 0-未知 1-男性 2-女性 -1-全部', + `push_type` varchar(2) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '群发类型 0 发给客户 1 发给客户群', + `message_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '消息类型 0 图片消息 2视频 3文件 4 文本消息 5 链接消息 6 小程序消息 用逗号隔开', + `push_range` varchar(2) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '消息范围 0 全部客户 1 指定客户', + `customer_start_time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '添加客户开始时间', + `customer_end_time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '添加客户结束时间', + `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '创建人', + `create_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '更新人', + `update_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', + `del_flag` tinyint(1) NOT NULL DEFAULT 0 COMMENT '删除标志(0代表存在 1代表删除)', + PRIMARY KEY (`message_original_Id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '群发消息 原始数据信息表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for we_customer_messagetimetask +-- ---------------------------- +DROP TABLE IF EXISTS `we_customer_messagetimetask`; +CREATE TABLE `we_customer_messagetimetask` +( + `task_id` bigint(64) NOT NULL AUTO_INCREMENT COMMENT '任务id', + `message_id` bigint(64) NOT NULL DEFAULT 0 COMMENT '消息id', + `message_info` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '消息原始信息', + `customers_info` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '客户信息列表', + `groups_info` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '客户群组信息列表', + `setting_time` bigint(64) NOT NULL DEFAULT 0 COMMENT '定时时间的毫秒数', + `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '创建人', + `create_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '更新人', + `update_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', + `solved` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0 未解决 1 已解决', + `del_flag` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0 未删除 1 已删除', + PRIMARY KEY (`task_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 53 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '消息任务表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for we_customer_messgaeresult +-- ---------------------------- +DROP TABLE IF EXISTS `we_customer_messgaeresult`; +CREATE TABLE `we_customer_messgaeresult` +( + `messgae_result_id` bigint(64) NOT NULL, + `message_id` bigint(64) NOT NULL DEFAULT 0 COMMENT '微信消息表id', + `external_userid` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '外部联系人userid', + `chat_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '外部客户群id', + `userid` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '企业服务人员的userid', + `status` varchar(2) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '0:未执行(员工未执行群发操作)1:发送成功(员工执行群发并成功送达客户)2:已不是好友(员工执行群发,但客户已不是好友)3:其他员工已发送(员工执行群发,但本次群发中其他员工对该客户执行了群发)4:接收已达上限(该客户的群发接收次数上限)5:创建失败,小程序未关联企业或信息错误(小程序不可发送)6:创建失败,未获取到有效附件信息(获取附件失败)7:未发送(当员工对群群发时只选择了部分群,剩余群未发送)8:创建失败,群发内容异常', + `remark` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '备注', + `send_time` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '', + `external_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '外部联系人名称', + `user_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '企业服务人员的名称', + `send_type` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '0 发给客户 1 发给客户群 2 定时发送', + `setting_time` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '定时发送时间', + `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '创建人', + `create_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '更新人', + `update_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', + `del_flag` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0 未删除 、1 已删除', + `chat_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '外部客户群名称', + PRIMARY KEY (`messgae_result_id`) USING BTREE, + INDEX `idx_message_id`(`message_id`) USING BTREE COMMENT '消息表id' +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '群发消息 微信消息发送结果' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for we_customer_seedmessage +-- ---------------------------- +DROP TABLE IF EXISTS `we_customer_seedmessage`; +CREATE TABLE `we_customer_seedmessage` +( + `seed_message_id` bigint(20) NOT NULL, + `message_id` bigint(64) NOT NULL DEFAULT 0 COMMENT '微信消息表id', + `media_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '图片消息:图片的media_id,可以通过 素材管理接口获得', + `miniprogram_media_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '小程序消息封面的mediaid,封面图建议尺寸为520*416', + `appid` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '小程序appid,必须是关联到企业的小程序应用', + `message_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '消息类型 0 图片消息 2视频 3文件 4 文本消息 5 链接消息 6 小程序消息 ', + `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '消息文本内容,最多4000个字节', + `video_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '视频标题', + `video_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '视频url', + `size` int(10) NOT NULL DEFAULT 0 COMMENT '视频大小', + `pic_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '图片标题', + `pic_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '图片消息:图片的链接,仅可使用上传图片接口得到的链接', + `file_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '文件名称', + `file_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '文件url', + `link_title` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '链接消息:图文消息标题', + `link_picurl` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '链接消息:图文消息封面的url', + `lin_desc` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '链接消息:图文消息的描述,最多512个字节', + `is_defined` TINYINT(1) NOT NULL + COMMENT '链接消息:图文消息数据来源(0:默认,1:自定义)', + `link_url` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '链接消息:图文消息的链接', + `miniprogram_title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '小程序消息标题,最多64个字节', + `page` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '小程序page路径', + `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '创建人', + `create_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '更新人', + `update_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', + `radar_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '雷达id,存储雷达时使用', + `del_flag` int(1) NOT NULL DEFAULT 0 COMMENT '0 未删除 1 已删除', + PRIMARY KEY (`seed_message_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '群发消息 子消息表(包括 文本消息、图片消息、链接消息、小程序消息) ' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for we_customer_trajectory +-- ---------------------------- +DROP TABLE IF EXISTS `we_customer_trajectory`; +CREATE TABLE `we_customer_trajectory` +( + `id` BIGINT ( 20 ) NOT NULL, + `user_id` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '', + `external_userid` VARCHAR(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '外部联系人id', + `agent_id` VARCHAR(126) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '应用id', + `corp_id` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '企业ID', + `detail_id` bigint(20) NOT NULL DEFAULT '-1' COMMENT 'sop任务详情id', + `sop_task_ids` varchar(1000) NOT NULL DEFAULT '' COMMENT 'sop任务待办id 逗号隔开', + `trajectory_type` TINYINT ( 4 ) NOT NULL DEFAULT 0 COMMENT '轨迹类型(1:信息动态;2:社交动态;3:活动规则;4:待办动态)', + `content` VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '文案内容', + `create_date` date NOT NULL DEFAULT '0000-00-00' COMMENT '处理日期', + `start_time` time(0) NOT NULL DEFAULT '00:00:00' COMMENT '处理开始时间', + `end_time` time(0) NOT NULL DEFAULT '00:00:00' COMMENT '处理结束时间', + `status` CHAR(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '0:正常;1:已通知未完成;2:删除;3:已完成', + `detail` VARCHAR(500) NOT NULL DEFAULT '' COMMENT '操作细节(如果是文件图片则是url,如果多个选项则,隔开)', + `sub_type` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '子类型(修改备注:edit_remark;修改标签:edit_tag;编辑多选框:edit_multi;编辑单选:edit_choice;编辑图片:edit_pic;编辑文件:edit_file;加入群聊:join_group;退出群聊:quit_group;加好友:add_user;删除好友:del_user', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = INNODB CHARACTER +SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '客户轨迹表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for we_department +-- ---------------------------- +DROP TABLE IF EXISTS `we_department`; +CREATE TABLE `we_department` +( + `corp_id` varchar(64) NOT NULL DEFAULT '' COMMENT '公司ID', + `id` bigint(20) NOT NULL, + `parent_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '父部门id。根部门为1', + `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '部门名称', + PRIMARY KEY (`corp_id`, `id`) +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '企业微信部门表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for we_emple_code +-- ---------------------------- +DROP TABLE IF EXISTS `we_emple_code`; +CREATE TABLE `we_emple_code` +( + `id` bigint(20) NOT NULL, + `corp_id` varchar(64) NOT NULL DEFAULT '' COMMENT '授权企业ID', + `config_id` varchar(50) NOT NULL DEFAULT '' COMMENT '新增联系方式的配置id', + `code_type` tinyint(4) NOT NULL DEFAULT '2' COMMENT '活码类型:1:单人;2:多人;3:批量', + `skip_verify` tinyint(4) NOT NULL DEFAULT '1' COMMENT '自动成为好友:0:否,1:全天,2:时间段', + `scenario` varchar(300) NOT NULL DEFAULT '' COMMENT '活动场景', + `welcome_msg` varchar(2000) NOT NULL DEFAULT '' COMMENT '欢迎语', + `create_by` varchar(64) NOT NULL DEFAULT '' COMMENT '创建人', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `del_flag` tinyint(4) NOT NULL DEFAULT '0' COMMENT '0:正常;1:删除;', + `qr_code` varchar(100) NOT NULL DEFAULT '' COMMENT '二维码链接', + `update_by` varchar(64) NOT NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `state` varchar(30) NOT NULL DEFAULT '' COMMENT '用于区分客户具体是通过哪个「联系我」添加。不能超过30个字符', + `source` tinyint(4) NOT NULL DEFAULT '0' COMMENT '来源类型:0:活码创建,1:新客建群创建', + `remark_type` tinyint(2) NOT NULL DEFAULT '0' COMMENT '备注类型:0:不备注,1:在昵称前,2:在昵称后', + `remark_name` varchar(32) NOT NULL DEFAULT '' COMMENT '备注名', + `effect_time_open` varchar(8) NOT NULL DEFAULT '' COMMENT '开启时间 HH:mm', + `effect_time_close` varchar(8) NOT NULL DEFAULT '' COMMENT '关闭时间 HH:mm', + `material_sort` varchar(255) NOT NULL DEFAULT '' COMMENT '附件排序', + `tag_flag` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否可打标签:0不自动打标签,1:自动打标签', + `welcome_msg_type` tinyint(1) NOT NULL DEFAULT '0' COMMENT '欢迎语类型,0:普通欢迎语,1:活动欢迎语', + `code_activity_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '兑换码活动id', + `code_success_material_sort` varchar(255) NOT NULL DEFAULT '' COMMENT '有可使用兑换码,发送该附件', + `code_success_msg` varchar(2000) NOT NULL DEFAULT '' COMMENT '有可使用兑换码,发送该欢迎语', + `code_fail_material_sort` varchar(255) NOT NULL DEFAULT '' COMMENT '没有可用的兑换码,或者兑换码已被删除,发送该附件', + `code_fail_msg` varchar(2000) NOT NULL DEFAULT '' COMMENT '没有可用的兑换码,或者兑换活动已被删除,发送该欢迎语', + `code_repeat_material_sort` varchar(255) NOT NULL DEFAULT '' COMMENT '客户再次触发,若活动开启参与限制,发送该附件', + `code_repeat_msg` varchar(2000) NOT NULL DEFAULT '' COMMENT '客户再次触发,若活动开启参与限制,发送该欢迎语', + `app_link` varchar(128) NOT NULL DEFAULT '' COMMENT '活码小程序链接', + PRIMARY KEY (`id`) USING BTREE, + KEY `normal_effecttime_open` (`effect_time_open`) USING BTREE COMMENT '普通索引effect_time_open', + KEY `normal_effecttime_close` (`effect_time_close`) USING BTREE COMMENT '普通索引effect_time_close' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='员工活码表'; +-- ---------------------------- +-- Table structure for we_emple_code_tag +-- ---------------------------- +DROP TABLE IF EXISTS `we_emple_code_tag`; +CREATE TABLE `we_emple_code_tag` +( + `id` bigint(20) NOT NULL, + `tag_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '标签id', + `tag_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '标签名称', + `emple_code_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '员工活码id', + `del_flag` tinyint(4) NOT NULL DEFAULT 0 COMMENT '0 未删除 1 已删除', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '员工活码标签' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for we_emple_code_use_scop +-- ---------------------------- +DROP TABLE IF EXISTS `we_emple_code_use_scop`; +CREATE TABLE `we_emple_code_use_scop` +( + `id` bigint(20) NOT NULL, + `emple_code_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '员工活码id', + `business_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '活码类型下业务使用人的id', + `party_id` bigint(10) NOT NULL DEFAULT 0 COMMENT '部门id列表,只在多人时有效', + `business_id_type` tinyint(4) NOT NULL DEFAULT 0 COMMENT '业务id类型1:组织机构id,2:成员id', + `business_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '活码下使用人姓名', + `del_flag` tinyint(4) NOT NULL DEFAULT 0 COMMENT '0 未删除 1 已删除', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '员工活码使用人' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for we_flower_customer_rel +-- ---------------------------- +DROP TABLE IF EXISTS `we_flower_customer_rel`; +CREATE TABLE `we_flower_customer_rel` +( + `id` bigint(20) NOT NULL, + `user_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '添加了此外部联系人的企业成员userid', + `external_userid` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '客户id', + `corp_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '企业ID', + `oper_userid` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '发起添加的userid,如果成员主动添加,为成员的userid;如果是客户主动添加,则为客户的外部联系人userid;如果是内部成员共享/管理员分配,则为对应的成员/管理员userid', + `remark` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '该成员对此外部联系人的备注', + `description` varchar(258) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '该成员对此外部联系人的描述', + `create_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '该成员添加此外部联系人的时间', + `remark_corp_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '该成员对此客户备注的企业名称\r\n', + `remark_mobiles` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '该成员对此客户备注的手机号码', + `qq` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '客户QQ', + `address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '客户地址', + `email` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '邮件', + `add_way` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '该成员添加此客户的来源,', + `state` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '企业自定义的state参数,用于区分客户具体是通过哪个「联系我」添加,由企业通过创建「联系我」方式指定', + `status` char(2) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '状态(0正常 1删除流失 2员工删除用户)', + `delete_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '删除时间', + `wechat_channel` varchar(64) NOT NULL DEFAULT '' COMMENT '该成员添加此客户的来源add_way为10时,对应的视频号信息', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `un_user_external_userid_corpid` (`external_userid`, `user_id`, `corp_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '企业员工与客户的关系表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for we_flower_customer_tag_rel +-- ---------------------------- +DROP TABLE IF EXISTS `we_flower_customer_tag_rel`; +CREATE TABLE `we_flower_customer_tag_rel` +( + `id` bigint(20) NOT NULL, + `flower_customer_rel_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '添加客户的企业微信用户', + `tag_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '标签id', + `create_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP, + `external_userid` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE KEY `un_rel_tag_id` (`flower_customer_rel_id`,`tag_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '客户标签关系表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for we_group +-- ---------------------------- +DROP TABLE IF EXISTS `we_group`; +CREATE TABLE `we_group` +( + `chat_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `owner` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '群主userId', + `corp_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '企业ID', + `group_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '群聊' COMMENT '群名', + `create_time` timestamp(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `notice` VARCHAR(2048) CHARACTER SET utf8mb4 + COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' + COMMENT '群公告', + `status` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0 - 正常;1 - 跟进人离职;2 - 离职继承中;3 - 离职继承完成', + PRIMARY KEY (`chat_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '企业微信群' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for we_group_code +-- ---------------------------- +DROP TABLE IF EXISTS `we_group_code`; +CREATE TABLE `we_group_code` +( + `id` bigint(20) NOT NULL, + `corp_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '企业Id', + `code_url` varchar(150) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '二维码链接', + `uuid` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '二维码标识符', + `activity_head_url` varchar(150) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '活码头像链接', + `activity_name` varchar(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '活码名称', + `activity_desc` varchar(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '活码描述', + `activity_scene` varchar(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '场景', + `guide` varchar(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '引导语', + `join_group_is_tip` tinyint(4) NOT NULL DEFAULT 0 COMMENT '进群是否提示:1:是;0:否;', + `tip_msg` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '进群提示语', + `customer_server_qr_code` varchar(150) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '客服二维码', + `del_flag` tinyint(4) NOT NULL DEFAULT 0 COMMENT '0 未删除 1 已删除', + `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '备注', + `avatar_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '活码头像链接', + `show_tip` int(11) NOT NULL DEFAULT 0, + `seq` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '实际群码顺序', + `create_type` tinyint(2) NOT NULL DEFAULT '0' COMMENT '创建类型 1:群二维码 2: 企微活码', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '客户群活码' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for we_group_code_actual +-- ---------------------------- +DROP TABLE IF EXISTS `we_group_code_actual`; +CREATE TABLE `we_group_code_actual` +( + `id` bigint(20) NOT NULL, + `group_code_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '群活码id', + `chat_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '群聊id', + `actual_group_qr_code` varchar(150) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '实际群码', + `group_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '群名称', + `effect_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '有效期', + `scan_code_times_limit` int(11) NOT NULL DEFAULT 0 COMMENT '扫码次数限制', + `chat_group_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '群聊名称', + `scan_code_times` int(11) NOT NULL DEFAULT 0 COMMENT '扫码次数', + `del_flag` tinyint(4) NOT NULL DEFAULT 0 COMMENT '0:正常使用;1:删除;', + `status` tinyint(4) NOT NULL DEFAULT 0 COMMENT '0:使用中', + `update_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', + `create_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `chat_ids` varchar(255) NOT NULL DEFAULT '' COMMENT '群ids,逗号分割', + `scene` tinyint(2) NOT NULL DEFAULT '2' COMMENT '场景。1 - 群的小程序插件 2 - 群的二维码插件', + `remark` varchar(30) NOT NULL DEFAULT '' COMMENT '联系方式的备注信息,用于助记', + `room_base_id` int(11) NOT NULL DEFAULT '1' COMMENT '起始序号', + `room_base_name` varchar(40) NOT NULL DEFAULT '' COMMENT '群名前缀', + `auto_create_room` tinyint(2) NOT NULL DEFAULT '1' COMMENT '是否自动新建群。0-否;1-是。 默认为1', + `state` varchar(30) NOT NULL DEFAULT '' COMMENT '企业自定义的state参数,用于区分不同的入群渠道', + `config_id` varchar(64) NOT NULL DEFAULT '' COMMENT '加群配置id', + `sort_no` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '排序字段', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '实际群码' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for we_group_member +-- ---------------------------- +DROP TABLE IF EXISTS `we_group_member`; +CREATE TABLE `we_group_member` +( + `id` bigint(20) NOT NULL, + `user_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '群成员id', + `chat_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '群id', + `corp_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '企业id', + `union_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '外部联系人在微信开放平台的唯一身份标识', + `join_time` timestamp(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '加群时间', + `join_scene` tinyint(4) NOT NULL DEFAULT 0 COMMENT '加入方式', + `type` tinyint(4) NOT NULL DEFAULT 0 COMMENT '成员类型:1 - 企业成员;2 - 外部联系人', + `name` varchar(32) NOT NULL DEFAULT '' COMMENT '成员名称', + `invitor` varchar(64) NOT NULL DEFAULT '' COMMENT '邀请者userId', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `un_member`(`user_id`, `chat_id`, `corp_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '企业微信群成员' ROW_FORMAT = Dynamic; + + +-- ---------------------------- +-- Table structure for we_group_statistic +-- ---------------------------- +DROP TABLE IF EXISTS `we_group_statistic`; +CREATE TABLE `we_group_statistic` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id', + `corp_id` varchar(64) NOT NULL DEFAULT '' COMMENT '授权企业ID', + `chat_id` varchar(65) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '群ID', + `stat_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '数据日期', + `new_chat_cnt` int(10) NOT NULL DEFAULT 0 COMMENT '新增客户群数量', + `chat_total` int(10) NOT NULL DEFAULT 0 COMMENT '截至当天客户群总数量', + `chat_has_msg` int(10) NOT NULL DEFAULT 0 COMMENT '截至当天有发过消息的客户群数量', + `new_member_cnt` int(10) NOT NULL DEFAULT 0 COMMENT '客户群新增群人数', + `member_total` int(10) NOT NULL DEFAULT 0 COMMENT '截至当天客户群总人数', + `member_has_msg` int(10) NOT NULL DEFAULT 0 COMMENT '截至当天有发过消息的群成员数', + `msg_total` int(10) NOT NULL DEFAULT 0 COMMENT '截至当天客户群消息总数', + PRIMARY KEY (`id`) USING BTREE, + INDEX `stat_time_index`(`stat_time`, `chat_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1420806332035928142 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '群聊数据统计表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for we_material +-- ---------------------------- +DROP TABLE IF EXISTS `we_material`; +CREATE TABLE `we_material` +( + `id` bigint(100) NOT NULL COMMENT '主键id', + `category_id` bigint(100) NOT NULL DEFAULT 0 COMMENT '分类id', + `material_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '本地资源文件地址', + `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '文本内容、图片文案', + `material_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '图片名称', + `digest` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '摘要', + `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '创建人', + `create_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '更新人', + `update_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', + `cover_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '封面本地资源文件', + `audio_time` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '音频时长', + `expire_time` datetime(0) NOT NULL DEFAULT '2099-01-01 00:00:00' COMMENT '过期时间', + `show_material` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否发布到侧边栏(0否,1是)', + `temp_flag` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否为临时素材(0:正常显示的素材,1:临时素材)', + `is_defined` TINYINT(1) NOT NULL DEFAULT '0' + COMMENT '链接时使用(0:默认,1:自定义)', + `enable_convert_radar` tinyint(1) NOT NULL DEFAULT '0' COMMENT '链接时使用(0,不转化为雷达,1:转化为雷达)', + `radar_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '雷达id,存储雷达时使用', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '素材表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for we_material_config +-- ---------------------------- +DROP TABLE IF EXISTS `we_material_config`; +CREATE TABLE `we_material_config` +( + `corp_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '企业id', + `del_days` int(3) NOT NULL DEFAULT 0 COMMENT '自动删除天数', + `is_del` tinyint(1) NOT NULL DEFAULT 0 COMMENT '过期后是否自动删除(0否,1是)', + PRIMARY KEY (`corp_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '企业素材配置表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for we_material_tag +-- ---------------------------- +DROP TABLE IF EXISTS `we_material_tag`; +CREATE TABLE `we_material_tag` +( + `id` int(10) NOT NULL AUTO_INCREMENT COMMENT '主键', + `corp_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '企业id', + `tag_name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '标签名称', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '素材标签表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for we_material_tag_rel +-- ---------------------------- +DROP TABLE IF EXISTS `we_material_tag_rel`; +CREATE TABLE `we_material_tag_rel` +( + `id` int(10) NOT NULL AUTO_INCREMENT COMMENT '主键', + `material_id` bigint(100) NOT NULL DEFAULT 0 COMMENT '素材id', + `material_tag_id` int(10) NOT NULL DEFAULT 0 COMMENT '素材标签id', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `idx_material_tag`(`material_id`, `material_tag_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '素材标签关联表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for we_message_push +-- ---------------------------- +DROP TABLE IF EXISTS `we_message_push`; +CREATE TABLE `we_message_push` +( + `chat_id` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '群聊id', + `message_push_id` bigint(20) NOT NULL COMMENT '主键id', + `agent_id` int(11) NOT NULL DEFAULT 0 COMMENT '企业应用的id', + `push_type` int(1) NOT NULL DEFAULT 0 COMMENT '群发类型 0 发给客户 1 发给客户群', + `message_type` varchar(2) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '消息类型 0 文本消息 1 图片消息 2 语音消息 3 视频消息 4 文件消息 5 文本卡片消息 6 图文消息\r\n7 图文消息(mpnews) 8 markdown消息 9 小程序通知消息 10 任务卡片消息', + `to_user` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '指定接收消息的成员', + `to_party` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '指定接收消息的部门', + `to_tag` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '指定接收消息的标签', + `message_json` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '消息体', + `push_range` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '消息范围 0 全部客户 1 指定客户', + `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '创建人', + `create_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '更新人', + `update_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', + `del_flag` int(1) NOT NULL DEFAULT 0 COMMENT '0 未删除 1 已删除', + `invaliduser` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '无效用户', + `invalidparty` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '无效单位', + `invalidtag` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '无效标签', + PRIMARY KEY (`message_push_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '消息发送的表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for we_pres_tag_group +-- ---------------------------- +DROP TABLE IF EXISTS `we_pres_tag_group`; +CREATE TABLE `we_pres_tag_group` +( + `task_id` bigint(20) NOT NULL COMMENT '老客户标签建群任务id', + `corp_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '企业ID', + `group_code_id` bigint(11) NOT NULL DEFAULT 0 COMMENT '群活码id', + `msgid` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '企业群发消息的id', + `task_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '任务名称', + `send_type` tinyint(1) NOT NULL DEFAULT 0 COMMENT '发送方式 0: 企业群发 1:个人群发', + `create_by` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '创建人', + `create_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_by` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '更新人', + `update_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', + `send_scope` tinyint(1) NOT NULL DEFAULT 0 COMMENT '发送范围 0: 全部客户 1:部分客户', + `send_gender` tinyint(1) UNSIGNED ZEROFILL NOT NULL DEFAULT 0 COMMENT '发送性别 0: 全部 1: 男 2: 女 3:未知', + `cus_begin_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '目标客户被添加起始时间', + `cus_end_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '目标客户被添加结束时间', + `welcome_msg` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '加群引导语', + `del_flag` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未删除、 1:删除;', + PRIMARY KEY (`task_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '老客户标签建群' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for we_pres_tag_group_scope +-- ---------------------------- +DROP TABLE IF EXISTS `we_pres_tag_group_scope`; +CREATE TABLE `we_pres_tag_group_scope` +( + `task_id` bigint(20) NOT NULL COMMENT '老客户标签建群任务id', + `we_user_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '员工id', + `is_done` smallint(1) NOT NULL DEFAULT 0 COMMENT '是否已处理' +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '老客标签建群使用范围表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for we_pres_tag_group_stat +-- ---------------------------- +DROP TABLE IF EXISTS `we_pres_tag_group_stat`; +CREATE TABLE `we_pres_tag_group_stat` +( + `task_id` bigint(20) NOT NULL COMMENT '老客标签建群任务id', + `external_userid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '客户id', + `user_id` VARCHAR(64) CHARACTER SET utf8mb4 + COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' + COMMENT '员工ID', + `customer_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '', + `is_sent` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否已送达', + `is_in_group` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否已经在群' +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '老客标签建群客户统计表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for we_pres_tag_group_tag +-- ---------------------------- +DROP TABLE IF EXISTS `we_pres_tag_group_tag`; +CREATE TABLE `we_pres_tag_group_tag` +( + `task_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '老客户标签建群任务id', + `tag_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '标签id' +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '老客标签建群标签关联表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for we_sensitive +-- ---------------------------- +DROP TABLE IF EXISTS `we_sensitive`; +CREATE TABLE `we_sensitive` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', + `audit_user_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '审计人id', + `strategy_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '策略名称', + `pattern_words` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '匹配词', + `audit_user_name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '审计人', + `alert_flag` tinyint(4) NOT NULL DEFAULT 1 COMMENT '消息通知,1 开启 0 关闭', + `del_flag` tinyint(4) NOT NULL DEFAULT 0 COMMENT '删除标识,1 已删除 0 未删除', + `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '创建人', + `create_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '更新人', + `update_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', + `corp_id` varchar(64) NOT NULL DEFAULT '' COMMENT '企业id', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '敏感词设置表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for we_sensitive_act +-- ---------------------------- +DROP TABLE IF EXISTS `we_sensitive_act`; +CREATE TABLE `we_sensitive_act` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', + `act_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '敏感行为名称', + `order_num` int(11) NOT NULL DEFAULT 0 COMMENT '排序字段', + `enable_flag` tinyint(4) NOT NULL DEFAULT 1 COMMENT '记录敏感行为,1 开启 0 关闭', + `del_flag` tinyint(4) NOT NULL DEFAULT 0 COMMENT '删除标识,1 已删除 0 未删除', + `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '创建人', + `create_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '更新人', + `update_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', + `corp_id` varchar(64) NOT NULL DEFAULT '' COMMENT '企业id', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '敏感行为表' ROW_FORMAT = Dynamic; + +-- INSERT INTO `we_sensitive_act` VALUES (1, '拉黑/删除客户', 0, 1, 0, 'admin', '2021-08-06 12:20:09', 'admin', '2021-08-06 12:20:09'); +-- INSERT INTO `we_sensitive_act` VALUES (5, '互发红包', 0, 1, 0, 'admin', '2021-08-06 16:04:52', 'admin', '2021-08-06 16:04:52'); +-- INSERT INTO `we_sensitive_act` VALUES (6, '员工发送名片', 0, 1, 0, 'admin', '2021-08-06 16:05:09', 'admin', '2021-08-06 16:05:09'); + +-- ---------------------------- +-- Table structure for we_sensitive_act_hit +-- ---------------------------- +DROP TABLE IF EXISTS `we_sensitive_act_hit`; +CREATE TABLE `we_sensitive_act_hit` +( + `id` BIGINT(20) NOT NULL AUTO_INCREMENT + COMMENT '主键', + `operator_id` VARCHAR(64) CHARACTER SET utf8mb4 + COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' + COMMENT '敏感行为操作人id', + `operator` VARCHAR(512) CHARACTER SET utf8mb4 + COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' + COMMENT '敏感行为操作人信息', + `operate_target_id` VARCHAR(64) CHARACTER SET utf8mb4 + COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' + COMMENT '敏感行为操作对象id', + `operate_target` VARCHAR(512) CHARACTER SET utf8mb4 + COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' + COMMENT '敏感行为操作对象信息', + `sensitive_act_id` BIGINT(20) NOT NULL DEFAULT 0 + COMMENT '敏感行为id', + `sensitive_act` VARCHAR(100) CHARACTER SET utf8mb4 + COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' + COMMENT '敏感行为名称', + `del_flag` TINYINT(4) NOT NULL DEFAULT 0 + COMMENT '删除标识,1 已删除 0 未删除', + `create_by` VARCHAR(64) CHARACTER SET utf8mb4 + COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' + COMMENT '创建人', + `create_time` DATETIME(0) NOT NULL DEFAULT CURRENT_TIMESTAMP + COMMENT '创建时间', + `update_by` VARCHAR(64) CHARACTER SET utf8mb4 + COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' + COMMENT '更新人', + `update_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', + `corp_id` varchar(64) NOT NULL DEFAULT '' COMMENT '企业id', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '敏感行为记录表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for we_sensitive_audit_scope +-- ---------------------------- +DROP TABLE IF EXISTS `we_sensitive_audit_scope`; +CREATE TABLE `we_sensitive_audit_scope` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', + `sensitive_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '敏感词表主键', + `audit_scope_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '审计对象id', + `scope_type` tinyint(4) NOT NULL DEFAULT 0 COMMENT '审计范围类型, 1 组织机构 2 成员', + `audit_scope_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '审计对象名称', + `corp_id` varchar(64) NOT NULL DEFAULT '' COMMENT '企业id', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '敏感词审计范围' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for we_tag +-- ---------------------------- +DROP TABLE IF EXISTS `we_tag`; +CREATE TABLE `we_tag` +( + `tag_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '微信端返回的id', + `group_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '标签组id', + `corp_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '企业ID', + `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '标签名', + `create_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '状态(0正常 1删除)', + `seq_id` BIGINT ( 20 ) NOT NULL AUTO_INCREMENT COMMENT '非主键自增序列号', + PRIMARY KEY (`tag_id`) USING BTREE, + KEY `idx_seq_id` ( `seq_id` ) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '企业微信标签' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for we_tag_group +-- ---------------------------- +DROP TABLE IF EXISTS `we_tag_group`; +CREATE TABLE `we_tag_group` +( + `group_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `group_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '标签组名', + `corp_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '企业ID', + `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '创建人', + `create_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '帐号状态(0正常 2删除)', + PRIMARY KEY (`group_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '标签组' ROW_FORMAT = Dynamic; + + + +-- ---------------------------- +-- Table structure for we_user +-- ---------------------------- +DROP TABLE IF EXISTS `we_user`; +CREATE TABLE `we_user` +( + `corp_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '企业id', + `user_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `head_image_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '头像地址', + `user_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '用户名称', + `alias` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '用户昵称', + `gender` tinyint(1) NOT NULL DEFAULT 1 COMMENT '性别。1表示男性,2表示女性', + `mobile` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '手机号', + `email` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '邮箱', + `wx_account` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '个人微信号', + `main_department` bigint(20) NOT NULL DEFAULT '0' COMMENT '主部门ID', + `department` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '用户所属部门,使用逗号隔开,字符串格式存储', + `position` varchar(300) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '职务', + `is_leader_in_dept` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '1表示为上级,0表示普通成员(非上级)。', + `join_time` date NOT NULL DEFAULT '0000-00-00' COMMENT '入职时间', + `enable` tinyint(4) NOT NULL DEFAULT 1 COMMENT '是否启用(1表示启用成员,0表示禁用成员)', + `id_card` char(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '身份证号', + `qq_account` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT 'QQ号', + `telephone` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '座机', + `address` varchar(300) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '地址', + `birthday` date NOT NULL DEFAULT '0000-00-00' COMMENT '生日', + `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '备注', + `customer_tags` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '客户标签,字符串使用逗号隔开', + `dimission_time` datetime(0) NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '离职时间', + `is_allocate` tinyint(1) NOT NULL DEFAULT 0 COMMENT '离职是否分配(1:已分配;0:未分配;)', + `is_activate` tinyint(4) NOT NULL DEFAULT 0 COMMENT '激活状态: 1=已激活,2=已禁用,4=未激活,5=退出企业,6=删除', + `isOpenChat` tinyint(4) NOT NULL DEFAULT 0 COMMENT '是否开启会话存档 0:关闭 1:开启', + `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '创建人', + `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '更新人', + `create_time` datetime(0) NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '创建时间', + `update_time` datetime(0) NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '更新时间', + `ui_color` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '#6BB4AB' COMMENT '后台界面主题颜色', + PRIMARY KEY (`corp_id`, `user_id`) USING BTREE, + KEY `idx_is_activate` (`is_activate`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '企业员工表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for we_user_behavior_data +-- ---------------------------- +DROP TABLE IF EXISTS `we_user_behavior_data`; +CREATE TABLE `we_user_behavior_data` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `corp_id` varchar(64) NOT NULL DEFAULT '' COMMENT '企业ID', + `user_id` varchar(128) NOT NULL DEFAULT '' COMMENT '员工id', + `stat_time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '数据日期,为当日0点的时间戳', + `new_apply_cnt` int(10) NOT NULL DEFAULT '0' COMMENT '发起申请数', + `new_contact_cnt` int(10) NOT NULL DEFAULT '0' COMMENT '新增客户数,成员新添加的客户数量', + `chat_cnt` int(10) NOT NULL DEFAULT '0' COMMENT '聊天总数, 成员有主动发送过消息的单聊总数', + `message_cnt` int(10) NOT NULL DEFAULT '0' COMMENT '发送消息数,成员在单聊中发送的消息总数', + `reply_percentage` double NOT NULL DEFAULT '0' COMMENT '已回复聊天占比,浮点型,客户主动发起聊天后,成员在一个自然日内有回复过消息的聊天数/客户主动发起的聊天数比例,不包括群聊,仅在确有聊天时返回', + `avg_reply_time` int(10) NOT NULL DEFAULT '0' COMMENT '平均首次回复时长', + `negative_feedback_cnt` int(11) NOT NULL DEFAULT '0' COMMENT '删除/拉黑成员的客户数,即将成员删除或加入黑名单的客户数', + PRIMARY KEY (`id`) USING BTREE, + INDEX `stat_time_index` (`stat_time`,`user_id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=1420806352176977808 DEFAULT CHARSET=utf8mb4 COMMENT='联系客户统计数据 '; + + +DROP TABLE IF EXISTS `we_auth_corp_info`; +CREATE TABLE `we_auth_corp_info` +( + `corp_id` VARCHAR(64) NOT NULL DEFAULT '' + COMMENT '授权企业ID', + `suite_id` VARCHAR(128) NOT NULL DEFAULT '' + COMMENT '第三方应用的SuiteId', + `permanent_code` VARCHAR(512) NOT NULL DEFAULT '' + COMMENT '企业微信永久授权码,最长为512字节', + `corp_name` VARCHAR(255) NOT NULL DEFAULT '' + COMMENT '授权方企业名称,即企业简称', + `corp_type` VARCHAR(64) NOT NULL DEFAULT '' + COMMENT '授权方企业类型,认证号:verified, 注册号:unverified', + `corp_square_logo_url` VARCHAR(512) NOT NULL DEFAULT '' + COMMENT '授权方企业方形头像', + `corp_user_max` INT(11) NOT NULL DEFAULT '0' + COMMENT '授权方企业用户规模', + `corp_agent_max` INT(11) NOT NULL DEFAULT '0' + COMMENT '授权方企业应用数上限', + `corp_full_name` VARCHAR(255) NOT NULL DEFAULT '' + COMMENT '授权方企业的主体名称(仅认证或验证过的企业有),即企业全称。', + `subject_type` TINYINT(2) NOT NULL DEFAULT '0' + COMMENT '企业类型,1. 企业; 2. 政府以及事业单位; 3. 其他组织, 4.团队号', + `verified_end_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP + COMMENT '认证到期时间', + `corp_wxqrcode` VARCHAR(512) NOT NULL DEFAULT '' + COMMENT '授权企业在微工作台(原企业号)的二维码,可用于关注微工作台', + `corp_scale` VARCHAR(255) NOT NULL DEFAULT '' + COMMENT '企业规模。当企业未设置该属性时,值为空', + `corp_industry` VARCHAR(255) NOT NULL DEFAULT '' + COMMENT '企业所属行业。当企业未设置该属性时,值为空', + `corp_sub_industry` VARCHAR(255) NOT NULL DEFAULT '' + COMMENT '企业所属子行业。当企业未设置该属性时,值为空', + `cancel_auth` TINYINT(1) NOT NULL DEFAULT '0' + COMMENT '取消授权(0N1Y)', + PRIMARY KEY (`corp_id`, `suite_id`) +) ENGINE = InnoDB + DEFAULT CHARSET = utf8mb4 + COMMENT ='授权企业信息表'; + + +DROP TABLE IF EXISTS `we_auth_corp_info_extend`; +CREATE TABLE `we_auth_corp_info_extend` +( + `corp_id` VARCHAR(64) NOT NULL DEFAULT '' + COMMENT '授权企业ID', + `suite_id` VARCHAR(128) NOT NULL DEFAULT '' + COMMENT '第三方应用的SuiteId', + `agentid` VARCHAR(128) NOT NULL DEFAULT '' + COMMENT '授权方应用id', + `name` VARCHAR(255) NOT NULL DEFAULT '' + COMMENT '授权方应用名字', + `square_logo_url` VARCHAR(255) NOT NULL DEFAULT '' + COMMENT '授权方应用方形头像', + `round_logo_url` VARCHAR(255) NOT NULL DEFAULT '' + COMMENT '授权方应用圆形头像', + `auth_mode` TINYINT(2) NOT NULL DEFAULT '-1' + COMMENT '授权模式,0为管理员授权;1为成员授权', + `is_customized_app` TINYINT(1) NOT NULL DEFAULT '0' + COMMENT '是否为代开发自建应用(0N1Y)', + `auth_user_info_userid` VARCHAR(128) NOT NULL DEFAULT '' + COMMENT '授权管理员的userid,可能为空(企业互联由上级企业共享第三方应用给下级时,不返回授权的管理员信息)', + `auth_user_info_open_userid` VARCHAR(128) NOT NULL DEFAULT '' + COMMENT '授权管理员的open_userid,可能为空(企业互联由上级企业共享第三方应用给下级时,不返回授权的管理员信息)', + `auth_user_info_name` VARCHAR(255) NOT NULL DEFAULT '' + COMMENT '授权管理员的name,可能为空', + `auth_user_info_avatar` VARCHAR(255) NOT NULL DEFAULT '' + COMMENT '授权管理员的头像url,可能为空', + `dealer_corp_info_corpid` VARCHAR(128) NOT NULL DEFAULT '' + COMMENT '代理服务商企业微信id', + `dealer_corp_info_corp_name` VARCHAR(255) NOT NULL DEFAULT '' + COMMENT '代理服务商企业微信名称', + `register_code_info_register_code` VARCHAR(512) NOT NULL DEFAULT '' + COMMENT '注册码 , 最长为512个字节', + `register_code_info_template_id` VARCHAR(128) NOT NULL DEFAULT '' + COMMENT '推广包ID,最长为128个字节', + `register_code_info_state` VARCHAR(128) NOT NULL DEFAULT '' + COMMENT '用户自定义的状态值。只支持英文字母和数字,最长为128字节。', + PRIMARY KEY (`corp_id`, `suite_id`) +) ENGINE = InnoDB + DEFAULT CHARSET = utf8mb4 + COMMENT ='授权企业信息扩展表'; + +-- ---------------------------- +-- Table structure for gen_table +-- ---------------------------- +DROP TABLE IF EXISTS `gen_table`; +CREATE TABLE `gen_table` +( + `table_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '编号', + `table_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '表名称', + `table_comment` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '表描述', + `class_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '实体类名称', + `tpl_category` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT 'crud' COMMENT '使用的模板(crud单表操作 tree树表操作)', + `package_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '生成包路径', + `module_name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '生成模块名', + `business_name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '生成业务名', + `function_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '生成功能名', + `function_author` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '生成功能作者', + `gen_type` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '生成代码方式(0zip压缩包 1自定义路径)', + `gen_path` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '/' COMMENT '生成路径(不填默认项目路径)', + `options` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '其它生成选项', + `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`table_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 42 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '代码生成业务表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for gen_table_column +-- ---------------------------- +DROP TABLE IF EXISTS `gen_table_column`; +CREATE TABLE `gen_table_column` +( + `column_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '编号', + `table_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '归属表编号', + `column_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '列名称', + `column_comment` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '列描述', + `column_type` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '列类型', + `java_type` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'JAVA类型', + `java_field` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'JAVA字段名', + `is_pk` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '是否主键(1是)', + `is_increment` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '是否自增(1是)', + `is_required` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '是否必填(1是)', + `is_insert` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '是否为插入字段(1是)', + `is_edit` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '是否编辑字段(1是)', + `is_list` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '是否列表字段(1是)', + `is_query` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '是否查询字段(1是)', + `query_type` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT 'EQ' COMMENT '查询方式(等于、不等于、大于、小于、范围)', + `html_type` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '显示类型(文本框、文本域、下拉框、复选框、单选框、日期控件)', + `dict_type` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '字典类型', + `sort` int(11) NULL DEFAULT NULL COMMENT '排序', + `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者', + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`column_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 344 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '代码生成业务表字段' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for qrtz_blob_triggers +-- ---------------------------- +DROP TABLE IF EXISTS `qrtz_blob_triggers`; +CREATE TABLE `qrtz_blob_triggers` +( + `sched_name` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `trigger_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `trigger_group` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `blob_data` blob NULL, + PRIMARY KEY (`sched_name`, `trigger_name`, `trigger_group`) USING BTREE, + CONSTRAINT `QRTZ_BLOB_TRIGGERS_ibfk_1` FOREIGN KEY (`sched_name`, `trigger_name`, `trigger_group`) REFERENCES `qrtz_triggers` (`sched_name`, `trigger_name`, `trigger_group`) ON DELETE RESTRICT ON UPDATE RESTRICT +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for qrtz_calendars +-- ---------------------------- +DROP TABLE IF EXISTS `qrtz_calendars`; +CREATE TABLE `qrtz_calendars` +( + `sched_name` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `calendar_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `calendar` blob NOT NULL, + PRIMARY KEY (`sched_name`, `calendar_name`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for qrtz_cron_triggers +-- ---------------------------- +DROP TABLE IF EXISTS `qrtz_cron_triggers`; +CREATE TABLE `qrtz_cron_triggers` +( + `sched_name` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `trigger_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `trigger_group` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `cron_expression` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `time_zone_id` varchar(80) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`sched_name`, `trigger_name`, `trigger_group`) USING BTREE, + CONSTRAINT `QRTZ_CRON_TRIGGERS_ibfk_1` FOREIGN KEY (`sched_name`, `trigger_name`, `trigger_group`) REFERENCES `qrtz_triggers` (`sched_name`, `trigger_name`, `trigger_group`) ON DELETE RESTRICT ON UPDATE RESTRICT +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for qrtz_fired_triggers +-- ---------------------------- +DROP TABLE IF EXISTS `qrtz_fired_triggers`; +CREATE TABLE `qrtz_fired_triggers` +( + `sched_name` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `entry_id` varchar(95) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `trigger_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `trigger_group` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `instance_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `fired_time` bigint(13) NOT NULL, + `sched_time` bigint(13) NOT NULL, + `priority` int(11) NOT NULL, + `state` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `job_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `job_group` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `is_nonconcurrent` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `requests_recovery` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`sched_name`, `entry_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for qrtz_job_details +-- ---------------------------- +DROP TABLE IF EXISTS `qrtz_job_details`; +CREATE TABLE `qrtz_job_details` +( + `sched_name` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `job_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `job_group` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `description` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `job_class_name` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `is_durable` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `is_nonconcurrent` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `is_update_data` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `requests_recovery` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `job_data` blob NULL, + PRIMARY KEY (`sched_name`, `job_name`, `job_group`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for qrtz_locks +-- ---------------------------- +DROP TABLE IF EXISTS `qrtz_locks`; +CREATE TABLE `qrtz_locks` +( + `sched_name` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `lock_name` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + PRIMARY KEY (`sched_name`, `lock_name`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for qrtz_paused_trigger_grps +-- ---------------------------- +DROP TABLE IF EXISTS `qrtz_paused_trigger_grps`; +CREATE TABLE `qrtz_paused_trigger_grps` +( + `sched_name` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `trigger_group` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + PRIMARY KEY (`sched_name`, `trigger_group`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for qrtz_scheduler_state +-- ---------------------------- +DROP TABLE IF EXISTS `qrtz_scheduler_state`; +CREATE TABLE `qrtz_scheduler_state` +( + `sched_name` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `instance_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `last_checkin_time` bigint(13) NOT NULL, + `checkin_interval` bigint(13) NOT NULL, + PRIMARY KEY (`sched_name`, `instance_name`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for qrtz_simple_triggers +-- ---------------------------- +DROP TABLE IF EXISTS `qrtz_simple_triggers`; +CREATE TABLE `qrtz_simple_triggers` +( + `sched_name` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `trigger_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `trigger_group` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `repeat_count` bigint(7) NOT NULL, + `repeat_interval` bigint(12) NOT NULL, + `times_triggered` bigint(10) NOT NULL, + PRIMARY KEY (`sched_name`, `trigger_name`, `trigger_group`) USING BTREE, + CONSTRAINT `QRTZ_SIMPLE_TRIGGERS_ibfk_1` FOREIGN KEY (`sched_name`, `trigger_name`, `trigger_group`) REFERENCES `qrtz_triggers` (`sched_name`, `trigger_name`, `trigger_group`) ON DELETE RESTRICT ON UPDATE RESTRICT +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for qrtz_simprop_triggers +-- ---------------------------- +DROP TABLE IF EXISTS `qrtz_simprop_triggers`; +CREATE TABLE `qrtz_simprop_triggers` +( + `sched_name` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `trigger_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `trigger_group` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `str_prop_1` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `str_prop_2` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `str_prop_3` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `int_prop_1` int(11) NULL DEFAULT NULL, + `int_prop_2` int(11) NULL DEFAULT NULL, + `long_prop_1` bigint(20) NULL DEFAULT NULL, + `long_prop_2` bigint(20) NULL DEFAULT NULL, + `dec_prop_1` decimal(13, 4) NULL DEFAULT NULL, + `dec_prop_2` decimal(13, 4) NULL DEFAULT NULL, + `bool_prop_1` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `bool_prop_2` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`sched_name`, `trigger_name`, `trigger_group`) USING BTREE, + CONSTRAINT `QRTZ_SIMPROP_TRIGGERS_ibfk_1` FOREIGN KEY (`sched_name`, `trigger_name`, `trigger_group`) REFERENCES `qrtz_triggers` (`sched_name`, `trigger_name`, `trigger_group`) ON DELETE RESTRICT ON UPDATE RESTRICT +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for qrtz_triggers +-- ---------------------------- +DROP TABLE IF EXISTS `qrtz_triggers`; +CREATE TABLE `qrtz_triggers` +( + `sched_name` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `trigger_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `trigger_group` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `job_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `job_group` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `description` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `next_fire_time` bigint(13) NULL DEFAULT NULL, + `prev_fire_time` bigint(13) NULL DEFAULT NULL, + `priority` int(11) NULL DEFAULT NULL, + `trigger_state` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `trigger_type` varchar(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `start_time` bigint(13) NOT NULL, + `end_time` bigint(13) NULL DEFAULT NULL, + `calendar_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `misfire_instr` smallint(2) NULL DEFAULT NULL, + `job_data` blob NULL, + PRIMARY KEY (`sched_name`, `trigger_name`, `trigger_group`) USING BTREE, + INDEX `sched_name`(`sched_name`, `job_name`, `job_group`) USING BTREE, + CONSTRAINT `QRTZ_TRIGGERS_ibfk_1` FOREIGN KEY (`sched_name`, `job_name`, `job_group`) REFERENCES `qrtz_job_details` (`sched_name`, `job_name`, `job_group`) ON DELETE RESTRICT ON UPDATE RESTRICT +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for we_leave_user +-- ---------------------------- +DROP TABLE IF EXISTS `we_leave_user`; +CREATE TABLE `we_leave_user` +( + `id` bigint(20) NOT NULL, + `user_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '用户id', + `corp_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '企业ID', + `head_image_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '头像地址', + `user_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '用户名称', + `alias` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '用户昵称', + `main_department` bigint(20) NOT NULL DEFAULT 0 COMMENT '主部门id,用于数据权限效验', + `main_department_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '用户所属主部门名字', + `is_allocate` tinyint(1) NOT NULL DEFAULT 0 COMMENT '离职是否分配(1:已分配;0:未分配;)', + `dimission_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '离职时间', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `user_id` (`user_id`,`dimission_time`,`corp_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '企业员工离职表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for we_application_center +-- ---------------------------- +CREATE TABLE `we_application_center` +( + `appid` INT(11) NOT NULL AUTO_INCREMENT + COMMENT '应用ID', + `name` VARCHAR(255) NOT NULL DEFAULT '' + COMMENT '应用名', + `description` VARCHAR(512) NOT NULL DEFAULT '' + COMMENT '应用描述', + `logo_url` VARCHAR(512) NOT NULL DEFAULT '' + COMMENT '应用头像', + `type` TINYINT(2) NOT NULL DEFAULT '0' + COMMENT '应用类型(1:企业工具,2:客户资源,3:内容资源)', + `introduction` LONGTEXT NOT NULL + COMMENT '功能介绍', + `instructions` LONGTEXT NOT NULL + COMMENT '使用说明', + `consulting_service` LONGTEXT NOT NULL + COMMENT '咨询服务', + `enable` TINYINT(1) NOT NULL DEFAULT '1' + COMMENT '启用(ON1Y)', + `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP + COMMENT '上架时间', + `development_type` TINYINT(1) NOT NULL DEFAULT '1' + COMMENT '开发类型(1自研,2三方)', + `sidebar_redirect_url` VARCHAR(512) NOT NULL DEFAULT '' + COMMENT '侧边栏url:自研存储相对路径,三方开发存储完整url', + `application_entrance_url` VARCHAR(512) NOT NULL DEFAULT '' + COMMENT '应用入口url', + PRIMARY KEY (`appid`) +) ENGINE = InnoDB + AUTO_INCREMENT = 2 + DEFAULT CHARSET = utf8mb4 + COMMENT ='应用中心表'; + + + +INSERT INTO `we_application_center` +VALUES (2, '青鸾智能工单系统', '企微群聊自动分析反馈内容形成工单,自动根据工单状态变更回复工单内容。', + '', + 1, + '群聊关联客户:企微群聊关联工单系统客户关系对应;\r\n自动获取工单信息:根据NLP自动获取信息,形成工单;\r\n自动回复工单信息:工单状态变更,自动群聊@工单反馈人员,自动告知状态;\r\n工单报表:自动发送当日工单报表;', + '使用该应用需进行初始化操作,进行工单系统注册、客服人员账号注册、客户资料维护;若您有疑问请扫描以下二维码,添加客服,咨询初始化操作事宜', + 'https://wecomsaas-1253559996.cos.ap-guangzhou.myqcloud.com/2021/12/16/壹鸽咨询服务.png', + 1, '2021-12-20 09:59:03', 1, 'workSheetAssistant', 'http://121.37.253.126:8088'); + + +CREATE TABLE `order_user_to_order_account` +( + `id` INT(11) NOT NULL AUTO_INCREMENT + COMMENT '主键', + `user_id` VARCHAR(64) NOT NULL DEFAULT '' + COMMENT '企业员工ID', + `corp_id` VARCHAR(64) NOT NULL DEFAULT '' + COMMENT '企业ID', + `network_id` VARCHAR(255) NOT NULL DEFAULT '' + COMMENT '网点ID', + `order_user_id` VARCHAR(255) NOT NULL DEFAULT '' + COMMENT '工单帐号ID', + `order_user_name` VARCHAR(255) NOT NULL DEFAULT '' + COMMENT '工单帐号名', + `bind_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`id`), + UNIQUE KEY `uniq_user` (`user_id`, `corp_id`) USING BTREE, + UNIQUE KEY `uniq_order_user` (`network_id`, `order_user_id`, `corp_id`, `user_id`) USING BTREE +) ENGINE = InnoDB + DEFAULT CHARSET = utf8mb4 + COMMENT ='企业员工与工单帐号绑定关系表'; + +-- ---------------------------- +-- Table structure for we_my_application +-- ---------------------------- +CREATE TABLE `we_my_application` +( + `id` INT(11) NOT NULL AUTO_INCREMENT + COMMENT 'ID', + `corp_id` VARCHAR(64) NOT NULL DEFAULT '' + COMMENT '企业ID', + `appid` INT(11) NOT NULL DEFAULT '-1' + COMMENT '应用ID', + `config` LONGTEXT NOT NULL + COMMENT '应用配置', + `enable` TINYINT(1) NOT NULL DEFAULT '1' + COMMENT '启用(ON1Y)', + `install_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP + COMMENT '安装时间', + `expire_time` DATETIME NOT NULL DEFAULT '2099-01-01 00:00:00' + COMMENT '过期时间', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE KEY `uniq_corpid_appid` (`corp_id`, `appid`) USING BTREE +) ENGINE = InnoDB + AUTO_INCREMENT = 1 + DEFAULT CHARSET = utf8mb4 + COMMENT ='我的应用'; + +CREATE TABLE `we_my_application_use_scope` +( + `id` INT(11) NOT NULL AUTO_INCREMENT + COMMENT 'ID', + `corp_id` VARCHAR(64) NOT NULL DEFAULT '' + COMMENT '企业ID', + `appid` INT(11) NOT NULL DEFAULT '-1' + COMMENT '应用ID', + `type` TINYINT(1) NOT NULL DEFAULT '0' + COMMENT '使用类型(1指定员工,2指定角色)', + `val` VARCHAR(255) NOT NULL DEFAULT '' + COMMENT '指定员工存userId,指定角色存角色ID', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB + DEFAULT CHARSET = utf8mb4 + COMMENT ='我的应用使用范围'; + +CREATE TABLE `order_group_to_order_customer` +( + `id` INT(11) NOT NULL AUTO_INCREMENT + COMMENT '主键', + `chat_id` VARCHAR(64) NOT NULL DEFAULT '' + COMMENT '外部群ID', + `corp_id` VARCHAR(64) NOT NULL DEFAULT '' + COMMENT '企业ID', + `network_id` VARCHAR(255) NOT NULL DEFAULT '' + COMMENT '网点ID', + `order_customer_id` VARCHAR(255) NOT NULL DEFAULT '' + COMMENT '工单客户ID', + `order_customer_name` VARCHAR(255) NOT NULL DEFAULT '' + COMMENT '工单客户名', + `bind_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP + COMMENT '绑定时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uniq_chat` (`chat_id`, `corp_id`) USING BTREE, + UNIQUE KEY `uniq_customer` (`network_id`, `order_customer_id`, `chat_id`) USING BTREE +) ENGINE = InnoDB + DEFAULT CHARSET = utf8mb4 + COMMENT ='企业客户群与工单客户绑定关系'; + + +SET +FOREIGN_KEY_CHECKS = 1; + +-- ---------------------------- +-- Table structure for we_words_category +-- ---------------------------- +DROP TABLE IF EXISTS `we_words_category`; +CREATE TABLE `we_words_category` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', + `corp_id` varchar(64) NOT NULL DEFAULT '' COMMENT '企业ID', + `parent_id` int(11) NOT NULL DEFAULT '0' COMMENT '父分组(0为根节点)', + `type` tinyint(1) NOT NULL DEFAULT '0' COMMENT '话术类型(0:企业话术,1:部门话术,2:我的话术)', + `use_range` varchar(255) NOT NULL DEFAULT '1' COMMENT '使用范围(企业话术:存入根部门1,部门话术:部门id,我的话术:员工id)', + `name` varchar(128) NOT NULL DEFAULT '' COMMENT '文件夹名称', + `sort` int(11) NOT NULL DEFAULT '0' COMMENT '文件夹排序', + PRIMARY KEY (`id`), + UNIQUE KEY `unique_corpid_type_name_userange` (`corp_id`,`type`,`name`,`use_range`) USING BTREE COMMENT '同一类型和权限范围下的文件夹名不能重名' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='话术库文件夹表'; + +-- ---------------------------- +-- Table structure for we_words_group +-- ---------------------------- +DROP TABLE IF EXISTS `we_words_group`; +CREATE TABLE `we_words_group` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', + `corp_id` varchar(64) NOT NULL DEFAULT '' COMMENT '企业ID', + `category_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '文件夹ID', + `title` varchar(64) NOT NULL DEFAULT '' COMMENT '话术标题', + `seq` longtext NOT NULL COMMENT '附件ID用逗号隔开,从左往右表示先后顺序', + `is_push` tinyint(1) NOT NULL COMMENT '是否推送到应用(0:不推送,1推送)', + `sort` int(11) NOT NULL DEFAULT '0' COMMENT '排序', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='话术库主表'; + + +-- ---------------------------- +-- Table structure for we_words_detail +-- ---------------------------- +DROP TABLE IF EXISTS `we_words_detail`; +CREATE TABLE `we_words_detail` +( + `id` bigint(20) NOT NULL DEFAULT '0' COMMENT '话术库附件ID', + `corp_id` varchar(64) NOT NULL DEFAULT '' COMMENT '企业ID', + `group_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '话术主表ID', + `media_type` int(1) NOT NULL DEFAULT '0' COMMENT '0:海报,1:语音,2:视频,3:普通文件,4:文本,5:图文链接,6:小程序', + `content` varchar(1500) NOT NULL DEFAULT '' COMMENT '话术详情', + `title` varchar(128) NOT NULL DEFAULT '' COMMENT '标题', + `url` varchar(3000) NOT NULL DEFAULT '' COMMENT '链接地址', + `cover_url` varchar(255) NOT NULL DEFAULT '' COMMENT '封面', + `is_defined` tinyint(1) NOT NULL DEFAULT '0' COMMENT '链接时使用:0 默认,1 自定义', + `size` bigint(20) NOT NULL DEFAULT '0' COMMENT '视频大小', + `radar_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '雷达id,存储雷达时使用', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='话术库附件表'; + +DROP TABLE IF EXISTS `we_words_last_use`; +CREATE TABLE `we_words_last_use` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', + `corp_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '企业id', + `user_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '员工id', + `type` tinyint(1) NOT NULL DEFAULT 0 COMMENT '话术类型(0:企业话术,1:部门话术,2:我的话术)', + `words_ids` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '话术id(用逗号隔开最多5个)', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `uniq_corp_user_type`(`corp_id`, `user_id`, `type`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '最近使用话术表' ROW_FORMAT = Dynamic; + + +-- ---------------------------- +-- Table structure for we_emple_code_material +-- ---------------------------- +DROP TABLE IF EXISTS `we_emple_code_material`; +CREATE TABLE `we_emple_code_material` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', + `emple_code_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '员工活码ID', + `media_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '素材ID', + `media_type` int(1) NOT NULL DEFAULT '0' COMMENT '-1:群活码、0:图片、1:语音、2:视频,3:文件、4:文本、5:图文链接、6:小程序', + PRIMARY KEY (`id`), + KEY `normal_emplecode` (`emple_code_id`) USING BTREE COMMENT '普通索引emple_code_id' +) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COMMENT='员工活码附件表'; + + +-- ---------------------------- +-- Table structure for we_emple_code_analyse +-- ---------------------------- +DROP TABLE IF EXISTS `we_emple_code_analyse`; +CREATE TABLE `we_emple_code_analyse` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', + `corp_id` varchar(64) NOT NULL DEFAULT '' COMMENT '企业ID', + `emple_code_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '员工活码主键ID', + `user_id` varchar(64) NOT NULL DEFAULT '' COMMENT '企业成员userId', + `external_userid` varchar(32) NOT NULL DEFAULT '' COMMENT '客户ID', + `time` date NOT NULL COMMENT '添加时间', + `type` tinyint(1) NOT NULL COMMENT '1:新增,0:流失', + PRIMARY KEY (`id`), + UNIQUE KEY `uniq_corpid_codeid_userid_extid_type_time` (`corp_id`,`emple_code_id`,`user_id`,`external_userid`,`type`,`time`) USING BTREE COMMENT '唯一索引' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + + +-- ---------------------------- +-- Table structure for we_group_tag_category +-- ---------------------------- +DROP TABLE IF EXISTS `we_group_tag_category`; +CREATE TABLE `we_group_tag_category` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', + `corp_id` varchar(64) NOT NULL DEFAULT '' COMMENT '企业ID', + `name` varchar(16) NOT NULL COMMENT '群标签组名', + PRIMARY KEY (`id`), + UNIQUE KEY `uniq_corpid_name` (`corp_id`,`name`) USING BTREE COMMENT '唯一索引(corp_id、name)' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='群标签组表'; + +-- ---------------------------- +-- Table structure for we_group_tag +-- ---------------------------- +DROP TABLE IF EXISTS `we_group_tag`; +CREATE TABLE `we_group_tag` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', + `corp_id` varchar(64) NOT NULL DEFAULT '' COMMENT '企业ID', + `group_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '群标签组ID', + `name` varchar(16) NOT NULL COMMENT '群标签名称', + PRIMARY KEY (`id`), + UNIQUE KEY `uniq_groupid_name` (`group_id`,`name`) USING BTREE COMMENT '唯一索引(group_id、name)' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='群标签表'; + +-- ---------------------------- +-- Table structure for we_group_tag_rel +-- ---------------------------- +DROP TABLE IF EXISTS `we_group_tag_rel`; +CREATE TABLE `we_group_tag_rel` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', + `corp_id` varchar(64) NOT NULL DEFAULT '' COMMENT '企业ID', + `chat_id` varchar(32) NOT NULL DEFAULT '' COMMENT '群ID', + `tag_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '标签ID', + PRIMARY KEY (`id`), + UNIQUE KEY `uniq_corpid_chatid_tagid` (`corp_id`, `chat_id`, `tag_id`) USING BTREE COMMENT '唯一索引(corp_id,chat_id,tag_id)' +) ENGINE = InnoDB + DEFAULT CHARSET = utf8mb4 COMMENT ='客户群和标签关联表'; + +-- ---------------------------- +-- Table structure for we_customer_extend_property +-- ---------------------------- +CREATE TABLE `we_customer_extend_property` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id', + `corp_id` varchar(64) NOT NULL DEFAULT '' COMMENT '企业id', + `name` varchar(64) NOT NULL DEFAULT '' COMMENT '扩展字段名称', + `type` int(11) NOT NULL DEFAULT '2' COMMENT '字段类型(1系统默认字段,2单行文本,3多行文本,4单选框,5多选框,6下拉框,7日期,8图片,9文件)', + `required` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否必填(1必填0非必填)', + `property_sort` int(11) NOT NULL DEFAULT '20' COMMENT '字段排序', + `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态(0停用1启用)', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `create_by` varchar(64) NOT NULL DEFAULT '' COMMENT '创建人', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `un_corp_id_name` (`corp_id`, `name`) USING BTREE +) ENGINE = InnoDB + DEFAULT CHARSET = utf8mb4 COMMENT ='自定义属性关系表'; + +-- ---------------------------- +-- Table structure for extend_property_multiple_option +-- ---------------------------- +CREATE TABLE `extend_property_multiple_option` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id', + `extend_property_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '扩展属性ID', + `multiple_value` varchar(400) NOT NULL DEFAULT '' COMMENT '多选框.下拉框,单选框可选值', + `option_sort` int(11) NOT NULL DEFAULT '1' COMMENT '多选值的排序', + PRIMARY KEY (`id`), + UNIQUE KEY `idx_property_id` (`extend_property_id`, `multiple_value`) USING BTREE +) ENGINE = InnoDB + DEFAULT CHARSET = utf8mb4 COMMENT ='扩展属性多选项可选值表'; + +-- ---------------------------- +-- Table structure for we_customer_extend_property_rel +-- ---------------------------- +CREATE TABLE `we_customer_extend_property_rel` +( + `corp_id` varchar(64) NOT NULL DEFAULT '' COMMENT '企业id', + `user_id` varchar(64) NOT NULL DEFAULT '' COMMENT '跟进人userId', + `external_userid` varchar(32) NOT NULL DEFAULT '' COMMENT '成员客户关系ID', + `extend_property_id` int(20) NOT NULL DEFAULT '0' COMMENT '扩展属性id', + `property_value` varchar(500) NOT NULL DEFAULT '' COMMENT '自定义属性的值', + PRIMARY KEY (`corp_id`, `user_id`, `external_userid`, `extend_property_id`, `property_value`) +) ENGINE = InnoDB + DEFAULT CHARSET = utf8 COMMENT ='客户-自定义属性关系表'; + +-- ---------------------------- +-- Table structure for we_operations_center_sop +-- ---------------------------- +DROP TABLE IF EXISTS `we_operations_center_sop`; +CREATE TABLE `we_operations_center_sop` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', + `corp_id` varchar(64) NOT NULL DEFAULT '' COMMENT '企业ID', + `name` varchar(32) NOT NULL DEFAULT '' COMMENT 'SOP名称', + `create_by` varchar(64) NOT NULL DEFAULT '' COMMENT '创建人.员工userId', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `sop_type` tinyint(2) NOT NULL DEFAULT '0' COMMENT 'sop类型 0:定时sop,1:循环sop,2:新客sop,3:活动sop,4:生日sop,5:群日历', + `filter_type` tinyint(2) NOT NULL DEFAULT '0' COMMENT '使用群聊类型 0:指定群聊 ,1:筛选群聊 ', + `is_open` tinyint(2) NOT NULL DEFAULT '1' COMMENT '启用状态 0:关闭,1:启用', + PRIMARY KEY (`id`), + KEY `index_corpid` (`corp_id`) USING BTREE COMMENT '普通索引(index_corpid)' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='SOP基本信息'; + +-- ---------------------------- +-- Table structure for we_operations_center_sop_scope +-- ---------------------------- +DROP TABLE IF EXISTS `we_operations_center_sop_scope`; +CREATE TABLE `we_operations_center_sop_scope` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', + `corp_id` varchar(64) NOT NULL DEFAULT '' COMMENT '企业ID', + `sop_id` bigint(20) NOT NULL DEFAULT '0' COMMENT 'we_operations_center_sop 主键ID', + `target_id` varchar(64) NOT NULL DEFAULT '' COMMENT '当为群sop时,为chatId;当为客户sop时,为userId,传入部门时为partyId', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `type` tinyint(1) NOT NULL DEFAULT '2' COMMENT '传入员工/部门 2-员工 1部门', + PRIMARY KEY (`id`), + UNIQUE KEY `unique_corpid_sopid_targetid` (`corp_id`,`sop_id`,`target_id`) USING BTREE COMMENT '唯一索引(unique_corpid_sopid_targetid)', + KEY `index_corpid_sopid` (`corp_id`,`sop_id`) USING BTREE COMMENT '普通索引(index_corpid_sopid)' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='SOP作用范围'; + +-- ---------------------------- +-- Table structure for we_operations_center_group_sop_filter +-- ---------------------------- +DROP TABLE IF EXISTS `we_operations_center_group_sop_filter`; +CREATE TABLE `we_operations_center_group_sop_filter` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', + `corp_id` varchar(64) NOT NULL DEFAULT '' COMMENT '企业ID', + `sop_id` bigint(20) NOT NULL DEFAULT '0' COMMENT 'we_operations_center_sop主键ID', + `owner` text NOT NULL COMMENT '群主( 多个逗号隔开)', + `tag_id` text NOT NULL COMMENT '群标签ID(多个逗号隔开)', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '群创建时间范围', + `end_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '群创建时间', + PRIMARY KEY (`id`), + UNIQUE KEY `unique_corpid_sopid` (`corp_id`,`sop_id`) USING BTREE COMMENT '唯一索引(unique_corpid_sopid)' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='群SOP筛选群聊条件'; + +-- ---------------------------- +-- Table structure for we_operations_center_customer_sop_filter +-- ---------------------------- +DROP TABLE IF EXISTS `we_operations_center_customer_sop_filter`; +CREATE TABLE `we_operations_center_customer_sop_filter` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', + `corp_id` varchar(64) NOT NULL DEFAULT '' COMMENT '企业ID', + `sop_id` bigint(20) NOT NULL DEFAULT '0' COMMENT 'we_operations_center_sop主键ID', + `gender` tinyint(4) NOT NULL DEFAULT '0' COMMENT '外部联系人性别 0-未知 1-男性 2-女性', + `users` text NOT NULL COMMENT '所属员工(多个逗号隔开 )', + `departments` text NOT NULL COMMENT '所属部门(多个逗号隔开 )', + `tag_id` text NOT NULL COMMENT '标签ID(多个逗号隔开 )', + `cloumn_info` text NOT NULL COMMENT '客户属性名和值,json存储', + `filter_tag_id` text NOT NULL COMMENT '标签ID(多个逗号隔开) ', + `start_time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '客户添加开始时间', + `end_time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '客户添加截止时间', + PRIMARY KEY (`id`), + KEY `index_corpid_sopid` (`corp_id`,`sop_id`) USING BTREE COMMENT '普通索引(index_corpid_sopid)' +) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb4 COMMENT='客户SOP筛选条件'; + +-- ---------------------------- +-- Table structure for we_operations_center_sop_rules +-- ---------------------------- +DROP TABLE IF EXISTS `we_operations_center_sop_rules`; +CREATE TABLE `we_operations_center_sop_rules` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id', + `corp_id` varchar(64) NOT NULL DEFAULT '' COMMENT '企业ID', + `sop_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '群sop的主键id', + `name` varchar(32) NOT NULL DEFAULT '' COMMENT '规则名称', + `alert_type` tinyint(2) NOT NULL DEFAULT '0' COMMENT '提醒类型\r\n0:xx小时xx分钟提醒,1:xx天xx:xx提醒,2:每天xx:xx提醒,3:每周周x的xx:xx提醒,4:每月x日xx:xx提醒', + `alert_data1` int(2) NOT NULL DEFAULT '0' COMMENT '提醒时间内容1', + `alert_data2` varchar(20) NOT NULL DEFAULT '' COMMENT '提醒时间内容2', + PRIMARY KEY (`id`), + KEY `idx_sop` (`sop_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='sop规则表'; + +-- ---------------------------- +-- Table structure for we_operations_center_sop_material +-- ---------------------------- +DROP TABLE IF EXISTS `we_operations_center_sop_material`; +CREATE TABLE `we_operations_center_sop_material` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', + `corp_id` varchar(64) NOT NULL DEFAULT '' COMMENT '企业ID', + `sop_id` bigint(20) NOT NULL DEFAULT 0 COMMENT 'sop的主键id', + `rule_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '规则id', + `material_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '素材id', + `sort` int(11) NOT NULL DEFAULT 0 COMMENT '素材排序', + PRIMARY KEY (`id`) USING BTREE, + INDEX `idx_corp_sop`(`corp_id`, `sop_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for we_operations_center_sop_detail +-- ---------------------------- +DROP TABLE IF EXISTS `we_operations_center_sop_detail`; +CREATE TABLE `we_operations_center_sop_detail` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', + `corp_id` varchar(64) NOT NULL DEFAULT '' COMMENT '企业id', + `sop_id` bigint(20) NOT NULL DEFAULT '0' COMMENT 'sop的主键id', + `rule_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '规则id', + `user_id` varchar(64) NOT NULL COMMENT '操作人/群主', + `target_id` varchar(32) NOT NULL DEFAULT '' COMMENT '消息接收者(当为客户时,填写客户userId;当为群时,填写群chatId)', + `is_finish` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否已执行 0:未执行,1:已执行', + `alert_time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '提醒时间', + `finish_time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '完成时间', + PRIMARY KEY (`id`), + KEY `idx_corp_sop` (`corp_id`,`sop_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +-- ---------------------------- +-- Table structure for we_operations_center_sop_task +-- ---------------------------- +DROP TABLE IF EXISTS `we_operations_center_sop_task`; +CREATE TABLE `we_operations_center_sop_task` +( + `id` bigint(20) NOT NULL COMMENT '主键', + `corp_id` varchar(64) NOT NULL DEFAULT '' COMMENT '企业id', + `media_type` int(1) NOT NULL DEFAULT '0' COMMENT '0:海报,1:语音,2:视频,3:普通文件,4:文本,5:图文链接,6:小程序', + `content` varchar(1500) NOT NULL DEFAULT '' COMMENT '内容详情', + `title` varchar(128) NOT NULL DEFAULT '' COMMENT '标题', + `url` varchar(255) NOT NULL DEFAULT '' COMMENT '链接地址', + `cover_url` varchar(255) NOT NULL DEFAULT '' COMMENT '封面', + `is_defined` tinyint(1) NOT NULL DEFAULT '0' COMMENT '链接时使用:0 默认,1 自定义', + PRIMARY KEY (`id`), + KEY `idx_corp` (`corp_id`) USING BTREE COMMENT '普通索引' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='sop待办任务素材表'; + +-- ---------------------------- +-- Table structure for we_operations_center_group_sop_filter_cycle +-- ---------------------------- +DROP TABLE IF EXISTS `we_operations_center_group_sop_filter_cycle`; +CREATE TABLE `we_operations_center_group_sop_filter_cycle` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', + `corp_id` varchar(64) NOT NULL DEFAULT '' COMMENT '企业ID', + `sop_id` bigint(20) NOT NULL DEFAULT '0' COMMENT 'sopId', + `cycle_start` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '开始时间', + `cycle_end` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '结束时间', + PRIMARY KEY (`id`), + UNIQUE KEY `unique_corpid_sopid` (`corp_id`,`sop_id`) USING BTREE COMMENT '唯一索引(unique_corpid_sopid)' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='客户群SOP-循环SOP的起止时间设置表'; +CREATE TABLE `we_external_user_mapping_user` +( + `external_corp_id` VARCHAR(255) NOT NULL DEFAULT '' + COMMENT '三方应用企业ID', + `external_user_id` VARCHAR(255) NOT NULL DEFAULT '' + COMMENT '三方应用员工ID', + `corp_id` VARCHAR(255) NOT NULL DEFAULT '' + COMMENT '内部应用企业ID', + `user_id` VARCHAR(255) NOT NULL DEFAULT '' + COMMENT '内部应用员工ID', + PRIMARY KEY (`external_corp_id`, `external_user_id`) +) ENGINE = InnoDB + DEFAULT CHARSET = utf8mb4 + COMMENT ='三方应用员工映射表'; + +-- ---------------------------- +-- Table structure for we_customer_transfer_config +-- ---------------------------- +CREATE TABLE `we_customer_transfer_config` +( + `corp_id` varchar(64) NOT NULL DEFAULT '' COMMENT '企业id', + `enable_transfer_info` tinyint(1) NOT NULL DEFAULT '1' COMMENT '继承客户信息开关(1:开启,0:关闭)', + `enable_side_bar` tinyint(1) NOT NULL DEFAULT '0' COMMENT '侧边栏转接客户开关(1:开启,0:关闭)', + PRIMARY KEY (`corp_id`) +) ENGINE = InnoDB + DEFAULT CHARSET = utf8mb4 COMMENT ='继承设置表'; + + +-- ---------------------------- +-- Table structure for we_customer_transfer_record +-- ---------------------------- +CREATE TABLE `we_customer_transfer_record` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id', + `corp_id` varchar(64) NOT NULL DEFAULT '' COMMENT '企业id', + `handover_userid` varchar(64) NOT NULL DEFAULT '' COMMENT '原跟进成员userid', + `external_userid` varchar(32) NOT NULL DEFAULT '' COMMENT '待分配的外部联系人userid', + `takeover_userid` varchar(64) NOT NULL DEFAULT '' COMMENT '接替成员的userid', + `hanover_username` varchar(200) NOT NULL DEFAULT '' COMMENT '原跟进成员名称', + `takeover_username` varchar(200) NOT NULL DEFAULT '' COMMENT '跟进成员名称', + `handover_department_name` varchar(100) NOT NULL DEFAULT '' COMMENT '原跟进人部门名称', + `takeover_department_name` varchar(100) NOT NULL DEFAULT '' COMMENT '接替人部门名称', + `transfer_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '分配时间', + `status` tinyint(2) NOT NULL DEFAULT '2' COMMENT '接替状态, 1-接替完毕 2-等待接替 3-客户拒绝 4-接替成员客户达到上限 5-无接替记录', + `takeover_time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '接替时间', + `remark` varchar(64) NOT NULL DEFAULT '' COMMENT '备注', + PRIMARY KEY (`id`), + KEY `idx_corp_id` (`corp_id`) USING BTREE, + KEY `idx_transfer_time` (`transfer_time`) USING BTREE, + KEY `idx_external_userid` (`external_userid`, `handover_userid`, `takeover_userid`) USING BTREE +) ENGINE = InnoDB + DEFAULT CHARSET = utf8mb4 COMMENT ='在职继承分配记录表'; + +-- ---------------------------- +-- Table structure for we_resigned_transfer_record +-- ---------------------------- +CREATE TABLE `we_resigned_transfer_record` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id', + `corp_id` varchar(64) NOT NULL DEFAULT '' COMMENT '企业id', + `handover_userid` varchar(64) NOT NULL DEFAULT '' COMMENT '原跟进离职员工id', + `takeover_userid` varchar(64) NOT NULL DEFAULT '' COMMENT '接替员工id', + `dimission_time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '离职时间', + `handover_username` varchar(200) NOT NULL DEFAULT '' COMMENT '原跟进人用户名', + `takeover_username` varchar(200) NOT NULL DEFAULT '' COMMENT '接替人名称', + `handover_department_name` varchar(100) NOT NULL DEFAULT '' COMMENT '原跟进人部门名称', + `takeover_department_name` varchar(100) NOT NULL DEFAULT '' COMMENT '接替人部门名称', + `transfer_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '分配时间', + PRIMARY KEY (`id`), + UNIQUE KEY `un_corp_handover_takeover_id` (`corp_id`, `handover_userid`, `takeover_userid`, `dimission_time`) USING BTREE, + KEY `idx_corp_id` (`corp_id`) USING BTREE +) ENGINE = InnoDB + DEFAULT CHARSET = utf8mb4; +-- ---------------------------- +-- Table structure for we_resigned_customer_transfer_record +-- ---------------------------- +CREATE TABLE `we_resigned_customer_transfer_record` +( + `record_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '分配记录id', + `external_userid` varchar(32) NOT NULL DEFAULT '' COMMENT '外部联系人userId', + `status` tinyint(2) NOT NULL DEFAULT '2' COMMENT '接替状态, 1-接替完毕 2-等待接替 3-客户拒绝 4-接替成员客户达到上限', + `takeover_time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '接替时间', + `remark` varchar(100) NOT NULL DEFAULT '' COMMENT '备注', + PRIMARY KEY (`record_id`, `external_userid`), + KEY `idx_status` (`status`) USING BTREE +) ENGINE = InnoDB + DEFAULT CHARSET = utf8mb4 COMMENT ='离职客户继承记录表'; +-- ---------------------------- +-- Table structure for we_resigned_group_transfer_record +-- ---------------------------- +CREATE TABLE `we_resigned_group_transfer_record` +( + `record_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '分配记录id', + `chat_id` varchar(32) NOT NULL DEFAULT '' COMMENT '群聊id', + `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '接替状态,只有继承成功才会有值(1成功0失败)', + `takeover_time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '接替时间', + `remark` varchar(100) NOT NULL DEFAULT '' COMMENT '失败原因', + PRIMARY KEY (`record_id`, `chat_id`) +) ENGINE = InnoDB + DEFAULT CHARSET = utf8mb4 COMMENT ='离职客户群继承记录表'; + +-- 欢迎语 +CREATE TABLE `we_msg_tlp` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `corp_id` varchar(64) NOT NULL DEFAULT '' COMMENT '授权企业ID', + `default_welcome_msg` varchar(2000) NOT NULL DEFAULT '' COMMENT '默认欢迎语', + `welcome_msg_tpl_type` tinyint(2) NOT NULL DEFAULT '0' COMMENT '欢迎语适用对象类型:1:员工欢迎语;2:客户群欢迎语', + `exist_special_flag` tinyint(2) NOT NULL DEFAULT '0' COMMENT '是否存在有特殊时段欢迎语(存在则有关联rule_id) 0:否 1:是', + `template_id` varchar(64) NOT NULL DEFAULT '' COMMENT '入群欢迎语返回的模板id', + `notice_flag` tinyint(1) NOT NULL DEFAULT '0' COMMENT '群素材是否通知员工标识(0: 不通知(默认) 1:通知)', + `create_by` varchar(64) NOT NULL DEFAULT '' COMMENT '创建人', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='欢迎语模板表'; + +CREATE TABLE `we_msg_tlp_material` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '欢迎语素材主键id', + `default_msg_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '默认欢迎语模板id', + `special_msg_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '特殊规则欢迎语模板id(如果不存在特殊时段欢迎语,且没有素材则该字段为0)', + `type` tinyint(4) NOT NULL DEFAULT '0' COMMENT '素材类型 0:文本 1:图片 2:链接 3:小程序 4:文件 5:视频媒体文件', + `content` varchar(255) NOT NULL DEFAULT '' COMMENT '文本内容,链接消息标题,小程序消息标题,(前端: 图片,文件,视频的标题)', + `pic_url` varchar(255) NOT NULL DEFAULT '' COMMENT '图片url,链接封面url,小程序picurl,文件url,视频url', + `description` varchar(255) NOT NULL DEFAULT '' COMMENT '链接消息描述,小程序appid(前端: 文件大小)', + `url` varchar(255) NOT NULL DEFAULT '' COMMENT '链接url,小程序page', + `sort_no` tinyint(2) NOT NULL DEFAULT '0' COMMENT '排序字段', + `enable_convert_radar` tinyint(1) NOT NULL DEFAULT '0' COMMENT '链接时使用(0,不转化为雷达,1:转化为雷达)', + `radar_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '雷达id,存储雷达时使用', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='欢迎语素材表'; +CREATE TABLE `we_msg_tlp_scope` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `msg_tlp_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '默认欢迎语模板id', + `use_user_id` varchar(64) NOT NULL DEFAULT '' COMMENT '使用人id', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE KEY `unique_msgId_ruleId` (`msg_tlp_id`,`use_user_id`) USING BTREE COMMENT '欢迎语id和员工唯一索引' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='模板使用人员范围'; +CREATE TABLE `we_msg_tlp_special_rule` +( + `id` bigint(20) NOT NULL DEFAULT '0' COMMENT '欢迎语规则主键id', + `msg_tlp_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '默认欢迎语模板id', + `special_welcome_msg` varchar(2000) NOT NULL DEFAULT '' COMMENT '特殊欢迎语模板消息', + `rule_type` tinyint(4) NOT NULL DEFAULT '0' COMMENT '特殊欢迎语消息规则类型 1:周策略欢迎语', + `weekends` varchar(16) NOT NULL DEFAULT '0' COMMENT '1-7 周一到周日,多个逗号隔开', + `weekend_begin_time` time NOT NULL DEFAULT '00:00:00' COMMENT '周策略开始时间', + `weekend_end_time` time NOT NULL DEFAULT '00:00:00' COMMENT '周策略结束时间', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='特殊规则欢迎语表'; + +-- ---------------------------- +-- Table structure for we_moment_detail_rel +-- ---------------------------- +CREATE TABLE `we_moment_detail_rel` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', + `moment_task_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '朋友圈任务id', + `detail_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '附件id', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='朋友圈任务附件关联表'; +-- ---------------------------- +-- Table structure for we_moment_task +-- ---------------------------- +CREATE TABLE `we_moment_task` +( + `id` bigint(20) NOT NULL DEFAULT '0' COMMENT '主键', + `corp_id` varchar(64) NOT NULL DEFAULT '' COMMENT '企业id', + `moment_id` varchar(64) NOT NULL DEFAULT '' COMMENT '朋友圈id', + `job_id` varchar(64) NOT NULL DEFAULT '' COMMENT '企业微信异步任务id 24小时有效', + `content` varchar(2000) NOT NULL DEFAULT '' COMMENT '文本内容', + `type` tinyint(1) NOT NULL DEFAULT '0' COMMENT '发布类型(0:企业 1:个人)', + `task_type` tinyint(1) NOT NULL DEFAULT '0' COMMENT '任务类型(0:立即发送 1:定时发送)', + `push_range` tinyint(1) NOT NULL DEFAULT '0' COMMENT '可见范围(0:全部客户 1:部分客户)', + `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '任务状态,整型,1表示开始创建任务,2表示正在创建任务中,3表示创建任务已完成', + `send_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '发布时间', + `select_user` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否选择员工(0:未选择 1:已选择)', + `users` text NOT NULL COMMENT '所属员工', + `departments` text NOT NULL COMMENT '所属部门(多个逗号隔开 )', + `tags` text NOT NULL COMMENT '客户标签', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', + `create_by` varchar(255) NOT NULL DEFAULT '' COMMENT '创建人', + PRIMARY KEY (`id`), + KEY `idx_corp_id` (`corp_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='朋友圈任务信息表'; +-- ---------------------------- +-- Table structure for we_moment_task_result +-- ---------------------------- +CREATE TABLE `we_moment_task_result` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', + `moment_task_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '朋友圈任务id', + `user_id` varchar(64) NOT NULL DEFAULT '' COMMENT '员工id', + `publish_time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '发布时间', + `publish_status` tinyint(1) NOT NULL DEFAULT '0' COMMENT '成员发表状态。0:待发布 1:已发布 2:已过期 3:不可发布', + `remark` varchar(255) NOT NULL DEFAULT '' COMMENT '失败备注', + PRIMARY KEY (`id`), + KEY `idx_moment_task_id` (`moment_task_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='朋友圈任务执行结果'; +-- ---------------------------- +-- Table structure for we_moment_user_customer_rel +-- ---------------------------- +CREATE TABLE `we_moment_user_customer_rel` +( + `moment_task_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '朋友圈任务id', + `user_id` varchar(64) NOT NULL DEFAULT '' COMMENT '员工id', + `external_userid` varchar(64) NOT NULL DEFAULT '' COMMENT '客户id', + PRIMARY KEY (`moment_task_id`, `user_id`, `external_userid`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='朋友圈客户员工关联表'; + +-- 自动标签 规则设置 +CREATE TABLE `we_auto_tag_customer_rule_effect_time` +( + `rule_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '规则id', + `effect_begin_time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '生效开始时间', + `effect_end_time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '生效结束时间', + UNIQUE KEY `idx_rule_id` (`rule_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='新客规则生效时间表'; +CREATE TABLE `we_auto_tag_customer_scene` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id', + `corp_id` varchar(64) NOT NULL DEFAULT '' COMMENT '企业id', + `rule_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '规则id', + `loop_point` tinyint(2) NOT NULL DEFAULT '0' COMMENT '指定循环节点 周: 1-7 月: 1-月末', + `loop_begin_time` time NOT NULL DEFAULT '00:00:00' COMMENT '循环指定开始时间', + `loop_end_time` time NOT NULL DEFAULT '00:00:00' COMMENT '循环指定结束时间', + `scene_type` tinyint(2) NOT NULL DEFAULT '0' COMMENT '场景类型 1:天 2:周 3:月', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='新客标签场景表'; +CREATE TABLE `we_auto_tag_customer_scene_tag_rel` +( + `rule_id` bigint(20) NOT NULL COMMENT '所属规则id', + `customer_scene_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '客户场景id', + `tag_id` varchar(64) NOT NULL DEFAULT '' COMMENT '标签id', + PRIMARY KEY (`rule_id`, `customer_scene_id`, `tag_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='新客标签场景与标签关系表'; +CREATE TABLE `we_auto_tag_group_scene` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id', + `corp_id` varchar(64) NOT NULL DEFAULT '' COMMENT '企业id', + `rule_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '规则id', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='群标签场景表'; +CREATE TABLE `we_auto_tag_group_scene_group_rel` +( + `rule_id` bigint(20) NOT NULL COMMENT '所属规则id', + `group_scene_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '主键id', + `group_id` varchar(32) NOT NULL DEFAULT '' COMMENT '群id', + PRIMARY KEY (`rule_id`, `group_scene_id`, `group_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='群标签场景与群关系表'; +CREATE TABLE `we_auto_tag_group_scene_tag_rel` +( + `rule_id` bigint(20) NOT NULL COMMENT '所属规则id', + `group_scene_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '群场景id', + `tag_id` varchar(64) NOT NULL DEFAULT '' COMMENT '标签id', + PRIMARY KEY (`rule_id`, `group_scene_id`, `tag_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='群标签场景与标签关系表'; +CREATE TABLE `we_auto_tag_keyword` +( + `rule_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '规则id', + `match_type` tinyint(2) NOT NULL DEFAULT '0' COMMENT '匹配规则 1:模糊匹配 2:精确匹配', + `keyword` varchar(32) NOT NULL DEFAULT '' COMMENT '关键词', + PRIMARY KEY (`rule_id`, `match_type`, `keyword`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='关键词规则表'; +CREATE TABLE `we_auto_tag_keyword_tag_rel` +( + `rule_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '规则id', + `tag_id` varchar(64) NOT NULL DEFAULT '' COMMENT '规则名称', + PRIMARY KEY (`rule_id`, `tag_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='关键词与标签关系表'; +CREATE TABLE `we_auto_tag_rule` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id', + `corp_id` varchar(64) NOT NULL DEFAULT '' COMMENT '企业id', + `rule_name` varchar(32) NOT NULL DEFAULT '' COMMENT '规则名称', + `label_type` tinyint(2) NOT NULL DEFAULT '0' COMMENT '规则类型 1:关键词 2:入群 3:新客', + `status` tinyint(2) NOT NULL DEFAULT '1' COMMENT '启用禁用状态 0:禁用1:启用', + `create_time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间', + `create_by` varchar(32) NOT NULL DEFAULT '' COMMENT '创建人', + PRIMARY KEY (`id`) USING BTREE, + KEY `idx_corp_id` (`corp_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='标签规则表'; +CREATE TABLE `we_auto_tag_user_rel` +( + `rule_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '规则id', + `target_id` varchar(64) NOT NULL DEFAULT '' COMMENT 'type:0 表示员工id, type:1 表示部门id', + `type` tinyint(1) NOT NULL DEFAULT '2' COMMENT '传入员工/部门 2-员工 1部门', + PRIMARY KEY (`rule_id`, `target_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='标签与员工使用范围表'; + + +CREATE TABLE `we_auto_tag_rule_hit_customer_record` +( + `rule_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '规则id', + `corp_id` varchar(64) NOT NULL DEFAULT '' COMMENT '企业id', + `customer_id` varchar(32) NOT NULL DEFAULT '' COMMENT '客户id', + `user_id` varchar(64) NOT NULL DEFAULT '' COMMENT '员工id', + `add_time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP COMMENT '添加时间', + PRIMARY KEY (`rule_id`, `corp_id`, `customer_id`, `user_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='客户打标签记录表'; +CREATE TABLE `we_auto_tag_rule_hit_customer_record_tag_rel` +( + `rule_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '规则id', + `tag_id` varchar(64) NOT NULL DEFAULT '' COMMENT '标签id,去重用', + `tag_name` varchar(100) NOT NULL DEFAULT '' COMMENT '标签名', + `customer_id` varchar(32) NOT NULL DEFAULT '' COMMENT '客户id', + `user_id` varchar(64) NOT NULL DEFAULT '' COMMENT '员工id' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='客户标签命中记录'; +CREATE TABLE `we_auto_tag_rule_hit_group_record` +( + `rule_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '规则id', + `corp_id` varchar(64) NOT NULL DEFAULT '' COMMENT '企业id', + `customer_id` varchar(32) NOT NULL DEFAULT '' COMMENT '客户id', + `group_id` varchar(32) NOT NULL DEFAULT '' COMMENT '群id', + `group_name` varchar(128) NOT NULL DEFAULT '' COMMENT '群名', + `join_time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP COMMENT '进群时间', + PRIMARY KEY (`rule_id`, `corp_id`, `customer_id`, `group_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='客户打标签记录表'; +CREATE TABLE `we_auto_tag_rule_hit_group_record_tag_rel` +( + `rule_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '规则id', + `tag_id` varchar(64) NOT NULL DEFAULT '' COMMENT '标签id,去重用', + `tag_name` varchar(100) NOT NULL DEFAULT '' COMMENT '标签名', + `customer_id` varchar(32) NOT NULL DEFAULT '' COMMENT '客户id', + `group_id` varchar(32) NOT NULL DEFAULT '' COMMENT '群id' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='客户标签命中记录'; +CREATE TABLE `we_auto_tag_rule_hit_keyword_record` +( + `corp_id` varchar(64) NOT NULL DEFAULT '' COMMENT '企业id', + `rule_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '规则id', + `customer_id` varchar(32) NOT NULL DEFAULT '' COMMENT '客户id', + `user_id` varchar(64) NOT NULL DEFAULT '' COMMENT '员工id', + `keyword` varchar(255) NOT NULL DEFAULT '' COMMENT '触发的关键词', + `from_text` varchar(255) NOT NULL DEFAULT '' COMMENT '触发文本', + `hit_time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '命中时间' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='客户打标签记录表'; +CREATE TABLE `we_auto_tag_rule_hit_keyword_record_tag_rel` +( + `rule_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '规则id', + `tag_id` varchar(64) NOT NULL COMMENT '标签id,去重用', + `tag_name` varchar(100) NOT NULL COMMENT '标签名', + `customer_id` varchar(32) NOT NULL DEFAULT '' COMMENT '客户id', + `user_id` varchar(64) NOT NULL DEFAULT '' COMMENT '员工id' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='客户标签命中记录'; + +CREATE TABLE `we_redeem_code_activity` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '兑换码活动主键', + `corp_id` varchar(64) NOT NULL DEFAULT '' COMMENT '授权企业ID', + `name` varchar(32) NOT NULL DEFAULT '' COMMENT '活动名称', + `start_time` date NOT NULL DEFAULT '0000-00-00' COMMENT '活动开始时间', + `end_time` date NOT NULL DEFAULT '0000-00-00' COMMENT '活动结束时间', + `create_by` varchar(64) NOT NULL DEFAULT '' COMMENT '创建人', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_by` varchar(64) NOT NULL DEFAULT '' COMMENT '更新人', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `enable_limited` tinyint(1) NOT NULL DEFAULT '1' COMMENT '客户参与限制,0:可以参与多次,1:只可参与一次', + `enable_alarm` tinyint(1) NOT NULL DEFAULT '0' COMMENT '库存告警开关,0:不开启,1:开启', + `alarm_threshold` int(10) NOT NULL DEFAULT '0' COMMENT '库存告警阈值,告警开启时,库存低于阈值通知员工', + `del_flag` tinyint(1) NOT NULL DEFAULT '0' COMMENT '删除标志,0:未删除,1:已删除', + PRIMARY KEY (`id`), + KEY `index_corpid` (`corp_id`) USING BTREE, + KEY `create_time` (`create_time`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='兑换码活动表'; + +CREATE TABLE `we_redeem_code` +( + `code` varchar(20) NOT NULL COMMENT '兑换码', + `activity_id` bigint(20) NOT NULL COMMENT '兑换码活动id', + `status` tinyint(1) NOT NULL DEFAULT '0' COMMENT '领取状态,0:未领取,1:已领取', + `effective_time` date NOT NULL DEFAULT '0000-00-00' COMMENT '有效期,在该天24点之前可以发送给客户', + `redeem_time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '兑换码发送给客户的时间', + `receive_user_id` varchar(64) NOT NULL DEFAULT '' COMMENT '领取人id', + PRIMARY KEY (`activity_id`, `code`), + KEY `status` (`status`) USING BTREE, + KEY `redeem_time` (`redeem_time`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='兑换码库存表'; + +CREATE TABLE `we_redeem_code_alarm_employee_rel` +( + `activity_id` bigint(20) NOT NULL COMMENT '活动id', + `target_id` varchar(64) NOT NULL COMMENT '员工id,部门id', + `type` tinyint(1) NOT NULL DEFAULT '2' COMMENT 'type, 1:存部门,2:存员工', + PRIMARY KEY (`activity_id`, `target_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='兑换码活动,告警员工表'; + +-- ---------------------------- +-- Table structure for we_radar 雷达表 +-- ---------------------------- +CREATE TABLE `we_radar` +( + `id` bigint(20) NOT NULL, + `corp_id` varchar(64) NOT NULL DEFAULT '' COMMENT '企业ID', + `radar_title` varchar(255) NOT NULL DEFAULT '' COMMENT '雷达标题', + `url` varchar(3000) NOT NULL DEFAULT '' COMMENT '雷达原始路径url', + `cover_url` varchar(1200) NOT NULL DEFAULT '' COMMENT '雷达链接封面图', + `title` varchar(255) NOT NULL DEFAULT '' COMMENT '链接标题', + `content` varchar(255) NOT NULL DEFAULT '' COMMENT '雷达链接摘要', + `enable_click_notice` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否开启行为通知(1[true]是0[false]否)', + `enable_behavior_record` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否允许轨迹记录(1[true]是 0[false]否) ', + `enable_customer_tag` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否允许打上客户标签( 1[true]是 0[false]否) ', + `enable_update_notice` tinyint(1) NOT NULL DEFAULT '1' COMMENT '更新后是否通知员工(true[1]是 false[0]否) ', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `create_by` varchar(64) NOT NULL DEFAULT '' COMMENT '创建人', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', + `update_by` varchar(64) NOT NULL DEFAULT '' COMMENT '更新人', + `is_defined` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否使用自定义链接(1[true]是,0[false]否)', + `type` tinyint(1) NOT NULL DEFAULT '1' COMMENT '雷达类型(1个人雷达,2部门雷达,3企业雷达)', + PRIMARY KEY (`id`), + KEY `idx_corp_id_type` (`corp_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='雷达表'; +-- ---------------------------- +-- Table structure for we_radar_tag_rel 雷达-标签关系表 +-- ---------------------------- +CREATE TABLE `we_radar_tag_rel` +( + `radar_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '雷达ID', + `tag_id` varchar(64) NOT NULL DEFAULT '' COMMENT '标签ID', + PRIMARY KEY (`radar_id`, `tag_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='雷达-标签关系表'; + +-- ---------------------------- +-- Table structure for we_radar_channel 渠道表 +-- ---------------------------- +CREATE TABLE `we_radar_channel` +( + `id` bigint(20) NOT NULL DEFAULT '0' COMMENT '渠道id', + `radar_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '雷达id', + `name` varchar(32) NOT NULL DEFAULT '' COMMENT '渠道名称', + `short_url` varchar(255) NOT NULL DEFAULT '' COMMENT '渠道的短链url', + `create_time` datetime NOT NULL, + `create_by` varchar(64) NOT NULL, + UNIQUE KEY `uniq_redar_name` (`radar_id`,`name`) USING BTREE, + KEY `idx_radar_id_channel_name` (`radar_id`,`name`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='雷达-渠道表'; + +-- ---------------------------- +-- Table structure for we_radar_click_record 雷达点击记录表 +-- ---------------------------- +CREATE TABLE `we_radar_click_record` +( + `id` bigint(20) NOT NULL COMMENT '雷达点击记录表ID', + `radar_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '雷达id', + `user_id` varchar(64) NOT NULL DEFAULT '' COMMENT '发送活码用户id', + `user_name` varchar(200) NOT NULL DEFAULT '' COMMENT '发送雷达链接的用户名称', + `external_user_id` varchar(32) NOT NULL DEFAULT '' COMMENT '客户id', + `external_user_name` varchar(128) NOT NULL DEFAULT '' COMMENT '客户名称', + `external_user_head_image` varchar(512) NOT NULL DEFAULT '' COMMENT '客户头像url', + `channel_type` tinyint(2) NOT NULL DEFAULT '0' COMMENT '渠道id(0未知渠道,1员工活码,2朋友圈,3群发,4侧边栏,5欢迎语,6 客户SOP,7群SOP,8新客进群,9群日历,10自定义渠道)', + `channel_name` varchar(32) NOT NULL DEFAULT '未知渠道' COMMENT '渠道名', + `detail` varchar(255) NOT NULL DEFAULT '' COMMENT '详情(如果是员工活码,则为员工活码使用场景,如果是新客进群则为新客进群的活码名称,如果是SOP则为SOP名称,如果是群日历,则为日历名称)', + `union_id` varchar(32) NOT NULL DEFAULT '' COMMENT '外部联系人在微信开放平台的唯一身份标识,通过此字段企业可将外部联系人与公众号/小程序用户关联起来。', + `open_id` varchar(32) NOT NULL DEFAULT '' COMMENT '公众号/小程序open_id', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `create_date` varchar(32) NOT NULL DEFAULT '0000-00-00' COMMENT '创建日期(格式yyyy-mm-dd)', + PRIMARY KEY (`id`), + KEY `idx_corp_date_external` (`radar_id`,`create_date`,`external_user_id`,`channel_name`) USING BTREE, + KEY `idx_corp_channel` (`radar_id`,`channel_name`) USING BTREE, + KEY `idx_corp_customer` (`radar_id`,`external_user_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='雷达点击记录表'; + + +-- ---------------------------- +-- Table structure for we_radar_click_record 长链短链映射表 +-- ---------------------------- +CREATE TABLE `sys_short_url_mapping` +( + `id` bigint(20) NOT NULL COMMENT 'id,短链', + `short_code` varchar(32) NOT NULL DEFAULT '' COMMENT '短链后面的唯一字符串(用于和域名拼接成短链)', + `long_url` varchar(1024) NOT NULL COMMENT '原链接(长链接)', + `append_info` varchar(512) NOT NULL DEFAULT '' COMMENT '附加信息Json(user_id,radar_id,channel_id,detail)', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `create_by` varchar(64) NOT NULL DEFAULT '' COMMENT '创建人', + PRIMARY KEY (`id`), + UNIQUE KEY `uniq_short_code` (`short_code`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='长链-短链映射表'; +-- ---------------------------- +-- Table structure for we_radar_click_record +-- ---------------------------- + +CREATE TABLE `we_open_config` +( + `corp_id` varchar(64) NOT NULL DEFAULT '' COMMENT '企业id', + `official_account_app_id` varchar(64) NOT NULL DEFAULT '' COMMENT '公众号appid', + `official_account_app_secret` varchar(128) NOT NULL DEFAULT '' COMMENT '公众号secret', + `official_account_domain` varchar(255) NOT NULL DEFAULT '' COMMENT '公众号域名', + `create_by` varchar(64) NOT NULL DEFAULT '' COMMENT '创建人', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_by` varchar(64) NOT NULL DEFAULT '' COMMENT '更新人', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', + PRIMARY KEY (`corp_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='企业公众号配置表'; + + + diff --git a/sql/update/update-V1.17.0.sql b/sql/update/update-V1.17.0.sql index 0cda2db..c8589dd 100644 --- a/sql/update/update-V1.17.0.sql +++ b/sql/update/update-V1.17.0.sql @@ -161,7 +161,7 @@ WHERE role_type = 2 ALTER TABLE `we_radar_click_record` change `corp_id` `radar_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '雷达id'; -- wx we_radar_click_record表 修改字段 Tower 任务: 查看个人雷达报错 ( https://tower.im/teams/636204/todos/54486 ) -ALTER TABLE `we_radar_click_record` change `channel_id` `channel_type` tinyint(2) NOT NULL DEFAULT '0' COMMENT '渠道type(0未知渠道,1员工活码,2朋友圈,3群发,4侧边栏,5欢迎语,6 客户SOP,7群SOP,8新客进群,9群日历,10自定义渠道)' +ALTER TABLE `we_radar_click_record` change `channel_id` `channel_type` tinyint(2) NOT NULL DEFAULT '0' COMMENT '渠道type(0未知渠道,1员工活码,2朋友圈,3群发,4侧边栏,5欢迎语,6 客户SOP,7群SOP,8新客进群,9群日历,10自定义渠道)'; -- wx we_material 添加radar_id字段 Tower 任务: 选择素材调整(工时0.6) ( https://tower.im/teams/636204/todos/54349 ) diff --git a/sql/update/update-V1.18.0.sql b/sql/update/update-V1.18.0.sql new file mode 100644 index 0000000..64ad3c3 --- /dev/null +++ b/sql/update/update-V1.18.0.sql @@ -0,0 +1,15 @@ +-- tigger Tower 任务: 应用管理移除企微Plus ( https://tower.im/teams/636204/todos/55010 ) 删除plus应用 +DELETE FROM we_application_center WHERE `appid` = 1 AND `name` = '企微Plus'; + +-- 2022.08.03 silver_chariot Tower 任务: 6.28后安装应用的企业企微配置异常 ( https://tower.im/teams/636204/todos/53966 ) +ALTER TABLE `we_corp_account` + ADD COLUMN `authorized` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否授权' AFTER `callback_uri`; + +-- 2022.08.03 silver_chariot 删除企微plus素材 +delete from we_material where material_name ='企微Pro宣传海报.jpg'; + +-- tigger 2022-08-09 Tower 任务: 后端 ( https://tower.im/teams/636204/todos/55316 ) 删除we_application_center关联表 +DELETE FROM we_my_application WHERE `appid` = 1; + +-- 2022-08-09 silver_chariot Tower 任务: admin所属部门名称修改 ( https://tower.im/teams/636204/todos/55327 ) +update sys_dept set dept_name = 'EasyInk',leader = 'EasyInk' where dept_name = 'EasyWeCom'; \ No newline at end of file