博主介绍:
✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W+粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台的优质作者。通过长期分享和实战指导,我致力于帮助更多学生完成毕业项目和技术提升。
技术范围:
我熟悉的技术领域涵盖SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等方面的设计与开发。如果你有任何技术难题,我都乐意与你分享解决方案。
主要内容:
我的服务内容包括:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文撰写与辅导、论文降重、长期答辩答疑辅导。此外,我还提供腾讯会议一对一的专业讲解和模拟答辩演练,帮助你全面掌握答辩技巧与代码逻辑。
🍅获取源码请在文末联系我🍅
如果你对我的内容感兴趣,记得先收藏!对于毕设选题、项目开发或论文撰写等相关问题,随时欢迎留言咨询,我会尽力帮助更多同学顺利完成学业。
最主要的是免费咨询相关问题!!
一、详细操作演示视频
在文章的尾声,您会发现一张电子名片👤,欢迎通过名片上的联系方式与我取得联系,以获取更多关于项目演示的详尽视频内容。视频将帮助您全面理解项目的关键点和操作流程。期待与您的进一步交流!
承诺所有开发的项目,全程售后陪伴!!!文章下方有历年的好评(部分)!!
文档学习资料(阿龙可以赠送所有的录制好的讲解视频):
系统介绍:
随着社会对动物福利的关注日益增加,宠物领养已成为促进动物福利的重要途径。 为了更有效地促进宠物领养,本项目开发了一款名为基于微信小程序爱心领养的小程序。
本系统采用微信小程序作为前端,结合SpringBoot和MySQL技术进行后端开发,以实现一套完善的宠物领养管理系统。该系统的主要功能包括用户端的宠物信息展示、个性化推荐、宠物咨询、经验交流、个人中心管理、位置共享以及宠物领养信息发布;管理员端的系统总览、用户和宠物信息管理、领养管理、系统维护等。本系统使用Java作为主要编程语言,利用MySQL数据库进行数据存储和管理,有效地满足了用户和管理员在宠物领养过程中的各种需求。 通过本系统的实施,预期将提高宠物领养的效率和体验,同时为宠物找到更多的爱心家庭。
2 核心技术介绍
2.1 mysql技术介绍
随着技术的不断发展,数据库从只能处理数据表格,到现在能够处理大量数据,MySQL数据库属于关系类型数据库,在安装的时候很方便,可以为其添加索引从而更快的查询出数据。数据库还有多种版本[4],能够在不同的操作系统中使用数据库。能够在不同的平台部署。Microsoft MySQL工具可以为数据库进行一个可视化的管理。用户可以在软件上进行测试连接数据库是否成功,可以轻松对数据库的字段进行操作。数据库中的数据是存储在数据库表和索引当中,MySQL数据库架构属于c/s模型,客户端需要有账号和密码从而进行连接服务器。
2.2 eclipse编译器介绍
编写eclipse编译器的编程语言是java,因此eclipse编译器的最底层是java,因此很多程序员都利用eclipse编译器进行编写代码[5],eclipse本身内部集成了很多环境,是由java代码进行编写而成的eclipse编译器,内部代码是对外进行公开的,开源的。为用户提供了一个容易开发便利的平台。eclipse包括四个部分:JDK,PDE,Platform和CDT。eclipse设计师是凭借着很多原则从而制造出编译器eclipse,原则包括高可用,安全等。
2.3 Spring框架简介
Spring框架的底层语言是java,其中很多类都是由java编程语言进行编写而成的,spring框架首次出现的时间是在2005年,经过多年的发展,spring已经更新到5.4。Spring框架一直以来受到开发者的关注,spring最大的特点是面向接口进行编程,需要通过配置文件进行配置框架之间的关系[6]。有效地组织了中间层对象。提供了AOP编程,能够限定程序的权限问题。
2.4 springmvc框架简介
spring框架包含springmvc框架,mvc是一种设计模式,model表示实体层,视图用V表示,用来表示jsp页面,控制器用C表示,用于jsp页面传递数据到控制器当中。处理请求和数据处理。springmvc框架的核心类是dispatcherServlet,将请求进行拦截,将请求转移到适配器当中进行处理,寻求合适的方法对用户从页面中发出来的请求进行处理。发挥MVC框架的作用把数据展示在页面当中。MVC框架和spring框架是无缝连接的。MVC框架继承了ajax,所以可以在jsp页面当中使用ajax传递数据到controller类中。在controller中使用response body注解进行交互。mvc框架在和其它框架进行整合的时候要简单得多。
2.5 Mybatis技术简介
Mybatis是一种数据持久化的框架,内部封装了JDBC,能够对数据库基本的操作,能够对数据库中的数据进行查询操作。能够调用存储过程[7],从而进行在需要的时候进行调用,从而对其进行选择合适的调用获取所需要的信息,消除了参数的手工设置,Mybatis框架的重要作用是将大量SQL语句进行简化,能够在配置文件中进行配置,这样就可以把sql代码和程序分离开来。
2.6 Node.js技术简介
node.js是一种脚本语言,能够把数据库与js页面实现交互,与大部分后端语言一样,能够把js页面传递过来的数据进行处理,对数据库进行更新,之后把数据库的记录传递到js页面当中,能够为分布式程序提供基础操作。使得程序员能够简单实现数据在前后端之间进行相互传递,在后端能够利用数据库SQL语句把信息取出,把数据显示在js页面当中,node.js运用的是单线程技术,与多线程程序不同,因此可以很大程度避免了程序堵塞的问题,虽然是单线程技术,但是node.js具有超强的并发能力,能够在服务器上建立高并发的程序[8]。
2.7 Vue.js技术简介
Vue.js是渐进式框架,没有关注后端逻辑,只关注前端页面,采用的是向上增量开发设计,Vue是由Api实现视图组件。Vue.js是一种动态页面的技术,和静态页面有着很大的区别,程序员使用Vue.js和后端编程语言能够实现前后端分离,使得程序员在前后端交互更加容易,能够使得数据在交互的时候更加简便,前端程序员只需要负责前端页面逻辑代码的编写,调用后端程序员编写的服务接口就能够实现数据的处理。Vue.js还能够和静态页面混合编写,提供给程序员多种选择,能够把静态页面变成动态页面,使得程序更容易扩展[9]
系统实现界面:
核心代码:
java
package com.controller;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import com.utils.ValidatorUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.annotation.IgnoreAuth;
import com.entity.StoreupEntity;
import com.entity.view.StoreupView;
import com.service.StoreupService;
import com.service.TokenService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.EncryptUtil;
import com.utils.MPUtil;
import com.utils.MapUtils;
import com.utils.CommonUtil;
import java.io.IOException;
/**
* 收藏表
* 后端接口
* @author
* @email
* @date 2024-04-28 13:02:38
*/
@RestController
@RequestMapping("/storeup")
public class StoreupController {
@Autowired
private StoreupService storeupService;
/**
* 后台列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,StoreupEntity storeup,
HttpServletRequest request){
if(!request.getSession().getAttribute("role").toString().equals("管理员")) {
storeup.setUserid((Long)request.getSession().getAttribute("userId"));
}
EntityWrapper<StoreupEntity> ew = new EntityWrapper<StoreupEntity>();
PageUtils page = storeupService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, storeup), params), params));
return R.ok().put("data", page);
}
/**
* 前台列表
*/
@IgnoreAuth
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params,StoreupEntity storeup,
HttpServletRequest request){
EntityWrapper<StoreupEntity> ew = new EntityWrapper<StoreupEntity>();
PageUtils page = storeupService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, storeup), params), params));
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("/lists")
public R list( StoreupEntity storeup){
EntityWrapper<StoreupEntity> ew = new EntityWrapper<StoreupEntity>();
ew.allEq(MPUtil.allEQMapPre( storeup, "storeup"));
return R.ok().put("data", storeupService.selectListView(ew));
}
/**
* 查询
*/
@RequestMapping("/query")
public R query(StoreupEntity storeup){
EntityWrapper< StoreupEntity> ew = new EntityWrapper< StoreupEntity>();
ew.allEq(MPUtil.allEQMapPre( storeup, "storeup"));
StoreupView storeupView = storeupService.selectView(ew);
return R.ok("查询收藏表成功").put("data", storeupView);
}
/**
* 后台详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id){
StoreupEntity storeup = storeupService.selectById(id);
return R.ok().put("data", storeup);
}
/**
* 前台详情
*/
@IgnoreAuth
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") Long id){
StoreupEntity storeup = storeupService.selectById(id);
return R.ok().put("data", storeup);
}
/**
* 后台保存
*/
@RequestMapping("/save")
public R save(@RequestBody StoreupEntity storeup, HttpServletRequest request){
//ValidatorUtils.validateEntity(storeup);
storeup.setUserid((Long)request.getSession().getAttribute("userId"));
storeupService.insert(storeup);
return R.ok();
}
/**
* 前台保存
*/
@RequestMapping("/add")
public R add(@RequestBody StoreupEntity storeup, HttpServletRequest request){
//ValidatorUtils.validateEntity(storeup);
storeupService.insert(storeup);
return R.ok();
}
/**
* 获取用户密保
*/
@RequestMapping("/security")
@IgnoreAuth
public R security(@RequestParam String username){
StoreupEntity storeup = storeupService.selectOne(new EntityWrapper<StoreupEntity>().eq("", username));
return R.ok().put("data", storeup);
}
/**
* 修改
*/
@RequestMapping("/update")
@Transactional
@IgnoreAuth
public R update(@RequestBody StoreupEntity storeup, HttpServletRequest request){
//ValidatorUtils.validateEntity(storeup);
storeupService.updateById(storeup);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
storeupService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
/**
* 前台智能排序
*/
@IgnoreAuth
@RequestMapping("/autoSort")
public R autoSort(@RequestParam Map<String, Object> params,StoreupEntity storeup, HttpServletRequest request,String pre){
EntityWrapper<StoreupEntity> ew = new EntityWrapper<StoreupEntity>();
Map<String, Object> newMap = new HashMap<String, Object>();
Map<String, Object> param = new HashMap<String, Object>();
Iterator<Map.Entry<String, Object>> it = param.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<String, Object> entry = it.next();
String key = entry.getKey();
String newKey = entry.getKey();
if (pre.endsWith(".")) {
newMap.put(pre + newKey, entry.getValue());
} else if (StringUtils.isEmpty(pre)) {
newMap.put(newKey, entry.getValue());
} else {
newMap.put(pre + "." + newKey, entry.getValue());
}
}
params.put("sort", "clicktime");
params.put("order", "desc");
PageUtils page = storeupService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, storeup), params), params));
return R.ok().put("data", page);
}
}
数据库代码:
sql
DROP TABLE IF EXISTS `address`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `address` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
`addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`userid` bigint(20) NOT NULL COMMENT '用户id',
`address` varchar(200) NOT NULL COMMENT '地址',
`name` varchar(200) NOT NULL COMMENT '收货人',
`phone` varchar(200) NOT NULL COMMENT '电话',
`isdefault` varchar(200) NOT NULL COMMENT '是否默认地址[是/否]',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8 COMMENT='地址';
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `address`
--
LOCK TABLES `address` WRITE;
/*!40000 ALTER TABLE `address` DISABLE KEYS */;
INSERT INTO `address` VALUES (1,'2024-04-28 05:03:01',11,'宇宙银河系金星1号','金某','13823888881','是'),(2,'2024-04-28 05:03:01',12,'宇宙银河系木星1号','木某','13823888882','是'),(3,'2024-04-28 05:03:01',13,'宇宙银河系水星1号','水某','13823888883','是'),(4,'2024-04-28 05:03:01',14,'宇宙银河系火星1号','火某','13823888884','是'),(5,'2024-04-28 05:03:01',15,'宇宙银河系土星1号','土某','13823888885','是'),(6,'2024-04-28 05:03:01',16,'宇宙银河系月球1号','月某','13823888886','是'),(7,'2024-04-28 05:03:01',17,'宇宙银河系黑洞1号','黑某','13823888887','是'),(8,'2024-04-28 05:03:01',18,'宇宙银河系地球1号','地某','13823888888','是'),(9,'2024-04-28 05:07:21',1714280800924,'长沙市开福区秀峰路1号','张三','15111122548','是');
/*!40000 ALTER TABLE `address` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `cart`
--
DROP TABLE IF EXISTS `cart`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `cart` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
`addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`tablename` varchar(200) DEFAULT 'nongchanpin' COMMENT '商品表名',
`userid` bigint(20) NOT NULL COMMENT '用户id',
`goodid` bigint(20) NOT NULL COMMENT '商品id',
`goodname` varchar(200) DEFAULT NULL COMMENT '商品名称',
`picture` longtext COMMENT '图片',
`buynumber` int(11) NOT NULL COMMENT '购买数量',
`price` double DEFAULT NULL COMMENT '单价',
`discountprice` double DEFAULT NULL COMMENT '会员价',
`goodtype` varchar(200) DEFAULT NULL COMMENT '商品类型',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='购物车表';
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `cart`
--
LOCK TABLES `cart` WRITE;
/*!40000 ALTER TABLE `cart` DISABLE KEYS */;
/*!40000 ALTER TABLE `cart` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `chanpinfenlei`
--
DROP TABLE IF EXISTS `chanpinfenlei`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `chanpinfenlei` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
`addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`chanpinfenlei` varchar(200) DEFAULT NULL COMMENT '产品分类',
PRIMARY KEY (`id`),
UNIQUE KEY `chanpinfenlei` (`chanpinfenlei`)
) ENGINE=InnoDB AUTO_INCREMENT=59 DEFAULT CHARSET=utf8 COMMENT='产品分类';
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `chanpinfenlei`
--
LOCK TABLES `chanpinfenlei` WRITE;
/*!40000 ALTER TABLE `chanpinfenlei` DISABLE KEYS */;
INSERT INTO `chanpinfenlei` VALUES (51,'2024-04-28 05:03:01','产品分类1'),(52,'2024-04-28 05:03:01','产品分类2'),(53,'2024-04-28 05:03:01','产品分类3'),(54,'2024-04-28 05:03:01','产品分类4'),(55,'2024-04-28 05:03:01','产品分类5'),(56,'2024-04-28 05:03:01','产品分类6'),(57,'2024-04-28 05:03:01','产品分类7'),(58,'2024-04-28 05:03:01','果蔬');
/*!40000 ALTER TABLE `chanpinfenlei` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `chat`
--
DROP TABLE IF EXISTS `chat`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `chat` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
`addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`userid` bigint(20) NOT NULL COMMENT '用户id',
`adminid` bigint(20) DEFAULT NULL COMMENT '管理员id',
`ask` longtext COMMENT '提问',
`reply` longtext COMMENT '回复',
`isreply` int(11) DEFAULT NULL COMMENT '是否回复',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=92 DEFAULT CHARSET=utf8 COMMENT='在线客服';
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `chat`
--
LOCK TABLES `chat` WRITE;
/*!40000 ALTER TABLE `chat` DISABLE KEYS */;
INSERT INTO `chat` VALUES (81,'2024-04-28 05:03:01',1,1,'提问1','回复1',0),(82,'2024-04-28 05:03:01',2,2,'提问2','回复2',2),(83,'2024-04-28 05:03:01',3,3,'提问3','回复3',3),(84,'2024-04-28 05:03:01',4,4,'提问4','回复4',4),(85,'2024-04-28 05:03:01',5,5,'提问5','回复5',5),(86,'2024-04-28 05:03:01',6,6,'提问6','回复6',6),(87,'2024-04-28 05:03:01',7,7,'提问7','回复7',7),(88,'2024-04-28 05:03:01',8,8,'提问8','回复8',8),(89,'2024-04-28 05:10:05',1,1,NULL,'回复回复AA',NULL),(90,'2024-04-28 05:11:09',1714280800924,NULL,'身份是的水电费',NULL,0),(91,'2024-04-28 05:11:19',1714280800924,1,NULL,'回复回复AA',NULL);
/*!40000 ALTER TABLE `chat` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `config`
--
DROP TABLE IF EXISTS `config`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `config` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
`name` varchar(100) NOT NULL COMMENT '配置参数名称',
`value` varchar(100) DEFAULT NULL COMMENT '配置参数值',
`url` varchar(500) DEFAULT NULL COMMENT 'url',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='配置文件';
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `config`
--
LOCK TABLES `config` WRITE;
/*!40000 ALTER TABLE `config` DISABLE KEYS */;
INSERT INTO `config` VALUES (1,'picture1','upload/picture1.jpg',NULL),(2,'picture2','upload/picture2.jpg',NULL),(3,'picture3','upload/picture3.jpg',NULL);
/*!40000 ALTER TABLE `config` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `discussnongchanpin`
--
DROP TABLE IF EXISTS `discussnongchanpin`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `discussnongchanpin` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
`addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`refid` bigint(20) NOT NULL COMMENT '关联表id',
`userid` bigint(20) NOT NULL COMMENT '用户id',
`avatarurl` longtext COMMENT '头像',
`nickname` varchar(200) DEFAULT NULL COMMENT '用户名',
`content` longtext NOT NULL COMMENT '评论内容',
`reply` longtext COMMENT '回复内容',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='农产品评论表';
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `discussnongchanpin`
--
LOCK TABLES `discussnongchanpin` WRITE;
/*!40000 ALTER TABLE `discussnongchanpin` DISABLE KEYS */;
/*!40000 ALTER TABLE `discussnongchanpin` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `discusstesejingdian`
--
DROP TABLE IF EXISTS `discusstesejingdian`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `discusstesejingdian` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
`addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`refid` bigint(20) NOT NULL COMMENT '关联表id',
`userid` bigint(20) NOT NULL COMMENT '用户id',
`avatarurl` longtext COMMENT '头像',
`nickname` varchar(200) DEFAULT NULL COMMENT '用户名',
`content` longtext NOT NULL COMMENT '评论内容',
`reply` longtext COMMENT '回复内容',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='特色景点评论表';
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `discusstesejingdian`
为什么选择我:
我是程序员阿龙,专注于软件开发,拥有丰富的编程能力和实战经验。在过去的几年里,我辅导了上千名学生,帮助他们顺利完成毕业项目,同时我的技术分享也吸引了超过50W+的粉丝。我是CSDN特邀作者、博客专家、新星计划导师,并在Java领域内获得了多项荣誉,如博客之星。我的作品也被掘金、华为云、阿里云、InfoQ等多个平台推荐,成为各大平台的优质作者。
已经为上百名同学获得优秀毕业生!!
源码获取:
大家点赞、收藏、关注、评论啦 、查看👇🏻获取联系方式👇🏻
精彩专栏推荐订阅:在下方专栏👇🏻