OA办公系统源码及需求文档https://download.csdn.net/download/Zyw907155124/64741549
1、产品介绍
OA系统是将现代办公和计算机网络的功能相结合的一中新型办公方式,是针对日常工作,改变传统手工办公效率低下现状的一种变革。omation的简称。
OFFIC :
AUTOMATION的缩写,本意为利用技术的手段提高办公的效率,进而实现办公的自动化处理。采用Internet/Intranet技术,基于工作流的概念,使企业内部人员方便快捷地共享信息,高效地协同工作;改变过去复杂、低效的手工办公方式,实现迅速、全方位的信息采集、信息处理,为企业的管理和决策提供科学的依据。
强调三点:
利用先进的科学技术和现代办公设备;
办公人员和办公设备构成的人机信息处理系统;
提高效率和改进质量是OA的目的。
2、系统概述
系统逻辑架构图 :
系统技术架构图:
相关技术
oss:本项目中所有涉及上传文件的模块,均使用了oss存储技术。申请和邮件的附件、云端文件的管理,都不需要再在项目的相对路径下操作,大大降低了项目在本地的内存占用。
3、项目演示及功能介绍
(1)登录页面
本系统整体根据登录用户的职位权限进行相应的业务功能分配。
系统默认的权限等级从上至下依次为超级管理员、CEO、总经理、部门经理、普通员工...
可在用户管理中对职位名称以及权限等级进行自定义设置。
(2)主页:
主页的控制面板通过可视化工具,依次展示了本周登录用户的登录统计记录、员工任务完成排行榜、个人的公告通知、个人行事历、个人流程管理、个人工作计划以及我的便签。
本系统的功能模块非常繁多,涵盖了当下职场上所需要的大部分需求。
(3)用户管理:
部门管理:
在线用户:
职位管理:
用户管理:
(4)角色列表
角色管理:查询所有职位对应的角色,新增角色,修改角色名称,删除角色,设定角色的访问菜单权限
设定:设定角色的访问菜单权限
(5)考勤管理
签到打卡:登录后可在控制面板进行快捷签到打卡
考前列表:签到打卡记录可在此处查看
考勤周报表/月报表
直系下属的考勤状态记录可以在这里查看到。
考勤管理:
(7)流程管理:
新建流程
我的申请:申请人提交自己的申请之后可以再我的申请中,查询提交的申请详情,同时可以时刻关注自己的审核进度
流程审核:公司领导收到下级员工提交的流程申请后,可以在流程审核中浏览、查询审批过和未被处理过的流程,并可以选择指定流程进行审核和查看详情的操作。
对指定流程进行审核,可以观看到所有审核过该流程的审核记录,并可选择自己对其的审核结果,中层领导可选择审核并拒绝批准或审核并流转,总经理和CEO则可以在选择审核的状态后最终结案。
注意:1、整个审核过程中,只要有一位审核者选择了拒绝审核,则整个审核以未批准结束,已经流转出去的审核,也将自动判定为为通过。 2、高层领导在收到流转后的审核时,若中层领导未审核完,则只可观看,不能进行审核操作。
(8)公告管理
通知管理:
通知列表:
(9)邮件管理
写信:
查看邮件:
(10)任务管理:
任务管理:
我的任务:
(11)日程管理
日程管理:
我的日历:
(12) 工作计划
计划管理:
计划报表:
(13)文件管理
可以对文件夹、文件进行复制、转移、删除、分享...
(14)笔记管理
(15)通讯录
(16)讨论区
4、业务难点
本系统最复杂的业务模块是流程审核
流程审核后端代码:
package com.hopu.oa.controller.process;
import com.hopu.oa.dao.process.BursementDao;
import com.hopu.oa.entity.management.AoaTypeList;
import com.hopu.oa.entity.process.*;
import com.hopu.oa.entity.user.AoaUser;
import com.hopu.oa.service.impl.process.BursementServiceImpl;
import com.hopu.oa.service.impl.process.auditServiceImpl;
import com.hopu.oa.until.MoneyUtil;
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.RequestParam;
import javax.servlet.http.HttpSession;
import java.text.SimpleDateFormat;
import java.util.*;
@Controller
public class auditController {
@Autowired
private auditServiceImpl auditService;
@Autowired
private BursementDao bursementDao;
@Autowired
private BursementServiceImpl bursementService;
@RequestMapping("/xinxeng")
public String xinXeng(Model model){
return "process/procedure";
}
@RequestMapping("/audit")
public String audit(String find,Model model, HttpSession session, @RequestParam(value = "page", defaultValue = "1") int page, @RequestParam(value = "size", defaultValue = "10") int size){
AoaUser aoaUser = (AoaUser) session.getAttribute("user");
int totalElements = auditService.findAll(aoaUser.getUserId(),find,0,0).size();
//有几页
int totalPages = totalElements % size ==0 ? totalElements / size : totalElements / size + 1;
List<ProcessAll> all = auditService.findAll(aoaUser.getUserId(), find, (page - 1) * size, size);
HashMap<String, Integer> map1 = new HashMap<>();
map1.put("totalElements", totalElements);
map1.put("totalPages", totalPages);
map1.put("number", page);
map1.put("size", size);
model.addAttribute("page", map1);
model.addAttribute("prolist",all);
model.addAttribute("find",find);
model.addAttribute("url", "audtable");
return "process/auditing";
}
@RequestMapping("/audtable")
public String audtable(String find,Model model, HttpSession session, @RequestParam(value = "page", defaultValue = "1") int page, @RequestParam(value = "size", defaultValue = "10") int size){
AoaUser aoaUser = (AoaUser) session.getAttribute("user");
int totalElements = auditService.findAll(aoaUser.getUserId(),find,0,0).size();
//有几页
int totalPages = totalElements % size ==0 ? totalElements / size : totalElements / size + 1;
List<ProcessAll> all = auditService.findAll(aoaUser.getUserId(), find, (page - 1) * size, size);
HashMap<String, Integer> map1 = new HashMap<>();
map1.put("totalElements", totalElements);
map1.put("totalPages", totalPages);
map1.put("number", page);
map1.put("size", size);
model.addAttribute("page", map1);
model.addAttribute("prolist",all);
model.addAttribute("find",find);
model.addAttribute("url", "audtable");
return "process/audtable";
}
@RequestMapping("particular")
public String particular(Model model,Integer processId,Integer page,String typeName,String remove){
System.out.println("processId = " + processId);
System.out.println("typeName = " + typeName);
System.out.println("remove = " + remove);
model.addAttribute("remove",remove);
model.addAttribute("page",page);
model.addAttribute("processId",processId);
//查询全部
AoaProcessList aoaProcessList = bursementService.selectById(processId);
HashMap<String, Object> maps = new HashMap<>();
// 预览图片,获取路径
Integer proFileId = aoaProcessList.getProFileId();
if (!Objects.isNull(proFileId)){
AoaAttachmentList aoaAttachmentList = bursementDao.selectAoaAttachmentList(proFileId);
maps.put("file",aoaAttachmentList);
maps.put("filePath",aoaAttachmentList.getAttachmentPath());
System.out.println(aoaAttachmentList.getAttachmentPath());
maps.put("fileType","img");
}else{
maps.put("file","file");
maps.put("fileType","bigImg");
}
HashMap<String, String> map = new HashMap<>();
if (typeName.equals("费用报销")==true){
AoaBursement aoaBursement = bursementService.selectAllBursement(processId);
AoaUser aoaUser = bursementService.selectByProcessUserIdAfter(aoaBursement.getUserName());//证明人
AoaTypeList aoaTypeList = bursementService.selectByTypeId(aoaBursement.getAoaProcessList().getDeeplyId());
AoaUser aoaUser1 = bursementService.selectByProcessUserIdAfter(aoaBursement.getOperationName());
List<AoaDetailsburse> aoaDetailsburses = bursementService.selectByBursementIdAfter(aoaBursement.getBursementId());
map.put("typename",typeName);
map.put("processName",aoaBursement.getAoaProcessList().getProcessName());
map.put("harryname",aoaTypeList.getTypeName());//紧急程度
map.put("username",aoaBursement.getAoaUser().getUserName());//申请人、报销人员
map.put("deptname",aoaBursement.getAoaDept().getDeptName());
map.put("applytime",aoaBursement.getAoaProcessList().getApplyTime());
map.put("zhengmingren",aoaUser.getUserName());//证明人
map.put("name",aoaBursement.getName());
map.put("type",aoaBursement.getAoaTypeList().getTypeName());
map.put("audit",aoaUser1.getUserName());
map.put("burseTime",aoaBursement.getBurseTime());//报销日期
map.put("allinvoices",aoaBursement.getAllinvoices().toString());//票据总数
map.put("managerAdvice",aoaBursement.getManagerAdvice());
map.put("financialAdvice",aoaBursement.getFinancialAdvice());
map.put("allMoney",aoaBursement.getAllMoney().toString());
map.put("money", MoneyUtil.toChinese(aoaBursement.getAllMoney().toString()));
map.put("processDescribe",aoaBursement.getAoaProcessList().getProcessDes());
model.addAttribute("maps",maps);
model.addAttribute("map",map);
model.addAttribute("detaillist",aoaDetailsburses);
return "process/serch";//费用报销单
}else if (typeName.equals("出差申请")==true){
AoaEvection aoaEvection = bursementService.selectEvectionByProcessId(processId);
AoaTypeList aoaTypeList = bursementService.selectByTypeId(aoaEvection.getAoaProcessList().getDeeplyId());
map.put("typename",typeName);
map.put("processName",aoaEvection.getAoaProcessList().getProcessName());
map.put("harryname",aoaTypeList.getTypeName());//紧急程度
map.put("username",aoaEvection.getAoaUser().getUserName());
map.put("deptname",aoaEvection.getAoaDept().getDeptName());
map.put("applytime",aoaEvection.getAoaProcessList().getApplyTime());
map.put("startime",aoaEvection.getAoaProcessList().getStartTime());
map.put("endtime",aoaEvection.getAoaProcessList().getEndTime());
if (aoaEvection.getAoaProcessList().getProcseeDays()!=null){
map.put("tianshu",aoaEvection.getAoaProcessList().getProcseeDays().toString());
}
map.put("processDescribe",aoaEvection.getAoaProcessList().getProcessDes());
map.put("managerAdvice",aoaEvection.getManagerAdvice());
map.put("personnelAdvice",aoaEvection.getPersonnelAdvice());
map.put("name",aoaEvection.getAoaProcessList().getTypeName());
model.addAttribute("maps",maps);
model.addAttribute("map",map);
model.addAttribute("statusid",aoaEvection.getAoaProcessList().getStatusId());
return "process/eveserach";//出差申请单
}else if (typeName.equals("出差费用")==true){
AoaEvectionmoney aoaEvectionmoney = bursementService.selectEvectionmoneyByProcessId(processId);
AoaTypeList aoaTypeList = bursementService.selectByTypeId(aoaEvectionmoney.getAoaProcessList().getDeeplyId());
List<AoaStay> aoaStay = bursementService.selectStayByEvectionmoneyId(aoaEvectionmoney.getEvectionmoneyId());
List<AoaTraffic> aoaTraffic = bursementService.selectTrafficBy(aoaEvectionmoney.getEvectionmoneyId());
Integer staymoney = 0;
Integer tramoney = 0;
for (int i = 0; i < aoaStay.size(); i++) {
staymoney+=aoaStay.get(i).getStayMoney();
}
System.out.println("staymoney = " + staymoney);
for (int i = 0; i < aoaTraffic.size(); i++) {
tramoney+=aoaTraffic.get(i).getTrafficMoney();
}
System.out.println("tramoney = " + tramoney);
map.put("typename",typeName);
map.put("processName",aoaEvectionmoney.getAoaProcessList().getProcessName());
map.put("harryname",aoaTypeList.getTypeName());//紧急程度
map.put("username",aoaEvectionmoney.getAoaUser().getUserName());
map.put("deptname",aoaEvectionmoney.getAoaDept().getDeptName());
map.put("applytime",aoaEvectionmoney.getAoaProcessList().getApplyTime());
map.put("startime",aoaEvectionmoney.getAoaProcessList().getStartTime());
map.put("endtime",aoaEvectionmoney.getAoaProcessList().getEndTime());
map.put("tianshu",aoaEvectionmoney.getAoaProcessList().getProcseeDays().toString());
map.put("processDescribe",aoaEvectionmoney.getAoaProcessList().getProcessDes());
map.put("name",aoaEvectionmoney.getAoaProcessList().getTypeName());
map.put("managerAdvice",aoaEvectionmoney.getManagerAdvice());
map.put("financialAdvice",aoaEvectionmoney.getFinancialAdvice());
if (aoaEvectionmoney.getPro()!=null){
map.put("pro",aoaEvectionmoney.getPro().toString());
}
Integer allmoney = staymoney+tramoney;
model.addAttribute("staymoney",staymoney);
model.addAttribute("tramoney",tramoney);
model.addAttribute("allmoney",MoneyUtil.toChinese(allmoney.toString()));
model.addAttribute("staylist",aoaStay);
model.addAttribute("tralist",aoaTraffic);
model.addAttribute("map",map);
model.addAttribute("maps",maps);
return "process/evemonserch";//出差费用表
}else if (typeName.equals("离职申请")==true){
AoaResign aoaResign = bursementService.selectResignByByProcessId(processId);
AoaTypeList aoaTypeList = bursementService.selectByTypeId(aoaResign.getAoaProcessList().getDeeplyId());
AoaUser aoaUser = bursementService.selectByProcessUserIdAfter(aoaResign.getHandUser());//证明人
map.put("typename",typeName);
map.put("processName",aoaResign.getAoaProcessList().getProcessName());
map.put("harryname",aoaTypeList.getTypeName());//紧急程度
map.put("username",aoaResign.getAoaUser().getUserName());
map.put("deptname",aoaResign.getAoaDept().getDeptName());
map.put("applytime",aoaResign.getAoaProcessList().getApplyTime());
map.put("handUser",aoaUser.getUserName());
map.put("nofinish",aoaResign.getNofinish());
map.put("processDescribe",aoaResign.getAoaProcessList().getProcessDes());
map.put("managerAdvice",aoaResign.getManagerAdvice());
map.put("financialAdvice",aoaResign.getFinancialAdvice());
map.put("personnelAdvice",aoaResign.getPersonnelAdvice());
System.out.println(aoaResign.getPersonnelAdvice());
model.addAttribute("finish",aoaResign.getIsFinish());
model.addAttribute("statusId",aoaResign.getAoaProcessList().getStatusId());
model.addAttribute("map",map);
return "process/resserch";
} else if (typeName.equals("请假申请")==true) {
AoaHoliday holiday= bursementService.selectByID(processId);
AoaHoliday aoaHoliday = bursementService.selectByProID(processId);
model.addAttribute("maps",maps);
model.addAttribute("map", aoaProcessList);
model.addAttribute("type", aoaHoliday);
model.addAttribute("eve",holiday);
model.addAttribute("statusId",aoaProcessList.getStatusId());
return "process/holiserch";
}else if (typeName.equals("转正申请")==true){
AoaRegular aoaRegular = bursementService.selectRegularByProcessId(processId);
AoaTypeList aoaTypeList = bursementService.selectByTypeId(aoaRegular.getAoaProcessList().getDeeplyId());
map.put("typename",typeName);
map.put("processName",aoaRegular.getAoaProcessList().getProcessName());
map.put("harryname",aoaTypeList.getTypeName());//紧急程度
map.put("username",aoaRegular.getAoaUser().getUserName());
map.put("deptname",aoaRegular.getAoaDept().getDeptName());
map.put("applytime",aoaRegular.getAoaProcessList().getApplyTime());
map.put("startime",aoaRegular.getAoaProcessList().getStartTime());
map.put("endtime",aoaRegular.getAoaProcessList().getEndTime());
map.put("tianshu",aoaRegular.getAoaProcessList().getProcseeDays().toString());
map.put("experience",aoaRegular.getExperience());
map.put("understand",aoaRegular.getUnderstand());
map.put("pullulate",aoaRegular.getPullulate());
map.put("deficiency",aoaRegular.getDeficiency());
map.put("dobetter",aoaRegular.getDobetter());
map.put("advice",aoaRegular.getAdvice());
map.put("managerAdvice",aoaRegular.getManagerAdvice());
map.put("personnelAdvice",aoaRegular.getPersonnelAdvice());
map.put("processDescribe",aoaRegular.getAoaProcessList().getProcessDes());
model.addAttribute("statusId",aoaRegular.getAoaProcessList().getStatusId());
model.addAttribute("map",map);
return "process/reguserch";
}else if (typeName.equals("加班申请")==true){
AoaOvertime overtime = bursementService.selectByProId(processId);
AoaOvertime aoaOvertime = bursementService.selectOverAndTypeById(processId);
String type = aoaOvertime.getAoaTypeList().getTypeName();//加班类型
model.addAttribute("type", type);
model.addAttribute("eve", overtime);
model.addAttribute("map", aoaProcessList);
model.addAttribute("statusId",aoaProcessList.getStatusId());
return "process/overserch";
}
return "process/evemonserch";
}
@RequestMapping("sdelete")
public String sdelete(Model model,String processId,Integer page){
System.out.println("processId = " + processId);
System.out.println("page = " + page);
int i = auditService.deleteProcess(Integer.parseInt(processId));
System.out.println("i = " + i);
return "redirect:audit?page="+page;
}
/**
* 审核
* @param processId
* @param model
* @param session
* @param userName
* @param page
* @param size
* @return
*/
@RequestMapping("auditing")
public String auditing(Integer processId,Model model,HttpSession session,
String userName,Integer nowpage,
@RequestParam(value = "page", defaultValue = "1") int page,
@RequestParam(value = "size", defaultValue = "5") int size){
AoaUser aoaUser = (AoaUser) session.getAttribute("user");
int id = processId;
AoaUser user = (AoaUser) session.getAttribute("user");
int totalElements = auditService.findUserInfoByName(aoaUser.getUserId(),userName, page, 0,user.getRoleId()).size();
int totalPages = totalElements % size == 0 ? totalElements / size : totalElements / size + 1;
List<AoaUser> userInfoo = auditService.findUserInfoByName( aoaUser.getUserId(),userName, (page-1)*size,size,user.getRoleId() );
System.out.println(userName);
System.out.println("processId = " + processId);
HashMap<String, Integer> map = new HashMap<>();
map.put("totalElements", totalElements);
map.put("totalPages", totalPages);
map.put("number", page);
map.put("size", size);
model.addAttribute("id",id);
model.addAttribute("page", map);
model.addAttribute("userName",userName);
model.addAttribute("userInfo",userInfoo);
model.addAttribute("nowpage",nowpage);
model.addAttribute("url", "auditingg");
model.addAttribute("positionId",user.getPositionId());
AoaProcessList processList = auditService.selectOneById(id);
List<AoaReviewed> revieweds = auditService.selectReviewedByid(id);
AoaReviewed aoaReviewed = auditService.selectByid(processId, user.getUserId());
//总经理登录时,判断之前的人是否审核完
List<AoaReviewed> list = auditService.selectReviewedStatusId(processId);
List<Integer> aoaReviewedStatusId = new ArrayList<>();
System.out.println(list);
if (aoaUser.getPositionId()==3){
for (int i = 0; i < list.size(); i++) {
if (list.get(i).getUserId()==3){
list.remove(list.get(i));
}
}
for (int i = 0; i < list.size(); i++) {
aoaReviewedStatusId.add(list.get(i).getStatusId());
}
if (aoaReviewedStatusId.contains(23)==true){
//之前有人未处理
model.addAttribute("Deal",0);
System.out.println("前人未处理完");
}else {
//前人已处理完
model.addAttribute("Deal",1);
System.out.println("前人已处理完");
}
}
System.out.println(processList);
System.out.println("processList.getStatusId()="+processList.getStatusId());
model.addAttribute("statusid",processList.getStatusId());
String typename=processList.getTypeName().trim();
if(("费用报销").equals(typename)){
AoaBursement bursement = auditService.selectBursementById(processList.getProcessId());
model.addAttribute("bu", bursement);
}else if(("出差费用").equals(typename)){
AoaEvectionmoney evectionMoney = auditService.selectEvectionMoneyById(processList.getProcessId());
System.out.println(evectionMoney);
model.addAttribute("bu", evectionMoney);
}
model.addAttribute("revie",revieweds);
model.addAttribute("typename",typename);
model.addAttribute("process",processList);
model.addAttribute("statusid",aoaReviewed.getStatusId());
model.addAttribute("positionid",user.getPositionId());
return "process/audetail";
}
@RequestMapping("auditingg")
public String auditingg(int processId,Model model,HttpSession session,
String userName,
@RequestParam(value = "page", defaultValue = "1") int page,
@RequestParam(value = "size", defaultValue = "5") int size){
AoaUser aoaUser = (AoaUser) session.getAttribute("user");
int id = processId;
AoaUser user = (AoaUser) session.getAttribute("user");
int totalElements = auditService.findUserInfoByName( aoaUser.getUserId(),userName, page, 0,user.getRoleId()).size();
int totalPages = totalElements % size == 0 ? totalElements / size : totalElements / size + 1;
List<AoaUser> userInfoo = auditService.findUserInfoByName( aoaUser.getUserId(),userName, (page-1)*size,size,aoaUser.getRoleId() );
System.out.println(userName);
HashMap<String, Integer> map = new HashMap<>();
map.put("totalElements", totalElements);
map.put("totalPages", totalPages);
map.put("number", page);
map.put("size", size);
model.addAttribute("id",id);
model.addAttribute("page", map);
model.addAttribute("userName",userName);
model.addAttribute("userInfo",userInfoo);
model.addAttribute("url", "auditingg");
model.addAttribute("positionId",user.getPositionId());
System.out.println("processId = " + processId);
AoaProcessList processList = auditService.selectOneById(id);
List<AoaReviewed> revieweds = auditService.selectReviewedByid(id);
AoaReviewed aoaReviewed = auditService.selectByid(processId, user.getUserId());
//总经理登录时,判断之前的人是否审核完
List<Integer> aoaReviewedStatusId = new ArrayList<>();
if (aoaUser.getPositionId()==3){
for (int i = 0; i < revieweds.size(); i++) {
aoaReviewedStatusId.add(revieweds.get(i).getStatusId());
}
if (aoaReviewedStatusId.contains(23)==true){
//之前有人未处理
model.addAttribute("Deal",0);
System.out.println("之前有人未处理");
}else {
//前人已处理完
model.addAttribute("Deal",1);
System.out.println("前人已处理完");
}
}
System.out.println(processList);
String typename=processList.getTypeName().trim();
System.out.println("processList.getStatusId()="+processList.getStatusId());
if(("费用报销").equals(typename)){
AoaBursement bursement = auditService.selectBursementById(processList.getProcessId());
model.addAttribute("bu", bursement);
}else if(("出差费用").equals(typename)){
AoaEvectionmoney evectionMoney = auditService.selectEvectionMoneyById(processList.getProcessId());
System.out.println(evectionMoney);
model.addAttribute("bu", evectionMoney);
}
model.addAttribute("revie",revieweds);
model.addAttribute("typename",typename);
model.addAttribute("process",processList);
model.addAttribute("statusid",aoaReviewed.getStatusId());
model.addAttribute("positionid",user.getPositionId());
return "common/recivers";
}
@RequestMapping("susave")
public String susave(Integer nowpage,int statusId,String username,String advice,int proId,String type,HttpSession session){
AoaUser user = (AoaUser)session.getAttribute("user");
System.out.println("username = " + username);
System.out.println(statusId+"statusId"+username+"username"+advice+"advice"+"proId"+proId+"type"+type);
Integer positionId = user.getPositionId();//审核人的职位编号
String typeName = auditService.selectProcess(proId).getTypeName();
Date currentTime = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = formatter.format(currentTime);
if (positionId==3){//总经理
if (typeName.equals("费用报销")==true){
bursementService.ManagerAdviceBursement(proId,advice);
}else if (typeName.equals("出差申请")==true){
bursementService.ManagerAdviceEvection(proId,advice);
}else if (typeName.equals("转正申请")==true){
bursementService.ManagerAdviceRegular(proId,advice);
}else if (typeName.equals("加班申请")==true){
bursementService.ManagerAdviceOvertime(proId,advice);
}else if (typeName.equals("离职申请")==true){
bursementService.ManagerAdviceResign(proId,advice);
}else if (typeName.equals("请假申请")==true){
bursementService.ManagerAdviceHoliday(proId,advice);
}else if (typeName.equals("出差费用")==true){
bursementService.ManagerAdviceEvectionMoney(proId,advice);
}
}else if (positionId==5){//财务部经理
if (typeName.equals("费用报销")==true) {
bursementService.FinancialAdviceBursement(proId, advice);
}else if (typeName.equals("离职申请")==true){
bursementService.FinancialAdviceResign(proId,advice);
}else if (typeName.equals("出差费用")==true){
bursementService.FinancialAdviceEvectionMoney(proId,advice);
}
}else if (positionId==7){//人事部经理
if (typeName.equals("加班申请")==true){
bursementService.personneAdviceOvertime(proId,advice);
}else if (typeName.equals("出差申请")==true){
bursementService.personneAdviceEvection(proId,advice);
}else if (typeName.equals("离职申请")==true){
bursementService.personneAdviceResign(proId,advice);
}else if (typeName.equals("转正申请")==true){
bursementService.personneAdviceRegular(proId,advice);
}else if (typeName.equals("请假申请")==true){
bursementService.personneAdviceHoliday(proId,advice);
}
}
if (username!=null && username!=""){
//审核流转
auditService.updateReviewed(advice,dateString,statusId,proId, user.getUserId());
if (statusId==26){//未通过
auditService.updateProcessByid(26,proId);
//若其他审批人已流转,则删除未处理的
auditService.deleteReviewedByNoDeal(proId);
}else {//通过
auditService.updateProcessByid(24,proId);
int id = auditService.selectIDByName(username);
System.out.println(id);
if (auditService.selectReviewedYN(proId,id)!=null){
//已流转过
System.out.println("已流转过");
//无操作
}else {
auditService.insertIntoReviewed(proId,id);
}
}
}else {
//审核结案
//判断其他人是否都处理完
auditService.updateReviewed(advice,dateString,statusId,proId, user.getUserId());
auditService.updateReviewedAllUser(statusId,proId);
auditService.updateProcessByid(statusId,proId);
}
return "redirect:audit?page="+nowpage;
}
}
新建流程后端代码
package com.hopu.oa.controller.process;
import com.hopu.oa.dao.process.NewProcessDao2;
import com.hopu.oa.entity.management.AoaTypeList;
import com.hopu.oa.entity.process.*;
import com.hopu.oa.entity.user.AoaUser;
import com.hopu.oa.service.process.NewProcessService2;
import com.hopu.oa.service.process.auditService;
import com.hopu.oa.until.OosUtil;
import com.hopu.oa.until.data.DateUtils;
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.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpSession;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @ClassName: NewProcessController
* @Description:
* @Date: 2021/11/22 19:18
*/
@Controller
public class NewProcessController
{
//工具类,文件上传
@Autowired
private OosUtil oosUtil;
//service
@Autowired
private NewProcessService2 newProcessService2;
//张佑威的(通讯录)
@Autowired
private auditService auditService;
@Autowired
private NewProcessDao2 newProcessDao2;
/*
######################## 1.费用报销 ####################################
*/
@RequestMapping("burse")
public String burse(HttpSession session,Model model)
{
// 紧急程度
List<AoaTypeList> status = newProcessService2.queryType("紧急程度");
model.addAttribute("harrylist",status);
//用户名
AoaUser aoaUser = (AoaUser) session.getAttribute("user");
model.addAttribute("username",aoaUser.getUserName());
//Type
List<AoaTypeList> status2 = newProcessService2.queryType("报销");
model.addAttribute("uplist",status2);
//通讯录
addressList(model,session);
//查询费用科目
List<AoaSubject> aoaSubjects = newProcessService2.querySubject();
model.addAttribute("second",aoaSubjects);
return "process/bursement";
}
/*
@Description : 报销
@Date : 2021/11/24
@Param : [session, proId_processName, proId_deeply, shenuser, proId_processDescribe, bursement, file, produceTime, subject, descript, invoices, detailmoney]
@return : java.lang.String
*/
@RequestMapping("apply")
public String apply
( HttpSession session,
String proId_processName,
String proId_deeply ,
String shenuser,
String proId_processDescribe,
AoaBursement bursement,
String name,
String namemoney,
@RequestParam("filePath") MultipartFile file //资料
)
{
AoaUser aoaUser = (AoaUser)session.getAttribute("user");
AoaProcessList process = new AoaProcessList();
if (file.getSize()!=0)
{
//url
String shuffix = oosUtil.getPicSuffix(file.getOriginalFilename());
long size = file.getSize();
String type = file.getContentType();
AoaAttachmentList attachment = new AoaAttachmentList();
attachment.setAttachmentName(file.getOriginalFilename());
attachment.setAttachmentPath( oosUtil.getImgUrl(oosUtil.uploadImg2Oss(file)));
attachment.setAttachmentSize(size+"");
attachment.setAttachmentType(type);
attachment.setAttachmentShuffix(shuffix);
attachment.setModel("note");
attachment.setUploadTime(DateUtils.getDateTimeString());
attachment.setUserId(aoaUser.getUserId()+"");
newProcessService2.inertAttachment(attachment);
System.out.println(attachment.getAttachmentId());
process.setProFileId(attachment.getAttachmentId());
System.out.println("ppID = "+process.getProFileId());
}
Integer money = 0;
Integer invoice = 0;
/*
获取总金额
*/
for (Details d: bursement.getDetails()
)
{
money += Integer.parseInt(d.getDetailmoney()) ;
invoice += Integer.parseInt(d.getInvoices());
}
System.out.println(proId_processName);
System.out.println(proId_deeply);
System.out.println(shenuser);
System.out.println(proId_processDescribe);
System.out.println(bursement);
String[] shenuserName=shenuser.split(";");
//总表
process.setApplyTime(DateUtils.getDateTimeString());
process.setDeeplyId(Integer.parseInt(proId_deeply));
process.setProcessName(proId_processName);
process.setProcessDes(proId_processDescribe);
process.setIsChecked(0);
process.setStatusId(23);
process.setTypeName("费用报销");
process.setProcessUserId(aoaUser.getUserId());
process.setShenuser(shenuser);
newProcessService2.insertProcess(process);
//报销表
bursement.setAllMoney(money);
bursement.setAllinvoices(invoice);
bursement.setBurseTime(DateUtils.getDateTimeString());
bursement.setManagerAdvice("");
bursement.setOperationName(aoaUser.getUserId());
bursement.setProId(process.getProcessId());
bursement.setUserName(newProcessDao2.queryUserIdByName(namemoney));
bursement.setName(name);
newProcessService2.inertBursement(bursement);
AoaReviewed reviewed = new AoaReviewed();
reviewed.setAdvice("");
reviewed.setReviewedTime(DateUtils.getDateTimeString());
reviewed.setStatusId(23 );
reviewed.setProId(process.getProcessId());
for (int j = 0; j < shenuserName.length; j++)
{
int shenuserId = newProcessService2.queryUserIdByName(shenuserName[j]);
reviewed.setUserId(shenuserId);
newProcessService2.insertReviewed(reviewed);
}
//细节表
for (int i = 0; i <bursement.getDetails().size() ; i++)
{
Details details = bursement.getDetails().get(i);
details.setBursmentId(bursement.getBursementId());
newProcessService2.insertDetails(details);
}
return "redirect:/xinxeng";
}
/*
######################### 2.出差 ###################################
*/
@RequestMapping("evection")
public String evection(HttpSession session, Model model)
{
// 紧急程度
List<AoaTypeList> status = newProcessService2.queryType("紧急程度");
model.addAttribute("harrylist",status);
//用户名
AoaUser aoaUser = (AoaUser) session.getAttribute("user");
model.addAttribute("username",aoaUser.getUserName());
//Type
List<AoaTypeList> status2 = newProcessService2.queryType("出差");
model.addAttribute("outtype",status2);
//通讯录
addressList(model,session);
return "process/evection";
}
/*
@Description :出差
@Date : 2021/11/24
@Param : [session, proId_processName, proId_deeply, typeId, proId_startTime, proId_endTime, proId_processDescribe, shenuser, file]
@return : java.lang.String
*/
@RequestMapping("evec")
public String evec(HttpSession session,
String proId_processName,
String proId_deeply,
String typeId,
String proId_startTime,
String proId_endTime,
String proId_processDescribe,
String shenuser,
@RequestParam("filePath") MultipartFile file //资料
)
{
System.out.println(proId_processName);
System.out.println(proId_deeply);
System.out.println(typeId);
System.out.println( proId_startTime);
System.out.println(proId_endTime);
System.out.println(proId_processDescribe);
System.out.println(shenuser);
//总表pojo
AoaProcessList process = new AoaProcessList();
//当前用户
AoaUser aoaUser = (AoaUser)session.getAttribute("user");
//出差pojo
AoaEvection evection = new AoaEvection();
//审核表
AoaReviewed reviewed = new AoaReviewed();
/*
附件上传
*/
if (file.getSize()!=0)
{
// 文件上传并获取 url
String url = oosUtil.getImgUrl(oosUtil.uploadImg2Oss(file));
// String url = oosUtil.getUrl(oosUtil.uploadImg2Oss(file));
String shuffix = oosUtil.getPicSuffix(file.getOriginalFilename());
long size = file.getSize();
String type = file.getContentType();
AoaAttachmentList attachment = new AoaAttachmentList();
attachment.setAttachmentName(file.getOriginalFilename());
attachment.setAttachmentPath(url);
attachment.setAttachmentSize(size+"");
attachment.setAttachmentType(type);
attachment.setAttachmentShuffix(shuffix);
attachment.setModel("note");
attachment.setUploadTime(DateUtils.getDateTimeString());
attachment.setUserId(aoaUser.getUserId()+"");
newProcessService2.inertAttachment(attachment);
System.out.println(attachment.getAttachmentId());
process.setProFileId(attachment.getAttachmentId());
System.out.println("ppID = "+process.getProFileId());
}
/*
表单插入
*/
//总表
process.setApplyTime(DateUtils.getDateTimeString());
process.setDeeplyId(Integer.parseInt(proId_deeply));
process.setEndTime(proId_endTime);
process.setProcessName(proId_processName);
process.setProcessDes(proId_processDescribe);
process.setIsChecked(0);
process.setStartTime(proId_startTime);
process.setStatusId(23);
process.setTypeName("出差申请");
process.setProcessUserId(aoaUser.getUserId());
process.setShenuser(shenuser);
newProcessService2.insertProcess(process);
//出差表
evection.setProId(process.getProcessId());
evection.setTypeId(Integer.parseInt(typeId));
newProcessService2.insertEvection(evection);
//审批表
reviewed.setAdvice("");
reviewed.setReviewedTime(DateUtils.getDateTimeString());
reviewed.setStatusId(23);
reviewed.setProId(process.getProcessId());
String[] shenuserName=shenuser.split(";");
for (int j = 0; j < shenuserName.length; j++)
{
int shenuserId = newProcessService2.queryUserIdByName(shenuserName[j]);
reviewed.setUserId(shenuserId);
newProcessService2.insertReviewed(reviewed);
}
return "redirect:/xinxeng";
}
/*
############################## 3.加班 ################################
*/
@RequestMapping("overtime")
public String overTime(Model model,HttpSession session)
{
// 紧急程度
List<AoaTypeList> status = newProcessService2.queryType("紧急程度");
model.addAttribute("harrylist",status);
//用户名
AoaUser aoaUser = (AoaUser) session.getAttribute("user");
model.addAttribute("username",aoaUser.getUserName());
//Type
List<AoaTypeList> status2 = newProcessService2.queryType("加班");
model.addAttribute("overtype",status2);
//通讯录
addressList(model,session);
return "process/overtime";
}
@RequestMapping("over")
public String over( HttpSession session,
String proId_processName,
String proId_deeply,
String typeId,
String proId_startTime,
String proId_endTime,
String proId_processDescribe,
String shenuser
)
{
System.out.println(proId_processName);
System.out.println(proId_deeply);
System.out.println(typeId);
System.out.println(proId_startTime);
System.out.println(proId_endTime);
System.out.println(proId_processDescribe);
System.out.println(shenuser);
AoaProcessList process = new AoaProcessList();
AoaOvertime overtime = new AoaOvertime();
AoaReviewed reviewed = new AoaReviewed();
AoaUser aoaUser = (AoaUser)session.getAttribute("user");
//总表
process.setApplyTime(DateUtils.getDateTimeString());
process.setDeeplyId(Integer.parseInt(proId_deeply));
process.setEndTime(proId_endTime);
process.setProcessName(proId_processName);
process.setProcessDes(proId_processDescribe);
process.setIsChecked(0);
process.setStartTime(proId_startTime);
process.setStatusId(23);
process.setTypeName("加班申请");
//process.setShenuser(proId_shenuser);
process.setProcessUserId(aoaUser.getUserId());
process.setShenuser(shenuser);
newProcessService2.insertProcess(process);
// overtime
overtime.setTypeId(Integer.parseInt(typeId) );
overtime.setProId(process.getProcessId());
newProcessService2.insertOvertime(overtime);
//审批表
reviewed.setAdvice("");
reviewed.setReviewedTime(DateUtils.getDateTimeString());
reviewed.setStatusId(23 );
reviewed.setProId(process.getProcessId());
String[] shenuserName=shenuser.split(";");
for (int j = 0; j < shenuserName.length; j++)
{
int shenuserId = newProcessService2.queryUserIdByName(shenuserName[j]);
reviewed.setUserId(shenuserId);
newProcessService2.insertReviewed(reviewed);
}
return "redirect:/xinxeng";
}
/*
######################### 4.转正 ###################################
*/
@RequestMapping("regular")
public String regular(Model model , HttpSession session)
{
// 状态
List<AoaTypeList> status = newProcessService2.queryType("紧急程度");
//重要程度
model.addAttribute("harrylist",status);
//通讯录
addressList(model,session);
//获取当前用户,用户名输入到页面
AoaUser aoaUser = (AoaUser) session.getAttribute("user");
model.addAttribute("username",aoaUser.getUserName());
return "process/regular";
}
/*
@Description : 转正申请
@Date : 2021/11/23
@Param : [user]
@return : java.lang.String
*/
@RequestMapping("regu")
private String regu(PositiveUser user,HttpSession session)
{
System.out.println(user);
/*
process表:
processName=小李转正, deeplyId=22, startTime=null, endTime=2021-11-23 09:01:52,
processUserId=null,shenuser=张天怿;黄熙锋
*/
//总表
AoaProcessList process = new AoaProcessList();
process.setApplyTime(DateUtils.getDateTimeString());
process.setDeeplyId(user.getDeeplyId());
process.setEndTime(user.getEndTime());
process.setProcessName(user.getProcessName());
process.setProcseeDays(DateUtils.between_days(user.getEndTime(),user.getStartTime()).intValue());
process.setIsChecked(0);
process.setStatusId(23);
AoaUser aoaUser = (AoaUser)session.getAttribute("user");
process.setProcessUserId(aoaUser.getUserId());
process.setStartTime(user.getStartTime());
process.setTypeName("转正申请");
process.setShenuser(user.getShenuser());
//获取process主键
newProcessService2.insertProcess(process);
System.out.println("processId===="+process.getProcessId());
/*
regular:表
understand=职责理解, experience=心得, pullulate=成长, deficiency=不足, dobetter=做的更好, advice=建议加薪)
*/
//转正表
AoaRegular regular = new AoaRegular();
regular.setProId(process.getProcessId());
regular.setExperience(user.getExperience());
regular.setAdvice(user.getAdvice());
regular.setUnderstand(user.getUnderstand());
regular.setPullulate(user.getPullulate());
regular.setDeficiency(user.getDeficiency());
regular.setDobetter(user.getDobetter());
regular.setDays(DateUtils.between_days(user.getStartTime(), user.getEndTime()).intValue());
newProcessService2.insertRegular(regular);
AoaReviewed reviewed = new AoaReviewed();
//审批表
reviewed.setAdvice("");
reviewed.setReviewedTime(DateUtils.getDateTimeString());
reviewed.setStatusId(23 );
reviewed.setProId(process.getProcessId());
String[] shenuserName=user.getShenuser().split(";");
for (int j = 0; j < shenuserName.length; j++)
{
int shenuserId = newProcessService2.queryUserIdByName(shenuserName[j]);
reviewed.setUserId(shenuserId);
newProcessService2.insertReviewed(reviewed);
}
return "redirect:/xinxeng";
}
/*
############################ 5.请假 #####################################
*/
@RequestMapping("holiday")
public String holiday(Model model,HttpSession session)
{
// 紧急程度
List<AoaTypeList> status = newProcessService2.queryType("紧急程度");
model.addAttribute("harrylist",status);
//Type
List<AoaTypeList> status2 = newProcessService2.queryType("请假");
model.addAttribute("overtype",status2);
//用户名
AoaUser aoaUser = (AoaUser) session.getAttribute("user");
model.addAttribute("username",aoaUser.getUserName());
//通讯录
addressList(model,session);
return "process/holiday";
}
//请假表单
@RequestMapping("holi")
public String holi(AoaHoliday holiday, HttpSession session,
String proId_deeply,
String proId_processName,
String proId_startTime,
String proId_endTime,
String proId_shenuser,
String proId_processDescribe,
@RequestParam("filePath") MultipartFile file //证明
)
{
System.out.println(holiday);
System.out.println(proId_deeply);
System.out.println(proId_processName);
System.out.println(proId_startTime);
System.out.println(proId_endTime);
System.out.println(proId_shenuser);
System.out.println(proId_processDescribe);
//获取用户
AoaUser aoaUser = (AoaUser)session.getAttribute("user");
//总表
AoaProcessList process = new AoaProcessList();
/*
附件上传
*/
if (file.getSize()!=0)
{
//url
String url = oosUtil.getImgUrl(oosUtil.uploadImg2Oss(file));
String shuffix = oosUtil.getPicSuffix(file.getOriginalFilename());
long size = file.getSize();
String type = file.getContentType();
AoaAttachmentList attachment = new AoaAttachmentList();
attachment.setAttachmentName(file.getOriginalFilename());
attachment.setAttachmentPath(url);
attachment.setAttachmentSize(size+"");
attachment.setAttachmentType(type);
attachment.setAttachmentShuffix(shuffix);
attachment.setModel("note");
attachment.setUploadTime(DateUtils.getDateTimeString());
attachment.setUserId(aoaUser.getUserId()+"");
newProcessService2.inertAttachment(attachment);
System.out.println(attachment.getAttachmentId());
process.setProFileId(attachment.getAttachmentId());
System.out.println("ppID = "+process.getProFileId());
}
process.setProcessName(proId_processName);
process.setDeeplyId(Integer.parseInt(proId_deeply));
process.setStartTime(proId_startTime);
process.setEndTime(proId_endTime);
process.setShenuser(proId_shenuser);
process.setProcessDes(proId_processDescribe);
process.setApplyTime(DateUtils.getDateTimeString());
process.setStatusId(23);
process.setTypeName("请假申请");
process.setIsChecked(0);
process.setProcseeDays(holiday.getLeaveDays());
process.setProcessUserId(aoaUser.getUserId());
process.setShenuser(proId_shenuser);
newProcessService2.insertProcess(process);
System.out.println("id===="+process.getProcessId());
//请假
holiday.setProId(process.getProcessId());
newProcessService2.insertHoliday(holiday);
AoaReviewed reviewed = new AoaReviewed();
//审批表
reviewed.setAdvice("");
reviewed.setReviewedTime(DateUtils.getDateTimeString());
reviewed.setStatusId(23 );
reviewed.setProId(process.getProcessId());
String[] shenuserName=proId_shenuser.split(";");
for (int j = 0; j < shenuserName.length; j++)
{
int shenuserId = newProcessService2.queryUserIdByName(shenuserName[j]);
reviewed.setUserId(shenuserId);
newProcessService2.insertReviewed(reviewed);
}
//holidayId=null, leaveDays=0, typeId=37, proId=null, managerAdvice=null, personnelAdvice=null)
return "redirect:/xinxeng";
}
/*
########################## 离职 #######################################
*/
@RequestMapping("resign")
private String resign(Model model,HttpSession session)
{
// 紧急程度
List<AoaTypeList> status = newProcessService2.queryType("紧急程度");
model.addAttribute("harrylist",status);
//用户名
AoaUser aoaUser = (AoaUser) session.getAttribute("user");
model.addAttribute("username",aoaUser.getUserName());
//通讯录
addressList(model,session);
return "process/resign";
}
@RequestMapping("res")
public String res(AoaResign resign, HttpSession session,
String proId_processName,
String proId_deeply,
String proId_processDescribe,
String finish,
String shenuser,
String handuser)
{
System.out.println(shenuser);
System.out.println(resign);
System.out.println(proId_processName);
System.out.println(proId_deeply);
System.out.println(proId_processDescribe);
System.out.println(finish);
System.out.println(shenuser);
//总表
AoaProcessList process = new AoaProcessList();
process.setProcessName(proId_processName);
process.setDeeplyId(Integer.parseInt(proId_deeply));
process.setStartTime(DateUtils.getDateTimeString());
process.setProcessDes(proId_processDescribe);
process.setApplyTime(DateUtils.getDateTimeString());
process.setStatusId(23);
process.setTypeName("离职申请");
process.setIsChecked(0);
AoaUser aoaUser = (AoaUser)session.getAttribute("user");
process.setProcessUserId(aoaUser.getUserId());
process.setShenuser(shenuser);
int id = newProcessService2.insertProcess(process);
System.out.println(process.getProcessId());
//查询用户id
int userId = newProcessService2.queryUserIdByName(handuser);
resign.setIsFinish( finish == null?0:1);
resign.setHandUser(userId);
resign.setProId(process.getProcessId());
int i = newProcessService2.insertResign(resign);
System.out.println("i = " + i);
AoaReviewed reviewed = new AoaReviewed();
reviewed.setAdvice("");
reviewed.setReviewedTime(DateUtils.getDateTimeString());
reviewed.setStatusId(23 );
reviewed.setProId(process.getProcessId());
String[] shenuserName=shenuser.split(";");
for (int j = 0; j < shenuserName.length; j++)
{
int shenuserId = newProcessService2.queryUserIdByName(shenuserName[j]);
reviewed.setUserId(shenuserId);
newProcessService2.insertReviewed(reviewed);
}
return "redirect:/xinxeng";
}
/*
@Description : 第一次通讯录
@Date : 2021/11/24
@Param : [model]
@return : void
*/
public void addressList(Model model,HttpSession session)
{
AoaUser aoaUser = (AoaUser)session.getAttribute("user");
/*
通讯录
*/
int page = 1,size = 5;
String baseKey = "";
//计数
int totalElements = newProcessDao2.findUserInfoByName(baseKey,aoaUser.getUserId(),page,0,aoaUser.getRoleId()).size();
//页数
int totalPages = totalElements % size == 0 ? totalElements / size : totalElements / size + 1;
List<AoaUser> users = newProcessDao2.findUserInfoByName(baseKey,aoaUser.getUserId(),page,size,aoaUser.getRoleId());
Map<String,Object> mapPage = new HashMap<>();
mapPage.put("totalElements", totalElements);
mapPage.put("totalPages", totalPages);
mapPage.put("number", page);
mapPage.put("size", size);
model.addAttribute("page", mapPage);
model.addAttribute("url", "recivers");
model.addAttribute("userInfo",users);
}
/*
@Description : 通讯录
@Date : 2021/11/24
@Param : [model, baseKey, page, size]
@return : java.lang.String
*/
@RequestMapping("recivers")
public String reciver(Model model,HttpSession session,
@RequestParam(value = "baseKey", defaultValue = "") String baseKey,
@RequestParam(value = "page", defaultValue = "1") int page,
@RequestParam(value = "size", defaultValue = "5") int size)
{
AoaUser aoaUser = (AoaUser)session.getAttribute("user");
int totalElements = newProcessDao2.findUserInfoByName(baseKey,aoaUser.getUserId(),page,0,aoaUser.getRoleId()).size();
int totalPages = totalElements % size == 0 ? totalElements / size : totalElements / size + 1;
List<AoaUser> userInfos = newProcessDao2.findUserInfoByName(baseKey, aoaUser.getUserId(),(page-1)*size, size,aoaUser.getRoleId());
model.addAttribute("userInfo",userInfos);
Map<String,Object> mapPage = new HashMap<>();
mapPage.put("totalElements", totalElements);
mapPage.put("totalPages", totalPages);
mapPage.put("number", page);
mapPage.put("size", size);
model.addAttribute("page", mapPage);
model.addAttribute("url", "recivers");
return "common/recivers";
}
}