From bdd967acce69d2420d9866789dfcee42c7e77023 Mon Sep 17 00:00:00 2001 From: mitao <2763622819@qq.com> Date: 星期五, 19 九月 2025 14:10:44 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- ruoyi-system/src/main/java/com/ruoyi/system/dto/AddMoneyDTO.java | 38 ruoyi-system/src/main/java/com/ruoyi/system/vo/LeaveDestroyDetailVO.java | 39 ruoyi-system/src/main/java/com/ruoyi/system/dto/AddContactDTO.java | 22 ruoyi-system/src/main/java/com/ruoyi/system/vo/ChangeListVO.java | 31 ruoyi-system/src/main/java/com/ruoyi/system/vo/DisposeListVO.java | 31 ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplications.java | 8 ruoyi-system/src/main/java/com/ruoyi/system/vo/StorageDetailVO.java | 39 ruoyi-system/src/main/java/com/ruoyi/system/dto/AddOutDTO.java | 29 ruoyi-system/src/main/java/com/ruoyi/system/dto/AddLeaveDestroyDTO.java | 30 ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationDispose.java | 4 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalFlowAuditController.java | 128 ++ ruoyi-system/src/main/java/com/ruoyi/system/query/ApprovalTodoListQuery.java | 15 ruoyi-system/src/main/java/com/ruoyi/system/dto/AddBusinessTripDTO.java | 31 ruoyi-system/src/main/resources/mapper/system/OaApprovalTodoMapper.xml | 10 ruoyi-system/src/main/java/com/ruoyi/system/vo/MoneyDetailVO.java | 50 + ruoyi-system/src/main/java/com/ruoyi/system/vo/GrabDetailVO.java | 41 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalTodoController.java | 380 ++++++++ ruoyi-system/src/main/java/com/ruoyi/system/vo/BackListVO.java | 31 ruoyi-system/src/main/java/com/ruoyi/system/vo/BorrowListVO.java | 31 ruoyi-system/src/main/java/com/ruoyi/system/vo/BorrowDetailVO.java | 40 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationsController.java | 524 +++++++++++ ruoyi-system/src/main/java/com/ruoyi/system/vo/ReimbursementDetailVO.java | 35 ruoyi-system/src/main/java/com/ruoyi/system/vo/DisposeDetailVO.java | 46 + ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalTodoService.java | 8 ruoyi-system/src/main/java/com/ruoyi/system/vo/ContactDetailVO.java | 31 ruoyi-system/src/main/java/com/ruoyi/system/emums/ApprovalFlowNodeEnum.java | 57 + ruoyi-system/src/main/java/com/ruoyi/system/mapper/OaApprovalTodoMapper.java | 7 ruoyi-system/src/main/java/com/ruoyi/system/dto/AuditDTO.java | 21 ruoyi-system/src/main/java/com/ruoyi/system/vo/ApprovalFlowNodeListVO.java | 23 ruoyi-system/src/main/java/com/ruoyi/system/dto/SetApprovalDTO.java | 4 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalController.java | 2 ruoyi-system/src/main/java/com/ruoyi/system/vo/LeaveDetailVO.java | 41 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalFlowNodeController.java | 29 ruoyi-system/src/main/java/com/ruoyi/system/dto/AddReimbursementDTO.java | 22 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaNotificationController.java | 8 ruoyi-system/src/main/java/com/ruoyi/system/vo/BackDetailVO.java | 44 ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationReimbursement.java | 7 ruoyi-system/src/main/java/com/ruoyi/system/vo/AdvertisementDetailVO.java | 51 + ruoyi-system/src/main/java/com/ruoyi/system/vo/OutDetailVO.java | 39 ruoyi-system/src/main/java/com/ruoyi/system/vo/PaymentDetailVO.java | 32 ruoyi-system/src/main/java/com/ruoyi/system/model/OaApproval.java | 2 ruoyi-system/src/main/java/com/ruoyi/system/vo/StorageListVO.java | 59 + ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationReimbursementItem.java | 4 ruoyi-system/src/main/java/com/ruoyi/system/vo/PurchaseDetailVO.java | 42 ruoyi-system/src/main/java/com/ruoyi/system/dto/AddContractDTO.java | 25 ruoyi-system/src/main/java/com/ruoyi/system/vo/GrabListVO.java | 34 /dev/null | 175 --- ruoyi-system/src/main/java/com/ruoyi/system/vo/PurchaseListVO.java | 33 ruoyi-system/src/main/java/com/ruoyi/system/vo/ApprovalTodoVO.java | 69 + ruoyi-system/src/main/java/com/ruoyi/system/vo/ChangeDetailVO.java | 46 + ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalTodo.java | 4 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalTodoServiceImpl.java | 24 ruoyi-system/src/main/java/com/ruoyi/system/vo/BusinessTripDetailVO.java | 45 ruoyi-system/src/main/java/com/ruoyi/system/vo/ContractDetailVO.java | 35 ruoyi-system/src/main/java/com/ruoyi/system/dto/AddPaymentDTO.java | 29 ruoyi-system/src/main/java/com/ruoyi/system/dto/AddAdvertisementDTO.java | 47 + ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationAttendance.java | 4 57 files changed, 2,524 insertions(+), 212 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 a159ee5..4440d2e 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,13 +6,27 @@ 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.utils.bean.BeanUtils; import com.ruoyi.framework.web.service.TokenService; -import com.ruoyi.system.dto.AddLeaveDTO; -import com.ruoyi.system.dto.SetApprovalDTO; +import com.ruoyi.system.dto.*; +import com.ruoyi.system.emums.ApprovalFlowNodeEnum; +import com.ruoyi.system.emums.ApprovalTypeEnum; +import com.ruoyi.system.model.*; 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; @@ -22,11 +36,17 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import oshi.driver.mac.net.NetStat; 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; import com.ruoyi.system.emums.ApprovalStatusEnum; import com.ruoyi.common.exception.ServiceException; @@ -39,7 +59,7 @@ * @since 2025-09-15 */ @RestController -@Api("审批-发起审批") +@Api(tags ="审批-发起审批") @RequestMapping("/oa-approval-applications") public class OaApprovalApplicationsController { @Resource @@ -49,20 +69,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()); @@ -73,8 +111,472 @@ 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(); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalController.java index edec725..e6339f8 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalController.java @@ -34,7 +34,7 @@ */ @RestController @RequestMapping("/oa-approval") -@Api("审批流程设计") +@Api(tags ="审批流程设计") public class OaApprovalController { @Resource private OaApprovalService oaApprovalService; diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalFlowAuditController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalFlowAuditController.java index 3b25cff..f3df0be 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalFlowAuditController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalFlowAuditController.java @@ -1,8 +1,26 @@ package com.ruoyi.web.controller.api; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +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.enums.BusinessType; +import com.ruoyi.framework.web.service.TokenService; +import com.ruoyi.system.dto.AddLeaveDTO; +import com.ruoyi.system.dto.AuditDTO; +import com.ruoyi.system.model.*; +import com.ruoyi.system.service.*; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.PostMapping; +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.time.LocalDateTime; +import java.util.List; /** * <p> @@ -14,7 +32,117 @@ */ @RestController @RequestMapping("/oa-approval-flow-audit") +@Api(tags = "通用审批接口") public class OaApprovalFlowAuditController { + @Resource + private OaApprovalTodoService approvalTodoService; + @Resource + private OaApprovalFlowAuditService approvalFlowAuditService; + @Resource + private OaApprovalApplicationStorageService approvalApplicationStorageService; + @Resource + private OaApprovalApplicationPurchaseService approvalApplicationPurchaseService; + @Resource + private OaApprovalApplicationAssetItemService approvalApplicationAssetItemService; + @Resource + private TokenService tokenService; + @Resource + private OaApprovalService approvalService; + @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 AssetMainService assetMainService; + @Resource + private OaApprovalApplicationReimbursementService approvalApplicationReimbursementService; + @Resource + private OaApprovalApplicationReimbursementItemService approvalApplicationReimbursementItemService; + @Resource + private OaApprovalFlowNodeService approvalFlowNodeService; + @Resource + private OaApprovalApplicationAssetService approvalApplicationAssetService; + @Resource + private ISysUserService sysUserService; + @Resource + private OaApprovalApplicationDisposeService approvalApplicationDisposeService; + @Resource + private OaApprovalApplicationChangeService approvalApplicationChangeService; + @Resource + private OaApprovalApplicationAttendanceService approvalApplicationAttendanceService; + @Resource + private TDeptService deptService; + @Resource + private OaApprovalTodoService oaApprovalTodoService; + @Resource + private OaApprovalFlowService approvalFlowService; + + + + @Log(title = "审批-通用审批接口", businessType = BusinessType.INSERT) + @ApiOperation(value = "通用审批接口") + @PostMapping(value = "/audit") + public R addLeave(@RequestBody AuditDTO dto) { + OaApprovalApplications approvalApplications = approvalApplicationsService.getById(dto.getApprovalApplicationId()); + Integer currentFlowNodeId = approvalApplications.getCurrentFlowNodeId(); + Long userId = tokenService.getLoginUser().getUserId(); + SysUser sysUser = sysUserService.selectUserById(userId); + + OaApprovalTodo approvalTodo = approvalTodoService.lambdaQuery().eq(OaApprovalTodo::getUserId, userId) + .eq(OaApprovalTodo::getFlowNodeId, currentFlowNodeId) + .eq(OaApprovalTodo::getApplicationId, approvalApplications.getId()) + .last("limit 1").one(); + approvalTodo.setStatus(1); + approvalTodo.setHandleTime(LocalDateTime.now()); + approvalTodoService.updateById(approvalTodo); + + OaApproval approval = approvalService.getById(approvalApplications.getApprovalId()); + if (dto.getApprovalStatus()==0){ + // 中断审批流程 + approvalApplications.setApprovalStatus(3); + approvalApplicationsService.updateById(approvalApplications); + // 删除除当前审批人该申请单的未处理的所有待办 + approvalTodoService.remove(new LambdaQueryWrapper<OaApprovalTodo>() + .eq(OaApprovalTodo::getApplicationId, approvalApplications.getId()) + .eq(OaApprovalTodo::getStatus,0)); + } + OaApprovalFlowNode oaApprovalFlowNode = approvalFlowNodeService.getById(currentFlowNodeId); + OaApprovalFlowAudit approvalFlowAudit = new OaApprovalFlowAudit(); + approvalFlowAudit.setApprovalApplicationId(approvalApplications.getId()); + approvalFlowAudit.setFlowNodeId(approvalApplications.getCurrentFlowNodeId()); + approvalFlowAudit.setFlowName(oaApprovalFlowNode.getFlowName()); + approvalFlowAudit.setSortOrder(oaApprovalFlowNode.getSortOrder()); + approvalFlowAudit.setUserId(userId.intValue()); + approvalFlowAudit.setUserName(sysUser.getUserName()); + approvalFlowAudit.setApprovalStatus(dto.getApprovalStatus() != 0); + approvalFlowAudit.setApprovalTime(LocalDateTime.now()); + approvalFlowAudit.setReason(dto.getReason()); + approvalFlowAuditService.save(approvalFlowAudit); + List<OaApprovalFlowNode> approvalFlowNodes = approvalFlowNodeService.lambdaQuery().eq(OaApprovalFlowNode::getApprovalId, approval.getId()) + .orderByDesc(OaApprovalFlowNode::getSortOrder).list(); + if (dto.getApprovalStatus()==1){ + for (OaApprovalFlowNode approvalFlowNode : approvalFlowNodes) { + // 判断当前是否处于最后一个节点 + if(approvalApplications.getCurrentFlowNodeId().equals(approvalFlowNode.getId())){ + // 审批通过 审批流程结束 + approvalApplications.setApprovalStatus(2); + approvalApplicationsService.updateById(approvalApplications); + if (approval.getApprovalCategory()==1) + break; + } + } + } + + return R.ok(); + } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalFlowNodeController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalFlowNodeController.java index d3b950d..0135e65 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalFlowNodeController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalFlowNodeController.java @@ -1,15 +1,18 @@ package com.ruoyi.web.controller.api; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.basic.PageInfo; import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.system.dto.SetApprovalDTO; import com.ruoyi.system.dto.SetDeptDTO; import com.ruoyi.system.model.OaApproval; import com.ruoyi.system.model.OaApprovalFlowNode; import com.ruoyi.system.query.ApprovalListQuery; +import com.ruoyi.system.service.ISysUserService; import com.ruoyi.system.service.OaApprovalFlowNodeService; import com.ruoyi.system.service.OaApprovalService; import com.ruoyi.system.vo.system.ApprovalFlowNodeVO; @@ -20,6 +23,7 @@ import javax.annotation.Resource; import java.util.List; +import java.util.stream.Collectors; /** * <p> @@ -30,12 +34,14 @@ * @since 2025-09-15 */ @RestController -@Api("审批流程") +@Api(tags ="审批流程") @RequestMapping("/oa-approval-flow-node") public class OaApprovalFlowNodeController { @Resource private OaApprovalFlowNodeService oaApprovalFlowNodeService; + @Resource + private ISysUserService sysUserService; /** * 审批流程设计列表 */ @@ -60,14 +66,27 @@ oaApprovalFlowNodeService.updateById(approval); return R.ok(); } + @ApiOperation(value = "根据部门查询人员列表") + @GetMapping(value = "/listUserByDeptId") + public R<List<SysUser>> listUserByDeptId(Integer id ) { + List<SysUser> users = sysUserService.selectAllList().stream() + .filter(e -> e.getStatus().equals("0") && e.getDeptId().equals(id.toString())) + .collect(Collectors.toList()); + return R.ok(users); + } @Log(title = "审批流程-设置审批人", businessType = BusinessType.UPDATE) - @ApiOperation(value = "设置审批人") @PostMapping(value = "/setApproval") public R setDept(@RequestBody SetApprovalDTO dto) { - OaApprovalFlowNode approval = oaApprovalFlowNodeService.getById(dto.getId()); - approval.setApprovalIds(dto.getApprovalIds()); - oaApprovalFlowNodeService.updateById(approval); + LambdaUpdateWrapper<OaApprovalFlowNode> oaApprovalFlowNodeLambdaUpdateWrapper = new LambdaUpdateWrapper<>(); + oaApprovalFlowNodeLambdaUpdateWrapper.eq(OaApprovalFlowNode::getId,dto.getId()); + oaApprovalFlowNodeLambdaUpdateWrapper.set(OaApprovalFlowNode::getApprovalType,dto.getApprovalType()); + if (dto.getApprovalType() == 1){ + oaApprovalFlowNodeLambdaUpdateWrapper.set(OaApprovalFlowNode::getApprovalIds,null); + }else{ + oaApprovalFlowNodeLambdaUpdateWrapper.set(OaApprovalFlowNode::getApprovalIds,dto.getApprovalIds()); + } + oaApprovalFlowNodeService.update(oaApprovalFlowNodeLambdaUpdateWrapper); return R.ok(); } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalTodoController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalTodoController.java index c200d9d..f6309e8 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalTodoController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalTodoController.java @@ -1,8 +1,34 @@ package com.ruoyi.web.controller.api; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.basic.PageInfo; +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.framework.web.service.TokenService; +import com.ruoyi.system.emums.ApprovalTypeEnum; +import com.ruoyi.system.model.*; +import com.ruoyi.system.query.ApprovalTodoListQuery; +import com.ruoyi.system.query.NotificationListQuery; +import com.ruoyi.system.service.*; +import com.ruoyi.system.vo.ApprovalFlowNodeListVO; +import com.ruoyi.system.vo.ApprovalTodoVO; +import com.ruoyi.system.vo.ContractDetailVO; +import com.ruoyi.system.vo.system.NotificationVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiModelProperty; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import org.springframework.util.StringUtils; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; /** * <p> @@ -13,8 +39,358 @@ * @since 2025-09-15 */ @RestController +@Api(tags ="待办事项") @RequestMapping("/oa-approval-todo") public class OaApprovalTodoController { + @Resource + private OaApprovalTodoService approvalTodoService; + @Resource + private OaApprovalFlowAuditService approvalFlowAuditService; + @Resource + private OaApprovalApplicationStorageService approvalApplicationStorageService; + @Resource + private OaApprovalApplicationPurchaseService approvalApplicationPurchaseService; + @Resource + private OaApprovalApplicationAssetItemService approvalApplicationAssetItemService; + @Resource + private TokenService tokenService; + @Resource + private OaApprovalService approvalService; + @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 AssetMainService assetMainService; + @Resource + private OaApprovalApplicationReimbursementService approvalApplicationReimbursementService; + @Resource + private OaApprovalApplicationReimbursementItemService approvalApplicationReimbursementItemService; + @Resource + private OaApprovalFlowNodeService approvalFlowNodeService; + @Resource + private OaApprovalApplicationAssetService approvalApplicationAssetService; + @Resource + private ISysUserService sysUserService; + @Resource + private OaApprovalApplicationDisposeService approvalApplicationDisposeService; + @Resource + private OaApprovalApplicationChangeService approvalApplicationChangeService; + @Resource + private OaApprovalApplicationAttendanceService approvalApplicationAttendanceService; + @Resource + private TDeptService deptService; + @Resource + private OaApprovalTodoService oaApprovalTodoService; + @Resource + private OaApprovalFlowService approvalFlowService; + @ApiOperation("测试接口") + @PostMapping("/test") + public void test() { + List<OaApproval> approvals = approvalService.list(); + List<OaApprovalFlow> list = approvalFlowService.list(); + List<OaApprovalFlowNode> oaApprovalFlowNodes = new ArrayList<>(); + for (OaApproval approval : approvals) { + int i = 1; + for (OaApprovalFlow oaApprovalFlow : list) { + OaApprovalFlowNode oaApprovalFlowNode = new OaApprovalFlowNode(); + oaApprovalFlowNode.setApprovalId(approval.getId()); + oaApprovalFlowNode.setApprovalFlowId(oaApprovalFlow.getId()); + oaApprovalFlowNode.setFlowName(oaApprovalFlow.getFlowName()); + oaApprovalFlowNode.setSortOrder(i); + oaApprovalFlowNode.setApprovalType(0); + oaApprovalFlowNode.setStatus(true); + oaApprovalFlowNode.setSignFlag(true); + i++; + oaApprovalFlowNodes.add(oaApprovalFlowNode); + } + } + approvalFlowNodeService.saveBatch(oaApprovalFlowNodes); + } + + + @ApiOperation("待办事项列表") + @PostMapping("/pageList") + public R<PageInfo<ApprovalTodoVO>> pageList(@RequestBody ApprovalTodoListQuery query) { + + List<ApprovalTodoVO> resList = new ArrayList<>(); + Long userId = tokenService.getLoginUser().getUserId(); + query.setUserId(userId); + PageInfo<ApprovalTodoVO> res = new PageInfo<>(query.getPageNum(), query.getPageSize()); + + PageInfo<OaApprovalTodo> pageInfo = approvalTodoService.pageList(query); + List<OaApprovalTodo> list = pageInfo.getRecords(); + if (list.isEmpty()){ + return R.ok(new PageInfo<>()); + } + res.setTotal(pageInfo.getTotal()); + List<Integer> applicationIds = list.stream().map(OaApprovalTodo::getApplicationId).collect(Collectors.toList()); + Map<Integer, OaApprovalApplicationReimbursement> approvalApplicationReimbursementMap = approvalApplicationReimbursementService.lambdaQuery() + .in(OaApprovalApplicationReimbursement::getApprovalApplicationId, applicationIds).list() + .stream().collect(Collectors.toMap(OaApprovalApplicationReimbursement::getApprovalApplicationId, e -> e)); + Map<Integer, OaApprovalApplicationMoney> oaApprovalApplicationMoneyMap = approvalApplicationMoneyService.lambdaQuery() + .in(OaApprovalApplicationMoney::getApprovalApplicationId, applicationIds).list() + .stream().collect(Collectors.toMap(OaApprovalApplicationMoney::getApprovalApplicationId, e -> e)); + Map<Integer, OaApprovalApplicationPayment> approvalApplicationPaymentMap = approvalApplicationPaymentService.lambdaQuery() + .in(OaApprovalApplicationPayment::getApprovalApplicationId, applicationIds).list() + .stream().collect(Collectors.toMap(OaApprovalApplicationPayment::getApprovalApplicationId, e -> e)); + Map<Integer, OaApprovalApplicationStorage> applicationStorageMap = approvalApplicationStorageService.lambdaQuery() + .in(OaApprovalApplicationStorage::getApprovalApplicationId, applicationIds).list() + .stream().collect(Collectors.toMap(OaApprovalApplicationStorage::getApprovalApplicationId, e -> e)); + Map<Integer, OaApprovalApplicationAsset> approvalApplicationAssetMap = approvalApplicationAssetService.lambdaQuery() + .in(OaApprovalApplicationAsset::getApprovalApplicationId, applicationIds).list() + .stream().collect(Collectors.toMap(OaApprovalApplicationAsset::getApprovalApplicationId, e -> e)); + Map<Integer, OaApprovalApplicationDispose> approvalApplicationDisposeMap = approvalApplicationDisposeService.lambdaQuery() + .in(OaApprovalApplicationDispose::getApprovalApplicationId, applicationIds).list() + .stream().collect(Collectors.toMap(OaApprovalApplicationDispose::getApprovalApplicationId, e -> e)); + Map<Integer, OaApprovalApplicationChange> approvalApplicationChangeMap = approvalApplicationChangeService.lambdaQuery() + .in(OaApprovalApplicationChange::getApprovalApplicationId, applicationIds).list() + .stream().collect(Collectors.toMap(OaApprovalApplicationChange::getApprovalApplicationId, e -> e)); + Map<Integer, OaApprovalApplicationPurchase> approvalApplicationPurchaseMap = approvalApplicationPurchaseService.lambdaQuery() + .in(OaApprovalApplicationPurchase::getApprovalApplicationId, applicationIds).list() + .stream().collect(Collectors.toMap(OaApprovalApplicationPurchase::getApprovalApplicationId, e -> e)); + Map<Integer, List<OaApprovalApplicationAssetItem>> approvalApplicationAssetItemMap = approvalApplicationAssetItemService.lambdaQuery() + .in(OaApprovalApplicationAssetItem::getApprovalApplicationId, applicationIds).list() + .stream().collect(Collectors.groupingBy(OaApprovalApplicationAssetItem::getApprovalApplicationId)); + Map<Integer, OaApprovalApplicationAdvertisement> approvalApplicationAdvertisementMap = approvalApplicationAdvertisementService.lambdaQuery() + .in(OaApprovalApplicationAdvertisement::getApprovalApplicationId, applicationIds).list() + .stream().collect(Collectors.toMap(OaApprovalApplicationAdvertisement::getApprovalApplicationId, e -> e)); + Map<Integer, OaApprovalApplicationAttendance> applicationAttendanceMap = approvalApplicationAttendanceService.lambdaQuery() + .in(OaApprovalApplicationAttendance::getApprovalApplicationId, applicationIds).list() + .stream().collect(Collectors.toMap(OaApprovalApplicationAttendance::getApprovalApplicationId, e -> e)); + + Map<Integer, AssetMain> assetMainMap = assetMainService.list().stream().collect(Collectors.toMap(AssetMain::getId, e -> e)); + Map<Integer, OaApprovalTodo> approvalTodoMap = list.stream().collect(Collectors.toMap(OaApprovalTodo::getApplicationId, e -> e)); + Map<Long, SysUser> userMap = sysUserService.selectAllList().stream().collect(Collectors.toMap(SysUser::getUserId, e -> e)); + Map<Integer, TDept> deptMap = deptService.list().stream().collect(Collectors.toMap(TDept::getId, e -> e)); + Map<Integer, OaApproval> approvalMap = approvalService.list().stream().collect(Collectors.toMap(OaApproval::getId, e -> e)); + List<OaApprovalApplications> approvalApplications = approvalApplicationsService.lambdaQuery().in(OaApprovalApplications::getId, applicationIds).list(); + for (OaApprovalApplications approvalApplication : approvalApplications) { + ApprovalTodoVO approvalTodoVO = new ApprovalTodoVO(); + approvalTodoVO.setApprovalCategory(approvalMap.get(approvalApplication.getApprovalId()).getApprovalCategory()); + switch (approvalTodoVO.getApprovalCategory()){ + case 1: + case 2: + case 3: + case 4: + default: + OaApprovalApplicationAttendance oaApprovalApplicationAttendance = applicationAttendanceMap.get(approvalApplication.getId()); + if (oaApprovalApplicationAttendance!=null){ + approvalTodoVO.setStartTime(oaApprovalApplicationAttendance.getStartTime()); + approvalTodoVO.setEndTime(oaApprovalApplicationAttendance.getEndTime()); + approvalTodoVO.setDuration(oaApprovalApplicationAttendance.getDuration()); + } + break; + } + SysUser sysUser = userMap.get(approvalApplication.getApplicantUserId().longValue()); + if (sysUser!=null){ + approvalTodoVO.setApplyUserName(sysUser.getUserName()); + TDept tDept = deptMap.get(Integer.parseInt(sysUser.getDeptId())); + if (tDept!=null){ + approvalTodoVO.setApplyDeptName(tDept.getDeptName()); + } + } + approvalTodoVO.setApplicationCode(approvalApplication.getApplicationCode()); + approvalTodoVO.setCreateTime(approvalApplication.getCreateTime()); + OaApprovalTodo oaApprovalTodo = approvalTodoMap.get(approvalApplication.getId()); + approvalTodoVO.setId(oaApprovalTodo.getId()); + approvalTodoVO.setApplicationId(approvalApplication.getId()); + + switch (approvalTodoVO.getApprovalCategory()){ + case 5: + OaApprovalApplicationPurchase oaApprovalApplicationPurchase = approvalApplicationPurchaseMap.get(approvalApplication.getId()); + if (oaApprovalApplicationPurchase!=null){ + approvalTodoVO.setAmount(oaApprovalApplicationPurchase.getTotalAmount()); + } + break; + case 6: + OaApprovalApplicationStorage oaApprovalApplicationStorage = applicationStorageMap.get(approvalApplication.getId()); + if (oaApprovalApplicationStorage!=null){ + approvalTodoVO.setStorageType(oaApprovalApplicationStorage.getStorageType()); + } + break; + case 7: + StringBuilder temp = new StringBuilder(); + List<OaApprovalApplicationAssetItem> oaApprovalApplicationAssetItems = approvalApplicationAssetItemMap.get(approvalApplication.getId()); + if (oaApprovalApplicationAssetItems!=null){ + for (OaApprovalApplicationAssetItem oaApprovalApplicationAssetItem : oaApprovalApplicationAssetItems) { + AssetMain assetMain = assetMainMap.get(oaApprovalApplicationAssetItem.getAssetMainId()); + if (assetMain!=null){ + temp.append(assetMain.getAssetName()).append(","); + } + } + // 去除最后一位字符 + if (StringUtils.hasLength(temp.toString())){ + approvalTodoVO.setAssetName(temp.substring(0, temp.length() - 1)); + }else{ + approvalTodoVO.setAssetName(""); + } + } + break; + case 8: + OaApprovalApplicationAsset oaApprovalApplicationAssetOut = approvalApplicationAssetMap.get(approvalApplication.getId()); + if (oaApprovalApplicationAssetOut!=null){ + approvalTodoVO.setOperateTime(oaApprovalApplicationAssetOut.getOperateTime()); + } + break; + case 9: + OaApprovalApplicationAsset oaApprovalApplicationAssetBack = approvalApplicationAssetMap.get(approvalApplication.getId()); + if (oaApprovalApplicationAssetBack!=null){ + approvalTodoVO.setOperateTime(oaApprovalApplicationAssetBack.getExpectReturnDate()); + } + break; + case 10: + OaApprovalApplicationDispose oaApprovalApplicationDispose = approvalApplicationDisposeMap.get(approvalApplication.getId()); + if (oaApprovalApplicationDispose!=null){ + approvalTodoVO.setDisposeType(oaApprovalApplicationDispose.getDisposeType()); + } + break; + case 11: + OaApprovalApplicationChange oaApprovalApplicationChange = approvalApplicationChangeMap.get(approvalApplication.getId()); + if (oaApprovalApplicationChange!=null){ + Integer ownershipDeptId = oaApprovalApplicationChange.getOwnershipDeptId(); + TDept tDept = deptMap.get(ownershipDeptId); + if (tDept!=null){ + approvalTodoVO.setOwnershipDeptName(tDept.getDeptName()); + } + } + break; + case 12: + OaApprovalApplicationReimbursement oaApprovalApplicationReimbursement = approvalApplicationReimbursementMap.get(approvalApplication.getId()); + if (oaApprovalApplicationReimbursement!=null){ + approvalTodoVO.setAmount(oaApprovalApplicationReimbursement.getReimbursementAmount()); + } + break; + case 13: + OaApprovalApplicationMoney oaApprovalApplicationMoney = oaApprovalApplicationMoneyMap.get(approvalApplication.getId()); + if (oaApprovalApplicationMoney!=null){ + approvalTodoVO.setAmount(oaApprovalApplicationMoney.getApplyAmount()); + approvalTodoVO.setDescription(oaApprovalApplicationMoney.getDescription()); + + } + break; + case 15: + OaApprovalApplicationPayment oaApprovalApplicationPayment = approvalApplicationPaymentMap.get(approvalApplication.getId()); + if (oaApprovalApplicationPayment!=null){ + approvalTodoVO.setAmount(oaApprovalApplicationPayment.getApplyAmount()); + approvalTodoVO.setDescription(approvalApplication.getApplicationReason()); + + } + break; + case 17: + OaApprovalApplicationAdvertisement oaApprovalApplicationAdvertisement = approvalApplicationAdvertisementMap.get(approvalApplication.getId()); + if (oaApprovalApplicationAdvertisement!=null){ + approvalTodoVO.setContent(oaApprovalApplicationAdvertisement.getContent()); + approvalTodoVO.setAmount(oaApprovalApplicationAdvertisement.getTotalAmount()); + } + break; + } + + resList.add(approvalTodoVO); + } + res.setRecords(resList); + return R.ok(res); + } + + + @ApiOperation(value = "合同文件审批详情") + @GetMapping(value = "/detailContract") + public R<ContractDetailVO> detailContract(@ApiParam("待办列表id") Integer id) { + OaApprovalTodo approvalTodo = approvalTodoService.getById(id); + OaApprovalApplications approvalApplications = approvalApplicationsService.getById(approvalTodo.getApplicationId()); + OaApprovalApplicationContract approvalApplicationContract = approvalApplicationContractService.lambdaQuery() + .eq(OaApprovalApplicationContract::getApprovalApplicationId, approvalApplications.getId()) + .last("limit 1").one(); + List<OaApprovalFlowAudit> approvalFlowAudits = approvalFlowAuditService.lambdaQuery().eq(OaApprovalFlowAudit::getApprovalApplicationId, approvalApplications.getId()) + .orderByAsc(OaApprovalFlowAudit::getSortOrder) + .list(); + ContractDetailVO res = new ContractDetailVO(); + List<OaApprovalFlowNode> approvalFlowNodes = approvalFlowNodeService.lambdaQuery() + .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.CONTRACT.getCode()) + .orderByAsc(OaApprovalFlowNode::getSortOrder) + .eq(OaApprovalFlowNode::getStatus, 1).list(); + List<ApprovalFlowNodeListVO> flowNodeList = getFlowNodeList(approvalApplications, res, approvalFlowAudits,approvalFlowNodes); + res.setApprovalFlowNodeListVOS(flowNodeList); + res.setApprovalApplicationId(approvalApplications.getId()); + res.setContractUrl(approvalApplicationContract.getContractUrl()); + res.setApplicationReason(approvalApplications.getApplicationReason()); + res.setAttachmentUrl(approvalApplications.getAttachmentUrl()); + return R.ok(res); + } + @ApiOperation(value = "进度款支付审批详情") + @GetMapping(value = "/detailPayment") + public R<ContractDetailVO> detailPayment(@ApiParam("待办列表id") Integer id) { + OaApprovalTodo approvalTodo = approvalTodoService.getById(id); + OaApprovalApplications approvalApplications = approvalApplicationsService.getById(approvalTodo.getApplicationId()); + OaApprovalApplicationContract approvalApplicationContract = approvalApplicationContractService.lambdaQuery() + .eq(OaApprovalApplicationContract::getApprovalApplicationId, approvalApplications.getId()) + .last("limit 1").one(); + List<OaApprovalFlowAudit> approvalFlowAudits = approvalFlowAuditService.lambdaQuery().eq(OaApprovalFlowAudit::getApprovalApplicationId, approvalApplications.getId()) + .orderByAsc(OaApprovalFlowAudit::getSortOrder) + .list(); + ContractDetailVO res = new ContractDetailVO(); + List<OaApprovalFlowNode> approvalFlowNodes = approvalFlowNodeService.lambdaQuery() + .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.PAYMENT.getCode()) + .orderByAsc(OaApprovalFlowNode::getSortOrder) + .eq(OaApprovalFlowNode::getStatus, 1).list(); + List<ApprovalFlowNodeListVO> flowNodeList = getFlowNodeList(approvalApplications, res, approvalFlowAudits,approvalFlowNodes); + res.setApprovalFlowNodeListVOS(flowNodeList); + res.setApprovalApplicationId(approvalApplications.getId()); + res.setContractUrl(approvalApplicationContract.getContractUrl()); + res.setApplicationReason(approvalApplications.getApplicationReason()); + res.setAttachmentUrl(approvalApplications.getAttachmentUrl()); + return R.ok(res); + } + private List<ApprovalFlowNodeListVO> getFlowNodeList(OaApprovalApplications approvalApplications, ContractDetailVO res, List<OaApprovalFlowAudit> approvalFlowAudits + ,List<OaApprovalFlowNode> approvalFlowNodes) { + List<ApprovalFlowNodeListVO> approvalFlowNodeListVOS = new ArrayList<>(); + Map<Integer, OaApprovalFlowAudit> approvalFlowAuditMap = approvalFlowAudits.stream().collect(Collectors.toMap(OaApprovalFlowAudit::getFlowNodeId, e -> e)); + + ApprovalFlowNodeListVO approvalFlowNodeListVO = new ApprovalFlowNodeListVO(); + approvalFlowNodeListVO.setFlowName("发起"); + SysUser sysUser = sysUserService.selectUserById(approvalApplications.getApplicantUserId().longValue()); + if (sysUser!=null){ + approvalFlowNodeListVO.setUserName(sysUser.getUserName()); + res.setUserName(sysUser.getUserName()); + TDept dept = deptService.getById(sysUser.getDeptId()); + if (dept!=null){ + res.setDeptName(dept.getDeptName()); + } + } + approvalFlowNodeListVOS.add(approvalFlowNodeListVO); + for (OaApprovalFlowNode approvalFlowNode : approvalFlowNodes) { + ApprovalFlowNodeListVO approvalFlowNodeVO = new ApprovalFlowNodeListVO(); + + OaApprovalFlowAudit approvalFlowAudit = approvalFlowAuditMap.get(approvalFlowNode.getId()); + if (approvalFlowAudit!=null){ + approvalFlowNodeVO.setFlowName(approvalFlowAudit.getFlowName()); + approvalFlowNodeVO.setUserName(approvalFlowAudit.getUserName()); + approvalFlowNodeVO.setSignPicUrl(approvalFlowAudit.getSignPicUrl()); + approvalFlowNodeVO.setApprovalStatus(approvalFlowAudit.getApprovalStatus()); + }else{ + approvalFlowNodeVO.setFlowName(approvalFlowNode.getFlowName()); + } + approvalFlowNodeListVOS.add(approvalFlowNodeVO); + + } + for (OaApprovalFlowAudit approvalFlowAudit : approvalFlowAudits) { + ApprovalFlowNodeListVO approvalFlowNodeVO = new ApprovalFlowNodeListVO(); + approvalFlowNodeVO.setFlowName(approvalFlowAudit.getFlowName()); + approvalFlowNodeVO.setUserName(approvalFlowAudit.getUserName()); + approvalFlowNodeVO.setSignPicUrl(approvalFlowAudit.getSignPicUrl()); + approvalFlowNodeVO.setApprovalStatus(approvalFlowAudit.getApprovalStatus()); + approvalFlowNodeListVOS.add(approvalFlowNodeVO); + } + return approvalFlowNodeListVOS; + } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaNotificationController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaNotificationController.java index 3f36a01..ed3d44e 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaNotificationController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaNotificationController.java @@ -40,7 +40,7 @@ * @since 2025-09-15 */ @RestController -@Api("消息通知") +@Api(tags = "消息通知") @RequestMapping("/oa-notification") public class OaNotificationController { @Resource @@ -120,7 +120,11 @@ String orDefault = deptMap.getOrDefault(Integer.parseInt(deptId), ""); deptName.append(orDefault).append(","); } - notificationDetailVO.setDeptName(deptName.substring(0,deptName.length()-1)); + if (deptName.length() > 0){ + notificationDetailVO.setDeptName(deptName.substring(0,deptName.length()-1)); + }else { + notificationDetailVO.setDeptName(""); + } List<NotificationDeptUserDetailVO> notificationUserVOS = new ArrayList<>(); List<Long> userIds = notifationUsers.stream().map(e -> e.getUserId().longValue()).collect(Collectors.toList()); if (!userIds.isEmpty()){ diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddAdvertisementDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddAdvertisementDTO.java new file mode 100644 index 0000000..580f2fa --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddAdvertisementDTO.java @@ -0,0 +1,47 @@ +package com.ruoyi.system.dto; + +import com.baomidou.mybatisplus.annotation.TableField; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +@Data +@ApiModel(value = "发起广告制作申请记录DTO") +public class AddAdvertisementDTO implements Serializable { + + + @ApiModelProperty(value = "事项标题") + @TableField("title") + private String title; + + @ApiModelProperty(value = "内容") + @TableField("content") + private String content; + + @ApiModelProperty(value = "数量") + @TableField("number") + private Integer number; + + @ApiModelProperty(value = "总金额") + @TableField("total_amount") + private BigDecimal totalAmount; + + @ApiModelProperty(value = "规格") + @TableField("spec") + private String spec; + + @ApiModelProperty(value = "事由/原因/说明/备注") + private String applicationReason; + @ApiModelProperty(value = "附件地址,多个使用英文逗号拼接") + private String attachmentUrl; + + + + + + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddBusinessTripDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddBusinessTripDTO.java new file mode 100644 index 0000000..153be7e --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddBusinessTripDTO.java @@ -0,0 +1,31 @@ +package com.ruoyi.system.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +@Data +@ApiModel(value = "发起出差申请记录DTO") +public class AddBusinessTripDTO implements Serializable { + + @ApiModelProperty(value = "开始请假/外出/出差/销假时间") + private LocalDateTime startTime; + + @ApiModelProperty(value = "结束请假/外出/出差/销假时间") + private LocalDateTime endTime; + + @ApiModelProperty(value = "请假/外出/出差/销假时长(天)") + private Double duration; + @ApiModelProperty(value = "事由/原因/说明") + private String applicationReason; + + @ApiModelProperty(value = "附件地址,多个使用英文逗号拼接") + private String attachmentUrl; + @ApiModelProperty(value = "外出/出差地点") + private String address; + @ApiModelProperty(value = "出差项目") + private String projectName; +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddContactDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddContactDTO.java new file mode 100644 index 0000000..2bd1513 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddContactDTO.java @@ -0,0 +1,22 @@ +package com.ruoyi.system.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; + +@Data +@ApiModel(value = "发起内部联系单申请记录DTO") +public class AddContactDTO implements Serializable { + + + + @ApiModelProperty(value = "事由/原因/说明") + private String applicationReason; + @ApiModelProperty(value = "详细说明") + private String description; + + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddContractDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddContractDTO.java new file mode 100644 index 0000000..145137c --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddContractDTO.java @@ -0,0 +1,25 @@ +package com.ruoyi.system.dto; + +import com.baomidou.mybatisplus.annotation.TableField; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +@Data +@ApiModel(value = "发起合同文件申请记录DTO") +public class AddContractDTO implements Serializable { + + + + @ApiModelProperty(value = "合同文件地址") + private String contractUrl; + @ApiModelProperty(value = "事由/原因/说明") + private String applicationReason; + @ApiModelProperty(value = "附件地址,多个使用英文逗号拼接") + private String attachmentUrl; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddLeaveDestroyDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddLeaveDestroyDTO.java new file mode 100644 index 0000000..0308db9 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddLeaveDestroyDTO.java @@ -0,0 +1,30 @@ +package com.ruoyi.system.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +@Data +@ApiModel(value = "发起销假申请记录DTO") +public class AddLeaveDestroyDTO implements Serializable { + + @ApiModelProperty(value = "开始请假/外出/出差/销假时间") + private LocalDateTime startTime; + + @ApiModelProperty(value = "结束请假/外出/出差/销假时间") + private LocalDateTime endTime; + + @ApiModelProperty(value = "请假/外出/出差/销假时长(天)") + private Double duration; + @ApiModelProperty(value = "事由/原因/说明") + private String applicationReason; + + @ApiModelProperty(value = "附件地址,多个使用英文逗号拼接") + private String attachmentUrl; + + @ApiModelProperty(value = "关联请假单,格式:yyyy-MM-dd - yyyy-MM-dd") + private String leaveTime; +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddMoneyDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddMoneyDTO.java new file mode 100644 index 0000000..3db5f25 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddMoneyDTO.java @@ -0,0 +1,38 @@ +package com.ruoyi.system.dto; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.ruoyi.system.model.OaApprovalApplicationReimbursementItem; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.List; + +@Data +@ApiModel(value = "发起款项申请记录DTO") +public class AddMoneyDTO implements Serializable { + + @ApiModelProperty(value = "项目名称") + private String projectName; + + @ApiModelProperty(value = "申请金额") + private BigDecimal applyAmount; + + @ApiModelProperty(value = "申请说明") + private String description; + + @ApiModelProperty(value = "付款方") + private String payer; + + @ApiModelProperty(value = "收款方") + private String payee; + + @ApiModelProperty(value = "收款方联系方式") + private String payeeContact; + + @ApiModelProperty(value = "收款方账户") + private String payeeAccount; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddOutDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddOutDTO.java new file mode 100644 index 0000000..60d4f8c --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddOutDTO.java @@ -0,0 +1,29 @@ +package com.ruoyi.system.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +@Data +@ApiModel(value = "发起外出申请记录DTO") +public class AddOutDTO implements Serializable { + + @ApiModelProperty(value = "开始请假/外出/出差/销假时间") + private LocalDateTime startTime; + + @ApiModelProperty(value = "结束请假/外出/出差/销假时间") + private LocalDateTime endTime; + + @ApiModelProperty(value = "请假/外出/出差/销假时长(天)") + private Double duration; + @ApiModelProperty(value = "事由/原因/说明") + private String applicationReason; + + @ApiModelProperty(value = "附件地址,多个使用英文逗号拼接") + private String attachmentUrl; + @ApiModelProperty(value = "外出/出差地点") + private String address; +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddPaymentDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddPaymentDTO.java new file mode 100644 index 0000000..7952d66 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddPaymentDTO.java @@ -0,0 +1,29 @@ +package com.ruoyi.system.dto; + +import com.baomidou.mybatisplus.annotation.TableField; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; + +@Data +@ApiModel(value = "发起进度款支付申请记录DTO") +public class AddPaymentDTO implements Serializable { + + + @ApiModelProperty(value = "关联项目ID") + private Integer projectId; + + @ApiModelProperty(value = "合同金额") + private BigDecimal contractAmount; + + @ApiModelProperty(value = "申请金额") + private BigDecimal applyAmount; + @ApiModelProperty(value = "事由/原因/说明") + private String applicationReason; + @ApiModelProperty(value = "附件地址,多个使用英文逗号拼接") + private String attachmentUrl; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddReimbursementDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddReimbursementDTO.java new file mode 100644 index 0000000..82cd1db --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddReimbursementDTO.java @@ -0,0 +1,22 @@ +package com.ruoyi.system.dto; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.ruoyi.system.model.OaApprovalApplicationReimbursementItem; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.List; + +@Data +@ApiModel(value = "发起报销申请记录DTO") +public class AddReimbursementDTO implements Serializable { + + @ApiModelProperty(value = "报销类型 0-差旅招待交通费,1-企业日常采购,2-房租水电日常,3-聚餐团建,4-其他") + private Integer type; + @ApiModelProperty(value = "明细") + private List<OaApprovalApplicationReimbursementItem> items; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/AuditDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/AuditDTO.java new file mode 100644 index 0000000..f8d7808 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/AuditDTO.java @@ -0,0 +1,21 @@ +package com.ruoyi.system.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +@Data +@ApiModel(value = "通用审批接口DTO") +public class AuditDTO implements Serializable { + + @ApiModelProperty(value = "审批申请记录ID") + private Integer approvalApplicationId; + @ApiModelProperty(value = "不通过原因") + private String reason; + @ApiModelProperty(value = "审批意见 0-审批不通过,1-审批通过") + private Integer approvalStatus; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/SetApprovalDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/SetApprovalDTO.java index 6be1e51..d9751c2 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/dto/SetApprovalDTO.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/SetApprovalDTO.java @@ -12,7 +12,9 @@ @ApiModelProperty(value = "审批流程id") private Integer id; + @ApiModelProperty(value = "审批类型 0-上级部门,1-指定部门审批,2-指定人员审批") + private Integer approvalType; - @ApiModelProperty(value = "人员ids") + @ApiModelProperty(value = "审批类型为上级部门该字段不传,指定部门审批存部门id,指定人员审批存人员id,多个id使用英文逗号拼接") private String approvalIds; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/emums/ApprovalFlowNodeEnum.java b/ruoyi-system/src/main/java/com/ruoyi/system/emums/ApprovalFlowNodeEnum.java new file mode 100644 index 0000000..816e549 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/emums/ApprovalFlowNodeEnum.java @@ -0,0 +1,57 @@ +package com.ruoyi.system.emums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 审批流程节点枚举 + * + * @author YourName + * @since 2025-09-11 + */ +@Getter +@AllArgsConstructor +public enum ApprovalFlowNodeEnum { + + /** + * 部门负责人审批 + */ + DEPT(1, "部门负责人审批"), + + /** + * 风险合规部审批 + */ + RISK(2, "风险合规部审批"), + + /** + * 财务融资部审批 + */ + FINANCE(3, "财务融资部审批"), + + /** + * 分管领导审批 + */ + DIVISION(4, "分管领导审批"), + + /** + * 总经理审批 + */ + GENERAL(5, "总经理审批"), + + /** + * 董事长审批 + */ + CHAIRMAN(6, "董事长审批"); + + private final Integer code; + private final String desc; + + public static ApprovalFlowNodeEnum getEnumByCode(Integer code) { + for (ApprovalFlowNodeEnum e : ApprovalFlowNodeEnum.values()) { + if (e.code.equals(code)) { + return e; + } + } + return null; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/OaApprovalTodoMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/OaApprovalTodoMapper.java index 4648b8d..1d74359 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/OaApprovalTodoMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/OaApprovalTodoMapper.java @@ -1,7 +1,12 @@ package com.ruoyi.system.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.common.basic.PageInfo; import com.ruoyi.system.model.OaApprovalTodo; +import com.ruoyi.system.query.ApprovalTodoListQuery; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** * <p> @@ -13,4 +18,6 @@ */ public interface OaApprovalTodoMapper extends BaseMapper<OaApprovalTodo> { + List<OaApprovalTodo> pageList(@Param("query")ApprovalTodoListQuery query, @Param("pageInfo")PageInfo<OaApprovalTodo> pageInfo); + } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApproval.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApproval.java index 8292ad7..ed02218 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApproval.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApproval.java @@ -38,7 +38,7 @@ @ApiModelProperty(value = "审批类型 1-请假申请,2-外出申请,3-出差申请,4-销假申请,5-采购申请,6-资产入库,7-物品领用,8-物品借用,9-借用归还,10-资产处置,11-资产表更,12-报销申请,13-款项申请,14-合同文件,15-进度款支付,16-内部联系单,17-广告制作申请") @TableField("approval_category") - private Boolean approvalCategory; + private Integer approvalCategory; @ApiModelProperty(value = "当前状态 0-禁用,1-启用") @TableField("status") diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationAttendance.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationAttendance.java index 078c3d0..ca12c49 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationAttendance.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationAttendance.java @@ -60,5 +60,9 @@ @TableField("leave_approval_application_id") private Integer leaveApprovalApplicationId; + @ApiModelProperty(value = "是否是请假申请 0否1是") + @TableField("is_leave") + private Boolean isLeave; + } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationDispose.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationDispose.java index 840e03c..f599f07 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationDispose.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationDispose.java @@ -24,7 +24,7 @@ @Data @EqualsAndHashCode(callSuper = false) @TableName("oa_approval_application_dispose") -@ApiModel(value="OaApprovalApplicationDispose对象", description="资产领用单明细表") +@ApiModel(value="OaApprovalApplicationDispose对象", description="资产处置单明细表") public class OaApprovalApplicationDispose implements Serializable { private static final long serialVersionUID = 1L; @@ -51,7 +51,7 @@ @ApiModelProperty(value = "处置方式 0-报废,1-报损,2-捐赠") @TableField("dispose_type") - private Boolean disposeType; + private Integer disposeType; @ApiModelProperty(value = "处置总金额(元)") @TableField("dispose_total_amount") diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationReimbursement.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationReimbursement.java index 70996a5..538e289 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationReimbursement.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationReimbursement.java @@ -10,6 +10,7 @@ import lombok.EqualsAndHashCode; import java.io.Serializable; +import java.math.BigDecimal; /** * <p> @@ -37,7 +38,9 @@ @ApiModelProperty(value = "报销类型 0-差旅招待交通费,1-企业日常采购,2-房租水电日常,3-聚餐团建,4-其他") @TableField("type") - private Boolean type; + private Integer type; - + @ApiModelProperty(value = "总金额") + @TableField("reimbursement_amount") + private BigDecimal reimbursementAmount; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationReimbursementItem.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationReimbursementItem.java index a1b5055..3565487 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationReimbursementItem.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplicationReimbursementItem.java @@ -32,13 +32,13 @@ @TableId(value = "id", type = IdType.AUTO) private Integer id; - @ApiModelProperty(value = "报销申请记录ID") + @ApiModelProperty(value = "报销申请记录ID 前端不传") @TableField("approval_application_id") private Integer approvalApplicationId; @ApiModelProperty(value = "报销类型 0-飞机票,1-火车票,2-的士费,3-住宿费,4-餐饮费,5-礼品费,6-活动费,7-通讯费,8-补助,9-办公费,10-采购费,11-水电费,12-修理费,13-养路费,14-燃料费,15-其他") @TableField("fee_type") - private Boolean feeType; + private Integer feeType; @ApiModelProperty(value = "费用金额") @TableField("amount") diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplications.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplications.java index 4e3b3a3..f120640 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplications.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplications.java @@ -48,14 +48,14 @@ @ApiModelProperty(value = "申请人") @TableField("applicant_name") private String applicantName; - + @ApiModelProperty(value = "所属部门") + @TableField("dept_name") + private String deptName; @ApiModelProperty(value = "部门ID") @TableField("dept_id") private Integer deptId; - @ApiModelProperty(value = "所属部门") - @TableField("dept_name") - private String deptName; + @ApiModelProperty(value = "申请日期") @TableField("application_date") diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalTodo.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalTodo.java index 05f04aa..01bee13 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalTodo.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalTodo.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import com.sun.org.apache.xpath.internal.operations.Bool; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -72,5 +73,8 @@ @TableField("handle_time") private LocalDateTime handleTime; + @ApiModelProperty(value = "是否删除 0-否,1-是") + @TableField("disabled") + private Integer disabled; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/ApprovalTodoListQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/ApprovalTodoListQuery.java new file mode 100644 index 0000000..caa4340 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/query/ApprovalTodoListQuery.java @@ -0,0 +1,15 @@ +package com.ruoyi.system.query; + +import com.ruoyi.common.core.domain.BasePage; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +@ApiModel(value = "代办事项分页列表query") +public class ApprovalTodoListQuery extends BasePage { + + @ApiModelProperty("用户id 前端忽略") + private Long userId; +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalTodoService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalTodoService.java index 5b7f46d..909fea6 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalTodoService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/OaApprovalTodoService.java @@ -1,8 +1,13 @@ package com.ruoyi.system.service; import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.common.basic.PageInfo; import com.ruoyi.system.model.OaApprovalFlowNode; import com.ruoyi.system.model.OaApprovalTodo; +import com.ruoyi.system.query.ApprovalTodoListQuery; +import com.ruoyi.system.vo.ApprovalTodoVO; + +import java.util.List; /** * <p> @@ -22,4 +27,7 @@ * @param deptId 申请部门ID(用于上级部门审批场景) */ void createApprovalTodos(Integer applicationId, String applicationCode, OaApprovalFlowNode flowNode, Integer deptId); + + + PageInfo<OaApprovalTodo> pageList(ApprovalTodoListQuery query); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalTodoServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalTodoServiceImpl.java index 503c9d6..da7af41 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalTodoServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalTodoServiceImpl.java @@ -2,17 +2,24 @@ import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.basic.PageInfo; import com.ruoyi.common.core.domain.entity.SysDept; import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.core.domain.entity.TDept; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.system.mapper.OaApprovalTodoMapper; import com.ruoyi.system.model.OaApprovalFlowNode; import com.ruoyi.system.model.OaApprovalTodo; +import com.ruoyi.system.query.ApprovalTodoListQuery; import com.ruoyi.system.service.ISysDeptService; import com.ruoyi.system.service.ISysUserService; import com.ruoyi.system.service.OaApprovalTodoService; +import com.ruoyi.system.service.TDeptService; +import com.ruoyi.system.vo.ApprovalTodoVO; +import com.ruoyi.system.vo.system.NotificationVO; import lombok.RequiredArgsConstructor; import org.apache.commons.lang3.StringUtils; +import org.springframework.security.core.token.TokenService; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -34,7 +41,7 @@ public class OaApprovalTodoServiceImpl extends ServiceImpl<OaApprovalTodoMapper, OaApprovalTodo> implements OaApprovalTodoService { private final ISysUserService sysUserService; - private final ISysDeptService sysDeptService; + private final TDeptService deptService; /** * 创建审批待办(公共实现) @@ -62,6 +69,15 @@ } } + @Override + public PageInfo<OaApprovalTodo> pageList(ApprovalTodoListQuery query) { + PageInfo<OaApprovalTodo> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); + List<OaApprovalTodo> list = this.baseMapper.pageList(query,pageInfo); + pageInfo.setRecords( list); + return pageInfo; + } + + /** * 创建上级部门审批待办 */ @@ -71,7 +87,7 @@ throw new ServiceException("未填写申请部门信息"); } - SysDept currentDept = sysDeptService.selectDeptById(Long.valueOf(deptId)); + TDept currentDept = deptService.getById(Long.valueOf(deptId)); if (currentDept == null) { throw new ServiceException("申请部门信息不存在"); } @@ -81,13 +97,13 @@ throw new ServiceException("当前部门没有上级部门"); } - SysDept parentDept = sysDeptService.selectDeptById(currentDept.getParentId()); + TDept parentDept = deptService.getById(currentDept.getParentId()); if (parentDept == null) { throw new ServiceException("上级部门信息不存在"); } // 3. 查询所有关联了该上级部门的用户 - List<SysUser> users = sysUserService.selectListByDeptId(parentDept.getDeptId().toString()); + List<SysUser> users = sysUserService.selectListByDeptId(parentDept.getId().toString()); if (CollUtil.isEmpty(users)) { throw new ServiceException("上级部门下没有找到用户"); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/utils/ApprovalTypeEnum.java b/ruoyi-system/src/main/java/com/ruoyi/system/utils/ApprovalTypeEnum.java deleted file mode 100644 index c3cc586..0000000 --- a/ruoyi-system/src/main/java/com/ruoyi/system/utils/ApprovalTypeEnum.java +++ /dev/null @@ -1,175 +0,0 @@ -package com.ruoyi.system.utils; - -/** - * 审批类型枚举 - * - * @author YourName - * @since 2025-09-17 - */ -public enum ApprovalTypeEnum { - - /** - * 请假申请 - */ - LEAVE_APPLICATION(1, "请假申请"), - - /** - * 外出申请 - */ - OUT_APPLICATION(2, "外出申请"), - - /** - * 出差申请 - */ - BUSINESS_TRIP_APPLICATION(3, "出差申请"), - - /** - * 销假申请 - */ - LEAVE_CANCELLATION_APPLICATION(4, "销假申请"), - - /** - * 采购申请 - */ - PURCHASE_APPLICATION(5, "采购申请"), - - /** - * 资产入库 - */ - ASSET_STORAGE(6, "资产入库"), - - /** - * 物品领用 - */ - ITEM_RECEIVE(7, "物品领用"), - - /** - * 物品借用 - */ - ITEM_BORROW(8, "物品借用"), - - /** - * 借用归还 - */ - BORROW_RETURN(9, "借用归还"), - - /** - * 资产处置 - */ - ASSET_DISPOSAL(10, "资产处置"), - - /** - * 资产变更 - */ - ASSET_CHANGE(11, "资产变更"), - - /** - * 报销申请 - */ - REIMBURSEMENT_APPLICATION(12, "报销申请"), - - /** - * 款项申请 - */ - PAYMENT_APPLICATION(13, "款项申请"), - - /** - * 合同文件 - */ - CONTRACT_DOCUMENT(14, "合同文件"), - - /** - * 进度款支付 - */ - PROGRESS_PAYMENT(15, "进度款支付"), - - /** - * 内部联系单 - */ - INTERNAL_CONTACT_FORM(16, "内部联系单"), - - /** - * 广告制作申请 - */ - ADVERTISEMENT_APPLICATION(17, "广告制作申请"); - - private final Integer id; - private final String name; - - /** - * 构造方法 - * - * @param id 审批类型ID - * @param name 审批类型名称 - */ - ApprovalTypeEnum(Integer id, String name) { - this.id = id; - this.name = name; - } - - /** - * 获取审批类型ID - * - * @return 审批类型ID - */ - public Integer getId() { - return id; - } - - /** - * 获取审批类型名称 - * - * @return 审批类型名称 - */ - public String getName() { - return name; - } - - /** - * 根据ID获取审批类型枚举 - * - * @param id 审批类型ID - * @return 对应的审批类型枚举,如果未找到返回null - */ - public static ApprovalTypeEnum getById(Integer id) { - if (id == null) { - return null; - } - - for (ApprovalTypeEnum type : values()) { - if (type.id.equals(id)) { - return type; - } - } - return null; - } - - /** - * 根据名称获取审批类型枚举 - * - * @param name 审批类型名称 - * @return 对应的审批类型枚举,如果未找到返回null - */ - public static ApprovalTypeEnum getByName(String name) { - if (name == null || name.isEmpty()) { - return null; - } - - for (ApprovalTypeEnum type : values()) { - if (type.name.equals(name)) { - return type; - } - } - return null; - } - - /** - * 判断给定ID是否为有效的审批类型 - * - * @param id 审批类型ID - * @return 是否有效 - */ - public static boolean isValidId(Integer id) { - return getById(id) != null; - } -} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/AdvertisementDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/AdvertisementDetailVO.java new file mode 100644 index 0000000..7c619d8 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/AdvertisementDetailVO.java @@ -0,0 +1,51 @@ +package com.ruoyi.system.vo; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.List; + +@Data +@ApiModel(value = "广告制作详情返回VO") +public class AdvertisementDetailVO implements Serializable { + + @ApiModelProperty(value = "申请人") + private String userName; + @ApiModelProperty(value = "所属部门") + private String deptName; + @ApiModelProperty(value = "事由/原因/说明") + private String applicationReason; + @ApiModelProperty(value = "附件地址,多个使用英文逗号拼接") + private String attachmentUrl; + @ApiModelProperty(value = "审批申请记录ID") + private Integer approvalApplicationId; + + + @ApiModelProperty(value = "事项标题") + private String title; + @ApiModelProperty(value = "申请日期") + @JsonFormat(pattern = "yyyy-MM-dd ", timezone = "GMT+8") + private LocalDateTime createTime; + @ApiModelProperty(value = "内容") + private String content; + + @ApiModelProperty(value = "数量") + private Integer number; + + @ApiModelProperty(value = "总金额") + private BigDecimal totalAmount; + + @ApiModelProperty(value = "规格") + private String spec; + + @ApiModelProperty(value = "审批流程") + private List<ApprovalFlowNodeListVO> approvalFlowNodeListVOS; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/ApprovalFlowNodeListVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ApprovalFlowNodeListVO.java new file mode 100644 index 0000000..f268cc9 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ApprovalFlowNodeListVO.java @@ -0,0 +1,23 @@ +package com.ruoyi.system.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import io.swagger.models.auth.In; +import lombok.Data; + +import java.io.Serializable; + +@Data +@ApiModel(value = "审批流程通用返回VO") +public class ApprovalFlowNodeListVO implements Serializable { + + @ApiModelProperty(value = "审批流程名称") + private String flowName; + @ApiModelProperty(value = "发起人/审批人名称") + private String userName; + @ApiModelProperty(value = "签字图片地址") + private String signPicUrl; + @ApiModelProperty(value = "审批意见 0-审批不通过,1-审批通过") + private Boolean approvalStatus; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/ApprovalTodoVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ApprovalTodoVO.java new file mode 100644 index 0000000..28b8938 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ApprovalTodoVO.java @@ -0,0 +1,69 @@ +package com.ruoyi.system.vo; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.system.model.OaApprovalTodo; +import com.ruoyi.system.model.OaNotification; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.LocalDateTime; + +@Data +@ApiModel(value = "待办事项列表返回VO") +public class ApprovalTodoVO implements Serializable { + + + @ApiModelProperty(value = "审批类型 1-请假申请,2-外出申请,3-出差申请,4-销假申请,5-采购申请,6-资产入库,7-物品领用,8-物品借用,9-借用归还,10-资产处置,11-资产表更,12-报销申请,13-款项申请,14-合同文件,15-进度款支付,16-内部联系单,17-广告制作申请") + private Integer approvalCategory; + @ApiModelProperty(value = "开始请假/外出/出差/销假时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private LocalDateTime startTime; + + @ApiModelProperty(value = "结束请假/外出/出差/销假时间") + private LocalDateTime endTime; + + @ApiModelProperty(value = "请假/外出/出差/销假时长(天)") + private Double duration; + @ApiModelProperty(value = "申请人名称") + private String applyUserName; + @ApiModelProperty(value = "申请人部门名称") + private String applyDeptName; + @ApiModelProperty(value = "申请单号") + private String applicationCode; + @ApiModelProperty(value = "申请时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + + private LocalDateTime createTime; + + @ApiModelProperty(value = "代办id") + private Integer id; + @ApiModelProperty(value = "审批申请ID") + private Integer applicationId; + + @ApiModelProperty(value = "报销金额/申请金额/合计金额/总金额(报销申请/款项申请/款项支付审批/广告制作)") + private BigDecimal amount; + @ApiModelProperty(value = "入库类型 0-正常入库(资产入库)") + private Boolean storageType; + @ApiModelProperty(value = "领用/借用/归还日期(物品借用/领用归还)") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private LocalDate operateTime; + + @ApiModelProperty(value = "处置方式 0-报废,1-报损,2-捐赠(资产处置)") + private Integer disposeType; + @ApiModelProperty(value = "更改方(资产变更)") + private String ownershipDeptName; + @ApiModelProperty(value = "领用物品(资产领用)") + private String assetName; + @ApiModelProperty(value = "申请说明/申请事由(款项申请/款项支付审批)") + private String description; + @ApiModelProperty(value = "内容(广告制作)") + private String content; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/BackDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/BackDetailVO.java new file mode 100644 index 0000000..b39a4b0 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/BackDetailVO.java @@ -0,0 +1,44 @@ +package com.ruoyi.system.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.basic.PageInfo; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.List; + +@Data +@ApiModel(value = "借用归还审批详情返回VO") +public class BackDetailVO implements Serializable { + + @ApiModelProperty(value = "借用人") + private String userName; + @ApiModelProperty(value = "借用部门") + private String deptName; + @ApiModelProperty(value = "事由/原因/说明") + private String applicationReason; + @ApiModelProperty(value = "附件地址,多个使用英文逗号拼接") + private String attachmentUrl; + @ApiModelProperty(value = "审批申请记录ID") + private Integer approvalApplicationId; + @ApiModelProperty(value = "借用日期") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private LocalDate operateTime; + @ApiModelProperty(value = "归还日期") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private LocalDate expectReturnDate; + @ApiModelProperty(value = "标题") + private String title; + @ApiModelProperty(value = "借用单据号") + private String applicationCode; + + @ApiModelProperty(value = "借用资产列表") + private PageInfo<BackListVO> backListVOPageInfo; + @ApiModelProperty(value = "审批流程") + private List<ApprovalFlowNodeListVO> approvalFlowNodeListVOS; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/BackListVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/BackListVO.java new file mode 100644 index 0000000..a9c46aa --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/BackListVO.java @@ -0,0 +1,31 @@ +package com.ruoyi.system.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDate; + +@Data +@ApiModel(value = "归还资产列表返回VO") +public class BackListVO implements Serializable { + + @ApiModelProperty(value = "资产名称") + private String assetName; + @ApiModelProperty(value = "资产类型") + private String assetTypeName; + @ApiModelProperty(value = "资产编码") + private String assetCode; + @ApiModelProperty(value = "归属部门") + private String ownershipDeptName; + @ApiModelProperty(value = "资产状态") + private String assetStatus; + @ApiModelProperty(value = "使用部门/位置") + private String useName; + @ApiModelProperty(value = "入库日期") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private LocalDate storageTime; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/BorrowDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/BorrowDetailVO.java new file mode 100644 index 0000000..ef68812 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/BorrowDetailVO.java @@ -0,0 +1,40 @@ +package com.ruoyi.system.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.basic.PageInfo; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.List; + +@Data +@ApiModel(value = "物品借用审批详情返回VO") +public class BorrowDetailVO implements Serializable { + + @ApiModelProperty(value = "借用人") + private String userName; + @ApiModelProperty(value = "借用部门") + private String deptName; + @ApiModelProperty(value = "事由/原因/说明") + private String applicationReason; + @ApiModelProperty(value = "附件地址,多个使用英文逗号拼接") + private String attachmentUrl; + @ApiModelProperty(value = "审批申请记录ID") + private Integer approvalApplicationId; + @ApiModelProperty(value = "借用日期") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private LocalDate operateTime; + @ApiModelProperty(value = "预计归还日期") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private LocalDate expectReturnDate; + + @ApiModelProperty(value = "借用资产列表") + private PageInfo<BorrowListVO> borrowListVOPageInfo; + @ApiModelProperty(value = "审批流程") + private List<ApprovalFlowNodeListVO> approvalFlowNodeListVOS; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/BorrowListVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/BorrowListVO.java new file mode 100644 index 0000000..c47b983 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/BorrowListVO.java @@ -0,0 +1,31 @@ +package com.ruoyi.system.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDate; + +@Data +@ApiModel(value = "借用资产列表返回VO") +public class BorrowListVO implements Serializable { + + @ApiModelProperty(value = "资产名称") + private String assetName; + @ApiModelProperty(value = "资产类型") + private String assetTypeName; + @ApiModelProperty(value = "资产编码") + private String assetCode; + @ApiModelProperty(value = "归属部门") + private String ownershipDeptName; + @ApiModelProperty(value = "资产状态") + private String assetStatus; + @ApiModelProperty(value = "使用部门/位置") + private String useName; + @ApiModelProperty(value = "入库日期") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private LocalDate storageTime; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/BusinessTripDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/BusinessTripDetailVO.java new file mode 100644 index 0000000..944d4b3 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/BusinessTripDetailVO.java @@ -0,0 +1,45 @@ +package com.ruoyi.system.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.List; + +@Data +@ApiModel(value = "出差审批详情返回VO") +public class BusinessTripDetailVO implements Serializable { + + @ApiModelProperty(value = "申请人") + private String userName; + @ApiModelProperty(value = "所属部门") + private String deptName; + @ApiModelProperty(value = "事由/原因/说明") + private String applicationReason; + @ApiModelProperty(value = "附件地址,多个使用英文逗号拼接") + private String attachmentUrl; + @ApiModelProperty(value = "外出/出差地点") + private String address; + @ApiModelProperty(value = "出差项目") + private String projectName; + @ApiModelProperty(value = "审批申请记录ID") + private Integer approvalApplicationId; + @ApiModelProperty(value = "开始请假/外出/出差/销假时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + + private LocalDateTime startTime; + @ApiModelProperty(value = "结束请假/外出/出差/销假时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + + private LocalDateTime endTime; + @ApiModelProperty(value = "请假/外出/出差/销假时长(天)") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + + private Double duration; + @ApiModelProperty(value = "审批流程") + private List<ApprovalFlowNodeListVO> approvalFlowNodeListVOS; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/ChangeDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ChangeDetailVO.java new file mode 100644 index 0000000..ffc479d --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ChangeDetailVO.java @@ -0,0 +1,46 @@ +package com.ruoyi.system.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.basic.PageInfo; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.List; + +@Data +@ApiModel(value = "资产变更审批详情返回VO") +public class ChangeDetailVO implements Serializable { + + @ApiModelProperty(value = "领用人") + private String userName; + @ApiModelProperty(value = "领用部门") + private String deptName; + @ApiModelProperty(value = "事由/原因/说明") + private String applicationReason; + @ApiModelProperty(value = "附件地址,多个使用英文逗号拼接") + private String attachmentUrl; + @ApiModelProperty(value = "审批申请记录ID") + private Integer approvalApplicationId; + @ApiModelProperty(value = "领用日期") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private LocalDate ChangeTime; + @ApiModelProperty(value = "标题") + private String title; + @ApiModelProperty(value = "资产类型名称") + private String assetTypeName; + @ApiModelProperty(value = "部门 ") + private String ownershipDeptName; + @ApiModelProperty(value = "仓库") + private String warehouseName; + @ApiModelProperty(value = "地址") + private String address; + @ApiModelProperty(value = "领用资产列表") + private PageInfo<ChangeListVO> grabListVOPageInfo; + @ApiModelProperty(value = "审批流程") + private List<ApprovalFlowNodeListVO> approvalFlowNodeListVOS; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/ChangeListVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ChangeListVO.java new file mode 100644 index 0000000..a9a7fc8 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ChangeListVO.java @@ -0,0 +1,31 @@ +package com.ruoyi.system.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDate; + +@Data +@ApiModel(value = "资产变更列表返回VO") +public class ChangeListVO implements Serializable { + + @ApiModelProperty(value = "资产名称") + private String assetName; + @ApiModelProperty(value = "资产类型") + private String assetTypeName; + @ApiModelProperty(value = "资产编码") + private String assetCode; + @ApiModelProperty(value = "归属部门") + private String ownershipDeptName; + @ApiModelProperty(value = "资产状态") + private String assetStatus; + @ApiModelProperty(value = "使用部门/位置") + private String useName; + @ApiModelProperty(value = "入库日期") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private LocalDate storageTime; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/ContactDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ContactDetailVO.java new file mode 100644 index 0000000..9007069 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ContactDetailVO.java @@ -0,0 +1,31 @@ +package com.ruoyi.system.vo; + +import com.baomidou.mybatisplus.annotation.TableField; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.List; + +@Data +@ApiModel(value = "内部联系单详情返回VO") +public class ContactDetailVO implements Serializable { + + @ApiModelProperty(value = "申请人") + private String userName; + @ApiModelProperty(value = "所属部门") + private String deptName; + @ApiModelProperty(value = "事由/原因/说明") + private String applicationReason; + @ApiModelProperty(value = "附件地址,多个使用英文逗号拼接") + private String attachmentUrl; + @ApiModelProperty(value = "审批申请记录ID") + private Integer approvalApplicationId; + @ApiModelProperty(value = "详细说明") + private String description; + @ApiModelProperty(value = "审批流程") + private List<ApprovalFlowNodeListVO> approvalFlowNodeListVOS; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/ContractDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ContractDetailVO.java new file mode 100644 index 0000000..a433845 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ContractDetailVO.java @@ -0,0 +1,35 @@ +package com.ruoyi.system.vo; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.system.model.OaApprovalApplicationContract; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.List; + +@Data +@ApiModel(value = "待审批合同文件详情返回VO") +public class ContractDetailVO implements Serializable { + + @ApiModelProperty(value = "申请人") + private String userName; + @ApiModelProperty(value = "所属部门") + private String deptName; + @ApiModelProperty(value = "事由/原因/说明") + private String applicationReason; + @ApiModelProperty(value = "附件地址,多个使用英文逗号拼接") + private String attachmentUrl; + @ApiModelProperty(value = "审批申请记录ID") + private Integer approvalApplicationId; + @ApiModelProperty(value = "合同文件地址") + private String contractUrl; + @ApiModelProperty(value = "审批流程") + private List<ApprovalFlowNodeListVO> approvalFlowNodeListVOS; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/DisposeDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/DisposeDetailVO.java new file mode 100644 index 0000000..aa2e520 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/DisposeDetailVO.java @@ -0,0 +1,46 @@ +package com.ruoyi.system.vo; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.basic.PageInfo; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.List; + +@Data +@ApiModel(value = "资产处置审批详情返回VO") +public class DisposeDetailVO implements Serializable { + + @ApiModelProperty(value = "领用人") + private String userName; + @ApiModelProperty(value = "领用部门") + private String deptName; + @ApiModelProperty(value = "事由/原因/说明") + private String applicationReason; + @ApiModelProperty(value = "附件地址,多个使用英文逗号拼接") + private String attachmentUrl; + @ApiModelProperty(value = "审批申请记录ID") + private Integer approvalApplicationId; + @ApiModelProperty(value = "处置日期") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private LocalDate disposeTime; + @ApiModelProperty(value = "标题") + private String title; + @ApiModelProperty(value = "处置资产类型名称") + private String assetTypeName; + @ApiModelProperty(value = "处置方式 0-报废,1-报损,2-捐赠") + private Integer disposeType; + @ApiModelProperty(value = "处置总金额(元)") + private BigDecimal disposeTotalAmount; + @ApiModelProperty(value = "处置资产列表") + private PageInfo<GrabListVO> grabListVOPageInfo; + @ApiModelProperty(value = "审批流程") + private List<ApprovalFlowNodeListVO> approvalFlowNodeListVOS; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/DisposeListVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/DisposeListVO.java new file mode 100644 index 0000000..50f3c17 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/DisposeListVO.java @@ -0,0 +1,31 @@ +package com.ruoyi.system.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDate; + +@Data +@ApiModel(value = "领用资产列表返回VO") +public class DisposeListVO implements Serializable { + + @ApiModelProperty(value = "资产名称") + private String assetName; + @ApiModelProperty(value = "资产类型") + private String assetTypeName; + @ApiModelProperty(value = "资产编码") + private String assetCode; + @ApiModelProperty(value = "归属部门") + private String ownershipDeptName; + @ApiModelProperty(value = "资产状态") + private String assetStatus; + @ApiModelProperty(value = "使用部门/位置") + private String useName; + @ApiModelProperty(value = "入库日期") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private LocalDate storageTime; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/GrabDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/GrabDetailVO.java new file mode 100644 index 0000000..a654cc3 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/GrabDetailVO.java @@ -0,0 +1,41 @@ +package com.ruoyi.system.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.basic.PageInfo; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.List; + +@Data +@ApiModel(value = "物品领用审批详情返回VO") +public class GrabDetailVO implements Serializable { + + @ApiModelProperty(value = "领用人") + private String userName; + @ApiModelProperty(value = "领用部门") + private String deptName; + @ApiModelProperty(value = "事由/原因/说明") + private String applicationReason; + @ApiModelProperty(value = "附件地址,多个使用英文逗号拼接") + private String attachmentUrl; + @ApiModelProperty(value = "审批申请记录ID") + private Integer approvalApplicationId; + @ApiModelProperty(value = "领用日期") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private LocalDate operateTime; + @ApiModelProperty(value = "标题") + private String title; + @ApiModelProperty(value = "资产类型名称") + private String assetTypeName; + @ApiModelProperty(value = "领用资产列表") + private PageInfo<GrabListVO> grabListVOPageInfo; + @ApiModelProperty(value = "审批流程") + private List<ApprovalFlowNodeListVO> approvalFlowNodeListVOS; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/GrabListVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/GrabListVO.java new file mode 100644 index 0000000..f9a58d7 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/GrabListVO.java @@ -0,0 +1,34 @@ +package com.ruoyi.system.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.List; + +@Data +@ApiModel(value = "领用资产列表返回VO") +public class GrabListVO implements Serializable { + + @ApiModelProperty(value = "资产名称") + private String assetName; + @ApiModelProperty(value = "资产类型") + private String assetTypeName; + @ApiModelProperty(value = "资产编码") + private String assetCode; + @ApiModelProperty(value = "归属部门") + private String ownershipDeptName; + @ApiModelProperty(value = "资产状态") + private String assetStatus; + @ApiModelProperty(value = "使用部门/位置") + private String useName; + @ApiModelProperty(value = "入库日期") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private LocalDate storageTime; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/LeaveDestroyDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/LeaveDestroyDetailVO.java new file mode 100644 index 0000000..6a7d6f7 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/LeaveDestroyDetailVO.java @@ -0,0 +1,39 @@ +package com.ruoyi.system.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.List; + +@Data +@ApiModel(value = "销假审批详情返回VO") +public class LeaveDestroyDetailVO implements Serializable { + + @ApiModelProperty(value = "申请人") + private String userName; + @ApiModelProperty(value = "所属部门") + private String deptName; + @ApiModelProperty(value = "事由/原因/说明") + private String applicationReason; + @ApiModelProperty(value = "附件地址,多个使用英文逗号拼接") + private String attachmentUrl; + @ApiModelProperty(value = "审批申请记录ID") + private Integer approvalApplicationId; + @ApiModelProperty(value = "开始请假/外出/出差/销假时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + + private LocalDateTime startTime; + @ApiModelProperty(value = "结束请假/外出/出差/销假时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + + private LocalDateTime endTime; + @ApiModelProperty(value = "请假/外出/出差/销假时长(天)") + private Double duration; + @ApiModelProperty(value = "审批流程") + private List<ApprovalFlowNodeListVO> approvalFlowNodeListVOS; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/LeaveDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/LeaveDetailVO.java new file mode 100644 index 0000000..71cc9bb --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/LeaveDetailVO.java @@ -0,0 +1,41 @@ +package com.ruoyi.system.vo; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.List; + +@Data +@ApiModel(value = "请假审批详情返回VO") +public class LeaveDetailVO implements Serializable { + + @ApiModelProperty(value = "申请人") + private String userName; + @ApiModelProperty(value = "所属部门") + private String deptName; + @ApiModelProperty(value = "事由/原因/说明") + private String applicationReason; + @ApiModelProperty(value = "附件地址,多个使用英文逗号拼接") + private String attachmentUrl; + @ApiModelProperty(value = "审批申请记录ID") + private Integer approvalApplicationId; + @ApiModelProperty(value = "开始请假/外出/出差/销假时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + + private LocalDateTime startTime; + @ApiModelProperty(value = "结束请假/外出/出差/销假时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + + private LocalDateTime endTime; + @ApiModelProperty(value = "请假/外出/出差/销假时长(天)") + private Double duration; + @ApiModelProperty(value = "审批流程") + private List<ApprovalFlowNodeListVO> approvalFlowNodeListVOS; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/MoneyDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/MoneyDetailVO.java new file mode 100644 index 0000000..708594e --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/MoneyDetailVO.java @@ -0,0 +1,50 @@ +package com.ruoyi.system.vo; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.ruoyi.system.model.OaApprovalApplicationReimbursementItem; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.List; + +@Data +@ApiModel(value = "款项审批详情返回VO") +public class MoneyDetailVO implements Serializable { + + @ApiModelProperty(value = "申请人") + private String userName; + @ApiModelProperty(value = "所属部门") + private String deptName; + @ApiModelProperty(value = "事由/原因/说明") + private String applicationReason; + @ApiModelProperty(value = "附件地址,多个使用英文逗号拼接") + private String attachmentUrl; + @ApiModelProperty(value = "审批申请记录ID") + private Integer approvalApplicationId; + @ApiModelProperty(value = "项目名称") + private String projectName; + + @ApiModelProperty(value = "申请金额") + private BigDecimal applyAmount; + + @ApiModelProperty(value = "申请说明") + private String description; + + @ApiModelProperty(value = "付款方") + private String payer; + + @ApiModelProperty(value = "收款方") + private String payee; + + @ApiModelProperty(value = "收款方联系方式") + private String payeeContact; + + @ApiModelProperty(value = "收款方账户") + private String payeeAccount; + @ApiModelProperty(value = "审批流程") + private List<ApprovalFlowNodeListVO> approvalFlowNodeListVOS; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/OutDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/OutDetailVO.java new file mode 100644 index 0000000..da30481 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/OutDetailVO.java @@ -0,0 +1,39 @@ +package com.ruoyi.system.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.List; + +@Data +@ApiModel(value = "外出审批详情返回VO") +public class OutDetailVO implements Serializable { + + @ApiModelProperty(value = "申请人") + private String userName; + @ApiModelProperty(value = "所属部门") + private String deptName; + @ApiModelProperty(value = "事由/原因/说明") + private String applicationReason; + @ApiModelProperty(value = "附件地址,多个使用英文逗号拼接") + private String attachmentUrl; + @ApiModelProperty(value = "审批申请记录ID") + private Integer approvalApplicationId; + @ApiModelProperty(value = "开始请假/外出/出差/销假时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + + private LocalDateTime startTime; + @ApiModelProperty(value = "结束请假/外出/出差/销假时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + + private LocalDateTime endTime; + @ApiModelProperty(value = "请假/外出/出差/销假时长(天)") + private Double duration; + @ApiModelProperty(value = "审批流程") + private List<ApprovalFlowNodeListVO> approvalFlowNodeListVOS; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/PaymentDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/PaymentDetailVO.java new file mode 100644 index 0000000..23a9d1e --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/PaymentDetailVO.java @@ -0,0 +1,32 @@ +package com.ruoyi.system.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.List; + +@Data +@ApiModel(value = "进度款支付详情返回VO") +public class PaymentDetailVO implements Serializable { + + @ApiModelProperty(value = "申请人") + private String userName; + @ApiModelProperty(value = "所属部门") + private String deptName; + @ApiModelProperty(value = "事由/原因/说明") + private String applicationReason; + @ApiModelProperty(value = "附件地址,多个使用英文逗号拼接") + private String attachmentUrl; + @ApiModelProperty(value = "审批申请记录ID") + private Integer approvalApplicationId; + @ApiModelProperty(value = "关联项目") + private String projectName; + @ApiModelProperty(value = "申请金额") + private BigDecimal applyAmount; + @ApiModelProperty(value = "审批流程") + private List<ApprovalFlowNodeListVO> approvalFlowNodeListVOS; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/PurchaseDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/PurchaseDetailVO.java new file mode 100644 index 0000000..64e63b6 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/PurchaseDetailVO.java @@ -0,0 +1,42 @@ +package com.ruoyi.system.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.basic.PageInfo; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.List; + +@Data +@ApiModel(value = "采购审批详情返回VO") +public class PurchaseDetailVO implements Serializable { + + @ApiModelProperty(value = "申请人") + private String userName; + @ApiModelProperty(value = "所属部门") + private String deptName; + @ApiModelProperty(value = "事由/原因/说明") + private String applicationReason; + @ApiModelProperty(value = "附件地址,多个使用英文逗号拼接") + private String attachmentUrl; + @ApiModelProperty(value = "审批申请记录ID") + private Integer approvalApplicationId; + @ApiModelProperty(value = "申请日期") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private LocalDateTime createTime; + @ApiModelProperty(value = "总金额") + private BigDecimal totalAmount; + @ApiModelProperty(value = "标题") + private String title; + @ApiModelProperty(value = "资产类型名称") + private String assetTypeName; + @ApiModelProperty(value = "采购物品清单") + private PageInfo<PurchaseListVO> purchaseListVOPageInfo; + @ApiModelProperty(value = "审批流程") + private List<ApprovalFlowNodeListVO> approvalFlowNodeListVOS; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/PurchaseListVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/PurchaseListVO.java new file mode 100644 index 0000000..712cc66 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/PurchaseListVO.java @@ -0,0 +1,33 @@ +package com.ruoyi.system.vo; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.List; + +@Data +@ApiModel(value = "采购物品清单列表返回VO") +public class PurchaseListVO implements Serializable { + + @ApiModelProperty(value = "资产名称") + private String assetName; + @ApiModelProperty(value = "资产分类") + private String assetTypeName; + @ApiModelProperty(value = "总金额") + private BigDecimal totalAmount; + @ApiModelProperty(value = "规格型号") + private String spec; + @ApiModelProperty(value = "单位") + private String unit; + @ApiModelProperty(value = "数量") + private Integer quantity; + @ApiModelProperty(value = "单价(元)") + private BigDecimal price; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/ReimbursementDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ReimbursementDetailVO.java new file mode 100644 index 0000000..805f548 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ReimbursementDetailVO.java @@ -0,0 +1,35 @@ +package com.ruoyi.system.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.basic.PageInfo; +import com.ruoyi.system.model.OaApprovalApplicationReimbursementItem; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDate; +import java.util.List; + +@Data +@ApiModel(value = "报销审批详情返回VO") +public class ReimbursementDetailVO implements Serializable { + + @ApiModelProperty(value = "申请人") + private String userName; + @ApiModelProperty(value = "所属部门") + private String deptName; + @ApiModelProperty(value = "事由/原因/说明") + private String applicationReason; + @ApiModelProperty(value = "附件地址,多个使用英文逗号拼接") + private String attachmentUrl; + @ApiModelProperty(value = "审批申请记录ID") + private Integer approvalApplicationId; + @ApiModelProperty(value = "报销类型 0-差旅招待交通费,1-企业日常采购,2-房租水电日常,3-聚餐团建,4-其他") + private Integer type; + @ApiModelProperty(value = "费用明细") + private List<OaApprovalApplicationReimbursementItem> approvalApplicationReimbursementItems; + @ApiModelProperty(value = "审批流程") + private List<ApprovalFlowNodeListVO> approvalFlowNodeListVOS; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/StorageDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/StorageDetailVO.java new file mode 100644 index 0000000..6b333a3 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/StorageDetailVO.java @@ -0,0 +1,39 @@ +package com.ruoyi.system.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.basic.PageInfo; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.List; + +@Data +@ApiModel(value = "资产入库审批详情返回VO") +public class StorageDetailVO implements Serializable { + + + + @ApiModelProperty(value = "附件地址,多个使用英文逗号拼接") + private String attachmentUrl; + @ApiModelProperty(value = "审批申请记录ID") + private Integer approvalApplicationId; + @ApiModelProperty(value = "标题") + private String title; + @ApiModelProperty(value = "入库类型 0-正常入库") + private Integer storageType; + @ApiModelProperty(value = "入库日期") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private LocalDate storageTime; + @ApiModelProperty(value = "入库备注") + private String remarks; + + @ApiModelProperty(value = "采购物品清单") + private PageInfo<GrabListVO> grabListVOPageInfo; + @ApiModelProperty(value = "审批流程") + private List<ApprovalFlowNodeListVO> approvalFlowNodeListVOS; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/StorageListVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/StorageListVO.java new file mode 100644 index 0000000..25cf045 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/StorageListVO.java @@ -0,0 +1,59 @@ +package com.ruoyi.system.vo; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDate; + +@Data +@ApiModel(value = "入库资产列表返回VO") +public class StorageListVO implements Serializable { + + @ApiModelProperty(value = "资产名称") + private String assetName; + @ApiModelProperty(value = "规格型号") + private String specificationModel; + @ApiModelProperty(value = "资产类型") + private String assetTypeName; + @ApiModelProperty(value = "计量单位") + private String measurementUnit; + + @ApiModelProperty(value = "数量") + private BigDecimal quantity; + + @ApiModelProperty(value = "单价") + private BigDecimal unitPrice; + @ApiModelProperty(value = "总价值(数量*单价)") + private BigDecimal totalValue; + @ApiModelProperty(value = "入账时间") + @TableField("accounting_date") + private LocalDate accountingDate; + + @ApiModelProperty(value = "会计凭证号") + private String accountingVoucherNo; + + @ApiModelProperty(value = "会计科目") + private String accountingSubject; + + @ApiModelProperty(value = "入账金额") + private BigDecimal accountingAmount; + @ApiModelProperty(value = "入账状态") + private String accountingStatus; + @ApiModelProperty(value = "资产状态") + private String assetStatus; + @ApiModelProperty(value = "归属部门") + private String ownershipDeptName; + @ApiModelProperty(value = "使用人") + private String userName; + @ApiModelProperty(value = "使用部门/位置") + private String useName; + @ApiModelProperty(value = "备注") + private String remarks; + @ApiModelProperty(value = "位置类型 0-部门,1-仓库,2-录入地址") + private Integer addressType; +} diff --git a/ruoyi-system/src/main/resources/mapper/system/OaApprovalTodoMapper.xml b/ruoyi-system/src/main/resources/mapper/system/OaApprovalTodoMapper.xml index 3726d47..dccbb19 100644 --- a/ruoyi-system/src/main/resources/mapper/system/OaApprovalTodoMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/OaApprovalTodoMapper.xml @@ -21,5 +21,15 @@ <sql id="Base_Column_List"> id, application_id, application_code, flow_node_id, user_id, user_name, dept_id, sort_order, status, create_time, handle_time </sql> + <select id="pageList" resultType="com.ruoyi.system.model.OaApprovalTodo"> + select * from oa_approval_todo + where 1=1 + <if test="query.userId != null"> + and user_id = #{query.userId} + </if> + and status = 0 + group by application_id + order by create_time desc + </select> </mapper> -- Gitblit v1.7.1