From d4e4dc4a180cea919dfc86a1a3e5af0abe8b6d36 Mon Sep 17 00:00:00 2001
From: mitao <2763622819@qq.com>
Date: 星期一, 20 十月 2025 18:48:14 +0800
Subject: [PATCH] 无形广告资产接口
---
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationAssetServiceImpl.java | 327 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 327 insertions(+), 0 deletions(-)
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationAssetServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationAssetServiceImpl.java
index 1769d10..17cfd99 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationAssetServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationAssetServiceImpl.java
@@ -1,10 +1,48 @@
package com.ruoyi.system.service.impl;
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollUtil;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.system.bo.OaApprovalApplicationAssetReturnBO;
+import com.ruoyi.system.constants.ApprovalApplicationCodePrefix;
+import com.ruoyi.system.dto.asset.OaApprovalApplicationAssetReceiveDTO;
+import com.ruoyi.system.dto.asset.OaApprovalApplicationAssetReturnDTO;
+import com.ruoyi.system.emums.ApprovalStatusEnum;
+import com.ruoyi.system.emums.ApprovalTypeEnum;
+import com.ruoyi.system.emums.AssetOperateTypeEnum;
+import com.ruoyi.system.emums.ReturnStatusEnum;
import com.ruoyi.system.mapper.OaApprovalApplicationAssetMapper;
import com.ruoyi.system.model.OaApprovalApplicationAsset;
+import com.ruoyi.system.model.OaApprovalApplicationAssetItem;
+import com.ruoyi.system.model.OaApprovalApplications;
+import com.ruoyi.system.model.OaApprovalFlowNode;
+import com.ruoyi.system.query.OaApprovalApplicationAssetPageQuery;
+import com.ruoyi.system.service.AssetMainService;
+import com.ruoyi.system.service.OaApprovalApplicationAssetItemService;
import com.ruoyi.system.service.OaApprovalApplicationAssetService;
+import com.ruoyi.system.service.OaApprovalApplicationsService;
+import com.ruoyi.system.service.OaApprovalFlowNodeService;
+import com.ruoyi.system.service.OaApprovalTodoService;
+import com.ruoyi.system.vo.asset.AssetMainVO;
+import com.ruoyi.system.vo.asset.OaApprovalApplicationAssetDetailVO;
+import com.ruoyi.system.vo.asset.OaApprovalApplicationAssetPageVO;
+import lombok.RequiredArgsConstructor;
+import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+
+import java.time.LocalDate;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.function.Function;
+import java.util.stream.Collectors;
/**
* <p>
@@ -15,6 +53,295 @@
* @since 2025-09-15
*/
@Service
+@RequiredArgsConstructor(onConstructor_ = {@Lazy})
public class OaApprovalApplicationAssetServiceImpl extends ServiceImpl<OaApprovalApplicationAssetMapper, OaApprovalApplicationAsset> implements OaApprovalApplicationAssetService {
+ private final OaApprovalApplicationsService oaApprovalApplicationsService;
+ private final OaApprovalFlowNodeService oaApprovalFlowNodeService;
+ private final OaApprovalTodoService oaApprovalTodoService;
+ private final OaApprovalApplicationAssetItemService oaApprovalApplicationAssetItemService;
+ private final AssetMainService assetMainService;
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void submitReceiveBorrow(OaApprovalApplicationAssetReceiveDTO dto) {
+ //校验资产状态
+ oaApprovalApplicationAssetItemService.validateAssetStatus(dto.getAssetMainIds());
+ // 1. 构建并保存审批主表
+ OaApprovalApplications applications = buildOaApprovalApplications(dto);
+
+ // 2. 获取流程首节点,设置当前节点,并保存
+ OaApprovalFlowNode firstFlowNode = getFirstFlowNode(dto.getType().equals(AssetOperateTypeEnum.RECEIVE.getCode()) ?
+ ApprovalTypeEnum.GRAB.getCode() : ApprovalTypeEnum.BORROW.getCode());
+ applications.setCurrentFlowNodeId(firstFlowNode.getId());
+ oaApprovalApplicationsService.save(applications);
+
+ // 3. 创建待办
+ oaApprovalTodoService.createApprovalTodos(applications.getId(), applications.getApplicationCode(), firstFlowNode, dto.getDeptId());
+
+ // 4. 保存领用/借用明细
+ OaApprovalApplicationAsset detail = buildOaApprovalApplicationAsset(dto, applications.getId());
+ this.save(detail);
+
+ // 5. 保存关联的资产项
+ List<OaApprovalApplicationAssetItem> items = dto.getAssetMainIds().stream()
+ .map(i -> {
+ OaApprovalApplicationAssetItem item = new OaApprovalApplicationAssetItem();
+ item.setApprovalApplicationId(applications.getId());
+ item.setAssetMainId(i);
+ return item;
+ })
+ .collect(Collectors.toList());
+ oaApprovalApplicationAssetItemService.saveBatch(items);
+ }
+
+ private OaApprovalFlowNode getFirstFlowNode(Integer approvalId) {
+ List<OaApprovalFlowNode> flowNodes = oaApprovalFlowNodeService.lambdaQuery()
+ .eq(OaApprovalFlowNode::getApprovalId, approvalId)
+ .eq(OaApprovalFlowNode::getStatus, 1)
+ .orderByAsc(OaApprovalFlowNode::getSortOrder)
+ .list();
+ if (CollectionUtils.isEmpty(flowNodes)) {
+ throw new ServiceException("未找到有效的审批流程配置");
+ }
+ return flowNodes.get(0);
+ }
+
+ private OaApprovalApplications buildOaApprovalApplications(OaApprovalApplicationAssetReceiveDTO dto) {
+ OaApprovalApplications applications = new OaApprovalApplications();
+ applications.setApplicationCode(oaApprovalApplicationsService.generateApplicationCode(dto.getType().equals(0) ?
+ ApprovalApplicationCodePrefix.ASSET_RECEIVE : ApprovalApplicationCodePrefix.ASSET_BORROW));
+ applications.setApprovalId(dto.getType().equals(0) ? ApprovalTypeEnum.GRAB.getCode() : ApprovalTypeEnum.BORROW.getCode());
+ applications.setApplicantUserId(dto.getApplicantUserId());
+ applications.setApplicantName(dto.getApplicantName());
+ applications.setDeptId(dto.getDeptId());
+ applications.setDeptName(dto.getDeptName());
+ applications.setApplicationDate(dto.getOperateTime());
+ applications.setApplicationReason(dto.getApplicationReason());
+ applications.setAttachmentUrl(dto.getAttachmentUrl());
+ applications.setDisabled(0);
+ applications.setApprovalStatus(ApprovalStatusEnum.PENDING.getCode());
+ return applications;
+ }
+
+ private OaApprovalApplicationAsset buildOaApprovalApplicationAsset(OaApprovalApplicationAssetReceiveDTO dto, Integer applicationId) {
+ OaApprovalApplicationAsset asset = BeanUtil.copyProperties(dto, OaApprovalApplicationAsset.class);
+ asset.setApprovalApplicationId(applicationId);
+ asset.setType(dto.getType());
+ return asset;
+ }
+
+ @Override
+ public IPage<OaApprovalApplicationAssetPageVO> getReceivePageList(OaApprovalApplicationAssetPageQuery pageQuery) {
+ Page<OaApprovalApplicationAssetPageVO> page = new Page<>(pageQuery.getPageNum(), pageQuery.getPageSize());
+ pageQuery.setType(AssetOperateTypeEnum.RECEIVE.getCode());//领用
+ return this.baseMapper.getPageByType(page, pageQuery);
+ }
+
+ @Override
+ public OaApprovalApplicationAssetDetailVO getDetail(Integer id) {
+ OaApprovalApplications app = oaApprovalApplicationsService.getById(id);
+ if (app == null) {
+ throw new ServiceException("审批主记录不存在");
+ }
+ OaApprovalApplicationAsset detail = getOaApprovalApplicationAssetByApplicationId(app.getId());
+ if (detail == null) {
+ throw new ServiceException("记录不存在");
+ }
+ oaApprovalApplicationsService.assembleApplicationDetail(app);
+ List<Integer> assetMainIds = oaApprovalApplicationAssetItemService.lambdaQuery()
+ .eq(OaApprovalApplicationAssetItem::getApprovalApplicationId, app.getId())
+ .list().stream().map(OaApprovalApplicationAssetItem::getAssetMainId)
+ .distinct().collect(Collectors.toList());
+
+ List<AssetMainVO> assetMainVOS = assetMainIds.isEmpty() ? Collections.emptyList() : assetMainService.getListByIds(assetMainIds);
+ OaApprovalApplicationAssetDetailVO vo = BeanUtil.copyProperties(app, OaApprovalApplicationAssetDetailVO.class);
+ vo.setTitle(detail.getTitle());
+ vo.setAssetTypeId(detail.getAssetTypeId());
+ vo.setOperateTime(detail.getOperateTime());
+ vo.setItems(assetMainVOS);
+ return vo;
+ }
+
+ @Override
+ public IPage<OaApprovalApplicationAssetPageVO> getBorrowPageList(OaApprovalApplicationAssetPageQuery pageQuery) {
+ Page<OaApprovalApplicationAssetPageVO> page = new Page<>(pageQuery.getPageNum(), pageQuery.getPageSize());
+ pageQuery.setType(AssetOperateTypeEnum.BORROW.getCode());
+ return this.baseMapper.getPageByType(page, pageQuery);
+ }
+
+ @Override
+ public OaApprovalApplicationAssetDetailVO getBorrowDetail(Integer id) {
+ OaApprovalApplications app = oaApprovalApplicationsService.getById(id);
+ if (app == null) {
+ throw new ServiceException("审批主记录不存在");
+ }
+ OaApprovalApplicationAsset detail = getOaApprovalApplicationAssetByApplicationId(app.getId());
+ if (detail == null) {
+ throw new ServiceException("记录不存在");
+ }
+ oaApprovalApplicationsService.assembleApplicationDetail(app);
+ List<Integer> assetMainIds = oaApprovalApplicationAssetItemService.lambdaQuery()
+ .eq(OaApprovalApplicationAssetItem::getApprovalApplicationId, app.getId())
+ .list().stream().map(OaApprovalApplicationAssetItem::getAssetMainId)
+ .distinct().collect(Collectors.toList());
+ List<AssetMainVO> assetMainVOS = Collections.emptyList();
+ if (CollUtil.isNotEmpty(assetMainIds)) {
+ assetMainVOS = assetMainService.getListByIds(assetMainIds);
+ //查询是否有关联的归还申请
+ Map<Integer, OaApprovalApplicationAssetReturnBO> assetReturnBOMap = this.baseMapper.selectReturnByAssetIds(assetMainIds, app.getId())
+ .stream().collect(Collectors.toMap(OaApprovalApplicationAssetReturnBO::getAssetMainId, Function.identity()));
+ assetMainVOS.forEach(item->{
+ OaApprovalApplicationAssetReturnBO returnBO = assetReturnBOMap.get(item.getId());
+ if (returnBO != null) {
+ item.setReturnStatus(returnBO.getReturnStatus());
+ item.setApplicationCode(returnBO.getApplicationCode());
+ } else {
+ item.setReturnStatus(ReturnStatusEnum.NOT_RETURN.getCode());
+ }
+ });
+ }
+ OaApprovalApplicationAssetDetailVO vo = BeanUtil.copyProperties(app, OaApprovalApplicationAssetDetailVO.class);
+ vo.setTitle(detail.getTitle());
+ vo.setAssetTypeId(detail.getAssetTypeId());
+ vo.setOperateTime(detail.getOperateTime());
+ vo.setExpectReturnDate(detail.getExpectReturnDate());
+ vo.setReturnStatus(detail.getReturnStatus());
+ vo.setItems(assetMainVOS);
+ return vo;
+ }
+ @Override
+ public List<OaApprovalApplicationAssetDetailVO> getBorrowDetailByApplicationCode() {
+ Long userId = SecurityUtils.getUserId();
+ List<OaApprovalApplicationAssetDetailVO> list = baseMapper.getBorrowDetailByApplicationCode(userId);
+ return list;
+ }
+
+ @Override
+ public List<AssetMainVO> getBorrowDetailList(Integer applicationId) {
+ List<Integer> assetMainIds = oaApprovalApplicationAssetItemService.lambdaQuery()
+ .eq(OaApprovalApplicationAssetItem::getApprovalApplicationId, applicationId)
+ .list().stream().map(OaApprovalApplicationAssetItem::getAssetMainId)
+ .distinct().collect(Collectors.toList());
+ List<AssetMainVO> returnList = Collections.emptyList();
+ if (CollUtil.isNotEmpty(assetMainIds)) {
+ List<AssetMainVO> assetMainVOS = assetMainService.getListByIds(assetMainIds);
+ //查询是否有关联的归还申请
+ Map<Integer, OaApprovalApplicationAssetReturnBO> assetReturnBOMap = this.baseMapper.selectReturnByAssetIds(assetMainIds, applicationId)
+ .stream().collect(Collectors.toMap(OaApprovalApplicationAssetReturnBO::getAssetMainId, Function.identity()));
+ returnList = assetMainVOS.stream().filter(item -> {
+ OaApprovalApplicationAssetReturnBO returnBO = assetReturnBOMap.get(item.getId());
+ return Objects.isNull(returnBO);
+ }).collect(Collectors.toList());
+ }
+ return returnList;
+ }
+ @Override
+ public void submitReturn(OaApprovalApplicationAssetReturnDTO dto) {
+ //校验资产状态
+ oaApprovalApplicationAssetItemService.validateAssetStatus(dto.getAssetMainIds());
+ // 1. 构建并保存审批主表
+ OaApprovalApplications applications = BeanUtil.copyProperties(dto, OaApprovalApplications.class);
+ applications.setApplicationCode(oaApprovalApplicationsService.generateApplicationCode(ApprovalApplicationCodePrefix.ASSET_RETURN));
+ applications.setApprovalId(ApprovalTypeEnum.RETURN.getCode());
+ applications.setApplicationDate(LocalDate.now());
+
+ // 2. 获取流程首节点,设置当前节点,并保存
+ OaApprovalFlowNode firstFlowNode = getFirstFlowNode(ApprovalTypeEnum.RETURN.getCode());
+ applications.setCurrentFlowNodeId(firstFlowNode.getId());
+ oaApprovalApplicationsService.save(applications);
+
+ // 3. 创建待办
+ oaApprovalTodoService.createApprovalTodos(applications.getId(), applications.getApplicationCode(), firstFlowNode, dto.getDeptId());
+
+ // 4. 保存归还明细
+ OaApprovalApplicationAsset detail = BeanUtil.copyProperties(dto, OaApprovalApplicationAsset.class);
+ detail.setApprovalApplicationId(applications.getId());
+ detail.setBorrowApplicationId(dto.getApprovalApplicationId());
+ detail.setType(AssetOperateTypeEnum.RETURN.getCode());
+ OaApprovalApplicationAsset asset = lambdaQuery().eq(OaApprovalApplicationAsset::getApprovalApplicationId, dto.getApprovalApplicationId()).one();
+ if (Objects.nonNull(asset)) {
+ detail.setAssetTypeId(asset.getAssetTypeId());
+ }
+ this.save(detail);
+
+ // 5. 保存关联的资产项
+ List<OaApprovalApplicationAssetItem> items = dto.getAssetMainIds().stream()
+ .map(i -> {
+ OaApprovalApplicationAssetItem item = new OaApprovalApplicationAssetItem();
+ item.setApprovalApplicationId(applications.getId());
+ item.setAssetMainId(i);
+ return item;
+ })
+ .collect(Collectors.toList());
+ oaApprovalApplicationAssetItemService.saveBatch(items);
+ }
+
+ @Override
+ public IPage<OaApprovalApplicationAssetPageVO> getReturnPageList(OaApprovalApplicationAssetPageQuery pageQuery) {
+ Page<OaApprovalApplicationAssetPageVO> page = new Page<>(pageQuery.getPageNum(), pageQuery.getPageSize());
+ pageQuery.setType(AssetOperateTypeEnum.RETURN.getCode());
+ return this.baseMapper.getPageByType(page, pageQuery);
+ }
+
+ @Override
+ public IPage<OaApprovalApplicationAssetPageVO> getReturnNotifyPageList(OaApprovalApplicationAssetPageQuery pageQuery) {
+ Page<OaApprovalApplicationAssetPageVO> page = new Page<>(pageQuery.getPageNum(), pageQuery.getPageSize());
+ pageQuery.setType(AssetOperateTypeEnum.BORROW.getCode());
+ pageQuery.setReturnNotify(1);
+ IPage<OaApprovalApplicationAssetPageVO> pageByType = this.baseMapper.getPageByType(page, pageQuery);
+ LocalDate toDay = LocalDate.now();
+ pageByType.getRecords().forEach(item->{
+ if (Objects.nonNull(item.getExpectReturnDate())) {
+ item.setDueDays(toDay.until(item.getExpectReturnDate()).getDays());
+ }
+ });
+ return pageByType;
+ }
+
+ @Override
+ public OaApprovalApplicationAssetDetailVO getReturnDetail(Integer id) {
+ OaApprovalApplications app = oaApprovalApplicationsService.getById(id);
+ if (app == null) {
+ throw new ServiceException("审批主记录不存在");
+ }
+ OaApprovalApplicationAsset detail = getOaApprovalApplicationAssetByApplicationId(id);
+ if (detail == null) {
+ throw new ServiceException("记录不存在");
+ }
+ oaApprovalApplicationsService.assembleApplicationDetail(app);
+ //查询借用申请单
+ OaApprovalApplications borrowApprovalApplication = oaApprovalApplicationsService.getById(detail.getBorrowApplicationId());
+ OaApprovalApplicationAsset borrowApprovalApplicationAsset = null;
+ if (Objects.nonNull(borrowApprovalApplication)) {
+ borrowApprovalApplicationAsset = getOaApprovalApplicationAssetByApplicationId(borrowApprovalApplication.getId());
+ }
+ List<Integer> assetMainIds = oaApprovalApplicationAssetItemService.lambdaQuery()
+ .eq(OaApprovalApplicationAssetItem::getApprovalApplicationId, app.getId())
+ .list().stream().map(OaApprovalApplicationAssetItem::getAssetMainId)
+ .distinct().collect(Collectors.toList());
+
+ List<AssetMainVO> assetMainVOS = assetMainIds.isEmpty() ? Collections.emptyList() : assetMainService.getListByIds(assetMainIds);
+ OaApprovalApplicationAssetDetailVO vo = BeanUtil.copyProperties(app, OaApprovalApplicationAssetDetailVO.class);
+
+ vo.setTitle(detail.getTitle());
+ vo.setAssetTypeId(detail.getAssetTypeId());
+ vo.setOperateTime(detail.getOperateTime());
+ vo.setBorrowDate(Objects.nonNull(borrowApprovalApplicationAsset) ? borrowApprovalApplicationAsset.getOperateTime() : null);
+ vo.setReturnStatus(detail.getReturnStatus());
+ vo.setItems(assetMainVOS);
+ return vo;
+ }
+ @Transactional(rollbackFor = Exception.class)
+ @Override
+ public void deleteByApplicationId(Integer applicationId) {
+ this.lambdaUpdate().eq(OaApprovalApplicationAsset::getApprovalApplicationId, applicationId).remove();
+ oaApprovalApplicationAssetItemService.lambdaUpdate().eq(OaApprovalApplicationAssetItem::getApprovalApplicationId, applicationId).remove();
+ oaApprovalApplicationsService.removeById(applicationId);
+ }
+
+ @Override
+ public OaApprovalApplicationAsset getOaApprovalApplicationAssetByApplicationId(Integer applicationId) {
+ return this.lambdaQuery().eq(OaApprovalApplicationAsset::getApprovalApplicationId, applicationId).one();
+ }
}
--
Gitblit v1.7.1