社团管理|高校社团管理|基于SSM实现社团管理功能

简介: 社团管理|高校社团管理|基于SSM实现社团管理功能

项目编号:BS-GX-066

一,环境介绍

语言环境:Java:  jdk1.8

数据库:Mysql: mysql5.7

应用服务器:Tomcat:  tomcat8.5.31

开发工具:IDEA或eclipse

开发技术:SSM+JSP

二,项目简介

本项目基于SSM框架和JSP实现了一个高校社团管理系统,系统用户分为三类:社员、社长和管理员。社员和社长的信息均有管理员在后台进行添加和管理操作。

社员登录系统主要可以实现新闻浏览、公告浏览、社团查看和申请加入,社团费用交费,个人中心管理,个人收藏管理等功能。社长主要可以管理社团的信息,管理社员信息,审批社员的加入申请,管理社团新闻信息等。管理员主要可以实现对社员、社长和社团所有信息的管理操作,以及相关活动的申请操作等。

三,系统展示

个人中心

社团新闻

社团浏览

在社团详情页可以实现对社团的收藏、点赞、评论等操作

校园新闻浏览

社员后台管理功能

社长后台管理功能

管理员后台管理功能

四,核心代码展示

package com.controller;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
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.annotation.IgnoreAuth;
import com.service.CommonService;
import com.utils.R;
/**
 * 通用接口
 */
@RestController
public class CommonController{
  @Autowired
  private CommonService commonService;
  /**
   * 获取table表中的column列表(联动接口)
   * @param table
   * @param column
   * @return
   */
  @RequestMapping("/option/{tableName}/{columnName}")
  @IgnoreAuth
  public R getOption(@PathVariable("tableName") String tableName, @PathVariable("columnName") String columnName,String level,String parent) {
    Map<String, Object> params = new HashMap<String, Object>();
    params.put("table", tableName);
    params.put("column", columnName);
    if(StringUtils.isNotBlank(level)) {
      params.put("level", level);
    }
    if(StringUtils.isNotBlank(parent)) {
      params.put("parent", parent);
    }
    List<String> data = commonService.getOption(params);
    return R.ok().put("data", data);
  }
  /**
   * 根据table中的column获取单条记录
   * @param table
   * @param column
   * @return
   */
  @RequestMapping("/follow/{tableName}/{columnName}")
  @IgnoreAuth
  public R getFollowByOption(@PathVariable("tableName") String tableName, @PathVariable("columnName") String columnName, @RequestParam String columnValue) {
    Map<String, Object> params = new HashMap<String, Object>();
    params.put("table", tableName);
    params.put("column", columnName);
    params.put("columnValue", columnValue);
    Map<String, Object> result = commonService.getFollowByOption(params);
    return R.ok().put("data", result);
  }
  /**
   * 修改table表的sfsh状态
   * @param table
   * @param map
   * @return
   */
  @RequestMapping("/sh/{tableName}")
  public R sh(@PathVariable("tableName") String tableName, @RequestBody Map<String, Object> map) {
    map.put("table", tableName);
    commonService.sh(map);
    return R.ok();
  }
  /**
   * 获取需要提醒的记录数
   * @param tableName
   * @param columnName
   * @param type 1:数字 2:日期
   * @param map
   * @return
   */
  @RequestMapping("/remind/{tableName}/{columnName}/{type}")
  @IgnoreAuth
  public R remindCount(@PathVariable("tableName") String tableName, @PathVariable("columnName") String columnName, 
             @PathVariable("type") String type,@RequestParam Map<String, Object> map) {
    map.put("table", tableName);
    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));
      }
    }
    int count = commonService.remindCount(map);
    return R.ok().put("count", count);
  }
  /**
   * 单列求和
   */
  @RequestMapping("/cal/{tableName}/{columnName}")
  @IgnoreAuth
  public R cal(@PathVariable("tableName") String tableName, @PathVariable("columnName") String columnName) {
    Map<String, Object> params = new HashMap<String, Object>();
    params.put("table", tableName);
    params.put("column", columnName);
    Map<String, Object> result = commonService.selectCal(params);
    return R.ok().put("data", result);
  }
  /**
   * 分组统计
   */
  @RequestMapping("/group/{tableName}/{columnName}")
  @IgnoreAuth
  public R group(@PathVariable("tableName") String tableName, @PathVariable("columnName") String columnName) {
    Map<String, Object> params = new HashMap<String, Object>();
    params.put("table", tableName);
    params.put("column", columnName);
    List<Map<String, Object>> result = commonService.selectGroup(params);
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    for(Map<String, Object> m : result) {
      for(String k : m.keySet()) {
        if(m.get(k) instanceof Date) {
          m.put(k, sdf.format((Date)m.get(k)));
        }
      }
    }
    return R.ok().put("data", result);
  }
  /**
   * (按值统计)
   */
  @RequestMapping("/value/{tableName}/{xColumnName}/{yColumnName}")
  @IgnoreAuth
  public R value(@PathVariable("tableName") String tableName, @PathVariable("yColumnName") String yColumnName, @PathVariable("xColumnName") String xColumnName) {
    Map<String, Object> params = new HashMap<String, Object>();
    params.put("table", tableName);
    params.put("xColumn", xColumnName);
    params.put("yColumn", yColumnName);
    List<Map<String, Object>> result = commonService.selectValue(params);
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    for(Map<String, Object> m : result) {
      for(String k : m.keySet()) {
        if(m.get(k) instanceof Date) {
          m.put(k, sdf.format((Date)m.get(k)));
        }
      }
    }
    return R.ok().put("data", result);
  }
  /**
   * (按值统计)时间统计类型
   */
  @IgnoreAuth
  @RequestMapping("/value/{tableName}/{xColumnName}/{yColumnName}/{timeStatType}")
  public R valueDay(@PathVariable("tableName") String tableName, @PathVariable("yColumnName") String yColumnName, @PathVariable("xColumnName") String xColumnName, @PathVariable("timeStatType") String timeStatType) {
    Map<String, Object> params = new HashMap<String, Object>();
    params.put("table", tableName);
    params.put("xColumn", xColumnName);
    params.put("yColumn", yColumnName);
    params.put("timeStatType", timeStatType);
    List<Map<String, Object>> result = commonService.selectTimeStatValue(params);
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    for(Map<String, Object> m : result) {
      for(String k : m.keySet()) {
        if(m.get(k) instanceof Date) {
          m.put(k, sdf.format((Date)m.get(k)));
        }
      }
    }
    return R.ok().put("data", result);
  }
}
package com.controller;
import java.io.File;
import java.io.IOException;
import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import com.annotation.IgnoreAuth;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.entity.ConfigEntity;
import com.entity.EIException;
import com.service.ConfigService;
import com.utils.R;
/**
 * 上传文件映射表
 */
@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);
    /**
    * 如果使用idea或者eclipse重启项目,发现之前上传的图片或者文件丢失,将下面一行代码注释打开
    * 请将以下的"D:\\ssmpiv99\\src\\main\\webapp\\upload"替换成你本地项目的upload路径,
    * 并且项目路径不能存在中文、空格等特殊字符
    */
    //FileUtils.copyFile(dest, new File("D:\\ssmpiv99\\src\\main\\webapp\\upload"+"/"+fileName)); /**修改了路径以后请将该行最前面的//注释去掉**/
    if(StringUtils.isNotBlank(type) && type.equals("1")) {
      ConfigEntity configEntity = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "faceFile"));
      if(configEntity==null) {
        configEntity = new ConfigEntity();
        configEntity.setName("faceFile");
        configEntity.setValue(fileName);
      } else {
        configEntity.setValue(fileName);
      }
      configService.insertOrUpdate(configEntity);
    }
    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();
    }
  }
}

五,项目总结

项目整体功能完整,结构清晰,适合做毕业设计和课程 设计使用。

相关文章
|
Ubuntu C语言
在Ubuntu下使用makefile编译C语言工程
在Ubuntu下使用makefile编译C语言工程
199 0
|
前端开发 算法
如何玩转新技术栈!高德大前端演进历程
高德技术开放日已经顺利落幕,我们准备了精彩的视频回放。这次放出的是由高德工程技术中心 郭忍东 为大家带来的《如何玩转新技术栈!高德大前端演进历程》。
1041 0
如何玩转新技术栈!高德大前端演进历程
|
11月前
|
C++
Leetcode第56题(合并区间)
这篇文章介绍了LeetCode第56题“合并区间”的解题方法,通过排序和贪心策略合并重叠区间,并提供了C++的代码实现。
178 0
Leetcode第56题(合并区间)
|
监控 负载均衡 算法
Spring Cloud常见问题处理和代码分析
@[TOC](目录) Spring Cloud常见问题处理 # 1. 问题:如何在 Spring Cloud 中实现服务注册和发现? 解决方案:使用 Spring Cloud 提供的 Eureka、Zookeeper、Cloud Foundry 和 Consul 等注册中心来实现服务注册和发现。 示例代码: ```java @EnableEurekaServer public class EurekaServerApplication { public static void main(String[] args) { SpringApplication.
189 0
|
开发工具 git
使用git提交到远程仓库报错:Updates were rejected because the remote contains work that you do
使用git提交到远程仓库报错:Updates were rejected because the remote contains work that you do
3742 0
使用git提交到远程仓库报错:Updates were rejected because the remote contains work that you do
|
存储
编码集的作用是什么?说出几个常见的编码集?为什么常用utf-8?
编码集的作用是什么?说出几个常见的编码集?为什么常用utf-8?
217 0
|
人工智能 算法 Java
中文竞技场大模型评测
中文竞技场大模型评测
中文竞技场大模型评测
|
架构师 Java
Java面试上岸秘籍!粉丝刷题一周换工作,爆笑嘲讽竟变大厂青睐
我也替他感觉高兴,没想到题库能帮到他这么多,这是多大的回报率,他也已经成功证明了自己。 说实话,像这样的反馈实在太多了,其中也帮助许多粉丝进入大厂,这也让我觉得很有意义、很坚持在做的一件事情,很欣慰,也很有成就感。
150 0
初学算法之递归---爬楼梯
初学算法之递归---爬楼梯
|
Kubernetes 调度 C++
kubernetes的节点与节点池概念 vs karpenter的去节点池理念 在调度上的思考
kubernetes的节点与节点池概念 vs karpenter的去节点池理念。 k8s在给定的节点资源或集群资源上调度并运行应用,其先决条件是资源某种程度上既定(即资源总量某种程度上是一定的,虽然有弹性扩容,但资源的规格是固定的,并且一旦扩容完成后再在此资源总量上执行调度决策,这仍然可以看做是资源总量固定),然后在该资源范围上做调度决策。调度的碎片化不可避免。 karpenter的逻辑是去节点
734 0