From 28f9605441cdda5bd9cfabd2241ff8509a4a8888 Mon Sep 17 00:00:00 2001
From: mitao <2763622819@qq.com>
Date: 星期一, 20 十月 2025 18:48:26 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationDisposeServiceImpl.java | 136 +++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 135 insertions(+), 1 deletions(-)
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationDisposeServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationDisposeServiceImpl.java
index f1730ce..d0c21e9 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationDisposeServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationDisposeServiceImpl.java
@@ -1,20 +1,154 @@
package com.ruoyi.system.service.impl;
+import cn.hutool.core.bean.BeanUtil;
+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.system.constants.ApprovalApplicationCodePrefix;
+import com.ruoyi.system.dto.asset.OaApprovalApplicationDisposeDTO;
+import com.ruoyi.system.emums.ApprovalStatusEnum;
+import com.ruoyi.system.emums.ApprovalTypeEnum;
import com.ruoyi.system.mapper.OaApprovalApplicationDisposeMapper;
+import com.ruoyi.system.model.OaApprovalApplicationAssetItem;
import com.ruoyi.system.model.OaApprovalApplicationDispose;
+import com.ruoyi.system.model.OaApprovalApplications;
+import com.ruoyi.system.model.OaApprovalFlowNode;
+import com.ruoyi.system.query.OaApprovalApplicationDisposePageQuery;
+import com.ruoyi.system.service.AssetMainService;
+import com.ruoyi.system.service.OaApprovalApplicationAssetItemService;
import com.ruoyi.system.service.OaApprovalApplicationDisposeService;
+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.OaApprovalApplicationDisposeDetailVO;
+import com.ruoyi.system.vo.asset.OaApprovalApplicationDisposePageVO;
+import lombok.RequiredArgsConstructor;
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.stream.Collectors;
/**
* <p>
- * 资产领用单明细表 服务实现类
+ * 资产处置单明细表 服务实现类
* </p>
*
* @author WuGuanFengYue
* @since 2025-09-15
*/
@Service
+@RequiredArgsConstructor
public class OaApprovalApplicationDisposeServiceImpl extends ServiceImpl<OaApprovalApplicationDisposeMapper, OaApprovalApplicationDispose> implements OaApprovalApplicationDisposeService {
+ private final OaApprovalApplicationsService oaApprovalApplicationsService;
+ private final OaApprovalFlowNodeService oaApprovalFlowNodeService;
+ private final OaApprovalTodoService oaApprovalTodoService;
+ private final OaApprovalApplicationAssetItemService oaApprovalApplicationAssetItemService;
+ private final AssetMainService assetMainService;
+
+ @Override
+ public IPage<OaApprovalApplicationDisposePageVO> getDisposePageList(OaApprovalApplicationDisposePageQuery pageQuery) {
+ Page<OaApprovalApplicationDisposePageVO> page = new Page<>(pageQuery.getPageNum(), pageQuery.getPageSize());
+ return this.baseMapper.getDisposePageList(page, pageQuery);
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void submitDispose(OaApprovalApplicationDisposeDTO dto) {
+ //校验资产状态
+ oaApprovalApplicationAssetItemService.validateAssetStatus(dto.getAssetMainIds());
+
+ // 1. 构建并保存审批主表
+ OaApprovalApplications applications = buildOaApprovalApplications(dto);
+
+ // 2. 获取流程首节点,设置当前节点,并保存
+ OaApprovalFlowNode firstFlowNode = getFirstFlowNode(ApprovalTypeEnum.ASSET_DISPOSE.getCode());
+ applications.setCurrentFlowNodeId(firstFlowNode.getId());
+ oaApprovalApplicationsService.save(applications);
+
+ // 3. 创建待办
+ oaApprovalTodoService.createApprovalTodos(applications.getId(), applications.getApplicationCode(), firstFlowNode, dto.getDeptId());
+
+ // 4. 保存处置明细
+ OaApprovalApplicationDispose detail = buildOaApprovalApplicationDispose(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 OaApprovalApplications buildOaApprovalApplications(OaApprovalApplicationDisposeDTO dto) {
+ OaApprovalApplications applications = BeanUtil.copyProperties(dto, OaApprovalApplications.class);
+ applications.setApplicationCode(oaApprovalApplicationsService.generateApplicationCode(ApprovalApplicationCodePrefix.ASSET_DISPOSE));
+ applications.setApprovalId(ApprovalTypeEnum.ASSET_DISPOSE.getCode());
+ applications.setApplicationDate(LocalDate.now());
+ applications.setApprovalStatus(ApprovalStatusEnum.PENDING.getCode());
+ return applications;
+ }
+
+ private OaApprovalApplicationDispose buildOaApprovalApplicationDispose(OaApprovalApplicationDisposeDTO dto, Integer applicationId) {
+ OaApprovalApplicationDispose dispose = BeanUtil.copyProperties(dto, OaApprovalApplicationDispose.class);
+ dispose.setApprovalApplicationId(applicationId);
+ return dispose;
+ }
+
+ 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);
+ }
+
+ @Override
+ public void deleteByApplicationId(Integer applicationId) {
+ this.lambdaUpdate().eq(OaApprovalApplicationDispose::getApprovalApplicationId, applicationId).remove();
+ oaApprovalApplicationAssetItemService.lambdaUpdate().eq(OaApprovalApplicationAssetItem::getApprovalApplicationId, applicationId).remove();
+ oaApprovalApplicationsService.removeById(applicationId);
+ }
+
+ @Override
+ public OaApprovalApplicationDisposeDetailVO getDisposeDetail(Integer id) {
+ OaApprovalApplications app = oaApprovalApplicationsService.getById(id);
+ if (app == null) {
+ throw new ServiceException("审批主记录不存在");
+ }
+ OaApprovalApplicationDispose detail = this.lambdaQuery().eq(OaApprovalApplicationDispose::getApprovalApplicationId, app.getId()).one();
+ 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);
+ OaApprovalApplicationDisposeDetailVO vo = BeanUtil.copyProperties(app, OaApprovalApplicationDisposeDetailVO.class);
+ vo.setTitle(detail.getTitle());
+ vo.setAssetTypeId(detail.getAssetTypeId());
+ vo.setDisposeTime(detail.getDisposeTime());
+ vo.setDisposeType(detail.getDisposeType());
+ vo.setDisposeTotalAmount(detail.getDisposeTotalAmount());
+ vo.setItems(assetMainVOS);
+ return vo;
+ }
}
--
Gitblit v1.7.1