**
**
1.编写工具:Eclipse;
2.开发环境 java jdk版本1.8,Tomact 版本9.0;
3.运用框架 SSM(Spring spring Mvc Mybatis)Bootstrap-table Maven;
4.前台脚本语言 js jq ;
5.相关技术 SSM框架的集成
文件的上传下载
jave Excel的部分相关操作
controller service 之间的合理运用
1:系统管理员登录模块(此处运用验证进行了用户的登录验证 可以防止机器人的识别进行操作 登录时会判断当前管理员是否已有登录账号)
2:用户注册模块 (当系统管理员没有登录账号时可以通过注册进行登录 注册时 输入的账号 以及邮箱都为唯一约束 不可重复 并且阻止用户注册)
3:系统首页(管理员登录成功后 进入的页面 在此 可以通过搜索框对系统的功能进行搜索 快速查找 如 输入物料查找功能 点击提示框 则可以进入到相应的功能页面)
4:管理员信息管理模块(管理员可在此页面对自己相应的头像 地址 邮箱 密码 出生年月 等 个人资料进行设置后修改)
5:系统物料管理页(管理可在此页面进行系统物料的录入 并且 录入的物料为唯一条件 当录入后 会做相应的判断)录入成功后会自动显示在本页面 页面中搜索框提供快速查找系统物料 为模糊查询 并带有物料的删除功能
6:物料供应商的相关信息设置
7:商品采购的申请 (从一录入的系统物料中进行选择采购)
8:已提交申请的批准驳回(批准时 需要批准人进行签名并保存 驳回时 可附上驳回原因)
9:审核通过的申请可在商品采购页 进行采购 (采购时 会提醒选择采购数量 已交存放仓库 并且会判断采购数量是否大于所选仓库的剩余容量 反之则需重新选择入库仓库 或采购数量)
10:系统仓库管理(管理员可在本页面对系统仓库进行管理 仓库的管理 以及商品的出库 销售 并且会对相应的数量进行自动更新 当 当前商品的系统库存不够销售以及出库数量时 会提示管理重新操作 )
11:仓库管理 (当系统或对应商有新加仓库 或废弃仓库 可地仓库进行仓库其添加仓库会判断当前系统是否已有改仓库 删除仓库则会判断所选仓库中是否还包含有存放物料 反之则无法进行操作)
12:退出系统(完成相对应的操作后 点击退出即可完成退出登录)
1:Users_infoController (用户信息控制器)
package com.controller;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.ibatis.annotations.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.Ajax.AjaxRes;
import com.entitys.Users_infoEntity;
import com.service.Users_infoService;
import com.uuid.UuidUtil;
@Controller
public class Users_infoController {
@Autowired
private Users_infoService users_infoService;
/**
* 用户注册 并且判断用户账号 以及用户邮箱是否被使用 如果是 则阻止用户注册 并提示跟换
*
* @return
* @throws IOException
*/
@RequestMapping("/addUsers")
@ResponseBody
public AjaxRes addUsers(Users_infoEntity users_info,
@Param("users_zhanghao") String users_zhanghao,
@Param("users_mail") String users_mail) throws IOException {
AjaxRes res = new AjaxRes();
// 账号判断
users_info.setUsers_zhanghao(users_zhanghao);
List users_infobyzh = users_infoService.findbyzh(users_info);
// 邮箱判断
users_info.setUsers_mail(users_mail);
List users_infobyem = users_infoService.findbyem(users_info);
if (users_infobyzh.size() > 0) {
res.setResMsg("该账号已被使用!");
} else if (users_infobyem.size() > 0) {
res.setResMsg("该邮箱已被使用!");
} else {
// 用户注册
// 用户赋值Uuid
users_info.setUsers_id(UuidUtil.get32UUID());
users_infoService.insert(users_info);
res.setResMsg("注册成功!");
}
return res;
}
/**
* 用户登录 并且判断用户账号 以及用户密码的输入是否正确
*
* @return
*/
@RequestMapping("/users_login")
@ResponseBody
public AjaxRes users_login(Users_infoEntity users_info,
@Param("users_zhanghao") String users_zhanghao,
@Param("users_pws") String users_pws,
HttpServletRequest req,
@Param("logoVerify_val") String logoVerify_val) {
AjaxRes res = new AjaxRes();
HttpSession session=req.getSession();
String ip = req.getHeader("x-forwarded-for");
// 账号判断
users_info.setUsers_zhanghao(users_zhanghao);
List users_infobyzh = users_infoService.findbyzh(users_info);
// 密码判断
users_info.setUsers_pws(users_pws);
List users_infobypws = users_infoService.findbypws(users_info);
if (users_infobyzh.isEmpty()) {
res.setResMsg("该账号未注册!");
} else if (users_infobypws.isEmpty()) {
res.setResMsg("密码不正确!");
}else if (!(logoVerify_val.equalsIgnoreCase(session.getAttribute("logoVerify_val").toString()))) {//验证码不区分大小写
res.setResMsg("验证码不正确!");
} else {
//用户登录
session.setAttribute("user",users_infobyzh.get(0));
//更新用户登录ip地址 以及登录区域
users_info.setUsers_zhanghao(users_zhanghao);
users_info.setUsers_dl_ip(ip);
System.out.println("---------------------------------------------"+ip);
users_infoService.updatedlzc(users_info);
res.setResMsg("登录成功!");
}
return res;
}
/**
* 用户退出登录(清空session)
*
* @return
*/
@RequestMapping("/logout")
public String Logout(HttpServletRequest req){
HttpSession session=req.getSession();
session.setAttribute("user", null);
return "redirect:login";
}
/**
* 用户资料设置
* @param users_info
* @param md
* @return
*/
@RequestMapping("/user_info")
public String user_info(Users_infoEntity users_info,Model md){
List user_infos=users_infoService.findbyId(users_info);
//日期格式转换
SimpleDateFormat slf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
for(int i=0;i users_infobyna = users_infoService.findbyna(users_info);
// 邮箱判断
users_info.setUsers_mail(users_mail);
List users_infobyem = users_infoService.findbyem(users_info);
if(users_infobyna.size()>0){
res.setResMsg("该昵称已被使用!");
} else if (users_infobyem.size() > 0) {
res.setResMsg("该邮箱已被使用!");
}else{
//用户修改个人数据
users_infoService.update(users_info);
res.setResMsg("修改成功!");
}
return res;
}
/**
* 处于安全 用户在修改密码和邮箱时 必须经过原(旧密码的验证 )通过后才可修改 反之则阻止 修改成功时清空当前session 提示重新登录
* @param users_info
* @param resq
* @param old_users_pws
* @param users_mail
* @return
* @throws IOException
*/
@RequestMapping("/update_user_save")
@ResponseBody
public AjaxRes update_user_save(Users_infoEntity users_info,
HttpServletRequest req,
@Param("old_users_pws") String old_users_pws,
@Param("users_pws") String users_pws,
@Param("users_mail") String users_mail) {
AjaxRes res=new AjaxRes();
//旧密码验证判断
users_info.setUsers_pws(old_users_pws);
List users_infobypws = users_infoService.findbypws(users_info);
// 邮箱判断
users_info.setUsers_mail(users_mail);
List users_infobyem = users_infoService.findbyem(users_info);
if(users_infobypws.isEmpty()){
res.setResMsg("原密码验证不通过 请核对后在修改!");
} else if (users_infobyem.size() > 0) {
res.setResMsg("该邮箱已被使用!");
}else{
//用户修改个人数据
users_info.setUsers_pws(users_pws);
users_infoService.updatesave(users_info);
res.setResMsg("修改成功当前登陆已过期请重新登陆!");
//清空session
HttpSession session=req.getSession();
session.setAttribute("user", null);
}
return res;
}
}
2:Shop_caigoushenheiController (采购审核控制器)
package com.controller;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.Ajax.AjaxRes;
import com.entitys.Shop_caigoushenheiEntity;
import com.entitys.Shop_wuliaoEntity;
import com.pageUtil.Page;
import com.service.Shop_caigoushenheiService;
import com.service.Shop_wuliaoService;
import com.uuid.UuidUtil;
import sun.misc.BASE64Decoder;
@Controller
public class Shop_caigoushenheiController {
@Autowired
private Shop_wuliaoService wuliaoService;
@Autowired
private Shop_caigoushenheiService caigoushenheiService;
/**
* 查询物料信息(放入前面的页面select下拉选项选项)
* @param wuliao
* @param md
* @return
*/
@RequestMapping("/findwuliaoname")
public String find(Shop_wuliaoEntity wuliao,Model md){
List wuliaos=wuliaoService.find(wuliao);
md.addAttribute("wuliaos", wuliaos);
return "page/subchaigoushenhei";
}
/**
* 条件查询物料信息(放入前面的页面物料选项卡中)
* @param wuliao
* @param md
* @return
*/
@RequestMapping("/findwuliaobyId")
@ResponseBody
public AjaxRes findwuliaoby(Shop_wuliaoEntity wuliao,Model md){
AjaxRes res=new AjaxRes();
List wuliaoby=wuliaoService.findbyId(wuliao);
res.setSucceed(wuliaoby,"获取成功");
md.addAttribute("wuliaoby",wuliaoby);
return res;
}
/**
* 申请采购的提交
* @param caigoushenhei
* @return
*/
@RequestMapping("/subcaigoushenhei")
@ResponseBody
public AjaxRes Subcaigoushenhei(Shop_caigoushenheiEntity caigoushenhei){
//赋值uuid
caigoushenhei.setShop_caigoushenhei_id(UuidUtil.get32UUID());
AjaxRes res=new AjaxRes();
caigoushenheiService.insert(caigoushenhei);
res.setResMsg("申请提交成功!");
return res;
}
/**
* 查询出全部的采购审核信息 并显示到页面
* @param caigoushenhei
* @return
*/
@RequestMapping("/showcaigoushenhei")
@ResponseBody
public Object Showcaigoushenhei(Shop_caigoushenheiEntity caigoushenhei){
List caigoushenheis=caigoushenheiService.find(caigoushenhei);
if(caigoushenhei.getLimit()>0){
caigoushenhei.setLimits("1");
}
//实例化page对象
Page page=new Page();
page.setPageNumber(caigoushenhei.getOffset());
page.setPageSize(caigoushenhei.getLimit());
page.setTotal(caigoushenheiService.count(caigoushenhei));
page.setObj(caigoushenheis);
return page;
}
/**
* 此处查询审核通过的提交信息 必将审核日期格式进行转换
* @param caigoushenhei
* @return
*/
@RequestMapping("/showcaigoushenheizt")
@ResponseBody
public Object Showcaigoushenheizt(Shop_caigoushenheiEntity caigoushenhei){
List caigoushenheis=caigoushenheiService.findzt(caigoushenhei);
//获取到时间戳 并将其转换
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
for(int i=0;i0){
caigoushenhei.setLimits("1");
}
//实例化page对象
Page page=new Page();
page.setPageNumber(caigoushenhei.getOffset());
page.setPageSize(caigoushenhei.getLimit());
page.setTotal(caigoushenheiService.count(caigoushenhei));
page.setObj(caigoushenheis);
return page;
}
//申请批准
/**
* 当管理员同意申请过后 并置入管理员的签名 签名后将base64格式的签名图片转换为文件路径格式存放在数据库中
* @param caigoushenhei
* @param req
* @return
* @throws IOException
*/
@RequestMapping("/pizhuncaigou")
@ResponseBody
public AjaxRes pizhuncaigou(Shop_caigoushenheiEntity caigoushenhei,HttpServletRequest req) throws IOException{
AjaxRes res=new AjaxRes();
String qianming=caigoushenhei.getShop_caigoushenhei_qianming();
//声明要截取的字段(前几位)
int i=22;
//将base64编码获取并截取
byte[] buffer;
qianming=qianming.substring(i);
//转码
buffer = new BASE64Decoder().decodeBuffer(qianming);
//存入的文件路径
String lujing="\\uploadFile\\qianming\\"+buffer+".png";
String realPath=req.getServletContext().getRealPath(lujing);
FileOutputStream out = new FileOutputStream(realPath);
out.write(buffer);
out.close();
//把路径存到数据库
caigoushenhei.setShop_caigoushenhei_qianming_lujing(lujing);
caigoushenheiService.update(caigoushenhei);
res.setResMsg("申请批准成功!");
return res;
}
/**
* 审核驳回 如果未通过审核 管理员可将本条审核信息进行驳回
* @param caigoushenhei
* @return
*/
@RequestMapping("/pizhunbohui")
@ResponseBody
public AjaxRes pizhunbohui(Shop_caigoushenheiEntity caigoushenhei){
AjaxRes res=new AjaxRes();
caigoushenheiService.updatebohui(caigoushenhei);
res.setResMsg("执行成功!");
return res;
}
/**
* 删除已处理的审核信息
* @param caigoushenhei
* @return
*/
@RequestMapping("/delshenhei")
@ResponseBody
public AjaxRes delshenhei(Shop_caigoushenheiEntity caigoushenhei){
AjaxRes res=new AjaxRes();
caigoushenheiService.delete(caigoushenhei);
res.setResMsg("删除成功");
return res;
}
}
3:仓库管理控制器(Shop_cangkuController)
package com.controller;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.apache.ibatis.annotations.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import com.Ajax.AjaxRes;
import com.entitys.Shop_cangkuEntity;
import com.entitys.Shop_infoEntity;
import com.service.Shop_cangkuService;
import com.service.Shop_infoService;
import com.uuid.UuidUtil;
import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.format.UnderlineStyle;
import jxl.read.biff.BiffException;
import jxl.write.Label;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;
@Controller
public class Shop_cangkuController {
@Autowired
private Shop_cangkuService cangkuService;
@Autowired
private Shop_infoService shop_infoService;
/**
* 新加仓库(先查询是否有输入的厂库 在让其添加 系统仓库唯一约束)
* @param cangku
* @param shop_cangku_name
* @return
*/
@RequestMapping("/addcangku")
@ResponseBody
public AjaxRes addcangku(Shop_cangkuEntity cangku, @Param("shop_cangku_name") String shop_cangku_name) {
AjaxRes res = new AjaxRes();
cangku.setShop_cangku_name(shop_cangku_name);
List cangkubyname = cangkuService.findbyname(cangku);
// 判断是否已有厂库
if (cangkubyname.isEmpty()) {
// 赋值仓库id
cangku.setShop_cangku_id(UuidUtil.get32UUID());
cangkuService.insert(cangku);
System.out.println("--------------------------------------------------------" + cangku);
res.setResMsg("新加成功!");
} else {
res.setResMsg("系统已有此仓库 请勿重复添加!");
}
return res;
}
/**
* 根据仓库名查询(已采购的商品) 以及仓库 并显示在相关页面
* @param shop_info
* @param cangku
* @param md
* @return
*/
@RequestMapping("/findckname")
public String findckname(Shop_infoEntity shop_info, Shop_cangkuEntity cangku, Model md) {
List cangkus = cangkuService.find(cangku);
md.addAttribute("cangkus", cangkus);
List shop_infos = shop_infoService.findbyckname(shop_info);
md.addAttribute("shop_infos", shop_infos);
return "page/cangku";
}
/**
* 仓库管理 这里可以修改厂库的管理人员 运营状态 仓库地址 但不可修改仓库名 已交仓库容量
* @param cangku
* @param shop_cangku_name
* @return
*/
@RequestMapping("/upck")
@ResponseBody
public AjaxRes upck(Shop_cangkuEntity cangku, @Param("shop_cangku_name") String shop_cangku_name) {
AjaxRes res = new AjaxRes();
cangku.setShop_cangku_name(shop_cangku_name);
List cangkubyname = cangkuService.findbyname(cangku);
// 判断是否已有厂库
if (cangkubyname.isEmpty()) {
cangkuService.update(cangku);
res.setResMsg("修改成功!");
} else {
res.setResMsg("仓库名重复!");
}
return res;
}
/**
* 根据仓库名查询改仓库的容量 (因仓库名为唯一字段)
* @param cangku
* @param md
* @return
*/
@RequestMapping("/findsize")
@ResponseBody
public AjaxRes findsize(Shop_cangkuEntity cangku, Model md) {
AjaxRes res = new AjaxRes();
List cangkusize = cangkuService.findbyname(cangku);
res.setSucceed(cangkusize, "获取成功");
md.addAttribute("cangkusize", cangkusize);
return res;
}
/**
* 在仓库管理中删除商品信息 当确认删除时 自动更新相关仓库的容量
* @param cangku
* @param shop_info
* @param shop_id
* @return
*/
@RequestMapping("/delete_shop_info")
@ResponseBody
public AjaxRes delete_shop_info(Shop_cangkuEntity cangku,Shop_infoEntity shop_info,
@Param("shop_id") String shop_id) {
AjaxRes res = new AjaxRes();
cangkuService.update_rongliang(cangku);
//得到需要删除的商品id
shop_info.setShop_id(shop_id);
shop_infoService.delete(shop_info);
res.setResMsg("删除成功!");
return res;
}
/**
* 系统仓库的删除 判断当前仓库中是否还存在商品信息 如果存在 则阻止删除(验证在前端验证)
* @param cangku
* @return
*/
@RequestMapping("/del_cangku")
@ResponseBody
public AjaxRes delcangku(Shop_cangkuEntity cangku){
AjaxRes res=new AjaxRes();
cangkuService.delete(cangku);
res.setResMsg("改仓库已被成功删除!");
return res;
}
/**
* 盘库管理(excel操作 导入以及导出)
* @param cangku
* @param shop_info
* @param req
* @param shop_cangku_name
* @return
*/
@RequestMapping("/panku")
@ResponseBody
public AjaxRes panku(Shop_cangkuEntity cangku,Shop_infoEntity shop_info, HttpServletRequest req,
@Param("shop_int_cangku") String shop_cangku_name) {
AjaxRes res = new AjaxRes();
// excel存放路径
String realPath = req.getSession().getServletContext().getRealPath("/");
String exclePath = "static\\excel\\";
String pathName = shop_cangku_name + "盘库表.xls";
String fileName = realPath + exclePath + pathName;
File xlsFile = new File(fileName);
WritableWorkbook workbook = null;
try {
workbook = Workbook.createWorkbook(xlsFile);
WritableSheet sheet = workbook.createSheet("sheet", 0);
Date date = new Date();
//日期格式装换
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String zhDate=sdf.format(date);
try {
WritableFont wf = new WritableFont(WritableFont.ARIAL, 15,WritableFont.BOLD, false, UnderlineStyle.NO_UNDERLINE,jxl.format.Colour.BLACK); // 定义格式 字体 下划线 斜体 粗体 颜色
WritableCellFormat wcf = new WritableCellFormat(wf); // 单元格定义
wcf.setAlignment(jxl.format.Alignment.CENTRE); // 设置对齐方式
//标题样式
WritableFont wftit = new WritableFont(WritableFont.ARIAL, 15,WritableFont.BOLD, false, UnderlineStyle.NO_UNDERLINE,jxl.format.Colour.BLACK); // 定义格式 字体 下划线 斜体 粗体 颜色
WritableCellFormat wcftit = new WritableCellFormat(wftit); // 单元格定义
/* wcftit.setBackground(jxl.format.Colour.WHITE); // 设置单元格的背景颜色*/
wcftit.setAlignment(jxl.format.Alignment.CENTRE); // 设置对齐方式
//内容样式
WritableFont wfcont = new WritableFont(WritableFont.ARIAL, 14,WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE,jxl.format.Colour.BLACK); // 定义格式 字体 下划线 斜体 粗体 颜色
WritableCellFormat wccont = new WritableCellFormat(wfcont); // 单元格定义
wccont.setAlignment(jxl.format.Alignment.CENTRE); // 设置对齐方式
// 因为仓库名为唯一约束(所以这里采用根据仓库名查询)
List cangkus = cangkuService.findbyname(cangku);
if (cangkus != null && cangkus.size() > 0) {
for (int i = 0; i < cangkus.size(); i++) {
sheet.addCell(new Label(0, 0,zhDate+":"+cangkus.get(i).getShop_cangku_name() + ":盘库",wcf));
sheet.mergeCells(0, 0, 5, 0);//合并垮了5列。
sheet.addCell(new Label(0, 1, "仓库类型"+":" + cangkus.get(i).getShop_cangku_leixing(),wcf));
sheet.addCell(new Label(1, 1, "管理员"+":" + cangkus.get(i).getShop_cangku_user(),wcf));
sheet.addCell(new Label(2, 1, "仓库容量"+":" + cangkus.get(i).getShop_cangku_rongliang().toString(),wcf));
sheet.addCell(new Label(3, 1, "当前容量"+":" + cangkus.get(i).getShop_cangku_now_rongliang().toString(),wcf));
}
}
// 设置盘库表头
sheet.addCell(new Label(0, 2, "盘后商品总容量",wcftit));
// 设置盘库表头
sheet.addCell(new Label(2, 2, "现仓库剩余容量",wcftit));
// 设置列表名
sheet.addCell(new Label(0, 3, "商品名",wcftit));
sheet.addCell(new Label(1, 3, "供应商",wcftit));
sheet.addCell(new Label(2, 3, "入库仓库",wcftit));
sheet.addCell(new Label(3, 3, "当前数量",wcftit));
sheet.addCell(new Label(4, 3, "实际数量",wcftit));
sheet.addCell(new Label(5, 3, "备注",wcftit));
shop_info.setShop_int_cangku(shop_cangku_name);
List shop_infos = shop_infoService.findbyckname(shop_info);
if (shop_infos != null && shop_infos.size() > 0) {
for (int row = 0; row < shop_infos.size(); row++) {
sheet.addCell(new Label(0, row + 4, shop_infos.get(row).getShop_name(),wccont));
sheet.addCell(new Label(1, row + 4, shop_infos.get(row).getShop_gongyin_name(),wccont));
sheet.addCell(new Label(2, row + 4, shop_infos.get(row).getShop_int_cangku(),wccont));
sheet.addCell(new Label(3, row + 4, shop_infos.get(row).getShop_size().toString(),wccont));
sheet.addCell(new Label(4, row + 4, null));
sheet.addCell(new Label(5, row + 4, null));
}
}
//设置行宽
sheet.setColumnView(0,30);
sheet.setColumnView(1,30);
sheet.setColumnView(2,30);
sheet.setColumnView(3,30);
sheet.setColumnView(4,30);
sheet.setColumnView(5,30);
sheet.setColumnView(6,30);
//设置行高
sheet.setRowView(0, 500);
sheet.setRowView(2, 500);
workbook.write();
workbook.close();
} catch (RowsExceededException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (WriteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return res;
}
}
4:验证码
package com.logoverify;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class VerifyController {
private int width = 150;// 定义图片的width
private int height = 50;// 定义图片的height
private int codeCount = 4;// 定义图片上显示验证码的个数
private int xx = 30;
private int fontHeight = 24;
private int codeY = 30;
char[] codeSequence = { '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', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
/**
* 定义并创建前端用户登录验证是的验证码
* @param req
* @param resp
* @throws IOException
*/
@RequestMapping("/logoVerify")
public void getCode(HttpServletRequest req, HttpServletResponse resp) throws IOException {
// 定义图像buffer
BufferedImage buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics gd = buffImg.getGraphics();
// 创建一个随机数生成器类
Random random = new Random();
// 将图像填充为白色
gd.setColor(Color.WHITE);
gd.fillRect(0, 0, width, height);
// 创建字体,字体的大小应该根据图片的高度来定。
Font font = new Font("Fixedsys", Font.BOLD, fontHeight);
// 设置字体。
gd.setFont(font);
// 画边框。
gd.setColor(Color.BLACK);
gd.drawRect(0, 0, width - 1, height - 1);
// 随机产生40条干扰线,使图象中的认证码不易被其它程序探测到。
gd.setColor(Color.BLACK);
for (int i = 0; i < 40; i++) {
int x = random.nextInt(width);
int y = random.nextInt(height);
int xl = random.nextInt(12);
int yl = random.nextInt(12);
gd.drawLine(x, y, x + xl, y + yl);
}
// randomCode用于保存随机产生的验证码,以便用户登录后进行验证。
StringBuffer randomCode = new StringBuffer();
int red = 0, green = 0, blue = 0;
// 随机产生codeCount数字的验证码。
for (int i = 0; i < codeCount; i++) {
// 得到随机产生的验证码数字。
String code = String.valueOf(codeSequence[random.nextInt(codeSequence.length-1)]);
// 产生随机的颜色分量来构造颜色值,这样输出的每位数字的颜色值都将不同。
red = random.nextInt(255);
green = random.nextInt(255);
blue = random.nextInt(255);
// 用随机产生的颜色将验证码绘制到图像中。
gd.setColor(new Color(red, green, blue));
gd.drawString(code, (i + 1) * xx, codeY);
// 将产生的四个随机数组合在一起。
randomCode.append(code);
}
// 将四位数字的验证码保存到Session中。
HttpSession session = req.getSession();
//session传值
session.setAttribute("logoVerify_val", randomCode.toString());
// 禁止图像缓存。
resp.setHeader("Pragma", "no-cache");
resp.setHeader("Cache-Control", "no-cache");
resp.setDateHeader("Expires", 0);
resp.setContentType("image/jpeg");
// 将图像输出到Servlet输出流中。
ServletOutputStream sos = resp.getOutputStream();
ImageIO.write(buffImg, "jpeg", sos);
sos.close();
}
}
5:spring-mvl.xml
text/html;charset=UTF-8
text/json;charset=UTF-8
application/json;charset=UTF-8
6:SSM Maven 相关pom.xml 配置文件
4.0.0
com
InvoicingManagementSystem
war
0.0.1-SNAPSHOT
InvoicingManagementSystem Maven Webapp
http://maven.apache.org
javax
javaee-web-api
6.0
provided
org.springframework
spring-jdbc
4.3.5.RELEASE
org.springframework
spring-webmvc
4.3.5.RELEASE
commons-io
commons-io
2.4
commons-fileupload
commons-fileupload
1.3.1
org.apache.commons
commons-lang3
3.3.2
jstl
jstl
1.2
commons-codec
commons-codec
1.9
org.apache.commons
commons-dbcp2
2.1.1
mysql
mysql-connector-java
5.0.8
runtime
com.alibaba
druid
1.0.15
org.mybatis
mybatis
3.3.1
org.mybatis
mybatis-spring
1.2.4
com.github.pagehelper
pagehelper
4.2.1
log4j
log4j
1.2.17
org.apache.commons
commons-lang3
3.4
commons-beanutils
commons-beanutils
1.9.1
org.slf4j
slf4j-api
1.7.25
org.aspectj
aspectjweaver
1.8.11
aspectj
aspectjrt
1.5.3
com.fasterxml.jackson.core
jackson-core
2.9.5
com.fasterxml.jackson.core
jackson-databind
2.9.5
com.fasterxml.jackson.core
jackson-annotations
2.9.5
jexcelapi
jxl
2.6
InvoicingManagementSystem
7:前台用户管理页面
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
个人信息界面
|
昵 称:
登录账号 :
性 别:
生 日:
邮 箱:
电 话:
地 址:
注册时间 :
上次登录 :
信息修改:
账户安全:
以上便是小生通过 java SSM框架 制作的一套进存销管理系统 学习永无止境 欢迎大家进行参观与指导
项目下载
https://download.csdn.net/download/qq_41193701/11176065