项目申报管理系统pf

news2024/11/16 20:49:37

@TOC

springboot375项目申报管理系统pf

第一章 课题背景及研究内容

1.1 课题背景

信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性,还是安全性,还是可操作性等各个方面来讲,遇到了互联网时代才发现能补上自古以来的短板,有效的提升管理的效率和业务水平。传统的管理模式,时间越久管理的内容越多,也需要更多的人来对数据进行整理,并且数据的汇总查询方面效率也是极其的低下,并且数据安全方面永远不会保证安全性能。结合数据内容管理的种种缺点,在互联网时代都可以得到有效的补充。结合先进的互联网技术,开发符合需求的软件,让数据内容管理不管是从录入的及时性,查看的及时性还是汇总分析的及时性,都能让正确率达到最高,管理更加的科学和便捷。本次开发的项目申报管理系统实现了成果评估管理、字典管理、公告管理、评审专家管理、项目管理、用户管理、管理员管理等功能。系统用到了关系型数据库中王者MySql作为系统的数据库,有效的对数据进行安全的存储,有效的备份,对数据可靠性方面得到了保证。并且程序也具备程序需求的所有功能,使得操作性还是安全性都大大提高,让项目申报管理系统更能从理念走到现实,确确实实的让人们提升信息处理效率。

1.2 开发目的和意义

小康时代的到来,使得人们满意度上升,生活各个方面都产生了许多变化,比如办公都有相应软件,很多工作都要求员工会操作计算机,可以说现在的时代基本被软件覆盖得差不多了,软件行业的特征就是大家都在使用软件代替传统手工记载操作,软件的出现让我们的生活还有工作又向前翻了新篇章。项目申报管理系统是一个利用软件形式管理项目信息的平台。管理员管理租车信息也不再需要用纸张进行信息记录及查询管理操作,所有的操作都是利用电脑进行办公,用户需要使用密码还有用户名进行系统登录操作,按照系统主页界面的各个功能展示进行相关操作,无论添加或者是删除,拟或是修改查询等操作,时间上不需要太多,短短几分钟就会搞定。况且软件是不限制办公地点以及办公时间的,只要有操作需要,随时随地登录系统就可以完成任务。办公效率提高这个不再是难题。公告租赁店对于租车信息的管理操作早就应该进行变革了,利用软件管理租车信息,节约人力物力成本,这是一个新的租车信息管理的创举。

1.3 论文研究内容

本次开发的项目申报管理系统的论文从下面几个部分进行编写:

第一章:本章介绍了程序开发背景和目的意义,罗列出了论文写作内容信息,让我们知道论文编写是如何进展的。

第二章:本章主要讲解了系统开发用到的相关技术方面的知识,比如SSM技术,MySQL数据库知识等内容。帮助人们更好的理解系统技术上面的相关知识。

第三章:文章第3章主要介绍了系统开发的可行性问题,从经济,时间,操作等内容上面进行了大致介绍,确定系统开发确实可行,然后分析了系统的开发流程,确定系统需要具备的大概的功能,保障系统能够稳定使用和运行。

第四章:这个章节主要绘制出了系统功能架构,让我们更直观了解项目申报管理系统的功能,对后台数据库表进行了设计,还画出了对应的E-R图。

第五章:这个章节主要介绍系统各个部分功能具体实现的界面效果。让我们了解到各个部分的功能详细情况。

第六章:这个部分主要就是对项目申报管理系统进行整体测试,看看程序是否能够达到用户使用要求,程序能否进行验收上交操作。

第二章 相关技术

本次开发项目申报管理系统使用的是B/S结构模式进行程序开发,项目申报管理系统的数据信息选择MySQL数据库进行存放。

2.1 B/S结构

B/S结构实际上就是Browser/Server(浏览器/服务器)的缩写,B/S结构是目前软件开发中的主流结构,大多数软件开发者都采用B/S这样的三层体系结构。采用B/S结构开发的项目申报管理系统能够大大方便用户使用操作,用户随时随地都可以进行项目申报管理系统的访问操作,只需要用户拥有一台会连上网络的计算机就行了,并且使用B/S 模式开发的项目申报管理系统是基于浏览器的操作方式,在与用户进行交互以及程序的表现方式上面将会更加吸引人,这样的模式也给程序员开发程序降低了难度,程序开发成本也会相应缩减不少。我们在使用项目申报管理系统期间,系统也会随着用户需求进行完善升级,使用B/S 模式开发的项目申报管理系统就完全不需要担心,因为它的升级速度快,升级产生的成本费用很低,大多依赖于用户自己在网络上下载最新版本进行安装完成程序更新。下图为B/S结构图。

图2.2 B/S结构图

2.2 MySQL数据库

开发的程序面向用户的只是程序的功能界面,让用户操作程序界面的各个功能,那么很多人就会问,用户使用程序功能生成的数据信息放在哪里的?这个就需要涉及到数据库的知识了,一般来说,程序开发通常就会对常用数据存储工具的特点进行分析比对,比如Mysql数据库的特点与优势,Access数据库的特点与优势,Sqlserver数据库的特点与优势等,最终看哪个数据库与需要开发的程序比较匹配,也符合程序功能运行需要的数据存储要求,比如,需要开发商业级别的程序,存储的数据对数据库要求较高,可以选用Oracle,如果只是比较简单的程序,对数据存储没有过多要求,可以选用微软旗下的Access,当开发程序要求数据库占用空间小,并能满足程序数据存储要求时,就可以考虑Oracle公司从瑞典MySQL AB公司在很早之前就收购过一个关系型数据库,它是现在的Mysql数据库。所以项目申报管理系统后台数据库使用的是MySQL进行数据库方面的开发工作的,MySQL它是微软开发的一款平台软件,这个软件可以给用户提供高效率的智能数据,并且数据信息还是很可靠,使用它进行数据存储可以满足大众企业管理各种各样的数据信息的需求。MySQL在MySQL版本里面它是最全面的,也是最强大的开发平台, MySQL在许多关键之处都进行了改进的操作,它也增加了很多新特性,这些改进和更新让公司能够对关键应用程序进行高效运行,并且还可以让公司降低发送信息给用户的成本,以及降低数据信息管理的基础设施。因此MySQL在公司以及企业中它的地位是非常高的,ERP还有OA系统,以及公司财务的系统都离不开MySQL,在软件开发非常流行的今天,MySQL也被用来作为网站开发的网站后台数据库,可以说公司使用MySQL进行数据管理不仅节约成本,还可以让公司数据信息的管理效率大大提高,公司数据存放在MySQL平台上,数据信息的安全性也不用担心,因为MySQL他可以给数据库里面的日志还有数据文件以及整个数据库进行加密操作,另外MySQL还提供在线备份功能,这样可以节约存储空间,加快数据备份的速度。总之,选择MySQL进行在线系统的后台数据库开发是很有优势的。这是个不错的软件选择。

第三章 系统分析

3.1可行性分析

可行性分析从时间,经济以及操作和技术上面进行调查和研究,确保合理利用信息资源,避免在进行程序设计过程中因为考虑不周到所带来的困扰,帮助我们更好的进行程序设计。

3.1.1时间可行性

本次进行系统开发,我预留了两个月时间来完成,从系统的需求分析,功能结构设计,功能详细设计以及系统测试等环节,两个月时间是可以完成程序开发操作的,我打算每天早中晚都进行程序的编写操作,这期间也包括查阅各种资料信息,加上同学以及老师的帮助和指点,相信程序开发的时间也会缩短不少。所以时间上是可行的。

3.1.2 经济可行性

项目申报管理系统的开发平台是IDEA,数据库选用MySQL数据库,使用的浏览器都是大众浏览器,这些软件是不需要收费就能进行下载安装操作的。在系统开发的硬件选择上面,我使用的是自己的笔记本进行开发操作。因此在进行系统开发时,经济上面无需额外支出。开发出来的程序可以提高办公效率,带来的经济效益比较高,系统开发的投入产出比很可观。

3.1.3 操作可行性

项目申报管理系统的界面设计比较简单,界面布局根据用户日常使用习惯进行设计,网站各个功能在导航栏里面清晰可见,网站的数据操作可视化,用户操作网站不需要培训就能上手,只需要跟着网站功能提示进行操作就行。

3.1.4 技术可行性

作为计算机专业学生,在学校期间就学习到许多关于编程方面的知识,像SSM技术,还有MySQL数据库等知识,我对IDEA开发平台以及MySQL数据库的操作也比较熟练,所以技术上面还是有一定把握。

3.1.5 法律可行性

自己本人开发的软件和用到的资料来源都是图书馆以及百度文库和百度网页等渠道,并不涉及违法。在个人毕业设计上面,无论源代码还是论文编写内容不存在抄袭行为。

从上面的经济,操作以及时间上面进行的分析,得出结论就是这次开发的项目申报管理系统在开发上面是能够进行的,系统开发出来能创造更大的经济效益,越早开发升值空间越大。

3.2系统流程分析

项目申报管理系统的开发也是有对应的流程,开发之前必须要进行用户功能需求的分析,最后根据功能需求进行网站设计还有数据库相关数据的设计工作,此次开发的项目申报管理系统开发流程如图3.1所示。

图3.1 系统开发流程图

系统开发完成之后会给用户提供登录入口,在这个界面用户输入的信息会得到验证,通过验证之后才能进去项目申报管理系统的访问主界面,系统登录执行流程如下:

图3.2 系统执行流程图

3.3系统功能需求分析

系统的开发离不开前期的需求分析,这个阶段就是让程序员知道自己该做什么事情,在进行需求分析的时候,着重点就是用户对系统的功能要求,这个阶段要是分析得很到位,系统开发出来投入使用时,用户就会发现系统的功能跟用户需求保持一致,程序稳定性也是达标的,可以说需求分析是决定系统开发成败的关键,它主要就是把现实世界进行抽象化,然后把抽象化的对象用来构建模型。

项目申报管理系统的受益群体主要是工作人员,该网站能够方便使用者进行数据信息的查找和管理工作,本次开发的网站我们设计的界面展示主要分为管理员界面以及用户界面,具体界面的功能分布如下。

项目申报管理系统管理员可以管理用户的基本信息,可以管理公告信息,可以管理公告信息等。

3.4 系统非功能需求分析

(1)完整性需求

本次开发的项目申报管理系统里面记录的数据信息不能保持为空,并且数据信息一定要核对正确才行,系统里面数据之间存在的联系不能出错,不能够张冠李戴,数据表里面同一数据在不同数据表里面的显示内容要一样。

(2)性能需求

用户在操作项目申报管理系统的各个部分内容时,弹出的页面响应时间不能太长,最好控制在三秒钟以内,最大限制值就是四秒,这个是给用户一个好的程序体验。并且系统还要能够承载多人同时在线进行项目申报管理系统的访问操作。

(3)界面需求

项目申报管理系统界面设计上面应该考虑到用户日常操作习惯,比如导航栏的设计不能在右边,这个完全违背了用户使用网站的操作习惯,同时功能导航的字体以及颜色应该比较显眼,方便用户容易找寻,避免用户在进行功能操作上面浪费太多时间。

(4)安全性需求

项目申报管理系统的安全性要有保证,给用户一种可靠,可以信赖的感觉,系统在运行过程中,不能总是出错,与用户进行功能界面交互时,要及时给出反馈信息,另外系统要设置登录窗口,让不是系统的用户不可以进行系统功能界面的访问操作。系统用户也要经过用户名密码的填写操作,才可以进入系统主界面,这样就可以保障系统数据信息处于一种安全状态。

第四章 系统设计

4.1 总体功能

项目申报管理系统是根据需求定制开发,开发软件选用IDEA平台配合MySQL数据库进行开发环境的搭建操作,网站采用WEB应用程序中最流行的B/S结构进行开发,用户访问系统数据仅仅需要在客户端安装谷歌浏览器或者是当下常用浏览器就可以访问网站内容。

4.2 系统模块设计

项目申报管理系统系统在进行系统中功能模块的划分时,采用层次图来进行表示。层次图具有树形结构,它能使用矩形框来描绘数据信息。顶层代表的数据结构很完整,顶层下面的矩形框表示的数据就是子集数据,当然处于最下面的矩形框就是不能再进行细分的数据元素了,使用层次方框图描述系统功能能让用户一目了然,能够明白系统的功能,以及对应功能板块下面的子功能都可以清楚领会。项目申报管理系统分为管理员和用户两部分操作角色,下面将对他们的功能进行阐述。

管理员可以管理用户的基本信息,可以管理等功能。管理员功能结构图如下:

结构设计图

图4.1 管理员功能结构图

4.3 数据库设计

4.3.1 数据库设计

数据库设计它是建立在数据库还有它对应的应用系统的一门技术,只要是信息系统开发还有系统建设,都会用到数据库设计,但是这个数据库设计并不是很简单就可以完成的,设计期间会遇到很多麻烦事,在设计期间需要考虑再考虑,逐步完善。主要内容也就是把数据库里面的对象还有对象之间的联系进行系统规划操作,还有把他们结构化的过程。

4.3.2 数据库E-R 图

E-R 图分成三部分内容,分别是实体,实体的属性以及实体之间的关系这三个部分的内容,通常长方形表示的就是实体,椭圆形表示的就是属性,菱形表示的就是关系了。在E-R 图里面,实体就是对象,比如学生,人,音乐等都能代表实体,实体都具备自己的成员,比如张三就是学生实体里面的成员。一个学生会具有自己的姓名,年龄,出生日期等信息,这些信息就是学生这个实体的属性,因此E-R 图属性代表的就是数据对象具备的属性,E-R 图的关系就是实体跟实体之间的关系了,比如学生跟课程会存在一定的关系,这种关系使用菱形进行表示。

(1)下图是成果评估实体和其具备的属性。

C:/Users/Administrator/Desktop/temp111\6.1\img\成果评估.jpg

成果评估实体属性图

(2)下图是用户实体和其具备的属性。

C:/Users/Administrator/Desktop/temp111\6.1\img\用户.jpg

用户实体属性图

(3)下图是公告实体和其具备的属性。

C:/Users/Administrator/Desktop/temp111\6.1\img\公告.jpg

公告实体属性图

(4)下图是项目实体和其具备的属性。

C:/Users/Administrator/Desktop/temp111\6.1\img\项目.jpg

项目实体属性图

(5)下图是评审专家实体和其具备的属性。

C:/Users/Administrator/Desktop/temp111\6.1\img\评审专家.jpg

评审专家实体属性图

4.3.3 数据库表设计

数据库里面的数据表存放的就是各种数据记录,我们在进行系统增删改查操作时,其实也是在对应数据表里面进行的增删改查操作,一个好的数据库能够缩短信息处理时间,所以说数据库的设计工作不容小觑,数据库里面设置哪些表,表里面的字段设计以及字段类型和字段长度等信息都要考虑周到才行,比如时间这个字段,它的数据类型就不能是int型,不然在系统操作中就会弹出输入数据格式不符合要求的报错提示。下面简单介绍项目申报管理系统的一些数据表。

表4.1成果评估表

序号列名数据类型说明允许空
1IdIntid
2xiangmu_idInteger项目
3pingshenzhuanjia_idInteger评审专家
4insert_timeDate录入时间
5chengguopinggu_contentString评估意见
6pinggu_defenBigDecimal评估得分
7chengguopinggu_typesInteger评估结果
8update_timeDate评估时间
9create_timeDate创建时间

表4.2字典表

序号列名数据类型说明允许空
1IdIntid
2dic_codeString字段
3dic_nameString字段名
4code_indexInteger编码
5index_nameString编码名字
6super_idInteger父字段id
7beizhuString备注
8create_timeDate创建时间

表4.3公告表

序号列名数据类型说明允许空
1IdIntid
2gonggao_nameString公告名称
3gonggao_typesInteger公告类型
4insert_timeDate公告发布时间
5gonggao_contentString公告详情
6create_timeDate创建时间

表4.4评审专家表

序号列名数据类型说明允许空
1IdIntid
2pingshenzhuanjia_nameString评审专家姓名
3pingshenzhuanjia_phoneString评审专家手机号
4pingshenzhuanjia_id_numberString评审专家身份证号
5pingshenzhuanjia_photoString评审专家头像
6pingshenzhuanjia_emailString电子邮箱
7yanjiufangxiang_typesInteger研究方向
8pingshenzhuanjia_contentString专家介绍
9create_timeDate创建时间

表4.5项目表

序号列名数据类型说明允许空
1IdIntid
2yonghu_idInteger用户
3xiangmu_uuid_numberString项目编号
4xiangmu_nameString项目名称
5laiyuan_typesInteger课题来源
6xiangmu_typesInteger项目类型
7kaishi_timeDate项目开始时间
8jieshu_timeDate项目结束时间
9huafei_jineBigDecimal项目花费
10yanjiufangxiang_typesInteger所属方向
11yanjiufangxiang_fileString附件
12xiangmu_contentString项目内容
13xiangmu_chengguo_contentString项目成果
14insert_timeDate申请时间
15xiangmu_yesno_typesInteger申请状态
16xiangmu_yesno_textString审核意见
17xiangmu_shenhe_timeDate审核时间
18create_timeDate创建时间

表4.6用户表

序号列名数据类型说明允许空
1IdIntid
2yonghu_nameString用户姓名
3yonghu_phoneString用户手机号
4yonghu_id_numberString用户身份证号
5yonghu_photoString用户头像
6yonghu_emailString电子邮箱
7create_timeDate创建时间

表4.7管理员表

序号列名数据类型说明允许空
1IdIntid
2usernameString用户名
3passwordString密码
4roleString角色
5addtimeDate新增时间

第五章 系统实现

5.1 管理员功能模块的实现

5.1.1 项目列表

如图5.1显示的就是项目列表页面,此页面提供给管理员的功能有:查看项目、新增项目、修改项目、删除项目等。

图5.1 项目列表页面

5.1.2 公告信息管理

管理员可以对公告信息进行管理,可以新增公告信息,修改公告信息,删除无效的公告信息。公告信息管理界面如图5.2所示。

图5.2 公告信息管理页面

5.1.3 公告类型管理

公告类型管理页面显示所有公告类型,在此页面既可以让管理员添加新的公告信息类型,也能对已有的公告类型信息执行编辑更新,失效的公告类型信息也能让管理员快速删除。下图就是公告类型管理页面。公告类型管理界面如图5.3所示。

图5.3公告类型管理界面

PingshenzhuanjiaController.java

package com.controller;

import java.io.File;
import java.math.BigDecimal;
import java.net.URL;
import java.text.SimpleDateFormat;
import com.alibaba.fastjson.JSONObject;
import java.util.*;
import org.springframework.beans.BeanUtils;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.context.ContextLoader;
import javax.servlet.ServletContext;
import com.service.TokenService;
import com.utils.*;
import java.lang.reflect.InvocationTargetException;

import com.service.DictionaryService;
import org.apache.commons.lang3.StringUtils;
import com.annotation.IgnoreAuth;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.entity.*;
import com.entity.view.*;
import com.service.*;
import com.utils.PageUtils;
import com.utils.R;
import com.alibaba.fastjson.*;

/**
 * 评审专家
 * 后端接口
 * @author
 * @email
*/
@RestController
@Controller
@RequestMapping("/pingshenzhuanjia")
public class PingshenzhuanjiaController {
    private static final Logger logger = LoggerFactory.getLogger(PingshenzhuanjiaController.class);

    private static final String TABLE_NAME = "pingshenzhuanjia";

    @Autowired
    private PingshenzhuanjiaService pingshenzhuanjiaService;


    @Autowired
    private TokenService tokenService;
    @Autowired
    private DictionaryService dictionaryService;

    //级联表非注册的service
    //注册表service
    @Autowired
    private YonghuService yonghuService;


    /**
    * 后端列表
    */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){
        logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
        String role = String.valueOf(request.getSession().getAttribute("role"));
        if(false)
            return R.error(511,"永不会进入");
        else if("用户".equals(role))
            params.put("yonghuId",request.getSession().getAttribute("userId"));
        else if("评审专家".equals(role))
            params.put("pingshenzhuanjiaId",request.getSession().getAttribute("userId"));
        CommonUtil.checkMap(params);
        PageUtils page = pingshenzhuanjiaService.queryPage(params);

        //字典表数据转换
        List<PingshenzhuanjiaView> list =(List<PingshenzhuanjiaView>)page.getList();
        for(PingshenzhuanjiaView c:list){
            //修改对应字典表字段
            dictionaryService.dictionaryConvert(c, request);
        }
        return R.ok().put("data", page);
    }

    /**
    * 后端详情
    */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id, HttpServletRequest request){
        logger.debug("info方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
        PingshenzhuanjiaEntity pingshenzhuanjia = pingshenzhuanjiaService.selectById(id);
        if(pingshenzhuanjia !=null){
            //entity转view
            PingshenzhuanjiaView view = new PingshenzhuanjiaView();
            BeanUtils.copyProperties( pingshenzhuanjia , view );//把实体数据重构到view中
            //修改对应字典表字段
            dictionaryService.dictionaryConvert(view, request);
            return R.ok().put("data", view);
        }else {
            return R.error(511,"查不到数据");
        }

    }

    /**
    * 后端保存
    */
    @RequestMapping("/save")
    public R save(@RequestBody PingshenzhuanjiaEntity pingshenzhuanjia, HttpServletRequest request){
        logger.debug("save方法:,,Controller:{},,pingshenzhuanjia:{}",this.getClass().getName(),pingshenzhuanjia.toString());

        String role = String.valueOf(request.getSession().getAttribute("role"));
        if(false)
            return R.error(511,"永远不会进入");

        Wrapper<PingshenzhuanjiaEntity> queryWrapper = new EntityWrapper<PingshenzhuanjiaEntity>()
            .eq("username", pingshenzhuanjia.getUsername())
            .or()
            .eq("pingshenzhuanjia_phone", pingshenzhuanjia.getPingshenzhuanjiaPhone())
            .or()
            .eq("pingshenzhuanjia_id_number", pingshenzhuanjia.getPingshenzhuanjiaIdNumber())
            ;

        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        PingshenzhuanjiaEntity pingshenzhuanjiaEntity = pingshenzhuanjiaService.selectOne(queryWrapper);
        if(pingshenzhuanjiaEntity==null){
            pingshenzhuanjia.setCreateTime(new Date());
            pingshenzhuanjia.setPassword("123456");
            pingshenzhuanjiaService.insert(pingshenzhuanjia);
            return R.ok();
        }else {
            return R.error(511,"账户或者评审专家手机号或者评审专家身份证号已经被使用");
        }
    }

    /**
    * 后端修改
    */
    @RequestMapping("/update")
    public R update(@RequestBody PingshenzhuanjiaEntity pingshenzhuanjia, HttpServletRequest request) throws NoSuchFieldException, ClassNotFoundException, IllegalAccessException, InstantiationException {
        logger.debug("update方法:,,Controller:{},,pingshenzhuanjia:{}",this.getClass().getName(),pingshenzhuanjia.toString());
        PingshenzhuanjiaEntity oldPingshenzhuanjiaEntity = pingshenzhuanjiaService.selectById(pingshenzhuanjia.getId());//查询原先数据

        String role = String.valueOf(request.getSession().getAttribute("role"));
//        if(false)
//            return R.error(511,"永远不会进入");
        //根据字段查询是否有相同数据
        Wrapper<PingshenzhuanjiaEntity> queryWrapper = new EntityWrapper<PingshenzhuanjiaEntity>()
            .notIn("id",pingshenzhuanjia.getId())
            .andNew()
            .eq("username", pingshenzhuanjia.getUsername())
            .or()
            .eq("pingshenzhuanjia_phone", pingshenzhuanjia.getPingshenzhuanjiaPhone())
            .or()
            .eq("pingshenzhuanjia_id_number", pingshenzhuanjia.getPingshenzhuanjiaIdNumber())
            ;

        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        PingshenzhuanjiaEntity pingshenzhuanjiaEntity = pingshenzhuanjiaService.selectOne(queryWrapper);
        if("".equals(pingshenzhuanjia.getPingshenzhuanjiaPhoto()) || "null".equals(pingshenzhuanjia.getPingshenzhuanjiaPhoto())){
                pingshenzhuanjia.setPingshenzhuanjiaPhoto(null);
        }
        if(pingshenzhuanjiaEntity==null){
            pingshenzhuanjiaService.updateById(pingshenzhuanjia);//根据id更新
            return R.ok();
        }else {
            return R.error(511,"账户或者评审专家手机号或者评审专家身份证号已经被使用");
        }
    }



    /**
    * 删除
    */
    @RequestMapping("/delete")
    public R delete(@RequestBody Integer[] ids, HttpServletRequest request){
        logger.debug("delete:,,Controller:{},,ids:{}",this.getClass().getName(),ids.toString());
        List<PingshenzhuanjiaEntity> oldPingshenzhuanjiaList =pingshenzhuanjiaService.selectBatchIds(Arrays.asList(ids));//要删除的数据
        pingshenzhuanjiaService.deleteBatchIds(Arrays.asList(ids));

        return R.ok();
    }


    /**
     * 批量上传
     */
    @RequestMapping("/batchInsert")
    public R save( String fileName, HttpServletRequest request){
        logger.debug("batchInsert方法:,,Controller:{},,fileName:{}",this.getClass().getName(),fileName);
        Integer yonghuId = Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId")));
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        try {
            List<PingshenzhuanjiaEntity> pingshenzhuanjiaList = new ArrayList<>();//上传的东西
            Map<String, List<String>> seachFields= new HashMap<>();//要查询的字段
            Date date = new Date();
            int lastIndexOf = fileName.lastIndexOf(".");
            if(lastIndexOf == -1){
                return R.error(511,"该文件没有后缀");
            }else{
                String suffix = fileName.substring(lastIndexOf);
                if(!".xls".equals(suffix)){
                    return R.error(511,"只支持后缀为xls的excel文件");
                }else{
                    URL resource = this.getClass().getClassLoader().getResource("static/upload/" + fileName);//获取文件路径
                    File file = new File(resource.getFile());
                    if(!file.exists()){
                        return R.error(511,"找不到上传文件,请联系管理员");
                    }else{
                        List<List<String>> dataList = PoiUtil.poiImport(file.getPath());//读取xls文件
                        dataList.remove(0);//删除第一行,因为第一行是提示
                        for(List<String> data:dataList){
                            //循环
                            PingshenzhuanjiaEntity pingshenzhuanjiaEntity = new PingshenzhuanjiaEntity();
//                            pingshenzhuanjiaEntity.setUsername(data.get(0));                    //账户 要改的
//                            //pingshenzhuanjiaEntity.setPassword("123456");//密码
//                            pingshenzhuanjiaEntity.setPingshenzhuanjiaName(data.get(0));                    //评审专家姓名 要改的
//                            pingshenzhuanjiaEntity.setPingshenzhuanjiaPhone(data.get(0));                    //评审专家手机号 要改的
//                            pingshenzhuanjiaEntity.setPingshenzhuanjiaIdNumber(data.get(0));                    //评审专家身份证号 要改的
//                            pingshenzhuanjiaEntity.setPingshenzhuanjiaPhoto("");//详情和图片
//                            pingshenzhuanjiaEntity.setSexTypes(Integer.valueOf(data.get(0)));   //性别 要改的
//                            pingshenzhuanjiaEntity.setPingshenzhuanjiaEmail(data.get(0));                    //电子邮箱 要改的
//                            pingshenzhuanjiaEntity.setYanjiufangxiangTypes(Integer.valueOf(data.get(0)));   //研究方向 要改的
//                            pingshenzhuanjiaEntity.setPingshenzhuanjiaContent("");//详情和图片
//                            pingshenzhuanjiaEntity.setCreateTime(date);//时间
                            pingshenzhuanjiaList.add(pingshenzhuanjiaEntity);


                            //把要查询是否重复的字段放入map中
                                //账户
                                if(seachFields.containsKey("username")){
                                    List<String> username = seachFields.get("username");
                                    username.add(data.get(0));//要改的
                                }else{
                                    List<String> username = new ArrayList<>();
                                    username.add(data.get(0));//要改的
                                    seachFields.put("username",username);
                                }
                                //评审专家手机号
                                if(seachFields.containsKey("pingshenzhuanjiaPhone")){
                                    List<String> pingshenzhuanjiaPhone = seachFields.get("pingshenzhuanjiaPhone");
                                    pingshenzhuanjiaPhone.add(data.get(0));//要改的
                                }else{
                                    List<String> pingshenzhuanjiaPhone = new ArrayList<>();
                                    pingshenzhuanjiaPhone.add(data.get(0));//要改的
                                    seachFields.put("pingshenzhuanjiaPhone",pingshenzhuanjiaPhone);
                                }
                                //评审专家身份证号
                                if(seachFields.containsKey("pingshenzhuanjiaIdNumber")){
                                    List<String> pingshenzhuanjiaIdNumber = seachFields.get("pingshenzhuanjiaIdNumber");
                                    pingshenzhuanjiaIdNumber.add(data.get(0));//要改的
                                }else{
                                    List<String> pingshenzhuanjiaIdNumber = new ArrayList<>();
                                    pingshenzhuanjiaIdNumber.add(data.get(0));//要改的
                                    seachFields.put("pingshenzhuanjiaIdNumber",pingshenzhuanjiaIdNumber);
                                }
                        }

                        //查询是否重复
                         //账户
                        List<PingshenzhuanjiaEntity> pingshenzhuanjiaEntities_username = pingshenzhuanjiaService.selectList(new EntityWrapper<PingshenzhuanjiaEntity>().in("username", seachFields.get("username")));
                        if(pingshenzhuanjiaEntities_username.size() >0 ){
                            ArrayList<String> repeatFields = new ArrayList<>();
                            for(PingshenzhuanjiaEntity s:pingshenzhuanjiaEntities_username){
                                repeatFields.add(s.getUsername());
                            }
                            return R.error(511,"数据库的该表中的 [账户] 字段已经存在 存在数据为:"+repeatFields.toString());
                        }
                         //评审专家手机号
                        List<PingshenzhuanjiaEntity> pingshenzhuanjiaEntities_pingshenzhuanjiaPhone = pingshenzhuanjiaService.selectList(new EntityWrapper<PingshenzhuanjiaEntity>().in("pingshenzhuanjia_phone", seachFields.get("pingshenzhuanjiaPhone")));
                        if(pingshenzhuanjiaEntities_pingshenzhuanjiaPhone.size() >0 ){
                            ArrayList<String> repeatFields = new ArrayList<>();
                            for(PingshenzhuanjiaEntity s:pingshenzhuanjiaEntities_pingshenzhuanjiaPhone){
                                repeatFields.add(s.getPingshenzhuanjiaPhone());
                            }
                            return R.error(511,"数据库的该表中的 [评审专家手机号] 字段已经存在 存在数据为:"+repeatFields.toString());
                        }
                         //评审专家身份证号
                        List<PingshenzhuanjiaEntity> pingshenzhuanjiaEntities_pingshenzhuanjiaIdNumber = pingshenzhuanjiaService.selectList(new EntityWrapper<PingshenzhuanjiaEntity>().in("pingshenzhuanjia_id_number", seachFields.get("pingshenzhuanjiaIdNumber")));
                        if(pingshenzhuanjiaEntities_pingshenzhuanjiaIdNumber.size() >0 ){
                            ArrayList<String> repeatFields = new ArrayList<>();
                            for(PingshenzhuanjiaEntity s:pingshenzhuanjiaEntities_pingshenzhuanjiaIdNumber){
                                repeatFields.add(s.getPingshenzhuanjiaIdNumber());
                            }
                            return R.error(511,"数据库的该表中的 [评审专家身份证号] 字段已经存在 存在数据为:"+repeatFields.toString());
                        }
                        pingshenzhuanjiaService.insertBatch(pingshenzhuanjiaList);
                        return R.ok();
                    }
                }
            }
        }catch (Exception e){
            e.printStackTrace();
            return R.error(511,"批量插入数据异常,请联系管理员");
        }
    }


    /**
    * 登录
    */
    @IgnoreAuth
    @RequestMapping(value = "/login")
    public R login(String username, String password, String captcha, HttpServletRequest request) {
        PingshenzhuanjiaEntity pingshenzhuanjia = pingshenzhuanjiaService.selectOne(new EntityWrapper<PingshenzhuanjiaEntity>().eq("username", username));
        if(pingshenzhuanjia==null || !pingshenzhuanjia.getPassword().equals(password))
            return R.error("账号或密码不正确");
        String token = tokenService.generateToken(pingshenzhuanjia.getId(),username, "pingshenzhuanjia", "评审专家");
        R r = R.ok();
        r.put("token", token);
        r.put("role","评审专家");
        r.put("username",pingshenzhuanjia.getPingshenzhuanjiaName());
        r.put("tableName","pingshenzhuanjia");
        r.put("userId",pingshenzhuanjia.getId());
        return r;
    }

    /**
    * 注册
    */
    @IgnoreAuth
    @PostMapping(value = "/register")
    public R register(@RequestBody PingshenzhuanjiaEntity pingshenzhuanjia, HttpServletRequest request) {
//    	ValidatorUtils.validateEntity(user);
        Wrapper<PingshenzhuanjiaEntity> queryWrapper = new EntityWrapper<PingshenzhuanjiaEntity>()
            .eq("username", pingshenzhuanjia.getUsername())
            .or()
            .eq("pingshenzhuanjia_phone", pingshenzhuanjia.getPingshenzhuanjiaPhone())
            .or()
            .eq("pingshenzhuanjia_id_number", pingshenzhuanjia.getPingshenzhuanjiaIdNumber())
            ;
        PingshenzhuanjiaEntity pingshenzhuanjiaEntity = pingshenzhuanjiaService.selectOne(queryWrapper);
        if(pingshenzhuanjiaEntity != null)
            return R.error("账户或者评审专家手机号或者评审专家身份证号已经被使用");
        pingshenzhuanjia.setCreateTime(new Date());
        pingshenzhuanjiaService.insert(pingshenzhuanjia);

        return R.ok();
    }

    /**
     * 重置密码
     */
    @GetMapping(value = "/resetPassword")
    public R resetPassword(Integer  id, HttpServletRequest request) {
        PingshenzhuanjiaEntity pingshenzhuanjia = pingshenzhuanjiaService.selectById(id);
        pingshenzhuanjia.setPassword("123456");
        pingshenzhuanjiaService.updateById(pingshenzhuanjia);
        return R.ok();
    }


    /**
     * 忘记密码
     */
    @IgnoreAuth
    @RequestMapping(value = "/resetPass")
    public R resetPass(String username, HttpServletRequest request) {
        PingshenzhuanjiaEntity pingshenzhuanjia = pingshenzhuanjiaService.selectOne(new EntityWrapper<PingshenzhuanjiaEntity>().eq("username", username));
        if(pingshenzhuanjia!=null){
            pingshenzhuanjia.setPassword("123456");
            boolean b = pingshenzhuanjiaService.updateById(pingshenzhuanjia);
            if(!b){
               return R.error();
            }
            return R.ok();
        }else{
           return R.error("账号不存在");
        }
    }


    /**
    * 获取用户的session用户信息
    */
    @RequestMapping("/session")
    public R getCurrPingshenzhuanjia(HttpServletRequest request){
        Integer id = (Integer)request.getSession().getAttribute("userId");
        PingshenzhuanjiaEntity pingshenzhuanjia = pingshenzhuanjiaService.selectById(id);
        if(pingshenzhuanjia !=null){
            //entity转view
            PingshenzhuanjiaView view = new PingshenzhuanjiaView();
            BeanUtils.copyProperties( pingshenzhuanjia , view );//把实体数据重构到view中

            //修改对应字典表字段
            dictionaryService.dictionaryConvert(view, request);
            return R.ok().put("data", view);
        }else {
            return R.error(511,"查不到数据");
        }
    }


    /**
    * 退出
    */
    @GetMapping(value = "logout")
    public R logout(HttpServletRequest request) {
        request.getSession().invalidate();
        return R.ok("退出成功");
    }



}

ConfigController.java

package com.controller;


import java.util.Arrays;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
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.annotation.IgnoreAuth;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.entity.ConfigEntity;
import com.service.ConfigService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.ValidatorUtils;

/**
 * 登录相关
 */
@RequestMapping("config")
@RestController
public class ConfigController{
	
	@Autowired
	private ConfigService configService;

	/**
     * 列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,ConfigEntity config){
        EntityWrapper<ConfigEntity> ew = new EntityWrapper<ConfigEntity>();
    	PageUtils page = configService.queryPage(params);
        return R.ok().put("data", page);
    }
    
	/**
     * 列表
     */
    @IgnoreAuth
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params,ConfigEntity config){
        EntityWrapper<ConfigEntity> ew = new EntityWrapper<ConfigEntity>();
    	PageUtils page = configService.queryPage(params);
        return R.ok().put("data", page);
    }

    /**
     * 信息
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") String id){
        ConfigEntity config = configService.selectById(id);
        return R.ok().put("data", config);
    }
    
    /**
     * 详情
     */
    @IgnoreAuth
    @RequestMapping("/detail/{id}")
    public R detail(@PathVariable("id") String id){
        ConfigEntity config = configService.selectById(id);
        return R.ok().put("data", config);
    }
    
    /**
     * 根据name获取信息
     */
    @RequestMapping("/info")
    public R infoByName(@RequestParam String name){
        ConfigEntity config = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "faceFile"));
        return R.ok().put("data", config);
    }
    
    /**
     * 保存
     */
    @PostMapping("/save")
    public R save(@RequestBody ConfigEntity config){
//    	ValidatorUtils.validateEntity(config);
    	configService.insert(config);
        return R.ok();
    }

    /**
     * 修改
     */
    @RequestMapping("/update")
    public R update(@RequestBody ConfigEntity config){
//        ValidatorUtils.validateEntity(config);
        configService.updateById(config);//全部更新
        return R.ok();
    }

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
    	configService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }
}

PingshenzhuanjiaServiceImpl.java
package com.service.impl;

import com.utils.StringUtil;
import com.service.DictionaryService;
import com.utils.ClazzDiff;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.lang.reflect.Field;
import java.util.*;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.transaction.annotation.Transactional;
import com.utils.PageUtils;
import com.utils.Query;
import org.springframework.web.context.ContextLoader;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
import com.dao.PingshenzhuanjiaDao;
import com.entity.PingshenzhuanjiaEntity;
import com.service.PingshenzhuanjiaService;
import com.entity.view.PingshenzhuanjiaView;

/**
 * 评审专家 服务实现类
 */
@Service("pingshenzhuanjiaService")
@Transactional
public class PingshenzhuanjiaServiceImpl extends ServiceImpl<PingshenzhuanjiaDao, PingshenzhuanjiaEntity> implements PingshenzhuanjiaService {

    @Override
    public PageUtils queryPage(Map<String,Object> params) {
        Page<PingshenzhuanjiaView> page =new Query<PingshenzhuanjiaView>(params).getPage();
        page.setRecords(baseMapper.selectListView(page,params));
        return new PageUtils(page);
    }


}

声明

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

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

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

相关文章

[C++游戏开发] 超大地图多人在线扫雷

[C游戏开发] 超大地图多人在线扫雷 前言游戏截图注册方法游戏功能介绍操作方法介绍游戏特性介绍1.颜色标识2.生存方法 使用的技术核心代码尾声***如果你不介意的话&#xff0c;你应该点个赞&#xff0c;然后收藏&#xff0c;然后关注对不对。*** 前言 唉&#xff0c;写文章要什…

【秋招笔试题】合并最小值 DP

题面 解法&#xff1a;与leetcode321不一样的是&#xff0c;那个是最大值&#xff0c;这个是最小值&#xff0c;且需要处理0首位问题。那道题是Hard题中的Hard&#xff0c;无论是思维量还是代码量都是顶级&#xff0c;这道题难度并不弱于那道。 观察到数据量为500级别&#x…

DVWA-IDS 特殊版本测试

起因 浏览DVWA历史更新记录发现有版本带有IDS插件&#xff0c;可以用于平时没有相关设备等场景演示用&#xff0c;所以开启本次测试。 下载 官方最新版本是移除了IDS插件&#xff0c;原因是“从不使用”&#xff0c;所以需要下载移除该插件之前的版本。 https://github.com/…

【vue教程】六. Vue 的状态管理

目录 往期列表本章涵盖知识点回顾Vuex 的基本概念什么是 Vuex&#xff1f;为什么需要 Vuex&#xff1f; Vuex 的核心概念stategettersmutationsactionsmodules Vuex 的安装和基本使用安装 Vuex创建 store在 Vue 应用中使用 store在组件中访问和修改状态 Vuex 的模块化模块化的好…

PWN练习---Stack_2

目录 srop源码分析exp putsorsys源码分析exp ret2csu_1源码分析exp traveler源码分析exp srop 题源&#xff1a;[NewStarCTF 2023 公开赛道]srop 考点&#xff1a;SROP 栈迁移 源码 首先从bss段利用 syscall 调用 write 读出数据信息&#xff0c;然后调用 syscall-read向栈中…

回归预测|基于鲸鱼优化支持向量机结合Adaboost集成的数据回归预测Matlab程序 多特征输入单输出 效果非常不错!WOA-SVM-Adaboost

回归预测|基于鲸鱼优化支持向量机结合Adaboost集成的数据回归预测Matlab程序 多特征输入单输出 效果非常不错&#xff01;WOA-SVM-Adaboost 文章目录 前言回归预测|基于鲸鱼优化支持向量机结合Adaboost集成的数据回归预测Matlab程序 多特征输入单输出 效果非常不错&#xff01;…

Wallpaper-将动态壁纸永久设置为静态

可以在设置里找到横排性能选项点击之后里面有个回放&#xff0c;回放中有个应用程序规则点击设置-创建新规则&#xff0c;当explorer.exe(好像是微软的文件浏览&#xff1f;)条件为运行中&#xff0c;回放选择暂停即可 然后确定即可。

轻松上手:10款热门产品管理系统推荐

文章介绍了以下几个工具&#xff1a;PingCode、Worktile、Teambition、明道云、用友云、Tapd、禅道、Figma、Amplitude、Asana 。 在寻找合适的产品管理系统时&#xff0c;你是否感到市场上的选择令人眼花缭乱&#xff0c;不知从何选择&#xff1f;一个好的产品管理系统可以极大…

推荐4款让文字创作更轻松的AI 写作助手 !

目前很多的AI 技术已经渗透到了我们生活的各个领域&#xff0c;包括写作。ai写作工具的出现&#xff0c;为那些有写作困难或者需求的人们提供了很大的帮助&#xff0c;成为了我们的一大得力助手。今天&#xff0c;就给大家推荐几款比较热门的AI写作工具。 1、笔灵AI写作助手 直…

Java面向接口编程(例题+知识点)

题目&#xff1a; 采用面向接口编程思想组装一台计算机 计算机的主要组成部分 CPU 硬盘 内存 代码解析&#xff1a; 1.参数类型为 CPU 是因为它是一个接口。接口类型参数的主要好处是它使方法具有更好的灵活性和可扩展性。你可以传入任何实现了 CPU 接口的类的实例。 2.使用…

博达网站群管理平台 v6.0使用相关问题解决

1 介绍 最近受人所托&#xff0c;需要用博达网站群管理平台创建一个网站。该平台的内部版本为9.8.2。作为一个能直接从代码创建网站系统的人&#xff0c;初次使用本平台&#xff0c;刚开始感觉摸不着头脑。因为该平台存在的目的&#xff0c;就是让不懂代码的人能快速创建网站&…

记录xserver做域名,腾讯云做服务器的域名解析流程

以下为个人理解&#xff0c;请多指教 主域名 1.在Xserver买好域名后&#xff0c;会要求需要购买它们的服务器&#xff0c;因为server域名与server服务器是绑定关系 2.在腾讯云的“云解析DNS”添加域名&#xff0c;为自己购买的主域名abc.com 3.解析并生效 一般为www&#xff…

TransRepair

TransRepair: Context-aware Program Repair for Compilation Errors 基本信息 ASE 22: 37th IEEE/ACM International Conference on Automated Software Engineering 博客贡献人 页禾七 作者 Xueyang Li&#xff0c;Shangqing Liu&#xff0c;Ruitao Feng&#xff0c;Gu…

qt-17不规则窗体

不规则窗体 知识点shape.hshape.cppmain.cpp运行图 知识点 感觉这个就是在图片背景 贴了白色 shape.h #ifndef SHAPE_H #define SHAPE_H#include <QWidget>class Shape : public QWidget {Q_OBJECTpublic:Shape(QWidget *parent nullptr);~Shape(); protected:void m…

【开源社区】Elasticsearch(ES)中 exists 查询空值字段的坑

文章目录 1、概述2、使用 null_value 处理空值3、使用 exists 函数查询值为空的文档3.1 使用场景3.2 ES 中常见的空值查询方式3.3 常见误区3.4 使用 bool 查询函数查询空值字段3.5 exists 函数详解3.5.1 bool 查询的不足3.5.3 exists 的基本使用 3.6 完美方案 1、概述 本文主要…

环网交换机 环网数采仪 环网采集器确保数据传输无懈可击!

计讯物联Pro级双向防护&#xff0c;升级环网采集器确保数据传输无懈可击&#xff01; 在物联网(IoT)的世界里&#xff0c;数据流动如同城市交通&#xff0c;需要高效且可靠的网络来支撑。但就像城市交通可能遇到意外拥堵或道路封闭&#xff0c;传统网络在数据传输上也会遇到障…

Redis RDB三两事

rdb&#xff1a;将数据库的快照以二进制格式保存在文件中&#xff0c;redis重启后直接加载数据。可以通过save和bgsave命令生成rdb。当然我们可以在生成rdb文件时指定规则&#xff0c;例如 save 60 1000 如果60秒内不少于1000个key发生了改动&#xff0c;则生成一个新的rdb文件…

苹果电脑能玩Steam游戏吗?Steam对苹果笔记本要求高吗 steam苹果下载安装教程

对于游戏爱好者而言&#xff0c;如何在Mac上安装并使用Steam玩游戏成为一个重要的问题&#xff0c;Steam作为全球最大的数字发行平台和游戏社区&#xff0c;为玩家提供了丰富的游戏资源和社交交流平台。然而&#xff0c;由于Mac和Windows系统之间存在差异&#xff0c;很多人不确…

Linux进程间通信方式对比

参考&#xff1a; Linux进程间通信总结-百度开发者中心 Linux操作系统提供了多种进程间通信&#xff08;IPC&#xff09;的方式&#xff0c;每种方式都有其独特的应用场景和优缺点。下面将对Linux下的进程间通信方式进行总结和比较。 管道&#xff08;Pipe&#xff09; 管道是最…

小白学大模型:GLM 调用教程

最近这一两周看到不少互联网公司都已经开始秋招提前批面试了。 不同以往的是&#xff0c;当前职场环境已不再是那个双向奔赴时代了。求职者在变多&#xff0c;HC 在变少&#xff0c;岗位要求还更高了。 最近&#xff0c;我们又陆续整理了很多大厂的面试题&#xff0c;帮助一些…