Jelajahi Sumber

fix: 修复空置1000平米以上建筑查询和导出接口错误

weijianghai 1 tahun lalu
induk
melakukan
c97e5b1cae

+ 39 - 0
src/main/java/com/example/controller/house/HouseWzBuildManageDetailsController.java

@@ -0,0 +1,39 @@
+package com.example.controller.house;
+
+import com.example.pojo.dto.ListBuildingIdleDto;
+import com.example.service.house.HouseWzBuildManageDetailsService;
+import com.example.utils.R;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.validation.Valid;
+
+@Tag(name = "不动产建筑")
+@Slf4j
+@RequestMapping("/house-car/house/dist/api/WzBuildManageDetails")
+@RestController
+public class HouseWzBuildManageDetailsController {
+    private final HouseWzBuildManageDetailsService houseWzBuildManageDetailsService;
+
+    public HouseWzBuildManageDetailsController(HouseWzBuildManageDetailsService houseWzBuildManageDetailsService) {
+        this.houseWzBuildManageDetailsService = houseWzBuildManageDetailsService;
+    }
+
+    @Operation(summary = "空置1000平米以上建筑")
+    @PostMapping("/ideList")
+    public R ideList(@Valid @RequestBody ListBuildingIdleDto dto) {
+        return houseWzBuildManageDetailsService.ideList(dto);
+    }
+
+    @Operation(summary = "空置1000平米以上建筑导出")
+    @GetMapping("/ideListExport")
+    public void ideListExport(@Valid ListBuildingIdleDto dto) {
+        houseWzBuildManageDetailsService.ideListExport(dto);
+    }
+}

+ 38 - 0
src/main/java/com/example/dao/house/HouseBuildingDao.java

@@ -0,0 +1,38 @@
+package com.example.dao.house;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.example.entity.house.HouseBuildingHighRepairPo;
+import com.example.entity.house.HouseBuildingPo;
+import com.example.pojo.bo.ListBuildingIdleBo;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
+
+@Mapper
+public interface HouseBuildingDao {
+    @Select("""
+<script>
+select
+*
+from house.building_month
+where building_area_idle > 1000
+<choose>
+  <when test="dto.yearMonth != null">
+    and year_month = #{dto.yearMonth}
+  </when>
+  <otherwise>
+    and year_month = (select max(year_month) from house.building_month)
+  </otherwise>
+</choose>
+<if test="dto.areaNo != null and dto.areaNo != ''">
+  and area_no = #{dto.areaNo}
+</if>
+<if test="dto.cityNo != null and dto.cityNo != ''">
+  and city_no = #{dto.cityNo}
+</if>
+</script>
+""")
+    List<HouseBuildingPo> listBuildingIdle(Page<HouseBuildingPo> page, @Param("dto") ListBuildingIdleBo dto);
+}

+ 78 - 0
src/main/java/com/example/entity/house/HouseBuildingPo.java

@@ -0,0 +1,78 @@
+package com.example.entity.house;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+
+@NoArgsConstructor
+@Data
+public class HouseBuildingPo {
+    private Integer yearMonth;
+    private String buildingId;
+    private String firstUnit;
+    private String secondUnit;
+    private String thirdUnit;
+    private String siteNum;
+    private String siteName;
+    private String address;
+    private String cityLevel;
+    private String cityRegion;
+    private String areaSector;
+    private String hasLand;
+    private String siteId;
+    private String buildingName;
+    private BigDecimal housingAcquisitionRate;
+    private String housingSource;
+    private String acquisitionDate;
+    private Integer houseYearBegan;
+    private String investor;
+    private String managementLevel;
+    private String buildingStructure;
+    private String totalFloors;
+    private String assetsNum;
+    private String assetsTagNum;
+    private String usageStatus;
+    private String buildingUse;
+    private String ownershipStatus;
+    private BigDecimal floorArea;
+    private BigDecimal buildingArea;
+    private BigDecimal buildingAreaSelfUse;
+    private BigDecimal buildingAreaRent;
+    private BigDecimal buildingAreaIdle;
+    private BigDecimal buildingAreaUnusable;
+    private BigDecimal usableArea;
+    private BigDecimal usableAreaSelfUse;
+    private BigDecimal usableAreaRent;
+    private BigDecimal usableAreaIdle;
+    private BigDecimal usableAreaUnusable;
+    private String city;
+    private String district;
+    private BigDecimal lngWgs84;
+    private BigDecimal latWgs84;
+    private BigDecimal lngBd09;
+    private BigDecimal latBd09;
+    private String buildingImg;
+    private String areaNo;
+    private String areaName;
+    private String cityNo;
+    private String cityName;
+    private Integer yearNo;
+    private Integer monthNo;
+    private Integer houseAge;
+    private String landName;
+    private String frontage;
+    private String courtyard;
+    private String wholeBuilding;
+    private String propertyOwnershipCertificate;
+    private String noPropertyOwnershipCertificateReason;
+    private String unrelatedAssets;
+    private String communityAssistantName;
+    private String communityAssistantUnit;
+    private BigDecimal lngJt;
+    private BigDecimal latJt;
+    private String propertyOwner;
+    private String checked;
+    private String cityId;
+    private String districtId;
+}

+ 99 - 0
src/main/java/com/example/enums/ListBuildingIdleOrderEnum.java

@@ -0,0 +1,99 @@
+package com.example.enums;
+
+public enum ListBuildingIdleOrderEnum {
+    /**
+     * 二级单位
+     */
+    city("area_name"),
+    /**
+     * 三级单位
+     */
+    county("city_name"),
+    /**
+     * 建筑别名
+     */
+    buildingAias("building_name"),
+    /**
+     * 维修类型
+     */
+    repairType("repair_type"),
+    /**
+     * 维修内容
+     */
+    repairContent("content_category"),
+    /**
+     * 累计维修
+     */
+    erpCreditedAmount("final_cost_sum"),
+    /**
+     * 标准地址
+     */
+    standardAddress("address"),
+    /**
+     * 建筑用途
+     */
+    buildingUse("building_use"),
+    /**
+     * 建筑面积
+     */
+    buildingArea("building_area"),
+    /**
+     * 建筑面积自用
+     */
+    buildingAreaUseArea("building_area_self_use"),
+    /**
+     * 建筑面积出租
+     */
+    buildingAreaRentArea("building_area_rent"),
+    /**
+     * 建筑面积闲置
+     */
+    buildingAreaIdelArea("building_area_idle"),
+    buildingAreaUnavailable("building_area_unusable"),
+    province("first_unit"),
+    buildingRate("housing_acquisition_rate"),
+    parentBuildingName("site_name"),
+    parentLandName("land_name"),
+    buildingSource("housing_source"),
+    getDate("acquisition_date"),
+    buildingStartYear("house_year_began"),
+    investmentEntity("investor"),
+    managementHierarchy("management_level"),
+    buildingStructure("building_structure"),
+    totalNumberOfFloors("total_floors"),
+    buildingFaceStreet("frontage"),
+    courtyard("courtyard"),
+    wholeBuilding("whole_building"),
+    premisesPermit("property_ownership_certificate"),
+    noPremisesPermitReason("no_property_ownership_certificate_reason"),
+    unrelatedAssets("unrelated_assets"),
+    assetCode("assets_num"),
+    astsLabe("assets_tag_num"),
+    useState("usage_status"),
+    ownershipStatus("ownership_status"),
+    buildingFloorArea("floor_area"),
+    useArea("usable_area"),
+    useAreaSelfUseArea("usable_area_self_use"),
+    useAreaRentArea("usable_area_rent"),
+    useAreaIdelArea("usable_area_idle"),
+    useAreaUnavailableArea("usable_area_unusable"),
+    landManageName("community_assistant_name"),
+    landManageCompany("community_assistant_unit"),
+    buildingLongitude("lng_jt"),
+    buildingDimension("lat_jt"),
+    buildingActualPropertyRights("property_owner"),
+    buildingAddressNumber("site_num"),
+    buildingNameAlias("site_name"),
+    areaSector("area_sector"),
+    ;
+
+    private final String columnName;
+
+    ListBuildingIdleOrderEnum(String columnName) {
+        this.columnName = columnName;
+    }
+
+    public String getColumnName() {
+        return columnName;
+    }
+}

+ 14 - 0
src/main/java/com/example/pojo/bo/ListBuildingIdleBo.java

@@ -0,0 +1,14 @@
+package com.example.pojo.bo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Data
+public class ListBuildingIdleBo {
+    @Schema(description = "账期")
+    private Integer yearMonth;
+    @Schema(description = "二级组织机构编码")
+    private String areaNo;
+    @Schema(description = "三级组织机构编码")
+    private String cityNo;
+}

+ 34 - 0
src/main/java/com/example/pojo/dto/ListBuildingIdleDto.java

@@ -0,0 +1,34 @@
+package com.example.pojo.dto;
+
+import com.example.enums.ListBuildingIdleOrderEnum;
+import com.example.enums.OrderEnum;
+import com.example.utils.Page;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.Valid;
+
+@NoArgsConstructor
+@Data
+public class ListBuildingIdleDto {
+    @Valid
+    private Page page;
+    @Valid
+    private MapDTO map;
+
+    @NoArgsConstructor
+    @Data
+    public static class MapDTO {
+        @Schema(description = "账期")
+        private Integer statisticalMonth;
+        @Schema(description = "二级组织机构id")
+        private String city;
+        @Schema(description = "三级级组织机构id")
+        private String county;
+        @Schema(description = "排序字段")
+        private ListBuildingIdleOrderEnum sidx;
+        @Schema(description = "排序方式")
+        private OrderEnum order;
+    }
+}

+ 120 - 0
src/main/java/com/example/pojo/vo/ListBuildingIdleVo.java

@@ -0,0 +1,120 @@
+package com.example.pojo.vo;
+
+import com.example.entity.house.HouseBuildingPo;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.text.DecimalFormat;
+
+@Data
+public class ListBuildingIdleVo {
+    @Schema(description = "账期")
+    private Integer statisticalMonth;
+    @Schema(description = "资产所属单位一级")
+    private String province;
+    @Schema(description = "资产所属单位二级")
+    private String city;
+    @Schema(description = "资产所属单位三级")
+    private String county;
+    @Schema(description = "建筑别名")
+    private String buildingAias;
+    @Schema(description = "建筑面积㎡")
+    private BigDecimal buildingArea;
+    @Schema(description = "建筑面积自用㎡")
+    private BigDecimal buildingAreaUseArea;
+    @Schema(description = "建筑面积出租㎡")
+    private BigDecimal buildingAreaRentArea;
+    @Schema(description = "建筑面积闲置㎡")
+    private BigDecimal buildingAreaIdelArea;
+    @Schema(description = "建筑面积不可使用㎡")
+    private BigDecimal buildingAreaUnavailable;
+    @Schema(description = "标准地址")
+    private String standardAddress;
+    @Schema(description = "建筑用途")
+    private String buildingUse;
+    private String buildingRate;            //得房率
+    private String parentBuildingName;      //上级局址名称
+    private String parentLandName;          //上级土地名称
+    private String buildingSource;          //房屋来源
+    private String getDate;                 //取得日期
+    private Integer buildingStartYear;       //房龄开始年份
+    private String investmentEntity;        //投资主体
+    private String managementHierarchy;     //管理层级
+    private String buildingStructure;       //房屋结构
+    private String totalNumberOfFloors;     //楼层总数
+    private String buildingFaceStreet;      //是否临街
+    private String courtyard;               //是否有院落
+    private String wholeBuilding;           //整栋是否独有
+    private String premisesPermit;          //是否有房产证
+    private String noPremisesPermitReason;  //无房产证原因
+    private String unrelatedAssets;         //未关联资产
+    private String assetCode;               //资产编号
+    private String astsLabe;                //资产标签号
+    private String useState;                //使用状态
+    private String ownershipStatus;         //权属状态
+    private BigDecimal buildingFloorArea;       //建筑占地面积(㎡)
+    private BigDecimal useArea;                 //使用面积(㎡)
+    private BigDecimal useAreaSelfUseArea;      //使用面积-自用(㎡)
+    private BigDecimal useAreaRentArea;         //使用面积-出租(㎡)
+    private BigDecimal useAreaIdelArea;         //使用面积-闲置(㎡)
+    private BigDecimal useAreaUnavailableArea;  //使用面积-不可使用(㎡)
+    private String landManageName;      //楼长姓名
+    private String landManageCompany;   //楼长所在单位
+    private BigDecimal buildingLongitude;       //房屋经度
+    private BigDecimal buildingDimension;       //房屋纬度
+    private String buildingActualPropertyRights;  //房屋实际产权
+    private String buildingAddressNumber;   //局址编码
+    private String buildingNameAlias;       //局址别名
+    private String areaSector;
+
+    public ListBuildingIdleVo(HouseBuildingPo po) {
+        this.statisticalMonth = po.getYearMonth();
+        this.province = po.getFirstUnit();
+        this.city = po.getAreaName();
+        this.county = po.getCityName();
+        this.buildingAias = po.getBuildingName();
+        this.buildingArea = po.getBuildingArea();
+        this.buildingAreaUseArea = po.getBuildingAreaSelfUse();
+        this.buildingAreaRentArea = po.getBuildingAreaRent();
+        this.buildingAreaIdelArea = po.getBuildingAreaIdle();
+        this.buildingAreaUnavailable = po.getBuildingAreaUnusable();
+        this.standardAddress = po.getAddress();
+        this.buildingUse = po.getBuildingUse();
+        this.buildingRate = po.getHousingAcquisitionRate() != null
+                ? new DecimalFormat("#.00%").format(po.getHousingAcquisitionRate()) : null;
+        this.parentBuildingName = po.getSiteName();
+        this.parentLandName = po.getLandName();
+        this.buildingSource = po.getHousingSource();
+        this.getDate = po.getAcquisitionDate();
+        this.buildingStartYear = po.getHouseYearBegan();
+        this.investmentEntity = po.getInvestor();
+        this.managementHierarchy = po.getManagementLevel();
+        this.buildingStructure = po.getBuildingStructure();
+        this.totalNumberOfFloors = po.getTotalFloors();
+        this.buildingFaceStreet = po.getFrontage();
+        this.courtyard = po.getCourtyard();
+        this.wholeBuilding = po.getWholeBuilding();
+        this.premisesPermit = po.getPropertyOwnershipCertificate();
+        this.noPremisesPermitReason = po.getNoPropertyOwnershipCertificateReason();
+        this.unrelatedAssets = po.getUnrelatedAssets();
+        this.assetCode = po.getAssetsNum();
+        this.astsLabe = po.getAssetsTagNum();
+        this.useState = po.getUsageStatus();
+        this.ownershipStatus = po.getOwnershipStatus();
+        this.buildingFloorArea = po.getFloorArea();
+        this.useArea = po.getUsableArea();
+        this.useAreaSelfUseArea = po.getUsableAreaSelfUse();
+        this.useAreaRentArea = po.getUsableAreaRent();
+        this.useAreaIdelArea = po.getUsableAreaIdle();
+        this.useAreaUnavailableArea = po.getUsableAreaUnusable();
+        this.landManageName = po.getCommunityAssistantName();
+        this.landManageCompany = po.getCommunityAssistantUnit();
+        this.buildingLongitude = po.getLngJt();
+        this.buildingDimension = po.getLatJt();
+        this.buildingActualPropertyRights = po.getPropertyOwner();
+        this.buildingAddressNumber = po.getSiteNum();
+        this.buildingNameAlias = po.getSiteName();
+        this.areaSector = po.getAreaSector();
+    }
+}

+ 365 - 0
src/main/java/com/example/service/house/HouseWzBuildManageDetailsService.java

@@ -0,0 +1,365 @@
+package com.example.service.house;
+
+import cn.hutool.core.net.URLEncodeUtil;
+import com.baomidou.mybatisplus.core.metadata.OrderItem;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.example.dao.house.HouseBuildingDao;
+import com.example.entity.house.HouseBuildingPo;
+import com.example.enums.OrderEnum;
+import com.example.pojo.bo.ListBuildingIdleBo;
+import com.example.pojo.dto.ListBuildingIdleDto;
+import com.example.pojo.vo.ListBuildingIdleVo;
+import com.example.utils.PageUtils;
+import com.example.utils.R;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.CellStyle;
+import org.apache.poi.ss.usermodel.DataFormat;
+import org.apache.poi.ss.usermodel.HorizontalAlignment;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.VerticalAlignment;
+import org.apache.poi.ss.util.CellReference;
+import org.apache.poi.xssf.streaming.SXSSFSheet;
+import org.apache.poi.xssf.streaming.SXSSFWorkbook;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import javax.servlet.http.HttpServletResponse;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.stream.Stream;
+
+@Slf4j
+@Service
+public class HouseWzBuildManageDetailsService {
+    private final HouseBuildingDao houseBuildingDao;
+
+    public HouseWzBuildManageDetailsService(HouseBuildingDao houseBuildingDao) {
+        this.houseBuildingDao = houseBuildingDao;
+    }
+
+    public R ideList(ListBuildingIdleDto dto) {
+        Page<HouseBuildingPo> page = new Page<>(dto.getPage().getPageNum(), dto.getPage().getPageSize());
+        List<HouseBuildingPo> list = getBuildingIdle(dto, page);
+        List<ListBuildingIdleVo> vos = new ArrayList<>();
+        for (HouseBuildingPo po : list) {
+            vos.add(new ListBuildingIdleVo(po));
+        }
+        PageUtils pageUtil = new PageUtils(vos, page);
+        return R.ok().put("page", pageUtil);
+    }
+
+    public void ideListExport(ListBuildingIdleDto dto) {
+        ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder
+                .getRequestAttributes();
+        if (servletRequestAttributes == null) {
+            return;
+        }
+        HttpServletResponse response = servletRequestAttributes.getResponse();
+        if (response == null) {
+            return;
+        }
+        String filename = "房屋空置_空置1000平方米以上"
+                + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")) + ".xlsx";
+        response.setHeader("Content-Disposition", "attachment;filename=" + URLEncodeUtil.encode(filename));
+        response.setContentType("application/octet-stream");
+        try (SXSSFWorkbook wb = new SXSSFWorkbook()) {
+            writeIdleList(dto, wb);
+            wb.write(response.getOutputStream());
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+        }
+    }
+
+    private List<HouseBuildingPo> getBuildingIdle(ListBuildingIdleDto dto, Page<HouseBuildingPo> page) {
+        ListBuildingIdleBo bo = new ListBuildingIdleBo();
+        if (dto.getMap() != null && dto.getMap().getStatisticalMonth() != null) {
+            bo.setYearMonth(dto.getMap().getStatisticalMonth());
+        }
+        if (dto.getMap() != null && StringUtils.hasText(dto.getMap().getCity()) && !"全省".equals(dto.getMap().getCity())) {
+            bo.setAreaNo(dto.getMap().getCity());
+        }
+        if (dto.getMap() != null && StringUtils.hasText(dto.getMap().getCounty())) {
+            bo.setCityNo(dto.getMap().getCounty());
+        }
+        if (dto.getMap() != null && dto.getMap().getOrder() != null && dto.getMap().getSidx() != null) {
+            if (OrderEnum.asc.equals(dto.getMap().getOrder())) {
+                page.addOrder(OrderItem.asc(dto.getMap().getSidx().getColumnName()));
+            } else {
+                page.addOrder(OrderItem.desc(dto.getMap().getSidx().getColumnName()));
+            }
+        }
+        return houseBuildingDao.listBuildingIdle(page, bo);
+    }
+
+    /**
+     * 写空置1000平米以上建筑文件
+     */
+    private void writeIdleList(ListBuildingIdleDto dto, SXSSFWorkbook wb) {
+        Page<HouseBuildingPo> page = new Page<>(1, Long.MAX_VALUE);
+        List<HouseBuildingPo> list = getBuildingIdle(dto, page);
+        DataFormat dataFormat = wb.createDataFormat();
+        // 数字样式
+        CellStyle numberCellStyle = wb.createCellStyle();
+        numberCellStyle.setDataFormat(dataFormat.getFormat("#,##0.00"));
+        numberCellStyle.setAlignment(HorizontalAlignment.RIGHT);
+        // 默认样式
+        CellStyle baseCellStyle = wb.createCellStyle();
+        baseCellStyle.setAlignment(HorizontalAlignment.CENTER);
+        baseCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
+        CellStyle percentCellStyle = wb.createCellStyle();
+        percentCellStyle.setDataFormat(dataFormat.getFormat("0.00%"));
+        percentCellStyle.setAlignment(HorizontalAlignment.RIGHT);
+        SXSSFSheet sheet = wb.createSheet();
+        AtomicInteger columnIndex = new AtomicInteger(0);
+        // 表头
+        Row headerRow = sheet.createRow(columnIndex.getAndIncrement());
+        List<String> headers = Stream.of("资产所属单位(一级)", "资产所属单位(二级)", "资产所属单位(三级)", "建筑别名",
+                "地段", "建筑面积(㎡)","建筑面积-出租(㎡)", "建筑面积-闲置(㎡)", "上级局址名称", "建筑面积-自用(㎡)",
+                "建筑面积-不可使用(㎡)", "上级土地名称", "得房率", "房屋来源", "取得日期", "房龄开始年份", "投资主体", "管理层级",
+                "房屋结构", "楼层总数", "是否临街", "是否有院落", "整栋是否独有", "是否有房产证", "无房产证原因", "未关联资产",
+                "资产编号", "资产标签号", "使用状态", "建筑用途", "权属状态", "建筑占地面积(㎡)", "使用面积(㎡)",
+                "使用面积-自用(㎡)", "使用面积-出租(㎡)", "使用面积-闲置(㎡)", "使用面积-不可使用(㎡)", "楼长姓名",
+                "楼长所在单位", "经度", "纬度", "实际产权人").toList();
+        int headerLength = headers.size();
+        for (int i = 0; i < headerLength; i++) {
+            Cell cell = headerRow.createCell(i);
+            cell.setCellValue(headers.get(i));
+            cell.setCellStyle(baseCellStyle);
+            // 根据内容长度设置列宽
+            int columnWidth = headers.get(i).length() * 256 * 2 + 256;
+            sheet.setColumnWidth(i, columnWidth);
+        }
+        // 数据
+        for (HouseBuildingPo houseBuildingPo : list) {
+            Row row = sheet.createRow(columnIndex.getAndIncrement());
+            // 资产所属单位(一级)
+            Cell a = row.createCell(CellReference.convertColStringToIndex("a"));
+            if (houseBuildingPo.getFirstUnit() != null) {
+                a.setCellValue(houseBuildingPo.getFirstUnit());
+            }
+            // 二级单位
+            Cell b = row.createCell(CellReference.convertColStringToIndex("b"));
+            if (houseBuildingPo.getAreaName() != null) {
+                b.setCellValue(houseBuildingPo.getAreaName());
+            }
+            // 三级单位
+            Cell c = row.createCell(CellReference.convertColStringToIndex("c"));
+            if (houseBuildingPo.getCityName() != null) {
+                c.setCellValue(houseBuildingPo.getCityName());
+            }
+            // 建筑别名
+            Cell d = row.createCell(CellReference.convertColStringToIndex("d"));
+            if (houseBuildingPo.getBuildingName() != null) {
+                d.setCellValue(houseBuildingPo.getBuildingName());
+            }
+            // 地段
+            Cell e = row.createCell(CellReference.convertColStringToIndex("e"));
+            if (houseBuildingPo.getAreaSector() != null) {
+                e.setCellValue(houseBuildingPo.getAreaSector());
+            }
+            // 建筑面积(㎡)
+            Cell f = row.createCell(CellReference.convertColStringToIndex("f"));
+            if (houseBuildingPo.getBuildingArea() != null) {
+                f.setCellValue(houseBuildingPo.getBuildingArea().doubleValue());
+            }
+            f.setCellStyle(numberCellStyle);
+            // 建筑面积-出租(㎡)
+            Cell g = row.createCell(CellReference.convertColStringToIndex("g"));
+            if (houseBuildingPo.getBuildingAreaRent() != null) {
+                g.setCellValue(houseBuildingPo.getBuildingAreaRent().doubleValue());
+            }
+            g.setCellStyle(numberCellStyle);
+            // 建筑面积-闲置(㎡)
+            Cell h = row.createCell(CellReference.convertColStringToIndex("h"));
+            if (houseBuildingPo.getBuildingAreaIdle() != null) {
+                h.setCellValue(houseBuildingPo.getBuildingAreaIdle().doubleValue());
+            }
+            h.setCellStyle(numberCellStyle);
+            // 上级局址名称
+            Cell i = row.createCell(CellReference.convertColStringToIndex("i"));
+            if (houseBuildingPo.getSiteName() != null) {
+                i.setCellValue(houseBuildingPo.getSiteName());
+            }
+            // 建筑面积-自用(㎡)
+            Cell j = row.createCell(CellReference.convertColStringToIndex("j"));
+            if (houseBuildingPo.getBuildingAreaSelfUse() != null) {
+                j.setCellValue(houseBuildingPo.getBuildingAreaSelfUse().doubleValue());
+            }
+            j.setCellStyle(numberCellStyle);
+            // 建筑面积-不可使用(㎡)
+            Cell k = row.createCell(CellReference.convertColStringToIndex("k"));
+            if (houseBuildingPo.getBuildingAreaUnusable() != null) {
+                k.setCellValue(houseBuildingPo.getBuildingAreaUnusable().doubleValue());
+            }
+            k.setCellStyle(numberCellStyle);
+            // 上级土地名称
+            Cell l = row.createCell(CellReference.convertColStringToIndex("l"));
+            if (houseBuildingPo.getLandName() != null) {
+                l.setCellValue(houseBuildingPo.getLandName());
+            }
+            // 得房率
+            Cell m = row.createCell(CellReference.convertColStringToIndex("m"));
+            if (houseBuildingPo.getHousingAcquisitionRate() != null) {
+                m.setCellValue(houseBuildingPo.getHousingAcquisitionRate().doubleValue());
+            }
+            m.setCellStyle(percentCellStyle);
+            // 房屋来源
+            Cell n = row.createCell(CellReference.convertColStringToIndex("n"));
+            if (houseBuildingPo.getHousingSource() != null) {
+                n.setCellValue(houseBuildingPo.getHousingSource());
+            }
+            // 取得日期
+            Cell o = row.createCell(CellReference.convertColStringToIndex("o"));
+            if (houseBuildingPo.getAcquisitionDate() != null) {
+                o.setCellValue(houseBuildingPo.getAcquisitionDate());
+            }
+            // 房龄开始年份
+            Cell p = row.createCell(CellReference.convertColStringToIndex("p"));
+            if (houseBuildingPo.getHouseYearBegan() != null) {
+                p.setCellValue(houseBuildingPo.getHouseYearBegan());
+            }
+            // 投资主体
+            Cell q = row.createCell(CellReference.convertColStringToIndex("q"));
+            if (houseBuildingPo.getInvestor() != null) {
+                q.setCellValue(houseBuildingPo.getInvestor());
+            }
+            // 管理层级
+            Cell r = row.createCell(CellReference.convertColStringToIndex("r"));
+            if (houseBuildingPo.getManagementLevel() != null) {
+                r.setCellValue(houseBuildingPo.getManagementLevel());
+            }
+            // 房屋结构
+            Cell s = row.createCell(CellReference.convertColStringToIndex("s"));
+            if (houseBuildingPo.getBuildingStructure() != null) {
+                s.setCellValue(houseBuildingPo.getBuildingStructure());
+            }
+            // 楼层总数
+            Cell t = row.createCell(CellReference.convertColStringToIndex("t"));
+            if (houseBuildingPo.getTotalFloors() != null) {
+                t.setCellValue(houseBuildingPo.getTotalFloors());
+            }
+            // 是否临街
+            Cell u = row.createCell(CellReference.convertColStringToIndex("u"));
+            if (houseBuildingPo.getFrontage() != null) {
+                u.setCellValue(houseBuildingPo.getFrontage());
+            }
+            // 是否有院落
+            Cell v = row.createCell(CellReference.convertColStringToIndex("v"));
+            if (houseBuildingPo.getCourtyard() != null) {
+                v.setCellValue(houseBuildingPo.getCourtyard());
+            }
+            // 整栋是否独有
+            Cell w = row.createCell(CellReference.convertColStringToIndex("w"));
+            if (houseBuildingPo.getWholeBuilding() != null) {
+                w.setCellValue(houseBuildingPo.getWholeBuilding());
+            }
+            // 是否有房产证
+            Cell x = row.createCell(CellReference.convertColStringToIndex("x"));
+            if (houseBuildingPo.getPropertyOwnershipCertificate() != null) {
+                x.setCellValue(houseBuildingPo.getPropertyOwnershipCertificate());
+            }
+            // 无房产证原因
+            Cell y = row.createCell(CellReference.convertColStringToIndex("y"));
+            if (houseBuildingPo.getNoPropertyOwnershipCertificateReason() != null) {
+                y.setCellValue(houseBuildingPo.getNoPropertyOwnershipCertificateReason());
+            }
+            // 未关联资产
+            Cell z = row.createCell(CellReference.convertColStringToIndex("z"));
+            if (houseBuildingPo.getUnrelatedAssets() != null) {
+                z.setCellValue(houseBuildingPo.getUnrelatedAssets());
+            }
+            // 资产编号
+            Cell aa = row.createCell(CellReference.convertColStringToIndex("aa"));
+            if (houseBuildingPo.getAssetsNum() != null) {
+                aa.setCellValue(houseBuildingPo.getAssetsNum());
+            }
+            // 资产标签号
+            Cell ab = row.createCell(CellReference.convertColStringToIndex("ab"));
+            if (houseBuildingPo.getAssetsTagNum() != null) {
+                ab.setCellValue(houseBuildingPo.getAssetsTagNum());
+            }
+            // 使用状态
+            Cell ac = row.createCell(CellReference.convertColStringToIndex("ac"));
+            if (houseBuildingPo.getUsageStatus() != null) {
+                ac.setCellValue(houseBuildingPo.getUsageStatus());
+            }
+            // 建筑用途
+            Cell ad = row.createCell(CellReference.convertColStringToIndex("ad"));
+            if (houseBuildingPo.getBuildingUse() != null) {
+                ad.setCellValue(houseBuildingPo.getBuildingUse());
+            }
+            // 权属状态
+            Cell ae = row.createCell(CellReference.convertColStringToIndex("ae"));
+            if (houseBuildingPo.getOwnershipStatus() != null) {
+                ae.setCellValue(houseBuildingPo.getOwnershipStatus());
+            }
+            // 建筑占地面积(㎡)
+            Cell af = row.createCell(CellReference.convertColStringToIndex("af"));
+            if (houseBuildingPo.getFloorArea() != null) {
+                af.setCellValue(houseBuildingPo.getFloorArea().doubleValue());
+            }
+            af.setCellStyle(numberCellStyle);
+            // 使用面积(㎡)
+            Cell ag = row.createCell(CellReference.convertColStringToIndex("ag"));
+            if (houseBuildingPo.getUsableArea() != null) {
+                ag.setCellValue(houseBuildingPo.getUsableArea().doubleValue());
+            }
+            ag.setCellStyle(numberCellStyle);
+            // 使用面积-自用(㎡)
+            Cell ah = row.createCell(CellReference.convertColStringToIndex("ah"));
+            if (houseBuildingPo.getUsableAreaSelfUse() != null) {
+                ah.setCellValue(houseBuildingPo.getUsableAreaSelfUse().doubleValue());
+            }
+            ah.setCellStyle(numberCellStyle);
+            // 使用面积-出租(㎡)
+            Cell ai = row.createCell(CellReference.convertColStringToIndex("ai"));
+            if (houseBuildingPo.getUsableAreaRent() != null) {
+                ai.setCellValue(houseBuildingPo.getUsableAreaRent().doubleValue());
+            }
+            ai.setCellStyle(numberCellStyle);
+            // 使用面积-闲置(㎡)
+            Cell aj = row.createCell(CellReference.convertColStringToIndex("aj"));
+            if (houseBuildingPo.getUsableAreaIdle() != null) {
+                aj.setCellValue(houseBuildingPo.getUsableAreaIdle().doubleValue());
+            }
+            aj.setCellStyle(numberCellStyle);
+            // 使用面积-不可使用(㎡)
+            Cell ak = row.createCell(CellReference.convertColStringToIndex("ak"));
+            if (houseBuildingPo.getUsableAreaUnusable() != null) {
+                ak.setCellValue(houseBuildingPo.getUsableAreaUnusable().doubleValue());
+            }
+            ak.setCellStyle(numberCellStyle);
+            // 楼长姓名
+            Cell al = row.createCell(CellReference.convertColStringToIndex("al"));
+            if (houseBuildingPo.getCommunityAssistantName() != null) {
+                al.setCellValue(houseBuildingPo.getCommunityAssistantName());
+            }
+            // 楼长所在单位
+            Cell am = row.createCell(CellReference.convertColStringToIndex("am"));
+            if (houseBuildingPo.getCommunityAssistantUnit() != null) {
+                am.setCellValue(houseBuildingPo.getCommunityAssistantUnit());
+            }
+            // 经度
+            Cell an = row.createCell(CellReference.convertColStringToIndex("an"));
+            if (houseBuildingPo.getLngJt() != null) {
+                an.setCellValue(houseBuildingPo.getLngJt().toString());
+            }
+            // 纬度
+            Cell ao = row.createCell(CellReference.convertColStringToIndex("ao"));
+            if (houseBuildingPo.getLatJt() != null) {
+                ao.setCellValue(houseBuildingPo.getLatJt().toString());
+            }
+            // 实际产权人
+            Cell ap = row.createCell(CellReference.convertColStringToIndex("ap"));
+            if (houseBuildingPo.getPropertyOwner() != null) {
+                ap.setCellValue(houseBuildingPo.getPropertyOwner());
+            }
+        }
+    }
+}