From 03587b58b343956f910a653c37b9a7bcd84e4af9 Mon Sep 17 00:00:00 2001
From: mitao <2763622819@qq.com>
Date: 星期五, 19 九月 2025 18:54:03 +0800
Subject: [PATCH] 资产管理-资产领用列表 阿里云OSS文件上传

---
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationsController.java |  557 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 548 insertions(+), 9 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 60f51a2..29b8690 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
@@ -6,25 +6,64 @@
 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.SetApprovalDTO;
+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.*;
-import com.ruoyi.system.utils.ApprovalTypeEnum;
+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;
 
 /**
  * <p>
@@ -35,7 +74,7 @@
  * @since 2025-09-15
  */
 @RestController
-@Api("审批-发起审批")
+@Api(tags ="审批-发起审批")
 @RequestMapping("/oa-approval-applications")
 public class OaApprovalApplicationsController {
     @Resource
@@ -45,20 +84,38 @@
     @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 = "/setApproval")
-    public R setDept(@RequestBody AddLeaveDTO dto) {
+    @PostMapping(value = "/addLeave")
+    public R addLeave(@RequestBody AddLeaveDTO dto) {
         SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
-        String code = "qj"+sdf.format(new Date()) + UUIDUtil.getNumberRandom(5);
+        String code = "Leave-"+sdf.format(new Date()) + UUIDUtil.getNumberRandom(5);
         OaApprovalApplications oaApprovalApplications = new OaApprovalApplications();
         oaApprovalApplications.setApplicationCode(code);
-        oaApprovalApplications.setApprovalId(ApprovalTypeEnum.LEAVE_APPLICATION.getId());
+        oaApprovalApplications.setApprovalId(ApprovalTypeEnum.LEAVE.getCode());
         oaApprovalApplications.setApplicantUserId(tokenService.getLoginUser().getUserId().intValue());
         SysUser sysUser = sysUserService.selectUserById(tokenService.getLoginUser().getUserId());
         TDept dept = deptService.getById(sysUser.getDeptId());
@@ -69,8 +126,490 @@
         oaApprovalApplications.setApplicationReason(dto.getApplicationReason());
         oaApprovalApplications.setApprovalStatus(1);
         oaApprovalApplications.setAttachmentUrl(dto.getAttachmentUrl());
-//        oaApprovalApplications.setCurrentFlowNodeId();
+        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();
     }
 }

--
Gitblit v1.7.1