From 2aec04a88865bf6cb0ffd11d07595115912b5f31 Mon Sep 17 00:00:00 2001 From: fengdan Date: Thu, 2 Jun 2022 00:19:23 +0800 Subject: [PATCH] yudao-module-wechat-mp 模块合并到 yudao-module-wechat 模块 中 --- pom.xml | 1 - yudao-dependencies/pom.xml | 2 +- yudao-module-wechat-mp/pom.xml | 24 ------------------------ yudao-module-wechat-mp/yudao-module-wechat-mp-api/pom.xml | 26 -------------------------- yudao-module-wechat-mp/yudao-module-wechat-mp-api/src/main/java/cn/iocoder/yudao/module/wechatMp/enums/ErrorCodeConstants.java | 16 ---------------- yudao-module-wechat-mp/yudao-module-wechat-mp-biz/pom.xml | 77 ----------------------------------------------------------------------------- yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/builder/AbstractBuilder.java | 15 --------------- yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/builder/ImageBuilder.java | 21 --------------------- yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/builder/TextBuilder.java | 19 ------------------- yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/config/WxMpConfig.java | 138 ------------------------------------------------------------------------------------------------------------------------------------------ yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/account/WxAccountController.java | 100 ---------------------------------------------------------------------------------------------------- yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/account/vo/WxAccountBaseVO.java | 36 ------------------------------------ yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/account/vo/WxAccountCreateReqVO.java | 14 -------------- yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/account/vo/WxAccountExcelVO.java | 50 -------------------------------------------------- yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/account/vo/WxAccountExportReqVO.java | 32 -------------------------------- yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/account/vo/WxAccountPageReqVO.java | 34 ---------------------------------- yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/account/vo/WxAccountRespVO.java | 25 ------------------------- yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/account/vo/WxAccountUpdateReqVO.java | 18 ------------------ yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/accountfans/WxAccountFansController.java | 100 ---------------------------------------------------------------------------------------------------- yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/accountfans/vo/WxAccountFansBaseVO.java | 58 ---------------------------------------------------------- yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/accountfans/vo/WxAccountFansCreateReqVO.java | 14 -------------- yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/accountfans/vo/WxAccountFansExcelVO.java | 62 -------------------------------------------------------------- yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/accountfans/vo/WxAccountFansExportReqVO.java | 67 ------------------------------------------------------------------- yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/accountfans/vo/WxAccountFansPageReqVO.java | 69 --------------------------------------------------------------------- yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/accountfans/vo/WxAccountFansRespVO.java | 19 ------------------- yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/accountfans/vo/WxAccountFansUpdateReqVO.java | 18 ------------------ yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/convert/account/WxAccountConvert.java | 34 ---------------------------------- yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/convert/accountfans/WxAccountFansConvert.java | 34 ---------------------------------- yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/dal/dataobject/account/WxAccountDO.java | 71 ----------------------------------------------------------------------- yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/dal/dataobject/accountfans/WxAccountFansDO.java | 92 -------------------------------------------------------------------------------------------- yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/dal/mysql/account/WxAccountMapper.java | 38 -------------------------------------- yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/dal/mysql/accountfans/WxAccountFansMapper.java | 58 ---------------------------------------------------------- yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/handler/KfSessionHandler.java | 23 ----------------------- yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/handler/LocationHandler.java | 44 -------------------------------------------- yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/handler/LogHandler.java | 25 ------------------------- yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/handler/MenuHandler.java | 32 -------------------------------- yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/handler/MsgHandler.java | 184 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/handler/NullHandler.java | 22 ---------------------- yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/handler/ScanHandler.java | 22 ---------------------- yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/handler/StoreCheckNotifyHandler.java | 27 --------------------------- yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/handler/SubscribeHandler.java | 164 -------------------------------------------------------------------------------------------------------------------------------------------------------------------- yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/handler/UnsubscribeHandler.java | 54 ------------------------------------------------------ yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/mq/costomer/dict/WxConfigDataRefreshConsumer.java | 29 ----------------------------- yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/mq/message/dict/WxConfigDataRefreshMessage.java | 19 ------------------- yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/mq/producer/dict/WxMpConfigDataProducer.java | 26 -------------------------- yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/service/account/WxAccountService.java | 80 -------------------------------------------------------------------------------- yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/service/account/WxAccountServiceImpl.java | 97 ------------------------------------------------------------------------------------------------- yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/service/accountfans/WxAccountFansService.java | 81 --------------------------------------------------------------------------------- yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/service/accountfans/WxAccountFansServiceImpl.java | 90 ------------------------------------------------------------------------------------------ yudao-module-wechat/yudao-module-mp-api/src/main/java/cn/iocoder/yudao/module/mp/enums/ErrorCodeConstants.java | 16 ++++++++++++++++ yudao-module-wechat/yudao-module-mp-api/src/main/java/cn/iocoder/yudao/module/mp/package-info.java | 8 ++++++++ yudao-module-wechat/yudao-module-mp-biz/pom.xml | 10 ++++++++++ yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/account/WxAccountController.java | 100 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/account/vo/WxAccountBaseVO.java | 36 ++++++++++++++++++++++++++++++++++++ yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/account/vo/WxAccountCreateReqVO.java | 12 ++++++++++++ yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/account/vo/WxAccountExcelVO.java | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/account/vo/WxAccountExportReqVO.java | 32 ++++++++++++++++++++++++++++++++ yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/account/vo/WxAccountPageReqVO.java | 34 ++++++++++++++++++++++++++++++++++ yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/account/vo/WxAccountRespVO.java | 25 +++++++++++++++++++++++++ yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/account/vo/WxAccountUpdateReqVO.java | 17 +++++++++++++++++ yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/accountfans/WxAccountFansController.java | 99 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/accountfans/vo/WxAccountFansBaseVO.java | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/accountfans/vo/WxAccountFansCreateReqVO.java | 12 ++++++++++++ yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/accountfans/vo/WxAccountFansExcelVO.java | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/accountfans/vo/WxAccountFansExportReqVO.java | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/accountfans/vo/WxAccountFansPageReqVO.java | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/accountfans/vo/WxAccountFansRespVO.java | 19 +++++++++++++++++++ yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/accountfans/vo/WxAccountFansUpdateReqVO.java | 17 +++++++++++++++++ yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/builder/AbstractBuilder.java | 15 +++++++++++++++ yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/builder/ImageBuilder.java | 21 +++++++++++++++++++++ yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/builder/TextBuilder.java | 19 +++++++++++++++++++ yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/config/WxMpConfig.java | 137 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/convert/account/WxAccountConvert.java | 36 ++++++++++++++++++++++++++++++++++++ yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/convert/accountfans/WxAccountFansConvert.java | 36 ++++++++++++++++++++++++++++++++++++ yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/dal/dataobject/account/WxAccountDO.java | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/dal/dataobject/accountfans/WxAccountFansDO.java | 92 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/dal/mysql/account/WxAccountMapper.java | 39 +++++++++++++++++++++++++++++++++++++++ yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/dal/mysql/accountfans/WxAccountFansMapper.java | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/handler/KfSessionHandler.java | 23 +++++++++++++++++++++++ yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/handler/LocationHandler.java | 44 ++++++++++++++++++++++++++++++++++++++++++++ yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/handler/LogHandler.java | 25 +++++++++++++++++++++++++ yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/handler/MenuHandler.java | 32 ++++++++++++++++++++++++++++++++ yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/handler/MsgHandler.java | 166 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/handler/NullHandler.java | 22 ++++++++++++++++++++++ yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/handler/ScanHandler.java | 22 ++++++++++++++++++++++ yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/handler/StoreCheckNotifyHandler.java | 27 +++++++++++++++++++++++++++ yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/handler/SubscribeHandler.java | 152 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/handler/UnsubscribeHandler.java | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/mq/costomer/dict/WxConfigDataRefreshConsumer.java | 29 +++++++++++++++++++++++++++++ yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/mq/message/dict/WxConfigDataRefreshMessage.java | 19 +++++++++++++++++++ yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/mq/producer/dict/WxMpConfigDataProducer.java | 26 ++++++++++++++++++++++++++ yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/service/account/WxAccountService.java | 84 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/service/account/WxAccountServiceImpl.java | 97 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/service/accountfans/WxAccountFansService.java | 84 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/service/accountfans/WxAccountFansServiceImpl.java | 89 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-server/pom.xml | 2 +- yudao-server/src/main/resources/application-local.yaml | 8 ++++---- 97 files changed, 2267 insertions(+), 2405 deletions(-) delete mode 100644 yudao-module-wechat-mp/pom.xml delete mode 100644 yudao-module-wechat-mp/yudao-module-wechat-mp-api/pom.xml delete mode 100644 yudao-module-wechat-mp/yudao-module-wechat-mp-api/src/main/java/cn/iocoder/yudao/module/wechatMp/enums/ErrorCodeConstants.java delete mode 100644 yudao-module-wechat-mp/yudao-module-wechat-mp-biz/pom.xml delete mode 100644 yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/builder/AbstractBuilder.java delete mode 100644 yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/builder/ImageBuilder.java delete mode 100644 yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/builder/TextBuilder.java delete mode 100644 yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/config/WxMpConfig.java delete mode 100644 yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/account/WxAccountController.java delete mode 100644 yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/account/vo/WxAccountBaseVO.java delete mode 100644 yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/account/vo/WxAccountCreateReqVO.java delete mode 100644 yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/account/vo/WxAccountExcelVO.java delete mode 100644 yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/account/vo/WxAccountExportReqVO.java delete mode 100644 yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/account/vo/WxAccountPageReqVO.java delete mode 100644 yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/account/vo/WxAccountRespVO.java delete mode 100644 yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/account/vo/WxAccountUpdateReqVO.java delete mode 100644 yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/accountfans/WxAccountFansController.java delete mode 100644 yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/accountfans/vo/WxAccountFansBaseVO.java delete mode 100644 yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/accountfans/vo/WxAccountFansCreateReqVO.java delete mode 100644 yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/accountfans/vo/WxAccountFansExcelVO.java delete mode 100644 yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/accountfans/vo/WxAccountFansExportReqVO.java delete mode 100644 yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/accountfans/vo/WxAccountFansPageReqVO.java delete mode 100644 yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/accountfans/vo/WxAccountFansRespVO.java delete mode 100644 yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/accountfans/vo/WxAccountFansUpdateReqVO.java delete mode 100644 yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/convert/account/WxAccountConvert.java delete mode 100644 yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/convert/accountfans/WxAccountFansConvert.java delete mode 100644 yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/dal/dataobject/account/WxAccountDO.java delete mode 100644 yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/dal/dataobject/accountfans/WxAccountFansDO.java delete mode 100644 yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/dal/mysql/account/WxAccountMapper.java delete mode 100644 yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/dal/mysql/accountfans/WxAccountFansMapper.java delete mode 100644 yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/handler/KfSessionHandler.java delete mode 100644 yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/handler/LocationHandler.java delete mode 100644 yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/handler/LogHandler.java delete mode 100644 yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/handler/MenuHandler.java delete mode 100644 yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/handler/MsgHandler.java delete mode 100644 yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/handler/NullHandler.java delete mode 100644 yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/handler/ScanHandler.java delete mode 100644 yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/handler/StoreCheckNotifyHandler.java delete mode 100644 yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/handler/SubscribeHandler.java delete mode 100644 yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/handler/UnsubscribeHandler.java delete mode 100644 yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/mq/costomer/dict/WxConfigDataRefreshConsumer.java delete mode 100644 yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/mq/message/dict/WxConfigDataRefreshMessage.java delete mode 100644 yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/mq/producer/dict/WxMpConfigDataProducer.java delete mode 100644 yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/service/account/WxAccountService.java delete mode 100644 yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/service/account/WxAccountServiceImpl.java delete mode 100644 yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/service/accountfans/WxAccountFansService.java delete mode 100644 yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/service/accountfans/WxAccountFansServiceImpl.java create mode 100644 yudao-module-wechat/yudao-module-mp-api/src/main/java/cn/iocoder/yudao/module/mp/enums/ErrorCodeConstants.java create mode 100644 yudao-module-wechat/yudao-module-mp-api/src/main/java/cn/iocoder/yudao/module/mp/package-info.java create mode 100644 yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/account/WxAccountController.java create mode 100644 yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/account/vo/WxAccountBaseVO.java create mode 100644 yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/account/vo/WxAccountCreateReqVO.java create mode 100644 yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/account/vo/WxAccountExcelVO.java create mode 100644 yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/account/vo/WxAccountExportReqVO.java create mode 100644 yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/account/vo/WxAccountPageReqVO.java create mode 100644 yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/account/vo/WxAccountRespVO.java create mode 100644 yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/account/vo/WxAccountUpdateReqVO.java create mode 100644 yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/accountfans/WxAccountFansController.java create mode 100644 yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/accountfans/vo/WxAccountFansBaseVO.java create mode 100644 yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/accountfans/vo/WxAccountFansCreateReqVO.java create mode 100644 yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/accountfans/vo/WxAccountFansExcelVO.java create mode 100644 yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/accountfans/vo/WxAccountFansExportReqVO.java create mode 100644 yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/accountfans/vo/WxAccountFansPageReqVO.java create mode 100644 yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/accountfans/vo/WxAccountFansRespVO.java create mode 100644 yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/accountfans/vo/WxAccountFansUpdateReqVO.java create mode 100644 yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/builder/AbstractBuilder.java create mode 100644 yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/builder/ImageBuilder.java create mode 100644 yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/builder/TextBuilder.java create mode 100644 yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/config/WxMpConfig.java create mode 100644 yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/convert/account/WxAccountConvert.java create mode 100644 yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/convert/accountfans/WxAccountFansConvert.java create mode 100644 yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/dal/dataobject/account/WxAccountDO.java create mode 100644 yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/dal/dataobject/accountfans/WxAccountFansDO.java create mode 100644 yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/dal/mysql/account/WxAccountMapper.java create mode 100644 yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/dal/mysql/accountfans/WxAccountFansMapper.java create mode 100644 yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/handler/KfSessionHandler.java create mode 100644 yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/handler/LocationHandler.java create mode 100644 yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/handler/LogHandler.java create mode 100644 yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/handler/MenuHandler.java create mode 100644 yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/handler/MsgHandler.java create mode 100644 yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/handler/NullHandler.java create mode 100644 yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/handler/ScanHandler.java create mode 100644 yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/handler/StoreCheckNotifyHandler.java create mode 100644 yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/handler/SubscribeHandler.java create mode 100644 yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/handler/UnsubscribeHandler.java create mode 100644 yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/mq/costomer/dict/WxConfigDataRefreshConsumer.java create mode 100644 yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/mq/message/dict/WxConfigDataRefreshMessage.java create mode 100644 yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/mq/producer/dict/WxMpConfigDataProducer.java create mode 100644 yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/service/account/WxAccountService.java create mode 100644 yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/service/account/WxAccountServiceImpl.java create mode 100644 yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/service/accountfans/WxAccountFansService.java create mode 100644 yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/service/accountfans/WxAccountFansServiceImpl.java diff --git a/pom.xml b/pom.xml index 1ccbca9..7adca82 100644 --- a/pom.xml +++ b/pom.xml @@ -18,7 +18,6 @@ yudao-module-system yudao-module-infra yudao-module-pay - yudao-module-wechat-mp yudao-module-wechat diff --git a/yudao-dependencies/pom.xml b/yudao-dependencies/pom.xml index 7b91eeb..2e9ee4f 100644 --- a/yudao-dependencies/pom.xml +++ b/yudao-dependencies/pom.xml @@ -64,7 +64,7 @@ 3.1.471 1.2.7 1.4.0 - 3.3.0 + 4.3.0 diff --git a/yudao-module-wechat-mp/pom.xml b/yudao-module-wechat-mp/pom.xml deleted file mode 100644 index 97818d4..0000000 --- a/yudao-module-wechat-mp/pom.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - yudao - cn.iocoder.boot - ${revision} - - 4.0.0 - - yudao-module-wechat-mp-api - yudao-module-wechat-mp-biz - - yudao-module-wechat-mp - pom - - ${project.artifactId} - - 微信公众号模块,主要实现 账号管理,粉丝管理 等功能。 - - - - diff --git a/yudao-module-wechat-mp/yudao-module-wechat-mp-api/pom.xml b/yudao-module-wechat-mp/yudao-module-wechat-mp-api/pom.xml deleted file mode 100644 index 6049507..0000000 --- a/yudao-module-wechat-mp/yudao-module-wechat-mp-api/pom.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - yudao-module-wechat-mp - cn.iocoder.boot - ${revision} - - 4.0.0 - yudao-module-wechat-mp-api - jar - - ${project.artifactId} - - 微信公众号模块 API,暴露给其它模块调用 - - - - - cn.iocoder.boot - yudao-common - - - - diff --git a/yudao-module-wechat-mp/yudao-module-wechat-mp-api/src/main/java/cn/iocoder/yudao/module/wechatMp/enums/ErrorCodeConstants.java b/yudao-module-wechat-mp/yudao-module-wechat-mp-api/src/main/java/cn/iocoder/yudao/module/wechatMp/enums/ErrorCodeConstants.java deleted file mode 100644 index ea356c0..0000000 --- a/yudao-module-wechat-mp/yudao-module-wechat-mp-api/src/main/java/cn/iocoder/yudao/module/wechatMp/enums/ErrorCodeConstants.java +++ /dev/null @@ -1,16 +0,0 @@ -package cn.iocoder.yudao.module.wechatMp.enums; - -import cn.iocoder.yudao.framework.common.exception.ErrorCode; - -/** - * Member 错误码枚举类 - * - * wechatMp 系统,使用 1-004-000-000 段 - */ -public interface ErrorCodeConstants { - - // ========== 用户相关 1004001000============ - ErrorCode WX_ACCOUNT_NOT_EXISTS = new ErrorCode(1004001000, "用户不存在"); - ErrorCode WX_ACCOUNT_FANS_NOT_EXISTS = new ErrorCode(1004001000, "用户不存在"); - -} diff --git a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/pom.xml b/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/pom.xml deleted file mode 100644 index 9266de9..0000000 --- a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/pom.xml +++ /dev/null @@ -1,77 +0,0 @@ - - - - yudao-module-wechat-mp - cn.iocoder.boot - ${revision} - - 4.0.0 - jar - - yudao-module-wechat-mp-biz - - ${project.artifactId} - - 微信公众号模块,主要实现 账号管理,粉丝管理 等功能。 - - - - - cn.iocoder.boot - yudao-module-wechat-mp-api - ${revision} - - - - - cn.iocoder.boot - yudao-spring-boot-starter-biz-operatelog - - - - - cn.iocoder.boot - yudao-spring-boot-starter-web - - - - cn.iocoder.boot - yudao-spring-boot-starter-security - - - - - cn.iocoder.boot - yudao-spring-boot-starter-mybatis - - - - - cn.iocoder.boot - yudao-spring-boot-starter-test - - - cn.iocoder.boot - yudao-spring-boot-starter-excel - - - cn.iocoder.boot - yudao-spring-boot-starter-mq - - - - org.springframework.boot - spring-boot-configuration-processor - true - - - - com.github.binarywang - weixin-java-mp - - - - - diff --git a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/builder/AbstractBuilder.java b/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/builder/AbstractBuilder.java deleted file mode 100644 index 383b1ee..0000000 --- a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/builder/AbstractBuilder.java +++ /dev/null @@ -1,15 +0,0 @@ -package cn.iocoder.yudao.module.wechatMp.builder; - -import me.chanjar.weixin.mp.api.WxMpService; -import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage; -import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -// TODO @亚洲:看看是不是可以使用 convert 来做,更符合项目 -public abstract class AbstractBuilder { - protected final Logger logger = LoggerFactory.getLogger(getClass()); - - public abstract WxMpXmlOutMessage build(String content, - WxMpXmlMessage wxMessage, WxMpService service); -} diff --git a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/builder/ImageBuilder.java b/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/builder/ImageBuilder.java deleted file mode 100644 index 9924984..0000000 --- a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/builder/ImageBuilder.java +++ /dev/null @@ -1,21 +0,0 @@ -package cn.iocoder.yudao.module.wechatMp.builder; - -import me.chanjar.weixin.mp.api.WxMpService; -import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage; -import me.chanjar.weixin.mp.bean.message.WxMpXmlOutImageMessage; -import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage; - -public class ImageBuilder extends AbstractBuilder { - - @Override - public WxMpXmlOutMessage build(String content, WxMpXmlMessage wxMessage, - WxMpService service) { - - WxMpXmlOutImageMessage m = WxMpXmlOutMessage.IMAGE().mediaId(content) - .fromUser(wxMessage.getToUser()).toUser(wxMessage.getFromUser()) - .build(); - - return m; - } - -} diff --git a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/builder/TextBuilder.java b/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/builder/TextBuilder.java deleted file mode 100644 index a1b1849..0000000 --- a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/builder/TextBuilder.java +++ /dev/null @@ -1,19 +0,0 @@ -package cn.iocoder.yudao.module.wechatMp.builder; - -import me.chanjar.weixin.mp.api.WxMpService; -import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage; -import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage; -import me.chanjar.weixin.mp.bean.message.WxMpXmlOutTextMessage; - -public class TextBuilder extends AbstractBuilder { - - @Override - public WxMpXmlOutMessage build(String content, WxMpXmlMessage wxMessage, - WxMpService service) { - WxMpXmlOutTextMessage m = WxMpXmlOutMessage.TEXT().content(content) - .fromUser(wxMessage.getToUser()).toUser(wxMessage.getFromUser()) - .build(); - return m; - } - -} diff --git a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/config/WxMpConfig.java b/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/config/WxMpConfig.java deleted file mode 100644 index 33b2022..0000000 --- a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/config/WxMpConfig.java +++ /dev/null @@ -1,138 +0,0 @@ -package cn.iocoder.yudao.module.wechatMp.config; - - -import cn.hutool.extra.spring.SpringUtil; -import cn.iocoder.yudao.module.wechatMp.controller.admin.account.vo.WxAccountExportReqVO; -import cn.iocoder.yudao.module.wechatMp.dal.dataobject.account.WxAccountDO; -import cn.iocoder.yudao.module.wechatMp.handler.*; -import cn.iocoder.yudao.module.wechatMp.service.account.WxAccountService; -import com.google.common.collect.Maps; -import lombok.extern.slf4j.Slf4j; -import me.chanjar.weixin.common.api.WxConsts; -import me.chanjar.weixin.mp.api.WxMpInMemoryConfigStorage; -import me.chanjar.weixin.mp.api.WxMpMessageRouter; -import me.chanjar.weixin.mp.api.WxMpService; -import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl; -import me.chanjar.weixin.mp.constant.WxMpEventConstants; -import org.springframework.beans.factory.InitializingBean; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.springframework.util.CollectionUtils; - -import javax.annotation.PostConstruct; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -// TODO @芋艿:思考有没更好的处理方式 -@Component -@Slf4j -public class WxMpConfig implements InitializingBean { - - private static Map routers = Maps.newHashMap(); - private static Map mpServices = Maps.newHashMap(); - - @Autowired - private WxAccountService wxAccountService; - - /** - * 初始化公众号配置 - */ - public synchronized void initWxConfig() { - WxAccountExportReqVO req = new WxAccountExportReqVO(); - List wxAccountList = wxAccountService.getWxAccountList(req); - if (CollectionUtils.isEmpty(wxAccountList)) { - return; - } - WxMpConfig.init(wxAccountList); - log.info("加载公众号配置成功"); - } - - public static void init(List wxAccountDOS) { - mpServices = wxAccountDOS.stream().map(wxAccountDO -> { - // TODO 亚洲:使用 WxMpInMemoryConfigStorage 的话,多节点会不会存在 accessToken 冲突 - WxMpInMemoryConfigStorage configStorage = new WxMpInMemoryConfigStorage(); - configStorage.setAppId(wxAccountDO.getAppid()); - configStorage.setSecret(wxAccountDO.getAppsecret()); - configStorage.setToken(wxAccountDO.getToken()); - configStorage.setAesKey(wxAccountDO.getAeskey()); - - WxMpService service = new WxMpServiceImpl(); - service.setWxMpConfigStorage(configStorage); - routers.put(wxAccountDO.getAppid(), newRouter(service)); - return service; - }).collect(Collectors.toMap(s -> s.getWxMpConfigStorage().getAppId(), a -> a, (o, n) -> o)); - } - - public static Map getRouters() { - return routers; - } - - public static Map getMpServices() { - return mpServices; - } - - private static WxMpMessageRouter newRouter(WxMpService wxMpService) { - final WxMpMessageRouter newRouter = new WxMpMessageRouter(wxMpService); - // 记录所有事件的日志 (异步执行) - newRouter.rule().handler(SpringUtil.getBean(LogHandler.class)).next(); - - // 接收客服会话管理事件 - newRouter.rule().async(false).msgType(WxConsts.XmlMsgType.EVENT) - .event(WxMpEventConstants.CustomerService.KF_CREATE_SESSION) - .handler(SpringUtil.getBean(KfSessionHandler.class)).end(); - newRouter.rule().async(false).msgType(WxConsts.XmlMsgType.EVENT) - .event(WxMpEventConstants.CustomerService.KF_CLOSE_SESSION) - .handler(SpringUtil.getBean(KfSessionHandler.class)) - .end(); - newRouter.rule().async(false).msgType(WxConsts.XmlMsgType.EVENT) - .event(WxMpEventConstants.CustomerService.KF_SWITCH_SESSION) - .handler(SpringUtil.getBean(KfSessionHandler.class)).end(); - - // 门店审核事件 - newRouter.rule().async(false).msgType(WxConsts.XmlMsgType.EVENT) - .event(WxMpEventConstants.POI_CHECK_NOTIFY) - .handler(SpringUtil.getBean(StoreCheckNotifyHandler.class)).end(); - - // 自定义菜单事件 - newRouter.rule().async(false).msgType(WxConsts.XmlMsgType.EVENT) - .event(WxConsts.MenuButtonType.CLICK).handler(SpringUtil.getBean(MenuHandler.class)).end(); - - // 点击菜单连接事件 - newRouter.rule().async(false).msgType(WxConsts.XmlMsgType.EVENT) - .event(WxConsts.MenuButtonType.VIEW).handler(SpringUtil.getBean(NullHandler.class)).end(); - - // 关注事件 - newRouter.rule().async(false).msgType(WxConsts.XmlMsgType.EVENT) - .event(WxConsts.EventType.SUBSCRIBE).handler(SpringUtil.getBean(SubscribeHandler.class)) - .end(); - - // 取消关注事件 - newRouter.rule().async(false).msgType(WxConsts.XmlMsgType.EVENT) - .event(WxConsts.EventType.UNSUBSCRIBE) - .handler(SpringUtil.getBean(UnsubscribeHandler.class)).end(); - - // 上报地理位置事件 - newRouter.rule().async(false).msgType(WxConsts.XmlMsgType.EVENT) - .event(WxConsts.EventType.LOCATION).handler(SpringUtil.getBean(LocationHandler.class)) - .end(); - - // 接收地理位置消息 - newRouter.rule().async(false).msgType(WxConsts.XmlMsgType.LOCATION) - .handler(SpringUtil.getBean(LocationHandler.class)).end(); - - // 扫码事件 - newRouter.rule().async(false).msgType(WxConsts.XmlMsgType.EVENT) - .event(WxConsts.EventType.SCAN).handler(SpringUtil.getBean(ScanHandler.class)).end(); - - // 默认 - newRouter.rule().async(false).handler(SpringUtil.getBean(MsgHandler.class)).end(); - - return newRouter; - } - - @Override - public void afterPropertiesSet() throws Exception { - initWxConfig(); - } -} diff --git a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/account/WxAccountController.java b/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/account/WxAccountController.java deleted file mode 100644 index 86ac52c..0000000 --- a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/account/WxAccountController.java +++ /dev/null @@ -1,100 +0,0 @@ -package cn.iocoder.yudao.module.wechatMp.controller.admin.account; - -import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; -import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; -import cn.iocoder.yudao.module.wechatMp.controller.admin.account.vo.*; -import cn.iocoder.yudao.module.wechatMp.convert.account.WxAccountConvert; -import cn.iocoder.yudao.module.wechatMp.dal.dataobject.account.WxAccountDO; -import cn.iocoder.yudao.module.wechatMp.service.account.WxAccountService; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiImplicitParam; -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 javax.annotation.Resource; -import javax.servlet.http.HttpServletResponse; -import javax.validation.Valid; -import java.io.IOException; -import java.util.Collection; -import java.util.List; - -import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; -import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; - -// TODO @亚洲:/mp/account 即可 -@Api(tags = "管理后台 - 公众号账户") -@RestController -@RequestMapping("/wechatMp/wx-account") -@Validated -public class WxAccountController { - - @Resource - private WxAccountService wxAccountService; - - @PostMapping("/create") - @ApiOperation("创建公众号账户") - @PreAuthorize("@ss.hasPermission('wechatMp:wx-account:create')") - public CommonResult createWxAccount(@Valid @RequestBody WxAccountCreateReqVO createReqVO) { - return success(wxAccountService.createWxAccount(createReqVO)); - } - - @PutMapping("/update") - @ApiOperation("更新公众号账户") - @PreAuthorize("@ss.hasPermission('wechatMp:wx-account:update')") - public CommonResult updateWxAccount(@Valid @RequestBody WxAccountUpdateReqVO updateReqVO) { - wxAccountService.updateWxAccount(updateReqVO); - return success(true); - } - - @DeleteMapping("/delete") - @ApiOperation("删除公众号账户") - @ApiImplicitParam(name = "id", value = "编号", required = true, dataTypeClass = Long.class) - @PreAuthorize("@ss.hasPermission('wechatMp:wx-account:delete')") - public CommonResult deleteWxAccount(@RequestParam("id") Long id) { - wxAccountService.deleteWxAccount(id); - return success(true); - } - - @GetMapping("/get") - @ApiOperation("获得公众号账户") - @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class) - @PreAuthorize("@ss.hasPermission('wechatMp:wx-account:query')") - public CommonResult getWxAccount(@RequestParam("id") Long id) { - WxAccountDO wxAccount = wxAccountService.getWxAccount(id); - return success(WxAccountConvert.INSTANCE.convert(wxAccount)); - } - - @GetMapping("/list") - @ApiOperation("获得公众号账户列表") - @ApiImplicitParam(name = "ids", value = "编号列表", required = true, example = "1024,2048", dataTypeClass = List.class) - @PreAuthorize("@ss.hasPermission('wechatMp:wx-account:query')") - public CommonResult> getWxAccountList(@RequestParam("ids") Collection ids) { - List list = wxAccountService.getWxAccountList(ids); - return success(WxAccountConvert.INSTANCE.convertList(list)); - } - - @GetMapping("/page") - @ApiOperation("获得公众号账户分页") - @PreAuthorize("@ss.hasPermission('wechatMp:wx-account:query')") - public CommonResult> getWxAccountPage(@Valid WxAccountPageReqVO pageVO) { - PageResult pageResult = wxAccountService.getWxAccountPage(pageVO); - return success(WxAccountConvert.INSTANCE.convertPage(pageResult)); - } - - @GetMapping("/export-excel") - @ApiOperation("导出公众号账户 Excel") - @PreAuthorize("@ss.hasPermission('wechatMp:wx-account:export')") - @OperateLog(type = EXPORT) - public void exportWxAccountExcel(@Valid WxAccountExportReqVO exportReqVO, - HttpServletResponse response) throws IOException { - List list = wxAccountService.getWxAccountList(exportReqVO); - // 导出 Excel - List datas = WxAccountConvert.INSTANCE.convertList02(list); - ExcelUtils.write(response, "公众号账户.xls", "数据", WxAccountExcelVO.class, datas); - } - -} diff --git a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/account/vo/WxAccountBaseVO.java b/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/account/vo/WxAccountBaseVO.java deleted file mode 100644 index 05d5bff..0000000 --- a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/account/vo/WxAccountBaseVO.java +++ /dev/null @@ -1,36 +0,0 @@ -package cn.iocoder.yudao.module.wechatMp.controller.admin.account.vo; - -import lombok.*; -import java.util.*; -import io.swagger.annotations.*; -import javax.validation.constraints.*; - -/** -* 公众号账户 Base VO,提供给添加、修改、详细的子 VO 使用 -* 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 -*/ -@Data -public class WxAccountBaseVO { - - @ApiModelProperty(value = "公众号名称") - private String name; - - @ApiModelProperty(value = "公众号账户") - private String account; - - @ApiModelProperty(value = "公众号appid") - private String appid; - - @ApiModelProperty(value = "公众号密钥") - private String appsecret; - - @ApiModelProperty(value = "公众号token") - private String token; - - @ApiModelProperty(value = "加密密钥") - private String aeskey; - - @ApiModelProperty(value = "备注") - private String remark; - -} diff --git a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/account/vo/WxAccountCreateReqVO.java b/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/account/vo/WxAccountCreateReqVO.java deleted file mode 100644 index c60125c..0000000 --- a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/account/vo/WxAccountCreateReqVO.java +++ /dev/null @@ -1,14 +0,0 @@ -package cn.iocoder.yudao.module.wechatMp.controller.admin.account.vo; - -import lombok.*; -import java.util.*; -import io.swagger.annotations.*; -import javax.validation.constraints.*; - -@ApiModel("管理后台 - 公众号账户创建 Request VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class WxAccountCreateReqVO extends WxAccountBaseVO { - -} diff --git a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/account/vo/WxAccountExcelVO.java b/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/account/vo/WxAccountExcelVO.java deleted file mode 100644 index 4885a0a..0000000 --- a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/account/vo/WxAccountExcelVO.java +++ /dev/null @@ -1,50 +0,0 @@ -package cn.iocoder.yudao.module.wechatMp.controller.admin.account.vo; - -import lombok.*; -import java.util.*; -import io.swagger.annotations.*; - -import com.alibaba.excel.annotation.ExcelProperty; - -/** - * 公众号账户 Excel VO - * - * @author 芋道源码 - */ -@Data -public class WxAccountExcelVO { - - @ExcelProperty("编号") - private Long id; - - @ExcelProperty("公众号名称") - private String name; - - @ExcelProperty("公众号账户") - private String account; - - @ExcelProperty("公众号appid") - private String appid; - - @ExcelProperty("公众号密钥") - private String appsecret; - - @ExcelProperty("公众号url") - private String url; - - @ExcelProperty("公众号token") - private String token; - - @ExcelProperty("加密密钥") - private String aeskey; - - @ExcelProperty("二维码图片URL") - private String qrUrl; - - @ExcelProperty("备注") - private String remark; - - @ExcelProperty("创建时间") - private Date createTime; - -} diff --git a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/account/vo/WxAccountExportReqVO.java b/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/account/vo/WxAccountExportReqVO.java deleted file mode 100644 index 563dd2a..0000000 --- a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/account/vo/WxAccountExportReqVO.java +++ /dev/null @@ -1,32 +0,0 @@ -package cn.iocoder.yudao.module.wechatMp.controller.admin.account.vo; - -import lombok.*; -import java.util.*; -import io.swagger.annotations.*; -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import org.springframework.format.annotation.DateTimeFormat; - -import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; - -@ApiModel(value = "管理后台 - 公众号账户 Excel 导出 Request VO", description = "参数和 WxAccountPageReqVO 是一致的") -@Data -public class WxAccountExportReqVO { - - @ApiModelProperty(value = "公众号名称") - private String name; - - @ApiModelProperty(value = "公众号账户") - private String account; - - @ApiModelProperty(value = "公众号appid") - private String appid; - - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - @ApiModelProperty(value = "开始创建时间") - private Date beginCreateTime; - - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - @ApiModelProperty(value = "结束创建时间") - private Date endCreateTime; - -} diff --git a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/account/vo/WxAccountPageReqVO.java b/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/account/vo/WxAccountPageReqVO.java deleted file mode 100644 index 443c26e..0000000 --- a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/account/vo/WxAccountPageReqVO.java +++ /dev/null @@ -1,34 +0,0 @@ -package cn.iocoder.yudao.module.wechatMp.controller.admin.account.vo; - -import lombok.*; -import java.util.*; -import io.swagger.annotations.*; -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import org.springframework.format.annotation.DateTimeFormat; - -import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; - -@ApiModel("管理后台 - 公众号账户分页 Request VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class WxAccountPageReqVO extends PageParam { - - @ApiModelProperty(value = "公众号名称") - private String name; - - @ApiModelProperty(value = "公众号账户") - private String account; - - @ApiModelProperty(value = "公众号appid") - private String appid; - - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - @ApiModelProperty(value = "开始创建时间") - private Date beginCreateTime; - - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - @ApiModelProperty(value = "结束创建时间") - private Date endCreateTime; - -} diff --git a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/account/vo/WxAccountRespVO.java b/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/account/vo/WxAccountRespVO.java deleted file mode 100644 index 63eeeca..0000000 --- a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/account/vo/WxAccountRespVO.java +++ /dev/null @@ -1,25 +0,0 @@ -package cn.iocoder.yudao.module.wechatMp.controller.admin.account.vo; - -import lombok.*; -import java.util.*; -import io.swagger.annotations.*; - -@ApiModel("管理后台 - 公众号账户 Response VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class WxAccountRespVO extends WxAccountBaseVO { - - @ApiModelProperty(value = "编号", required = true) - private Long id; - - @ApiModelProperty(value = "公众号url") - private String url; - - @ApiModelProperty(value = "二维码图片URL") - private String qrUrl; - - @ApiModelProperty(value = "创建时间", required = true) - private Date createTime; - -} diff --git a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/account/vo/WxAccountUpdateReqVO.java b/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/account/vo/WxAccountUpdateReqVO.java deleted file mode 100644 index 53ec018..0000000 --- a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/account/vo/WxAccountUpdateReqVO.java +++ /dev/null @@ -1,18 +0,0 @@ -package cn.iocoder.yudao.module.wechatMp.controller.admin.account.vo; - -import lombok.*; -import java.util.*; -import io.swagger.annotations.*; -import javax.validation.constraints.*; - -@ApiModel("管理后台 - 公众号账户更新 Request VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class WxAccountUpdateReqVO extends WxAccountBaseVO { - - @ApiModelProperty(value = "编号", required = true) - @NotNull(message = "编号不能为空") - private Long id; - -} diff --git a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/accountfans/WxAccountFansController.java b/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/accountfans/WxAccountFansController.java deleted file mode 100644 index 0d97b0f..0000000 --- a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/accountfans/WxAccountFansController.java +++ /dev/null @@ -1,100 +0,0 @@ -package cn.iocoder.yudao.module.wechatMp.controller.admin.accountfans; - -import org.springframework.web.bind.annotation.*; -import javax.annotation.Resource; -import org.springframework.validation.annotation.Validated; -import org.springframework.security.access.prepost.PreAuthorize; -import io.swagger.annotations.*; - -import javax.validation.constraints.*; -import javax.validation.*; -import javax.servlet.http.*; -import java.util.*; -import java.io.IOException; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; - -import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; - -import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; -import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.*; - -import cn.iocoder.yudao.module.wechatMp.controller.admin.accountfans.vo.*; -import cn.iocoder.yudao.module.wechatMp.dal.dataobject.accountfans.WxAccountFansDO; -import cn.iocoder.yudao.module.wechatMp.convert.accountfans.WxAccountFansConvert; -import cn.iocoder.yudao.module.wechatMp.service.accountfans.WxAccountFansService; - -@Api(tags = "管理后台 - 微信公众号粉丝") -@RestController -@RequestMapping("/wechatMp/wx-account-fans") -@Validated -public class WxAccountFansController { - - @Resource - private WxAccountFansService wxAccountFansService; - - @PostMapping("/create") - @ApiOperation("创建微信公众号粉丝") - @PreAuthorize("@ss.hasPermission('wechatMp:wx-account-fans:create')") - public CommonResult createWxAccountFans(@Valid @RequestBody WxAccountFansCreateReqVO createReqVO) { - return success(wxAccountFansService.createWxAccountFans(createReqVO)); - } - - @PutMapping("/update") - @ApiOperation("更新微信公众号粉丝") - @PreAuthorize("@ss.hasPermission('wechatMp:wx-account-fans:update')") - public CommonResult updateWxAccountFans(@Valid @RequestBody WxAccountFansUpdateReqVO updateReqVO) { - wxAccountFansService.updateWxAccountFans(updateReqVO); - return success(true); - } - - @DeleteMapping("/delete") - @ApiOperation("删除微信公众号粉丝") - @ApiImplicitParam(name = "id", value = "编号", required = true, dataTypeClass = Long.class) - @PreAuthorize("@ss.hasPermission('wechatMp:wx-account-fans:delete')") - public CommonResult deleteWxAccountFans(@RequestParam("id") Long id) { - wxAccountFansService.deleteWxAccountFans(id); - return success(true); - } - - @GetMapping("/get") - @ApiOperation("获得微信公众号粉丝") - @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class) - @PreAuthorize("@ss.hasPermission('wechatMp:wx-account-fans:query')") - public CommonResult getWxAccountFans(@RequestParam("id") Long id) { - WxAccountFansDO wxAccountFans = wxAccountFansService.getWxAccountFans(id); - return success(WxAccountFansConvert.INSTANCE.convert(wxAccountFans)); - } - - @GetMapping("/list") - @ApiOperation("获得微信公众号粉丝列表") - @ApiImplicitParam(name = "ids", value = "编号列表", required = true, example = "1024,2048", dataTypeClass = List.class) - @PreAuthorize("@ss.hasPermission('wechatMp:wx-account-fans:query')") - public CommonResult> getWxAccountFansList(@RequestParam("ids") Collection ids) { - List list = wxAccountFansService.getWxAccountFansList(ids); - return success(WxAccountFansConvert.INSTANCE.convertList(list)); - } - - @GetMapping("/page") - @ApiOperation("获得微信公众号粉丝分页") - @PreAuthorize("@ss.hasPermission('wechatMp:wx-account-fans:query')") - public CommonResult> getWxAccountFansPage(@Valid WxAccountFansPageReqVO pageVO) { - PageResult pageResult = wxAccountFansService.getWxAccountFansPage(pageVO); - return success(WxAccountFansConvert.INSTANCE.convertPage(pageResult)); - } - - @GetMapping("/export-excel") - @ApiOperation("导出微信公众号粉丝 Excel") - @PreAuthorize("@ss.hasPermission('wechatMp:wx-account-fans:export')") - @OperateLog(type = EXPORT) - public void exportWxAccountFansExcel(@Valid WxAccountFansExportReqVO exportReqVO, - HttpServletResponse response) throws IOException { - List list = wxAccountFansService.getWxAccountFansList(exportReqVO); - // 导出 Excel - List datas = WxAccountFansConvert.INSTANCE.convertList02(list); - ExcelUtils.write(response, "微信公众号粉丝.xls", "数据", WxAccountFansExcelVO.class, datas); - } - -} diff --git a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/accountfans/vo/WxAccountFansBaseVO.java b/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/accountfans/vo/WxAccountFansBaseVO.java deleted file mode 100644 index 3345dc4..0000000 --- a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/accountfans/vo/WxAccountFansBaseVO.java +++ /dev/null @@ -1,58 +0,0 @@ -package cn.iocoder.yudao.module.wechatMp.controller.admin.accountfans.vo; - -import lombok.*; -import java.util.*; -import io.swagger.annotations.*; -import javax.validation.constraints.*; -import org.springframework.format.annotation.DateTimeFormat; - -import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; - -/** -* 微信公众号粉丝 Base VO,提供给添加、修改、详细的子 VO 使用 -* 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 -*/ -@Data -public class WxAccountFansBaseVO { - - @ApiModelProperty(value = "用户标识") - private String openid; - - @ApiModelProperty(value = "订阅状态,0未关注,1已关注") - private String subscribeStatus; - - @ApiModelProperty(value = "订阅时间") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private Date subscribeTime; - - @ApiModelProperty(value = "昵称") - private byte[] nickname; - - @ApiModelProperty(value = "性别,1男,2女,0未知") - private String gender; - - @ApiModelProperty(value = "语言") - private String language; - - @ApiModelProperty(value = "国家") - private String country; - - @ApiModelProperty(value = "省份") - private String province; - - @ApiModelProperty(value = "城市") - private String city; - - @ApiModelProperty(value = "头像地址") - private String headimgUrl; - - @ApiModelProperty(value = "备注") - private String remark; - - @ApiModelProperty(value = "微信公众号ID") - private String wxAccountId; - - @ApiModelProperty(value = "微信公众号appid") - private String wxAccountAppid; - -} diff --git a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/accountfans/vo/WxAccountFansCreateReqVO.java b/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/accountfans/vo/WxAccountFansCreateReqVO.java deleted file mode 100644 index 4fa90d7..0000000 --- a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/accountfans/vo/WxAccountFansCreateReqVO.java +++ /dev/null @@ -1,14 +0,0 @@ -package cn.iocoder.yudao.module.wechatMp.controller.admin.accountfans.vo; - -import lombok.*; -import java.util.*; -import io.swagger.annotations.*; -import javax.validation.constraints.*; - -@ApiModel("管理后台 - 微信公众号粉丝创建 Request VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class WxAccountFansCreateReqVO extends WxAccountFansBaseVO { - -} diff --git a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/accountfans/vo/WxAccountFansExcelVO.java b/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/accountfans/vo/WxAccountFansExcelVO.java deleted file mode 100644 index 9be42b4..0000000 --- a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/accountfans/vo/WxAccountFansExcelVO.java +++ /dev/null @@ -1,62 +0,0 @@ -package cn.iocoder.yudao.module.wechatMp.controller.admin.accountfans.vo; - -import lombok.*; -import java.util.*; -import io.swagger.annotations.*; - -import com.alibaba.excel.annotation.ExcelProperty; - -/** - * 微信公众号粉丝 Excel VO - * - * @author 芋道源码 - */ -@Data -public class WxAccountFansExcelVO { - - @ExcelProperty("编号") - private Long id; - - @ExcelProperty("用户标识") - private String openid; - - @ExcelProperty("订阅状态,0未关注,1已关注") - private String subscribeStatus; - - @ExcelProperty("订阅时间") - private Date subscribeTime; - - @ExcelProperty("昵称") - private byte[] nickname; - - @ExcelProperty("性别,1男,2女,0未知") - private String gender; - - @ExcelProperty("语言") - private String language; - - @ExcelProperty("国家") - private String country; - - @ExcelProperty("省份") - private String province; - - @ExcelProperty("城市") - private String city; - - @ExcelProperty("头像地址") - private String headimgUrl; - - @ExcelProperty("备注") - private String remark; - - @ExcelProperty("微信公众号ID") - private String wxAccountId; - - @ExcelProperty("微信公众号appid") - private String wxAccountAppid; - - @ExcelProperty("创建时间") - private Date createTime; - -} diff --git a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/accountfans/vo/WxAccountFansExportReqVO.java b/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/accountfans/vo/WxAccountFansExportReqVO.java deleted file mode 100644 index 1a38318..0000000 --- a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/accountfans/vo/WxAccountFansExportReqVO.java +++ /dev/null @@ -1,67 +0,0 @@ -package cn.iocoder.yudao.module.wechatMp.controller.admin.accountfans.vo; - -import lombok.*; -import java.util.*; -import io.swagger.annotations.*; -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import org.springframework.format.annotation.DateTimeFormat; - -import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; - -@ApiModel(value = "管理后台 - 微信公众号粉丝 Excel 导出 Request VO", description = "参数和 WxAccountFansPageReqVO 是一致的") -@Data -public class WxAccountFansExportReqVO { - - @ApiModelProperty(value = "用户标识") - private String openid; - - @ApiModelProperty(value = "订阅状态,0未关注,1已关注") - private String subscribeStatus; - - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - @ApiModelProperty(value = "开始订阅时间") - private Date beginSubscribeTime; - - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - @ApiModelProperty(value = "结束订阅时间") - private Date endSubscribeTime; - - @ApiModelProperty(value = "昵称") - private String nickname; - - @ApiModelProperty(value = "性别,1男,2女,0未知") - private String gender; - - @ApiModelProperty(value = "语言") - private String language; - - @ApiModelProperty(value = "国家") - private String country; - - @ApiModelProperty(value = "省份") - private String province; - - @ApiModelProperty(value = "城市") - private String city; - - @ApiModelProperty(value = "头像地址") - private String headimgUrl; - - @ApiModelProperty(value = "备注") - private String remark; - - @ApiModelProperty(value = "微信公众号ID") - private String wxAccountId; - - @ApiModelProperty(value = "微信公众号appid") - private String wxAccountAppid; - - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - @ApiModelProperty(value = "开始创建时间") - private Date beginCreateTime; - - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - @ApiModelProperty(value = "结束创建时间") - private Date endCreateTime; - -} diff --git a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/accountfans/vo/WxAccountFansPageReqVO.java b/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/accountfans/vo/WxAccountFansPageReqVO.java deleted file mode 100644 index 577eccc..0000000 --- a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/accountfans/vo/WxAccountFansPageReqVO.java +++ /dev/null @@ -1,69 +0,0 @@ -package cn.iocoder.yudao.module.wechatMp.controller.admin.accountfans.vo; - -import lombok.*; -import java.util.*; -import io.swagger.annotations.*; -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import org.springframework.format.annotation.DateTimeFormat; - -import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; - -@ApiModel("管理后台 - 微信公众号粉丝分页 Request VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class WxAccountFansPageReqVO extends PageParam { - - @ApiModelProperty(value = "用户标识") - private String openid; - - @ApiModelProperty(value = "订阅状态,0未关注,1已关注") - private String subscribeStatus; - - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - @ApiModelProperty(value = "开始订阅时间") - private Date beginSubscribeTime; - - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - @ApiModelProperty(value = "结束订阅时间") - private Date endSubscribeTime; - - @ApiModelProperty(value = "昵称") - private String nickname; - - @ApiModelProperty(value = "性别,1男,2女,0未知") - private String gender; - - @ApiModelProperty(value = "语言") - private String language; - - @ApiModelProperty(value = "国家") - private String country; - - @ApiModelProperty(value = "省份") - private String province; - - @ApiModelProperty(value = "城市") - private String city; - - @ApiModelProperty(value = "头像地址") - private String headimgUrl; - - @ApiModelProperty(value = "备注") - private String remark; - - @ApiModelProperty(value = "微信公众号ID") - private String wxAccountId; - - @ApiModelProperty(value = "微信公众号appid") - private String wxAccountAppid; - - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - @ApiModelProperty(value = "开始创建时间") - private Date beginCreateTime; - - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - @ApiModelProperty(value = "结束创建时间") - private Date endCreateTime; - -} diff --git a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/accountfans/vo/WxAccountFansRespVO.java b/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/accountfans/vo/WxAccountFansRespVO.java deleted file mode 100644 index 18f1398..0000000 --- a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/accountfans/vo/WxAccountFansRespVO.java +++ /dev/null @@ -1,19 +0,0 @@ -package cn.iocoder.yudao.module.wechatMp.controller.admin.accountfans.vo; - -import lombok.*; -import java.util.*; -import io.swagger.annotations.*; - -@ApiModel("管理后台 - 微信公众号粉丝 Response VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class WxAccountFansRespVO extends WxAccountFansBaseVO { - - @ApiModelProperty(value = "编号", required = true) - private Long id; - - @ApiModelProperty(value = "创建时间", required = true) - private Date createTime; - -} diff --git a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/accountfans/vo/WxAccountFansUpdateReqVO.java b/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/accountfans/vo/WxAccountFansUpdateReqVO.java deleted file mode 100644 index 5fd8a76..0000000 --- a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/controller/admin/accountfans/vo/WxAccountFansUpdateReqVO.java +++ /dev/null @@ -1,18 +0,0 @@ -package cn.iocoder.yudao.module.wechatMp.controller.admin.accountfans.vo; - -import lombok.*; -import java.util.*; -import io.swagger.annotations.*; -import javax.validation.constraints.*; - -@ApiModel("管理后台 - 微信公众号粉丝更新 Request VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class WxAccountFansUpdateReqVO extends WxAccountFansBaseVO { - - @ApiModelProperty(value = "编号", required = true) - @NotNull(message = "编号不能为空") - private Long id; - -} diff --git a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/convert/account/WxAccountConvert.java b/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/convert/account/WxAccountConvert.java deleted file mode 100644 index 183fd21..0000000 --- a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/convert/account/WxAccountConvert.java +++ /dev/null @@ -1,34 +0,0 @@ -package cn.iocoder.yudao.module.wechatMp.convert.account; - -import java.util.*; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; - -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; -import cn.iocoder.yudao.module.wechatMp.controller.admin.account.vo.*; -import cn.iocoder.yudao.module.wechatMp.dal.dataobject.account.WxAccountDO; - -/** - * 公众号账户 Convert - * - * @author 芋道源码 - */ -@Mapper -public interface WxAccountConvert { - - WxAccountConvert INSTANCE = Mappers.getMapper(WxAccountConvert.class); - - WxAccountDO convert(WxAccountCreateReqVO bean); - - WxAccountDO convert(WxAccountUpdateReqVO bean); - - WxAccountRespVO convert(WxAccountDO bean); - - List convertList(List list); - - PageResult convertPage(PageResult page); - - List convertList02(List list); - -} diff --git a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/convert/accountfans/WxAccountFansConvert.java b/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/convert/accountfans/WxAccountFansConvert.java deleted file mode 100644 index 8c75574..0000000 --- a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/convert/accountfans/WxAccountFansConvert.java +++ /dev/null @@ -1,34 +0,0 @@ -package cn.iocoder.yudao.module.wechatMp.convert.accountfans; - -import java.util.*; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; - -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; -import cn.iocoder.yudao.module.wechatMp.controller.admin.accountfans.vo.*; -import cn.iocoder.yudao.module.wechatMp.dal.dataobject.accountfans.WxAccountFansDO; - -/** - * 微信公众号粉丝 Convert - * - * @author 芋道源码 - */ -@Mapper -public interface WxAccountFansConvert { - - WxAccountFansConvert INSTANCE = Mappers.getMapper(WxAccountFansConvert.class); - - WxAccountFansDO convert(WxAccountFansCreateReqVO bean); - - WxAccountFansDO convert(WxAccountFansUpdateReqVO bean); - - WxAccountFansRespVO convert(WxAccountFansDO bean); - - List convertList(List list); - - PageResult convertPage(PageResult page); - - List convertList02(List list); - -} diff --git a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/dal/dataobject/account/WxAccountDO.java b/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/dal/dataobject/account/WxAccountDO.java deleted file mode 100644 index 26ac5ca..0000000 --- a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/dal/dataobject/account/WxAccountDO.java +++ /dev/null @@ -1,71 +0,0 @@ -package cn.iocoder.yudao.module.wechatMp.dal.dataobject.account; - -import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; -import com.baomidou.mybatisplus.annotation.KeySequence; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.*; - -// TODO 亚洲:这个模块的相关类,使用 Mp 作为前缀哈 -/** - * 公众号账户 DO - * - * @author 芋道源码 - */ -@TableName("wx_account") -@KeySequence("wx_account_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class WxAccountDO extends BaseDO { - - /** - * 编号 - */ - @TableId - private Long id; - /** - * 公众号名称 - */ - private String name; - /** - * 公众号账户 - */ - private String account; - // TODO 亚洲:appId - /** - * 公众号 appid - */ - private String appid; - // TODO 亚洲:appSecret - /** - * 公众号密钥 - */ - private String appsecret; - /** - * 公众号url - */ - private String url; - /** - * 公众号token - */ - private String token; - /** - * 加密密钥 - */ - // TODO 亚洲:aesKey - private String aeskey; - /** - * 二维码图片 URL - */ - // TODO 亚洲:qrCodeUrl - private String qrUrl; - /** - * 备注 - */ - private String remark; - -} diff --git a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/dal/dataobject/accountfans/WxAccountFansDO.java b/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/dal/dataobject/accountfans/WxAccountFansDO.java deleted file mode 100644 index ecdd6d6..0000000 --- a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/dal/dataobject/accountfans/WxAccountFansDO.java +++ /dev/null @@ -1,92 +0,0 @@ -package cn.iocoder.yudao.module.wechatMp.dal.dataobject.accountfans; - -import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; -import com.baomidou.mybatisplus.annotation.KeySequence; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.*; - -import java.util.Date; - -/** - * 微信公众号粉丝 DO - * - * @author 芋道源码 - */ -// TODO @亚洲:WxUserDO -@TableName("wx_account_fans") -@KeySequence("wx_account_fans_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class WxAccountFansDO extends BaseDO { - - /** - * 编号 - */ - @TableId - private Long id; - /** - * 用户标识 - */ - private String openid; - /** - * 订阅状态,0未关注,1已关注 - */ - // TODO @亚洲:Integer 然后写个枚举哈 - private String subscribeStatus; - /** - * 订阅时间 - */ - // TODO @亚洲:增加一个取消关注的事件 - private Date subscribeTime; - /** - * 昵称 - */ - // TODO @亚洲:String - private byte[] nickname; - /** - * 性别,1男,2女,0未知 - */ - // TODO @亚洲:Integer - private String gender; - /** - * 语言 - */ - private String language; - /** - * 国家 - */ - private String country; - /** - * 省份 - */ - private String province; - /** - * 城市 - */ - private String city; - /** - * 头像地址 - */ - // TODO @亚洲:headImageUrl - private String headimgUrl; - /** - * 备注 - */ - private String remark; - - // TODO @亚洲:是不是只要存储 WxAccountDO 的 id 呀? - /** - * 微信公众号 ID - */ - private String wxAccountId; - /** - * 微信公众号 appid - */ - private String wxAccountAppid; - -} diff --git a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/dal/mysql/account/WxAccountMapper.java b/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/dal/mysql/account/WxAccountMapper.java deleted file mode 100644 index 9cf80c4..0000000 --- a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/dal/mysql/account/WxAccountMapper.java +++ /dev/null @@ -1,38 +0,0 @@ -package cn.iocoder.yudao.module.wechatMp.dal.mysql.account; - -import java.util.*; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.module.wechatMp.dal.dataobject.account.WxAccountDO; -import org.apache.ibatis.annotations.Mapper; -import cn.iocoder.yudao.module.wechatMp.controller.admin.account.vo.*; - -/** - * 公众号账户 Mapper - * - * @author 芋道源码 - */ -@Mapper -public interface WxAccountMapper extends BaseMapperX { - - default PageResult selectPage(WxAccountPageReqVO reqVO) { - return selectPage(reqVO, new LambdaQueryWrapperX() - .likeIfPresent(WxAccountDO::getName, reqVO.getName()) - .eqIfPresent(WxAccountDO::getAccount, reqVO.getAccount()) - .eqIfPresent(WxAccountDO::getAppid, reqVO.getAppid()) - .betweenIfPresent(WxAccountDO::getCreateTime, reqVO.getBeginCreateTime(), reqVO.getEndCreateTime()) - .orderByDesc(WxAccountDO::getId)); - } - - default List selectList(WxAccountExportReqVO reqVO) { - return selectList(new LambdaQueryWrapperX() - .likeIfPresent(WxAccountDO::getName, reqVO.getName()) - .eqIfPresent(WxAccountDO::getAccount, reqVO.getAccount()) - .eqIfPresent(WxAccountDO::getAppid, reqVO.getAppid()) - .betweenIfPresent(WxAccountDO::getCreateTime, reqVO.getBeginCreateTime(), reqVO.getEndCreateTime()) - .orderByDesc(WxAccountDO::getId)); - } - -} diff --git a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/dal/mysql/accountfans/WxAccountFansMapper.java b/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/dal/mysql/accountfans/WxAccountFansMapper.java deleted file mode 100644 index f62221c..0000000 --- a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/dal/mysql/accountfans/WxAccountFansMapper.java +++ /dev/null @@ -1,58 +0,0 @@ -package cn.iocoder.yudao.module.wechatMp.dal.mysql.accountfans; - -import java.util.*; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.module.wechatMp.dal.dataobject.accountfans.WxAccountFansDO; -import org.apache.ibatis.annotations.Mapper; -import cn.iocoder.yudao.module.wechatMp.controller.admin.accountfans.vo.*; - -/** - * 微信公众号粉丝 Mapper - * - * @author 芋道源码 - */ -@Mapper -public interface WxAccountFansMapper extends BaseMapperX { - - default PageResult selectPage(WxAccountFansPageReqVO reqVO) { - return selectPage(reqVO, new LambdaQueryWrapperX() - .eqIfPresent(WxAccountFansDO::getOpenid, reqVO.getOpenid()) - .eqIfPresent(WxAccountFansDO::getSubscribeStatus, reqVO.getSubscribeStatus()) - .betweenIfPresent(WxAccountFansDO::getSubscribeTime, reqVO.getBeginSubscribeTime(), reqVO.getEndSubscribeTime()) - .likeIfPresent(WxAccountFansDO::getNickname, reqVO.getNickname()) - .eqIfPresent(WxAccountFansDO::getGender, reqVO.getGender()) - .eqIfPresent(WxAccountFansDO::getLanguage, reqVO.getLanguage()) - .eqIfPresent(WxAccountFansDO::getCountry, reqVO.getCountry()) - .eqIfPresent(WxAccountFansDO::getProvince, reqVO.getProvince()) - .eqIfPresent(WxAccountFansDO::getCity, reqVO.getCity()) - .eqIfPresent(WxAccountFansDO::getHeadimgUrl, reqVO.getHeadimgUrl()) - .eqIfPresent(WxAccountFansDO::getRemark, reqVO.getRemark()) - .eqIfPresent(WxAccountFansDO::getWxAccountId, reqVO.getWxAccountId()) - .eqIfPresent(WxAccountFansDO::getWxAccountAppid, reqVO.getWxAccountAppid()) - .betweenIfPresent(WxAccountFansDO::getCreateTime, reqVO.getBeginCreateTime(), reqVO.getEndCreateTime()) - .orderByDesc(WxAccountFansDO::getId)); - } - - default List selectList(WxAccountFansExportReqVO reqVO) { - return selectList(new LambdaQueryWrapperX() - .eqIfPresent(WxAccountFansDO::getOpenid, reqVO.getOpenid()) - .eqIfPresent(WxAccountFansDO::getSubscribeStatus, reqVO.getSubscribeStatus()) - .betweenIfPresent(WxAccountFansDO::getSubscribeTime, reqVO.getBeginSubscribeTime(), reqVO.getEndSubscribeTime()) - .likeIfPresent(WxAccountFansDO::getNickname, reqVO.getNickname()) - .eqIfPresent(WxAccountFansDO::getGender, reqVO.getGender()) - .eqIfPresent(WxAccountFansDO::getLanguage, reqVO.getLanguage()) - .eqIfPresent(WxAccountFansDO::getCountry, reqVO.getCountry()) - .eqIfPresent(WxAccountFansDO::getProvince, reqVO.getProvince()) - .eqIfPresent(WxAccountFansDO::getCity, reqVO.getCity()) - .eqIfPresent(WxAccountFansDO::getHeadimgUrl, reqVO.getHeadimgUrl()) - .eqIfPresent(WxAccountFansDO::getRemark, reqVO.getRemark()) - .eqIfPresent(WxAccountFansDO::getWxAccountId, reqVO.getWxAccountId()) - .eqIfPresent(WxAccountFansDO::getWxAccountAppid, reqVO.getWxAccountAppid()) - .betweenIfPresent(WxAccountFansDO::getCreateTime, reqVO.getBeginCreateTime(), reqVO.getEndCreateTime()) - .orderByDesc(WxAccountFansDO::getId)); - } - -} diff --git a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/handler/KfSessionHandler.java b/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/handler/KfSessionHandler.java deleted file mode 100644 index dc7b022..0000000 --- a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/handler/KfSessionHandler.java +++ /dev/null @@ -1,23 +0,0 @@ -package cn.iocoder.yudao.module.wechatMp.handler; - -import me.chanjar.weixin.common.session.WxSessionManager; -import me.chanjar.weixin.mp.api.WxMpMessageHandler; -import me.chanjar.weixin.mp.api.WxMpService; -import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage; -import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage; -import org.springframework.stereotype.Component; - -import java.util.Map; - -@Component -public class KfSessionHandler implements WxMpMessageHandler { - - @Override - public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, - Map context, WxMpService wxMpService, - WxSessionManager sessionManager) { - //TODO 对会话做处理 - return null; - } - -} diff --git a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/handler/LocationHandler.java b/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/handler/LocationHandler.java deleted file mode 100644 index 57c50b0..0000000 --- a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/handler/LocationHandler.java +++ /dev/null @@ -1,44 +0,0 @@ -package cn.iocoder.yudao.module.wechatMp.handler; - -import cn.iocoder.yudao.module.wechatMp.builder.TextBuilder; -import lombok.extern.slf4j.Slf4j; -import me.chanjar.weixin.common.session.WxSessionManager; -import me.chanjar.weixin.mp.api.WxMpMessageHandler; -import me.chanjar.weixin.mp.api.WxMpService; -import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage; -import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage; -import org.springframework.stereotype.Component; - -import java.util.Map; - -import static me.chanjar.weixin.common.api.WxConsts.XmlMsgType; - -@Component -@Slf4j -public class LocationHandler implements WxMpMessageHandler { - - @Override - public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, - Map context, WxMpService wxMpService, - WxSessionManager sessionManager) { - if (wxMessage.getMsgType().equals(XmlMsgType.LOCATION)) { - //TODO 接收处理用户发送的地理位置消息 - try { - String content = "感谢反馈,您的的地理位置已收到!"; - return new TextBuilder().build(content, wxMessage, null); - } catch (Exception e) { - log.error("位置消息接收处理失败", e); - return null; - } - } - - //上报地理位置事件 - log.info("上报地理位置,纬度 : {},经度 : {},精度 : {}", - wxMessage.getLatitude(), wxMessage.getLongitude(), String.valueOf(wxMessage.getPrecision())); - - //TODO 可以将用户地理位置信息保存到本地数据库,以便以后使用 - - return null; - } - -} diff --git a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/handler/LogHandler.java b/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/handler/LogHandler.java deleted file mode 100644 index f199d0b..0000000 --- a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/handler/LogHandler.java +++ /dev/null @@ -1,25 +0,0 @@ -package cn.iocoder.yudao.module.wechatMp.handler; - -import cn.iocoder.yudao.framework.common.util.json.JsonUtils; -import lombok.extern.slf4j.Slf4j; -import me.chanjar.weixin.common.session.WxSessionManager; -import me.chanjar.weixin.mp.api.WxMpMessageHandler; -import me.chanjar.weixin.mp.api.WxMpService; -import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage; -import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage; -import org.springframework.stereotype.Component; - -import java.util.Map; - -@Component -@Slf4j -public class LogHandler implements WxMpMessageHandler { - @Override - public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, - Map context, WxMpService wxMpService, - WxSessionManager sessionManager) { - log.info("接收到请求消息,内容:{}", JsonUtils.toJsonString(wxMessage)); - return null; - } - -} diff --git a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/handler/MenuHandler.java b/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/handler/MenuHandler.java deleted file mode 100644 index 5ba320a..0000000 --- a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/handler/MenuHandler.java +++ /dev/null @@ -1,32 +0,0 @@ -package cn.iocoder.yudao.module.wechatMp.handler; - -import me.chanjar.weixin.common.session.WxSessionManager; -import me.chanjar.weixin.mp.api.WxMpMessageHandler; -import me.chanjar.weixin.mp.api.WxMpService; -import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage; -import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage; -import org.springframework.stereotype.Component; - -import java.util.Map; - -import static me.chanjar.weixin.common.api.WxConsts.MenuButtonType; - -@Component -public class MenuHandler implements WxMpMessageHandler { - - @Override - public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, - Map context, WxMpService weixinService, - WxSessionManager sessionManager) { - - String msg = wxMessage.getEventKey(); - if (MenuButtonType.VIEW.equals(wxMessage.getEvent())) { - return null; - } - - return WxMpXmlOutMessage.TEXT().content(msg) - .fromUser(wxMessage.getToUser()).toUser(wxMessage.getFromUser()) - .build(); - } - -} diff --git a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/handler/MsgHandler.java b/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/handler/MsgHandler.java deleted file mode 100644 index fed4aba..0000000 --- a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/handler/MsgHandler.java +++ /dev/null @@ -1,184 +0,0 @@ -package cn.iocoder.yudao.module.wechatMp.handler; - -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.io.FileUtil; -import cn.hutool.http.HtmlUtil; -import cn.hutool.http.HttpUtil; -import cn.hutool.json.JSONUtil; -import cn.iocoder.yudao.framework.common.util.json.JsonUtils; -import cn.iocoder.yudao.module.wechatMp.builder.TextBuilder; -import cn.iocoder.yudao.module.wechatMp.dal.dataobject.account.WxAccountDO; -import cn.iocoder.yudao.module.wechatMp.service.account.WxAccountService; -import lombok.extern.slf4j.Slf4j; -import me.chanjar.weixin.common.error.WxErrorException; -import me.chanjar.weixin.common.session.WxSessionManager; -import me.chanjar.weixin.mp.api.WxMpMessageHandler; -import me.chanjar.weixin.mp.api.WxMpService; -import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage; -import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage; -import me.chanjar.weixin.mp.bean.result.WxMpUser; -import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Component; - -import java.io.File; -import java.io.UnsupportedEncodingException; -import java.util.Map; - -import static me.chanjar.weixin.common.api.WxConsts.XmlMsgType; - -@Component -@Slf4j -public class MsgHandler implements WxMpMessageHandler { - -/* - @Autowired - WxReceiveTextService wxReceiveTextService; - - @Autowired - WxTextTemplateService wxTextTemplateService; - - @Autowired - WxAccountService wxAccountService; - - @Autowired - WxFansMsgService wxFansMsgService; -*/ - - - @Override - public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, - Map context, WxMpService weixinService, - WxSessionManager sessionManager) { - /* log.info( "收到信息内容:{}", JsonUtils.toJsonString(wxMessage) ); - log.info( "关键字:{}", wxMessage.getContent() ); - - if (!wxMessage.getMsgType().equals(XmlMsgType.EVENT)) { - //可以选择将消息保存到本地 - - // 获取微信用户基本信息 - try { - WxMpUser wxmpUser = weixinService.getUserService() - .userInfo(wxMessage.getFromUser(), null); - if (wxmpUser != null) { - WxAccountDO wxAccount = wxAccountService.findBy( WxAccountDO::getAccount,wxMessage.getToUser()); - if(wxAccount != null){ - - if(wxMessage.getMsgType().equals( XmlMsgType.TEXT )){ - WxFansMsg wxFansMsg = new WxFansMsg(); - wxFansMsg.setOpenid( wxmpUser.getOpenId() ); - try { - wxFansMsg.setNickname(wxmpUser.getNickname().getBytes("UTF-8")); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } - wxFansMsg.setHeadimgUrl( wxmpUser.getHeadImgUrl() ); - wxFansMsg.setWxAccountId( String.valueOf( wxAccount.getId() ) ); - wxFansMsg.setMsgType( wxMessage.getMsgType()); - wxFansMsg.setContent( wxMessage.getContent() ); - wxFansMsg.setIsRes( "1" ); - wxFansMsg.setCreateTime( DateUtil.date() ); - wxFansMsg.setUpdateTime( DateUtil.date() ); - - //组装回复消息 - String content = processContent(wxMessage); - content = HtmlUtil.escape( content ); - wxFansMsg.setResContent( content ); - - wxFansMsgService.save( wxFansMsg ); - return new TextBuilder().build(content, wxMessage, weixinService); - - } - if(wxMessage.getMsgType().equals( XmlMsgType.IMAGE )){ - WxFansMsg wxFansMsg = new WxFansMsg(); - wxFansMsg.setOpenid( wxmpUser.getOpenId() ); - try { - wxFansMsg.setNickname(wxmpUser.getNickname().getBytes("UTF-8")); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } - wxFansMsg.setHeadimgUrl( wxmpUser.getHeadImgUrl() ); - wxFansMsg.setWxAccountId( String.valueOf( wxAccount.getId() ) ); - wxFansMsg.setMsgType( wxMessage.getMsgType()); - wxFansMsg.setMediaId( wxMessage.getMediaId() ); - wxFansMsg.setPicUrl( wxMessage.getPicUrl() ); - - File downloadDir = new File(downloadDirStr); - if (!downloadDir.exists()) { - downloadDir.mkdirs(); - } - String filepath = downloadDirStr + String.valueOf( System.currentTimeMillis() ) + ".png"; - //微信pic url下载到本地,防止失效 - long size = HttpUtil.downloadFile(wxMessage.getPicUrl(), FileUtil.file(filepath)); - log.info("download pic size : {}",size); - wxFansMsg.setPicPath( filepath ); - wxFansMsg.setIsRes( "0" ); - wxFansMsg.setCreateTime( DateUtil.date() ); - wxFansMsg.setUpdateTime( DateUtil.date() ); - wxFansMsgService.save( wxFansMsg ); - } - - } - } - } catch (WxErrorException e) { - if (e.getError().getErrorCode() == 48001) { - log.info("该公众号没有获取用户信息权限!"); - } - } - - } - - //当用户输入关键词如“你好”,“客服”等,并且有客服在线时,把消息转发给在线客服 -// try { -// if (StringUtils.startsWithAny(wxMessage.getContent(), "你好", "客服") -// && weixinService.getKefuService().kfOnlineList() -// .getKfOnlineList().size() > 0) { -// return WxMpXmlOutMessage.TRANSFER_CUSTOMER_SERVICE() -// .fromUser(wxMessage.getToUser()) -// .toUser(wxMessage.getFromUser()).build(); -// } -// } catch (WxErrorException e) { -// e.printStackTrace(); -// } - - //组装默认回复消息 - String content = defaultResponseContent;//默认 - return new TextBuilder().build(content, wxMessage, weixinService); - */ - return null; - } - - //处理回复信息,优先级,关键字、智能机器人、默认值 - String processContent(WxMpXmlMessage wxMessage){ - String content = ""; - /* content = processReceiveTextContent(wxMessage); - if(StringUtils.isNotBlank( content )){ - return content; - } - - content = defaultResponseContent;*/ - return content; - } - - //处理关键字 - String processReceiveTextContent(WxMpXmlMessage wxMessage){ - String content = ""; - /* WxAccountDO wxAccount = wxAccountService.findBy( WxAccountDO::getAccount,wxMessage.getToUser()); - if(wxAccount != null){ - WxReceiveText wxReceiveTextTpl = new WxReceiveText(); - wxReceiveTextTpl.setWxAccountId( String.valueOf( wxAccount.getId() ) ); - wxReceiveTextTpl.setReceiveText( wxMessage.getContent() ); - List wxReceiveTextList = wxReceiveTextService.findListByReceiveTest( wxReceiveTextTpl ); - if(wxReceiveTextList != null && wxReceiveTextList.size() > 0){ - WxReceiveText wxReceiveText = wxReceiveTextList.get( 0 ); - WxTextTemplate wxTextTemplate = wxTextTemplateService.findById( Integer.parseInt( wxReceiveText.getTplId() ) ); - content = wxTextTemplate.getContent(); - } - }*/ - return content; - } - - - -} diff --git a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/handler/NullHandler.java b/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/handler/NullHandler.java deleted file mode 100644 index 94003e0..0000000 --- a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/handler/NullHandler.java +++ /dev/null @@ -1,22 +0,0 @@ -package cn.iocoder.yudao.module.wechatMp.handler; - -import me.chanjar.weixin.common.session.WxSessionManager; -import me.chanjar.weixin.mp.api.WxMpMessageHandler; -import me.chanjar.weixin.mp.api.WxMpService; -import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage; -import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage; -import org.springframework.stereotype.Component; - -import java.util.Map; - -@Component -public class NullHandler implements WxMpMessageHandler { - - @Override - public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, - Map context, WxMpService wxMpService, - WxSessionManager sessionManager) { - return null; - } - -} diff --git a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/handler/ScanHandler.java b/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/handler/ScanHandler.java deleted file mode 100644 index b841984..0000000 --- a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/handler/ScanHandler.java +++ /dev/null @@ -1,22 +0,0 @@ -package cn.iocoder.yudao.module.wechatMp.handler; - -import me.chanjar.weixin.common.error.WxErrorException; -import me.chanjar.weixin.common.session.WxSessionManager; -import me.chanjar.weixin.mp.api.WxMpMessageHandler; -import me.chanjar.weixin.mp.api.WxMpService; -import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage; -import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage; -import org.springframework.stereotype.Component; - -import java.util.Map; - -@Component -public class ScanHandler implements WxMpMessageHandler { - - @Override - public WxMpXmlOutMessage handle(WxMpXmlMessage wxMpXmlMessage, Map map, - WxMpService wxMpService, WxSessionManager wxSessionManager) throws WxErrorException { - // 扫码事件处理 - return null; - } -} diff --git a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/handler/StoreCheckNotifyHandler.java b/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/handler/StoreCheckNotifyHandler.java deleted file mode 100644 index 7e7a409..0000000 --- a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/handler/StoreCheckNotifyHandler.java +++ /dev/null @@ -1,27 +0,0 @@ -package cn.iocoder.yudao.module.wechatMp.handler; - -import me.chanjar.weixin.common.session.WxSessionManager; -import me.chanjar.weixin.mp.api.WxMpMessageHandler; -import me.chanjar.weixin.mp.api.WxMpService; -import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage; -import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage; -import org.springframework.stereotype.Component; - -import java.util.Map; - -/** - * 门店审核事件处理 - * - */ -@Component -public class StoreCheckNotifyHandler implements WxMpMessageHandler { - - @Override - public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, - Map context, WxMpService wxMpService, - WxSessionManager sessionManager) { - // TODO 处理门店审核事件 - return null; - } - -} diff --git a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/handler/SubscribeHandler.java b/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/handler/SubscribeHandler.java deleted file mode 100644 index 1ce10d0..0000000 --- a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/handler/SubscribeHandler.java +++ /dev/null @@ -1,164 +0,0 @@ -package cn.iocoder.yudao.module.wechatMp.handler; - -import cn.hutool.core.date.DateUtil; -import cn.iocoder.yudao.framework.common.util.json.JsonUtils; -import cn.iocoder.yudao.module.wechatMp.builder.TextBuilder; -import cn.iocoder.yudao.module.wechatMp.controller.admin.accountfans.vo.WxAccountFansCreateReqVO; -import cn.iocoder.yudao.module.wechatMp.controller.admin.accountfans.vo.WxAccountFansUpdateReqVO; -import cn.iocoder.yudao.module.wechatMp.dal.dataobject.account.WxAccountDO; -import cn.iocoder.yudao.module.wechatMp.dal.dataobject.accountfans.WxAccountFansDO; -import cn.iocoder.yudao.module.wechatMp.service.account.WxAccountService; -import cn.iocoder.yudao.module.wechatMp.service.accountfans.WxAccountFansService; -import lombok.extern.slf4j.Slf4j; -import me.chanjar.weixin.common.error.WxErrorException; -import me.chanjar.weixin.common.session.WxSessionManager; -import me.chanjar.weixin.mp.api.WxMpMessageHandler; -import me.chanjar.weixin.mp.api.WxMpService; -import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage; -import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage; -import me.chanjar.weixin.mp.bean.result.WxMpUser; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import java.io.UnsupportedEncodingException; -import java.util.Map; - -@Component -@Slf4j -public class SubscribeHandler implements WxMpMessageHandler { - - /* @Autowired - private WxTextTemplateService wxTextTemplateService; - - @Autowired - private WxAccountService wxAccountService; - - @Autowired - private WxSubscribeTextService wxSubscribeTextService; - - @Autowired - private WxAccountFansService wxAccountFansService; - - @Autowired - private WxAccountFansTagService wxAccountFansTagService;*/ - - @Override - public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, - Map context, WxMpService weixinService, - WxSessionManager sessionManager) throws WxErrorException { - - log.info("新关注用户 OPENID: " + wxMessage.getFromUser()); -/* - - // 获取微信用户基本信息 - try { - WxMpUser wxmpUser = weixinService.getUserService() - .userInfo(wxMessage.getFromUser(), null); - if (wxmpUser != null) { - // 可以添加关注用户到本地数据库 - WxAccountDO wxAccount = wxAccountService.findBy(WxAccountDO::getAccount, wxMessage.getToUser()); - if (wxAccount != null) { - WxAccountFansDO wxAccountFans = wxAccountFansService.findBy(WxAccountFansDO::getOpenid, wxmpUser.getOpenId()); - if (wxAccountFans == null) {//insert - WxAccountFansCreateReqVO wxAccountFansCreateReqVO = new WxAccountFansCreateReqVO(); - wxAccountFansCreateReqVO.setOpenid(wxmpUser.getOpenId()); - wxAccountFansCreateReqVO.setSubscribeStatus(wxmpUser.getSubscribe() ? "1" : "0"); - wxAccountFansCreateReqVO.setSubscribeTime(DateUtil.date(wxmpUser.getSubscribeTime() * 1000L)); - try { - wxAccountFansCreateReqVO.setNickname(wxmpUser.getNickname().getBytes("UTF-8")); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } - wxAccountFansCreateReqVO.setGender(String.valueOf(wxmpUser.getSex())); - wxAccountFansCreateReqVO.setLanguage(wxmpUser.getLanguage()); - wxAccountFansCreateReqVO.setCountry(wxmpUser.getCountry()); - wxAccountFansCreateReqVO.setProvince(wxmpUser.getProvince()); - wxAccountFansCreateReqVO.setCity(wxmpUser.getCity()); - wxAccountFansCreateReqVO.setHeadimgUrl(wxmpUser.getHeadImgUrl()); - wxAccountFansCreateReqVO.setRemark(wxmpUser.getRemark()); - wxAccountFansCreateReqVO.setWxAccountId(String.valueOf(wxAccount.getId())); - wxAccountFansCreateReqVO.setWxAccountAppid(wxAccount.getAppid()); - wxAccountFansService.createWxAccountFans(wxAccountFansCreateReqVO); - - //process tags - wxAccountFansTagService.processFansTags(wxAccount, wxmpUser); - - } else {//update - WxAccountFansUpdateReqVO wxAccountFansUpdateReqVO = new WxAccountFansUpdateReqVO(); - wxAccountFansUpdateReqVO.setId(wxAccountFans.getId()); - wxAccountFansUpdateReqVO.setOpenid(wxmpUser.getOpenId()); - wxAccountFansUpdateReqVO.setSubscribeStatus(wxmpUser.getSubscribe() ? "1" : "0"); - wxAccountFansUpdateReqVO.setSubscribeTime(DateUtil.date(wxmpUser.getSubscribeTime() * 1000L)); - try { - wxAccountFans.setNickname(wxmpUser.getNickname().getBytes("UTF-8")); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } - wxAccountFansUpdateReqVO.setGender(String.valueOf(wxmpUser.getSex())); - wxAccountFansUpdateReqVO.setLanguage(wxmpUser.getLanguage()); - wxAccountFansUpdateReqVO.setCountry(wxmpUser.getCountry()); - wxAccountFansUpdateReqVO.setProvince(wxmpUser.getProvince()); - wxAccountFansUpdateReqVO.setCity(wxmpUser.getCity()); - wxAccountFansUpdateReqVO.setHeadimgUrl(wxmpUser.getHeadImgUrl()); - wxAccountFansUpdateReqVO.setRemark(wxmpUser.getRemark()); - wxAccountFansUpdateReqVO.setWxAccountId(String.valueOf(wxAccount.getId())); - wxAccountFansUpdateReqVO.setWxAccountAppid(wxAccount.getAppid()); - wxAccountFansService.updateWxAccountFans(wxAccountFansUpdateReqVO); - - //process tags - wxAccountFansTagService.processFansTags(wxAccount, wxmpUser); - - } - } - - } - } catch (WxErrorException e) { - if (e.getError().getErrorCode() == 48001) { - log.info("该公众号没有获取用户信息权限!"); - } - } - - - WxMpXmlOutMessage responseResult = null; - try { - responseResult = this.handleSpecial(wxMessage); - } catch (Exception e) { - log.error(e.getMessage(), e); - } - - if (responseResult != null) { - return responseResult; - } - - try { - String content = "感谢关注!";//默认 - WxAccountDO wxAccount = wxAccountService.findBy(WxAccountDO::getAccount, wxMessage.getToUser()); - if (wxAccount != null) { - WxSubscribeText wxSubscribeText = wxSubscribeTextService.findBy("wxAccountId", String.valueOf(wxAccount.getId())); - if (wxSubscribeText != null) { - WxTextTemplate wxTextTemplate = wxTextTemplateService.findById(Integer.parseInt(wxSubscribeText.getTplId())); - if (wxTextTemplate != null) { - content = wxTextTemplate.getContent(); - } - } - } - log.info("wxMessage : {}", JsonUtils.toJsonString(wxMessage)); - return new TextBuilder().build(content, wxMessage, weixinService); - } catch (Exception e) { - log.error(e.getMessage(), e); - } -*/ - - return null; - } - - /** - * 处理特殊请求,比如如果是扫码进来的,可以做相应处理 - */ - private WxMpXmlOutMessage handleSpecial(WxMpXmlMessage wxMessage) - throws Exception { - //TODO - return null; - } - -} diff --git a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/handler/UnsubscribeHandler.java b/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/handler/UnsubscribeHandler.java deleted file mode 100644 index 17340e7..0000000 --- a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/handler/UnsubscribeHandler.java +++ /dev/null @@ -1,54 +0,0 @@ -package cn.iocoder.yudao.module.wechatMp.handler; - -import cn.hutool.core.date.DateUtil; -import cn.iocoder.yudao.module.wechatMp.controller.admin.accountfans.vo.WxAccountFansUpdateReqVO; -import cn.iocoder.yudao.module.wechatMp.dal.dataobject.account.WxAccountDO; -import cn.iocoder.yudao.module.wechatMp.dal.dataobject.accountfans.WxAccountFansDO; -import cn.iocoder.yudao.module.wechatMp.service.account.WxAccountService; -import cn.iocoder.yudao.module.wechatMp.service.accountfans.WxAccountFansService; -import lombok.extern.slf4j.Slf4j; -import me.chanjar.weixin.common.session.WxSessionManager; -import me.chanjar.weixin.mp.api.WxMpMessageHandler; -import me.chanjar.weixin.mp.api.WxMpService; -import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage; -import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage; -import org.springframework.beans.BeanUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import java.util.Map; - -@Component -@Slf4j -public class UnsubscribeHandler implements WxMpMessageHandler { - - @Autowired - private WxAccountService wxAccountService; - - @Autowired - private WxAccountFansService wxAccountFansService; - - @Override - public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, - Map context, WxMpService wxMpService, - WxSessionManager sessionManager) { - String openId = wxMessage.getFromUser(); - log.info("取消关注用户 OPENID: " + openId); - // TODO 可以更新本地数据库为取消关注状态 - - WxAccountDO wxAccountDO = wxAccountService.findBy(WxAccountDO::getAccount, wxMessage.getToUser()); - if (wxAccountDO != null) { - WxAccountFansDO wxAccountFansDO = wxAccountFansService.findBy(WxAccountFansDO::getOpenid, openId); - if (wxAccountFansDO != null) { - WxAccountFansUpdateReqVO wxAccountFansUpdateReqVO = new WxAccountFansUpdateReqVO(); - wxAccountFansUpdateReqVO.setId(wxAccountDO.getId()); - wxAccountFansDO.setSubscribeStatus("0");//取消订阅 - wxAccountFansService.updateWxAccountFans(wxAccountFansUpdateReqVO); - } - } - - - return null; - } - -} diff --git a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/mq/costomer/dict/WxConfigDataRefreshConsumer.java b/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/mq/costomer/dict/WxConfigDataRefreshConsumer.java deleted file mode 100644 index af46f22..0000000 --- a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/mq/costomer/dict/WxConfigDataRefreshConsumer.java +++ /dev/null @@ -1,29 +0,0 @@ -package cn.iocoder.yudao.module.wechatMp.mq.costomer.dict; - -import cn.iocoder.yudao.framework.mq.core.pubsub.AbstractChannelMessageListener; -import cn.iocoder.yudao.module.wechatMp.config.WxMpConfig; -import cn.iocoder.yudao.module.wechatMp.mq.message.dict.WxConfigDataRefreshMessage; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import javax.annotation.Resource; - -/** - * 针对 {@link WxConfigDataRefreshMessage} 的消费者 - * - * @author lyz - */ -@Component -@Slf4j -public class WxConfigDataRefreshConsumer extends AbstractChannelMessageListener { - - @Resource - private WxMpConfig wxMpConfig; - - @Override - public void onMessage(WxConfigDataRefreshMessage message) { - log.info("[onMessage][收到 WxConfigData 刷新消息]"); - wxMpConfig.initWxConfig(); - } - -} diff --git a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/mq/message/dict/WxConfigDataRefreshMessage.java b/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/mq/message/dict/WxConfigDataRefreshMessage.java deleted file mode 100644 index 92d2e19..0000000 --- a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/mq/message/dict/WxConfigDataRefreshMessage.java +++ /dev/null @@ -1,19 +0,0 @@ -package cn.iocoder.yudao.module.wechatMp.mq.message.dict; - -import cn.iocoder.yudao.framework.mq.core.pubsub.AbstractChannelMessage; -import lombok.Data; -import lombok.EqualsAndHashCode; - -/** - * 微信配置数据刷新 Message - */ -@Data -@EqualsAndHashCode(callSuper = true) -public class WxConfigDataRefreshMessage extends AbstractChannelMessage { - - @Override - public String getChannel() { - return "wechat-mp.wx-config-data.refresh"; - } - -} diff --git a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/mq/producer/dict/WxMpConfigDataProducer.java b/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/mq/producer/dict/WxMpConfigDataProducer.java deleted file mode 100644 index 8e51203..0000000 --- a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/mq/producer/dict/WxMpConfigDataProducer.java +++ /dev/null @@ -1,26 +0,0 @@ -package cn.iocoder.yudao.module.wechatMp.mq.producer.dict; - -import cn.iocoder.yudao.framework.mq.core.RedisMQTemplate; -import cn.iocoder.yudao.module.wechatMp.mq.message.dict.WxConfigDataRefreshMessage; -import org.springframework.stereotype.Component; - -import javax.annotation.Resource; - -/** - * 微信配置数据相关消息的 Producer - */ -@Component -public class WxMpConfigDataProducer { - - @Resource - private RedisMQTemplate redisMQTemplate; - - /** - * 发送 {@link WxConfigDataRefreshMessage} 消息 - */ - public void sendDictDataRefreshMessage() { - WxConfigDataRefreshMessage message = new WxConfigDataRefreshMessage(); - redisMQTemplate.send(message); - } - -} diff --git a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/service/account/WxAccountService.java b/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/service/account/WxAccountService.java deleted file mode 100644 index 0ab38a0..0000000 --- a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/service/account/WxAccountService.java +++ /dev/null @@ -1,80 +0,0 @@ -package cn.iocoder.yudao.module.wechatMp.service.account; - -import java.util.*; -import javax.validation.*; - -import cn.iocoder.yudao.module.wechatMp.controller.admin.account.vo.*; -import cn.iocoder.yudao.module.wechatMp.dal.dataobject.account.WxAccountDO; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import com.baomidou.mybatisplus.core.toolkit.support.SFunction; - -/** - * 公众号账户 Service 接口 - * - * @author 芋道源码 - */ -public interface WxAccountService { - - /** - * 创建公众号账户 - * - * @param createReqVO 创建信息 - * @return 编号 - */ - Long createWxAccount(@Valid WxAccountCreateReqVO createReqVO); - - /** - * 更新公众号账户 - * - * @param updateReqVO 更新信息 - */ - void updateWxAccount(@Valid WxAccountUpdateReqVO updateReqVO); - - /** - * 删除公众号账户 - * - * @param id 编号 - */ - void deleteWxAccount(Long id); - - /** - * 获得公众号账户 - * - * @param id 编号 - * @return 公众号账户 - */ - WxAccountDO getWxAccount(Long id); - - /** - * 获得公众号账户列表 - * - * @param ids 编号 - * @return 公众号账户列表 - */ - List getWxAccountList(Collection ids); - - /** - * 获得公众号账户分页 - * - * @param pageReqVO 分页查询 - * @return 公众号账户分页 - */ - PageResult getWxAccountPage(WxAccountPageReqVO pageReqVO); - - /** - * 获得公众号账户列表, 用于 Excel 导出 - * - * @param exportReqVO 查询条件 - * @return 公众号账户列表 - */ - List getWxAccountList(WxAccountExportReqVO exportReqVO); - - /** - * 查询账户 - * - * @param field - * @param val - * @return - */ - WxAccountDO findBy(SFunction field, Object val); -} diff --git a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/service/account/WxAccountServiceImpl.java b/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/service/account/WxAccountServiceImpl.java deleted file mode 100644 index 5d9142a..0000000 --- a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/service/account/WxAccountServiceImpl.java +++ /dev/null @@ -1,97 +0,0 @@ -package cn.iocoder.yudao.module.wechatMp.service.account; - -import cn.iocoder.yudao.module.wechatMp.mq.producer.dict.WxMpConfigDataProducer; -import com.baomidou.mybatisplus.core.toolkit.support.SFunction; -import org.springframework.stereotype.Service; - -import javax.annotation.Resource; - -import org.springframework.validation.annotation.Validated; - -import java.util.*; - -import cn.iocoder.yudao.module.wechatMp.controller.admin.account.vo.*; -import cn.iocoder.yudao.module.wechatMp.dal.dataobject.account.WxAccountDO; -import cn.iocoder.yudao.framework.common.pojo.PageResult; - -import cn.iocoder.yudao.module.wechatMp.convert.account.WxAccountConvert; -import cn.iocoder.yudao.module.wechatMp.dal.mysql.account.WxAccountMapper; - -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.module.wechatMp.enums.ErrorCodeConstants.*; - -/** - * 公众号账户 Service 实现类 - * - * @author 芋道源码 - */ -@Service -@Validated -public class WxAccountServiceImpl implements WxAccountService { - - @Resource - private WxAccountMapper wxAccountMapper; - - @Resource - private WxMpConfigDataProducer wxMpConfigDataProducer; - - @Override - public Long createWxAccount(WxAccountCreateReqVO createReqVO) { - // 插入 - WxAccountDO wxAccount = WxAccountConvert.INSTANCE.convert(createReqVO); - wxAccountMapper.insert(wxAccount); - wxMpConfigDataProducer.sendDictDataRefreshMessage(); - // 返回 - return wxAccount.getId(); - } - - @Override - public void updateWxAccount(WxAccountUpdateReqVO updateReqVO) { - // 校验存在 - this.validateWxAccountExists(updateReqVO.getId()); - // 更新 - WxAccountDO updateObj = WxAccountConvert.INSTANCE.convert(updateReqVO); - wxAccountMapper.updateById(updateObj); - wxMpConfigDataProducer.sendDictDataRefreshMessage(); - } - - @Override - public void deleteWxAccount(Long id) { - // 校验存在 - this.validateWxAccountExists(id); - // 删除 - wxAccountMapper.deleteById(id); - wxMpConfigDataProducer.sendDictDataRefreshMessage(); - } - - private void validateWxAccountExists(Long id) { - if (wxAccountMapper.selectById(id) == null) { - throw exception(WX_ACCOUNT_NOT_EXISTS); - } - } - - @Override - public WxAccountDO getWxAccount(Long id) { - return wxAccountMapper.selectById(id); - } - - @Override - public List getWxAccountList(Collection ids) { - return wxAccountMapper.selectBatchIds(ids); - } - - @Override - public PageResult getWxAccountPage(WxAccountPageReqVO pageReqVO) { - return wxAccountMapper.selectPage(pageReqVO); - } - - @Override - public List getWxAccountList(WxAccountExportReqVO exportReqVO) { - return wxAccountMapper.selectList(exportReqVO); - } - - @Override - public WxAccountDO findBy(SFunction field, Object val) { - return wxAccountMapper.selectOne(field, val); - } -} diff --git a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/service/accountfans/WxAccountFansService.java b/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/service/accountfans/WxAccountFansService.java deleted file mode 100644 index 1daf08c..0000000 --- a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/service/accountfans/WxAccountFansService.java +++ /dev/null @@ -1,81 +0,0 @@ -package cn.iocoder.yudao.module.wechatMp.service.accountfans; - -import java.util.*; -import javax.validation.*; - -import cn.iocoder.yudao.module.wechatMp.controller.admin.accountfans.vo.*; -import cn.iocoder.yudao.module.wechatMp.dal.dataobject.account.WxAccountDO; -import cn.iocoder.yudao.module.wechatMp.dal.dataobject.accountfans.WxAccountFansDO; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import com.baomidou.mybatisplus.core.toolkit.support.SFunction; - -/** - * 微信公众号粉丝 Service 接口 - * - * @author 芋道源码 - */ -public interface WxAccountFansService { - - /** - * 创建微信公众号粉丝 - * - * @param createReqVO 创建信息 - * @return 编号 - */ - Long createWxAccountFans(@Valid WxAccountFansCreateReqVO createReqVO); - - /** - * 更新微信公众号粉丝 - * - * @param updateReqVO 更新信息 - */ - void updateWxAccountFans(@Valid WxAccountFansUpdateReqVO updateReqVO); - - /** - * 删除微信公众号粉丝 - * - * @param id 编号 - */ - void deleteWxAccountFans(Long id); - - /** - * 获得微信公众号粉丝 - * - * @param id 编号 - * @return 微信公众号粉丝 - */ - WxAccountFansDO getWxAccountFans(Long id); - - /** - * 获得微信公众号粉丝列表 - * - * @param ids 编号 - * @return 微信公众号粉丝列表 - */ - List getWxAccountFansList(Collection ids); - - /** - * 获得微信公众号粉丝分页 - * - * @param pageReqVO 分页查询 - * @return 微信公众号粉丝分页 - */ - PageResult getWxAccountFansPage(WxAccountFansPageReqVO pageReqVO); - - /** - * 获得微信公众号粉丝列表, 用于 Excel 导出 - * - * @param exportReqVO 查询条件 - * @return 微信公众号粉丝列表 - */ - List getWxAccountFansList(WxAccountFansExportReqVO exportReqVO); - - /** - * 查询粉丝 - * - * @param sFunction - * @param val - * @return - */ - WxAccountFansDO findBy(SFunction sFunction, Object val); -} diff --git a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/service/accountfans/WxAccountFansServiceImpl.java b/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/service/accountfans/WxAccountFansServiceImpl.java deleted file mode 100644 index 4afe730..0000000 --- a/yudao-module-wechat-mp/yudao-module-wechat-mp-biz/src/main/java/cn/iocoder/yudao/module/wechatMp/service/accountfans/WxAccountFansServiceImpl.java +++ /dev/null @@ -1,90 +0,0 @@ -package cn.iocoder.yudao.module.wechatMp.service.accountfans; - -import com.baomidou.mybatisplus.core.toolkit.support.SFunction; -import org.springframework.stereotype.Service; - -import javax.annotation.Resource; - -import org.springframework.validation.annotation.Validated; - -import java.util.*; - -import cn.iocoder.yudao.module.wechatMp.controller.admin.accountfans.vo.*; -import cn.iocoder.yudao.module.wechatMp.dal.dataobject.accountfans.WxAccountFansDO; -import cn.iocoder.yudao.framework.common.pojo.PageResult; - -import cn.iocoder.yudao.module.wechatMp.convert.accountfans.WxAccountFansConvert; -import cn.iocoder.yudao.module.wechatMp.dal.mysql.accountfans.WxAccountFansMapper; - -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.module.wechatMp.enums.ErrorCodeConstants.*; - -/** - * 微信公众号粉丝 Service 实现类 - * - * @author 芋道源码 - */ -@Service -@Validated -public class WxAccountFansServiceImpl implements WxAccountFansService { - - @Resource - private WxAccountFansMapper wxAccountFansMapper; - - @Override - public Long createWxAccountFans(WxAccountFansCreateReqVO createReqVO) { - // 插入 - WxAccountFansDO wxAccountFans = WxAccountFansConvert.INSTANCE.convert(createReqVO); - wxAccountFansMapper.insert(wxAccountFans); - // 返回 - return wxAccountFans.getId(); - } - - @Override - public void updateWxAccountFans(WxAccountFansUpdateReqVO updateReqVO) { - // 校验存在 - this.validateWxAccountFansExists(updateReqVO.getId()); - // 更新 - WxAccountFansDO updateObj = WxAccountFansConvert.INSTANCE.convert(updateReqVO); - wxAccountFansMapper.updateById(updateObj); - } - - @Override - public void deleteWxAccountFans(Long id) { - // 校验存在 - this.validateWxAccountFansExists(id); - // 删除 - wxAccountFansMapper.deleteById(id); - } - - private void validateWxAccountFansExists(Long id) { - if (wxAccountFansMapper.selectById(id) == null) { - throw exception(WX_ACCOUNT_FANS_NOT_EXISTS); - } - } - - @Override - public WxAccountFansDO getWxAccountFans(Long id) { - return wxAccountFansMapper.selectById(id); - } - - @Override - public List getWxAccountFansList(Collection ids) { - return wxAccountFansMapper.selectBatchIds(ids); - } - - @Override - public PageResult getWxAccountFansPage(WxAccountFansPageReqVO pageReqVO) { - return wxAccountFansMapper.selectPage(pageReqVO); - } - - @Override - public List getWxAccountFansList(WxAccountFansExportReqVO exportReqVO) { - return wxAccountFansMapper.selectList(exportReqVO); - } - - @Override - public WxAccountFansDO findBy(SFunction sFunction, Object val) { - return wxAccountFansMapper.selectOne(sFunction, val); - } -} diff --git a/yudao-module-wechat/yudao-module-mp-api/src/main/java/cn/iocoder/yudao/module/mp/enums/ErrorCodeConstants.java b/yudao-module-wechat/yudao-module-mp-api/src/main/java/cn/iocoder/yudao/module/mp/enums/ErrorCodeConstants.java new file mode 100644 index 0000000..2454ecf --- /dev/null +++ b/yudao-module-wechat/yudao-module-mp-api/src/main/java/cn/iocoder/yudao/module/mp/enums/ErrorCodeConstants.java @@ -0,0 +1,16 @@ +package cn.iocoder.yudao.module.mp.enums; + +import cn.iocoder.yudao.framework.common.exception.ErrorCode; + +/** + * Member 错误码枚举类 + * + * wechatMp 系统,使用 1-004-000-000 段 + */ +public interface ErrorCodeConstants { + + // ========== 用户相关 1004001000============ + ErrorCode WX_ACCOUNT_NOT_EXISTS = new ErrorCode(1004001000, "用户不存在"); + ErrorCode WX_ACCOUNT_FANS_NOT_EXISTS = new ErrorCode(1004001000, "用户不存在"); + +} diff --git a/yudao-module-wechat/yudao-module-mp-api/src/main/java/cn/iocoder/yudao/module/mp/package-info.java b/yudao-module-wechat/yudao-module-mp-api/src/main/java/cn/iocoder/yudao/module/mp/package-info.java new file mode 100644 index 0000000..5987180 --- /dev/null +++ b/yudao-module-wechat/yudao-module-mp-api/src/main/java/cn/iocoder/yudao/module/mp/package-info.java @@ -0,0 +1,8 @@ +/** + * mp 模块,我们放微信微信公众号。 + * 例如说:提供微信公众号的账号、菜单、粉丝、标签、消息、自动回复、素材、模板通知、运营数据等功能 + * + * 1. Controller URL:以 /mp/ 开头,避免和其它 Module 冲突 + * 2. DataObject 表名:以 mp_ 开头,方便在数据库中区分 + */ +package cn.iocoder.yudao.module.mp; diff --git a/yudao-module-wechat/yudao-module-mp-biz/pom.xml b/yudao-module-wechat/yudao-module-mp-biz/pom.xml index 67a6bed..ef91f50 100644 --- a/yudao-module-wechat/yudao-module-mp-biz/pom.xml +++ b/yudao-module-wechat/yudao-module-mp-biz/pom.xml @@ -79,6 +79,16 @@ + + + com.github.binarywang + weixin-java-mp + + + cn.iocoder.boot + yudao-spring-boot-starter-excel + + diff --git a/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/account/WxAccountController.java b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/account/WxAccountController.java new file mode 100644 index 0000000..af3e3fc --- /dev/null +++ b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/account/WxAccountController.java @@ -0,0 +1,100 @@ +package cn.iocoder.yudao.module.mp.admin.account; + +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; +import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; +import cn.iocoder.yudao.module.mp.admin.account.vo.*; +import cn.iocoder.yudao.module.mp.convert.account.WxAccountConvert; +import cn.iocoder.yudao.module.mp.dal.dataobject.account.WxAccountDO; +import cn.iocoder.yudao.module.mp.service.account.WxAccountService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +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 javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; +import java.io.IOException; +import java.util.Collection; +import java.util.List; + +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; +import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; + +// TODO @亚洲:/mp/account 即可 +@Api(tags = "管理后台 - 公众号账户") +@RestController +@RequestMapping("/wechatMp/wx-account") +@Validated +public class WxAccountController { + + @Resource + private WxAccountService wxAccountService; + + @PostMapping("/create") + @ApiOperation("创建公众号账户") + @PreAuthorize("@ss.hasPermission('wechatMp:wx-account:create')") + public CommonResult createWxAccount(@Valid @RequestBody WxAccountCreateReqVO createReqVO) { + return success(wxAccountService.createWxAccount(createReqVO)); + } + + @PutMapping("/update") + @ApiOperation("更新公众号账户") + @PreAuthorize("@ss.hasPermission('wechatMp:wx-account:update')") + public CommonResult updateWxAccount(@Valid @RequestBody WxAccountUpdateReqVO updateReqVO) { + wxAccountService.updateWxAccount(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @ApiOperation("删除公众号账户") + @ApiImplicitParam(name = "id", value = "编号", required = true, dataTypeClass = Long.class) + @PreAuthorize("@ss.hasPermission('wechatMp:wx-account:delete')") + public CommonResult deleteWxAccount(@RequestParam("id") Long id) { + wxAccountService.deleteWxAccount(id); + return success(true); + } + + @GetMapping("/get") + @ApiOperation("获得公众号账户") + @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class) + @PreAuthorize("@ss.hasPermission('wechatMp:wx-account:query')") + public CommonResult getWxAccount(@RequestParam("id") Long id) { + WxAccountDO wxAccount = wxAccountService.getWxAccount(id); + return success(WxAccountConvert.INSTANCE.convert(wxAccount)); + } + + @GetMapping("/list") + @ApiOperation("获得公众号账户列表") + @ApiImplicitParam(name = "ids", value = "编号列表", required = true, example = "1024,2048", dataTypeClass = List.class) + @PreAuthorize("@ss.hasPermission('wechatMp:wx-account:query')") + public CommonResult> getWxAccountList(@RequestParam("ids") Collection ids) { + List list = wxAccountService.getWxAccountList(ids); + return success(WxAccountConvert.INSTANCE.convertList(list)); + } + + @GetMapping("/page") + @ApiOperation("获得公众号账户分页") + @PreAuthorize("@ss.hasPermission('wechatMp:wx-account:query')") + public CommonResult> getWxAccountPage(@Valid WxAccountPageReqVO pageVO) { + PageResult pageResult = wxAccountService.getWxAccountPage(pageVO); + return success(WxAccountConvert.INSTANCE.convertPage(pageResult)); + } + + @GetMapping("/export-excel") + @ApiOperation("导出公众号账户 Excel") + @PreAuthorize("@ss.hasPermission('wechatMp:wx-account:export')") + @OperateLog(type = EXPORT) + public void exportWxAccountExcel(@Valid WxAccountExportReqVO exportReqVO, + HttpServletResponse response) throws IOException { + List list = wxAccountService.getWxAccountList(exportReqVO); + // 导出 Excel + List datas = WxAccountConvert.INSTANCE.convertList02(list); + ExcelUtils.write(response, "公众号账户.xls", "数据", WxAccountExcelVO.class, datas); + } + +} diff --git a/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/account/vo/WxAccountBaseVO.java b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/account/vo/WxAccountBaseVO.java new file mode 100644 index 0000000..e9ab4f4 --- /dev/null +++ b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/account/vo/WxAccountBaseVO.java @@ -0,0 +1,36 @@ +package cn.iocoder.yudao.module.mp.admin.account.vo; + +import lombok.*; +import java.util.*; +import io.swagger.annotations.*; +import javax.validation.constraints.*; + +/** +* 公众号账户 Base VO,提供给添加、修改、详细的子 VO 使用 +* 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 +*/ +@Data +public class WxAccountBaseVO { + + @ApiModelProperty(value = "公众号名称") + private String name; + + @ApiModelProperty(value = "公众号账户") + private String account; + + @ApiModelProperty(value = "公众号appid") + private String appid; + + @ApiModelProperty(value = "公众号密钥") + private String appsecret; + + @ApiModelProperty(value = "公众号token") + private String token; + + @ApiModelProperty(value = "加密密钥") + private String aeskey; + + @ApiModelProperty(value = "备注") + private String remark; + +} diff --git a/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/account/vo/WxAccountCreateReqVO.java b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/account/vo/WxAccountCreateReqVO.java new file mode 100644 index 0000000..9797c59 --- /dev/null +++ b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/account/vo/WxAccountCreateReqVO.java @@ -0,0 +1,12 @@ +package cn.iocoder.yudao.module.mp.admin.account.vo; + +import lombok.*; +import io.swagger.annotations.*; + +@ApiModel("管理后台 - 公众号账户创建 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class WxAccountCreateReqVO extends WxAccountBaseVO { + +} diff --git a/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/account/vo/WxAccountExcelVO.java b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/account/vo/WxAccountExcelVO.java new file mode 100644 index 0000000..c9df5de --- /dev/null +++ b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/account/vo/WxAccountExcelVO.java @@ -0,0 +1,50 @@ +package cn.iocoder.yudao.module.mp.admin.account.vo; + +import lombok.*; +import java.util.*; +import io.swagger.annotations.*; + +import com.alibaba.excel.annotation.ExcelProperty; + +/** + * 公众号账户 Excel VO + * + * @author 芋道源码 + */ +@Data +public class WxAccountExcelVO { + + @ExcelProperty("编号") + private Long id; + + @ExcelProperty("公众号名称") + private String name; + + @ExcelProperty("公众号账户") + private String account; + + @ExcelProperty("公众号appid") + private String appid; + + @ExcelProperty("公众号密钥") + private String appsecret; + + @ExcelProperty("公众号url") + private String url; + + @ExcelProperty("公众号token") + private String token; + + @ExcelProperty("加密密钥") + private String aeskey; + + @ExcelProperty("二维码图片URL") + private String qrUrl; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty("创建时间") + private Date createTime; + +} diff --git a/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/account/vo/WxAccountExportReqVO.java b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/account/vo/WxAccountExportReqVO.java new file mode 100644 index 0000000..dc53340 --- /dev/null +++ b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/account/vo/WxAccountExportReqVO.java @@ -0,0 +1,32 @@ +package cn.iocoder.yudao.module.mp.admin.account.vo; + +import lombok.*; +import java.util.*; +import io.swagger.annotations.*; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@ApiModel(value = "管理后台 - 公众号账户 Excel 导出 Request VO", description = "参数和 WxAccountPageReqVO 是一致的") +@Data +public class WxAccountExportReqVO { + + @ApiModelProperty(value = "公众号名称") + private String name; + + @ApiModelProperty(value = "公众号账户") + private String account; + + @ApiModelProperty(value = "公众号appid") + private String appid; + + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + @ApiModelProperty(value = "开始创建时间") + private Date beginCreateTime; + + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + @ApiModelProperty(value = "结束创建时间") + private Date endCreateTime; + +} diff --git a/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/account/vo/WxAccountPageReqVO.java b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/account/vo/WxAccountPageReqVO.java new file mode 100644 index 0000000..35f22f1 --- /dev/null +++ b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/account/vo/WxAccountPageReqVO.java @@ -0,0 +1,34 @@ +package cn.iocoder.yudao.module.mp.admin.account.vo; + +import lombok.*; +import java.util.*; +import io.swagger.annotations.*; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@ApiModel("管理后台 - 公众号账户分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class WxAccountPageReqVO extends PageParam { + + @ApiModelProperty(value = "公众号名称") + private String name; + + @ApiModelProperty(value = "公众号账户") + private String account; + + @ApiModelProperty(value = "公众号appid") + private String appid; + + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + @ApiModelProperty(value = "开始创建时间") + private Date beginCreateTime; + + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + @ApiModelProperty(value = "结束创建时间") + private Date endCreateTime; + +} diff --git a/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/account/vo/WxAccountRespVO.java b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/account/vo/WxAccountRespVO.java new file mode 100644 index 0000000..8475029 --- /dev/null +++ b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/account/vo/WxAccountRespVO.java @@ -0,0 +1,25 @@ +package cn.iocoder.yudao.module.mp.admin.account.vo; + +import lombok.*; +import java.util.*; +import io.swagger.annotations.*; + +@ApiModel("管理后台 - 公众号账户 Response VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class WxAccountRespVO extends WxAccountBaseVO { + + @ApiModelProperty(value = "编号", required = true) + private Long id; + + @ApiModelProperty(value = "公众号url") + private String url; + + @ApiModelProperty(value = "二维码图片URL") + private String qrUrl; + + @ApiModelProperty(value = "创建时间", required = true) + private Date createTime; + +} diff --git a/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/account/vo/WxAccountUpdateReqVO.java b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/account/vo/WxAccountUpdateReqVO.java new file mode 100644 index 0000000..d55c0e4 --- /dev/null +++ b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/account/vo/WxAccountUpdateReqVO.java @@ -0,0 +1,17 @@ +package cn.iocoder.yudao.module.mp.admin.account.vo; + +import lombok.*; +import io.swagger.annotations.*; +import javax.validation.constraints.*; + +@ApiModel("管理后台 - 公众号账户更新 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class WxAccountUpdateReqVO extends WxAccountBaseVO { + + @ApiModelProperty(value = "编号", required = true) + @NotNull(message = "编号不能为空") + private Long id; + +} diff --git a/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/accountfans/WxAccountFansController.java b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/accountfans/WxAccountFansController.java new file mode 100644 index 0000000..dde714e --- /dev/null +++ b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/accountfans/WxAccountFansController.java @@ -0,0 +1,99 @@ +package cn.iocoder.yudao.module.mp.admin.accountfans; + +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; +import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; +import cn.iocoder.yudao.module.mp.admin.accountfans.vo.*; +import cn.iocoder.yudao.module.mp.convert.accountfans.WxAccountFansConvert; +import cn.iocoder.yudao.module.mp.dal.dataobject.accountfans.WxAccountFansDO; +import cn.iocoder.yudao.module.mp.service.accountfans.WxAccountFansService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +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 javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; +import java.io.IOException; +import java.util.Collection; +import java.util.List; + +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; +import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; + +@Api(tags = "管理后台 - 微信公众号粉丝") +@RestController +@RequestMapping("/wechatMp/wx-account-fans") +@Validated +public class WxAccountFansController { + + @Resource + private WxAccountFansService wxAccountFansService; + + @PostMapping("/create") + @ApiOperation("创建微信公众号粉丝") + @PreAuthorize("@ss.hasPermission('wechatMp:wx-account-fans:create')") + public CommonResult createWxAccountFans(@Valid @RequestBody WxAccountFansCreateReqVO createReqVO) { + return success(wxAccountFansService.createWxAccountFans(createReqVO)); + } + + @PutMapping("/update") + @ApiOperation("更新微信公众号粉丝") + @PreAuthorize("@ss.hasPermission('wechatMp:wx-account-fans:update')") + public CommonResult updateWxAccountFans(@Valid @RequestBody WxAccountFansUpdateReqVO updateReqVO) { + wxAccountFansService.updateWxAccountFans(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @ApiOperation("删除微信公众号粉丝") + @ApiImplicitParam(name = "id", value = "编号", required = true, dataTypeClass = Long.class) + @PreAuthorize("@ss.hasPermission('wechatMp:wx-account-fans:delete')") + public CommonResult deleteWxAccountFans(@RequestParam("id") Long id) { + wxAccountFansService.deleteWxAccountFans(id); + return success(true); + } + + @GetMapping("/get") + @ApiOperation("获得微信公众号粉丝") + @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class) + @PreAuthorize("@ss.hasPermission('wechatMp:wx-account-fans:query')") + public CommonResult getWxAccountFans(@RequestParam("id") Long id) { + WxAccountFansDO wxAccountFans = wxAccountFansService.getWxAccountFans(id); + return success(WxAccountFansConvert.INSTANCE.convert(wxAccountFans)); + } + + @GetMapping("/list") + @ApiOperation("获得微信公众号粉丝列表") + @ApiImplicitParam(name = "ids", value = "编号列表", required = true, example = "1024,2048", dataTypeClass = List.class) + @PreAuthorize("@ss.hasPermission('wechatMp:wx-account-fans:query')") + public CommonResult> getWxAccountFansList(@RequestParam("ids") Collection ids) { + List list = wxAccountFansService.getWxAccountFansList(ids); + return success(WxAccountFansConvert.INSTANCE.convertList(list)); + } + + @GetMapping("/page") + @ApiOperation("获得微信公众号粉丝分页") + @PreAuthorize("@ss.hasPermission('wechatMp:wx-account-fans:query')") + public CommonResult> getWxAccountFansPage(@Valid WxAccountFansPageReqVO pageVO) { + PageResult pageResult = wxAccountFansService.getWxAccountFansPage(pageVO); + return success(WxAccountFansConvert.INSTANCE.convertPage(pageResult)); + } + + @GetMapping("/export-excel") + @ApiOperation("导出微信公众号粉丝 Excel") + @PreAuthorize("@ss.hasPermission('wechatMp:wx-account-fans:export')") + @OperateLog(type = EXPORT) + public void exportWxAccountFansExcel(@Valid WxAccountFansExportReqVO exportReqVO, + HttpServletResponse response) throws IOException { + List list = wxAccountFansService.getWxAccountFansList(exportReqVO); + // 导出 Excel + List datas = WxAccountFansConvert.INSTANCE.convertList02(list); + ExcelUtils.write(response, "微信公众号粉丝.xls", "数据", WxAccountFansExcelVO.class, datas); + } + +} diff --git a/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/accountfans/vo/WxAccountFansBaseVO.java b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/accountfans/vo/WxAccountFansBaseVO.java new file mode 100644 index 0000000..eca46e8 --- /dev/null +++ b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/accountfans/vo/WxAccountFansBaseVO.java @@ -0,0 +1,58 @@ +package cn.iocoder.yudao.module.mp.admin.accountfans.vo; + +import lombok.*; +import java.util.*; +import io.swagger.annotations.*; +import javax.validation.constraints.*; +import org.springframework.format.annotation.DateTimeFormat; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +/** +* 微信公众号粉丝 Base VO,提供给添加、修改、详细的子 VO 使用 +* 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 +*/ +@Data +public class WxAccountFansBaseVO { + + @ApiModelProperty(value = "用户标识") + private String openid; + + @ApiModelProperty(value = "订阅状态,0未关注,1已关注") + private String subscribeStatus; + + @ApiModelProperty(value = "订阅时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private Date subscribeTime; + + @ApiModelProperty(value = "昵称") + private byte[] nickname; + + @ApiModelProperty(value = "性别,1男,2女,0未知") + private String gender; + + @ApiModelProperty(value = "语言") + private String language; + + @ApiModelProperty(value = "国家") + private String country; + + @ApiModelProperty(value = "省份") + private String province; + + @ApiModelProperty(value = "城市") + private String city; + + @ApiModelProperty(value = "头像地址") + private String headimgUrl; + + @ApiModelProperty(value = "备注") + private String remark; + + @ApiModelProperty(value = "微信公众号ID") + private String wxAccountId; + + @ApiModelProperty(value = "微信公众号appid") + private String wxAccountAppid; + +} diff --git a/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/accountfans/vo/WxAccountFansCreateReqVO.java b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/accountfans/vo/WxAccountFansCreateReqVO.java new file mode 100644 index 0000000..f1f8a9f --- /dev/null +++ b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/accountfans/vo/WxAccountFansCreateReqVO.java @@ -0,0 +1,12 @@ +package cn.iocoder.yudao.module.mp.admin.accountfans.vo; + +import lombok.*; +import io.swagger.annotations.*; + +@ApiModel("管理后台 - 微信公众号粉丝创建 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class WxAccountFansCreateReqVO extends WxAccountFansBaseVO { + +} diff --git a/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/accountfans/vo/WxAccountFansExcelVO.java b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/accountfans/vo/WxAccountFansExcelVO.java new file mode 100644 index 0000000..e4561cb --- /dev/null +++ b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/accountfans/vo/WxAccountFansExcelVO.java @@ -0,0 +1,62 @@ +package cn.iocoder.yudao.module.mp.admin.accountfans.vo; + +import lombok.*; +import java.util.*; +import io.swagger.annotations.*; + +import com.alibaba.excel.annotation.ExcelProperty; + +/** + * 微信公众号粉丝 Excel VO + * + * @author 芋道源码 + */ +@Data +public class WxAccountFansExcelVO { + + @ExcelProperty("编号") + private Long id; + + @ExcelProperty("用户标识") + private String openid; + + @ExcelProperty("订阅状态,0未关注,1已关注") + private String subscribeStatus; + + @ExcelProperty("订阅时间") + private Date subscribeTime; + + @ExcelProperty("昵称") + private byte[] nickname; + + @ExcelProperty("性别,1男,2女,0未知") + private String gender; + + @ExcelProperty("语言") + private String language; + + @ExcelProperty("国家") + private String country; + + @ExcelProperty("省份") + private String province; + + @ExcelProperty("城市") + private String city; + + @ExcelProperty("头像地址") + private String headimgUrl; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty("微信公众号ID") + private String wxAccountId; + + @ExcelProperty("微信公众号appid") + private String wxAccountAppid; + + @ExcelProperty("创建时间") + private Date createTime; + +} diff --git a/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/accountfans/vo/WxAccountFansExportReqVO.java b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/accountfans/vo/WxAccountFansExportReqVO.java new file mode 100644 index 0000000..9de273f --- /dev/null +++ b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/accountfans/vo/WxAccountFansExportReqVO.java @@ -0,0 +1,67 @@ +package cn.iocoder.yudao.module.mp.admin.accountfans.vo; + +import lombok.*; +import java.util.*; +import io.swagger.annotations.*; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@ApiModel(value = "管理后台 - 微信公众号粉丝 Excel 导出 Request VO", description = "参数和 WxAccountFansPageReqVO 是一致的") +@Data +public class WxAccountFansExportReqVO { + + @ApiModelProperty(value = "用户标识") + private String openid; + + @ApiModelProperty(value = "订阅状态,0未关注,1已关注") + private String subscribeStatus; + + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + @ApiModelProperty(value = "开始订阅时间") + private Date beginSubscribeTime; + + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + @ApiModelProperty(value = "结束订阅时间") + private Date endSubscribeTime; + + @ApiModelProperty(value = "昵称") + private String nickname; + + @ApiModelProperty(value = "性别,1男,2女,0未知") + private String gender; + + @ApiModelProperty(value = "语言") + private String language; + + @ApiModelProperty(value = "国家") + private String country; + + @ApiModelProperty(value = "省份") + private String province; + + @ApiModelProperty(value = "城市") + private String city; + + @ApiModelProperty(value = "头像地址") + private String headimgUrl; + + @ApiModelProperty(value = "备注") + private String remark; + + @ApiModelProperty(value = "微信公众号ID") + private String wxAccountId; + + @ApiModelProperty(value = "微信公众号appid") + private String wxAccountAppid; + + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + @ApiModelProperty(value = "开始创建时间") + private Date beginCreateTime; + + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + @ApiModelProperty(value = "结束创建时间") + private Date endCreateTime; + +} diff --git a/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/accountfans/vo/WxAccountFansPageReqVO.java b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/accountfans/vo/WxAccountFansPageReqVO.java new file mode 100644 index 0000000..7a47127 --- /dev/null +++ b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/accountfans/vo/WxAccountFansPageReqVO.java @@ -0,0 +1,69 @@ +package cn.iocoder.yudao.module.mp.admin.accountfans.vo; + +import lombok.*; +import java.util.*; +import io.swagger.annotations.*; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@ApiModel("管理后台 - 微信公众号粉丝分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class WxAccountFansPageReqVO extends PageParam { + + @ApiModelProperty(value = "用户标识") + private String openid; + + @ApiModelProperty(value = "订阅状态,0未关注,1已关注") + private String subscribeStatus; + + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + @ApiModelProperty(value = "开始订阅时间") + private Date beginSubscribeTime; + + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + @ApiModelProperty(value = "结束订阅时间") + private Date endSubscribeTime; + + @ApiModelProperty(value = "昵称") + private String nickname; + + @ApiModelProperty(value = "性别,1男,2女,0未知") + private String gender; + + @ApiModelProperty(value = "语言") + private String language; + + @ApiModelProperty(value = "国家") + private String country; + + @ApiModelProperty(value = "省份") + private String province; + + @ApiModelProperty(value = "城市") + private String city; + + @ApiModelProperty(value = "头像地址") + private String headimgUrl; + + @ApiModelProperty(value = "备注") + private String remark; + + @ApiModelProperty(value = "微信公众号ID") + private String wxAccountId; + + @ApiModelProperty(value = "微信公众号appid") + private String wxAccountAppid; + + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + @ApiModelProperty(value = "开始创建时间") + private Date beginCreateTime; + + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + @ApiModelProperty(value = "结束创建时间") + private Date endCreateTime; + +} diff --git a/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/accountfans/vo/WxAccountFansRespVO.java b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/accountfans/vo/WxAccountFansRespVO.java new file mode 100644 index 0000000..9548dca --- /dev/null +++ b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/accountfans/vo/WxAccountFansRespVO.java @@ -0,0 +1,19 @@ +package cn.iocoder.yudao.module.mp.admin.accountfans.vo; + +import lombok.*; +import java.util.*; +import io.swagger.annotations.*; + +@ApiModel("管理后台 - 微信公众号粉丝 Response VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class WxAccountFansRespVO extends WxAccountFansBaseVO { + + @ApiModelProperty(value = "编号", required = true) + private Long id; + + @ApiModelProperty(value = "创建时间", required = true) + private Date createTime; + +} diff --git a/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/accountfans/vo/WxAccountFansUpdateReqVO.java b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/accountfans/vo/WxAccountFansUpdateReqVO.java new file mode 100644 index 0000000..e60ce47 --- /dev/null +++ b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/admin/accountfans/vo/WxAccountFansUpdateReqVO.java @@ -0,0 +1,17 @@ +package cn.iocoder.yudao.module.mp.admin.accountfans.vo; + +import lombok.*; +import io.swagger.annotations.*; +import javax.validation.constraints.*; + +@ApiModel("管理后台 - 微信公众号粉丝更新 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class WxAccountFansUpdateReqVO extends WxAccountFansBaseVO { + + @ApiModelProperty(value = "编号", required = true) + @NotNull(message = "编号不能为空") + private Long id; + +} diff --git a/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/builder/AbstractBuilder.java b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/builder/AbstractBuilder.java new file mode 100644 index 0000000..e2b0424 --- /dev/null +++ b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/builder/AbstractBuilder.java @@ -0,0 +1,15 @@ +package cn.iocoder.yudao.module.mp.builder; + +import me.chanjar.weixin.mp.api.WxMpService; +import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage; +import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +// TODO @亚洲:看看是不是可以使用 convert 来做,更符合项目 +public abstract class AbstractBuilder { + protected final Logger logger = LoggerFactory.getLogger(getClass()); + + public abstract WxMpXmlOutMessage build(String content, + WxMpXmlMessage wxMessage, WxMpService service); +} diff --git a/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/builder/ImageBuilder.java b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/builder/ImageBuilder.java new file mode 100644 index 0000000..421f461 --- /dev/null +++ b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/builder/ImageBuilder.java @@ -0,0 +1,21 @@ +package cn.iocoder.yudao.module.mp.builder; + +import me.chanjar.weixin.mp.api.WxMpService; +import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage; +import me.chanjar.weixin.mp.bean.message.WxMpXmlOutImageMessage; +import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage; + +public class ImageBuilder extends AbstractBuilder { + + @Override + public WxMpXmlOutMessage build(String content, WxMpXmlMessage wxMessage, + WxMpService service) { + + WxMpXmlOutImageMessage m = WxMpXmlOutMessage.IMAGE().mediaId(content) + .fromUser(wxMessage.getToUser()).toUser(wxMessage.getFromUser()) + .build(); + + return m; + } + +} diff --git a/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/builder/TextBuilder.java b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/builder/TextBuilder.java new file mode 100644 index 0000000..bd95199 --- /dev/null +++ b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/builder/TextBuilder.java @@ -0,0 +1,19 @@ +package cn.iocoder.yudao.module.mp.builder; + +import me.chanjar.weixin.mp.api.WxMpService; +import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage; +import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage; +import me.chanjar.weixin.mp.bean.message.WxMpXmlOutTextMessage; + +public class TextBuilder extends AbstractBuilder { + + @Override + public WxMpXmlOutMessage build(String content, WxMpXmlMessage wxMessage, + WxMpService service) { + WxMpXmlOutTextMessage m = WxMpXmlOutMessage.TEXT().content(content) + .fromUser(wxMessage.getToUser()).toUser(wxMessage.getFromUser()) + .build(); + return m; + } + +} diff --git a/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/config/WxMpConfig.java b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/config/WxMpConfig.java new file mode 100644 index 0000000..2afb91e --- /dev/null +++ b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/config/WxMpConfig.java @@ -0,0 +1,137 @@ +package cn.iocoder.yudao.module.mp.config; + + +import cn.hutool.extra.spring.SpringUtil; +import cn.iocoder.yudao.module.mp.admin.account.vo.WxAccountExportReqVO; +import cn.iocoder.yudao.module.mp.dal.dataobject.account.WxAccountDO; +import cn.iocoder.yudao.module.mp.handler.*; +import cn.iocoder.yudao.module.mp.service.account.WxAccountService; +import com.google.common.collect.Maps; +import lombok.extern.slf4j.Slf4j; +import me.chanjar.weixin.common.api.WxConsts; +import me.chanjar.weixin.mp.api.WxMpMessageRouter; +import me.chanjar.weixin.mp.api.WxMpService; +import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl; +import me.chanjar.weixin.mp.config.impl.WxMpDefaultConfigImpl; +import me.chanjar.weixin.mp.constant.WxMpEventConstants; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +// TODO @芋艿:思考有没更好的处理方式 +@Component +@Slf4j +public class WxMpConfig implements InitializingBean { + + private static Map routers = Maps.newHashMap(); + private static Map mpServices = Maps.newHashMap(); + + @Autowired + private WxAccountService wxAccountService; + + /** + * 初始化公众号配置 + */ + public synchronized void initWxConfig() { + WxAccountExportReqVO req = new WxAccountExportReqVO(); + List wxAccountList = wxAccountService.getWxAccountList(req); + if (CollectionUtils.isEmpty(wxAccountList)) { + return; + } + WxMpConfig.init(wxAccountList); + log.info("加载公众号配置成功"); + } + + public static void init(List wxAccountDOS) { + mpServices = wxAccountDOS.stream().map(wxAccountDO -> { + // TODO 亚洲:使用 WxMpInMemoryConfigStorage 的话,多节点会不会存在 accessToken 冲突 + WxMpDefaultConfigImpl configStorage = new WxMpDefaultConfigImpl(); + configStorage.setAppId(wxAccountDO.getAppid()); + configStorage.setSecret(wxAccountDO.getAppsecret()); + configStorage.setToken(wxAccountDO.getToken()); + configStorage.setAesKey(wxAccountDO.getAeskey()); + + WxMpService service = new WxMpServiceImpl(); + service.setWxMpConfigStorage(configStorage); + routers.put(wxAccountDO.getAppid(), newRouter(service)); + return service; + }).collect(Collectors.toMap(s -> s.getWxMpConfigStorage().getAppId(), a -> a, (o, n) -> o)); + } + + public static Map getRouters() { + return routers; + } + + public static Map getMpServices() { + return mpServices; + } + + private static WxMpMessageRouter newRouter(WxMpService wxMpService) { + final WxMpMessageRouter newRouter = new WxMpMessageRouter(wxMpService); + // 记录所有事件的日志 (异步执行) + newRouter.rule().handler(SpringUtil.getBean(LogHandler.class)).next(); + + // 接收客服会话管理事件 + newRouter.rule().async(false).msgType(WxConsts.XmlMsgType.EVENT) + .event(WxMpEventConstants.CustomerService.KF_CREATE_SESSION) + .handler(SpringUtil.getBean(KfSessionHandler.class)).end(); + newRouter.rule().async(false).msgType(WxConsts.XmlMsgType.EVENT) + .event(WxMpEventConstants.CustomerService.KF_CLOSE_SESSION) + .handler(SpringUtil.getBean(KfSessionHandler.class)) + .end(); + newRouter.rule().async(false).msgType(WxConsts.XmlMsgType.EVENT) + .event(WxMpEventConstants.CustomerService.KF_SWITCH_SESSION) + .handler(SpringUtil.getBean(KfSessionHandler.class)).end(); + + // 门店审核事件 + newRouter.rule().async(false).msgType(WxConsts.XmlMsgType.EVENT) + .event(WxMpEventConstants.POI_CHECK_NOTIFY) + .handler(SpringUtil.getBean(StoreCheckNotifyHandler.class)).end(); + + // 自定义菜单事件 + newRouter.rule().async(false).msgType(WxConsts.XmlMsgType.EVENT) + .event(WxConsts.MenuButtonType.CLICK).handler(SpringUtil.getBean(MenuHandler.class)).end(); + + // 点击菜单连接事件 + newRouter.rule().async(false).msgType(WxConsts.XmlMsgType.EVENT) + .event(WxConsts.MenuButtonType.VIEW).handler(SpringUtil.getBean(NullHandler.class)).end(); + + // 关注事件 + newRouter.rule().async(false).msgType(WxConsts.XmlMsgType.EVENT) + .event(WxConsts.EventType.SUBSCRIBE).handler(SpringUtil.getBean(SubscribeHandler.class)) + .end(); + + // 取消关注事件 + newRouter.rule().async(false).msgType(WxConsts.XmlMsgType.EVENT) + .event(WxConsts.EventType.UNSUBSCRIBE) + .handler(SpringUtil.getBean(UnsubscribeHandler.class)).end(); + + // 上报地理位置事件 + newRouter.rule().async(false).msgType(WxConsts.XmlMsgType.EVENT) + .event(WxConsts.EventType.LOCATION).handler(SpringUtil.getBean(LocationHandler.class)) + .end(); + + // 接收地理位置消息 + newRouter.rule().async(false).msgType(WxConsts.XmlMsgType.LOCATION) + .handler(SpringUtil.getBean(LocationHandler.class)).end(); + + // 扫码事件 + newRouter.rule().async(false).msgType(WxConsts.XmlMsgType.EVENT) + .event(WxConsts.EventType.SCAN).handler(SpringUtil.getBean(ScanHandler.class)).end(); + + // 默认 + newRouter.rule().async(false).handler(SpringUtil.getBean(MsgHandler.class)).end(); + + return newRouter; + } + + @Override + public void afterPropertiesSet() throws Exception { + initWxConfig(); + } +} diff --git a/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/convert/account/WxAccountConvert.java b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/convert/account/WxAccountConvert.java new file mode 100644 index 0000000..ce4c79a --- /dev/null +++ b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/convert/account/WxAccountConvert.java @@ -0,0 +1,36 @@ +package cn.iocoder.yudao.module.mp.convert.account; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.mp.admin.account.vo.WxAccountCreateReqVO; +import cn.iocoder.yudao.module.mp.admin.account.vo.WxAccountExcelVO; +import cn.iocoder.yudao.module.mp.admin.account.vo.WxAccountRespVO; +import cn.iocoder.yudao.module.mp.admin.account.vo.WxAccountUpdateReqVO; +import cn.iocoder.yudao.module.mp.dal.dataobject.account.WxAccountDO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +/** + * 公众号账户 Convert + * + * @author 芋道源码 + */ +@Mapper +public interface WxAccountConvert { + + WxAccountConvert INSTANCE = Mappers.getMapper(WxAccountConvert.class); + + WxAccountDO convert(WxAccountCreateReqVO bean); + + WxAccountDO convert(WxAccountUpdateReqVO bean); + + WxAccountRespVO convert(WxAccountDO bean); + + List convertList(List list); + + PageResult convertPage(PageResult page); + + List convertList02(List list); + +} diff --git a/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/convert/accountfans/WxAccountFansConvert.java b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/convert/accountfans/WxAccountFansConvert.java new file mode 100644 index 0000000..6bf9957 --- /dev/null +++ b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/convert/accountfans/WxAccountFansConvert.java @@ -0,0 +1,36 @@ +package cn.iocoder.yudao.module.mp.convert.accountfans; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.mp.admin.accountfans.vo.WxAccountFansCreateReqVO; +import cn.iocoder.yudao.module.mp.admin.accountfans.vo.WxAccountFansExcelVO; +import cn.iocoder.yudao.module.mp.admin.accountfans.vo.WxAccountFansRespVO; +import cn.iocoder.yudao.module.mp.admin.accountfans.vo.WxAccountFansUpdateReqVO; +import cn.iocoder.yudao.module.mp.dal.dataobject.accountfans.WxAccountFansDO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +/** + * 微信公众号粉丝 Convert + * + * @author 芋道源码 + */ +@Mapper +public interface WxAccountFansConvert { + + WxAccountFansConvert INSTANCE = Mappers.getMapper(WxAccountFansConvert.class); + + WxAccountFansDO convert(WxAccountFansCreateReqVO bean); + + WxAccountFansDO convert(WxAccountFansUpdateReqVO bean); + + WxAccountFansRespVO convert(WxAccountFansDO bean); + + List convertList(List list); + + PageResult convertPage(PageResult page); + + List convertList02(List list); + +} diff --git a/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/dal/dataobject/account/WxAccountDO.java b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/dal/dataobject/account/WxAccountDO.java new file mode 100644 index 0000000..6737495 --- /dev/null +++ b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/dal/dataobject/account/WxAccountDO.java @@ -0,0 +1,71 @@ +package cn.iocoder.yudao.module.mp.dal.dataobject.account; + +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.*; + +// TODO 亚洲:这个模块的相关类,使用 Mp 作为前缀哈 +/** + * 公众号账户 DO + * + * @author 芋道源码 + */ +@TableName("wx_account") +@KeySequence("wx_account_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class WxAccountDO extends BaseDO { + + /** + * 编号 + */ + @TableId + private Long id; + /** + * 公众号名称 + */ + private String name; + /** + * 公众号账户 + */ + private String account; + // TODO 亚洲:appId + /** + * 公众号 appid + */ + private String appid; + // TODO 亚洲:appSecret + /** + * 公众号密钥 + */ + private String appsecret; + /** + * 公众号url + */ + private String url; + /** + * 公众号token + */ + private String token; + /** + * 加密密钥 + */ + // TODO 亚洲:aesKey + private String aeskey; + /** + * 二维码图片 URL + */ + // TODO 亚洲:qrCodeUrl + private String qrUrl; + /** + * 备注 + */ + private String remark; + +} diff --git a/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/dal/dataobject/accountfans/WxAccountFansDO.java b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/dal/dataobject/accountfans/WxAccountFansDO.java new file mode 100644 index 0000000..3485137 --- /dev/null +++ b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/dal/dataobject/accountfans/WxAccountFansDO.java @@ -0,0 +1,92 @@ +package cn.iocoder.yudao.module.mp.dal.dataobject.accountfans; + +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.*; + +import java.util.Date; + +/** + * 微信公众号粉丝 DO + * + * @author 芋道源码 + */ +// TODO @亚洲:WxUserDO +@TableName("wx_account_fans") +@KeySequence("wx_account_fans_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class WxAccountFansDO extends BaseDO { + + /** + * 编号 + */ + @TableId + private Long id; + /** + * 用户标识 + */ + private String openid; + /** + * 订阅状态,0未关注,1已关注 + */ + // TODO @亚洲:Integer 然后写个枚举哈 + private String subscribeStatus; + /** + * 订阅时间 + */ + // TODO @亚洲:增加一个取消关注的事件 + private Date subscribeTime; + /** + * 昵称 + */ + // TODO @亚洲:String + private byte[] nickname; + /** + * 性别,1男,2女,0未知 + */ + // TODO @亚洲:Integer + private String gender; + /** + * 语言 + */ + private String language; + /** + * 国家 + */ + private String country; + /** + * 省份 + */ + private String province; + /** + * 城市 + */ + private String city; + /** + * 头像地址 + */ + // TODO @亚洲:headImageUrl + private String headimgUrl; + /** + * 备注 + */ + private String remark; + + // TODO @亚洲:是不是只要存储 WxAccountDO 的 id 呀? + /** + * 微信公众号 ID + */ + private String wxAccountId; + /** + * 微信公众号 appid + */ + private String wxAccountAppid; + +} diff --git a/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/dal/mysql/account/WxAccountMapper.java b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/dal/mysql/account/WxAccountMapper.java new file mode 100644 index 0000000..bfcaed4 --- /dev/null +++ b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/dal/mysql/account/WxAccountMapper.java @@ -0,0 +1,39 @@ +package cn.iocoder.yudao.module.mp.dal.mysql.account; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.module.mp.admin.account.vo.WxAccountExportReqVO; +import cn.iocoder.yudao.module.mp.admin.account.vo.WxAccountPageReqVO; +import cn.iocoder.yudao.module.mp.dal.dataobject.account.WxAccountDO; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +/** + * 公众号账户 Mapper + * + * @author 芋道源码 + */ +@Mapper +public interface WxAccountMapper extends BaseMapperX { + + default PageResult selectPage(WxAccountPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .likeIfPresent(WxAccountDO::getName, reqVO.getName()) + .eqIfPresent(WxAccountDO::getAccount, reqVO.getAccount()) + .eqIfPresent(WxAccountDO::getAppid, reqVO.getAppid()) + .betweenIfPresent(WxAccountDO::getCreateTime, reqVO.getBeginCreateTime(), reqVO.getEndCreateTime()) + .orderByDesc(WxAccountDO::getId)); + } + + default List selectList(WxAccountExportReqVO reqVO) { + return selectList(new LambdaQueryWrapperX() + .likeIfPresent(WxAccountDO::getName, reqVO.getName()) + .eqIfPresent(WxAccountDO::getAccount, reqVO.getAccount()) + .eqIfPresent(WxAccountDO::getAppid, reqVO.getAppid()) + .betweenIfPresent(WxAccountDO::getCreateTime, reqVO.getBeginCreateTime(), reqVO.getEndCreateTime()) + .orderByDesc(WxAccountDO::getId)); + } + +} diff --git a/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/dal/mysql/accountfans/WxAccountFansMapper.java b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/dal/mysql/accountfans/WxAccountFansMapper.java new file mode 100644 index 0000000..c79eb31 --- /dev/null +++ b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/dal/mysql/accountfans/WxAccountFansMapper.java @@ -0,0 +1,59 @@ +package cn.iocoder.yudao.module.mp.dal.mysql.accountfans; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.module.mp.admin.accountfans.vo.WxAccountFansExportReqVO; +import cn.iocoder.yudao.module.mp.admin.accountfans.vo.WxAccountFansPageReqVO; +import cn.iocoder.yudao.module.mp.dal.dataobject.accountfans.WxAccountFansDO; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +/** + * 微信公众号粉丝 Mapper + * + * @author 芋道源码 + */ +@Mapper +public interface WxAccountFansMapper extends BaseMapperX { + + default PageResult selectPage(WxAccountFansPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(WxAccountFansDO::getOpenid, reqVO.getOpenid()) + .eqIfPresent(WxAccountFansDO::getSubscribeStatus, reqVO.getSubscribeStatus()) + .betweenIfPresent(WxAccountFansDO::getSubscribeTime, reqVO.getBeginSubscribeTime(), reqVO.getEndSubscribeTime()) + .likeIfPresent(WxAccountFansDO::getNickname, reqVO.getNickname()) + .eqIfPresent(WxAccountFansDO::getGender, reqVO.getGender()) + .eqIfPresent(WxAccountFansDO::getLanguage, reqVO.getLanguage()) + .eqIfPresent(WxAccountFansDO::getCountry, reqVO.getCountry()) + .eqIfPresent(WxAccountFansDO::getProvince, reqVO.getProvince()) + .eqIfPresent(WxAccountFansDO::getCity, reqVO.getCity()) + .eqIfPresent(WxAccountFansDO::getHeadimgUrl, reqVO.getHeadimgUrl()) + .eqIfPresent(WxAccountFansDO::getRemark, reqVO.getRemark()) + .eqIfPresent(WxAccountFansDO::getWxAccountId, reqVO.getWxAccountId()) + .eqIfPresent(WxAccountFansDO::getWxAccountAppid, reqVO.getWxAccountAppid()) + .betweenIfPresent(WxAccountFansDO::getCreateTime, reqVO.getBeginCreateTime(), reqVO.getEndCreateTime()) + .orderByDesc(WxAccountFansDO::getId)); + } + + default List selectList(WxAccountFansExportReqVO reqVO) { + return selectList(new LambdaQueryWrapperX() + .eqIfPresent(WxAccountFansDO::getOpenid, reqVO.getOpenid()) + .eqIfPresent(WxAccountFansDO::getSubscribeStatus, reqVO.getSubscribeStatus()) + .betweenIfPresent(WxAccountFansDO::getSubscribeTime, reqVO.getBeginSubscribeTime(), reqVO.getEndSubscribeTime()) + .likeIfPresent(WxAccountFansDO::getNickname, reqVO.getNickname()) + .eqIfPresent(WxAccountFansDO::getGender, reqVO.getGender()) + .eqIfPresent(WxAccountFansDO::getLanguage, reqVO.getLanguage()) + .eqIfPresent(WxAccountFansDO::getCountry, reqVO.getCountry()) + .eqIfPresent(WxAccountFansDO::getProvince, reqVO.getProvince()) + .eqIfPresent(WxAccountFansDO::getCity, reqVO.getCity()) + .eqIfPresent(WxAccountFansDO::getHeadimgUrl, reqVO.getHeadimgUrl()) + .eqIfPresent(WxAccountFansDO::getRemark, reqVO.getRemark()) + .eqIfPresent(WxAccountFansDO::getWxAccountId, reqVO.getWxAccountId()) + .eqIfPresent(WxAccountFansDO::getWxAccountAppid, reqVO.getWxAccountAppid()) + .betweenIfPresent(WxAccountFansDO::getCreateTime, reqVO.getBeginCreateTime(), reqVO.getEndCreateTime()) + .orderByDesc(WxAccountFansDO::getId)); + } + +} diff --git a/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/handler/KfSessionHandler.java b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/handler/KfSessionHandler.java new file mode 100644 index 0000000..47150d4 --- /dev/null +++ b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/handler/KfSessionHandler.java @@ -0,0 +1,23 @@ +package cn.iocoder.yudao.module.mp.handler; + +import me.chanjar.weixin.common.session.WxSessionManager; +import me.chanjar.weixin.mp.api.WxMpMessageHandler; +import me.chanjar.weixin.mp.api.WxMpService; +import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage; +import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage; +import org.springframework.stereotype.Component; + +import java.util.Map; + +@Component +public class KfSessionHandler implements WxMpMessageHandler { + + @Override + public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, + Map context, WxMpService wxMpService, + WxSessionManager sessionManager) { + //TODO 对会话做处理 + return null; + } + +} diff --git a/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/handler/LocationHandler.java b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/handler/LocationHandler.java new file mode 100644 index 0000000..af5a22b --- /dev/null +++ b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/handler/LocationHandler.java @@ -0,0 +1,44 @@ +package cn.iocoder.yudao.module.mp.handler; + +import cn.iocoder.yudao.module.mp.builder.TextBuilder; +import lombok.extern.slf4j.Slf4j; +import me.chanjar.weixin.common.session.WxSessionManager; +import me.chanjar.weixin.mp.api.WxMpMessageHandler; +import me.chanjar.weixin.mp.api.WxMpService; +import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage; +import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage; +import org.springframework.stereotype.Component; + +import java.util.Map; + +import static me.chanjar.weixin.common.api.WxConsts.XmlMsgType; + +@Component +@Slf4j +public class LocationHandler implements WxMpMessageHandler { + + @Override + public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, + Map context, WxMpService wxMpService, + WxSessionManager sessionManager) { + if (wxMessage.getMsgType().equals(XmlMsgType.LOCATION)) { + //TODO 接收处理用户发送的地理位置消息 + try { + String content = "感谢反馈,您的的地理位置已收到!"; + return new TextBuilder().build(content, wxMessage, null); + } catch (Exception e) { + log.error("位置消息接收处理失败", e); + return null; + } + } + + //上报地理位置事件 + log.info("上报地理位置,纬度 : {},经度 : {},精度 : {}", + wxMessage.getLatitude(), wxMessage.getLongitude(), String.valueOf(wxMessage.getPrecision())); + + //TODO 可以将用户地理位置信息保存到本地数据库,以便以后使用 + + return null; + } + +} diff --git a/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/handler/LogHandler.java b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/handler/LogHandler.java new file mode 100644 index 0000000..58ae131 --- /dev/null +++ b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/handler/LogHandler.java @@ -0,0 +1,25 @@ +package cn.iocoder.yudao.module.mp.handler; + +import cn.iocoder.yudao.framework.common.util.json.JsonUtils; +import lombok.extern.slf4j.Slf4j; +import me.chanjar.weixin.common.session.WxSessionManager; +import me.chanjar.weixin.mp.api.WxMpMessageHandler; +import me.chanjar.weixin.mp.api.WxMpService; +import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage; +import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage; +import org.springframework.stereotype.Component; + +import java.util.Map; + +@Component +@Slf4j +public class LogHandler implements WxMpMessageHandler { + @Override + public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, + Map context, WxMpService wxMpService, + WxSessionManager sessionManager) { + log.info("接收到请求消息,内容:{}", JsonUtils.toJsonString(wxMessage)); + return null; + } + +} diff --git a/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/handler/MenuHandler.java b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/handler/MenuHandler.java new file mode 100644 index 0000000..2eacfb0 --- /dev/null +++ b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/handler/MenuHandler.java @@ -0,0 +1,32 @@ +package cn.iocoder.yudao.module.mp.handler; + +import me.chanjar.weixin.common.session.WxSessionManager; +import me.chanjar.weixin.mp.api.WxMpMessageHandler; +import me.chanjar.weixin.mp.api.WxMpService; +import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage; +import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage; +import org.springframework.stereotype.Component; + +import java.util.Map; + +import static me.chanjar.weixin.common.api.WxConsts.MenuButtonType; + +@Component +public class MenuHandler implements WxMpMessageHandler { + + @Override + public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, + Map context, WxMpService weixinService, + WxSessionManager sessionManager) { + + String msg = wxMessage.getEventKey(); + if (MenuButtonType.VIEW.equals(wxMessage.getEvent())) { + return null; + } + + return WxMpXmlOutMessage.TEXT().content(msg) + .fromUser(wxMessage.getToUser()).toUser(wxMessage.getFromUser()) + .build(); + } + +} diff --git a/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/handler/MsgHandler.java b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/handler/MsgHandler.java new file mode 100644 index 0000000..6dc84c6 --- /dev/null +++ b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/handler/MsgHandler.java @@ -0,0 +1,166 @@ +package cn.iocoder.yudao.module.mp.handler; + +import lombok.extern.slf4j.Slf4j; +import me.chanjar.weixin.common.session.WxSessionManager; +import me.chanjar.weixin.mp.api.WxMpMessageHandler; +import me.chanjar.weixin.mp.api.WxMpService; +import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage; +import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage; +import org.springframework.stereotype.Component; + +import java.util.Map; + +@Component +@Slf4j +public class MsgHandler implements WxMpMessageHandler { + +/* + @Autowired + WxReceiveTextService wxReceiveTextService; + + @Autowired + WxTextTemplateService wxTextTemplateService; + + @Autowired + WxAccountService wxAccountService; + + @Autowired + WxFansMsgService wxFansMsgService; +*/ + + + @Override + public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, + Map context, WxMpService weixinService, + WxSessionManager sessionManager) { + /* log.info( "收到信息内容:{}", JsonUtils.toJsonString(wxMessage) ); + log.info( "关键字:{}", wxMessage.getContent() ); + + if (!wxMessage.getMsgType().equals(XmlMsgType.EVENT)) { + //可以选择将消息保存到本地 + + // 获取微信用户基本信息 + try { + WxMpUser wxmpUser = weixinService.getUserService() + .userInfo(wxMessage.getFromUser(), null); + if (wxmpUser != null) { + WxAccountDO wxAccount = wxAccountService.findBy( WxAccountDO::getAccount,wxMessage.getToUser()); + if(wxAccount != null){ + + if(wxMessage.getMsgType().equals( XmlMsgType.TEXT )){ + WxFansMsg wxFansMsg = new WxFansMsg(); + wxFansMsg.setOpenid( wxmpUser.getOpenId() ); + try { + wxFansMsg.setNickname(wxmpUser.getNickname().getBytes("UTF-8")); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + wxFansMsg.setHeadimgUrl( wxmpUser.getHeadImgUrl() ); + wxFansMsg.setWxAccountId( String.valueOf( wxAccount.getId() ) ); + wxFansMsg.setMsgType( wxMessage.getMsgType()); + wxFansMsg.setContent( wxMessage.getContent() ); + wxFansMsg.setIsRes( "1" ); + wxFansMsg.setCreateTime( DateUtil.date() ); + wxFansMsg.setUpdateTime( DateUtil.date() ); + + //组装回复消息 + String content = processContent(wxMessage); + content = HtmlUtil.escape( content ); + wxFansMsg.setResContent( content ); + + wxFansMsgService.save( wxFansMsg ); + return new TextBuilder().build(content, wxMessage, weixinService); + + } + if(wxMessage.getMsgType().equals( XmlMsgType.IMAGE )){ + WxFansMsg wxFansMsg = new WxFansMsg(); + wxFansMsg.setOpenid( wxmpUser.getOpenId() ); + try { + wxFansMsg.setNickname(wxmpUser.getNickname().getBytes("UTF-8")); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + wxFansMsg.setHeadimgUrl( wxmpUser.getHeadImgUrl() ); + wxFansMsg.setWxAccountId( String.valueOf( wxAccount.getId() ) ); + wxFansMsg.setMsgType( wxMessage.getMsgType()); + wxFansMsg.setMediaId( wxMessage.getMediaId() ); + wxFansMsg.setPicUrl( wxMessage.getPicUrl() ); + + File downloadDir = new File(downloadDirStr); + if (!downloadDir.exists()) { + downloadDir.mkdirs(); + } + String filepath = downloadDirStr + String.valueOf( System.currentTimeMillis() ) + ".png"; + //微信pic url下载到本地,防止失效 + long size = HttpUtil.downloadFile(wxMessage.getPicUrl(), FileUtil.file(filepath)); + log.info("download pic size : {}",size); + wxFansMsg.setPicPath( filepath ); + wxFansMsg.setIsRes( "0" ); + wxFansMsg.setCreateTime( DateUtil.date() ); + wxFansMsg.setUpdateTime( DateUtil.date() ); + wxFansMsgService.save( wxFansMsg ); + } + + } + } + } catch (WxErrorException e) { + if (e.getError().getErrorCode() == 48001) { + log.info("该公众号没有获取用户信息权限!"); + } + } + + } + + //当用户输入关键词如“你好”,“客服”等,并且有客服在线时,把消息转发给在线客服 +// try { +// if (StringUtils.startsWithAny(wxMessage.getContent(), "你好", "客服") +// && weixinService.getKefuService().kfOnlineList() +// .getKfOnlineList().size() > 0) { +// return WxMpXmlOutMessage.TRANSFER_CUSTOMER_SERVICE() +// .fromUser(wxMessage.getToUser()) +// .toUser(wxMessage.getFromUser()).build(); +// } +// } catch (WxErrorException e) { +// e.printStackTrace(); +// } + + //组装默认回复消息 + String content = defaultResponseContent;//默认 + return new TextBuilder().build(content, wxMessage, weixinService); + */ + return null; + } + + //处理回复信息,优先级,关键字、智能机器人、默认值 + String processContent(WxMpXmlMessage wxMessage){ + String content = ""; + /* content = processReceiveTextContent(wxMessage); + if(StringUtils.isNotBlank( content )){ + return content; + } + + content = defaultResponseContent;*/ + return content; + } + + //处理关键字 + String processReceiveTextContent(WxMpXmlMessage wxMessage){ + String content = ""; + /* WxAccountDO wxAccount = wxAccountService.findBy( WxAccountDO::getAccount,wxMessage.getToUser()); + if(wxAccount != null){ + WxReceiveText wxReceiveTextTpl = new WxReceiveText(); + wxReceiveTextTpl.setWxAccountId( String.valueOf( wxAccount.getId() ) ); + wxReceiveTextTpl.setReceiveText( wxMessage.getContent() ); + List wxReceiveTextList = wxReceiveTextService.findListByReceiveTest( wxReceiveTextTpl ); + if(wxReceiveTextList != null && wxReceiveTextList.size() > 0){ + WxReceiveText wxReceiveText = wxReceiveTextList.get( 0 ); + WxTextTemplate wxTextTemplate = wxTextTemplateService.findById( Integer.parseInt( wxReceiveText.getTplId() ) ); + content = wxTextTemplate.getContent(); + } + }*/ + return content; + } + + + +} diff --git a/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/handler/NullHandler.java b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/handler/NullHandler.java new file mode 100644 index 0000000..abc9076 --- /dev/null +++ b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/handler/NullHandler.java @@ -0,0 +1,22 @@ +package cn.iocoder.yudao.module.mp.handler; + +import me.chanjar.weixin.common.session.WxSessionManager; +import me.chanjar.weixin.mp.api.WxMpMessageHandler; +import me.chanjar.weixin.mp.api.WxMpService; +import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage; +import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage; +import org.springframework.stereotype.Component; + +import java.util.Map; + +@Component +public class NullHandler implements WxMpMessageHandler { + + @Override + public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, + Map context, WxMpService wxMpService, + WxSessionManager sessionManager) { + return null; + } + +} diff --git a/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/handler/ScanHandler.java b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/handler/ScanHandler.java new file mode 100644 index 0000000..20d0c0e --- /dev/null +++ b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/handler/ScanHandler.java @@ -0,0 +1,22 @@ +package cn.iocoder.yudao.module.mp.handler; + +import me.chanjar.weixin.common.error.WxErrorException; +import me.chanjar.weixin.common.session.WxSessionManager; +import me.chanjar.weixin.mp.api.WxMpMessageHandler; +import me.chanjar.weixin.mp.api.WxMpService; +import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage; +import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage; +import org.springframework.stereotype.Component; + +import java.util.Map; + +@Component +public class ScanHandler implements WxMpMessageHandler { + + @Override + public WxMpXmlOutMessage handle(WxMpXmlMessage wxMpXmlMessage, Map map, + WxMpService wxMpService, WxSessionManager wxSessionManager) throws WxErrorException { + // 扫码事件处理 + return null; + } +} diff --git a/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/handler/StoreCheckNotifyHandler.java b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/handler/StoreCheckNotifyHandler.java new file mode 100644 index 0000000..52715c5 --- /dev/null +++ b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/handler/StoreCheckNotifyHandler.java @@ -0,0 +1,27 @@ +package cn.iocoder.yudao.module.mp.handler; + +import me.chanjar.weixin.common.session.WxSessionManager; +import me.chanjar.weixin.mp.api.WxMpMessageHandler; +import me.chanjar.weixin.mp.api.WxMpService; +import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage; +import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage; +import org.springframework.stereotype.Component; + +import java.util.Map; + +/** + * 门店审核事件处理 + * + */ +@Component +public class StoreCheckNotifyHandler implements WxMpMessageHandler { + + @Override + public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, + Map context, WxMpService wxMpService, + WxSessionManager sessionManager) { + // TODO 处理门店审核事件 + return null; + } + +} diff --git a/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/handler/SubscribeHandler.java b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/handler/SubscribeHandler.java new file mode 100644 index 0000000..6979e03 --- /dev/null +++ b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/handler/SubscribeHandler.java @@ -0,0 +1,152 @@ +package cn.iocoder.yudao.module.mp.handler; + +import lombok.extern.slf4j.Slf4j; +import me.chanjar.weixin.common.error.WxErrorException; +import me.chanjar.weixin.common.session.WxSessionManager; +import me.chanjar.weixin.mp.api.WxMpMessageHandler; +import me.chanjar.weixin.mp.api.WxMpService; +import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage; +import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage; +import org.springframework.stereotype.Component; + +import java.util.Map; + +@Component +@Slf4j +public class SubscribeHandler implements WxMpMessageHandler { + + /* @Autowired + private WxTextTemplateService wxTextTemplateService; + + @Autowired + private WxAccountService wxAccountService; + + @Autowired + private WxSubscribeTextService wxSubscribeTextService; + + @Autowired + private WxAccountFansService wxAccountFansService; + + @Autowired + private WxAccountFansTagService wxAccountFansTagService;*/ + + @Override + public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, + Map context, WxMpService weixinService, + WxSessionManager sessionManager) throws WxErrorException { + + log.info("新关注用户 OPENID: " + wxMessage.getFromUser()); +/* + + // 获取微信用户基本信息 + try { + WxMpUser wxmpUser = weixinService.getUserService() + .userInfo(wxMessage.getFromUser(), null); + if (wxmpUser != null) { + // 可以添加关注用户到本地数据库 + WxAccountDO wxAccount = wxAccountService.findBy(WxAccountDO::getAccount, wxMessage.getToUser()); + if (wxAccount != null) { + WxAccountFansDO wxAccountFans = wxAccountFansService.findBy(WxAccountFansDO::getOpenid, wxmpUser.getOpenId()); + if (wxAccountFans == null) {//insert + WxAccountFansCreateReqVO wxAccountFansCreateReqVO = new WxAccountFansCreateReqVO(); + wxAccountFansCreateReqVO.setOpenid(wxmpUser.getOpenId()); + wxAccountFansCreateReqVO.setSubscribeStatus(wxmpUser.getSubscribe() ? "1" : "0"); + wxAccountFansCreateReqVO.setSubscribeTime(DateUtil.date(wxmpUser.getSubscribeTime() * 1000L)); + try { + wxAccountFansCreateReqVO.setNickname(wxmpUser.getNickname().getBytes("UTF-8")); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + wxAccountFansCreateReqVO.setGender(String.valueOf(wxmpUser.getSex())); + wxAccountFansCreateReqVO.setLanguage(wxmpUser.getLanguage()); + wxAccountFansCreateReqVO.setCountry(wxmpUser.getCountry()); + wxAccountFansCreateReqVO.setProvince(wxmpUser.getProvince()); + wxAccountFansCreateReqVO.setCity(wxmpUser.getCity()); + wxAccountFansCreateReqVO.setHeadimgUrl(wxmpUser.getHeadImgUrl()); + wxAccountFansCreateReqVO.setRemark(wxmpUser.getRemark()); + wxAccountFansCreateReqVO.setWxAccountId(String.valueOf(wxAccount.getId())); + wxAccountFansCreateReqVO.setWxAccountAppid(wxAccount.getAppid()); + wxAccountFansService.createWxAccountFans(wxAccountFansCreateReqVO); + + //process tags + wxAccountFansTagService.processFansTags(wxAccount, wxmpUser); + + } else {//update + WxAccountFansUpdateReqVO wxAccountFansUpdateReqVO = new WxAccountFansUpdateReqVO(); + wxAccountFansUpdateReqVO.setId(wxAccountFans.getId()); + wxAccountFansUpdateReqVO.setOpenid(wxmpUser.getOpenId()); + wxAccountFansUpdateReqVO.setSubscribeStatus(wxmpUser.getSubscribe() ? "1" : "0"); + wxAccountFansUpdateReqVO.setSubscribeTime(DateUtil.date(wxmpUser.getSubscribeTime() * 1000L)); + try { + wxAccountFans.setNickname(wxmpUser.getNickname().getBytes("UTF-8")); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + wxAccountFansUpdateReqVO.setGender(String.valueOf(wxmpUser.getSex())); + wxAccountFansUpdateReqVO.setLanguage(wxmpUser.getLanguage()); + wxAccountFansUpdateReqVO.setCountry(wxmpUser.getCountry()); + wxAccountFansUpdateReqVO.setProvince(wxmpUser.getProvince()); + wxAccountFansUpdateReqVO.setCity(wxmpUser.getCity()); + wxAccountFansUpdateReqVO.setHeadimgUrl(wxmpUser.getHeadImgUrl()); + wxAccountFansUpdateReqVO.setRemark(wxmpUser.getRemark()); + wxAccountFansUpdateReqVO.setWxAccountId(String.valueOf(wxAccount.getId())); + wxAccountFansUpdateReqVO.setWxAccountAppid(wxAccount.getAppid()); + wxAccountFansService.updateWxAccountFans(wxAccountFansUpdateReqVO); + + //process tags + wxAccountFansTagService.processFansTags(wxAccount, wxmpUser); + + } + } + + } + } catch (WxErrorException e) { + if (e.getError().getErrorCode() == 48001) { + log.info("该公众号没有获取用户信息权限!"); + } + } + + + WxMpXmlOutMessage responseResult = null; + try { + responseResult = this.handleSpecial(wxMessage); + } catch (Exception e) { + log.error(e.getMessage(), e); + } + + if (responseResult != null) { + return responseResult; + } + + try { + String content = "感谢关注!";//默认 + WxAccountDO wxAccount = wxAccountService.findBy(WxAccountDO::getAccount, wxMessage.getToUser()); + if (wxAccount != null) { + WxSubscribeText wxSubscribeText = wxSubscribeTextService.findBy("wxAccountId", String.valueOf(wxAccount.getId())); + if (wxSubscribeText != null) { + WxTextTemplate wxTextTemplate = wxTextTemplateService.findById(Integer.parseInt(wxSubscribeText.getTplId())); + if (wxTextTemplate != null) { + content = wxTextTemplate.getContent(); + } + } + } + log.info("wxMessage : {}", JsonUtils.toJsonString(wxMessage)); + return new TextBuilder().build(content, wxMessage, weixinService); + } catch (Exception e) { + log.error(e.getMessage(), e); + } +*/ + + return null; + } + + /** + * 处理特殊请求,比如如果是扫码进来的,可以做相应处理 + */ + private WxMpXmlOutMessage handleSpecial(WxMpXmlMessage wxMessage) + throws Exception { + //TODO + return null; + } + +} diff --git a/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/handler/UnsubscribeHandler.java b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/handler/UnsubscribeHandler.java new file mode 100644 index 0000000..b7b3aa7 --- /dev/null +++ b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/handler/UnsubscribeHandler.java @@ -0,0 +1,52 @@ +package cn.iocoder.yudao.module.mp.handler; + +import cn.iocoder.yudao.module.mp.admin.accountfans.vo.WxAccountFansUpdateReqVO; +import cn.iocoder.yudao.module.mp.dal.dataobject.account.WxAccountDO; +import cn.iocoder.yudao.module.mp.dal.dataobject.accountfans.WxAccountFansDO; +import cn.iocoder.yudao.module.mp.service.account.WxAccountService; +import cn.iocoder.yudao.module.mp.service.accountfans.WxAccountFansService; +import lombok.extern.slf4j.Slf4j; +import me.chanjar.weixin.common.session.WxSessionManager; +import me.chanjar.weixin.mp.api.WxMpMessageHandler; +import me.chanjar.weixin.mp.api.WxMpService; +import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage; +import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.Map; + +@Component +@Slf4j +public class UnsubscribeHandler implements WxMpMessageHandler { + + @Autowired + private WxAccountService wxAccountService; + + @Autowired + private WxAccountFansService wxAccountFansService; + + @Override + public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, + Map context, WxMpService wxMpService, + WxSessionManager sessionManager) { + String openId = wxMessage.getFromUser(); + log.info("取消关注用户 OPENID: " + openId); + // TODO 可以更新本地数据库为取消关注状态 + + WxAccountDO wxAccountDO = wxAccountService.findBy(WxAccountDO::getAccount, wxMessage.getToUser()); + if (wxAccountDO != null) { + WxAccountFansDO wxAccountFansDO = wxAccountFansService.findBy(WxAccountFansDO::getOpenid, openId); + if (wxAccountFansDO != null) { + WxAccountFansUpdateReqVO wxAccountFansUpdateReqVO = new WxAccountFansUpdateReqVO(); + wxAccountFansUpdateReqVO.setId(wxAccountDO.getId()); + wxAccountFansDO.setSubscribeStatus("0");//取消订阅 + wxAccountFansService.updateWxAccountFans(wxAccountFansUpdateReqVO); + } + } + + + return null; + } + +} diff --git a/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/mq/costomer/dict/WxConfigDataRefreshConsumer.java b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/mq/costomer/dict/WxConfigDataRefreshConsumer.java new file mode 100644 index 0000000..a9355fe --- /dev/null +++ b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/mq/costomer/dict/WxConfigDataRefreshConsumer.java @@ -0,0 +1,29 @@ +package cn.iocoder.yudao.module.mp.mq.costomer.dict; + +import cn.iocoder.yudao.framework.mq.core.pubsub.AbstractChannelMessageListener; +import cn.iocoder.yudao.module.mp.config.WxMpConfig; +import cn.iocoder.yudao.module.mp.mq.message.dict.WxConfigDataRefreshMessage; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +/** + * 针对 {@link WxConfigDataRefreshMessage} 的消费者 + * + * @author lyz + */ +@Component +@Slf4j +public class WxConfigDataRefreshConsumer extends AbstractChannelMessageListener { + + @Resource + private WxMpConfig wxMpConfig; + + @Override + public void onMessage(WxConfigDataRefreshMessage message) { + log.info("[onMessage][收到 WxConfigData 刷新消息]"); + wxMpConfig.initWxConfig(); + } + +} diff --git a/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/mq/message/dict/WxConfigDataRefreshMessage.java b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/mq/message/dict/WxConfigDataRefreshMessage.java new file mode 100644 index 0000000..09eee99 --- /dev/null +++ b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/mq/message/dict/WxConfigDataRefreshMessage.java @@ -0,0 +1,19 @@ +package cn.iocoder.yudao.module.mp.mq.message.dict; + +import cn.iocoder.yudao.framework.mq.core.pubsub.AbstractChannelMessage; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 微信配置数据刷新 Message + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class WxConfigDataRefreshMessage extends AbstractChannelMessage { + + @Override + public String getChannel() { + return "wechat-mp.wx-config-data.refresh"; + } + +} diff --git a/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/mq/producer/dict/WxMpConfigDataProducer.java b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/mq/producer/dict/WxMpConfigDataProducer.java new file mode 100644 index 0000000..725cb5e --- /dev/null +++ b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/mq/producer/dict/WxMpConfigDataProducer.java @@ -0,0 +1,26 @@ +package cn.iocoder.yudao.module.mp.mq.producer.dict; + +import cn.iocoder.yudao.framework.mq.core.RedisMQTemplate; +import cn.iocoder.yudao.module.mp.mq.message.dict.WxConfigDataRefreshMessage; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +/** + * 微信配置数据相关消息的 Producer + */ +@Component +public class WxMpConfigDataProducer { + + @Resource + private RedisMQTemplate redisMQTemplate; + + /** + * 发送 {@link WxConfigDataRefreshMessage} 消息 + */ + public void sendDictDataRefreshMessage() { + WxConfigDataRefreshMessage message = new WxConfigDataRefreshMessage(); + redisMQTemplate.send(message); + } + +} diff --git a/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/service/account/WxAccountService.java b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/service/account/WxAccountService.java new file mode 100644 index 0000000..0ad1048 --- /dev/null +++ b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/service/account/WxAccountService.java @@ -0,0 +1,84 @@ +package cn.iocoder.yudao.module.mp.service.account; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.mp.admin.account.vo.WxAccountCreateReqVO; +import cn.iocoder.yudao.module.mp.admin.account.vo.WxAccountExportReqVO; +import cn.iocoder.yudao.module.mp.admin.account.vo.WxAccountPageReqVO; +import cn.iocoder.yudao.module.mp.admin.account.vo.WxAccountUpdateReqVO; +import cn.iocoder.yudao.module.mp.dal.dataobject.account.WxAccountDO; +import com.baomidou.mybatisplus.core.toolkit.support.SFunction; + +import javax.validation.Valid; +import java.util.Collection; +import java.util.List; + +/** + * 公众号账户 Service 接口 + * + * @author 芋道源码 + */ +public interface WxAccountService { + + /** + * 创建公众号账户 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createWxAccount(@Valid WxAccountCreateReqVO createReqVO); + + /** + * 更新公众号账户 + * + * @param updateReqVO 更新信息 + */ + void updateWxAccount(@Valid WxAccountUpdateReqVO updateReqVO); + + /** + * 删除公众号账户 + * + * @param id 编号 + */ + void deleteWxAccount(Long id); + + /** + * 获得公众号账户 + * + * @param id 编号 + * @return 公众号账户 + */ + WxAccountDO getWxAccount(Long id); + + /** + * 获得公众号账户列表 + * + * @param ids 编号 + * @return 公众号账户列表 + */ + List getWxAccountList(Collection ids); + + /** + * 获得公众号账户分页 + * + * @param pageReqVO 分页查询 + * @return 公众号账户分页 + */ + PageResult getWxAccountPage(WxAccountPageReqVO pageReqVO); + + /** + * 获得公众号账户列表, 用于 Excel 导出 + * + * @param exportReqVO 查询条件 + * @return 公众号账户列表 + */ + List getWxAccountList(WxAccountExportReqVO exportReqVO); + + /** + * 查询账户 + * + * @param field + * @param val + * @return + */ + WxAccountDO findBy(SFunction field, Object val); +} diff --git a/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/service/account/WxAccountServiceImpl.java b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/service/account/WxAccountServiceImpl.java new file mode 100644 index 0000000..494595a --- /dev/null +++ b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/service/account/WxAccountServiceImpl.java @@ -0,0 +1,97 @@ +package cn.iocoder.yudao.module.mp.service.account; + +import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.mp.admin.account.vo.WxAccountCreateReqVO; +import cn.iocoder.yudao.module.mp.admin.account.vo.WxAccountExportReqVO; +import cn.iocoder.yudao.module.mp.admin.account.vo.WxAccountPageReqVO; +import cn.iocoder.yudao.module.mp.admin.account.vo.WxAccountUpdateReqVO; +import cn.iocoder.yudao.module.mp.convert.account.WxAccountConvert; +import cn.iocoder.yudao.module.mp.dal.dataobject.account.WxAccountDO; +import cn.iocoder.yudao.module.mp.dal.mysql.account.WxAccountMapper; +import cn.iocoder.yudao.module.mp.enums.ErrorCodeConstants; +import cn.iocoder.yudao.module.mp.mq.producer.dict.WxMpConfigDataProducer; +import com.baomidou.mybatisplus.core.toolkit.support.SFunction; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; +import java.util.Collection; +import java.util.List; + + +/** + * 公众号账户 Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Validated +public class WxAccountServiceImpl implements WxAccountService { + + @Resource + private WxAccountMapper wxAccountMapper; + + @Resource + private WxMpConfigDataProducer wxMpConfigDataProducer; + + @Override + public Long createWxAccount(WxAccountCreateReqVO createReqVO) { + // 插入 + WxAccountDO wxAccount = WxAccountConvert.INSTANCE.convert(createReqVO); + wxAccountMapper.insert(wxAccount); + wxMpConfigDataProducer.sendDictDataRefreshMessage(); + // 返回 + return wxAccount.getId(); + } + + @Override + public void updateWxAccount(WxAccountUpdateReqVO updateReqVO) { + // 校验存在 + this.validateWxAccountExists(updateReqVO.getId()); + // 更新 + WxAccountDO updateObj = WxAccountConvert.INSTANCE.convert(updateReqVO); + wxAccountMapper.updateById(updateObj); + wxMpConfigDataProducer.sendDictDataRefreshMessage(); + } + + @Override + public void deleteWxAccount(Long id) { + // 校验存在 + this.validateWxAccountExists(id); + // 删除 + wxAccountMapper.deleteById(id); + wxMpConfigDataProducer.sendDictDataRefreshMessage(); + } + + private void validateWxAccountExists(Long id) { + if (wxAccountMapper.selectById(id) == null) { + throw ServiceExceptionUtil.exception(ErrorCodeConstants.WX_ACCOUNT_NOT_EXISTS); + } + } + + @Override + public WxAccountDO getWxAccount(Long id) { + return wxAccountMapper.selectById(id); + } + + @Override + public List getWxAccountList(Collection ids) { + return wxAccountMapper.selectBatchIds(ids); + } + + @Override + public PageResult getWxAccountPage(WxAccountPageReqVO pageReqVO) { + return wxAccountMapper.selectPage(pageReqVO); + } + + @Override + public List getWxAccountList(WxAccountExportReqVO exportReqVO) { + return wxAccountMapper.selectList(exportReqVO); + } + + @Override + public WxAccountDO findBy(SFunction field, Object val) { + return wxAccountMapper.selectOne(field, val); + } +} diff --git a/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/service/accountfans/WxAccountFansService.java b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/service/accountfans/WxAccountFansService.java new file mode 100644 index 0000000..fcd08a8 --- /dev/null +++ b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/service/accountfans/WxAccountFansService.java @@ -0,0 +1,84 @@ +package cn.iocoder.yudao.module.mp.service.accountfans; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.mp.admin.accountfans.vo.WxAccountFansCreateReqVO; +import cn.iocoder.yudao.module.mp.admin.accountfans.vo.WxAccountFansExportReqVO; +import cn.iocoder.yudao.module.mp.admin.accountfans.vo.WxAccountFansPageReqVO; +import cn.iocoder.yudao.module.mp.admin.accountfans.vo.WxAccountFansUpdateReqVO; +import cn.iocoder.yudao.module.mp.dal.dataobject.accountfans.WxAccountFansDO; +import com.baomidou.mybatisplus.core.toolkit.support.SFunction; + +import javax.validation.Valid; +import java.util.Collection; +import java.util.List; + +/** + * 微信公众号粉丝 Service 接口 + * + * @author 芋道源码 + */ +public interface WxAccountFansService { + + /** + * 创建微信公众号粉丝 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createWxAccountFans(@Valid WxAccountFansCreateReqVO createReqVO); + + /** + * 更新微信公众号粉丝 + * + * @param updateReqVO 更新信息 + */ + void updateWxAccountFans(@Valid WxAccountFansUpdateReqVO updateReqVO); + + /** + * 删除微信公众号粉丝 + * + * @param id 编号 + */ + void deleteWxAccountFans(Long id); + + /** + * 获得微信公众号粉丝 + * + * @param id 编号 + * @return 微信公众号粉丝 + */ + WxAccountFansDO getWxAccountFans(Long id); + + /** + * 获得微信公众号粉丝列表 + * + * @param ids 编号 + * @return 微信公众号粉丝列表 + */ + List getWxAccountFansList(Collection ids); + + /** + * 获得微信公众号粉丝分页 + * + * @param pageReqVO 分页查询 + * @return 微信公众号粉丝分页 + */ + PageResult getWxAccountFansPage(WxAccountFansPageReqVO pageReqVO); + + /** + * 获得微信公众号粉丝列表, 用于 Excel 导出 + * + * @param exportReqVO 查询条件 + * @return 微信公众号粉丝列表 + */ + List getWxAccountFansList(WxAccountFansExportReqVO exportReqVO); + + /** + * 查询粉丝 + * + * @param sFunction + * @param val + * @return + */ + WxAccountFansDO findBy(SFunction sFunction, Object val); +} diff --git a/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/service/accountfans/WxAccountFansServiceImpl.java b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/service/accountfans/WxAccountFansServiceImpl.java new file mode 100644 index 0000000..7fd31cf --- /dev/null +++ b/yudao-module-wechat/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/service/accountfans/WxAccountFansServiceImpl.java @@ -0,0 +1,89 @@ +package cn.iocoder.yudao.module.mp.service.accountfans; + +import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.mp.admin.accountfans.vo.WxAccountFansCreateReqVO; +import cn.iocoder.yudao.module.mp.admin.accountfans.vo.WxAccountFansExportReqVO; +import cn.iocoder.yudao.module.mp.admin.accountfans.vo.WxAccountFansPageReqVO; +import cn.iocoder.yudao.module.mp.admin.accountfans.vo.WxAccountFansUpdateReqVO; +import cn.iocoder.yudao.module.mp.convert.accountfans.WxAccountFansConvert; +import cn.iocoder.yudao.module.mp.dal.dataobject.accountfans.WxAccountFansDO; +import cn.iocoder.yudao.module.mp.dal.mysql.accountfans.WxAccountFansMapper; +import cn.iocoder.yudao.module.mp.enums.ErrorCodeConstants; +import com.baomidou.mybatisplus.core.toolkit.support.SFunction; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; +import java.util.Collection; +import java.util.List; + +/** + * 微信公众号粉丝 Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Validated +public class WxAccountFansServiceImpl implements WxAccountFansService { + + @Resource + private WxAccountFansMapper wxAccountFansMapper; + + @Override + public Long createWxAccountFans(WxAccountFansCreateReqVO createReqVO) { + // 插入 + WxAccountFansDO wxAccountFans = WxAccountFansConvert.INSTANCE.convert(createReqVO); + wxAccountFansMapper.insert(wxAccountFans); + // 返回 + return wxAccountFans.getId(); + } + + @Override + public void updateWxAccountFans(WxAccountFansUpdateReqVO updateReqVO) { + // 校验存在 + this.validateWxAccountFansExists(updateReqVO.getId()); + // 更新 + WxAccountFansDO updateObj = WxAccountFansConvert.INSTANCE.convert(updateReqVO); + wxAccountFansMapper.updateById(updateObj); + } + + @Override + public void deleteWxAccountFans(Long id) { + // 校验存在 + this.validateWxAccountFansExists(id); + // 删除 + wxAccountFansMapper.deleteById(id); + } + + private void validateWxAccountFansExists(Long id) { + if (wxAccountFansMapper.selectById(id) == null) { + throw ServiceExceptionUtil.exception(ErrorCodeConstants.WX_ACCOUNT_FANS_NOT_EXISTS); + } + } + + @Override + public WxAccountFansDO getWxAccountFans(Long id) { + return wxAccountFansMapper.selectById(id); + } + + @Override + public List getWxAccountFansList(Collection ids) { + return wxAccountFansMapper.selectBatchIds(ids); + } + + @Override + public PageResult getWxAccountFansPage(WxAccountFansPageReqVO pageReqVO) { + return wxAccountFansMapper.selectPage(pageReqVO); + } + + @Override + public List getWxAccountFansList(WxAccountFansExportReqVO exportReqVO) { + return wxAccountFansMapper.selectList(exportReqVO); + } + + @Override + public WxAccountFansDO findBy(SFunction sFunction, Object val) { + return wxAccountFansMapper.selectOne(sFunction, val); + } +} diff --git a/yudao-server/pom.xml b/yudao-server/pom.xml index be9b754..0e78464 100644 --- a/yudao-server/pom.xml +++ b/yudao-server/pom.xml @@ -63,7 +63,7 @@ cn.iocoder.boot - yudao-module-wechat-mp-biz + yudao-module-mp-biz ${revision} diff --git a/yudao-server/src/main/resources/application-local.yaml b/yudao-server/src/main/resources/application-local.yaml index beed068..0a3baaf 100644 --- a/yudao-server/src/main/resources/application-local.yaml +++ b/yudao-server/src/main/resources/application-local.yaml @@ -44,8 +44,8 @@ spring: datasource: master: name: ruoyi-vue-pro - url: jdbc:mysql://127.0.0.1:3306/${spring.datasource.dynamic.datasource.master.name}?allowMultiQueries=true&useUnicode=true&useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 -# url: jdbc:mysql://127.0.0.1:3306/${spring.datasource.dynamic.datasource.master.name}?useSSL=false&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=CTT # MySQL Connector/J 5.X 连接的示例 +# url: jdbc:mysql://127.0.0.1:3306/${spring.datasource.dynamic.datasource.master.name}?allowMultiQueries=true&useUnicode=true&useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 + url: jdbc:mysql://127.0.0.1:3306/${spring.datasource.dynamic.datasource.master.name}?useSSL=false&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai # MySQL Connector/J 5.X 连接的示例 # url: jdbc:postgresql://127.0.0.1:5432/${spring.datasource.dynamic.datasource.slave.name} # PostgreSQL 连接的示例 # url: jdbc:oracle:thin:@127.0.0.1:1521:xe # Oracle 连接的示例 # url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=${spring.datasource.dynamic.datasource.master.name} # SQLServer 连接的示例 @@ -55,8 +55,8 @@ spring: # password: JSm:g(*%lU4ZAkz06cd52KqT3)i1?H7W slave: # 模拟从库,可根据自己需要修改 name: ruoyi-vue-pro - url: jdbc:mysql://127.0.0.1:3306/${spring.datasource.dynamic.datasource.slave.name}?allowMultiQueries=true&useUnicode=true&useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 -# url: jdbc:mysql://127.0.0.1:3306/${spring.datasource.dynamic.datasource.slave.name}?useSSL=false&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=CTT # MySQL Connector/J 5.X 连接的示例 +# url: jdbc:mysql://127.0.0.1:3306/${spring.datasource.dynamic.datasource.slave.name}?allowMultiQueries=true&useUnicode=true&useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 + url: jdbc:mysql://127.0.0.1:3306/${spring.datasource.dynamic.datasource.slave.name}?useSSL=false&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai # MySQL Connector/J 5.X 连接的示例 # url: jdbc:postgresql://127.0.0.1:5432/${spring.datasource.dynamic.datasource.slave.name} # PostgreSQL 连接的示例 # url: jdbc:oracle:thin:@127.0.0.1:1521:xe # Oracle 连接的示例 # url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=${spring.datasource.dynamic.datasource.slave.name} # SQLServer 连接的示例 -- libgit2 0.21.4