feat(0): [java]-[wechat-ferry-mvn]-消息转发适配多种消息类型
This commit is contained in:
parent
01343d0c53
commit
b5b152b230
@ -93,13 +93,6 @@ public class WeChatDllController {
|
||||
return TResponse.ok(ResponseCodeEnum.SUCCESS, list);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "获取可查询数据库", notes = "queryDatabaseSql")
|
||||
@PostMapping(value = "/list/dbSql")
|
||||
public TResponse<List<WxPpWcfDatabaseRowResp>> queryDatabaseSql(@Validated @RequestBody WxPpWcfDatabaseSqlReq request) {
|
||||
List<WxPpWcfDatabaseRowResp> list = weChatDllService.queryDatabaseSql(request);
|
||||
return TResponse.ok(ResponseCodeEnum.SUCCESS, list);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "获取数据库所有表名称", notes = "queryDatabaseAllTableName")
|
||||
@PostMapping(value = "/list/dbTableName")
|
||||
public TResponse<List<String>> queryDatabaseAllTableName() {
|
||||
@ -107,6 +100,13 @@ public class WeChatDllController {
|
||||
return TResponse.ok(ResponseCodeEnum.SUCCESS, list);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "获取可查询数据库", notes = "queryDatabaseSql")
|
||||
@PostMapping(value = "/list/dbSql")
|
||||
public TResponse<List<WxPpWcfDatabaseRowResp>> queryDatabaseSql(@Validated @RequestBody WxPpWcfDatabaseSqlReq request) {
|
||||
List<WxPpWcfDatabaseRowResp> list = weChatDllService.queryDatabaseSql(request);
|
||||
return TResponse.ok(ResponseCodeEnum.SUCCESS, list);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "获取指定数据库中的表", notes = "queryDatabaseTable")
|
||||
@PostMapping(value = "/list/dbTable")
|
||||
public TResponse<List<String>> queryDatabaseTable(@Validated @RequestBody WxPpWcfDatabaseTableReq request) {
|
||||
|
59
clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/enums/MsgFwdTypeEnum.java
vendored
Normal file
59
clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/enums/MsgFwdTypeEnum.java
vendored
Normal file
@ -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<String, MsgFwdTypeEnum> codeMap = Arrays.stream(values()).collect(Collectors.toMap(MsgFwdTypeEnum::getCode, v -> v));
|
||||
|
||||
/**
|
||||
* 根据code获取枚举
|
||||
*/
|
||||
public static MsgFwdTypeEnum getCodeMap(String code) {
|
||||
return codeMap.getOrDefault(code, UN_MATCH);
|
||||
}
|
||||
|
||||
}
|
@ -83,6 +83,16 @@ public interface WeChatDllService {
|
||||
*/
|
||||
List<WxPpWcfContactsResp> queryContactsList();
|
||||
|
||||
/**
|
||||
* 获取数据库所有表名称
|
||||
*
|
||||
* @return 数据库名称列表
|
||||
*
|
||||
* @author chandler
|
||||
* @date 2024-10-02 17:53
|
||||
*/
|
||||
List<String> queryDatabaseAllTableName();
|
||||
|
||||
/**
|
||||
* 获取可查询数据库
|
||||
*
|
||||
@ -94,16 +104,6 @@ public interface WeChatDllService {
|
||||
*/
|
||||
List<WxPpWcfDatabaseRowResp> queryDatabaseSql(WxPpWcfDatabaseSqlReq request);
|
||||
|
||||
/**
|
||||
* 获取数据库所有表名称
|
||||
*
|
||||
* @return 数据库名称列表
|
||||
*
|
||||
* @author chandler
|
||||
* @date 2024-10-02 17:53
|
||||
*/
|
||||
List<String> queryDatabaseAllTableName();
|
||||
|
||||
/**
|
||||
* 获取数据库表
|
||||
*
|
||||
|
@ -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<String> queryDatabaseAllTableName() {
|
||||
List<String> list = wechatSocketClient.getDbNames();
|
||||
log.info("[查询]-[数据库名称列表]-共查到:{}条", list.size());
|
||||
return list;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<WxPpWcfDatabaseRowResp> queryDatabaseSql(WxPpWcfDatabaseSqlReq request) {
|
||||
List<WxPpWcfDatabaseRowResp> list = new ArrayList<>();
|
||||
List<Wcf.DbRow> wcfList = wechatSocketClient.querySql(request.getDatabaseName(), request.getSqlText());
|
||||
if (!CollectionUtils.isEmpty(wcfList)) {
|
||||
// List<Map<String, Object>> result = new ArrayList<>();
|
||||
// // 获取指定的行
|
||||
// for (Wcf.DbRow row : wcfList) {
|
||||
// Map<String, Object> 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<WxPpWcfDatabaseFieldResp> fieldVoList = new ArrayList<>();
|
||||
@ -249,14 +243,7 @@ public class WeChatDllServiceImpl implements WeChatDllService {
|
||||
list.add(rowVo);
|
||||
}
|
||||
}
|
||||
log.info("[查询]-[联系人]-wcfList:{}", wcfList);
|
||||
return list;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> queryDatabaseAllTableName() {
|
||||
List<String> list = wechatSocketClient.getDbNames();
|
||||
log.info("[查询]-[数据库名称列表]-共查到:{}条", list.size());
|
||||
log.info("[查询]-[获取可查询数据库]-wcfList:{}", wcfList);
|
||||
return list;
|
||||
}
|
||||
|
||||
@ -264,7 +251,7 @@ public class WeChatDllServiceImpl implements WeChatDllService {
|
||||
public List<String> queryDatabaseTable(WxPpWcfDatabaseTableReq request) {
|
||||
log.info("[查询]-[查询表]-request:{}", request);
|
||||
Map<String, String> 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<byte[], Object> getSqlType(int type) {
|
||||
Map<Integer, Function<byte[], Object>> 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<byte[], Object> 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;
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user