feat(0): [java]-[mvn]-1.本机消息回调方法名修改

2.公共方法提取至SocketClient
This commit is contained in:
chandler 2024-12-27 11:25:03 +08:00
parent 488eb58122
commit 571d722d94
3 changed files with 61 additions and 51 deletions

View File

@ -81,7 +81,7 @@ public class WeChatConfiguration {
// 只打印
// wechatSocketClient.printWxMsg(wechatSocketClient.getMsg());
// 转发到boot项目进行消息处理
wechatSocketClient.forwardMsg(wechatSocketClient.getMsg(), url);
wechatSocketClient.localCallbackAnalyzeMsg(wechatSocketClient.getMsg(), url);
}
}
});

View File

@ -1,14 +1,19 @@
package com.wechat.ferry.handle;
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.function.Function;
import org.springframework.util.ObjectUtils;
import com.alibaba.fastjson2.JSONObject;
import com.google.protobuf.ByteString;
import com.sun.jna.Native;
import com.wechat.ferry.entity.dto.WxPpMsgDTO;
import com.wechat.ferry.entity.proto.Wcf.DbQuery;
@ -310,7 +315,16 @@ public class WeChatSocketClient {
}
}
public void forwardMsg(WxMsg msg, String url) {
/**
* 本机回调解析消息
*
* @param msg 消息内容
* @param url 回调地址
*
* @author chandler
* @date 2024-10-05 12:50
*/
public void localCallbackAnalyzeMsg(WxMsg msg, String url) {
String xml = msg.getXml();
xml = xml.replaceAll(">[\\s\\p{Zs}]*<", "><");
String content = msg.getContent();
@ -358,10 +372,50 @@ public class WeChatSocketClient {
try {
String responseStr = HttpClientUtil.doPostJson(url, jsonString);
if (!JSONObject.parseObject(responseStr).getString("code").equals("200")) {
log.error("本机消息转发失败!-URL{}", url);
log.error("本机消息回调失败!-URL{}", url);
}
} catch (Exception e) {
log.error("转发接口报错:", e);
log.error("本机消息回调接口报错:", e);
}
}
/**
* 获取SQL类型
*
* @param type 转换类型
* @return 函数
*
* @author chandler
* @date 2024-10-05 12:54
*/
public Function<byte[], Object> getSqlType(int type) {
Map<Integer, Function<byte[], Object>> sqlTypeMap = new HashMap<>();
// 初始化SQL_TYPES 根据类型执行不同的Func
sqlTypeMap.put(1, bytes -> ByteBuffer.wrap(bytes).getInt());
sqlTypeMap.put(2, bytes -> ByteBuffer.wrap(bytes).getFloat());
sqlTypeMap.put(3, bytes -> new String(bytes, StandardCharsets.UTF_8));
sqlTypeMap.put(4, bytes -> bytes);
sqlTypeMap.put(5, bytes -> null);
return sqlTypeMap.get(type);
}
/**
* SQL转换类型
*
* @param type 转换类型
* @param content 待转换内容
*
* @author chandler
* @date 2024-10-05 12:54
*/
public Object convertSqlVal(int type, ByteString content) {
// 根据每一列的类型转换
Function<byte[], Object> converter = getSqlType(type);
if (converter != null) {
return converter.apply(content.toByteArray());
} else {
log.warn("[SQL转换类型]-未知的SQL类型: {}", type);
return content.toByteArray();
}
}

View File

@ -1,12 +1,9 @@
package com.wechat.ferry.service.impl;
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import javax.annotation.Resource;
@ -17,7 +14,6 @@ import org.springframework.util.ObjectUtils;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.google.protobuf.ByteString;
import com.google.protobuf.InvalidProtocolBufferException;
import com.wechat.ferry.config.WeChatFerryProperties;
import com.wechat.ferry.entity.proto.Wcf;
@ -272,7 +268,7 @@ public class WeChatDllServiceImpl implements WeChatDllService {
log.warn("未知的SQL类型: {}", dbField.getType());
value = dbField.getContent().toByteArray();
} else {
value = convertSqlVal(dbField.getType(), dbField.getContent());
value = wechatSocketClient.convertSqlVal(dbField.getType(), dbField.getContent());
}
fieldVo.setType(String.valueOf(dbField.getType()));
fieldVo.setColumn(dbField.getColumn());
@ -497,11 +493,11 @@ public class WeChatDllServiceImpl implements WeChatDllService {
for (Wcf.DbField dbField : dbFieldList) {
if ("UserName".equals(dbField.getColumn())) {
vo = new WxPpWcfGroupMemberResp();
String content = (String)convertSqlVal(dbField.getType(), dbField.getContent());
String content = (String)wechatSocketClient.convertSqlVal(dbField.getType(), dbField.getContent());
vo.setWeChatUid(content);
}
if ("NickName".equals(dbField.getColumn())) {
String content = (String)convertSqlVal(dbField.getType(), dbField.getContent());
String content = (String)wechatSocketClient.convertSqlVal(dbField.getType(), dbField.getContent());
vo.setGroupNickName(content);
dbMap.put(vo.getWeChatUid(), vo.getGroupNickName());
}
@ -613,46 +609,6 @@ public class WeChatDllServiceImpl implements WeChatDllService {
return "";
}
/**
* 获取SQL类型
*
* @param type 转换类型
* @return 函数
*
* @author chandler
* @date 2024-10-05 12:54
*/
public Function<byte[], Object> getSqlType(int type) {
Map<Integer, Function<byte[], Object>> sqlTypeMap = new HashMap<>();
// 初始化SQL_TYPES 根据类型执行不同的Func
sqlTypeMap.put(1, bytes -> ByteBuffer.wrap(bytes).getInt());
sqlTypeMap.put(2, bytes -> ByteBuffer.wrap(bytes).getFloat());
sqlTypeMap.put(3, bytes -> new String(bytes, StandardCharsets.UTF_8));
sqlTypeMap.put(4, bytes -> bytes);
sqlTypeMap.put(5, bytes -> null);
return sqlTypeMap.get(type);
}
/**
* SQL转换类型
*
* @param type 转换类型
* @param content 待转换内容
*
* @author chandler
* @date 2024-10-05 12:54
*/
public Object convertSqlVal(int type, ByteString content) {
// 根据每一列的类型转换
Function<byte[], Object> converter = getSqlType(type);
if (converter != null) {
return converter.apply(content.toByteArray());
} else {
log.warn("[SQL转换类型]-未知的SQL类型: {}", type);
return content.toByteArray();
}
}
/**
* 转换艾特用户
*