作者主页:夜未央5788
简介:Java领域优质创作者、Java项目、学习资料、技术互助
文末获取源码
项目介绍
登录后可以管理图书,管理图书类别,读者的添加和删除等,然后还可以实现图书的借阅和归还。
送的这个论文是一个非常完美的论文。
由于本程序规模不大,可供课程设计,毕业设计学习演示之用
环境需要
1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。
2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;
3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可
4.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS;
5.数据库:MySql 5.7版本;
技术栈
HTML+CSS+JavaScript+jsp+mysql
使用说明
1. 使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件;
2. 使用IDEA/Eclipse/MyEclipse导入项目,Eclipse/MyEclipse导入时,若为maven项目请选择maven;若为maven项目,导入成功后请执行maven clean;maven install命令,然后运行;
3. 将项目中application.yml配置文件中的数据库配置改为自己的配置;
4. 运行项目,输入localhost:8080/login.jsp 登录
运行截图
相关代码
日志处理控制器
@Controller
@RequestMapping("/logController")
public class LogController extends BaseController {
/**
* Logger for this class
*/
private static final Logger logger = Logger.getLogger(LogController.class);
private SystemService systemService;
@Autowired
public void setSystemService(SystemService systemService) {
this.systemService = systemService;
}
/**
* 日志列表页面跳转
*
* @return
*/
@RequestMapping(params = "log")
public ModelAndView log() {
return new ModelAndView("system/log/logList");
}
/**
* easyuiAJAX请求数据
*
* @param request
* @param response
* @param dataGrid
*/
@RequestMapping(params = "datagrid")
public void datagrid(HttpServletRequest request, HttpServletResponse response, DataGrid dataGrid) {
CriteriaQuery cq = new CriteriaQuery(TSLog.class, dataGrid);
String loglevel = request.getParameter("loglevel");
if (loglevel == null || loglevel.equals("0")) {
} else {
cq.eq("loglevel", oConvertUtils.getShort(loglevel));
cq.add();
}
this.systemService.getDataGridReturn(cq, true);
TagUtil.datagrid(response, dataGrid);
}
/**
* 统计集合页面
*
* @return
*/
@RequestMapping(params = "statisticTabs")
public ModelAndView statisticTabs(HttpServletRequest request) {
return new ModelAndView("system/log/statisticTabs");
}
/**
* 用户浏览器使用统计图
*
* @return
*/
@RequestMapping(params = "userBroswer")
public ModelAndView userBroswer(String reportType, HttpServletRequest request) {
request.setAttribute("reportType", reportType);
if("pie".equals(reportType)){
return new ModelAndView("system/log/userBroswerPie");
}else if("line".equals(reportType)) {
return new ModelAndView("system/log/userBroswerLine");
}
return new ModelAndView("system/log/userBroswer");
}
/**
* 报表数据生成
*
* @return
*/
@RequestMapping(params = "getBroswerBar")
@ResponseBody
public List<Highchart> getBroswerBar(HttpServletRequest request,String reportType, HttpServletResponse response) {
List<Highchart> list = new ArrayList<Highchart>();
Highchart hc = new Highchart();
StringBuffer sb = new StringBuffer();
sb.append("SELECT broswer ,count(broswer) FROM TSLog group by broswer");
List userBroswerList = systemService.findByQueryString(sb.toString());
Long count = systemService.getCountForJdbc("SELECT COUNT(1) FROM T_S_Log WHERE 1=1");
List lt = new ArrayList();
hc = new Highchart();
hc.setName("用户浏览器统计分析");
hc.setType(reportType);
Map<String, Object> map;
if (userBroswerList.size() > 0) {
for (Object object : userBroswerList) {
map = new HashMap<String, Object>();
Object[] obj = (Object[]) object;
map.put("name", obj[0]);
map.put("y", obj[1]);
Long groupCount = (Long) obj[1];
Double percentage = 0.0;
if (count != null && count.intValue() != 0) {
percentage = new Double(groupCount)/count;
}
map.put("percentage", percentage*100);
lt.add(map);
}
}
hc.setData(lt);
list.add(hc);
return list;
}
/**
* hightchart导出图片
*
* @param request
* @param response
* @throws IOException
*/
@RequestMapping(params = "export")
public void export(HttpServletRequest request, HttpServletResponse response)
throws IOException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
String type = request.getParameter("type");
String svg = request.getParameter("svg");
String filename = request.getParameter("filename");
filename = filename == null ? "chart" : filename;
ServletOutputStream out = response.getOutputStream();
try {
if (null != type && null != svg) {
svg = svg.replaceAll(":rect", "rect");
String ext = "";
Transcoder t = null;
if (type.equals("image/png")) {
ext = "png";
t = new PNGTranscoder();
} else if (type.equals("image/jpeg")) {
ext = "jpg";
t = new JPEGTranscoder();
} else if (type.equals("application/pdf")) {
ext = "pdf";
t = (Transcoder) new PDFTranscoder();
} else if (type.equals("image/svg+xml"))
ext = "svg";
response.addHeader("Content-Disposition",
"attachment; filename=" + new String(filename.getBytes("GBK"),"ISO-8859-1") + "." + ext);
response.addHeader("Content-Type", type);
if (null != t) {
TranscoderInput input = new TranscoderInput(
new StringReader(svg));
TranscoderOutput output = new TranscoderOutput(out);
try {
t.transcode(input, output);
} catch (TranscoderException e) {
out.print("Problem transcoding stream. See the web logs for more details.");
e.printStackTrace();
}
} else if (ext.equals("svg")) {
// out.print(svg);
OutputStreamWriter writer = new OutputStreamWriter(out,
"UTF-8");
writer.append(svg);
writer.close();
} else
out.print("Invalid type: " + type);
} else {
response.addHeader("Content-Type", "text/html");
out
.println("Usage:\n\tParameter [svg]: The DOM Element to be converted."
+ "\n\tParameter [type]: The destination MIME type for the elment to be transcoded.");
}
} finally {
if (out != null) {
out.flush();
out.close();
}
}
}
}
登录管理控制器
@Controller
@RequestMapping("/loginController")
public class LoginController {
private Logger log = Logger.getLogger(LoginController.class);
private SystemService systemService;
private UserService userService;
private String message = null;
private Map<Integer, List<TSFunction>> shortcutFunctionMap = null;
private List<TSRoleUser> rUsers1 = null;
@Autowired
public void setSystemService(SystemService systemService) {
this.systemService = systemService;
}
@Autowired
public void setUserService(UserService userService) {
this.userService = userService;
}
@RequestMapping(params = "goPwdInit")
public String goPwdInit() {
return "login/pwd_init";
}
/**
* admin账户密码初始化
*
* @param request
* @return
*/
@RequestMapping(params = "pwdInit")
public ModelAndView pwdInit(HttpServletRequest request) {
ModelAndView modelAndView = null;
TSUser user = new TSUser();
user.setUserName("admin");
String newPwd = "123456";
userService.pwdInit(user, newPwd);
modelAndView = new ModelAndView(new RedirectView(
"loginController.do?login"));
return modelAndView;
}
/**
* 检查用户名称
*
* @param user
* @param req
* @return
*/
@RequestMapping(params = "checkuser")
@ResponseBody
public AjaxJson checkuser(TSUser user, HttpServletRequest req) {
HttpSession session = ContextHolderUtils.getSession();
DataSourceContextHolder
.setDataSourceType(DataSourceType.dataSource_jeecg);
AjaxJson j = new AjaxJson();
// update-begin--Author:zhangguoming Date:20140226 for:添加验证码
String randCode = req.getParameter("randCode");
if (StringUtils.isEmpty(randCode)) {
j.setMsg("请输入验证码");
j.setSuccess(false);
} else if (!randCode.equalsIgnoreCase(String.valueOf(session.getAttribute("randCode")))) {
// todo "randCode"和验证码servlet中该变量一样,通过统一的系统常量配置比较好,暂时不知道系统常量放在什么地方合适
j.setMsg("验证码错误!");
j.setSuccess(false);
} else {
// update-end--Author:zhangguoming Date:20140226 for:添加验证码
int users = userService.getList(TSUser.class).size();
if (users == 0) {
j.setMsg("用户不存在");
j.setSuccess(false);
} else {
TSUser u = userService.checkUserExits(user);
if (u != null) {
if(0 == u.getStatus()){
j.setMsg("您的账户已欠费,欠费金额:" + u.getDebit() + "元,请联系管理员!");
j.setSuccess(false);
}else{
message = "用户: " + user.getUserName() + "["
+ u.getTSDepart().getDepartname() + "]" + "登录成功";
Client client = new Client();
client.setIp(IpUtil.getIpAddr(req));
client.setLogindatetime(new Date());
client.setUser(u);
ClientManager.getInstance().addClinet(session.getId(),
client);
// 添加登陆日志
systemService.addLog(message, Globals.Log_Type_LOGIN,
Globals.Log_Leavel_INFO);
}
} else {
j.setMsg("用户名或密码错误!");
j.setSuccess(false);
}
}
// update-begin--Author:zhangguoming Date:20140226 for:添加验证码
}
// update-end--Author:zhangguoming Date:20140226 for:添加验证码
return j;
}
/**
* 用户登录
*
* @param user
* @param request
* @param session
* @return
*/
@RequestMapping(params = "login")
public String login(HttpServletRequest request) {
DataSourceContextHolder
.setDataSourceType(DataSourceType.dataSource_jeecg);
TSUser user = ResourceUtil.getSessionUserName();
String roles = "";
if (user != null) {
List<TSRoleUser> rUsers = systemService.findByProperty(
TSRoleUser.class, "TSUser.id", user.getId());
for (TSRoleUser ru : rUsers) {
TSRole role = ru.getTSRole();
roles += role.getRoleName() + ",";
}
if (roles.length() > 0) {
roles = roles.substring(0, roles.length() - 1);
}
request.setAttribute("roleName", roles);
request.setAttribute("userName", user.getUserName());
request.setAttribute("debit", user.getDebit());
request.getSession().setAttribute("CKFinder_UserRole", "admin");
//获取一级菜单列表
rUsers1 = rUsers;
request.setAttribute("primaryMenuList", getPrimaryMenu(rUsers));
// 默认风格
String indexStyle = "shortcut";
Cookie[] cookies = request.getCookies();
for (Cookie cookie : cookies) {
if (cookie == null || StringUtils.isEmpty(cookie.getName())) {
continue;
}
if (cookie.getName().equalsIgnoreCase("JEECGINDEXSTYLE")) {
indexStyle = cookie.getValue();
}
}
// 要添加自己的风格,复制下面三行即可
if (StringUtils.isNotEmpty(indexStyle)
&& indexStyle.equalsIgnoreCase("bootstrap")) {
return "main/bootstrap_main";
}
if (StringUtils.isNotEmpty(indexStyle)
&& indexStyle.equalsIgnoreCase("shortcut")) {
return "main/shortcut_main";
}
// update-start--Author:gaofeng Date:2014-01-24 for:新增首页风格按钮选项
if (StringUtils.isNotEmpty(indexStyle)
&& indexStyle.equalsIgnoreCase("sliding")) {
return "main/sliding_main";
}
// update-start--Author:gaofeng Date:2014-01-24 for:新增首页风格按钮选项
return "main/main";
} else {
return "login/login";
}
}
/**
* 退出系统
*
* @param user
* @param req
* @return
*/
@RequestMapping(params = "logout")
public ModelAndView logout(HttpServletRequest request) {
HttpSession session = ContextHolderUtils.getSession();
TSUser user = ResourceUtil.getSessionUserName();
shortcutFunctionMap = null;
systemService.addLog("用户" + user.getUserName() + "已退出",
Globals.Log_Type_EXIT, Globals.Log_Leavel_INFO);
ClientManager.getInstance().removeClinet(session.getId());
ModelAndView modelAndView = new ModelAndView(new RedirectView(
"loginController.do?login"));
return modelAndView;
}
/**
* 菜单跳转
*
* @return
*/
@RequestMapping(params = "left")
public ModelAndView left(HttpServletRequest request) {
TSUser user = ResourceUtil.getSessionUserName();
HttpSession session = ContextHolderUtils.getSession();
// 登陆者的权限
if (user.getId() == null) {
session.removeAttribute(Globals.USER_SESSION);
return new ModelAndView(
new RedirectView("loginController.do?login"));
}
request.setAttribute("menuMap", getFunctionMap(user));
List<TSConfig> configs = userService.loadAll(TSConfig.class);
for (TSConfig tsConfig : configs) {
request.setAttribute(tsConfig.getCode(), tsConfig.getContents());
}
return new ModelAndView("main/left");
}
/**
* 获取权限的map
*
* @param user
* @return
*/
private Map<Integer, List<TSFunction>> getFunctionMap(TSUser user) {
Map<Integer, List<TSFunction>> functionMap = new HashMap<Integer, List<TSFunction>>();
Map<String, TSFunction> loginActionlist = getUserFunction(user);
if (loginActionlist.size() > 0) {
Collection<TSFunction> allFunctions = loginActionlist.values();
for (TSFunction function : allFunctions) {
if (!functionMap.containsKey(function.getFunctionLevel() + 0)) {
functionMap.put(function.getFunctionLevel() + 0,
new ArrayList<TSFunction>());
}
functionMap.get(function.getFunctionLevel() + 0).add(function);
}
// 菜单栏排序
Collection<List<TSFunction>> c = functionMap.values();
for (List<TSFunction> list : c) {
Collections.sort(list, new NumberComparator());
}
}
return functionMap;
}
/**
* 获取用户菜单列表
*
* @param user
* @return
*/
private Map<String, TSFunction> getUserFunction(TSUser user) {
HttpSession session = ContextHolderUtils.getSession();
Client client = ClientManager.getInstance().getClient(session.getId());
if (client.getFunctions() == null) {
Map<String, TSFunction> loginActionlist = new HashMap<String, TSFunction>();
List<TSRoleUser> rUsers = systemService.findByProperty(
TSRoleUser.class, "TSUser.id", user.getId());
for (TSRoleUser ru : rUsers) {
TSRole role = ru.getTSRole();
List<TSRoleFunction> roleFunctionList = systemService
.findByProperty(TSRoleFunction.class, "TSRole.id",
role.getId());
for (TSRoleFunction roleFunction : roleFunctionList) {
TSFunction function = roleFunction.getTSFunction();
loginActionlist.put(function.getId(), function);
}
}
client.setFunctions(loginActionlist);
}
return client.getFunctions();
}
/**
* 首页跳转
*
* @return
*/
@RequestMapping(params = "home")
public ModelAndView home(HttpServletRequest request) {
return new ModelAndView("main/home");
}
/**
* 无权限页面提示跳转
*
* @return
*/
@RequestMapping(params = "noAuth")
public ModelAndView noAuth(HttpServletRequest request) {
return new ModelAndView("common/noAuth");
}
/**
* @Title: top
* @Description: bootstrap头部菜单请求
* @param request
* @return ModelAndView
* @throws
*/
@RequestMapping(params = "top")
public ModelAndView top(HttpServletRequest request) {
TSUser user = ResourceUtil.getSessionUserName();
HttpSession session = ContextHolderUtils.getSession();
// 登陆者的权限
if (user.getId() == null) {
session.removeAttribute(Globals.USER_SESSION);
return new ModelAndView(
new RedirectView("loginController.do?login"));
}
request.setAttribute("menuMap", getFunctionMap(user));
List<TSConfig> configs = userService.loadAll(TSConfig.class);
for (TSConfig tsConfig : configs) {
request.setAttribute(tsConfig.getCode(), tsConfig.getContents());
}
return new ModelAndView("main/bootstrap_top");
}
/**
* @Title: top
* @author gaofeng
* @Description: shortcut头部菜单请求
* @param request
* @return ModelAndView
* @throws
*/
@RequestMapping(params = "shortcut_top")
public ModelAndView shortcut_top(HttpServletRequest request) {
TSUser user = ResourceUtil.getSessionUserName();
HttpSession session = ContextHolderUtils.getSession();
// 登陆者的权限
if (user.getId() == null) {
session.removeAttribute(Globals.USER_SESSION);
return new ModelAndView(
new RedirectView("loginController.do?login"));
}
request.setAttribute("menuMap", getFunctionMap(user));
List<TSConfig> configs = userService.loadAll(TSConfig.class);
for (TSConfig tsConfig : configs) {
request.setAttribute(tsConfig.getCode(), tsConfig.getContents());
}
return new ModelAndView("main/shortcut_top");
}
/**
* @Title: top
* @author:gaofeng
* @Description: shortcut头部菜单一级菜单列表,并将其用ajax传到页面,实现动态控制一级菜单列表
* @param request
* @return AjaxJson
* @throws
*/
public String getPrimaryMenu(List<TSRoleUser> rUsers) {
//获取一级菜单列表
Map<Integer, List<TSFunction>> functionMap = new HashMap<Integer, List<TSFunction>>();
if(shortcutFunctionMap != null){
//将更新前的菜单数据传过来
functionMap = shortcutFunctionMap;
}else{
functionMap = getPrimaryMenuBase(rUsers);
}
String floor = "";
List<TSFunction> primaryMenu = null;
Iterator<Entry<Integer, List<TSFunction>>> it = functionMap.entrySet().iterator();
while (it.hasNext()) {
Map.Entry pairs = (Map.Entry) it.next();
primaryMenu = (List<TSFunction>) pairs.getValue();
for (TSFunction function : primaryMenu) {
// com.bjpowernode.core.util.LogUtil.info(function.getFunctionName());
// com.bjpowernode.core.util.LogUtil.info(function.getFunctionLevel());
if(function.getFunctionLevel() == 0){
if("Online 开发".equals(function.getFunctionName())){
floor += " <li><img class='imag1' src='plug-in/login/images/online.png' /> "
+ " <img class='imag2' src='plug-in/login/images/online_up.png' style='display: none;' />" + " </li> ";
}else if("统计查询".equals(function.getFunctionName())){
floor += " <li><img class='imag1' src='plug-in/login/images/guanli.png' /> "
+ " <img class='imag2' src='plug-in/login/images/guanli_up.png' style='display: none;' />" + " </li> ";
}else if("系统管理".equals(function.getFunctionName())){
floor += " <li><img class='imag1' src='plug-in/login/images/xtgl.png' /> "
+ " <img class='imag2' src='plug-in/login/images/xtgl_up.png' style='display: none;' />" + " </li> ";
}else if("常用示例".equals(function.getFunctionName())){
floor += " <li><img class='imag1' src='plug-in/login/images/cysl.png' /> "
+ " <img class='imag2' src='plug-in/login/images/cysl_up.png' style='display: none;' />" + " </li> ";
}else if("系统监控".equals(function.getFunctionName())){
floor += " <li><img class='imag1' src='plug-in/login/images/xtjk.png' /> "
+ " <img class='imag2' src='plug-in/login/images/xtjk_up.png' style='display: none;' />" + " </li> ";
}else{
//其他的为默认通用的图片模式
String s = "";
if(function.getFunctionName().length()>=5 && function.getFunctionName().length()<7){
s = "<div style='width:67px;position: absolute;top:40px;text-align:center;color:#909090;font-size:12px;'><span style='letter-spacing:-1px;'>"+ function.getFunctionName() +"</span></div>";
}else if(function.getFunctionName().length()<5){
s = "<div style='width:67px;position: absolute;top:40px;text-align:center;color:#909090;font-size:12px;'>"+ function.getFunctionName() +"</div>";
}else if(function.getFunctionName().length()>=7){
s = "<div style='width:67px;position: absolute;top:40px;text-align:center;color:#909090;font-size:12px;'><span style='letter-spacing:-1px;'>"+ function.getFunctionName().substring(0, 6) +"</span></div>";
}
floor += " <li style='position: relative;'><img class='imag1' src='plug-in/login/images/default.png' /> "
+ " <img class='imag2' src='plug-in/login/images/default_up.png' style='display: none;' />"
+ s +"</li> ";
}
}
}
}
return floor;
}
/**
* 返回数据
* @param request
* @param response
* @param dataGrid
*/
@RequestMapping(params = "getPrimaryMenuForWebos")
@ResponseBody
public AjaxJson getPrimaryMenuForWebos() {
DataSourceContextHolder
.setDataSourceType(DataSourceType.dataSource_jeecg);
AjaxJson j = new AjaxJson();
String PMenu = getPrimaryMenuForWeb(rUsers1);
j.setMsg(PMenu);
return j;
}
public String getPrimaryMenuForWeb(List<TSRoleUser> rUsers) {
//获取一级菜单列表
Map<Integer, List<TSFunction>> functionMap = new HashMap<Integer, List<TSFunction>>();
// if(shortcutFunctionMap != null){
//
// //将更新前的菜单数据传过来
// functionMap = shortcutFunctionMap;
// }else{
functionMap = getPrimaryMenuBase(rUsers);
// }
String floor = "";
floor = ListtoMenu.getWebosMenu(functionMap);
return floor;
}
/**
* @Title: top
* @author:gaofeng
* @Description: shortcut头部菜单一级菜单列表,实现动态控制一级菜单列表的基础方法
* @param request
* @return AjaxJson
* @throws
*/
public Map<Integer, List<TSFunction>> getPrimaryMenuBase(List<TSRoleUser> rUsers) {
//获取一级菜单列表
Map<Integer, List<TSFunction>> functionMap = new HashMap<Integer, List<TSFunction>>();
Map<String, TSFunction> loginActionlist = new HashMap<String, TSFunction>();
for (TSRoleUser ru : rUsers) {
TSRole role = ru.getTSRole();
List<TSRoleFunction> roleFunctionList = systemService
.findByProperty(TSRoleFunction.class, "TSRole.id",
role.getId());
for (TSRoleFunction roleFunction : roleFunctionList) {
TSFunction function = roleFunction.getTSFunction();
loginActionlist.put(function.getId(), function);
}
}
if (loginActionlist.size() > 0) {
Collection<TSFunction> allFunctions = loginActionlist.values();
for (TSFunction function : allFunctions) {
if (!functionMap.containsKey(function.getFunctionLevel() + 0)) {
functionMap.put(function.getFunctionLevel() + 0,
new ArrayList<TSFunction>());
}
functionMap.get(function.getFunctionLevel() + 0).add(function);
}
// 菜单栏排序
Collection<List<TSFunction>> c = functionMap.values();
for (List<TSFunction> list : c) {
Collections.sort(list, new NumberComparator());
}
}
//将更新前的菜单数据赋值过去
shortcutFunctionMap = functionMap;
return functionMap;
}
}
如果也想学习本系统,下面领取。关注并回复:024jsp