package com.ruoyi.web.controller.api;
|
|
|
import com.ruoyi.common.annotation.Log;
|
import com.ruoyi.common.core.domain.R;
|
import com.ruoyi.common.core.domain.entity.SysUser;
|
import com.ruoyi.common.core.domain.entity.TDept;
|
import com.ruoyi.common.enums.BusinessType;
|
import com.ruoyi.common.utils.bean.BeanUtils;
|
import com.ruoyi.framework.web.service.TokenService;
|
import com.ruoyi.system.dto.*;
|
import com.ruoyi.system.emums.ApprovalFlowNodeEnum;
|
import com.ruoyi.system.emums.ApprovalTypeEnum;
|
import com.ruoyi.system.model.*;
|
import com.ruoyi.system.model.OaApprovalApplications;
|
import com.ruoyi.system.service.ISysUserService;
|
import com.ruoyi.system.service.OaApprovalApplicationAdvertisementService;
|
import com.ruoyi.system.service.OaApprovalApplicationAttendanceService;
|
import com.ruoyi.system.service.OaApprovalApplicationContactService;
|
import com.ruoyi.system.service.OaApprovalApplicationContractService;
|
import com.ruoyi.system.service.OaApprovalApplicationMoneyService;
|
import com.ruoyi.system.service.OaApprovalApplicationPaymentService;
|
import com.ruoyi.system.service.OaApprovalApplicationReimbursementItemService;
|
import com.ruoyi.system.service.OaApprovalApplicationReimbursementService;
|
import com.ruoyi.system.service.OaApprovalApplicationsService;
|
import com.ruoyi.system.service.OaApprovalFlowNodeService;
|
import com.ruoyi.system.service.OaApprovalService;
|
import com.ruoyi.system.service.OaApprovalTodoService;
|
import com.ruoyi.system.service.TDeptService;
|
import com.ruoyi.system.utils.UUIDUtil;
|
import io.swagger.annotations.Api;
|
import io.swagger.annotations.ApiOperation;
|
import org.springframework.web.bind.annotation.PathVariable;
|
import org.springframework.web.bind.annotation.PutMapping;
|
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.web.bind.annotation.RequestBody;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RestController;
|
import oshi.driver.mac.net.NetStat;
|
|
import javax.annotation.Resource;
|
import java.math.BigDecimal;
|
import java.text.SimpleDateFormat;
|
import java.time.LocalDate;
|
import java.util.ArrayList;
|
import java.util.Arrays;
|
import java.util.Date;
|
import java.util.List;
|
import java.util.stream.Collectors;
|
import com.ruoyi.system.emums.ApprovalStatusEnum;
|
import com.ruoyi.common.exception.ServiceException;
|
|
/**
|
* <p>
|
* 审批申请记录表 前端控制器
|
* </p>
|
*
|
* @author WuGuanFengYue
|
* @since 2025-09-15
|
*/
|
@RestController
|
@Api(tags ="审批-发起审批")
|
@RequestMapping("/oa-approval-applications")
|
public class OaApprovalApplicationsController {
|
@Resource
|
private OaApprovalService approvalService;
|
@Resource
|
private TokenService tokenService;
|
@Resource
|
private OaApprovalApplicationsService approvalApplicationsService;
|
@Resource
|
private OaApprovalApplicationAdvertisementService approvalApplicationAdvertisementService;
|
@Resource
|
private OaApprovalApplicationContactService approvalApplicationContactService;
|
@Resource
|
private OaApprovalApplicationPaymentService approvalApplicationPaymentService;
|
@Resource
|
private OaApprovalApplicationContractService approvalApplicationContractService;
|
@Resource
|
private OaApprovalApplicationMoneyService approvalApplicationMoneyService;
|
@Resource
|
private OaApprovalApplicationReimbursementService approvalApplicationReimbursementService;
|
@Resource
|
private OaApprovalApplicationReimbursementItemService approvalApplicationReimbursementItemService;
|
@Resource
|
private OaApprovalFlowNodeService approvalFlowNodeService;
|
@Resource
|
private ISysUserService sysUserService;
|
@Resource
|
private OaApprovalApplicationAttendanceService approvalApplicationAttendanceService;
|
@Resource
|
private TDeptService deptService;
|
@Resource
|
private OaApprovalTodoService oaApprovalTodoService;
|
@Log(title = "审批-发起请假", businessType = BusinessType.INSERT)
|
@ApiOperation(value = "发起请假")
|
@PostMapping(value = "/addLeave")
|
public R addLeave(@RequestBody AddLeaveDTO dto) {
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
|
String code = "Leave-"+sdf.format(new Date()) + UUIDUtil.getNumberRandom(5);
|
OaApprovalApplications oaApprovalApplications = new OaApprovalApplications();
|
oaApprovalApplications.setApplicationCode(code);
|
oaApprovalApplications.setApprovalId(ApprovalTypeEnum.LEAVE.getCode());
|
oaApprovalApplications.setApplicantUserId(tokenService.getLoginUser().getUserId().intValue());
|
SysUser sysUser = sysUserService.selectUserById(tokenService.getLoginUser().getUserId());
|
TDept dept = deptService.getById(sysUser.getDeptId());
|
oaApprovalApplications.setApplicantName(sysUser.getNickName());
|
oaApprovalApplications.setDeptId(Integer.valueOf(sysUser.getDeptId()));
|
oaApprovalApplications.setDeptName(dept.getDeptName());
|
oaApprovalApplications.setApplicationDate(LocalDate.now());
|
oaApprovalApplications.setApplicationReason(dto.getApplicationReason());
|
oaApprovalApplications.setApprovalStatus(1);
|
oaApprovalApplications.setAttachmentUrl(dto.getAttachmentUrl());
|
OaApprovalFlowNode approvalFlowNode = approvalFlowNodeService.lambdaQuery()
|
.eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.LEAVE.getCode())
|
.orderByAsc(OaApprovalFlowNode::getSortOrder)
|
.eq(OaApprovalFlowNode::getStatus,1)
|
.last("limit 1")
|
.one();
|
oaApprovalApplications.setCurrentFlowNodeId(approvalFlowNode.getId());
|
List<Integer> approvalIds = approvalApplicationsService.lambdaQuery()
|
.in(OaApprovalApplications::getApprovalStatus, Arrays.asList(1,2))
|
.eq(OaApprovalApplications::getApprovalId, ApprovalTypeEnum.LEAVE.getCode())
|
.eq(OaApprovalApplications::getApplicantUserId, sysUser.getUserId()).list()
|
.stream().map(OaApprovalApplications::getId).collect(Collectors.toList());
|
if (!approvalIds.isEmpty()){
|
// 根据请假时间 查询请假申请记录
|
List<OaApprovalApplicationAttendance> approvalApplicationAttendances = approvalApplicationAttendanceService.lambdaQuery()
|
.in(OaApprovalApplicationAttendance::getApprovalApplicationId,approvalIds)
|
.ge(OaApprovalApplicationAttendance::getStartTime, dto.getStartTime())
|
.le(OaApprovalApplicationAttendance::getEndTime, dto.getEndTime())
|
.eq(OaApprovalApplicationAttendance::getIsLeave, 1).list();
|
if (!approvalApplicationAttendances.isEmpty()){
|
boolean hasOverlap = approvalApplicationAttendanceService.lambdaQuery()
|
.eq(OaApprovalApplicationAttendance::getIsLeave, true)
|
.in(OaApprovalApplicationAttendance::getApprovalApplicationId, approvalIds)
|
.apply("(start_time < {0} AND end_time > {1})", dto.getEndTime(), dto.getStartTime())
|
.exists();
|
|
if (hasOverlap) {
|
return R.fail("请假时间与已有请假记录重叠,请重新选择时间");
|
}
|
}
|
}
|
|
|
approvalApplicationsService.save(oaApprovalApplications);
|
// 生成明细记录
|
OaApprovalApplicationAttendance oaApprovalApplicationAttendance = new OaApprovalApplicationAttendance();
|
oaApprovalApplicationAttendance.setApprovalApplicationId(oaApprovalApplications.getId());
|
oaApprovalApplicationAttendance.setStartTime(dto.getStartTime());
|
oaApprovalApplicationAttendance.setEndTime(dto.getEndTime());
|
oaApprovalApplicationAttendance.setDuration(dto.getDuration());
|
oaApprovalApplicationAttendance.setIsLeave(true);
|
approvalApplicationAttendanceService.save(oaApprovalApplicationAttendance);
|
// 根据节点类型 生成代办
|
oaApprovalTodoService.createApprovalTodos(oaApprovalApplications.getId(), code, approvalFlowNode,
|
Integer.valueOf(sysUser.getDeptId()));
|
return R.ok();
|
}
|
@Log(title = "审批-发起外出申请", businessType = BusinessType.INSERT)
|
@ApiOperation(value = "发起外出申请")
|
@PostMapping(value = "/addOut")
|
public R addOut(@RequestBody AddOutDTO dto) {
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
|
String code = "Out-"+sdf.format(new Date()) + UUIDUtil.getNumberRandom(5);
|
OaApprovalApplications oaApprovalApplications = new OaApprovalApplications();
|
oaApprovalApplications.setApplicationCode(code);
|
oaApprovalApplications.setApprovalId(ApprovalTypeEnum.OUT.getCode());
|
oaApprovalApplications.setApplicantUserId(tokenService.getLoginUser().getUserId().intValue());
|
SysUser sysUser = sysUserService.selectUserById(tokenService.getLoginUser().getUserId());
|
TDept dept = deptService.getById(sysUser.getDeptId());
|
oaApprovalApplications.setApplicantName(sysUser.getNickName());
|
oaApprovalApplications.setDeptId(Integer.valueOf(sysUser.getDeptId()));
|
oaApprovalApplications.setDeptName(dept.getDeptName());
|
oaApprovalApplications.setApplicationDate(LocalDate.now());
|
oaApprovalApplications.setApplicationReason(dto.getApplicationReason());
|
oaApprovalApplications.setApprovalStatus(1);
|
oaApprovalApplications.setAttachmentUrl(dto.getAttachmentUrl());
|
OaApprovalFlowNode approvalFlowNode = approvalFlowNodeService.lambdaQuery()
|
.eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.OUT.getCode())
|
.orderByAsc(OaApprovalFlowNode::getSortOrder)
|
.eq(OaApprovalFlowNode::getStatus,1)
|
.last("limit 1")
|
|
.one();
|
oaApprovalApplications.setCurrentFlowNodeId(approvalFlowNode.getId());
|
List<Integer> approvalIds = approvalApplicationsService.lambdaQuery()
|
.in(OaApprovalApplications::getApprovalStatus, Arrays.asList(1,2))
|
.eq(OaApprovalApplications::getApprovalId, ApprovalTypeEnum.OUT.getCode())
|
.eq(OaApprovalApplications::getApplicantUserId, sysUser.getUserId()).list()
|
.stream().map(OaApprovalApplications::getId).collect(Collectors.toList());
|
if (!approvalIds.isEmpty()){
|
// 根据请假时间 查询请假申请记录
|
List<OaApprovalApplicationAttendance> approvalApplicationAttendances = approvalApplicationAttendanceService.lambdaQuery()
|
.in(OaApprovalApplicationAttendance::getApprovalApplicationId,approvalIds)
|
.ge(OaApprovalApplicationAttendance::getStartTime, dto.getStartTime())
|
.le(OaApprovalApplicationAttendance::getEndTime, dto.getEndTime())
|
.list();
|
if (!approvalApplicationAttendances.isEmpty()){
|
boolean hasOverlap = approvalApplicationAttendanceService.lambdaQuery()
|
.in(OaApprovalApplicationAttendance::getApprovalApplicationId, approvalIds)
|
.apply("(start_time < {0} AND end_time > {1})", dto.getEndTime(), dto.getStartTime())
|
.exists();
|
|
if (hasOverlap) {
|
return R.fail("外出时间与已有外出记录重叠,请重新选择时间");
|
}
|
}
|
}
|
|
approvalApplicationsService.save(oaApprovalApplications);
|
// 生成明细记录
|
OaApprovalApplicationAttendance oaApprovalApplicationAttendance = new OaApprovalApplicationAttendance();
|
oaApprovalApplicationAttendance.setApprovalApplicationId(oaApprovalApplications.getId());
|
oaApprovalApplicationAttendance.setStartTime(dto.getStartTime());
|
oaApprovalApplicationAttendance.setEndTime(dto.getEndTime());
|
oaApprovalApplicationAttendance.setDuration(dto.getDuration());
|
oaApprovalApplicationAttendance.setAddress(dto.getAddress());
|
approvalApplicationAttendanceService.save(oaApprovalApplicationAttendance);
|
// 根据节点类型 生成代办
|
oaApprovalTodoService.createApprovalTodos(oaApprovalApplications.getId(), code, approvalFlowNode,
|
Integer.valueOf(sysUser.getDeptId()));
|
return R.ok();
|
}
|
@Log(title = "审批-发起出差申请", businessType = BusinessType.INSERT)
|
@ApiOperation(value = "发起出差申请")
|
@PostMapping(value = "/addBusinessTrip")
|
public R addBusinessTrip(@RequestBody AddBusinessTripDTO dto) {
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
|
String code = "BusinessTrip-"+sdf.format(new Date()) + UUIDUtil.getNumberRandom(5);
|
OaApprovalApplications oaApprovalApplications = new OaApprovalApplications();
|
oaApprovalApplications.setApplicationCode(code);
|
oaApprovalApplications.setApprovalId(ApprovalTypeEnum.BUSINESS_TRIP.getCode());
|
oaApprovalApplications.setApplicantUserId(tokenService.getLoginUser().getUserId().intValue());
|
SysUser sysUser = sysUserService.selectUserById(tokenService.getLoginUser().getUserId());
|
TDept dept = deptService.getById(sysUser.getDeptId());
|
oaApprovalApplications.setApplicantName(sysUser.getNickName());
|
oaApprovalApplications.setDeptId(Integer.valueOf(sysUser.getDeptId()));
|
oaApprovalApplications.setDeptName(dept.getDeptName());
|
oaApprovalApplications.setApplicationDate(LocalDate.now());
|
oaApprovalApplications.setApplicationReason(dto.getApplicationReason());
|
oaApprovalApplications.setApprovalStatus(1);
|
oaApprovalApplications.setAttachmentUrl(dto.getAttachmentUrl());
|
OaApprovalFlowNode approvalFlowNode = approvalFlowNodeService.lambdaQuery()
|
.eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.BUSINESS_TRIP.getCode())
|
.orderByAsc(OaApprovalFlowNode::getSortOrder)
|
.eq(OaApprovalFlowNode::getStatus,1)
|
.last("limit 1")
|
.one();
|
oaApprovalApplications.setCurrentFlowNodeId(approvalFlowNode.getId());
|
List<Integer> approvalIds = approvalApplicationsService.lambdaQuery()
|
.in(OaApprovalApplications::getApprovalStatus, Arrays.asList(1,2))
|
.eq(OaApprovalApplications::getApprovalId, ApprovalTypeEnum.BUSINESS_TRIP.getCode())
|
.eq(OaApprovalApplications::getApplicantUserId, sysUser.getUserId()).list()
|
.stream().map(OaApprovalApplications::getId).collect(Collectors.toList());
|
if (!approvalIds.isEmpty()){
|
// 根据请假时间 查询请假申请记录
|
List<OaApprovalApplicationAttendance> approvalApplicationAttendances = approvalApplicationAttendanceService.lambdaQuery()
|
.in(OaApprovalApplicationAttendance::getApprovalApplicationId,approvalIds)
|
.ge(OaApprovalApplicationAttendance::getStartTime, dto.getStartTime())
|
.le(OaApprovalApplicationAttendance::getEndTime, dto.getEndTime())
|
.list();
|
if (!approvalApplicationAttendances.isEmpty()){
|
boolean hasOverlap = approvalApplicationAttendanceService.lambdaQuery()
|
.in(OaApprovalApplicationAttendance::getApprovalApplicationId, approvalIds)
|
.apply("(start_time < {0} AND end_time > {1})", dto.getEndTime(), dto.getStartTime())
|
.exists();
|
|
if (hasOverlap) {
|
return R.fail("外出时间与已有外出记录重叠,请重新选择时间");
|
}
|
}
|
}
|
approvalApplicationsService.save(oaApprovalApplications);
|
// 生成明细记录
|
OaApprovalApplicationAttendance oaApprovalApplicationAttendance = new OaApprovalApplicationAttendance();
|
oaApprovalApplicationAttendance.setApprovalApplicationId(oaApprovalApplications.getId());
|
oaApprovalApplicationAttendance.setStartTime(dto.getStartTime());
|
oaApprovalApplicationAttendance.setEndTime(dto.getEndTime());
|
oaApprovalApplicationAttendance.setDuration(dto.getDuration());
|
oaApprovalApplicationAttendance.setAddress(dto.getAddress());
|
oaApprovalApplicationAttendance.setProjectName(dto.getProjectName());
|
approvalApplicationAttendanceService.save(oaApprovalApplicationAttendance);
|
// 根据节点类型 生成代办
|
oaApprovalTodoService.createApprovalTodos(oaApprovalApplications.getId(), code, approvalFlowNode,
|
Integer.valueOf(sysUser.getDeptId()));
|
return R.ok();
|
}
|
@Log(title = "审批-发起销假申请", businessType = BusinessType.INSERT)
|
@ApiOperation(value = "发起销假申请")
|
@PostMapping(value = "/addLeaveDestroy")
|
public R addLeaveDestroy(@RequestBody AddLeaveDestroyDTO dto) {
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
|
String code = "LeaveDestroy-"+sdf.format(new Date()) + UUIDUtil.getNumberRandom(5);
|
OaApprovalApplications oaApprovalApplications = new OaApprovalApplications();
|
oaApprovalApplications.setApplicationCode(code);
|
oaApprovalApplications.setApprovalId(ApprovalTypeEnum.LEAVE_DESTROY.getCode());
|
oaApprovalApplications.setApplicantUserId(tokenService.getLoginUser().getUserId().intValue());
|
SysUser sysUser = sysUserService.selectUserById(tokenService.getLoginUser().getUserId());
|
TDept dept = deptService.getById(sysUser.getDeptId());
|
oaApprovalApplications.setApplicantName(sysUser.getNickName());
|
oaApprovalApplications.setDeptId(Integer.valueOf(sysUser.getDeptId()));
|
oaApprovalApplications.setDeptName(dept.getDeptName());
|
oaApprovalApplications.setApplicationDate(LocalDate.now());
|
oaApprovalApplications.setApplicationReason(dto.getApplicationReason());
|
oaApprovalApplications.setApprovalStatus(1);
|
oaApprovalApplications.setAttachmentUrl(dto.getAttachmentUrl());
|
OaApprovalFlowNode approvalFlowNode = approvalFlowNodeService.lambdaQuery()
|
.eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.LEAVE_DESTROY.getCode())
|
.orderByAsc(OaApprovalFlowNode::getSortOrder)
|
.eq(OaApprovalFlowNode::getStatus,1)
|
.last("limit 1")
|
.one();
|
oaApprovalApplications.setCurrentFlowNodeId(approvalFlowNode.getId());
|
// 生成明细记录
|
OaApprovalApplicationAttendance oaApprovalApplicationAttendance = new OaApprovalApplicationAttendance();
|
oaApprovalApplicationAttendance.setStartTime(dto.getStartTime());
|
oaApprovalApplicationAttendance.setEndTime(dto.getEndTime());
|
oaApprovalApplicationAttendance.setDuration(dto.getDuration());
|
List<Integer> approvalIds = approvalApplicationsService.lambdaQuery()
|
.eq(OaApprovalApplications::getApprovalStatus, 2)
|
.eq(OaApprovalApplications::getApprovalId, ApprovalTypeEnum.LEAVE.getCode())
|
.eq(OaApprovalApplications::getApplicantUserId, sysUser.getUserId()).list()
|
.stream().map(OaApprovalApplications::getId).collect(Collectors.toList());
|
if (approvalIds.isEmpty()){
|
return R.fail("销假失败,销假日期范围内未查询到请假申请");
|
}
|
// 根据请假时间 查询请假申请记录
|
OaApprovalApplicationAttendance approvalApplicationAttendance = approvalApplicationAttendanceService.lambdaQuery()
|
.in(OaApprovalApplicationAttendance::getApprovalApplicationId,approvalIds)
|
.ge(OaApprovalApplicationAttendance::getStartTime, dto.getStartTime())
|
.le(OaApprovalApplicationAttendance::getEndTime, dto.getEndTime())
|
.eq(OaApprovalApplicationAttendance::getIsLeave, 1)
|
.orderByDesc(OaApprovalApplicationAttendance::getId)
|
.last("limit 1").one();
|
if (approvalApplicationAttendance==null){
|
return R.fail("销假失败,销假日期范围内未查询到请假申请");
|
}
|
OaApprovalApplications approvalApplications = approvalApplicationsService.getById(approvalApplicationAttendance.getApprovalApplicationId());
|
if (approvalApplications.getApprovalStatus()!=2){
|
return R.fail("销假失败,请假申请未通过");
|
}
|
approvalApplicationsService.save(oaApprovalApplications);
|
oaApprovalApplicationAttendance.setApprovalApplicationId(oaApprovalApplications.getId());
|
oaApprovalApplicationAttendance.setLeaveApprovalApplicationId(approvalApplicationAttendance.getApprovalApplicationId());
|
approvalApplicationAttendanceService.save(oaApprovalApplicationAttendance);
|
// 根据节点类型 生成代办
|
oaApprovalTodoService.createApprovalTodos(oaApprovalApplications.getId(), code, approvalFlowNode,
|
Integer.valueOf(sysUser.getDeptId()));
|
return R.ok();
|
}
|
|
@Log(title = "审批-发起报销申请", businessType = BusinessType.INSERT)
|
@ApiOperation(value = "发起报销申请")
|
@PostMapping(value = "/addReimbursement")
|
public R addReimbursement(@RequestBody AddReimbursementDTO dto) {
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
|
String code = "Reimbursement-"+sdf.format(new Date()) + UUIDUtil.getNumberRandom(5);
|
OaApprovalApplications oaApprovalApplications = new OaApprovalApplications();
|
oaApprovalApplications.setApplicationCode(code);
|
oaApprovalApplications.setApprovalId(ApprovalTypeEnum.REIMBURSEMENT.getCode());
|
oaApprovalApplications.setApplicantUserId(tokenService.getLoginUser().getUserId().intValue());
|
SysUser sysUser = sysUserService.selectUserById(tokenService.getLoginUser().getUserId());
|
TDept dept = deptService.getById(sysUser.getDeptId());
|
oaApprovalApplications.setApplicantName(sysUser.getNickName());
|
oaApprovalApplications.setDeptId(Integer.valueOf(sysUser.getDeptId()));
|
oaApprovalApplications.setDeptName(dept.getDeptName());
|
oaApprovalApplications.setApplicationDate(LocalDate.now());
|
oaApprovalApplications.setApprovalStatus(1);
|
OaApprovalFlowNode approvalFlowNode = approvalFlowNodeService.lambdaQuery()
|
.eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.REIMBURSEMENT.getCode())
|
.orderByAsc(OaApprovalFlowNode::getSortOrder)
|
.eq(OaApprovalFlowNode::getStatus,1)
|
.last("limit 1")
|
.one();
|
oaApprovalApplications.setCurrentFlowNodeId(approvalFlowNode.getId());
|
approvalApplicationsService.save(oaApprovalApplications);
|
OaApprovalApplicationReimbursement oaApprovalApplicationReimbursement = new OaApprovalApplicationReimbursement();
|
oaApprovalApplicationReimbursement.setApprovalApplicationId(oaApprovalApplications.getId());
|
oaApprovalApplicationReimbursement.setType(dto.getType());
|
approvalApplicationReimbursementService.save(oaApprovalApplicationReimbursement);
|
BigDecimal total = new BigDecimal(0);
|
List<OaApprovalApplicationReimbursementItem> oaApprovalApplicationReimbursementItems = new ArrayList<>();
|
for (OaApprovalApplicationReimbursementItem oaApprovalApplicationReimbursementItem : oaApprovalApplicationReimbursementItems) {
|
oaApprovalApplicationReimbursementItem.setApprovalApplicationId(oaApprovalApplicationReimbursement.getId());
|
total = total.add(oaApprovalApplicationReimbursementItem.getAmount());
|
}
|
oaApprovalApplicationReimbursement.setReimbursementAmount(total);
|
approvalApplicationReimbursementService.updateById(oaApprovalApplicationReimbursement);
|
approvalApplicationReimbursementItemService.saveBatch(oaApprovalApplicationReimbursementItems);
|
// 根据节点类型 生成代办
|
oaApprovalTodoService.createApprovalTodos(oaApprovalApplications.getId(), code, approvalFlowNode,
|
Integer.valueOf(sysUser.getDeptId()));
|
return R.ok();
|
}
|
@Log(title = "审批-发起款项申请", businessType = BusinessType.INSERT)
|
@ApiOperation(value = "发起款项申请")
|
@PostMapping(value = "/addMoney")
|
public R addMoney(@RequestBody AddMoneyDTO dto) {
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
|
String code = "Money-"+sdf.format(new Date()) + UUIDUtil.getNumberRandom(5);
|
OaApprovalApplications oaApprovalApplications = new OaApprovalApplications();
|
oaApprovalApplications.setApplicationCode(code);
|
oaApprovalApplications.setApprovalId(ApprovalTypeEnum.MONEY.getCode());
|
oaApprovalApplications.setApplicantUserId(tokenService.getLoginUser().getUserId().intValue());
|
SysUser sysUser = sysUserService.selectUserById(tokenService.getLoginUser().getUserId());
|
TDept dept = deptService.getById(sysUser.getDeptId());
|
oaApprovalApplications.setApplicantName(sysUser.getNickName());
|
oaApprovalApplications.setDeptId(Integer.valueOf(sysUser.getDeptId()));
|
oaApprovalApplications.setDeptName(dept.getDeptName());
|
oaApprovalApplications.setApplicationDate(LocalDate.now());
|
oaApprovalApplications.setApprovalStatus(1);
|
OaApprovalFlowNode approvalFlowNode = approvalFlowNodeService.lambdaQuery()
|
.eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.MONEY.getCode())
|
.orderByAsc(OaApprovalFlowNode::getSortOrder)
|
.eq(OaApprovalFlowNode::getStatus,1)
|
.last("limit 1")
|
.one();
|
oaApprovalApplications.setCurrentFlowNodeId(approvalFlowNode.getId());
|
approvalApplicationsService.save(oaApprovalApplications);
|
OaApprovalApplicationMoney oaApprovalApplicationMoney = new OaApprovalApplicationMoney();
|
BeanUtils.copyProperties(dto, oaApprovalApplicationMoney);
|
oaApprovalApplicationMoney.setApprovalApplicationId(oaApprovalApplications.getId());
|
approvalApplicationMoneyService.save(oaApprovalApplicationMoney);
|
// 根据节点类型 生成代办
|
oaApprovalTodoService.createApprovalTodos(oaApprovalApplications.getId(), code, approvalFlowNode,
|
Integer.valueOf(sysUser.getDeptId()));
|
return R.ok();
|
}
|
@Log(title = "审批-发起合同文件申请", businessType = BusinessType.INSERT)
|
@ApiOperation(value = "发起合同文件申请")
|
@PostMapping(value = "/addContract")
|
public R addContract(@RequestBody AddContractDTO dto) {
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
|
String code = "Contract-"+sdf.format(new Date()) + UUIDUtil.getNumberRandom(5);
|
OaApprovalApplications oaApprovalApplications = new OaApprovalApplications();
|
oaApprovalApplications.setApplicationCode(code);
|
oaApprovalApplications.setApprovalId(ApprovalTypeEnum.CONTRACT.getCode());
|
oaApprovalApplications.setApplicantUserId(tokenService.getLoginUser().getUserId().intValue());
|
SysUser sysUser = sysUserService.selectUserById(tokenService.getLoginUser().getUserId());
|
TDept dept = deptService.getById(sysUser.getDeptId());
|
oaApprovalApplications.setApplicantName(sysUser.getNickName());
|
oaApprovalApplications.setDeptId(Integer.valueOf(sysUser.getDeptId()));
|
oaApprovalApplications.setDeptName(dept.getDeptName());
|
oaApprovalApplications.setApplicationDate(LocalDate.now());
|
oaApprovalApplications.setApplicationReason(dto.getApplicationReason());
|
oaApprovalApplications.setAttachmentUrl(dto.getAttachmentUrl());
|
oaApprovalApplications.setApprovalStatus(1);
|
OaApprovalFlowNode approvalFlowNode = approvalFlowNodeService.lambdaQuery()
|
.eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.CONTRACT.getCode())
|
.orderByAsc(OaApprovalFlowNode::getSortOrder)
|
.eq(OaApprovalFlowNode::getStatus,1)
|
.last("limit 1")
|
.one();
|
oaApprovalApplications.setCurrentFlowNodeId(approvalFlowNode.getId());
|
approvalApplicationsService.save(oaApprovalApplications);
|
|
OaApprovalApplicationContract oaApprovalApplicationContract = new OaApprovalApplicationContract();
|
oaApprovalApplicationContract.setContractUrl(dto.getContractUrl());
|
oaApprovalApplicationContract.setApprovalApplicationId(oaApprovalApplications.getId());
|
approvalApplicationContractService.save(oaApprovalApplicationContract);
|
// 根据节点类型 生成代办
|
oaApprovalTodoService.createApprovalTodos(oaApprovalApplications.getId(), code, approvalFlowNode,
|
Integer.valueOf(sysUser.getDeptId()));
|
return R.ok();
|
}
|
@Log(title = "审批-发起进度款支付申请", businessType = BusinessType.INSERT)
|
@ApiOperation(value = "发起进度款支付申请")
|
@PostMapping(value = "/addPayment")
|
public R addPayment(@RequestBody AddPaymentDTO dto) {
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
|
String code = "Payment-"+sdf.format(new Date()) + UUIDUtil.getNumberRandom(5);
|
OaApprovalApplications oaApprovalApplications = new OaApprovalApplications();
|
oaApprovalApplications.setApplicationCode(code);
|
oaApprovalApplications.setApprovalId(ApprovalTypeEnum.PAYMENT.getCode());
|
oaApprovalApplications.setApplicantUserId(tokenService.getLoginUser().getUserId().intValue());
|
SysUser sysUser = sysUserService.selectUserById(tokenService.getLoginUser().getUserId());
|
TDept dept = deptService.getById(sysUser.getDeptId());
|
oaApprovalApplications.setApplicantName(sysUser.getNickName());
|
oaApprovalApplications.setDeptId(Integer.valueOf(sysUser.getDeptId()));
|
oaApprovalApplications.setDeptName(dept.getDeptName());
|
oaApprovalApplications.setApplicationDate(LocalDate.now());
|
oaApprovalApplications.setApplicationReason(dto.getApplicationReason());
|
oaApprovalApplications.setAttachmentUrl(dto.getAttachmentUrl());
|
oaApprovalApplications.setApprovalStatus(1);
|
OaApprovalFlowNode approvalFlowNode = approvalFlowNodeService.lambdaQuery()
|
.eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.PAYMENT.getCode())
|
.orderByAsc(OaApprovalFlowNode::getSortOrder)
|
.eq(OaApprovalFlowNode::getStatus,1)
|
.last("limit 1")
|
.one();
|
oaApprovalApplications.setCurrentFlowNodeId(approvalFlowNode.getId());
|
approvalApplicationsService.save(oaApprovalApplications);
|
OaApprovalApplicationPayment oaApprovalApplicationPayment = new OaApprovalApplicationPayment();
|
oaApprovalApplicationPayment.setApprovalApplicationId(oaApprovalApplications.getId());
|
oaApprovalApplicationPayment.setProjectId(dto.getProjectId());
|
oaApprovalApplicationPayment.setContractAmount(dto.getContractAmount());
|
oaApprovalApplicationPayment.setApplyAmount(dto.getApplyAmount());
|
approvalApplicationPaymentService.save(oaApprovalApplicationPayment);
|
// 根据节点类型 生成代办
|
oaApprovalTodoService.createApprovalTodos(oaApprovalApplications.getId(), code, approvalFlowNode,
|
Integer.valueOf(sysUser.getDeptId()));
|
return R.ok();
|
}
|
@Log(title = "审批-发起内部联系单申请", businessType = BusinessType.INSERT)
|
@ApiOperation(value = "发起内部联系单申请")
|
@PostMapping(value = "/addContact")
|
public R addContact(@RequestBody AddContactDTO dto) {
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
|
String code = "Contact-"+sdf.format(new Date()) + UUIDUtil.getNumberRandom(5);
|
OaApprovalApplications oaApprovalApplications = new OaApprovalApplications();
|
oaApprovalApplications.setApplicationCode(code);
|
oaApprovalApplications.setApprovalId(ApprovalTypeEnum.CONTACT.getCode());
|
oaApprovalApplications.setApplicantUserId(tokenService.getLoginUser().getUserId().intValue());
|
SysUser sysUser = sysUserService.selectUserById(tokenService.getLoginUser().getUserId());
|
TDept dept = deptService.getById(sysUser.getDeptId());
|
oaApprovalApplications.setApplicantName(sysUser.getNickName());
|
oaApprovalApplications.setDeptId(Integer.valueOf(sysUser.getDeptId()));
|
oaApprovalApplications.setDeptName(dept.getDeptName());
|
oaApprovalApplications.setApplicationDate(LocalDate.now());
|
oaApprovalApplications.setApplicationReason(dto.getApplicationReason());
|
oaApprovalApplications.setApprovalStatus(1);
|
OaApprovalFlowNode approvalFlowNode = approvalFlowNodeService.lambdaQuery()
|
.eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.CONTACT.getCode())
|
.orderByAsc(OaApprovalFlowNode::getSortOrder)
|
.eq(OaApprovalFlowNode::getStatus,1)
|
.last("limit 1")
|
.one();
|
oaApprovalApplications.setCurrentFlowNodeId(approvalFlowNode.getId());
|
approvalApplicationsService.save(oaApprovalApplications);
|
OaApprovalApplicationContact oaApprovalApplicationContact = new OaApprovalApplicationContact();
|
oaApprovalApplicationContact.setApprovalApplicationId(oaApprovalApplications.getId());
|
oaApprovalApplicationContact.setDescription(dto.getDescription());
|
approvalApplicationContactService.save(oaApprovalApplicationContact);
|
// 根据节点类型 生成代办
|
oaApprovalTodoService.createApprovalTodos(oaApprovalApplications.getId(), code, approvalFlowNode,
|
Integer.valueOf(sysUser.getDeptId()));
|
return R.ok();
|
}
|
@Log(title = "审批-发起广告制作申请", businessType = BusinessType.INSERT)
|
@ApiOperation(value = "发起广告制作申请")
|
@PostMapping(value = "/addAdvertisement")
|
public R addAdvertisement(@RequestBody AddAdvertisementDTO dto) {
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
|
String code = "Advertisement-"+sdf.format(new Date()) + UUIDUtil.getNumberRandom(5);
|
OaApprovalApplications oaApprovalApplications = new OaApprovalApplications();
|
oaApprovalApplications.setApplicationCode(code);
|
oaApprovalApplications.setApprovalId(ApprovalTypeEnum.ADVERTISEMENT.getCode());
|
oaApprovalApplications.setApplicantUserId(tokenService.getLoginUser().getUserId().intValue());
|
SysUser sysUser = sysUserService.selectUserById(tokenService.getLoginUser().getUserId());
|
TDept dept = deptService.getById(sysUser.getDeptId());
|
oaApprovalApplications.setApplicantName(sysUser.getNickName());
|
oaApprovalApplications.setDeptId(Integer.valueOf(sysUser.getDeptId()));
|
oaApprovalApplications.setDeptName(dept.getDeptName());
|
oaApprovalApplications.setApplicationDate(LocalDate.now());
|
oaApprovalApplications.setAttachmentUrl(dto.getAttachmentUrl());
|
oaApprovalApplications.setApplicationReason(dto.getApplicationReason());
|
oaApprovalApplications.setApprovalStatus(1);
|
OaApprovalFlowNode approvalFlowNode = approvalFlowNodeService.lambdaQuery()
|
.eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.ADVERTISEMENT.getCode())
|
.orderByAsc(OaApprovalFlowNode::getSortOrder)
|
.eq(OaApprovalFlowNode::getStatus,1)
|
.last("limit 1")
|
.one();
|
oaApprovalApplications.setCurrentFlowNodeId(approvalFlowNode.getId());
|
approvalApplicationsService.save(oaApprovalApplications);
|
OaApprovalApplicationAdvertisement oaApprovalApplicationAdvertisement = new OaApprovalApplicationAdvertisement();
|
oaApprovalApplicationAdvertisement.setApprovalApplicationId(oaApprovalApplications.getId());
|
oaApprovalApplicationAdvertisement.setTitle(dto.getTitle());
|
oaApprovalApplicationAdvertisement.setContent(dto.getContent());
|
oaApprovalApplicationAdvertisement.setNumber(dto.getNumber());
|
oaApprovalApplicationAdvertisement.setTotalAmount(dto.getTotalAmount());
|
oaApprovalApplicationAdvertisement.setSpec(dto.getSpec());
|
oaApprovalApplicationAdvertisement.setStatus(false);
|
approvalApplicationAdvertisementService.save(oaApprovalApplicationAdvertisement);
|
// 根据节点类型 生成代办
|
oaApprovalTodoService.createApprovalTodos(oaApprovalApplications.getId(), code, approvalFlowNode,
|
Integer.valueOf(sysUser.getDeptId()));
|
return R.ok();
|
}
|
|
@Log(title = "审批-撤回通用审批单", businessType = BusinessType.UPDATE)
|
@ApiOperation(value = "撤回审批单:仅更新状态为已撤回")
|
@PutMapping(value = "/withdraw/{id}")
|
public R withdraw(@PathVariable Integer id) {
|
OaApprovalApplications current = approvalApplicationsService.getById(id);
|
if (current == null) {
|
throw new ServiceException("审批单不存在");
|
}
|
if (!ApprovalStatusEnum.PENDING.getCode().equals(current.getApprovalStatus())) {
|
throw new ServiceException("仅待审批状态可撤回");
|
}
|
OaApprovalApplications update = new OaApprovalApplications();
|
update.setId(id);
|
update.setApprovalStatus(ApprovalStatusEnum.CANCELED.getCode());
|
approvalApplicationsService.updateById(update);
|
return R.ok();
|
}
|
}
|