package com.ruoyi.web.controller.api;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
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.dto.AuditDTO;
import com.ruoyi.system.emums.ApprovalTypeEnum;
import com.ruoyi.system.model.AssetMain;
import com.ruoyi.system.model.AssetType;
import com.ruoyi.system.model.OaApproval;
import com.ruoyi.system.model.OaApprovalApplicationAdvertisement;
import com.ruoyi.system.model.OaApprovalApplicationAsset;
import com.ruoyi.system.model.OaApprovalApplicationAssetItem;
import com.ruoyi.system.model.OaApprovalApplicationAttendance;
import com.ruoyi.system.model.OaApprovalApplicationChange;
import com.ruoyi.system.model.OaApprovalApplicationContract;
import com.ruoyi.system.model.OaApprovalApplicationDispose;
import com.ruoyi.system.model.OaApprovalApplicationMoney;
import com.ruoyi.system.model.OaApprovalApplicationPayment;
import com.ruoyi.system.model.OaApprovalApplicationPurchase;
import com.ruoyi.system.model.OaApprovalApplicationReimbursement;
import com.ruoyi.system.model.OaApprovalApplicationReimbursementItem;
import com.ruoyi.system.model.OaApprovalApplicationStorage;
import com.ruoyi.system.model.OaApprovalApplications;
import com.ruoyi.system.model.OaApprovalFlowAudit;
import com.ruoyi.system.model.OaApprovalFlowNode;
import com.ruoyi.system.model.OaApprovalTodo;
import com.ruoyi.system.query.ApprovalDetailQuery;
import com.ruoyi.system.query.ApprovalTodoListQuery;
import com.ruoyi.system.service.AssetMainService;
import com.ruoyi.system.service.AssetTypeService;
import com.ruoyi.system.service.ISysUserService;
import com.ruoyi.system.service.OaApprovalApplicationAdvertisementService;
import com.ruoyi.system.service.OaApprovalApplicationAssetItemService;
import com.ruoyi.system.service.OaApprovalApplicationAssetService;
import com.ruoyi.system.service.OaApprovalApplicationAttendanceService;
import com.ruoyi.system.service.OaApprovalApplicationChangeService;
import com.ruoyi.system.service.OaApprovalApplicationContactService;
import com.ruoyi.system.service.OaApprovalApplicationContractService;
import com.ruoyi.system.service.OaApprovalApplicationDisposeService;
import com.ruoyi.system.service.OaApprovalApplicationMoneyService;
import com.ruoyi.system.service.OaApprovalApplicationPaymentService;
import com.ruoyi.system.service.OaApprovalApplicationPurchaseItemService;
import com.ruoyi.system.service.OaApprovalApplicationPurchaseService;
import com.ruoyi.system.service.OaApprovalApplicationReimbursementItemService;
import com.ruoyi.system.service.OaApprovalApplicationReimbursementService;
import com.ruoyi.system.service.OaApprovalApplicationStorageAssetService;
import com.ruoyi.system.service.OaApprovalApplicationStorageService;
import com.ruoyi.system.service.OaApprovalApplicationsService;
import com.ruoyi.system.service.OaApprovalFlowAuditService;
import com.ruoyi.system.service.OaApprovalFlowNodeService;
import com.ruoyi.system.service.OaApprovalFlowService;
import com.ruoyi.system.service.OaApprovalService;
import com.ruoyi.system.service.OaApprovalTodoService;
import com.ruoyi.system.service.TDeptService;
import com.ruoyi.system.vo.AdvertisementDetailVO;
import com.ruoyi.system.vo.ApprovalFlowNodeListVO;
import com.ruoyi.system.vo.ApprovalTodoVO;
import com.ruoyi.system.vo.BackDetailVO;
import com.ruoyi.system.vo.BorrowDetailVO;
import com.ruoyi.system.vo.BusinessTripDetailVO;
import com.ruoyi.system.vo.ChangeDetailVO;
import com.ruoyi.system.vo.ContactDetailVO;
import com.ruoyi.system.vo.ContractDetailVO;
import com.ruoyi.system.vo.DisposeDetailVO;
import com.ruoyi.system.vo.GrabDetailVO;
import com.ruoyi.system.vo.GrabListVO;
import com.ruoyi.system.vo.LeaveDestroyDetailVO;
import com.ruoyi.system.vo.LeaveDetailVO;
import com.ruoyi.system.vo.MoneyDetailVO;
import com.ruoyi.system.vo.OutDetailVO;
import com.ruoyi.system.vo.PaymentDetailVO;
import com.ruoyi.system.vo.PurchaseDetailVO;
import com.ruoyi.system.vo.PurchaseListVO;
import com.ruoyi.system.vo.ReimbursementDetailVO;
import com.ruoyi.system.vo.StorageDetailVO;
import com.ruoyi.system.vo.StorageListVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
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.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
*
* 审批流程节点审核记录表 前端控制器
*
*
* @author WuGuanFengYue
* @since 2025-09-15
*/
@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 OaApprovalApplicationPurchaseItemService approvalApplicationPurchaseItemService;
@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 OaApprovalApplicationStorageAssetService oaApprovalApplicationStorageAssetService;
@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 AssetTypeService assetTypeService;
@Resource
private OaApprovalTodoService oaApprovalTodoService;
@Resource
private OaApprovalFlowService approvalFlowService;
@ApiOperation("我审批的")
@PostMapping("/pageListAudit")
public R> pageList(@RequestBody ApprovalTodoListQuery query) {
List resList = new ArrayList<>();
Long userId = tokenService.getLoginUser().getUserId();
query.setUserId(userId);
PageInfo res = new PageInfo<>(query.getPageNum(), query.getPageSize());
PageInfo pageInfo = approvalTodoService.pageListAudit(query);
List list = pageInfo.getRecords();
if (list.isEmpty()){
return R.ok(new PageInfo<>());
}
res.setTotal(pageInfo.getTotal());
List applicationIds = list.stream().map(OaApprovalTodo::getApplicationId).collect(Collectors.toList());
Map approvalApplicationReimbursementMap = approvalApplicationReimbursementService.lambdaQuery()
.in(OaApprovalApplicationReimbursement::getApprovalApplicationId, applicationIds).list()
.stream().collect(Collectors.toMap(OaApprovalApplicationReimbursement::getApprovalApplicationId, e -> e));
Map oaApprovalApplicationMoneyMap = approvalApplicationMoneyService.lambdaQuery()
.in(OaApprovalApplicationMoney::getApprovalApplicationId, applicationIds).list()
.stream().collect(Collectors.toMap(OaApprovalApplicationMoney::getApprovalApplicationId, e -> e));
Map approvalApplicationPaymentMap = approvalApplicationPaymentService.lambdaQuery()
.in(OaApprovalApplicationPayment::getApprovalApplicationId, applicationIds).list()
.stream().collect(Collectors.toMap(OaApprovalApplicationPayment::getApprovalApplicationId, e -> e));
Map applicationStorageMap = approvalApplicationStorageService.lambdaQuery()
.in(OaApprovalApplicationStorage::getApprovalApplicationId, applicationIds).list()
.stream().collect(Collectors.toMap(OaApprovalApplicationStorage::getApprovalApplicationId, e -> e));
Map approvalApplicationAssetMap = approvalApplicationAssetService.lambdaQuery()
.in(OaApprovalApplicationAsset::getApprovalApplicationId, applicationIds).list()
.stream().collect(Collectors.toMap(OaApprovalApplicationAsset::getApprovalApplicationId, e -> e));
Map approvalApplicationDisposeMap = approvalApplicationDisposeService.lambdaQuery()
.in(OaApprovalApplicationDispose::getApprovalApplicationId, applicationIds).list()
.stream().collect(Collectors.toMap(OaApprovalApplicationDispose::getApprovalApplicationId, e -> e));
Map approvalApplicationChangeMap = approvalApplicationChangeService.lambdaQuery()
.in(OaApprovalApplicationChange::getApprovalApplicationId, applicationIds).list()
.stream().collect(Collectors.toMap(OaApprovalApplicationChange::getApprovalApplicationId, e -> e));
Map approvalApplicationPurchaseMap = approvalApplicationPurchaseService.lambdaQuery()
.in(OaApprovalApplicationPurchase::getApprovalApplicationId, applicationIds).list()
.stream().collect(Collectors.toMap(OaApprovalApplicationPurchase::getApprovalApplicationId, e -> e));
Map> approvalApplicationAssetItemMap = approvalApplicationAssetItemService.lambdaQuery()
.in(OaApprovalApplicationAssetItem::getApprovalApplicationId, applicationIds).list()
.stream().collect(Collectors.groupingBy(OaApprovalApplicationAssetItem::getApprovalApplicationId));
Map approvalApplicationAdvertisementMap = approvalApplicationAdvertisementService.lambdaQuery()
.in(OaApprovalApplicationAdvertisement::getApprovalApplicationId, applicationIds).list()
.stream().collect(Collectors.toMap(OaApprovalApplicationAdvertisement::getApprovalApplicationId, e -> e));
Map applicationAttendanceMap = approvalApplicationAttendanceService.lambdaQuery()
.in(OaApprovalApplicationAttendance::getApprovalApplicationId, applicationIds).list()
.stream().collect(Collectors.toMap(OaApprovalApplicationAttendance::getApprovalApplicationId, e -> e));
Map assetMainMap = assetMainService.list().stream().collect(Collectors.toMap(AssetMain::getId, e -> e));
Map userMap = sysUserService.selectAllList().stream().collect(Collectors.toMap(SysUser::getUserId, e -> e));
Map deptMap = deptService.list().stream().collect(Collectors.toMap(TDept::getId, e -> e));
Map approvalMap = approvalService.list().stream().collect(Collectors.toMap(OaApproval::getId, e -> e));
List 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());
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 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("我发起的")
@PostMapping("/pageListApply")
public R> pageListApply(@RequestBody ApprovalTodoListQuery query) {
List resList = new ArrayList<>();
Long userId = tokenService.getLoginUser().getUserId();
query.setUserId(userId);
PageInfo res = new PageInfo<>(query.getPageNum(), query.getPageSize());
PageInfo pageInfo = approvalApplicationsService.pageListAudit(query);
List list = pageInfo.getRecords();
if (list.isEmpty()){
return R.ok(new PageInfo<>());
}
res.setTotal(pageInfo.getTotal());
List applicationIds = list.stream().map(OaApprovalApplications::getId).collect(Collectors.toList());
Map approvalApplicationReimbursementMap = approvalApplicationReimbursementService.lambdaQuery()
.in(OaApprovalApplicationReimbursement::getApprovalApplicationId, applicationIds).list()
.stream().collect(Collectors.toMap(OaApprovalApplicationReimbursement::getApprovalApplicationId, e -> e));
Map oaApprovalApplicationMoneyMap = approvalApplicationMoneyService.lambdaQuery()
.in(OaApprovalApplicationMoney::getApprovalApplicationId, applicationIds).list()
.stream().collect(Collectors.toMap(OaApprovalApplicationMoney::getApprovalApplicationId, e -> e));
Map approvalApplicationPaymentMap = approvalApplicationPaymentService.lambdaQuery()
.in(OaApprovalApplicationPayment::getApprovalApplicationId, applicationIds).list()
.stream().collect(Collectors.toMap(OaApprovalApplicationPayment::getApprovalApplicationId, e -> e));
Map applicationStorageMap = approvalApplicationStorageService.lambdaQuery()
.in(OaApprovalApplicationStorage::getApprovalApplicationId, applicationIds).list()
.stream().collect(Collectors.toMap(OaApprovalApplicationStorage::getApprovalApplicationId, e -> e));
Map approvalApplicationAssetMap = approvalApplicationAssetService.lambdaQuery()
.in(OaApprovalApplicationAsset::getApprovalApplicationId, applicationIds).list()
.stream().collect(Collectors.toMap(OaApprovalApplicationAsset::getApprovalApplicationId, e -> e));
Map approvalApplicationDisposeMap = approvalApplicationDisposeService.lambdaQuery()
.in(OaApprovalApplicationDispose::getApprovalApplicationId, applicationIds).list()
.stream().collect(Collectors.toMap(OaApprovalApplicationDispose::getApprovalApplicationId, e -> e));
Map approvalApplicationChangeMap = approvalApplicationChangeService.lambdaQuery()
.in(OaApprovalApplicationChange::getApprovalApplicationId, applicationIds).list()
.stream().collect(Collectors.toMap(OaApprovalApplicationChange::getApprovalApplicationId, e -> e));
Map approvalApplicationPurchaseMap = approvalApplicationPurchaseService.lambdaQuery()
.in(OaApprovalApplicationPurchase::getApprovalApplicationId, applicationIds).list()
.stream().collect(Collectors.toMap(OaApprovalApplicationPurchase::getApprovalApplicationId, e -> e));
Map> approvalApplicationAssetItemMap = approvalApplicationAssetItemService.lambdaQuery()
.in(OaApprovalApplicationAssetItem::getApprovalApplicationId, applicationIds).list()
.stream().collect(Collectors.groupingBy(OaApprovalApplicationAssetItem::getApprovalApplicationId));
Map approvalApplicationAdvertisementMap = approvalApplicationAdvertisementService.lambdaQuery()
.in(OaApprovalApplicationAdvertisement::getApprovalApplicationId, applicationIds).list()
.stream().collect(Collectors.toMap(OaApprovalApplicationAdvertisement::getApprovalApplicationId, e -> e));
Map applicationAttendanceMap = approvalApplicationAttendanceService.lambdaQuery()
.in(OaApprovalApplicationAttendance::getApprovalApplicationId, applicationIds).list()
.stream().collect(Collectors.toMap(OaApprovalApplicationAttendance::getApprovalApplicationId, e -> e));
Map assetMainMap = assetMainService.list().stream().collect(Collectors.toMap(AssetMain::getId, e -> e));
Map userMap = sysUserService.selectAllList().stream().collect(Collectors.toMap(SysUser::getUserId, e -> e));
Map deptMap = deptService.list().stream().collect(Collectors.toMap(TDept::getId, e -> e));
Map approvalMap = approvalService.list().stream().collect(Collectors.toMap(OaApproval::getId, e -> e));
List 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());
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 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);
}
@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()
.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 approvalFlowNodes = approvalFlowNodeService.lambdaQuery().eq(OaApprovalFlowNode::getApprovalId, approval.getId())
.orderByAsc(OaApprovalFlowNode::getSortOrder).list();
if (dto.getApprovalStatus() == 1) {
// 判断当前是否处于最后一个节点
if (approvalApplications.getCurrentFlowNodeId().equals(approvalFlowNodes.get(approvalFlowNodes.size() - 1).getId())) {
// 审批通过 审批流程结束
approvalApplications.setApprovalStatus(2);
approvalApplicationsService.updateById(approvalApplications);
if (approval.getApprovalCategory() == 10 || approval.getApprovalCategory() == 7
|| approval.getApprovalCategory() == 8 || approval.getApprovalCategory() == 9) {
List approvalApplicationAssetItems = approvalApplicationAssetItemService.lambdaQuery()
.eq(OaApprovalApplicationAssetItem::getApprovalApplicationId, approvalApplications.getId()).list();
List AssetMainIds = approvalApplicationAssetItems.stream().map(OaApprovalApplicationAssetItem::getAssetMainId).collect(Collectors.toList());
List assetMains = assetMainService.lambdaQuery().in(AssetMain::getId, AssetMainIds).list();
switch (approval.getApprovalCategory()) {
case 10:
assetMains.forEach(assetMain -> {
assetMain.setDisposed(1);
});
break;
case 7:
assetMains.forEach(assetMain -> {
assetMain.setInUse(1);
});
break;
default:
assetMains.forEach(assetMain -> {
assetMain.setBorrowed(1);
});
break;
}
assetMainService.updateBatchById(assetMains);
}
//如果为资产入库审批,处理审批通过逻辑,创建该审批的资产信息
if (approval.getApprovalCategory().equals(ApprovalTypeEnum.IN_STOCK.getCode())) {
assetMainService.saveAssetByApprovalApplicationId(approvalApplications.getId());
}
} else {
// 生成下一个节点的待办事项
for (int i = 0; i < approvalFlowNodes.size(); i++) {
if (approvalApplications.getCurrentFlowNodeId()
.equals(approvalFlowNodes.get(i).getId())) {
approvalApplications.setCurrentFlowNodeId(approvalFlowNodes.get(i + 1).getId());
OaApprovalFlowNode oaApprovalFlowNode1 = approvalFlowNodeService.getById(approvalFlowNodes.get(i + 1).getId());
approvalTodoService.createApprovalTodos(approvalApplications.getId(),
approvalApplications.getApplicationCode(), oaApprovalFlowNode1, approvalApplications.getDeptId());
}
}
}
}
return R.ok();
}
}