ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationsController.java
@@ -6,13 +6,13 @@ 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.model.OaApprovalApplications; import com.ruoyi.system.model.OaApprovalFlowNode; 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.service.*; import com.ruoyi.system.utils.ApprovalTypeEnum; import com.ruoyi.system.utils.UUIDUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -20,11 +20,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; /** * <p> @@ -35,7 +41,7 @@ * @since 2025-09-15 */ @RestController @Api("审批-发起审批") @Api(tags ="审批-发起审批") @RequestMapping("/oa-approval-applications") public class OaApprovalApplicationsController { @Resource @@ -45,20 +51,38 @@ @Resource private OaApprovalApplicationsService approvalApplicationsService; @Resource private OaApprovalApplicationAdvertisementService approvalApplicationAdvertisementService; @Resource private OaApprovalApplicationContactService approvalApplicationContactService; @Resource private OaApprovalApplicationPaymentService approvalApplicationPaymentService; @Resource private OaApprovalApplicationContractService approvalApplicationContractService; @Resource private OaApprovalApplicationMoneyService approvalApplicationMoneyService; @Resource private OaApprovalApplicationReimbursementService approvalApplicationReimbursementService; @Resource private OaApprovalApplicationReimbursementItemService approvalApplicationReimbursementItemService; @Resource private OaApprovalFlowNodeService approvalFlowNodeService; @Resource private ISysUserService sysUserService; @Resource private OaApprovalApplicationAttendanceService approvalApplicationAttendanceService; @Resource private TDeptService deptService; @Resource private OaApprovalTodoService oaApprovalTodoService; @Log(title = "审批-发起请假", businessType = BusinessType.INSERT) @ApiOperation(value = "发起请假") @PostMapping(value = "/setApproval") public R setDept(@RequestBody AddLeaveDTO dto) { @PostMapping(value = "/addLeave") public R addLeave(@RequestBody AddLeaveDTO dto) { SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); String code = "qj"+sdf.format(new Date()) + UUIDUtil.getNumberRandom(5); String code = "Leave-"+sdf.format(new Date()) + UUIDUtil.getNumberRandom(5); OaApprovalApplications oaApprovalApplications = new OaApprovalApplications(); oaApprovalApplications.setApplicationCode(code); oaApprovalApplications.setApprovalId(ApprovalTypeEnum.LEAVE_APPLICATION.getId()); oaApprovalApplications.setApprovalId(ApprovalTypeEnum.LEAVE.getCode()); oaApprovalApplications.setApplicantUserId(tokenService.getLoginUser().getUserId().intValue()); SysUser sysUser = sysUserService.selectUserById(tokenService.getLoginUser().getUserId()); TDept dept = deptService.getById(sysUser.getDeptId()); @@ -69,8 +93,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(); } } 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; 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(); } } 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(); } } 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; } } 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()){ ruoyi-system/src/main/java/com/ruoyi/system/dto/AddAdvertisementDTO.java
New file @@ -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; } ruoyi-system/src/main/java/com/ruoyi/system/dto/AddBusinessTripDTO.java
New file @@ -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; } ruoyi-system/src/main/java/com/ruoyi/system/dto/AddContactDTO.java
New file @@ -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; } ruoyi-system/src/main/java/com/ruoyi/system/dto/AddContractDTO.java
New file @@ -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; } ruoyi-system/src/main/java/com/ruoyi/system/dto/AddLeaveDestroyDTO.java
New file @@ -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; } ruoyi-system/src/main/java/com/ruoyi/system/dto/AddMoneyDTO.java
New file @@ -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; } ruoyi-system/src/main/java/com/ruoyi/system/dto/AddOutDTO.java
New file @@ -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; } ruoyi-system/src/main/java/com/ruoyi/system/dto/AddPaymentDTO.java
New file @@ -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; } ruoyi-system/src/main/java/com/ruoyi/system/dto/AddReimbursementDTO.java
New file @@ -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; } ruoyi-system/src/main/java/com/ruoyi/system/dto/AuditDTO.java
New file @@ -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; } 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; } ruoyi-system/src/main/java/com/ruoyi/system/emums/ApprovalFlowNodeEnum.java
New file @@ -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; } } 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); } 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") 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; } 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") 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; } 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") 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") 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; } ruoyi-system/src/main/java/com/ruoyi/system/query/ApprovalTodoListQuery.java
New file @@ -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; } 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); } 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("上级部门下没有找到用户"); } ruoyi-system/src/main/java/com/ruoyi/system/utils/ApprovalTypeEnum.java
File was deleted ruoyi-system/src/main/java/com/ruoyi/system/vo/AdvertisementDetailVO.java
New file @@ -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; } ruoyi-system/src/main/java/com/ruoyi/system/vo/ApprovalFlowNodeListVO.java
New file @@ -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; } ruoyi-system/src/main/java/com/ruoyi/system/vo/ApprovalTodoVO.java
New file @@ -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; } ruoyi-system/src/main/java/com/ruoyi/system/vo/BackDetailVO.java
New file @@ -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; } ruoyi-system/src/main/java/com/ruoyi/system/vo/BackListVO.java
New file @@ -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; } ruoyi-system/src/main/java/com/ruoyi/system/vo/BorrowDetailVO.java
New file @@ -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; } ruoyi-system/src/main/java/com/ruoyi/system/vo/BorrowListVO.java
New file @@ -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; } ruoyi-system/src/main/java/com/ruoyi/system/vo/BusinessTripDetailVO.java
New file @@ -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; } ruoyi-system/src/main/java/com/ruoyi/system/vo/ChangeDetailVO.java
New file @@ -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; } ruoyi-system/src/main/java/com/ruoyi/system/vo/ChangeListVO.java
New file @@ -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; } ruoyi-system/src/main/java/com/ruoyi/system/vo/ContactDetailVO.java
New file @@ -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; } ruoyi-system/src/main/java/com/ruoyi/system/vo/ContractDetailVO.java
New file @@ -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; } ruoyi-system/src/main/java/com/ruoyi/system/vo/DisposeDetailVO.java
New file @@ -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; } ruoyi-system/src/main/java/com/ruoyi/system/vo/DisposeListVO.java
New file @@ -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; } ruoyi-system/src/main/java/com/ruoyi/system/vo/GrabDetailVO.java
New file @@ -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; } ruoyi-system/src/main/java/com/ruoyi/system/vo/GrabListVO.java
New file @@ -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; } ruoyi-system/src/main/java/com/ruoyi/system/vo/LeaveDestroyDetailVO.java
New file @@ -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; } ruoyi-system/src/main/java/com/ruoyi/system/vo/LeaveDetailVO.java
New file @@ -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; } ruoyi-system/src/main/java/com/ruoyi/system/vo/MoneyDetailVO.java
New file @@ -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; } ruoyi-system/src/main/java/com/ruoyi/system/vo/OutDetailVO.java
New file @@ -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; } ruoyi-system/src/main/java/com/ruoyi/system/vo/PaymentDetailVO.java
New file @@ -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; } ruoyi-system/src/main/java/com/ruoyi/system/vo/PurchaseDetailVO.java
New file @@ -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; } ruoyi-system/src/main/java/com/ruoyi/system/vo/PurchaseListVO.java
New file @@ -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; } ruoyi-system/src/main/java/com/ruoyi/system/vo/ReimbursementDetailVO.java
New file @@ -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; } ruoyi-system/src/main/java/com/ruoyi/system/vo/StorageDetailVO.java
New file @@ -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; } ruoyi-system/src/main/java/com/ruoyi/system/vo/StorageListVO.java
New file @@ -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; } 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>