package com.java3y.austin.web.utils;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.ReflectUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.java3y.austin.common.enums.AnchorState;
import com.java3y.austin.common.enums.ChannelType;
import com.java3y.austin.common.enums.EnumUtil;
import com.java3y.austin.common.enums.SmsStatus;
import com.java3y.austin.support.domain.ChannelAccount;
import com.java3y.austin.support.domain.SmsRecord;
import com.java3y.austin.support.utils.TaskInfoUtils;
import com.java3y.austin.web.vo.amis.CommonAmisVo;
import com.java3y.austin.web.vo.amis.EchartsVo;
import com.java3y.austin.web.vo.amis.SmsTimeLineVo;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.bean.subscribemsg.TemplateInfo;
import me.chanjar.weixin.mp.bean.template.WxMpTemplate;
import java.lang.reflect.Field;
import java.util.*;
import java.util.stream.Collectors;
/**
* 【该类的逻辑不用看,没有什么意义】
* for Amis!!! amis框架在【表单】回显的时候,不支持嵌套动态语法!!
* 编写工具类将 List/Object 铺平成 Map 以及相关的格式
* https://baidu.gitee.io/amis/zh-CN/components/form/index#%E8%A1%A8%E5%8D%95%E9%A1%B9%E6%95%B0%E6%8D%AE%E5%88%9D%E5%A7%8B%E5%8C%96
*
* @author 3y
* @date 2022/1/23
*/
@Slf4j
public class Convert4Amis {
/**
* 标识忽略
*/
public static final int IGNORE_TG = 0;
/**
* 标识已读取到'$'字符
*/
public static final int START_TG = 1;
/**
* 标识已读取到'{'字符
*/
public static final int READ_TG = 2;
/**
* 需要打散的字段(将json字符串打散为一个一个字段返回)
* (主要是用于回显数据)
*/
private static final List<String> FLAT_FIELD_NAME = Arrays.asList("msgContent");
/**
* 需要格式化为jsonArray返回的字段
* (前端是一个JSONArray传递进来)
*/
private static final List<String> PARSE_JSON_ARRAY = Arrays.asList("feedCards", "btns", "articles");
/**
* (前端是一个JSONObject传递进来,返回一个JSONArray回去)
*/
private static final List<String> PARSE_JSON_OBJ_TO_ARRAY = Arrays.asList("officialAccountParam", "miniProgramParam");
/**
* 钉钉工作消息OA实际的映射
*/
private static final List<String> DING_DING_OA_FIELD = Arrays.asList("dingDingOaHead", "dingDingOaBody");
/**
* 钉钉OA字段名实际的映射
*/
private static final Map<String, String> DING_DING_OA_NAME_MAPPING = new HashMap<>();
static {
DING_DING_OA_NAME_MAPPING.put("bgcolor", "dingDingOaHeadBgColor");
DING_DING_OA_NAME_MAPPING.put("text", "dingDingOaHeadTitle");
DING_DING_OA_NAME_MAPPING.put("title", "dingDingOaTitle");
DING_DING_OA_NAME_MAPPING.put("image", "media_id");
DING_DING_OA_NAME_MAPPING.put("author", "dingDingOaAuthor");
DING_DING_OA_NAME_MAPPING.put("content", "dingDingOaContent");
}
/**
* 将List对象转换成Map(无嵌套)
*
* @param param
* @return
*/
public static <T> List<Map<String, Object>> flatListMap(List<T> param) {
List<Map<String, Object>> result = new ArrayList<>();
for (T t : param) {
Map<String, Object> map = flatSingleMap(t);
result.add(map);
}
return result;
}
/**
* 将单个对象转换成Map(无嵌套)
* <p>
* 主要兼容amis的回显(前端不用amis可忽略)
*
* @param obj
* @return
*/
public static Map<String, Object> flatSingleMap(Object obj) {
Map<String, Object> result = MapUtil.newHashMap(32);
Field[] fields = ReflectUtil.getFields(obj.getClass());
for (Field field : fields) {
if (FLAT_FIELD_NAME.contains(field.getName())) {
String fieldValue = (String) ReflectUtil.getFieldValue(obj, field);
JSONObject jsonObject = JSONObject.parseObject(fieldValue);
for (String key : jsonObject.keySet()) {
/**
* 钉钉OA消息回显
*/
if (DING_DING_OA_FIELD.contains(key)) {
JSONObject object = jsonObject.getJSONObject(key);
for (String objKey : object.keySet()) {
result.put(DING_DING_OA_NAME_MAPPING.get(objKey), object.getString(objKey));
}
} else if (PARSE_JSON_ARRAY.contains(key)) {
/**
* 部分字段是直接传入数组,把数组直接返回(用于回显)
*/
result.put(key, JSON.parseArray(jsonObject.getString(key)));
} else if (PARSE_JSON_OBJ_TO_ARRAY.contains(key)) {
/**
* 部分字段是直接传入Obj,把数组直接返回(用于回显)
*/
String value = "[" + jsonObject.getString(key) + "]";
result.put(key, JSON.parseArray(value));
} else {
result.put(key, jsonObject.getString(key));
}
}
}
result.put(field.getName(), ReflectUtil.getFieldValue(obj, field));
}
return result;
}
/**
* 【这个方法不用看】,纯粹为了适配amis前端
* <p>
* 得到模板的参数 组装好 返回给前端展示
*
* @param wxTemplateId
* @param allPrivateTemplate
* @return
*/
public static CommonAmisVo getWxMpTemplateParam(String wxTemplateId, List<WxMpTemplate> allPrivateTemplate) {
CommonAmisVo officialAccountParam = null;
for (WxMpTemplate wxMpTemplate : allPrivateTemplate) {
if (wxTemplateId.equals(wxMpTemplate.getTemplateId())) {
String[] data = wxMpTemplate.getContent().split(StrUtil.LF);
officialAccountParam = CommonAmisVo.builder()
.type("input-table")
.name("officialAccountParam")
.addable(true)
.editable(true)
.needConfirm(false)
.build();
List<CommonAmisVo.ColumnsDTO> columnsDtoS = new ArrayList<>();
for (String datum : data) {
String name = datum.substring(datum.indexOf("{{") + 2, datum.indexOf("."));
CommonAmisVo.ColumnsDTO.ColumnsDTOBuilder dtoBuilder = CommonAmisVo.ColumnsDTO.builder().name(name).type("input-text").required(true).quickEdit(true);
if (datum.contains("first")) {
dtoBuilder.label("名字");
} else if (datum.contains("remark")) {
dtoBuilder.label("备注");
} else {
dtoBuilder.label(datum.split(":")[0]);
}
columnsDtoS.add(dtoBuilder.build());
}
officialAccountParam.setColumns(columnsDtoS);
}
}
return officialAccountParam;
}
/**
* 【这个方法不用看】,纯粹为了适配amis前端
* <p>
* 获取占位符的参数
*
* @param msgContent
* @return
*/
public static CommonAmisVo getTestContent(String msgContent) {
Set<String> placeholderList = getPlaceholderList(msgContent);
if (CollUtil.isEmpty(placeholderList)) {
return null;
}
// placeholderList!=null 说明有占位符
CommonAmisVo testParam = CommonAmisVo.builder()
没有合适的资源?快使用搜索试试~ 我知道了~
austin消息推送平台
共324个文件
java:267个
yml:15个
xml:12个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 2 下载量 3 浏览量
2023-06-14
19:54:51
上传
评论
收藏 456KB ZIP 举报
温馨提示
消息推送平台,推送下发【邮件】【短信】【微信服务号】【微信小程序】【企业微信】【钉钉】等消息类型。统一的接口发送各种类型消息,对消息生命周期全链路追踪。只要公司内部有发送消息的需求,都应该要有类似austin的项目。消息推送平台对各类消息进行统一发送处理,这有利于对功能的收拢,以及提高业务需求开发的效率
资源推荐
资源详情
资源评论
收起资源包目录
austin消息推送平台 (324个子文件)
rabbitmq_bak.conf 34KB
broker.conf 3KB
10-default-guest-user.conf 388B
rabbitmq.conf 266B
rabbitmq.conf 266B
rabbitmq.conf 266B
redis.conf 178B
rabbitmq_bak.config 33KB
.erlang.cookie 14B
example.csv 677B
Dockerfile 305B
rabbitmq_delayed_message_exchange-3.9.0.ez 36KB
rabbitmq_delayed_message_exchange-3.9.0.ez 36KB
.gitignore 415B
Convert4Amis.java 18KB
DingDingWorkNoticeHandler.java 12KB
OfficialAccountController.java 10KB
EnterpriseWeChatRobotParam.java 9KB
CronTaskServiceImpl.java 8KB
MessageTemplateServiceImpl.java 8KB
TencentSmsScript.java 8KB
MessageTemplateController.java 7KB
SmsHandler.java 7KB
FeiShuRobotParam.java 7KB
DataServiceImpl.java 7KB
PushHandler.java 7KB
EnterpriseWeChatHandler.java 6KB
DingDingRobotHandler.java 6KB
AccountUtils.java 6KB
AssembleAction.java 6KB
MaterialServiceImpl.java 6KB
RedisUtils.java 6KB
OkHttpUtils.java 6KB
LinTongSmsScript.java 5KB
YunPianSmsScript.java 4KB
FeiShuRobotHandler.java 4KB
EnterpriseWeChatRobotHandler.java 4KB
FlowControlFactory.java 4KB
AustinHiveBootStrap.java 4KB
SendMessageType.java 4KB
ReadFileUtils.java 4KB
DingDingRobotParam.java 4KB
MiniProgramController.java 4KB
XxlJobUtils.java 4KB
RefreshGeTuiAccessTokenHandler.java 4KB
ReceiverStart.java 4KB
EmailHandler.java 4KB
AlipayMiniProgramAccountServiceImpl.java 4KB
OfficialAccountHandler.java 4KB
ChannelAccountController.java 3KB
AustinAspect.java 3KB
AbstractLazyPending.java 3KB
CrowdBatchTaskPending.java 3KB
TaskHandlerImpl.java 3KB
RefreshDingDingAccessTokenHandler.java 3KB
AfterParamCheckAction.java 3KB
MiniProgramAccountHandler.java 3KB
WeChatLoginConfig.java 3KB
SimpleLimitService.java 3KB
AustinSink.java 3KB
ChannelType.java 3KB
BasicResultVO.java 3KB
OkHttpConfiguration.java 3KB
SendServiceImpl.java 3KB
SendServiceImplTest.java 3KB
Receiver.java 3KB
ProcessController.java 3KB
CronAsyncThreadPoolConfig.java 3KB
PipelineConfig.java 3KB
ShieldServiceImpl.java 2KB
CommonAmisVo.java 2KB
DataController.java 2KB
SlideWindowLimitService.java 2KB
SendMqAction.java 2KB
RabbitMqReceiver.java 2KB
MessageTemplate.java 2KB
AlipayMiniProgramAccountHandler.java 2KB
PreParamCheckAction.java 2KB
CommonConstant.java 2KB
SendPushParam.java 2KB
ThreadPoolExecutorShutdownDefinition.java 2KB
ConsumeServiceImpl.java 2KB
NightShieldLazyPendingHandler.java 2KB
XxlJobInfo.java 2KB
BaseHandler.java 2KB
SubscribeHandler.java 2KB
EchartsVo.java 2KB
SmsPullReceiptStarterImpl.java 2KB
DingDingWorkContentModel.java 2KB
MaterialController.java 2KB
LogUtils.java 2KB
AlipayClientSingleton.java 2KB
DingDingRobotContentModel.java 2KB
BaseTestController.java 2KB
SwaggerConfiguration.java 2KB
Task.java 2KB
AbstractDeduplicationService.java 2KB
ChannelAccountServiceImpl.java 2KB
ContentHolderUtil.java 2KB
AustinBootStrap.java 2KB
共 324 条
- 1
- 2
- 3
- 4
资源评论
- weixin_541422282024-02-09发现一个宝藏资源,资源有很高的参考价值,赶紧学起来~
- qq_426100312023-09-12资源和描述一致,质量不错,解决了我的问题,感谢资源主。
Java程序员-张凯
- 粉丝: 1w+
- 资源: 6650
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功