package com.ruoyi.web.controller.api; import cn.afterturn.easypoi.excel.ExcelExportUtil; import cn.afterturn.easypoi.excel.entity.ExportParams; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.basic.PageInfo; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.domain.entity.TDept; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.utils.WebUtils; import com.ruoyi.common.utils.bean.BeanUtils; import com.ruoyi.system.dto.AddDrDisplacementDTO; import com.ruoyi.system.model.DrDisplacement; import com.ruoyi.system.model.DrDisplacementHouse; import com.ruoyi.system.model.DrDisplacementReturnHouse; import com.ruoyi.system.model.LandReported; import com.ruoyi.system.query.DrDisplacementListQuery; import com.ruoyi.system.query.LandReportedListQuery; import com.ruoyi.system.service.DrDisplacementHouseService; import com.ruoyi.system.service.DrDisplacementReturnHouseService; import com.ruoyi.system.service.DrDisplacementService; import com.ruoyi.system.service.LandReportedService; import com.ruoyi.system.vo.DrDisplacementListVO; import com.ruoyi.system.vo.DrDisplacementStatisticsVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.apache.poi.ss.usermodel.Workbook; import org.ehcache.impl.persistence.DefaultDiskResourceService; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.math.BigDecimal; import java.math.RoundingMode; import java.net.URLEncoder; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.*; import java.util.stream.Collectors; /** *

* 拆迁情况 前端控制器 *

* * @author mitao * @since 2025-10-17 */ @RestController @Api(tags = "拆迁情况管理") @RequestMapping("/dr-displacement") public class DrDisplacementController { @Resource private DrDisplacementService drDisplacementService; @Resource private DrDisplacementHouseService drDisplacementHouseService; @Resource private DrDisplacementReturnHouseService drDisplacementReturnHouseService; @ApiOperation(value = "拆迁统计") @PostMapping(value = "/statistics") public R>> statistics() { List houses = drDisplacementReturnHouseService.list(); // 定义需要统计的面积段 List areaList = Arrays.asList(30.0, 60.0, 80.0, 90.0, 100.0, 110.0, 120.0); // 初始化结果集 Map> result = areaList.stream() .collect(Collectors.toMap( area -> area, area -> { Map typeMap = new HashMap<>(); typeMap.put("营业房", 0); typeMap.put("库房", 0); typeMap.put("住房", 0); return typeMap; } )); // 按面积分组统计 Map> groupedByArea = houses.stream() .collect(Collectors.groupingBy(DrDisplacementReturnHouse::getArea)); // 处理统计数据 groupedByArea.forEach((area, houseList) -> { if (result.containsKey(area)) { houseList.forEach(house -> { String returnType = getReturnTypeString(house.getReturnType()); result.get(area).merge(returnType, house.getQuantity(), Integer::sum); }); } }); return R.ok(result); } private String getReturnTypeString(Integer returnType) { switch (returnType) { case 0: return "营业房"; case 1: return "住房"; case 2: return "库房"; default: return "未知"; } } @ApiOperation(value = "拆迁情况分页列表") @PostMapping(value = "/pageList") public R pageList(@RequestBody DrDisplacementListQuery query) { DrDisplacementListVO drDisplacementListVO = new DrDisplacementListVO(); PageInfo drDisplacementPageInfo = drDisplacementService.pageList(query); if (drDisplacementPageInfo.getRecords().isEmpty()){ drDisplacementListVO.setTotalCount(0); drDisplacementListVO.setTotalArea(0.0); drDisplacementListVO.setPageList(new PageInfo<>()); return R.ok(drDisplacementListVO); } Map> houseMap = drDisplacementHouseService.lambdaQuery() .in(DrDisplacementHouse::getDisplacementId, drDisplacementPageInfo.getRecords() .stream().map(DrDisplacement::getId).collect(Collectors.toList())) .list().stream().collect(Collectors.groupingBy(DrDisplacementHouse::getDisplacementId)); for (DrDisplacement record : drDisplacementPageInfo.getRecords()) { StringBuilder temp = new StringBuilder(); List drDisplacementHouses = houseMap.get(record.getId()); if (drDisplacementHouses!=null){ for (DrDisplacementHouse house : drDisplacementHouses) { temp.append(house.getConstructionType()).append(","); } record.setConstructionTypes(temp.substring(0, temp.length() - 1)); } } List list = drDisplacementService.lambdaQuery() .like(StringUtils.hasLength(query.getName()), DrDisplacement::getName, query.getName()) .eq(query.getCommunityId() != null, DrDisplacement::getCommunityId, query.getCommunityId()) .like(StringUtils.hasLength(query.getPhone()), DrDisplacement::getPhone, query.getPhone()) .like(StringUtils.hasLength(query.getIdCard()), DrDisplacement::getIdCard, query.getIdCard()).list(); double totalArea = 0.0; for (DrDisplacement drDisplacement : list) { totalArea += drDisplacement.getTotalArea(); } drDisplacementListVO.setTotalCount(list.size()); drDisplacementListVO.setTotalArea(totalArea); drDisplacementListVO.setPageList(drDisplacementPageInfo); return R.ok(drDisplacementListVO); } @ApiOperation(value = "拆迁情况导出") @Log(title = "拆迁情况导出", businessType = BusinessType.OTHER) @PostMapping(value = "/export") public void export(@RequestBody DrDisplacementListQuery query) { List list = drDisplacementService.lambdaQuery() .like(StringUtils.hasLength(query.getName()), DrDisplacement::getName, query.getName()) .eq(query.getCommunityId() != null, DrDisplacement::getCommunityId, query.getCommunityId()) .like(StringUtils.hasLength(query.getPhone()), DrDisplacement::getPhone, query.getPhone()) .like(StringUtils.hasLength(query.getIdCard()), DrDisplacement::getIdCard, query.getIdCard()).list(); if (!list.isEmpty()){ Map> houseMap = drDisplacementHouseService.lambdaQuery() .in(DrDisplacementHouse::getDisplacementId, list .stream().map(DrDisplacement::getId).collect(Collectors.toList())) .list().stream().collect(Collectors.groupingBy(DrDisplacementHouse::getDisplacementId)); for (DrDisplacement record : list) { StringBuilder temp = new StringBuilder(); List drDisplacementHouses = houseMap.get(record.getId()); if (drDisplacementHouses!=null){ for (DrDisplacementHouse house : drDisplacementHouses) { temp.append(house.getConstructionType()).append(","); } record.setConstructionTypes(temp.substring(0, temp.length() - 1)); } } } //1.获取excel模板 Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), DrDisplacement.class, list); HttpServletResponse response = WebUtils.response(); response.setContentType("application/vnd.ms-excel"); response.setCharacterEncoding("utf-8"); ServletOutputStream outputStream = null; try { String fileName = URLEncoder.encode("拆迁情况.xls", "utf-8"); response.setHeader("Content-dispodition", "attachment;filename=" + fileName); outputStream = response.getOutputStream(); workbook.write(outputStream); } catch (IOException e) { e.printStackTrace(); } finally { try { outputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } @ApiOperation(value = "添加") @Transactional @Log(title = "拆迁情况-添加", businessType = BusinessType.INSERT) @PostMapping(value = "/add") public R save(@RequestBody AddDrDisplacementDTO entity) { drDisplacementService.save(entity); List drDisplacementHouses = entity.getDrDisplacementHouses(); for (DrDisplacementHouse drDisplacementHouse : drDisplacementHouses) { drDisplacementHouse.setDisplacementId(entity.getId()); } drDisplacementHouseService.saveBatch(drDisplacementHouses); List drDisplacementReturnHouses = entity.getDrDisplacementReturnHouses(); for (DrDisplacementReturnHouse drDisplacementReturnHouse : drDisplacementReturnHouses) { drDisplacementReturnHouse.setDisplacementId(entity.getId()); } drDisplacementReturnHouseService.saveBatch(entity.getDrDisplacementReturnHouses()); return R.ok(); } @ApiOperation(value = "修改") @Transactional @Log(title = "拆迁情况-修改", businessType = BusinessType.UPDATE) @PostMapping(value = "/edit") public R edit(@RequestBody AddDrDisplacementDTO entity) { drDisplacementService.updateById(entity); drDisplacementHouseService.remove(new LambdaQueryWrapper() .eq(DrDisplacementHouse::getDisplacementId, entity.getId())); List drDisplacementHouses = entity.getDrDisplacementHouses(); for (DrDisplacementHouse drDisplacementHouse : drDisplacementHouses) { drDisplacementHouse.setDisplacementId(entity.getId()); } drDisplacementHouseService.saveBatch(drDisplacementHouses); drDisplacementReturnHouseService.remove(new LambdaQueryWrapper() .eq(DrDisplacementReturnHouse::getDisplacementId, entity.getId())); List drDisplacementReturnHouses = entity.getDrDisplacementReturnHouses(); for (DrDisplacementReturnHouse drDisplacementReturnHouse : drDisplacementReturnHouses) { drDisplacementReturnHouse.setDisplacementId(entity.getId()); } drDisplacementReturnHouseService.saveBatch(entity.getDrDisplacementReturnHouses()); return R.ok(); } @ApiOperation(value = "详情") @GetMapping(value = "/detail") public R detail(String id) { AddDrDisplacementDTO addDrDisplacementDTO = new AddDrDisplacementDTO(); DrDisplacement drDisplacement = drDisplacementService.getById(id); BeanUtils.copyProperties(drDisplacement, addDrDisplacementDTO); List drDisplacementHouses = drDisplacementHouseService.lambdaQuery().eq(DrDisplacementHouse::getDisplacementId, id).list(); List drDisplacementReturnHouses = drDisplacementReturnHouseService.lambdaQuery().eq(DrDisplacementReturnHouse::getDisplacementId, id).list(); addDrDisplacementDTO.setDrDisplacementHouses(drDisplacementHouses); addDrDisplacementDTO.setDrDisplacementReturnHouses(drDisplacementReturnHouses); return R.ok(addDrDisplacementDTO); } @Log(title = "拆迁情况-删除", businessType = BusinessType.DELETE) @Transactional @ApiOperation(value = "拆迁情况-删除") @DeleteMapping(value = "/delete") public R delete(@RequestParam String ids) { drDisplacementService.removeBatchByIds(Arrays.asList(ids.split(","))); drDisplacementHouseService.remove(new LambdaQueryWrapper() .in(DrDisplacementHouse::getDisplacementId, Arrays.asList(ids.split(",")))); drDisplacementReturnHouseService.remove(new LambdaQueryWrapper() .in(DrDisplacementReturnHouse::getDisplacementId, Arrays.asList(ids.split(",")))); return R.ok(); } }