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` + + + \ No newline at end of file diff --git a/src/main/resources/static/logo/NAV.png b/src/main/resources/static/logo/NAV.png new file mode 100644 index 0000000..d938511 Binary files /dev/null and b/src/main/resources/static/logo/NAV.png differ