Sfoglia il codice sorgente

解决多用户带来的bug

wuxw 1 anno fa
parent
commit
d0b3578a29

+ 0 - 13
service-api/src/main/java/com/java110/api/components/assetImport/ImportAndExportFeeComponent.java

@@ -39,19 +39,6 @@ public class ImportAndExportFeeComponent {
     }
 
 
-    /**
-     * 添加应用数据
-     *
-     * @param pd 页面数据封装
-     * @return ResponseEntity 对象
-     */
-    public ResponseEntity<Object> exportData(IPageData pd) throws Exception {
-        IPageData newPd = PageData.newInstance().builder(pd.getUserId(), pd.getUserName(), pd.getToken(), pd.getReqData(), pd.getComponentCode(), pd.getComponentMethod(), "",
-                pd.getSessionId(), AppDto.WEB_APP_ID, pd.getHeaders());
-        return exportRoomSMOImpl.exportRoomExcelData(newPd);
-    }
-
-
     /**
      * 添加应用数据
      *

+ 1 - 0
service-api/src/main/java/com/java110/api/configuration/ServiceConfiguration.java

@@ -136,6 +136,7 @@ public class ServiceConfiguration {
         exclusions.append("/app/payment.getNativeQrcodePayment,");// 获取二维码信息
         exclusions.append("/app/fee.listOwnerTelOweFee,");// 根据手机号查询欠费
         exclusions.append("/app/mall.queryCommunityRecommend,");// 查询小区推荐
+        exclusions.append("/app/file/userfile/download/*,");// 下载文件
 
 
 

+ 17 - 6
service-api/src/main/java/com/java110/api/controller/app/file/UserDownloadFileController.java

@@ -5,6 +5,8 @@ import com.java110.core.log.LoggerFactory;
 import com.java110.dto.user.UserDownloadFileDto;
 import com.java110.intf.job.IUserDownloadFileV1InnerServiceSMO;
 import com.java110.utils.util.Assert;
+import com.java110.utils.util.DateUtil;
+import com.java110.utils.util.PayUtil;
 import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PathVariable;
@@ -33,21 +35,30 @@ public class UserDownloadFileController {
     @Autowired
     private FileUploadTemplate fileUploadTemplate;
 
-
-    @RequestMapping(path = "/download/{downloadId}", method = RequestMethod.GET)
-    public void download(@PathVariable String downloadId, HttpServletRequest request, HttpServletResponse response) {
+    // /app/file/userfile/download/
+    @RequestMapping(path = "/download/{downloadId}/{token}", method = RequestMethod.GET)
+    public void download(@PathVariable String downloadId,
+                         @PathVariable String token,
+                         HttpServletRequest request, HttpServletResponse response) {
 
         logger.debug("用户开始下载文件" + downloadId);
 
-        String userId = request.getHeader("user-id");
 
         UserDownloadFileDto userDownloadFileDto = new UserDownloadFileDto();
         userDownloadFileDto.setDownloadId(downloadId);
-        userDownloadFileDto.setDownloadUserId(userId);
+        //userDownloadFileDto.setDownloadUserId(userId);
         List<UserDownloadFileDto> userDownloadFileDtos = userDownloadFileV1InnerServiceSMOImpl.queryUserDownloadFiles(userDownloadFileDto);
         Assert.listOnlyOne(userDownloadFileDtos, "文件不存在");
+
+        String date = DateUtil.getFormatTimeStringB(DateUtil.getCurrentDate());
+        String newToken = PayUtil.md5(userDownloadFileDtos.get(0).getDownloadId() + date);
+
+        if (!newToken.equals(token)) {
+            throw new IllegalArgumentException("token 失效请刷新页面重新下载");
+        }
+
         String tempUrl = userDownloadFileDtos.get(0).getTempUrl();
-        String fileName = userDownloadFileDtos.get(0).getFileTypeName()+tempUrl.substring(tempUrl.lastIndexOf("/"));
+        String fileName = userDownloadFileDtos.get(0).getFileTypeName() + tempUrl.substring(tempUrl.lastIndexOf("/"));
 
         response.setHeader("content-type", "application/octet-stream");
         response.setHeader("Content-Disposition", "attachment; filename=" + fileName);

+ 0 - 7
service-api/src/main/java/com/java110/api/smo/assetExport/IExportRoomSMO.java

@@ -21,12 +21,5 @@ public interface IExportRoomSMO {
      */
     public ResponseEntity<Object> exportExcelData(IPageData pd) throws Exception;
 
-    /**
-     * 导入房屋资产excel数据
-     *
-     * @param pd 前台数据封装
-     * @return ResponseEntity
-     */
-     ResponseEntity<Object> exportRoomExcelData(IPageData pd) throws Exception;
      ResponseEntity<Object> exportCustomReportTableData(IPageData pd) throws Exception;
 }

+ 0 - 220
service-api/src/main/java/com/java110/api/smo/assetExport/impl/ExportRoomSMOImpl.java

@@ -113,208 +113,6 @@ public class ExportRoomSMOImpl extends DefaultAbstractComponentSMO implements IE
         // 保存数据
         return new ResponseEntity<Object>(context, headers, HttpStatus.OK);
     }
-
-    /**
-     * 导出房产信息
-     *
-     * @param pd 前台数据封装
-     * @return
-     * @throws Exception
-     */
-    @Override
-    public ResponseEntity<Object> exportRoomExcelData(IPageData pd) throws Exception {
-        ComponentValidateResult result = this.validateStoreStaffCommunityRelationship(pd, restTemplate);
-
-        JSONObject paramIn = JSONObject.parseObject(pd.getReqData());
-        paramIn.put("storeId",result.getStoreId());
-        Assert.hasKeyAndValue(paramIn, "communityId", "请求中未包含小区");
-        //Assert.hasKeyAndValue(paramIn, "floorIds", "请求中未包含楼栋");
-        Assert.hasKeyAndValue(paramIn, "configIds", "请求中未包含费用项");
-        Assert.hasKeyAndValue(paramIn, "type", "请求中未包含类型");
-
-        Workbook workbook = null;  //工作簿
-        //工作表
-        workbook = new XSSFWorkbook();
-
-        //查询资产和费用项
-        if (TYPE_ROOM.equals(paramIn.getString("type"))) {
-            getRoomAndConfigs(paramIn, workbook);
-        } else if (TYPE_PARKSPACE.equals(paramIn.getString("type"))) {
-            getParkspaceAndConfigs(paramIn, workbook);
-        }
-
-
-        ByteArrayOutputStream os = new ByteArrayOutputStream();
-        MultiValueMap headers = new HttpHeaders();
-        headers.add("content-type", "application/octet-stream;charset=UTF-8");
-        headers.add("Content-Disposition", "attachment;filename=customImport_" + DateUtil.getyyyyMMddhhmmssDateString() + ".xlsx");
-        headers.add("Pargam", "no-cache");
-        headers.add("Cache-Control", "no-cache");
-        //headers.add("Content-Disposition", "attachment; filename=" + outParam.getString("fileName"));
-        headers.add("Accept-Ranges", "bytes");
-        byte[] context = null;
-        try {
-            workbook.write(os);
-            context = os.toByteArray();
-            os.close();
-            workbook.close();
-        } catch (IOException e) {
-            e.printStackTrace();
-            // 保存数据
-            return new ResponseEntity<Object>("导出失败", HttpStatus.INTERNAL_SERVER_ERROR);
-        }
-        // 保存数据
-        return new ResponseEntity<Object>(context, headers, HttpStatus.OK);
-    }
-
-
-    private void getParkspaceAndConfigs(JSONObject paramIn, Workbook workbook) {
-        Sheet sheet = workbook.createSheet("创建费用");
-        Row row = sheet.createRow(0);
-        Cell cell0 = row.createCell(0);
-        cell0.setCellValue("费用名称: 请填写系统中费用类型,如物业费,押金等 ;\n计费起始时间: " +
-                "计费起始时间,格式为YYYY-MM-DD;\n计费结束时间,格式为YYYY-MM-DD;\n" +
-                "建账时间: 建账时间,格式为YYYY-MM-DD; \n 类型:表明是合同 房屋 还是车辆 房屋 1001 车辆 2002 合同 3003" +
-                "\n注意:所有单元格式为文本");
-        CellStyle cs = workbook.createCellStyle();
-        cs.setWrapText(true);  //关键
-        cell0.setCellStyle(cs);
-        row.setHeight((short) (200 * 10));
-        row = sheet.createRow(1);
-        row.createCell(0).setCellValue("车牌号");
-        row.createCell(1).setCellValue("类型");
-        row.createCell(2).setCellValue("费用项ID");
-        row.createCell(3).setCellValue("收费项目");
-        row.createCell(4).setCellValue("建账时间");
-        row.createCell(5).setCellValue("计费起始时间");
-        row.createCell(6).setCellValue("计费结束时间");
-
-        ParkingSpaceDto parkingSpaceDto = new ParkingSpaceDto();
-        parkingSpaceDto.setCommunityId(paramIn.getString("communityId"));
-        parkingSpaceDto.setPaIds(paramIn.getString("paIds").split(","));
-        List<ParkingSpaceDto> parkingSpaceDtos = parkingSpaceInnerServiceSMOImpl.queryParkingSpaces(parkingSpaceDto);
-
-        if (parkingSpaceDtos == null || parkingSpaceDtos.size() < 1) {
-            return;
-        }
-
-        //查询车牌号
-        List<OwnerCarDto> ownerCarDtos = getOwnerCars(parkingSpaceDtos);
-        if (ownerCarDtos == null || ownerCarDtos.size() < 1) {
-            return;
-        }
-        FeeConfigDto feeConfigDto = new FeeConfigDto();
-        feeConfigDto.setConfigIds(paramIn.getString("configIds").split(","));
-        feeConfigDto.setCommunityId(paramIn.getString("communityId"));
-        List<FeeConfigDto> feeConfigDtos = payFeeConfigV1InnerServiceSMOImpl.queryPayFeeConfigs(feeConfigDto);
-
-        if (feeConfigDtos == null || feeConfigDtos.size() < 1) {
-            return;
-        }
-
-        int roomIndex = 2;
-        for (OwnerCarDto tmpOwnerCarDto : ownerCarDtos) {
-            for (FeeConfigDto tmpFeeConfigDto : feeConfigDtos) {
-                row = sheet.createRow(roomIndex);
-                row.createCell(0).setCellValue(tmpOwnerCarDto.getCarNum());
-                row.createCell(1).setCellValue("2002");
-                row.createCell(2).setCellValue(tmpFeeConfigDto.getConfigId());
-                row.createCell(3).setCellValue(tmpFeeConfigDto.getFeeName());
-                row.createCell(4).setCellValue("");
-                row.createCell(5).setCellValue("");
-                roomIndex += 1;
-            }
-        }
-
-        CellRangeAddress region = new CellRangeAddress(0, 0, 0, 5);
-        sheet.addMergedRegion(region);
-    }
-
-    private List<OwnerCarDto> getOwnerCars(List<ParkingSpaceDto> parkingSpaceDtos) {
-        List<String> psIds = new ArrayList<>();
-        List<OwnerCarDto> tmpOwnerCarDtos = new ArrayList<>();
-        for (int roomIndex = 0; roomIndex < parkingSpaceDtos.size(); roomIndex++) {
-            psIds.add(parkingSpaceDtos.get(roomIndex).getPsId());
-            if (roomIndex % DEFAULT_ROW == 0 && roomIndex != 0) {
-                // 处理房屋费用
-                OwnerCarDto ownerCarDto = new OwnerCarDto();
-                ownerCarDto.setPsIds(psIds.toArray(new String[psIds.size()]));
-                ownerCarDto.setCommunityId(parkingSpaceDtos.get(roomIndex).getCommunityId());
-                tmpOwnerCarDtos.addAll(ownerCarInnerServiceSMOImpl.queryOwnerCars(ownerCarDto));
-
-                psIds = new ArrayList<>();
-            }
-        }
-        if (psIds != null && psIds.size() > 0) {
-            OwnerCarDto ownerCarDto = new OwnerCarDto();
-            ownerCarDto.setPsIds(psIds.toArray(new String[psIds.size()]));
-            ownerCarDto.setCommunityId(parkingSpaceDtos.get(0).getCommunityId());
-            tmpOwnerCarDtos.addAll(ownerCarInnerServiceSMOImpl.queryOwnerCars(ownerCarDto));
-        }
-        return tmpOwnerCarDtos;
-
-    }
-
-    private void getRoomAndConfigs(JSONObject paramIn, Workbook workbook) {
-        Sheet sheet = workbook.createSheet("创建费用");
-        Row row = sheet.createRow(0);
-        Cell cell0 = row.createCell(0);
-        cell0.setCellValue("费用名称: 请填写系统中费用类型,如物业费,押金等 ;\n计费起始时间: " +
-                "计费起始时间,格式为YYYY-MM-DD;\n计费结束时间,格式为YYYY-MM-DD;\n" +
-                "建账时间: 建账时间,格式为YYYY-MM-DD; \n 类型:表明是合同 房屋 还是车辆 房屋 1001 车辆 2002 合同 3003" +
-                "\n注意:所有单元格式为文本,计费结束时间只有一次性费用和间接性费用时需要填写");
-        CellStyle cs = workbook.createCellStyle();
-        cs.setWrapText(true);  //关键
-        cell0.setCellStyle(cs);
-        row.setHeight((short) (200 * 10));
-        row = sheet.createRow(1);
-        row.createCell(0).setCellValue("房号");
-        row.createCell(1).setCellValue("类型");
-        row.createCell(2).setCellValue("费用项ID");
-        row.createCell(3).setCellValue("收费项目");
-        row.createCell(4).setCellValue("建账时间");
-        row.createCell(5).setCellValue("计费起始时间");
-        row.createCell(6).setCellValue("计费结束时间");
-        row.createCell(7).setCellValue("房屋状态");
-
-
-        RoomDto roomDto = new RoomDto();
-        roomDto.setCommunityId(paramIn.getString("communityId"));
-        roomDto.setFloorIds(paramIn.getString("floorIds").split(","));
-        List<RoomDto> roomDtos = roomV1InnerServiceSMOImpl.queryRooms(roomDto);
-
-        if (roomDtos == null || roomDtos.size() < 1) {
-            return;
-        }
-        FeeConfigDto feeConfigDto = new FeeConfigDto();
-        feeConfigDto.setConfigIds(paramIn.getString("configIds").split(","));
-        feeConfigDto.setCommunityId(paramIn.getString("communityId"));
-        List<FeeConfigDto> feeConfigDtos = payFeeConfigV1InnerServiceSMOImpl.queryPayFeeConfigs(feeConfigDto);
-
-        if (feeConfigDtos == null || feeConfigDtos.size() < 1) {
-            return;
-        }
-
-        int roomIndex = 2;
-        for (RoomDto tmpRoomDto : roomDtos) {
-            for (FeeConfigDto tmpFeeConfigDto : feeConfigDtos) {
-                row = sheet.createRow(roomIndex);
-                row.createCell(0).setCellValue(tmpRoomDto.getFloorNum() + "-" + tmpRoomDto.getUnitNum() + "-" + tmpRoomDto.getRoomNum());
-                row.createCell(1).setCellValue("1001");
-                row.createCell(2).setCellValue(tmpFeeConfigDto.getConfigId());
-                row.createCell(3).setCellValue(tmpFeeConfigDto.getFeeName());
-                row.createCell(4).setCellValue("");
-                row.createCell(5).setCellValue("");
-                row.createCell(6).setCellValue("");
-                row.createCell(7).setCellValue(tmpRoomDto.getStateName());
-                roomIndex += 1;
-            }
-        }
-        CellRangeAddress region = new CellRangeAddress(0, 0, 0, 5);
-        sheet.addMergedRegion(region);
-    }
-
-
     /**
      * 查询车辆
      *
@@ -421,24 +219,6 @@ public class ExportRoomSMOImpl extends DefaultAbstractComponentSMO implements IE
 
     }
 
-
-    private JSONArray getExistsUnit(IPageData pd, ComponentValidateResult result, String floorId) {
-        String apiUrl = "";
-        ResponseEntity<String> responseEntity = null;
-        apiUrl = "unit.queryUnits?communityId=" + result.getCommunityId() + "&floorId=" + floorId;
-        responseEntity = this.callCenterService(restTemplate, pd, "", apiUrl, HttpMethod.GET);
-
-        if (responseEntity.getStatusCode() != HttpStatus.OK) { //跳过 保存单元信息
-            return null;
-        }
-
-        JSONArray savedFloorInfoResults = JSONArray.parseArray(responseEntity.getBody());
-
-
-        return savedFloorInfoResults;
-    }
-
-
     /**
      * 获取 房屋信息
      *

+ 10 - 2
service-job/src/main/java/com/java110/job/cmd/userDownloadFile/ListUserDownloadFileCmd.java

@@ -20,9 +20,13 @@ import com.java110.core.annotation.Java110Cmd;
 import com.java110.core.context.ICmdDataFlowContext;
 import com.java110.core.event.cmd.Cmd;
 import com.java110.core.event.cmd.CmdEvent;
+import com.java110.core.factory.GenerateCodeFactory;
 import com.java110.intf.job.IUserDownloadFileV1InnerServiceSMO;
 import com.java110.utils.exception.CmdException;
+import com.java110.utils.util.Assert;
 import com.java110.utils.util.BeanConvertUtil;
+import com.java110.utils.util.DateUtil;
+import com.java110.utils.util.PayUtil;
 import com.java110.vo.ResultVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import com.java110.dto.user.UserDownloadFileDto;
@@ -56,6 +60,7 @@ public class ListUserDownloadFileCmd extends Cmd {
     @Override
     public void validate(CmdEvent event, ICmdDataFlowContext cmdDataFlowContext, JSONObject reqJson) {
         super.validatePageInfo(reqJson);
+        Assert.hasKeyAndValue(reqJson, "communityId", "未包含小区编号");
     }
 
     @Override
@@ -70,10 +75,13 @@ public class ListUserDownloadFileCmd extends Cmd {
 
         List<UserDownloadFileDto> userDownloadFileDtos = null;
 
+        String date = DateUtil.getFormatTimeStringB(DateUtil.getCurrentDate());
+        String token = "";
         if (count > 0) {
             userDownloadFileDtos = userDownloadFileV1InnerServiceSMOImpl.queryUserDownloadFiles(userDownloadFileDto);
-            for(UserDownloadFileDto tmpUserDownloadFileDto: userDownloadFileDtos){
-                tmpUserDownloadFileDto.setDownloadUrl("/app/file/userfile/download/"+tmpUserDownloadFileDto.getDownloadId());
+            for (UserDownloadFileDto tmpUserDownloadFileDto : userDownloadFileDtos) {
+                token = tmpUserDownloadFileDto.getDownloadId() + date;
+                tmpUserDownloadFileDto.setDownloadUrl("/app/file/userfile/download/" + tmpUserDownloadFileDto.getDownloadId() + "/" + PayUtil.md5(token));
             }
         } else {
             userDownloadFileDtos = new ArrayList<>();

+ 207 - 0
service-job/src/main/java/com/java110/job/export/adapt/ExportCreateFeeTemplateAdapt.java

@@ -0,0 +1,207 @@
+package com.java110.job.export.adapt;
+
+import com.alibaba.fastjson.JSONObject;
+import com.java110.dto.data.ExportDataDto;
+import com.java110.dto.fee.FeeConfigDto;
+import com.java110.dto.owner.OwnerCarDto;
+import com.java110.dto.parking.ParkingSpaceDto;
+import com.java110.dto.room.RoomDto;
+import com.java110.intf.community.IParkingSpaceInnerServiceSMO;
+import com.java110.intf.community.IRoomV1InnerServiceSMO;
+import com.java110.intf.fee.IPayFeeConfigV1InnerServiceSMO;
+import com.java110.intf.user.IOwnerCarInnerServiceSMO;
+import com.java110.job.export.IExportDataAdapt;
+import com.java110.utils.util.ListUtil;
+import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.ss.util.CellRangeAddress;
+import org.apache.poi.xssf.streaming.SXSSFWorkbook;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.List;
+
+@Service("exportCreateFeeTemplate")
+public class ExportCreateFeeTemplateAdapt implements IExportDataAdapt {
+
+    public static final String TYPE_ROOM = "1001";
+    public static final String TYPE_PARKSPACE = "2002";
+    public static final String TYPE_CONTRACT = "3003"; //合同
+
+    public static final int DEFAULT_ROW = 500;
+
+    @Autowired
+    private IRoomV1InnerServiceSMO roomV1InnerServiceSMOImpl;
+
+    @Autowired
+    private IPayFeeConfigV1InnerServiceSMO payFeeConfigV1InnerServiceSMOImpl;
+
+    @Autowired
+    private IParkingSpaceInnerServiceSMO parkingSpaceInnerServiceSMOImpl;
+
+    @Autowired
+    private IOwnerCarInnerServiceSMO ownerCarInnerServiceSMOImpl;
+
+    @Override
+    public SXSSFWorkbook exportData(ExportDataDto exportDataDto) throws ParseException {
+        JSONObject reqJson = exportDataDto.getReqJson();
+        SXSSFWorkbook workbook = null;  //工作簿
+        //工作表
+        workbook = new SXSSFWorkbook();
+
+        //查询资产和费用项
+        if (TYPE_ROOM.equals(reqJson.getString("type"))) {
+            getRoomAndConfigs(reqJson, workbook);
+        } else if (TYPE_PARKSPACE.equals(reqJson.getString("type"))) {
+            getParkspaceAndConfigs(reqJson, workbook);
+        }
+
+        return workbook;
+    }
+
+    private void getRoomAndConfigs(JSONObject paramIn, SXSSFWorkbook workbook) {
+        Sheet sheet = workbook.createSheet("创建费用");
+        Row row = sheet.createRow(0);
+        Cell cell0 = row.createCell(0);
+        cell0.setCellValue("费用名称: 请填写系统中费用类型,如物业费,押金等 ;\n计费起始时间: " +
+                "计费起始时间,格式为YYYY-MM-DD;\n计费结束时间,格式为YYYY-MM-DD;\n" +
+                "建账时间: 建账时间,格式为YYYY-MM-DD; \n 类型:表明是合同 房屋 还是车辆 房屋 1001 车辆 2002 合同 3003" +
+                "\n注意:所有单元格式为文本,计费结束时间只有一次性费用和间接性费用时需要填写");
+        CellStyle cs = workbook.createCellStyle();
+        cs.setWrapText(true);  //关键
+        cell0.setCellStyle(cs);
+        row.setHeight((short) (200 * 10));
+        row = sheet.createRow(1);
+        row.createCell(0).setCellValue("房号");
+        row.createCell(1).setCellValue("类型");
+        row.createCell(2).setCellValue("费用项ID");
+        row.createCell(3).setCellValue("收费项目");
+        row.createCell(4).setCellValue("建账时间");
+        row.createCell(5).setCellValue("计费起始时间");
+        row.createCell(6).setCellValue("计费结束时间");
+        row.createCell(7).setCellValue("房屋状态");
+
+
+        RoomDto roomDto = new RoomDto();
+        roomDto.setCommunityId(paramIn.getString("communityId"));
+        roomDto.setFloorIds(paramIn.getString("floorIds").split(","));
+        List<RoomDto> roomDtos = roomV1InnerServiceSMOImpl.queryRooms(roomDto);
+
+        if (ListUtil.isNull(roomDtos)) {
+            return;
+        }
+        FeeConfigDto feeConfigDto = new FeeConfigDto();
+        feeConfigDto.setConfigIds(paramIn.getString("configIds").split(","));
+        feeConfigDto.setCommunityId(paramIn.getString("communityId"));
+        List<FeeConfigDto> feeConfigDtos = payFeeConfigV1InnerServiceSMOImpl.queryPayFeeConfigs(feeConfigDto);
+
+        if (ListUtil.isNull(feeConfigDtos)) {
+            return;
+        }
+
+        int roomIndex = 2;
+        for (RoomDto tmpRoomDto : roomDtos) {
+            for (FeeConfigDto tmpFeeConfigDto : feeConfigDtos) {
+                row = sheet.createRow(roomIndex);
+                row.createCell(0).setCellValue(tmpRoomDto.getFloorNum() + "-" + tmpRoomDto.getUnitNum() + "-" + tmpRoomDto.getRoomNum());
+                row.createCell(1).setCellValue("1001");
+                row.createCell(2).setCellValue(tmpFeeConfigDto.getConfigId());
+                row.createCell(3).setCellValue(tmpFeeConfigDto.getFeeName());
+                row.createCell(4).setCellValue("");
+                row.createCell(5).setCellValue("");
+                row.createCell(6).setCellValue("");
+                row.createCell(7).setCellValue(tmpRoomDto.getStateName());
+                roomIndex += 1;
+            }
+        }
+        CellRangeAddress region = new CellRangeAddress(0, 0, 0, 5);
+        sheet.addMergedRegion(region);
+    }
+
+    private void getParkspaceAndConfigs(JSONObject paramIn, SXSSFWorkbook workbook) {
+        Sheet sheet = workbook.createSheet("创建费用");
+        Row row = sheet.createRow(0);
+        Cell cell0 = row.createCell(0);
+        cell0.setCellValue("费用名称: 请填写系统中费用类型,如物业费,押金等 ;\n计费起始时间: " +
+                "计费起始时间,格式为YYYY-MM-DD;\n计费结束时间,格式为YYYY-MM-DD;\n" +
+                "建账时间: 建账时间,格式为YYYY-MM-DD; \n 类型:表明是合同 房屋 还是车辆 房屋 1001 车辆 2002 合同 3003" +
+                "\n注意:所有单元格式为文本");
+        CellStyle cs = workbook.createCellStyle();
+        cs.setWrapText(true);  //关键
+        cell0.setCellStyle(cs);
+        row.setHeight((short) (200 * 10));
+        row = sheet.createRow(1);
+        row.createCell(0).setCellValue("车牌号");
+        row.createCell(1).setCellValue("类型");
+        row.createCell(2).setCellValue("费用项ID");
+        row.createCell(3).setCellValue("收费项目");
+        row.createCell(4).setCellValue("建账时间");
+        row.createCell(5).setCellValue("计费起始时间");
+        row.createCell(6).setCellValue("计费结束时间");
+
+        ParkingSpaceDto parkingSpaceDto = new ParkingSpaceDto();
+        parkingSpaceDto.setCommunityId(paramIn.getString("communityId"));
+        parkingSpaceDto.setPaIds(paramIn.getString("paIds").split(","));
+        List<ParkingSpaceDto> parkingSpaceDtos = parkingSpaceInnerServiceSMOImpl.queryParkingSpaces(parkingSpaceDto);
+
+        if (ListUtil.isNull(parkingSpaceDtos)) {
+            return;
+        }
+
+        //查询车牌号
+        List<OwnerCarDto> ownerCarDtos = getOwnerCars(parkingSpaceDtos);
+        if (ListUtil.isNull(ownerCarDtos) ) {
+            return;
+        }
+        FeeConfigDto feeConfigDto = new FeeConfigDto();
+        feeConfigDto.setConfigIds(paramIn.getString("configIds").split(","));
+        feeConfigDto.setCommunityId(paramIn.getString("communityId"));
+        List<FeeConfigDto> feeConfigDtos = payFeeConfigV1InnerServiceSMOImpl.queryPayFeeConfigs(feeConfigDto);
+
+        if (ListUtil.isNull(feeConfigDtos) ) {
+            return;
+        }
+
+        int roomIndex = 2;
+        for (OwnerCarDto tmpOwnerCarDto : ownerCarDtos) {
+            for (FeeConfigDto tmpFeeConfigDto : feeConfigDtos) {
+                row = sheet.createRow(roomIndex);
+                row.createCell(0).setCellValue(tmpOwnerCarDto.getCarNum());
+                row.createCell(1).setCellValue("2002");
+                row.createCell(2).setCellValue(tmpFeeConfigDto.getConfigId());
+                row.createCell(3).setCellValue(tmpFeeConfigDto.getFeeName());
+                row.createCell(4).setCellValue("");
+                row.createCell(5).setCellValue("");
+                roomIndex += 1;
+            }
+        }
+
+        CellRangeAddress region = new CellRangeAddress(0, 0, 0, 5);
+        sheet.addMergedRegion(region);
+    }
+
+    private List<OwnerCarDto> getOwnerCars(List<ParkingSpaceDto> parkingSpaceDtos) {
+        List<String> psIds = new ArrayList<>();
+        List<OwnerCarDto> tmpOwnerCarDtos = new ArrayList<>();
+        for (int roomIndex = 0; roomIndex < parkingSpaceDtos.size(); roomIndex++) {
+            psIds.add(parkingSpaceDtos.get(roomIndex).getPsId());
+            if (roomIndex % DEFAULT_ROW == 0 && roomIndex != 0) {
+                // 处理房屋费用
+                OwnerCarDto ownerCarDto = new OwnerCarDto();
+                ownerCarDto.setPsIds(psIds.toArray(new String[psIds.size()]));
+                ownerCarDto.setCommunityId(parkingSpaceDtos.get(roomIndex).getCommunityId());
+                tmpOwnerCarDtos.addAll(ownerCarInnerServiceSMOImpl.queryOwnerCars(ownerCarDto));
+
+                psIds = new ArrayList<>();
+            }
+        }
+        if (!ListUtil.isNull(psIds)) {
+            OwnerCarDto ownerCarDto = new OwnerCarDto();
+            ownerCarDto.setPsIds(psIds.toArray(new String[psIds.size()]));
+            ownerCarDto.setCommunityId(parkingSpaceDtos.get(0).getCommunityId());
+            tmpOwnerCarDtos.addAll(ownerCarInnerServiceSMOImpl.queryOwnerCars(ownerCarDto));
+        }
+        return tmpOwnerCarDtos;
+
+    }
+}