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

master
3y 2 years ago
parent 5dec520c6d
commit 5e22aad354

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

@ -5,48 +5,37 @@ package com.java3y.austin.common.constant;
* @author 3y * @author 3y
*/ */
public class CommonConstant { public class CommonConstant {
public static final String PERIOD = ".";
public final static String PERIOD = "."; public static final String COMMA = ",";
public final static String COMMA = ","; public static final String COLON = ":";
public final static String COLON = ":"; public static final String SEMICOLON = ";";
public final static String SEMICOLON = ";"; public static final String POUND = "#";
public final static String POUND = "#"; public static final String SLASH = "/";
public final static String SLASH = "/"; public static final String BACKSLASH = "\\";
public final static String BACKSLASH = "\\"; public static final String EMPTY_STRING = "";
public final static String EMPTY_STRING = ""; public static final String RADICAL = "|";
public final static String RADICAL = "|"; public static final String QM_STRING = "?";
public static final String EQUAL_STRING = "=";
public final static String QM_STRING = "?"; public static final String AND_STRING = "&";
public final static String EQUAL_STRING = "="; public static final String ONE = "1";
public final static String AND_STRING = "&"; public static final String ZERO = "0";
public static final String MINUS_ONE = "-1";
public static final String YES = "Y";
public final static String ONE = "1"; public static final String NO = "N";
public final static String ZERO = "0"; public static final char QM = '?';
public final static String MINUS_ONE = "-1";
public final static String YES = "Y";
public final static String NO = "N";
public final static char QM = '?';
/** /**
* boolean * boolean
*/ */
public final static Integer TRUE = 1; public static final Integer TRUE = 1;
public final static Integer FALSE = 0; public static final Integer FALSE = 0;
/** /**
* *
*/ */
public static final String HMAC_SHA256_ENCRYPTION_ALGO = "HmacSHA256"; public static final String HMAC_SHA256_ENCRYPTION_ALGO = "HmacSHA256";
/** /**
* *
*/ */
public static final String CHARSET_NAME = "UTF-8"; public static final String CHARSET_NAME = "UTF-8";
/** /**
* HTTP * 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_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_FORM_URL_ENCODE = "application/x-www-form-urlencoded;charset=utf-8;";
public static final String CONTENT_TYPE_MULTIPART_FORM_DATA = "multipart/form-data"; public static final String CONTENT_TYPE_MULTIPART_FORM_DATA = "multipart/form-data";
/** /**
* HTTP * HTTP
*/ */
public static final String REQUEST_METHOD_GET = "GET"; public static final String REQUEST_METHOD_GET = "GET";
public static final String REQUEST_METHOD_POST = "POST"; public static final String REQUEST_METHOD_POST = "POST";
/** /**
* JSON * JSON
*/ */
public final static String EMPTY_JSON_OBJECT = "{}"; public static final String EMPTY_JSON_OBJECT = "{}";
public final static String EMPTY_VALUE_JSON_ARRAY = "[]"; public static final String EMPTY_VALUE_JSON_ARRAY = "[]";
/** /**
* cron * 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 static final String ENV_DEV = "dev";
public final static String ENV_TEST = "test"; 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 RAW = "raw";
public static final String AES = "aes"; public static final String AES = "aes";
public static final String MSG_SIGNATURE = "msg_signature"; public static final String MSG_SIGNATURE = "msg_signature";
/** /**
* *
*/ */
public static final String SCAN_HANDLER = "scanHandler"; public static final String SCAN_HANDLER = "scanHandler";
public static final String SUBSCRIBE_HANDLER = "subscribeHandler"; public static final String SUBSCRIBE_HANDLER = "subscribeHandler";
public static final String UNSUBSCRIBE_HANDLER = "unSubscribeHandler"; public static final String UNSUBSCRIBE_HANDLER = "unSubscribeHandler";
/** /**
* beanName * beanName
*/ */
public static final String WE_CHAT_LOGIN_CONFIG = "weChatLoginConfig"; public static final String WE_CHAT_LOGIN_CONFIG = "weChatLoginConfig";
/** /**
* *
*/ */
public static final String QR_CODE_SCENE_PREFIX = "qrscene_"; public static final String QR_CODE_SCENE_PREFIX = "qrscene_";
/** /**
* // * //
*/ */
public static final String SUBSCRIBE_TIPS = "项目群还有少量名额,添加我的微信 java3yyy 备注【项目】,我会拉入官方项目交流群"; public static final String SUBSCRIBE_TIPS = "项目群还有少量名额,添加我的微信 java3yyy 备注【项目】,我会拉入官方项目交流群";
public static final String SCAN_TIPS = "咋又扫码啦?重新关注一波吧!"; public static final String SCAN_TIPS = "咋又扫码啦?重新关注一波吧!";
public static final String UNSUBSCRIBE_TIPS = "老乡别走!"; public static final String UNSUBSCRIBE_TIPS = "老乡别走!";
private OfficialAccountParamConstant() {
}
} }

@ -7,7 +7,6 @@ package com.java3y.austin.common.constant;
* @author 3y * @author 3y
*/ */
public class SendChanelUrlConstant { public class SendChanelUrlConstant {
/** /**
* url * 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_CREATE_TASK_PATH = "/push/list/message";
public static final String GE_TUI_BATCH_PUSH_PATH = "/push/list/cid"; public static final String GE_TUI_BATCH_PUSH_PATH = "/push/list/cid";
public static final String GE_TUI_AUTH = "/auth"; public static final String GE_TUI_AUTH = "/auth";
/** /**
* url * 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_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_UPLOAD_URL = "https://oapi.dingtalk.com/media/upload";
public static final String DING_DING_TOKEN_URL = "https://oapi.dingtalk.com/gettoken"; public static final String DING_DING_TOKEN_URL = "https://oapi.dingtalk.com/gettoken";
/** /**
* url * url
*/ */
public static final String ENTERPRISE_WE_CHAT_ROBOT_URL = "https://qyapi.weixin.qq.com/cgi-bin/webhook/upload_media?key=<KEY>&type=<TYPE>"; public static final String ENTERPRISE_WE_CHAT_ROBOT_URL = "https://qyapi.weixin.qq.com/cgi-bin/webhook/upload_media?key=<KEY>&type=<TYPE>";
/** /**
* url * url
*/ */
public static final String ALI_MINI_PROGRAM_GATEWAY_URL = "https://openapi.alipaydev.com/gateway.do"; public static final String ALI_MINI_PROGRAM_GATEWAY_URL = "https://openapi.alipaydev.com/gateway.do";
/** /**
* url * 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"; 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 * @author 3y
*/ */
public class ThreadPoolConstant { public class ThreadPoolConstant {
/** /**
* small * small
*/ */
public static final Integer SINGLE_CORE_POOL_SIZE = 1; public static final Integer SINGLE_CORE_POOL_SIZE = 1;
public static final Integer SINGLE_MAX_POOL_SIZE = 1; public static final Integer SINGLE_MAX_POOL_SIZE = 1;
public static final Integer SMALL_KEEP_LIVE_TIME = 10; public static final Integer SMALL_KEEP_LIVE_TIME = 10;
/** /**
* medium * medium
*/ */
@ -23,10 +20,12 @@ public class ThreadPoolConstant {
public static final Integer COMMON_MAX_POOL_SIZE = 2; public static final Integer COMMON_MAX_POOL_SIZE = 2;
public static final Integer COMMON_KEEP_LIVE_TIME = 60; public static final Integer COMMON_KEEP_LIVE_TIME = 60;
public static final Integer COMMON_QUEUE_SIZE = 128; public static final Integer COMMON_QUEUE_SIZE = 128;
/** /**
* big queue size * big queue size
*/ */
public static final Integer BIG_QUEUE_SIZE = 1024; public static final Integer BIG_QUEUE_SIZE = 1024;
private ThreadPoolConstant() {
}
} }

@ -30,13 +30,4 @@ public class LinTongSmsAccount extends SmsAccount {
private String userName; private String userName;
private String password; 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 * Id

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

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

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

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

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

@ -1,6 +1,6 @@
package com.java3y.austin.cron.handler; 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.JSON;
import com.java3y.austin.common.constant.CommonConstant; import com.java3y.austin.common.constant.CommonConstant;
import com.java3y.austin.common.dto.account.DingDingWorkNoticeAccount; import com.java3y.austin.common.dto.account.DingDingWorkNoticeAccount;
@ -50,7 +50,7 @@ public class RefreshDingDingAccessTokenHandler {
for (ChannelAccount channelAccount : accountList) { for (ChannelAccount channelAccount : accountList) {
DingDingWorkNoticeAccount account = JSON.parseObject(channelAccount.getAccountConfig(), DingDingWorkNoticeAccount.class); DingDingWorkNoticeAccount account = JSON.parseObject(channelAccount.getAccountConfig(), DingDingWorkNoticeAccount.class);
String accessToken = accessTokenUtils.getAccessToken(ChannelType.DING_DING_WORK_NOTICE.getCode(), channelAccount.getId().intValue(), account, true); 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); redisTemplate.opsForValue().set(ChannelType.DING_DING_WORK_NOTICE.getAccessTokenPrefix() + channelAccount.getId(), accessToken);
} }
} }

@ -1,6 +1,6 @@
package com.java3y.austin.cron.handler; 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.JSON;
import com.java3y.austin.common.constant.CommonConstant; import com.java3y.austin.common.constant.CommonConstant;
import com.java3y.austin.common.dto.account.GeTuiAccount; import com.java3y.austin.common.dto.account.GeTuiAccount;
@ -50,7 +50,7 @@ public class RefreshGeTuiAccessTokenHandler {
for (ChannelAccount channelAccount : accountList) { for (ChannelAccount channelAccount : accountList) {
GeTuiAccount account = JSON.parseObject(channelAccount.getAccountConfig(), GeTuiAccount.class); GeTuiAccount account = JSON.parseObject(channelAccount.getAccountConfig(), GeTuiAccount.class);
String accessToken = accessTokenUtils.getAccessToken(ChannelType.PUSH.getCode(), channelAccount.getId().intValue(), account, true); 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); 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.collection.CollUtil;
import cn.hutool.core.map.MapUtil; 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.google.common.collect.Lists;
import com.java3y.austin.common.constant.AustinConstant; import com.java3y.austin.common.constant.AustinConstant;
import com.java3y.austin.cron.config.CronAsyncThreadPoolConfig; import com.java3y.austin.cron.config.CronAsyncThreadPoolConfig;
@ -61,7 +61,7 @@ public class CrowdBatchTaskPending extends AbstractLazyPending<CrowdInfoVo> {
paramMap.put(vars, receiver); paramMap.put(vars, receiver);
} else { } else {
String newReceiver = StringUtils.join(new String[]{ String newReceiver = StringUtils.join(new String[]{
paramMap.get(vars), receiver}, StrUtil.COMMA); paramMap.get(vars), receiver}, StrPool.COMMA);
paramMap.put(vars, newReceiver); paramMap.put(vars, newReceiver);
} }
} }

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

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

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

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

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

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

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

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

@ -39,7 +39,7 @@ public class DeduplicationAction implements BusinessProcess<TaskInfo> {
public void process(ProcessContext<TaskInfo> context) { public void process(ProcessContext<TaskInfo> context) {
TaskInfo taskInfo = context.getProcessModel(); 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); String deduplicationConfig = config.getProperty(DEDUPLICATION_RULE_KEY, CommonConstant.EMPTY_JSON_OBJECT);
// 去重 // 去重

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

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

@ -1,5 +1,6 @@
package com.java3y.austin.handler.deduplication.build; package com.java3y.austin.handler.deduplication.build;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.java3y.austin.common.domain.TaskInfo; import com.java3y.austin.common.domain.TaskInfo;
import com.java3y.austin.handler.deduplication.DeduplicationHolder; 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) { public DeduplicationParam getParamsFromConfig(Integer key, String duplicationConfig, TaskInfo taskInfo) {
JSONObject object = JSONObject.parseObject(duplicationConfig); JSONObject object = JSON.parseObject(duplicationConfig);
if (Objects.isNull(object)) { if (Objects.isNull(object)) {
return null; 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)) { if (Objects.isNull(deduplicationParam)) {
return null; return null;
} }

@ -57,7 +57,10 @@ public class SlideWindowLimitService extends AbstractLimitService {
String key = LIMIT_TAG + deduplicationSingleKey(service, taskInfo, receiver); String key = LIMIT_TAG + deduplicationSingleKey(service, taskInfo, receiver);
String scoreValue = String.valueOf(IdUtil.getSnowflake().nextId()); String scoreValue = String.valueOf(IdUtil.getSnowflake().nextId());
String score = String.valueOf(nowTime); 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); filterReceiver.add(receiver);
} }

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

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

@ -14,7 +14,7 @@ import java.util.Map;
@Component @Component
public class HandlerHolder { 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) { public void putHandler(Integer channelCode, Handler handler) {
handlers.put(channelCode, handler); handlers.put(channelCode, handler);

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

@ -1,7 +1,7 @@
package com.java3y.austin.handler.handler.impl; package com.java3y.austin.handler.handler.impl;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.text.StrPool;
import cn.hutool.http.HttpUtil; import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.google.common.base.Throwables; import com.google.common.base.Throwables;
@ -26,6 +26,7 @@ import org.springframework.stereotype.Service;
import javax.crypto.Mac; import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec; import javax.crypto.spec.SecretKeySpec;
import java.net.URLEncoder; import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -124,10 +125,10 @@ public class DingDingRobotHandler extends BaseHandler implements Handler {
private String assembleSign(long currentTimeMillis, String secret) { private String assembleSign(long currentTimeMillis, String secret) {
String sign = ""; String sign = "";
try { 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 mac = Mac.getInstance(CommonConstant.HMAC_SHA256_ENCRYPTION_ALGO);
mac.init(new SecretKeySpec(secret.getBytes(CommonConstant.CHARSET_NAME), CommonConstant.HMAC_SHA256_ENCRYPTION_ALGO)); mac.init(new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), CommonConstant.HMAC_SHA256_ENCRYPTION_ALGO));
byte[] signData = mac.doFinal(stringToSign.getBytes(CommonConstant.CHARSET_NAME)); byte[] signData = mac.doFinal(stringToSign.getBytes(StandardCharsets.UTF_8));
sign = URLEncoder.encode(new String(Base64.encodeBase64(signData)), CommonConstant.CHARSET_NAME); sign = URLEncoder.encode(new String(Base64.encodeBase64(signData)), CommonConstant.CHARSET_NAME);
} catch (Exception e) { } catch (Exception e) {
log.error("DingDingHandler#assembleSign fail!:{}", Throwables.getStackTraceAsString(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.collection.CollUtil;
import cn.hutool.core.date.DateUtil; 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.alibaba.fastjson.JSON;
import com.dingtalk.api.DefaultDingTalkClient; import com.dingtalk.api.DefaultDingTalkClient;
import com.dingtalk.api.DingTalkClient; 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()))) { if (AustinConstant.SEND_ALL.equals(CollUtil.getFirst(taskInfo.getReceiver()))) {
req.setToAllUser(true); req.setToAllUser(true);
} else { } else {
req.setUseridList(StringUtils.join(taskInfo.getReceiver(), StrUtil.C_COMMA)); req.setUseridList(StringUtils.join(taskInfo.getReceiver(), StrPool.COMMA));
} }
req.setAgentId(Long.parseLong(account.getAgentId())); 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.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.MailAccount;
import cn.hutool.extra.mail.MailUtil; import cn.hutool.extra.mail.MailUtil;
import com.google.common.base.Throwables; import com.google.common.base.Throwables;
@ -57,9 +58,14 @@ public class EmailHandler extends BaseHandler implements Handler {
EmailContentModel emailContentModel = (EmailContentModel) taskInfo.getContentModel(); EmailContentModel emailContentModel = (EmailContentModel) taskInfo.getContentModel();
MailAccount account = getAccountConfig(taskInfo.getSendAccount()); MailAccount account = getAccountConfig(taskInfo.getSendAccount());
try { try {
List<File> files = StrUtil.isNotBlank(emailContentModel.getUrl()) ? AustinFileUtils.getRemoteUrl2File(dataPath, StrUtil.split(emailContentModel.getUrl(), StrUtil.COMMA)) : null; List<File> files = CharSequenceUtil.isNotBlank(emailContentModel.getUrl()) ? AustinFileUtils.getRemoteUrl2File(dataPath, CharSequenceUtil.split(emailContentModel.getUrl(), StrPool.COMMA)) : null;
String result = CollUtil.isEmpty(files) ? MailUtil.send(account, taskInfo.getReceiver(), emailContentModel.getTitle(), emailContentModel.getContent(), true) : if (CollUtil.isEmpty(files)) {
MailUtil.send(account, taskInfo.getReceiver(), emailContentModel.getTitle(), emailContentModel.getContent(), true, files.toArray(new File[files.size()])); 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) { } catch (Exception e) {
log.error("EmailHandler#handler fail!{},params:{}", Throwables.getStackTraceAsString(e), taskInfo); log.error("EmailHandler#handler fail!{},params:{}", Throwables.getStackTraceAsString(e), taskInfo);
return false; return false;

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

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

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

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

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

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

@ -1,6 +1,6 @@
package com.java3y.austin.handler.receiver.kafka; 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.handler.utils.GroupIdMappingUtils;
import com.java3y.austin.support.constans.MessageQueuePipeline; import com.java3y.austin.support.constans.MessageQueuePipeline;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -56,7 +56,7 @@ public class ReceiverStart {
public static KafkaListenerAnnotationBeanPostProcessor.AnnotationEnhancer groupIdEnhancer() { public static KafkaListenerAnnotationBeanPostProcessor.AnnotationEnhancer groupIdEnhancer() {
return (attrs, element) -> { return (attrs, element) -> {
if (element instanceof Method) { 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)) { if (RECEIVER_METHOD_NAME.equals(name)) {
attrs.put("groupId", groupIds.get(index++)); attrs.put("groupId", groupIds.get(index++));
} }

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

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

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

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

@ -14,10 +14,7 @@ import com.java3y.austin.service.api.impl.domain.SendTaskModel;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.HashMap; import java.util.*;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@ -29,12 +26,12 @@ import java.util.stream.Collectors;
@Service @Service
public class SendAfterCheckAction implements BusinessProcess<SendTaskModel> { 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<>(); protected static final Map<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,}$";
static { static {
CHANNEL_REGEX_EXP.put(IdType.PHONE.getCode(), PHONE_REGEX_EXP); CHANNEL_REGEX_EXP.put(IdType.PHONE.getCode(), PHONE_REGEX_EXP);
@ -51,7 +48,6 @@ public class SendAfterCheckAction implements BusinessProcess<SendTaskModel> {
filterIllegalReceiver(taskInfo); filterIllegalReceiver(taskInfo);
if (CollUtil.isEmpty(taskInfo)) { if (CollUtil.isEmpty(taskInfo)) {
context.setNeedBreak(true).setResponse(BasicResultVO.fail(RespStatusEnum.CLIENT_BAD_PARAMETERS, "手机号或邮箱不合法, 无有效的发送任务")); context.setNeedBreak(true).setResponse(BasicResultVO.fail(RespStatusEnum.CLIENT_BAD_PARAMETERS, "手机号或邮箱不合法, 无有效的发送任务"));
return;
} }
} }

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

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

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

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

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

@ -1,7 +1,8 @@
package com.java3y.austin.stream.sink; package com.java3y.austin.stream.sink;
import cn.hutool.core.date.DateUtil; 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.alibaba.fastjson.JSON;
import com.google.common.base.Throwables; import com.google.common.base.Throwables;
import com.java3y.austin.common.constant.AustinConstant; import com.java3y.austin.common.constant.AustinConstant;
@ -47,7 +48,7 @@ public class AustinSink implements SinkFunction<AnchorInfo> {
* 0.messageId list:{key,list} * 0.messageId list:{key,list}
* key:Austin:MessageId:{messageId},listValue:[{timestamp,state,businessId},{timestamp,state,businessId}] * 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(); 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.lpush(redisMessageKey.getBytes(), JSON.toJSONString(messageAnchorInfo).getBytes()));
redisFutures.add(redisAsyncCommands.expire(redisMessageKey.getBytes(), Duration.ofDays(3).toMillis() / 1000)); redisFutures.add(redisAsyncCommands.expire(redisMessageKey.getBytes(), Duration.ofDays(3).toMillis() / 1000));

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

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

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

@ -21,18 +21,15 @@ import java.util.concurrent.TimeUnit;
@Slf4j @Slf4j
public class ThreadPoolExecutorShutdownDefinition implements ApplicationListener<ContextClosedEvent> { 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 * 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) { public void registryExecutor(ExecutorService executor) {
POOLS.add(executor); POOLS.add(executor);
@ -53,14 +50,10 @@ public class ThreadPoolExecutorShutdownDefinition implements ApplicationListener
pool.shutdown(); pool.shutdown();
try { try {
if (!pool.awaitTermination(AWAIT_TERMINATION, TIME_UNIT)) { 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); 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(); Thread.currentThread().interrupt();
} }
} }

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

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

@ -3,13 +3,15 @@ package com.java3y.austin.support.mq.springeventbus;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
import java.io.Serializable;
/** /**
* @author 3y * @author 3y
*/ */
@Data @Data
@Builder @Builder
public class AustinSpringEventSource { public class AustinSpringEventSource implements Serializable {
public String topic; private String topic;
public String jsonValue; private String jsonValue;
public String tagId; 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(); executorService.shutdown();
break; break;
} }
@ -75,6 +75,7 @@ public abstract class AbstractLazyPending<T> {
} catch (Exception e) { } catch (Exception e) {
log.error("Pending#initConsumePending failed:{}", Throwables.getStackTraceAsString(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); pendingParam.getQueue().put(t);
} catch (InterruptedException e) { } catch (InterruptedException e) {
log.error("Pending#pending error:{}", Throwables.getStackTraceAsString(e)); log.error("Pending#pending error:{}", Throwables.getStackTraceAsString(e));
Thread.currentThread().interrupt();
} }
} }

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

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

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

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

@ -13,19 +13,19 @@ import java.util.Map;
* austin{$var} * austin{$var}
*/ */
public class ContentHolderUtil { public class ContentHolderUtil {
/** /**
* *
*/ */
private static final String PLACE_HOLDER_PREFIX = "{$"; private static final String PLACE_HOLDER_PREFIX = "{$";
/** /**
* *
*/ */
private static final String PLACE_HOLDER_SUFFIX = "}"; private static final String PLACE_HOLDER_SUFFIX = "}";
private static final PropertyPlaceholderHelper PROPERTY_PLACEHOLDER_HELPER = new PropertyPlaceholderHelper(PLACE_HOLDER_PREFIX, 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) { public static String replacePlaceHolder(final String template, final Map<String, String> paramMap) {
return PROPERTY_PLACEHOLDER_HELPER.replacePlaceholders(template, new CustomPlaceholderResolver(template, paramMap)); return PROPERTY_PLACEHOLDER_HELPER.replacePlaceholders(template, new CustomPlaceholderResolver(template, paramMap));
@ -45,7 +45,7 @@ public class ContentHolderUtil {
public String resolvePlaceholder(String placeholderName) { public String resolvePlaceholder(String placeholderName) {
String value = paramMap.get(placeholderName); String value = paramMap.get(placeholderName);
if (StringUtils.isEmpty(value)) { 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); throw new IllegalArgumentException(errorStr);
} }
return value; return value;

@ -1,6 +1,6 @@
package com.java3y.austin.support.utils; 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.annotation.NacosInjected;
import com.alibaba.nacos.api.config.ConfigService; import com.alibaba.nacos.api.config.ConfigService;
import com.alibaba.nacos.api.exception.NacosException; import com.alibaba.nacos.api.exception.NacosException;
@ -40,7 +40,7 @@ public class NacosUtils {
log.error("Nacos error:{}", ExceptionUtils.getStackTrace(e)); log.error("Nacos error:{}", ExceptionUtils.getStackTrace(e));
} }
String property = properties.getProperty(key); String property = properties.getProperty(key);
return StrUtil.isBlank(property) ? defaultValue : property; return CharSequenceUtil.isBlank(property) ? defaultValue : property;
} }
private String getContext() { 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.data.redis.core.script.RedisScript;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.HashMap; import java.util.*;
import java.util.List;
import java.util.Map;
import java.util.Objects;
/** /**
* @author 3y * @author 3y
@ -38,7 +35,10 @@ public class RedisUtils {
List<String> value = redisTemplate.opsForValue().multiGet(keys); List<String> value = redisTemplate.opsForValue().multiGet(keys);
if (CollUtil.isNotEmpty(value)) { if (CollUtil.isNotEmpty(value)) {
for (int i = 0; i < keys.size(); i++) { 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) { } catch (Exception e) {
@ -54,12 +54,11 @@ public class RedisUtils {
*/ */
public Map<Object, Object> hGetAll(String key) { public Map<Object, Object> hGetAll(String key) {
try { try {
Map<Object, Object> entries = redisTemplate.opsForHash().entries(key); return redisTemplate.opsForHash().entries(key);
return entries;
} catch (Exception e) { } catch (Exception e) {
log.error("RedisUtils#hGetAll fail! e:{}", Throwables.getStackTraceAsString(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) { } catch (Exception e) {
log.error("RedisUtils#lRange fail! e:{}", Throwables.getStackTraceAsString(e)); log.error("RedisUtils#lRange fail! e:{}", Throwables.getStackTraceAsString(e));
} }
return null; return new ArrayList<>();
} }
/** /**
@ -105,7 +104,7 @@ public class RedisUtils {
return null; return null;
}); });
} catch (Exception e) { } 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 { try {
return redisTemplate.opsForList().size(key); return redisTemplate.opsForList().size(key);
} catch (Exception e) { } catch (Exception e) {
log.error("RedisUtils#pipelineSetEx fail! e:{}", Throwables.getStackTraceAsString(e)); log.error("RedisUtils#lLen fail! e:{}", Throwables.getStackTraceAsString(e));
} }
return 0L; return 0L;
} }
@ -128,7 +127,7 @@ public class RedisUtils {
try { try {
return redisTemplate.opsForList().leftPop(key); return redisTemplate.opsForList().leftPop(key);
} catch (Exception e) { } catch (Exception e) {
log.error("RedisUtils#pipelineSetEx fail! e:{}", Throwables.getStackTraceAsString(e)); log.error("RedisUtils#lPop fail! e:{}", Throwables.getStackTraceAsString(e));
} }
return ""; return "";
} }

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

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

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

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

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

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

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

@ -1,7 +1,7 @@
package com.java3y.austin.web.service.impl; package com.java3y.austin.web.service.impl;
import cn.hutool.core.date.DateUtil; 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.AustinConstant;
import com.java3y.austin.common.constant.CommonConstant; import com.java3y.austin.common.constant.CommonConstant;
import com.java3y.austin.support.dao.ChannelAccountDao; import com.java3y.austin.support.dao.ChannelAccountDao;
@ -28,7 +28,7 @@ public class ChannelAccountServiceImpl implements ChannelAccountService {
channelAccount.setCreated(Math.toIntExact(DateUtil.currentSeconds())); channelAccount.setCreated(Math.toIntExact(DateUtil.currentSeconds()));
channelAccount.setIsDeleted(CommonConstant.FALSE); 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())); channelAccount.setUpdated(Math.toIntExact(DateUtil.currentSeconds()));
return channelAccountDao.save(channelAccount); 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.DatePattern;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.map.MapUtil; import cn.hutool.core.map.MapUtil;
import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.text.StrPool; import cn.hutool.core.text.StrPool;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.java3y.austin.common.constant.AustinConstant; import com.java3y.austin.common.constant.AustinConstant;
import com.java3y.austin.common.domain.SimpleAnchorInfo; 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(); 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); return Convert4Amis.getSmsTimeLineVo(maps);
} }
@ -158,7 +158,7 @@ public class DataServiceImpl implements DataService {
} }
for (String detail : sb.toString().split(StrPool.CRLF)) { for (String detail : sb.toString().split(StrPool.CRLF)) {
if (StrUtil.isNotBlank(detail)) { if (CharSequenceUtil.isNotBlank(detail)) {
UserTimeLineVo.ItemsVO itemsVO = UserTimeLineVo.ItemsVO.builder() UserTimeLineVo.ItemsVO itemsVO = UserTimeLineVo.ItemsVO.builder()
.businessId(entry.getKey()) .businessId(entry.getKey())
.sendType(EnumUtil.getEnumByCode(messageTemplate.getSendChannel(), ChannelType.class).getDescription()) .sendType(EnumUtil.getEnumByCode(messageTemplate.getSendChannel(), ChannelType.class).getDescription())

@ -1,7 +1,7 @@
package com.java3y.austin.web.service.impl; package com.java3y.austin.web.service.impl;
import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpRequest;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.dingtalk.api.DefaultDingTalkClient; import com.dingtalk.api.DefaultDingTalkClient;
@ -66,7 +66,7 @@ public class MaterialServiceImpl implements MaterialService {
} catch (Exception e) { } catch (Exception e) {
log.error("MaterialService#dingDingMaterialUpload fail:{}", Throwables.getStackTraceAsString(e)); log.error("MaterialService#dingDingMaterialUpload fail:{}", Throwables.getStackTraceAsString(e));
} }
return BasicResultVO.fail("未知错误,联系管理员"); return BasicResultVO.fail(RespStatusEnum.SERVICE_ERROR.getMsg());
} }
@Override @Override
@ -88,7 +88,7 @@ public class MaterialServiceImpl implements MaterialService {
} catch (Exception e) { } catch (Exception e) {
log.error("MaterialService#enterpriseWeChatRootMaterialUpload fail:{}", Throwables.getStackTraceAsString(e)); log.error("MaterialService#enterpriseWeChatRootMaterialUpload fail:{}", Throwables.getStackTraceAsString(e));
} }
return BasicResultVO.fail("未知错误,联系管理员"); return BasicResultVO.fail(RespStatusEnum.SERVICE_ERROR.getMsg());
} }
@Override @Override
@ -99,13 +99,13 @@ public class MaterialServiceImpl implements MaterialService {
wxCpService.setWxCpConfigStorage(accountConfig); wxCpService.setWxCpConfigStorage(accountConfig);
WxMediaUploadResult result = wxCpService.getMediaService() WxMediaUploadResult result = wxCpService.getMediaService()
.upload(EnumUtil.getDescriptionByCode(Integer.valueOf(fileType), FileType.class), SpringFileUtils.getFile(multipartFile)); .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()); return new BasicResultVO(RespStatusEnum.SUCCESS, UploadResponseVo.builder().id(result.getMediaId()).build());
} }
log.error("MaterialService#enterpriseWeChatMaterialUpload fail:{}", JSON.toJSONString(result)); log.error("MaterialService#enterpriseWeChatMaterialUpload fail:{}", JSON.toJSONString(result));
} catch (Exception e) { } catch (Exception e) {
log.error("MaterialService#enterpriseWeChatMaterialUpload fail:{}", Throwables.getStackTraceAsString(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; package com.java3y.austin.web.service.impl;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.util.ObjectUtil; 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.AustinConstant;
import com.java3y.austin.common.constant.CommonConstant; import com.java3y.austin.common.constant.CommonConstant;
import com.java3y.austin.common.enums.AuditStatus; import com.java3y.austin.common.enums.AuditStatus;
@ -50,11 +50,11 @@ public class MessageTemplateServiceImpl implements MessageTemplateService {
@Override @Override
public Page<MessageTemplate> queryList(MessageTemplateParam param) { public Page<MessageTemplate> queryList(MessageTemplateParam param) {
PageRequest pageRequest = PageRequest.of(param.getPage() - 1, param.getPerPage()); 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) -> { return messageTemplateDao.findAll((Specification<MessageTemplate>) (root, query, cb) -> {
List<Predicate> predicateList = new ArrayList<>(); 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.like(root.get("name").as(String.class), "%" + param.getKeywords() + "%"));
} }
predicateList.add(cb.equal(root.get("isDeleted").as(Integer.class), CommonConstant.FALSE)); predicateList.add(cb.equal(root.get("isDeleted").as(Integer.class), CommonConstant.FALSE));
@ -161,12 +161,12 @@ public class MessageTemplateServiceImpl implements MessageTemplateService {
* @param messageTemplate * @param messageTemplate
*/ */
private void initStatus(MessageTemplate messageTemplate) { private void initStatus(MessageTemplate messageTemplate) {
messageTemplate.setFlowId(StrUtil.EMPTY) messageTemplate.setFlowId(CharSequenceUtil.EMPTY)
.setMsgStatus(MessageStatus.INIT.getCode()).setAuditStatus(AuditStatus.WAIT_AUDIT.getCode()) .setMsgStatus(MessageStatus.INIT.getCode()).setAuditStatus(AuditStatus.WAIT_AUDIT.getCode())
.setCreator(StrUtil.isBlank(messageTemplate.getCreator()) ? AustinConstant.DEFAULT_CREATOR : messageTemplate.getCreator()) .setCreator(CharSequenceUtil.isBlank(messageTemplate.getCreator()) ? AustinConstant.DEFAULT_CREATOR : messageTemplate.getCreator())
.setUpdator(StrUtil.isBlank(messageTemplate.getUpdator()) ? AustinConstant.DEFAULT_UPDATOR : messageTemplate.getUpdator()) .setUpdator(CharSequenceUtil.isBlank(messageTemplate.getUpdator()) ? AustinConstant.DEFAULT_UPDATOR : messageTemplate.getUpdator())
.setTeam(StrUtil.isBlank(messageTemplate.getTeam()) ? AustinConstant.DEFAULT_TEAM : messageTemplate.getTeam()) .setTeam(CharSequenceUtil.isBlank(messageTemplate.getTeam()) ? AustinConstant.DEFAULT_TEAM : messageTemplate.getTeam())
.setAuditor(StrUtil.isBlank(messageTemplate.getAuditor()) ? AustinConstant.DEFAULT_AUDITOR : messageTemplate.getAuditor()) .setAuditor(CharSequenceUtil.isBlank(messageTemplate.getAuditor()) ? AustinConstant.DEFAULT_AUDITOR : messageTemplate.getAuditor())
.setCreated(Math.toIntExact(DateUtil.currentSeconds())) .setCreated(Math.toIntExact(DateUtil.currentSeconds()))
.setIsDeleted(CommonConstant.FALSE); .setIsDeleted(CommonConstant.FALSE);

@ -1,6 +1,6 @@
package com.java3y.austin.web.utils; 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.AnchorState;
import com.java3y.austin.common.enums.ChannelType; import com.java3y.austin.common.enums.ChannelType;
import com.java3y.austin.common.enums.EnumUtil; import com.java3y.austin.common.enums.EnumUtil;
@ -15,6 +15,10 @@ import me.chanjar.weixin.common.error.WxMpErrorMsgEnum;
*/ */
public class AnchorStateUtils { public class AnchorStateUtils {
private AnchorStateUtils() {
}
/** /**
* *
* *
@ -26,7 +30,7 @@ public class AnchorStateUtils {
String stateDescription = EnumUtil.getDescriptionByCode(state, AnchorState.class); String stateDescription = EnumUtil.getDescriptionByCode(state, AnchorState.class);
// 如果 AnchorState 找不到对应的点位描述,那就是在对应渠道的点位信息 // 如果 AnchorState 找不到对应的点位描述,那就是在对应渠道的点位信息
if (StrUtil.isBlank(stateDescription)) { if (CharSequenceUtil.isBlank(stateDescription)) {
if (ChannelType.MINI_PROGRAM.getCode().equals(channel)) { if (ChannelType.MINI_PROGRAM.getCode().equals(channel)) {
stateDescription = WxMaErrorMsgEnum.findMsgByCode(state); stateDescription = WxMaErrorMsgEnum.findMsgByCode(state);
} else if (ChannelType.OFFICIAL_ACCOUNT.getCode().equals(channel)) { } 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.DatePattern;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.map.MapUtil; import cn.hutool.core.map.MapUtil;
import cn.hutool.core.text.StrPool;
import cn.hutool.core.util.ReflectUtil; import cn.hutool.core.util.ReflectUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
@ -116,7 +117,7 @@ public class Convert4Amis {
for (Field field : fields) { for (Field field : fields) {
if (FLAT_FIELD_NAME.contains(field.getName())) { if (FLAT_FIELD_NAME.contains(field.getName())) {
String fieldValue = (String) ReflectUtil.getFieldValue(obj, field); String fieldValue = (String) ReflectUtil.getFieldValue(obj, field);
JSONObject jsonObject = JSONObject.parseObject(fieldValue); JSONObject jsonObject = JSON.parseObject(fieldValue);
for (String key : jsonObject.keySet()) { for (String key : jsonObject.keySet()) {
/** /**
* OA * OA
@ -160,7 +161,7 @@ public class Convert4Amis {
CommonAmisVo officialAccountParam = null; CommonAmisVo officialAccountParam = null;
for (WxMpTemplate wxMpTemplate : allPrivateTemplate) { for (WxMpTemplate wxMpTemplate : allPrivateTemplate) {
if (wxTemplateId.equals(wxMpTemplate.getTemplateId())) { if (wxTemplateId.equals(wxMpTemplate.getTemplateId())) {
String[] data = wxMpTemplate.getContent().split(StrUtil.LF); String[] data = wxMpTemplate.getContent().split(StrPool.LF);
officialAccountParam = CommonAmisVo.builder() officialAccountParam = CommonAmisVo.builder()
.type("input-table") .type("input-table")
.name("officialAccountParam") .name("officialAccountParam")

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

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

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