| | |
| | | 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> |
| | |
| | | * @since 2025-09-15 |
| | | */ |
| | | @RestController |
| | | @Api("审批-发起审批") |
| | | @Api(tags ="审批-发起审批") |
| | | @RequestMapping("/oa-approval-applications") |
| | | public class OaApprovalApplicationsController { |
| | | @Resource |
| | |
| | | @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()); |
| | |
| | | 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(); |
| | | } |
| | | } |