1、升级 jdk 25

2、升级 springBoot 3.5.7
 3、升级 guava 33.5.0-jre
 4、升级动态线程池 dynamic-tp-spring-boot-starter-apollo  1.2.2-x
 5、升级 mysql 驱动 8.0.33
 6、去除老版本发送邮件 javax.mail 改为 spring-boot-starter-mail
 7、ReceiverStarter 改为 KafkaConsumerConfig,避免循环依赖
feature_jdk_25
3y 11 months ago
parent e7947c57c7
commit a460055947

@ -17,6 +17,11 @@
<groupId>org.projectlombok</groupId> <groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId> <artifactId>lombok</artifactId>
</dependency> </dependency>
<!--fastjson2-->
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
</dependency>
</dependencies> </dependencies>
</project> </project>

@ -1,5 +1,7 @@
package com.java3y.austin.common.dto.model; package com.java3y.austin.common.dto.model;
import com.alibaba.fastjson2.annotation.JSONType;
import java.io.Serializable; import java.io.Serializable;
/** /**
@ -8,6 +10,20 @@ import java.io.Serializable;
* *
* @author 3y * @author 3y
*/ */
@JSONType(seeAlso = {
EmailContentModel.class,
SmsContentModel.class,
PushContentModel.class,
OfficialAccountsContentModel.class,
MiniProgramContentModel.class,
AlipayMiniProgramContentModel.class,
EnterpriseWeChatContentModel.class,
EnterpriseWeChatRobotContentModel.class,
FeiShuRobotContentModel.class,
DingDingRobotContentModel.class,
DingDingWorkContentModel.class,
ImContentModel.class
})
public class ContentModel implements Serializable { public class ContentModel implements Serializable {

@ -1,10 +1,10 @@
package com.java3y.austin.cron.config; package com.java3y.austin.cron.config;
import cn.hutool.core.thread.ExecutorBuilder; import cn.hutool.core.thread.ExecutorBuilder;
import com.dtp.common.em.QueueTypeEnum; import org.dromara.dynamictp.common.em.QueueTypeEnum;
import com.dtp.common.em.RejectedTypeEnum; import org.dromara.dynamictp.common.em.RejectedTypeEnum;
import com.dtp.core.thread.DtpExecutor; import org.dromara.dynamictp.core.executor.DtpExecutor;
import com.dtp.core.thread.ThreadPoolBuilder; import org.dromara.dynamictp.core.support.ThreadPoolBuilder;
import com.java3y.austin.common.constant.ThreadPoolConstant; import com.java3y.austin.common.constant.ThreadPoolConstant;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;

@ -1,6 +1,6 @@
package com.java3y.austin.cron.handler; package com.java3y.austin.cron.handler;
import com.dtp.core.thread.DtpExecutor; import org.dromara.dynamictp.core.executor.DtpExecutor;
import com.java3y.austin.cron.config.CronAsyncThreadPoolConfig; import com.java3y.austin.cron.config.CronAsyncThreadPoolConfig;
import com.java3y.austin.cron.service.TaskHandler; import com.java3y.austin.cron.service.TaskHandler;
import com.java3y.austin.support.utils.ThreadPoolUtils; import com.java3y.austin.support.utils.ThreadPoolUtils;

@ -34,10 +34,10 @@
</exclusions> </exclusions>
</dependency> </dependency>
<!--邮件发送--> <!--邮件发送Spring Boot 3.x 使用 Jakarta Mail通过 starter 引入)-->
<dependency> <dependency>
<groupId>com.sun.mail</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>javax.mail</artifactId> <artifactId>spring-boot-starter-mail</artifactId>
</dependency> </dependency>
<!--企业微信发送消息--> <!--企业微信发送消息-->

@ -1,9 +1,9 @@
package com.java3y.austin.handler.config; package com.java3y.austin.handler.config;
import com.dtp.common.em.QueueTypeEnum; import org.dromara.dynamictp.common.em.QueueTypeEnum;
import com.dtp.common.em.RejectedTypeEnum; import org.dromara.dynamictp.common.em.RejectedTypeEnum;
import com.dtp.core.thread.DtpExecutor; import org.dromara.dynamictp.core.executor.DtpExecutor;
import com.dtp.core.thread.ThreadPoolBuilder; import org.dromara.dynamictp.core.support.ThreadPoolBuilder;
import com.java3y.austin.common.constant.ThreadPoolConstant; import com.java3y.austin.common.constant.ThreadPoolConstant;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;

@ -17,7 +17,6 @@ import com.java3y.austin.handler.flowcontrol.FlowControlParam;
import com.java3y.austin.handler.handler.BaseHandler; import com.java3y.austin.handler.handler.BaseHandler;
import com.java3y.austin.support.utils.AccountUtils; import com.java3y.austin.support.utils.AccountUtils;
import com.java3y.austin.support.utils.AustinFileUtils; import com.java3y.austin.support.utils.AustinFileUtils;
import com.sun.mail.util.MailSSLSocketFactory;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
@ -80,9 +79,11 @@ public class EmailHandler extends BaseHandler{
private MailAccount getAccountConfig(Integer sendAccount) { private MailAccount getAccountConfig(Integer sendAccount) {
MailAccount account = accountUtils.getAccountById(sendAccount, MailAccount.class); MailAccount account = accountUtils.getAccountById(sendAccount, MailAccount.class);
try { try {
MailSSLSocketFactory sf = new MailSSLSocketFactory(); account.setAuth(account.isAuth())
sf.setTrustAllHosts(true); .setStarttlsEnable(account.isStarttlsEnable())
account.setAuth(account.isAuth()).setStarttlsEnable(account.isStarttlsEnable()).setSslEnable(account.isSslEnable()).setCustomProperty("mail.smtp.ssl.socketFactory", sf); .setSslEnable(account.isSslEnable())
.setCustomProperty("mail.smtp.ssl.trust", "*") // 信任所有主机
.setCustomProperty("mail.smtp.ssl.checkserveridentity", "false"); // 禁用服务器身份验证
account.setTimeout(25000).setConnectionTimeout(25000); account.setTimeout(25000).setConnectionTimeout(25000);
} catch (Exception e) { } catch (Exception e) {
log.error("EmailHandler#getAccount fail!{}", Throwables.getStackTraceAsString(e)); log.error("EmailHandler#getAccount fail!{}", Throwables.getStackTraceAsString(e));

@ -1,7 +1,7 @@
package com.java3y.austin.handler.pending; package com.java3y.austin.handler.pending;
import com.dtp.core.DtpRegistry; import org.dromara.dynamictp.core.DtpRegistry;
import com.dtp.core.thread.DtpExecutor; import org.dromara.dynamictp.core.executor.DtpExecutor;
import com.java3y.austin.handler.config.HandlerThreadPoolConfig; import com.java3y.austin.handler.config.HandlerThreadPoolConfig;
import com.java3y.austin.handler.utils.GroupIdMappingUtils; import com.java3y.austin.handler.utils.GroupIdMappingUtils;
import com.java3y.austin.support.utils.ThreadPoolUtils; import com.java3y.austin.support.utils.ThreadPoolUtils;
@ -9,9 +9,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct; import javax.annotation.PostConstruct;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
@ -52,7 +50,7 @@ public class TaskPendingHolder {
* @return * @return
*/ */
public ExecutorService route(String groupId) { public ExecutorService route(String groupId) {
return DtpRegistry.getExecutor(HandlerThreadPoolConfig.PRE_FIX + groupId); return (ExecutorService) DtpRegistry.getExecutor(HandlerThreadPoolConfig.PRE_FIX + groupId);
} }

@ -5,60 +5,69 @@ 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;
import org.apache.kafka.common.header.Header; import org.apache.kafka.common.header.Header;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.beans.factory.SmartInitializingSingleton;
import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.kafka.annotation.KafkaListenerAnnotationBeanPostProcessor; import org.springframework.kafka.annotation.KafkaListenerAnnotationBeanPostProcessor;
import org.springframework.kafka.config.ConcurrentKafkaListenerContainerFactory; import org.springframework.kafka.config.ConcurrentKafkaListenerContainerFactory;
import org.springframework.kafka.core.ConsumerFactory; import org.springframework.kafka.core.ConsumerFactory;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
import java.util.concurrent.atomic.AtomicInteger;
/** /**
* * Kafka
* Kafka Bean Receiver
* *
* @author 3y * @author 3y
* @date 2021/12/4
*/ */
@Service @Configuration
@ConditionalOnProperty(name = "austin.mq.pipeline", havingValue = MessageQueuePipeline.KAFKA) @ConditionalOnProperty(name = "austin.mq.pipeline", havingValue = MessageQueuePipeline.KAFKA)
@Slf4j @Slf4j
public class ReceiverStart { public class KafkaConsumerConfig implements SmartInitializingSingleton {
/** /**
* receiver * receiver
*/ */
private static final String RECEIVER_METHOD_NAME = "Receiver.consumer"; private static final String RECEIVER_METHOD_NAME = "Receiver.consumer";
/** /**
* groupId * groupId
*/ */
private static final List<String> GROUP_IDS = GroupIdMappingUtils.getAllGroupIds(); private static final List<String> GROUP_IDS = GroupIdMappingUtils.getAllGroupIds();
/** /**
* (groupIds) * ( groupIds )使 AtomicInteger
*/ */
private static Integer index = 0; private static final AtomicInteger index = new AtomicInteger(0);
@Autowired
private ApplicationContext context; private final ApplicationContext applicationContext;
@Autowired public KafkaConsumerConfig(ApplicationContext applicationContext) {
private ConsumerFactory consumerFactory; this.applicationContext = applicationContext;
}
/** /**
* Receiverconsumer @KafkaListenergroupId * Receiver consumer @KafkaListener groupId
*
* @return AnnotationEnhancer
*/ */
@Bean @Bean
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() + StrPool.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", GROUP_IDS.get(index++)); int currentIndex = index.getAndIncrement();
if (currentIndex < GROUP_IDS.size()) {
attrs.put("groupId", GROUP_IDS.get(currentIndex));
}
} }
} }
return attrs; return attrs;
@ -66,25 +75,22 @@ public class ReceiverStart {
} }
/** /**
* Receiver * tag
*/ * producer tag header
@PostConstruct *
public void init() { * @param consumerFactory Kafka
for (int i = 0; i < GROUP_IDS.size(); i++) { * @param tagIdKey tagId key
context.getBean(Receiver.class); * @param tagIdValue tagId value
} * @return
}
/**
* tag
* producer tagheader
*
* @return true
*/ */
@Bean @Bean
public ConcurrentKafkaListenerContainerFactory filterContainerFactory(@Value("${austin.business.tagId.key}") String tagIdKey, public ConcurrentKafkaListenerContainerFactory<String, String> filterContainerFactory(
@Value("${austin.business.tagId.value}") String tagIdValue) { ConsumerFactory<String, String> consumerFactory,
ConcurrentKafkaListenerContainerFactory<String, String> factory = new ConcurrentKafkaListenerContainerFactory<>(); @Value("${austin.business.tagId.key}") String tagIdKey,
@Value("${austin.business.tagId.value}") String tagIdValue) {
ConcurrentKafkaListenerContainerFactory<String, String> factory =
new ConcurrentKafkaListenerContainerFactory<>();
factory.setConsumerFactory(consumerFactory); factory.setConsumerFactory(consumerFactory);
factory.setAckDiscarded(true); factory.setAckDiscarded(true);
@ -101,4 +107,16 @@ public class ReceiverStart {
}); });
return factory; return factory;
} }
/**
* Bean Receiver
*/
@Override
public void afterSingletonsInstantiated() {
log.info("开始初始化 Receiver 实例,需要创建 {} 个实例", GROUP_IDS.size());
for (int i = 0; i < GROUP_IDS.size(); i++) {
applicationContext.getBean(Receiver.class);
}
log.info("Receiver 实例初始化完成");
}
} }

@ -94,10 +94,9 @@
</dependency> </dependency>
<dependency> <dependency>
<groupId>io.github.lyh200</groupId> <groupId>org.dromara.dynamictp</groupId>
<artifactId>dynamic-tp-spring-boot-starter-apollo</artifactId> <artifactId>dynamic-tp-spring-boot-starter-apollo</artifactId>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.springframework.amqp</groupId> <groupId>org.springframework.amqp</groupId>
<artifactId>spring-rabbit</artifactId> <artifactId>spring-rabbit</artifactId>

@ -2,10 +2,10 @@ package com.java3y.austin.support.domain;
import lombok.*; import lombok.*;
import javax.persistence.Entity; import jakarta.persistence.Entity;
import javax.persistence.GeneratedValue; import jakarta.persistence.GeneratedValue;
import javax.persistence.GenerationType; import jakarta.persistence.GenerationType;
import javax.persistence.Id; import jakarta.persistence.Id;
/** /**
* @author 3y * @author 3y

@ -7,10 +7,10 @@ import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import javax.persistence.Entity; import jakarta.persistence.Entity;
import javax.persistence.GeneratedValue; import jakarta.persistence.GeneratedValue;
import javax.persistence.GenerationType; import jakarta.persistence.GenerationType;
import javax.persistence.Id; import jakarta.persistence.Id;
import java.io.Serializable; import java.io.Serializable;
@Data @Data

@ -5,10 +5,10 @@ import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import javax.persistence.Entity; import jakarta.persistence.Entity;
import javax.persistence.GeneratedValue; import jakarta.persistence.GeneratedValue;
import javax.persistence.GenerationType; import jakarta.persistence.GenerationType;
import javax.persistence.Id; import jakarta.persistence.Id;
@Data @Data
@Builder @Builder

@ -1,8 +1,9 @@
package com.java3y.austin.support.utils; package com.java3y.austin.support.utils;
import com.dtp.core.DtpRegistry; import org.dromara.dynamictp.core.DtpRegistry;
import com.dtp.core.thread.DtpExecutor; import org.dromara.dynamictp.core.executor.DtpExecutor;
import com.java3y.austin.support.config.ThreadPoolExecutorShutdownDefinition; import com.java3y.austin.support.config.ThreadPoolExecutorShutdownDefinition;
import org.dromara.dynamictp.core.support.ExecutorWrapper;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@ -23,7 +24,7 @@ public class ThreadPoolUtils {
* 2. 线 Spring * 2. 线 Spring
*/ */
public void register(DtpExecutor dtpExecutor) { public void register(DtpExecutor dtpExecutor) {
DtpRegistry.register(dtpExecutor, SOURCE_NAME); DtpRegistry.registerExecutor(new ExecutorWrapper(dtpExecutor), SOURCE_NAME);
shutdownDefinition.registryExecutor(dtpExecutor); shutdownDefinition.registryExecutor(dtpExecutor);
} }
} }

@ -48,9 +48,11 @@
<artifactId>micrometer-registry-prometheus</artifactId> <artifactId>micrometer-registry-prometheus</artifactId>
</dependency> </dependency>
<!-- 使用 springdoc 适配 Spring Boot 3.x 的 OpenAPI/Swagger UI -->
<dependency> <dependency>
<groupId>io.springfox</groupId> <groupId>org.springdoc</groupId>
<artifactId>springfox-boot-starter</artifactId> <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.6.0</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.alibaba.fastjson2</groupId> <groupId>com.alibaba.fastjson2</groupId>

@ -17,8 +17,8 @@ import org.springframework.stereotype.Component;
import org.springframework.validation.BindingResult; import org.springframework.validation.BindingResult;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;

@ -1,34 +1,10 @@
package com.java3y.austin.web.config; package com.java3y.austin.web.config;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
import com.google.common.collect.Lists;
import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
import java.util.List;
/** /**
* @author kl * Web 使 Spring Boot Jackson
* @version 1.0.0
* @description
* @date 2023/2/23 10:40
*/ */
@Configuration @Configuration
public class CommonConfiguration { public class CommonConfiguration {
/**
* FastJson json
*
* @return
*/
@Bean
public HttpMessageConverters fastJsonHttpMessageConverters() {
FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
List<MediaType> supportedMediaTypes = Lists.newArrayList();
supportedMediaTypes.add(MediaType.APPLICATION_JSON);
fastConverter.setSupportedMediaTypes(supportedMediaTypes);
return new HttpMessageConverters(fastConverter);
}
} }

@ -1,56 +1,11 @@
package com.java3y.austin.web.config; package com.java3y.austin.web.config;
import io.swagger.annotations.ApiModel; import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.oas.annotations.EnableOpenApi;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
/** /**
* swagger * OpenAPI 使 springdoc Docket
* * 访/swagger-ui/index.html /v3/api-docs
* @author 3y
*/ */
@Component @Configuration
@EnableOpenApi
@ApiModel
public class SwaggerConfiguration { public class SwaggerConfiguration {
/**
* C
* <p>
* http://localhost:8080/swagger-ui/index.html
*
* @return
*/
@Bean
public Docket webApiDoc() {
return new Docket(DocumentationType.OAS_30)
.groupName("用户端接口文档")
.pathMapping("/")
//定义是否开启Swaggerfalse是关闭可以通过变量去控制线上关闭
.enable(true)
//配置文档的元信息
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("com.java3y.austin.web.controller"))
//正则匹配请求路径,并分配到当前项目组
//.paths(PathSelectors.ant("/api/**"))
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("austin平台")
.description("消息推送接口接口文档")
.contact(new Contact("3y", "http://gitee.com/zhongfucheng/austin", "403686131@qq.com"))
.version("v1.0")
.build();
}
} }

@ -18,8 +18,8 @@ import com.java3y.austin.web.annotation.AustinResult;
import com.java3y.austin.web.exception.CommonException; import com.java3y.austin.web.exception.CommonException;
import com.java3y.austin.web.utils.Convert4Amis; import com.java3y.austin.web.utils.Convert4Amis;
import com.java3y.austin.web.vo.amis.CommonAmisVo; import com.java3y.austin.web.vo.amis.CommonAmisVo;
import io.swagger.annotations.Api; import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.annotations.ApiOperation; import io.swagger.v3.oas.annotations.Operation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
@ -40,14 +40,14 @@ import java.util.Objects;
@AustinAspect @AustinAspect
@RestController @RestController
@RequestMapping("/alipayMiniProgram") @RequestMapping("/alipayMiniProgram")
@Api("支付宝小程序") @Tag(name = "支付宝小程序")
public class AlipayMiniProgramController { public class AlipayMiniProgramController {
@Autowired @Autowired
private AccountUtils accountUtils; private AccountUtils accountUtils;
@GetMapping("/template/list") @GetMapping("/template/list")
@ApiOperation("/根据账号Id获取模板列表") @Operation(summary = "/根据账号Id获取模板列表")
@AustinResult @AustinResult
public List<CommonAmisVo> queryList(Integer id) { public List<CommonAmisVo> queryList(Integer id) {
try { try {
@ -95,7 +95,7 @@ public class AlipayMiniProgramController {
* @return * @return
*/ */
@PostMapping("/detailTemplate") @PostMapping("/detailTemplate")
@ApiOperation("/根据账号Id和模板ID获取模板列表") @Operation(summary = "/根据账号Id和模板ID获取模板列表")
@AustinResult @AustinResult
public CommonAmisVo queryDetailList(Integer id, String alipayTemplateId) { public CommonAmisVo queryDetailList(Integer id, String alipayTemplateId) {
if (Objects.isNull(id) || Objects.isNull(alipayTemplateId)) { if (Objects.isNull(id) || Objects.isNull(alipayTemplateId)) {
@ -144,7 +144,7 @@ public class AlipayMiniProgramController {
* @return * @return
*/ */
@GetMapping("/sync/openid") @GetMapping("/sync/openid")
@ApiOperation("登录凭证校验") @Operation(summary = "登录凭证校验")
public String syncOpenId(String code, String appId, String secret) { public String syncOpenId(String code, String appId, String secret) {
String url = SendChanelUrlConstant.WE_CHAT_MINI_PROGRAM_OPENID_SYNC String url = SendChanelUrlConstant.WE_CHAT_MINI_PROGRAM_OPENID_SYNC
.replace("<APPID>", appId).replace("<CODE>", code).replace("<SECRET>", secret); .replace("<APPID>", appId).replace("<CODE>", code).replace("<SECRET>", secret);

@ -13,8 +13,8 @@ import com.java3y.austin.web.service.ChannelAccountService;
import com.java3y.austin.web.utils.Convert4Amis; import com.java3y.austin.web.utils.Convert4Amis;
import com.java3y.austin.web.utils.LoginUtils; import com.java3y.austin.web.utils.LoginUtils;
import com.java3y.austin.web.vo.amis.CommonAmisVo; import com.java3y.austin.web.vo.amis.CommonAmisVo;
import io.swagger.annotations.Api; import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.annotations.ApiOperation; import io.swagger.v3.oas.annotations.Operation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@ -33,7 +33,7 @@ import java.util.stream.Collectors;
@AustinResult @AustinResult
@RestController @RestController
@RequestMapping("/account") @RequestMapping("/account")
@Api("渠道账号管理接口") @Tag(name = "渠道账号管理接口")
public class ChannelAccountController { public class ChannelAccountController {
@Autowired @Autowired
@ -47,7 +47,7 @@ public class ChannelAccountController {
* Id * Id
*/ */
@PostMapping("/save") @PostMapping("/save")
@ApiOperation("/保存数据") @Operation(summary = "/保存数据")
public ChannelAccount saveOrUpdate(@RequestBody ChannelAccount channelAccount) { public ChannelAccount saveOrUpdate(@RequestBody ChannelAccount channelAccount) {
if (loginUtils.needLogin() && CharSequenceUtil.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());
@ -61,7 +61,7 @@ public class ChannelAccountController {
* *
*/ */
@GetMapping("/queryByChannelType") @GetMapping("/queryByChannelType")
@ApiOperation("/根据渠道标识查询相关的记录") @Operation(summary = "/根据渠道标识查询相关的记录")
public List<CommonAmisVo> query(Integer channelType, String creator) { public List<CommonAmisVo> query(Integer channelType, String creator) {
if (loginUtils.needLogin() && CharSequenceUtil.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());
@ -76,7 +76,7 @@ public class ChannelAccountController {
* *
*/ */
@GetMapping("/list") @GetMapping("/list")
@ApiOperation("/渠道账号列表信息") @Operation(summary = "/渠道账号列表信息")
public List<ChannelAccount> list(String creator) { public List<ChannelAccount> list(String creator) {
if (loginUtils.needLogin() && CharSequenceUtil.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());
@ -92,7 +92,7 @@ public class ChannelAccountController {
* id * id
*/ */
@DeleteMapping("delete/{id}") @DeleteMapping("delete/{id}")
@ApiOperation("/根据Ids删除") @Operation(summary = "/根据Ids删除")
public void deleteByIds(@PathVariable("id") String id) { public void deleteByIds(@PathVariable("id") String id) {
if (CharSequenceUtil.isNotBlank(id)) { if (CharSequenceUtil.isNotBlank(id)) {
List<Long> idList = Arrays.stream(id.split(StrPool.COMMA)).map(Long::valueOf).collect(Collectors.toList()); List<Long> idList = Arrays.stream(id.split(StrPool.COMMA)).map(Long::valueOf).collect(Collectors.toList());

@ -8,8 +8,8 @@ import com.java3y.austin.web.vo.DataParam;
import com.java3y.austin.web.vo.amis.EchartsVo; import com.java3y.austin.web.vo.amis.EchartsVo;
import com.java3y.austin.web.vo.amis.SmsTimeLineVo; import com.java3y.austin.web.vo.amis.SmsTimeLineVo;
import com.java3y.austin.web.vo.amis.UserTimeLineVo; import com.java3y.austin.web.vo.amis.UserTimeLineVo;
import io.swagger.annotations.Api; import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.annotations.ApiOperation; import io.swagger.v3.oas.annotations.Operation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.assertj.core.util.Lists; import org.assertj.core.util.Lists;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -31,13 +31,13 @@ import java.util.Objects;
@AustinResult @AustinResult
@RestController @RestController
@RequestMapping("/trace") @RequestMapping("/trace")
@Api("获取数据接口(全链路追踪)") @Tag(name = "获取数据接口(全链路追踪)")
public class DataController { public class DataController {
@Autowired @Autowired
private DataService dataService; private DataService dataService;
@PostMapping("/message") @PostMapping("/message")
@ApiOperation("/获取【72小时】发送消息的全链路数据") @Operation(summary = "/获取【72小时】发送消息的全链路数据")
public UserTimeLineVo getMessageData(@RequestBody DataParam dataParam) { public UserTimeLineVo getMessageData(@RequestBody DataParam dataParam) {
if (Objects.isNull(dataParam) || CharSequenceUtil.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();
@ -46,7 +46,7 @@ public class DataController {
} }
@PostMapping("/user") @PostMapping("/user")
@ApiOperation("/获取【当天】用户接收消息的全链路数据") @Operation(summary = "/获取【当天】用户接收消息的全链路数据")
public UserTimeLineVo getUserData(@RequestBody DataParam dataParam) { public UserTimeLineVo getUserData(@RequestBody DataParam dataParam) {
if (Objects.isNull(dataParam) || CharSequenceUtil.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();
@ -55,7 +55,7 @@ public class DataController {
} }
@PostMapping("/messageTemplate") @PostMapping("/messageTemplate")
@ApiOperation("/获取消息模板全链路数据") @Operation(summary = "/获取消息模板全链路数据")
public EchartsVo getMessageTemplateData(@RequestBody DataParam dataParam) { public EchartsVo getMessageTemplateData(@RequestBody DataParam dataParam) {
EchartsVo echartsVo = EchartsVo.builder().build(); EchartsVo echartsVo = EchartsVo.builder().build();
if (CharSequenceUtil.isNotBlank(dataParam.getBusinessId())) { if (CharSequenceUtil.isNotBlank(dataParam.getBusinessId())) {
@ -65,7 +65,7 @@ public class DataController {
} }
@PostMapping("/sms") @PostMapping("/sms")
@ApiOperation("/获取短信下发数据") @Operation(summary = "/获取短信下发数据")
public SmsTimeLineVo getSmsData(@RequestBody DataParam dataParam) { public SmsTimeLineVo getSmsData(@RequestBody DataParam dataParam) {
if (Objects.isNull(dataParam) || Objects.isNull(dataParam.getDateTime()) || CharSequenceUtil.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();

@ -1,8 +1,8 @@
package com.java3y.austin.web.controller; package com.java3y.austin.web.controller;
import io.swagger.annotations.Api; import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.annotations.ApiOperation; import io.swagger.v3.oas.annotations.Operation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
@ -14,10 +14,10 @@ import org.springframework.web.bind.annotation.RestController;
*/ */
@Slf4j @Slf4j
@RestController @RestController
@Api("健康检测") @Tag(name = "健康检测")
public class HealthController { public class HealthController {
@GetMapping("/") @GetMapping("/")
@ApiOperation("/健康检测") @Operation(summary = "/健康检测")
public String health() { public String health() {
return "success"; return "success";
} }

@ -5,8 +5,8 @@ import com.java3y.austin.common.enums.ChannelType;
import com.java3y.austin.common.vo.BasicResultVO; import com.java3y.austin.common.vo.BasicResultVO;
import com.java3y.austin.web.annotation.AustinAspect; import com.java3y.austin.web.annotation.AustinAspect;
import com.java3y.austin.web.service.MaterialService; import com.java3y.austin.web.service.MaterialService;
import io.swagger.annotations.Api; import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.annotations.ApiOperation; import io.swagger.v3.oas.annotations.Operation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
@ -25,7 +25,7 @@ import org.springframework.web.multipart.MultipartFile;
@AustinAspect @AustinAspect
@RestController @RestController
@RequestMapping("/material") @RequestMapping("/material")
@Api("素材管理接口") @Tag(name = "素材管理接口")
public class MaterialController { public class MaterialController {
@Autowired @Autowired
@ -42,7 +42,7 @@ public class MaterialController {
* @return * @return
*/ */
@PostMapping("/upload") @PostMapping("/upload")
@ApiOperation("/素材上传接口") @Operation(summary = "/素材上传接口")
public BasicResultVO uploadMaterial(@RequestParam("file") MultipartFile file, String sendAccount, Integer sendChannel, String fileType) { public BasicResultVO uploadMaterial(@RequestParam("file") MultipartFile file, String sendAccount, Integer sendChannel, String fileType) {
if (ChannelType.DING_DING_WORK_NOTICE.getCode().equals(sendChannel)) { if (ChannelType.DING_DING_WORK_NOTICE.getCode().equals(sendChannel)) {
return materialService.dingDingMaterialUpload(file, sendAccount, fileType); return materialService.dingDingMaterialUpload(file, sendAccount, fileType);

@ -25,8 +25,8 @@ import com.java3y.austin.web.utils.LoginUtils;
import com.java3y.austin.web.vo.MessageTemplateParam; import com.java3y.austin.web.vo.MessageTemplateParam;
import com.java3y.austin.web.vo.MessageTemplateVo; import com.java3y.austin.web.vo.MessageTemplateVo;
import com.java3y.austin.web.vo.amis.CommonAmisVo; import com.java3y.austin.web.vo.amis.CommonAmisVo;
import io.swagger.annotations.Api; import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.annotations.ApiOperation; import io.swagger.v3.oas.annotations.Operation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
@ -53,7 +53,7 @@ import java.util.stream.Collectors;
@AustinResult @AustinResult
@RestController @RestController
@RequestMapping("/messageTemplate") @RequestMapping("/messageTemplate")
@Api("发送消息") @Tag(name = "发送消息")
public class MessageTemplateController { public class MessageTemplateController {
@Autowired @Autowired
@ -76,7 +76,7 @@ public class MessageTemplateController {
* Id * Id
*/ */
@PostMapping("/save") @PostMapping("/save")
@ApiOperation("/保存数据") @Operation(summary = "/保存数据")
public MessageTemplate saveOrUpdate(@RequestBody MessageTemplate messageTemplate) { public MessageTemplate saveOrUpdate(@RequestBody MessageTemplate messageTemplate) {
if (loginUtils.needLogin() && CharSequenceUtil.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());
@ -88,7 +88,7 @@ public class MessageTemplateController {
* *
*/ */
@GetMapping("/list") @GetMapping("/list")
@ApiOperation("/列表页") @Operation(summary = "/列表页")
public MessageTemplateVo queryList(@Validated MessageTemplateParam messageTemplateParam) { public MessageTemplateVo queryList(@Validated MessageTemplateParam messageTemplateParam) {
if (loginUtils.needLogin() && CharSequenceUtil.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());
@ -102,7 +102,7 @@ public class MessageTemplateController {
* Id * Id
*/ */
@GetMapping("query/{id}") @GetMapping("query/{id}")
@ApiOperation("/根据Id查找") @Operation(summary = "/根据Id查找")
public Map<String, Object> queryById(@PathVariable("id") Long id) { public Map<String, Object> queryById(@PathVariable("id") Long id) {
return Convert4Amis.flatSingleMap(messageTemplateService.queryById(id)); return Convert4Amis.flatSingleMap(messageTemplateService.queryById(id));
} }
@ -111,7 +111,7 @@ public class MessageTemplateController {
* Id * Id
*/ */
@PostMapping("copy/{id}") @PostMapping("copy/{id}")
@ApiOperation("/根据Id复制") @Operation(summary = "/根据Id复制")
public void copyById(@PathVariable("id") Long id) { public void copyById(@PathVariable("id") Long id) {
messageTemplateService.copy(id); messageTemplateService.copy(id);
} }
@ -122,7 +122,7 @@ public class MessageTemplateController {
* id * id
*/ */
@DeleteMapping("delete/{id}") @DeleteMapping("delete/{id}")
@ApiOperation("/根据Ids删除") @Operation(summary = "/根据Ids删除")
public void deleteByIds(@PathVariable("id") String id) { public void deleteByIds(@PathVariable("id") String id) {
if (CharSequenceUtil.isNotBlank(id)) { if (CharSequenceUtil.isNotBlank(id)) {
List<Long> idList = Arrays.stream(id.split(StrPool.COMMA)).map(Long::valueOf).collect(Collectors.toList()); List<Long> idList = Arrays.stream(id.split(StrPool.COMMA)).map(Long::valueOf).collect(Collectors.toList());
@ -135,7 +135,7 @@ public class MessageTemplateController {
* *
*/ */
@PostMapping("test") @PostMapping("test")
@ApiOperation("/测试发送接口") @Operation(summary = "/测试发送接口")
public SendResponse test(@RequestBody MessageTemplateParam messageTemplateParam) { public SendResponse test(@RequestBody MessageTemplateParam messageTemplateParam) {
Map<String, String> variables = JSON.parseObject(messageTemplateParam.getMsgContent(), new TypeReference<Map<String, String>>() {}); Map<String, String> variables = JSON.parseObject(messageTemplateParam.getMsgContent(), new TypeReference<Map<String, String>>() {});
@ -152,7 +152,7 @@ public class MessageTemplateController {
* Amis * Amis
*/ */
@PostMapping("test/content") @PostMapping("test/content")
@ApiOperation("/测试发送接口") @Operation(summary = "/测试发送接口")
public CommonAmisVo test(Long id) { public CommonAmisVo test(Long id) {
MessageTemplate messageTemplate = messageTemplateService.queryById(id); MessageTemplate messageTemplate = messageTemplateService.queryById(id);
return Convert4Amis.getTestContent(messageTemplate.getMsgContent()); return Convert4Amis.getTestContent(messageTemplate.getMsgContent());
@ -163,7 +163,7 @@ public class MessageTemplateController {
* id * id
*/ */
@PostMapping("recall/{id}") @PostMapping("recall/{id}")
@ApiOperation("/撤回消息接口") @Operation(summary = "/撤回消息接口")
public SendResponse recall(@PathVariable("id") String id) { public SendResponse recall(@PathVariable("id") String id) {
SendRequest sendRequest = SendRequest.builder().code(BusinessCode.RECALL.getCode()).messageTemplateId(Long.valueOf(id)).build(); SendRequest sendRequest = SendRequest.builder().code(BusinessCode.RECALL.getCode()).messageTemplateId(Long.valueOf(id)).build();
SendResponse response = recallService.recall(sendRequest); SendResponse response = recallService.recall(sendRequest);
@ -178,7 +178,7 @@ public class MessageTemplateController {
* *
*/ */
@PostMapping("start/{id}") @PostMapping("start/{id}")
@ApiOperation("/启动模板的定时任务") @Operation(summary = "/启动模板的定时任务")
public BasicResultVO start(@RequestBody @PathVariable("id") Long id) { public BasicResultVO start(@RequestBody @PathVariable("id") Long id) {
return messageTemplateService.startCronTask(id); return messageTemplateService.startCronTask(id);
} }
@ -187,7 +187,7 @@ public class MessageTemplateController {
* *
*/ */
@PostMapping("stop/{id}") @PostMapping("stop/{id}")
@ApiOperation("/暂停模板的定时任务") @Operation(summary = "/暂停模板的定时任务")
public BasicResultVO stop(@RequestBody @PathVariable("id") Long id) { public BasicResultVO stop(@RequestBody @PathVariable("id") Long id) {
return messageTemplateService.stopCronTask(id); return messageTemplateService.stopCronTask(id);
} }
@ -196,7 +196,7 @@ public class MessageTemplateController {
* *
*/ */
@PostMapping("upload") @PostMapping("upload")
@ApiOperation("/上传人群文件") @Operation(summary = "/上传人群文件")
public Map<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 {

@ -12,8 +12,8 @@ import com.java3y.austin.web.annotation.AustinResult;
import com.java3y.austin.web.exception.CommonException; import com.java3y.austin.web.exception.CommonException;
import com.java3y.austin.web.utils.Convert4Amis; import com.java3y.austin.web.utils.Convert4Amis;
import com.java3y.austin.web.vo.amis.CommonAmisVo; import com.java3y.austin.web.vo.amis.CommonAmisVo;
import io.swagger.annotations.Api; import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.annotations.ApiOperation; import io.swagger.v3.oas.annotations.Operation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.bean.subscribemsg.TemplateInfo; import me.chanjar.weixin.common.bean.subscribemsg.TemplateInfo;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -35,14 +35,14 @@ import java.util.Objects;
@AustinAspect @AustinAspect
@RestController @RestController
@RequestMapping("/miniProgram") @RequestMapping("/miniProgram")
@Api("微信服务号") @Tag(name = "微信服务号")
public class MiniProgramController { public class MiniProgramController {
@Autowired @Autowired
private AccountUtils accountUtils; private AccountUtils accountUtils;
@GetMapping("/template/list") @GetMapping("/template/list")
@ApiOperation("/根据账号Id获取模板列表") @Operation(summary = "/根据账号Id获取模板列表")
@AustinResult @AustinResult
public List<CommonAmisVo> queryList(Integer id) { public List<CommonAmisVo> queryList(Integer id) {
try { try {
@ -67,7 +67,7 @@ public class MiniProgramController {
* @return * @return
*/ */
@PostMapping("/detailTemplate") @PostMapping("/detailTemplate")
@ApiOperation("/根据账号Id和模板ID获取模板列表") @Operation(summary = "/根据账号Id和模板ID获取模板列表")
@AustinResult @AustinResult
public CommonAmisVo queryDetailList(Integer id, String wxTemplateId) { public CommonAmisVo queryDetailList(Integer id, String wxTemplateId) {
if (Objects.isNull(id) || Objects.isNull(wxTemplateId)) { if (Objects.isNull(id) || Objects.isNull(wxTemplateId)) {
@ -93,7 +93,7 @@ public class MiniProgramController {
* @return * @return
*/ */
@GetMapping("/sync/openid") @GetMapping("/sync/openid")
@ApiOperation("登录凭证校验") @Operation(summary = "登录凭证校验")
public String syncOpenId(String code, String appId, String secret) { public String syncOpenId(String code, String appId, String secret) {
String url = SendChanelUrlConstant.WE_CHAT_MINI_PROGRAM_OPENID_SYNC String url = SendChanelUrlConstant.WE_CHAT_MINI_PROGRAM_OPENID_SYNC
.replace("<APPID>", appId).replace("<CODE>", code).replace("<SECRET>", secret); .replace("<APPID>", appId).replace("<CODE>", code).replace("<SECRET>", secret);

@ -19,8 +19,8 @@ import com.java3y.austin.web.exception.CommonException;
import com.java3y.austin.web.utils.Convert4Amis; import com.java3y.austin.web.utils.Convert4Amis;
import com.java3y.austin.web.utils.LoginUtils; import com.java3y.austin.web.utils.LoginUtils;
import com.java3y.austin.web.vo.amis.CommonAmisVo; import com.java3y.austin.web.vo.amis.CommonAmisVo;
import io.swagger.annotations.Api; import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.annotations.ApiOperation; import io.swagger.v3.oas.annotations.Operation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.mp.api.WxMpService; import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage; import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;
@ -35,7 +35,7 @@ import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import java.util.*; import java.util.*;
/** /**
@ -47,7 +47,7 @@ import java.util.*;
@AustinAspect @AustinAspect
@RequestMapping("/officialAccount") @RequestMapping("/officialAccount")
@RestController @RestController
@Api("微信服务号") @Tag(name = "微信服务号")
public class OfficialAccountController { public class OfficialAccountController {
@Autowired @Autowired
@ -65,7 +65,7 @@ public class OfficialAccountController {
* @return * @return
*/ */
@GetMapping("/template/list") @GetMapping("/template/list")
@ApiOperation("/根据账号Id获取模板列表") @Operation(summary = "/根据账号Id获取模板列表")
@AustinResult @AustinResult
public List<CommonAmisVo> queryList(Integer id) { public List<CommonAmisVo> queryList(Integer id) {
try { try {
@ -91,7 +91,7 @@ public class OfficialAccountController {
* @return * @return
*/ */
@PostMapping("/detailTemplate") @PostMapping("/detailTemplate")
@ApiOperation("/根据账号Id和模板ID获取模板列表") @Operation(summary = "/根据账号Id和模板ID获取模板列表")
@AustinResult @AustinResult
public CommonAmisVo queryDetailList(Integer id, String wxTemplateId) { public CommonAmisVo queryDetailList(Integer id, String wxTemplateId) {
if (Objects.isNull(id) || Objects.isNull(wxTemplateId)) { if (Objects.isNull(id) || Objects.isNull(wxTemplateId)) {
@ -117,7 +117,7 @@ public class OfficialAccountController {
* @return * @return
*/ */
@RequestMapping(value = "/receipt", produces = {CommonConstant.CONTENT_TYPE_XML}) @RequestMapping(value = "/receipt", produces = {CommonConstant.CONTENT_TYPE_XML})
@ApiOperation("/接收微信的事件消息") @Operation(summary = "/接收微信的事件消息")
public String receiptMessage(HttpServletRequest request) { public String receiptMessage(HttpServletRequest request) {
try { try {
WeChatLoginConfig configService = loginUtils.getLoginConfig(); WeChatLoginConfig configService = loginUtils.getLoginConfig();
@ -168,7 +168,7 @@ public class OfficialAccountController {
* @return * @return
*/ */
@PostMapping("/qrCode") @PostMapping("/qrCode")
@ApiOperation("/生成 服务号 二维码") @Operation(summary = "/生成 服务号 二维码")
@AustinResult @AustinResult
public CommonAmisVo getQrCode() { public CommonAmisVo getQrCode() {
try { try {
@ -193,7 +193,7 @@ public class OfficialAccountController {
* @return * @return
*/ */
@RequestMapping("/check/login") @RequestMapping("/check/login")
@ApiOperation("/检查是否已经登录") @Operation(summary = "/检查是否已经登录")
@AustinResult @AustinResult
public WxMpUser checkLogin(String sceneId) { public WxMpUser checkLogin(String sceneId) {
String userInfo = redisTemplate.opsForValue().get(sceneId); String userInfo = redisTemplate.opsForValue().get(sceneId);
@ -213,7 +213,7 @@ public class OfficialAccountController {
* @return * @return
*/ */
@RequestMapping("/delete/test/user") @RequestMapping("/delete/test/user")
@ApiOperation("/删除测试号的测试用户") @Operation(summary = "/删除测试号的测试用户")
@AustinResult @AustinResult
public void deleteTestUser(HttpServletRequest request) { public void deleteTestUser(HttpServletRequest request) {
try { try {

@ -5,8 +5,8 @@ import com.java3y.austin.common.enums.ChannelType;
import com.java3y.austin.cron.handler.RefreshDingDingAccessTokenHandler; import com.java3y.austin.cron.handler.RefreshDingDingAccessTokenHandler;
import com.java3y.austin.cron.handler.RefreshGeTuiAccessTokenHandler; import com.java3y.austin.cron.handler.RefreshGeTuiAccessTokenHandler;
import com.java3y.austin.web.annotation.AustinAspect; import com.java3y.austin.web.annotation.AustinAspect;
import io.swagger.annotations.Api; import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.annotations.ApiOperation; import io.swagger.v3.oas.annotations.Operation;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
@ -17,7 +17,7 @@ import org.springframework.web.bind.annotation.RestController;
*/ */
@AustinAspect @AustinAspect
@Api(tags = {"手动刷新token的接口"}) @Tag(name = "手动刷新token的接口")
@RestController @RestController
public class RefreshTokenController { public class RefreshTokenController {
@ -33,7 +33,7 @@ public class RefreshTokenController {
* @param channelType * @param channelType
* @return * @return
*/ */
@ApiOperation(value = "手动刷新token", notes = "钉钉/个推 token刷新") @Operation(summary = "手动刷新token", description = "钉钉/个推 token刷新")
@GetMapping("/refresh") @GetMapping("/refresh")
public String refresh(Integer channelType) { public String refresh(Integer channelType) {
if (ChannelType.PUSH.getCode().equals(channelType)) { if (ChannelType.PUSH.getCode().equals(channelType)) {

@ -7,8 +7,8 @@ import com.java3y.austin.service.api.domain.SendResponse;
import com.java3y.austin.service.api.service.RecallService; import com.java3y.austin.service.api.service.RecallService;
import com.java3y.austin.service.api.service.SendService; import com.java3y.austin.service.api.service.SendService;
import com.java3y.austin.web.annotation.AustinAspect; import com.java3y.austin.web.annotation.AustinAspect;
import io.swagger.annotations.Api; import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.annotations.ApiOperation; import io.swagger.v3.oas.annotations.Operation;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
@ -18,7 +18,7 @@ import org.springframework.web.bind.annotation.RestController;
* @author * @author
*/ */
@Api(tags = {"发送消息"}) @Tag(name = "发送消息")
@RestController @RestController
@AustinAspect @AustinAspect
public class SendController { public class SendController {
@ -36,7 +36,7 @@ public class SendController {
* @param sendRequest * @param sendRequest
* @return * @return
*/ */
@ApiOperation(value = "下发接口", notes = "多渠道多类型下发消息,目前支持邮件和短信,类型支持:验证码、通知类、营销类。") @Operation(summary = "下发接口", description = "多渠道多类型下发消息,目前支持邮件和短信,类型支持:验证码、通知类、营销类。")
@PostMapping("/send") @PostMapping("/send")
public SendResponse send(@RequestBody SendRequest sendRequest) { public SendResponse send(@RequestBody SendRequest sendRequest) {
return sendService.send(sendRequest); return sendService.send(sendRequest);
@ -48,7 +48,7 @@ public class SendController {
* @param batchSendRequest * @param batchSendRequest
* @return * @return
*/ */
@ApiOperation(value = "batch下发接口", notes = "多渠道多类型下发消息,目前支持邮件和短信,类型支持:验证码、通知类、营销类。") @Operation(summary = "batch下发接口", description = "多渠道多类型下发消息,目前支持邮件和短信,类型支持:验证码、通知类、营销类。")
@PostMapping("/batchSend") @PostMapping("/batchSend")
public SendResponse batchSend(@RequestBody BatchSendRequest batchSendRequest) { public SendResponse batchSend(@RequestBody BatchSendRequest batchSendRequest) {
return sendService.batchSend(batchSendRequest); return sendService.batchSend(batchSendRequest);
@ -60,7 +60,7 @@ public class SendController {
* @param sendRequest * @param sendRequest
* @return * @return
*/ */
@ApiOperation(value = "撤回消息接口", notes = "优先根据messageId撤回消息如果messageId不存在则根据模板id撤回") @Operation(summary = "撤回消息接口", description = "优先根据messageId撤回消息如果messageId不存在则根据模板id撤回")
@PostMapping("/recall") @PostMapping("/recall")
public SendResponse recall(@RequestBody SendRequest sendRequest) { public SendResponse recall(@RequestBody SendRequest sendRequest) {
return recallService.recall(sendRequest); return recallService.recall(sendRequest);

@ -23,7 +23,7 @@ import org.springframework.data.domain.PageRequest;
import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.persistence.criteria.Predicate; import jakarta.persistence.criteria.Predicate;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;

@ -5,7 +5,7 @@ import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import javax.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
/** /**

@ -3,11 +3,11 @@ spring.application.name=austin
########################################## database start ########################################## ########################################## database start ##########################################
# TODO required! # TODO required!
# notice:mysql version 5.7x !!! # notice:mysql version 8.x !!!
spring.datasource.url=jdbc:mysql://${austin.database.ip:austin-mysql}:${austin.database.port:3306}/austin?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNull spring.datasource.url=jdbc:mysql://${austin.database.ip:austin-mysql}:${austin.database.port:3306}/austin?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNull
spring.datasource.username=${austin.database.username:root} spring.datasource.username=${austin.database.username:root}
spring.datasource.password=${austin.database.password:root123_A} spring.datasource.password=${austin.database.password:root123_A}
spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.type=com.zaxxer.hikari.HikariDataSource spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.hikari.minimum-idle=10 spring.datasource.hikari.minimum-idle=10
spring.datasource.hikari.maximum-pool-size=30 spring.datasource.hikari.maximum-pool-size=30
@ -22,9 +22,10 @@ spring.datasource.hikari.validation-timeout=1000
########################################## redis start ########################################## ########################################## redis start ##########################################
# TODO required! # TODO required!
spring.redis.host=${austin.redis.ip:austin-redis} spring.data.redis.host=${austin.redis.ip:austin-redis}
spring.redis.port=${austin.redis.port:6379} spring.data.redis.port=${austin.redis.port:6379}
spring.redis.password=${austin.redis.password:austin} spring.data.redis.password=${austin.redis.password:austin}
spring.data.redis.connect-timeout=20s
########################################## redis end ########################################## ########################################## redis end ##########################################
@ -123,10 +124,8 @@ ok.http.write-timeout=30
########################################## monitor start ########################################## ########################################## monitor start ##########################################
management.endpoint.health.show-details=always management.endpoint.health.show-details=always
management.endpoint.metrics.enabled=true
management.endpoint.prometheus.enabled=true
management.endpoints.web.exposure.include=* management.endpoints.web.exposure.include=*
management.metrics.export.prometheus.enabled=true management.prometheus.metrics.export.enabled=true
management.health.rabbit.enabled=false management.health.rabbit.enabled=false
########################################## monitor end ########################################## ########################################## monitor end ##########################################
@ -134,3 +133,4 @@ management.health.rabbit.enabled=false
server.shutdown=graceful server.shutdown=graceful
########################################## system end ########################################## ########################################## system end ##########################################
spring.main.allow-circular-references=true

@ -30,14 +30,14 @@
<charset>UTF-8</charset> <charset>UTF-8</charset>
</encoder> </encoder>
<!-- 日志记录器的滚动策略,按日期,按大小记录 --> <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 每天日志归档路径以及格式 --> <!-- 每天日志归档路径以及格式 -->
<fileNamePattern>${log.path}/logs/austin-info-%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern> <fileNamePattern>${log.path}/logs/austin-info-%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>1000MB</maxFileSize>
<maxFileSize>1000MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!--日志文件保留天数--> <!--日志文件保留天数-->
<maxHistory>3</maxHistory> <maxHistory>3</maxHistory>
<!-- 总文件大小限制 -->
<totalSizeCap>100GB</totalSizeCap>
</rollingPolicy> </rollingPolicy>
<!-- 此日志文件只记录info级别的 --> <!-- 此日志文件只记录info级别的 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter"> <filter class="ch.qos.logback.classic.filter.LevelFilter">
@ -57,13 +57,13 @@
<charset>UTF-8</charset> <!-- 此处设置字符集 --> <charset>UTF-8</charset> <!-- 此处设置字符集 -->
</encoder> </encoder>
<!-- 日志记录器的滚动策略,按日期,按大小记录 --> <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${log.path}/logs/austin-error-%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern> <fileNamePattern>${log.path}/logs/austin-error-%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>1000MB</maxFileSize>
<maxFileSize>1000MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!--日志文件保留天数--> <!--日志文件保留天数-->
<maxHistory>3</maxHistory> <maxHistory>3</maxHistory>
<!-- 总文件大小限制 -->
<totalSizeCap>10GB</totalSizeCap>
</rollingPolicy> </rollingPolicy>
<!-- 此日志文件只记录ERROR级别的 --> <!-- 此日志文件只记录ERROR级别的 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter"> <filter class="ch.qos.logback.classic.filter.LevelFilter">

@ -19,7 +19,7 @@
<parent> <parent>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId> <artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.6</version> <version>3.5.7</version>
<relativePath/> <relativePath/>
</parent> </parent>
@ -35,23 +35,22 @@
<revision>0.0.1-SNAPSHOT</revision> <revision>0.0.1-SNAPSHOT</revision>
<!--构建配置--> <!--构建配置-->
<java.version>1.8</java.version> <java.version>25</java.version>
<target.java.version>1.8</target.java.version> <target.java.version>25</target.java.version>
<maven.compiler.source>${target.java.version}</maven.compiler.source> <maven.compiler.source>${target.java.version}</maven.compiler.source>
<maven.compiler.target>${target.java.version}</maven.compiler.target> <maven.compiler.target>${target.java.version}</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!--依赖库版本--> <!--依赖库版本-->
<mysql-connector-java.version>5.1.35</mysql-connector-java.version> <mysql-connector-java.version>8.0.33</mysql-connector-java.version>
<hutool-all.version>5.7.15</hutool-all.version> <hutool-all.version>5.7.15</hutool-all.version>
<guava.version>31.0.1-jre</guava.version> <guava.version>33.5.0-jre</guava.version>
<okhttp.version>4.9.2</okhttp.version> <okhttp.version>4.9.2</okhttp.version>
<fastjson2.version>2.0.60</fastjson2.version> <fastjson2.version>2.0.60</fastjson2.version>
<tencentcloud-sdk-java.version>3.1.510</tencentcloud-sdk-java.version> <tencentcloud-sdk-java.version>3.1.510</tencentcloud-sdk-java.version>
<nacos-config-spring-boot-starter.version>0.2.12</nacos-config-spring-boot-starter.version> <nacos-config-spring-boot-starter.version>0.2.12</nacos-config-spring-boot-starter.version>
<apollo-client.version>2.1.0</apollo-client.version> <apollo-client.version>2.1.0</apollo-client.version>
<log-record-starter.version>1.0.4.1</log-record-starter.version> <log-record-starter.version>1.0.4.1</log-record-starter.version>
<javax.mail.version>1.6.2</javax.mail.version>
<springfox-boot-starter.version>3.0.0</springfox-boot-starter.version> <springfox-boot-starter.version>3.0.0</springfox-boot-starter.version>
<logback-gelf.version>3.0.0</logback-gelf.version> <logback-gelf.version>3.0.0</logback-gelf.version>
<xxl-job-core.version>2.3.0</xxl-job-core.version> <xxl-job-core.version>2.3.0</xxl-job-core.version>
@ -61,7 +60,7 @@
<flink-table-api-java-bridge.version>1.16.0</flink-table-api-java-bridge.version> <flink-table-api-java-bridge.version>1.16.0</flink-table-api-java-bridge.version>
<hive-exec.version>2.3.4</hive-exec.version> <hive-exec.version>2.3.4</hive-exec.version>
<weixin-java>4.5.3.B</weixin-java> <weixin-java>4.5.3.B</weixin-java>
<dynamic-tp-spring-boot-starter-apollo.version>1.0.2</dynamic-tp-spring-boot-starter-apollo.version> <dynamic-tp-spring-boot-starter-apollo.version>1.2.2-x</dynamic-tp-spring-boot-starter-apollo.version>
<alipay-sdk-java.version>4.39.19.ALL</alipay-sdk-java.version> <alipay-sdk-java.version>4.39.19.ALL</alipay-sdk-java.version>
<alibaba-dingtalk-service-sdk.version>2.0.0</alibaba-dingtalk-service-sdk.version> <alibaba-dingtalk-service-sdk.version>2.0.0</alibaba-dingtalk-service-sdk.version>
<rocketmq-spring-boot-starter.version>2.2.2</rocketmq-spring-boot-starter.version> <rocketmq-spring-boot-starter.version>2.2.2</rocketmq-spring-boot-starter.version>
@ -187,13 +186,6 @@
<version>${log-record-starter.version}</version> <version>${log-record-starter.version}</version>
</dependency> </dependency>
<!--邮件发送-->
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>${javax.mail.version}</version>
</dependency>
<!--swagger--> <!--swagger-->
<dependency> <dependency>
<groupId>io.springfox</groupId> <groupId>io.springfox</groupId>
@ -279,7 +271,7 @@
<!--动态线程池引入--> <!--动态线程池引入-->
<dependency> <dependency>
<groupId>io.github.lyh200</groupId> <groupId>org.dromara.dynamictp</groupId>
<artifactId>dynamic-tp-spring-boot-starter-apollo</artifactId> <artifactId>dynamic-tp-spring-boot-starter-apollo</artifactId>
<version>${dynamic-tp-spring-boot-starter-apollo.version}</version> <version>${dynamic-tp-spring-boot-starter-apollo.version}</version>
</dependency> </dependency>

Loading…
Cancel
Save