diff --git a/java/my.sql b/java/my.sql
index ff948b8..15e837e 100644
--- a/java/my.sql
+++ b/java/my.sql
@@ -11,7 +11,7 @@
Target Server Version : 80018
File Encoding : 65001
- Date: 11/07/2020 10:11:24
+ Date: 12/07/2020 13:49:09
*/
SET NAMES utf8mb4;
@@ -34,7 +34,7 @@ CREATE TABLE `biz_document_history` (
PRIMARY KEY (`id`) USING BTREE,
INDEX `pid_time_idx`(`pid`, `time`) USING BTREE,
INDEX `uid_idx`(`uid`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 30 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB AUTO_INCREMENT = 31 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of biz_document_history
@@ -76,7 +76,7 @@ CREATE TABLE `biz_purchase_inbound_sub` (
`num` decimal(10, 2) NOT NULL COMMENT '入库数量',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `pid_cid_unique_idx`(`pid`, `cid`) USING BTREE COMMENT '同一采购入库单不能有重复分类的商品'
-) ENGINE = InnoDB AUTO_INCREMENT = 12 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB AUTO_INCREMENT = 13 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for biz_purchase_order
@@ -208,7 +208,7 @@ CREATE TABLE `biz_sell_outbound_sub` (
`cname` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '商品分类名称',
`num` decimal(10, 2) NOT NULL COMMENT '出库数量',
PRIMARY KEY (`id`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for biz_stock
@@ -226,7 +226,7 @@ CREATE TABLE `biz_stock` (
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `cid_cgrkid_unique_idx`(`cid`, `cgrkid`) USING BTREE,
INDEX `cdate_idx`(`ctime`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 9 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB AUTO_INCREMENT = 10 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for msg
@@ -297,7 +297,7 @@ CREATE TABLE `rec_attachment` (
PRIMARY KEY (`id`) USING BTREE,
INDEX `pid_idx`(`pid`) USING BTREE,
INDEX `url_idx`(`url`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for rec_login_history
@@ -315,7 +315,7 @@ CREATE TABLE `rec_login_history` (
INDEX `uid_idx`(`uid`) USING BTREE,
INDEX `type_idx`(`type`) USING BTREE,
INDEX `time_idx`(`time`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 400 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB AUTO_INCREMENT = 406 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of rec_login_history
@@ -477,6 +477,21 @@ INSERT INTO `rec_login_history` VALUES (398, 1, 'admin', '127.0.0.1', NULL, 1, 1
INSERT INTO `rec_login_history` VALUES (399, 1, 'admin', '127.0.0.1', NULL, 1, 1594344197698);
INSERT INTO `rec_login_history` VALUES (400, 1, 'admin', '127.0.0.1', NULL, 1, 1594396572079);
INSERT INTO `rec_login_history` VALUES (401, 1, 'admin', '127.0.0.1', NULL, 1, 1594433292572);
+INSERT INTO `rec_login_history` VALUES (402, 1, 'admin', '127.0.0.1', NULL, 1, 1594453804314);
+INSERT INTO `rec_login_history` VALUES (403, 1, 'admin', '127.0.0.1', NULL, 1, 1594463748662);
+INSERT INTO `rec_login_history` VALUES (404, 1, 'admin', '127.0.0.1', NULL, 1, 1594464193655);
+INSERT INTO `rec_login_history` VALUES (405, 1, 'admin', '127.0.0.1', NULL, 1, 1594467338836);
+INSERT INTO `rec_login_history` VALUES (406, 1, 'admin', '127.0.0.1', NULL, 1, 1594478241573);
+INSERT INTO `rec_login_history` VALUES (407, 1, 'admin', '127.0.0.1', NULL, 1, 1594517412152);
+INSERT INTO `rec_login_history` VALUES (408, 1, 'admin', '127.0.0.1', NULL, 1, 1594517476000);
+INSERT INTO `rec_login_history` VALUES (409, 1, 'admin', '127.0.0.1', NULL, 1, 1594517663344);
+INSERT INTO `rec_login_history` VALUES (410, 1, 'admin', '127.0.0.1', NULL, 1, 1594518624685);
+INSERT INTO `rec_login_history` VALUES (411, 1, 'admin', '127.0.0.1', NULL, 0, 1594518745456);
+INSERT INTO `rec_login_history` VALUES (412, 1, 'admin', '127.0.0.1', NULL, 1, 1594518838620);
+INSERT INTO `rec_login_history` VALUES (413, 1, 'admin', '127.0.0.1', NULL, 1, 1594530875654);
+INSERT INTO `rec_login_history` VALUES (414, 1, 'admin', '127.0.0.1', NULL, 1, 1594531358311);
+INSERT INTO `rec_login_history` VALUES (415, 1, 'admin', '127.0.0.1', NULL, 0, 1594531491193);
+INSERT INTO `rec_login_history` VALUES (416, 1, 'admin', '127.0.0.1', NULL, 1, 1594531562264);
-- ----------------------------
-- Table structure for rec_user_action
@@ -493,7 +508,7 @@ CREATE TABLE `rec_user_action` (
`error` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL COMMENT '错误信息',
`type` int(11) NOT NULL COMMENT '0失败、1成功',
PRIMARY KEY (`id`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 64 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB AUTO_INCREMENT = 65 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of rec_user_action
@@ -503,6 +518,9 @@ INSERT INTO `rec_user_action` VALUES (61, 1, 'admin', '127.0.0.1', '/purchase/or
INSERT INTO `rec_user_action` VALUES (62, 1, 'admin', '127.0.0.1', '/purchase/order/commit', 1592537930960, '提交采购订单CGDD202006190001', NULL, 1);
INSERT INTO `rec_user_action` VALUES (63, 1, 'admin', '127.0.0.1', '/purchase/order/pass', 1592537934425, '通过采购订单CGDD202006190001', NULL, 1);
INSERT INTO `rec_user_action` VALUES (64, 1, 'admin', '127.0.0.1', '/system/user/add', 1592803978425, '添加用户:toesbieya', NULL, 1);
+INSERT INTO `rec_user_action` VALUES (65, 1, 'admin', '127.0.0.1', '/system/role/update', 1594530891861, '修改角色:默认管理员', NULL, 1);
+INSERT INTO `rec_user_action` VALUES (66, 1, 'admin', '127.0.0.1', '/system/role/update', 1594530931531, '修改角色:默认管理员', NULL, 1);
+INSERT INTO `rec_user_action` VALUES (67, 1, 'admin', '127.0.0.1', '/system/role/update', 1594530948651, '修改角色:默认管理员', NULL, 1);
-- ----------------------------
-- Table structure for stat_finish_order
@@ -514,7 +532,7 @@ CREATE TABLE `stat_finish_order` (
`sell` int(11) NOT NULL COMMENT '销售订单完成数',
`time` bigint(20) NOT NULL COMMENT '完成时间',
PRIMARY KEY (`id`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 131 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB AUTO_INCREMENT = 132 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of stat_finish_order
@@ -553,6 +571,7 @@ INSERT INTO `stat_finish_order` VALUES (128, 0, 0, 1594051200000);
INSERT INTO `stat_finish_order` VALUES (129, 0, 0, 1594137600000);
INSERT INTO `stat_finish_order` VALUES (130, 0, 0, 1594224000000);
INSERT INTO `stat_finish_order` VALUES (131, 0, 0, 1594310400000);
+INSERT INTO `stat_finish_order` VALUES (132, 0, 0, 1594396800000);
-- ----------------------------
-- Table structure for stat_profit_goods
@@ -584,7 +603,7 @@ CREATE TABLE `stat_profit_total` (
`profit` decimal(10, 2) NOT NULL COMMENT '毛利润',
`time` bigint(20) NOT NULL,
PRIMARY KEY (`id`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 131 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB AUTO_INCREMENT = 132 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of stat_profit_total
@@ -623,6 +642,7 @@ INSERT INTO `stat_profit_total` VALUES (128, 0.00, 0.00, 0.00, 1594051200000);
INSERT INTO `stat_profit_total` VALUES (129, 0.00, 0.00, 0.00, 1594137600000);
INSERT INTO `stat_profit_total` VALUES (130, 0.00, 0.00, 0.00, 1594224000000);
INSERT INTO `stat_profit_total` VALUES (131, 0.00, 0.00, 0.00, 1594310400000);
+INSERT INTO `stat_profit_total` VALUES (132, 0.00, 0.00, 0.00, 1594396800000);
-- ----------------------------
-- Table structure for sys_category
@@ -669,7 +689,7 @@ CREATE TABLE `sys_customer` (
UNIQUE INDEX `name_unique_idx`(`name`) USING BTREE,
INDEX `status_idx`(`status`) USING BTREE,
INDEX `ctime_idx`(`ctime`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of sys_customer
@@ -687,7 +707,7 @@ CREATE TABLE `sys_department` (
`status` int(11) NOT NULL DEFAULT 1 COMMENT '0禁用,1正常',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `pid_name_unique_idx`(`pid`, `name`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of sys_department
@@ -47256,7 +47276,6 @@ INSERT INTO `sys_resource` VALUES (302, 300, '修改', '/update', 0, 100, 1);
INSERT INTO `sys_resource` VALUES (303, 300, '删除', '/del', 0, 100, 1);
INSERT INTO `sys_resource` VALUES (350, 200, '接口管理', '/resource', 1, 100, 1);
INSERT INTO `sys_resource` VALUES (351, 350, '修改', '/update', 1, 100, 1);
-INSERT INTO `sys_resource` VALUES (360, 200, '系统监控', '/monitor', 1, 100, 1);
-- ----------------------------
-- Table structure for sys_role
@@ -47298,7 +47317,7 @@ CREATE TABLE `sys_supplier` (
UNIQUE INDEX `name_unique_idx`(`name`) USING BTREE,
INDEX `ctime_idx`(`ctime`) USING BTREE,
INDEX `status_idx`(`status`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of sys_supplier
@@ -47328,4 +47347,25 @@ CREATE TABLE `sys_user` (
INSERT INTO `sys_user` VALUES (1, 'admin', 'e10adc3949ba59abbe56e057f20f883e', NULL, NULL, 1582184632922, 1, 1);
INSERT INTO `sys_user` VALUES (47, 'toesbieya', 'e10adc3949ba59abbe56e057f20f883e', 1, NULL, 1592803978422, 0, 1);
+-- ----------------------------
+-- Function structure for check_category_use
+-- ----------------------------
+DROP FUNCTION IF EXISTS `check_category_use`;
+delimiter ;;
+CREATE FUNCTION `check_category_use`(cid INT)
+ RETURNS tinyint(4)
+ READS SQL DATA
+BEGIN
+ declare r int;
+ select count(0) from biz_purchase_order_sub where cid=cid into r;
+ if r=0 then
+ select count(0) from biz_sell_order_sub where cid=cid into r;
+ return r;
+ else
+ return 1;
+ end if;
+END
+;;
+delimiter ;
+
SET FOREIGN_KEY_CHECKS = 1;
diff --git a/java/pom.xml b/java/pom.xml
index 17f9dab..bc33479 100644
--- a/java/pom.xml
+++ b/java/pom.xml
@@ -54,11 +54,6 @@
commons-pool2
-
- org.springframework.session
- spring-session-data-redis
-
-
org.mybatis.spring.boot
diff --git a/java/src/main/java/com/toesbieya/my/MyApplication.java b/java/src/main/java/com/toesbieya/my/MyApplication.java
index abe1fdb..0c9a742 100644
--- a/java/src/main/java/com/toesbieya/my/MyApplication.java
+++ b/java/src/main/java/com/toesbieya/my/MyApplication.java
@@ -3,13 +3,11 @@ package com.toesbieya.my;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.cache.annotation.EnableCaching;
import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
@MapperScan("com.toesbieya.my.mapper")
@EnableScheduling
-@EnableCaching
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
diff --git a/java/src/main/java/com/toesbieya/my/aspect/LockAspect.java b/java/src/main/java/com/toesbieya/my/aspect/LockAspect.java
index b6591f2..164b4ba 100644
--- a/java/src/main/java/com/toesbieya/my/aspect/LockAspect.java
+++ b/java/src/main/java/com/toesbieya/my/aspect/LockAspect.java
@@ -1,8 +1,7 @@
package com.toesbieya.my.aspect;
import com.toesbieya.my.annoation.Lock;
-import com.toesbieya.my.module.redis.LockHelper;
-import com.toesbieya.my.module.redis.RedisLockHelper;
+import com.toesbieya.my.utils.RedisUtil;
import com.toesbieya.my.utils.Result;
import com.toesbieya.my.utils.SpringUtil;
import lombok.extern.slf4j.Slf4j;
@@ -11,7 +10,6 @@ import org.aspectj.lang.annotation.*;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
-import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.lang.reflect.Method;
@@ -22,7 +20,7 @@ import java.util.ArrayList;
@Slf4j
@Order(Integer.MAX_VALUE - 1)
public class LockAspect {
- private final ThreadLocal> lockHelperThreadLocal = new ThreadLocal<>();
+ private final ThreadLocal> lockerThreadLocal = new ThreadLocal<>();
@Pointcut("@annotation(com.toesbieya.my.annoation.Lock)&&execution(com.toesbieya.my.utils.Result com.toesbieya.my..*.*(..))")
public void pointCut() {
@@ -37,21 +35,23 @@ public class LockAspect {
if (values.length <= 0) {
return point.proceed();
}
- ArrayList locks = new ArrayList<>();
+ ArrayList locks = new ArrayList<>();
String[] parameterNames = signature.getParameterNames();
Object[] args = point.getArgs();
for (String v : values) {
String lockKey = (String) SpringUtil.spell(v, parameterNames, args);
+
//跳过空值
if (StringUtils.isEmpty(lockKey)) continue;
- LockHelper lockHelper = new RedisLockHelper(lockKey);
- if (!lockHelper.lock()) {
- locks.forEach(LockHelper::close);
+
+ RedisUtil.Locker locker = new RedisUtil.Locker(lockKey);
+ if (!locker.lock()) {
+ locks.forEach(RedisUtil.Locker::close);
return Result.fail("操作失败,请刷新后重试");
}
- locks.add(lockHelper);
+ locks.add(locker);
}
- lockHelperThreadLocal.set(locks);
+ lockerThreadLocal.set(locks);
return point.proceed();
}
@@ -66,10 +66,10 @@ public class LockAspect {
}
private void unlock() {
- ArrayList locks = lockHelperThreadLocal.get();
- if (!CollectionUtils.isEmpty(locks)) {
- locks.forEach(LockHelper::close);
- lockHelperThreadLocal.remove();
+ ArrayList locks = lockerThreadLocal.get();
+ if (locks != null) {
+ locks.forEach(RedisUtil.Locker::close);
+ lockerThreadLocal.remove();
}
}
}
diff --git a/java/src/main/java/com/toesbieya/my/config/FastJsonConfigFactory.java b/java/src/main/java/com/toesbieya/my/config/FastJsonConfigFactory.java
new file mode 100644
index 0000000..e32ed4e
--- /dev/null
+++ b/java/src/main/java/com/toesbieya/my/config/FastJsonConfigFactory.java
@@ -0,0 +1,19 @@
+package com.toesbieya.my.config;
+
+import com.alibaba.fastjson.serializer.SerializerFeature;
+import com.alibaba.fastjson.support.config.FastJsonConfig;
+
+public class FastJsonConfigFactory {
+ public static FastJsonConfig defaultConfig() {
+ FastJsonConfig config = new FastJsonConfig();
+
+ config.setSerializerFeatures(
+ SerializerFeature.WriteMapNullValue, // 是否输出值为null的字段
+ SerializerFeature.WriteDateUseDateFormat,
+ SerializerFeature.WriteNullListAsEmpty,
+ SerializerFeature.DisableCircularReferenceDetect // 禁用循环引用
+ );
+
+ return config;
+ }
+}
diff --git a/java/src/main/java/com/toesbieya/my/config/HttpSessionConfig.java b/java/src/main/java/com/toesbieya/my/config/HttpSessionConfig.java
deleted file mode 100644
index 906f0e5..0000000
--- a/java/src/main/java/com/toesbieya/my/config/HttpSessionConfig.java
+++ /dev/null
@@ -1,70 +0,0 @@
-package com.toesbieya.my.config;
-
-import com.alibaba.fastjson.JSON;
-import com.toesbieya.my.model.entity.SysUser;
-import com.toesbieya.my.module.SocketModule;
-import com.toesbieya.my.utils.Util;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.data.redis.serializer.RedisSerializer;
-import org.springframework.data.redis.serializer.SerializationException;
-import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;
-
-import javax.servlet.http.HttpSessionEvent;
-import javax.servlet.http.HttpSessionListener;
-import java.nio.charset.Charset;
-import java.nio.charset.StandardCharsets;
-
-@Configuration
-@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 28800)
-public class HttpSessionConfig {
- @Bean
- public HttpSessionListener httpSessionEventPublisher() {
- return new HttpSessionListener() {
- @Override
- public void sessionCreated(HttpSessionEvent se) {
- }
-
- @Override
- public void sessionDestroyed(HttpSessionEvent se) {
- SysUser user = Util.getUser(se.getSession());
- if (user != null) {
- SocketModule.logout(user.getId(), "登陆状态过期,请重新登陆");
- }
- }
- };
- }
-
- @Bean("springSessionDefaultRedisSerializer")
- public RedisSerializer