|
@@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONObject;
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
|
+import com.management.platform.controller.AuditWorkflowSettingController;
|
|
import com.management.platform.entity.*;
|
|
import com.management.platform.entity.*;
|
|
import com.management.platform.entity.vo.SysRichFunction;
|
|
import com.management.platform.entity.vo.SysRichFunction;
|
|
import com.management.platform.mapper.*;
|
|
import com.management.platform.mapper.*;
|
|
@@ -48,6 +49,8 @@ public class LeaveSheetServiceImpl extends ServiceImpl<LeaveSheetMapper, LeaveSh
|
|
@Resource
|
|
@Resource
|
|
private ReportMapper reportMapper;
|
|
private ReportMapper reportMapper;
|
|
@Resource
|
|
@Resource
|
|
|
|
+ private AuditWorkflowSettingService auditWorkflowSettingService;
|
|
|
|
+ @Resource
|
|
private AuditWorkflowSettingMapper auditWorkflowSettingMapper;
|
|
private AuditWorkflowSettingMapper auditWorkflowSettingMapper;
|
|
@Resource
|
|
@Resource
|
|
private DepartmentMapper departmentMapper;
|
|
private DepartmentMapper departmentMapper;
|
|
@@ -65,6 +68,10 @@ public class LeaveSheetServiceImpl extends ServiceImpl<LeaveSheetMapper, LeaveSh
|
|
WxCorpInfoMapper wxCorpInfoMapper;
|
|
WxCorpInfoMapper wxCorpInfoMapper;
|
|
@Resource
|
|
@Resource
|
|
ExcelExportService excelExportService;
|
|
ExcelExportService excelExportService;
|
|
|
|
+ @Resource
|
|
|
|
+ LeaveAuditLogMapper leaveAuditLogMapper;
|
|
|
|
+ @Value(value = "${upload.path}")
|
|
|
|
+ private String path;
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public HttpRespMsg add(LeaveSheet sheet, String userId) {
|
|
public HttpRespMsg add(LeaveSheet sheet, String userId) {
|
|
@@ -94,33 +101,42 @@ public class LeaveSheetServiceImpl extends ServiceImpl<LeaveSheetMapper, LeaveSh
|
|
if (count > 0) {
|
|
if (count > 0) {
|
|
//msg.setError("该时间段已有请假申请,不能重复请假");
|
|
//msg.setError("该时间段已有请假申请,不能重复请假");
|
|
msg.setError(MessageUtils.message("leave.repeatedLeave"));
|
|
msg.setError(MessageUtils.message("leave.repeatedLeave"));
|
|
- } else {
|
|
|
|
- //校验当前的指定的项目审核人
|
|
|
|
- //获取第一个审批人
|
|
|
|
- User owner = userMapper.selectById(sheet.getOwnerId());
|
|
|
|
- AuditWorkflowSetting workflowNode = auditWorkflowSettingMapper.selectOne(new QueryWrapper<AuditWorkflowSetting>().eq("type", 0)
|
|
|
|
- .eq("dept_id", owner.getDepartmentId()).orderByAsc("seq").last("limit 1"));
|
|
|
|
- if (workflowNode != null) {
|
|
|
|
- if (workflowNode.getAuditorType() == 0) {
|
|
|
|
- //项目负责人审核, 创建时指定的项目审核人
|
|
|
|
-
|
|
|
|
- } else if (workflowNode.getAuditorType() == 1) {
|
|
|
|
- //部门负责人
|
|
|
|
- Department dept = departmentMapper.selectById(workflowNode.getAuditDeptId());
|
|
|
|
- sheet.setAuditorId(dept.getManagerId());
|
|
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
|
|
- } else {
|
|
|
|
- //指定一个人审批
|
|
|
|
- sheet.setAuditorId(workflowNode.getUserId());
|
|
|
|
- sheet.setAuditorName(workflowNode.getUserName());
|
|
|
|
|
|
+ //获取第一个审批人
|
|
|
|
+ User owner = userMapper.selectById(sheet.getOwnerId());
|
|
|
|
+ if (owner.getDepartmentId() == 0) {
|
|
|
|
+ //没有部门,不能提交请假申请
|
|
|
|
+ msg.setError("请联系管理员设置您所在部门");
|
|
|
|
+ return msg;
|
|
|
|
+ } else {
|
|
|
|
+ List<AuditWorkflowSetting> auditList = auditWorkflowSettingService.get(owner.getDepartmentId(), AuditWorkflowSettingController.TYPE_LEAVE);
|
|
|
|
+ if (auditList.size() > 0) {
|
|
|
|
+ AuditWorkflowSetting workflowNode = auditList.get(0);
|
|
|
|
+ if (workflowNode.getAuditorType() == 1) {
|
|
|
|
+ //部门负责人
|
|
|
|
+ Department dept = departmentMapper.selectById(workflowNode.getAuditDeptId());
|
|
|
|
+ if (dept.getManagerId() == null) {
|
|
|
|
+ msg.setError("请联系管理员设置您所在部门的主要负责人");
|
|
|
|
+ return msg;
|
|
}
|
|
}
|
|
|
|
+ sheet.setAuditorId(dept.getManagerId());
|
|
|
|
+ sheet.setAuditorName(userMapper.selectById(dept.getManagerId()).getName());
|
|
|
|
+ } else if (workflowNode.getAuditorType() == 2) {
|
|
|
|
+ //指定一个人审批
|
|
|
|
+ sheet.setAuditorId(workflowNode.getUserId());
|
|
|
|
+ sheet.setAuditorName(workflowNode.getUserName());
|
|
}
|
|
}
|
|
- leaveSheetMapper.insert(sheet);
|
|
|
|
}
|
|
}
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (isNew) {
|
|
|
|
+ leaveSheetMapper.insert(sheet);
|
|
} else {
|
|
} else {
|
|
|
|
+ //编辑修改
|
|
leaveSheetMapper.updateById(sheet);
|
|
leaveSheetMapper.updateById(sheet);
|
|
}
|
|
}
|
|
-
|
|
|
|
return msg;
|
|
return msg;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -135,6 +151,7 @@ public class LeaveSheetServiceImpl extends ServiceImpl<LeaveSheetMapper, LeaveSh
|
|
QueryWrapper<LeaveSheet> queryWrapper = new QueryWrapper<LeaveSheet>();
|
|
QueryWrapper<LeaveSheet> queryWrapper = new QueryWrapper<LeaveSheet>();
|
|
String token = request.getHeader("TOKEN");
|
|
String token = request.getHeader("TOKEN");
|
|
User user = userMapper.selectById(token);
|
|
User user = userMapper.selectById(token);
|
|
|
|
+
|
|
List<SysRichFunction> functionList = sysFunctionMapper.getRoleFunctions(user.getRoleId(), "查看全部请假单");
|
|
List<SysRichFunction> functionList = sysFunctionMapper.getRoleFunctions(user.getRoleId(), "查看全部请假单");
|
|
if (functionList.size() == 0) {
|
|
if (functionList.size() == 0) {
|
|
//部门负责人可以看这个部门的
|
|
//部门负责人可以看这个部门的
|
|
@@ -197,20 +214,97 @@ public class LeaveSheetServiceImpl extends ServiceImpl<LeaveSheetMapper, LeaveSh
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public HttpRespMsg approve(Integer id) {
|
|
public HttpRespMsg approve(Integer id) {
|
|
- LeaveSheet sheet = new LeaveSheet();
|
|
|
|
- sheet.setId(id);
|
|
|
|
- sheet.setStatus(0);
|
|
|
|
- leaveSheetMapper.updateById(sheet);
|
|
|
|
- return new HttpRespMsg();
|
|
|
|
|
|
+ String token = request.getHeader("TOKEN");
|
|
|
|
+ //检查操作人权限
|
|
|
|
+ User user = userMapper.selectById(token);
|
|
|
|
+ HttpRespMsg httpRespMsg = new HttpRespMsg();
|
|
|
|
+ LeaveSheet originSheet = leaveSheetMapper.selectById(id);
|
|
|
|
+ if (user.getId().equals(originSheet.getAuditorId())) {
|
|
|
|
+ //是当前的审核人,获取下个审核节点
|
|
|
|
+ AuditWorkflowSetting auditWorkflowSetting = auditWorkflowSettingMapper.selectById(originSheet.getCurAuditSettingId());
|
|
|
|
+ LeaveSheet sheet = new LeaveSheet();
|
|
|
|
+ sheet.setId(id);
|
|
|
|
+ if (auditWorkflowSetting == null) {
|
|
|
|
+ //当前审核节点已不存在,直接审核通过
|
|
|
|
+ sheet.setStatus(0);
|
|
|
|
+ } else {
|
|
|
|
+ Integer seq = auditWorkflowSetting.getSeq();
|
|
|
|
+ AuditWorkflowSetting nextAuditNode = auditWorkflowSettingMapper.selectOne(new QueryWrapper<AuditWorkflowSetting>().eq("seq", (seq + 1)).eq("dept_id", auditWorkflowSetting.getDeptId()));
|
|
|
|
+ if (nextAuditNode == null) {
|
|
|
|
+ sheet.setStatus(0);
|
|
|
|
+ } else {
|
|
|
|
+ //进入下个审核节点
|
|
|
|
+ if (nextAuditNode.getAuditorType() == 1) {
|
|
|
|
+ //部门负责人审核
|
|
|
|
+ Department department = departmentMapper.selectById(nextAuditNode.getAuditDeptId());
|
|
|
|
+ if (department == null) {
|
|
|
|
+ //部门已被删除,直接审核通过
|
|
|
|
+ sheet.setStatus(0);
|
|
|
|
+ } else {
|
|
|
|
+ if (department.getManagerId() == null) {
|
|
|
|
+ httpRespMsg.setError("尚未设置下个节点的部门负责人,请联系管理员");
|
|
|
|
+ return httpRespMsg;
|
|
|
|
+ } else {
|
|
|
|
+ sheet.setCurAuditSettingId(nextAuditNode.getId());
|
|
|
|
+ sheet.setAuditorId(department.getManagerId());
|
|
|
|
+ sheet.setAuditorName(userMapper.selectById(department.getManagerId()).getName());
|
|
|
|
+ sheet.setAuditorType(nextAuditNode.getAuditorType());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ leaveSheetMapper.updateById(sheet);
|
|
|
|
+ //保存审核记录
|
|
|
|
+ saveAgreeLog(id, auditWorkflowSetting, user);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return httpRespMsg;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void saveAgreeLog(int sheetId, AuditWorkflowSetting curAuditNode, User operator) {
|
|
|
|
+ LeaveAuditLog log = new LeaveAuditLog();
|
|
|
|
+ log.setSheetId(sheetId);
|
|
|
|
+ if (curAuditNode != null) {
|
|
|
|
+ log.setAuditNodeId(curAuditNode.getId());
|
|
|
|
+ }
|
|
|
|
+ log.setAuditorId(operator.getId());
|
|
|
|
+ log.setAuditorName(operator.getName());
|
|
|
|
+ log.setIsPass(1);
|
|
|
|
+ leaveAuditLogMapper.insert(log);
|
|
|
|
+ }
|
|
|
|
+ private void saveDenyLog(int sheetId, AuditWorkflowSetting curAuditNode, User operator, String reason) {
|
|
|
|
+ LeaveAuditLog log = new LeaveAuditLog();
|
|
|
|
+ log.setSheetId(sheetId);
|
|
|
|
+ if (curAuditNode != null) {
|
|
|
|
+ log.setAuditNodeId(curAuditNode.getId());
|
|
|
|
+ }
|
|
|
|
+ log.setAuditorId(operator.getId());
|
|
|
|
+ log.setAuditorName(operator.getName());
|
|
|
|
+ log.setIsPass(0);
|
|
|
|
+ log.setDenyReason(reason);
|
|
|
|
+ leaveAuditLogMapper.insert(log);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+
|
|
@Override
|
|
@Override
|
|
- public HttpRespMsg deny(Integer id) {
|
|
|
|
- LeaveSheet sheet = new LeaveSheet();
|
|
|
|
- sheet.setId(id);
|
|
|
|
- sheet.setStatus(2);
|
|
|
|
- leaveSheetMapper.updateById(sheet);
|
|
|
|
- return new HttpRespMsg();
|
|
|
|
|
|
+ public HttpRespMsg deny(Integer id, String reason) {
|
|
|
|
+ String token = request.getHeader("TOKEN");
|
|
|
|
+ //检查操作人权限
|
|
|
|
+ User user = userMapper.selectById(token);
|
|
|
|
+ HttpRespMsg httpRespMsg = new HttpRespMsg();
|
|
|
|
+ LeaveSheet originSheet = leaveSheetMapper.selectById(id);
|
|
|
|
+ if (user.getId().equals(originSheet.getAuditorId())) {
|
|
|
|
+ //是当前的审核人,获取当前审核节点
|
|
|
|
+ AuditWorkflowSetting auditWorkflowSetting = auditWorkflowSettingMapper.selectById(originSheet.getCurAuditSettingId());
|
|
|
|
+ LeaveSheet sheet = new LeaveSheet();
|
|
|
|
+ sheet.setId(id);
|
|
|
|
+ sheet.setStatus(2);
|
|
|
|
+ leaveSheetMapper.updateById(sheet);
|
|
|
|
+ saveDenyLog(id, auditWorkflowSetting, user, reason);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return httpRespMsg;
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
@@ -238,8 +332,7 @@ public class LeaveSheetServiceImpl extends ServiceImpl<LeaveSheetMapper, LeaveSh
|
|
return msg;
|
|
return msg;
|
|
}
|
|
}
|
|
|
|
|
|
- @Value(value = "${upload.path}")
|
|
|
|
- private String path;
|
|
|
|
|
|
+
|
|
@Override
|
|
@Override
|
|
public HttpRespMsg exportLeaveData(String userId,Integer status,Integer leaveType,String startTime,String endTime) {
|
|
public HttpRespMsg exportLeaveData(String userId,Integer status,Integer leaveType,String startTime,String endTime) {
|
|
HttpRespMsg httpRespMsg = new HttpRespMsg();
|
|
HttpRespMsg httpRespMsg = new HttpRespMsg();
|
|
@@ -362,4 +455,68 @@ public class LeaveSheetServiceImpl extends ServiceImpl<LeaveSheetMapper, LeaveSh
|
|
}
|
|
}
|
|
return httpRespMsg;
|
|
return httpRespMsg;
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public HttpRespMsg cancel(Integer id, String userId) {
|
|
|
|
+ HttpRespMsg msg = new HttpRespMsg();
|
|
|
|
+ LeaveSheet oldSheet = leaveSheetMapper.selectById(id);
|
|
|
|
+ if (oldSheet.getStatus() == 0) {
|
|
|
|
+ msg.setError("当前请假申请已通过,无法撤销");
|
|
|
|
+ } else if (oldSheet.getStatus() == 2) {
|
|
|
|
+ msg.setError("当前请假申已驳回,无法撤销");
|
|
|
|
+ } else {
|
|
|
|
+ LeaveSheet sheet = new LeaveSheet();
|
|
|
|
+ sheet.setId(id);
|
|
|
|
+ sheet.setStatus(3);//撤销状态
|
|
|
|
+ leaveSheetMapper.updateById(sheet);
|
|
|
|
+ //删除相关的审批记录
|
|
|
|
+ leaveAuditLogMapper.delete(new QueryWrapper<LeaveAuditLog>().eq("sheet_id", id));
|
|
|
|
+ }
|
|
|
|
+ return msg;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public HttpRespMsg auditList(LeaveSheet sheet, Integer pageIndex, Integer pageSize) {
|
|
|
|
+ QueryWrapper<LeaveSheet> queryWrapper = new QueryWrapper<LeaveSheet>();
|
|
|
|
+ String token = request.getHeader("TOKEN");
|
|
|
|
+ User user = userMapper.selectById(token);
|
|
|
|
+
|
|
|
|
+ sheet.setCompanyId(user.getCompanyId());
|
|
|
|
+
|
|
|
|
+ HttpRespMsg httpRespMsg = new HttpRespMsg();
|
|
|
|
+ queryWrapper.eq("company_id", sheet.getCompanyId()).orderByDesc("id");
|
|
|
|
+ queryWrapper.eq("status", 1);
|
|
|
|
+ queryWrapper.eq("auditor_id", user.getId());
|
|
|
|
+
|
|
|
|
+ if (!StringUtils.isEmpty(sheet.getOwnerId())) {
|
|
|
|
+ queryWrapper.eq("owner_id", sheet.getOwnerId());
|
|
|
|
+ }
|
|
|
|
+ if (sheet.getLeaveType() != null) {
|
|
|
|
+ queryWrapper.eq("leave_type", sheet.getLeaveType());
|
|
|
|
+ }
|
|
|
|
+ if (sheet.getStartDate() != null && sheet.getEndDate() != null) {
|
|
|
|
+ queryWrapper.le("start_date", sheet.getEndDate()).ge("end_date", sheet.getStartDate());
|
|
|
|
+ }
|
|
|
|
+ IPage<LeaveSheet> listIPager = leaveSheetMapper.selectPage(new Page<>(pageIndex, pageSize),
|
|
|
|
+ queryWrapper);
|
|
|
|
+ List<LeaveSheet> records = listIPager.getRecords();
|
|
|
|
+ List<String> userIds = records.stream().map(LeaveSheet::getOwnerId).collect(Collectors.toList());
|
|
|
|
+ if (userIds.size() > 0) {
|
|
|
|
+ List<User> userList = userMapper.getUserWithDept(new QueryWrapper<User>().in("id", userIds));
|
|
|
|
+ records.stream().forEach(r->{
|
|
|
|
+ Optional<User> find = userList.stream().filter(u->u.getId().equals(r.getOwnerId())).findFirst();
|
|
|
|
+ if (find.isPresent()) {
|
|
|
|
+ r.setDept(find.get().getDepartmentName());
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ Long total = listIPager.getTotal();
|
|
|
|
+
|
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
|
+ map.put("records", records);
|
|
|
|
+ map.put("total", total);
|
|
|
|
+ httpRespMsg.data = map;
|
|
|
|
+ return httpRespMsg;
|
|
|
|
+ }
|
|
}
|
|
}
|