feat():初始化
parent
14da1917c3
commit
6a413e0ce0
|
@ -7,7 +7,7 @@ nacos:
|
|||
addr: 159.75.188.178:8848
|
||||
user-name: nacos
|
||||
password: nacos
|
||||
namespace: eight
|
||||
namespace: psr
|
||||
# Spring
|
||||
spring:
|
||||
application:
|
||||
|
|
|
@ -0,0 +1,62 @@
|
|||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<groupId>com.muyu</groupId>
|
||||
<artifactId>cloud-common</artifactId>
|
||||
<version>3.6.3</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>cloud-common-wechat</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<name>cloud-common-wechat</name>
|
||||
<url>http://maven.apache.org</url>
|
||||
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
|
||||
<!-- MuYu Common Core-->
|
||||
<dependency>
|
||||
<groupId>com.muyu</groupId>
|
||||
<artifactId>cloud-common-core</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.dom4j</groupId>
|
||||
<artifactId>dom4j</artifactId>
|
||||
<version>2.1.3</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 帮助将java对象转换为xml字符串-->
|
||||
<!-- 依赖冲突会导致InaccessibleObjectException异常更新到适用版本-->
|
||||
<dependency>
|
||||
<groupId>com.thoughtworks.xstream</groupId>
|
||||
<artifactId>xstream</artifactId>
|
||||
<version>1.4.20</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.squareup.okhttp3</groupId>
|
||||
<artifactId>okhttp</artifactId>
|
||||
<version>4.9.3</version>
|
||||
</dependency>
|
||||
|
||||
<!-- Alibaba Fastjson -->
|
||||
<dependency>
|
||||
<groupId>com.alibaba</groupId>
|
||||
<artifactId>fastjson</artifactId>
|
||||
<version>1.2.83</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<version>3.8.1</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
|
@ -0,0 +1,23 @@
|
|||
package com.muyu.common.wechat.domain;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @author 24415
|
||||
*/
|
||||
@Data
|
||||
public class AccessToken {
|
||||
|
||||
private String access_token;
|
||||
|
||||
private Long expires_in;
|
||||
|
||||
public void setExpiresTime(Long expiresIn) {
|
||||
this.expires_in = System.currentTimeMillis()+expiresIn*1000;
|
||||
}
|
||||
|
||||
public boolean isExpired(Long expiresIn){
|
||||
long now = System.currentTimeMillis();
|
||||
return now>expiresIn;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,38 @@
|
|||
package com.muyu.common.wechat.domain;
|
||||
|
||||
import com.thoughtworks.xstream.annotations.XStreamAlias;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @Author:蓬叁
|
||||
* @Package:com.muyu.wxapplication.massage
|
||||
* @Project:WXApplication
|
||||
* @name:Articles
|
||||
* @Date:2024/9/18 下午10:14
|
||||
*/
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@XStreamAlias("item")
|
||||
public class Articles {
|
||||
// <Articles>
|
||||
// <item>
|
||||
// <Title><![CDATA[title1]]></Title>
|
||||
// <Description><![CDATA[description1]]></Description>
|
||||
// <PicUrl><![CDATA[picurl]]></PicUrl>
|
||||
// <Url><![CDATA[url]]></Url>
|
||||
// </item>
|
||||
// </Articles>
|
||||
|
||||
@XStreamAlias("Title")
|
||||
private String title ;
|
||||
@XStreamAlias("Description")
|
||||
private String description ;
|
||||
@XStreamAlias("PicUrl")
|
||||
private String picUrl ;
|
||||
@XStreamAlias("Url")
|
||||
private String url ;
|
||||
|
||||
}
|
|
@ -0,0 +1,50 @@
|
|||
package com.muyu.common.wechat.domain;
|
||||
|
||||
import com.thoughtworks.xstream.annotations.XStreamAlias;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author:蓬叁
|
||||
* @Package:com.muyu.wxapplication.massage
|
||||
* @Project:WXApplication
|
||||
* @name:ImageText
|
||||
* @Date:2024/9/18 下午9:27
|
||||
*/
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@XStreamAlias("xml")
|
||||
public class NewsMessage {
|
||||
// <ToUserName><![CDATA[toUser]]></ToUserName>
|
||||
// <FromUserName><![CDATA[fromUser]]></FromUserName>
|
||||
// <CreateTime>12345678</CreateTime>
|
||||
// <MsgType><![CDATA[news]]></MsgType>
|
||||
// <ArticleCount>1</ArticleCount>
|
||||
// <Articles>
|
||||
// <item>
|
||||
// <Title><![CDATA[title1]]></Title>
|
||||
// <Description><![CDATA[description1]]></Description>
|
||||
// <PicUrl><![CDATA[picurl]]></PicUrl>
|
||||
// <Url><![CDATA[url]]></Url>
|
||||
// </item>
|
||||
// </Articles>
|
||||
|
||||
@XStreamAlias("ToUserName")
|
||||
private String toUserName ;
|
||||
@XStreamAlias("FromUserName")
|
||||
private String fromUserName ;
|
||||
@XStreamAlias("CreateTime")
|
||||
private long createTime ;
|
||||
@XStreamAlias("MsgType")
|
||||
private String msgType ;
|
||||
@XStreamAlias("ArticleCount")
|
||||
private Integer articleCount ;
|
||||
@XStreamAlias("Articles")
|
||||
private List<Articles> articles ;
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,40 @@
|
|||
package com.muyu.common.wechat.domain;
|
||||
|
||||
import com.thoughtworks.xstream.annotations.XStreamAlias;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @Author:蓬叁
|
||||
* @Package:com.muyu.wxapplication.massage
|
||||
* @Project:WXApplication
|
||||
* @name:TextMessage
|
||||
* @Date:2024/9/18 上午11:33
|
||||
*/
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@XStreamAlias("xml")
|
||||
public class TextMessage {
|
||||
|
||||
//起一个别名 因为我们微信返回信息与java代码格式规范发生冲突
|
||||
//微信格式 ToUserName
|
||||
//JAVA格式 toUserName
|
||||
@XStreamAlias("ToUserName")
|
||||
private String toUserName;
|
||||
@XStreamAlias("FromUserName")
|
||||
private String fromUserName;
|
||||
@XStreamAlias("CreateTime")
|
||||
private long createTime;
|
||||
@XStreamAlias("MsgType")
|
||||
private String msgType;
|
||||
@XStreamAlias("Content")
|
||||
private String content;
|
||||
|
||||
}
|
||||
// <ToUserName><![CDATA[toUser]]></ToUserName>
|
||||
// <FromUserName><![CDATA[fromUser]]></FromUserName>
|
||||
// <CreateTime>12345678</CreateTime>
|
||||
// <MsgType><![CDATA[text]]></MsgType>
|
||||
// <Content><![CDATA[你好]]></Content>
|
|
@ -0,0 +1,38 @@
|
|||
package com.muyu;
|
||||
|
||||
import junit.framework.Test;
|
||||
import junit.framework.TestCase;
|
||||
import junit.framework.TestSuite;
|
||||
|
||||
/**
|
||||
* Unit test for simple App.
|
||||
*/
|
||||
public class AppTest
|
||||
extends TestCase
|
||||
{
|
||||
/**
|
||||
* Create the test case
|
||||
*
|
||||
* @param testName name of the test case
|
||||
*/
|
||||
public AppTest( String testName )
|
||||
{
|
||||
super( testName );
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the suite of tests being tested
|
||||
*/
|
||||
public static Test suite()
|
||||
{
|
||||
return new TestSuite( AppTest.class );
|
||||
}
|
||||
|
||||
/**
|
||||
* Rigourous Test :-)
|
||||
*/
|
||||
public void testApp()
|
||||
{
|
||||
assertTrue( true );
|
||||
}
|
||||
}
|
|
@ -20,6 +20,7 @@
|
|||
<module>cloud-common-system</module>
|
||||
<module>cloud-common-xxl</module>
|
||||
<module>cloud-common-rabbit</module>
|
||||
<module>cloud-common-wechat</module>
|
||||
</modules>
|
||||
|
||||
<artifactId>cloud-common</artifactId>
|
||||
|
|
|
@ -7,7 +7,7 @@ nacos:
|
|||
addr: 159.75.188.178:8848
|
||||
user-name: nacos
|
||||
password: nacos
|
||||
namespace: eight
|
||||
namespace: psr
|
||||
|
||||
# Spring
|
||||
spring:
|
||||
|
|
|
@ -7,7 +7,7 @@ nacos:
|
|||
addr: 159.75.188.178:8848
|
||||
user-name: nacos
|
||||
password: nacos
|
||||
namespace: eight
|
||||
namespace: psr
|
||||
|
||||
# Spring
|
||||
spring:
|
||||
|
|
|
@ -7,7 +7,7 @@ nacos:
|
|||
addr: 159.75.188.178:8848
|
||||
user-name: nacos
|
||||
password: nacos
|
||||
namespace: eight
|
||||
namespace: psr
|
||||
|
||||
# Spring
|
||||
spring:
|
||||
|
|
|
@ -7,7 +7,7 @@ nacos:
|
|||
addr: 159.75.188.178:8848
|
||||
user-name: nacos
|
||||
password: nacos
|
||||
namespace: eight
|
||||
namespace: psr
|
||||
# SPRING_AMQP_DESERIALIZATION_TRUST_ALL=true spring.amqp.deserialization.trust.all
|
||||
# Spring
|
||||
spring:
|
||||
|
|
|
@ -0,0 +1,112 @@
|
|||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<groupId>com.muyu</groupId>
|
||||
<artifactId>cloud-modules</artifactId>
|
||||
<version>3.6.3</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>cloud-modules-warn</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<name>cloud-modules-warn</name>
|
||||
<url>http://maven.apache.org</url>
|
||||
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
|
||||
<!-- SpringCloud Alibaba Nacos -->
|
||||
<dependency>
|
||||
<groupId>com.alibaba.cloud</groupId>
|
||||
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- SpringCloud Alibaba Nacos Config -->
|
||||
<dependency>
|
||||
<groupId>com.alibaba.cloud</groupId>
|
||||
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- SpringCloud Alibaba Sentinel -->
|
||||
<dependency>
|
||||
<groupId>com.alibaba.cloud</groupId>
|
||||
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- SpringBoot Actuator -->
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-actuator</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- Mysql Connector -->
|
||||
<dependency>
|
||||
<groupId>com.mysql</groupId>
|
||||
<artifactId>mysql-connector-j</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- MuYu Common DataSource -->
|
||||
<dependency>
|
||||
<groupId>com.muyu</groupId>
|
||||
<artifactId>cloud-common-datasource</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- MuYu Common DataScope -->
|
||||
<dependency>
|
||||
<groupId>com.muyu</groupId>
|
||||
<artifactId>cloud-common-datascope</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- MuYu Common Log -->
|
||||
<dependency>
|
||||
<groupId>com.muyu</groupId>
|
||||
<artifactId>cloud-common-log</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- 接口模块 -->
|
||||
<dependency>
|
||||
<groupId>com.muyu</groupId>
|
||||
<artifactId>cloud-common-api-doc</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- XllJob定时任务 -->
|
||||
<dependency>
|
||||
<groupId>com.muyu</groupId>
|
||||
<artifactId>cloud-common-xxl</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.muyu</groupId>
|
||||
<artifactId>cloud-common-rabbit</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<version>3.8.1</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<finalName>${project.artifactId}</finalName>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||
<executions>
|
||||
<execution>
|
||||
<goals>
|
||||
<goal>repackage</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
|
@ -0,0 +1,23 @@
|
|||
package com.muyu.warn;
|
||||
|
||||
import com.muyu.common.security.annotation.EnableCustomConfig;
|
||||
import com.muyu.common.security.annotation.EnableMyFeignClients;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
|
||||
/**
|
||||
* @Author:蓬叁
|
||||
* @Package:com.muyu.warn
|
||||
* @Project:cloud-server-8
|
||||
* @name:CloudWarnApplication
|
||||
* @Date:2024/9/20 下午8:33
|
||||
*/
|
||||
@EnableCustomConfig
|
||||
//@EnableCustomSwagger2
|
||||
@EnableMyFeignClients
|
||||
@SpringBootApplication
|
||||
public class CloudWarnApplication {
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(CloudWarnApplication.class, args);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,111 @@
|
|||
package com.muyu.warn.controller;
|
||||
|
||||
import com.muyu.common.core.domain.Result;
|
||||
import com.muyu.common.core.utils.poi.ExcelUtil;
|
||||
import com.muyu.common.core.web.controller.BaseController;
|
||||
import com.muyu.common.core.web.page.TableDataInfo;
|
||||
import com.muyu.common.security.annotation.RequiresPermissions;
|
||||
import com.muyu.common.security.utils.SecurityUtils;
|
||||
import com.muyu.warn.domain.WarnLogs;
|
||||
import com.muyu.warn.domain.WarnStrategy;
|
||||
import com.muyu.warn.service.WarnLogsService;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import static com.muyu.common.core.domain.Result.error;
|
||||
import static com.muyu.common.core.domain.Result.success;
|
||||
import static com.muyu.common.core.utils.PageUtils.startPage;
|
||||
|
||||
/**
|
||||
* @Author:蓬叁
|
||||
* @Package:com.muyu.warn.controller
|
||||
* @Project:cloud-server-8
|
||||
* @name:WarnLogsController
|
||||
* @Date:2024/9/20 下午7:29
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/logs")
|
||||
public class WarnLogsController extends BaseController {
|
||||
|
||||
@Autowired private WarnLogsService warnLogsService;
|
||||
|
||||
/**
|
||||
* 查询预警日志列表
|
||||
*/
|
||||
@RequiresPermissions("platform:logs:list")
|
||||
@GetMapping("/list")
|
||||
public Result<TableDataInfo<WarnLogs>> list(WarnLogs warnLogs)
|
||||
{
|
||||
startPage();
|
||||
List<WarnLogs> list = warnLogsService.selectWarnLogsList(warnLogs);
|
||||
return getDataTable(list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出预警日志列表
|
||||
*/
|
||||
@RequiresPermissions("platform:logs:export")
|
||||
@PostMapping("/export")
|
||||
public void export(HttpServletResponse response, WarnLogs warnLogs)
|
||||
{
|
||||
List<WarnLogs> list = warnLogsService.selectWarnLogsList(warnLogs);
|
||||
ExcelUtil<WarnLogs> util = new ExcelUtil<WarnLogs>(WarnLogs.class);
|
||||
util.exportExcel(response, list, "预警日志数据");
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取预警日志详细信息
|
||||
*/
|
||||
@RequiresPermissions("platform:logs:query")
|
||||
@GetMapping(value = "/{id}")
|
||||
public Result<List<WarnLogs>> getInfo(@PathVariable("id") Long id)
|
||||
{
|
||||
return success(warnLogsService.selectWarnLogsById(id));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增预警日志
|
||||
*/
|
||||
@RequiresPermissions("platform:logs:add")
|
||||
@PostMapping
|
||||
public Result<Integer> add(
|
||||
@Validated @RequestBody WarnLogs warnLogs)
|
||||
{
|
||||
if (warnLogsService.checkIdUnique(warnLogs)) {
|
||||
return error("新增 预警日志 '" + warnLogs + "'失败,预警日志已存在");
|
||||
}
|
||||
return toAjax(warnLogsService.save(warnLogs));
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改预警日志
|
||||
*/
|
||||
@RequiresPermissions("platform:logs:edit")
|
||||
@PutMapping
|
||||
public Result<Integer> edit(
|
||||
@Validated @RequestBody WarnLogs warnLogs)
|
||||
{
|
||||
if (!warnLogsService.checkIdUnique(warnLogs)) {
|
||||
return error("修改 预警日志 '" + warnLogs + "'失败,预警日志不存在");
|
||||
}
|
||||
// warnLogs.setUpdateBy(SecurityUtils.getUsername());
|
||||
return toAjax(warnLogsService.updateById(warnLogs));
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除预警日志
|
||||
*/
|
||||
@RequiresPermissions("platform:logs:remove")
|
||||
@DeleteMapping("/{ids}")
|
||||
public Result<Integer> remove(@PathVariable("ids") Long[] ids)
|
||||
{
|
||||
warnLogsService.removeBatchByIds(Arrays.asList(ids));
|
||||
return success();
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,106 @@
|
|||
package com.muyu.warn.controller;
|
||||
|
||||
import com.muyu.common.core.domain.Result;
|
||||
import com.muyu.common.core.utils.poi.ExcelUtil;
|
||||
import com.muyu.common.core.web.controller.BaseController;
|
||||
import com.muyu.common.core.web.page.TableDataInfo;
|
||||
import com.muyu.common.security.annotation.RequiresPermissions;
|
||||
import com.muyu.common.security.utils.SecurityUtils;
|
||||
import com.muyu.warn.domain.WarnRule;
|
||||
import com.muyu.warn.service.WarnRuleService;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author:蓬叁
|
||||
* @Package:com.muyu.warn.controller
|
||||
* @Project:cloud-server-8
|
||||
* @name:WarnLogsController
|
||||
* @Date:2024/9/20 下午7:29
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/rule")
|
||||
public class WarnRuleController extends BaseController
|
||||
{
|
||||
@Resource
|
||||
private WarnRuleService warnRuleService;
|
||||
|
||||
/**
|
||||
* 查询预警规则列表
|
||||
*/
|
||||
@RequiresPermissions("platform:rule:list")
|
||||
@GetMapping("/list")
|
||||
public Result<TableDataInfo<WarnRule>> list(WarnRule warnRule)
|
||||
{
|
||||
startPage();
|
||||
List<WarnRule> list = warnRuleService.selectWarnRuleList(warnRule);
|
||||
return getDataTable(list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出预警规则列表
|
||||
*/
|
||||
@RequiresPermissions("platform:rule:export")
|
||||
@PostMapping("/export")
|
||||
public void export(HttpServletResponse response, WarnRule warnRule)
|
||||
{
|
||||
List<WarnRule> list = warnRuleService.selectWarnRuleList(warnRule);
|
||||
ExcelUtil<WarnRule> util = new ExcelUtil<WarnRule>(WarnRule.class);
|
||||
util.exportExcel(response, list, "预警规则数据");
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取预警规则详细信息
|
||||
*/
|
||||
@RequiresPermissions("platform:rule:query")
|
||||
@GetMapping(value = "/{id}")
|
||||
public Result<List<WarnRule>> getInfo(@PathVariable("id") Long id)
|
||||
{
|
||||
return success(warnRuleService.selectWarnRuleById(id));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增预警规则
|
||||
*/
|
||||
@RequiresPermissions("platform:rule:add")
|
||||
@PostMapping
|
||||
public Result<Integer> add(
|
||||
@Validated @RequestBody WarnRule warnRule)
|
||||
{
|
||||
if (warnRuleService.checkIdUnique(warnRule)) {
|
||||
return error("新增 预警规则 '" + warnRule + "'失败,预警规则已存在");
|
||||
}
|
||||
return toAjax(warnRuleService.save(warnRule));
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改预警规则
|
||||
*/
|
||||
@RequiresPermissions("platform:rule:edit")
|
||||
@PutMapping
|
||||
public Result<Integer> edit(
|
||||
@Validated @RequestBody WarnRule warnRule)
|
||||
{
|
||||
if (!warnRuleService.checkIdUnique(warnRule)) {
|
||||
return error("修改 预警规则 '" + warnRule + "'失败,预警规则不存在");
|
||||
}
|
||||
// warnRule.setUpdateBy(SecurityUtils.getUsername());
|
||||
return toAjax(warnRuleService.updateById(warnRule));
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除预警规则
|
||||
*/
|
||||
@RequiresPermissions("platform:rule:remove")
|
||||
@DeleteMapping("/{ids}")
|
||||
public Result<Integer> remove(@PathVariable("ids") Long[] ids)
|
||||
{
|
||||
warnRuleService.removeBatchByIds(Arrays.asList(ids));
|
||||
return success();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,106 @@
|
|||
package com.muyu.warn.controller;
|
||||
|
||||
import com.muyu.common.core.domain.Result;
|
||||
import com.muyu.common.core.utils.poi.ExcelUtil;
|
||||
import com.muyu.common.core.web.controller.BaseController;
|
||||
import com.muyu.common.core.web.page.TableDataInfo;
|
||||
import com.muyu.common.security.annotation.RequiresPermissions;
|
||||
import com.muyu.common.security.utils.SecurityUtils;
|
||||
import com.muyu.warn.domain.WarnStrategy;
|
||||
import com.muyu.warn.service.WarnStrategyService;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author:蓬叁
|
||||
* @Package:com.muyu.warn.controller
|
||||
* @Project:cloud-server-8
|
||||
* @name:WarnLogsController
|
||||
* @Date:2024/9/20 下午7:29
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/strategy")
|
||||
public class WarnStrategyController extends BaseController
|
||||
{
|
||||
@Resource
|
||||
private WarnStrategyService warnStrategyService;
|
||||
|
||||
/**
|
||||
* 查询预警策略列表
|
||||
*/
|
||||
@RequiresPermissions("platform:strategy:list")
|
||||
@GetMapping("/list")
|
||||
public Result<TableDataInfo<WarnStrategy>> list(WarnStrategy warnStrategy)
|
||||
{
|
||||
startPage();
|
||||
List<WarnStrategy> list = warnStrategyService.selectWarnStrategyList(warnStrategy);
|
||||
return getDataTable(list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出预警策略列表
|
||||
*/
|
||||
@RequiresPermissions("platform:strategy:export")
|
||||
@PostMapping("/export")
|
||||
public void export(HttpServletResponse response, WarnStrategy warnStrategy)
|
||||
{
|
||||
List<WarnStrategy> list = warnStrategyService.selectWarnStrategyList(warnStrategy);
|
||||
ExcelUtil<WarnStrategy> util = new ExcelUtil<WarnStrategy>(WarnStrategy.class);
|
||||
util.exportExcel(response, list, "预警策略数据");
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取预警策略详细信息
|
||||
*/
|
||||
@RequiresPermissions("platform:strategy:query")
|
||||
@GetMapping(value = "/{id}")
|
||||
public Result<List<WarnStrategy>> getInfo(@PathVariable("id") Long id)
|
||||
{
|
||||
return success(warnStrategyService.selectWarnStrategyById(id));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增预警策略
|
||||
*/
|
||||
@RequiresPermissions("platform:strategy:add")
|
||||
@PostMapping
|
||||
public Result<Integer> add(
|
||||
@Validated @RequestBody WarnStrategy warnStrategy)
|
||||
{
|
||||
if (warnStrategyService.checkIdUnique(warnStrategy)) {
|
||||
return error("新增 预警策略 '" + warnStrategy + "'失败,预警策略已存在");
|
||||
}
|
||||
return toAjax(warnStrategyService.save(warnStrategy));
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改预警策略
|
||||
*/
|
||||
@RequiresPermissions("platform:strategy:edit")
|
||||
@PutMapping
|
||||
public Result<Integer> edit(
|
||||
@Validated @RequestBody WarnStrategy warnStrategy)
|
||||
{
|
||||
if (!warnStrategyService.checkIdUnique(warnStrategy)) {
|
||||
return error("修改 预警策略 '" + warnStrategy + "'失败,预警策略不存在");
|
||||
}
|
||||
// warnStrategy.setUpdateBy(SecurityUtils.getUsername());
|
||||
return toAjax(warnStrategyService.updateById(warnStrategy));
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除预警策略
|
||||
*/
|
||||
@RequiresPermissions("platform:strategy:remove")
|
||||
@DeleteMapping("/{ids}")
|
||||
public Result<Integer> remove(@PathVariable("ids") Long[] ids)
|
||||
{
|
||||
warnStrategyService.removeBatchByIds(Arrays.asList(ids));
|
||||
return success();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,104 @@
|
|||
package com.muyu.warn.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.muyu.common.core.annotation.Excel;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @Author:蓬叁
|
||||
* @Package:com.muyu.warn.domain
|
||||
* @Project:cloud-server-8
|
||||
* @name:WarnLogs
|
||||
* @Date:2024/9/20 下午7:11
|
||||
*/
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@TableName("warn_logs")
|
||||
public class WarnLogs {
|
||||
|
||||
/**
|
||||
* 预警日志id
|
||||
*/
|
||||
@Excel(name = "预警日志id", cellType = Excel.ColumnType.NUMERIC)
|
||||
@TableId( type = IdType.AUTO)
|
||||
private Long id ;
|
||||
/**
|
||||
* 车辆vin码
|
||||
*/
|
||||
@Excel(name = "车辆vin码")
|
||||
private String vin ;
|
||||
/**
|
||||
* 规则id
|
||||
*/
|
||||
@Excel(name = "规则id")
|
||||
private Long warnRuleId ;
|
||||
/**
|
||||
* 开始时间
|
||||
*/
|
||||
@Excel(name = "开始时间")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date startTime ;
|
||||
/**
|
||||
* 结束时间
|
||||
*/
|
||||
@Excel(name = "结束时间")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date endTime ;
|
||||
/**
|
||||
* 最大值
|
||||
*/
|
||||
@Excel(name = "最大值")
|
||||
private Long maxValue ;
|
||||
/**
|
||||
* 最小值
|
||||
*/
|
||||
@Excel(name = "最小值")
|
||||
private Long minValue ;
|
||||
/**
|
||||
* 平均值
|
||||
*/
|
||||
@Excel(name = "平均值")
|
||||
private Long avgValue ;
|
||||
/**
|
||||
* 中位数
|
||||
*/
|
||||
@Excel(name = "中位数")
|
||||
private Long medianValue ;
|
||||
/**
|
||||
* 是否发送预警
|
||||
*/
|
||||
@Excel(name = "是否发送预警")
|
||||
private Long status ;
|
||||
// /**
|
||||
// * 创建人
|
||||
// */
|
||||
// @Excel(name = "创建人")
|
||||
// private String createBy ;
|
||||
// /**
|
||||
// * 创建时间
|
||||
// */
|
||||
// @Excel(name = "创建时间")
|
||||
// private String createTime ;
|
||||
// /**
|
||||
// * 更新人
|
||||
// */
|
||||
// @Excel(name = "更新人")
|
||||
// private String updateBy ;
|
||||
// /**
|
||||
// * 更新时间
|
||||
// */
|
||||
// @Excel(name = "更新时间")
|
||||
// private String updateTime ;
|
||||
|
||||
}
|
|
@ -0,0 +1,74 @@
|
|||
package com.muyu.warn.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.muyu.common.core.annotation.Excel;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @Author:蓬叁
|
||||
* @Package:com.muyu.warn.domain
|
||||
* @Project:cloud-server-8
|
||||
* @name:WarnRule
|
||||
* @Date:2024/9/20 下午7:20
|
||||
*/
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@TableName("warn_rule")
|
||||
public class WarnRule {
|
||||
|
||||
/**
|
||||
* 规则id
|
||||
*/
|
||||
@TableId( type = IdType.AUTO)
|
||||
private Long id ;
|
||||
/**
|
||||
* 规则名称
|
||||
*/
|
||||
private String ruleName ;
|
||||
/**
|
||||
* 策略id
|
||||
*/
|
||||
private Long strategyId ;
|
||||
/**
|
||||
* 报文数据类型id
|
||||
*/
|
||||
private Long msgTypeId ;
|
||||
/**
|
||||
* 滑窗时间
|
||||
*/
|
||||
private Long slideTime ;
|
||||
/**
|
||||
* 滑窗频率
|
||||
*/
|
||||
private Long slideFrequency ;
|
||||
/**
|
||||
* 最大值
|
||||
*/
|
||||
private Long maxValue ;
|
||||
/**
|
||||
* 最小值
|
||||
*/
|
||||
private Long minValue ;
|
||||
// /**
|
||||
// * 创建人
|
||||
// */
|
||||
// private String createBy ;
|
||||
// /**
|
||||
// * 创建时间
|
||||
// */
|
||||
// private String createTime ;
|
||||
// /**
|
||||
// * 更新人
|
||||
// */
|
||||
// private String updateBy ;
|
||||
// /**
|
||||
// * 更新时间
|
||||
// */
|
||||
// private String updateTime ;
|
||||
|
||||
}
|
|
@ -0,0 +1,58 @@
|
|||
package com.muyu.warn.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.muyu.common.core.annotation.Excel;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @Author:蓬叁
|
||||
* @Package:com.muyu.warn.domain
|
||||
* @Project:cloud-server-8
|
||||
* @name:WarnStrategy
|
||||
* @Date:2024/9/20 下午7:27
|
||||
*/
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@TableName("warn_strategy")
|
||||
public class WarnStrategy {
|
||||
|
||||
/**
|
||||
* 策略id
|
||||
*/
|
||||
@TableId( type = IdType.AUTO)
|
||||
private Long id ;
|
||||
/**
|
||||
* 车辆类型id
|
||||
*/
|
||||
private Long carTypeId ;
|
||||
/**
|
||||
* 策略名称
|
||||
*/
|
||||
private String strategyName ;
|
||||
/**
|
||||
* 报文模版id
|
||||
*/
|
||||
private Long msgId ;
|
||||
// /**
|
||||
// * 创建人
|
||||
// */
|
||||
// private String createBy ;
|
||||
// /**
|
||||
// * 创建时间
|
||||
// */
|
||||
// private String createTime ;
|
||||
// /**
|
||||
// * 更新人
|
||||
// */
|
||||
// private String updateBy ;
|
||||
// /**
|
||||
// * 更新时间
|
||||
// */
|
||||
// private String updateTime ;
|
||||
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
package com.muyu.warn.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.muyu.warn.domain.WarnLogs;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
/**
|
||||
* @Author:蓬叁
|
||||
* @Package:com.muyu.warn.mapper
|
||||
* @Project:cloud-server-8
|
||||
* @name:WarnLogsMapper
|
||||
* @Date:2024/9/20 下午7:31
|
||||
*/
|
||||
@Mapper
|
||||
public interface WarnLogsMapper extends BaseMapper<WarnLogs> {
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
package com.muyu.warn.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.muyu.warn.domain.WarnRule;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
/**
|
||||
* @Author:蓬叁
|
||||
* @Package:com.muyu.warn.controller
|
||||
* @Project:cloud-server-8
|
||||
* @name:WarnLogsController
|
||||
* @Date:2024/9/20 下午7:29
|
||||
*/
|
||||
@Mapper
|
||||
public interface WarnRuleMapper extends BaseMapper<WarnRule> {
|
||||
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
package com.muyu.warn.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.muyu.warn.domain.WarnStrategy;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
/**
|
||||
* @Author:蓬叁
|
||||
* @Package:com.muyu.warn.controller
|
||||
* @Project:cloud-server-8
|
||||
* @name:WarnLogsController
|
||||
* @Date:2024/9/20 下午7:29
|
||||
*/
|
||||
@Mapper
|
||||
public interface WarnStrategyMapper extends BaseMapper<WarnStrategy> {
|
||||
|
||||
}
|
|
@ -0,0 +1,40 @@
|
|||
package com.muyu.warn.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.muyu.warn.domain.WarnLogs;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author:蓬叁
|
||||
* @Package:com.muyu.warn.service
|
||||
* @Project:cloud-server-8
|
||||
* @name:WarnLogsService
|
||||
* @Date:2024/9/20 下午7:32
|
||||
*/
|
||||
public interface WarnLogsService extends IService<WarnLogs> {
|
||||
|
||||
/**
|
||||
* 精确查询预警日志
|
||||
*
|
||||
* @param id 预警日志主键
|
||||
* @return 预警日志
|
||||
*/
|
||||
public WarnLogs selectWarnLogsById(Long id);
|
||||
|
||||
/**
|
||||
* 查询预警日志列表
|
||||
*
|
||||
* @param warnLogs 预警日志
|
||||
* @return 预警日志集合
|
||||
*/
|
||||
public List<WarnLogs> selectWarnLogsList(WarnLogs warnLogs);
|
||||
|
||||
/**
|
||||
* 判断 预警日志 id是否唯一
|
||||
* @param warnLogs 预警日志
|
||||
* @return 结果
|
||||
*/
|
||||
Boolean checkIdUnique(WarnLogs warnLogs);
|
||||
|
||||
}
|
|
@ -0,0 +1,39 @@
|
|||
package com.muyu.warn.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.muyu.warn.domain.WarnRule;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author:蓬叁
|
||||
* @Package:com.muyu.warn.controller
|
||||
* @Project:cloud-server-8
|
||||
* @name:WarnLogsController
|
||||
* @Date:2024/9/20 下午7:29
|
||||
*/
|
||||
public interface WarnRuleService extends IService<WarnRule> {
|
||||
/**
|
||||
* 精确查询预警规则
|
||||
*
|
||||
* @param id 预警规则主键
|
||||
* @return 预警规则
|
||||
*/
|
||||
public WarnRule selectWarnRuleById(Long id);
|
||||
|
||||
/**
|
||||
* 查询预警规则列表
|
||||
*
|
||||
* @param warnRule 预警规则
|
||||
* @return 预警规则集合
|
||||
*/
|
||||
public List<WarnRule> selectWarnRuleList(WarnRule warnRule);
|
||||
|
||||
/**
|
||||
* 判断 预警规则 id是否唯一
|
||||
* @param warnRule 预警规则
|
||||
* @return 结果
|
||||
*/
|
||||
Boolean checkIdUnique(WarnRule warnRule);
|
||||
|
||||
}
|
|
@ -0,0 +1,39 @@
|
|||
package com.muyu.warn.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.muyu.warn.domain.WarnStrategy;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author:蓬叁
|
||||
* @Package:com.muyu.warn.controller
|
||||
* @Project:cloud-server-8
|
||||
* @name:WarnLogsController
|
||||
* @Date:2024/9/20 下午7:29
|
||||
*/
|
||||
public interface WarnStrategyService extends IService<WarnStrategy> {
|
||||
/**
|
||||
* 精确查询预警策略
|
||||
*
|
||||
* @param id 预警策略主键
|
||||
* @return 预警策略
|
||||
*/
|
||||
public WarnStrategy selectWarnStrategyById(Long id);
|
||||
|
||||
/**
|
||||
* 查询预警策略列表
|
||||
*
|
||||
* @param warnStrategy 预警策略
|
||||
* @return 预警策略集合
|
||||
*/
|
||||
public List<WarnStrategy> selectWarnStrategyList(WarnStrategy warnStrategy);
|
||||
|
||||
/**
|
||||
* 判断 预警策略 id是否唯一
|
||||
* @param warnStrategy 预警策略
|
||||
* @return 结果
|
||||
*/
|
||||
Boolean checkIdUnique(WarnStrategy warnStrategy);
|
||||
|
||||
}
|
|
@ -0,0 +1,98 @@
|
|||
package com.muyu.warn.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Assert;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.muyu.common.core.utils.StringUtils;
|
||||
import com.muyu.warn.domain.WarnLogs;
|
||||
import com.muyu.warn.mapper.WarnLogsMapper;
|
||||
import com.muyu.warn.service.WarnLogsService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author:蓬叁
|
||||
* @Package:com.muyu.warn.service.impl
|
||||
* @Project:cloud-server-8
|
||||
* @name:WarnLogsServiceImpl
|
||||
* @Date:2024/9/20 下午7:39
|
||||
*/
|
||||
@Service
|
||||
public class WarnLogsServiceImpl
|
||||
extends ServiceImpl<WarnLogsMapper, WarnLogs>
|
||||
implements WarnLogsService {
|
||||
|
||||
@Autowired private WarnLogsMapper warnLogsMapper;
|
||||
|
||||
/**
|
||||
* 精确查询预警日志
|
||||
*
|
||||
* @param id 预警日志主键
|
||||
* @return 预警日志
|
||||
*/
|
||||
@Override
|
||||
public WarnLogs selectWarnLogsById(Long id)
|
||||
{
|
||||
LambdaQueryWrapper<WarnLogs> queryWrapper = new LambdaQueryWrapper<>();
|
||||
Assert.notNull(id, "id不可为空");
|
||||
queryWrapper.eq(WarnLogs::getId, id);
|
||||
return this.getOne(queryWrapper);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 查询预警日志列表
|
||||
*
|
||||
* @param warnLogs 预警日志
|
||||
* @return 预警日志
|
||||
*/
|
||||
@Override
|
||||
public List<WarnLogs> selectWarnLogsList(WarnLogs warnLogs)
|
||||
{
|
||||
LambdaQueryWrapper<WarnLogs> queryWrapper = new LambdaQueryWrapper<>();
|
||||
if (StringUtils.isNotEmpty(warnLogs.getVin())){
|
||||
queryWrapper.eq(WarnLogs::getVin, warnLogs.getVin());
|
||||
}
|
||||
if (StringUtils.isNotNull(warnLogs.getWarnRuleId())){
|
||||
queryWrapper.eq(WarnLogs::getWarnRuleId, warnLogs.getWarnRuleId());
|
||||
}
|
||||
if (StringUtils.isNotNull(warnLogs.getStartTime())){
|
||||
queryWrapper.eq(WarnLogs::getStartTime, warnLogs.getStartTime());
|
||||
}
|
||||
if (StringUtils.isNotNull(warnLogs.getEndTime())){
|
||||
queryWrapper.eq(WarnLogs::getEndTime, warnLogs.getEndTime());
|
||||
}
|
||||
if (StringUtils.isNotNull(warnLogs.getMaxValue())){
|
||||
queryWrapper.eq(WarnLogs::getMaxValue, warnLogs.getMaxValue());
|
||||
}
|
||||
if (StringUtils.isNotNull(warnLogs.getMinValue())){
|
||||
queryWrapper.eq(WarnLogs::getMinValue, warnLogs.getMinValue());
|
||||
}
|
||||
if (StringUtils.isNotNull(warnLogs.getAvgValue())){
|
||||
queryWrapper.eq(WarnLogs::getAvgValue, warnLogs.getAvgValue());
|
||||
}
|
||||
if (StringUtils.isNotNull(warnLogs.getMedianValue())){
|
||||
queryWrapper.eq(WarnLogs::getMedianValue, warnLogs.getMedianValue());
|
||||
}
|
||||
if (StringUtils.isNotNull(warnLogs.getStatus())){
|
||||
queryWrapper.eq(WarnLogs::getStatus, warnLogs.getStatus());
|
||||
}
|
||||
return this.list(queryWrapper);
|
||||
}
|
||||
|
||||
/**
|
||||
* 唯一 判断
|
||||
* @param warnLogs 预警日志
|
||||
* @return 预警日志
|
||||
*/
|
||||
@Override
|
||||
public Boolean checkIdUnique(WarnLogs warnLogs) {
|
||||
LambdaQueryWrapper<WarnLogs> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(WarnLogs::getId, warnLogs.getId());
|
||||
return this.count(queryWrapper) > 0;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,88 @@
|
|||
package com.muyu.warn.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.muyu.common.core.utils.StringUtils;
|
||||
import com.muyu.warn.domain.WarnRule;
|
||||
import com.muyu.warn.mapper.WarnRuleMapper;
|
||||
import com.muyu.warn.service.WarnRuleService;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author:蓬叁
|
||||
* @Package:com.muyu.warn.controller
|
||||
* @Project:cloud-server-8
|
||||
* @name:WarnLogsController
|
||||
* @Date:2024/9/20 下午7:29
|
||||
*/
|
||||
@Service
|
||||
public class WarnRuleServiceImpl
|
||||
extends ServiceImpl<WarnRuleMapper, WarnRule>
|
||||
implements WarnRuleService {
|
||||
|
||||
/**
|
||||
* 精确查询预警规则
|
||||
*
|
||||
* @param id 预警规则主键
|
||||
* @return 预警规则
|
||||
*/
|
||||
@Override
|
||||
public WarnRule selectWarnRuleById(Long id)
|
||||
{
|
||||
LambdaQueryWrapper<WarnRule> queryWrapper = new LambdaQueryWrapper<>();
|
||||
Assert.notNull(id, "id不可为空");
|
||||
queryWrapper.eq(WarnRule::getId, id);
|
||||
return this.getOne(queryWrapper);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 查询预警规则列表
|
||||
*
|
||||
* @param warnRule 预警规则
|
||||
* @return 预警规则
|
||||
*/
|
||||
@Override
|
||||
public List<WarnRule> selectWarnRuleList(WarnRule warnRule)
|
||||
{
|
||||
LambdaQueryWrapper<WarnRule> queryWrapper = new LambdaQueryWrapper<>();
|
||||
if (StringUtils.isNotEmpty(warnRule.getRuleName())){
|
||||
queryWrapper.like(WarnRule::getRuleName, warnRule.getRuleName());
|
||||
}
|
||||
if (StringUtils.isNotNull(warnRule.getStrategyId())){
|
||||
queryWrapper.eq(WarnRule::getStrategyId, warnRule.getStrategyId());
|
||||
}
|
||||
if (StringUtils.isNotNull(warnRule.getMsgTypeId())){
|
||||
queryWrapper.eq(WarnRule::getMsgTypeId, warnRule.getMsgTypeId());
|
||||
}
|
||||
if (StringUtils.isNotNull(warnRule.getSlideTime())){
|
||||
queryWrapper.eq(WarnRule::getSlideTime, warnRule.getSlideTime());
|
||||
}
|
||||
if (StringUtils.isNotNull(warnRule.getSlideFrequency())){
|
||||
queryWrapper.eq(WarnRule::getSlideFrequency, warnRule.getSlideFrequency());
|
||||
}
|
||||
if (StringUtils.isNotNull(warnRule.getMaxValue())){
|
||||
queryWrapper.eq(WarnRule::getMaxValue, warnRule.getMaxValue());
|
||||
}
|
||||
if (StringUtils.isNotNull(warnRule.getMinValue())){
|
||||
queryWrapper.eq(WarnRule::getMinValue, warnRule.getMinValue());
|
||||
}
|
||||
return this.list(queryWrapper);
|
||||
}
|
||||
|
||||
/**
|
||||
* 唯一 判断
|
||||
* @param warnRule 预警规则
|
||||
* @return 预警规则
|
||||
*/
|
||||
@Override
|
||||
public Boolean checkIdUnique(WarnRule warnRule) {
|
||||
LambdaQueryWrapper<WarnRule> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(WarnRule::getId, warnRule.getId());
|
||||
return this.count(queryWrapper) > 0;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,76 @@
|
|||
package com.muyu.warn.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.muyu.common.core.utils.StringUtils;
|
||||
import com.muyu.warn.domain.WarnStrategy;
|
||||
import com.muyu.warn.mapper.WarnStrategyMapper;
|
||||
import com.muyu.warn.service.WarnStrategyService;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author:蓬叁
|
||||
* @Package:com.muyu.warn.controller
|
||||
* @Project:cloud-server-8
|
||||
* @name:WarnLogsController
|
||||
* @Date:2024/9/20 下午7:29
|
||||
*/
|
||||
@Service
|
||||
public class WarnStrategyServiceImpl
|
||||
extends ServiceImpl<WarnStrategyMapper, WarnStrategy>
|
||||
implements WarnStrategyService {
|
||||
|
||||
/**
|
||||
* 精确查询预警策略
|
||||
*
|
||||
* @param id 预警策略主键
|
||||
* @return 预警策略
|
||||
*/
|
||||
@Override
|
||||
public WarnStrategy selectWarnStrategyById(Long id)
|
||||
{
|
||||
LambdaQueryWrapper<WarnStrategy> queryWrapper = new LambdaQueryWrapper<>();
|
||||
Assert.notNull(id, "id不可为空");
|
||||
queryWrapper.eq(WarnStrategy::getId, id);
|
||||
return this.getOne(queryWrapper);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 查询预警策略列表
|
||||
*
|
||||
* @param warnStrategy 预警策略
|
||||
* @return 预警策略
|
||||
*/
|
||||
@Override
|
||||
public List<WarnStrategy> selectWarnStrategyList(WarnStrategy warnStrategy)
|
||||
{
|
||||
LambdaQueryWrapper<WarnStrategy> queryWrapper = new LambdaQueryWrapper<>();
|
||||
if (StringUtils.isNotNull(warnStrategy.getCarTypeId())){
|
||||
queryWrapper.eq(WarnStrategy::getCarTypeId, warnStrategy.getCarTypeId());
|
||||
}
|
||||
if (StringUtils.isNotEmpty(warnStrategy.getStrategyName())){
|
||||
queryWrapper.like(WarnStrategy::getStrategyName, warnStrategy.getStrategyName());
|
||||
}
|
||||
if (StringUtils.isNotNull(warnStrategy.getMsgId())){
|
||||
queryWrapper.eq(WarnStrategy::getMsgId, warnStrategy.getMsgId());
|
||||
}
|
||||
return this.list(queryWrapper);
|
||||
}
|
||||
|
||||
/**
|
||||
* 唯一 判断
|
||||
* @param warnStrategy 预警策略
|
||||
* @return 预警策略
|
||||
*/
|
||||
@Override
|
||||
public Boolean checkIdUnique(WarnStrategy warnStrategy) {
|
||||
LambdaQueryWrapper<WarnStrategy> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(WarnStrategy::getId, warnStrategy.getId());
|
||||
return this.count(queryWrapper) > 0;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,2 @@
|
|||
Spring Boot Version: ${spring-boot.version}
|
||||
Spring Application Name: ${spring.application.name}
|
|
@ -0,0 +1,60 @@
|
|||
# Tomcat
|
||||
server:
|
||||
port: 10004
|
||||
|
||||
# nacos线上地址
|
||||
nacos:
|
||||
addr: 159.75.188.178:8848
|
||||
user-name: nacos
|
||||
password: nacos
|
||||
namespace: psr
|
||||
# SPRING_AMQP_DESERIALIZATION_TRUST_ALL=true spring.amqp.deserialization.trust.all
|
||||
# Spring
|
||||
spring:
|
||||
amqp:
|
||||
deserialization:
|
||||
trust:
|
||||
all: true
|
||||
main:
|
||||
allow-bean-definition-overriding: true
|
||||
application:
|
||||
# 应用名称
|
||||
name: cloud-warn
|
||||
profiles:
|
||||
# 环境配置
|
||||
active: dev
|
||||
cloud:
|
||||
nacos:
|
||||
discovery:
|
||||
# 服务注册地址
|
||||
server-addr: ${nacos.addr}
|
||||
# nacos用户名
|
||||
username: ${nacos.user-name}
|
||||
# nacos密码
|
||||
password: ${nacos.password}
|
||||
# 命名空间
|
||||
namespace: ${nacos.namespace}
|
||||
config:
|
||||
# 服务注册地址
|
||||
server-addr: ${nacos.addr}
|
||||
# nacos用户名
|
||||
username: ${nacos.user-name}
|
||||
# nacos密码
|
||||
password: ${nacos.password}
|
||||
# 命名空间
|
||||
namespace: ${nacos.namespace}
|
||||
# 配置文件格式
|
||||
file-extension: yml
|
||||
# 共享配置
|
||||
shared-configs:
|
||||
# 系统共享配置
|
||||
- application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
|
||||
# 系统环境Config共享配置
|
||||
- application-config-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
|
||||
# xxl-job 配置文件
|
||||
- application-xxl-config-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
|
||||
# rabbit 配置文件
|
||||
- application-rabbit-config-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
|
||||
logging:
|
||||
level:
|
||||
com.muyu.system.mapper: DEBUG
|
|
@ -0,0 +1,74 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<configuration scan="true" scanPeriod="60 seconds" debug="false">
|
||||
<!-- 日志存放路径 -->
|
||||
<property name="log.path" value="logs/cloud-wechat"/>
|
||||
<!-- 日志输出格式 -->
|
||||
<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n"/>
|
||||
|
||||
<!-- 控制台输出 -->
|
||||
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<encoder>
|
||||
<pattern>${log.pattern}</pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<!-- 系统日志输出 -->
|
||||
<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>${log.path}/info.log</file>
|
||||
<!-- 循环政策:基于时间创建日志文件 -->
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<!-- 日志文件名格式 -->
|
||||
<fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}.log</fileNamePattern>
|
||||
<!-- 日志最大的历史 60天 -->
|
||||
<maxHistory>60</maxHistory>
|
||||
</rollingPolicy>
|
||||
<encoder>
|
||||
<pattern>${log.pattern}</pattern>
|
||||
</encoder>
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<!-- 过滤的级别 -->
|
||||
<level>INFO</level>
|
||||
<!-- 匹配时的操作:接收(记录) -->
|
||||
<onMatch>ACCEPT</onMatch>
|
||||
<!-- 不匹配时的操作:拒绝(不记录) -->
|
||||
<onMismatch>DENY</onMismatch>
|
||||
</filter>
|
||||
</appender>
|
||||
|
||||
<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>${log.path}/error.log</file>
|
||||
<!-- 循环政策:基于时间创建日志文件 -->
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<!-- 日志文件名格式 -->
|
||||
<fileNamePattern>${log.path}/error.%d{yyyy-MM-dd}.log</fileNamePattern>
|
||||
<!-- 日志最大的历史 60天 -->
|
||||
<maxHistory>60</maxHistory>
|
||||
</rollingPolicy>
|
||||
<encoder>
|
||||
<pattern>${log.pattern}</pattern>
|
||||
</encoder>
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<!-- 过滤的级别 -->
|
||||
<level>ERROR</level>
|
||||
<!-- 匹配时的操作:接收(记录) -->
|
||||
<onMatch>ACCEPT</onMatch>
|
||||
<!-- 不匹配时的操作:拒绝(不记录) -->
|
||||
<onMismatch>DENY</onMismatch>
|
||||
</filter>
|
||||
</appender>
|
||||
|
||||
<!-- 系统模块日志级别控制 -->
|
||||
<logger name="com.muyu" level="info"/>
|
||||
<!-- Spring日志级别控制 -->
|
||||
<logger name="org.springframework" level="warn"/>
|
||||
|
||||
<root level="info">
|
||||
<appender-ref ref="console"/>
|
||||
</root>
|
||||
|
||||
<!--系统操作日志-->
|
||||
<root level="info">
|
||||
<appender-ref ref="file_info"/>
|
||||
<appender-ref ref="file_error"/>
|
||||
</root>
|
||||
</configuration>
|
|
@ -0,0 +1,81 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<configuration scan="true" scanPeriod="60 seconds" debug="false">
|
||||
<!-- 日志存放路径 -->
|
||||
<property name="log.path" value="logs/cloud-wechat"/>
|
||||
<!-- 日志输出格式 -->
|
||||
<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n"/>
|
||||
<property name="log.sky.pattern" value="%d{HH:mm:ss.SSS} %yellow([%tid]) [%thread] %-5level %logger{20} - [%method,%line] - %msg%n"/>
|
||||
|
||||
<!-- 控制台输出 -->
|
||||
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<encoder>
|
||||
<pattern>${log.sky.pattern}</pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<!-- 系统日志输出 -->
|
||||
<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>${log.path}/info.log</file>
|
||||
<!-- 循环政策:基于时间创建日志文件 -->
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<!-- 日志文件名格式 -->
|
||||
<fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}.log</fileNamePattern>
|
||||
<!-- 日志最大的历史 60天 -->
|
||||
<maxHistory>60</maxHistory>
|
||||
</rollingPolicy>
|
||||
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<!-- 过滤的级别 -->
|
||||
<level>INFO</level>
|
||||
<!-- 匹配时的操作:接收(记录) -->
|
||||
<onMatch>ACCEPT</onMatch>
|
||||
<!-- 不匹配时的操作:拒绝(不记录) -->
|
||||
<onMismatch>DENY</onMismatch>
|
||||
</filter>
|
||||
</appender>
|
||||
|
||||
<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>${log.path}/error.log</file>
|
||||
<!-- 循环政策:基于时间创建日志文件 -->
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<!-- 日志文件名格式 -->
|
||||
<fileNamePattern>${log.path}/error.%d{yyyy-MM-dd}.log</fileNamePattern>
|
||||
<!-- 日志最大的历史 60天 -->
|
||||
<maxHistory>60</maxHistory>
|
||||
</rollingPolicy>
|
||||
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<!-- 过滤的级别 -->
|
||||
<level>ERROR</level>
|
||||
<!-- 匹配时的操作:接收(记录) -->
|
||||
<onMatch>ACCEPT</onMatch>
|
||||
<!-- 不匹配时的操作:拒绝(不记录) -->
|
||||
<onMismatch>DENY</onMismatch>
|
||||
</filter>
|
||||
</appender>
|
||||
|
||||
<!-- 使用gRpc将日志发送到skywalking服务端 -->
|
||||
<appender name="GRPC_LOG" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender">
|
||||
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
|
||||
<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
|
||||
<Pattern>${log.sky.pattern}</Pattern>
|
||||
</layout>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<!-- 系统模块日志级别控制 -->
|
||||
<logger name="com.muyu" level="info"/>
|
||||
<!-- Spring日志级别控制 -->
|
||||
<logger name="org.springframework" level="warn"/>
|
||||
|
||||
<root level="info">
|
||||
<appender-ref ref="GRPC_LOG"/>
|
||||
<appender-ref ref="console"/>
|
||||
</root>
|
||||
|
||||
<!--系统操作日志-->
|
||||
<root level="info">
|
||||
<appender-ref ref="file_info"/>
|
||||
<appender-ref ref="file_error"/>
|
||||
</root>
|
||||
</configuration>
|
|
@ -0,0 +1,81 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<configuration scan="true" scanPeriod="60 seconds" debug="false">
|
||||
<!-- 日志存放路径 -->
|
||||
<property name="log.path" value="logs/cloud-wechat"/>
|
||||
<!-- 日志输出格式 -->
|
||||
<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n"/>
|
||||
<property name="log.sky.pattern" value="%d{HH:mm:ss.SSS} %yellow([%tid]) [%thread] %-5level %logger{20} - [%method,%line] - %msg%n"/>
|
||||
|
||||
<!-- 控制台输出 -->
|
||||
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<encoder>
|
||||
<pattern>${log.sky.pattern}</pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<!-- 系统日志输出 -->
|
||||
<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>${log.path}/info.log</file>
|
||||
<!-- 循环政策:基于时间创建日志文件 -->
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<!-- 日志文件名格式 -->
|
||||
<fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}.log</fileNamePattern>
|
||||
<!-- 日志最大的历史 60天 -->
|
||||
<maxHistory>60</maxHistory>
|
||||
</rollingPolicy>
|
||||
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<!-- 过滤的级别 -->
|
||||
<level>INFO</level>
|
||||
<!-- 匹配时的操作:接收(记录) -->
|
||||
<onMatch>ACCEPT</onMatch>
|
||||
<!-- 不匹配时的操作:拒绝(不记录) -->
|
||||
<onMismatch>DENY</onMismatch>
|
||||
</filter>
|
||||
</appender>
|
||||
|
||||
<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>${log.path}/error.log</file>
|
||||
<!-- 循环政策:基于时间创建日志文件 -->
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<!-- 日志文件名格式 -->
|
||||
<fileNamePattern>${log.path}/error.%d{yyyy-MM-dd}.log</fileNamePattern>
|
||||
<!-- 日志最大的历史 60天 -->
|
||||
<maxHistory>60</maxHistory>
|
||||
</rollingPolicy>
|
||||
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<!-- 过滤的级别 -->
|
||||
<level>ERROR</level>
|
||||
<!-- 匹配时的操作:接收(记录) -->
|
||||
<onMatch>ACCEPT</onMatch>
|
||||
<!-- 不匹配时的操作:拒绝(不记录) -->
|
||||
<onMismatch>DENY</onMismatch>
|
||||
</filter>
|
||||
</appender>
|
||||
|
||||
<!-- 使用gRpc将日志发送到skywalking服务端 -->
|
||||
<appender name="GRPC_LOG" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender">
|
||||
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
|
||||
<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
|
||||
<Pattern>${log.sky.pattern}</Pattern>
|
||||
</layout>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<!-- 系统模块日志级别控制 -->
|
||||
<logger name="com.muyu" level="info"/>
|
||||
<!-- Spring日志级别控制 -->
|
||||
<logger name="org.springframework" level="warn"/>
|
||||
|
||||
<root level="info">
|
||||
<appender-ref ref="GRPC_LOG"/>
|
||||
<appender-ref ref="console"/>
|
||||
</root>
|
||||
|
||||
<!--系统操作日志-->
|
||||
<root level="info">
|
||||
<appender-ref ref="file_info"/>
|
||||
<appender-ref ref="file_error"/>
|
||||
</root>
|
||||
</configuration>
|
|
@ -0,0 +1,38 @@
|
|||
package com.muyu;
|
||||
|
||||
import junit.framework.Test;
|
||||
import junit.framework.TestCase;
|
||||
import junit.framework.TestSuite;
|
||||
|
||||
/**
|
||||
* Unit test for simple App.
|
||||
*/
|
||||
public class AppTest
|
||||
extends TestCase
|
||||
{
|
||||
/**
|
||||
* Create the test case
|
||||
*
|
||||
* @param testName name of the test case
|
||||
*/
|
||||
public AppTest( String testName )
|
||||
{
|
||||
super( testName );
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the suite of tests being tested
|
||||
*/
|
||||
public static Test suite()
|
||||
{
|
||||
return new TestSuite( AppTest.class );
|
||||
}
|
||||
|
||||
/**
|
||||
* Rigourous Test :-)
|
||||
*/
|
||||
public void testApp()
|
||||
{
|
||||
assertTrue( true );
|
||||
}
|
||||
}
|
|
@ -0,0 +1,120 @@
|
|||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<groupId>com.muyu</groupId>
|
||||
<artifactId>cloud-server</artifactId>
|
||||
<version>3.6.3</version>
|
||||
<relativePath>../../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<artifactId>cloud-modules-wechat</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<name>cloud-modules-wechat</name>
|
||||
<url>http://maven.apache.org</url>
|
||||
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
|
||||
<!-- SpringCloud Alibaba Nacos -->
|
||||
<dependency>
|
||||
<groupId>com.alibaba.cloud</groupId>
|
||||
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- SpringCloud Alibaba Nacos Config -->
|
||||
<dependency>
|
||||
<groupId>com.alibaba.cloud</groupId>
|
||||
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- SpringCloud Alibaba Sentinel -->
|
||||
<dependency>
|
||||
<groupId>com.alibaba.cloud</groupId>
|
||||
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- SpringBoot Actuator -->
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-actuator</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- Mysql Connector -->
|
||||
<dependency>
|
||||
<groupId>com.mysql</groupId>
|
||||
<artifactId>mysql-connector-j</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- MuYu Common DataSource -->
|
||||
<dependency>
|
||||
<groupId>com.muyu</groupId>
|
||||
<artifactId>cloud-common-datasource</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- MuYu Common DataScope -->
|
||||
<dependency>
|
||||
<groupId>com.muyu</groupId>
|
||||
<artifactId>cloud-common-datascope</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- MuYu Common Log -->
|
||||
<dependency>
|
||||
<groupId>com.muyu</groupId>
|
||||
<artifactId>cloud-common-log</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- 接口模块 -->
|
||||
<dependency>
|
||||
<groupId>com.muyu</groupId>
|
||||
<artifactId>cloud-common-api-doc</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- XllJob定时任务 -->
|
||||
<dependency>
|
||||
<groupId>com.muyu</groupId>
|
||||
<artifactId>cloud-common-xxl</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.muyu</groupId>
|
||||
<artifactId>cloud-common-rabbit</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<version>3.8.1</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.muyu</groupId>
|
||||
<artifactId>cloud-common-wechat</artifactId>
|
||||
<version>3.6.3</version>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<finalName>${project.artifactId}</finalName>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||
<executions>
|
||||
<execution>
|
||||
<goals>
|
||||
<goal>repackage</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
</project>
|
|
@ -0,0 +1,15 @@
|
|||
package com.muyu.wechat;
|
||||
|
||||
import com.muyu.common.security.annotation.EnableMyFeignClients;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
|
||||
@SpringBootApplication
|
||||
@EnableMyFeignClients
|
||||
public class WeChatApplication {
|
||||
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(WeChatApplication.class, args);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,185 @@
|
|||
package com.muyu.wechat.controller;
|
||||
|
||||
import com.muyu.common.wechat.domain.Articles;
|
||||
import com.muyu.common.wechat.domain.NewsMessage;
|
||||
import com.muyu.common.wechat.domain.TextMessage;
|
||||
import com.muyu.wechat.util.WordUtil;
|
||||
import com.thoughtworks.xstream.XStream;
|
||||
import jakarta.servlet.ServletInputStream;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import org.dom4j.Document;
|
||||
import org.dom4j.DocumentException;
|
||||
import org.dom4j.Element;
|
||||
import org.dom4j.io.SAXReader;
|
||||
import org.springframework.util.StringUtils;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.security.MessageDigest;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* @Author:蓬叁
|
||||
* @Package:com.muyu.wxapplication.controller
|
||||
* @Project:WXApplication
|
||||
* @name:WXController
|
||||
* @Date:2024/9/17 下午8:27
|
||||
*/
|
||||
@RestController
|
||||
public class WXController {
|
||||
|
||||
@GetMapping("/hello")
|
||||
public String hello(){
|
||||
return "Hello Wechat";
|
||||
}
|
||||
|
||||
@GetMapping("/wechat")
|
||||
public String check(
|
||||
@RequestParam("signature") String signature,
|
||||
@RequestParam("timestamp") String timestamp,
|
||||
@RequestParam("nonce") String nonce,
|
||||
@RequestParam("echostr") String echostr
|
||||
){
|
||||
// 1)将token、timestamp、nonce三个参数进行字典序排序
|
||||
String token = "Psan";
|
||||
List<String> list = Arrays.asList(token, timestamp, nonce);
|
||||
//排序
|
||||
Collections.sort(list);
|
||||
// 2)将三个参数字符串拼接成一个字符串进行sha1加密
|
||||
StringBuilder stringBuilder = new StringBuilder();
|
||||
for (String s : list) {
|
||||
stringBuilder.append(s);
|
||||
}
|
||||
//加密
|
||||
try {
|
||||
MessageDigest instance = MessageDigest.getInstance("sha1");
|
||||
//使用sha1进行加密,获得byte数组
|
||||
byte[] digest = instance.digest(stringBuilder.toString().getBytes());
|
||||
StringBuilder sum = new StringBuilder();
|
||||
for (byte b : digest) {
|
||||
sum.append(Integer.toHexString((b>>4)&15));
|
||||
sum.append(Integer.toHexString(b&15));
|
||||
}
|
||||
System.out.println("signature:"+signature);
|
||||
System.out.println("sum:"+sum);
|
||||
// 3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
|
||||
if (!StringUtils.isEmpty(signature)&&signature.equals(sum.toString())){
|
||||
return echostr;
|
||||
}
|
||||
} catch (NoSuchAlgorithmException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@PostMapping("/")
|
||||
public String receiveMessage(HttpServletRequest request) throws IOException {
|
||||
ServletInputStream inputStream = request.getInputStream();
|
||||
|
||||
// 查看发送信息类型
|
||||
// byte[] bytes = new byte[1024];
|
||||
// int len = 0;
|
||||
// while ((len = inputStream.read(bytes)) != -1) {
|
||||
// System.out.println(new String(bytes, 0, len));
|
||||
// }
|
||||
|
||||
HashMap<String, String> map = new HashMap<>();
|
||||
// xstream工具类
|
||||
SAXReader reader = new SAXReader();
|
||||
try {
|
||||
//读取request输入流,获取Document对象
|
||||
Document document = reader.read(inputStream);
|
||||
//获取root节点
|
||||
Element rootElement = document.getRootElement();
|
||||
//获取所有子节点
|
||||
List<Element> elements = rootElement.elements();
|
||||
for (Element element : elements) {
|
||||
map.put(element.getName(), element.getStringValue());
|
||||
}
|
||||
} catch (DocumentException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
System.out.println(map);
|
||||
String massage = null;
|
||||
if ("图文".equals(map.get("Content"))) {
|
||||
massage = getReplyNewsMessage(map);
|
||||
} else {
|
||||
massage = getReplyMessage(map);
|
||||
}
|
||||
// String massage = getReplyMessageByWord(map);
|
||||
return massage;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获得回复的信息内容
|
||||
* @param map
|
||||
* @return xml格式的字符串
|
||||
*/
|
||||
private String getReplyMessage(HashMap<String, String> map) {
|
||||
TextMessage textMessage = new TextMessage();
|
||||
textMessage.setToUserName(map.get("FromUserName"));
|
||||
textMessage.setFromUserName(map.get("ToUserName"));
|
||||
textMessage.setMsgType("text");
|
||||
textMessage.setContent("你好吖");
|
||||
textMessage.setCreateTime(System.currentTimeMillis()/1000);
|
||||
|
||||
//XStream将java对象转换为xml字符串
|
||||
XStream xStream = new XStream();
|
||||
xStream.processAnnotations(TextMessage.class);
|
||||
String xml = xStream.toXML(textMessage);
|
||||
return xml;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获得同义词
|
||||
* @param map
|
||||
* @return xml格式的字符串
|
||||
*/
|
||||
private String getReplyMessageByWord(HashMap<String, String> map) {
|
||||
TextMessage textMessage = new TextMessage();
|
||||
textMessage.setToUserName(map.get("FromUserName"));
|
||||
textMessage.setFromUserName(map.get("ToUserName"));
|
||||
textMessage.setMsgType("text");
|
||||
textMessage.setContent(WordUtil.getWords(map.get("Content")));
|
||||
textMessage.setCreateTime(System.currentTimeMillis()/1000);
|
||||
|
||||
//XStream将java对象转换为xml字符串
|
||||
XStream xStream = new XStream();
|
||||
xStream.processAnnotations(TextMessage.class);
|
||||
String xml = xStream.toXML(textMessage);
|
||||
return xml;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获得回复的图文信息内容
|
||||
* @param map
|
||||
* @return
|
||||
*/
|
||||
private String getReplyNewsMessage(HashMap<String, String> map) {
|
||||
NewsMessage newsMessage = new NewsMessage();
|
||||
newsMessage.setToUserName(map.get("FromUserName"));
|
||||
newsMessage.setFromUserName(map.get("ToUserName"));
|
||||
newsMessage.setMsgType("news");
|
||||
newsMessage.setCreateTime(System.currentTimeMillis()/1000);
|
||||
newsMessage.setArticleCount(1);
|
||||
List<Articles> articles = new ArrayList<>();
|
||||
Articles article = new Articles();
|
||||
article.setTitle("蓬叁测试公众号");
|
||||
article.setDescription("来自蓬叁");
|
||||
article.setUrl("http://www.psan.com");
|
||||
article.setPicUrl("http://mmbiz.qpic.cn/mmbiz_jpg/ZR9F78J7iasww9HxBJRjsBMInrZ78YbXzKvgwy6iabyfZCiaM0CJKzOIS3fUAboIbh07s8icPfYW7RMiajLmx2opticw/0");
|
||||
articles.add(article);
|
||||
newsMessage.setArticles(articles);
|
||||
|
||||
//XStream将java对象转换为xml字符串
|
||||
XStream xStream = new XStream();
|
||||
xStream.processAnnotations(NewsMessage.class);
|
||||
String xml = xStream.toXML(newsMessage);
|
||||
return xml;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,41 @@
|
|||
package com.muyu.wechat.token;
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.muyu.common.wechat.domain.AccessToken;
|
||||
import com.muyu.wechat.util.OkHttpUtils;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
public class TokenUtil {
|
||||
public final static String APP_ID = "wx962013f3b1eb0a51";
|
||||
|
||||
public final static String APP_SECRET ="5c4c0b2130e6fdf86d989237f9e201dc";
|
||||
|
||||
public static void main(String[] args) {
|
||||
System.out.println(getAccessToken());
|
||||
System.out.println(getAccessToken());
|
||||
}
|
||||
|
||||
//域名
|
||||
public final static String REDIRECT_DOMAIN ="er6zej.natappfree.cc";
|
||||
|
||||
private static AccessToken accessToken = new AccessToken();
|
||||
|
||||
// {"access_token":"84_E1XHZXQpPj-K6mbCRmGn58iIPU3w7ViwtZRwAt5QN39FP9VBLPq57S_XjRQY88upoYyT4Boil2P6gY8uoKLHuth-W5OczJzr5EGZoWeh2PwhTKEfR1NcCWjqgTYJREcAIAZHU","expires_in":7200}
|
||||
private static void getToken(){
|
||||
String url = String.format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s",APP_ID,APP_SECRET);
|
||||
String request = OkHttpUtils.sendGetRequest(url);
|
||||
System.out.println(request);
|
||||
AccessToken wechatToken = JSON.parseObject(request, AccessToken.class);
|
||||
//redisService.setCacheObject("WECHAT_TOKEN",wechatToken.getAccessToken(),wechatToken.getExpiresIn(), TimeUnit.SECONDS);
|
||||
if (wechatToken != null) {
|
||||
accessToken.setExpiresTime(wechatToken.getExpires_in());
|
||||
accessToken.setAccess_token(wechatToken.getAccess_token());
|
||||
}
|
||||
}
|
||||
public static String getAccessToken(){
|
||||
getToken();
|
||||
return accessToken.getAccess_token();
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
package com.muyu.wechat.util;
|
||||
|
||||
import okhttp3.*;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
public class OkHttpUtils {
|
||||
|
||||
private static final OkHttpClient client = new OkHttpClient();
|
||||
|
||||
public static String sendGetRequest(String urlString) {
|
||||
Request request = new Request.Builder()
|
||||
.url(urlString)
|
||||
.build();
|
||||
try (Response response = client.newCall(request).execute()) {
|
||||
return response.body().string();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public static String sendPostRequest(String urlString, String params) {
|
||||
RequestBody requestBody = RequestBody.create(params, MediaType.parse("application/json; charset=utf-8"));
|
||||
Request request = new Request.Builder()
|
||||
.url(urlString)
|
||||
.post(requestBody)
|
||||
.build();
|
||||
try (Response response = client.newCall(request).execute()) {
|
||||
return response.body().string();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,43 @@
|
|||
package com.muyu.wechat.util;
|
||||
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
|
||||
/**
|
||||
* @Author:蓬叁
|
||||
* @Package:com.muyu.wxapplication.util
|
||||
* @Project:WXApplication
|
||||
* @name:WordUtil
|
||||
* @Date:2024/9/18 下午7:38
|
||||
*/
|
||||
public class WordUtil {
|
||||
|
||||
//接口地址
|
||||
public static final String WORD_URL = "http://apis.juhe.cn/tyfy/query";
|
||||
|
||||
//申请接口的请求key
|
||||
// TODO: 您需要改变自己的请求key
|
||||
public static final String KEY = "f9ef42f215679f6995585159c3e1073e";
|
||||
|
||||
public static String getWords(String word){
|
||||
//发送http请求的url
|
||||
String url = String.format(WORD_URL, KEY);
|
||||
final String reponse = OkHttpUtils.sendPostRequest(url,JSONObject.toJSONString(word));
|
||||
System.out.println("接口返回:"+reponse);
|
||||
JSONObject jsonObject = JSONObject.parseObject(reponse) ;
|
||||
Integer error_code = jsonObject.getInteger("error_code");
|
||||
if (error_code == 0){
|
||||
System.out.println("调用接口成功");
|
||||
JSONObject result = jsonObject.getJSONObject("result");
|
||||
JSONArray words = result.getJSONArray("words");
|
||||
StringBuilder stringBuilder = new StringBuilder();
|
||||
words.stream().forEach(w -> stringBuilder.append(w + ""));
|
||||
System.out.println(stringBuilder);
|
||||
return stringBuilder.toString();
|
||||
} else {
|
||||
System.out.println("调用接口失败:" + jsonObject.getString("reason"));
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,2 @@
|
|||
Spring Boot Version: ${spring-boot.version}
|
||||
Spring Application Name: ${spring.application.name}
|
|
@ -0,0 +1,60 @@
|
|||
# Tomcat
|
||||
server:
|
||||
port: 10003
|
||||
|
||||
# nacos线上地址
|
||||
nacos:
|
||||
addr: 159.75.188.178:8848
|
||||
user-name: nacos
|
||||
password: nacos
|
||||
namespace: psr
|
||||
# SPRING_AMQP_DESERIALIZATION_TRUST_ALL=true spring.amqp.deserialization.trust.all
|
||||
# Spring
|
||||
spring:
|
||||
amqp:
|
||||
deserialization:
|
||||
trust:
|
||||
all: true
|
||||
main:
|
||||
allow-bean-definition-overriding: true
|
||||
application:
|
||||
# 应用名称
|
||||
name: cloud-wechat
|
||||
profiles:
|
||||
# 环境配置
|
||||
active: dev
|
||||
cloud:
|
||||
nacos:
|
||||
discovery:
|
||||
# 服务注册地址
|
||||
server-addr: ${nacos.addr}
|
||||
# nacos用户名
|
||||
username: ${nacos.user-name}
|
||||
# nacos密码
|
||||
password: ${nacos.password}
|
||||
# 命名空间
|
||||
namespace: ${nacos.namespace}
|
||||
config:
|
||||
# 服务注册地址
|
||||
server-addr: ${nacos.addr}
|
||||
# nacos用户名
|
||||
username: ${nacos.user-name}
|
||||
# nacos密码
|
||||
password: ${nacos.password}
|
||||
# 命名空间
|
||||
namespace: ${nacos.namespace}
|
||||
# 配置文件格式
|
||||
file-extension: yml
|
||||
# 共享配置
|
||||
shared-configs:
|
||||
# 系统共享配置
|
||||
- application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
|
||||
# 系统环境Config共享配置
|
||||
- application-config-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
|
||||
# xxl-job 配置文件
|
||||
- application-xxl-config-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
|
||||
# rabbit 配置文件
|
||||
- application-rabbit-config-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
|
||||
logging:
|
||||
level:
|
||||
com.muyu.system.mapper: DEBUG
|
|
@ -0,0 +1,74 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<configuration scan="true" scanPeriod="60 seconds" debug="false">
|
||||
<!-- 日志存放路径 -->
|
||||
<property name="log.path" value="logs/cloud-wechat"/>
|
||||
<!-- 日志输出格式 -->
|
||||
<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n"/>
|
||||
|
||||
<!-- 控制台输出 -->
|
||||
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<encoder>
|
||||
<pattern>${log.pattern}</pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<!-- 系统日志输出 -->
|
||||
<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>${log.path}/info.log</file>
|
||||
<!-- 循环政策:基于时间创建日志文件 -->
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<!-- 日志文件名格式 -->
|
||||
<fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}.log</fileNamePattern>
|
||||
<!-- 日志最大的历史 60天 -->
|
||||
<maxHistory>60</maxHistory>
|
||||
</rollingPolicy>
|
||||
<encoder>
|
||||
<pattern>${log.pattern}</pattern>
|
||||
</encoder>
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<!-- 过滤的级别 -->
|
||||
<level>INFO</level>
|
||||
<!-- 匹配时的操作:接收(记录) -->
|
||||
<onMatch>ACCEPT</onMatch>
|
||||
<!-- 不匹配时的操作:拒绝(不记录) -->
|
||||
<onMismatch>DENY</onMismatch>
|
||||
</filter>
|
||||
</appender>
|
||||
|
||||
<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>${log.path}/error.log</file>
|
||||
<!-- 循环政策:基于时间创建日志文件 -->
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<!-- 日志文件名格式 -->
|
||||
<fileNamePattern>${log.path}/error.%d{yyyy-MM-dd}.log</fileNamePattern>
|
||||
<!-- 日志最大的历史 60天 -->
|
||||
<maxHistory>60</maxHistory>
|
||||
</rollingPolicy>
|
||||
<encoder>
|
||||
<pattern>${log.pattern}</pattern>
|
||||
</encoder>
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<!-- 过滤的级别 -->
|
||||
<level>ERROR</level>
|
||||
<!-- 匹配时的操作:接收(记录) -->
|
||||
<onMatch>ACCEPT</onMatch>
|
||||
<!-- 不匹配时的操作:拒绝(不记录) -->
|
||||
<onMismatch>DENY</onMismatch>
|
||||
</filter>
|
||||
</appender>
|
||||
|
||||
<!-- 系统模块日志级别控制 -->
|
||||
<logger name="com.muyu" level="info"/>
|
||||
<!-- Spring日志级别控制 -->
|
||||
<logger name="org.springframework" level="warn"/>
|
||||
|
||||
<root level="info">
|
||||
<appender-ref ref="console"/>
|
||||
</root>
|
||||
|
||||
<!--系统操作日志-->
|
||||
<root level="info">
|
||||
<appender-ref ref="file_info"/>
|
||||
<appender-ref ref="file_error"/>
|
||||
</root>
|
||||
</configuration>
|
|
@ -0,0 +1,81 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<configuration scan="true" scanPeriod="60 seconds" debug="false">
|
||||
<!-- 日志存放路径 -->
|
||||
<property name="log.path" value="logs/cloud-wechat"/>
|
||||
<!-- 日志输出格式 -->
|
||||
<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n"/>
|
||||
<property name="log.sky.pattern" value="%d{HH:mm:ss.SSS} %yellow([%tid]) [%thread] %-5level %logger{20} - [%method,%line] - %msg%n"/>
|
||||
|
||||
<!-- 控制台输出 -->
|
||||
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<encoder>
|
||||
<pattern>${log.sky.pattern}</pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<!-- 系统日志输出 -->
|
||||
<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>${log.path}/info.log</file>
|
||||
<!-- 循环政策:基于时间创建日志文件 -->
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<!-- 日志文件名格式 -->
|
||||
<fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}.log</fileNamePattern>
|
||||
<!-- 日志最大的历史 60天 -->
|
||||
<maxHistory>60</maxHistory>
|
||||
</rollingPolicy>
|
||||
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<!-- 过滤的级别 -->
|
||||
<level>INFO</level>
|
||||
<!-- 匹配时的操作:接收(记录) -->
|
||||
<onMatch>ACCEPT</onMatch>
|
||||
<!-- 不匹配时的操作:拒绝(不记录) -->
|
||||
<onMismatch>DENY</onMismatch>
|
||||
</filter>
|
||||
</appender>
|
||||
|
||||
<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>${log.path}/error.log</file>
|
||||
<!-- 循环政策:基于时间创建日志文件 -->
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<!-- 日志文件名格式 -->
|
||||
<fileNamePattern>${log.path}/error.%d{yyyy-MM-dd}.log</fileNamePattern>
|
||||
<!-- 日志最大的历史 60天 -->
|
||||
<maxHistory>60</maxHistory>
|
||||
</rollingPolicy>
|
||||
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<!-- 过滤的级别 -->
|
||||
<level>ERROR</level>
|
||||
<!-- 匹配时的操作:接收(记录) -->
|
||||
<onMatch>ACCEPT</onMatch>
|
||||
<!-- 不匹配时的操作:拒绝(不记录) -->
|
||||
<onMismatch>DENY</onMismatch>
|
||||
</filter>
|
||||
</appender>
|
||||
|
||||
<!-- 使用gRpc将日志发送到skywalking服务端 -->
|
||||
<appender name="GRPC_LOG" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender">
|
||||
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
|
||||
<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
|
||||
<Pattern>${log.sky.pattern}</Pattern>
|
||||
</layout>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<!-- 系统模块日志级别控制 -->
|
||||
<logger name="com.muyu" level="info"/>
|
||||
<!-- Spring日志级别控制 -->
|
||||
<logger name="org.springframework" level="warn"/>
|
||||
|
||||
<root level="info">
|
||||
<appender-ref ref="GRPC_LOG"/>
|
||||
<appender-ref ref="console"/>
|
||||
</root>
|
||||
|
||||
<!--系统操作日志-->
|
||||
<root level="info">
|
||||
<appender-ref ref="file_info"/>
|
||||
<appender-ref ref="file_error"/>
|
||||
</root>
|
||||
</configuration>
|
|
@ -0,0 +1,81 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<configuration scan="true" scanPeriod="60 seconds" debug="false">
|
||||
<!-- 日志存放路径 -->
|
||||
<property name="log.path" value="logs/cloud-wechat"/>
|
||||
<!-- 日志输出格式 -->
|
||||
<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n"/>
|
||||
<property name="log.sky.pattern" value="%d{HH:mm:ss.SSS} %yellow([%tid]) [%thread] %-5level %logger{20} - [%method,%line] - %msg%n"/>
|
||||
|
||||
<!-- 控制台输出 -->
|
||||
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<encoder>
|
||||
<pattern>${log.sky.pattern}</pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<!-- 系统日志输出 -->
|
||||
<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>${log.path}/info.log</file>
|
||||
<!-- 循环政策:基于时间创建日志文件 -->
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<!-- 日志文件名格式 -->
|
||||
<fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}.log</fileNamePattern>
|
||||
<!-- 日志最大的历史 60天 -->
|
||||
<maxHistory>60</maxHistory>
|
||||
</rollingPolicy>
|
||||
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<!-- 过滤的级别 -->
|
||||
<level>INFO</level>
|
||||
<!-- 匹配时的操作:接收(记录) -->
|
||||
<onMatch>ACCEPT</onMatch>
|
||||
<!-- 不匹配时的操作:拒绝(不记录) -->
|
||||
<onMismatch>DENY</onMismatch>
|
||||
</filter>
|
||||
</appender>
|
||||
|
||||
<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>${log.path}/error.log</file>
|
||||
<!-- 循环政策:基于时间创建日志文件 -->
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<!-- 日志文件名格式 -->
|
||||
<fileNamePattern>${log.path}/error.%d{yyyy-MM-dd}.log</fileNamePattern>
|
||||
<!-- 日志最大的历史 60天 -->
|
||||
<maxHistory>60</maxHistory>
|
||||
</rollingPolicy>
|
||||
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<!-- 过滤的级别 -->
|
||||
<level>ERROR</level>
|
||||
<!-- 匹配时的操作:接收(记录) -->
|
||||
<onMatch>ACCEPT</onMatch>
|
||||
<!-- 不匹配时的操作:拒绝(不记录) -->
|
||||
<onMismatch>DENY</onMismatch>
|
||||
</filter>
|
||||
</appender>
|
||||
|
||||
<!-- 使用gRpc将日志发送到skywalking服务端 -->
|
||||
<appender name="GRPC_LOG" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender">
|
||||
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
|
||||
<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
|
||||
<Pattern>${log.sky.pattern}</Pattern>
|
||||
</layout>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<!-- 系统模块日志级别控制 -->
|
||||
<logger name="com.muyu" level="info"/>
|
||||
<!-- Spring日志级别控制 -->
|
||||
<logger name="org.springframework" level="warn"/>
|
||||
|
||||
<root level="info">
|
||||
<appender-ref ref="GRPC_LOG"/>
|
||||
<appender-ref ref="console"/>
|
||||
</root>
|
||||
|
||||
<!--系统操作日志-->
|
||||
<root level="info">
|
||||
<appender-ref ref="file_info"/>
|
||||
<appender-ref ref="file_error"/>
|
||||
</root>
|
||||
</configuration>
|
|
@ -0,0 +1,38 @@
|
|||
package com.muyu;
|
||||
|
||||
import junit.framework.Test;
|
||||
import junit.framework.TestCase;
|
||||
import junit.framework.TestSuite;
|
||||
|
||||
/**
|
||||
* Unit test for simple App.
|
||||
*/
|
||||
public class AppTest
|
||||
extends TestCase
|
||||
{
|
||||
/**
|
||||
* Create the test case
|
||||
*
|
||||
* @param testName name of the test case
|
||||
*/
|
||||
public AppTest( String testName )
|
||||
{
|
||||
super( testName );
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the suite of tests being tested
|
||||
*/
|
||||
public static Test suite()
|
||||
{
|
||||
return new TestSuite( AppTest.class );
|
||||
}
|
||||
|
||||
/**
|
||||
* Rigourous Test :-)
|
||||
*/
|
||||
public void testApp()
|
||||
{
|
||||
assertTrue( true );
|
||||
}
|
||||
}
|
|
@ -12,6 +12,7 @@
|
|||
<module>cloud-modules-system</module>
|
||||
<module>cloud-modules-gen</module>
|
||||
<module>cloud-modules-file</module>
|
||||
<module>cloud-modules-warn</module>
|
||||
</modules>
|
||||
|
||||
<artifactId>cloud-modules</artifactId>
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
# Tomcat
|
||||
server:
|
||||
port: 9100
|
||||
port: 9101
|
||||
|
||||
# nacos线上地址
|
||||
nacos:
|
||||
addr: 159.75.188.178:8848
|
||||
user-name: nacos
|
||||
password: nacos
|
||||
namespace: eight
|
||||
namespace: psr
|
||||
|
||||
# Spring
|
||||
spring:
|
||||
|
|
Loading…
Reference in New Issue