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.exception.ServiceException;
import com.ruoyi.common.utils.bean.BeanUtils;
import com.ruoyi.framework.web.service.TokenService;
import com.ruoyi.system.dto.AddAdvertisementDTO;
import com.ruoyi.system.dto.AddBusinessTripDTO;
import com.ruoyi.system.dto.AddContactDTO;
import com.ruoyi.system.dto.AddContractDTO;
import com.ruoyi.system.dto.AddLeaveDTO;
import com.ruoyi.system.dto.AddLeaveDestroyDTO;
import com.ruoyi.system.dto.AddMoneyDTO;
import com.ruoyi.system.dto.AddOutDTO;
import com.ruoyi.system.dto.AddPaymentDTO;
import com.ruoyi.system.dto.AddReimbursementDTO;
import com.ruoyi.system.emums.ApprovalStatusEnum;
import com.ruoyi.system.emums.ApprovalTypeEnum;
import com.ruoyi.system.model.OaApprovalApplicationAdvertisement;
import com.ruoyi.system.model.OaApprovalApplicationAttendance;
import com.ruoyi.system.model.OaApprovalApplicationContact;
import com.ruoyi.system.model.OaApprovalApplicationContract;
import com.ruoyi.system.model.OaApprovalApplicationMoney;
import com.ruoyi.system.model.OaApprovalApplicationPayment;
import com.ruoyi.system.model.OaApprovalApplicationReimbursement;
import com.ruoyi.system.model.OaApprovalApplicationReimbursementItem;
import com.ruoyi.system.model.OaApprovalApplications;
import com.ruoyi.system.model.OaApprovalFlowNode;
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.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
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;
/**
*
* 审批申请记录表 前端控制器
*
*
* @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 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 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 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 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 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 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 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 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();
}
}