diff --git a/_doc/Task.md b/_doc/Task.md index 5e085a91..a15d70a5 100644 --- a/_doc/Task.md +++ b/_doc/Task.md @@ -1,22 +1,32 @@ ## 单商户 -2.0.8: 对账完善和系统优化 +2.0.8: 转账/撤销接口和系统优化 - [x] 支持撤销接口 - [ ] 增加转账接口功能 - [ ] 细分各种支付异常类和编码(完成部分) - [ ] 增加分账修复功能 - [ ] DEMO增加获取微信OpenID和支付宝OpenId功能 +- [ ] 支付宝微信等消息通知地址支持一键生成 - [ ] 管理端界面支持扫码绑定对账接收方功能 -- [ ] 支付通道两个独立的配置进行合并为一个 -- [ ] 平台配置和接口配置删除回调地址配置, 只保留接口参数设置 -- [ ] 接口配置删除验签配置, 放到平台配置进行统一处理 +- [x] 支付通道两个独立的配置进行合并为一个 + - [X] 去除有效, icon, 颜色等字段 +- [x] 平台配置改版 + - [x] 平台配置和接口配置删除回调地址配置 + - [X] 删除回调地址配置, 更换为消息通知地址和消息通知类型 +- [X] 接口配置改版 + - [x] 删除是否验签配置和回调地址 + - [x] 去掉上下文相关类 + - [x] 回调通知固定为读取参数传递的数据 - [x] 分账字段统一为Alloc, 不包括接口名称 - [x] 支付订单拆分退款状态为单独的字段 - [x] 策略工厂修改为通用策略工厂 - [x] 支付和退款达到终态不可以再回退回之前的状态 - [x] 修复支付关闭参数名称不正确问题 -2.0.9: 消息通知改版和功能优化 +- [ ] 脚手架优化 + - [ ] 请求权限改版, 使用专用配置类 + - [X] 去除消息通知模块 +2.0.9: 消息通知改版和系统优化 - [ ] 增加类似支付宝应用通知的方式, 先支持http方式通信 -- [ ] 增加支付宝和微信通知回调地址一键生成功能 +- [ ] 优化前端各种状态颜色展示 2.1.x 版本内容 - [ ] 增加收单收银台功能 @@ -34,8 +44,6 @@ - [ ] 针对同步/对账等出现脏数据导致阻塞的问题, 进行优化 - [ ] 同步接口 - [ ] 对账接口 -- [ ] 增加通道开通能力管理,在操作发起前的校验时提前进行拦截 - **任务池** - [ ] 通道费率计算 - [ ] 每日资金流水计算 diff --git a/bootx-platform/bootx-common-starters/common-starter-dingtalk/pom.xml b/bootx-platform/bootx-common-starters/common-starter-dingtalk/pom.xml deleted file mode 100644 index c4b69d15..00000000 --- a/bootx-platform/bootx-common-starters/common-starter-dingtalk/pom.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - bootx-common-starters - cn.bootx.platform - 1.3.6.2 - - 4.0.0 - - common-starter-dingtalk - 钉钉接口 - - - - org.springframework.boot - spring-boot-starter-web - - - cn.bootx.platform - common-mybatis-plus - - - cn.bootx.platform - common-starter-data-perm - - - diff --git a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/DingTalkAutoConfiguration.java b/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/DingTalkAutoConfiguration.java deleted file mode 100644 index 48cdf45a..00000000 --- a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/DingTalkAutoConfiguration.java +++ /dev/null @@ -1,21 +0,0 @@ -package cn.bootx.platform.starter.dingtalk; - -import org.apache.ibatis.annotations.Mapper; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.autoconfigure.AutoConfiguration; -import org.springframework.boot.context.properties.ConfigurationPropertiesScan; -import org.springframework.context.annotation.ComponentScan; - -/** - * 钉钉对接 - * - * @author xxm - * @since 2022/4/2 - */ -@ComponentScan -@ConfigurationPropertiesScan -@AutoConfiguration -@MapperScan(annotationClass = Mapper.class) -public class DingTalkAutoConfiguration { - -} diff --git a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/code/DingTalkCode.java b/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/code/DingTalkCode.java deleted file mode 100644 index 85f12e81..00000000 --- a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/code/DingTalkCode.java +++ /dev/null @@ -1,123 +0,0 @@ -package cn.bootx.platform.starter.dingtalk.code; - -/** - * 钉钉消息类型 - * - * @author xxm - * @since 2020/11/30 - */ -public interface DingTalkCode { - - /** 钉钉Access参数 */ - String ACCESS_TOKEN_PARAM = "?access_token={}"; - - /** 内部应用获取access_token */ - String APP_ACCESS_TOKEN_URL = "https://oapi.dingtalk.com/gettoken?appkey={appKey}&appsecret={appSecret}"; - - /** 带sign的机器人消息发送请求 */ - String ROBOT_SEND_SIGN_URL = "https://oapi.dingtalk.com/robot/send?access_token={accessToken}×tamp={timestamp}&sign={sign}"; - - /** 不带sign的机器人消息发送请求 */ - String ROBOT_SEND_NOT_SIGN_URL = "https://oapi.dingtalk.com/robot/send" + ACCESS_TOKEN_PARAM; - - /** 发送工作通知 */ - String NOTICE_CORP_SEND_URL = "https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2" - + ACCESS_TOKEN_PARAM; - - /** 更新工作通知(OA消息) */ - String NOTICE_CORP_UPDATE_URL = "https://oapi.dingtalk.com/topapi/message/corpconversation/status_bar/update" - + ACCESS_TOKEN_PARAM; - - /** 撤回工作通知 */ - String NOTICE_CORP_RECALL_URL = "https://oapi.dingtalk.com/topapi/message/corpconversation/recall" - + ACCESS_TOKEN_PARAM; - - /** 发送企业群通知 */ - String NOTICE_CHAT_URL = "https://oapi.dingtalk.com/chat/send" + ACCESS_TOKEN_PARAM; - - /** 发送普通消息通知 */ - String NOTICE_MESSAGE_URL = "https://oapi.dingtalk.com/message/send_to_conversation" + ACCESS_TOKEN_PARAM; - - /** 根据unionid获取用户userid */ - String USER_GET_URL = "https://oapi.dingtalk.com/topapi/user/getbyunionid" + ACCESS_TOKEN_PARAM; - - /** 媒体文件上传 */ - String MEDIA_UPLOAD_URL = "https://oapi.dingtalk.com/media/upload" + ACCESS_TOKEN_PARAM; - - /** 钉钉字段 */ - String ACCESS_TOKEN = "accessToken"; - - String SIGN = "sign"; - - String TIMESTAMP = "timestamp"; - - String APP_KEY = "appKey"; - - String APP_SECRET = "appSecret"; - - /** 应用id */ - String CLIENT_ID = "clientId"; - - // 应用密钥 - String CLIENT_SECRET = "clientSecret"; - - String CODE = "code"; - - // OAuth2.0刷新令牌,从返回结果里面获取。 - String REFRESH_TOKEN = "refreshToken"; - - String GRANT_TYPE = "grantType"; - - String RESPONSE_TYPE = "responseType"; - - String SCOPE = "scope"; - - String REDIRECT_URI = "redirectUri"; - - String STATE = "state"; - - String PROMPT = "prompt"; - - /** 媒体 */ - String MEDIA = "media"; - - /** 类型 */ - String TYPE = "type"; - - /** 请求头参数调用服务端接口的授权凭证 */ - String HEADER_TOKEN = "x-acs-dingtalk-access-token"; - - /* 认证字段 */ - /** 授权码换token */ - String AUTH_AUTHORIZATION_CODE = "authorization_code"; - - /** 刷新token换用户token */ - String AUTH_REFRESH_TOKEN = "refresh_token"; - - /** openid */ - String OPEN_ID = "openid"; - - /** union_id */ - String UNION_ID = "unionid"; - - /* 响应值 */ - /** 成功 */ - int SUCCESS_CODE = 0; - - /** 未找到对应员工 */ - int NOT_FUND_STAFF = 60121; - - /* 媒体类型 */ - /** 图片 */ - String MEDIA_IMAGE = "image"; - - /** 语音 */ - String MEDIA_VOICE = "voice"; - - /** 视频 */ - String MEDIA_VIDEO = "video"; - - /** 普通文件 */ - String MEDIA_FILE = "file"; - -} diff --git a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/code/DingTalkNoticeCode.java b/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/code/DingTalkNoticeCode.java deleted file mode 100644 index 45e94266..00000000 --- a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/code/DingTalkNoticeCode.java +++ /dev/null @@ -1,36 +0,0 @@ -package cn.bootx.platform.starter.dingtalk.code; - -/** - * 钉钉通知消息常量 - * - * @author xxm - * @since 2022/4/2 - */ -public interface DingTalkNoticeCode { - - /* 消息类型 */ - /** 文本消息 */ - String MSG_TEXT = "text"; - - /** 图片消息 */ - String MSG_IMAGE = "image"; - - /** 语音消息 */ - String MSG_VOICE = "voice"; - - /** 文件消息 */ - String MSG_FILE = "file"; - - /** 链接消息 */ - String MSG_LINK = "link"; - - /** OA消息 */ - String MSG_OA = "oa"; - - /** markdown消息 */ - String MSG_MARKDOWN = "markdown"; - - /** 卡片消息 */ - String MSG_ACTION_CARD = "action_card"; - -} diff --git a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/configuration/DingTalkProperties.java b/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/configuration/DingTalkProperties.java deleted file mode 100644 index ee8f4aff..00000000 --- a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/configuration/DingTalkProperties.java +++ /dev/null @@ -1,27 +0,0 @@ -package cn.bootx.platform.starter.dingtalk.configuration; - -import lombok.Getter; -import lombok.Setter; -import org.springframework.boot.context.properties.ConfigurationProperties; - -/** - * 钉钉应用配置 - * - * @author xxm - * @since 2022/7/15 - */ -@Getter -@Setter -@ConfigurationProperties("bootx.starter.third.ding-talk") -public class DingTalkProperties { - - /** AppKey */ - private String appKey; - - /** AppSecret */ - private String appSecret; - - /** 应用id */ - private Long agentId; - -} diff --git a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/controller/DingRobotConfigController.java b/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/controller/DingRobotConfigController.java deleted file mode 100644 index 07d8806b..00000000 --- a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/controller/DingRobotConfigController.java +++ /dev/null @@ -1,78 +0,0 @@ -package cn.bootx.platform.starter.dingtalk.controller; - -import cn.bootx.platform.common.core.rest.PageResult; -import cn.bootx.platform.common.core.rest.Res; -import cn.bootx.platform.common.core.rest.ResResult; -import cn.bootx.platform.common.core.rest.param.PageParam; -import cn.bootx.platform.starter.dingtalk.core.robot.service.DingRobotConfigService; -import cn.bootx.platform.starter.dingtalk.dto.robot.DingRobotConfigDto; -import cn.bootx.platform.starter.dingtalk.param.robot.DingRobotConfigParam; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.*; - -import java.util.List; - -/** - * @author xxm - * @since 2021/9/25 - */ -@Tag(name = "钉钉机器人配置") -@RestController -@RequestMapping("/ding/robot/config") -@RequiredArgsConstructor -public class DingRobotConfigController { - - private final DingRobotConfigService dingRobotConfigService; - - @Operation(summary = "新增机器人配置") - @PostMapping("/add") - public ResResult add(@RequestBody DingRobotConfigParam param) { - return Res.ok(dingRobotConfigService.add(param)); - } - - @Operation(summary = "修改机器人配置") - @PostMapping("/update") - public ResResult update(@RequestBody DingRobotConfigParam param) { - return Res.ok(dingRobotConfigService.update(param)); - } - - @Operation(summary = "分页") - @GetMapping("/page") - public ResResult> page(PageParam pageParam, DingRobotConfigParam param) { - return Res.ok(dingRobotConfigService.page(pageParam, param)); - } - - @Operation(summary = "查询全部") - @GetMapping("/findAll") - public ResResult> findAll() { - return Res.ok(dingRobotConfigService.findAll()); - } - - @Operation(summary = "获取详情") - @GetMapping("/findById") - public ResResult findById(Long id) { - return Res.ok(dingRobotConfigService.findById(id)); - } - - @Operation(summary = "删除") - @DeleteMapping("/delete") - public ResResult delete(Long id) { - dingRobotConfigService.delete(id); - return Res.ok(); - } - - @Operation(summary = "编码是否被使用") - @GetMapping("/existsByCode") - public ResResult existsByCode(String code) { - return Res.ok(dingRobotConfigService.existsByCode(code)); - } - - @Operation(summary = "编码是否被使用(不包含自己)") - @GetMapping("/existsByCodeNotId") - public ResResult existsByCode(String code, Long id) { - return Res.ok(dingRobotConfigService.existsByCode(code, id)); - } - -} diff --git a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/base/result/AccessTokenResult.java b/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/base/result/AccessTokenResult.java deleted file mode 100644 index a0b6f2f5..00000000 --- a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/base/result/AccessTokenResult.java +++ /dev/null @@ -1,23 +0,0 @@ -package cn.bootx.platform.starter.dingtalk.core.base.result; - -import com.fasterxml.jackson.annotation.JsonProperty; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -@EqualsAndHashCode(callSuper = true) -@Data -@Accessors(chain = true) -@Schema(title = "AccessToken响应类") -public class AccessTokenResult extends DingTalkResult { - - @JsonProperty("access_token") - @Schema(description = "访问凭证") - private String accessToken; - - @JsonProperty("expires_in") - @Schema(description = "过期时间") - private Integer expiresIn; - -} diff --git a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/base/result/DingTalkResult.java b/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/base/result/DingTalkResult.java deleted file mode 100644 index ceb76aad..00000000 --- a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/base/result/DingTalkResult.java +++ /dev/null @@ -1,34 +0,0 @@ -package cn.bootx.platform.starter.dingtalk.core.base.result; - -import com.fasterxml.jackson.annotation.JsonProperty; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.experimental.Accessors; - -import java.io.Serializable; - -/** - * 钉钉响应结果 - * - * @author xxm - * @since 2020/11/30 - */ -@Data -@Accessors(chain = true) -@Schema(title = "钉钉发送响应类") -public class DingTalkResult implements Serializable { - - private static final long serialVersionUID = 4298060961428118100L; - - @JsonProperty("errcode") - @Schema(description = "错误码") - private Integer code; - - @Schema(description = "返回数据") - private T result; - - @JsonProperty("errmsg") - @Schema(description = "返回码描述") - private String msg; - -} diff --git a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/base/result/MediaResult.java b/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/base/result/MediaResult.java deleted file mode 100644 index c9cc5698..00000000 --- a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/base/result/MediaResult.java +++ /dev/null @@ -1,39 +0,0 @@ -package cn.bootx.platform.starter.dingtalk.core.base.result; - -import com.fasterxml.jackson.annotation.JsonProperty; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.experimental.Accessors; - -/** - * 钉钉媒体上传返回类 - * - * @author xxm - * @since 2022/7/25 - */ -@Data -@Accessors(chain = true) -@Schema(title = "钉钉媒体上传返回类") -public class MediaResult { - - @JsonProperty("errcode") - @Schema(description = "错误码") - private Integer code; - - @JsonProperty("errmsg") - @Schema(description = "返回码描述") - private String msg; - - @JsonProperty("type") - @Schema(description = "媒体文件类型") - private String type; - - @JsonProperty("media_id") - @Schema(description = "唯一标识") - private String mediaId; - - @JsonProperty("created_at") - @Schema(description = "媒体文件上传时间戳") - private long createdAt; - -} diff --git a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/base/service/DingAccessService.java b/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/base/service/DingAccessService.java deleted file mode 100644 index c5d658d5..00000000 --- a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/base/service/DingAccessService.java +++ /dev/null @@ -1,97 +0,0 @@ -package cn.bootx.platform.starter.dingtalk.core.base.service; - -import cn.bootx.platform.starter.dingtalk.configuration.DingTalkProperties; -import cn.bootx.platform.common.core.exception.BizException; -import cn.bootx.platform.common.jackson.util.JacksonUtil; -import cn.bootx.platform.common.spring.exception.RetryableException; -import cn.bootx.platform.starter.dingtalk.core.base.result.AccessTokenResult; -import cn.hutool.core.util.StrUtil; -import cn.hutool.extra.spring.SpringUtil; -import cn.hutool.http.HttpException; -import cn.hutool.http.HttpUtil; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.retry.annotation.Retryable; -import org.springframework.stereotype.Service; - -import java.util.HashMap; -import java.util.Map; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.locks.Lock; -import java.util.concurrent.locks.ReentrantLock; - -import static cn.bootx.platform.starter.dingtalk.code.DingTalkCode.*; - -/** - * 钉钉访问凭证 - * - * @author xxm - * @since 2022/4/2 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class DingAccessService { - - private final DingTalkProperties dingTalkProperties; - - private long expiresTime; - - private String accessToken; - - /** - * 企业内部应用的access_token - */ - public String getAccessToken() { - if (System.currentTimeMillis() < expiresTime) { - return accessToken; - } - Lock lock = new ReentrantLock(); - boolean locked = false; - try { - do { - locked = lock.tryLock(100, TimeUnit.MILLISECONDS); - if (System.currentTimeMillis() < expiresTime) { - return accessToken; - } - } - while (!locked); - SpringUtil.getBean(getClass()) - .getAppAccessToken(dingTalkProperties.getAppKey(), dingTalkProperties.getAppSecret()); - } - catch (InterruptedException e) { - throw new BizException("获取钉钉应用AccessToken失败"); - } - finally { - if (locked) { - lock.unlock(); - } - } - return accessToken; - } - - /** - * 企业内部应用的access_token - */ - @Retryable(value = RetryableException.class) - public void getAppAccessToken(String appKey, String appSecret) { - // 获取accessToken - Map map = new HashMap<>(); - map.put(APP_KEY, appKey); - map.put(APP_SECRET, appSecret); - try { - String responseBody = HttpUtil.createGet(StrUtil.format(APP_ACCESS_TOKEN_URL, map)).execute().body(); - AccessTokenResult dingTalkResult = JacksonUtil.toBean(responseBody, AccessTokenResult.class); - if (StrUtil.isBlank(dingTalkResult.getAccessToken())) { - throw new RetryableException(); - } - this.accessToken = dingTalkResult.getAccessToken(); - // 设置超时时间 - this.expiresTime = System.currentTimeMillis() + (dingTalkResult.getExpiresIn() - 200) * 1000L; - } - catch (HttpException e) { - throw new RetryableException(); - } - } - -} diff --git a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/media/dao/DingMediaMd5Manager.java b/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/media/dao/DingMediaMd5Manager.java deleted file mode 100644 index 1ba98a15..00000000 --- a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/media/dao/DingMediaMd5Manager.java +++ /dev/null @@ -1,29 +0,0 @@ -package cn.bootx.platform.starter.dingtalk.core.media.dao; - -import cn.bootx.platform.starter.dingtalk.core.media.entity.DingMediaMd5; -import cn.bootx.platform.common.mybatisplus.impl.BaseManager; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Repository; - -import java.util.Optional; - -/** - * 钉钉 - * - * @author xxm - * @since 2022/7/26 - */ -@Slf4j -@Repository -@RequiredArgsConstructor -public class DingMediaMd5Manager extends BaseManager { - - /** - * 根据md5查询 - */ - public Optional findByMd5(String md5) { - return findByField(DingMediaMd5::getMd5, md5); - } - -} diff --git a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/media/dao/DingMediaMd5Mapper.java b/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/media/dao/DingMediaMd5Mapper.java deleted file mode 100644 index 6d9ae7c6..00000000 --- a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/media/dao/DingMediaMd5Mapper.java +++ /dev/null @@ -1,14 +0,0 @@ -package cn.bootx.platform.starter.dingtalk.core.media.dao; - -import cn.bootx.platform.starter.dingtalk.core.media.entity.DingMediaMd5; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.apache.ibatis.annotations.Mapper; - -/** - * @author xxm - * @since 2022/7/26 - */ -@Mapper -public interface DingMediaMd5Mapper extends BaseMapper { - -} diff --git a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/media/entity/DingMediaMd5.java b/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/media/entity/DingMediaMd5.java deleted file mode 100644 index 6b9800f4..00000000 --- a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/media/entity/DingMediaMd5.java +++ /dev/null @@ -1,31 +0,0 @@ -package cn.bootx.platform.starter.dingtalk.core.media.entity; - -import cn.bootx.platform.common.mybatisplus.base.MpCreateEntity; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.RequiredArgsConstructor; -import lombok.experimental.Accessors; - -/** - * 钉钉媒体文件MD5值关联关系 - * - * @author xxm - * @since 2022/7/26 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@Accessors(chain = true) -@AllArgsConstructor -@RequiredArgsConstructor -@TableName("starter_ding_media_md5") -public class DingMediaMd5 extends MpCreateEntity { - - /** 媒体文件id */ - private String mediaId; - - /** 媒体文件的md5值 */ - private String md5; - -} diff --git a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/media/service/DingMediaMd5Service.java b/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/media/service/DingMediaMd5Service.java deleted file mode 100644 index cd4c27d1..00000000 --- a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/media/service/DingMediaMd5Service.java +++ /dev/null @@ -1,19 +0,0 @@ -package cn.bootx.platform.starter.dingtalk.core.media.service; - -import cn.bootx.platform.starter.dingtalk.core.media.dao.DingMediaMd5Manager; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -/** - * @author xxm - * @since 2022/7/26 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class DingMediaMd5Service { - - private final DingMediaMd5Manager dingMediaMd5Manager; - -} diff --git a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/media/service/DingMediaService.java b/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/media/service/DingMediaService.java deleted file mode 100644 index 0bd7b1dd..00000000 --- a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/media/service/DingMediaService.java +++ /dev/null @@ -1,91 +0,0 @@ -package cn.bootx.platform.starter.dingtalk.core.media.service; - -import cn.bootx.platform.common.core.exception.BizException; -import cn.bootx.platform.common.core.util.FileUtil; -import cn.bootx.platform.common.jackson.util.JacksonUtil; -import cn.bootx.platform.starter.dingtalk.code.DingTalkCode; -import cn.bootx.platform.starter.dingtalk.core.base.result.MediaResult; -import cn.bootx.platform.starter.dingtalk.core.base.service.DingAccessService; -import cn.bootx.platform.starter.dingtalk.core.media.dao.DingMediaMd5Manager; -import cn.hutool.core.io.FileTypeUtil; -import cn.hutool.core.io.IoUtil; -import cn.hutool.core.io.file.FileNameUtil; -import cn.hutool.core.util.IdUtil; -import cn.hutool.core.util.StrUtil; -import cn.hutool.http.HttpUtil; -import lombok.RequiredArgsConstructor; -import lombok.SneakyThrows; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -import java.io.ByteArrayInputStream; -import java.io.File; -import java.io.InputStream; -import java.util.Objects; - -import static cn.bootx.platform.starter.dingtalk.code.DingTalkCode.*; - -/** - * 钉钉媒体文件管理 - * - * @author xxm - * @since 2022/7/25 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class DingMediaService { - - private final DingAccessService dingAccessService; - - private final DingMediaMd5Manager dingMediaMd5Manager; - - /** - * 文件上传 - */ - @SneakyThrows - public String uploadMedia(InputStream inputStream, String fileName, String mediaType) { - // 判断md5是否是已经上传过的, 上传过的直接使用媒体id( 发现钉钉媒体id只能使用一次, 和文档描述不一致 ) - byte[] bytes = IoUtil.readBytes(inputStream); - String filePrefix = FileNameUtil.mainName(fileName); - String fileType = FileTypeUtil.getType(new ByteArrayInputStream(bytes), fileName); - File tmpFile = FileUtil.createTempFile(new ByteArrayInputStream(bytes), filePrefix, fileType); - String body = HttpUtil - .createPost(StrUtil.format(DingTalkCode.MEDIA_UPLOAD_URL, dingAccessService.getAccessToken())) - .form(MEDIA, tmpFile, fileName) - .form(TYPE, mediaType) - .execute() - .body(); - MediaResult mediaResult = JacksonUtil.toBean(body, MediaResult.class); - if (!Objects.equals(mediaResult.getCode(), SUCCESS_CODE)) { - throw new BizException(mediaResult.getMsg()); - } - String mediaId = mediaResult.getMediaId(); - // dingMediaMd5Manager.save(new DingMediaMd5(mediaId,md5)); - return mediaId; - } - - /** - * 文件上传 - */ - @SneakyThrows - public String uploadMedia(InputStream inputStream, String mediaType) { - byte[] bytes = IoUtil.readBytes(inputStream); - - String fileType = FileTypeUtil.getType(new ByteArrayInputStream(bytes)); - File tmpFile = FileUtil.createTempFile(new ByteArrayInputStream(bytes), IdUtil.getSnowflakeNextIdStr(), - fileType); - String body = HttpUtil - .createPost(StrUtil.format(DingTalkCode.MEDIA_UPLOAD_URL, dingAccessService.getAccessToken())) - .form(MEDIA, tmpFile) - .form(TYPE, mediaType) - .execute() - .body(); - MediaResult mediaResult = JacksonUtil.toBean(body, MediaResult.class); - if (!Objects.equals(mediaResult.getCode(), SUCCESS_CODE)) { - throw new BizException(mediaResult.getMsg()); - } - return mediaResult.getMediaId(); - } - -} diff --git a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/notice/result/ChatNoticeResult.java b/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/notice/result/ChatNoticeResult.java deleted file mode 100644 index 6494bc73..00000000 --- a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/notice/result/ChatNoticeResult.java +++ /dev/null @@ -1,28 +0,0 @@ -package cn.bootx.platform.starter.dingtalk.core.notice.result; - -import com.fasterxml.jackson.annotation.JsonProperty; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.experimental.Accessors; - -/** - * @author xxm - * @since 2022/7/20 - */ -@Data -@Accessors(chain = true) -@Schema(title = "通知消息返回值") -public class ChatNoticeResult { - - @JsonProperty("errcode") - @Schema(description = "错误码") - private Integer code; - - @JsonProperty("errmsg") - @Schema(description = "返回码描述") - private String msg; - - @Schema(description = "异步发送任务ID") - private String messageId; - -} diff --git a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/notice/result/CorpNoticeResult.java b/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/notice/result/CorpNoticeResult.java deleted file mode 100644 index 89a42eeb..00000000 --- a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/notice/result/CorpNoticeResult.java +++ /dev/null @@ -1,35 +0,0 @@ -package cn.bootx.platform.starter.dingtalk.core.notice.result; - -import com.fasterxml.jackson.annotation.JsonProperty; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.experimental.Accessors; - -/** - * 钉钉消息响应 - * - * @author xxm - * @since 2022/7/17 - */ -@Data -@Accessors(chain = true) -@Schema(title = "通知消息返回值") -public class CorpNoticeResult { - - @JsonProperty("errcode") - @Schema(description = "错误码") - private Integer code; - - @JsonProperty("errmsg") - @Schema(description = "返回码描述") - private String msg; - - @JsonProperty("task_id") - @Schema(description = "异步发送任务ID") - private Long taskId; - - @JsonProperty("request_id") - @Schema(description = "请求ID") - private String requestId; - -} diff --git a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/notice/service/DingNoticeService.java b/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/notice/service/DingNoticeService.java deleted file mode 100644 index 34d689ee..00000000 --- a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/notice/service/DingNoticeService.java +++ /dev/null @@ -1,101 +0,0 @@ -package cn.bootx.platform.starter.dingtalk.core.notice.service; - -import cn.bootx.platform.starter.dingtalk.param.notice.ChatNotice; -import cn.bootx.platform.starter.dingtalk.param.notice.CorpNotice; -import cn.bootx.platform.starter.dingtalk.param.notice.RecallCorpNotice; -import cn.bootx.platform.starter.dingtalk.param.notice.UpdateCorpNotice; -import cn.bootx.platform.common.jackson.util.JacksonUtil; -import cn.bootx.platform.starter.dingtalk.core.base.service.DingAccessService; -import cn.bootx.platform.starter.dingtalk.core.base.result.DingTalkResult; -import cn.bootx.platform.starter.dingtalk.core.notice.result.ChatNoticeResult; -import cn.bootx.platform.starter.dingtalk.core.notice.result.CorpNoticeResult; -import cn.hutool.core.util.StrUtil; -import cn.hutool.http.HttpUtil; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -import static cn.bootx.platform.starter.dingtalk.code.DingTalkCode.*; - -/** - * 钉钉通知发送服务 - * - * @author xxm - * @since 2022/7/17 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class DingNoticeService { - - private final DingAccessService dingAccessService; - - /** - * 发送普通消息, 支持普通群和个人会话 - * - * ... - */ - public void sendNotice() { - } - - /** - * 发送企业群消息 - * - * ... - */ - public ChatNoticeResult sendChatNotice(ChatNotice param) { - String accessToken = dingAccessService.getAccessToken(); - String responseBody = HttpUtil.createPost(StrUtil.format(NOTICE_CHAT_URL, accessToken)) - .body(param.toParam()) - .execute() - .body(); - return JacksonUtil.toBean(responseBody, ChatNoticeResult.class); - } - - /** - * 发送工作通知 - * - * ... - */ - public CorpNoticeResult sendCorpNotice(CorpNotice param) { - String accessToken = dingAccessService.getAccessToken(); - String responseBody = HttpUtil.createPost(StrUtil.format(NOTICE_CORP_SEND_URL, accessToken)) - .body(param.toParam()) - .execute() - .body(); - return JacksonUtil.toBean(responseBody, CorpNoticeResult.class); - } - - /** - * 更新工作通知状态栏 - * @url ... - */ - public CorpNoticeResult updateCorpNotice(UpdateCorpNotice param) { - String accessToken = dingAccessService.getAccessToken(); - String responseBody = HttpUtil.createPost(StrUtil.format(NOTICE_CORP_UPDATE_URL, accessToken)) - .body(param.toParam()) - .execute() - .body(); - return JacksonUtil.toBean(responseBody, CorpNoticeResult.class); - } - - /** - * 撤回工作通知消息 - * @url ... - */ - public DingTalkResult recallCorpNotice(RecallCorpNotice param) { - - String accessToken = dingAccessService.getAccessToken(); - String responseBody = HttpUtil.createPost(StrUtil.format(NOTICE_CORP_RECALL_URL, accessToken)) - .body(param.toParam()) - .execute() - .body(); - return JacksonUtil.toBean(responseBody, DingTalkResult.class); - } - -} diff --git a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/robot/convert/DingRobotConvert.java b/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/robot/convert/DingRobotConvert.java deleted file mode 100644 index a6b586b6..00000000 --- a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/robot/convert/DingRobotConvert.java +++ /dev/null @@ -1,24 +0,0 @@ -package cn.bootx.platform.starter.dingtalk.core.robot.convert; - -import cn.bootx.platform.starter.dingtalk.param.robot.DingRobotConfigParam; -import cn.bootx.platform.starter.dingtalk.core.robot.entity.DingRobotConfig; -import cn.bootx.platform.starter.dingtalk.dto.robot.DingRobotConfigDto; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -/** - * 钉钉相关类转换 - * - * @author xxm - * @since 2021/8/5 - */ -@Mapper -public interface DingRobotConvert { - - DingRobotConvert CONVERT = Mappers.getMapper(DingRobotConvert.class); - - DingRobotConfig convert(DingRobotConfigParam in); - - DingRobotConfigDto convert(DingRobotConfig in); - -} diff --git a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/robot/dao/DingRobotConfigManager.java b/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/robot/dao/DingRobotConfigManager.java deleted file mode 100644 index be0f01b2..00000000 --- a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/robot/dao/DingRobotConfigManager.java +++ /dev/null @@ -1,47 +0,0 @@ -package cn.bootx.platform.starter.dingtalk.core.robot.dao; - -import cn.bootx.platform.starter.dingtalk.core.robot.entity.DingRobotConfig; -import cn.bootx.platform.starter.dingtalk.param.robot.DingRobotConfigParam; -import cn.bootx.platform.common.core.rest.param.PageParam; -import cn.bootx.platform.common.mybatisplus.base.MpIdEntity; -import cn.bootx.platform.common.mybatisplus.impl.BaseManager; -import cn.bootx.platform.common.mybatisplus.util.MpUtil; -import cn.hutool.core.util.StrUtil; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Repository; - -import java.util.Optional; - -/** - * 钉钉机器人 - * - * @author xxm - * @since 2020/11/29 - */ -@Repository -@RequiredArgsConstructor -public class DingRobotConfigManager extends BaseManager { - - public Optional findByCode(String code) { - return findByField(DingRobotConfig::getCode, code); - } - - public boolean existsByCode(String code) { - return existedByField(DingRobotConfig::getCode, code); - } - - public boolean existsByCode(String code, Long id) { - return lambdaQuery().eq(DingRobotConfig::getCode, code).ne(MpIdEntity::getId, id).exists(); - } - - public Page page(PageParam pageParam, DingRobotConfigParam param) { - Page mpPage = MpUtil.getMpPage(pageParam, DingRobotConfig.class); - return lambdaQuery().orderByDesc(MpIdEntity::getId) - .like(StrUtil.isNotBlank(param.getCode()), DingRobotConfig::getCode, param.getCode()) - .like(StrUtil.isNotBlank(param.getName()), DingRobotConfig::getName, param.getName()) - .like(StrUtil.isNotBlank(param.getAccessToken()), DingRobotConfig::getAccessToken, param.getAccessToken()) - .page(mpPage); - } - -} diff --git a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/robot/dao/DingRobotConfigMapper.java b/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/robot/dao/DingRobotConfigMapper.java deleted file mode 100644 index f1514179..00000000 --- a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/robot/dao/DingRobotConfigMapper.java +++ /dev/null @@ -1,16 +0,0 @@ -package cn.bootx.platform.starter.dingtalk.core.robot.dao; - -import cn.bootx.platform.starter.dingtalk.core.robot.entity.DingRobotConfig; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.apache.ibatis.annotations.Mapper; - -/** - * 钉钉机器人配置 - * - * @author xxm - * @since 2021/8/5 - */ -@Mapper -public interface DingRobotConfigMapper extends BaseMapper { - -} diff --git a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/robot/entity/DingRobotConfig.java b/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/robot/entity/DingRobotConfig.java deleted file mode 100644 index 2532efee..00000000 --- a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/robot/entity/DingRobotConfig.java +++ /dev/null @@ -1,52 +0,0 @@ -package cn.bootx.platform.starter.dingtalk.core.robot.entity; - -import cn.bootx.platform.starter.dingtalk.core.robot.convert.DingRobotConvert; -import cn.bootx.platform.starter.dingtalk.param.robot.DingRobotConfigParam; -import cn.bootx.platform.common.core.function.EntityBaseFunction; -import cn.bootx.platform.common.mybatisplus.base.MpBaseEntity; -import cn.bootx.platform.starter.dingtalk.dto.robot.DingRobotConfigDto; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -/** - * 钉钉机器人配置 - * - * @author xxm - * @since 2020/11/29 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@Accessors(chain = true) -@TableName("starter_ding_robot_config") -public class DingRobotConfig extends MpBaseEntity implements EntityBaseFunction { - - /** 机器人编号编号 */ - private String code; - - /** 机器人配置名称 */ - private String name; - - /** 钉钉机器人的accessToken */ - private String accessToken; - - /** 是否开启验签 */ - private boolean enableSignatureCheck; - - /** 验签秘钥 */ - private String signSecret; - - /** 备注 */ - private String remark; - - public static DingRobotConfig init(DingRobotConfigParam in) { - return DingRobotConvert.CONVERT.convert(in); - } - - @Override - public DingRobotConfigDto toDto() { - return DingRobotConvert.CONVERT.convert(this); - } - -} diff --git a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/robot/service/DingRobotConfigService.java b/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/robot/service/DingRobotConfigService.java deleted file mode 100644 index 72d4781e..00000000 --- a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/robot/service/DingRobotConfigService.java +++ /dev/null @@ -1,102 +0,0 @@ -package cn.bootx.platform.starter.dingtalk.core.robot.service; - -import cn.bootx.platform.starter.dingtalk.param.robot.DingRobotConfigParam; -import cn.bootx.platform.common.core.exception.BizException; -import cn.bootx.platform.common.core.exception.DataNotExistException; -import cn.bootx.platform.common.core.rest.PageResult; -import cn.bootx.platform.common.core.rest.param.PageParam; -import cn.bootx.platform.common.core.util.ResultConvertUtil; -import cn.bootx.platform.common.mybatisplus.util.MpUtil; -import cn.bootx.platform.starter.dingtalk.core.robot.dao.DingRobotConfigManager; -import cn.bootx.platform.starter.dingtalk.core.robot.entity.DingRobotConfig; -import cn.bootx.platform.starter.dingtalk.dto.robot.DingRobotConfigDto; -import cn.hutool.core.bean.BeanUtil; -import cn.hutool.core.bean.copier.CopyOptions; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.List; - -/** - * 钉钉机器人消息发送 - * - * @author xxm - * @since 2020/11/29 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class DingRobotConfigService { - - private final DingRobotConfigManager robotConfigManager; - - /** - * 添加新配置 - */ - @Transactional(rollbackFor = Exception.class) - public DingRobotConfigDto add(DingRobotConfigParam param) { - if (robotConfigManager.existsByCode(param.getCode())) { - throw new BizException("code重复"); - } - - DingRobotConfig dingRobotConfig = DingRobotConfig.init(param); - - return robotConfigManager.save(dingRobotConfig).toDto(); - } - - /** - * 更新钉钉机器人配置 - */ - @Transactional(rollbackFor = Exception.class) - public DingRobotConfigDto update(DingRobotConfigParam param) { - DingRobotConfig dingRobotConfig = robotConfigManager.findById(param.getId()) - .orElseThrow(DataNotExistException::new); - BeanUtil.copyProperties(param, dingRobotConfig, CopyOptions.create().ignoreNullValue()); - return robotConfigManager.updateById(dingRobotConfig).toDto(); - } - - /** - * 获取所有配置 - */ - public List findAll() { - return ResultConvertUtil.dtoListConvert(robotConfigManager.findAll()); - } - - /** - * 获取所有配置 - */ - public PageResult page(PageParam pageParam, DingRobotConfigParam param) { - return MpUtil.convert2DtoPageResult(robotConfigManager.page(pageParam, param)); - } - - /** - * 根据 id 获取相应的配置 - */ - public DingRobotConfigDto findById(Long id) { - return ResultConvertUtil.dtoConvert(robotConfigManager.findById(id)); - } - - /** - * 根据 id 删除相应的机器人配置 - */ - public void delete(Long id) { - robotConfigManager.deleteById(id); - } - - /** - * 编码是否已经存在 - */ - public boolean existsByCode(String code) { - return robotConfigManager.existsByCode(code); - } - - /** - * 编码是否已经存在(不包含自身) - */ - public boolean existsByCode(String code, Long id) { - return robotConfigManager.existsByCode(code, id); - } - -} diff --git a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/robot/service/DingRobotSendService.java b/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/robot/service/DingRobotSendService.java deleted file mode 100644 index 3cf12784..00000000 --- a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/robot/service/DingRobotSendService.java +++ /dev/null @@ -1,68 +0,0 @@ -package cn.bootx.platform.starter.dingtalk.core.robot.service; - -import cn.bootx.platform.starter.dingtalk.param.notice.msg.Msg; -import cn.bootx.platform.starter.dingtalk.util.DingTalkUtil; -import cn.bootx.platform.common.core.exception.DataNotExistException; -import cn.bootx.platform.common.jackson.util.JacksonUtil; -import cn.bootx.platform.starter.dingtalk.code.DingTalkCode; -import cn.bootx.platform.starter.dingtalk.core.robot.dao.DingRobotConfigManager; -import cn.bootx.platform.starter.dingtalk.core.robot.entity.DingRobotConfig; -import cn.bootx.platform.starter.dingtalk.core.base.result.DingTalkResult; -import cn.hutool.core.util.StrUtil; -import cn.hutool.http.HttpUtil; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -import java.util.HashMap; -import java.util.Map; -import java.util.Objects; - -import static cn.bootx.platform.starter.dingtalk.code.DingTalkCode.SUCCESS_CODE; - -/** - * 钉钉机器人消息发送 - * - * @author xxm - * @since 2020/11/29 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class DingRobotSendService { - - private final DingRobotConfigManager dingRobotConfigManager; - - /** - * 发送钉钉机器人消息 - */ - public void sendNotice(String code, Msg body) { - DingRobotConfig dingRobotConfig = dingRobotConfigManager.findByCode(code) - .orElseThrow(() -> new DataNotExistException("钉钉机器人配置不存在")); - long timestamp = System.currentTimeMillis(); - - Map map = new HashMap<>(3); - map.put(DingTalkCode.ACCESS_TOKEN, dingRobotConfig.getAccessToken()); - String url; - // 验签 - if (dingRobotConfig.isEnableSignatureCheck()) { - url = DingTalkCode.ROBOT_SEND_SIGN_URL; - map.put(DingTalkCode.SIGN, DingTalkUtil.generateSign(timestamp, dingRobotConfig.getSignSecret())); - map.put(DingTalkCode.TIMESTAMP, timestamp); - } - else { - url = DingTalkCode.ROBOT_SEND_NOT_SIGN_URL; - } - - // 请求消息 - String responseBody = HttpUtil.createPost(StrUtil.format(url, map)) - .body(JacksonUtil.toJson(body)) - .execute() - .body(); - DingTalkResult dingTalkResult = JacksonUtil.toBean(responseBody, DingTalkResult.class); - if (!Objects.equals(SUCCESS_CODE, dingTalkResult.getCode())) { - log.error("钉钉机器人发送消息失败: {}", dingTalkResult.getMsg()); - } - } - -} diff --git a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/user/entity/UserIdResult.java b/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/user/entity/UserIdResult.java deleted file mode 100644 index 82bb8f86..00000000 --- a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/user/entity/UserIdResult.java +++ /dev/null @@ -1,25 +0,0 @@ -package cn.bootx.platform.starter.dingtalk.core.user.entity; - -import com.fasterxml.jackson.annotation.JsonProperty; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.experimental.Accessors; - -/** - * @author xxm - * @since 2022/7/21 - */ -@Data -@Accessors(chain = true) -@Schema(title = "钉钉id消息") -public class UserIdResult { - - @JsonProperty("contact_type") - @Schema(description = "联系类型") - private String contactType; - - @JsonProperty("userid") - @Schema(description = "用户id") - private String userId; - -} diff --git a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/user/service/DingUserService.java b/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/user/service/DingUserService.java deleted file mode 100644 index 83a40902..00000000 --- a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/core/user/service/DingUserService.java +++ /dev/null @@ -1,60 +0,0 @@ -package cn.bootx.platform.starter.dingtalk.core.user.service; - -import cn.bootx.platform.common.core.exception.BizException; -import cn.bootx.platform.common.jackson.util.JacksonUtil; -import cn.bootx.platform.starter.dingtalk.core.base.result.DingTalkResult; -import cn.bootx.platform.starter.dingtalk.core.base.service.DingAccessService; -import cn.bootx.platform.starter.dingtalk.core.user.entity.UserIdResult; -import cn.hutool.core.util.StrUtil; -import cn.hutool.http.HttpUtil; -import com.fasterxml.jackson.core.type.TypeReference; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -import java.util.HashMap; -import java.util.Map; -import java.util.Objects; - -import static cn.bootx.platform.starter.dingtalk.code.DingTalkCode.*; - -/** - * 钉钉用户信息 - * - * @author xxm - * @since 2022/7/17 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class DingUserService { - - private final DingAccessService dingAccessService; - - /** - * 根据unionid获取用户userid ... - */ - public String getUserIdByUnionId(String unionId) { - String accessToken = dingAccessService.getAccessToken(); - Map map = new HashMap<>(1); - map.put(UNION_ID, unionId); - String responseBody = HttpUtil.createPost(StrUtil.format(USER_GET_URL, accessToken)) - .body(JacksonUtil.toJson(map)) - .execute() - .body(); - DingTalkResult dingTalkResult = JacksonUtil.toBean(responseBody, - new TypeReference>() { - }); - // 未找到用户, 返回空 - if (Objects.equals(dingTalkResult.getCode(), NOT_FUND_STAFF)) { - return null; - } - // 错误 - if (!Objects.equals(dingTalkResult.getCode(), SUCCESS_CODE)) { - throw new BizException(dingTalkResult.getMsg()); - } - return dingTalkResult.getResult().getUserId(); - } - -} diff --git a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/dto/robot/DingRobotConfigDto.java b/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/dto/robot/DingRobotConfigDto.java deleted file mode 100644 index d9042be1..00000000 --- a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/dto/robot/DingRobotConfigDto.java +++ /dev/null @@ -1,40 +0,0 @@ -package cn.bootx.platform.starter.dingtalk.dto.robot; - -import cn.bootx.platform.common.core.rest.dto.BaseDto; -import cn.bootx.platform.starter.data.perm.sensitive.SensitiveInfo; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -import java.io.Serializable; - -@EqualsAndHashCode(callSuper = true) -@Data -@Accessors(chain = true) -@Schema(title = "钉钉机器人配置") -public class DingRobotConfigDto extends BaseDto implements Serializable { - - private static final long serialVersionUID = -5642207413191556792L; - - @Schema(description = "编号") - private String code; - - @Schema(description = "配置名称") - private String name; - - @Schema(description = "钉钉机器人的AccessToken") - @SensitiveInfo - private String accessToken; - - @Schema(description = "是否开启验签") - private boolean enableSignatureCheck; - - @Schema(description = "验签秘钥") - @SensitiveInfo - private String signSecret; - - @Schema(description = "描述") - private String remark; - -} diff --git a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/ChatNotice.java b/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/ChatNotice.java deleted file mode 100644 index 6d8c0e3a..00000000 --- a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/ChatNotice.java +++ /dev/null @@ -1,39 +0,0 @@ -package cn.bootx.platform.starter.dingtalk.param.notice; - -import cn.bootx.platform.starter.dingtalk.param.notice.msg.Msg; -import cn.bootx.platform.common.jackson.util.JacksonUtil; -import com.fasterxml.jackson.annotation.JsonProperty; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import lombok.experimental.Accessors; - -/** - * 钉钉发送企业群消息参数 - * - * @author xxm - * @since 2022/7/20 - */ -@Data -@Accessors(chain = true) -@AllArgsConstructor -@NoArgsConstructor -@Schema(title = "钉钉发送企业群消息参数") -public class ChatNotice { - - @JsonProperty("chatid") - @Schema(description = "群Id") - private String chatId; - - @Schema(description = "消息内容") - private Msg msg; - - /** - * 输出参数 - */ - public String toParam() { - return JacksonUtil.toJson(this); - } - -} diff --git a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/CorpNotice.java b/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/CorpNotice.java deleted file mode 100644 index 7023a4d4..00000000 --- a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/CorpNotice.java +++ /dev/null @@ -1,55 +0,0 @@ -package cn.bootx.platform.starter.dingtalk.param.notice; - -import cn.bootx.platform.starter.dingtalk.param.notice.msg.Msg; -import cn.bootx.platform.common.jackson.util.JacksonUtil; -import cn.hutool.core.lang.Opt; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.experimental.Accessors; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * 钉钉发送工作通知参数 - * - * @author xxm - * @since 2022/7/17 - */ -@Data -@Accessors(chain = true) -@Schema(title = "钉钉发送工作通知参数") -public class CorpNotice { - - @Schema(description = "发送消息时使用的微应用的AgentID") - private Long agentId; - - @Schema(description = "接收者的userid列表,最大用户列表长度100") - private List useridList; - - @Schema(description = "接收者的部门id列表,最大列表长度20") - private List deptIdList; - - @Schema(description = "是否发送给企业全部用户") - private boolean toAllUser; - - @Schema(description = "消息内容") - private Msg msg; - - /** - * 输出参数 - */ - public String toParam() { - Map map = new HashMap<>(5); - String useridList = Opt.ofEmptyAble(this.useridList).map(list -> String.join(",", list)).orElse(null); - String deptIdList = Opt.ofEmptyAble(this.deptIdList).map(list -> String.join(",", list)).orElse(null); - map.put("agent_id", agentId); - map.put("userid_list", useridList); - map.put("dept_id_list", deptIdList); - map.put("to_all_user", toAllUser); - map.put("msg", msg); - return JacksonUtil.toJson(map); - } - -} diff --git a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/RecallCorpNotice.java b/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/RecallCorpNotice.java deleted file mode 100644 index 805cbe72..00000000 --- a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/RecallCorpNotice.java +++ /dev/null @@ -1,36 +0,0 @@ -package cn.bootx.platform.starter.dingtalk.param.notice; - -import cn.bootx.platform.common.jackson.util.JacksonUtil; -import com.fasterxml.jackson.annotation.JsonProperty; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import lombok.experimental.Accessors; - -/** - * 钉钉撤回工作通知 - * - * @author xxm - * @since 2022/7/20 - */ -@Data -@Accessors(chain = true) -@AllArgsConstructor -@NoArgsConstructor -@Schema(title = "钉钉撤回工作通知") -public class RecallCorpNotice { - - @JsonProperty("agent_id") - @Schema(description = "发送消息时使用的微应用的AgentID") - private Long agentId; - - @JsonProperty("msg_task_id") - @Schema(description = "发送消息时钉钉返回的任务ID") - private Long taskId; - - public String toParam() { - return JacksonUtil.toJson(this); - } - -} diff --git a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/UpdateCorpNotice.java b/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/UpdateCorpNotice.java deleted file mode 100644 index d6e03630..00000000 --- a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/UpdateCorpNotice.java +++ /dev/null @@ -1,40 +0,0 @@ -package cn.bootx.platform.starter.dingtalk.param.notice; - -import cn.bootx.platform.common.jackson.util.JacksonUtil; -import com.fasterxml.jackson.annotation.JsonProperty; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.experimental.Accessors; - -/** - * 钉钉 更新工作通知状态栏 - * - * @author xxm - * @since 2022/7/17 - */ -@Data -@Accessors(chain = true) -@Schema(title = "钉钉更新工作通知状态栏") -public class UpdateCorpNotice { - - @JsonProperty("agent_id") - @Schema(description = "发送消息时使用的微应用的AgentID") - private Long agentId; - - @JsonProperty("task_id") - @Schema(description = "发送消息时使用的微应用的AgentID") - private Long taskId; - - @JsonProperty("status_value") - @Schema(description = "状态栏值") - private String statusValue; - - @JsonProperty("status_bg") - @Schema(description = "状态栏背景色,推荐0xFF加六位颜色值") - private String statusBg; - - public String toParam() { - return JacksonUtil.toJson(this); - } - -} diff --git a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/msg/ActionCardMsg.java b/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/msg/ActionCardMsg.java deleted file mode 100644 index 20ee7b85..00000000 --- a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/msg/ActionCardMsg.java +++ /dev/null @@ -1,70 +0,0 @@ -package cn.bootx.platform.starter.dingtalk.param.notice.msg; - -import com.fasterxml.jackson.annotation.JsonProperty; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -import java.util.List; - -/** - * 钉钉卡片消息 - * - * @author xxm - * @since 2022/7/19 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@Accessors(chain = true) -@Schema(title = "钉钉卡片消息") -public class ActionCardMsg extends Msg { - - @Schema(description = "消息内容,支持markdown") - @JsonProperty("action_card") - private ActionCard actionCard; - - @Data - @Accessors(chain = true) - @Schema(title = "消息内容,支持markdown") - public static class ActionCard { - - @Schema(description = "透出到会话列表和通知的文案") - private String title; - - @Schema(description = "消息内容") - private String markdown; - - @JsonProperty("single_title") - @Schema(description = "标题") - private String singleTitle; - - @JsonProperty("single_url") - @Schema(description = "消息点击链接地址") - private String singleUrl; - - @JsonProperty("btn_orientation") - @Schema(description = "使用独立跳转ActionCard样式时的按钮排列方式") - private String btnOrientation; - - @JsonProperty("btn_json_list") - @Schema(description = "使用独立跳转ActionCard样式时的按钮列表") - private List btnJsonList; - - @Data - @Accessors(chain = true) - @Schema(title = "使用独立跳转ActionCard样式时的按钮列表") - public static class BtnJson { - - @Schema(description = "按钮的标题") - private String title; - - @JsonProperty("action_url") - @Schema(description = "跳转链接") - private String actionUrl; - - } - - } - -} diff --git a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/msg/At.java b/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/msg/At.java deleted file mode 100644 index 3aef3982..00000000 --- a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/msg/At.java +++ /dev/null @@ -1,59 +0,0 @@ -package cn.bootx.platform.starter.dingtalk.param.notice.msg; - -import cn.hutool.core.collection.CollUtil; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.NoArgsConstructor; -import lombok.experimental.Accessors; - -import java.io.Serializable; -import java.util.List; - -/** - * 钉钉At - * - * @author xxm - * @since 2020/11/29 - */ -@Data -@Accessors(chain = true) -@NoArgsConstructor -@Schema(title = "钉钉@指定用户") -public class At implements Serializable { - - private static final long serialVersionUID = -8677524557109058147L; - - @Schema(description = "@的用户手机号") - private List atMobiles; - - @Schema(description = "@被@人的用户userid") - private List atUserIds; - - @Schema(description = "是否@全体") - private boolean isAtAll = false; - - public At(List atMobiles) { - this.atMobiles = atMobiles; - } - - /** - * 输出@xxx文本 - */ - public String toAtMobiles() { - if (CollUtil.isNotEmpty(atMobiles)) { - return " @" + String.join(" @", atMobiles); - } - return ""; - } - - /** - * 输出@xxx文本 - */ - public String toAtUserIds() { - if (CollUtil.isNotEmpty(atUserIds)) { - return " @" + String.join(" @", atUserIds); - } - return ""; - } - -} diff --git a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/msg/DingMedia.java b/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/msg/DingMedia.java deleted file mode 100644 index 28012efd..00000000 --- a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/msg/DingMedia.java +++ /dev/null @@ -1,27 +0,0 @@ -package cn.bootx.platform.starter.dingtalk.param.notice.msg; - -import com.fasterxml.jackson.annotation.JsonProperty; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import lombok.experimental.Accessors; - -/** - * 钉钉图片 - * - * @author xxm - * @since 2022/7/17 - */ -@Data -@Accessors(chain = true) -@Schema(title = "钉钉媒体") -@NoArgsConstructor -@AllArgsConstructor -public class DingMedia { - - @JsonProperty("media_id") - @Schema(description = "媒体文件id") - private String mediaId; - -} diff --git a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/msg/FileMsg.java b/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/msg/FileMsg.java deleted file mode 100644 index d948b44d..00000000 --- a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/msg/FileMsg.java +++ /dev/null @@ -1,37 +0,0 @@ -package cn.bootx.platform.starter.dingtalk.param.notice.msg; - -import cn.bootx.platform.starter.dingtalk.code.DingTalkNoticeCode; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -import java.io.Serializable; - -/** - * 钉钉图片通知 - * - * @author xxm - * @since 2022/7/17 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@Accessors(chain = true) -@Schema(title = "钉钉文件通知") -public class FileMsg extends Msg implements Serializable { - - private static final long serialVersionUID = -835679566138176L; - - @Schema(description = "钉钉文件") - private DingMedia file; - - public FileMsg() { - super(DingTalkNoticeCode.MSG_FILE); - } - - public FileMsg(String mediaId) { - super(DingTalkNoticeCode.MSG_FILE); - this.file = new DingMedia(mediaId); - } - -} diff --git a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/msg/ImageMsg.java b/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/msg/ImageMsg.java deleted file mode 100644 index a1fa6cb8..00000000 --- a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/msg/ImageMsg.java +++ /dev/null @@ -1,37 +0,0 @@ -package cn.bootx.platform.starter.dingtalk.param.notice.msg; - -import cn.bootx.platform.starter.dingtalk.code.DingTalkNoticeCode; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -import java.io.Serializable; - -/** - * 钉钉图片通知 - * - * @author xxm - * @since 2022/7/17 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@Accessors(chain = true) -@Schema(title = "钉钉图片通知") -public class ImageMsg extends Msg implements Serializable { - - private static final long serialVersionUID = -835679566138176L; - - @Schema(description = "钉钉图片") - private DingMedia image; - - public ImageMsg() { - super(DingTalkNoticeCode.MSG_IMAGE); - } - - public ImageMsg(String mediaId) { - super(DingTalkNoticeCode.MSG_IMAGE); - this.image = new DingMedia(mediaId); - } - -} diff --git a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/msg/LinkMsg.java b/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/msg/LinkMsg.java deleted file mode 100644 index 20b1ab0c..00000000 --- a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/msg/LinkMsg.java +++ /dev/null @@ -1,78 +0,0 @@ -package cn.bootx.platform.starter.dingtalk.param.notice.msg; - -import cn.bootx.platform.starter.dingtalk.code.DingTalkNoticeCode; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.NoArgsConstructor; -import lombok.experimental.Accessors; - -import java.io.Serializable; - -/** - * 钉钉链接消息 - * - * @author xxm - * @since 2020/11/30 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@Accessors(chain = true) -@Schema(title = "钉钉链接消息") -public class LinkMsg extends Msg implements Serializable { - - private static final long serialVersionUID = -3094638065840434973L; - - @Schema(description = "钉钉link消息体") - private DingLink link; - - public LinkMsg() { - super(DingTalkNoticeCode.MSG_LINK); - } - - public LinkMsg(String title, String msg, String messageUrl) { - super(DingTalkNoticeCode.MSG_LINK); - link = new DingLink(title, msg, messageUrl); - } - - public LinkMsg(String title, String msg, String messageUrl, String picUrl) { - super(DingTalkNoticeCode.MSG_LINK); - link = new DingLink(title, msg, messageUrl, picUrl); - } - - @Data - @Accessors(chain = true) - @Schema(title = "钉钉link") - @NoArgsConstructor - public static class DingLink implements Serializable { - - private static final long serialVersionUID = 8191181631664337904L; - - @Schema(description = "标题") - private String title; - - @Schema(description = "内容") - private String text; - - @Schema(description = "点击消息跳转的URL") - private String messageUrl; - - @Schema(description = "图片URL") - private String picUrl; - - public DingLink(String title, String text, String messageUrl) { - this.title = title; - this.text = text; - this.messageUrl = messageUrl; - } - - public DingLink(String title, String text, String messageUrl, String picUrl) { - this.title = title; - this.text = text; - this.messageUrl = messageUrl; - this.picUrl = picUrl; - } - - } - -} diff --git a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/msg/MarkdownMsg.java b/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/msg/MarkdownMsg.java deleted file mode 100644 index 40548c1d..00000000 --- a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/msg/MarkdownMsg.java +++ /dev/null @@ -1,70 +0,0 @@ -package cn.bootx.platform.starter.dingtalk.param.notice.msg; - -import cn.bootx.platform.starter.dingtalk.code.DingTalkNoticeCode; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.NoArgsConstructor; -import lombok.experimental.Accessors; - -import java.io.Serializable; -import java.util.List; - -/** - * 钉钉markdown消息 - * - * @author xxm - * @since 2020/11/30 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@Accessors(chain = true) -@Schema(title = "钉钉文本消息") -public class MarkdownMsg extends Msg implements Serializable { - - private static final long serialVersionUID = -2724590259000709240L; - - @Schema(description = "markdown消息体") - private DingMarkdown markdown; - - public MarkdownMsg() { - super(DingTalkNoticeCode.MSG_MARKDOWN); - } - - /** - * @param title 标题 - * @param msg 内容 - * @param phones @谁 - */ - public MarkdownMsg(String title, String msg, List phones) { - super(new At(phones), DingTalkNoticeCode.MSG_MARKDOWN); - this.markdown = new DingMarkdown(title, msg); - } - - public MarkdownMsg(String title, String msg) { - super(DingTalkNoticeCode.MSG_MARKDOWN); - this.markdown = new DingMarkdown(title, msg); - } - - @Data - @Accessors(chain = true) - @NoArgsConstructor - @Schema(title = "钉钉markdown格式信息") - public static class DingMarkdown implements Serializable { - - private static final long serialVersionUID = 2353543901449818541L; - - @Schema(description = "标题") - private String title; - - @Schema(description = "内容") - private String text; - - public DingMarkdown(String title, String text) { - this.title = title; - this.text = text; - } - - } - -} diff --git a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/msg/Msg.java b/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/msg/Msg.java deleted file mode 100644 index 656371c4..00000000 --- a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/msg/Msg.java +++ /dev/null @@ -1,50 +0,0 @@ -package cn.bootx.platform.starter.dingtalk.param.notice.msg; - -import cn.bootx.platform.starter.dingtalk.code.DingTalkNoticeCode; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.NoArgsConstructor; -import lombok.experimental.Accessors; - -import java.io.Serializable; - -/** - * 钉钉消息 - * - * @author xxm - * @since 2020/11/30 - */ -@Data -@Accessors(chain = true) -@NoArgsConstructor -@Schema(title = "钉钉消息基础类") -public class Msg implements Serializable { - - private static final long serialVersionUID = -8548175773944126488L; - - /** - * ... - */ - @JsonInclude(JsonInclude.Include.NON_NULL) - @Schema(description = "@谁(机器人消息用)") - private At at; - - /** - * @see DingTalkNoticeCode - */ - @JsonProperty("msgtype") - @Schema(description = "消息类型") - private String msgType; - - public Msg(At at, String msgType) { - this.at = at; - this.msgType = msgType; - } - - public Msg(String msgType) { - this.msgType = msgType; - } - -} diff --git a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/msg/OaMsg.java b/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/msg/OaMsg.java deleted file mode 100644 index fbaab913..00000000 --- a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/msg/OaMsg.java +++ /dev/null @@ -1,139 +0,0 @@ -package cn.bootx.platform.starter.dingtalk.param.notice.msg; - -import com.fasterxml.jackson.annotation.JsonProperty; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.NoArgsConstructor; -import lombok.experimental.Accessors; - -import java.util.List; - -/** - * 钉钉OA消息 - * - * @author xxm - * @since 2022/7/19 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@Accessors(chain = true) -@AllArgsConstructor -@NoArgsConstructor -@Schema(title = "钉钉OA消息") -public class OaMsg extends Msg { - - @Schema(description = "OA消息体") - private Oa oa; - - @Data - @Accessors(chain = true) - @Schema(title = "OA消息体") - public static class Oa { - - @JsonProperty("message_url") - @Schema(description = "消息点击链接地址") - private String messageUrl; - - @JsonProperty("pc_message_url") - @Schema(description = "PC端点击消息时跳转到的地址") - private String pcMessageUrl; - - @Schema(description = "消息头部内容") - private Head head; - - @Schema(description = "消息体") - private Body body; - - @JsonProperty("status_bar") - @Schema(description = "消息状态栏") - private StatusBar statusBar; - - @Data - @Accessors(chain = true) - @Schema(title = "消息头部内容") - public static class Head { - - @JsonProperty("bgcolor") - @Schema(description = "消息头部的背景颜色") - private String bgColor; - - @Schema(description = "消息的头部标题") - private String text; - - } - - @Data - @Accessors(chain = true) - @Schema(title = "消息状态栏") - public static class StatusBar { - - @Schema(description = "状态栏文案") - @JsonProperty("status_value") - private String statusValue; - - @Schema(description = "状态栏背景色") - @JsonProperty("status_bg") - private String statusBg; - - } - - @Data - @Accessors(chain = true) - @Schema(title = "消息体") - public static class Body { - - @Schema(description = "消息体的标题") - private String title; - - @Schema(description = "消息体的表单") - private List
form; - - @Schema(description = "单行富文本信息") - private Rich rich; - - @Schema(description = "消息体的内容") - private String content; - - @Schema(description = "消息体中的图片(媒体id)") - private String image; - - @Schema(description = "自定义的附件数目") - @JsonProperty("file_count") - private String fileCount; - - @Schema(description = "自定义的作者名字") - private String author; - - @Data - @Accessors(chain = true) - @Schema(title = "消息体的表单,最多显示6个,超过会被隐藏") - public static class Form { - - @Schema(description = "消息体的关键字") - private String key; - - @Schema(description = "消息体的关键字对应的值") - private String value; - - } - - @Data - @Accessors(chain = true) - @Schema(title = "单行富文本信息") - public static class Rich { - - @Schema(description = "单行富文本信息的数目") - private String num; - - @Schema(description = "单行富文本信息的单位") - private String unit; - - } - - } - - } - -} diff --git a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/msg/TextMsg.java b/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/msg/TextMsg.java deleted file mode 100644 index 72e71d04..00000000 --- a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/msg/TextMsg.java +++ /dev/null @@ -1,51 +0,0 @@ -package cn.bootx.platform.starter.dingtalk.param.notice.msg; - -import cn.bootx.platform.starter.dingtalk.code.DingTalkNoticeCode; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.NoArgsConstructor; -import lombok.experimental.Accessors; - -import java.io.Serializable; - -/** - * @author xxm - * @since 2020/11/29 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@Accessors(chain = true) -@Schema(title = "钉钉文本消息") -public class TextMsg extends Msg implements Serializable { - - private static final long serialVersionUID = 8237431306046852539L; - - @Schema(description = "文本消息体") - private DingText text; - - public TextMsg() { - super(DingTalkNoticeCode.MSG_TEXT); - } - - public TextMsg(String msg) { - super(DingTalkNoticeCode.MSG_TEXT); - text = new DingText(msg); - } - - @Data - @Accessors(chain = true) - @NoArgsConstructor - @AllArgsConstructor - @Schema(title = "钉钉文本") - public static class DingText implements Serializable { - - private static final long serialVersionUID = 3582073816491238620L; - - @Schema(description = "文本") - private String content; - - } - -} diff --git a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/msg/VoiceMsg.java b/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/msg/VoiceMsg.java deleted file mode 100644 index d4b95c51..00000000 --- a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/notice/msg/VoiceMsg.java +++ /dev/null @@ -1,55 +0,0 @@ -package cn.bootx.platform.starter.dingtalk.param.notice.msg; - -import cn.bootx.platform.starter.dingtalk.code.DingTalkNoticeCode; -import com.fasterxml.jackson.annotation.JsonProperty; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.NoArgsConstructor; -import lombok.experimental.Accessors; - -import java.io.Serializable; - -/** - * 钉钉语音消息 - * - * @author xxm - * @since 2022/7/17 - */ -@EqualsAndHashCode(callSuper = true) -@Data -@Accessors(chain = true) -@Schema(title = "钉钉语音消息") -public class VoiceMsg extends Msg implements Serializable { - - @Schema(description = "钉钉语音") - private DingVoice voice; - - public VoiceMsg() { - super(DingTalkNoticeCode.MSG_VOICE); - } - - public VoiceMsg(String mediaId, String duration) { - super(DingTalkNoticeCode.MSG_VOICE); - this.voice = new DingVoice(mediaId, duration); - } - - @Data - @Accessors(chain = true) - @Schema(title = "钉钉语音") - @NoArgsConstructor - @AllArgsConstructor - public static class DingVoice { - - @JsonProperty("media_id") - @Schema(description = "媒体文件id") - private String mediaId; - - @JsonProperty("duration") - @Schema(description = "音频时长") - private String duration; - - } - -} diff --git a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/robot/DingRobotConfigParam.java b/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/robot/DingRobotConfigParam.java deleted file mode 100644 index 620604d8..00000000 --- a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/param/robot/DingRobotConfigParam.java +++ /dev/null @@ -1,41 +0,0 @@ -package cn.bootx.platform.starter.dingtalk.param.robot; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.experimental.Accessors; - -import java.io.Serializable; - -/** - * @author xxm - * @since 2021/8/5 - */ -@Data -@Accessors(chain = true) -@Schema(title = "钉钉机器人配置参数") -public class DingRobotConfigParam implements Serializable { - - private static final long serialVersionUID = -3979174622716815670L; - - @Schema(description = "主键") - private Long id; - - @Schema(description = "编号") - private String code; - - @Schema(description = "配置名称") - private String name; - - @Schema(description = "钉钉机器人的accessToken") - private String accessToken; - - @Schema(description = "是否开启验签") - private boolean enableSignatureCheck; - - @Schema(description = "验签秘钥") - private String signSecret; - - @Schema(description = "描述") - private String remark; - -} diff --git a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/util/DingTalkUtil.java b/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/util/DingTalkUtil.java deleted file mode 100644 index ba4494ed..00000000 --- a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/java/cn/bootx/platform/starter/dingtalk/util/DingTalkUtil.java +++ /dev/null @@ -1,41 +0,0 @@ -package cn.bootx.platform.starter.dingtalk.util; - -import cn.hutool.crypto.digest.HmacAlgorithm; -import lombok.experimental.UtilityClass; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.codec.binary.Base64; - -import javax.crypto.Mac; -import javax.crypto.spec.SecretKeySpec; -import java.nio.charset.StandardCharsets; -import java.security.InvalidKeyException; -import java.security.NoSuchAlgorithmException; - -/** - * 钉钉工具类 - * - * @author xxm - * @since 2022/4/2 - */ -@Slf4j -@UtilityClass -public class DingTalkUtil { - - /** - * 生成sign - */ - public String generateSign(Long timestamp, String sec) { - String combine = String.format("%d\n%s", timestamp, sec); - try { - Mac mac = Mac.getInstance(HmacAlgorithm.HmacSHA256.getValue()); - mac.init(new SecretKeySpec(sec.getBytes(StandardCharsets.UTF_8), HmacAlgorithm.HmacSHA256.getValue())); - byte[] signData = mac.doFinal(combine.getBytes(StandardCharsets.UTF_8)); - return Base64.encodeBase64String(signData); - } - catch (NoSuchAlgorithmException | InvalidKeyException e) { - log.warn(e.getMessage(), e); - } - return null; - } - -} diff --git a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports deleted file mode 100644 index 73283971..00000000 --- a/bootx-platform/bootx-common-starters/common-starter-dingtalk/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ /dev/null @@ -1 +0,0 @@ -cn.bootx.platform.starter.dingtalk.DingTalkAutoConfiguration diff --git a/bootx-platform/bootx-common-starters/common-starter-wechat/pom.xml b/bootx-platform/bootx-common-starters/common-starter-wechat/pom.xml deleted file mode 100644 index f2d39d7e..00000000 --- a/bootx-platform/bootx-common-starters/common-starter-wechat/pom.xml +++ /dev/null @@ -1,81 +0,0 @@ - - - - bootx-common-starters - cn.bootx.platform - 1.3.6.2 - - 4.0.0 - - common-starter-wechat - jar - - - - - org.springframework.boot - spring-boot-starter-web - - - - cn.bootx.platform - common-mybatis-plus - - - - com.github.binarywang - weixin-java-mp - ${wxjava.version} - - - commons-io - commons-io - - - guava - com.google.guava - - - com.thoughtworks.xstream - xstream - - - - - - com.github.binarywang - weixin-java-miniapp - ${wxjava.version} - - - commons-io - commons-io - - - guava - com.google.guava - - - com.thoughtworks.xstream - xstream - - - - - - com.thoughtworks.xstream - xstream - 1.4.20 - - - cn.bootx.platform - common-websocket - - - cn.bootx.platform - common-starter-auth - - - diff --git a/bootx-platform/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/WeChatAutoConfiguration.java b/bootx-platform/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/WeChatAutoConfiguration.java deleted file mode 100644 index 42089c6f..00000000 --- a/bootx-platform/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/WeChatAutoConfiguration.java +++ /dev/null @@ -1,21 +0,0 @@ -package cn.bootx.platform.starter.wechat; - -import org.apache.ibatis.annotations.Mapper; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.boot.autoconfigure.AutoConfiguration; -import org.springframework.boot.context.properties.ConfigurationPropertiesScan; -import org.springframework.context.annotation.ComponentScan; - -/** - * 微信操作封装 - * - * @author xxm - * @since 2022/7/15 - */ -@ComponentScan -@MapperScan(annotationClass = Mapper.class) -@AutoConfiguration -@ConfigurationPropertiesScan -public class WeChatAutoConfiguration { - -} diff --git a/bootx-platform/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/code/WeChatCode.java b/bootx-platform/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/code/WeChatCode.java deleted file mode 100644 index edf7660e..00000000 --- a/bootx-platform/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/code/WeChatCode.java +++ /dev/null @@ -1,28 +0,0 @@ -package cn.bootx.platform.starter.wechat.code; - -/** - * 微信编码 - * - * @author xxm - * @since 2022/8/5 - */ -public interface WeChatCode { - - /** qrscene_为前缀,后面为二维码的参数值 */ - String EVENT_KEY_QRSCENE = "qrscene_"; - - /* 带参数的扫码事件(qrscene_为前缀)参数前缀, 需要配合 qrscene_ 一起使用 */ - /** 扫码登录 */ - String QRSCENE_LOGIN = "login_"; - - /* 扫码登录状态 */ - /** 已过期 */ - String QR_LOGIN_EXPIRED = "expired"; - - /** 等待中 */ - String QR_LOGIN_WAIT = "wait"; - - /** */ - String QR_LOGIN_OK = "ok"; - -} diff --git a/bootx-platform/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/configuration/WeChatAppletProperties.java b/bootx-platform/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/configuration/WeChatAppletProperties.java deleted file mode 100644 index 1a95ed7d..00000000 --- a/bootx-platform/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/configuration/WeChatAppletProperties.java +++ /dev/null @@ -1,24 +0,0 @@ -package cn.bootx.platform.starter.wechat.configuration; - -import lombok.Getter; -import lombok.Setter; -import org.springframework.boot.context.properties.ConfigurationProperties; - -/** - * 微信公众平台配置 - * - * @author xxm - * @since 2022/7/15 - */ -@Getter -@Setter -@ConfigurationProperties("bootx.starter.third.wechat-applet") -public class WeChatAppletProperties { - - /** AppKey */ - private String appId = "?"; - - /** AppSecret */ - private String appSecret = "?"; - -} diff --git a/bootx-platform/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/configuration/WeChatConfiguration.java b/bootx-platform/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/configuration/WeChatConfiguration.java deleted file mode 100644 index d1bce120..00000000 --- a/bootx-platform/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/configuration/WeChatConfiguration.java +++ /dev/null @@ -1,64 +0,0 @@ -package cn.bootx.platform.starter.wechat.configuration; - -import cn.binarywang.wx.miniapp.api.WxMaService; -import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl; -import cn.binarywang.wx.miniapp.config.WxMaConfig; -import cn.binarywang.wx.miniapp.config.impl.WxMaDefaultConfigImpl; -import lombok.RequiredArgsConstructor; -import me.chanjar.weixin.mp.api.*; -import me.chanjar.weixin.mp.api.impl.*; -import me.chanjar.weixin.mp.config.WxMpConfigStorage; -import me.chanjar.weixin.mp.config.impl.WxMpDefaultConfigImpl; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -/** - * 微信配置 - * - * @author xxm - * @since 2022/7/15 - */ -@Configuration -@RequiredArgsConstructor -public class WeChatConfiguration { - - private final WeChatProperties weChatProperties; - - private final WeChatAppletProperties weChatAppletProperties; - - /** - * 微信公众号APIService - */ - @Bean - public WxMpService wxMpService(WxMpConfigStorage wxMpConfigStorage) { - WxMpService wxMpService = new WxMpServiceImpl(); - wxMpService.setWxMpConfigStorage(wxMpConfigStorage); - return wxMpService; - } - - /** - * 微信配置 - */ - @Bean - public WxMpConfigStorage wxMpConfigStorage() { - WxMpDefaultConfigImpl config = new WxMpDefaultConfigImpl(); - config.setAppId(weChatProperties.getAppId()); // 设置微信公众号的appid - config.setSecret(weChatProperties.getAppSecret()); // 设置微信公众号的app corpSecret - config.setToken(weChatProperties.getToken()); // 设置微信公众号的Token - config.setAesKey(weChatProperties.getEncodingAesKey()); // 消息加解密密钥 - return config; - } - @Bean - public WxMaService wxMaService(WxMaConfig wxMaConfigStorage) { - WxMaService wxMpService = new WxMaServiceImpl(); - wxMpService.setWxMaConfig(wxMaConfigStorage); - return wxMpService; - } - @Bean - public WxMaConfig wxMaConfigStorage() { - WxMaDefaultConfigImpl config = new WxMaDefaultConfigImpl(); - config.setAppid(weChatAppletProperties.getAppId()); // 设置微信公众号的appid - config.setSecret(weChatAppletProperties.getAppSecret()); // 设置微信公众号的app corpSecret - return config; - } -} diff --git a/bootx-platform/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/configuration/WeChatMessageRouterConfiguration.java b/bootx-platform/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/configuration/WeChatMessageRouterConfiguration.java deleted file mode 100644 index 9799789b..00000000 --- a/bootx-platform/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/configuration/WeChatMessageRouterConfiguration.java +++ /dev/null @@ -1,48 +0,0 @@ -package cn.bootx.platform.starter.wechat.configuration; - -import cn.bootx.platform.starter.wechat.handler.WeChatMpMessageHandler; -import cn.bootx.platform.starter.wechat.handler.WeChatMsgHandler; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import me.chanjar.weixin.mp.api.WxMpMessageRouter; -import me.chanjar.weixin.mp.api.WxMpService; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import java.util.List; - -/** - * 微信信息路由配置 - * - * @author xxm - * @since 2022/7/16 - */ -@Slf4j -@Configuration -@RequiredArgsConstructor -public class WeChatMessageRouterConfiguration { - - private final List weChatMpMessageHandlers; - - private final WeChatMsgHandler weChatMsgHandler; - - @Bean - public WxMpMessageRouter wxMpMessageRouter(WxMpService wxMpService) { - WxMpMessageRouter router = new WxMpMessageRouter(wxMpService); - // 记录日志 - - // 消息路由绑定 - for (WeChatMpMessageHandler weChatMpMessageHandler : weChatMpMessageHandlers) { - router.rule() - .async(false) - .msgType(weChatMpMessageHandler.getMsgType()) - .event(weChatMpMessageHandler.getEvent()) - .handler(weChatMpMessageHandler) - .end(); - } - // 默认的 文本消息处理 - router.rule().async(false).handler(weChatMsgHandler).end(); - return router; - } - -} diff --git a/bootx-platform/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/configuration/WeChatProperties.java b/bootx-platform/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/configuration/WeChatProperties.java deleted file mode 100644 index b6246580..00000000 --- a/bootx-platform/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/configuration/WeChatProperties.java +++ /dev/null @@ -1,30 +0,0 @@ -package cn.bootx.platform.starter.wechat.configuration; - -import lombok.Getter; -import lombok.Setter; -import org.springframework.boot.context.properties.ConfigurationProperties; - -/** - * 微信公众平台配置 - * - * @author xxm - * @since 2022/7/15 - */ -@Getter -@Setter -@ConfigurationProperties("bootx.starter.third.wechat") -public class WeChatProperties { - - /** AppKey */ - private String appId = "?"; - - /** AppSecret */ - private String appSecret = "?"; - - /** token */ - private String token = "?"; - - /** 消息加解密密钥 */ - private String encodingAesKey = "?"; - -} diff --git a/bootx-platform/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/controller/WeChatArticleController.java b/bootx-platform/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/controller/WeChatArticleController.java deleted file mode 100644 index 29749eaa..00000000 --- a/bootx-platform/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/controller/WeChatArticleController.java +++ /dev/null @@ -1,34 +0,0 @@ -package cn.bootx.platform.starter.wechat.controller; - -import cn.bootx.platform.common.core.rest.PageResult; -import cn.bootx.platform.common.core.rest.Res; -import cn.bootx.platform.common.core.rest.ResResult; -import cn.bootx.platform.common.core.rest.param.PageParam; -import cn.bootx.platform.starter.wechat.core.article.service.WeChatArticleService; -import cn.bootx.platform.starter.wechat.dto.article.WeChatArticleDto; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -/** - * @author xxm - * @since 2022/8/11 - */ -@Tag(name = "微信文章管理") -@RestController -@RequestMapping("/wechat/article") -@RequiredArgsConstructor -public class WeChatArticleController { - - private final WeChatArticleService weChatArticleService; - - @Operation(summary = "分页") - @GetMapping("/page") - public ResResult> page(PageParam pageParam) { - return Res.ok(weChatArticleService.page(pageParam)); - } - -} diff --git a/bootx-platform/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/controller/WeChatMediaController.java b/bootx-platform/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/controller/WeChatMediaController.java deleted file mode 100644 index bfd82f4e..00000000 --- a/bootx-platform/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/controller/WeChatMediaController.java +++ /dev/null @@ -1,55 +0,0 @@ -package cn.bootx.platform.starter.wechat.controller; - -import cn.bootx.platform.common.core.rest.PageResult; -import cn.bootx.platform.common.core.rest.Res; -import cn.bootx.platform.common.core.rest.ResResult; -import cn.bootx.platform.common.core.rest.param.PageParam; -import cn.bootx.platform.starter.wechat.core.media.service.WeChatMediaService; -import cn.bootx.platform.starter.wechat.dto.media.WeChatMediaDto; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.*; -import org.springframework.web.multipart.MultipartFile; - -import static me.chanjar.weixin.mp.bean.material.WxMpMaterialNewsBatchGetResult.WxMaterialNewsBatchGetNewsItem; - -/** - * @author xxm - * @since 2022/8/9 - */ -@Tag(name = "微信素材管理") -@RestController -@RequestMapping("/wechat/media") -@RequiredArgsConstructor -public class WeChatMediaController { - - private final WeChatMediaService weChatMediaService; - - @Operation(summary = "非图文素材分页") - @GetMapping("/pageFile") - public ResResult> pageFile(PageParam pageParam, String type) { - return Res.ok(weChatMediaService.pageFile(pageParam, type)); - } - - @Operation(summary = "图文素材分页") - @GetMapping("/pageNews") - public ResResult> pageNews(PageParam pageParam) { - return Res.ok(weChatMediaService.pageNews(pageParam)); - } - - @Operation(summary = "删除素材") - @DeleteMapping("/deleteFile") - public ResResult deleteFile(String mediaId) { - weChatMediaService.deleteFile(mediaId); - return Res.ok(); - } - - @Operation(summary = "上传素材") - @PostMapping("/uploadFile") - public ResResult uploadFile(String mediaType, MultipartFile file) { - weChatMediaService.uploadFile(mediaType, file); - return Res.ok(); - } - -} diff --git a/bootx-platform/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/controller/WeChatMenuController.java b/bootx-platform/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/controller/WeChatMenuController.java deleted file mode 100644 index 1c556776..00000000 --- a/bootx-platform/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/controller/WeChatMenuController.java +++ /dev/null @@ -1,91 +0,0 @@ -package cn.bootx.platform.starter.wechat.controller; - -import cn.bootx.platform.common.core.rest.PageResult; -import cn.bootx.platform.common.core.rest.Res; -import cn.bootx.platform.common.core.rest.ResResult; -import cn.bootx.platform.common.core.rest.param.PageParam; -import cn.bootx.platform.starter.wechat.core.menu.service.WeChatMenuService; -import cn.bootx.platform.starter.wechat.dto.menu.WeChatMenuDto; -import cn.bootx.platform.starter.wechat.param.menu.WeChatMenuParam; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.*; - -import java.util.List; - -/** - * 微信菜单管理 - * - * @author xxm - * @since 2022/8/6 - */ -@Tag(name = "微信菜单管理") -@RestController -@RequestMapping("/wechat/menu") -@RequiredArgsConstructor -public class WeChatMenuController { - - private final WeChatMenuService weChatMenuService; - - @Operation(summary = "添加") - @PostMapping(value = "/add") - public ResResult add(@RequestBody WeChatMenuParam param) { - weChatMenuService.add(param); - return Res.ok(); - } - - @Operation(summary = "修改") - @PostMapping(value = "/update") - public ResResult update(@RequestBody WeChatMenuParam param) { - weChatMenuService.update(param); - return Res.ok(); - } - - @Operation(summary = "删除") - @DeleteMapping(value = "/delete") - public ResResult delete(Long id) { - weChatMenuService.delete(id); - return Res.ok(); - } - - @Operation(summary = "通过ID查询") - @GetMapping(value = "/findById") - public ResResult findById(Long id) { - return Res.ok(weChatMenuService.findById(id)); - } - - @Operation(summary = "查询所有") - @GetMapping(value = "/findAll") - public ResResult> findAll() { - return Res.ok(weChatMenuService.findAll()); - } - - @Operation(summary = "分页查询") - @GetMapping(value = "/page") - public ResResult> page(PageParam pageParam, WeChatMenuParam weChatMenuParam) { - return Res.ok(weChatMenuService.page(pageParam, weChatMenuParam)); - } - - @Operation(summary = "发布菜单") - @PostMapping("/publish") - public ResResult publish(Long id) { - weChatMenuService.publish(id); - return Res.ok(); - } - - @Operation(summary = "导入微信自定义菜单到系统中") - @PostMapping("/importMenu") - public ResResult importMenu() { - weChatMenuService.importMenu(); - return Res.ok(); - } - - @Operation(summary = "清空微信自定义菜单") - @PostMapping("/clearMenu") - public ResResult clearMenu() { - weChatMenuService.clearMenu(); - return Res.ok(); - } - -} diff --git a/bootx-platform/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/controller/WeChatPortalController.java b/bootx-platform/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/controller/WeChatPortalController.java deleted file mode 100644 index 5028b4a0..00000000 --- a/bootx-platform/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/controller/WeChatPortalController.java +++ /dev/null @@ -1,55 +0,0 @@ -package cn.bootx.platform.starter.wechat.controller; - -import cn.bootx.platform.common.core.annotation.IgnoreAuth; -import cn.bootx.platform.starter.wechat.core.portal.service.WeChatPortalService; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.web.bind.annotation.*; - -/** - * 微信工作台接入入口 - * - * @author xxm - * @since 2022/7/16 - */ -@IgnoreAuth -@Slf4j -@Tag(name = "微信接入入口") -@RestController -@RequestMapping("/wechat/portal") -@RequiredArgsConstructor -public class WeChatPortalController { - - private final WeChatPortalService weChatPortalService; - - /** - * 微信接入校验处理 - * @param signature 微信签名 - * @param timestamp 时间戳 - * @param nonce 随机数 - * @param echostr 随机字符串 - */ - @GetMapping(produces = "text/plain;charset=utf-8") - public String auth(String signature, String timestamp, String nonce, String echostr) { - return weChatPortalService.auth(signature, timestamp, nonce, echostr); - } - - /** - * 微信消息处理 - * @param requestBody 请求报文体 - * @param signature 微信签名 - * @param encType 加签方式 - * @param msgSignature 微信签名 - * @param timestamp 时间戳 - * @param nonce 随机数 - */ - @PostMapping(produces = "application/xml; charset=UTF-8") - public String post(@RequestBody String requestBody, String signature, String timestamp, String nonce, String openid, - @RequestParam(name = "encrypt_type", required = false) String encType, - @RequestParam(name = "msg_signature", required = false) String msgSignature) { - return weChatPortalService.handleMessage(requestBody, signature, timestamp, nonce, openid, encType, - msgSignature); - } - -} diff --git a/bootx-platform/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/controller/WeChatQrLoginController.java b/bootx-platform/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/controller/WeChatQrLoginController.java deleted file mode 100644 index 825f5630..00000000 --- a/bootx-platform/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/controller/WeChatQrLoginController.java +++ /dev/null @@ -1,43 +0,0 @@ -package cn.bootx.platform.starter.wechat.controller; - -import cn.bootx.platform.common.core.annotation.IgnoreAuth; -import cn.bootx.platform.common.core.rest.Res; -import cn.bootx.platform.common.core.rest.ResResult; -import cn.bootx.platform.starter.wechat.core.login.service.WeChatQrLoginService; -import cn.bootx.platform.starter.wechat.dto.login.WeChatLoginQrCode; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -/** - * 微信 - * - * @author xxm - * @since 2022/8/4 - */ -@IgnoreAuth -@Tag(name = "微信扫码登录") -@RestController -@RequestMapping("/token/wechat/qr") -@RequiredArgsConstructor -public class WeChatQrLoginController { - - private final WeChatQrLoginService weChatQrLoginService; - - @Operation(summary = "申请登录用QR码") - @PostMapping("/applyQrCode") - public ResResult applyQrCode() { - return Res.ok(weChatQrLoginService.applyQrCode()); - } - - @Operation(summary = "获取扫码状态") - @GetMapping("/getStatus") - public ResResult getStatus(String qrCodeKey) { - return Res.ok(weChatQrLoginService.getStatus(qrCodeKey)); - } - -} diff --git a/bootx-platform/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/controller/WeChatTemplateController.java b/bootx-platform/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/controller/WeChatTemplateController.java deleted file mode 100644 index d618de59..00000000 --- a/bootx-platform/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/controller/WeChatTemplateController.java +++ /dev/null @@ -1,62 +0,0 @@ -package cn.bootx.platform.starter.wechat.controller; - -import cn.bootx.platform.common.core.rest.PageResult; -import cn.bootx.platform.common.core.rest.Res; -import cn.bootx.platform.common.core.rest.ResResult; -import cn.bootx.platform.common.core.rest.param.PageParam; -import cn.bootx.platform.starter.auth.util.SecurityUtil; -import cn.bootx.platform.starter.wechat.core.notice.service.WeChatTemplateService; -import cn.bootx.platform.starter.wechat.dto.notice.WeChatTemplateDto; -import cn.bootx.platform.starter.wechat.param.notice.WeChatTemplateParam; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.*; - -/** - * @author xxm - * @since 2022/7/16 - */ -@Tag(name = "微信模板消息") -@RestController -@RequestMapping("/wechat/template") -@RequiredArgsConstructor -public class WeChatTemplateController { - - private final WeChatTemplateService weChatTemplateService; - - @Operation(summary = "修改") - @PostMapping(value = "/update") - public ResResult update(@RequestBody WeChatTemplateParam param) { - weChatTemplateService.update(param); - return Res.ok(); - } - - @Operation(summary = "通过ID查询") - @GetMapping(value = "/findById") - public ResResult findById(Long id) { - return Res.ok(weChatTemplateService.findById(id)); - } - - @Operation(summary = "分页查询") - @GetMapping(value = "/page") - public ResResult> page(PageParam pageParam, WeChatTemplateParam weChatTemplateParam) { - return Res.ok(weChatTemplateService.page(pageParam, weChatTemplateParam)); - } - - @Operation(summary = "编码是否被使用(不包含自己)") - @GetMapping("/existsByCodeNotId") - public ResResult existsByCode(String code, Long id) { - return Res.ok(weChatTemplateService.existsByCode(code, id)); - } - - @Operation(summary = "同步消息模板数据") - @PostMapping("/sync") - public ResResult sync() { - // 为了获取用户生效, 测试用 - SecurityUtil.getUserId(); - weChatTemplateService.sync(); - return Res.ok(); - } - -} diff --git a/bootx-platform/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/article/service/WeChatArticleService.java b/bootx-platform/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/article/service/WeChatArticleService.java deleted file mode 100644 index ade2a2b1..00000000 --- a/bootx-platform/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/article/service/WeChatArticleService.java +++ /dev/null @@ -1,43 +0,0 @@ -package cn.bootx.platform.starter.wechat.core.article.service; - -import cn.bootx.platform.common.core.rest.PageResult; -import cn.bootx.platform.common.core.rest.param.PageParam; -import cn.bootx.platform.starter.wechat.dto.article.WeChatArticleDto; -import lombok.RequiredArgsConstructor; -import lombok.SneakyThrows; -import lombok.extern.slf4j.Slf4j; -import lombok.val; -import me.chanjar.weixin.mp.api.WxMpService; -import org.springframework.stereotype.Service; - -import java.util.stream.Collectors; - -/** - * @author xxm - * @since 2022/8/11 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class WeChatArticleService { - - private final WxMpService wxMpService; - - /** - * 查询图文 - * @return - */ - @SneakyThrows - public PageResult page(PageParam pageParam) { - val freePublishService = wxMpService.getFreePublishService(); - val result = freePublishService.getPublicationRecords(pageParam.start(), pageParam.getSize()); - val items = result.getItems().stream().map(WeChatArticleDto::init).collect(Collectors.toList()); - PageResult pageResult = new PageResult<>(); - pageResult.setCurrent(pageParam.getCurrent()) - .setRecords(items) - .setSize(pageParam.getSize()) - .setTotal(result.getTotalCount()); - return pageResult; - } - -} diff --git a/bootx-platform/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/login/service/WeChatQrLoginService.java b/bootx-platform/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/login/service/WeChatQrLoginService.java deleted file mode 100644 index 19af0f27..00000000 --- a/bootx-platform/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/login/service/WeChatQrLoginService.java +++ /dev/null @@ -1,99 +0,0 @@ -package cn.bootx.platform.starter.wechat.core.login.service; - -import cn.bootx.platform.starter.auth.exception.LoginFailureException; -import cn.bootx.platform.common.redis.RedisClient; -import cn.bootx.platform.starter.wechat.dto.login.WeChatLoginQrCode; -import cn.hutool.core.util.IdUtil; -import cn.hutool.core.util.StrUtil; -import lombok.RequiredArgsConstructor; -import lombok.SneakyThrows; -import lombok.extern.slf4j.Slf4j; -import me.chanjar.weixin.mp.api.WxMpQrcodeService; -import me.chanjar.weixin.mp.api.WxMpService; -import me.chanjar.weixin.mp.bean.result.WxMpQrCodeTicket; -import org.springframework.stereotype.Service; - -import java.util.Objects; - -import static cn.bootx.platform.starter.wechat.code.WeChatCode.*; - -/** - * 扫码事件 - * - * @author xxm - * @since 2022/8/4 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class WeChatQrLoginService { - - private final RedisClient redisClient; - - private final WxMpService wxMpService; - - private final String PREFIX_KEY = "third:wechat:login:qr:"; - - /** - * 申请待扫描的二维码 - */ - @SneakyThrows - public WeChatLoginQrCode applyQrCode() { - WxMpQrcodeService qrcodeService = wxMpService.getQrcodeService(); - long timeout = 5 * 60 * 1000; - String qrCodeKey = IdUtil.getSnowflakeNextIdStr(); - // 创建微信临时Key, 需要有指定的前缀 - String wxKey = QRSCENE_LOGIN + qrCodeKey; - WxMpQrCodeTicket wxMpQrCodeTicket = qrcodeService.qrCodeCreateTmpTicket(wxKey, (int) timeout); - String url = wxMpQrCodeTicket.getUrl(); - redisClient.setWithTimeout(PREFIX_KEY + qrCodeKey, "", timeout); - return new WeChatLoginQrCode(qrCodeKey, url); - } - - /** - * 查询二维码状态 等待扫码/登录成功/过期 - */ - public String getStatus(String key) { - String openId = redisClient.get(PREFIX_KEY + key); - // 超时 - if (Objects.isNull(openId)) { - return QR_LOGIN_EXPIRED; - } - // 等待 - else if (StrUtil.isBlank(openId)) { - return QR_LOGIN_WAIT; - } - // 登录成功 - else { - return QR_LOGIN_OK; - } - } - - /** - * 设置微信openId - */ - public void setOpenId(String key, String openId) { - if (redisClient.exists(PREFIX_KEY + key)) { - redisClient.set(PREFIX_KEY + key, openId); - } - } - - /** - * 获取 openId - */ - public String getOpenId(String key) { - String openId = redisClient.get(PREFIX_KEY + key); - if (StrUtil.isBlank(openId)) { - throw new LoginFailureException("数据已过期或不存在"); - } - return openId; - } - - /** - * 清除扫码信息 - */ - public void clear(String key) { - redisClient.deleteKey(PREFIX_KEY + key); - } - -} diff --git a/bootx-platform/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/media/service/WeChatMediaService.java b/bootx-platform/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/media/service/WeChatMediaService.java deleted file mode 100644 index bfbb2095..00000000 --- a/bootx-platform/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/media/service/WeChatMediaService.java +++ /dev/null @@ -1,103 +0,0 @@ -package cn.bootx.platform.starter.wechat.core.media.service; - -import cn.bootx.platform.common.core.rest.PageResult; -import cn.bootx.platform.common.core.rest.param.PageParam; -import cn.bootx.platform.common.core.util.FileUtil; -import cn.bootx.platform.starter.wechat.dto.media.WeChatMediaDto; -import cn.hutool.core.io.FileTypeUtil; -import cn.hutool.core.io.IoUtil; -import cn.hutool.core.io.file.FileNameUtil; -import lombok.RequiredArgsConstructor; -import lombok.SneakyThrows; -import lombok.extern.slf4j.Slf4j; -import lombok.val; -import me.chanjar.weixin.common.api.WxConsts; -import me.chanjar.weixin.mp.api.WxMpMaterialService; -import me.chanjar.weixin.mp.api.WxMpService; -import me.chanjar.weixin.mp.bean.material.WxMpMaterial; -import me.chanjar.weixin.mp.bean.material.WxMpMaterialNewsBatchGetResult.WxMaterialNewsBatchGetNewsItem; -import org.springframework.stereotype.Service; -import org.springframework.web.multipart.MultipartFile; - -import java.io.ByteArrayInputStream; -import java.io.File; -import java.util.Objects; -import java.util.stream.Collectors; - -/** - * 素材管理 - * - * @author xxm - * @since 2022/8/9 - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class WeChatMediaService { - - private final WxMpService wxMpService; - - /** - * 分页查询 - */ - @SneakyThrows - public PageResult pageFile(PageParam pageParam, String type) { - WxMpMaterialService materialService = wxMpService.getMaterialService(); - val result = materialService.materialFileBatchGet(type, pageParam.start(), pageParam.getSize()); - // val result = new WxMpMaterialFileBatchGetResult(); - val items = result.getItems().stream().map(WeChatMediaDto::init).collect(Collectors.toList()); - PageResult pageResult = new PageResult<>(); - pageResult.setCurrent(pageParam.getCurrent()) - .setRecords(items) - .setSize(pageParam.getSize()) - .setTotal(result.getTotalCount()); - return pageResult; - } - - /** - * 分页查询(图文) - */ - @SneakyThrows - public PageResult pageNews(PageParam pageParam) { - WxMpMaterialService materialService = wxMpService.getMaterialService(); - val result = materialService.materialNewsBatchGet(pageParam.start(), pageParam.getSize()); - val items = result.getItems(); - PageResult pageResult = new PageResult<>(); - pageResult.setCurrent(pageParam.getCurrent()) - .setRecords(items) - .setSize(pageParam.getSize()) - .setTotal(result.getTotalCount()); - return pageResult; - } - - /** - * 删除素材 - */ - @SneakyThrows - public void deleteFile(String mediaId) { - WxMpMaterialService materialService = wxMpService.getMaterialService(); - materialService.materialDelete(mediaId); - } - - /** - * 上传 非图文素材 - * @see WxConsts.MediaFileType - */ - @SneakyThrows - public void uploadFile(String mediaType, MultipartFile multipartFile) { - WxMpMaterialService materialService = wxMpService.getMaterialService(); - byte[] bytes = IoUtil.readBytes(multipartFile.getInputStream()); - String originalFilename = multipartFile.getOriginalFilename(); - String fileName = FileNameUtil.mainName(originalFilename); - String fileType = FileTypeUtil.getType(new ByteArrayInputStream(bytes), originalFilename); - File tempFile = FileUtil.createTempFile(new ByteArrayInputStream(bytes), fileName, fileType); - WxMpMaterial material = new WxMpMaterial(); - material.setFile(tempFile); - if (Objects.equals(mediaType, WxConsts.MediaFileType.VIDEO)) { - material.setVideoTitle(fileName); - material.setVideoIntroduction(fileName); - } - materialService.materialFileUpload(mediaType, material); - } - -} diff --git a/bootx-platform/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/menu/convert/WeChatMenuConvert.java b/bootx-platform/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/menu/convert/WeChatMenuConvert.java deleted file mode 100644 index 0b27d719..00000000 --- a/bootx-platform/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/menu/convert/WeChatMenuConvert.java +++ /dev/null @@ -1,30 +0,0 @@ -package cn.bootx.platform.starter.wechat.core.menu.convert; - -import cn.bootx.platform.starter.wechat.param.menu.WeChatMenuParam; -import cn.bootx.platform.starter.wechat.core.menu.domin.WeChatMenuInfo; -import cn.bootx.platform.starter.wechat.core.menu.entity.WeChatMenu; -import cn.bootx.platform.starter.wechat.dto.menu.WeChatMenuDto; -import me.chanjar.weixin.common.bean.menu.WxMenu; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -/** - * 微信自定义菜单 - * - * @author xxm - * @since 2022-08-08 - */ -@Mapper -public interface WeChatMenuConvert { - - WeChatMenuConvert CONVERT = Mappers.getMapper(WeChatMenuConvert.class); - - WeChatMenu convert(WeChatMenuParam in); - - WeChatMenuDto convert(WeChatMenu in); - - WeChatMenuInfo convert(WxMenu in); - - WxMenu convert(WeChatMenuInfo in); - -} diff --git a/bootx-platform/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/menu/dao/WeChatMenuManager.java b/bootx-platform/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/menu/dao/WeChatMenuManager.java deleted file mode 100644 index d60b693f..00000000 --- a/bootx-platform/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/menu/dao/WeChatMenuManager.java +++ /dev/null @@ -1,42 +0,0 @@ -package cn.bootx.platform.starter.wechat.core.menu.dao; - -import cn.bootx.platform.starter.wechat.core.menu.entity.WeChatMenu; -import cn.bootx.platform.starter.wechat.param.menu.WeChatMenuParam; -import cn.bootx.platform.common.core.rest.param.PageParam; -import cn.bootx.platform.common.mybatisplus.base.MpIdEntity; -import cn.bootx.platform.common.mybatisplus.impl.BaseManager; -import cn.bootx.platform.common.mybatisplus.util.MpUtil; -import cn.hutool.core.util.StrUtil; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Repository; - -/** - * 微信自定义菜单 - * - * @author xxm - * @since 2022-08-08 - */ -@Repository -@RequiredArgsConstructor -public class WeChatMenuManager extends BaseManager { - - /** - * 分页 - */ - public Page page(PageParam pageParam, WeChatMenuParam param) { - Page mpPage = MpUtil.getMpPage(pageParam, WeChatMenu.class); - return lambdaQuery().select(this.getEntityClass(), MpUtil::excludeBigField) - .like(StrUtil.isNotBlank(param.getName()), WeChatMenu::getName, param.getName()) - .orderByDesc(MpIdEntity::getId) - .page(mpPage); - } - - /** - * 清除其他发布状态 - */ - public void clearPublish() { - lambdaUpdate().eq(WeChatMenu::isPublish, true).set(WeChatMenu::isPublish, false).update(); - } - -} diff --git a/bootx-platform/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/menu/dao/WeChatMenuMapper.java b/bootx-platform/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/menu/dao/WeChatMenuMapper.java deleted file mode 100644 index 6934ab0e..00000000 --- a/bootx-platform/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/menu/dao/WeChatMenuMapper.java +++ /dev/null @@ -1,16 +0,0 @@ -package cn.bootx.platform.starter.wechat.core.menu.dao; - -import cn.bootx.platform.starter.wechat.core.menu.entity.WeChatMenu; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.apache.ibatis.annotations.Mapper; - -/** - * 微信自定义菜单 - * - * @author xxm - * @since 2022-08-08 - */ -@Mapper -public interface WeChatMenuMapper extends BaseMapper { - -} diff --git a/bootx-platform/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/menu/domin/WeChatMenuInfo.java b/bootx-platform/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/menu/domin/WeChatMenuInfo.java deleted file mode 100644 index aeb482c9..00000000 --- a/bootx-platform/bootx-common-starters/common-starter-wechat/src/main/java/cn/bootx/platform/starter/wechat/core/menu/domin/WeChatMenuInfo.java +++ /dev/null @@ -1,164 +0,0 @@ -package cn.bootx.platform.starter.wechat.core.menu.domin; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.experimental.Accessors; -import me.chanjar.weixin.common.bean.menu.WxMenu; -import me.chanjar.weixin.common.bean.menu.WxMenuButton; -import me.chanjar.weixin.mp.bean.menu.WxMpMenu; - -import java.util.ArrayList; -import java.util.List; -import java.util.stream.Collectors; - -/** - * 微信自定义菜单 - * - * @author xxm - * @since 2022/8/8 - */ -@Data -@Accessors(chain = true) -@Schema(title = "微信自定义菜单") -public class WeChatMenuInfo { - - private List