| | |
| | | package com.ruoyi.system.service.impl; |
| | | |
| | | import cn.hutool.core.bean.BeanUtil; |
| | | import org.springframework.util.CollectionUtils; |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | 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.utils.SecurityUtils; |
| | | import com.ruoyi.system.mapper.AssetMainMapper; |
| | | import com.ruoyi.system.mapper.AssetPropertyExtMapper; |
| | | import com.ruoyi.system.mapper.AssetVehicleExtMapper; |
| | | import com.ruoyi.system.mapper.OaApprovalApplicationStorageAssetMapper; |
| | | import com.ruoyi.system.mapper.OaApprovalApplicationStorageAssetPropertyExtMapper; |
| | | import com.ruoyi.system.mapper.OaApprovalApplicationStorageAssetVehicleExtMapper; |
| | | import com.ruoyi.system.model.AssetMain; |
| | | import com.ruoyi.system.model.AssetPropertyExt; |
| | | import com.ruoyi.system.model.AssetVehicleExt; |
| | | import com.ruoyi.system.model.OaApprovalApplicationStorageAsset; |
| | | import com.ruoyi.system.model.OaApprovalApplicationStorageAssetPropertyExt; |
| | | import com.ruoyi.system.model.OaApprovalApplicationStorageAssetVehicleExt; |
| | | import com.ruoyi.system.query.AssetMainPageQuery; |
| | | import com.ruoyi.system.service.AssetMainService; |
| | | import com.ruoyi.system.service.AssetPropertyExtService; |
| | | import com.ruoyi.system.service.AssetTypeService; |
| | | import com.ruoyi.system.service.AssetVehicleExtService; |
| | | import com.ruoyi.system.service.OaApprovalApplicationStorageAssetPropertyExtService; |
| | | import com.ruoyi.system.service.OaApprovalApplicationStorageAssetService; |
| | | import com.ruoyi.system.service.OaApprovalApplicationStorageAssetVehicleExtService; |
| | | import com.ruoyi.system.vo.asset.AssetMainPageVO; |
| | | import lombok.RequiredArgsConstructor; |
| | | import org.springframework.context.annotation.Lazy; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.time.LocalDate; |
| | | import java.time.LocalDateTime; |
| | | import java.time.format.DateTimeFormatter; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * 资产主表 服务实现类 |
| | | */ |
| | | @Service |
| | | @RequiredArgsConstructor(onConstructor_ = {@Lazy}) |
| | | public class AssetMainServiceImpl extends ServiceImpl<AssetMainMapper, AssetMain> implements AssetMainService { |
| | | |
| | | private final AssetTypeService assetTypeService; |
| | | private final OaApprovalApplicationStorageAssetService oaApprovalApplicationStorageAssetService; |
| | | private final OaApprovalApplicationStorageAssetPropertyExtService oaApprovalApplicationStorageAssetPropertyExtService; |
| | | private final OaApprovalApplicationStorageAssetVehicleExtService oaApprovalApplicationStorageAssetVehicleExtService; |
| | | private final AssetVehicleExtService assetVehicleExtService; |
| | | private final AssetPropertyExtService assetPropertyExtService; |
| | | |
| | | private final AssetMainMapper assetMainMapper; |
| | | private final OaApprovalApplicationStorageAssetMapper oaApprovalApplicationStorageAssetMapper; |
| | | private final OaApprovalApplicationStorageAssetPropertyExtMapper oaApprovalApplicationStorageAssetPropertyExtMapper; |
| | | private final OaApprovalApplicationStorageAssetVehicleExtMapper oaApprovalApplicationStorageAssetVehicleExtMapper; |
| | | private final AssetPropertyExtMapper assetPropertyExtMapper; |
| | | private final AssetVehicleExtMapper assetVehicleExtMapper; |
| | | @Override |
| | | public IPage<AssetMainPageVO> getApprovedPageList(AssetMainPageQuery pageQuery) { |
| | | Page<AssetMainPageVO> page = new Page<>(pageQuery.getPageNum(), pageQuery.getPageSize()); |
| | | return this.baseMapper.selectApprovedAssetPage(page, pageQuery); |
| | | } |
| | | /** |
| | | * 生成资产编码 |
| | | * 格式:资产类型一级分类简写+资产类型子类简写+入库日期+【-】+数量顺序编号(4位) |
| | | * 例如:GDFC20250917-0001 |
| | | */ |
| | | @Override |
| | | public String generateAssetCode(Integer assetTypeId, LocalDate storageDate) { |
| | | // 根据资产类型ID获取资产编码前缀 |
| | | String typeCodePrefix = assetTypeService.getAssetCodePrefix(assetTypeId); |
| | | |
| | | String dateStr = storageDate.format(DateTimeFormatter.ofPattern("yyyyMMdd")); |
| | | String prefix = typeCodePrefix + dateStr + "-"; |
| | | |
| | | // 查询当天该类型资产的数量 |
| | | Long count = this.lambdaQuery() |
| | | .like(AssetMain::getAssetCode, prefix) |
| | | .ge(AssetMain::getCreateTime, storageDate.atStartOfDay()) |
| | | .lt(AssetMain::getCreateTime, storageDate.plusDays(1).atStartOfDay()) |
| | | .count(); |
| | | |
| | | int sequence = (count != null ? count.intValue() : 0) + 1; |
| | | String sequenceStr = String.format("%04d", sequence); |
| | | |
| | | return prefix + sequenceStr; |
| | | } |
| | | |
| | | @Override |
| | | public void saveAssetByApprovalApplicationId(Integer approvalApplicationId) { |
| | | // 1. 根据approvalApplicationId查询审批通过的资产列表 |
| | | List<OaApprovalApplicationStorageAsset> storageAssets = oaApprovalApplicationStorageAssetMapper |
| | | .selectList(new QueryWrapper<OaApprovalApplicationStorageAsset>() |
| | | .eq("approval_application_id", approvalApplicationId)); |
| | | |
| | | if (CollectionUtils.isEmpty(storageAssets)) { |
| | | return; |
| | | } |
| | | |
| | | for (OaApprovalApplicationStorageAsset storageAsset : storageAssets) { |
| | | Integer assetMainType = storageAsset.getAssetMainType(); |
| | | BigDecimal quantity = storageAsset.getQuantity(); |
| | | |
| | | // 根据数量生成对应条数的资产记录 |
| | | int assetCount = quantity != null ? quantity.intValue() : 1; |
| | | |
| | | for (int i = 0; i < assetCount; i++) { |
| | | // 创建资产主表记录 |
| | | AssetMain assetMain = new AssetMain(); |
| | | BeanUtil.copyProperties(storageAsset, assetMain); |
| | | |
| | | // 为每个资产生成编码 |
| | | String assetCode = generateAssetCode(storageAsset.getAssetTypeId(), LocalDate.now()); |
| | | assetMain.setAssetCode(assetCode); |
| | | |
| | | // 单个资产的数量设为1 |
| | | assetMain.setQuantity(BigDecimal.ONE); |
| | | // 单个资产的总价值等于单价 |
| | | assetMain.setTotalValue(storageAsset.getUnitPrice()); |
| | | |
| | | // 设置创建信息 |
| | | assetMain.setCreateTime(LocalDateTime.now()); |
| | | assetMain.setCreateBy(SecurityUtils.getUsername()); |
| | | assetMain.setDisabled(false); |
| | | |
| | | // 保存资产主表 |
| | | assetMainMapper.insert(assetMain); |
| | | |
| | | // 2. 根据资产类型保存扩展信息 |
| | | if (assetMainType != null) { |
| | | if (assetMainType == 1) { |
| | | // 房产资产 - 保存房产扩展信息 |
| | | savePropertyExtension(storageAsset.getId(), assetMain.getId()); |
| | | } else if (assetMainType == 2) { |
| | | // 车辆资产 - 保存车辆扩展信息 |
| | | saveVehicleExtension(storageAsset.getId(), assetMain.getId()); |
| | | } |
| | | // assetMainType == 0 为通用资产,无需保存扩展信息 |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 保存房产资产扩展信息 |
| | | */ |
| | | private void savePropertyExtension(Integer storageAssetId, Integer assetMainId) { |
| | | // 查询房产扩展信息 |
| | | OaApprovalApplicationStorageAssetPropertyExt propertyExt = oaApprovalApplicationStorageAssetPropertyExtMapper |
| | | .selectOne(new QueryWrapper<OaApprovalApplicationStorageAssetPropertyExt>() |
| | | .eq("storage_asset_id", storageAssetId)); |
| | | |
| | | if (propertyExt != null) { |
| | | AssetPropertyExt assetPropertyExt = new AssetPropertyExt(); |
| | | BeanUtil.copyProperties(propertyExt, assetPropertyExt); |
| | | assetPropertyExt.setAssetMainId(assetMainId); |
| | | assetPropertyExt.setCreateTime(LocalDateTime.now()); |
| | | assetPropertyExt.setCreateBy(SecurityUtils.getUsername()); |
| | | assetPropertyExt.setDisabled(false); |
| | | |
| | | assetPropertyExtMapper.insert(assetPropertyExt); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 保存车辆资产扩展信息 |
| | | */ |
| | | private void saveVehicleExtension(Integer storageAssetId, Integer assetMainId) { |
| | | // 查询车辆扩展信息 |
| | | OaApprovalApplicationStorageAssetVehicleExt vehicleExt = oaApprovalApplicationStorageAssetVehicleExtMapper |
| | | .selectOne(new QueryWrapper<OaApprovalApplicationStorageAssetVehicleExt>() |
| | | .eq("storage_asset_id", storageAssetId)); |
| | | |
| | | if (vehicleExt != null) { |
| | | AssetVehicleExt assetVehicleExt = new AssetVehicleExt(); |
| | | BeanUtil.copyProperties(vehicleExt, assetVehicleExt); |
| | | assetVehicleExt.setAssetMainId(assetMainId); |
| | | assetVehicleExt.setCreateTime(LocalDateTime.now()); |
| | | assetVehicleExt.setCreateBy(SecurityUtils.getUsername()); |
| | | assetVehicleExt.setDisabled(false); |
| | | |
| | | assetVehicleExtMapper.insert(assetVehicleExt); |
| | | } |
| | | } |
| | | } |