Compare commits

...

2 Commits

Author SHA1 Message Date
mcy f3ab815ce2 1 1 year ago
mcy 9543d0b5f6 1 1 year ago

@ -0,0 +1,285 @@
<?xml version="1.0" encoding="UTF-8"?>
<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">
<!-- <parent>-->
<!-- <artifactId>demay</artifactId>-->
<!-- <groupId>com.ssm</groupId>-->
<!-- <version>1.0-SNAPSHOT</version>-->
<!-- </parent>-->
<!-- <modelVersion>4.0.0</modelVersion>-->
<!-- <artifactId>dm_web</artifactId>-->
<parent>
<artifactId>demay</artifactId>
<groupId>com.ssm</groupId>
<version>1.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>dm_web</artifactId>
<packaging>jar</packaging>
<name>dm_web</name>
<dependencies>
<!-- <dependency>-->
<!-- <groupId>org.redisson</groupId>-->
<!-- <artifactId>redisson</artifactId>-->
<!-- <version>3.17.1</version>-->
<!-- </dependency>-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
<version>2.0.5</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
</dependency>
<!-- Swagger end -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.2.1</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
</dependency>
<dependency>
<groupId>net.oschina.zcx7878</groupId>
<artifactId>fastdfs-client-java</artifactId>
</dependency>
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>3.6</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.6.2</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.ssm</groupId>
<artifactId>redis</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.ssm</groupId>
<artifactId>dm_api</artifactId>
<version>1.0-SNAPSHOT</version>
<exclusions>
<exclusion>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.ssm</groupId>
<artifactId>dm_service</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring</artifactId>
<version>1.1.5</version>
</dependency>
<dependency>
<groupId>org.jetbrains</groupId>
<artifactId>annotations</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.apache.shardingsphere</groupId>-->
<!-- <artifactId>sharding-jdbc-spring-boot-starter</artifactId>-->
<!-- <version>4.0.0-RC1</version>-->
<!-- </dependency>-->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.3</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.2.7</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-starter-amqp</artifactId>-->
<!-- </dependency>-->
<!--加密账号密码-->
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
<!--测试请求没问题-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!--非严格模式下 规避一些html编译错误 -->
<dependency>
<groupId>net.sourceforge.nekohtml</groupId>
<artifactId>nekohtml</artifactId>
<version>1.9.22</version>
</dependency>
<dependency>
<groupId>org.jetbrains</groupId>
<artifactId>annotations</artifactId>
<version>24.1.0</version>
</dependency>
<!-- 解决 Could not find org.springframework.cloud:spring-cloud-dependencies:pom:Finchley.M8 -->
<!-- <dependency>-->
<!-- <groupId>org.springframework.cloud</groupId>-->
<!-- <artifactId>spring-cloud-dependencies</artifactId>-->
<!-- <version>Finchley.M8</version>-->
<!-- <type>pom</type>-->
<!-- <scope>import</scope>-->
<!-- </dependency>-->
</dependencies>
<build>
<finalName>dm_web</finalName>
<!--spring boot打包的话需要指定一个唯一的入门-->
<defaultGoal>compile</defaultGoal>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.6</version>
<configuration>
<archive>
<manifest>
<mainClass>com.ssm.DmWebApp</mainClass>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
</manifest>
<manifestEntries>
<Class-Path>./</Class-Path>
</manifestEntries>
</archive>
<excludes>
<exclude>config/**</exclude>
</excludes>
<outputDirectory>F:/workPlace/target/dm_web</outputDirectory>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>F:/workPlace/target/dm_web/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
<executions>
<execution>
<id>copy-resources</id>
<phase>package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<overwrite>true</overwrite>
<outputDirectory>F:/workPlace/target/dm_web/config</outputDirectory>
<resources>
<resource>
<directory>src/main/resources/config</directory>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
<!--Maven通过Maven Surefire Plugin插件执行单元测试-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>

@ -0,0 +1,39 @@
//package com.ssm.annotation;
//
//import com.ssm.manage.utils.StringUtils;
//import org.aspectj.lang.ProceedingJoinPoint;
//import org.aspectj.lang.annotation.Around;
//import org.aspectj.lang.annotation.Aspect;
//import org.aspectj.lang.reflect.MethodSignature;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.boot.SpringApplication;
//import org.springframework.boot.context.event.SpringApplicationEvent;
//import org.springframework.context.ApplicationEventPublisher;
//import org.springframework.core.annotation.Order;
//import org.springframework.stereotype.Component;
//
//import java.lang.reflect.Method;
//import java.util.Optional;
//
//@Component
//@Aspect
//@Order(0)
//public class RedissonAspect {
// @Autowired
// private RedissonLockService redissonLockService;
// @Autowired
// private ApplicationEventPublisher applicationEventPublisher;
//
//
// @Around("@annotation(redissonLock)")
// public Object around(ProceedingJoinPoint joinPoint,RedissonLock redissonLock) throws Throwable {
// Method method = ((MethodSignature) joinPoint.getSignature()).getMethod();
// //获取前缀
// applicationEventPublisher.publishEvent(new SmsSendEvent(this,"15913619401"));
// String prefix = StringUtils.isBlank(redissonLock.prefix())?SpELUtils.getMethodKey(method):redissonLock.prefix();
// String key = SpELUtils.parseSpEl(method,joinPoint.getArgs(),redissonLock.key());
// Object lock = redissonLockService.lock(prefix + key, redissonLock.timeout(), redissonLock.timeUnit(), joinPoint::proceed);
// return lock;
// }
//
//}

@ -0,0 +1,16 @@
//package com.ssm.annotation;
//
//import java.lang.annotation.ElementType;
//import java.lang.annotation.Retention;
//import java.lang.annotation.RetentionPolicy;
//import java.lang.annotation.Target;
//import java.util.concurrent.TimeUnit;
//
//@Target(ElementType.METHOD)
//@Retention(RetentionPolicy.RUNTIME)
//public @interface RedissonLock {
// String prefix() default "";
// String key();
// int timeout() default -1;
// TimeUnit timeUnit() default TimeUnit.MILLISECONDS;
//}

@ -0,0 +1,44 @@
//package com.ssm.annotation;
//
//import com.ssm.manage.entity.SmsException;
//import com.ssm.manage.response.ResponseCode;
//import lombok.SneakyThrows;
//import org.apache.poi.ss.formula.functions.T;
//import org.redisson.api.RLock;
//import org.redisson.api.RedissonClient;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Component;
//
//import java.util.concurrent.TimeUnit;
//
//@Component
//public class RedissonLockService {
// @Autowired
// private RedissonClient redissonClient;
//
// @SneakyThrows
// public <T> T lock(String key, int timeout, TimeUnit timeUnit, Supplier<T> supplier) throws SmsException {
// RLock lock = redissonClient.getLock(key);
// boolean tryLock = lock.tryLock(timeout,timeUnit);
// if (!tryLock) {
// throw new SmsException(ResponseCode.MSG,"请求太频繁了");
// }
// try {
// return supplier.get();
// }finally {
// lock.unlock();
// }
// }
//
//
// @FunctionalInterface
// public interface Supplier<T> {
//
// /**
// * Gets a result.
// *
// * @return a result
// */
// T get() throws Throwable;
// }
//}

@ -0,0 +1,18 @@
//package com.ssm.annotation;
//
//import lombok.Getter;
//import org.springframework.context.ApplicationEvent;
//
//@Getter
//public class SmsSendEvent extends ApplicationEvent {
// private String phone;
// /**
// * Create a new ApplicationEvent.
// *
// * @param source the object on which the event initially occurred (never {@code null})
// */
// public SmsSendEvent(Object source,String phone) {
// super(source);
// this.phone = phone;
// }
//}

@ -0,0 +1,16 @@
//package com.ssm.annotation;
//
//import org.springframework.context.event.EventListener;
//import org.springframework.stereotype.Component;
//import org.springframework.transaction.event.TransactionPhase;
//import org.springframework.transaction.event.TransactionalEventListener;
//
//@Component
//public class SmsSendLister {
//
// @EventListener(SmsSendEvent.class)
// @TransactionalEventListener(value = SmsSendEvent.class,phase = TransactionPhase.AFTER_COMMIT)
// public void SmsSendLister() {
// System.out.println("SmsSendLister");
// }
//}

@ -0,0 +1,30 @@
//package com.ssm.annotation;
//
//import org.springframework.core.DefaultParameterNameDiscoverer;
//import org.springframework.expression.EvaluationContext;
//import org.springframework.expression.Expression;
//import org.springframework.expression.ExpressionParser;
//import org.springframework.expression.spel.standard.SpelExpressionParser;
//import org.springframework.expression.spel.support.StandardEvaluationContext;
//
//import java.lang.reflect.Method;
//import java.util.Optional;
//
//public class SpELUtils {
// private static final ExpressionParser PARSER = new SpelExpressionParser();
// private static final DefaultParameterNameDiscoverer PARAMETER_NAME_DISCOVERER = new DefaultParameterNameDiscoverer();
// public static String getMethodKey(Method method){
// return method.getDeclaringClass() + "#" + method.getName();
// }
//
// public static String parseSpEl(Method method,Object[] args,String spEL){
// //获取方法的参数名,可能为空
// String[] parameterNames = Optional.ofNullable(PARAMETER_NAME_DISCOVERER.getParameterNames(method)).orElse(new String[]{});
// EvaluationContext context = new StandardEvaluationContext();
// for (int i = 0; i < parameterNames.length; i++) {
// context.setVariable(parameterNames[i], args[i]);
// }
// Expression expression = PARSER.parseExpression(spEL);
// return expression.getValue(context,String.class);
// }
//}

@ -0,0 +1,27 @@
${AnsiColor.BRIGHT_YELLOW}
鸡你太美
鸡你实在太美
鸡你是太美
鸡你太美
实在是太美鸡你
鸡你 实在是太美鸡你 美
鸡你 实在是太美鸡美 太美
鸡你 实在是太美鸡美 太美
鸡你 实在是太美鸡美 太美
鸡你 鸡你实在是美太美 美蓝球球
鸡 鸡 鸡你实在是太美 篮球篮球球
鸡 鸡你太美裆鸡太啊 蓝篮球
鸡你太美裆裆鸡美
鸡你美裆 裆鸡美
鸡太美 鸡太美
鸡美 鸡美
鸡美 鸡美
鸡美 鸡美
鸡太 鸡太
金 猴 金猴
皮 鞋 皮鞋金猴
金光 金光 大道
大道
坤坤保佑 永不宕机 永无BUG
${AnsiColor.BRIGHT_BLUE}
${AnsiColor.BRIGHT_WHITE}

@ -0,0 +1,279 @@
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
<title>测试项目线上发布成功与否</title>
<script type="text/javascript" th:src="@{js/three.min.js}"></script>
<script type="text/javascript" th:src="@{js/OrbitControls.js}" ></script>
<script type="text/javascript" th:src="@{js/Stats.js}" ></script>
<script type="text/javascript" th:src="@{js/dat.gui.min.js}" ></script>
<script type="text/javascript" th:src="@{js/Fire.js}" ></script>
<script type="text/javascript" th:src="@{js/tween.min.js}" ></script>
<script type="text/javascript" th:src="@{js/physi.js}" ></script>
<style>
body{
background: url(img/bg.jpg) no-repeat top center fixed; overflow: hidden;
background-size: 100%;
padding: 0;
margin: 0;
overflow: hidden;
}
</style>
</head>
<body>
<script>
// 实际代码
var scene, renderer, camera; // 三大件
var controls, stats, clock; // 辅助组件
var arrowBodyMesh, smokeParticles = []; // 箭体网格对象和烟雾数组
// 箭体图片路径
var arrowPath = "img/arrow.png";
// 烟雾图片路径
var smokePath = "img/cloud.png";
function init() {
// 创建clock
clock = new THREE.Clock();
// 创建场景
scene=new THREE.Scene();
// 创建渲染器
renderer=new THREE.WebGLRenderer({
antialias:true,
alpha:true
});
renderer.setClearColor(0x000000, 0.0);
renderer.setSize(window.innerWidth,window.innerHeight);
renderer.setPixelRatio(window.devicePixelRatio);
document.body.appendChild(renderer.domElement);
// 创建透视相机
camera=new THREE.PerspectiveCamera(60,window.innerWidth/window.innerHeight,1,1000);
camera.position.set(0,0,30);
// 辅助移动视角
// controls=new THREE.OrbitControls(camera,renderer.domElement);
// controls.enableDamping=true;
// controls.minDistance=1;
// controls.maxDistance=500;
scene.add(new THREE.AmbientLight(0XCCCCCC, 0.5));
var pointLight=new THREE.PointLight(0xffffff, 0.8);
pointLight.position.set(0, 10, 40);
scene.add(pointLight);
}
var fire, fire1;
function initModel(){
// var helper = new THREE.GridHelper(1000, 50);
// scene.add(helper);
// 尾焰
var plane=new THREE.PlaneBufferGeometry(15,30,1);
fire = new THREE.Fire(plane,{
textureWidth:1024,
textureHeight:1024,
debug:false,
color1: new THREE.Color(0xffffff),
color2: new THREE.Color(0xffc159),
color3: new THREE.Color(0xe69bb1),
windVector: new THREE.Vector2(0, -1.2),
colorBias: 0.92,
burnRate: 1.19,
diffuse: 5,
viscosity: 0.2,
expansion: -3,
swirl: 8,
drag: 0.17,
airSpeed: 23,
speed: 390,
massConservation: false
});
// fire = new THREE.Fire(plane,{
// textureWidth:512,
// textureHeight:512,
// debug:false,
// color1: new THREE.Color(0xffffff),
// color2: new THREE.Color(0xffc159),
// color3: new THREE.Color(0xe69bb1),
// windVector: new THREE.Vector2(0, -2),
// colorBias: 0.61,
// burnRate: 1.73,
// diffuse: 1.3,
// viscosity: 0.25,
// expansion: 0,
// swirl: 50,
// drag: 0.35,
// airSpeed: 11,
// speed: 531,
// massConservation: false
// });
fire.addSource(0.5, 0.6, 0.1, 1.0, 0.0, -2.0);
fire.addSource(0.62, 0.6, 0.1, 1.0, 0.0, -2.0);
fire.addSource(0.38, 0.6, 0.1, 1.0, 0.0, -2.0);
fire.position.y = firePosition;
fire.position.z = -10;
// fire.rotateX(Math.PI);//绕x轴旋转π/4
scene.add(fire);
// 烟雾
var smokeTexture = THREE.ImageUtils.loadTexture(smokePath);
var smokeMaterial = new THREE.MeshLambertMaterial({
map: smokeTexture,
transparent: true
});
var smokeGeo = new THREE.PlaneGeometry(30, 30);
for (p = 0; p < smokeCount; p++) {
var particle = new THREE.Mesh(smokeGeo, smokeMaterial);
// particle.position.set((p-10)*5, -28+Math.abs(p-10)*2, -5);
particle.position.set(0, firePosition-8, -5);
// particle.position.set((p-10)*5, -28+Math.abs(p-10)*3, -5);
particle.rotation.z = Math.random() * 360;
// particle.rotateX(Math.PI);//绕x轴旋转π/4
scene.add(particle);
smokeParticles.push(particle);
}
// 箭体
var arrowPlane=new THREE.PlaneBufferGeometry(10,25,1);
// var geometry = new THREE.CubeGeometry( 10, 10, 10);
var material = new THREE.MeshPhongMaterial({
map: THREE.ImageUtils.loadTexture(arrowPath),
transparent: true
});
arrowBodyMesh = new THREE.Mesh(arrowPlane, material);
arrowBodyMesh.position.y = (firePosition + 18.7);
arrowBodyMesh.position.z = -10;
scene.add(arrowBodyMesh);
}
var smokeCount = 20; // 组成烟雾的对象数量
var firePosition = -30; // 尾焰y轴位置
/**
* 飞行动画
*/
var tweenFireFlySlow, tweenArrowFlySlow, tweenFireFlyFast, tweenArrowFlyFast;
function initTween(distance) {
// // 尾焰起飞-慢
// tweenFireFlySlow = new TWEEN.Tween(fire.position)
// .to( { y: (firePosition + 28.7) }, 2500 ).repeat(0).start();
// tweenFireFlySlow.easing(TWEEN.Easing.Quadratic.In);
// // 箭体起飞-慢
// tweenArrowFlySlow = new TWEEN.Tween(arrowBodyMesh.position)
// .to( { y: (47.4 + firePosition) }, 2500 ).repeat(0).start();
// tweenArrowFlySlow.easing(TWEEN.Easing.Quadratic.In);
// // 尾焰起飞-快
// tweenFireFlyFast = new TWEEN.Tween(fire.position)
// .to( { y: (firePosition + 68.7) }, 1000 ).repeat(0);
// tweenFireFlyFast.easing(TWEEN.Easing.Elastic.In);
// // 箭体起飞-快
// tweenArrowFlyFast = new TWEEN.Tween(arrowBodyMesh.position)
// .to( { y: (87.4 + firePosition) }, 1000 ).repeat(0);
// tweenArrowFlyFast.easing(TWEEN.Easing.Elastic.In);
// 尾焰起飞-慢
tweenFireFlySlow = new TWEEN.Tween(fire.position)
.to( { y: (firePosition + 68.7) }, 5500 ).repeat(0).start();
tweenFireFlySlow.easing(TWEEN.Easing.Quadratic.In);
// 箭体起飞-慢
tweenArrowFlySlow = new TWEEN.Tween(arrowBodyMesh.position)
.to( { y: (87.4 + firePosition) }, 5500 ).repeat(0).start();
tweenArrowFlySlow.easing(TWEEN.Easing.Quadratic.In);
// 烟雾运动
for (var p = 0; p < smokeCount; p++) {
new TWEEN.Tween(smokeParticles[p].position)
.to( { x: (p-10)*5 }, 3000 ).repeat(0).start()
.easing(TWEEN.Easing.Quadratic.Out);
new TWEEN.Tween(smokeParticles[p].position)
.to( { y: -26+Math.abs(p-10)*3 }, 2000 ).repeat(0).start()
.easing(TWEEN.Easing.Quadratic.Out);
new TWEEN.Tween(smokeParticles[p].position)
.to( { z: Math.abs(p-10)*3 }, 2000 ).repeat(0).start()
.easing(TWEEN.Easing.Quadratic.Out);
}
// tweenFireFlySlow.chain(tweenFireFlyFast);
// tweenArrowFlySlow.chain(tweenArrowFlyFast);
}
window.onresize = function (){
camera.aspect=window.innerWidth/window.innerHeight;
camera.updateProjectionMatrix();
renderer.setSize(window.innerWidth,window.innerHeight);
}
function render(){
renderer.render(scene,camera);
}
function animate(){
if (!isStop) {
// controls.update();
TWEEN.update();
delta = clock.getDelta();
evolveSmoke();
requestAnimationFrame(animate);
render();
}
}
// 烟雾旋转
function evolveSmoke() {
var sp = smokeParticles.length;
while (sp--) {
if (sp%2==0) { // 偶数逆时针旋转
smokeParticles[sp].rotation.z += (delta * 0.1);
} else { // 奇数顺时针旋转
smokeParticles[sp].rotation.z += -(delta * 0.1);
}
}
}
/**
* three.js动画准备
*/
function threeReady(){
init();
initModel();
}
/**
* three.js动画开始
*/
function threeStart() {
// 允许动画循环
isStop = false;
initTween();
animate();
}
/**
* 元素归位,动画循环停止
*/
var isStop = false; // 是否停止动画nd
function threeEnd() {
// 尾焰归位
fire.position.set(0, firePosition, -10);
// 烟雾归位
for (var p = 0; p < smokeCount; p++) {
smokeParticles[p].position.set(0, firePosition-8, -5);
}
// 箭体归位
arrowBodyMesh.position.set(0, firePosition + 18.7, -10);
// 动画循环停止
isStop = true;
}
threeReady();
threeStart();
</script>
</body>
</html>

@ -0,0 +1,57 @@
<?xml version="1.0" encoding="UTF-8"?>
<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">
<parent>
<artifactId>demay</artifactId>
<groupId>com.ssm</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>mybatis_generator</artifactId>
<properties>
<!-- MyBatis Generator -->
<!-- Java接口和实体类 -->
<targetJavaProject>${basedir}/src/main/java</targetJavaProject>
<targetMapperPackage>com.ssm.manage.dao</targetMapperPackage>
<targetModelPackage>com.ssm.manage.entity</targetModelPackage>
<!-- XML生成路径 -->
<targetResourcesProject>${basedir}/src/main/resources</targetResourcesProject>
<targetXMLPackage>sqlmap</targetXMLPackage>
</properties>
<build>
<finalName>dao</finalName>
<plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.6</version>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.44</version>
</dependency>
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>3.4.5</version>
</dependency>
</dependencies>
<configuration>
<!--允许移动生成的文件 -->
<verbose>true</verbose>
<!-- 是否覆盖 -->
<overwrite>true</overwrite>
<!-- 自动生成的配置 -->
<configurationFile>
${basedir}/src/main/resources/generator/generatorConfig.xml</configurationFile>
</configuration>
</plugin>
</plugins>
</build>
</project>

@ -0,0 +1,4 @@
spring.datasource.url=jdbc:mysql://192.168.31.40:3306/dcmy?useSSL=false&serverTimezone=UTC&characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

@ -0,0 +1,335 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<properties resource="database.properties"/>
<context id="postgres" targetRuntime="MyBatis3Simple" defaultModelType="flat">
<property name="beginningDelimiter" value="`"/>
<property name="endingDelimiter" value="`"/>
<property name="javaFileEncoding" value="UTF-8"/>
<plugin type="tk.mybatis.mapper.generator.MapperPlugin">
<property name="mappers" value="com.ssm.core.mapper.BaseMapper"/>
</plugin>
<plugin type="org.mybatis.generator.plugins.EqualsHashCodePlugin"/>
<plugin type="org.mybatis.generator.plugins.SerializablePlugin"/>
<plugin type="org.mybatis.generator.plugins.ToStringPlugin"/>
<jdbcConnection driverClass="${spring.datasource.driver-class-name}"
connectionURL="${spring.datasource.url}"
userId="${spring.datasource.username}"
password="${spring.datasource.password}">
</jdbcConnection>
<javaModelGenerator targetPackage="com.ssm.manage.entity" targetProject="E:\workPlace\demay\dm_bean\src\main\java\"/>
<sqlMapGenerator targetPackage="sqlmap" targetProject="E:\workPlace\demay\dm_dao\src\main\resources\"/>
<javaClientGenerator targetPackage="com.ssm.manage.mapper" targetProject="E:\workPlace\demay\dm_dao\src\main\java\" type="XMLMAPPER" />
<!-- <table tableName="account_trade_record" >-->
<!-- &lt;!&ndash; <property name="useActualColumnNames" value="false"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
<!-- <table tableName="appointment_list" >-->
<!-- &lt;!&ndash;<property name="useActualColumnNames" value="true"/>&ndash;&gt;-->
<!--&lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC" identity="true"/>&ndash;&gt;-->
<!-- </table>-->
<!-- <table tableName="attendance_list" >-->
<!-- &lt;!&ndash;<property name="useActualColumnNames" value="true"/>&ndash;&gt;-->
<!--&lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
<!-- <table tableName="base_city" >-->
<!-- &lt;!&ndash;<property name="useActualColumnNames" value="true"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
<!-- <table tableName="base_collection_type" >-->
<!-- &lt;!&ndash;<property name="useActualColumnNames" value="true"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
<!-- <table tableName="base_county" >-->
<!-- &lt;!&ndash;<property name="useActualColumnNames" value="true"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
<!-- <table tableName="base_project" >-->
<!-- &lt;!&ndash;<property name="useActualColumnNames" value="true"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
<!-- <table tableName="base_project_type" >-->
<!-- &lt;!&ndash;<property name="useActualColumnNames" value="true"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
<!-- <table tableName="base_province" >-->
<!-- &lt;!&ndash;<property name="useActualColumnNames" value="true"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
<!-- <table tableName="base_staff" >-->
<!-- &lt;!&ndash;<property name="useActualColumnNames" value="true"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
<!-- <table tableName="negative_card_day_record" >-->
<!-- &lt;!&ndash;<property name="useActualColumnNames" value="true"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
<!-- <table tableName="base_store" >-->
<!-- &lt;!&ndash;<property name="useActualColumnNames" value="true"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
<!-- <table tableName="cash_account_list" >-->
<!-- &lt;!&ndash;<property name="useActualColumnNames" value="true"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
<!-- <table tableName="cash_list" >-->
<!-- &lt;!&ndash;<property name="useActualColumnNames" value="true"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
<!-- <table tableName="cash_signature_file" >-->
<!-- &lt;!&ndash;<property name="useActualColumnNames" value="true"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
<!-- <table tableName="cash_share" >-->
<!-- &lt;!&ndash;<property name="useActualColumnNames" value="true"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
<!-- <table tableName="collection_list" >-->
<!-- &lt;!&ndash;<property name="useActualColumnNames" value="true"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
<!-- <table tableName="course_list" >-->
<!-- &lt;!&ndash;<property name="useActualColumnNames" value="true"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
<!-- <table tableName="course_account" >-->
<!-- &lt;!&ndash;<property name="useActualColumnNames" value="true"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
<!-- <table tableName="debt_list" >-->
<!-- &lt;!&ndash;<property name="useActualColumnNames" value="true"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
<!-- <table tableName="doc_promotion" >-->
<!-- &lt;!&ndash;<property name="useActualColumnNames" value="true"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
<!-- <table tableName="doc_promotion_project" >-->
<!-- &lt;!&ndash;<property name="useActualColumnNames" value="true"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
<!-- <table tableName="member_list" >-->
<!-- &lt;!&ndash;<property name="useActualColumnNames" value="true"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
<!-- <table tableName="store_member_list" >-->
<!-- &lt;!&ndash;<property name="useActualColumnNames" value="true"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
<!-- <table tableName="store_member_file" >-->
<!-- &lt;!&ndash;<property name="useActualColumnNames" value="true"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
<!-- <table tableName="store_member_phone" >-->
<!-- &lt;!&ndash;<property name="useActualColumnNames" value="true"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
<!-- <table tableName="member_wallet" >-->
<!-- &lt;!&ndash;<property name="useActualColumnNames" value="true"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
<!-- <table tableName="recharge_list" >-->
<!--&lt;!&ndash; <property name="useActualColumnNames" value="false"/>&ndash;&gt;-->
<!--&lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
<!-- <table tableName="pay_list" >-->
<!-- &lt;!&ndash; <property name="useActualColumnNames" value="false"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
<!-- <table tableName="promotion_list" >-->
<!-- &lt;!&ndash;<property name="useActualColumnNames" value="true"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
<!-- <table tableName="promotion_project" >-->
<!-- &lt;!&ndash;<property name="useActualColumnNames" value="true"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
<!-- <table tableName="promotion_member" >-->
<!-- &lt;!&ndash;<property name="useActualColumnNames" value="true"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
<!-- <table tableName="recharge_account" >-->
<!-- &lt;!&ndash; <property name="useActualColumnNames" value="false"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
<!-- <table tableName="recharge_type" >-->
<!-- &lt;!&ndash;<property name="useActualColumnNames" value="true"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
<!-- <table tableName="refund_cash" >-->
<!-- &lt;!&ndash;<property name="useActualColumnNames" value="true"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
<!-- <table tableName="refund_course" >-->
<!-- &lt;!&ndash;<property name="useActualColumnNames" value="true"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
<!-- <table tableName="refund_debt_list" >-->
<!-- &lt;!&ndash;<property name="useActualColumnNames" value="true"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
<!-- <table tableName="refund_recharge" >-->
<!-- &lt;!&ndash;<property name="useActualColumnNames" value="true"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
<!-- <table tableName="refund_order_list" >-->
<!-- &lt;!&ndash;<property name="useActualColumnNames" value="true"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
<!-- <table tableName="repay_list" >-->
<!-- &lt;!&ndash;<property name="useActualColumnNames" value="true"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
<!-- <table tableName="repay_trade_list" >-->
<!-- &lt;!&ndash;<property name="useActualColumnNames" value="true"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
<!-- <table tableName="staff_salary" >-->
<!-- &lt;!&ndash;<property name="useActualColumnNames" value="true"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
<!-- <table tableName="staff_works" >-->
<!-- &lt;!&ndash;<property name="useActualColumnNames" value="true"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
<!-- <table tableName="store_parament" >-->
<!-- &lt;!&ndash;<property name="useActualColumnNames" value="true"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
<!-- <table tableName="store_month_task" >-->
<!-- &lt;!&ndash;<property name="useActualColumnNames" value="true"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
<!-- <table tableName="sys_business_parameters" >-->
<!-- &lt;!&ndash;<property name="useActualColumnNames" value="true"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
<!-- <table tableName="sys_global_parameters" >-->
<!-- &lt;!&ndash;<property name="useActualColumnNames" value="true"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
<!-- <table tableName="sys_menu" >-->
<!-- &lt;!&ndash;<property name="useActualColumnNames" value="true"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
<!-- <table tableName="sys_role_power" >-->
<!-- &lt;!&ndash;<property name="useActualColumnNames" value="true"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
<!-- <table tableName="sys_menu_power" >-->
<!-- &lt;!&ndash;<property name="useActualColumnNames" value="true"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
<!-- <table tableName="sys_power" >-->
<!-- &lt;!&ndash;<property name="useActualColumnNames" value="true"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
<!-- <table tableName="sys_role" >-->
<!-- &lt;!&ndash;<property name="useActualColumnNames" value="true"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
<!-- <table tableName="sys_role_user" >-->
<!-- &lt;!&ndash;<property name="useActualColumnNames" value="true"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
<!-- <table tableName="sys_user" >-->
<!-- &lt;!&ndash;<property name="useActualColumnNames" value="true"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
<!-- <table tableName="upload_files" >-->
<!-- &lt;!&ndash;<property name="useActualColumnNames" value="true"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
<!-- <table tableName="member_cs" >-->
<!-- &lt;!&ndash;<property name="useActualColumnNames" value="true"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
<!-- <table tableName="member_order" >-->
<!-- &lt;!&ndash;<property name="useActualColumnNames" value="true"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
<!-- <table tableName="project_progress" >-->
<!-- &lt;!&ndash;<property name="useActualColumnNames" value="true"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
<!-- <table tableName="project_progress_file" >-->
<!-- &lt;!&ndash;<property name="useActualColumnNames" value="true"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
<!-- <table tableName="img_maintain" >-->
<!-- &lt;!&ndash;<property name="useActualColumnNames" value="true"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
<!-- <table tableName="member_init" >-->
<!-- &lt;!&ndash;<property name="useActualColumnNames" value="true"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
<!-- <table tableName="modify_recharge_record" >-->
<!-- &lt;!&ndash;<property name="useActualColumnNames" value="true"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
<!-- <table tableName="modify_course_record" >-->
<!-- &lt;!&ndash;<property name="useActualColumnNames" value="true"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
<table tableName="member_init_staff" >
<!--<property name="useActualColumnNames" value="true"/>-->
<!-- <generatedKey column="appointment_id" sqlStatement="JDBC"/>-->
</table>
<!-- <table tableName="card_change_in_project" >-->
<!-- &lt;!&ndash;<property name="useActualColumnNames" value="true"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
<!-- <table tableName="card_change_out_project" >-->
<!-- &lt;!&ndash;<property name="useActualColumnNames" value="true"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
<!-- <table tableName="staff_attendance_record" >-->
<!-- &lt;!&ndash;<property name="useActualColumnNames" value="true"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
<!-- <table tableName="store_allinpay_info" >-->
<!-- &lt;!&ndash;<property name="useActualColumnNames" value="true"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
<!-- <table tableName="allinpay_cash_list" >-->
<!-- &lt;!&ndash;<property name="useActualColumnNames" value="true"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
<!-- <table tableName="cash_download_record" >-->
<!-- &lt;!&ndash;<property name="useActualColumnNames" value="true"/>&ndash;&gt;-->
<!-- &lt;!&ndash; <generatedKey column="appointment_id" sqlStatement="JDBC"/>&ndash;&gt;-->
<!-- </table>-->
</context>
</generatorConfiguration>

@ -0,0 +1,49 @@
<?xml version="1.0" encoding="UTF-8"?>
<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">
<parent>
<artifactId>demay</artifactId>
<groupId>com.ssm</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>redis</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.8.10</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.10</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.8</version>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}-${project.version}</finalName>
</build>
</project>

@ -0,0 +1,86 @@
package com.ssm.config;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.MapPropertySource;
import org.springframework.data.redis.connection.RedisClusterConfiguration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.RedisPassword;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import java.util.HashMap;
import java.util.Map;
@Configuration
@EnableCaching
@Slf4j
public class RedisConfig extends CachingConfigurerSupport {
// @Value("${redis.host}")
// private String host; // Redis服务器地址
// @Value("${redis.port}")
// private int port; // Redis服务器连接端口
@Value("${spring.redis.password}")
private String password; // Redis服务器连接密码默认为空
@Value("${spring.redis.timeout}")
private int timeout; // 连接超时时间(毫秒)
@Value("${spring.redis.database}")
private int database; //
@Value("${spring.redis.jedis.pool.max-active}")
private int maxTotal; // 连接池最大连接数(使用负值表示没有限制)
@Value("${spring.redis.jedis.pool.max-wait}")
private int maxWaitMillis; // 连接池最大阻塞等待时间(使用负值表示没有限制)
@Value("${spring.redis.jedis.pool.max-idle}")
private int maxIdle; // 连接池中的最大空闲连接
@Value("${spring.redis.jedis.pool.min-idle}")
private int minIdle; // 连接池中的最小空闲连接
/**
* RedisTemplate
* @return
*/
@Bean(name = "redisTemplate")
public RedisTemplate<Object, Object> functionDomainRedisTemplate(@Qualifier(value = "redisConnectionFactory") RedisConnectionFactory factory) {
// logger.info("初始化RedisTemplate");
RedisTemplate<Object, Object> template = new RedisTemplate<>();
template.setConnectionFactory(factory);
//使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值
Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper mapper = new ObjectMapper();
mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
serializer.setObjectMapper(mapper);
template.setValueSerializer(serializer);
//使用StringRedisSerializer来序列化和反序列化redis的key值
template.setKeySerializer(new StringRedisSerializer());
template.afterPropertiesSet();
return template;
}
// @Bean
// public RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) {
// RedisMessageListenerContainer container = new RedisMessageListenerContainer();
// container.setConnectionFactory(connectionFactory);
// return container;
// }
}

@ -0,0 +1,264 @@
package com.ssm.util;
import com.google.gson.Gson;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.dao.DataAccessException;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.core.RedisOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.SessionCallback;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.data.redis.core.script.DefaultRedisScript;
import org.springframework.data.redis.core.script.RedisScript;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.time.Duration;
import java.util.*;
import java.util.concurrent.TimeUnit;
@Component
@Slf4j
public class RedisClient<V> {
// private final long DEFAULT_EXPIRE_TIME = 1 * 24 * 60 * 60L;
public final static long EXPIRE_TIME_ONE_HOUR = 60 * 60L;
public final static long EXPIRE_TIME_ONE_MINUTE = 60L;
public final static long EXPIRE_TIME_FIVE_MINUTES = 5 * 60L;
public final static long EXPIRE_TIME_TEN_MINUTES = 10 * 60L;
public final static long EXPIRE_TIME_TEN_MINUTESTOW = 3 * 60L;
public static final long EXPIRE_TIME_HALF_HOUR = 30 * 60L;
public static final long EXPIRE_TIME_ONE_DAY = 24 * 60 * 60L;
public static final long EXPIRE_DAY_STATISTICS = 3 * 24 * 60 * 60L;
public static final long EXPIRE_MONTHLY_STATISTICS = 33 * 24 *60 *60L;
public static final String LOCK_RELEASE_SCRIPT = "if redis.call('get',KEYS[1]) == ARGV[1] then return redis.call('del',KEYS[1]) else return 0 end";
@Resource
RedisTemplate<String,V> redisTemplate;
public static final int LOCK_EXPIRE_TIME = 10; // 锁的过期时间,单位:秒
public static final String LOCKED = "locked"; // 分布式锁时, 设置的值
public RedisTemplate<String,V> getRedisTemplate(){
return redisTemplate;
}
/**
* SETNX
* @param lockKey {@code lockKey} , {@code true} ( {@code lockKey} "locked" );
* {@code lockKey} , , {@code false}.
*/
public boolean tryAcquireLock(String lockKey) {
RedisTemplate<String, String> redisTemplate = (RedisTemplate<String, String>) this.redisTemplate;
ValueOperations<String, String> stringStringValueOperations = redisTemplate.opsForValue();
// 尝试获取锁,使用 SETNX 语义
return Boolean.TRUE.equals(stringStringValueOperations.setIfAbsent(lockKey, LOCKED, Duration.ofSeconds(LOCK_EXPIRE_TIME)));
}
public void delete(String key){
log.warn("delete cache ,keys in ({})",key);
redisTemplate.delete(key);
}
public void delete(Collection<String> keys){
log.warn("delete cache ,keys in ({})", StringUtils.join(keys.toArray(),","));
redisTemplate.delete(keys);
}
public long incr(String k,long l){
return redisTemplate.opsForValue().increment(k,l);
}
public long incr(String k){
return this.incr(k,1L);
}
public Long decr(String k,long l){
return this.incr(k,-l);
}
public long decr(String k){
return this.incr(k, -1L);
}
public double incrD(String k,double d){
return redisTemplate.opsForValue().increment(k,d);
}
public double incrD(String k){
return this.incrD(k, 1D);
}
public double decrD(String k,double d){
return this.incrD(k,-d);
}
public double decrD(String k){
return this.incrD(k,-1D);
}
public void set(String k,V v,Long l){
redisTemplate.opsForValue().set(k,v,l,TimeUnit.SECONDS);
}
public void set(String k,V v){
redisTemplate.opsForValue().set(k,v);
}
public void set(String k,V v,Long l,TimeUnit timeUnit){
redisTemplate.opsForValue().set(k,v,l,timeUnit);
}
public void waitingSet(String k, V v, Long time, TimeUnit timeUnit) {
redisTemplate.execute(new SessionCallback<Boolean>() {
@Override
public <K, V> Boolean execute(RedisOperations<K, V> operations) throws DataAccessException {
operations.multi();
operations.opsForValue().set((K) k, (V) v);
operations.exec();
return true;
}
});
}
public void waitingSetValueWithExpirationAt(String key, V value, Date expiration) {
redisTemplate.execute(new SessionCallback<Boolean>() {
@Override
public <K, V> Boolean execute(RedisOperations<K, V> operations) throws DataAccessException {
operations.multi();
operations.opsForValue().set((K) key, (V) value);
operations.expireAt((K) key, expiration);
operations.exec();
return true;
}
});
}
public V get(String k){
return redisTemplate.opsForValue().get(k);
}
public void expire(String k,int seconds){
redisTemplate.expire(k, seconds, TimeUnit.SECONDS);
}
public void expire(String k,long seconds){
redisTemplate.expire(k, seconds, TimeUnit.SECONDS);
}
public List<V> pipeLine(Map<String,V> map){
List<Object> objects = redisTemplate.execute((RedisConnection redisConnection) -> {
RedisSerializer<String> serializer = redisTemplate.getStringSerializer();
Gson gson = new Gson();
redisConnection.openPipeline();
for(String key:map.keySet()){
redisConnection.lPush(serializer.serialize(key),serializer.serialize(gson.toJson(map.get(key))));
}
return redisConnection.closePipeline();
});
return (List<V>) objects;
}
public boolean hasKey(String key){
return redisTemplate.hasKey(key);
}
public boolean setnx(String key,V v){
return redisTemplate.opsForValue().setIfAbsent(key,v);
}
public Long sAdd(String key, V... v){
return redisTemplate.opsForSet().add(key,v);
}
public Long sRemove(String key, V... v){
return redisTemplate.opsForSet().remove(key,v);
}
public Long leftPush(String key,V v){
return redisTemplate.opsForList().leftPush(key,v);
}
public Long rightPush(String key,V v){
return redisTemplate.opsForList().rightPush(key, v);
}
/*
* valuecount
* LREM key count value
* count>0:valuecount
* count<0:valuecount
* count=0:value
* */
public Long lRem(String key, Long count, V v){return redisTemplate.opsForList().remove(key,count,v);}
public Long lSize(String key){
return redisTemplate.opsForList().size(key);
}
public List<V> lRange(String key,Long start,Long end){
return redisTemplate.opsForList().range(key, start, end);
}
public V lIndex(String key,Long index){
return redisTemplate.opsForList().index(key,index);
}
public void lSet(String key,Long index, V v){
redisTemplate.opsForList().set(key,index, v);
}
public V right(String key){
return redisTemplate.opsForList().rightPop(key);
}
public Set<V> sMembers(String key){
return redisTemplate.opsForSet().members(key);
}
public V sPop(String key){
return redisTemplate.opsForSet().pop(key);
}
public Set<V> sRandMember(String key, long count) {
return redisTemplate.opsForSet().distinctRandomMembers(key, count);
}
public Long sSize(String key){
return redisTemplate.opsForSet().size(key);
}
public boolean isMembers(String key,V v){
return redisTemplate.opsForSet().isMember(key,v);
}
public V getset(String key,V v){
return redisTemplate.opsForValue().getAndSet(key,v);
}
public Set<String> keys(String pattern){
return redisTemplate.keys(pattern);
}
public Long evalUnlock(String script, List<String> keys, Object...args) {
RedisScript<Long> redisScript = new DefaultRedisScript<>(script, Long.class);
return redisTemplate.execute(redisScript, keys, args);
}
}
Loading…
Cancel
Save