如何使用ssm实现宠物领养系统+vue

news2024/11/15 21:38:09

@TOC

ssm103宠物领养系统+vue

课题背景

在当今的社会,可以说是信息技术的发展时代,在社会的方方面面无不涉及到各种信息的处理。信息是人们对客观世界的具体描述,是人们进行交流与联系的重要途径。人类社会就处在一个对信息进行有效合理的加工中。它将促进整个社会的发展。随着社会信息技术的提高,计算机已被广泛应用于当今社会的各个领域,成为推动社会发展的首要技术动力。

在现在的社会生活中,人们的生活品质不断的提高,物质的需求也相应的得到了满足。但是也有一些人在物质上的满足并不能填满心里的孤寂。当一个人在外拼搏,就算在工作氛围中有很多人的陪伴,但是回家也可能会是一个冷冷清清的环境。所以这时候如果有了一个宠物的陪伴,心里的孤寂也会得到很大的慰藉,饲养宠物可以给我们带来快乐,也让我们的心灵得到慰藉。这让用户宠物领养的需求日益在增加,但是人们在领养宠物方面却缺乏一个很好的平台,针对这一情况,开发了本宠物领养系统,为用户通过一个全新的宠物领养的平台,提高效率。

  1. 设计原则

在开始开发项目之前,必须要先考虑项目的实用性、科学性,以及该项目是否能够真正让用户受益并尽可能的发挥项目的作用。因此,在开发前,通过以下几条原则对项目进行判断:

(1)可行性原则。项目需要保证经济可行性和技术可行性,这包括了项目在浏览端、服务端等方面上的经济和技术上是可以达成的。

(2)适应性原则。项目要保证可维护性和可扩展性,这是每个非短期项目都需要考虑的,并且不论是维护还是扩展,都必须要建立在适应用户的正常需求的基础上。

(3)安全性及保密性原则。要充分保证用户信息的安全性和保密性,不能因为开发上的疏忽,导致用户的信息泄露。

(4)系统工程原则。为了确保项目的整体性,在项目调查、项目分析、项目设计、项目开发的过程中,都需遵从项目工程的方法和步骤逐步进行。

(5)统一规划、分期实施、逐步完善原则。项目开发的过程中,要按照规划、分期实施,特别是要注意在项目开发过程中要有条理,从点到面,一步步完善,不要贪图进度,要循环渐进的对项目进行开发。

  1. 论文组织结构

第一章主要是简单的介绍下设计本网站的研究背景、设计原则,在这一章里主要是让大家了解下我的设计的前因后果,为接下来我的其它章节做铺垫。

第二章主要是介绍在设计过程中所涉及到的技术。

第三章主要是介绍下设计这个网站所需要的需求以及我们的功能需求分析,因为只有更好的分析清楚我们的功能需求才能更好的完成我们的设计。

第四章网站系统设计,主要介绍了网站结构的设计以及展示了数据库E-R图设计,这一章主要是为了能让大家更好的了解网站的一些基本设计信息。

第五章系统的实现,介绍了系统每个模块的设计与实现,让大家能清晰的了解系统的主要功能。

第六章系统的测试,这章主要是测试下各个部分每个功能是否能用,看下是否有错误。

第七章总结,进行最后的总结工作。

  1. 系统关键技术

    1. JSP技术

JSP(Java脚本页面)是Sun和许多参与建立的公司所提倡的动态web技术。将Java程序添加到传统的web页面HTML文件(*)。htm,*。Html) [7]。

JSP这种能够独立使用的编程语言可以嵌入在html语言里面运行,正因为JSP参照了许多编程语言的特性,使得JSP在web的脚本技术当中也占有一定的重要位置,对于刚入门编程行业的初学者来讲,jsp这种编程语言不仅容易学习,而且还具备许多高级的特性。在程序的开发过程中,使用jsp也不失为一种正确的选择,像表单数据的收集操作以及字符串信息的处理方面等等,jsp都能很轻松地解决,帮助程序开发者省下许多时间,JSP 新版本的发布,标志着一个全新的JSP时代的到来,它最大的特点就是引入了面向对象的全部机制,并保留了向下的兼容性[8]。综上所述,使用JSP,可以自由的选择操作系统、Web服务器以及合适的数据库管理系统。同时,设计开发时,有两种选择,一种是面向过程,另一种是面向对象,或者也可以两种都使用,可以称为混和方式设计。

JSP的优点:编写一次,始终运行。还有jsp可以延展可以缩短的强大优势,还有就是支持多种开发语言并且兼容性好,适用于很多平台顺利运行。

  1. JAVA技术

Java是面向对象进行编程的一门语言,基础语法和C语言、C++都差不多,Java删除了C++里面的多指针、继承、自动的强制类型转换等,Java的JVM还可以自动进行垃圾回收,减少了程序员的后顾之忧。最重要的一点是Java语言是支持跨平台的,这使Java语言的使用更加广泛。

JDK(Java Development Kit)是Java语言的软件开发工具包。Java开发中JDK是最重要的核心,JDK里面有JRE,包括client和server端的。环境变量需要配置好。[1]

JRE(JAVA Runtime Environment)是支持Java程序运行的标准环境,JRE里面只有client运行环境,会自动的添加PATH 。

  1. B/S结构

此次设计的网络结构模式B/S结构(Browser/Server)。B/S架构也称为B/S模式,是一种服务器以及浏览器架构模式。B/S的工作模式都是先由浏览器请求,服务器再响应。B/S体系结构解决了异构系统中的连接难题,大大改善了系统的开放性,让系统的扩展和维护更加简单;同时,B/S体系结构操作也比较容易,界面全都为浏览器模式,容易分发数据的捕获程序。只要安装通用的浏览器(如WWW浏览器)就能通过Web服务器与数据库进行数据交互。此结构的好处之一在于由于它使用的统一的浏览器,使其可以在不同的地方且不需要用专门的软件进行操作,实现了不论你使用怎样的接入网的方式都可以对公共的数据进行调用和浏览。

相对于C/S模式,B/S模式是对C/S模式应用的扩展,B/S模式不用对不同的计算机安装不同应用程序,还有安全性的要求及对模式上手难度都比前者更好。B/S模式可以让客户机的压力大大减轻,工作的负荷被合理的分配了。

图2-1 B/S模式三层结构图

  1. MYSQL数据库

MySQL 是关系型数据库管理系统的代表, 因为MySQL是其免费开源的,而且MySQL的功能已经足够用对于学习和中小型企业来讲,所以开发中小型网站都会选择MySQL作为网站的数据库。[13]

MySQL具有开放性,它是一种关系型数据库管理系统,并且它的源代码可以被大众所熟知[3]。由于MySQL是开放源代码的,因此,只要经过授权就可以在自己需求的基础上对其进行修改。MySQL因为其固有的特点而备受关注,它具有很强的适应性,并且十分可靠,查询速度快。MySQL安装起来非常方便,且数据存储量大,不需要事务化处理。Sql语言拥有很多的方法,在项目中编写sql语句时使用起来是非常方便的,不会像其他语言那样需要编写更多的语句。正因为MySQL使用sql语言进行数据库管理,所以它收到了大多数程序员的热爱。

  1. 系统分析

    1. 可行性分析

本节通过对系统实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性和操作可行性等方面进行分析。

  1. 操作可行性

本人自己就是学生,程序开发经验不足,在界面设计上面不会设计太复杂,要讲究简单好看,操作上要方便,不能让用户觉得不流畅。用户一旦进入操作界面,界面上就会有相应提示,跟着操作提示就可以找到对应的功能操作模块,对于用户来说免培训就能使用。

  1. 经济可行性

由于自己本身就是学生,还没有正式参加工作,金钱上面一直都处于缺乏状态。所以在开发程序过程中,我是不会花太多经济成本在上面的。针对开发软件和数据库,还有界面设计的photoshop软件等在百度上面就可以直接下载,然后根据各种安装视频进行安装,这些资源都是免费的,程序编码阶段使用的源代码在百度上面可以轻松获得,在有网络的环境下就能下载下来,不需要支付任何费用,经济成本很低。

  1. 技术可行性

本系统使用Java语言作为后面控制层编码的语言,Java语言有面向对象的特点,所以使用它会让整体结构更加的清晰[3]。JSP将内容的生成和显示进行分离以为方便进行动态网站的开发[4]。同时使用mysql存储数据,保证数据不会丢失。此系统在技术上来说是非常成熟的,可以进行非常平稳的技术开发。

  1. 法律可行性

本课题开发和运行的宠物领养系统没有任何与国家法律法规相违背的之处。而且宠物领养系统所使用的操作方式是根据一般大众的日常习惯研发的,操作简单易懂,便于管理。所以具有法律可行性。

从上面几个部分的可行性分析得出,这次开发的宠物领养系统在开发上面没有什么大问题,值得开发。

  1. 系统功能分析

本宠物领养系统主要包括两大功能模块,即管理员模块、用户模块。下面将对这两个大功能进行具体功能需求分析。

(1)管理员:管理员登录后主要功能包括个人中心、用户管理、送养宠物管理、地区类型管理、失信黑名单管理、申请领养管理、宠物秀管理以及系统管理。管理员用例图如图3-1所示。

图3-1管理员用例图

(2)用户:用户进入系统前台可查看系统信息,包括网站首页、送养宠物、失信黑名单以及宠物秀等。用户要想实现宠物领养操作,必须进行登录系统,未有账号用户可进入注册界面进行注册操作,注册登录后主要功能包括个人中心、送养宠物管理、失信黑名单管理、申请领养管理以及宠物秀管理。用户用例图如图3-2所示。

图3-2用户用例图

  1. 系统性能分析

(1)系统的存储性:因为是宠物领养系统,所以就会在数据库要求上比较严格,信息录入的比较多,而且丰富复杂, 这就需要一个强大的数据库来存放更多的数据和保证数据的时时性。

(2)系统的易学性:系统设计的应该简单易学的,设计的各种功能应该简单操作,不需要努力学习培训,缩短用户熟悉系统的进程。

(3)系统的数据要求:数据应该录入准确,需要更新时,数据应该可以及时的修改,数据还应该有独立保存,不能删除数据的时候会连带着把还需要的数据都删除掉。

(4)系统稳定性:开发的宠物领养系统要求运行稳定,运行过程中无界面不清楚、字体模糊等现象。

(5)系统的兼容性:该系统采用Java技术开发。Web开发采用Java Servlet和JSP应用程序,可以在Linux和Windows等平台上使用,具有良好的兼容性。

  1. 系统流程分析

    1. 注册流程

未有账号的用户可进行注册操作,注册流程图如图3-3所示。

图3-3 注册流程图

  1. 登录流程

登录模块主要满足了管理员和用户的权限登录,用户在登录界面输入用户名和密码,点击登录,通过验证,进入系统,登录流程图如图3-4所示。

图3-4登录流程图

  1. 系统设计

    1. 系统结构设计

在系统结构设计过程中,首先,整个系统分成几个小的模块,小的问题,然后,进一步细分模块,添加细节。根据第三章中系统功能需求分析,可构建本宠物领养系统的结构图,如图4-1所示。

图4-1 系统结构图

  1. 系统顺序图设计

顺序图表示交互、是指为得到一个期望的结果而在多个分类器角色之间进行的交互序列。

(1)登录顺序图

用户在登录时,首先进入系统登录窗口,用户需要输入用户名和密码,点击登录按钮进行登录操作,系统会以用户名和密码为参数在数据库中进行登录信息的验证,验证成功则登录成功,进入用户主界面。登录模块顺序图如图4-2所示。

图4-2 登录顺序图

(2)注册顺序图

未有账号的用户可进入注册界面进行注册操作,在注册界面输入注册信息,点击提交按钮,系统首先判断用户名是否存在,存在则提示重新输入,不存在则验证注册信息是否正确,正确则在数据库中添加注册数据,提示注册成功。用户注册模块顺序图如图4-3所示。

图4-3 注册顺序图

  1. 数据库设计

一个好的数据库可以关系到程序开发的优劣,数据库设计离不开表结构的设计,还有表与表之间的联系,以及系统开发需要设计的数据表内容等信息。在进行数据库设计期间,还是需要多花时间进行考虑,最终设计出配套程序的数据库出来。

  1. 数据库E-R图设计

E-R图是一种描述显示数据类型间的关系的数据描述方法,E-R图可以完整地映射出现实模型的关系。E-R图中的三个最为重要的元素就是实体、属性、关系,E-R图即由这三点组成。E-R图是最能体系各个实体之间关系的,包括每个实体都包括哪些属性,搞清楚这些我们设计数据库表的时候才能够不遗忘,才能完整的设计。下面我们例出本宠物领养系统主要的几个E-R图。

1、管理员信息实体属性E-R图如图4-4所示:

图4-4 管理员信息实体属性E-R图

2、宠物秀信息实体属性E-R图如图4-5所示:

图4-5 宠物秀信息实体属性E-R图

3、地区类型信息实体属性E-R图如图4-6所示:

图4-6 地区类型信息实体属性E-R图

4、申请领养信息实体属性E-R图如图4-7所示:

图4-7 申请领养信息实体属性E-R图

5、送养宠物信息实体属性E-R图如图4-8所示:

图4-8 送养宠物信息实体属性E-R图

  1. 数据库表设计

宠物领养系统采用MYSQL数据库进行数据的储存,下面介绍数据库中的各个表的详细信息。

表4-1 users管理员信息表

字段名数据类型是否允许空字段含义
id`bigint(20)NOT NULL编号
username`varchar(100)NULL用户名
password`varchar(100)NULL密码
rolevarchar(100)NULL角色
addtimetimestampNULL新增时间

表4-2 chongwuxiu宠物秀信息表

字段名数据类型是否允许空字段含义
`idbigint(20)NOT NULL编号
addtimetimestampNULL创建时间
chongwudongtailongtextNULL宠物动态
chongwuzhaopianvarchar(200)NULL宠物照片
shouyanghaovarchar(200)NULL收养号
shouyangmingvarchar(200)NULL收养名
thumbsupnum| `int(11)NULL赞数
crazilynum| `int(11)NULL踩数
clicktime` datetimeNULL最近点击时间

表4-3 diquleixing地区类型信息表

字段名数据类型主键/允许空字段含义
`idbigint(20)NOT NULL编号
addtimetimestampNULL创建时间
leixingvarchar(200)NULL类型

表4-4 shenqinglingyang申请领养信息表

字段名数据类型主键/允许空字段含义
`idbigint(20)NOT NULL编号
addtimetimestampNULL创建时间
chongwumingchengvarchar(200)NULL宠物名称
chongwuzhaopianvarchar(200)NULL宠物照片
chongwudizhivarchar(200)NULL宠物地址
songyanghaovarchar(200)NULL送养号
songyangmingvarchar(200)NULL送养名
diquvarchar(200)NULL地区
shouyanghaovarchar(200)NULL收养号
shouyangmingvarchar(200)NULL收养名
xingbievarchar(200)NULL性别
shoujivarchar(200)NULL手机
weixinhaovarchar(200)NULL微信号
dizhi| `varchar(200)NULL地址
lingyangyuanyinvarchar(200)NULL领养原因
yangchongjingyanvarchar(200)NULL养宠经验'
sfshvarchar(200)NULL是否审核
shhf`longtext审核回复

表4-5 `songyangchongwu送养宠物信息表

字段名数据类型主键/允许空字段含义
`idbigint(20)NOT NULL编号
addtimetimestampNULL创建时间
chongwumingchengvarchar(200)NULL宠物名称
chongwuzhaopianvarchar(200)NULL宠物照片
chongwudizhivarchar(200)NULL宠物地址
diquvarchar(200)NULL地区
fabushijian| `datetimeNULL发布时间
songyanghao| `varchar(200)NULL送养号
songyangmingvarchar(200)NULL送养名
shoujivarchar(200)NULL手机
songyangzhuangtaivarchar(200)NULL送养状态
sfshvarchar(200)NULL是否审核
shhf`longtext审核回复
  1. 系统的实现

    1. 用户功能模块的实现

      1. 系统主界面

用户进入本系统可查看系统信息,系统主界面展示如图5-1所示。

图5-1系统主界面图

  1. 用户注册界面

未有账号的用户可进行注册操作,在注册的时候可根据提示输入相关注册信息,用户注册界面如图5-2所示

图5-2 用户注册登录界面

  1. 用户登录界面

用户要想进行申请领养宠物操作必须登录系统,用户登录界面展示如图5-3所示。

图5-3用户登录界面

  1. 送养宠物详情界面

用户可查看送养宠物详情信息,登录后可进行申请领养操作,送养宠物详情界面展示如图5-4所示。

图5-4 送养宠物详情界面

  1. 添加送养宠物界面

用户登录后可添加送养宠物信息,添加送养宠物界面如图5-5所示。

图5-5 添加送养宠物界面

  1. 添加宠物秀界面

用户登录后还可添加宠物秀,添加宠物秀界面如图5-6所示。

图5-6 添加宠物秀界面

  1. 个人中心界面

用户可管理个人信息,个人中心界面展示如图5-7所示。

图5-7 个人中心界面

  1. 管理员功能模块的实现

    1. 管理员登录界面

管理员要想进入系统后台进行管理操作,必须登录系统后台,管理员登录界面如图5-8所示

图5-8 管理员登录界面

  1. 用户管理界面

管理员在用户管理界面可查看所有用户信息,对已有用户信息可进行修改和删除操作,也可添加用户信息,用户管理界面如图5-8所示

图5-9 用户管理界面

  1. 送养宠物管理界面

管理员可查看所有送养宠物信息,并可对其进行审核、修改和删除操作,送养宠物管理界面展示如图5-10所示。

图5-10 送养宠物管理界面

  1. 地区类型管理界面

管理员可添加、修改和删除地区类型信息,地区类型管理界面如图5-11所示,添加地区类型界面展示如图5-12所示。

图5-11 地区类型管理界面

图5-12 添加地区类型界面

  1. 申请领养管理界面

管理员可查看所有所有申请领养信息,并可对其进行审核操作,申请领养管理界面如图5-13所示。

图5-13 申请领养管理界面

  1. 宠物秀管理界面

管理员可查看所有宠物秀信息,并可对其进行删除操作,宠物秀管理界面如图5-14所示。

图5-14 宠物秀管理界面

BaiduUtil.java
package com.utils;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.json.JSONObject;


/**
* 类说明 : 
*/

public class BaiduUtil {
	
    /**
     * 根据经纬度获得省市区信息
     * @param lon 纬度
     * @param lat 经度
     * @param coordtype 经纬度坐标系
     * @return
     */
    public static Map<String, String> getCityByLonLat(String key, String lng, String lat) {
        String location = lat + "," + lng;
        try {
            //拼装url
            String url = "http://api.map.baidu.com/reverse_geocoding/v3/?ak="+key+"&output=json&coordtype=wgs84ll&location="+location;
            String result = HttpClientUtils.doGet(url);
            JSONObject o = new JSONObject(result);
            Map<String, String> area = new HashMap<>();
			area.put("province", o.getJSONObject("result").getJSONObject("addressComponent").getString("province"));
			area.put("city", o.getJSONObject("result").getJSONObject("addressComponent").getString("city"));
			area.put("district", o.getJSONObject("result").getJSONObject("addressComponent").getString("district"));
			area.put("street", o.getJSONObject("result").getJSONObject("addressComponent").getString("street"));
            return area;
        }catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
	     * 获取API访问token
	     * 该token有一定的有效期,需要自行管理,当失效时需重新获取.
	     * @param ak - 百度云官网获取的 API Key
	     * @param sk - 百度云官网获取的 Securet Key
	     * @return assess_token
	     */
    public static String getAuth(String ak, String sk) {
        // 获取token地址
        String authHost = "https://aip.baidubce.com/oauth/2.0/token?";
        String getAccessTokenUrl = authHost
                // 1. grant_type为固定参数
                + "grant_type=client_credentials"
                // 2. 官网获取的 API Key
                + "&client_id=" + ak
                // 3. 官网获取的 Secret Key
                + "&client_secret=" + sk;
        try {
            URL realUrl = new URL(getAccessTokenUrl);
            // 打开和URL之间的连接
            HttpURLConnection connection = (HttpURLConnection) realUrl.openConnection();
            connection.setRequestMethod("GET");
            connection.connect();
            // 获取所有响应头字段
            Map<String, List<String>> map = connection.getHeaderFields();
            // 遍历所有的响应头字段
            for (String key : map.keySet()) {
                System.err.println(key + "--->" + map.get(key));
            }
            // 定义 BufferedReader输入流来读取URL的响应
            BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            String result = "";
            String line;
            while ((line = in.readLine()) != null) {
                result += line;
            }
            /**
             * 返回结果示例
             */
            System.err.println("result:" + result);
            org.json.JSONObject jsonObject = new org.json.JSONObject(result);
            String access_token = jsonObject.getString("access_token");
            return access_token;
        } catch (Exception e) {
            System.err.printf("获取token失败!");
            e.printStackTrace(System.err);
        }
        return null;
    }

}

LingyangchenggongController.java
package com.controller;

import java.text.SimpleDateFormat;
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.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.LingyangchenggongEntity;
import com.entity.view.LingyangchenggongView;

import com.service.LingyangchenggongService;
import com.service.TokenService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.CommonUtil;


/**
 * 领养成功
 * 后端接口
 * @author 
 * @email 
 * @date 2021-03-29 18:02:25
 */
@RestController
@RequestMapping("/lingyangchenggong")
public class LingyangchenggongController {
    @Autowired
    private LingyangchenggongService lingyangchenggongService;
    


    /**
     * 后端列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,LingyangchenggongEntity lingyangchenggong, 
		HttpServletRequest request){

		String tableName = request.getSession().getAttribute("tableName").toString();
		if(tableName.equals("songyangren")) {
			lingyangchenggong.setSongyanghao((String)request.getSession().getAttribute("username"));
		}
		if(tableName.equals("shouyangren")) {
			lingyangchenggong.setShouyanghao((String)request.getSession().getAttribute("username"));
		}
        EntityWrapper<LingyangchenggongEntity> ew = new EntityWrapper<LingyangchenggongEntity>();
		PageUtils page = lingyangchenggongService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, lingyangchenggong), params), params));
        return R.ok().put("data", page);
    }
    
    /**
     * 前端列表
     */
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params,LingyangchenggongEntity lingyangchenggong, HttpServletRequest request){
        EntityWrapper<LingyangchenggongEntity> ew = new EntityWrapper<LingyangchenggongEntity>();
		PageUtils page = lingyangchenggongService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, lingyangchenggong), params), params));
        return R.ok().put("data", page);
    }

	/**
     * 列表
     */
    @RequestMapping("/lists")
    public R list( LingyangchenggongEntity lingyangchenggong){
       	EntityWrapper<LingyangchenggongEntity> ew = new EntityWrapper<LingyangchenggongEntity>();
      	ew.allEq(MPUtil.allEQMapPre( lingyangchenggong, "lingyangchenggong")); 
        return R.ok().put("data", lingyangchenggongService.selectListView(ew));
    }

	 /**
     * 查询
     */
    @RequestMapping("/query")
    public R query(LingyangchenggongEntity lingyangchenggong){
        EntityWrapper< LingyangchenggongEntity> ew = new EntityWrapper< LingyangchenggongEntity>();
 		ew.allEq(MPUtil.allEQMapPre( lingyangchenggong, "lingyangchenggong")); 
		LingyangchenggongView lingyangchenggongView =  lingyangchenggongService.selectView(ew);
		return R.ok("查询领养成功成功").put("data", lingyangchenggongView);
    }
	
    /**
     * 后端详情
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id){
        LingyangchenggongEntity lingyangchenggong = lingyangchenggongService.selectById(id);
        return R.ok().put("data", lingyangchenggong);
    }

    /**
     * 前端详情
     */
    @RequestMapping("/detail/{id}")
    public R detail(@PathVariable("id") Long id){
        LingyangchenggongEntity lingyangchenggong = lingyangchenggongService.selectById(id);
        return R.ok().put("data", lingyangchenggong);
    }
    



    /**
     * 后端保存
     */
    @RequestMapping("/save")
    public R save(@RequestBody LingyangchenggongEntity lingyangchenggong, HttpServletRequest request){
    	lingyangchenggong.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(lingyangchenggong);

        lingyangchenggongService.insert(lingyangchenggong);
        return R.ok();
    }
    
    /**
     * 前端保存
     */
    @RequestMapping("/add")
    public R add(@RequestBody LingyangchenggongEntity lingyangchenggong, HttpServletRequest request){
    	lingyangchenggong.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(lingyangchenggong);

        lingyangchenggongService.insert(lingyangchenggong);
        return R.ok();
    }

    /**
     * 修改
     */
    @RequestMapping("/update")
    public R update(@RequestBody LingyangchenggongEntity lingyangchenggong, HttpServletRequest request){
        //ValidatorUtils.validateEntity(lingyangchenggong);
        lingyangchenggongService.updateById(lingyangchenggong);//全部更新
        return R.ok();
    }
    

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        lingyangchenggongService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }
    
    /**
     * 提醒接口
     */
	@RequestMapping("/remind/{columnName}/{type}")
	public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request, 
						 @PathVariable("type") String type,@RequestParam Map<String, Object> map) {
		map.put("column", columnName);
		map.put("type", type);
		
		if(type.equals("2")) {
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
			Calendar c = Calendar.getInstance();
			Date remindStartDate = null;
			Date remindEndDate = null;
			if(map.get("remindstart")!=null) {
				Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
				c.setTime(new Date()); 
				c.add(Calendar.DAY_OF_MONTH,remindStart);
				remindStartDate = c.getTime();
				map.put("remindstart", sdf.format(remindStartDate));
			}
			if(map.get("remindend")!=null) {
				Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
				c.setTime(new Date());
				c.add(Calendar.DAY_OF_MONTH,remindEnd);
				remindEndDate = c.getTime();
				map.put("remindend", sdf.format(remindEndDate));
			}
		}
		
		Wrapper<LingyangchenggongEntity> wrapper = new EntityWrapper<LingyangchenggongEntity>();
		if(map.get("remindstart")!=null) {
			wrapper.ge(columnName, map.get("remindstart"));
		}
		if(map.get("remindend")!=null) {
			wrapper.le(columnName, map.get("remindend"));
		}

		String tableName = request.getSession().getAttribute("tableName").toString();
		if(tableName.equals("songyangren")) {
			wrapper.eq("songyanghao", (String)request.getSession().getAttribute("username"));
		}
		if(tableName.equals("shouyangren")) {
			wrapper.eq("shouyanghao", (String)request.getSession().getAttribute("username"));
		}

		int count = lingyangchenggongService.selectCount(wrapper);
		return R.ok().put("count", count);
	}
	


}

NewsController.java
package com.controller;

import java.text.SimpleDateFormat;
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.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.NewsEntity;
import com.entity.view.NewsView;

import com.service.NewsService;
import com.service.TokenService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.CommonUtil;


/**
 * 宠物资讯
 * 后端接口
 * @author 
 * @email 
 * @date 2021-03-29 18:02:25
 */
@RestController
@RequestMapping("/news")
public class NewsController {
    @Autowired
    private NewsService newsService;
    


    /**
     * 后端列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,NewsEntity news, 
		HttpServletRequest request){

        EntityWrapper<NewsEntity> ew = new EntityWrapper<NewsEntity>();
		PageUtils page = newsService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, news), params), params));
        return R.ok().put("data", page);
    }
    
    /**
     * 前端列表
     */
	@IgnoreAuth
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params,NewsEntity news, HttpServletRequest request){
        EntityWrapper<NewsEntity> ew = new EntityWrapper<NewsEntity>();
		PageUtils page = newsService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, news), params), params));
        return R.ok().put("data", page);
    }

	/**
     * 列表
     */
    @RequestMapping("/lists")
    public R list( NewsEntity news){
       	EntityWrapper<NewsEntity> ew = new EntityWrapper<NewsEntity>();
      	ew.allEq(MPUtil.allEQMapPre( news, "news")); 
        return R.ok().put("data", newsService.selectListView(ew));
    }

	 /**
     * 查询
     */
    @RequestMapping("/query")
    public R query(NewsEntity news){
        EntityWrapper< NewsEntity> ew = new EntityWrapper< NewsEntity>();
 		ew.allEq(MPUtil.allEQMapPre( news, "news")); 
		NewsView newsView =  newsService.selectView(ew);
		return R.ok("查询宠物资讯成功").put("data", newsView);
    }
	
    /**
     * 后端详情
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id){
        NewsEntity news = newsService.selectById(id);
        return R.ok().put("data", news);
    }

    /**
     * 前端详情
     */
	@IgnoreAuth
    @RequestMapping("/detail/{id}")
    public R detail(@PathVariable("id") Long id){
        NewsEntity news = newsService.selectById(id);
        return R.ok().put("data", news);
    }
    



    /**
     * 后端保存
     */
    @RequestMapping("/save")
    public R save(@RequestBody NewsEntity news, HttpServletRequest request){
    	news.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(news);

        newsService.insert(news);
        return R.ok();
    }
    
    /**
     * 前端保存
     */
    @RequestMapping("/add")
    public R add(@RequestBody NewsEntity news, HttpServletRequest request){
    	news.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(news);

        newsService.insert(news);
        return R.ok();
    }

    /**
     * 修改
     */
    @RequestMapping("/update")
    public R update(@RequestBody NewsEntity news, HttpServletRequest request){
        //ValidatorUtils.validateEntity(news);
        newsService.updateById(news);//全部更新
        return R.ok();
    }
    

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        newsService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }
    
    /**
     * 提醒接口
     */
	@RequestMapping("/remind/{columnName}/{type}")
	public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request, 
						 @PathVariable("type") String type,@RequestParam Map<String, Object> map) {
		map.put("column", columnName);
		map.put("type", type);
		
		if(type.equals("2")) {
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
			Calendar c = Calendar.getInstance();
			Date remindStartDate = null;
			Date remindEndDate = null;
			if(map.get("remindstart")!=null) {
				Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
				c.setTime(new Date()); 
				c.add(Calendar.DAY_OF_MONTH,remindStart);
				remindStartDate = c.getTime();
				map.put("remindstart", sdf.format(remindStartDate));
			}
			if(map.get("remindend")!=null) {
				Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
				c.setTime(new Date());
				c.add(Calendar.DAY_OF_MONTH,remindEnd);
				remindEndDate = c.getTime();
				map.put("remindend", sdf.format(remindEndDate));
			}
		}
		
		Wrapper<NewsEntity> wrapper = new EntityWrapper<NewsEntity>();
		if(map.get("remindstart")!=null) {
			wrapper.ge(columnName, map.get("remindstart"));
		}
		if(map.get("remindend")!=null) {
			wrapper.le(columnName, map.get("remindend"));
		}


		int count = newsService.selectCount(wrapper);
		return R.ok().put("count", count);
	}
	


}

const menu = {
    list() {
        return [{"backMenu":[{"child":[{"buttons":["新增","查看","修改","删除"],"menu":"送养人","menuJump":"列表","tableName":"songyangren"}],"menu":"送养人管理"},{"child":[{"buttons":["查看","修改","删除","审核"],"menu":"送养宠物","menuJump":"列表","tableName":"songyangchongwu"}],"menu":"送养宠物管理"},{"child":[{"buttons":["新增","查看","修改","删除"],"menu":"地区类型","menuJump":"列表","tableName":"diquleixing"}],"menu":"地区类型管理"},{"child":[{"buttons":["查看","删除","审核"],"menu":"失信黑名单","menuJump":"列表","tableName":"shixinheimingdan"}],"menu":"失信黑名单管理"},{"child":[{"buttons":["查看","删除","修改","新增"],"menu":"申请领养","menuJump":"列表","tableName":"shenqinglingyang"}],"menu":"申请领养管理"},{"child":[{"buttons":["查看","删除"],"menu":"宠物秀","menuJump":"列表","tableName":"chongwuxiu"}],"menu":"宠物秀管理"},{"child":[{"buttons":["新增","查看","修改","删除"],"menu":"收养人","menuJump":"列表","tableName":"shouyangren"}],"menu":"收养人管理"},{"child":[{"buttons":["查看","修改","删除"],"menu":"待初审申请","menuJump":"列表","tableName":"daichushenshenqing"}],"menu":"待初审申请管理"},{"child":[{"buttons":["删除","修改","查看","审核","领养成功"],"menu":"等终审申请","menuJump":"列表","tableName":"dengzhongshenshenqing"}],"menu":"等终审申请管理"},{"child":[{"buttons":["查看","修改","删除"],"menu":"领养成功","menuJump":"列表","tableName":"lingyangchenggong"}],"menu":"领养成功管理"},{"child":[{"buttons":["删除","修改","查看"],"menu":"取消申请领养","menuJump":"列表","tableName":"quxiaoshenqinglingyang"}],"menu":"取消申请领养管理"},{"child":[{"buttons":["查看","修改","删除"],"menu":"取消待初审申请","menuJump":"列表","tableName":"quxiaodaichushenshenqing"}],"menu":"取消待初审申请管理"},{"child":[{"buttons":["查看","修改","删除"],"menu":"取消终审申请","menuJump":"列表","tableName":"quxiaozhongshenshenqing"}],"menu":"取消终审申请管理"},{"child":[{"buttons":["查看","修改","删除"],"menu":"管理员","tableName":"users"}],"menu":"管理员管理"},{"child":[{"buttons":["新增","查看","修改","删除"],"menu":"宠物资讯","tableName":"news"},{"buttons":["新增","查看","修改","删除"],"menu":"轮播图管理","tableName":"config"}],"menu":"系统管理"}],"frontMenu":[{"child":[{"buttons":["查看","领养"],"menu":"送养宠物列表","menuJump":"列表","tableName":"songyangchongwu"}],"menu":"送养宠物模块"},{"child":[{"buttons":["查看"],"menu":"失信黑名单列表","menuJump":"列表","tableName":"shixinheimingdan"}],"menu":"失信黑名单模块"},{"child":[{"buttons":["查看"],"menu":"宠物秀列表","menuJump":"列表","tableName":"chongwuxiu"}],"menu":"宠物秀模块"}],"hasBackLogin":"是","hasBackRegister":"否","hasFrontLogin":"否","hasFrontRegister":"否","roleName":"管理员","tableName":"users"},{"backMenu":[{"child":[{"buttons":["删除","新增","查看","修改"],"menu":"送养宠物","menuJump":"列表","tableName":"songyangchongwu"}],"menu":"送养宠物管理"},{"child":[{"buttons":["查看","新增","删除","修改"],"menu":"失信黑名单","menuJump":"列表","tableName":"shixinheimingdan"}],"menu":"失信黑名单管理"},{"child":[{"buttons":["查看","修改","删除","审核","取消","待初审"],"menu":"申请领养","menuJump":"列表","tableName":"shenqinglingyang"}],"menu":"申请领养管理"},{"child":[{"buttons":["查看","修改","删除","取消"],"menu":"待初审申请","menuJump":"列表","tableName":"daichushenshenqing"}],"menu":"待初审申请管理"},{"child":[{"buttons":["查看","修改","删除","取消"],"menu":"等终审申请","menuJump":"列表","tableName":"dengzhongshenshenqing"}],"menu":"等终审申请管理"},{"child":[{"buttons":["查看","修改","删除"],"menu":"领养成功","menuJump":"列表","tableName":"lingyangchenggong"}],"menu":"领养成功管理"},{"child":[{"buttons":["查看","修改","删除"],"menu":"取消申请领养","menuJump":"列表","tableName":"quxiaoshenqinglingyang"}],"menu":"取消申请领养管理"},{"child":[{"buttons":["查看","修改","删除"],"menu":"取消待初审申请","menuJump":"列表","tableName":"quxiaodaichushenshenqing"}],"menu":"取消待初审申请管理"},{"child":[{"buttons":["查看","修改","删除"],"menu":"取消终审申请","menuJump":"列表","tableName":"quxiaozhongshenshenqing"}],"menu":"取消终审申请管理"}],"frontMenu":[{"child":[{"buttons":["查看","领养"],"menu":"送养宠物列表","menuJump":"列表","tableName":"songyangchongwu"}],"menu":"送养宠物模块"},{"child":[{"buttons":["查看"],"menu":"失信黑名单列表","menuJump":"列表","tableName":"shixinheimingdan"}],"menu":"失信黑名单模块"},{"child":[{"buttons":["查看"],"menu":"宠物秀列表","menuJump":"列表","tableName":"chongwuxiu"}],"menu":"宠物秀模块"}],"hasBackLogin":"否","hasBackRegister":"否","hasFrontLogin":"是","hasFrontRegister":"是","roleName":"送养人","tableName":"songyangren"},{"backMenu":[{"child":[{"buttons":["查看"],"menu":"申请领养","menuJump":"列表","tableName":"shenqinglingyang"}],"menu":"申请领养管理"},{"child":[{"buttons":["新增","查看","修改","删除"],"menu":"宠物秀","menuJump":"列表","tableName":"chongwuxiu"}],"menu":"宠物秀管理"},{"child":[{"buttons":["查看","进入待终审"],"menu":"待初审申请","menuJump":"列表","tableName":"daichushenshenqing"}],"menu":"待初审申请管理"},{"child":[{"buttons":["查看"],"menu":"等终审申请","menuJump":"列表","tableName":"dengzhongshenshenqing"}],"menu":"等终审申请管理"},{"child":[{"buttons":["查看"],"menu":"领养成功","menuJump":"列表","tableName":"lingyangchenggong"}],"menu":"领养成功管理"},{"child":[{"buttons":["查看"],"menu":"取消申请领养","menuJump":"列表","tableName":"quxiaoshenqinglingyang"}],"menu":"取消申请领养管理"},{"child":[{"buttons":["查看"],"menu":"取消待初审申请","menuJump":"列表","tableName":"quxiaodaichushenshenqing"}],"menu":"取消待初审申请管理"},{"child":[{"buttons":["查看"],"menu":"取消终审申请","menuJump":"列表","tableName":"quxiaozhongshenshenqing"}],"menu":"取消终审申请管理"}],"frontMenu":[{"child":[{"buttons":["查看","领养"],"menu":"送养宠物列表","menuJump":"列表","tableName":"songyangchongwu"}],"menu":"送养宠物模块"},{"child":[{"buttons":["查看"],"menu":"失信黑名单列表","menuJump":"列表","tableName":"shixinheimingdan"}],"menu":"失信黑名单模块"},{"child":[{"buttons":["查看"],"menu":"宠物秀列表","menuJump":"列表","tableName":"chongwuxiu"}],"menu":"宠物秀模块"}],"hasBackLogin":"否","hasBackRegister":"否","hasFrontLogin":"是","hasFrontRegister":"是","roleName":"收养人","tableName":"shouyangren"}]
    }
}
export default menu;

声明

本博客适用于广泛的学术和教育用途,包括但不限于个人学习、开发设计,产品设计。仅供学习参考,旨在为读者提供深入理解和学术研究的材料。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2071951.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mysql数据库----简单认识库的操作

目录 1.区分概念 2.什么是数据库 3.数据库的创建和销毁 4.数据库编码初识 5.查询系统默认编码配置 6.两个查询编码表的指令 7.创建指定编码的数据库 8.不同编码的区别 第一个编码方式&#xff1a; 第二个编码方式&#xff1a; 查询结果说明&#xff1a; 9.数据库的增…

QT Quick QML 网络助手——TCP客户端

GitHub 源码: QmlLearningPro &#xff0c;选择子工程 Nettools.pro QML 其它文章请点击这里: QT QUICK QML 学习笔记 ● 运行效果&#xff1a; 左侧为常用的网络调试工具&#xff0c;右侧为本项目 UI 效果&#xff0c;前端使用 QML &#xff0c;后端使用C &#xff…

ArkTs之:数据懒加载——LazyForEach的用法

官方描述 LazyForEach从提供的数据源中按需迭代数据&#xff0c;并在每次迭代过程中创建相应的组件。当在滚动容器中使用了LazyForEach&#xff0c;框架会根据滚动容器可视区域按需创建组件&#xff0c;当组件滑出可视区域外时&#xff0c;框架会进行组件销毁回收以降低内存占…

我在某日重新下载了idea

# 1 Maven设置 2 字体样式,字体颜色 3 插件 1,fitten code和通义灵码 2,one dark theme主题 3,mybatisX 4,Rainbow Brackets 5,Key Promoter X 设置 自动导入包

Ps:首选项 - 常规

Ps菜单&#xff1a;编辑/首选项 Edit/Preferences 快捷键&#xff1a;Ctrl K Photoshop 首选项中的“常规” General选项卡主要用于调整 Photoshop 的整体工作行为和用户体验。这些设置让用户可以根据个人习惯和工作流程定制软件的响应方式和界面布局&#xff0c;从而提高工作…

下载的word中的mathtype公式双击无法打开编辑器

原因分析&#xff1a; 该word中的此公式不是通过word内置的mathtype插入公式的&#xff0c;而是从mathtype编辑器中复制粘贴到word中的。 后者的方式当被其他人下载接收后&#xff0c;无法修改此公式&#xff0c;而且该公式也不能被其他人复制&#xff0c;会报错如下&#xff…

GPT-4o System Card is released

GPT-4o System Card is released, including red teaming, frontier risk evaluations, and other key practices for industrial-strength Large Language Models. https://openai.com/index/gpt-4o-system-card/ 报告链接 企业级生成式人工智能LLM大模型技术、算法及案例实战…

5G毫米波测试助力突破高频段设备局限,实现高效外场测试

作者介绍 一、方案背景 随着业务对带宽需求的不断增加&#xff0c;通信频谱不断向更高频谱延伸&#xff0c;5G毫米波具有丰富的频率资源&#xff0c;是移动通信技术演进的必然方向。下图是ITU的WRC-19会议发布的目前5G所占用频段。 从图中可以看出&#xff0c;在5G毫米波测试中…

AgentQ,超越人类的人工智能代理

MultiOn 宣布推出一款新代理AgentQ&#xff0c;这是一款令人惊叹的产品&#xff0c;它整合了我最近一直在讨论的大部分内容&#xff1a;将 LLM 与搜索相结合。 但这个经纪人很特殊。 与其他代理不同的是&#xff0c;由于巧妙地使用了对齐技术&#xff0c;该代理可以从好的和坏的…

redis | 认识非关系数据库Redis的位图数据类型

Redis 非关 kv型 位图常用命令应用场景python操作位图 位图 位图不是真正的数据类型&#xff0c;它是定义在字符串类型中 01100001 97 61 a 01100010 98 62 b 一个字符串类型的值最多能存储512M字节的内容 位上限&#xff1a;2^32 常用命令 SETBIT \x : 16进制 没有key值 GE…

npm 设置代理

目录 前言 一、查看npm配置 二、设置代理 三、删除代理 四、代理认证 往期回顾 前言 在使用npm时&#xff0c;如果您处于需要使用代理的网络环境中&#xff0c;您可以通过配置npm来设置代理。 一、查看npm配置 npm config list或者单独查看 npm config get proxynpm co…

Using Azure openAI key rotation automation

题意&#xff1a;使用 Azure OpenAI 密钥轮换自动化 问题背景&#xff1a; We are planning to do the Azure OpenAI key rotation automatically. How can we achieve this? Do we have terraform resource for this. 我们计划自动执行 Azure OpenAI 密钥轮换。我们如何实现…

垃圾分类笔记YOLOV5(一)-pip换源-口罩识别-训练自己的数据集

pip换源网址 pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple不进行配置的是临时换源 1、从github上下载YOLOV5的代码 翻墙软件clash 数据集地址roboflow clash配置一键导入 哔哩哔哩视频地址 数据集的下载格式&#xff1a; 2、修改自己的数据…

HarmonyOS NEXT 地图服务中‘我的位置’功能全解析

1 前言 “我的位置”功能在表象上或许给人以简单之感&#xff0c;但从专业角度深入剖析&#xff0c;其蕴含着极为可观的信息量与巨大潜力。此功能绝非仅仅局限于作为一个单纯显示用户当前所处地点的标识&#xff0c;而确切地说是连接用户与周边世界、实现个性化服务的关键纽带…

operlayers-初始化地图-天地图初始化地图

今天分享一篇初始化operlayers的文章&#xff0c;算上一篇笔记吧&#xff0c;以后再有项目时直接看笔记回省好多事&#xff0c;也帮网上的兄弟们避避雷。 前言 这个项目是vue3operlayers开发的一个有关地名地址的小插件&#xff0c;具体服务就不展示了。 之所以用天地图来加…

CMake构建学习笔记3-libpng库的构建

libpng是一个用于读取、写入 PNG (Portable Network Graphics) 文件格式的开源软件库&#xff0c;有了上一篇笔记作为基础&#xff0c;构建起来也非常简单。还是在源代码的根目录中创建一个build文件夹&#xff0c;执行如下关键指令&#xff1a; # 配置CMake cmake .. -G &q…

86.游戏改造-UI修正暴力分析

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a;易道云信息技术研究院 上一个内容&#xff1a;85.游戏改造-修改UI分辨率&#xff0c;面向对象方式 85.游戏改造-修改UI分辨率&#xff…

【Material-UI】深入了解Radio Group中的useRadioGroup Hook

文章目录 一、什么是useRadioGroup&#xff1f;1.1 Hook的返回值 二、useRadioGroup的基本用法2.1 代码示例2.2 代码解析 三、useRadioGroup的应用场景3.1 动态样式调整3.2 高级交互逻辑 四、使用useRadioGroup的最佳实践4.1 保持代码简洁4.2 结合主题定制4.3 注意无障碍设计 五…

通过Python绘制不同数据类型适合的可视化图表

在数据可视化中&#xff0c;对于描述数值变量与数值变量之间的关系常见的有散点图和热力图&#xff0c;以及描述数值变量与分类变量之间的关系常见的有条形图&#xff0c;饼图和折线图&#xff0c;可以通过使用Python的matplotlib和seaborn库来绘制图表进行可视化表达&#xff…

基于R语言进行AMMI分析2

接续上文【基于R语言进行AMMI分析1】 1、AMMI()函数的结果解读 # 加载agricolae包 library(agricolae) # 加载数据 data(plrv) # 查看数据 head(plrv) model<-with(plrv,AMMI(Locality,Genotype,Rep,Yield,PCTRUE)) # 查看方差分析结果 model$ANOVA # 查看主成分的方差分析…