diff --git a/pom.xml b/pom.xml
index 2905927..4080af2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -95,7 +95,23 @@
test
+
+
+ com.google.zxing
+ core
+ 3.3.0
+
+
+ com.google.zxing
+ javase
+ 3.3.0
+
+
+ org.apache.ws.commons.axiom
+ base64-utils
+ 1.4.0
+
@@ -119,6 +135,17 @@
3.7.1
+
+
+ org.apache.poi
+ poi
+ 3.14
+
+
+ org.apache.poi
+ poi-ooxml
+ 3.14
+
diff --git a/sql/love-nav.sql b/sql/love-nav.sql
index c9cf510..a343611 100644
--- a/sql/love-nav.sql
+++ b/sql/love-nav.sql
@@ -11,7 +11,7 @@
Target Server Version : 80031 (8.0.31)
File Encoding : 65001
- Date: 21/12/2023 22:45:07
+ Date: 22/12/2023 15:44:57
*/
SET NAMES utf8mb4;
@@ -31,7 +31,7 @@ CREATE TABLE `ln_attachment` (
`width` double(10, 0) NULL DEFAULT NULL COMMENT '宽',
`height` double(10, 0) NULL DEFAULT NULL COMMENT '高',
`storage` enum('local','online') CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT 'local' COMMENT '保存地址 local=本地 ',
- `createtime` int NULL DEFAULT NULL COMMENT '创建时间',
+ `createtime` datetime NULL DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '附件表' ROW_FORMAT = DYNAMIC;
@@ -94,15 +94,17 @@ CREATE TABLE `ln_banners` (
DROP TABLE IF EXISTS `ln_collect_icon_list`;
CREATE TABLE `ln_collect_icon_list` (
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT,
- `url_md5` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '网址',
+ `url_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '网址id',
`icon_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '图片地址',
+ `qr_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '二维码地址',
+ `status` int NULL DEFAULT NULL COMMENT '状态',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '图标表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of ln_collect_icon_list
-- ----------------------------
-INSERT INTO `ln_collect_icon_list` VALUES (1, 'e315e839dcdd9ce3cc27ee972dd96060', '/upload/icon/2023/10/15/8a7520e1b1b13da7ec25bd872d75d5aa.jpeg');
+INSERT INTO `ln_collect_icon_list` VALUES (1, '1', '/upload/icon/2023/10/15/8a7520e1b1b13da7ec25bd872d75d5aa.jpeg', NULL, NULL);
-- ----------------------------
-- Table structure for ln_comment
@@ -131,19 +133,27 @@ CREATE TABLE `ln_comment` (
-- ----------------------------
DROP TABLE IF EXISTS `ln_config`;
CREATE TABLE `ln_config` (
- `id` int NOT NULL COMMENT 'id',
- `type` enum('string','image') CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT 'string' COMMENT '类型',
- `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '名称',
- `value` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL COMMENT '值',
- `updatetime` datetime NULL DEFAULT NULL COMMENT '更新时间',
- `file_id` int NULL DEFAULT NULL COMMENT '附件Id',
+ `id` int UNSIGNED NOT NULL AUTO_INCREMENT,
+ `type` enum('string','image') CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT 'string',
+ `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `value` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL,
+ `updatetime` int NULL DEFAULT NULL,
PRIMARY KEY (`id`, `name`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB AUTO_INCREMENT = 27 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '配置项' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of ln_config
-- ----------------------------
-INSERT INTO `ln_config` VALUES (16, 'string', 'configs', 'FPCNHBteMQQOJR%3DBxLdC-LOaVJCNiH8OHXwe5Jg9FJf-XPQCeMRZDI-FlauK1URYxLb--Y-mqIRJXBdOqXuNgRhtUCL2-YQyQPwFlHdGhXxe5CfB0O8G-KvS7Pe1QQOllSQitDARnIPSZc%3DKhKP5kC9SjTBSLLf9mI8C%3DZA6%3DISRhGbaqU%3DWAQ%3DlmHeeXK%3DegJRdPS--4TBe5HSpOJdKhUPehM-pXKuVrWQpgKQ92KPeHOeaaIBdHP-BnTOGJCSJzNua-LOaRKPxQKsOkRAqBRgQtLdaKTuaeM-xpBMaebgaJHfBmLdStTAKvKP5fBfWrWgawDPNpQ-yLPgmtORUyFd6hPQqMR-9tIb2GK-aQThNfGsOeUPSfGgQtIfOXPdagIBRsPNO6awWxLvhCK9OPRequRxdhQcukT-WsD%3DdQHPC-ZOuTOOs2RdeNZtCJCfRoNva-LOaVPetMGOGMRvGACQxQKPeHQuNXMQ5STcmKctG7H-NRItG7SfKgIC1GQMukWN9gUQRTDOyZPd6aIBRsPO-jTQyACQxxNuhmZuaQThNeL8ubWNCpRxxpDOiOUueZIBRsPNG7Xu-4MvNpIL2HTue7JP9hTMaoQApgTgRUCOOaZR1cIBRsPOFncxGKCSoyIcSlSeaQThNXGtOiU%3DW9Sh5DDL-WTfNaIBRsPNC7XxCKRRJWKMKPPutZTvVLPMaoQAqxUwIvBPePc-ZdIBc1PMm4QQaBLhZlNea-LOaSIO5WBcOmSd-9CPd3IeeCUue2Lu1XT8plLAW0CAxMKsSCbfFXE%3D9QTL6pTRe1UB5SCMiGUx2QJ%3DFDK8eJROK6MwRWIsCKcP-rRvJRPuGjWguODA0uO-yJKtWTJ-pPLMmKL-W7RvwvJcS-bfChMP9QTempTQe1JgNUP9GZPQW1J%3D82J9-6WdK0CPN3KuqLRfCSHOBUQf2BWOGsQ%3DZAHeqXKNZXMQJHOe-NRQuwQRlmLdC-aeaUUyBXBbWeRgaxJwBVLcyHKwmbKQ5CCNS6LAW4LgBQIMK%3DP%3DKhHRZTKsutTvKBJQ5oS%3D-HTf-sK-tlGtZoWd66H%3DBCJtKdRg-RKCFPB8eWWPGBL%3DdoJdOHPv6bLOpOB-GITBe5HQBAK71uZA6VGRteQN-AR96BLQFSIdeLZuZbKABsQ8plSOO9RBUtLOmKbg-tIQFRFr1oT%3DWBUvNmSuaPZ-NZOAFLSe-eQ9OwQhUxItGCZupXKRViGMtoSfKtJwNST%3DeIKgxcJgBHGdS6LBaIUQRWKtKPQ%3De6CBNTFr65R969KA8tKcuJTuexKQ82NO9mOAm0CwxuKOidag5ZRetXBdavTQuBQgNoCOmHK%3DexLxdpFsyJYvS9L-MtOOmcLw-tQi5QFtKvSOOpLAFVQ9WCTPe3PA5DJtdlUBe1Lw9pIL2GKOaQThNXGtOiU%3DW9Sh5DDLCPTeeNOAFLSe-eQ9OwRBJvKsO%3DWAG7LRNRKtetWOS5RfdrQvGWKNa-LwJXSN-4TBe5HhZ2NMO3KQ-UCyReBOWESfS9IA5DR%3DGDZO-SOQ9lLMy8ad2IH-93KsO3YQ6%3DIOpSL8erTReBSQ1pLdCYKwhaLhcySNOiRN-JR-ouNeu3TfGVIQNRH9eqWgqfKB0vCOaDZ9FaMOpDQdO7QOOwQCFmNr-LYwCUJRlVBt-rWeNgQAR2HLO-ZOagMOxCB8ugXxWIMvMuJdGDYfOQC%3DVKH9dmWd2xGfZUIb6XY96cJOplHdOMXxS5CRItKMODReusKCNMH9O8Sd2BCfhTQ%3D2OTuuvLQ5XJ9eJYt-4R-tNO7-sbw9aGCRWBfGlR%3DWtUx9UP76KTuesJBVwB--6UOyMLwRDNsRtK%3De8PiROK9e9X%3DW5JRtAHPC-ZP-dOfA2S9eML96wQRlmKuqLKfGqCCBSKcqvU%3DSbKBxEQ76ZP-OQLPFtKeCNTN61HgBvNOuHZwG%3DKPxWQ9-mTQq1KB1UHdeKUwmzIBN0PNeiMBOLHgB2L79mZw-VLBNMPMeGSRe1Kx9oBOaEPfOrMABDQd-JRPS1RwxVKsJuSA-tPxlTL9-MWOKwCxxBHcOOZwhaIQ5LGNCMXvaxLvhCKb-tP-aQThNeKsurWQlgShtVIb2-YQyQJg9lQeGMZum5Hi5GJsOLQvSsC%3D1PQPW5SOK8CA9UP9GWYgW9KOtHFe66SRG5CwxRHdGDP%3D68JP5OJtKvSOKtLB5mHPC-ZOuTMAJHPe67SROJCSJ3HOekY%3DCtKO9PL8eKT-KBMPgvS92LYhWUOA5DHtFnKAi-RvQyO-mZPv-8MQ5iQMuuTuOpDxtoO8KHKNa9PutlR9JmOPWILPxsKMKdUQKsRuBSBb6LUAmPRPlSD7KGT-tcLQBHJ-KLP9C5CwRWJOeZLPOULPxSGsKsUN2fIw9ET8yCZAGrMQ9xBNG6L%3DG2LgBQK76%3DT%3De8Ey5WBf2JSPOTUQBqKfCHP%3DepKexPGNeiLBW8IvRENsOZOf-tHRNJKdKsTgm1JQQuHemMYeOtLBRXRdChQOqIQepxJeu%3DS%3DFaSw9TQeW%3DQPG1HABET%3DOKYdWbO%3DBSCN6gbuS9HhJCKb2LS%3D5YGQ5hQ99oT-OxRQNTQ9SEP-O2MCRpJ8y6QNGMH-8vJveHSABaGSRTQdKvW-SxKw5TKdOLTPOZLPJXIsmJRPKJLgxCK72HavChPvJPB-WkRQuBKg4vId-IKN6xO-tLJ9e7OOaIQi5zK8ODbA-sUyReH-mGXwifCgFDHc-MTO-bKgBLIuG8Xwy2HQx1JemHLvCvJQthKtO8TvSBLB4uLd-LPgGPO-tDJdG8Xui0HABuIeqpS-e7JP9XQ8e6RvKLGg9ABMKLYdJYM-o2Jt5lPOW9Cu8tKtGdaOm-KQ5OPvSsTwifGh9TR7CJP-O0L-xhGtO9av-MHPxLJemCcwKSTwtPFr6eUN25Qg9rKdSZUwigMBZDQeKhQR2ACvRTLL2%3DS-aVCuc8', '2023-12-21 22:26:30', NULL);
+INSERT INTO `ln_config` VALUES (16, 'string', 'configs', 'FPCNHBteMQQOJR%3DBxLdC-LOaVJCNiH8OHXwe5Jg9FJf-XPQCeMRZDI-FlauK1URYxLb--Y-mqIRJXBdOqXuNgRhtUCL2-YQyQPwFlHdGhXxe5CfB0O8G-KvS7Pe1QQOllSQitDARnIPSZc%3DKhKP5kC9SjTBSLLf9mI8C%3DZA6%3DISRhGbaqU%3DWAQ%3DlmHeeXK%3DegJRdPS--4TBe5HSpOJdKhUPehM-pXKuVrWQpgKQ92KPeHOeaaIBdHP-BnTOGJCSJzNua-LOaRKPxQKsOkRAqBRgQtLdaKTuaeM-xpBMaebgaJHfBmLdStTAKvKP5fBfWrWgawDPNpQ-yLPgmtORUyFd6hPQqMR-9tIb2GK-aQThNfGsOeUPSfGgQtIfOXPdagIBRsPNO6awWxLvhCK9OPRequRxdhQcukT-WsD%3DdQHPC-ZOuTOOs2RdeNZtCJCfRoNva-LOaVPetMGOGMRvGACQxQKPeHQuNXMQ5STcmKctG7H-NRItG7SfKgIC1GQMukWN9gUQRTDOyZPd6aIBRsPO-jTQyACQxxNuhmZuaQThNeL8ubWNCpRxxpDOiOUueZIBRsPNG7Xu-4MvNpIL2HTue7JP9hTMaoQApgTgRUCOOaZR1cIBRsPOFncxGKCSoyIcSlSeaQThNXGtOiU%3DW9Sh5DDL-WTfNaIBRsPNC7XxCKRRJWKMKPPutZTvVLPMaoQAqxUwIvBPePc-ZdIBc1PMm4QQaBLhZlNea-LOaSIO5WBcOmSd-9CPd3IeeCUue2Lu1XT8plLAW0CAxMKsSCbfFXE%3D9QTL6pTRe1UB5SCMiGUx2QJ%3DFDK8eJROK6MwRWIsCKcP-rRvJRPuGjWguODA0uO-yJKtWTJ-pPLMmKL-W7RvwvJcS-bfChMP9QTempTQe1JgNUP9GZPQW1J%3D82J9-6WdK0CPN3KuqLRfCSHOBUQf2BWOGsQ%3DZAHeqXKNZXMQJHOe-NRQuwQRlmLdC-aeaUUyBXBbWeRgaxJwBVLcyHKwmbKQ5CCNS6LAW4LgBQIMK%3DP%3DKhHRZTKsutTvKBJQ5oS%3D-HTf-sK-tlGtZoWd66H%3DBCJtKdRg-RKCFPB8eWWPGBL%3DdoJdOHPv6bLOpOB-GITBe5HQBAK71uZA6VGRteQN-AR96BLQFSIdeLZuZbKABsQ8plSOO9RBUtLOmKbg-tIQFRFr1oT%3DWBUvNmSuaPZ-NZOAFLSe-eQ9OwQhUxItGCZupXKRViGMtoSfKtJwNST%3DeIKgxcJgBHGdS6LBaIUQRWKtKPQ%3De6CBNTFr65R969KA8tKcuJTuexKQ82NO9mOAm0CwxuKOidag5ZRetXBdavTQuBQgNoCOmHK%3DexLxdpFsyJYvS9L-MtOOmcLw-tQi5QFtKvSOOpLAFVQ9WCTPe3PA5DJtdlUBe1Lw9pIL2GKOaQThNXGtOiU%3DW9Sh5DDLCPTeeNOAFLSe-eQ9OwRBJvKsO%3DWAG7LRNRKtetWOS5RfdrQvGWKNa-LwJXSN-4TBe5HhZ2NMO3KQ-UCyReBOWESfS9IA5DR%3DGDZO-SOQ9lLMy8ad2IH-93KsO3YQ6%3DIOpSL8erTReBSQ1pLdCYKwhaLhcySNOiRN-JR-ouNeu3TfGVIQNRH9eqWgqfKB0vCOaDZ9FaMOpDQdO7QOOwQCFmNr-LYwCUJRlVBt-rWeNgQAR2HLO-ZOagMOxCB8ugXxWIMvMuJdGDYfOQC%3DVKH9dmWd2xGfZUIb6XY96cJOplHdOMXxS5CRItKMODReusKCNMH9O8Sd2BCfhTQ%3D2OTuuvLQ5XJ9eJYt-4R-tNO7-sbw9aGCRWBfGlR%3DWtUx9UP76KTuesJBVwB--6UOyMLwRDNsRtK%3De8PiROK9e9X%3DW5JRtAHPC-ZP-dOfA2S9eML96wQRlmKuqLKfGqCCBSKcqvU%3DSbKBxEQ76ZP-OQLPFtKeCNTN61HgBvNOuHZwG%3DKPxWQ9-mTQq1KB1UHdeKUwmzIBN0PNeiMBOLHgB2L79mZw-VLBNMPMeGSRe1Kx9oBOaEPfOrMABDQd-JRPS1RwxVKsJuSA-tPxlTL9-MWOKwCxxBHcOOZwhaIQ5LGNCMXvaxLvhCKb-tP-aQThNeKsurWQlgShtVIb2-YQyQJg9lQeGMZum5Hi5GJsOLQvSsC%3D1PQPW5SOK8CA9UP9GWYgW9KOtHFe66SRG5CwxRHdGDP%3D68JP5OJtKvSOKtLB5mHPC-ZOuTMAJHPe67SROJCSJ3HOekY%3DCtKO9PL8eKT-KBMPgvS92LYhWUOA5DHtFnKAi-RvQyO-mZPv-8MQ5iQMuuTuOpDxtoO8KHKNa9PutlR9JmOPWILPxsKMKdUQKsRuBSBb6LUAmPRPlSD7KGT-tcLQBHJ-KLP9C5CwRWJOeZLPOULPxSGsKsUN2fIw9ET8yCZAGrMQ9xBNG6L%3DG2LgBQK76%3DT%3De8Ey5WBf2JSPOTUQBqKfCHP%3DepKexPGNeiLBW8IvRENsOZOf-tHRNJKdKsTgm1JQQuHemMYeOtLBRXRdChQOqIQepxJeu%3DS%3DFaSw9TQeW%3DQPG1HABET%3DOKYdWbO%3DBSCN6gbuS9HhJCKb2LS%3D5YGQ5hQ99oT-OxRQNTQ9SEP-O2MCRpJ8y6QNGMH-8vJveHSABaGSRTQdKvW-SxKw5TKdOLTPOZLPJXIsmJRPKJLgxCK72HavChPvJPB-WkRQuBKg4vId-IKN6xO-tLJ9e7OOaIQi5zK8ODbA-sUyReH-mGXwifCgFDHc-MTO-bKgBLIuG8Xwy2HQx1JemHLvCvJQthKtO8TvSBLB4uLd-LPgGPO-tDJdG8Xui0HABuIeqpS-e7JP9XQ8e6RvKLGg9ABMKLYdJYM-o2Jt5lPOW9Cu8tKtGdaOm-KQ5OPvSsTwifGh9TR7CJP-O0L-xhGtO9av-MHPxLJemCcwKSTwtPFr6eUN25Qg9rKdSZUwigMBZDQeKhQR2ACvRTLL2%3DS-aVCuc8', 1701749449);
+INSERT INTO `ln_config` VALUES (18, 'string', 'auth_code', '289A02826C894278', 1700841147);
+INSERT INTO `ln_config` VALUES (19, 'string', 'email_password', 'ksuebkfenixhdbbh', 1700841147);
+INSERT INTO `ln_config` VALUES (20, 'string', 'email_sendEmail', 'landaiqing@qq.com', 1700841147);
+INSERT INTO `ln_config` VALUES (21, 'string', 'email_host', 'smtp.qq.com', 1700841147);
+INSERT INTO `ln_config` VALUES (22, 'string', 'email_username', 'landaiqing@qq.com', 1700841147);
+INSERT INTO `ln_config` VALUES (23, 'string', 'open_registed', 'true', 1700841147);
+INSERT INTO `ln_config` VALUES (24, 'string', 'open_login', 'true', 1700841147);
+INSERT INTO `ln_config` VALUES (25, 'string', 'newest_version', '38', 1701751306);
+INSERT INTO `ln_config` VALUES (26, 'string', 'last_apply_time', '1701751306', 1701751306);
-- ----------------------------
-- Table structure for ln_login_logs
@@ -223,7 +233,7 @@ DROP TABLE IF EXISTS `ln_url_cate_list`;
CREATE TABLE `ln_url_cate_list` (
`id` int UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '名称',
- `createtime` int NULL DEFAULT NULL COMMENT '创建时间',
+ `createtime` datetime NULL DEFAULT NULL COMMENT '创建时间',
`url_number` bigint NULL DEFAULT 0 COMMENT 'url 数量',
`weigh` bigint NULL DEFAULT NULL COMMENT '权重',
`status` tinyint NULL DEFAULT 1 COMMENT '状态',
@@ -252,7 +262,7 @@ CREATE TABLE `ln_url_list` (
`icon` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL COMMENT '网站图标',
`cate_id` int NULL DEFAULT 0 COMMENT '标签id',
`url` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL COMMENT 'url',
- `createtime` int NULL DEFAULT NULL COMMENT '创建时间',
+ `createtime` datetime NULL DEFAULT NULL COMMENT '创建时间',
`views` bigint NULL DEFAULT 0 COMMENT '访问数量',
`tags` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL COMMENT '标签',
`weigh` bigint NULL DEFAULT NULL COMMENT '权重',
@@ -262,7 +272,7 @@ CREATE TABLE `ln_url_list` (
`agent_hint` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '代理提示语',
`is_need_agent` tinyint NULL DEFAULT 0 COMMENT '是否需要代理 1需要0不需要',
`is_ad` tinyint NULL DEFAULT 0 COMMENT '是否广告1是0不是',
- `is_top` tinyint NULL DEFAULT 0 COMMENT '是否全局置顶1是0不是',
+ `is_top` tinyint(3) UNSIGNED ZEROFILL NULL DEFAULT 000 COMMENT '是否公开',
`is_encrypt` tinyint NULL DEFAULT NULL COMMENT '是否加密(1加密/0不加密)',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC;
diff --git a/src/main/java/com/lovenav/controller/AuthController.java b/src/main/java/com/lovenav/controller/AuthController.java
new file mode 100644
index 0000000..4e9c9f3
--- /dev/null
+++ b/src/main/java/com/lovenav/controller/AuthController.java
@@ -0,0 +1,30 @@
+package com.lovenav.controller;
+
+import com.alibaba.fastjson2.JSONObject;
+import com.lovenav.dao.AuthDao;
+import com.lovenav.entity.Auth;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.HashMap;
+import java.util.List;
+
+@RestController
+@RequestMapping("/Auth")
+public class AuthController {
+
+ @Autowired
+ AuthDao authDao;
+
+ @RequestMapping("/retAllAuth")
+ public String retAllAuth(){
+ List auths = authDao.selectAllAuth();
+ HashMap result = new HashMap<>();
+ result.put("code", 200);
+ result.put("msg", "查询结果");
+ result.put("data",auths);
+ String jsonString = JSONObject.toJSONString(result);
+ return jsonString;
+ }
+}
diff --git a/src/main/java/com/lovenav/controller/BannersController.java b/src/main/java/com/lovenav/controller/BannersController.java
new file mode 100644
index 0000000..2d6b1f8
--- /dev/null
+++ b/src/main/java/com/lovenav/controller/BannersController.java
@@ -0,0 +1,40 @@
+package com.lovenav.controller;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.lovenav.entity.Banners;
+import com.lovenav.service.BannersService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/banners")
+public class BannersController {
+ @Autowired
+ private BannersService bannersService;
+// 跳转链接
+@RequestMapping(method = RequestMethod.GET, value = "/jump_url")
+ public String jump(int id){
+ return bannersService.Jump_url(id);
+ }
+
+// 添加banner
+@RequestMapping(method = RequestMethod.POST, value = "/add_banner")
+ public String add(@RequestBody Banners banners){
+ return bannersService.Add_banner(banners);
+ }
+
+// 删除banner
+@RequestMapping(method = RequestMethod.GET, value = "/delete_url")
+ public String delete(int id){
+ return bannersService.Delete_banner(id);
+ }
+
+// 首页显示banner
+@RequestMapping(method = RequestMethod.GET, value = "/view_banner")
+ public String view(){
+ return bannersService.View_banner();
+ }
+}
diff --git a/src/main/java/com/lovenav/controller/CommentController.java b/src/main/java/com/lovenav/controller/CommentController.java
index 25ec517..5675743 100644
--- a/src/main/java/com/lovenav/controller/CommentController.java
+++ b/src/main/java/com/lovenav/controller/CommentController.java
@@ -21,15 +21,15 @@ public class CommentController {
@Autowired
private CommentService commentService;
// 评论功能
-@RequestMapping(method = RequestMethod.POST, value = "/reply_comment")
+@RequestMapping(method = RequestMethod.POST, value = "/comment")
public String Reply1(@RequestBody Comment comment){
return commentService.Reply1(comment);
}
// 回复功能
-@RequestMapping(method = RequestMethod.POST, value = "/comment")
- public String Reply2(@RequestBody Comment comment){
- return commentService.Reply2(comment);
+@RequestMapping(method = RequestMethod.POST, value = "/reply_comment")
+ public String Reply2(@RequestBody Comment comment,int id){
+ return commentService.Reply2(comment,id);
}
// 删除功能
@RequestMapping(method = RequestMethod.GET, value = "/delete_comment")
@@ -40,4 +40,16 @@ public class CommentController {
public String addLikeCount(int id){
return commentService.AddLikeCount(id);
}
+
+// 显示评论
+@RequestMapping(method = RequestMethod.GET, value = "/view_comment")
+ public String View_comment(){
+ return commentService.View_comment();
+ }
+
+// 显示回复
+@RequestMapping(method = RequestMethod.GET, value = "/view_reply")
+ public String View_reply(int id){
+ return commentService.View_Reply(id);
+ }
}
diff --git a/src/main/java/com/lovenav/controller/QRCodeController.java b/src/main/java/com/lovenav/controller/QRCodeController.java
new file mode 100644
index 0000000..5c4e0a7
--- /dev/null
+++ b/src/main/java/com/lovenav/controller/QRCodeController.java
@@ -0,0 +1,27 @@
+package com.lovenav.controller;
+
+import com.alibaba.fastjson.JSON;
+import com.lovenav.utils.QRCodeUtil;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+
+public class QRCodeController {
+ private QRCodeUtil qrCodeUtil;
+@RequestMapping(method = RequestMethod.GET, value = "/qrc")
+ public String QRCode(String url){
+ String text = url;
+ String logoPath ="src/main/resources/static/logo/NAV.png";
+ String destPath = "src/main/resources/static/qr";
+ try {
+ String url2 = qrCodeUtil.encode(text, logoPath, destPath, true);
+ String base64 = qrCodeUtil.getBase64(url2);
+ return JSON.toJSONString(base64);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+}
diff --git a/src/main/java/com/lovenav/controller/SearchController.java b/src/main/java/com/lovenav/controller/SearchController.java
index 51158fe..61b85b4 100644
--- a/src/main/java/com/lovenav/controller/SearchController.java
+++ b/src/main/java/com/lovenav/controller/SearchController.java
@@ -13,6 +13,7 @@ import org.springframework.web.bind.annotation.RestController;
import java.io.IOException;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
@RestController
@@ -42,6 +43,7 @@ public class SearchController {
redisService.addSearchHistoryByUserId(userId, searchKey);
+ redisService.incrementScoreByUserId(searchKey);
redisService.incrementScore(searchKey);
//返回网站数据
@@ -67,15 +69,41 @@ public class SearchController {
@RequestMapping("/getSearchHistoryByUserId")
public String getSearchHistoryByUserId(String userId)
{
- String res = "123";
- return res;
+ List stringList = redisService.getSearchHistoryByUserId(userId);
+ HashMap result = new HashMap<>();
+ result.put("code", 200);
+ result.put("msg", "查询成功");
+ result.put("data",stringList);
+ String jsonString = JSONObject.toJSONString(result);
+
+ return jsonString;
}
/**
* 删除个人历史数据
*/
@RequestMapping("/delSearchHistoryByUserId")
public String delSearchHistoryByUserId(String userId, String searchKey){
- String res = "123";
- return res;
+ Long f = redisService.delSearchHistoryByUserId(userId,searchKey);
+ HashMap result = new HashMap<>();
+ result.put("code", 200);
+ result.put("msg", "删除结果");
+ result.put("data",f);
+ String jsonString = JSONObject.toJSONString(result);
+
+ return jsonString;
+ }
+ /**
+ * 根据searchKey搜索其相关最热的前十名 (如果searchKey为null空,则返回redis存储的前十最热词条)
+ */
+ @RequestMapping("/getHotList")
+ public String getHotList(String searchKey){
+ List stringList = redisService.getHotList(searchKey);
+ HashMap result = new HashMap<>();
+ result.put("code", 200);
+ result.put("msg", "查询结果");
+ result.put("data",stringList);
+ String jsonString = JSONObject.toJSONString(result);
+
+ return jsonString;
}
}
diff --git a/src/main/java/com/lovenav/controller/UrlAndCateController.java b/src/main/java/com/lovenav/controller/UrlAndCateController.java
index 471091f..336cc33 100644
--- a/src/main/java/com/lovenav/controller/UrlAndCateController.java
+++ b/src/main/java/com/lovenav/controller/UrlAndCateController.java
@@ -1,5 +1,7 @@
package com.lovenav.controller;
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
@@ -10,15 +12,20 @@ import com.lovenav.entity.UrlList;
import com.lovenav.service.UrlCateListService;
import com.lovenav.service.UrlListService;
import com.lovenav.vo.CateAndUrl;
+import org.apache.poi.hssf.usermodel.HSSFCell;
+import org.apache.poi.hssf.usermodel.HSSFRow;
+import org.apache.poi.hssf.usermodel.HSSFSheet;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.*;
+import java.io.*;
@RestController
@RequestMapping("/UrlAndCate")
public class UrlAndCateController {
@@ -43,6 +50,7 @@ public class UrlAndCateController {
try {
JsonNode rootNode = objectMapper.readTree(data2);
disposeBookmarkFunction1(rootNode,"top",email);
+ countCateContainUrlNumber(email);
HashMap result = new HashMap<>();
result.put("code", 200);
result.put("msg", "查询成功");
@@ -80,9 +88,9 @@ public class UrlAndCateController {
//处理成JSON
@RequestMapping("/disposeBookmarkToJson")
- public String disposeBookmarkToJson(Integer userId)
+ public String disposeBookmarkToJson(String userId)
{
- List urlCateLists = urlCateListService.selectUrListByUserId(userId);
+ List urlCateLists = urlCateListService.selectUrListByUserId(Integer.valueOf(userId));
List urlLists = urlListService.selectUrList();
List cateAndUrlList = new ArrayList<>();
@@ -185,4 +193,90 @@ public class UrlAndCateController {
String jsonString = JSONObject.toJSONString(result);
return jsonString;
}
+
+
+ public String countCateContainUrlNumber(String email){
+ HashMap result = new HashMap<>();
+ result.put("code", 200);
+ result.put("msg", "查询成功");
+ result.put("data",urlCateListService.countCateContainUrlNumber(email));
+ String jsonString = JSONObject.toJSONString(result);
+ return jsonString;
+ }
+ //处理成JSON
+// @RequestMapping("/disposeJsonToExcel")
+// public String disposeJsonToExcel(String userId)
+// {
+//
+// HashMap result = new HashMap<>();
+// result.put("code", 200);
+// result.put("msg", "查询成功");
+// result.put("data",urlCateListService.getUrl(userId));
+// String jsonString = JSONObject.toJSONString(result);
+// return jsonString;
+// }
+
+ /**
+ * json 转 excel
+ * @param jsonArray
+ * @return
+ * @throws IOException
+ */
+ public HSSFWorkbook jsonToExcel(JSONArray jsonArray) throws IOException {
+ Set keys = new HashSet<>();
+ // 创建HSSFWorkbook对象
+ HSSFWorkbook wb = new HSSFWorkbook();
+ // 创建HSSFSheet对象
+ HSSFSheet sheet = wb.createSheet("sheet0");
+
+
+ List jsonObjects = jsonArray.toList(JSONObject.class);
+
+ // 创建HSSFRow对象
+ HSSFRow row ;
+ for (int i=0;i result = new HashMap<>();
+ result.put("code", 500);
+ result.put("msg", "下载失败");
+
+ return JSON.toJSONString(result);
+ }
+ }
}
diff --git a/src/main/java/com/lovenav/dao/AuthDao.java b/src/main/java/com/lovenav/dao/AuthDao.java
index 28164ac..cc80296 100644
--- a/src/main/java/com/lovenav/dao/AuthDao.java
+++ b/src/main/java/com/lovenav/dao/AuthDao.java
@@ -1,9 +1,13 @@
package com.lovenav.dao;
import com.lovenav.entity.Auth;
+import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
+import java.util.List;
+
@Repository
+@Mapper
public interface AuthDao {
int deleteByPrimaryKey(Integer id);
@@ -16,4 +20,6 @@ public interface AuthDao {
int updateByPrimaryKeySelective(Auth record);
int updateByPrimaryKey(Auth record);
+
+ List selectAllAuth();
}
\ No newline at end of file
diff --git a/src/main/java/com/lovenav/dao/BannersDao.java b/src/main/java/com/lovenav/dao/BannersDao.java
index e25ea57..a3af52b 100644
--- a/src/main/java/com/lovenav/dao/BannersDao.java
+++ b/src/main/java/com/lovenav/dao/BannersDao.java
@@ -1,9 +1,13 @@
package com.lovenav.dao;
import com.lovenav.entity.Banners;
+import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
+import java.util.List;
+
@Repository
+@Mapper
public interface BannersDao {
int deleteByPrimaryKey(Integer id);
@@ -16,4 +20,6 @@ public interface BannersDao {
int updateByPrimaryKeySelective(Banners record);
int updateByPrimaryKey(Banners record);
+
+ List selectByAllBanners();
}
\ No newline at end of file
diff --git a/src/main/java/com/lovenav/dao/CollectIconListDao.java b/src/main/java/com/lovenav/dao/CollectIconListDao.java
index c9bc5ff..8b25ea7 100644
--- a/src/main/java/com/lovenav/dao/CollectIconListDao.java
+++ b/src/main/java/com/lovenav/dao/CollectIconListDao.java
@@ -2,7 +2,7 @@ package com.lovenav.dao;
import com.lovenav.entity.CollectIconList;
import org.springframework.stereotype.Repository;
-
+//dao
@Repository
public interface CollectIconListDao {
int deleteByPrimaryKey(Long id);
diff --git a/src/main/java/com/lovenav/dao/CommentDao.java b/src/main/java/com/lovenav/dao/CommentDao.java
index ea08fd0..0c3cfe6 100644
--- a/src/main/java/com/lovenav/dao/CommentDao.java
+++ b/src/main/java/com/lovenav/dao/CommentDao.java
@@ -22,5 +22,7 @@ public interface CommentDao {
int updateByPrimaryKey(Comment record);
- List selectByRootId(Integer rootid);
+ List selectByAllComment();
+
+ List selectByAllReply(int id);
}
\ No newline at end of file
diff --git a/src/main/java/com/lovenav/entity/Banners.java b/src/main/java/com/lovenav/entity/Banners.java
index 3dcf753..145d01d 100644
--- a/src/main/java/com/lovenav/entity/Banners.java
+++ b/src/main/java/com/lovenav/entity/Banners.java
@@ -2,6 +2,9 @@ package com.lovenav.entity;
import java.io.Serializable;
import java.util.Date;
+
+import com.alibaba.fastjson2.annotation.JSONField;
+import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
/**
@@ -9,6 +12,57 @@ import lombok.Data;
*/
@Data
public class Banners implements Serializable {
+ public Banners(){
+ this.bannerStatus = 0;
+ }
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getImgUrl() {
+ return imgUrl;
+ }
+
+ public void setImgUrl(String imgUrl) {
+ this.imgUrl = imgUrl;
+ }
+
+ public Integer getWeigh() {
+ return weigh;
+ }
+
+ public void setWeigh(Integer weigh) {
+ this.weigh = weigh;
+ }
+
+ public String getUrl() {
+ return url;
+ }
+
+ public void setUrl(String url) {
+ this.url = url;
+ }
+
+ public Byte getBannerStatus() {
+ return bannerStatus;
+ }
+
+ public void setBannerStatus(Byte bannerStatus) {
+ this.bannerStatus = bannerStatus;
+ }
+
+ public Date getCreatetime() {
+ return createtime;
+ }
+
+ public void setCreatetime(Date createtime) {
+ this.createtime = createtime;
+ }
+
/**
* id
*/
diff --git a/src/main/java/com/lovenav/entity/CollectIconList.java b/src/main/java/com/lovenav/entity/CollectIconList.java
index 79cf1a1..b140c2d 100644
--- a/src/main/java/com/lovenav/entity/CollectIconList.java
+++ b/src/main/java/com/lovenav/entity/CollectIconList.java
@@ -4,6 +4,7 @@ import java.io.Serializable;
import lombok.Data;
/**
+ * Entity
* 图标表
* ln_collect_icon_list
*/
@@ -12,14 +13,71 @@ public class CollectIconList implements Serializable {
private Long id;
/**
- * 网址
+ * 网址id
*/
- private String urlMd5;
+ private String url_id;
/**
* 图片地址
*/
- private String iconUrl;
+ private String icon_url;
+
+ /**
+ * 二维码地址
+ */
+ private String qr_url;
+
+ /**
+ * 状态
+ */
+ private Integer status;
private static final long serialVersionUID = 1L;
+
+ @Override
+ public boolean equals(Object that) {
+ if (this == that) {
+ return true;
+ }
+ if (that == null) {
+ return false;
+ }
+ if (getClass() != that.getClass()) {
+ return false;
+ }
+ CollectIconList other = (CollectIconList) that;
+ return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId()))
+ && (this.getUrl_id() == null ? other.getUrl_id() == null : this.getUrl_id().equals(other.getUrl_id()))
+ && (this.getIcon_url() == null ? other.getIcon_url() == null : this.getIcon_url().equals(other.getIcon_url()))
+ && (this.getQr_url() == null ? other.getQr_url() == null : this.getQr_url().equals(other.getQr_url()))
+ && (this.getStatus() == null ? other.getStatus() == null : this.getStatus().equals(other.getStatus()));
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((getId() == null) ? 0 : getId().hashCode());
+ result = prime * result + ((getUrl_id() == null) ? 0 : getUrl_id().hashCode());
+ result = prime * result + ((getIcon_url() == null) ? 0 : getIcon_url().hashCode());
+ result = prime * result + ((getQr_url() == null) ? 0 : getQr_url().hashCode());
+ result = prime * result + ((getStatus() == null) ? 0 : getStatus().hashCode());
+ return result;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append(getClass().getSimpleName());
+ sb.append(" [");
+ sb.append("Hash = ").append(hashCode());
+ sb.append(", id=").append(id);
+ sb.append(", url_id=").append(url_id);
+ sb.append(", icon_url=").append(icon_url);
+ sb.append(", qr_url=").append(qr_url);
+ sb.append(", status=").append(status);
+ sb.append(", serialVersionUID=").append(serialVersionUID);
+ sb.append("]");
+ return sb.toString();
+ }
}
\ No newline at end of file
diff --git a/src/main/java/com/lovenav/service/BannersService.java b/src/main/java/com/lovenav/service/BannersService.java
new file mode 100644
index 0000000..47c1c83
--- /dev/null
+++ b/src/main/java/com/lovenav/service/BannersService.java
@@ -0,0 +1,14 @@
+package com.lovenav.service;
+
+import com.lovenav.entity.Banners;
+
+public interface BannersService {
+// 跳转链接
+ String Jump_url(int id);
+// 添加banner
+ String Add_banner(Banners banners);
+// 删除banner
+ String Delete_banner(int id);
+// 展示banner
+ String View_banner();
+}
diff --git a/src/main/java/com/lovenav/service/CommentService.java b/src/main/java/com/lovenav/service/CommentService.java
index e142955..5d5d04b 100644
--- a/src/main/java/com/lovenav/service/CommentService.java
+++ b/src/main/java/com/lovenav/service/CommentService.java
@@ -10,7 +10,11 @@ public interface CommentService {
// 评论
String Reply1(Comment comment);
// 回复
- String Reply2(Comment comment);
+ String Reply2(Comment comment,int id);
// 删除
String Delete(int id);
+// 显示评论
+ String View_comment();
+// 显示回复
+ String View_Reply(int id);
}
diff --git a/src/main/java/com/lovenav/service/UrlCateListService.java b/src/main/java/com/lovenav/service/UrlCateListService.java
index ca15be5..dab045b 100644
--- a/src/main/java/com/lovenav/service/UrlCateListService.java
+++ b/src/main/java/com/lovenav/service/UrlCateListService.java
@@ -1,5 +1,6 @@
package com.lovenav.service;
+import com.alibaba.fastjson2.JSONArray;
import com.lovenav.entity.UrlCateList;
import java.util.List;
@@ -9,4 +10,8 @@ public interface UrlCateListService {
public int selectAndInsertUrlCate(String email , String cateName , String parent);
public List selectUrListByUserId(Integer userId);
+
+ public String countCateContainUrlNumber(String userId);
+
+ public JSONArray getUrl(String userId);
}
diff --git a/src/main/java/com/lovenav/service/serviceImpl/BannersServiceImpl.java b/src/main/java/com/lovenav/service/serviceImpl/BannersServiceImpl.java
new file mode 100644
index 0000000..a79bc4e
--- /dev/null
+++ b/src/main/java/com/lovenav/service/serviceImpl/BannersServiceImpl.java
@@ -0,0 +1,67 @@
+package com.lovenav.service.serviceImpl;
+
+import com.alibaba.fastjson.JSON;
+import com.lovenav.dao.BannersDao;
+import com.lovenav.entity.Banners;
+import com.lovenav.service.BannersService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import java.util.List;
+import java.util.HashMap;
+
+@Service
+public class BannersServiceImpl implements BannersService {
+ @Autowired
+ private BannersDao bannersDao;
+
+// 跳转链接
+ @Override
+ public String Jump_url(int id){
+ Banners banners = bannersDao.selectByPrimaryKey(id);
+ HashMap hashMap = new HashMap<>();
+ if(banners != null){
+ hashMap.put("url",banners.getUrl());
+ }else{
+ hashMap.put("code",500);
+ hashMap.put("msg","找不到指定链接");
+ }
+ return JSON.toJSONString(hashMap);
+ }
+
+// 添加banner
+ @Override
+ public String Add_banner(Banners banners) {
+ int result = bannersDao.insert(banners);
+ HashMap hashMap = new HashMap<>();
+ if(result>0){
+ return JSON.toJSONString(banners);
+ }else{
+ hashMap.put("code",500);
+ hashMap.put("msg","添加banner失败");
+ return JSON.toJSONString(hashMap);
+ }
+ }
+
+// 删除banner
+ @Override
+ public String Delete_banner(int id){
+ int result = bannersDao.deleteByPrimaryKey(id);
+ HashMap hashMap = new HashMap<>();
+ if(result>0){
+ hashMap.put("code",200);
+ hashMap.put("msg","删除成功");
+ return JSON.toJSONString(hashMap);
+ }else{
+ hashMap.put("code",500);
+ hashMap.put("msg","删除失败");
+ return JSON.toJSONString(hashMap);
+ }
+ }
+
+// 展示banner
+ @Override
+ public String View_banner(){
+ List list = bannersDao.selectByAllBanners();
+ return JSON.toJSONString(list);
+ }
+}
diff --git a/src/main/java/com/lovenav/service/serviceImpl/CommentServiceImpl.java b/src/main/java/com/lovenav/service/serviceImpl/CommentServiceImpl.java
index c75654c..9b07f99 100644
--- a/src/main/java/com/lovenav/service/serviceImpl/CommentServiceImpl.java
+++ b/src/main/java/com/lovenav/service/serviceImpl/CommentServiceImpl.java
@@ -3,6 +3,7 @@ package com.lovenav.service.serviceImpl;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.lovenav.dao.CommentDao;
+import com.lovenav.dao.UserDao;
import com.lovenav.entity.Comment;
import com.lovenav.service.CommentService;
import org.apache.ibatis.jdbc.Null;
@@ -13,10 +14,12 @@ import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.List;
-@Service("commentService")
+@Service
public class CommentServiceImpl implements CommentService {
@Autowired
private CommentDao commentDao;
+ @Autowired
+ private UserDao userDao;
// 评论功能
@Override
public String Reply1(Comment comment){
@@ -32,18 +35,11 @@ public class CommentServiceImpl implements CommentService {
}
// 回复功能
@Override
- public String Reply2(Comment comment){
- List list = commentDao.selectByRootId(comment.getRootCommentId());
- if(list.size()<5){
- commentDao.insert(comment);
- return JSON.toJSONString(comment);
- }else{
- HashMap result = new HashMap<>();
- result.put("code", 500);
- result.put("msg", "回复超过上限");
- String jsonString = JSONObject.toJSONString(result);
- return JSON.toJSONString(result);
- }
+ public String Reply2(Comment comment,int id){
+ String name = (userDao.selectByPrimaryKey(id)).getNickname();
+ HashMap hashMap = new HashMap<>();
+ hashMap.put(comment, name);
+ return JSON.toJSONString(hashMap);
}
// 删除
@Override
@@ -67,7 +63,19 @@ public class CommentServiceImpl implements CommentService {
comment.setLikeCount(comment.getLikeCount()+1);
commentDao.updateByPrimaryKeySelective(comment);
HashMap hashMap = new HashMap<>();
- hashMap.put("点赞成功:",comment.getLikeCount());
+ hashMap.put("点赞成功",comment.getLikeCount());
return JSON.toJSONString(hashMap);
}
+
+// 显示评论
+ public String View_comment(){
+ List list = commentDao.selectByAllComment();
+ return JSON.toJSONString(list);
+ }
+
+// 显示回复
+ public String View_Reply(int id){
+ List list = commentDao.selectByAllReply(id);
+ return JSON.toJSONString(list);
+ }
}
diff --git a/src/main/java/com/lovenav/service/serviceImpl/UrlCateListServiceImpl.java b/src/main/java/com/lovenav/service/serviceImpl/UrlCateListServiceImpl.java
index 0219efc..a43ce10 100644
--- a/src/main/java/com/lovenav/service/serviceImpl/UrlCateListServiceImpl.java
+++ b/src/main/java/com/lovenav/service/serviceImpl/UrlCateListServiceImpl.java
@@ -1,16 +1,19 @@
package com.lovenav.service.serviceImpl;
+import com.alibaba.fastjson2.JSONArray;
+import com.alibaba.fastjson2.JSONObject;
import com.lovenav.dao.UrlCateListDao;
+import com.lovenav.dao.UrlListDao;
import com.lovenav.dao.UserDao;
import com.lovenav.entity.UrlCateList;
+import com.lovenav.entity.UrlList;
import com.lovenav.entity.User;
import com.lovenav.service.UrlCateListService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
@Transactional
@Service("urlCateListService")
@@ -20,7 +23,8 @@ public class UrlCateListServiceImpl implements UrlCateListService {
@Autowired
UrlCateListDao urlCateListDao;
-
+ @Autowired
+ UrlListDao urlListDao;
@Autowired
UserDao userDao;
public int selectAndInsertUrlCate(String email , String cateName , String parent )
@@ -53,4 +57,75 @@ public class UrlCateListServiceImpl implements UrlCateListService {
public List selectUrListByUserId(Integer userId){
return urlCateListDao.selectUrListByUserId(userId);
}
+
+
+
+ public String countCateContainUrlNumber(String email){
+ User user = userDao.selectByEmail(email);
+ int userId = user.getId();
+ List urlCateLists =urlCateListDao.selectUrListByUserId(userId);
+ List urlLists = urlListDao.selectUrList();
+ HashMap CateNumber = new HashMap<>();
+
+ for(UrlCateList urlCateList :urlCateLists)
+ {
+ CateNumber.put(urlCateList.getName(),0);
+ }
+ for(UrlList urlList : urlLists){
+ Long id = Long.valueOf(urlList.getCateId());
+
+ while(id!= 0)
+ {
+ for(UrlCateList urlCateList :urlCateLists)
+ {
+ if(id == Long.valueOf(urlCateList.getId())){
+ int cateNum = CateNumber.get(urlCateList.getName())+1;
+ CateNumber.put(urlCateList.getName(),cateNum);
+ id=Long.valueOf(urlCateList.getRootCateId());
+ break;
+ }
+ }
+ }
+
+
+
+ }
+ Iterator iterator = CateNumber.entrySet().iterator();
+ while(iterator.hasNext()) {
+ Map.Entry entry=(Map.Entry) iterator.next();
+ for(int i = 0; i urlCateLists =urlCateListDao.selectUrListByUserId(Integer.valueOf(userId));
+ List urlLists = urlListDao.selectUrList();
+ JSONArray jsonArray = new JSONArray();
+ for(UrlCateList urlCateList : urlCateLists)
+ {
+ int parentId = urlCateList.getId();
+ for(UrlList urlList : urlLists)
+ {
+ if(urlList.getCateId() == parentId)
+ {
+ JSONObject jsonObject = new JSONObject();
+ jsonObject.put(urlList.getName(),urlList.getUrl());
+ jsonArray.add(jsonObject);
+ break;
+ }
+ }
+ }
+ return jsonArray;
+ }
}
diff --git a/src/main/java/com/lovenav/utils/QRCodeUtil.java b/src/main/java/com/lovenav/utils/QRCodeUtil.java
new file mode 100644
index 0000000..05e9330
--- /dev/null
+++ b/src/main/java/com/lovenav/utils/QRCodeUtil.java
@@ -0,0 +1,374 @@
+package com.lovenav.utils;
+
+import com.google.zxing.*;
+import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
+import com.google.zxing.common.BitMatrix;
+import com.google.zxing.common.HybridBinarizer;
+import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
+import org.apache.tomcat.util.codec.binary.Base64;
+
+
+import javax.imageio.ImageIO;
+import java.awt.*;
+import java.awt.geom.RoundRectangle2D;
+import java.awt.image.BufferedImage;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.HashMap;
+import java.util.Hashtable;
+import java.util.Map;
+import java.util.Random;
+
+
+public class QRCodeUtil {
+ private static final String CHARSET = "utf-8";
+ private static final String FORMAT_NAME = "JPG";
+ // 二维码尺寸
+ private static final int QRCODE_SIZE = 300;
+ // LOGO宽度
+ private static final int WIDTH = 60;
+ // LOGO高度
+ private static final int HEIGHT = 60;
+
+ private static BufferedImage createImage(String content, String imgPath,
+ boolean needCompress) throws Exception {
+ Hashtable hints = new Hashtable();
+ hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
+ hints.put(EncodeHintType.CHARACTER_SET, CHARSET);
+ hints.put(EncodeHintType.MARGIN, 1);
+ BitMatrix bitMatrix = new MultiFormatWriter().encode(content,
+ BarcodeFormat.QR_CODE, QRCODE_SIZE, QRCODE_SIZE, hints);
+ int width = bitMatrix.getWidth();
+ int height = bitMatrix.getHeight();
+ BufferedImage image = new BufferedImage(width, height,
+ BufferedImage.TYPE_INT_RGB);
+ for (int x = 0; x < width; x++) {
+ for (int y = 0; y < height; y++) {
+ image.setRGB(x, y, bitMatrix.get(x, y) ? 0xFF000000
+ : 0xFFFFFFFF);
+ }
+ }
+ if (imgPath == null || "".equals(imgPath)) {
+ return image;
+ }
+ // 插入图片
+ QRCodeUtil.insertImage(image, imgPath, needCompress);
+ return image;
+ }
+
+ /**
+ * 插入LOGO
+ *
+ * @param source
+ * 二维码图片
+ * @param imgPath
+ * LOGO图片地址
+ * @param needCompress
+ * 是否压缩
+ * @throws Exception
+ */
+ private static void insertImage(BufferedImage source, String imgPath,
+ boolean needCompress) throws Exception {
+ File file = new File(imgPath);
+ if (!file.exists()) {
+ System.err.println(""+imgPath+" 该文件不存在!");
+ return;
+ }
+ Image src = ImageIO.read(new File(imgPath));
+ int width = src.getWidth(null);
+ int height = src.getHeight(null);
+ if (needCompress) { // 压缩LOGO
+ if (width > WIDTH) {
+ width = WIDTH;
+ }
+ if (height > HEIGHT) {
+ height = HEIGHT;
+ }
+ Image image = src.getScaledInstance(width, height,
+ Image.SCALE_SMOOTH);
+ BufferedImage tag = new BufferedImage(width, height,
+ BufferedImage.TYPE_INT_RGB);
+ Graphics g = tag.getGraphics();
+ g.drawImage(image, 0, 0, null); // 绘制缩小后的图
+ g.dispose();
+ src = image;
+ }
+ // 插入LOGO
+ Graphics2D graph = source.createGraphics();
+ int x = (QRCODE_SIZE - width) / 2;
+ int y = (QRCODE_SIZE - height) / 2;
+ graph.drawImage(src, x, y, width, height, null);
+ Shape shape = new RoundRectangle2D.Float(x, y, width, width, 6, 6);
+ graph.setStroke(new BasicStroke(3f));
+ graph.draw(shape);
+ graph.dispose();
+ }
+
+ /**
+ * 生成二维码(内嵌LOGO)
+ *
+ * @param content
+ * 内容
+ * @param imgPath
+ * LOGO地址
+ * @param destPath
+ * 存放目录
+ * @param needCompress
+ * 是否压缩LOGO
+ * @throws Exception
+ */
+ public static String encode(String content, String imgPath, String destPath,
+ boolean needCompress) throws Exception {
+ BufferedImage image = QRCodeUtil.createImage(content, imgPath,
+ needCompress);
+ mkdirs(destPath);
+ String file = new Random().nextInt(99999999)+".jpg";
+ ImageIO.write(image, FORMAT_NAME, new File(destPath+"/"+file));
+ return destPath+"/"+file;
+ }
+
+ /**
+ * 当文件夹不存在时,mkdirs会自动创建多层目录,区别于mkdir.(mkdir如果父目录不存在则会抛出异常)
+ * @param destPath 存放目录
+ */
+ public static void mkdirs(String destPath) {
+ File file =new File(destPath);
+ //当文件夹不存在时,mkdirs会自动创建多层目录,区别于mkdir.(mkdir如果父目录不存在则会抛出异常)
+ if (!file.exists() && !file.isDirectory()) {
+ file.mkdirs();
+ }
+ }
+
+ /**
+ * 生成二维码(内嵌LOGO)
+ *
+ * @param content
+ * 内容
+ * @param imgPath
+ * LOGO地址
+ * @param destPath
+ * 存储地址
+ * @throws Exception
+ */
+ public static void encode(String content, String imgPath, String destPath)
+ throws Exception {
+ QRCodeUtil.encode(content, imgPath, destPath, false);
+ }
+
+ /**
+ * 生成二维码
+ *
+ * @param content
+ * 内容
+ * @param destPath
+ * 存储地址
+ * @param needCompress
+ * 是否压缩LOGO
+ * @throws Exception
+ */
+ public static void encode(String content, String destPath,
+ boolean needCompress) throws Exception {
+ QRCodeUtil.encode(content, null, destPath, needCompress);
+ }
+
+ /**
+ * 生成二维码
+ *
+ * @param content
+ * 内容
+ * @param destPath
+ * 存储地址
+ * @throws Exception
+ */
+ public static void encode(String content, String destPath) throws Exception {
+ QRCodeUtil.encode(content, null, destPath, false);
+ }
+
+ /**
+ * 生成二维码(内嵌LOGO)
+ *
+ * @param content
+ * 内容
+ * @param imgPath
+ * LOGO地址
+ * @param output
+ * 输出流
+ * @param needCompress
+ * 是否压缩LOGO
+ * @throws Exception
+ */
+ public static void encode(String content, String imgPath,
+ OutputStream output, boolean needCompress) throws Exception {
+ BufferedImage image = QRCodeUtil.createImage(content, imgPath,
+ needCompress);
+ ImageIO.write(image, FORMAT_NAME, output);
+ }
+
+ /**
+ * 生成二维码
+ *
+ * @param content
+ * 内容
+ * @param output
+ * 输出流
+ * @throws Exception
+ */
+ public static void encode(String content, OutputStream output)
+ throws Exception {
+ QRCodeUtil.encode(content, null, output, false);
+ }
+
+ /**
+ * 解析二维码
+ *
+ * @param file
+ * 二维码图片
+ * @return
+ * @throws Exception
+ */
+ public static String decode(File file) throws Exception {
+ BufferedImage image;
+ image = ImageIO.read(file);
+ if (image == null) {
+ return null;
+ }
+ BufferedImageLuminanceSource source = new BufferedImageLuminanceSource(
+ image);
+ BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
+ Result result;
+ Hashtable hints = new Hashtable();
+ hints.put(DecodeHintType.CHARACTER_SET, CHARSET);
+ result = new MultiFormatReader().decode(bitmap, hints);
+ String resultStr = result.getText();
+ return resultStr;
+ }
+
+ /**
+ * 解析二维码
+ *
+ * @param path
+ * 二维码图片地址
+ * @return
+ * @throws Exception
+ */
+ public static String decode(String path) throws Exception {
+ return QRCodeUtil.decode(new File(path));
+ }
+
+ /**
+ *
+ * @param content
+ * @param imgPath
+ * @param destPath
+ * @param localUrl 当前环境的域名或者ip地址
+ * @param needCompress
+ * @return
+ * @throws Exception
+ */
+ public static String encode(String content, String imgPath, String destPath,String localUrl,
+ boolean needCompress) throws Exception {
+ BufferedImage image = QRCodeUtil.createImage(content, imgPath,
+ needCompress);
+ mkdirs(destPath);
+ String file = new Random().nextInt(99999999)+".jpg";
+ ImageIO.write(image, FORMAT_NAME, new File(destPath+"/"+file));
+ return localUrl+file;
+ }
+
+ public static String encodeDZ(String content, String imgPath, String destPath,String localUrl,int length,int width,
+ boolean needCompress) throws Exception {
+ BufferedImage image = QRCodeUtil.createImageDZ(content, imgPath,length,width,
+ needCompress);
+ mkdirs(destPath);
+ String file = new Random().nextInt(99999999)+".jpg";
+ ImageIO.write(image, FORMAT_NAME, new File(destPath+"/"+file));
+ return localUrl+file;
+ }
+
+ private static BufferedImage createImageDZ(String content, String imgPath,int newlength,int newWidth,
+ boolean needCompress) throws Exception {
+ Hashtable hints = new Hashtable();
+ hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
+ hints.put(EncodeHintType.CHARACTER_SET, CHARSET);
+ hints.put(EncodeHintType.MARGIN, 1);
+ BitMatrix bitMatrix = new MultiFormatWriter().encode(content,
+ BarcodeFormat.QR_CODE, newlength, newWidth, hints);
+ int width = bitMatrix.getWidth();
+ int height = bitMatrix.getHeight();
+ BufferedImage image = new BufferedImage(width, height,
+ BufferedImage.TYPE_INT_RGB);
+ for (int x = 0; x < width; x++) {
+ for (int y = 0; y < height; y++) {
+ image.setRGB(x, y, bitMatrix.get(x, y) ? 0xFF000000
+ : 0xFFFFFFFF);
+ }
+ }
+ if (imgPath == null || "".equals(imgPath)) {
+ return image;
+ }
+ // 插入图片
+ QRCodeUtil.insertImage(image, imgPath, needCompress);
+ return image;
+ }
+
+ public static void main(String[] args) throws Exception {
+ String text = "https://www.baidu.com"; //这里设置自定义网站url
+ String logoPath ="src/main/resources/static/logo/NAV.png";
+ String destPath = "src/main/resources/static/qr";
+ String url=QRCodeUtil.encode(text, logoPath, destPath, true);
+ System.out.println(url);
+
+ /* String file="D:\\11.jpg";
+ String info=QRCodeUtil.decode(file);
+ System.out.println(info);*/
+ }
+
+ /**
+ * 将图片url转换成base64流
+ * @param url
+ * @return
+ */
+ public String getBase64(String url){
+ MultiFormatWriter multiFormatWriter = new MultiFormatWriter();
+ Map hints = new HashMap();
+ hints.put(EncodeHintType.CHARACTER_SET, "UTF-8"); //设置字符集编码类型
+ hints.put(EncodeHintType.MARGIN, 1); //设置白边
+ BitMatrix bitMatrix = null;
+ try {
+ bitMatrix = multiFormatWriter.encode(url, BarcodeFormat.QR_CODE, 300, 300,hints);
+ BufferedImage image = toBufferedImage(bitMatrix);
+ ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+ //输出二维码图片流
+ try {
+ ImageIO.write(image, "jpg",outputStream);
+ String base = new Base64().encodeAsString(outputStream.toByteArray());
+// new Base64().encode(outputStream.toByteArray());
+ return base;
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ } catch (WriterException e1) {
+ // TODO Auto-generated catch block
+ e1.printStackTrace();
+ }
+ return null;
+ }
+
+
+ public static BufferedImage toBufferedImage(BitMatrix matrix) {
+ int width = matrix.getWidth();
+ int height = matrix.getHeight();
+ BufferedImage image = new BufferedImage(width, height,
+ BufferedImage.TYPE_INT_RGB);
+ for (int x = 0; x < width; x++) {
+ for (int y = 0; y < height; y++) {
+ image.setRGB(x, y, matrix.get(x, y) ? 0xFF000000 : 0xFFFFFFFF);//0xFF000000黑;0xFFFFFFFF白
+ }
+ }
+ return image;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/lovenav/utils/RandomValidateCode.java b/src/main/java/com/lovenav/utils/RandomValidateCode.java
index 074bb20..0bf6f78 100644
--- a/src/main/java/com/lovenav/utils/RandomValidateCode.java
+++ b/src/main/java/com/lovenav/utils/RandomValidateCode.java
@@ -17,7 +17,7 @@ public class RandomValidateCode {
private Random random = new Random();
private String randString = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";//随机产生的字符串
private int width = 80;// 图片宽度
- private int height = 26;// 图片高度
+ private int height = 36;// 图片高度
private int lineSize = 40;// 干扰线数量
private int stringNum = 4;// 随机产生的字符数量
@@ -25,7 +25,7 @@ public class RandomValidateCode {
* 获得字体
*/
private Font getFont() {
- return new Font("Fixedsys", Font.CENTER_BASELINE, 18);
+ return new Font("Fixedsys", Font.CENTER_BASELINE, 20);
}
/**
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index e9f506d..1ee784d 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -2,7 +2,7 @@ spring:
datasource:
url: jdbc:mysql://localhost:3306/love-nav
username: root
- password: Cheng123...
+ password: 1611
driver-class-name: com.mysql.cj.jdbc.Driver
redis:
host: localhost
diff --git a/src/main/resources/mybatis/AuthDao.xml b/src/main/resources/mybatis/AuthDao.xml
index bfb0791..328c91b 100644
--- a/src/main/resources/mybatis/AuthDao.xml
+++ b/src/main/resources/mybatis/AuthDao.xml
@@ -19,6 +19,14 @@
from ln_auth
where id = #{id,jdbcType=INTEGER}
+
+
+
+
delete from ln_auth
where id = #{id,jdbcType=INTEGER}
diff --git a/src/main/resources/mybatis/BannersDao.xml b/src/main/resources/mybatis/BannersDao.xml
index d2ff884..a2b8727 100644
--- a/src/main/resources/mybatis/BannersDao.xml
+++ b/src/main/resources/mybatis/BannersDao.xml
@@ -95,4 +95,12 @@
createtime = #{createtime,jdbcType=TIMESTAMP}
where id = #{id,jdbcType=INTEGER}
+
+
+
+
\ No newline at end of file
diff --git a/src/main/resources/mybatis/CollectIconListDao.xml b/src/main/resources/mybatis/CollectIconListDao.xml
index db28c11..95db15c 100644
--- a/src/main/resources/mybatis/CollectIconListDao.xml
+++ b/src/main/resources/mybatis/CollectIconListDao.xml
@@ -3,11 +3,14 @@
-
-
+
+
+
+
+
- id, url_md5, icon_url
+ id, url_id, icon_url, qr_url, `status`
- insert into ln_collect_icon_list (url_md5, icon_url)
- values (#{urlMd5,jdbcType=VARCHAR}, #{iconUrl,jdbcType=VARCHAR})
+ insert into ln_collect_icon_list (url_id, icon_url, qr_url,
+ `status`)
+ values (#{url_id,jdbcType=VARCHAR}, #{icon_url,jdbcType=VARCHAR}, #{qr_url,jdbcType=VARCHAR},
+ #{status,jdbcType=INTEGER})
insert into ln_collect_icon_list
-
- url_md5,
+
+ url_id,
-
+
icon_url,
+
+ qr_url,
+
+
+ `status`,
+
-
- #{urlMd5,jdbcType=VARCHAR},
+
+ #{url_id,jdbcType=VARCHAR},
-
- #{iconUrl,jdbcType=VARCHAR},
+
+ #{icon_url,jdbcType=VARCHAR},
+
+
+ #{qr_url,jdbcType=VARCHAR},
+
+
+ #{status,jdbcType=INTEGER},
update ln_collect_icon_list
-
- url_md5 = #{urlMd5,jdbcType=VARCHAR},
+
+ url_id = #{url_id,jdbcType=VARCHAR},
-
- icon_url = #{iconUrl,jdbcType=VARCHAR},
+
+ icon_url = #{icon_url,jdbcType=VARCHAR},
+
+
+ qr_url = #{qr_url,jdbcType=VARCHAR},
+
+
+ `status` = #{status,jdbcType=INTEGER},
where id = #{id,jdbcType=BIGINT}
update ln_collect_icon_list
- set url_md5 = #{urlMd5,jdbcType=VARCHAR},
- icon_url = #{iconUrl,jdbcType=VARCHAR}
+ set url_id = #{url_id,jdbcType=VARCHAR},
+ icon_url = #{icon_url,jdbcType=VARCHAR},
+ qr_url = #{qr_url,jdbcType=VARCHAR},
+ `status` = #{status,jdbcType=INTEGER}
where id = #{id,jdbcType=BIGINT}
\ No newline at end of file
diff --git a/src/main/resources/mybatis/CommentDao.xml b/src/main/resources/mybatis/CommentDao.xml
index 0dd4a41..e1a4fbf 100644
--- a/src/main/resources/mybatis/CommentDao.xml
+++ b/src/main/resources/mybatis/CommentDao.xml
@@ -145,11 +145,18 @@
where id = #{id,jdbcType=INTEGER}
-