基于javaweb+mysql的springbootoa办公自动化系统设计和实现(java+springboot+freemarker+mysql+maven+mybatis+jpa)
私信源码获取及调试交流
运行环境
Java≥8、MySQL≥5.7
开发工具
eclipse/idea/myeclipse/sts等均可配置运行
适用
课程设计,大作业,毕业设计,项目练习,学习演示等
功能说明
基于javaweb的SpringBootoa办公自动化系统设计和实现(java+springboot+freemarker+mysql+maven+mybatis+jpa)
java springbootOA办公自动化系统:
主要功能模块:系统、用户、角色、考勤、流程、公告、邮件、任务、日程、计划、文件、笔记、通讯录、讨论区等多个模块管理
使用Maven进行项目管理,基于springboot框架开发的项目,mysql底层数据库,前端采用freemarker模板引擎,Bootstrap作为前端UI框架,集成了jpa、mybatis等框架。
@RequestMapping("downfile")
public void downFile(HttpServletResponse response, @RequestParam("fileid") Long fileid) {
try {
FileList filelist = fldao.findOne(fileid);
File file = fs.getFile(filelist.getFilePath());
response.setContentLength(filelist.getSize().intValue());
response.setContentType(filelist.getContentType());
response.setHeader("Content-Disposition","attachment;filename=" + new String(filelist.getFileName().getBytes("UTF-8"), "ISO8859-1"));
writefile(response, file);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 写文件 方法
*
* @param response
* @param file
* @throws IOException
*/
public void writefile(HttpServletResponse response, File file) {
ServletOutputStream sos = null;
FileInputStream aa = null;
try {
aa = new FileInputStream(file);
sos = response.getOutputStream();
// 读取文件问字节码
byte[] data = new byte[(int) file.length()];
IOUtils.readFully(aa, data);
// 将文件流输出到浏览器
IOUtils.write(data, sos);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
sos.close();
aa.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return "redirect:/mytask";
}
/**
* 根据发布人这边删除任务和相关联系
* @param req
* @param session
* @return
*/
@RequestMapping("shanchu")
public String delete(HttpServletRequest req, @SessionAttribute("userId") Long userId) {
// 得到任务的 id
String taskid = req.getParameter("id");
Long ltaskid = Long.parseLong(taskid);
// 根据任务id找出这条任务
Tasklist task = tdao.findOne(ltaskid);
if(task.getUsersId().getUserId().equals(userId)){
// 删除日志表
int i=tservice.detelelogger(ltaskid);
System.out.println(i+"mmmmmmmmmmmm");
// 分割任务接收人 还要查找联系人的主键并删除接收人中间表
StringTokenizer st = new StringTokenizer(task.getReciverlist(), ";");
while (st.hasMoreElements()) {
User reciver = udao.findid(st.nextToken());
Long pkid = udao.findpkId(task.getTaskId(), reciver.getUserId());
int m=tservice.delete(pkid);
System.out.println(m+"sssssssssss");
}
// 删除这条任务
tservice.deteletask(task);
}else{
System.out.println("权限不匹配,不能删除");
return "redirect:/notlimit";
}
return "redirect:/taskmanage";
}
/**
* 接收人这边删除
*/
@RequestMapping("myshanchu")
public String mydelete(HttpServletRequest req, @SessionAttribute("userId") Long userId) {
*/
@RequestMapping("informedit")
public String infromEdit(HttpServletRequest req, HttpSession session, Model model) {
session.removeAttribute("noticeId");
List<SystemTypeList> typeList = typeDao.findByTypeModel("inform");
List<SystemStatusList> statusList = statusDao.findByStatusModel("inform");
if (!StringUtils.isEmpty(req.getAttribute("errormess"))) {
req.setAttribute("errormess", req.getAttribute("errormess"));
}
if (!StringUtils.isEmpty(req.getAttribute("success"))) {
req.setAttribute("success", "数据保存成功");
}
req.setAttribute("typeList", typeList);
req.setAttribute("statusList", statusList);
if (!StringUtils.isEmpty(req.getParameter("id"))) {
Long noticeId = Long.parseLong(req.getParameter("id"));
NoticesList noticeList = informDao.findOne(noticeId);
model.addAttribute("noticeList", noticeList);
model.addAttribute("typeName", typeDao.findOne(noticeList.getTypeId()).getTypeName());
model.addAttribute("statusName", statusDao.findOne(noticeList.getStatusId()).getStatusName());
session.setAttribute("noticeId", noticeId);
}
return "inform/informedit";
}
/**
* 详细通知显示
*/
@RequestMapping("informshow")
public String informShow(HttpServletRequest req, Model model) {
Long noticeId = Long.parseLong(req.getParameter("id"));
if (!StringUtils.isEmpty(req.getParameter("read"))) {
if (("0").equals(req.getParameter("read"))) {
Long relationId = Long.parseLong(req.getParameter("relationid"));
NoticeUserRelation relation = informrelationDao.findOne(relationId);
relation.setRead(true);
informrelationservice.save(relation);
}
}
NoticesList notice = informDao.findOne(noticeId);
User user = uDao.findOne(notice.getUserId());
model.addAttribute("notice", notice);
model.addAttribute("userName", user.getUserName());
return "inform/informshow";
}
/**
* 系统管理表单验证
List<Map<String, Object>> directors=am.allDirector(userId, alph, outtype, baseKey);
List<Map<String, Object>> adds=addressService.fengzhaung(directors);
PageInfo<Map<String, Object>> pageinfo=new PageInfo<>(directors);
if(!StringUtils.isEmpty(outtype)){
model.addAttribute("outtype", outtype);
}
Pageable pa=new PageRequest(0, 10);
Page<User> userspage=uDao.findAll(pa);
List<User> users=userspage.getContent();
model.addAttribute("modalurl", "modalpaging");
model.addAttribute("modalpage", userspage);
model.addAttribute("users", users);
model.addAttribute("userId", userId);
model.addAttribute("baseKey", baseKey);
model.addAttribute("directors", adds);
model.addAttribute("page", pageinfo);
model.addAttribute("url", "outaddresspaging");
return "address/outaddrss";
}
/**
* 内部通讯录表格,并处理分页
* @return
*/
@RequestMapping("inaddresspaging")
public String inAddress(@RequestParam(value="page",defaultValue="0") int page,Model model,
@RequestParam(value="size",defaultValue="10") int size,
@RequestParam(value="baseKey",required=false) String baseKey,
@RequestParam(value="alph",defaultValue="ALL") String alph
){
Page<User> userspage=null;
Pageable pa=new PageRequest(page, size);
if(StringUtils.isEmpty(baseKey)){
if("ALL".equals(alph)){
userspage=uDao.findAll(pa);
}else{
userspage=uDao.findByPinyinLike(alph+"%",pa);
}
}else{
if("ALL".equals(alph)){
userspage=uDao.findUsers("%"+baseKey+"%",baseKey+"%", pa);
}else{
Date end = service.convert(plan2.getEndTime(), Date.class);
Attachment att = null;
Long attid = null;
Plan plan = null;
HttpSession session = req.getSession();
long userid = Long.valueOf(session.getAttribute("userId") + "");
User user = userDao.findOne(userid);
// 获取到类型和状态id
String type = req.getParameter("type");
String status = req.getParameter("status");
long typeid = typeDao.findByTypeModelAndTypeName("aoa_plan_list", type).getTypeId();
long statusid = statusDao.findByStatusModelAndStatusName("aoa_plan_list", status).getStatusId();
long pid = Long.valueOf(req.getParameter("pid") + "");
// 这里返回ResultVO对象,如果校验通过,ResultEnum.SUCCESS.getCode()返回的值为200;否则就是没有通过;
ResultVO res = BindingResultVOUtil.hasErrors(br);
if (!ResultEnum.SUCCESS.getCode().equals(res.getCode())) {
List<Object> list = new MapToList<>().mapToList(res.getData());
req.setAttribute("errormess", list.get(0).toString());
}
// 校验通过,下面写自己的逻辑业务
else {
if (!StringUtils.isEmpty(session.getAttribute("getId"))) {
System.out.println("验证通过,进入狗太了");
}
// 新建
if (pid == -1) {
if (!file.isEmpty()) {
att = (Attachment) fServices.savefile(file, user, null, false);
attid = att.getAttachmentId();
} else if (file.isEmpty())
attid = null;
plan = new Plan(typeid, statusid, attid, start, end, new Date(), plan2.getTitle(), plan2.getLabel(),
plan2.getPlanContent(), plan2.getPlanSummary(), null, user);
planDao.save(plan);
}
if (pid > 0) {
plan = planDao.findOne(pid);
if (plan.getAttachId() == null) {
if (!file.isEmpty()) {
att = (Attachment) fServices.savefile(file, user, null, false);
attid = att.getAttachmentId();
plan.setAttachId(attid);
planDao.save(plan);
}
}
bu.setAllinvoices(allinvoice);
bu.setAllMoney(allmoney);
bu.setUsermoney(zhuti);
//set主表
ProcessList pro=bu.getProId();
proservice.index5(pro, val, lu, filePath,reuser.getUserName());
budao.save(bu);
//存审核表
proservice.index7(reuser, pro);
}else{
return "common/proce";
}
return "redirect:/xinxeng";
}
/**
* 查找出自己的申请
* @return
*/
@RequestMapping("flowmanage")
public String flowManage(@SessionAttribute("userId") Long userId,Model model,
@RequestParam(value = "page", defaultValue = "0") int page,
@RequestParam(value = "size", defaultValue = "10") int size){
Pageable pa=new PageRequest(page, size);
Page<ProcessList> pagelist=prodao.findByuserId(userId,pa);
List<ProcessList> prolist=pagelist.getContent();
Iterable<SystemStatusList> statusname=sdao.findByStatusModel("aoa_process_list");
Iterable<SystemTypeList> typename=tydao.findByTypeModel("aoa_process_list");
model.addAttribute("typename", typename);
model.addAttribute("page", pagelist);
model.addAttribute("prolist", prolist);
model.addAttribute("statusname", statusname);
model.addAttribute("url", "shenser");
return "process/flowmanage";
}
/**
* 申请人查看流程条件查询
*/
@RequestMapping("shenser")
public String ser(@SessionAttribute("userId") Long userId,Model model,HttpServletRequest req,
@RequestParam(value = "page", defaultValue = "0") int page,
@RequestParam(value = "size", defaultValue = "10") int size){
Pageable pa=new PageRequest(page, size);
String val=null;
if(!StringUtil.isEmpty(req.getParameter("val"))){
val=req.getParameter("val");
}
Page<ProcessList> pagelist=null;
List<ProcessList> prolist=null;
SystemStatusList status=sdao.findByStatusModelAndStatusName("aoa_process_list", val);
if(StringUtil.isEmpty(val)){
//空查询
pagelist=prodao.findByuserId(userId,pa);
@RequestParam(value = "size", defaultValue = "10") int size){
Long proid=Long.parseLong(req.getParameter("id"));//出差申请的id
ProcessList prolist=prodao.findbyuseridandtitle(userId, proid);//找这个用户的出差申请
proservice.index6(model, userId, page, size);
model.addAttribute("prolist", prolist);
return "process/evectionmoney";
}
/**
* 出差费用表单接收
* @param model
* @param session
* @param request
* @param page
* @param size
* @return
*/
@RequestMapping("moneyeve")
public String moneyeve(@RequestParam("filePath")MultipartFile filePath,HttpServletRequest req,@Valid EvectionMoney eve,BindingResult br,
@SessionAttribute("userId") Long userId,Model model) throws IllegalStateException, IOException{
User lu=udao.findOne(userId);//申请人
User shen=udao.findByUserName(eve.getShenname());//审核人
Long roleid=lu.getRole().getRoleId();//申请人角色id
Long fatherid=lu.getFatherId();//申请人父id
Long userid=shen.getUserId();//审核人userid
String val=req.getParameter("val");
Double allmoney=0.0;
if(roleid>=3L && Objects.equals(fatherid, userid)){
List<Traffic> ss=eve.getTraffic();
for (Traffic traffic : ss) {
allmoney+=traffic.getTrafficMoney();
User u=udao.findByUserName(traffic.getUsername());
traffic.setUser(u);
traffic.setEvection(eve);
}
List<Stay> mm=eve.getStay();
for (Stay stay : mm) {
allmoney+=stay.getStayMoney()*stay.getDay();
User u=udao.findByUserName(stay.getNameuser());
stay.setUser(u);
stay.setEvemoney(eve);
}
// Set<User> setUsers=discuss.getUsers();
// model.addAttribute("discuss", discuss);
// model.addAttribute("discussLikeNum", discussLikeNum);
// model.addAttribute("setUsers", setUsers);
return "chat/discusslike";
}else if("reply".equals(module)){
//处理回复表的点赞,刷新
String rightNum=req.getParameter("rightNum");
likeThisFun(req, userId);
Reply reply=replyDao.findOne(replyId);
int likeNum=reply.getUsers().size();
Set<User> users=reply.getUsers();
model.addAttribute("rightNum", rightNum);
model.addAttribute("comments", commentDao.findByReply(reply).size()); //评论的人数
model.addAttribute("reply", reply); //设置返回到前台的回复对象
model.addAttribute("contain", users.contains(user)); //是否包含
model.addAttribute("likeNum", likeNum); //点赞的人数
model.addAttribute("users", users); //点赞的所有用户
return "chat/replylike";
}else{
//什么鬼? 传参数错误,有问题
return "参数异常";
}
}
}
return "redirect:/taskmanage";
}
/**
* 修改任务
*/
@RequestMapping("edittasks")
public ModelAndView index3(HttpServletRequest req, @SessionAttribute("userId") Long userId,
@RequestParam(value = "page", defaultValue = "0") int page,
@RequestParam(value = "size", defaultValue = "10") int size) {
Pageable pa=new PageRequest(page, size);
ModelAndView mav = new ModelAndView("task/edittask");
// 得到链接中的任务id
String taskid = req.getParameter("id");
Long ltaskid = Long.parseLong(taskid);
// 通过任务id得到相应的任务
Tasklist task = tdao.findOne(ltaskid);
// 得到状态id
Long statusid = task.getStatusId().longValue();
// 得到类型id
Long typeid = task.getTypeId();
// 查看状态表
SystemStatusList status = sdao.findOne(statusid);
// 查询类型表
SystemTypeList type = tydao.findOne(typeid);
// 查询部门下面的员工
Page<User> pagelist = udao.findByFatherId(userId,pa);
List<User> emplist=pagelist.getContent();
// 查询部门表
Iterable<Dept> deptlist = ddao.findAll();
// 查职位表
Iterable<Position> poslist = pdao.findAll();
mav.addObject("type", type);
mav.addObject("status", status);
mav.addObject("emplist", emplist);
mav.addObject("deptlist", deptlist);
mav.addObject("poslist", poslist);
voteService.voteServiceHandle(model, user, discuss);
model.addAttribute("discuss", discuss);
return "chat/votetable";
}
//异步刷新点赞的人数,详细显示点赞的人出来;
//接收两个值,一个模块名,另一个主键id;
@RequestMapping("likeuserload")
public String likeUserLoad(HttpServletRequest req,Model model,@SessionAttribute("userId") Long userId){
Long replyId=Long.parseLong(req.getParameter("replyId"));
String module=req.getParameter("module");
Integer size=Integer.parseInt(req.getParameter("size"));
User user=uDao.findOne(userId);
if("discuss".equals(module)){
//处理讨论表的点赞,刷新
likeThisFun(req, userId);
disService.setDiscussMess(model, replyId, userId, 0, size);
// Discuss discuss=discussDao.findOne(replyId);
// int discussLikeNum=discuss.getUsers().size();
// Set<User> setUsers=discuss.getUsers();
// model.addAttribute("discuss", discuss);
// model.addAttribute("discussLikeNum", discussLikeNum);
// model.addAttribute("setUsers", setUsers);
return "chat/discusslike";
}else if("reply".equals(module)){
//处理回复表的点赞,刷新
String rightNum=req.getParameter("rightNum");
likeThisFun(req, userId);
Reply reply=replyDao.findOne(replyId);
int likeNum=reply.getUsers().size();
Set<User> users=reply.getUsers();
model.addAttribute("rightNum", rightNum);
model.addAttribute("comments", commentDao.findByReply(reply).size()); //评论的人数
model.addAttribute("reply", reply); //设置返回到前台的回复对象
model.addAttribute("contain", users.contains(user)); //是否包含
model.addAttribute("likeNum", likeNum); //点赞的人数
model.addAttribute("users", users); //点赞的所有用户
return "chat/replylike";
}else{
//什么鬼? 传参数错误,有问题
return "参数异常";
}
}
}
}
}
// nid大于0就是修改某个对象
if (nid > 0) {
note = noteDao.findOne(nid);
if (note.getAttachId() == null) {
if (!file.isEmpty()) {
att = (Attachment) fs.savefile(file, user, null, false);
attid = att.getAttachmentId();
note.setAttachId(attid);
noteDao.save(note);
}
}
if (note.getAttachId() != null)
fs.updateatt(file, user, null, note.getAttachId());
// 判断是否共享
if (request.getParameter("receiver") != null && (request.getParameter("receiver").trim().length() > 0)) {
userss = new HashSet<>();
String receivers = request.getParameter("receiver");
note.setReceiver(receivers);
String[] receiver = receivers.split(";");
// 先绑定自己再
userss.add(user);
// 再绑定其他人
for (String re : receiver) {
System.out.println(re);
User user2 = userDao.findid(re);
if (user2 == null) {
} else
userss.add(user2);
}
} else {
// 保存为该用户的笔记 绑定用户id
userss = new HashSet<>();
userss.add(user);
}
NoteService.updatenote(catalogId, typeId, statusId, note2.getTitle(), note2.getContent(), nid);
}
request.setAttribute("success", "后台验证成功");
}
// 设置创建人
note.setCreatemanId(userid);
note.setUserss(userss);
noteDao.save(note);
request.setAttribute("note2", note2);
return "forward:/noteedit";
}
// 笔记批量删除
String startpath = new String(URLDecoder.decode(request.getRequestURI(), "utf-8"));
String path = startpath.replace("/show", "");
File f = new File(rootpath, path);
System.out.println(f.getAbsolutePath());
ServletOutputStream sos = response.getOutputStream();
FileInputStream input = new FileInputStream(f.getPath());
byte[] data = new byte[(int) f.length()];
IOUtils.readFully(input, data);
// 将文件流输出到浏览器
IOUtils.write(data, sos);
input.close();
sos.close();
}
}
/**
* 保存外部联系人
* @throws IOException
* @throws IllegalStateException
*/
@RequestMapping("savaaddress")
public String savaAddress(@Valid Director director,DirectorUser directorUser,BindingResult br,@RequestParam("file")MultipartFile file,HttpSession session,
Model model,@SessionAttribute("userId") Long userId,HttpServletRequest req) throws PinyinException, IllegalStateException, IOException{
User user=uDao.findOne(userId);
ResultVO res = BindingResultVOUtil.hasErrors(br);
if (!ResultEnum.SUCCESS.getCode().equals(res.getCode())) {
System.out.println("输入信息有误!");
}else{
String pinyin=PinyinHelper.convertToPinyinString(director.getUserName(), "", PinyinFormat.WITHOUT_TONE);
director.setPinyin(pinyin);
director.setMyuser(user);
if(!StringUtils.isEmpty(session.getAttribute("did"))){
/*修改*/
Long did=Long.parseLong(session.getAttribute("did")+"");
Director di=addressDao.findOne(did);
director.setDirectorId(di.getDirectorId());
director.setAttachment(di.getAttachment());
DirectorUser dc=auDao.findByDirectorAndUser(director, user);
directorUser.setDirectorUserId(dc.getDirectorUserId());
session.removeAttribute("did");
}
//试一下
if(file.getSize()>0){
Attachment attaid=mservice.upload(file, user);
attaid.setModel("aoa_bursement");
Attachment att=AttDao.save(attaid);
/*Attachment att= (Attachment) fileServices.savefile(file, user, null, false);*/
director.setAttachment(att.getAttachmentId());
}
directorUser.setHandle(true);
directorUser.setDirector(director);
directorUser.setUser(user);
addressService.sava(director);
addressUserService.save(directorUser);
}
return "redirect:/addrmanage";
}
/**
* 通知列表删除
*/
@RequestMapping("informlistdelete")
public String informListDelete(HttpServletRequest req, HttpSession session) {
Long userId = Long.parseLong(session.getAttribute("userId") + "");
Long noticeId = Long.parseLong(req.getParameter("id"));
NoticeUserRelation relation = informrelationDao.findByUserIdAndNoticeId(uDao.findOne(userId),
informDao.findOne(noticeId));
if (Objects.isNull(relation)) {
System.out.println("权限不匹配,不能删除");
return "redirect:/notlimit";
}
informrelationservice.deleteOne(relation);
return "forward:/infromlist";
}
/**
* 通知列表
*
* @return
*/
@RequestMapping("infromlist")
public String infromList(HttpSession session, HttpServletRequest req, Model model,
@RequestParam(value="pageNum",defaultValue="1") int page) {
Long userId = Long.parseLong(session.getAttribute("userId") + "");
PageHelper.startPage(page, 10);
List<Map<String, Object>> list = nm.findMyNotice(userId);
PageInfo<Map<String, Object>> pageinfo=new PageInfo<Map<String, Object>>(list);
List<Map<String, Object>> list2=informrelationservice.setList(list);
for (Map<String, Object> map : list2) {
System.out.println(map);
}
model.addAttribute("url", "informlistpaging");
model.addAttribute("list", list2);
model.addAttribute("page", pageinfo);
System.out.println(pageinfo);
return "inform/informlist";
}
/**
* 编辑通知界面
*/
@RequestMapping("informedit")
public String infromEdit(HttpServletRequest req, HttpSession session, Model model) {
session.removeAttribute("noticeId");
List<SystemTypeList> typeList = typeDao.findByTypeModel("inform");
}
int up = tservice.updateStatusid(logger.getTaskId().getTaskId(), min);
/*System.out.println(logger.getTaskId().getTaskId() + "aaaa");
System.out.println(min + "wwww");
System.out.println(up + "pppppp");*/
if (up > 0) {
System.out.println("任务状态修改成功!");
}
return "redirect:/mytask";
}
/**
* 根据发布人这边删除任务和相关联系
* @param req
* @param session
* @return
*/
@RequestMapping("shanchu")
public String delete(HttpServletRequest req, @SessionAttribute("userId") Long userId) {
// 得到任务的 id
String taskid = req.getParameter("id");
Long ltaskid = Long.parseLong(taskid);
// 根据任务id找出这条任务
Tasklist task = tdao.findOne(ltaskid);
if(task.getUsersId().getUserId().equals(userId)){
// 删除日志表
int i=tservice.detelelogger(ltaskid);
System.out.println(i+"mmmmmmmmmmmm");
// 分割任务接收人 还要查找联系人的主键并删除接收人中间表
StringTokenizer st = new StringTokenizer(task.getReciverlist(), ";");
while (st.hasMoreElements()) {
User reciver = udao.findid(st.nextToken());
Long pkid = udao.findpkId(task.getTaskId(), reciver.getUserId());
int m=tservice.delete(pkid);
System.out.println(m+"sssssssssss");
}
// 删除这条任务
tservice.deteletask(task);
}else{
System.out.println("权限不匹配,不能删除");
return "redirect:/notlimit";
}
return "redirect:/taskmanage";