基于SSM+JSP文献检索系统的设计与实现【Java毕业设计·安装调试·文档报告】

发布于:2022-12-09 ⋅ 阅读:(591) ⋅ 点赞:(0)

🍊作者:计算机编程-吉哥

🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。

🍊心愿:点赞 👍 收藏 ⭐评论 📝

🍅 文末获取源码联系

技术选型

spring、springmvc、mybatis、jsp、jquery、html、css、vue.js、mysql、jdk1.8

数据库表结构

10张

开发工具: 

idea或者eclipse、navicat

⭐功能:

【角色】管理员、用户

【前端功能】: 注册、登录、首页、文献库、系统公告、留言板、个人中心、后台管理

【后端功能】: 登录、首页、个人中心、用户管理、文献类别管理、文献库管理、留言板、系统管理

🏆项目演示截图: 
 

1、前端登录

 2、前端注册

3、前端首页

4、前端文献库

5、前端文献详情

6、前端系统公告

7、前端留言板

8、前端个人中心

9、后端登录

10、后端用户管理

11、后端文献类别管理

12、后端文献库管理

13、后端留言板管理

14、后端系统公告管理

15、后端轮播图管理

 

【文献管理数据库设计】

CREATE TABLE `wenxianleibie` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `wenxianleibie` varchar(200) NOT NULL COMMENT '文献类别',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1645497716357 DEFAULT CHARSET=utf8 COMMENT='文献类别';

CREATE TABLE `wenxianku` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `wenxianbiaoti` varchar(200) NOT NULL COMMENT '文献标题',
  `wenxianzuozhe` varchar(200) NOT NULL COMMENT '文献作者',
  `wenxianleibie` varchar(200) NOT NULL COMMENT '文献类别',
  `wenxiantupian` varchar(200) DEFAULT NULL COMMENT '文献图片',
  `wenxianwenjian` varchar(200) DEFAULT NULL COMMENT '文献文件',
  `wenxianneirong` longtext COMMENT '文献内容',
  `faburiqi` date DEFAULT NULL COMMENT '发布日期',
  `clicktime` datetime DEFAULT NULL COMMENT '最近点击时间',
  `clicknum` int(11) DEFAULT '0' COMMENT '点击次数',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1572923283876499460 DEFAULT CHARSET=utf8 COMMENT='文献库';

 【文献管理controller类】

package com.controller;

/**
 * 文献库
 * 后端接口
 * @author 计算机编程-吉哥
 * @email 
 * @date 2022-09-22 21:44:54
 */
@RestController
@RequestMapping("/wenxianku")
public class WenxiankuController {

    @Autowired
    private WenxiankuService wenxiankuService;


    @Autowired
    private StoreupService storeupService;

    /**
     * 后端列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,WenxiankuEntity wenxianku, 
                @RequestParam(required = false) @DateTimeFormat(pattern="yyyy-MM-dd") Date faburiqistart,
                @RequestParam(required = false) @DateTimeFormat(pattern="yyyy-MM-dd") Date faburiqiend,
		HttpServletRequest request){

        EntityWrapper<WenxiankuEntity> ew = new EntityWrapper<WenxiankuEntity>();
                if(faburiqistart!=null) ew.ge("faburiqi", faburiqistart);
                if(faburiqiend!=null) ew.le("faburiqi", faburiqiend);
    	PageUtils page = wenxiankuService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, wenxianku), params), params));
		request.setAttribute("data", page);
        return R.ok().put("data", page);
    }
    
    /**
     * 前端列表
     */
	@IgnoreAuth
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params,WenxiankuEntity wenxianku, 
                @RequestParam(required = false) @DateTimeFormat(pattern="yyyy-MM-dd") Date faburiqistart,
                @RequestParam(required = false) @DateTimeFormat(pattern="yyyy-MM-dd") Date faburiqiend,
		HttpServletRequest request){
        EntityWrapper<WenxiankuEntity> ew = new EntityWrapper<WenxiankuEntity>();
                if(faburiqistart!=null) ew.ge("faburiqi", faburiqistart);
                if(faburiqiend!=null) ew.le("faburiqi", faburiqiend);
    	PageUtils page = wenxiankuService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, wenxianku), params), params));
		request.setAttribute("data", page);
        return R.ok().put("data", page);
    }

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

	 /**
     * 查询
     */
    @RequestMapping("/query")
    public R query(WenxiankuEntity wenxianku){
        EntityWrapper< WenxiankuEntity> ew = new EntityWrapper< WenxiankuEntity>();
 		ew.allEq(MPUtil.allEQMapPre( wenxianku, "wenxianku")); 
		WenxiankuView wenxiankuView =  wenxiankuService.selectView(ew);
		return R.ok("查询文献库成功").put("data", wenxiankuView);
    }
	
    /**
     * 后端详情
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id){
        WenxiankuEntity wenxianku = wenxiankuService.selectById(id);
		wenxianku.setClicknum(wenxianku.getClicknum()+1);
		wenxianku.setClicktime(new Date());
		wenxiankuService.updateById(wenxianku);
        return R.ok().put("data", wenxianku);
    }

    /**
     * 前端详情
     */
	@IgnoreAuth
    @RequestMapping("/detail/{id}")
    public R detail(@PathVariable("id") Long id){
        WenxiankuEntity wenxianku = wenxiankuService.selectById(id);
		wenxianku.setClicknum(wenxianku.getClicknum()+1);
		wenxianku.setClicktime(new Date());
		wenxiankuService.updateById(wenxianku);
        return R.ok().put("data", wenxianku);
    }
    

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

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

        wenxiankuService.insert(wenxianku);
        return R.ok();
    }

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

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

    /**
     * 模板下载
     */
    @IgnoreAuth
    @RequestMapping("/excel/download")
    public void excelDownload(HttpServletRequest request, HttpServletResponse response) {
        try {
            String fileUrl = request.getSession().getServletContext().getRealPath("/excel/")+"wenxianku.xlsx";
            File file=new File(fileUrl);
            String filename=file.getName();
            // 以流的形式下载文件。
            InputStream fis = new BufferedInputStream(new FileInputStream(fileUrl));
            byte[] buffer = new byte[fis.available()];
            fis.read(buffer);
            fis.close();
            // 清空response
            response.reset();

            response.setContentType("application/octet-stream;charset=UTF-8");
            String fileName = new String(filename.getBytes("gb2312"), "iso8859-1");
            response.setHeader("Content-disposition", "attachment;filename=" + fileName);
            OutputStream ouputStream = response.getOutputStream();
            ouputStream.write(buffer);
            ouputStream.flush();
            ouputStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 文献上传
     */
    @IgnoreAuth
    @RequestMapping("/excel/import")
    public void excelImport(@RequestParam("fileName") String fileName, HttpServletRequest request, HttpServletResponse response) {
        try {
            String fn = request.getSession().getServletContext().getRealPath("/upload/")+fileName;
            EasyExcel.read(fn, WenxianData.class, new WenxianDataListener(wenxiankuService)).sheet().doRead();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 提醒接口
     */
	@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<WenxiankuEntity> wrapper = new EntityWrapper<WenxiankuEntity>();
		if(map.get("remindstart")!=null) {
			wrapper.ge(columnName, map.get("remindstart"));
		}
		if(map.get("remindend")!=null) {
			wrapper.le(columnName, map.get("remindend"));
		}


		int count = wenxiankuService.selectCount(wrapper);
		return R.ok().put("count", count);
	}
	
	
	/**
     * 前端智能排序
     */
	@IgnoreAuth
    @RequestMapping("/autoSort")
    public R autoSort(@RequestParam Map<String, Object> params,WenxiankuEntity wenxianku, HttpServletRequest request,String pre){
        EntityWrapper<WenxiankuEntity> ew = new EntityWrapper<WenxiankuEntity>();
        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", "clicknum");
        params.put("order", "desc");
		PageUtils page = wenxiankuService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, wenxianku), params), params));
        return R.ok().put("data", page);
    }

    /**
     * 协同算法(按收藏推荐)
     */
    @RequestMapping("/autoSort2")
    public R autoSort2(@RequestParam Map<String, Object> params,WenxiankuEntity wenxianku, HttpServletRequest request){
        String userId = request.getSession().getAttribute("userId").toString();
        String inteltypeColumn = "wenxianleibie";
        List<StoreupEntity> storeups = storeupService.selectList(new EntityWrapper<StoreupEntity>().eq("type", 1).eq("userid", userId).eq("tablename", "wenxianku").orderBy("addtime", false));
        List<String> inteltypes = new ArrayList<String>();
        Integer limit = params.get("limit")==null?10:Integer.parseInt(params.get("limit").toString());
        List<WenxiankuEntity> wenxiankuList = new ArrayList<WenxiankuEntity>();
        //去重
        if(storeups!=null && storeups.size()>0) {
            for(StoreupEntity s : storeups) {
                wenxiankuList.addAll(wenxiankuService.selectList(new EntityWrapper<WenxiankuEntity>().eq(inteltypeColumn, s.getInteltype())));
            }
        }
        EntityWrapper<WenxiankuEntity> ew = new EntityWrapper<WenxiankuEntity>();
        params.put("sort", "id");
        params.put("order", "desc");
        PageUtils page = wenxiankuService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, wenxianku), params), params));
        List<WenxiankuEntity> pageList = (List<WenxiankuEntity>)page.getList();
        if(wenxiankuList.size()<limit) {
            int toAddNum = (limit-wenxiankuList.size())<=pageList.size()?(limit-wenxiankuList.size()):pageList.size();
            for(WenxiankuEntity o1 : pageList) {
                boolean addFlag = true;
                for(WenxiankuEntity o2 : wenxiankuList) {
                    if(o1.getId().intValue()==o2.getId().intValue()) {
                        addFlag = false;
                        break;
                    }
                }
                if(addFlag) {
                    wenxiankuList.add(o1);
                    if(--toAddNum==0) break;
                }
            }
        }
        page.setList(wenxiankuList);
        return R.ok().put("data", page);
    }




}

【文献管理Service实现类】

package com.service.impl;


@Service("wenxiankuService")
public class WenxiankuServiceImpl extends ServiceImpl<WenxiankuDao, WenxiankuEntity> implements WenxiankuService {


    @Override
    public PageUtils queryPage(Map<String, Object> params) {
        Page<WenxiankuEntity> page = this.selectPage(
                new Query<WenxiankuEntity>(params).getPage(),
                new EntityWrapper<WenxiankuEntity>()
        );
        return new PageUtils(page);
    }
    
    @Override
	public PageUtils queryPage(Map<String, Object> params, Wrapper<WenxiankuEntity> wrapper) {
		  Page<WenxiankuView> page =new Query<WenxiankuView>(params).getPage();
	        page.setRecords(baseMapper.selectListView(page,wrapper));
	    	PageUtils pageUtil = new PageUtils(page);
	    	return pageUtil;
 	}
    
    @Override
	public List<WenxiankuVO> selectListVO(Wrapper<WenxiankuEntity> wrapper) {
 		return baseMapper.selectListVO(wrapper);
	}
	
	@Override
	public WenxiankuVO selectVO(Wrapper<WenxiankuEntity> wrapper) {
 		return baseMapper.selectVO(wrapper);
	}
	
	@Override
	public List<WenxiankuView> selectListView(Wrapper<WenxiankuEntity> wrapper) {
		return baseMapper.selectListView(wrapper);
	}

	@Override
	public WenxiankuView selectView(Wrapper<WenxiankuEntity> wrapper) {
		return baseMapper.selectView(wrapper);
	}


}

【文件上传下载实现类】

package com.controller;

/**
 * 上传文件
 * @author 计算机编程-吉哥
 */
@RestController
@RequestMapping("file")
@SuppressWarnings({"unchecked","rawtypes"})
public class FileController{
	@Autowired
    private ConfigService configService;
	/**
	 * 上传文件
	 */
	@RequestMapping("/upload")
	public R upload(@RequestParam("file") MultipartFile file, String type,HttpServletRequest request) throws Exception {
		if (file.isEmpty()) {
			throw new EIException("上传文件不能为空");
		}
		String fileExt = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")+1);
		String fileName = new Date().getTime()+"."+fileExt;
		File dest = new File(request.getSession().getServletContext().getRealPath("/upload")+"/"+fileName);
		file.transferTo(dest);
		
		return R.ok().put("file", fileName);
	}
	
	/**
	 * 下载文件
	 */
	@IgnoreAuth
	@RequestMapping("/download")
	public void download(@RequestParam String fileName, HttpServletRequest request, HttpServletResponse response) {
		try {
			File file = new File(request.getSession().getServletContext().getRealPath("/upload")+"/"+fileName);
			if (file.exists()) {
				response.reset();
				response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName+"\"");
				response.setHeader("Cache-Control", "no-cache");
				response.setHeader("Access-Control-Allow-Credentials", "true");
				response.setContentType("application/octet-stream; charset=UTF-8");
				IOUtils.write(FileUtils.readFileToByteArray(file), response.getOutputStream());
			}

		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
}

更多项目推荐:计算机毕业设计项目

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓如果大家有任何疑虑,请在下方位置详细咨询。

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到