From f2f7b16dc78070bc37ad1a0d0ec3157c62287606 Mon Sep 17 00:00:00 2001
From: 无关风月 <443237572@qq.com>
Date: 星期五, 17 十月 2025 14:12:04 +0800
Subject: [PATCH] 项目管理代码生成,案件分类
---
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaApprovalApplicationAssetServiceImpl.java | 280 +++++++++++++++++++++++++++++++++++++++++++++++++------
1 files changed, 247 insertions(+), 33 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 0640ed2..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,28 +1,47 @@
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.time.format.DateTimeFormatter;
+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;
/**
@@ -34,42 +53,42 @@
* @since 2025-09-15
*/
@Service
-@RequiredArgsConstructor
+@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 submitReceive(OaApprovalApplicationAssetReceiveDTO dto) {
- if (CollectionUtils.isEmpty(dto.getAssetItems())) {
- throw new ServiceException("领用资产列表不能为空");
- }
-
+ public void submitReceiveBorrow(OaApprovalApplicationAssetReceiveDTO dto) {
+ //校验资产状态
+ oaApprovalApplicationAssetItemService.validateAssetStatus(dto.getAssetMainIds());
// 1. 构建并保存审批主表
OaApprovalApplications applications = buildOaApprovalApplications(dto);
// 2. 获取流程首节点,设置当前节点,并保存
- OaApprovalFlowNode firstFlowNode = getFirstFlowNode(ApprovalTypeEnum.GRAB.getCode());
+ 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. 保存领用明细
+ // 4. 保存领用/借用明细
OaApprovalApplicationAsset detail = buildOaApprovalApplicationAsset(dto, applications.getId());
this.save(detail);
// 5. 保存关联的资产项
- List<OaApprovalApplicationAssetItem> items = dto.getAssetItems().stream()
+ List<OaApprovalApplicationAssetItem> items = dto.getAssetMainIds().stream()
.map(i -> {
OaApprovalApplicationAssetItem item = new OaApprovalApplicationAssetItem();
item.setApprovalApplicationId(applications.getId());
- item.setAssetMainId(i.getAssetMainId());
+ item.setAssetMainId(i);
return item;
})
.collect(Collectors.toList());
@@ -90,8 +109,9 @@
private OaApprovalApplications buildOaApprovalApplications(OaApprovalApplicationAssetReceiveDTO dto) {
OaApprovalApplications applications = new OaApprovalApplications();
- applications.setApplicationCode(generateApplicationCode());
- applications.setApprovalId(ApprovalTypeEnum.GRAB.getCode());
+ 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());
@@ -105,29 +125,223 @@
}
private OaApprovalApplicationAsset buildOaApprovalApplicationAsset(OaApprovalApplicationAssetReceiveDTO dto, Integer applicationId) {
- OaApprovalApplicationAsset asset = new OaApprovalApplicationAsset();
+ OaApprovalApplicationAsset asset = BeanUtil.copyProperties(dto, OaApprovalApplicationAsset.class);
asset.setApprovalApplicationId(applicationId);
- asset.setTitle(dto.getTitle());
- asset.setAssetTypeId(dto.getAssetTypeId());
- asset.setOperateTime(dto.getOperateTime());
- asset.setExpectReturnDate(dto.getExpectReturnDate());
- asset.setType(Boolean.FALSE); // 0-领用
+ asset.setType(dto.getType());
return asset;
}
- /**
- * 生成申请单号:LY + yyyyMMdd + 3位序号
- */
- private String generateApplicationCode() {
- String dateStr = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
- String prefix = "LY" + dateStr;
- Long count = oaApprovalApplicationsService.lambdaQuery()
- .like(OaApprovalApplications::getApplicationCode, prefix)
- .ge(OaApprovalApplications::getCreateTime, LocalDate.now().atStartOfDay())
- .lt(OaApprovalApplications::getCreateTime, LocalDate.now().plusDays(1).atStartOfDay())
- .count();
- int sequence = (count != null ? count.intValue() : 0) + 1;
- String sequenceStr = String.format("%03d", sequence);
- return prefix + sequenceStr;
+ @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