施工产值导出

This commit is contained in:
lcj
2025-11-10 10:58:57 +08:00
parent 44f604ff57
commit ceec388f5f
4 changed files with 74 additions and 10 deletions

View File

@ -19,7 +19,6 @@ import org.dromara.common.core.utils.file.FileUtils;
import org.dromara.common.excel.convert.ExcelBigNumberConvert; import org.dromara.common.excel.convert.ExcelBigNumberConvert;
import org.dromara.common.excel.core.*; import org.dromara.common.excel.core.*;
import org.dromara.common.excel.handler.DataWriteHandler; import org.dromara.common.excel.handler.DataWriteHandler;
import org.springframework.http.HttpHeaders;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
@ -208,12 +207,12 @@ public class ExcelUtil {
/** /**
* 导出多sheet excel增强版解决XML安全问题 * 导出多sheet excel增强版解决XML安全问题
* *
* @param sheetData 多个sheet的数据 * @param sheetData 多个sheet的数据
* @param sheetNames 多个sheet的名称 * @param sheetNames 多个sheet的名称
* @param clazz 实体类 * @param clazz 实体类
* @param optionsList 级联下拉选内容列表 * @param optionsList 级联下拉选内容列表
*/ */
public static <T> void exportMultiSheetExcelEnhanced(List<List<T>> sheetData, List<String> sheetNames, Class<T> clazz, List<List<DropDownOptions>> optionsList,HttpServletResponse response) throws IOException { public static <T> void exportMultiSheetExcelEnhanced(List<List<T>> sheetData, List<String> sheetNames, Class<T> clazz, List<List<DropDownOptions>> optionsList, HttpServletResponse response) throws IOException {
resetResponse("file", response); resetResponse("file", response);
ExcelWriter excelWriter = null; ExcelWriter excelWriter = null;
ServletOutputStream os = response.getOutputStream(); ServletOutputStream os = response.getOutputStream();
@ -493,6 +492,4 @@ public class ExcelUtil {
} }
} }

View File

@ -1,11 +1,15 @@
package org.dromara.out.controller; package org.dromara.out.controller;
import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.domain.R; import org.dromara.common.core.domain.R;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.validate.AddGroup; import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup; import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.excel.utils.ExcelUtil; import org.dromara.common.excel.utils.ExcelUtil;
@ -15,14 +19,24 @@ import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.web.core.BaseController; import org.dromara.common.web.core.BaseController;
import org.dromara.out.domain.OutConstructionValue;
import org.dromara.out.domain.OutConstructionValueRange;
import org.dromara.out.domain.bo.OutConstructionValueRangeBo; import org.dromara.out.domain.bo.OutConstructionValueRangeBo;
import org.dromara.out.domain.vo.OutConstructionAllValueRangeVo; import org.dromara.out.domain.vo.OutConstructionAllValueRangeVo;
import org.dromara.out.domain.vo.OutConstructionValueRangeVo; import org.dromara.out.domain.vo.OutConstructionValueRangeVo;
import org.dromara.out.domain.vo.OutConstructionValueVo;
import org.dromara.out.service.IOutConstructionValueRangeService; import org.dromara.out.service.IOutConstructionValueRangeService;
import org.dromara.out.service.IOutConstructionValueService;
import org.springframework.beans.BeanUtils;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
/** /**
* 施工产值范围 * 施工产值范围
@ -30,6 +44,7 @@ import java.util.List;
* @author lilemy * @author lilemy
* @date 2025-09-25 * @date 2025-09-25
*/ */
@Slf4j
@Validated @Validated
@RequiredArgsConstructor @RequiredArgsConstructor
@RestController @RestController
@ -38,6 +53,8 @@ public class OutConstructionValueRangeController extends BaseController {
private final IOutConstructionValueRangeService outConstructionValueRangeService; private final IOutConstructionValueRangeService outConstructionValueRangeService;
private final IOutConstructionValueService outConstructionValueService;
/** /**
* 查询施工产值范围列表 * 查询施工产值范围列表
*/ */
@ -54,8 +71,47 @@ public class OutConstructionValueRangeController extends BaseController {
@Log(title = "施工产值范围", businessType = BusinessType.EXPORT) @Log(title = "施工产值范围", businessType = BusinessType.EXPORT)
@PostMapping("/export") @PostMapping("/export")
public void export(OutConstructionValueRangeBo bo, HttpServletResponse response) { public void export(OutConstructionValueRangeBo bo, HttpServletResponse response) {
List<OutConstructionValueRangeVo> list = outConstructionValueRangeService.queryList(bo); LambdaQueryWrapper<OutConstructionValue> lqw = new LambdaQueryWrapper<>();
ExcelUtil.exportExcel(list, "施工产值范围", OutConstructionValueRangeVo.class, response); lqw.eq(bo.getProjectId() != null, OutConstructionValue::getProjectId, bo.getProjectId());
if (bo.getStartDate() != null && bo.getEndDate() != null) {
lqw.between(OutConstructionValue::getReportDate, bo.getStartDate(), bo.getEndDate());
} else if (bo.getStartDate() != null) {
lqw.ge(OutConstructionValue::getReportDate, bo.getStartDate());
} else if (bo.getEndDate() != null) {
lqw.le(OutConstructionValue::getReportDate, bo.getEndDate());
}
List<OutConstructionValue> list = outConstructionValueService.list(lqw);
if (CollUtil.isEmpty(list)) {
return;
}
List<OutConstructionValueVo> valueVoList = new ArrayList<>(list.stream().map(value -> {
OutConstructionValueVo vo = new OutConstructionValueVo();
BeanUtils.copyProperties(value, vo);
return vo;
}).toList());
outConstructionValueService.supplementaryData(valueVoList);
Set<Long> weekIds = valueVoList.stream().map(OutConstructionValueVo::getRangeId).collect(Collectors.toSet());
List<OutConstructionValueRange> ranges = outConstructionValueRangeService.listByIds(weekIds);
Map<Long, List<OutConstructionValueRange>> rangeMap = ranges.stream()
.collect(Collectors.groupingBy(OutConstructionValueRange::getId));
Map<Long, List<OutConstructionValueVo>> map = valueVoList.stream()
.collect(Collectors.groupingBy(OutConstructionValueVo::getRangeId));
List<List<OutConstructionValueVo>> valueList = new ArrayList<>();
List<String> nameList = new ArrayList<>();
for (Map.Entry<Long, List<OutConstructionValueVo>> entry : map.entrySet()) {
List<OutConstructionValueVo> valueVos = entry.getValue();
valueList.add(valueVos);
if (rangeMap.containsKey(entry.getKey())) {
OutConstructionValueRange range = rangeMap.get(entry.getKey()).getFirst();
nameList.add(range.getStartDate() + " - " + range.getEndDate());
}
}
try {
ExcelUtil.exportMultiSheetExcelEnhanced(valueList, nameList, OutConstructionValueVo.class, null, response);
} catch (IOException e) {
log.error("导出失败", e);
throw new ServiceException("导出失败");
}
} }
/** /**

View File

@ -103,4 +103,11 @@ public interface IOutConstructionValueService extends IService<OutConstructionVa
* @return 删除设施设施详情 * @return 删除设施设施详情
*/ */
Boolean removeFacilityDetail(OutConstructionValueFacilityReq req); Boolean removeFacilityDetail(OutConstructionValueFacilityReq req);
/**
* 补充数据
*
* @param list 列表
*/
void supplementaryData(List<OutConstructionValueVo> list);
} }

View File

@ -346,7 +346,11 @@ public class OutConstructionValueServiceImpl extends ServiceImpl<OutConstruction
/** /**
* 补充数据 * 补充数据
*/ */
@Override
public void supplementaryData(List<OutConstructionValueVo> list) { public void supplementaryData(List<OutConstructionValueVo> list) {
if (CollUtil.isEmpty(list)) {
return;
}
for (OutConstructionValueVo vo : list) { for (OutConstructionValueVo vo : list) {
getName(vo); getName(vo);
} }