package com.imooc.oa.service;
import com.imooc.oa.entity.Employee;
import com.imooc.oa.entity.LeaveForm;
import com.imooc.oa.entity.Notice;
import com.imooc.oa.entity.ProcessFlow;
import com.imooc.oa.mapper.EmployeeMapper;
import com.imooc.oa.mapper.LeaveFormMapper;
import com.imooc.oa.mapper.NoticeMapper;
import com.imooc.oa.mapper.ProcessFlowMapper;
import com.imooc.oa.service.exception.LeaveFormException;
import com.imooc.oa.utils.MybatisUtils;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class LeaveFormService {
private EmployeeService employeeService = new EmployeeService();
/**
* 创建请假单
* @param form 前端输入的请假单数据
* @return 持久化后的请假单对象
*/
public LeaveForm createLeaveForm(LeaveForm form){
LeaveForm f = (LeaveForm) MybatisUtils.executeUpdate(sqlSession -> {
//1.持久化form表单数据,8级以下员工表单状态为processing,8级(总经理)状态为approved
EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class);
Employee employee = employeeMapper.selectById(form.getEmployeeId());
if(employee.getLevel() == 8){
form.setState("approved");
}else{
form.setState("processing");
}
LeaveFormMapper leaveFormMapper = sqlSession.getMapper(LeaveFormMapper.class);
leaveFormMapper.insert(form);
NoticeMapper noticeMapper = sqlSession.getMapper(NoticeMapper.class);
//2.增加第一条流程数据,说明表单已提交,状态为complete
ProcessFlowMapper processFlowMapper = sqlSession.getMapper(ProcessFlowMapper.class);
ProcessFlow flow1 = new ProcessFlow();
flow1.setFormId(form.getFormId());
flow1.setOperatorId(employee.getEmployeeId());
flow1.setAction("apply");
flow1.setCreateTime(new Date());
flow1.setOrderNo(1);
flow1.setState("complete");
flow1.setIsLast(0);
processFlowMapper.insert(flow1);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd-HH时");
//3.分情况创建其余流程数据
//3.1 7级以下员工,生成部门经理审批任务,请假时间大于等于72小时,还需生成总经理审批任务
if(employee.getLevel() < 7){
Employee dmanager = employeeService.selectLeader(employee.getEmployeeId());
ProcessFlow flow2 = new ProcessFlow();
flow2.setFormId(form.getFormId());
flow2.setOperatorId(dmanager.getEmployeeId());
flow2.setAction("audit");
flow2.setCreateTime(new Date());
flow2.setOrderNo(2);
flow2.setState("process");
long diff = form.getEndTime().getTime() - form.getStartTime().getTime();
float hours = diff/(1000*60*60) * 1f;
if(hours >= 72){
flow2.setIsLast(0);
processFlowMapper.insert(flow2);
Employee manager = employeeService.selectLeader(dmanager.getEmployeeId());
ProcessFlow flow3 = new ProcessFlow();
flow3.setFormId(form.getFormId());
flow3.setOperatorId(manager.getEmployeeId());
flow3.setAction("audit");
flow3.setCreateTime(new Date());
flow3.setState("ready");
flow3.setOrderNo(3);
flow3.setIsLast(1);
processFlowMapper.insert(flow3);
}else {
flow2.setIsLast(1);
processFlowMapper.insert(flow2);
}
String notice1 = String.format("您的请假申请[%s-%s]已提交,请等待上级审批.", sdf.format(form.getStartTime()), sdf.format(form.getEndTime()));
noticeMapper.insert(new Notice(employee.getEmployeeId(),notice1));
String notice2 = String.format("%s-%s提起请假申请[%s-%s],请尽快审批", employee.getTitle(), employee.getName(), sdf.format(form.getStartTime()), sdf.format(form.getEndTime()));
noticeMapper.insert(new Notice(dmanager.getEmployeeId(),notice2));
}else if(employee.getLevel() == 7){
//3.2 7级员工,仅生成总经理审批任务
Employee manager = employeeService.selectLeader(employee.getEmployeeId());
ProcessFlow flow2 = new ProcessFlow();
flow2.setFormId(form.getFormId());
flow2.setOperatorId(manager.getEmployeeId());
flow2.setAction("audit");
flow2.setCreateTime(new Date());
flow2.setState("process");
flow2.setOrderNo(2);
flow2.setIsLast(1);
processFlowMapper.insert(flow2);
//请假单已提交消息
String notice1 = String.format("您的请假申请[%s-%s]已提交,请等待上级审批."
, sdf.format(form.getStartTime()), sdf.format(form.getEndTime()));
noticeMapper.insert(new Notice(employee.getEmployeeId(),notice1));
//通知总经理审批消息
String notice2 = String.format("%s-%s提起请假申请[%s-%s],请尽快审批",
employee.getTitle() , employee.getName() ,sdf.format(form.getStartTime()),sdf.format(form.getEndTime()));
noticeMapper.insert(new Notice(manager.getEmployeeId(),notice2));
}else if(employee.getLevel() == 8){
//3.3 8级员工,生成总经理审批任务,系统自动通过
ProcessFlow flow2 = new ProcessFlow();
flow2.setFormId(form.getFormId());
flow2.setOperatorId(employee.getEmployeeId());
flow2.setAction("audit");
flow2.setResult("approved");
flow2.setReason("自动通过");
flow2.setCreateTime(new Date());
flow2.setAuditTime(new Date());
flow2.setState("complete");
flow2.setOrderNo(2);
flow2.setIsLast(1);
processFlowMapper.insert(flow2);
String noticeContent = String.format("您的请假申请[%s-%s]系统已自动批准通过." ,
sdf.format(form.getStartTime()) , sdf.format(form.getEndTime()));
noticeMapper.insert(new Notice(employee.getEmployeeId(),noticeContent));
}
return form;
});
return f;
}
/**
* 获取指定任务状态及指定经办人对应的请假单列表
* @param pfState ProcessFlow任务状态
* @param operatorId 经办人编号
* @return 请假单及相关数据列表
*/
public List<Map> getLeaveFormList(String pfState, Long operatorId){
return (List<Map>) MybatisUtils.executeQuery(sqlSession -> {
LeaveFormMapper mapper = sqlSession.getMapper(LeaveFormMapper.class);
List<Map> maps = mapper.selectByParams(pfState, operatorId);
return maps;
});
}
/**
* 审核请假单
* @param formId 表单编号
* @param operatorId 经办人(当前登录员工)
* @param result 审批结果
* @param reason 审批意见
*/
public void audit(Long formId , Long operatorId , String result , String reason){
MybatisUtils.executeUpdate(sqlSession -> {
//无论同意/驳回,当前任务状态变更为complete
ProcessFlowMapper processFlowMapper = sqlSession.getMapper(ProcessFlowMapper.class);
List<ProcessFlow> flowList = processFlowMapper.selectByFormId(formId);
if(flowList.size() == 0){
thro
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
【资源说明】 基于java的OA员工请假系统源码+sql数据库.zip 基于java的oa员工请假系统 本系统借鉴自慕课网java工程师体系课oa员工请假练手项目 前端用的vue,element-plus,后端纯java 后期考虑部署到服务器当中 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!
资源推荐
资源详情
资源评论
收起资源包目录
基于java的OA员工请假系统源码+sql数据库.zip (75个子文件)
sql
leave_process_flow.sql 4KB
rbac.sql 6KB
employee.sql 2KB
项目说明.md 194B
pom.xml 2KB
src
test
java
MybatisUtilsTestor.java 554B
com
imooc
oa
mapper
ProcessFlowMapperTest.java 985B
NoticeMapperTest.java 464B
EmployeeMapperTest.java 1KB
LeaveFormMapperTest.java 2KB
utils
ResponseUtilsTest.java 553B
Md5UtilsTest.java 385B
service
LeaveFormServiceTest.java 5KB
UserServiceTest.java 638B
RbacServiceTest.java 440B
main
resources
mybatis-config.xml 2KB
mappers
department.xml 428B
user.xml 355B
test.xml 267B
rbac.xml 530B
process_flow.xml 1KB
employee.xml 833B
leave_form.xml 2KB
notice.xml 702B
java
com
imooc
oa
mapper
ProcessFlowMapper.java 290B
UserMapper.java 340B
NoticeMapper.java 225B
DepartmentMapper.java 161B
LeaveFormMapper.java 544B
EmployeeMapper.java 253B
RbacMapper.java 369B
controller
UserInfoServlet.java 2KB
LeaveFormServlet.java 4KB
LoginServlet.java 2KB
NoticeServlet.java 1KB
utils
Md5Utils.java 835B
ResponseUtils.java 1KB
MybatisUtils.java 2KB
service
LeaveFormService.java 14KB
UserService.java 972B
RbacService.java 326B
EmployeeService.java 2KB
NoticeService.java 474B
exception
LoginException.java 170B
LeaveFormException.java 178B
DepartmentService.java 389B
entity
Node.java 1KB
ProcessFlow.java 3KB
Department.java 488B
LeaveForm.java 2KB
Employee.java 1KB
Notice.java 1KB
User.java 1KB
datasource
DruidDataSourceFactory.java 649B
Test.java 143B
webapp
notice.html 2KB
WEB-INF
web.xml 304B
assets
vue
vue.global.js 530KB
axios
axios.js 14KB
axios.min.map 116KB
element-plus
index.full.js 674KB
locale
zh-cn.js 5KB
index.css 251KB
fonts
element-icons.woff 24KB
element-icons.ttf 49KB
oa
security.js 103B
leave_form.html 6KB
audit.html 8KB
login.html 4KB
favicon.ico 12KB
index.html 4KB
.gitignore 47B
static
notice.html 2KB
leave_form.html 4KB
audit.html 4KB
共 75 条
- 1
资源评论
Make程序设计
- 粉丝: 5631
- 资源: 3568
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功