代码格式优化,通过插件扫描

pull/57/head
3y 7 months ago
parent 5dec520c6d
commit 5e22aad354

@ -7,18 +7,15 @@ package com.java3y.austin.common.constant;
* @author 3y
*/
public class AustinConstant {
/**
* businessId
* com.java3y.austin.support.utils.TaskInfoUtils#generateBusinessId(java.lang.Long, java.lang.Integer)
*/
public final static Integer BUSINESS_ID_LENGTH = 16;
public static final Integer BUSINESS_ID_LENGTH = 16;
/**
*
*/
public static final Integer BATCH_RECEIVER_SIZE = 100;
/**
*
* ( )
@ -26,14 +23,11 @@ public class AustinConstant {
* ()
*/
public static final String SEND_ALL = "@all";
/**
* key
*/
public static final String CACHE_KEY_PREFIX = "Austin";
public static final String MESSAGE_ID = "MessageId";
/**
*
* /
@ -42,7 +36,6 @@ public class AustinConstant {
public static final String DEFAULT_UPDATOR = "Java3y";
public static final String DEFAULT_TEAM = "Java3y公众号";
public static final String DEFAULT_AUDITOR = "Java3y";
/**
*
*/
@ -59,6 +52,9 @@ public class AustinConstant {
"| | | || | | || | | || | | || | | || | | |\n" +
"| '--------------' || '--------------' || '--------------' || '--------------' || '--------------' || '--------------' |\n" +
" '----------------' '----------------' '----------------' '----------------' '----------------' '----------------' \n";
private AustinConstant() {
}
}

@ -5,48 +5,37 @@ package com.java3y.austin.common.constant;
* @author 3y
*/
public class CommonConstant {
public final static String PERIOD = ".";
public final static String COMMA = ",";
public final static String COLON = ":";
public final static String SEMICOLON = ";";
public final static String POUND = "#";
public final static String SLASH = "/";
public final static String BACKSLASH = "\\";
public final static String EMPTY_STRING = "";
public final static String RADICAL = "|";
public final static String QM_STRING = "?";
public final static String EQUAL_STRING = "=";
public final static String AND_STRING = "&";
public final static String ONE = "1";
public final static String ZERO = "0";
public final static String MINUS_ONE = "-1";
public final static String YES = "Y";
public final static String NO = "N";
public final static char QM = '?';
public static final String PERIOD = ".";
public static final String COMMA = ",";
public static final String COLON = ":";
public static final String SEMICOLON = ";";
public static final String POUND = "#";
public static final String SLASH = "/";
public static final String BACKSLASH = "\\";
public static final String EMPTY_STRING = "";
public static final String RADICAL = "|";
public static final String QM_STRING = "?";
public static final String EQUAL_STRING = "=";
public static final String AND_STRING = "&";
public static final String ONE = "1";
public static final String ZERO = "0";
public static final String MINUS_ONE = "-1";
public static final String YES = "Y";
public static final String NO = "N";
public static final char QM = '?';
/**
* boolean
*/
public final static Integer TRUE = 1;
public final static Integer FALSE = 0;
public static final Integer TRUE = 1;
public static final Integer FALSE = 0;
/**
*
*/
public static final String HMAC_SHA256_ENCRYPTION_ALGO = "HmacSHA256";
/**
*
*/
public static final String CHARSET_NAME = "UTF-8";
/**
* HTTP
*/
@ -55,29 +44,27 @@ public class CommonConstant {
public static final String CONTENT_TYPE_XML = "application/xml; charset=UTF-8";
public static final String CONTENT_TYPE_FORM_URL_ENCODE = "application/x-www-form-urlencoded;charset=utf-8;";
public static final String CONTENT_TYPE_MULTIPART_FORM_DATA = "multipart/form-data";
/**
* HTTP
*/
public static final String REQUEST_METHOD_GET = "GET";
public static final String REQUEST_METHOD_POST = "POST";
/**
* JSON
*/
public final static String EMPTY_JSON_OBJECT = "{}";
public final static String EMPTY_VALUE_JSON_ARRAY = "[]";
public static final String EMPTY_JSON_OBJECT = "{}";
public static final String EMPTY_VALUE_JSON_ARRAY = "[]";
/**
* cron
*/
public final static String CRON_FORMAT = "ss mm HH dd MM ? yyyy-yyyy";
public static final String CRON_FORMAT = "ss mm HH dd MM ? yyyy-yyyy";
/**
*
*/
public final static String ENV_DEV = "dev";
public final static String ENV_TEST = "test";
public static final String ENV_DEV = "dev";
public static final String ENV_TEST = "test";
private CommonConstant() {
}
}

@ -14,34 +14,28 @@ public class OfficialAccountParamConstant {
public static final String RAW = "raw";
public static final String AES = "aes";
public static final String MSG_SIGNATURE = "msg_signature";
/**
*
*/
public static final String SCAN_HANDLER = "scanHandler";
public static final String SUBSCRIBE_HANDLER = "subscribeHandler";
public static final String UNSUBSCRIBE_HANDLER = "unSubscribeHandler";
/**
* beanName
*/
public static final String WE_CHAT_LOGIN_CONFIG = "weChatLoginConfig";
/**
*
*/
public static final String QR_CODE_SCENE_PREFIX = "qrscene_";
/**
* //
*/
public static final String SUBSCRIBE_TIPS = "项目群还有少量名额,添加我的微信 java3yyy 备注【项目】,我会拉入官方项目交流群";
public static final String SCAN_TIPS = "咋又扫码啦?重新关注一波吧!";
public static final String UNSUBSCRIBE_TIPS = "老乡别走!";
private OfficialAccountParamConstant() {
}
}

@ -7,7 +7,6 @@ package com.java3y.austin.common.constant;
* @author 3y
*/
public class SendChanelUrlConstant {
/**
* url
*/
@ -16,8 +15,6 @@ public class SendChanelUrlConstant {
public static final String GE_TUI_BATCH_PUSH_CREATE_TASK_PATH = "/push/list/message";
public static final String GE_TUI_BATCH_PUSH_PATH = "/push/list/cid";
public static final String GE_TUI_AUTH = "/auth";
/**
* url
*/
@ -26,21 +23,22 @@ public class SendChanelUrlConstant {
public static final String DING_DING_PULL_URL = "https://oapi.dingtalk.com/topapi/message/corpconversation/getsendresult";
public static final String DING_DING_UPLOAD_URL = "https://oapi.dingtalk.com/media/upload";
public static final String DING_DING_TOKEN_URL = "https://oapi.dingtalk.com/gettoken";
/**
* url
*/
public static final String ENTERPRISE_WE_CHAT_ROBOT_URL = "https://qyapi.weixin.qq.com/cgi-bin/webhook/upload_media?key=<KEY>&type=<TYPE>";
/**
* url
*/
public static final String ALI_MINI_PROGRAM_GATEWAY_URL = "https://openapi.alipaydev.com/gateway.do";
/**
* url
*/
public static final String WE_CHAT_MINI_PROGRAM_OPENID_SYNC = "https://api.weixin.qq.com/sns/jscode2session?appid=<APPID>&secret=<SECRET>&js_code=<CODE>&grant_type=authorization_code";
private SendChanelUrlConstant() {
}
}

@ -7,15 +7,12 @@ package com.java3y.austin.common.constant;
* @author 3y
*/
public class ThreadPoolConstant {
/**
* small
*/
public static final Integer SINGLE_CORE_POOL_SIZE = 1;
public static final Integer SINGLE_MAX_POOL_SIZE = 1;
public static final Integer SMALL_KEEP_LIVE_TIME = 10;
/**
* medium
*/
@ -23,10 +20,12 @@ public class ThreadPoolConstant {
public static final Integer COMMON_MAX_POOL_SIZE = 2;
public static final Integer COMMON_KEEP_LIVE_TIME = 60;
public static final Integer COMMON_QUEUE_SIZE = 128;
/**
* big queue size
*/
public static final Integer BIG_QUEUE_SIZE = 1024;
private ThreadPoolConstant() {
}
}

@ -30,13 +30,4 @@ public class LinTongSmsAccount extends SmsAccount {
private String userName;
private String password;
/**
* Id
*/
private Integer supplierId;
/**
*
*/
private String supplierName;
}

@ -20,6 +20,6 @@ public class AlipayMiniProgramContentModel extends ContentModel {
/**
*
*/
Map<String, String> map;
private Map<String, String> map;
}

@ -18,7 +18,7 @@ public class MiniProgramContentModel extends ContentModel {
/**
*
*/
Map<String, String> miniProgramParam;
private Map<String, String> miniProgramParam;
/**
* Id

@ -7,6 +7,8 @@ import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.io.Serializable;
/**
*
*
@ -17,7 +19,7 @@ import lombok.experimental.Accessors;
@NoArgsConstructor
@Builder
@Accessors(chain = true)
public class ProcessContext<T extends ProcessModel> {
public class ProcessContext<T extends ProcessModel> implements Serializable {
/**
* code
*/

@ -46,7 +46,7 @@ public class ProcessController {
List<BusinessProcess> processList = templateConfig.get(context.getCode()).getProcessList();
for (BusinessProcess businessProcess : processList) {
businessProcess.process(context);
if (context.getNeedBreak()) {
if (Boolean.TRUE.equals(context.getNeedBreak())) {
break;
}
}
@ -84,7 +84,7 @@ public class ProcessController {
// 执行模板列表
List<BusinessProcess> processList = processTemplate.getProcessList();
if (Objects.isNull(processList) || processList.size() == 0) {
if (Objects.isNull(processList) || processList.isEmpty()) {
context.setResponse(BasicResultVO.fail(RespStatusEnum.PROCESS_LIST_IS_NULL));
throw new ProcessException(context);
}

@ -23,6 +23,8 @@ public class CronAsyncThreadPoolConfig {
*/
public static final String EXECUTE_XXL_THREAD_POOL_NAME = "execute-xxl-thread-pool";
private CronAsyncThreadPoolConfig() {
}
/**
* pending线

@ -6,21 +6,21 @@ package com.java3y.austin.cron.constants;
* pending
*/
public class PendingConstant {
/**
*
*/
public static final Integer QUEUE_SIZE = 100;
/**
*
*/
public static final Integer NUM_THRESHOLD = 100;
/**
* batch
*/
public static final Long TIME_THRESHOLD = 1000L;
private PendingConstant() {
}
}

@ -1,6 +1,6 @@
package com.java3y.austin.cron.handler;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.text.CharSequenceUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.google.common.base.Throwables;
@ -46,7 +46,7 @@ public class NightShieldLazyPendingHandler {
SupportThreadPoolConfig.getPendingSingleThreadPool().execute(() -> {
while (redisUtils.lLen(NIGHT_SHIELD_BUT_NEXT_DAY_SEND_KEY) > 0) {
String taskInfo = redisUtils.lPop(NIGHT_SHIELD_BUT_NEXT_DAY_SEND_KEY);
if (StrUtil.isNotBlank(taskInfo)) {
if (CharSequenceUtil.isNotBlank(taskInfo)) {
try {
kafkaTemplate.send(topicName, JSON.toJSONString(Arrays.asList(JSON.parseObject(taskInfo, TaskInfo.class))
, new SerializerFeature[]{SerializerFeature.WriteClassName}));

@ -1,6 +1,6 @@
package com.java3y.austin.cron.handler;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.text.CharSequenceUtil;
import com.alibaba.fastjson.JSON;
import com.java3y.austin.common.constant.CommonConstant;
import com.java3y.austin.common.dto.account.DingDingWorkNoticeAccount;
@ -50,7 +50,7 @@ public class RefreshDingDingAccessTokenHandler {
for (ChannelAccount channelAccount : accountList) {
DingDingWorkNoticeAccount account = JSON.parseObject(channelAccount.getAccountConfig(), DingDingWorkNoticeAccount.class);
String accessToken = accessTokenUtils.getAccessToken(ChannelType.DING_DING_WORK_NOTICE.getCode(), channelAccount.getId().intValue(), account, true);
if (StrUtil.isNotBlank(accessToken)) {
if (CharSequenceUtil.isNotBlank(accessToken)) {
redisTemplate.opsForValue().set(ChannelType.DING_DING_WORK_NOTICE.getAccessTokenPrefix() + channelAccount.getId(), accessToken);
}
}

@ -1,6 +1,6 @@
package com.java3y.austin.cron.handler;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.text.CharSequenceUtil;
import com.alibaba.fastjson.JSON;
import com.java3y.austin.common.constant.CommonConstant;
import com.java3y.austin.common.dto.account.GeTuiAccount;
@ -50,7 +50,7 @@ public class RefreshGeTuiAccessTokenHandler {
for (ChannelAccount channelAccount : accountList) {
GeTuiAccount account = JSON.parseObject(channelAccount.getAccountConfig(), GeTuiAccount.class);
String accessToken = accessTokenUtils.getAccessToken(ChannelType.PUSH.getCode(), channelAccount.getId().intValue(), account, true);
if (StrUtil.isNotBlank(accessToken)) {
if (CharSequenceUtil.isNotBlank(accessToken)) {
redisTemplate.opsForValue().set(ChannelType.PUSH.getAccessTokenPrefix() + channelAccount.getId(), accessToken);
}
}

@ -2,7 +2,7 @@ package com.java3y.austin.cron.pending;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.text.StrPool;
import com.google.common.collect.Lists;
import com.java3y.austin.common.constant.AustinConstant;
import com.java3y.austin.cron.config.CronAsyncThreadPoolConfig;
@ -61,7 +61,7 @@ public class CrowdBatchTaskPending extends AbstractLazyPending<CrowdInfoVo> {
paramMap.put(vars, receiver);
} else {
String newReceiver = StringUtils.join(new String[]{
paramMap.get(vars), receiver}, StrUtil.COMMA);
paramMap.get(vars), receiver}, StrPool.COMMA);
paramMap.put(vars, newReceiver);
}
}

@ -1,8 +1,8 @@
package com.java3y.austin.cron.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.text.csv.CsvRow;
import cn.hutool.core.util.StrUtil;
import com.java3y.austin.cron.csv.CountFileRowHandler;
import com.java3y.austin.cron.pending.CrowdBatchTaskPending;
import com.java3y.austin.cron.service.TaskHandler;
@ -16,7 +16,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
/**
@ -40,7 +40,7 @@ public class TaskHandlerImpl implements TaskHandler {
if (Objects.isNull(messageTemplate)) {
return;
}
if (StrUtil.isBlank(messageTemplate.getCronCrowdPath())) {
if (CharSequenceUtil.isBlank(messageTemplate.getCronCrowdPath())) {
log.error("TaskHandler#handle crowdPath empty! messageTemplateId:{}", messageTemplateId);
return;
}
@ -52,12 +52,12 @@ public class TaskHandlerImpl implements TaskHandler {
CrowdBatchTaskPending crowdBatchTaskPending = context.getBean(CrowdBatchTaskPending.class);
ReadFileUtils.getCsvRow(messageTemplate.getCronCrowdPath(), row -> {
if (CollUtil.isEmpty(row.getFieldMap())
|| StrUtil.isBlank(row.getFieldMap().get(ReadFileUtils.RECEIVER_KEY))) {
|| CharSequenceUtil.isBlank(row.getFieldMap().get(ReadFileUtils.RECEIVER_KEY))) {
return;
}
// 3. 每一行处理交给LazyPending
HashMap<String, String> params = ReadFileUtils.getParamFromLine(row.getFieldMap());
Map<String, String> params = ReadFileUtils.getParamFromLine(row.getFieldMap());
CrowdInfoVo crowdInfoVo = CrowdInfoVo.builder().receiver(row.getFieldMap().get(ReadFileUtils.RECEIVER_KEY))
.params(params).messageTemplateId(messageTemplateId).build();
crowdBatchTaskPending.pending(crowdInfoVo);

@ -20,12 +20,14 @@ import java.util.*;
*/
@Slf4j
public class ReadFileUtils {
/**
* csv
*/
public static final String RECEIVER_KEY = "userId";
private ReadFileUtils() {
}
/**
* csv csvRowHandler
*
@ -33,14 +35,13 @@ public class ReadFileUtils {
* @param csvRowHandler
*/
public static void getCsvRow(String path, CsvRowHandler csvRowHandler) {
try {
// 把首行当做是标题获取reader
CsvReader reader = CsvUtil.getReader(new FileReader(path),
new CsvReadConfig().setContainsHeader(true));
// 把首行当做是标题获取reader
try (CsvReader reader = CsvUtil.getReader(new FileReader(path),
new CsvReadConfig().setContainsHeader(true))) {
reader.read(csvRowHandler);
} catch (Exception e) {
log.error("ReadFileUtils#getCsvRow fail!{}", Throwables.getStackTraceAsString(e));
}
}
@ -51,10 +52,11 @@ public class ReadFileUtils {
* @param countFileRowHandler
*/
public static long countCsvRow(String path, CountFileRowHandler countFileRowHandler) {
try {
// 把首行当做是标题获取reader
CsvReader reader = CsvUtil.getReader(new FileReader(path),
new CsvReadConfig().setContainsHeader(true));
// 把首行当做是标题获取reader
try (CsvReader reader = CsvUtil.getReader(new FileReader(path),
new CsvReadConfig().setContainsHeader(true))) {
reader.read(countFileRowHandler);
} catch (Exception e) {
log.error("ReadFileUtils#getCsvRow fail!{}", Throwables.getStackTraceAsString(e));
@ -69,7 +71,7 @@ public class ReadFileUtils {
* @param fieldMap
* @return
*/
public static HashMap<String, String> getParamFromLine(Map<String, String> fieldMap) {
public static Map<String, String> getParamFromLine(Map<String, String> fieldMap) {
HashMap<String, String> params = MapUtil.newHashMap();
for (Map.Entry<String, String> entry : fieldMap.entrySet()) {
if (!ReadFileUtils.RECEIVER_KEY.equals(entry.getKey())) {
@ -88,6 +90,7 @@ public class ReadFileUtils {
*
* @param path
* @return
* @Deprecated
*/
@Deprecated
public static List<CrowdInfoVo> getCsvRowList(String path) {
@ -96,6 +99,7 @@ public class ReadFileUtils {
CsvData data = CsvUtil.getReader().read(FileUtil.file(path));
if (Objects.isNull(data) || Objects.isNull(data.getRow(0)) || Objects.isNull(data.getRow(1))) {
log.error("read csv file empty!,path:{}", path);
return result;
}
// 第一行为默认为头信息,所以遍历从第二行开始,第一列默认为接收者Id(不处理)
CsvRow headerInfo = data.getRow(0);

@ -7,7 +7,6 @@ package com.java3y.austin.cron.xxl.constants;
* @author 3y
*/
public class XxlJobConstant {
/**
*
*/
@ -17,32 +16,29 @@ public class XxlJobConstant {
public static final String DELETE_URL = "/jobinfo/remove";
public static final String RUN_URL = "/jobinfo/start";
public static final String STOP_URL = "/jobinfo/stop";
/**
*
*/
public static final String JOB_GROUP_PAGE_LIST = "/jobgroup/pageList";
public static final String JOB_GROUP_INSERT_URL = "/jobgroup/save";
/**
*
*/
public static final String JOB_HANDLER_NAME = "austinJob";
/**
*
*/
public static final Integer TIME_OUT = 120;
/**
*
*/
public static final Integer RETRY_COUNT = 0;
/**
* ()
*/
public static final Integer DELAY_TIME = 10;
private XxlJobConstant() {
}
}

@ -1,5 +1,6 @@
package com.java3y.austin.cron.xxl.entity;
import cn.hutool.core.text.StrPool;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
@ -42,7 +43,7 @@ public class XxlJobGroup {
public List<String> getRegistryList() {
if (Objects.nonNull(addressList) && addressList.trim().length() > 0) {
registryList = new ArrayList<String>(Arrays.asList(addressList.split(",")));
registryList = new ArrayList<>(Arrays.asList(addressList.split(StrPool.COMMA)));
}
return registryList;
}

@ -145,6 +145,9 @@ public class CronTaskServiceImpl implements CronTaskService {
HttpResponse response = null;
try {
response = HttpRequest.post(path).form(params).cookie(getCookie()).execute();
if (Objects.isNull(response)) {
return BasicResultVO.fail(RespStatusEnum.SERVICE_ERROR);
}
Integer id = JSON.parseObject(response.body()).getJSONArray("data").getJSONObject(0).getInteger("id");
if (response.isOk() && Objects.nonNull(id)) {
return BasicResultVO.success(id);

@ -1,7 +1,7 @@
package com.java3y.austin.cron.xxl.utils;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.text.CharSequenceUtil;
import com.java3y.austin.common.constant.CommonConstant;
import com.java3y.austin.common.enums.RespStatusEnum;
import com.java3y.austin.common.vo.BasicResultVO;
@ -63,10 +63,10 @@ public class XxlJobUtils {
.executorFailRetryCount(XxlJobConstant.RETRY_COUNT)
.glueType(GlueTypeEnum.BEAN.name())
.triggerStatus(CommonConstant.FALSE)
.glueRemark(StrUtil.EMPTY)
.glueSource(StrUtil.EMPTY)
.alarmEmail(StrUtil.EMPTY)
.childJobId(StrUtil.EMPTY).build();
.glueRemark(CharSequenceUtil.EMPTY)
.glueSource(CharSequenceUtil.EMPTY)
.alarmEmail(CharSequenceUtil.EMPTY)
.childJobId(CharSequenceUtil.EMPTY).build();
if (Objects.nonNull(messageTemplate.getCronTaskId())) {
xxlJobInfo.setId(messageTemplate.getCronTaskId());
@ -80,14 +80,14 @@ public class XxlJobUtils {
* @return
*/
private Integer queryJobGroupId() {
BasicResultVO basicResultVO = cronTaskService.getGroupId(appName, jobHandlerName);
BasicResultVO<Integer> basicResultVO = cronTaskService.getGroupId(appName, jobHandlerName);
if (Objects.isNull(basicResultVO.getData())) {
XxlJobGroup xxlJobGroup = XxlJobGroup.builder().appname(appName).title(jobHandlerName).addressType(CommonConstant.FALSE).build();
if (RespStatusEnum.SUCCESS.getCode().equals(cronTaskService.createGroup(xxlJobGroup).getStatus())) {
return (int) cronTaskService.getGroupId(appName, jobHandlerName).getData();
}
}
return (Integer) basicResultVO.getData();
return basicResultVO.getData();
}
}

@ -11,28 +11,22 @@ public class DataHouseConstant {
* catalog name
*/
public static final String CATALOG_NAME = "my_hive";
/**
*
*/
public static final String CATALOG_DEFAULT_DATABASE = "austin";
/**
* Kafka
*/
public static final String KAFKA_SOURCE_TABLE_NAME = "anchor_log_source";
/**
* hive
*/
public static final String KAFKA_SINK_TABLE_NAME = "message_anchor";
/**
* Kafka topic
*/
public static final String KAFKA_TOPIC = "austinTraceLog";
/**
* eg: 127.0.0.1:9092
* Kafkaip
@ -40,4 +34,8 @@ public class DataHouseConstant {
public static final String KAFKA_IP_PORT = "127.0.0.1:9092";
private DataHouseConstant() {
}
}

@ -30,8 +30,8 @@
<artifactId>tencentcloud-sdk-java</artifactId>
<exclusions>
<exclusion>
<groupId>com.squareup.okio</groupId>
<artifactId>okio</artifactId>
<groupId>com.squareup.okio</groupId>
<artifactId>okio</artifactId>
</exclusion>
</exclusions>
</dependency>

@ -39,7 +39,7 @@ public class DeduplicationAction implements BusinessProcess<TaskInfo> {
public void process(ProcessContext<TaskInfo> context) {
TaskInfo taskInfo = context.getProcessModel();
// 配置样例{"deduplication_10":{"num":1,"time":300},"deduplication_20":{"num":5}}
// 配置样例{"deduplication_10":{"num":1,"time":300},"deduplication_20":{"num":5}}
String deduplicationConfig = config.getProperty(DEDUPLICATION_RULE_KEY, CommonConstant.EMPTY_JSON_OBJECT);
// 去重

@ -17,7 +17,6 @@ import java.util.Map;
*/
public class AlipayClientSingleton {
private static volatile DefaultAlipayClient alipayClientSingleton;
private static Map<String, DefaultAlipayClient> alipayClientMap = new HashMap<>();
@ -36,9 +35,7 @@ public class AlipayClientSingleton {
alipayConfig.setAlipayPublicKey(alipayMiniProgramAccount.getAlipayPublicKey());
alipayConfig.setCharset("utf-8");
alipayConfig.setSignType("RSA2");
alipayClientSingleton = new DefaultAlipayClient(alipayConfig);
alipayClientMap.put(alipayMiniProgramAccount.getAppId(), alipayClientSingleton);
return alipayClientSingleton;
alipayClientMap.put(alipayMiniProgramAccount.getAppId(), new DefaultAlipayClient(alipayConfig));
}
}
}

@ -17,6 +17,10 @@ public class HandlerThreadPoolConfig {
private static final String PRE_FIX = "austin.";
private HandlerThreadPoolConfig() {
}
/**
* 线
* 线keepAliveTime()

@ -1,5 +1,6 @@
package com.java3y.austin.handler.deduplication.build;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.java3y.austin.common.domain.TaskInfo;
import com.java3y.austin.handler.deduplication.DeduplicationHolder;
@ -26,11 +27,11 @@ public abstract class AbstractDeduplicationBuilder implements Builder {
}
public DeduplicationParam getParamsFromConfig(Integer key, String duplicationConfig, TaskInfo taskInfo) {
JSONObject object = JSONObject.parseObject(duplicationConfig);
JSONObject object = JSON.parseObject(duplicationConfig);
if (Objects.isNull(object)) {
return null;
}
DeduplicationParam deduplicationParam = JSONObject.parseObject(object.getString(DEDUPLICATION_CONFIG_PRE + key), DeduplicationParam.class);
DeduplicationParam deduplicationParam = JSON.parseObject(object.getString(DEDUPLICATION_CONFIG_PRE + key), DeduplicationParam.class);
if (Objects.isNull(deduplicationParam)) {
return null;
}

@ -57,7 +57,10 @@ public class SlideWindowLimitService extends AbstractLimitService {
String key = LIMIT_TAG + deduplicationSingleKey(service, taskInfo, receiver);
String scoreValue = String.valueOf(IdUtil.getSnowflake().nextId());
String score = String.valueOf(nowTime);
if (redisUtils.execLimitLua(redisScript, Collections.singletonList(key), String.valueOf(param.getDeduplicationTime() * 1000), score, String.valueOf(param.getCountNum()), scoreValue)) {
final Boolean result = redisUtils.execLimitLua(redisScript, Collections.singletonList(key),
String.valueOf(param.getDeduplicationTime() * 1000), score, String.valueOf(param.getCountNum()), scoreValue);
if (Boolean.TRUE.equals(result)) {
filterReceiver.add(receiver);
}

@ -1,6 +1,6 @@
package com.java3y.austin.handler.deduplication.service;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.text.StrPool;
import com.java3y.austin.common.domain.TaskInfo;
import com.java3y.austin.common.enums.DeduplicationType;
import com.java3y.austin.handler.deduplication.limit.LimitService;
@ -41,9 +41,9 @@ public class FrequencyDeduplicationService extends AbstractDeduplicationService
*/
@Override
public String deduplicationSingleKey(TaskInfo taskInfo, String receiver) {
return PREFIX + StrUtil.C_UNDERLINE
+ receiver + StrUtil.C_UNDERLINE
+ taskInfo.getMessageTemplateId() + StrUtil.C_UNDERLINE
return PREFIX + StrPool.C_UNDERLINE
+ receiver + StrPool.C_UNDERLINE
+ taskInfo.getMessageTemplateId() + StrPool.C_UNDERLINE
+ taskInfo.getSendChannel();
}
}

@ -33,11 +33,11 @@ public class AlipayMiniProgramParam {
*/
private Map<String, String> data;
// /**
// * 支付消息模板:需传入用户发生的交易行为的支付宝交易号 trade_no
// * 表单提交模板:需传入用户在小程序触发表单提交事件获得的表单号;
// * 刷脸消息模板需传入在IOT刷脸后得到的ftoken等用于信息发送的校验。
// * 说明:订阅消息模板无需传入本参数。
// */
// private String formId;
/**
* trade_no
*
* IOTftoken
*
*/
private String formId;
}

@ -14,7 +14,7 @@ import java.util.Map;
@Component
public class HandlerHolder {
private Map<Integer, Handler> handlers = new HashMap<Integer, Handler>(128);
private Map<Integer, Handler> handlers = new HashMap<>(128);
public void putHandler(Integer channelCode, Handler handler) {
handlers.put(channelCode, handler);

@ -94,8 +94,11 @@ public class AlipayMiniProgramAccountHandler extends BaseHandler implements Hand
return requestList;
}
/**
* @param recallTaskInfo
*/
@Override
public void recall(RecallTaskInfo recallTaskInfo) {
// 未实现 or 渠道不支持
}
}

@ -1,7 +1,7 @@
package com.java3y.austin.handler.handler.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.text.StrPool;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSON;
import com.google.common.base.Throwables;
@ -26,6 +26,7 @@ import org.springframework.stereotype.Service;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
@ -124,10 +125,10 @@ public class DingDingRobotHandler extends BaseHandler implements Handler {
private String assembleSign(long currentTimeMillis, String secret) {
String sign = "";
try {
String stringToSign = currentTimeMillis + String.valueOf(StrUtil.C_LF) + secret;
String stringToSign = currentTimeMillis + String.valueOf(StrPool.C_LF) + secret;
Mac mac = Mac.getInstance(CommonConstant.HMAC_SHA256_ENCRYPTION_ALGO);
mac.init(new SecretKeySpec(secret.getBytes(CommonConstant.CHARSET_NAME), CommonConstant.HMAC_SHA256_ENCRYPTION_ALGO));
byte[] signData = mac.doFinal(stringToSign.getBytes(CommonConstant.CHARSET_NAME));
mac.init(new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), CommonConstant.HMAC_SHA256_ENCRYPTION_ALGO));
byte[] signData = mac.doFinal(stringToSign.getBytes(StandardCharsets.UTF_8));
sign = URLEncoder.encode(new String(Base64.encodeBase64(signData)), CommonConstant.CHARSET_NAME);
} catch (Exception e) {
log.error("DingDingHandler#assembleSign fail!:{}", Throwables.getStackTraceAsString(e));

@ -2,7 +2,7 @@ package com.java3y.austin.handler.handler.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.text.StrPool;
import com.alibaba.fastjson.JSON;
import com.dingtalk.api.DefaultDingTalkClient;
import com.dingtalk.api.DingTalkClient;
@ -105,7 +105,7 @@ public class DingDingWorkNoticeHandler extends BaseHandler implements Handler {
if (AustinConstant.SEND_ALL.equals(CollUtil.getFirst(taskInfo.getReceiver()))) {
req.setToAllUser(true);
} else {
req.setUseridList(StringUtils.join(taskInfo.getReceiver(), StrUtil.C_COMMA));
req.setUseridList(StringUtils.join(taskInfo.getReceiver(), StrPool.COMMA));
}
req.setAgentId(Long.parseLong(account.getAgentId()));

@ -2,7 +2,8 @@ package com.java3y.austin.handler.handler.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.text.StrPool;
import cn.hutool.extra.mail.MailAccount;
import cn.hutool.extra.mail.MailUtil;
import com.google.common.base.Throwables;
@ -57,9 +58,14 @@ public class EmailHandler extends BaseHandler implements Handler {
EmailContentModel emailContentModel = (EmailContentModel) taskInfo.getContentModel();
MailAccount account = getAccountConfig(taskInfo.getSendAccount());
try {
List<File> files = StrUtil.isNotBlank(emailContentModel.getUrl()) ? AustinFileUtils.getRemoteUrl2File(dataPath, StrUtil.split(emailContentModel.getUrl(), StrUtil.COMMA)) : null;
String result = CollUtil.isEmpty(files) ? MailUtil.send(account, taskInfo.getReceiver(), emailContentModel.getTitle(), emailContentModel.getContent(), true) :
MailUtil.send(account, taskInfo.getReceiver(), emailContentModel.getTitle(), emailContentModel.getContent(), true, files.toArray(new File[files.size()]));
List<File> files = CharSequenceUtil.isNotBlank(emailContentModel.getUrl()) ? AustinFileUtils.getRemoteUrl2File(dataPath, CharSequenceUtil.split(emailContentModel.getUrl(), StrPool.COMMA)) : null;
if (CollUtil.isEmpty(files)) {
MailUtil.send(account, taskInfo.getReceiver(), emailContentModel.getTitle(), emailContentModel.getContent(), true);
} else {
MailUtil.send(account, taskInfo.getReceiver(), emailContentModel.getTitle(), emailContentModel.getContent(), true, files.toArray(new File[files.size()]));
}
} catch (Exception e) {
log.error("EmailHandler#handler fail!{},params:{}", Throwables.getStackTraceAsString(e), taskInfo);
return false;

@ -97,7 +97,7 @@ public class EnterpriseWeChatHandler extends BaseHandler implements Handler {
EnterpriseWeChatContentModel contentModel = (EnterpriseWeChatContentModel) taskInfo.getContentModel();
// 通用配置
WxCpMessage wxCpMessage = null;
WxCpMessage wxCpMessage = new WxCpMessage();
if (SendMessageType.TEXT.getCode().equals(contentModel.getSendType())) {
wxCpMessage = WxCpMessage.TEXT().content(contentModel.getContent()).build();
@ -125,6 +125,7 @@ public class EnterpriseWeChatHandler extends BaseHandler implements Handler {
} else if (SendMessageType.TEMPLATE_CARD.getCode().equals(contentModel.getSendType())) {
// WxJava 未支持
}
wxCpMessage.setAgentId(agentId);
wxCpMessage.setToUser(userId);
return wxCpMessage;

@ -93,7 +93,7 @@ public class FeiShuRobotHandler extends BaseHandler implements Handler {
@Override
public void recall(RecallTaskInfo recallTaskInfo) {
// 不支持或未实现
}
}

@ -38,6 +38,7 @@ import java.util.Set;
@Slf4j
public class PushHandler extends BaseHandler implements Handler {
private static final String HEADER_TOKEN_NAME = "token";
@Autowired
private AccountUtils accountUtils;
@Autowired
@ -83,12 +84,11 @@ public class PushHandler extends BaseHandler implements Handler {
private String singlePush(PushParam pushParam) {
String url = SendChanelUrlConstant.GE_TUI_BASE_URL + pushParam.getAppId() + SendChanelUrlConstant.GE_TUI_SINGLE_PUSH_PATH;
SendPushParam sendPushParam = assembleParam((PushContentModel) pushParam.getTaskInfo().getContentModel(), pushParam.getTaskInfo().getReceiver());
String body = HttpRequest.post(url).header(Header.CONTENT_TYPE.getValue(), ContentType.JSON.getValue())
.header("token", pushParam.getToken())
return HttpRequest.post(url).header(Header.CONTENT_TYPE.getValue(), ContentType.JSON.getValue())
.header(HEADER_TOKEN_NAME, pushParam.getToken())
.body(JSON.toJSONString(sendPushParam))
.timeout(2000)
.execute().body();
return body;
}
@ -105,12 +105,11 @@ public class PushHandler extends BaseHandler implements Handler {
.taskId(taskId)
.isAsync(true)
.audience(BatchSendPushParam.AudienceVO.builder().cid(pushParam.getTaskInfo().getReceiver()).build()).build();
String body = HttpRequest.post(url).header(Header.CONTENT_TYPE.getValue(), ContentType.JSON.getValue())
.header("token", pushParam.getToken())
return HttpRequest.post(url).header(Header.CONTENT_TYPE.getValue(), ContentType.JSON.getValue())
.header(HEADER_TOKEN_NAME, pushParam.getToken())
.body(JSON.toJSONString(batchSendPushParam))
.timeout(2000)
.execute().body();
return body;
}
@ -126,7 +125,7 @@ public class PushHandler extends BaseHandler implements Handler {
String taskId = "";
try {
String body = HttpRequest.post(url).header(Header.CONTENT_TYPE.getValue(), ContentType.JSON.getValue())
.header("token", pushParam.getToken())
.header(HEADER_TOKEN_NAME, pushParam.getToken())
.body(JSON.toJSONString(param))
.timeout(2000)
.execute().body();

@ -1,7 +1,7 @@
package com.java3y.austin.handler.handler.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.text.CharSequenceUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.google.common.base.Throwables;
@ -100,8 +100,7 @@ public class SmsHandler extends BaseHandler implements Handler {
}
// 生成一个随机数[1,total],看落到哪个区间
Random random = new Random();
int index = random.nextInt(total) + 1;
int index = new Random().nextInt(total) + 1;
MessageTypeSmsConfig supplier = null;
MessageTypeSmsConfig supplierBack = null;
@ -119,7 +118,7 @@ public class SmsHandler extends BaseHandler implements Handler {
}
index -= messageTypeSmsConfigs.get(i).getWeights();
}
return null;
return new MessageTypeSmsConfig[0];
}
/**
@ -169,8 +168,8 @@ public class SmsHandler extends BaseHandler implements Handler {
*/
private String getSmsContent(TaskInfo taskInfo) {
SmsContentModel smsContentModel = (SmsContentModel) taskInfo.getContentModel();
if (StrUtil.isNotBlank(smsContentModel.getUrl())) {
return smsContentModel.getContent() + StrUtil.SPACE + smsContentModel.getUrl();
if (CharSequenceUtil.isNotBlank(smsContentModel.getUrl())) {
return smsContentModel.getContent() + CharSequenceUtil.SPACE + smsContentModel.getUrl();
} else {
return smsContentModel.getContent();
}

@ -27,7 +27,7 @@ public class TaskPendingHolder {
private static List<String> groupIds = GroupIdMappingUtils.getAllGroupIds();
@Autowired
private ThreadPoolUtils threadPoolUtils;
private Map<String, ExecutorService> taskPendingHolder = new HashMap<>(32);
private Map<String, ExecutorService> holder = new HashMap<>(32);
/**
* 线
@ -43,7 +43,7 @@ public class TaskPendingHolder {
DtpExecutor executor = HandlerThreadPoolConfig.getExecutor(groupId);
threadPoolUtils.register(executor);
taskPendingHolder.put(groupId, executor);
holder.put(groupId, executor);
}
}
@ -54,7 +54,7 @@ public class TaskPendingHolder {
* @return
*/
public ExecutorService route(String groupId) {
return taskPendingHolder.get(groupId);
return holder.get(groupId);
}

@ -34,6 +34,7 @@ public class MessageReceipt {
Thread.sleep(2000);
} catch (Exception e) {
log.error("MessageReceipt#init fail:{}", Throwables.getStackTraceAsString(e));
Thread.currentThread().interrupt();
}
}
});

@ -1,6 +1,6 @@
package com.java3y.austin.handler.receiver.kafka;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.text.StrPool;
import com.java3y.austin.handler.utils.GroupIdMappingUtils;
import com.java3y.austin.support.constans.MessageQueuePipeline;
import lombok.extern.slf4j.Slf4j;
@ -56,7 +56,7 @@ public class ReceiverStart {
public static KafkaListenerAnnotationBeanPostProcessor.AnnotationEnhancer groupIdEnhancer() {
return (attrs, element) -> {
if (element instanceof Method) {
String name = ((Method) element).getDeclaringClass().getSimpleName() + StrUtil.DOT + ((Method) element).getName();
String name = ((Method) element).getDeclaringClass().getSimpleName() + StrPool.DOT + ((Method) element).getName();
if (RECEIVER_METHOD_NAME.equals(name)) {
attrs.put("groupId", groupIds.get(index++));
}

@ -62,7 +62,7 @@ public class LinTongSmsScript implements SmsScript {
return assembleSmsRecord(smsParam, linTongSendResult, linTongSmsAccount);
} catch (Exception e) {
log.error("LinTongSmsAccount#send fail:{},params:{}", Throwables.getStackTraceAsString(e), JSON.toJSONString(smsParam));
return null;
return new ArrayList<>();
}
}
@ -75,7 +75,7 @@ public class LinTongSmsScript implements SmsScript {
*/
@Override
public List<SmsRecord> pull(Integer id) {
return null;
return new ArrayList<>();
}
@ -100,7 +100,7 @@ public class LinTongSmsScript implements SmsScript {
private List<SmsRecord> assembleSmsRecord(SmsParam smsParam, LinTongSendResult response, LinTongSmsAccount account) {
if (response == null || ArrayUtil.isEmpty(response.getDtoList())) {
return null;
return new ArrayList<>();
}
List<SmsRecord> smsRecordList = new ArrayList<>();

@ -54,7 +54,7 @@ public class TencentSmsScript implements SmsScript {
return assembleSendSmsRecord(smsParam, response, tencentSmsAccount);
} catch (Exception e) {
log.error("TencentSmsScript#send fail:{},params:{}", Throwables.getStackTraceAsString(e), JSON.toJSONString(smsParam));
return null;
return new ArrayList<>();
}
}
@ -68,7 +68,7 @@ public class TencentSmsScript implements SmsScript {
return assemblePullSmsRecord(account, resp);
} catch (Exception e) {
log.error("TencentSmsReceipt#pull fail!{}", Throwables.getStackTraceAsString(e));
return null;
return new ArrayList<>();
}
}
@ -81,11 +81,12 @@ public class TencentSmsScript implements SmsScript {
* @return
*/
private List<SmsRecord> assembleSendSmsRecord(SmsParam smsParam, SendSmsResponse response, TencentSmsAccount tencentSmsAccount) {
List<SmsRecord> smsRecordList = new ArrayList<>();
if (Objects.isNull(response) || ArrayUtil.isEmpty(response.getSendStatusSet())) {
return null;
return smsRecordList;
}
List<SmsRecord> smsRecordList = new ArrayList<>();
for (SendStatus sendStatus : response.getSendStatusSet()) {
// 腾讯返回的电话号有前缀,这里取巧直接翻转获取手机号
@ -139,8 +140,7 @@ public class TencentSmsScript implements SmsScript {
httpProfile.setEndpoint(account.getUrl());
ClientProfile clientProfile = new ClientProfile();
clientProfile.setHttpProfile(httpProfile);
SmsClient client = new SmsClient(cred, account.getRegion(), clientProfile);
return client;
return new SmsClient(cred, account.getRegion(), clientProfile);
}
/**

@ -2,9 +2,10 @@ package com.java3y.austin.handler.script.impl;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.net.URLEncodeUtil;
import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.text.StrPool;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.util.URLUtil;
import cn.hutool.http.Header;
import cn.hutool.http.HttpRequest;
import com.alibaba.fastjson.JSON;
@ -58,7 +59,7 @@ public class YunPianSmsScript implements SmsScript {
return assembleSmsRecord(smsParam, yunPianSendResult, account);
} catch (Exception e) {
log.error("YunPianSmsScript#send fail:{},params:{}", Throwables.getStackTraceAsString(e), JSON.toJSONString(smsParam));
return null;
return new ArrayList<>();
}
}
@ -66,7 +67,7 @@ public class YunPianSmsScript implements SmsScript {
@Override
public List<SmsRecord> pull(Integer accountId) {
// .....
return null;
return new ArrayList<>();
}
/**
@ -79,7 +80,7 @@ public class YunPianSmsScript implements SmsScript {
private Map<String, Object> assembleParam(SmsParam smsParam, YunPianSmsAccount account) {
Map<String, Object> params = new HashMap<>(8);
params.put("apikey", account.getApikey());
params.put("mobile", StringUtils.join(smsParam.getPhones(), StrUtil.C_COMMA));
params.put("mobile", StringUtils.join(smsParam.getPhones(), StrPool.COMMA));
params.put("tpl_id", account.getTplId());
params.put("tpl_value", getTplValue(smsParam));
return params;
@ -87,11 +88,12 @@ public class YunPianSmsScript implements SmsScript {
private List<SmsRecord> assembleSmsRecord(SmsParam smsParam, YunPianSendResult response, YunPianSmsAccount account) {
List<SmsRecord> smsRecordList = new ArrayList<>();
if (Objects.isNull(response) || ArrayUtil.isEmpty(response.getData())) {
return null;
return smsRecordList;
}
List<SmsRecord> smsRecordList = new ArrayList<>();
for (YunPianSendResult.DataDTO datum : response.getData()) {
SmsRecord smsRecord = SmsRecord.builder()
@ -118,10 +120,10 @@ public class YunPianSmsScript implements SmsScript {
private String getTplValue(SmsParam smsParam) {
String tplValue = "";
if (StrUtil.isNotBlank(smsParam.getContent())) {
tplValue = StrUtil.split(smsParam.getContent(), PARAMS_SPLIT_KEY).stream().map(item -> {
List<String> kv = StrUtil.splitTrim(item, PARAMS_KV_SPLIT_KEY, 2);
return String.join("=", URLUtil.encodeQuery(kv.get(0)), URLUtil.encodeQuery(kv.get(1)));
if (CharSequenceUtil.isNotBlank(smsParam.getContent())) {
tplValue = CharSequenceUtil.split(smsParam.getContent(), PARAMS_SPLIT_KEY).stream().map(item -> {
List<String> kv = CharSequenceUtil.splitTrim(item, PARAMS_KV_SPLIT_KEY, 2);
return String.join("=", URLEncodeUtil.encodeQuery(kv.get(0)), URLEncodeUtil.encodeQuery(kv.get(1)));
}).collect(Collectors.joining("&"));
}
return tplValue;

@ -15,6 +15,8 @@ import java.util.List;
* @author 3y
*/
public class GroupIdMappingUtils {
private GroupIdMappingUtils() {
}
/**
* groupIds

@ -14,10 +14,7 @@ import com.java3y.austin.service.api.impl.domain.SendTaskModel;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.*;
import java.util.stream.Collectors;
/**
@ -29,12 +26,12 @@ import java.util.stream.Collectors;
@Service
public class SendAfterCheckAction implements BusinessProcess<SendTaskModel> {
public static final String PHONE_REGEX_EXP = "^((13[0-9])|(14[5,7,9])|(15[0-3,5-9])|(166)|(17[0-9])|(18[0-9])|(19[1,8,9]))\\d{8}$";
public static final String EMAIL_REGEX_EXP = "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$";
/**
*
*/
public static final HashMap<Integer, String> CHANNEL_REGEX_EXP = new HashMap<>();
public static final String PHONE_REGEX_EXP = "^((13[0-9])|(14[5,7,9])|(15[0-3,5-9])|(166)|(17[0-9])|(18[0-9])|(19[1,8,9]))\\d{8}$";
public static final String EMAIL_REGEX_EXP = "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$";
protected static final Map<Integer, String> CHANNEL_REGEX_EXP = new HashMap<>();
static {
CHANNEL_REGEX_EXP.put(IdType.PHONE.getCode(), PHONE_REGEX_EXP);
@ -51,7 +48,6 @@ public class SendAfterCheckAction implements BusinessProcess<SendTaskModel> {
filterIllegalReceiver(taskInfo);
if (CollUtil.isEmpty(taskInfo)) {
context.setNeedBreak(true).setResponse(BasicResultVO.fail(RespStatusEnum.CLIENT_BAD_PARAMETERS, "手机号或邮箱不合法, 无有效的发送任务"));
return;
}
}

@ -1,7 +1,8 @@
package com.java3y.austin.service.api.impl.action.send;
import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.text.StrPool;
import cn.hutool.core.util.ReflectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
@ -61,7 +62,7 @@ public class SendAssembleAction implements BusinessProcess<SendTaskModel> {
for (Field field : fields) {
String originValue = jsonObject.getString(field.getName());
if (StrUtil.isNotBlank(originValue)) {
if (CharSequenceUtil.isNotBlank(originValue)) {
String resultValue = ContentHolderUtil.replacePlaceHolder(originValue, variables);
Object resultObj = JSONUtil.isJsonObj(resultValue) ? JSONUtil.toBean(resultValue, field.getType()) : resultValue;
ReflectUtil.setFieldValue(contentModel, field, resultObj);
@ -70,7 +71,7 @@ public class SendAssembleAction implements BusinessProcess<SendTaskModel> {
// 如果 url 字段存在则在url拼接对应的埋点参数
String url = (String) ReflectUtil.getFieldValue(contentModel, LINK_NAME);
if (StrUtil.isNotBlank(url)) {
if (CharSequenceUtil.isNotBlank(url)) {
String resultUrl = TaskInfoUtils.generateUrl(url, messageTemplate.getId(), messageTemplate.getTemplateType());
ReflectUtil.setFieldValue(contentModel, LINK_NAME, resultUrl);
}
@ -114,7 +115,7 @@ public class SendAssembleAction implements BusinessProcess<SendTaskModel> {
.bizId(messageParam.getBizId())
.messageTemplateId(messageTemplate.getId())
.businessId(TaskInfoUtils.generateBusinessId(messageTemplate.getId(), messageTemplate.getTemplateType()))
.receiver(new HashSet<>(Arrays.asList(messageParam.getReceiver().split(String.valueOf(StrUtil.C_COMMA)))))
.receiver(new HashSet<>(Arrays.asList(messageParam.getReceiver().split(String.valueOf(StrPool.C_COMMA)))))
.idType(messageTemplate.getIdType())
.sendChannel(messageTemplate.getSendChannel())
.templateType(messageTemplate.getTemplateType())
@ -123,7 +124,7 @@ public class SendAssembleAction implements BusinessProcess<SendTaskModel> {
.sendAccount(messageTemplate.getSendAccount())
.contentModel(getContentModelValue(messageTemplate, messageParam)).build();
if (StrUtil.isBlank(taskInfo.getBizId())) {
if (CharSequenceUtil.isBlank(taskInfo.getBizId())) {
taskInfo.setBizId(taskInfo.getMessageId());
}

@ -1,7 +1,8 @@
package com.java3y.austin.service.api.impl.action.send;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.text.StrPool;
import com.java3y.austin.common.constant.AustinConstant;
import com.java3y.austin.common.enums.RespStatusEnum;
import com.java3y.austin.common.pipeline.BusinessProcess;
@ -40,7 +41,7 @@ public class SendPreCheckAction implements BusinessProcess<SendTaskModel> {
// 2. 过滤 receiver=null 的messageParam
List<MessageParam> resultMessageParamList = messageParamList.stream()
.filter(messageParam -> !StrUtil.isBlank(messageParam.getReceiver()))
.filter(messageParam -> !CharSequenceUtil.isBlank(messageParam.getReceiver()))
.collect(Collectors.toList());
if (CollUtil.isEmpty(resultMessageParamList)) {
context.setNeedBreak(true).setResponse(BasicResultVO.fail(RespStatusEnum.CLIENT_BAD_PARAMETERS, "含接受者的参数列表为空"));
@ -48,7 +49,7 @@ public class SendPreCheckAction implements BusinessProcess<SendTaskModel> {
}
// 3. 过滤 receiver 大于100的请求
if (resultMessageParamList.stream().anyMatch(messageParam -> messageParam.getReceiver().split(StrUtil.COMMA).length > AustinConstant.BATCH_RECEIVER_SIZE)) {
if (resultMessageParamList.stream().anyMatch(messageParam -> messageParam.getReceiver().split(StrPool.COMMA).length > AustinConstant.BATCH_RECEIVER_SIZE)) {
context.setNeedBreak(true).setResponse(BasicResultVO.fail(RespStatusEnum.TOO_MANY_RECEIVER));
return;
}

@ -1,6 +1,7 @@
package com.java3y.austin.service.api.impl.service;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.java3y.austin.common.constant.AustinConstant;
@ -31,10 +32,10 @@ public class TraceServiceImpl implements TraceService {
@Override
public TraceResponse traceByMessageId(String messageId) {
if (StrUtil.isBlank(messageId)) {
if (CharSequenceUtil.isBlank(messageId)) {
return new TraceResponse(RespStatusEnum.CLIENT_BAD_PARAMETERS.getCode(), RespStatusEnum.CLIENT_BAD_PARAMETERS.getMsg(), null);
}
String redisMessageKey = StrUtil.join(StrUtil.COLON, AustinConstant.CACHE_KEY_PREFIX, AustinConstant.MESSAGE_ID, messageId);
String redisMessageKey = CharSequenceUtil.join(StrUtil.COLON, AustinConstant.CACHE_KEY_PREFIX, AustinConstant.MESSAGE_ID, messageId);
List<String> messageList = redisUtils.lRange(redisMessageKey, 0, -1);
if (CollUtil.isEmpty(messageList)) {
return new TraceResponse(RespStatusEnum.FAIL.getCode(), RespStatusEnum.FAIL.getMsg(), null);

@ -85,7 +85,7 @@
<resource>META-INF/spring.schemas</resource>
</transformer>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.java3y.austin.stream.AustinBootStrap</mainClass>

@ -6,27 +6,23 @@ package com.java3y.austin.stream.constants;
* @author 3y
*/
public class AustinFlinkConstant {
/**
* Kafka
* TODO 使kafka broker ip:port
* !!! TODO 使kafka broker ip:port
* (ip,hostsip)
* groupId
*/
public static final String GROUP_ID = "austinLogGroup";
public static final String TOPIC_NAME = "austinTraceLog";
public static final String BROKER = "austin-kafka:9092";
/**
* redis
* TODO 使redis ip:port
* !!! TODO 使redis ip:port
* (ip,hostsip)
*/
public static final String REDIS_IP = "austin-redis";
public static final String REDIS_PORT = "6379";
public static final String REDIS_PASSWORD = "austin";
/**
* Flink
*/
@ -34,6 +30,8 @@ public class AustinFlinkConstant {
public static final String FUNCTION_NAME = "austin_transfer";
public static final String SINK_NAME = "austin_sink";
public static final String JOB_NAME = "AustinBootStrap";
private AustinFlinkConstant() {
}
}

@ -1,7 +1,8 @@
package com.java3y.austin.stream.sink;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.text.StrPool;
import com.alibaba.fastjson.JSON;
import com.google.common.base.Throwables;
import com.java3y.austin.common.constant.AustinConstant;
@ -47,7 +48,7 @@ public class AustinSink implements SinkFunction<AnchorInfo> {
* 0.messageId list:{key,list}
* key:Austin:MessageId:{messageId},listValue:[{timestamp,state,businessId},{timestamp,state,businessId}]
*/
String redisMessageKey = StrUtil.join(StrUtil.COLON, AustinConstant.CACHE_KEY_PREFIX, AustinConstant.MESSAGE_ID, info.getMessageId());
String redisMessageKey = CharSequenceUtil.join(StrPool.COLON, AustinConstant.CACHE_KEY_PREFIX, AustinConstant.MESSAGE_ID, info.getMessageId());
SimpleAnchorInfo messageAnchorInfo = SimpleAnchorInfo.builder().businessId(info.getBusinessId()).state(info.getState()).timestamp(info.getLogTimestamp()).build();
redisFutures.add(redisAsyncCommands.lpush(redisMessageKey.getBytes(), JSON.toJSONString(messageAnchorInfo).getBytes()));
redisFutures.add(redisAsyncCommands.expire(redisMessageKey.getBytes(), Duration.ofDays(3).toMillis() / 1000));

@ -33,6 +33,9 @@ public class LettuceRedisUtils {
redisClient = RedisClient.create(redisUri);
}
private LettuceRedisUtils() {
}
/**
* pipeline

@ -12,6 +12,9 @@ import org.apache.flink.connector.kafka.source.enumerator.initializer.OffsetsIni
*/
@Slf4j
public class MessageQueueUtils {
private MessageQueueUtils() {
}
/**
* kafkaConsumer
*
@ -20,13 +23,12 @@ public class MessageQueueUtils {
* @return
*/
public static KafkaSource<String> getKafkaConsumer(String topicName, String groupId, String broker) {
KafkaSource<String> source = KafkaSource.<String>builder()
return KafkaSource.<String>builder()
.setBootstrapServers(broker)
.setTopics(topicName)
.setGroupId(groupId)
.setStartingOffsets(OffsetsInitializer.earliest())
.setValueOnlyDeserializer(new SimpleStringSchema())
.build();
return source;
}
}

@ -14,6 +14,9 @@ import java.util.concurrent.TimeUnit;
*/
public class SupportThreadPoolConfig {
private SupportThreadPoolConfig() {
}
/**
* pending线
* 线线线

@ -21,18 +21,15 @@ import java.util.concurrent.TimeUnit;
@Slf4j
public class ThreadPoolExecutorShutdownDefinition implements ApplicationListener<ContextClosedEvent> {
private final List<ExecutorService> POOLS = Collections.synchronizedList(new ArrayList<>(12));
/**
* 线 线
*/
private final long AWAIT_TERMINATION = 20;
private static final long AWAIT_TERMINATION = 20;
/**
* awaitTermination
*/
private final TimeUnit TIME_UNIT = TimeUnit.SECONDS;
private static final TimeUnit TIME_UNIT = TimeUnit.SECONDS;
private final List<ExecutorService> POOLS = Collections.synchronizedList(new ArrayList<>(12));
public void registryExecutor(ExecutorService executor) {
POOLS.add(executor);
@ -53,14 +50,10 @@ public class ThreadPoolExecutorShutdownDefinition implements ApplicationListener
pool.shutdown();
try {
if (!pool.awaitTermination(AWAIT_TERMINATION, TIME_UNIT)) {
if (log.isWarnEnabled()) {
log.warn("Timed out while waiting for executor [{}] to terminate", pool);
}
}
} catch (InterruptedException ex) {
if (log.isWarnEnabled()) {
log.warn("Timed out while waiting for executor [{}] to terminate", pool);
}
} catch (InterruptedException ex) {
log.warn("Timed out while waiting for executor [{}] to terminate", pool);
Thread.currentThread().interrupt();
}
}

@ -6,11 +6,11 @@ package com.java3y.austin.support.constans;
*
* @author 3y
*/
public interface MessageQueuePipeline {
String EVENT_BUS = "eventBus";
String KAFKA = "kafka";
String ROCKET_MQ = "rocketMq";
String RABBIT_MQ = "rabbitMq";
String SPRING_EVENT_BUS = "springEventBus";
public class MessageQueuePipeline {
public static final String EVENT_BUS = "eventBus";
public static final String KAFKA = "kafka";
public static final String ROCKET_MQ = "rocketMq";
public static final String RABBIT_MQ = "rabbitMq";
public static final String SPRING_EVENT_BUS = "springEventBus";
}

@ -1,6 +1,6 @@
package com.java3y.austin.support.mq.kafka;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.text.CharSequenceUtil;
import com.java3y.austin.support.constans.MessageQueuePipeline;
import com.java3y.austin.support.mq.SendMqService;
import lombok.extern.slf4j.Slf4j;
@ -35,7 +35,7 @@ public class KafkaSendMqServiceImpl implements SendMqService {
@Override
public void send(String topic, String jsonValue, String tagId) {
if (StrUtil.isNotBlank(tagId)) {
if (CharSequenceUtil.isNotBlank(tagId)) {
List<Header> headers = Arrays.asList(new RecordHeader(tagIdKey, tagId.getBytes(StandardCharsets.UTF_8)));
kafkaTemplate.send(new ProducerRecord(topic, null, null, null, jsonValue, headers));
return;

@ -3,13 +3,15 @@ package com.java3y.austin.support.mq.springeventbus;
import lombok.Builder;
import lombok.Data;
import java.io.Serializable;
/**
* @author 3y
*/
@Data
@Builder
public class AustinSpringEventSource {
public String topic;
public String jsonValue;
public String tagId;
public class AustinSpringEventSource implements Serializable {
private String topic;
private String jsonValue;
private String tagId;
}

@ -57,7 +57,7 @@ public abstract class AbstractLazyPending<T> {
}
// 判断是否停止当前线程
if (stop && CollUtil.isEmpty(tasks)) {
if (Boolean.TRUE.equals(stop) && CollUtil.isEmpty(tasks)) {
executorService.shutdown();
break;
}
@ -75,6 +75,7 @@ public abstract class AbstractLazyPending<T> {
} catch (Exception e) {
log.error("Pending#initConsumePending failed:{}", Throwables.getStackTraceAsString(e));
Thread.currentThread().interrupt();
}
}
});
@ -102,6 +103,7 @@ public abstract class AbstractLazyPending<T> {
pendingParam.getQueue().put(t);
} catch (InterruptedException e) {
log.error("Pending#pending error:{}", Throwables.getStackTraceAsString(e));
Thread.currentThread().interrupt();
}
}

@ -1,6 +1,6 @@
package com.java3y.austin.support.service.impl;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.text.StrPool;
import cn.hutool.setting.dialect.Props;
import com.ctrip.framework.apollo.Config;
import com.java3y.austin.support.service.ConfigService;
@ -43,10 +43,10 @@ public class ConfigServiceImpl implements ConfigService {
@Override
public String getProperty(String key, String defaultValue) {
if (enableApollo) {
Config config = com.ctrip.framework.apollo.ConfigService.getConfig(namespaces.split(StrUtil.COMMA)[0]);
if (Boolean.TRUE.equals(enableApollo)) {
Config config = com.ctrip.framework.apollo.ConfigService.getConfig(namespaces.split(StrPool.COMMA)[0]);
return config.getProperty(key, defaultValue);
} else if (enableNacos) {
} else if (Boolean.TRUE.equals(enableNacos)) {
return nacosUtils.getProperty(key, defaultValue);
} else {
return props.getProperty(key, defaultValue);

@ -1,6 +1,6 @@
package com.java3y.austin.support.utils;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.http.ContentType;
import cn.hutool.http.Header;
@ -24,6 +24,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
/**
@ -59,7 +60,7 @@ public class AccessTokenUtils {
try {
resultToken = redisTemplate.opsForValue().get(accessTokenPrefix + accountId);
if (StrUtil.isNotBlank(resultToken) && !refresh) {
if (CharSequenceUtil.isNotBlank(resultToken) && Boolean.FALSE.equals(refresh)) {
return resultToken;
}
if (ChannelType.DING_DING_WORK_NOTICE.getCode().equals(sendChannel)) {
@ -67,7 +68,8 @@ public class AccessTokenUtils {
} else if (ChannelType.PUSH.getCode().equals(sendChannel)) {
resultToken = getGeTuiAccessToken(account);
}
if (StrUtil.isNotBlank(resultToken)) {
if (Objects.nonNull(resultToken) && CharSequenceUtil.isNotBlank(resultToken)) {
redisTemplate.opsForValue().set(accessTokenPrefix + accountId, resultToken, expireTime, TimeUnit.SECONDS);
}
} catch (Exception e) {

@ -50,7 +50,7 @@ public class AccountUtils {
@Bean
public RedisTemplateWxRedisOps redisTemplateWxRedisOps() {
return new RedisTemplateWxRedisOps(redisTemplate);
return new RedisTemplateWxRedisOps(this.redisTemplate);
}
/**

@ -6,10 +6,13 @@ import lombok.extern.slf4j.Slf4j;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Objects;
/**
* @author 3y
@ -18,6 +21,10 @@ import java.util.List;
@Slf4j
public class AustinFileUtils {
private AustinFileUtils() {
}
/**
* File
*
@ -26,16 +33,36 @@ public class AustinFileUtils {
* @return
*/
public static File getRemoteUrl2File(String path, String remoteUrl) {
InputStream inputStream = null;
FileOutputStream fileOutputStream = null;
try {
URL url = new URL(remoteUrl);
File file = new File(path, url.getPath());
inputStream = url.openStream();
fileOutputStream = new FileOutputStream(file);
if (!file.exists()) {
file.getParentFile().mkdirs();
IoUtil.copy(url.openStream(), new FileOutputStream(file));
IoUtil.copy(inputStream, fileOutputStream);
}
return file;
} catch (Exception e) {
log.error("AustinFileUtils#getRemoteUrl2File fail:{},remoteUrl:{}", Throwables.getStackTraceAsString(e), remoteUrl);
} finally {
if (Objects.nonNull(inputStream)) {
try {
inputStream.close();
} catch (IOException e) {
log.error("close#inputStream fail:{}", Throwables.getStackTraceAsString(e));
}
}
if (Objects.nonNull(fileOutputStream)) {
try {
fileOutputStream.close();
} catch (IOException e) {
log.error("close#fileOutputStream fail:{}", Throwables.getStackTraceAsString(e));
}
}
}
return null;
}

@ -10,7 +10,6 @@ import java.util.function.Function;
* @date 2023/2/6 10:01
*/
public class ConcurrentHashMapUtils {
private static boolean IS_JAVA8;
static {
@ -22,6 +21,9 @@ public class ConcurrentHashMapUtils {
}
}
private ConcurrentHashMapUtils() {
}
/**
* Java 8 ConcurrentHashMap#computeIfAbsent
*

@ -13,19 +13,19 @@ import java.util.Map;
* austin{$var}
*/
public class ContentHolderUtil {
/**
*
*/
private static final String PLACE_HOLDER_PREFIX = "{$";
/**
*
*/
private static final String PLACE_HOLDER_SUFFIX = "}";
private static final PropertyPlaceholderHelper PROPERTY_PLACEHOLDER_HELPER = new PropertyPlaceholderHelper(PLACE_HOLDER_PREFIX, PLACE_HOLDER_SUFFIX);
private ContentHolderUtil() {
}
public static String replacePlaceHolder(final String template, final Map<String, String> paramMap) {
return PROPERTY_PLACEHOLDER_HELPER.replacePlaceholders(template, new CustomPlaceholderResolver(template, paramMap));
@ -45,7 +45,7 @@ public class ContentHolderUtil {
public String resolvePlaceholder(String placeholderName) {
String value = paramMap.get(placeholderName);
if (StringUtils.isEmpty(value)) {
String errorStr = MessageFormat.format("template:{0} require param:{1},but not exist! paramMap:{2}", template, placeholderName, paramMap.toString());
String errorStr = MessageFormat.format("template:{0} require param:{1},but not exist! paramMap:{2}", template, placeholderName, paramMap);
throw new IllegalArgumentException(errorStr);
}
return value;

@ -1,6 +1,6 @@
package com.java3y.austin.support.utils;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.text.CharSequenceUtil;
import com.alibaba.nacos.api.annotation.NacosInjected;
import com.alibaba.nacos.api.config.ConfigService;
import com.alibaba.nacos.api.exception.NacosException;
@ -40,7 +40,7 @@ public class NacosUtils {
log.error("Nacos error:{}", ExceptionUtils.getStackTrace(e));
}
String property = properties.getProperty(key);
return StrUtil.isBlank(property) ? defaultValue : property;
return CharSequenceUtil.isBlank(property) ? defaultValue : property;
}
private String getContext() {

@ -10,10 +10,7 @@ import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.script.RedisScript;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.*;
/**
* @author 3y
@ -38,7 +35,10 @@ public class RedisUtils {
List<String> value = redisTemplate.opsForValue().multiGet(keys);
if (CollUtil.isNotEmpty(value)) {
for (int i = 0; i < keys.size(); i++) {
result.put(keys.get(i), value.get(i));
if (Objects.nonNull(value.get(i))) {
result.put(keys.get(i), value.get(i));
}
}
}
} catch (Exception e) {
@ -54,12 +54,11 @@ public class RedisUtils {
*/
public Map<Object, Object> hGetAll(String key) {
try {
Map<Object, Object> entries = redisTemplate.opsForHash().entries(key);
return entries;
return redisTemplate.opsForHash().entries(key);
} catch (Exception e) {
log.error("RedisUtils#hGetAll fail! e:{}", Throwables.getStackTraceAsString(e));
}
return null;
return new HashMap<>(2);
}
/**
@ -73,7 +72,7 @@ public class RedisUtils {
} catch (Exception e) {
log.error("RedisUtils#lRange fail! e:{}", Throwables.getStackTraceAsString(e));
}
return null;
return new ArrayList<>();
}
/**
@ -105,7 +104,7 @@ public class RedisUtils {
return null;
});
} catch (Exception e) {
log.error("RedisUtils#pipelineSetEx fail! e:{}", Throwables.getStackTraceAsString(e));
log.error("RedisUtils#lPush fail! e:{}", Throwables.getStackTraceAsString(e));
}
}
@ -116,7 +115,7 @@ public class RedisUtils {
try {
return redisTemplate.opsForList().size(key);
} catch (Exception e) {
log.error("RedisUtils#pipelineSetEx fail! e:{}", Throwables.getStackTraceAsString(e));
log.error("RedisUtils#lLen fail! e:{}", Throwables.getStackTraceAsString(e));
}
return 0L;
}
@ -128,7 +127,7 @@ public class RedisUtils {
try {
return redisTemplate.opsForList().leftPop(key);
} catch (Exception e) {
log.error("RedisUtils#pipelineSetEx fail! e:{}", Throwables.getStackTraceAsString(e));
log.error("RedisUtils#lPop fail! e:{}", Throwables.getStackTraceAsString(e));
}
return "";
}

@ -13,9 +13,10 @@ import java.util.Date;
* @author 3y
*/
public class TaskInfoUtils {
private static final int TYPE_FLAG = 1000000;
private static final String CODE = "track_code_bid";
private TaskInfoUtils() {
}
/**
* Id

@ -36,7 +36,7 @@ public class AustinAspect {
/**
* KEY
*/
private final String REQUEST_ID_KEY = "request_unique_id";
private static final String REQUEST_ID_KEY = "request_unique_id";
@Autowired
private HttpServletRequest request;

@ -1,7 +1,8 @@
package com.java3y.austin.web.controller;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.text.StrPool;
import com.java3y.austin.common.constant.AustinConstant;
import com.java3y.austin.common.enums.RespStatusEnum;
import com.java3y.austin.support.domain.ChannelAccount;
@ -48,10 +49,10 @@ public class ChannelAccountController {
@PostMapping("/save")
@ApiOperation("/保存数据")
public ChannelAccount saveOrUpdate(@RequestBody ChannelAccount channelAccount) {
if (loginUtils.needLogin() && StrUtil.isBlank(channelAccount.getCreator())) {
if (loginUtils.needLogin() && CharSequenceUtil.isBlank(channelAccount.getCreator())) {
throw new CommonException(RespStatusEnum.NO_LOGIN.getCode(), RespStatusEnum.NO_LOGIN.getMsg());
}
channelAccount.setCreator(StrUtil.isBlank(channelAccount.getCreator()) ? AustinConstant.DEFAULT_CREATOR : channelAccount.getCreator());
channelAccount.setCreator(CharSequenceUtil.isBlank(channelAccount.getCreator()) ? AustinConstant.DEFAULT_CREATOR : channelAccount.getCreator());
return channelAccountService.save(channelAccount);
}
@ -62,10 +63,10 @@ public class ChannelAccountController {
@GetMapping("/queryByChannelType")
@ApiOperation("/根据渠道标识查询相关的记录")
public List<CommonAmisVo> query(Integer channelType, String creator) {
if (loginUtils.needLogin() && StrUtil.isBlank(creator)) {
if (loginUtils.needLogin() && CharSequenceUtil.isBlank(creator)) {
throw new CommonException(RespStatusEnum.NO_LOGIN.getCode(), RespStatusEnum.NO_LOGIN.getMsg());
}
creator = StrUtil.isBlank(creator) ? AustinConstant.DEFAULT_CREATOR : creator;
creator = CharSequenceUtil.isBlank(creator) ? AustinConstant.DEFAULT_CREATOR : creator;
List<ChannelAccount> channelAccounts = channelAccountService.queryByChannelType(channelType, creator);
return Convert4Amis.getChannelAccountVo(channelAccounts, channelType);
@ -77,11 +78,11 @@ public class ChannelAccountController {
@GetMapping("/list")
@ApiOperation("/渠道账号列表信息")
public List<ChannelAccount> list(String creator) {
if (loginUtils.needLogin() && StrUtil.isBlank(creator)) {
if (loginUtils.needLogin() && CharSequenceUtil.isBlank(creator)) {
throw new CommonException(RespStatusEnum.NO_LOGIN.getCode(), RespStatusEnum.NO_LOGIN.getMsg());
}
creator = StrUtil.isBlank(creator) ? AustinConstant.DEFAULT_CREATOR : creator;
creator = CharSequenceUtil.isBlank(creator) ? AustinConstant.DEFAULT_CREATOR : creator;
return channelAccountService.list(creator);
}
@ -93,8 +94,8 @@ public class ChannelAccountController {
@DeleteMapping("delete/{id}")
@ApiOperation("/根据Ids删除")
public void deleteByIds(@PathVariable("id") String id) {
if (StrUtil.isNotBlank(id)) {
List<Long> idList = Arrays.stream(id.split(StrUtil.COMMA)).map(Long::valueOf).collect(Collectors.toList());
if (CharSequenceUtil.isNotBlank(id)) {
List<Long> idList = Arrays.stream(id.split(StrPool.COMMA)).map(Long::valueOf).collect(Collectors.toList());
channelAccountService.deleteByIds(idList);
}
}

@ -1,6 +1,6 @@
package com.java3y.austin.web.controller;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.text.CharSequenceUtil;
import com.java3y.austin.web.annotation.AustinAspect;
import com.java3y.austin.web.annotation.AustinResult;
import com.java3y.austin.web.service.DataService;
@ -39,7 +39,7 @@ public class DataController {
@PostMapping("/message")
@ApiOperation("/获取【72小时】发送消息的全链路数据")
public UserTimeLineVo getMessageData(@RequestBody DataParam dataParam) {
if (Objects.isNull(dataParam) || StrUtil.isBlank(dataParam.getMessageId())) {
if (Objects.isNull(dataParam) || CharSequenceUtil.isBlank(dataParam.getMessageId())) {
return UserTimeLineVo.builder().items(new ArrayList<>()).build();
}
return dataService.getTraceMessageInfo(dataParam.getMessageId());
@ -48,7 +48,7 @@ public class DataController {
@PostMapping("/user")
@ApiOperation("/获取【当天】用户接收消息的全链路数据")
public UserTimeLineVo getUserData(@RequestBody DataParam dataParam) {
if (Objects.isNull(dataParam) || StrUtil.isBlank(dataParam.getReceiver())) {
if (Objects.isNull(dataParam) || CharSequenceUtil.isBlank(dataParam.getReceiver())) {
return UserTimeLineVo.builder().items(new ArrayList<>()).build();
}
return dataService.getTraceUserInfo(dataParam.getReceiver());
@ -58,7 +58,7 @@ public class DataController {
@ApiOperation("/获取消息模板全链路数据")
public EchartsVo getMessageTemplateData(@RequestBody DataParam dataParam) {
EchartsVo echartsVo = EchartsVo.builder().build();
if (StrUtil.isNotBlank(dataParam.getBusinessId())) {
if (CharSequenceUtil.isNotBlank(dataParam.getBusinessId())) {
echartsVo = dataService.getTraceMessageTemplateInfo(dataParam.getBusinessId());
}
return echartsVo;
@ -67,7 +67,7 @@ public class DataController {
@PostMapping("/sms")
@ApiOperation("/获取短信下发数据")
public SmsTimeLineVo getSmsData(@RequestBody DataParam dataParam) {
if (Objects.isNull(dataParam) || Objects.isNull(dataParam.getDateTime()) || StrUtil.isBlank(dataParam.getReceiver())) {
if (Objects.isNull(dataParam) || Objects.isNull(dataParam.getDateTime()) || CharSequenceUtil.isBlank(dataParam.getReceiver())) {
return SmsTimeLineVo.builder().items(Lists.newArrayList()).build();
}
return dataService.getTraceSmsInfo(dataParam);

@ -1,8 +1,9 @@
package com.java3y.austin.web.controller;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.text.StrPool;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.google.common.base.Throwables;
import com.java3y.austin.common.enums.RespStatusEnum;
@ -34,7 +35,10 @@ import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.util.*;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
@ -73,7 +77,7 @@ public class MessageTemplateController {
@PostMapping("/save")
@ApiOperation("/保存数据")
public MessageTemplate saveOrUpdate(@RequestBody MessageTemplate messageTemplate) {
if (loginUtils.needLogin() && StrUtil.isBlank(messageTemplate.getCreator())) {
if (loginUtils.needLogin() && CharSequenceUtil.isBlank(messageTemplate.getCreator())) {
throw new CommonException(RespStatusEnum.NO_LOGIN.getCode(), RespStatusEnum.NO_LOGIN.getMsg());
}
return messageTemplateService.saveOrUpdate(messageTemplate);
@ -85,7 +89,7 @@ public class MessageTemplateController {
@GetMapping("/list")
@ApiOperation("/列表页")
public MessageTemplateVo queryList(@Validated MessageTemplateParam messageTemplateParam) {
if (loginUtils.needLogin() && StrUtil.isBlank(messageTemplateParam.getCreator())) {
if (loginUtils.needLogin() && CharSequenceUtil.isBlank(messageTemplateParam.getCreator())) {
throw new CommonException(RespStatusEnum.NO_LOGIN.getCode(), RespStatusEnum.NO_LOGIN.getMsg());
}
Page<MessageTemplate> messageTemplates = messageTemplateService.queryList(messageTemplateParam);
@ -119,8 +123,8 @@ public class MessageTemplateController {
@DeleteMapping("delete/{id}")
@ApiOperation("/根据Ids删除")
public void deleteByIds(@PathVariable("id") String id) {
if (StrUtil.isNotBlank(id)) {
List<Long> idList = Arrays.stream(id.split(StrUtil.COMMA)).map(Long::valueOf).collect(Collectors.toList());
if (CharSequenceUtil.isNotBlank(id)) {
List<Long> idList = Arrays.stream(id.split(StrPool.COMMA)).map(Long::valueOf).collect(Collectors.toList());
messageTemplateService.deleteByIds(idList);
}
}
@ -192,7 +196,7 @@ public class MessageTemplateController {
*/
@PostMapping("upload")
@ApiOperation("/上传人群文件")
public HashMap<Object, Object> upload(@RequestParam("file") MultipartFile file) {
public Map<Object, Object> upload(@RequestParam("file") MultipartFile file) {
String filePath = dataPath + IdUtil.fastSimpleUUID() + file.getOriginalFilename();
try {
File localFile = new File(filePath);

@ -1,9 +1,9 @@
package com.java3y.austin.web.controller;
import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.Header;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSON;
@ -132,7 +132,7 @@ public class OfficialAccountController {
String timestamp = request.getParameter(OfficialAccountParamConstant.TIMESTAMP);
// echoStr!=null说明只是微信调试的请求
if (StrUtil.isNotBlank(echoStr)) {
if (CharSequenceUtil.isNotBlank(echoStr)) {
return echoStr;
}
@ -140,7 +140,7 @@ public class OfficialAccountController {
return RespStatusEnum.CLIENT_BAD_PARAMETERS.getMsg();
}
String encryptType = StrUtil.isBlank(request.getParameter(OfficialAccountParamConstant.ENCRYPT_TYPE)) ? OfficialAccountParamConstant.RAW : request.getParameter(OfficialAccountParamConstant.ENCRYPT_TYPE);
String encryptType = CharSequenceUtil.isBlank(request.getParameter(OfficialAccountParamConstant.ENCRYPT_TYPE)) ? OfficialAccountParamConstant.RAW : request.getParameter(OfficialAccountParamConstant.ENCRYPT_TYPE);
if (OfficialAccountParamConstant.RAW.equals(encryptType)) {
WxMpXmlMessage inMessage = WxMpXmlMessage.fromXml(request.getInputStream());
log.info("raw inMessage:{}", JSON.toJSONString(inMessage));
@ -197,7 +197,7 @@ public class OfficialAccountController {
@AustinResult
public WxMpUser checkLogin(String sceneId) {
String userInfo = redisTemplate.opsForValue().get(sceneId);
if (StrUtil.isBlank(userInfo)) {
if (CharSequenceUtil.isBlank(userInfo)) {
throw new CommonException(RespStatusEnum.SUCCESS.getCode(), RespStatusEnum.SUCCESS.getMsg(), RespStatusEnum.NO_LOGIN);
}
return JSON.parseObject(userInfo, WxMpUser.class);

@ -22,20 +22,17 @@ import org.springframework.web.bind.annotation.ResponseStatus;
public class ExceptionHandlerAdvice {
private static final Logger log = LoggerFactory.getLogger(ExceptionHandlerAdvice.class);
public ExceptionHandlerAdvice() {
}
@ExceptionHandler({Exception.class})
@ResponseStatus(HttpStatus.OK)
public BasicResultVO exceptionResponse(Exception e) {
BasicResultVO result = BasicResultVO.fail(RespStatusEnum.ERROR_500, "\r\n" + Throwables.getStackTrace(e) + "\r\n");
public BasicResultVO<String> exceptionResponse(Exception e) {
log.error(Throwables.getStackTrace(e));
return result;
return BasicResultVO.fail(RespStatusEnum.ERROR_500, "\r\n" + Throwables.getStackTrace(e) + "\r\n");
}
@ExceptionHandler({CommonException.class})
@ResponseStatus(HttpStatus.OK)
public BasicResultVO commonResponse(CommonException ce) {
public BasicResultVO<RespStatusEnum> commonResponse(CommonException ce) {
log.error(Throwables.getStackTrace(ce));
return new BasicResultVO(ce.getCode(), ce.getMessage(), ce.getRespStatusEnum());
}

@ -1,7 +1,7 @@
package com.java3y.austin.web.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.text.CharSequenceUtil;
import com.java3y.austin.common.constant.AustinConstant;
import com.java3y.austin.common.constant.CommonConstant;
import com.java3y.austin.support.dao.ChannelAccountDao;
@ -28,7 +28,7 @@ public class ChannelAccountServiceImpl implements ChannelAccountService {
channelAccount.setCreated(Math.toIntExact(DateUtil.currentSeconds()));
channelAccount.setIsDeleted(CommonConstant.FALSE);
}
channelAccount.setCreator(StrUtil.isBlank(channelAccount.getCreator()) ? AustinConstant.DEFAULT_CREATOR : channelAccount.getCreator());
channelAccount.setCreator(CharSequenceUtil.isBlank(channelAccount.getCreator()) ? AustinConstant.DEFAULT_CREATOR : channelAccount.getCreator());
channelAccount.setUpdated(Math.toIntExact(DateUtil.currentSeconds()));
return channelAccountDao.save(channelAccount);
}

@ -4,8 +4,8 @@ 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.CharSequenceUtil;
import cn.hutool.core.text.StrPool;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.java3y.austin.common.constant.AustinConstant;
import com.java3y.austin.common.domain.SimpleAnchorInfo;
@ -104,7 +104,7 @@ public class DataServiceImpl implements DataService {
return SmsTimeLineVo.builder().items(Arrays.asList(SmsTimeLineVo.ItemsVO.builder().build())).build();
}
Map<String, List<SmsRecord>> maps = smsRecordList.stream().collect(Collectors.groupingBy((o) -> o.getPhone() + o.getSeriesId()));
Map<String, List<SmsRecord>> maps = smsRecordList.stream().collect(Collectors.groupingBy(o -> o.getPhone() + o.getSeriesId()));
return Convert4Amis.getSmsTimeLineVo(maps);
}
@ -158,7 +158,7 @@ public class DataServiceImpl implements DataService {
}
for (String detail : sb.toString().split(StrPool.CRLF)) {
if (StrUtil.isNotBlank(detail)) {
if (CharSequenceUtil.isNotBlank(detail)) {
UserTimeLineVo.ItemsVO itemsVO = UserTimeLineVo.ItemsVO.builder()
.businessId(entry.getKey())
.sendType(EnumUtil.getEnumByCode(messageTemplate.getSendChannel(), ChannelType.class).getDescription())

@ -1,7 +1,7 @@
package com.java3y.austin.web.service.impl;
import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpRequest;
import com.alibaba.fastjson.JSON;
import com.dingtalk.api.DefaultDingTalkClient;
@ -66,7 +66,7 @@ public class MaterialServiceImpl implements MaterialService {
} catch (Exception e) {
log.error("MaterialService#dingDingMaterialUpload fail:{}", Throwables.getStackTraceAsString(e));
}
return BasicResultVO.fail("未知错误,联系管理员");
return BasicResultVO.fail(RespStatusEnum.SERVICE_ERROR.getMsg());
}
@Override
@ -88,7 +88,7 @@ public class MaterialServiceImpl implements MaterialService {
} catch (Exception e) {
log.error("MaterialService#enterpriseWeChatRootMaterialUpload fail:{}", Throwables.getStackTraceAsString(e));
}
return BasicResultVO.fail("未知错误,联系管理员");
return BasicResultVO.fail(RespStatusEnum.SERVICE_ERROR.getMsg());
}
@Override
@ -99,13 +99,13 @@ public class MaterialServiceImpl implements MaterialService {
wxCpService.setWxCpConfigStorage(accountConfig);
WxMediaUploadResult result = wxCpService.getMediaService()
.upload(EnumUtil.getDescriptionByCode(Integer.valueOf(fileType), FileType.class), SpringFileUtils.getFile(multipartFile));
if (StrUtil.isNotBlank(result.getMediaId())) {
if (CharSequenceUtil.isNotBlank(result.getMediaId())) {
return new BasicResultVO(RespStatusEnum.SUCCESS, UploadResponseVo.builder().id(result.getMediaId()).build());
}
log.error("MaterialService#enterpriseWeChatMaterialUpload fail:{}", JSON.toJSONString(result));
} catch (Exception e) {
log.error("MaterialService#enterpriseWeChatMaterialUpload fail:{}", Throwables.getStackTraceAsString(e));
}
return BasicResultVO.fail("未知错误,联系管理员");
return BasicResultVO.fail(RespStatusEnum.SERVICE_ERROR.getMsg());
}
}

@ -1,8 +1,8 @@
package com.java3y.austin.web.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.java3y.austin.common.constant.AustinConstant;
import com.java3y.austin.common.constant.CommonConstant;
import com.java3y.austin.common.enums.AuditStatus;
@ -50,11 +50,11 @@ public class MessageTemplateServiceImpl implements MessageTemplateService {
@Override
public Page<MessageTemplate> queryList(MessageTemplateParam param) {
PageRequest pageRequest = PageRequest.of(param.getPage() - 1, param.getPerPage());
String creator = StrUtil.isBlank(param.getCreator()) ? AustinConstant.DEFAULT_CREATOR : param.getCreator();
String creator = CharSequenceUtil.isBlank(param.getCreator()) ? AustinConstant.DEFAULT_CREATOR : param.getCreator();
return messageTemplateDao.findAll((Specification<MessageTemplate>) (root, query, cb) -> {
List<Predicate> predicateList = new ArrayList<>();
// 加搜索条件
if (StrUtil.isNotBlank(param.getKeywords())) {
if (CharSequenceUtil.isNotBlank(param.getKeywords())) {
predicateList.add(cb.like(root.get("name").as(String.class), "%" + param.getKeywords() + "%"));
}
predicateList.add(cb.equal(root.get("isDeleted").as(Integer.class), CommonConstant.FALSE));
@ -161,12 +161,12 @@ public class MessageTemplateServiceImpl implements MessageTemplateService {
* @param messageTemplate
*/
private void initStatus(MessageTemplate messageTemplate) {
messageTemplate.setFlowId(StrUtil.EMPTY)
messageTemplate.setFlowId(CharSequenceUtil.EMPTY)
.setMsgStatus(MessageStatus.INIT.getCode()).setAuditStatus(AuditStatus.WAIT_AUDIT.getCode())
.setCreator(StrUtil.isBlank(messageTemplate.getCreator()) ? AustinConstant.DEFAULT_CREATOR : messageTemplate.getCreator())
.setUpdator(StrUtil.isBlank(messageTemplate.getUpdator()) ? AustinConstant.DEFAULT_UPDATOR : messageTemplate.getUpdator())
.setTeam(StrUtil.isBlank(messageTemplate.getTeam()) ? AustinConstant.DEFAULT_TEAM : messageTemplate.getTeam())
.setAuditor(StrUtil.isBlank(messageTemplate.getAuditor()) ? AustinConstant.DEFAULT_AUDITOR : messageTemplate.getAuditor())
.setCreator(CharSequenceUtil.isBlank(messageTemplate.getCreator()) ? AustinConstant.DEFAULT_CREATOR : messageTemplate.getCreator())
.setUpdator(CharSequenceUtil.isBlank(messageTemplate.getUpdator()) ? AustinConstant.DEFAULT_UPDATOR : messageTemplate.getUpdator())
.setTeam(CharSequenceUtil.isBlank(messageTemplate.getTeam()) ? AustinConstant.DEFAULT_TEAM : messageTemplate.getTeam())
.setAuditor(CharSequenceUtil.isBlank(messageTemplate.getAuditor()) ? AustinConstant.DEFAULT_AUDITOR : messageTemplate.getAuditor())
.setCreated(Math.toIntExact(DateUtil.currentSeconds()))
.setIsDeleted(CommonConstant.FALSE);

@ -1,6 +1,6 @@
package com.java3y.austin.web.utils;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.text.CharSequenceUtil;
import com.java3y.austin.common.enums.AnchorState;
import com.java3y.austin.common.enums.ChannelType;
import com.java3y.austin.common.enums.EnumUtil;
@ -15,6 +15,10 @@ import me.chanjar.weixin.common.error.WxMpErrorMsgEnum;
*/
public class AnchorStateUtils {
private AnchorStateUtils() {
}
/**
*
*
@ -26,7 +30,7 @@ public class AnchorStateUtils {
String stateDescription = EnumUtil.getDescriptionByCode(state, AnchorState.class);
// 如果 AnchorState 找不到对应的点位描述,那就是在对应渠道的点位信息
if (StrUtil.isBlank(stateDescription)) {
if (CharSequenceUtil.isBlank(stateDescription)) {
if (ChannelType.MINI_PROGRAM.getCode().equals(channel)) {
stateDescription = WxMaErrorMsgEnum.findMsgByCode(state);
} else if (ChannelType.OFFICIAL_ACCOUNT.getCode().equals(channel)) {

@ -4,6 +4,7 @@ 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.fastjson.JSON;
@ -116,7 +117,7 @@ public class Convert4Amis {
for (Field field : fields) {
if (FLAT_FIELD_NAME.contains(field.getName())) {
String fieldValue = (String) ReflectUtil.getFieldValue(obj, field);
JSONObject jsonObject = JSONObject.parseObject(fieldValue);
JSONObject jsonObject = JSON.parseObject(fieldValue);
for (String key : jsonObject.keySet()) {
/**
* OA
@ -160,7 +161,7 @@ public class Convert4Amis {
CommonAmisVo officialAccountParam = null;
for (WxMpTemplate wxMpTemplate : allPrivateTemplate) {
if (wxTemplateId.equals(wxMpTemplate.getTemplateId())) {
String[] data = wxMpTemplate.getContent().split(StrUtil.LF);
String[] data = wxMpTemplate.getContent().split(StrPool.LF);
officialAccountParam = CommonAmisVo.builder()
.type("input-table")
.name("officialAccountParam")

@ -1,5 +1,6 @@
package com.java3y.austin.web.utils;
import com.google.common.base.Throwables;
import com.java3y.austin.common.constant.CommonConstant;
import com.java3y.austin.common.constant.OfficialAccountParamConstant;
import com.java3y.austin.web.config.WeChatLoginConfig;
@ -53,6 +54,7 @@ public class LoginUtils {
return true;
}
} catch (Exception e) {
log.error("LoginUtils#needLogin fail:{}", Throwables.getStackTraceAsString(e));
}
return false;
}

@ -14,7 +14,8 @@ import java.util.Objects;
* multipartFile File
*/
public class SpringFileUtils {
private SpringFileUtils() {
}
/**
* multipartFile File

@ -3,7 +3,7 @@ package com.java3y.austin;
import org.junit.jupiter.api.Test;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
public class MiniProgramTestController extends BaseTestController {
class MiniProgramTestController extends BaseTestController {
private static final String BASE_URL = "/miniProgram";
@ -13,7 +13,7 @@ public class MiniProgramTestController extends BaseTestController {
* @throws Exception
*/
@Test
public void queryList() throws Exception {
void queryList() throws Exception {
//doRequest
resultActions = mvc.perform(
MockMvcRequestBuilders

@ -0,0 +1,202 @@
<?xml version="1.0"?>
<!DOCTYPE module PUBLIC
"-//Puppy Crawl//DTD Check Configuration 1.3//EN"
"http://www.puppycrawl.com/dtds/configuration_1_3.dtd">
<!--checkStyle -->
<module name="Checker">
<!-- 检查文件是否以一个空行结束 -->
<module name="NewlineAtEndOfFile"/>
<!-- 文件长度不超过1500行 -->
<module name="FileLength">
<property name="max" value="1500"/>
</module>
<!-- 长度检查 -->
<!-- 每行不超过140个字符 -->
<module name="LineLength">
<property name="fileExtensions" value="java"/>
<property name="max" value="140"/>
<property name="ignorePattern" value="^package.*|^import.*|a href|href|http://|https://|ftp://"/>
</module>
<!--禁止打印e.printStackTrace错误信息-->
<module name="RegexpSingleline">
<property name="format" value="printStackTrace"/>
<property name="message" value="Prohibit invoking printStackTrace in source code !"/>
</module>
<!-- 每个java文件一个语法树 -->
<module name="TreeWalker">
<!-- import检查-->
<!-- 避免使用* -->
<module name="AvoidStarImport">
<property name="excludes" value="java.io,java.net,java.lang.Math"/>
<!-- 实例import java.util.*;.-->
<property name="allowClassImports" value="false"/>
<!-- 实例 import static org.junit.Assert.*;-->
<property name="allowStaticMemberImports" value="true"/>
</module>
<!-- 检查是否导入了多余的包 -->
<module name="RedundantImport"/>
<!-- 没用的import检查比如1.没有被用到2.重复的3.import java.lang的4.import 与该类在同一个package的 -->
<module name="UnusedImports"/>
<!-- 注释检查 -->
<!-- 检查构造函数的javadoc -->
<module name="JavadocType">
<!--允许位置的tag如@date,@description等-->
<property name="allowUnknownTags" value="true"/>
<message key="javadoc.missing" value="类注释缺少Javadoc注释。"/>
</module>
<!--方法注释-->
<module name="JavadocMethod">
<property name="tokens" value="METHOD_DEF"/>
<!--允许get set 方法没有注释-->
<!-- <property name="allowMissingPropertyJavadoc" value="true"/>-->
<message key="javadoc.missing" value="方法注释缺少Javadoc注释。"/>
</module>
<!--校验方法的注释-->
<module name="MissingJavadocMethod">
<!--允许get set 方法没有注释-->
<property name="allowMissingPropertyJavadoc" value="true"/>
<!--允许构造方法没有注释-->
<!-- <property name="" value="true"/>-->
<property name="scope" value="private"/>
</module>
<!-- 命名检查 -->
<!-- 局部的final变量包括catch中的参数的检查 -->
<module name="LocalFinalVariableName"/>
<!-- 局部的非final型的变量包括catch中的参数的检查 -->
<module name="LocalVariableName"/>
<!-- 包名的检查(只允许小写字母),默认^[a-z]+(\.[a-zA-Z_][a-zA-Z_0-9_]*)*$ -->
<module name="PackageName">
<property name="format" value="^[a-z]+(\.[a-z][a-z0-9]*)*$"/>
<message key="name.invalidPattern" value="包名 ''{0}'' 要符合 ''{1}''格式."/>
</module>
<!-- 仅仅是static型的变量不包括static final型的检查 -->
<module name="StaticVariableName"/>
<!-- Class或Interface名检查默认^[A-Z][a-zA-Z0-9]*$-->
<module name="TypeName">
<property name="severity" value="warning"/>
<message key="name.invalidPattern" value="名称 ''{0}'' 要符合 ''{1}''格式."/>
</module>
<!-- 非static型变量的检查 -->
<module name="MemberName"/>
<!-- 方法名的检查 -->
<module name="MethodName"/>
<!-- 方法的参数名 -->
<module name="ParameterName "/>
<!-- 常量名的检查(只允许大写),默认^[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$ -->
<module name="ConstantName"/>
<!-- 定义检查 -->
<!-- 检查数组类型定义的样式 -->
<module name="ArrayTypeStyle"/>
<!-- 检查long型定义是否有大写的“L” -->
<module name="UpperEll"/>
<!-- 方法不超过100行 -->
<module name="MethodLength">
<property name="tokens" value="METHOD_DEF"/>
<property name="max" value="100"/>
</module>
<!-- 方法的参数个数不超过5个。 并且不对构造方法进行检查-->
<module name="ParameterNumber">
<property name="max" value="5"/>
<property name="ignoreOverriddenMethods" value="true"/>
<property name="tokens" value="METHOD_DEF"/>
</module>
<!-- 空格检查-->
<!-- 方法名后跟左圆括号"(" -->
<module name="MethodParamPad"/>
<!-- 在类型转换时,不允许左圆括号右边有空格,也不允许与右圆括号左边有空格 -->
<module name="TypecastParenPad"/>
<!-- 检查在某个特定关键字之后应保留空格 -->
<module name="NoWhitespaceAfter"/>
<!-- 检查在某个特定关键字之前应保留空格 -->
<module name="NoWhitespaceBefore"/>
<!-- 操作符换行策略检查 -->
<module name="OperatorWrap"/>
<!-- 圆括号空白 -->
<module name="ParenPad"/>
<!-- 检查分隔符是否在空白之后 -->
<module name="WhitespaceAfter"/>
<!-- 检查分隔符周围是否有空白 -->
<module name="WhitespaceAround"/>
<!-- 修饰符检查 -->
<!-- 检查修饰符的顺序是否遵照java语言规范默认public、protected、private、abstract、static、final、transient、volatile、synchronized、native、strictfp -->
<module name="ModifierOrder"/>
<!-- 检查接口和annotation中是否有多余修饰符如接口方法不必使用public -->
<module name="RedundantModifier"/>
<!-- 代码块检查 -->
<!-- 检查是否有嵌套代码块 -->
<module name="AvoidNestedBlocks"/>
<!-- 检查是否有空代码块 -->
<module name="EmptyBlock"/>
<!-- 检查左大括号位置 -->
<module name="LeftCurly"/>
<!-- 检查代码块是否缺失{} -->
<module name="NeedBraces"/>
<!-- 检查右大括号位置 -->
<module name="RightCurly"/>
<!-- 代码检查 -->
<!-- 检查空的代码段 -->
<module name="EmptyStatement"/>
<!-- 检查在重写了equals方法后是否重写了hashCode方法 -->
<module name="EqualsHashCode"/>
<!-- 检查子表达式中是否有赋值操作 -->
<module name="InnerAssignment"/>
<!-- 检查是否有"魔术"数字 -->
<module name="MagicNumber">
<property name="ignoreNumbers" value="0, 1"/>
<property name="ignoreAnnotation" value="true"/>
</module>
<!-- 检查switch语句是否有default -->
<module name="MissingSwitchDefault"/>
<!-- 检查是否有过度复杂的布尔表达式 -->
<module name="SimplifyBooleanExpression"/>
<!-- 检查是否有过于复杂的布尔返回代码段 -->
<module name="SimplifyBooleanReturn"/>
<!-- 类设计检查 -->
<!-- 检查类是否为扩展设计l -->
<!-- 检查只有private构造函数的类是否声明为final -->
<module name="FinalClass"/>
<!-- 语法 -->
<!-- String的比较不能用!= 和 == -->
<module name="StringLiteralEquality"/>
<!-- 限制for循环最多嵌套2层 -->
<module name="NestedForDepth">
<property name="max" value="2"/>
</module>
<!-- if最多嵌套3层 -->
<module name="NestedIfDepth">
<property name="max" value="3"/>
</module>
<!-- 检查未被注释的main方法,排除以Application结尾命名的类 -->
<module name="UncommentedMain">
<property name="excludedClasses" value=".*[Application,Test]$"/>
</module>
<!-- 禁止使用System.out.println -->
<module name="Regexp">
<property name="format" value="System\.out\.println"/>
<property name="illegalPattern" value="true"/>
</module>
<!-- return个数 3个-->
<module name="ReturnCount">
<property name="max" value="3"/>
</module>
<!--try catch 异常处理数量 3-->
<module name="NestedTryDepth ">
<property name="max" value="3"/>
</module>
</module>
</module>
Loading…
Cancel
Save