package com.compet;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.compet.mapper")
public class CompetApplication {
public static void main(String[] args) {
SpringApplication.run(CompetApplication.class, args);
}
}
UserController
package com.compet.controller;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;
import util.RandomCode;
import util.RandomImage;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.compet.entity.Menu;
import com.compet.entity.Role;
import com.compet.entity.SidemenuModel;
import com.compet.entity.User;
import com.compet.mapper.UserMapper;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
@RestController
public class UserController {
@Resource
public UserMapper user;
@RequestMapping(value="/login")
public ModelAndView login(){
ModelAndView modelAndView = new ModelAndView("login"); //设置对应JSP的模板文件
return modelAndView;
}
@RequestMapping(value = "random")
public void random(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) {
byte[] captchaChallengeAsJpeg = null;
ByteArrayOutputStream jpegOutputStream = new ByteArrayOutputStream();
try {
//生产验证码字符串并保存到session中
String createText = RandomCode.getRandomCode();
httpServletRequest.getSession().setAttribute("verifyCode", createText);
//使用生产的验证码字符串返回一个BufferedImage对象并转为byte写入到byte数组中
BufferedImage challenge = RandomImage.createImage(createText);
ImageIO.write(challenge, "jpg", jpegOutputStream);
//定义response输出类型为image/jpeg类型,使用response输出流输出图片的byte数组
captchaChallengeAsJpeg = jpegOutputStream.toByteArray();
httpServletResponse.setHeader("Cache-Control", "no-store");
httpServletResponse.setHeader("Pragma", "no-cache");
httpServletResponse.setDateHeader("Expires", 0);
httpServletResponse.setContentType("image/jpeg");
ServletOutputStream responseOutputStream =
httpServletResponse.getOutputStream();
responseOutputStream.write(captchaChallengeAsJpeg);
responseOutputStream.flush();
responseOutputStream.close();
} catch (IllegalArgumentException e) {
return;
} catch (IOException e) {
e.printStackTrace();
}
}
@RequestMapping(value = "checkLogin")
@ResponseBody
public String checkLogin(String validcode,User user1,HttpServletRequest httpServletRequest) {
String msg="";
String v = (String) httpServletRequest.getSession().getAttribute("verifyCode");
if (validcode == null) {
msg="0";
return msg;
}
if (!validcode.equals(v)) {
msg = "1";
return msg;
}
User user2=user.queryUserById(user1);
if (user2 == null) {
msg = "2";
return msg;
}
httpServletRequest.getSession().setAttribute("userId",user2.getId());
httpServletRequest.getSession().setAttribute("name",user2.getName());
httpServletRequest.getSession().setAttribute("password",user2.getPassword());
return msg;
}
@RequestMapping(value="/goJsp")
public ModelAndView goJsp(int id){
List<Menu> list=user.goJsp(id);
ModelAndView modelAndView = new ModelAndView(list.get(0).getUrl()); //设置对应JSP的模板文件
return modelAndView;
}
@RequestMapping(value="/userList")
public ModelAndView userList(){
ModelAndView modelAndView = new ModelAndView("user_list"); //设置对应JSP的模板文件
// List<User> list=user.userList();
// modelAndView.addObject("list",list);
return modelAndView;
}
@RequestMapping(value="/userRole")
public String userRole(HttpServletRequest httpServletRequest){
Integer userId=Integer.parseInt(httpServletRequest.getSession().getAttribute("userId").toString());
List<Role> list=user.userRole(userId);
String listJson = JSON.toJSONString(list);
System.out.println(listJson);
return listJson;
}
@RequestMapping(value="/menuList")
public String menuList(HttpServletRequest httpServletRequest,Integer role_id){
int userId=Integer.parseInt(httpServletRequest.getSession().getAttribute("userId").toString());
Map<String, Integer> map=new HashMap<String, Integer>();
map.put("roleId", role_id);
map.put("userId", userId);
List<SidemenuModel> list=user.menuList1(map);
for (int i = 0; i < list.size(); i++) {
List<SidemenuModel> child=user.menuListChild(list.get(i).getId());
if(child.size()>0){
list.get(i).setChildren(child);
}
}
String listJson = JSON.toJSONString(list);
System.out.println(listJson);
return listJson;
}
@RequestMapping(value="/user")
public String user(Integer pageNo, Integer pageSize){
//ModelAndView modelAndView = new ModelAndView("user_list"); //设置对应JSP的模板文件
List<User> list=user.userList();
PageHelper.startPage(pageNo,pageSize);
Map param = new HashMap();
// param.put("age",age);
PageInfo<User> data = new PageInfo<>(list);
JSONObject result = new JSONObject();
result.put("data",data);
result.put("pages",data.getPages());
result.put("totalRecords",data.getTotal());
String listJson = JSON.toJSONString(result);
return listJson;
}
@RequestMapping(value="/addUserPage")
public ModelAndView addUserPage(){
ModelAndView modelAndView = new ModelAndView("add_user"); //设置对应JSP的模板文件
return modelAndView;
}
@RequestMapping(value="/addUser")
@ResponseBody
public int addUser(User user1){
int k= user.insert(user1);
return k;
}
@RequestMapping(value="/editUserById")
public String editUserById(int id){
// ModelAndView modelAndView = new ModelAndView("edit_user"); //设置对应JSP的模板文件
User dto=user.selectById(id);
// modelAndView.addObject("user", dto);
return JSON.toJSONString(dto);
}
@RequestMapping(value="/editUser")
public void editUser(User user1){
int k= user.updateById(user1);
}
@RequestMapping(value="/deleteUser")
@ResponseBody
public int deleteUser(int id){
int k= user.deleteById(id);
return k;
}
}
Menu
package com.compet.entity;
import java.io.Serializable;
import lombok.Data;
import org.springframework.boot.jackson.JsonComponent;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
@JsonComponent()
@Data
@TableName("menu")
public class Menu implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
@TableId(value="id", type = IdType.AUTO)
private int id;
private String name ;
private int pId ;
private String url ;
private String status ;
@TableField(exist=false)
private int role_id;
@TableField(exist=false)
private int role_name;
}
SidemenuModel
package com.compet.entity;
import java.util.List;
import lombok.Data;
import org.springframework.boot.jackson.JsonComponent;
@JsonComponent()
@Data
public class SidemenuModel{
private Integer id ; //title
private String text ; //图标
private Integer pId ; //图标
private List<SidemenuModel> children;
}
UserMapper
package com.compet.mapper;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.Param;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.compet.entity.Menu;
import com.compet.entity.Role;
import com.compet.entity.SidemenuModel;
import com.compet.entity.User;
public interface UserMapper extends BaseMapper<User>{
public List<User> userList();
public List<User> menuList();
public List<SidemenuModel> menuList1(@Param(value="map")Map<String, Integer> map);
public List<Menu> goJsp(@Param(value="id") int id);
public User queryUserById(User user1);
public List<SidemenuModel> menuListChild(@Param(value="pId")Integer pId);
public List<Role> userRole(@Param(value="userId")Integer userId);
}
UserMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.compet.mapper.UserMapper">
<select id="userList" resultType="com.compet.entity.User">
SELECT
id,
name,
password,
sex,
status,
misscount
FROM
user
</select>
<select id="userRole" parameterType="int" resultType="com.compet.entity.SidemenuModel">
SELECT
t1.id,
t1.`name` AS text
FROM
role t1
LEFT JOIN user_role t2 ON t2.role_id=t1.id
LEFT JOIN `user` t3 ON t2.user_id=t3.id
WHERE t3.id=#{userId}
</select>
<select id="goJsp" parameterType="int" resultType="com.compet.entity.Menu">
SELECT
t1.*, t2.role_id,
t3.`name` as role_name
FROM
menu t1
LEFT JOIN role_menu t2 ON t1.id = t2.menu_id
LEFT JOIN role t3 ON t3.id = t2.role_id
LEFT JOIN module t4 ON t2.module_id=t4.id
<if test="id!=0">
where t1.id=#{id}
</if>
</select>
<select id="queryUserById" parameterType="com.compet.entity.User" resultType="com.compet.entity.User">
SELECT * FROM `user` where 1=1
<if test="name!=null and name!=''">
and name=#{name}
</if>
<if test="password!=null and password!=''">
and `password`=#{password}
</if>
</select>
<select id="menuList" resultType="com.compet.entity.Menu">
SELECT
t1.*, t2.role_id,
t3.`name` as role_name
FROM
menu t1
LEFT JOIN role_menu t2 ON t1.id = t2.menu_id
LEFT JOIN role t3 ON t3.id = t2.role_id
LEFT JOIN module t4 ON t2.module_id=t4.id
</select>
<select id="menuList1" parameterType="java.util.Map" resultType="com.compet.entity.SidemenuModel">
SELECT
t1.id,
t1.`name` AS text,
t1.p_id as pId
FROM
menu t1
LEFT JOIN role_menu t2 ON t1.id = t2.menu_id
LEFT JOIN role t3 ON t3.id = t2.role_id
LEFT JOIN module t4 ON t2.module_id = t4.id
where p_id is null
<if test="map.roleId!=null and map.roleId!=1">
and t3.id=#{map.roleId}
</if>
</select>
<select id="menuListChild" parameterType="java.lang.Integer" resultType="com.compet.entity.SidemenuModel">
SELECT
t1.id,
t1.`name` AS text,
t1.p_id as pId
FROM
menu t1
LEFT JOIN role_menu t2 ON t1.id = t2.menu_id
LEFT JOIN role t3 ON t3.id = t2.role_id
LEFT JOIN module t4 ON t2.module_id = t4.id
where 1=1
<if test="pId!=null">
and t1.p_id =#{pId}
</if>
</select>
</mapper>
package util;
import net.coobird.thumbnailator.Thumbnails;
import net.sf.jmimemagic.Magic;
import net.sf.jmimemagic.MagicMatch;
import org.springframework.web.multipart.MultipartFile;
import com.compet.entity.CommFile;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
/**
* @author
* 上传、下载附件底层功能
*/
public class FileBaseController {
//盘符
private String diskName;
//文件路径
private String filePath;
/**
* @param pathFileName 路径文件名称(完整路径)
* 删除指定文件
*/
public boolean baseRemoveFile(String pathFileName) throws Exception {
File file = new File(pathFileName);
if (file.exists()) {
file.delete();
}
return file.exists();
}
/**
* 得到图片字节流 数组大小
*/
public static byte[] readStream(InputStream inStream) throws IOException {
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = -1;
while ((len = inStream.read(buffer)) != -1) {
outStream.write(buffer, 0, len);
}
outStream.close();
inStream.close();
return outStream.toByteArray();
}
/**
* @param fileName 图片名称
* @param flag 1=图片以流展示在页面,2=下载附件
* 下载附件
*/
public void baseDownloadFile(HttpServletRequest request, HttpServletResponse response, String fileName, int flag) throws Exception {
fileName= new String(fileName.getBytes("iso8859-1"), "utf-8");
if (flag == 1 ) {
// String downLoadPath = diskName + File.separator + filePath + File.separator + fileName;
String downLoadPath =fileName;
InputStream fis = new FileInputStream(new File(downLoadPath));
byte[] data = readStream(fis);
//这种方式用了该jmimemagic-0.1.0.jar文件
MagicMatch match = Magic.getMagicMatch(data);
String mimeType = match.getMimeType();
try (
BufferedOutputStream bos = new BufferedOutputStream(response.getOutputStream());
) {
// 设置响应的类型格式为图片格式
response.setContentType(mimeType);
//禁止图像缓存。
response.setHeader("Pragma", "no-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
bos.write(data);
} catch (Exception e) {
}
}else if (flag == 2 || flag == 3) {
response.setContentType("application/octet-stream");
response.setContentType("application/OCTET-STREAM;charset=UTF-8");
response.setHeader("Content-Disposition",
"attachment;filename=" + new String(fileName.getBytes("utf-8"), StandardCharsets.ISO_8859_1));
File file = new File(fileName);
try (
FileInputStream fis = new FileInputStream(file);
BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream());
) {
byte[] buffer = new byte[1024];
int len;
while ((len = fis.read(buffer)) != -1) {
out.write(buffer, 0, len);
out.flush();
}
} catch (Exception e) {
}
}
}
/**
* @param fileName 文件图片名称
* 删除图片
*/
public boolean delServerFile(String fileName) {
String pathStr = this.diskName + File.separator + this.filePath + File.separator + fileName;
File file = new File(pathStr);
return file.delete();
}
public List<CommFile> baseUploadFile(MultipartFile[] files, HttpServletRequest request, int imgAtt) throws IOException {
List<CommFile> commFiles = new ArrayList<>();
for (int i = 0; i < files.length; i++) {
if (!files[i].isEmpty()) {
CommFile filePhoto = new CommFile();
//文件类型
filePhoto.setFileType(imgAtt);
//文件uuid
String uuid = UUID.randomUUID().toString();
filePhoto.setFileUuid(uuid);
//文件原始名称
String formatInfo = files[i].getOriginalFilename();
filePhoto.setFileName(formatInfo);
//文件大小
filePhoto.setFileMime(files[i].getSize()/1024+"KB");
//文件夹拼接路径
String newStr = diskName + File.separator + filePath;
//方案1获取到上传图片inputStream之后在输出到指定文件夹下面并支持压缩
//文件名uuid+文件后缀名
String url =uuid+ files[i].getOriginalFilename().substring(files[i].getOriginalFilename().lastIndexOf('.'));
filePhoto.setFileUrl( newStr + File.separator + url);
commFiles.add(filePhoto);
File newFile = new File(newStr);
//创建文件夹
if (!newFile.exists()) {
newFile.mkdirs();
}
//上传图片并压缩
if (imgAtt == 1) {
//图片全路径
String toImgPath = newStr + File.separator + url;
//上传到指定服务端文件夹位置
File toFile = new File(toImgPath);
//进行压缩图片(1=获取上传图片位置,2=图片大小,3=图片所去得目的地)
Thumbnails.of(files[i].getInputStream()).size(1024, 768).toFile(toFile);
}else{
//上传到指定服务端文件夹位置
File toFile = new File(newStr + File.separator + url);
try(InputStream is = files[i].getInputStream();
FileOutputStream out = new FileOutputStream(toFile);
){
//创建一个缓冲区
byte[] buffer = new byte[1024];
//判断输入流中的数据是否已经读完的标识
int len = 0;
//循环将输入流读入到缓冲区当中,(len=in.read(buffer))>0就表示in里面还有数据
while ((len = is.read(buffer)) > 0) {
out.write(buffer, 0, len);
}
} catch (Exception e) {
}
}
}
}
return commFiles;
}
public String getDiskName() {
return diskName;
}
public void setDiskName(String diskName) {
this.diskName = diskName;
}
public String getFilePath() {
return filePath;
}
public void setFilePath(String filePath) {
this.filePath = filePath;
}
}
PublicAttr
package util;
public class PublicAttr {
// 文件上传begin
public final static String diskName = "d:";
// 图片
public final static String reportPhoto = "/report/reportPhoto";
// 视频
public final static String reportVideo = "/report/reportVideo";
// 音频
public final static String reportVoice = "/report/reportVoice";
}
RandomCode
package util;
import java.util.Arrays;
/**
* @author zwcscq
*/
public class RandomCode {
public enum RandomCodeType {
NUMBER, NUMBER_ADN_LOWER_ABC, NUMBER_ADN_LOWER_AND_UPPER_ABC
};
public static String getRandomCode() {
return getRandomCode(4, RandomCodeType.NUMBER, false);
}
public static String getRandomCode(int length, RandomCodeType level,
boolean isRepeat) {
char[] chars = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a',
'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y',
'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K',
'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
'X', 'Y', 'Z' };
if (level == RandomCodeType.NUMBER) {
chars = Arrays.copyOfRange(chars, 0, 9);
} else if (level == RandomCodeType.NUMBER_ADN_LOWER_ABC) {
chars = Arrays.copyOfRange(chars, 0, 34);
}
int n = chars.length;
if (length > n && isRepeat == false) {
isRepeat = true;
}
char[] result = new char[length];
if (isRepeat) {
for (int i = 0; i < result.length; i++) {
int r = (int) (Math.random() * n);
result[i] = chars[r];
}
} else {
for (int i = 0; i < result.length; i++) {
int r = (int) (Math.random() * n);
result[i] = chars[r];
chars[r] = chars[n - 1];
n--;
}
}
return String.valueOf(result);
}
}
RandomImage
package util;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Random;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
/**
* @author zwcscq
*/
@SuppressWarnings("restriction")
public class RandomImage {
public static BufferedImage createImage(String randomCode) {
int len = randomCode.length();
int width = len * 18;
int height = 20;
BufferedImage image = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
Graphics g = image.createGraphics();
g.setColor(getRandomColor(200, 250));
g.fillRect(0, 0, width, height);
g.setColor(Color.PINK);
g.drawRect(0, 0, width - 1, height - 1);
g.setFont(new Font("Arial", Font.PLAIN, height - 2));
g.setColor(getRandomColor(160, 200));
Random random = new Random();
for (int i = 0; i < 155; i++) {
int x = random.nextInt(width);
int y = random.nextInt(height);
int xl = random.nextInt(12);
int yl = random.nextInt(12);
g.drawLine(x, y, x + xl, y + yl);
}
int codeY = height - 4;
g.setFont(new Font("Arial", Font.PLAIN, height - 2));
for (int i = 0; i < len; i++) {
g.setColor(getRandomColor(20, 130));
g.drawString(String.valueOf(randomCode.charAt(i)), i * 16 + 4,
codeY);
}
g.dispose();
return image;
}
private static Color getRandomColor(int fc, int bc) {
Random random = new Random();
if (fc > 255)
fc = 255;
if (bc > 255)
bc = 255;
int r = fc + random.nextInt(bc - fc);
int g = fc + random.nextInt(bc - fc);
int b = fc + random.nextInt(bc - fc);
return new Color(r, g, b);
}
public static ByteArrayInputStream getImageAsInputStream(String randomCode) {
BufferedImage image = createImage(randomCode);
return convertImageToStream(image);
}
private static ByteArrayInputStream convertImageToStream(BufferedImage image) {
ByteArrayInputStream inputStream = null;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
JPEGImageEncoder jpeg = JPEGCodec.createJPEGEncoder(bos);
try {
jpeg.encode(image);
byte[] bytes = bos.toByteArray();
inputStream = new ByteArrayInputStream(bytes);
} catch (IOException e) {
}
return inputStream;
}
}