package com.ruoyi.web.controller.api; import com.ruoyi.common.basic.PageInfo; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.domain.entity.TDept; import com.ruoyi.framework.web.service.TokenService; import com.ruoyi.system.model.AssetInventoryRecord; import com.ruoyi.system.model.AssetMain; import com.ruoyi.system.query.AssetInventoryListQuery; import com.ruoyi.system.query.AssetStatisticsListDetailQuery; import com.ruoyi.system.query.AssetStatisticsListQuery; import com.ruoyi.system.service.AssetInventoryRecordService; import com.ruoyi.system.service.AssetMainService; import com.ruoyi.system.service.AssetTypeService; import com.ruoyi.system.service.TDeptService; import com.ruoyi.system.vo.AssetInventoryVO; import com.ruoyi.system.vo.AssetStatisticsDetailVO; import com.ruoyi.system.vo.AssetStatisticsVO; import com.ruoyi.system.vo.asset.AssetTypeTreeVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.StringUtils; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.time.LocalDateTime; import java.time.YearMonth; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; /** *

* 资产类型表 前端控制器 *

* * @author WuGuanFengYue * @since 2025-09-15 */ @Api(tags = {"资产-资产汇总-资产出入库-闲置房产"}) @Validated @RestController @RequestMapping("/asset-statistics") @RequiredArgsConstructor public class AssetStatisticsController { @Autowired private AssetTypeService assetTypeService; @Autowired private AssetInventoryRecordService assetInventoryRecordService; @Autowired private AssetMainService assetMainService; @Autowired private TokenService tokenService; @Autowired private TDeptService deptService; @ApiOperation("获取资产类型树形数据") @GetMapping("/tree") public R> getAssetTypeTree() { List treeData = assetTypeService.getAssetTypeTree(); return R.ok(treeData); } public List getAllSubDeptIds(Integer parentId) { List allSubIds = new ArrayList<>(); allSubIds.add(parentId); getSubDeptIdsRecursive(parentId, allSubIds); return allSubIds.stream().distinct().collect(Collectors.toList()); } private void getSubDeptIdsRecursive(Integer parentId, List allSubIds) { // 查询直接下级 List directSubIds = deptService.lambdaQuery().eq(TDept::getParentId, parentId).list() .stream().map(TDept::getId).collect(Collectors.toList()); for (Integer subId : directSubIds) { allSubIds.add(subId); // 递归查询下级的下级 getSubDeptIdsRecursive(subId, allSubIds); } } @ApiOperation("资产汇总分页列表") @PostMapping("/pageList") public R> pageList(@RequestBody AssetStatisticsListQuery query) { String deptId = tokenService.getLoginUser().getDeptId(); TDept dept = deptService.getById(tokenService.getLoginUser().getDeptId()); List deptIds = deptService.getAllSubDeptIds(deptId); if (dept.getDeptName().contains("资产管理")){ // 可以查询所有数据 query.setDeptIds(new ArrayList<>()); }else{ if (deptIds.isEmpty()){ return R.ok(new PageInfo<>()); }else{ query.setDeptIds(deptIds); } } return R.ok(assetTypeService.pageList(query)); } @ApiOperation("资产明细") @PostMapping("/pageListDetail") public R> pageListDetail(@RequestBody AssetStatisticsListDetailQuery query) { String deptId = tokenService.getLoginUser().getDeptId(); TDept dept = deptService.getById(tokenService.getLoginUser().getDeptId()); List deptIds = deptService.getAllSubDeptIds(deptId); if (dept.getDeptName().contains("资产管理")){ // 可以查询所有数据 query.setDeptIds(new ArrayList<>()); }else{ if (deptIds.isEmpty()){ return R.ok(new PageInfo<>()); }else{ query.setDeptIds(deptIds); } } PageInfo res = assetTypeService.pageListDetail(query); return R.ok(res); } @ApiOperation("资产出入库分页列表") @PostMapping("/pageListInventory") public R> pageListInventory(@RequestBody AssetInventoryListQuery query) { String deptId = tokenService.getLoginUser().getDeptId(); TDept dept = deptService.getById(tokenService.getLoginUser().getDeptId()); List deptIds = deptService.getAllSubDeptIds(deptId); if (dept.getDeptName().contains("资产管理")){ // 可以查询所有数据 query.setDeptIds(new ArrayList<>()); }else{ if (deptIds.isEmpty()){ return R.ok(new PageInfo<>()); }else{ query.setDeptIds(deptIds); } } String[] dateList = query.getDate().split(","); String month = dateList[1]; int monthValue = Integer.parseInt(month); int year = LocalDateTime.now().getYear(); LocalDateTime firstDay = LocalDateTime.of(year, monthValue, 1, 0, 0, 0); LocalDateTime lastDay = LocalDateTime.of(year, monthValue, YearMonth.of(year, monthValue).lengthOfMonth(), 23, 59, 59); query.setDateStart(firstDay); query.setDateEnd(lastDay); List assetMainIds = assetInventoryRecordService.lambdaQuery().between(AssetInventoryRecord::getCreateTime, query.getDateStart(), query.getDateEnd()) .list().stream().map(AssetInventoryRecord::getAssetMainId).collect(Collectors.toList()); if (assetMainIds.isEmpty()){ return R.ok(new PageInfo<>()); } if (StringUtils.hasLength(query.getNameOrCode())){ // 查询出资产名称或者资产编号符合条件的code List assetTypeIds = assetMainService.lambdaQuery() .in(AssetMain::getOwnershipDeptId, deptIds) .and(wrapper -> wrapper.like(AssetMain::getAssetName, query.getNameOrCode()) .or() .like(AssetMain::getAssetCode, query.getNameOrCode())) .list() .stream() .map(AssetMain::getAssetTypeId) .collect(Collectors.toList()); query.setAssetMainIds(assetTypeIds); if (assetTypeIds.isEmpty()){ return R.ok(new PageInfo<>()); } // 和assetMainIds取交集 List res = assetMainIds.stream().filter(assetTypeIds::contains).collect(Collectors.toList()); if (res.isEmpty()){ return R.ok(new PageInfo<>()); } query.setAssetMainIds(res); } return R.ok(assetTypeService.pageListInventory(query)); } @ApiOperation("资产出入库明细分页列表") @PostMapping("/pageListInventoryDetail") public R> pageListInventoryDetail(@RequestBody AssetStatisticsListDetailQuery query) { String deptId = tokenService.getLoginUser().getDeptId(); TDept dept = deptService.getById(tokenService.getLoginUser().getDeptId()); List deptIds = deptService.getAllSubDeptIds(deptId); if (dept.getDeptName().contains("资产管理")){ // 可以查询所有数据 query.setDeptIds(new ArrayList<>()); }else{ if (deptIds.isEmpty()){ return R.ok(new PageInfo<>()); }else{ query.setDeptIds(deptIds); } } String[] dateList = query.getDate().split(","); String month = dateList[1]; int monthValue = Integer.parseInt(month); int year = LocalDateTime.now().getYear(); LocalDateTime firstDay = LocalDateTime.of(year, monthValue, 1, 0, 0, 0); LocalDateTime lastDay = LocalDateTime.of(year, monthValue, YearMonth.of(year, monthValue).lengthOfMonth(), 23, 59, 59); query.setDateStart(firstDay); query.setDateEnd(lastDay); List assetMainIds = assetInventoryRecordService.lambdaQuery().between(AssetInventoryRecord::getCreateTime, query.getDateStart(), query.getDateEnd()) .list().stream().map(AssetInventoryRecord::getAssetMainId).collect(Collectors.toList()); if (assetMainIds.isEmpty()){ return R.ok(new PageInfo<>()); } if (StringUtils.hasLength(query.getNameOrCode())){ // 查询出资产名称或者资产编号符合条件的code List assetTypeIds = assetMainService.lambdaQuery() .in(AssetMain::getOwnershipDeptId, deptIds) .and(wrapper -> wrapper.like(AssetMain::getAssetName, query.getNameOrCode()) .or() .like(AssetMain::getAssetCode, query.getNameOrCode())) .list() .stream() .map(AssetMain::getAssetTypeId) .collect(Collectors.toList()); query.setAssetMainIds(assetTypeIds); if (assetTypeIds.isEmpty()){ return R.ok(new PageInfo<>()); } // 和assetMainIds取交集 List res = assetMainIds.stream().filter(assetTypeIds::contains).collect(Collectors.toList()); if (res.isEmpty()){ return R.ok(new PageInfo<>()); } query.setAssetMainIds(res); } PageInfo res = assetTypeService.pageListInventoryDetail(query); return R.ok(res); } }