From 8537a164dbd4c8696c3269141a8f18922d4ed15f Mon Sep 17 00:00:00 2001
From: 无关风月 <443237572@qq.com>
Date: 星期二, 21 十月 2025 09:02:11 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationsController.java | 621 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 619 insertions(+), 2 deletions(-)
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationsController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationsController.java
index cc9bf2d..d6ffde2 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationsController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationsController.java
@@ -1,8 +1,65 @@
package com.ruoyi.web.controller.api;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+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.OaApprovalApplicationAd;
+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.OaApprovalApplicationAdService;
+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.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.*;
+
+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;
/**
* <p>
@@ -13,8 +70,568 @@
* @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 OaApprovalApplicationAdService 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)
+ @Transactional
+ @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")
+ @Transactional
+ 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 = "发起出差申请")
+ @Transactional
+ @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 = "发起销假申请")
+ @Transactional
+ @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)
+ .le(OaApprovalApplicationAttendance::getStartTime, dto.getStartTime())
+ .ge(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();
+ }
+ @ApiOperation(value = "查询当前用户审批通过且未销假的请假单")
+ @GetMapping(value = "/listLeaveApplications")
+ public R<List<OaApprovalApplicationAttendance>> listLeaveApplications() {
+ List<Integer> applicationsIds = approvalApplicationsService.lambdaQuery()
+ .eq(OaApprovalApplications::getApprovalId, ApprovalTypeEnum.LEAVE.getCode())
+ .eq(OaApprovalApplications::getApplicantUserId, tokenService.getLoginUser().getUserId())
+ .eq(OaApprovalApplications::getApprovalStatus, 2)
+ .list().stream().map(OaApprovalApplications::getId).collect(Collectors.toList());
+ if (applicationsIds.isEmpty()){
+ return R.ok(new ArrayList<>());
+ }
+ List<OaApprovalApplicationAttendance> list = approvalApplicationAttendanceService.lambdaQuery()
+ .in(OaApprovalApplicationAttendance::getApprovalApplicationId, applicationsIds).list();
+ return R.ok(list);
+ }
+ @Log(title = "审批-发起报销申请", businessType = BusinessType.INSERT)
+ @ApiOperation(value = "发起报销申请")
+ @Transactional
+ @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 : dto.getItems()) {
+ oaApprovalApplicationReimbursementItem.setApprovalApplicationId(oaApprovalApplications.getId());
+ total = total.add(oaApprovalApplicationReimbursementItem.getAmount());
+ oaApprovalApplicationReimbursementItems.add(oaApprovalApplicationReimbursementItem);
+ }
+ 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 = "发起款项申请")
+ @Transactional
+ @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")
+ @Transactional
+ 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 = "发起进度款支付申请")
+ @Transactional
+ @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 = "发起内部联系单申请")
+ @Transactional
+ @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 = "发起广告制作申请")
+ @Transactional
+ @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);
+ OaApprovalApplicationAd oaApprovalApplicationAd = new OaApprovalApplicationAd();
+ oaApprovalApplicationAd.setApprovalApplicationId(oaApprovalApplications.getId());
+ oaApprovalApplicationAd.setTitle(dto.getTitle());
+ oaApprovalApplicationAd.setContent(dto.getContent());
+ oaApprovalApplicationAd.setNumber(dto.getNumber());
+ oaApprovalApplicationAd.setTotalAmount(dto.getTotalAmount());
+ oaApprovalApplicationAd.setSpec(dto.getSpec());
+ oaApprovalApplicationAd.setStatus(0);
+ approvalApplicationAdvertisementService.save(oaApprovalApplicationAd);
+ // 根据节点类型 生成代办
+ 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();
+ }
}
--
Gitblit v1.7.1