From b5b152b230f2005a1d3da387b7324bb3e8968295 Mon Sep 17 00:00:00 2001 From: chandler <1915724901@qq.com> Date: Mon, 23 Dec 2024 22:00:13 +0800 Subject: [PATCH] =?UTF-8?q?feat(0):=20[java]-[wechat-ferry-mvn]-=E6=B6=88?= =?UTF-8?q?=E6=81=AF=E8=BD=AC=E5=8F=91=E9=80=82=E9=85=8D=E5=A4=9A=E7=A7=8D?= =?UTF-8?q?=E6=B6=88=E6=81=AF=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ferry/controller/WeChatDllController.java | 14 +- .../wechat/ferry/enums/MsgFwdTypeEnum.java | 59 +++++++++ .../ferry/service/WeChatDllService.java | 20 +-- .../service/impl/WeChatDllServiceImpl.java | 124 +++++++++++++----- 4 files changed, 168 insertions(+), 49 deletions(-) create mode 100644 clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/enums/MsgFwdTypeEnum.java diff --git a/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/controller/WeChatDllController.java b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/controller/WeChatDllController.java index 4b88a94..c52f92a 100644 --- a/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/controller/WeChatDllController.java +++ b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/controller/WeChatDllController.java @@ -93,13 +93,6 @@ public class WeChatDllController { return TResponse.ok(ResponseCodeEnum.SUCCESS, list); } - @ApiOperation(value = "获取可查询数据库", notes = "queryDatabaseSql") - @PostMapping(value = "/list/dbSql") - public TResponse> queryDatabaseSql(@Validated @RequestBody WxPpWcfDatabaseSqlReq request) { - List list = weChatDllService.queryDatabaseSql(request); - return TResponse.ok(ResponseCodeEnum.SUCCESS, list); - } - @ApiOperation(value = "获取数据库所有表名称", notes = "queryDatabaseAllTableName") @PostMapping(value = "/list/dbTableName") public TResponse> queryDatabaseAllTableName() { @@ -107,6 +100,13 @@ public class WeChatDllController { return TResponse.ok(ResponseCodeEnum.SUCCESS, list); } + @ApiOperation(value = "获取可查询数据库", notes = "queryDatabaseSql") + @PostMapping(value = "/list/dbSql") + public TResponse> queryDatabaseSql(@Validated @RequestBody WxPpWcfDatabaseSqlReq request) { + List list = weChatDllService.queryDatabaseSql(request); + return TResponse.ok(ResponseCodeEnum.SUCCESS, list); + } + @ApiOperation(value = "获取指定数据库中的表", notes = "queryDatabaseTable") @PostMapping(value = "/list/dbTable") public TResponse> queryDatabaseTable(@Validated @RequestBody WxPpWcfDatabaseTableReq request) { diff --git a/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/enums/MsgFwdTypeEnum.java b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/enums/MsgFwdTypeEnum.java new file mode 100644 index 0000000..c9a7648 --- /dev/null +++ b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/enums/MsgFwdTypeEnum.java @@ -0,0 +1,59 @@ +package com.wechat.ferry.enums; + +import java.util.Arrays; +import java.util.Map; +import java.util.stream.Collectors; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 枚举-消息转发开关 + * 1-关闭 2-全转发 3-发送成功才转发 + * + * @author chandler + * @date 2024/10/01 15:42 + */ +@Getter +@AllArgsConstructor +public enum MsgFwdTypeEnum { + + /** + * 1-关闭 + */ + CLOSE("1", "关闭"), + + /** + * 2-全转发 + */ + ALL("2", "全转发"), + + /** + * 3-发送成功才转发 + */ + SUCCESS("3", "发送成功才转发"), + + /** + * 未匹配上 + */ + UN_MATCH("", null), + + // 结束 + ; + + private final String code; + private final String name; + + /** + * map集合 key:code val:枚举 + */ + public static final Map codeMap = Arrays.stream(values()).collect(Collectors.toMap(MsgFwdTypeEnum::getCode, v -> v)); + + /** + * 根据code获取枚举 + */ + public static MsgFwdTypeEnum getCodeMap(String code) { + return codeMap.getOrDefault(code, UN_MATCH); + } + +} diff --git a/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/service/WeChatDllService.java b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/service/WeChatDllService.java index 932baaa..4284f45 100644 --- a/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/service/WeChatDllService.java +++ b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/service/WeChatDllService.java @@ -83,6 +83,16 @@ public interface WeChatDllService { */ List queryContactsList(); + /** + * 获取数据库所有表名称 + * + * @return 数据库名称列表 + * + * @author chandler + * @date 2024-10-02 17:53 + */ + List queryDatabaseAllTableName(); + /** * 获取可查询数据库 * @@ -94,16 +104,6 @@ public interface WeChatDllService { */ List queryDatabaseSql(WxPpWcfDatabaseSqlReq request); - /** - * 获取数据库所有表名称 - * - * @return 数据库名称列表 - * - * @author chandler - * @date 2024-10-02 17:53 - */ - List queryDatabaseAllTableName(); - /** * 获取数据库表 * diff --git a/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/service/impl/WeChatDllServiceImpl.java b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/service/impl/WeChatDllServiceImpl.java index a0c717d..6cf4feb 100644 --- a/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/service/impl/WeChatDllServiceImpl.java +++ b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/service/impl/WeChatDllServiceImpl.java @@ -45,6 +45,7 @@ import com.wechat.ferry.entity.vo.response.WxPpWcfSendPatOnePatMsgResp; import com.wechat.ferry.entity.vo.response.WxPpWcfSendRichTextMsgResp; import com.wechat.ferry.entity.vo.response.WxPpWcfSendTextMsgResp; import com.wechat.ferry.entity.vo.response.WxPpWcfSendXmlMsgResp; +import com.wechat.ferry.enums.MsgFwdTypeEnum; import com.wechat.ferry.enums.SexEnum; import com.wechat.ferry.enums.WxContactsTypeEnum; import com.wechat.ferry.handle.WeChatSocketClient; @@ -215,25 +216,18 @@ public class WeChatDllServiceImpl implements WeChatDllService { return list; } + @Override + public List queryDatabaseAllTableName() { + List list = wechatSocketClient.getDbNames(); + log.info("[查询]-[数据库名称列表]-共查到:{}条", list.size()); + return list; + } + @Override public List queryDatabaseSql(WxPpWcfDatabaseSqlReq request) { List list = new ArrayList<>(); List wcfList = wechatSocketClient.querySql(request.getDatabaseName(), request.getSqlText()); if (!CollectionUtils.isEmpty(wcfList)) { - // List> result = new ArrayList<>(); - // // 获取指定的行 - // for (Wcf.DbRow row : wcfList) { - // Map rowMap = new HashMap<>(); - // // 遍历每一列 - // for (Wcf.DbField field : row.getFieldsList()) { - // ByteString content = field.getContent(); - // String column = field.getColumn(); - // int type = field.getType(); - // rowMap.put(column, converterSqlVal(type, content)); - // } - // result.add(rowMap); - // } - for (Wcf.DbRow dbRow : wcfList) { WxPpWcfDatabaseRowResp rowVo = new WxPpWcfDatabaseRowResp(); List fieldVoList = new ArrayList<>(); @@ -249,14 +243,7 @@ public class WeChatDllServiceImpl implements WeChatDllService { list.add(rowVo); } } - log.info("[查询]-[联系人]-wcfList:{}", wcfList); - return list; - } - - @Override - public List queryDatabaseAllTableName() { - List list = wechatSocketClient.getDbNames(); - log.info("[查询]-[数据库名称列表]-共查到:{}条", list.size()); + log.info("[查询]-[获取可查询数据库]-wcfList:{}", wcfList); return list; } @@ -264,7 +251,7 @@ public class WeChatDllServiceImpl implements WeChatDllService { public List queryDatabaseTable(WxPpWcfDatabaseTableReq request) { log.info("[查询]-[查询表]-request:{}", request); Map wcfMap = wechatSocketClient.getDbTables(request.getDatabaseName()); - + // TODO 待建模 log.info("[查询]-[查询表]-查到:{}", wcfMap); return Collections.emptyList(); } @@ -323,7 +310,6 @@ public class WeChatDllServiceImpl implements WeChatDllService { } vo.setGroupNickName(nickName); vo.setState(String.valueOf(member.getState())); - // TODO 待补充 list.add(vo); } } catch (InvalidProtocolBufferException e) { @@ -356,13 +342,7 @@ public class WeChatDllServiceImpl implements WeChatDllService { log.info("[发送消息]-[文本消息]-处理结束"); // 转发处理 String stringJson = JSON.toJSONString(request); - if ("2".equals(weChatFerryProperties.getSendMsgFwdFlag())) { - // 不管消息是否发送成功均转发 - sendMsgForward(stringJson); - } else if ("3".equals(weChatFerryProperties.getSendMsgFwdFlag()) && 0 == state) { - // 发送成功才转发 - sendMsgForward(stringJson); - } + sendMsgForward(stringJson, state); return null; } @@ -370,18 +350,27 @@ public class WeChatDllServiceImpl implements WeChatDllService { public WxPpWcfSendImageMsgResp sendImageMsg(WxPpWcfSendImageMsgReq request) { WxPpWcfSendImageMsgResp resp = new WxPpWcfSendImageMsgResp(); int state = wechatSocketClient.sendImage(request.getResourcePath(), request.getRecipient()); + // 转发处理 + String stringJson = JSON.toJSONString(request); + sendMsgForward(stringJson, state); return null; } @Override public WxPpWcfSendFileMsgResp sendFileMsg(WxPpWcfSendFileMsgReq request) { int state = wechatSocketClient.sendFile(request.getResourcePath(), request.getRecipient()); + // 转发处理 + String stringJson = JSON.toJSONString(request); + sendMsgForward(stringJson, state); return null; } @Override public WxPpWcfSendXmlMsgResp sendXmlMsg(WxPpWcfSendXmlMsgReq request) { int state = wechatSocketClient.sendXml(request.getRecipient(), request.getXmlContent(), request.getResourcePath(), request.getXmlType()); + // 转发处理 + String stringJson = JSON.toJSONString(request); + sendMsgForward(stringJson, state); return null; } @@ -389,6 +378,9 @@ public class WeChatDllServiceImpl implements WeChatDllService { @Override public WxPpWcfSendEmojiMsgResp sendEmojiMsg(WxPpWcfSendEmojiMsgReq request) { int state = wechatSocketClient.sendEmotion(request.getResourcePath(), request.getRecipient()); + // 转发处理 + String stringJson = JSON.toJSONString(request); + sendMsgForward(stringJson, state); return null; } @@ -399,6 +391,10 @@ public class WeChatDllServiceImpl implements WeChatDllService { .build(); Wcf.Request wcfReq = Wcf.Request.newBuilder().setFuncValue(Wcf.Functions.FUNC_SEND_RICH_TXT_VALUE).setRt(richTextMsg).build(); Wcf.Response rsp = wechatSocketClient.sendCmd(wcfReq); + int state = judgeState(rsp); + // 转发处理 + String stringJson = JSON.toJSONString(request); + sendMsgForward(stringJson, state); return null; } @@ -407,9 +403,23 @@ public class WeChatDllServiceImpl implements WeChatDllService { Wcf.PatMsg patMsg = Wcf.PatMsg.newBuilder().setRoomid(request.getRecipient()).setWxid(request.getPatUser()).build(); Wcf.Request wcfReq = Wcf.Request.newBuilder().setFuncValue(Wcf.Functions.FUNC_SEND_PAT_MSG_VALUE).setPm(patMsg).build(); Wcf.Response rsp = wechatSocketClient.sendCmd(wcfReq); + int state = judgeState(rsp); + // 转发处理 + String stringJson = JSON.toJSONString(request); + sendMsgForward(stringJson, state); return null; } + /** + * 获取SQL类型 + * + * @return 函数 + * + * @param type 转换类型 + * + * @author chandler + * @date 2024-10-05 12:54 + */ public Function getSqlType(int type) { Map> sqlTypeMap = new HashMap<>(); // 初始化SQL_TYPES 根据类型执行不同的Func @@ -421,6 +431,15 @@ public class WeChatDllServiceImpl implements WeChatDllService { return sqlTypeMap.get(type); } + /** + * SQL转换类型 + * + * @param type 转换类型 + * @param content 待转换内容 + * + * @author chandler + * @date 2024-10-05 12:54 + */ public Object converterSqlVal(int type, ByteString content) { // 根据每一列的类型转换 Function converter = getSqlType(type); @@ -453,7 +472,22 @@ public class WeChatDllServiceImpl implements WeChatDllService { return atUserStr; } - private void sendMsgForward(String jsonString) { + /** + * 消息转发 + * + * @param jsonString json数据 + * @param state cmd调用状态 + * + * @author chandler + * @date 2024-10-10 23:10 + */ + private void sendMsgForward(String jsonString, Integer state) { + // 根据配置文件决定是否转发 + if (MsgFwdTypeEnum.CLOSE.getCode().equals(weChatFerryProperties.getSendMsgFwdFlag()) + || (MsgFwdTypeEnum.SUCCESS.getCode().equals(weChatFerryProperties.getSendMsgFwdFlag()) && 0 != state)) { + // 如果是关闭 或者 配置为成功才转发但发送状态为失败 的情况则取消发送 + return; + } // 开启转发,且转发地址不为空 if (!CollectionUtils.isEmpty(weChatFerryProperties.getSendMsgFwdUrls())) { for (String receiveMsgFwdUrl : weChatFerryProperties.getSendMsgFwdUrls()) { @@ -473,6 +507,15 @@ public class WeChatDllServiceImpl implements WeChatDllService { } } + /** + * 判断调用第三方服务客户端成功状态码 + * + * @param responseStr 响应参数 + * @return 状态 + * + * @author chandler + * @date 2024-10-10 00:10 + */ private Boolean judgeSuccess(String responseStr) { // 默认为通过 boolean passFlag = false; @@ -491,4 +534,21 @@ public class WeChatDllServiceImpl implements WeChatDllService { return passFlag; } + /** + * 判断CMD调用状态 + * + * @param rsp 响应参数 + * @return 状态 + * + * @author chandler + * @date 2024-12-23 21:53 + */ + private int judgeState(Wcf.Response rsp) { + int state = -1; + if (rsp != null) { + state = rsp.getStatus(); + } + return state; + } + }