From bdd967acce69d2420d9866789dfcee42c7e77023 Mon Sep 17 00:00:00 2001 From: mitao <2763622819@qq.com> Date: 星期五, 19 九月 2025 14:10:44 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalTodoController.java | 380 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 378 insertions(+), 2 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalTodoController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalTodoController.java index c200d9d..f6309e8 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalTodoController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalTodoController.java @@ -1,8 +1,34 @@ package com.ruoyi.web.controller.api; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.basic.PageInfo; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.core.domain.entity.TDept; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.framework.web.service.TokenService; +import com.ruoyi.system.emums.ApprovalTypeEnum; +import com.ruoyi.system.model.*; +import com.ruoyi.system.query.ApprovalTodoListQuery; +import com.ruoyi.system.query.NotificationListQuery; +import com.ruoyi.system.service.*; +import com.ruoyi.system.vo.ApprovalFlowNodeListVO; +import com.ruoyi.system.vo.ApprovalTodoVO; +import com.ruoyi.system.vo.ContractDetailVO; +import com.ruoyi.system.vo.system.NotificationVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiModelProperty; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import org.springframework.util.StringUtils; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; /** * <p> @@ -13,8 +39,358 @@ * @since 2025-09-15 */ @RestController +@Api(tags ="待办事项") @RequestMapping("/oa-approval-todo") public class OaApprovalTodoController { + @Resource + private OaApprovalTodoService approvalTodoService; + @Resource + private OaApprovalFlowAuditService approvalFlowAuditService; + @Resource + private OaApprovalApplicationStorageService approvalApplicationStorageService; + @Resource + private OaApprovalApplicationPurchaseService approvalApplicationPurchaseService; + @Resource + private OaApprovalApplicationAssetItemService approvalApplicationAssetItemService; + @Resource + private TokenService tokenService; + @Resource + private OaApprovalService approvalService; + @Resource + private OaApprovalApplicationsService approvalApplicationsService; + @Resource + private OaApprovalApplicationAdvertisementService approvalApplicationAdvertisementService; + @Resource + private OaApprovalApplicationContactService approvalApplicationContactService; + @Resource + private OaApprovalApplicationPaymentService approvalApplicationPaymentService; + @Resource + private OaApprovalApplicationContractService approvalApplicationContractService; + @Resource + private OaApprovalApplicationMoneyService approvalApplicationMoneyService; + @Resource + private AssetMainService assetMainService; + @Resource + private OaApprovalApplicationReimbursementService approvalApplicationReimbursementService; + @Resource + private OaApprovalApplicationReimbursementItemService approvalApplicationReimbursementItemService; + @Resource + private OaApprovalFlowNodeService approvalFlowNodeService; + @Resource + private OaApprovalApplicationAssetService approvalApplicationAssetService; + @Resource + private ISysUserService sysUserService; + @Resource + private OaApprovalApplicationDisposeService approvalApplicationDisposeService; + @Resource + private OaApprovalApplicationChangeService approvalApplicationChangeService; + @Resource + private OaApprovalApplicationAttendanceService approvalApplicationAttendanceService; + @Resource + private TDeptService deptService; + @Resource + private OaApprovalTodoService oaApprovalTodoService; + @Resource + private OaApprovalFlowService approvalFlowService; + @ApiOperation("测试接口") + @PostMapping("/test") + public void test() { + List<OaApproval> approvals = approvalService.list(); + List<OaApprovalFlow> list = approvalFlowService.list(); + List<OaApprovalFlowNode> oaApprovalFlowNodes = new ArrayList<>(); + for (OaApproval approval : approvals) { + int i = 1; + for (OaApprovalFlow oaApprovalFlow : list) { + OaApprovalFlowNode oaApprovalFlowNode = new OaApprovalFlowNode(); + oaApprovalFlowNode.setApprovalId(approval.getId()); + oaApprovalFlowNode.setApprovalFlowId(oaApprovalFlow.getId()); + oaApprovalFlowNode.setFlowName(oaApprovalFlow.getFlowName()); + oaApprovalFlowNode.setSortOrder(i); + oaApprovalFlowNode.setApprovalType(0); + oaApprovalFlowNode.setStatus(true); + oaApprovalFlowNode.setSignFlag(true); + i++; + oaApprovalFlowNodes.add(oaApprovalFlowNode); + } + } + approvalFlowNodeService.saveBatch(oaApprovalFlowNodes); + } + + + @ApiOperation("待办事项列表") + @PostMapping("/pageList") + public R<PageInfo<ApprovalTodoVO>> pageList(@RequestBody ApprovalTodoListQuery query) { + + List<ApprovalTodoVO> resList = new ArrayList<>(); + Long userId = tokenService.getLoginUser().getUserId(); + query.setUserId(userId); + PageInfo<ApprovalTodoVO> res = new PageInfo<>(query.getPageNum(), query.getPageSize()); + + PageInfo<OaApprovalTodo> pageInfo = approvalTodoService.pageList(query); + List<OaApprovalTodo> list = pageInfo.getRecords(); + if (list.isEmpty()){ + return R.ok(new PageInfo<>()); + } + res.setTotal(pageInfo.getTotal()); + List<Integer> applicationIds = list.stream().map(OaApprovalTodo::getApplicationId).collect(Collectors.toList()); + Map<Integer, OaApprovalApplicationReimbursement> approvalApplicationReimbursementMap = approvalApplicationReimbursementService.lambdaQuery() + .in(OaApprovalApplicationReimbursement::getApprovalApplicationId, applicationIds).list() + .stream().collect(Collectors.toMap(OaApprovalApplicationReimbursement::getApprovalApplicationId, e -> e)); + Map<Integer, OaApprovalApplicationMoney> oaApprovalApplicationMoneyMap = approvalApplicationMoneyService.lambdaQuery() + .in(OaApprovalApplicationMoney::getApprovalApplicationId, applicationIds).list() + .stream().collect(Collectors.toMap(OaApprovalApplicationMoney::getApprovalApplicationId, e -> e)); + Map<Integer, OaApprovalApplicationPayment> approvalApplicationPaymentMap = approvalApplicationPaymentService.lambdaQuery() + .in(OaApprovalApplicationPayment::getApprovalApplicationId, applicationIds).list() + .stream().collect(Collectors.toMap(OaApprovalApplicationPayment::getApprovalApplicationId, e -> e)); + Map<Integer, OaApprovalApplicationStorage> applicationStorageMap = approvalApplicationStorageService.lambdaQuery() + .in(OaApprovalApplicationStorage::getApprovalApplicationId, applicationIds).list() + .stream().collect(Collectors.toMap(OaApprovalApplicationStorage::getApprovalApplicationId, e -> e)); + Map<Integer, OaApprovalApplicationAsset> approvalApplicationAssetMap = approvalApplicationAssetService.lambdaQuery() + .in(OaApprovalApplicationAsset::getApprovalApplicationId, applicationIds).list() + .stream().collect(Collectors.toMap(OaApprovalApplicationAsset::getApprovalApplicationId, e -> e)); + Map<Integer, OaApprovalApplicationDispose> approvalApplicationDisposeMap = approvalApplicationDisposeService.lambdaQuery() + .in(OaApprovalApplicationDispose::getApprovalApplicationId, applicationIds).list() + .stream().collect(Collectors.toMap(OaApprovalApplicationDispose::getApprovalApplicationId, e -> e)); + Map<Integer, OaApprovalApplicationChange> approvalApplicationChangeMap = approvalApplicationChangeService.lambdaQuery() + .in(OaApprovalApplicationChange::getApprovalApplicationId, applicationIds).list() + .stream().collect(Collectors.toMap(OaApprovalApplicationChange::getApprovalApplicationId, e -> e)); + Map<Integer, OaApprovalApplicationPurchase> approvalApplicationPurchaseMap = approvalApplicationPurchaseService.lambdaQuery() + .in(OaApprovalApplicationPurchase::getApprovalApplicationId, applicationIds).list() + .stream().collect(Collectors.toMap(OaApprovalApplicationPurchase::getApprovalApplicationId, e -> e)); + Map<Integer, List<OaApprovalApplicationAssetItem>> approvalApplicationAssetItemMap = approvalApplicationAssetItemService.lambdaQuery() + .in(OaApprovalApplicationAssetItem::getApprovalApplicationId, applicationIds).list() + .stream().collect(Collectors.groupingBy(OaApprovalApplicationAssetItem::getApprovalApplicationId)); + Map<Integer, OaApprovalApplicationAdvertisement> approvalApplicationAdvertisementMap = approvalApplicationAdvertisementService.lambdaQuery() + .in(OaApprovalApplicationAdvertisement::getApprovalApplicationId, applicationIds).list() + .stream().collect(Collectors.toMap(OaApprovalApplicationAdvertisement::getApprovalApplicationId, e -> e)); + Map<Integer, OaApprovalApplicationAttendance> applicationAttendanceMap = approvalApplicationAttendanceService.lambdaQuery() + .in(OaApprovalApplicationAttendance::getApprovalApplicationId, applicationIds).list() + .stream().collect(Collectors.toMap(OaApprovalApplicationAttendance::getApprovalApplicationId, e -> e)); + + Map<Integer, AssetMain> assetMainMap = assetMainService.list().stream().collect(Collectors.toMap(AssetMain::getId, e -> e)); + Map<Integer, OaApprovalTodo> approvalTodoMap = list.stream().collect(Collectors.toMap(OaApprovalTodo::getApplicationId, e -> e)); + Map<Long, SysUser> userMap = sysUserService.selectAllList().stream().collect(Collectors.toMap(SysUser::getUserId, e -> e)); + Map<Integer, TDept> deptMap = deptService.list().stream().collect(Collectors.toMap(TDept::getId, e -> e)); + Map<Integer, OaApproval> approvalMap = approvalService.list().stream().collect(Collectors.toMap(OaApproval::getId, e -> e)); + List<OaApprovalApplications> approvalApplications = approvalApplicationsService.lambdaQuery().in(OaApprovalApplications::getId, applicationIds).list(); + for (OaApprovalApplications approvalApplication : approvalApplications) { + ApprovalTodoVO approvalTodoVO = new ApprovalTodoVO(); + approvalTodoVO.setApprovalCategory(approvalMap.get(approvalApplication.getApprovalId()).getApprovalCategory()); + switch (approvalTodoVO.getApprovalCategory()){ + case 1: + case 2: + case 3: + case 4: + default: + OaApprovalApplicationAttendance oaApprovalApplicationAttendance = applicationAttendanceMap.get(approvalApplication.getId()); + if (oaApprovalApplicationAttendance!=null){ + approvalTodoVO.setStartTime(oaApprovalApplicationAttendance.getStartTime()); + approvalTodoVO.setEndTime(oaApprovalApplicationAttendance.getEndTime()); + approvalTodoVO.setDuration(oaApprovalApplicationAttendance.getDuration()); + } + break; + } + SysUser sysUser = userMap.get(approvalApplication.getApplicantUserId().longValue()); + if (sysUser!=null){ + approvalTodoVO.setApplyUserName(sysUser.getUserName()); + TDept tDept = deptMap.get(Integer.parseInt(sysUser.getDeptId())); + if (tDept!=null){ + approvalTodoVO.setApplyDeptName(tDept.getDeptName()); + } + } + approvalTodoVO.setApplicationCode(approvalApplication.getApplicationCode()); + approvalTodoVO.setCreateTime(approvalApplication.getCreateTime()); + OaApprovalTodo oaApprovalTodo = approvalTodoMap.get(approvalApplication.getId()); + approvalTodoVO.setId(oaApprovalTodo.getId()); + approvalTodoVO.setApplicationId(approvalApplication.getId()); + + switch (approvalTodoVO.getApprovalCategory()){ + case 5: + OaApprovalApplicationPurchase oaApprovalApplicationPurchase = approvalApplicationPurchaseMap.get(approvalApplication.getId()); + if (oaApprovalApplicationPurchase!=null){ + approvalTodoVO.setAmount(oaApprovalApplicationPurchase.getTotalAmount()); + } + break; + case 6: + OaApprovalApplicationStorage oaApprovalApplicationStorage = applicationStorageMap.get(approvalApplication.getId()); + if (oaApprovalApplicationStorage!=null){ + approvalTodoVO.setStorageType(oaApprovalApplicationStorage.getStorageType()); + } + break; + case 7: + StringBuilder temp = new StringBuilder(); + List<OaApprovalApplicationAssetItem> oaApprovalApplicationAssetItems = approvalApplicationAssetItemMap.get(approvalApplication.getId()); + if (oaApprovalApplicationAssetItems!=null){ + for (OaApprovalApplicationAssetItem oaApprovalApplicationAssetItem : oaApprovalApplicationAssetItems) { + AssetMain assetMain = assetMainMap.get(oaApprovalApplicationAssetItem.getAssetMainId()); + if (assetMain!=null){ + temp.append(assetMain.getAssetName()).append(","); + } + } + // 去除最后一位字符 + if (StringUtils.hasLength(temp.toString())){ + approvalTodoVO.setAssetName(temp.substring(0, temp.length() - 1)); + }else{ + approvalTodoVO.setAssetName(""); + } + } + break; + case 8: + OaApprovalApplicationAsset oaApprovalApplicationAssetOut = approvalApplicationAssetMap.get(approvalApplication.getId()); + if (oaApprovalApplicationAssetOut!=null){ + approvalTodoVO.setOperateTime(oaApprovalApplicationAssetOut.getOperateTime()); + } + break; + case 9: + OaApprovalApplicationAsset oaApprovalApplicationAssetBack = approvalApplicationAssetMap.get(approvalApplication.getId()); + if (oaApprovalApplicationAssetBack!=null){ + approvalTodoVO.setOperateTime(oaApprovalApplicationAssetBack.getExpectReturnDate()); + } + break; + case 10: + OaApprovalApplicationDispose oaApprovalApplicationDispose = approvalApplicationDisposeMap.get(approvalApplication.getId()); + if (oaApprovalApplicationDispose!=null){ + approvalTodoVO.setDisposeType(oaApprovalApplicationDispose.getDisposeType()); + } + break; + case 11: + OaApprovalApplicationChange oaApprovalApplicationChange = approvalApplicationChangeMap.get(approvalApplication.getId()); + if (oaApprovalApplicationChange!=null){ + Integer ownershipDeptId = oaApprovalApplicationChange.getOwnershipDeptId(); + TDept tDept = deptMap.get(ownershipDeptId); + if (tDept!=null){ + approvalTodoVO.setOwnershipDeptName(tDept.getDeptName()); + } + } + break; + case 12: + OaApprovalApplicationReimbursement oaApprovalApplicationReimbursement = approvalApplicationReimbursementMap.get(approvalApplication.getId()); + if (oaApprovalApplicationReimbursement!=null){ + approvalTodoVO.setAmount(oaApprovalApplicationReimbursement.getReimbursementAmount()); + } + break; + case 13: + OaApprovalApplicationMoney oaApprovalApplicationMoney = oaApprovalApplicationMoneyMap.get(approvalApplication.getId()); + if (oaApprovalApplicationMoney!=null){ + approvalTodoVO.setAmount(oaApprovalApplicationMoney.getApplyAmount()); + approvalTodoVO.setDescription(oaApprovalApplicationMoney.getDescription()); + + } + break; + case 15: + OaApprovalApplicationPayment oaApprovalApplicationPayment = approvalApplicationPaymentMap.get(approvalApplication.getId()); + if (oaApprovalApplicationPayment!=null){ + approvalTodoVO.setAmount(oaApprovalApplicationPayment.getApplyAmount()); + approvalTodoVO.setDescription(approvalApplication.getApplicationReason()); + + } + break; + case 17: + OaApprovalApplicationAdvertisement oaApprovalApplicationAdvertisement = approvalApplicationAdvertisementMap.get(approvalApplication.getId()); + if (oaApprovalApplicationAdvertisement!=null){ + approvalTodoVO.setContent(oaApprovalApplicationAdvertisement.getContent()); + approvalTodoVO.setAmount(oaApprovalApplicationAdvertisement.getTotalAmount()); + } + break; + } + + resList.add(approvalTodoVO); + } + res.setRecords(resList); + return R.ok(res); + } + + + @ApiOperation(value = "合同文件审批详情") + @GetMapping(value = "/detailContract") + public R<ContractDetailVO> detailContract(@ApiParam("待办列表id") Integer id) { + OaApprovalTodo approvalTodo = approvalTodoService.getById(id); + OaApprovalApplications approvalApplications = approvalApplicationsService.getById(approvalTodo.getApplicationId()); + OaApprovalApplicationContract approvalApplicationContract = approvalApplicationContractService.lambdaQuery() + .eq(OaApprovalApplicationContract::getApprovalApplicationId, approvalApplications.getId()) + .last("limit 1").one(); + List<OaApprovalFlowAudit> approvalFlowAudits = approvalFlowAuditService.lambdaQuery().eq(OaApprovalFlowAudit::getApprovalApplicationId, approvalApplications.getId()) + .orderByAsc(OaApprovalFlowAudit::getSortOrder) + .list(); + ContractDetailVO res = new ContractDetailVO(); + List<OaApprovalFlowNode> approvalFlowNodes = approvalFlowNodeService.lambdaQuery() + .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.CONTRACT.getCode()) + .orderByAsc(OaApprovalFlowNode::getSortOrder) + .eq(OaApprovalFlowNode::getStatus, 1).list(); + List<ApprovalFlowNodeListVO> flowNodeList = getFlowNodeList(approvalApplications, res, approvalFlowAudits,approvalFlowNodes); + res.setApprovalFlowNodeListVOS(flowNodeList); + res.setApprovalApplicationId(approvalApplications.getId()); + res.setContractUrl(approvalApplicationContract.getContractUrl()); + res.setApplicationReason(approvalApplications.getApplicationReason()); + res.setAttachmentUrl(approvalApplications.getAttachmentUrl()); + return R.ok(res); + } + @ApiOperation(value = "进度款支付审批详情") + @GetMapping(value = "/detailPayment") + public R<ContractDetailVO> detailPayment(@ApiParam("待办列表id") Integer id) { + OaApprovalTodo approvalTodo = approvalTodoService.getById(id); + OaApprovalApplications approvalApplications = approvalApplicationsService.getById(approvalTodo.getApplicationId()); + OaApprovalApplicationContract approvalApplicationContract = approvalApplicationContractService.lambdaQuery() + .eq(OaApprovalApplicationContract::getApprovalApplicationId, approvalApplications.getId()) + .last("limit 1").one(); + List<OaApprovalFlowAudit> approvalFlowAudits = approvalFlowAuditService.lambdaQuery().eq(OaApprovalFlowAudit::getApprovalApplicationId, approvalApplications.getId()) + .orderByAsc(OaApprovalFlowAudit::getSortOrder) + .list(); + ContractDetailVO res = new ContractDetailVO(); + List<OaApprovalFlowNode> approvalFlowNodes = approvalFlowNodeService.lambdaQuery() + .eq(OaApprovalFlowNode::getApprovalId, ApprovalTypeEnum.PAYMENT.getCode()) + .orderByAsc(OaApprovalFlowNode::getSortOrder) + .eq(OaApprovalFlowNode::getStatus, 1).list(); + List<ApprovalFlowNodeListVO> flowNodeList = getFlowNodeList(approvalApplications, res, approvalFlowAudits,approvalFlowNodes); + res.setApprovalFlowNodeListVOS(flowNodeList); + res.setApprovalApplicationId(approvalApplications.getId()); + res.setContractUrl(approvalApplicationContract.getContractUrl()); + res.setApplicationReason(approvalApplications.getApplicationReason()); + res.setAttachmentUrl(approvalApplications.getAttachmentUrl()); + return R.ok(res); + } + private List<ApprovalFlowNodeListVO> getFlowNodeList(OaApprovalApplications approvalApplications, ContractDetailVO res, List<OaApprovalFlowAudit> approvalFlowAudits + ,List<OaApprovalFlowNode> approvalFlowNodes) { + List<ApprovalFlowNodeListVO> approvalFlowNodeListVOS = new ArrayList<>(); + Map<Integer, OaApprovalFlowAudit> approvalFlowAuditMap = approvalFlowAudits.stream().collect(Collectors.toMap(OaApprovalFlowAudit::getFlowNodeId, e -> e)); + + ApprovalFlowNodeListVO approvalFlowNodeListVO = new ApprovalFlowNodeListVO(); + approvalFlowNodeListVO.setFlowName("发起"); + SysUser sysUser = sysUserService.selectUserById(approvalApplications.getApplicantUserId().longValue()); + if (sysUser!=null){ + approvalFlowNodeListVO.setUserName(sysUser.getUserName()); + res.setUserName(sysUser.getUserName()); + TDept dept = deptService.getById(sysUser.getDeptId()); + if (dept!=null){ + res.setDeptName(dept.getDeptName()); + } + } + approvalFlowNodeListVOS.add(approvalFlowNodeListVO); + for (OaApprovalFlowNode approvalFlowNode : approvalFlowNodes) { + ApprovalFlowNodeListVO approvalFlowNodeVO = new ApprovalFlowNodeListVO(); + + OaApprovalFlowAudit approvalFlowAudit = approvalFlowAuditMap.get(approvalFlowNode.getId()); + if (approvalFlowAudit!=null){ + approvalFlowNodeVO.setFlowName(approvalFlowAudit.getFlowName()); + approvalFlowNodeVO.setUserName(approvalFlowAudit.getUserName()); + approvalFlowNodeVO.setSignPicUrl(approvalFlowAudit.getSignPicUrl()); + approvalFlowNodeVO.setApprovalStatus(approvalFlowAudit.getApprovalStatus()); + }else{ + approvalFlowNodeVO.setFlowName(approvalFlowNode.getFlowName()); + } + approvalFlowNodeListVOS.add(approvalFlowNodeVO); + + } + for (OaApprovalFlowAudit approvalFlowAudit : approvalFlowAudits) { + ApprovalFlowNodeListVO approvalFlowNodeVO = new ApprovalFlowNodeListVO(); + approvalFlowNodeVO.setFlowName(approvalFlowAudit.getFlowName()); + approvalFlowNodeVO.setUserName(approvalFlowAudit.getUserName()); + approvalFlowNodeVO.setSignPicUrl(approvalFlowAudit.getSignPicUrl()); + approvalFlowNodeVO.setApprovalStatus(approvalFlowAudit.getApprovalStatus()); + approvalFlowNodeListVOS.add(approvalFlowNodeVO); + } + return approvalFlowNodeListVOS; + } } -- Gitblit v1.7.1