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(); } }