From 97d233bf5d270946e76b367e67c2c32a1478240e Mon Sep 17 00:00:00 2001 From: chandler <1915724901@qq.com> Date: Tue, 24 Dec 2024 20:50:45 +0800 Subject: [PATCH] =?UTF-8?q?fix(0):=20[java]-[mvn]-=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E8=B0=83=E7=94=A8=E6=8A=A5=E9=94=99=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- clients/java/wechat-ferry-mvn/CHANGELOG.md | 2 +- .../ferry/config/WeChatConfiguration.java | 2 +- .../vo/request/WxPpWcfSendXmlMsgReq.java | 4 +-- .../vo/response/WxPpWcfDatabaseFieldResp.java | 2 +- .../ferry/enums/WxContactsMixedEnum.java | 17 +++++++++-- .../ferry/enums/WxContactsOfficialEnum.java | 14 ++++++++-- .../service/impl/WeChatDllServiceImpl.java | 28 +++++++++++++------ 7 files changed, 50 insertions(+), 19 deletions(-) diff --git a/clients/java/wechat-ferry-mvn/CHANGELOG.md b/clients/java/wechat-ferry-mvn/CHANGELOG.md index ac413e1..cf6c553 100644 --- a/clients/java/wechat-ferry-mvn/CHANGELOG.md +++ b/clients/java/wechat-ferry-mvn/CHANGELOG.md @@ -19,7 +19,7 @@ | 发送XML消息 | /send/xmlMsg | ? | 待测试 | | 发送图片消息 | /send/imageMsg | √ | 已测试 | | 发送表情消息 | /send/emojiMsg | x | 该版本不支持 | -| 发送文件消息 | /send/fileMsg | ? | 待测试 | +| 发送文件消息 | /send/fileMsg | x | 该版本不支持 | | 拍一拍群友 | /patOnePat | √ | 已测试 | ### 已知BUG diff --git a/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/config/WeChatConfiguration.java b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/config/WeChatConfiguration.java index b2bf852..2e9b673 100644 --- a/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/config/WeChatConfiguration.java +++ b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/config/WeChatConfiguration.java @@ -48,7 +48,7 @@ public class WeChatConfiguration { // client.printContacts(client.getContacts()); // 获取数据库 - log.info("dbs: {}", wechatSocketClient.getDbNames()); + // log.info("dbs: {}", wechatSocketClient.getDbNames()); // 获取数据库下的表 String db = "MicroMsg.db"; diff --git a/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/entity/vo/request/WxPpWcfSendXmlMsgReq.java b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/entity/vo/request/WxPpWcfSendXmlMsgReq.java index 3739d94..00c5e6b 100644 --- a/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/entity/vo/request/WxPpWcfSendXmlMsgReq.java +++ b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/entity/vo/request/WxPpWcfSendXmlMsgReq.java @@ -40,10 +40,10 @@ public class WxPpWcfSendXmlMsgReq { private String resourcePath; /** - * XML类型,如:0x21 为小程序 + * XML类型,如:21 为小程序 */ @NotNull(message = "XML类型不能为空") @ApiModelProperty(value = "XML类型") - private Integer xmlType; + private String xmlType; } diff --git a/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/entity/vo/response/WxPpWcfDatabaseFieldResp.java b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/entity/vo/response/WxPpWcfDatabaseFieldResp.java index b8d461e..e7d050b 100644 --- a/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/entity/vo/response/WxPpWcfDatabaseFieldResp.java +++ b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/entity/vo/response/WxPpWcfDatabaseFieldResp.java @@ -30,6 +30,6 @@ public class WxPpWcfDatabaseFieldResp { * 字段值 */ @ApiModelProperty(value = "字段值") - private String value; + private Object value; } diff --git a/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/enums/WxContactsMixedEnum.java b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/enums/WxContactsMixedEnum.java index 7337ff8..b3775a0 100644 --- a/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/enums/WxContactsMixedEnum.java +++ b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/enums/WxContactsMixedEnum.java @@ -1,9 +1,12 @@ package com.wechat.ferry.enums; import java.util.Arrays; +import java.util.HashMap; import java.util.Map; import java.util.stream.Collectors; +import org.springframework.util.ObjectUtils; + import lombok.AllArgsConstructor; import lombok.Getter; @@ -61,7 +64,8 @@ public enum WxContactsMixedEnum { /** * map集合 key:code val:枚举 */ - public static final Map codeMap = Arrays.stream(values()).collect(Collectors.toMap(WxContactsMixedEnum::getCode, v -> v)); + public static final Map codeMap = + Arrays.stream(values()).collect(Collectors.toMap(WxContactsMixedEnum::getCode, v -> v)); /** * 根据code获取枚举 @@ -73,7 +77,14 @@ public enum WxContactsMixedEnum { /** * map集合 key:code val:名称 */ - public static final Map codeNameMap = Arrays.stream(values()).collect(Collectors.toMap(WxContactsMixedEnum::getCode, v -> v.name)); - + public static Map toCodeNameMap() { + Map map = new HashMap<>(); + for (WxContactsMixedEnum val : WxContactsMixedEnum.values()) { + if (!ObjectUtils.isEmpty(val.getCode())) { + map.put(val.getCode(), val.getName()); + } + } + return map; + } } diff --git a/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/enums/WxContactsOfficialEnum.java b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/enums/WxContactsOfficialEnum.java index 8c8fe92..4bba47a 100644 --- a/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/enums/WxContactsOfficialEnum.java +++ b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/enums/WxContactsOfficialEnum.java @@ -1,9 +1,12 @@ package com.wechat.ferry.enums; import java.util.Arrays; +import java.util.HashMap; import java.util.Map; import java.util.stream.Collectors; +import org.springframework.util.ObjectUtils; + import lombok.AllArgsConstructor; import lombok.Getter; @@ -69,7 +72,14 @@ public enum WxContactsOfficialEnum { /** * map集合 key:code val:名称 */ - public static final Map codeNameMap = - Arrays.stream(values()).collect(Collectors.toMap(WxContactsOfficialEnum::getCode, v -> v.name)); + public static Map toCodeNameMap() { + Map map = new HashMap<>(); + for (WxContactsOfficialEnum val : WxContactsOfficialEnum.values()) { + if (!ObjectUtils.isEmpty(val.getCode())) { + map.put(val.getCode(), val.getName()); + } + } + return map; + } } 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 922bf5e..6a2b61c 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 @@ -3,7 +3,6 @@ package com.wechat.ferry.service.impl; import java.nio.ByteBuffer; import java.nio.charset.StandardCharsets; import java.util.ArrayList; -import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -176,10 +175,10 @@ public class WeChatDllServiceImpl implements WeChatDllService { // 微信类型 if (!ObjectUtils.isEmpty(rpcContact.getWxid())) { // 官方杂号集合 - Map mixedNoMap = WxContactsMixedEnum.codeNameMap; + Map mixedNoMap = WxContactsMixedEnum.toCodeNameMap(); mixedNoMap.putAll(convertContactsTypeProperties(weChatFerryProperties.getContactsTypeMixed())); // 公众号 - Map officialMap = WxContactsOfficialEnum.codeNameMap; + Map officialMap = WxContactsOfficialEnum.toCodeNameMap(); officialMap.putAll(convertContactsTypeProperties(weChatFerryProperties.getContactsTypeOfficial())); // 类型判断,存在优先级的,官方杂号优先级高于微信公众号(如果定义重复了,常规禁止重复,手机端和电脑端分类不同) @@ -248,7 +247,7 @@ public class WeChatDllServiceImpl implements WeChatDllService { } long endTime = System.currentTimeMillis(); log.info("[查询]-[数据库表列表]-共查到:{}条,耗时:{}ms", list.size(), (endTime - startTime)); - return Collections.emptyList(); + return list; } @Override @@ -262,9 +261,15 @@ public class WeChatDllServiceImpl implements WeChatDllService { List fieldVoList = new ArrayList<>(); for (Wcf.DbField dbField : dbRow.getFieldsList()) { WxPpWcfDatabaseFieldResp fieldVo = new WxPpWcfDatabaseFieldResp(); + Object value; + if (ObjectUtils.isEmpty(dbField.getType())) { + log.warn("未知的SQL类型: {}", dbField.getType()); + value = dbField.getContent().toByteArray(); + } else { + value = convertSqlVal(dbField.getType(), dbField.getContent()); + } fieldVo.setType(String.valueOf(dbField.getType())); fieldVo.setColumn(dbField.getColumn()); - String value = (String)converterSqlVal(dbField.getType(), dbField.getContent()); fieldVo.setValue(value); fieldVoList.add(fieldVo); } @@ -298,11 +303,11 @@ public class WeChatDllServiceImpl implements WeChatDllService { for (Wcf.DbField dbField : dbFieldList) { if ("UserName".equals(dbField.getColumn())) { vo = new WxPpWcfGroupMemberResp(); - String content = (String)converterSqlVal(dbField.getType(), dbField.getContent()); + String content = (String)convertSqlVal(dbField.getType(), dbField.getContent()); vo.setWeChatUid(content); } if ("NickName".equals(dbField.getColumn())) { - String content = (String)converterSqlVal(dbField.getType(), dbField.getContent()); + String content = (String)convertSqlVal(dbField.getType(), dbField.getContent()); vo.setGroupNickName(content); dbMap.put(vo.getWeChatUid(), vo.getGroupNickName()); } @@ -398,8 +403,13 @@ public class WeChatDllServiceImpl implements WeChatDllService { public WxPpWcfSendXmlMsgResp sendXmlMsg(WxPpWcfSendXmlMsgReq request) { long startTime = System.currentTimeMillis(); log.info("[发送消息]-[XML消息]-入参打印:{}", request); + int xmlType = 0x21; + if ("21".equals(request.getXmlType())) { + // 小程序 + xmlType = 0x21; + } Wcf.XmlMsg xmlMsg = Wcf.XmlMsg.newBuilder().setContent(request.getXmlContent()).setReceiver(request.getRecipient()) - .setPath(request.getResourcePath()).setType(request.getXmlType()).build(); + .setPath(request.getResourcePath()).setType(xmlType).build(); Wcf.Request req = Wcf.Request.newBuilder().setFuncValue(Wcf.Functions.FUNC_SEND_XML_VALUE).setXml(xmlMsg).build(); log.debug("sendXml: {}", wechatSocketClient.bytesToHex(req.toByteArray())); Wcf.Response rsp = wechatSocketClient.sendCmd(req); @@ -510,7 +520,7 @@ public class WeChatDllServiceImpl implements WeChatDllService { * @author chandler * @date 2024-10-05 12:54 */ - public Object converterSqlVal(int type, ByteString content) { + public Object convertSqlVal(int type, ByteString content) { // 根据每一列的类型转换 Function converter = getSqlType(type); if (converter != null) {