| | |
| | | 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.system.dto.dispose.OaApprovalApplicationDisposeDTO; |
| | | 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.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.dispose.OaApprovalApplicationDisposePageVO; |
| | | 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.time.format.DateTimeFormatter; |
| | | import java.util.Collections; |
| | | import java.util.List; |
| | | import java.util.stream.Collectors; |
| | | |
| | |
| | | private final OaApprovalFlowNodeService oaApprovalFlowNodeService; |
| | | private final OaApprovalTodoService oaApprovalTodoService; |
| | | private final OaApprovalApplicationAssetItemService oaApprovalApplicationAssetItemService; |
| | | private final AssetMainService assetMainService; |
| | | |
| | | @Override |
| | | public IPage<OaApprovalApplicationDisposePageVO> getDisposePageList(OaApprovalApplicationDisposePageQuery pageQuery) { |
| | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void submitDispose(OaApprovalApplicationDisposeDTO dto) { |
| | | if (CollUtil.isEmpty(dto.getAssetMainIds())) { |
| | | throw new ServiceException("资产ID列表不能为空"); |
| | | } |
| | | //校验资产状态 |
| | | oaApprovalApplicationAssetItemService.validateAssetStatus(dto.getAssetMainIds()); |
| | | |
| | | // 1. 构建并保存审批主表 |
| | | OaApprovalApplications applications = buildOaApprovalApplications(dto); |
| | |
| | | |
| | | private OaApprovalApplications buildOaApprovalApplications(OaApprovalApplicationDisposeDTO dto) { |
| | | OaApprovalApplications applications = BeanUtil.copyProperties(dto, OaApprovalApplications.class); |
| | | applications.setApplicationCode(generateApplicationCode("CZ")); |
| | | applications.setApplicationCode(oaApprovalApplicationsService.generateApplicationCode(ApprovalApplicationCodePrefix.ASSET_DISPOSE)); |
| | | applications.setApprovalId(ApprovalTypeEnum.ASSET_DISPOSE.getCode()); |
| | | applications.setApplicationDate(LocalDate.now()); |
| | | applications.setApprovalStatus(ApprovalStatusEnum.PENDING.getCode()); |
| | |
| | | return flowNodes.get(0); |
| | | } |
| | | |
| | | /** |
| | | * 生成申请单号:CZ + yyyyMMdd + 3位序号 |
| | | */ |
| | | private String generateApplicationCode(String prefix) { |
| | | String dateStr = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")); |
| | | prefix = prefix + dateStr; |
| | | Long count = oaApprovalApplicationsService.lambdaQuery() |
| | | .like(OaApprovalApplications::getApplicationCode, prefix) |
| | | .count(); |
| | | return prefix + String.format("%03d", count + 1); |
| | | } |
| | | |
| | | @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; |
| | | } |
| | | } |