From f769d817f8ba2522147c73fa93ccacdc3aab0cb6 Mon Sep 17 00:00:00 2001
From: mitao <2763622819@qq.com>
Date: 星期五, 24 十月 2025 18:15:15 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/DrDisplacementController.java |  253 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 251 insertions(+), 2 deletions(-)

diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/DrDisplacementController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/DrDisplacementController.java
index a916c9a..e39fd55 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/DrDisplacementController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/DrDisplacementController.java
@@ -1,8 +1,49 @@
 package com.ruoyi.web.controller.api;
 
 
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+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;
 
 /**
  * <p>
@@ -13,7 +54,215 @@
  * @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<Map<Double,Map<String,Integer>>> statistics() {
+        List<DrDisplacementReturnHouse> houses = drDisplacementReturnHouseService.list();
+
+        // 定义需要统计的面积段
+        List<Double> areaList = Arrays.asList(30.0, 60.0, 80.0, 90.0, 100.0, 110.0, 120.0);
+
+        // 初始化结果集
+        Map<Double, Map<String,Integer>> result = areaList.stream()
+                .collect(Collectors.toMap(
+                        area -> area,
+                        area -> {
+                            Map<String, Integer> typeMap = new HashMap<>();
+                            typeMap.put("营业房", 0);
+                            typeMap.put("库房", 0);
+                            typeMap.put("住房", 0);
+                            return typeMap;
+                        }
+                ));
+
+        // 按面积分组统计
+        Map<Double, List<DrDisplacementReturnHouse>> 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<DrDisplacementListVO> pageList(@RequestBody DrDisplacementListQuery query) {
+        DrDisplacementListVO drDisplacementListVO = new DrDisplacementListVO();
+        PageInfo<DrDisplacement> drDisplacementPageInfo = drDisplacementService.pageList(query);
+        if (drDisplacementPageInfo.getRecords().isEmpty()){
+            drDisplacementListVO.setTotalCount(0);
+            drDisplacementListVO.setTotalArea(0.0);
+            drDisplacementListVO.setPageList(new PageInfo<>());
+            return R.ok(drDisplacementListVO);
+        }
+        Map<Integer, List<DrDisplacementHouse>> 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<DrDisplacementHouse> 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<DrDisplacement> 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<DrDisplacement> 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<Integer, List<DrDisplacementHouse>> 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<DrDisplacementHouse> 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<Boolean> save(@RequestBody AddDrDisplacementDTO entity) {
+        drDisplacementService.save(entity);
+        List<DrDisplacementHouse> drDisplacementHouses = entity.getDrDisplacementHouses();
+        for (DrDisplacementHouse drDisplacementHouse : drDisplacementHouses) {
+            drDisplacementHouse.setDisplacementId(entity.getId());
+        }
+        drDisplacementHouseService.saveBatch(drDisplacementHouses);
+        List<DrDisplacementReturnHouse> 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<Boolean> edit(@RequestBody AddDrDisplacementDTO entity) {
+        drDisplacementService.updateById(entity);
+        drDisplacementHouseService.remove(new LambdaQueryWrapper<DrDisplacementHouse>()
+                .eq(DrDisplacementHouse::getDisplacementId, entity.getId()));
+        List<DrDisplacementHouse> drDisplacementHouses = entity.getDrDisplacementHouses();
+        for (DrDisplacementHouse drDisplacementHouse : drDisplacementHouses) {
+            drDisplacementHouse.setDisplacementId(entity.getId());
+        }
+        drDisplacementHouseService.saveBatch(drDisplacementHouses);
+        drDisplacementReturnHouseService.remove(new LambdaQueryWrapper<DrDisplacementReturnHouse>()
+                .eq(DrDisplacementReturnHouse::getDisplacementId, entity.getId()));
+        List<DrDisplacementReturnHouse> 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<AddDrDisplacementDTO> detail(String id) {
+        AddDrDisplacementDTO addDrDisplacementDTO = new AddDrDisplacementDTO();
+        DrDisplacement drDisplacement = drDisplacementService.getById(id);
+        BeanUtils.copyProperties(drDisplacement, addDrDisplacementDTO);
+        List<DrDisplacementHouse> drDisplacementHouses = drDisplacementHouseService.lambdaQuery().eq(DrDisplacementHouse::getDisplacementId, id).list();
+        List<DrDisplacementReturnHouse> 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<DrDisplacementHouse>()
+                .in(DrDisplacementHouse::getDisplacementId, Arrays.asList(ids.split(","))));
+        drDisplacementReturnHouseService.remove(new LambdaQueryWrapper<DrDisplacementReturnHouse>()
+                .in(DrDisplacementReturnHouse::getDisplacementId, Arrays.asList(ids.split(","))));
+        return R.ok();
+    }
 }

--
Gitblit v1.7.1