package com.java110.job.export.adapt; import com.alibaba.fastjson.JSONObject; import com.java110.core.smo.IComputeFeeSMO; import com.java110.dto.community.CommunityDto; import com.java110.dto.data.ExportDataDto; import com.java110.dto.fee.FeeDto; import com.java110.dto.room.RoomDto; import com.java110.intf.community.ICommunityV1InnerServiceSMO; import com.java110.intf.community.IRoomInnerServiceSMO; import com.java110.intf.community.IRoomV1InnerServiceSMO; import com.java110.intf.fee.IFeeInnerServiceSMO; import com.java110.intf.fee.IFeePrintSpecInnerServiceSMO; import com.java110.job.export.IExportDataAdapt; import com.java110.utils.util.*; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFParagraph; import org.apache.poi.xwpf.usermodel.XWPFRun; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.ClassPathResource; import org.springframework.stereotype.Service; import java.io.IOException; import java.io.InputStream; import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.*; /** * 催缴单 导出处理类 */ @Service("dataFeeManualCollection") public class DataFeeManualCollectionAdapt implements IExportDataAdapt { @Autowired private IRoomInnerServiceSMO roomInnerServiceSMOImpl; @Autowired private IFeeInnerServiceSMO feeInnerServiceSMOImpl; @Autowired private IComputeFeeSMO computeFeeSMOImpl; @Autowired private IFeePrintSpecInnerServiceSMO feePrintSpecInnerServiceSMOImpl; @Autowired private IRoomV1InnerServiceSMO roomV1InnerServiceSMOImpl; @Autowired private ICommunityV1InnerServiceSMO communityV1InnerServiceSMO; // 模板文件路径(放在resources目录下) private static final String DOCX_TEMPLATE_PATH = "templates/fee_reminder_template.docx"; // // @Override // public SXSSFWorkbook exportData(ExportDataDto exportDataDto) { // // JSONObject reqJson = exportDataDto.getReqJson(); // Assert.hasKeyAndValue(reqJson, "communityId", "未包含小区"); // Assert.hasKeyAndValue(reqJson, "configIds", "未包含费用"); // Assert.hasKeyAndValue(reqJson, "roomIds", "未包含房屋"); // // String configIds = reqJson.getString("configIds"); // // String roomIds = reqJson.getString("roomIds"); // // // SXSSFWorkbook workbook = null; //工作簿 // workbook = new SXSSFWorkbook(); // workbook.setCompressTempFiles(false); // // Sheet sheet = workbook.createSheet("催缴单"); // Drawing patriarch = sheet.createDrawingPatriarch(); // // FeePrintSpecDto feePrintSpecDto = new FeePrintSpecDto(); // feePrintSpecDto.setCommunityId(reqJson.getString("communityId")); // feePrintSpecDto.setSpecCd("1010"); // feePrintSpecDto.setPage(1); // feePrintSpecDto.setRow(1); // List feePrintSpecDtos = feePrintSpecInnerServiceSMOImpl.queryFeePrintSpecs(feePrintSpecDto); // // if (ListUtil.isNull(feePrintSpecDtos)) { // feePrintSpecDto = null; // } else { // feePrintSpecDto = feePrintSpecDtos.get(0); // } // int line = 0; // double totalPageHeight = 0; // // RoomDto roomDto = new RoomDto(); // roomDto.setRoomIds(roomIds.split(",")); // roomDto.setCommunityId(reqJson.getString("communityId")); // List roomDtos = roomV1InnerServiceSMOImpl.queryRooms(roomDto); // // if (ListUtil.isNull(roomDtos)) { // throw new IllegalArgumentException("未包含房屋"); // } // // for (RoomDto roomDto1 : roomDtos) { // getTmpRoomDtos(roomDto1, configIds, reqJson); // } // for (int roomIndex = 0; roomIndex < roomDtos.size(); roomIndex++) { // //todo 有可能房屋下没有欠费 // if (ListUtil.isNull(roomDtos.get(roomIndex).getFees())) { // continue; // } // Map info = generatorRoomOweFee(sheet, workbook, roomDtos.get(roomIndex), line, totalPageHeight, patriarch, feePrintSpecDto); // line = Integer.parseInt(info.get("line").toString()) + 1; // totalPageHeight = Double.parseDouble(info.get("totalPageHeight").toString()); // } // // // return workbook; // } // // private Map generatorRoomOweFee(Sheet sheet, SXSSFWorkbook workbook, RoomDto roomDto, int line, // double totalPageHeight, Drawing patriarch, FeePrintSpecDto feePrintSpecDto // ) { // List fees = roomDto.getFees(); // String[] feePrintRemarks = null; // if (feePrintSpecDto != null) { // feePrintRemarks = feePrintSpecDto.getContent().toLowerCase().replace("
", "").split("\n"); // } else { // feePrintRemarks = new String[]{""}; // } // int defaultRowHeight = 280; // //计算当前单子的高度 // int titleHeight = defaultRowHeight * 3; // int subTitleHeight = defaultRowHeight * 5; // int totalHeight = titleHeight + subTitleHeight + defaultRowHeight * 3 + fees.size() * defaultRowHeight; // //备注,加上打印配置内容 // if (feePrintRemarks != null && feePrintRemarks.length > 0) { // totalHeight += (feePrintRemarks.length * defaultRowHeight); // } // double A4_lengthways_pageSize = defaultRowHeight * 57;//15960 // // //当前页 已经占用的高度 // double curPageHeight = totalPageHeight % A4_lengthways_pageSize; // //当前页空闲高度 // double freePageHeight = A4_lengthways_pageSize - curPageHeight; // if (freePageHeight < totalHeight && curPageHeight != 0) { // line += Math.ceil(freePageHeight / defaultRowHeight); // totalPageHeight += freePageHeight; // } // // totalPageHeight += totalHeight; // // // sheet.setColumnWidth(0, 8 * 256 * 2); // sheet.setColumnWidth(1, 8 * 256 * 1); // sheet.setColumnWidth(2, 8 * 256 * 1); // sheet.setColumnWidth(3, 8 * 256 * 3); // sheet.setColumnWidth(4, 8 * 256 * 1); // sheet.setColumnWidth(5, 8 * 256 * 1); // sheet.setColumnWidth(6, 8 * 256 * 1); // // //通用样式 // CellStyle cellStyle = workbook.createCellStyle(); ////设置样式对象,这里仅设置了边框属性 // cellStyle.setBorderBottom(BorderStyle.THIN); //下边框 // cellStyle.setBorderLeft(BorderStyle.THIN);//左边框 // cellStyle.setBorderTop(BorderStyle.THIN);//上边框 // cellStyle.setBorderRight(BorderStyle.THIN);//右边框 // cellStyle.setAlignment(HorizontalAlignment.CENTER); // // // 标题 // Row row = sheet.createRow(0 + line); // Cell cell0 = row.createCell(0); // //cell0.setCellValue("缴费通知单totalHeight:" + totalHeight + "-totalPageHeight:" + totalPageHeight + "-curPageHeight:" + curPageHeight + "-freePageHeight:" + freePageHeight + "-line:" + line); // if (feePrintSpecDto != null) { // cell0.setCellValue(feePrintSpecDto.getPrintName() + "缴费通知单"); // } else { // cell0.setCellValue("缴费通知单"); // } // //标题设置字体 // Font font = workbook.createFont(); // font.setFontName("黑体"); // font.setFontHeightInPoints((short) 26); // CellStyle titleCellStyle = workbook.createCellStyle(); // titleCellStyle.setFont(font); // titleCellStyle.setAlignment(HorizontalAlignment.CENTER); // cell0.setCellStyle(titleCellStyle); // row.setHeight((short) (titleHeight)); // // //合并标题 // CellRangeAddress region = new CellRangeAddress(0 + line, 0 + line, 0, 6); // sheet.addMergedRegion(region); // // // //子标题 // if (feePrintSpecDto != null) { // XSSFClientAnchor anchor = new XSSFClientAnchor(0, 0, 0, 0, (short) 0, 1 + line, (short) 1, 1 + line + 1); // anchor.setAnchorType(ClientAnchor.AnchorType.MOVE_AND_RESIZE);//设置图片随单元移动调整大小 // try { // String qrImg = ImageUtils.getBase64ByImgUrl(feePrintSpecDto.getQrImg()).replace("data:image/webp;base64,", "") // .replace("data:image/png;base64,", "") // .replace("data:image/jpeg;base64,", ""); // patriarch.createPicture(anchor, workbook.addPicture(Base64Convert.base64ToByte(qrImg), XSSFWorkbook.PICTURE_TYPE_JPEG)); // } catch (IOException e) { // e.printStackTrace(); // } // } // CellStyle subTitleCellStyle = workbook.createCellStyle(); // subTitleCellStyle.setAlignment(HorizontalAlignment.CENTER); // subTitleCellStyle.setVerticalAlignment(VerticalAlignment.BOTTOM); // row = sheet.createRow(1 + line); // Cell cell1 = row.createCell(1); // if (!ListUtil.isNull(fees)) { // cell1.setCellValue("业主:" + fees.get(0).getOwnerName()); // } else { // cell1.setCellValue("业主:无"); // } // cell1.setCellStyle(subTitleCellStyle); // // Cell cell2 = row.createCell(2); // cell2.setCellValue("房号:" + roomDto.getFloorNum() // + "-" + roomDto.getUnitNum() // + "-" + roomDto.getRoomNum()); // cell2.setCellStyle(subTitleCellStyle); // // row.createCell(3).setCellValue(""); // row.createCell(4).setCellValue(""); // Cell cell5 = row.createCell(5); // cell5.setCellValue(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_B)); // cell5.setCellStyle(subTitleCellStyle); // CellStyle rowCellStyle = workbook.createCellStyle(); // rowCellStyle.setVerticalAlignment(VerticalAlignment.BOTTOM); // row.setRowStyle(rowCellStyle); // // //设置表头之上 // region = new CellRangeAddress(1 + line, 1 + line, 2, 3); // sheet.addMergedRegion(region); // region = new CellRangeAddress(1 + line, 1 + line, 5, 6); // sheet.addMergedRegion(region); // //子标题高度 // row.setHeight((short) (subTitleHeight)); // // // row = sheet.createRow(2 + line); // cell0 = row.createCell(0); // cell0.setCellValue("收费名称"); // cell0.setCellStyle(cellStyle); // cell1 = row.createCell(1); // cell1.setCellValue("收费标准"); // cell1.setCellStyle(cellStyle); // cell2 = row.createCell(2); // cell2.setCellValue("数量/面积"); // cell2.setCellStyle(cellStyle); // Cell cell3 = row.createCell(3); // cell3.setCellValue("欠费时间"); // cell3.setCellStyle(cellStyle); // Cell cell4 = row.createCell(4); // cell4.setCellValue("应缴金额(元)"); // cell4.setCellStyle(cellStyle); // cell5 = row.createCell(5); // cell5.setCellValue("违约金(元)"); // cell5.setCellStyle(cellStyle); // Cell cell6 = row.createCell(6); // cell6.setCellValue("备注"); // cell6.setCellStyle(cellStyle); // row.setHeight((short) (defaultRowHeight)); // // // BigDecimal totalPrice = new BigDecimal(0); // String startTime = ""; // String endTime = ""; // String squarePrice = ""; // for (int feeIndex = 0; feeIndex < fees.size(); feeIndex++) { // JSONObject feeObj = BeanConvertUtil.beanCovertJson(fees.get(feeIndex)); // row = sheet.createRow(line + feeIndex + 3); // startTime = DateUtil.getFormatTimeStringB(feeObj.getDate("endTime")); // endTime = DateUtil.getFormatTimeStringB(feeObj.getDate("deadlineTime")); // squarePrice = feeObj.getString("squarePrice"); // // //动态费用单价就去动态单价 // if (feeObj.containsKey("computingFormula") && "9009".equals(feeObj.getString("computingFormula"))) { // squarePrice = feeObj.getString("mwPrice"); // } // // cell0 = row.createCell(0); // cell0.setCellValue(feeObj.getString("feeName")); // cell0.setCellStyle(cellStyle); // cell1 = row.createCell(1); // cell1.setCellValue(squarePrice); // cell1.setCellStyle(cellStyle); // cell2 = row.createCell(2); // //todo 不能只展示面积 // cell2.setCellValue(roomDto.getBuiltUpArea()); // if (!StringUtil.isEmpty(feeObj.getString("curDegrees"))) { // BigDecimal degrees = new BigDecimal(feeObj.getString("curDegrees")) // .subtract(new BigDecimal(feeObj.getString("preDegrees"))); // cell2.setCellValue(degrees.doubleValue()); // } // // cell2.setCellStyle(cellStyle); // cell3 = row.createCell(3); // if (feeObj.containsKey("curDegrees")) { // cell3.setCellValue(startTime + "至" + endTime + " " + feeObj.getString("preDegrees") + "至" + feeObj.getString("curDegrees")); // } else { // cell3.setCellValue(startTime + "至" + endTime); // } // cell3.setCellStyle(cellStyle); // cell4 = row.createCell(4); // cell4.setCellValue(feeObj.getString("feeTotalPrice")); // cell4.setCellStyle(cellStyle); // cell5 = row.createCell(5); // cell5.setCellValue("0"); // cell5.setCellStyle(cellStyle); // cell6 = row.createCell(6); // cell6.setCellValue(""); // cell6.setCellStyle(cellStyle); // row.setHeight((short) (defaultRowHeight)); // totalPrice = totalPrice.add(new BigDecimal(feeObj.getString("feeTotalPrice"))); // } // // row = sheet.createRow(line + fees.size() + 3); // // cell0 = row.createCell(0); // cell0.setCellValue("合计(大写)"); // cell0.setCellStyle(cellStyle); // cell1 = row.createCell(1); // cell1.setCellValue(Money2ChineseUtil.toChineseChar(totalPrice.doubleValue())); // cell1.setCellStyle(cellStyle); // cell2 = row.createCell(2); // cell2.setCellValue(""); // cell2.setCellStyle(cellStyle); // cell3 = row.createCell(3); // cell3.setCellValue(""); // cell3.setCellStyle(cellStyle); // cell4 = row.createCell(4); // cell4.setCellValue(totalPrice.doubleValue()); // cell4.setCellStyle(cellStyle); // cell5 = row.createCell(5); // cell5.setCellValue(""); // cell5.setCellStyle(cellStyle); // cell6 = row.createCell(6); // cell6.setCellValue(""); // cell6.setCellStyle(cellStyle); // row.setHeight((short) (defaultRowHeight)); // // // //合计 合并 // region = new CellRangeAddress(line + fees.size() + 3, line + fees.size() + 3, 1, 3); // sheet.addMergedRegion(region); // // if (feePrintRemarks != null && feePrintRemarks.length > 0) { // for (int remarkIndex = 0; remarkIndex < feePrintRemarks.length; remarkIndex++) { // row = sheet.createRow(line + fees.size() + 4 + remarkIndex); // row.createCell(0).setCellValue(feePrintRemarks[remarkIndex]); // row.setHeight((short) (defaultRowHeight)); // } // } // row = sheet.createRow(line + fees.size() + 4 + feePrintRemarks.length); // row.createCell(0).setCellValue(""); // row.setHeight((short) (defaultRowHeight)); // Map info = new HashMap(); // info.put("line", line + fees.size() + 4 + feePrintRemarks.length); // info.put("totalPageHeight", totalPageHeight); // return info; // } // // private RoomDto getTmpRoomDtos(RoomDto tmpRoomDto, String configIds, JSONObject reqJson) { // FeeDto tmpFeeDto = null; // tmpFeeDto = new FeeDto(); // // tmpFeeDto.setArrearsEndTime(DateUtil.getCurrentDate()); // tmpFeeDto.setState(FeeDto.STATE_DOING); // tmpFeeDto.setPayerObjId(tmpRoomDto.getRoomId()); // tmpFeeDto.setPayerObjType(FeeDto.PAYER_OBJ_TYPE_ROOM); // tmpFeeDto.setConfigIds(configIds.split(",")); // List feeDtos = feeInnerServiceSMOImpl.querySimpleFees(tmpFeeDto); // // if (ListUtil.isNull(feeDtos)) { // return null; // } // // List tmpFeeDtos = new ArrayList<>(); // for (FeeDto tempFeeDto : feeDtos) { // // computeFeeSMOImpl.computeEveryOweFee(tempFeeDto, tmpRoomDto);//计算欠费金额 // //如果金额为0 就排除 // //if (tempFeeDto.getFeePrice() > 0 && tempFeeDto.getEndTime().getTime() <= DateUtil.getCurrentDate().getTime()) { // // todo 校验 时间范围 // if (!hasInTime(tempFeeDto, reqJson)) { // continue; // } // if (tempFeeDto.getFeeTotalPrice() != 0) { // tmpFeeDtos.add(tempFeeDto); // } // } // // if (tmpFeeDtos.size() < 1) { // return null; // } // tmpRoomDto.setFees(tmpFeeDtos); // return tmpRoomDto; // } // // private boolean hasInTime(FeeDto tempFeeDto, JSONObject reqJson) { // if (!reqJson.containsKey("startTime") || !reqJson.containsKey("endTime")) { // return true; // } // // String startTime = reqJson.getString("startTime"); // String endTime = reqJson.getString("endTime"); // // if (StringUtil.isEmpty(startTime) || StringUtil.isEmpty(endTime)) { // return true; // } // if (tempFeeDto.getDeadlineTime() == null) { // return true; // } // // if (tempFeeDto.getEndTime().before(DateUtil.getDateFromStringB(startTime)) // && tempFeeDto.getDeadlineTime().after(DateUtil.getDateFromStringB(endTime)) // ) { // return true; // } // // return false; // } @Override public Object exportData(ExportDataDto exportDataDto) throws ParseException { try { // 1. 获取请求数据 JSONObject reqJson = exportDataDto.getReqJson(); validateParams(reqJson); // 验证必要参数 String configId = reqJson.getString("configId"); String roomId = reqJson.getString("roomId"); // 2. 查询房屋信息 RoomDto roomDto = getRoomInfo(roomId, reqJson.getString("communityId")); if (roomDto == null) { throw new IllegalArgumentException("未找到房屋数据"); } // 3. 处理费用数据 getTmpRoomDtos(roomDto, configId, reqJson); if (ListUtil.isNull(roomDto.getFees())) { throw new IllegalArgumentException("未找到该房屋的费用数据"); } // 准备替换的占位符数据 Map placeholders = preparePlaceholders(roomDto, reqJson); // 读取Docx模板并替换占位符 XWPFDocument doc = renderDocxTemplate(placeholders); return doc; } catch (Exception e) { e.printStackTrace(); throw new RuntimeException("生成催款通知失败: " + e.getMessage()); } } /** * 验证必要参数 */ private void validateParams(JSONObject reqJson) { Assert.hasKeyAndValue(reqJson, "communityId", "未包含小区"); Assert.hasKeyAndValue(reqJson, "configIds", "未包含费用"); Assert.hasKeyAndValue(reqJson, "roomId", "未包含房屋"); } /** * 获取房屋信息 */ private RoomDto getRoomInfo(String roomId, String communityId) { RoomDto roomDto = new RoomDto(); roomDto.setRoomIds(roomId.split(",")); roomDto.setCommunityId(communityId); List roomDtos = roomV1InnerServiceSMOImpl.queryRooms(roomDto); return ListUtil.isNull(roomDtos) ? null : roomDtos.get(0); } /** * 准备占位符数据(文本替换) */ private Map preparePlaceholders(RoomDto roomDto, JSONObject reqJson) { Map placeholders = new HashMap<>(); CommunityDto communityDto = new CommunityDto(); communityDto.setCommunityId(roomDto.getCommunityId()); List communityDtos = communityV1InnerServiceSMO.queryCommunitys(communityDto); placeholders.put("area", communityDtos.get(0).getNearbyLandmarks()); // 房屋信息 placeholders.put("buildingNum", roomDto.getUnitNum() != null ? roomDto.getUnitNum() : ""); placeholders.put("roomNum", roomDto.getRoomNum() != null ? roomDto.getRoomNum() : ""); // 业主与费用信息 FeeDto fee = roomDto.getFees().get(0); placeholders.put("ownerName", fee.getOwnerName() != null ? fee.getOwnerName() : ""); placeholders.put("price", String.valueOf(fee.getFeeTotalPrice())); JSONObject feeObj = BeanConvertUtil.beanCovertJson(fee); String startTime = DateUtil.getFormatTimeStringB(feeObj.getDate("endTime")); String endTime = DateUtil.getFormatTimeStringB(feeObj.getDate("deadlineTime")); LocalDate startDate = LocalDate.parse(startTime, DateTimeFormatter.ISO_LOCAL_DATE); LocalDate endDate = LocalDate.parse(endTime, DateTimeFormatter.ISO_LOCAL_DATE); // 时间信息 placeholders.put("startYear", String.valueOf(startDate.getYear())); placeholders.put("startMonth", startDate.getMonthValue() >= 10 ? String.valueOf(startDate.getMonthValue()) : ("0" + startDate.getMonthValue())); placeholders.put("endYear", String.valueOf(endDate.getYear())); placeholders.put("endMonth", endDate.getMonthValue() >= 10 ? String.valueOf(endDate.getMonthValue()) : ("0" + endDate.getMonthValue())); // 当前日期 Date currentDate = new Date(); SimpleDateFormat yearFormat = new SimpleDateFormat("yyyy"); SimpleDateFormat monthFormat = new SimpleDateFormat("MM"); SimpleDateFormat dayFormat = new SimpleDateFormat("dd"); placeholders.put("a", yearFormat.format(currentDate)); placeholders.put("b", monthFormat.format(currentDate)); placeholders.put("c", dayFormat.format(currentDate)); return placeholders; } /** * 读取Docx模板并替换占位符 */ private XWPFDocument renderDocxTemplate(Map placeholders) throws IOException { // 1. 读取模板文件 ClassPathResource resource = new ClassPathResource(DOCX_TEMPLATE_PATH); try (InputStream is = resource.getInputStream()) { XWPFDocument doc = new XWPFDocument(is); // 2. 替换文本占位符 replaceTextPlaceholders(doc, placeholders); return doc; } } /** * 替换文本占位符(如 ${ownerName}) */ private void replaceTextPlaceholders(XWPFDocument doc, Map placeholders) { // 处理段落中的占位符 for (XWPFParagraph para : doc.getParagraphs()) { for (XWPFRun run : para.getRuns()) { String text = run.getText(0); if (text == null) { // 文本本身为null时跳过 continue; } String replacedText = text; // 临时存储替换后的文本 for (Map.Entry entry : placeholders.entrySet()) { String placeholder = "${" + entry.getKey() + "}"; // 关键修复:如果替换值为null,用空字符串替代 String replacement = entry.getValue() != null ? entry.getValue() : ""; // 替换占位符 if (replacedText.contains(placeholder)) { replacedText = replacedText.replace(placeholder, replacement); } } // 只有文本变化时才更新,避免无效操作 if (!replacedText.equals(text)) { run.setText(replacedText, 0); } } } // 处理表格中的占位符(同样处理null值) doc.getTables().forEach(table -> { table.getRows().forEach(row -> { row.getTableCells().forEach(cell -> { cell.getParagraphs().forEach(para -> { para.getRuns().forEach(run -> { String text = run.getText(0); if (text == null) { return; } String replacedText = text; for (Map.Entry entry : placeholders.entrySet()) { String placeholder = "${" + entry.getKey() + "}"; String replacement = entry.getValue() != null ? entry.getValue() : ""; // 处理null if (replacedText.contains(placeholder)) { replacedText = replacedText.replace(placeholder, replacement); } } if (!replacedText.equals(text)) { run.setText(replacedText, 0); } }); }); }); }); }); } /** * 处理房屋费用数据 */ private RoomDto getTmpRoomDtos(RoomDto tmpRoomDto, String configId, JSONObject reqJson) { FeeDto tmpFeeDto = new FeeDto(); tmpFeeDto.setState(FeeDto.STATE_DOING); tmpFeeDto.setPayerObjId(tmpRoomDto.getRoomId()); tmpFeeDto.setPayerObjType(FeeDto.PAYER_OBJ_TYPE_ROOM); tmpFeeDto.setConfigId(configId); List feeDtos = feeInnerServiceSMOImpl.querySimpleFees(tmpFeeDto); List tmpFeeDtos = new ArrayList<>(); if (!ListUtil.isNull(feeDtos)) { for (FeeDto tempFeeDto : feeDtos) { computeFeeSMOImpl.computeEveryOweFee(tempFeeDto, tmpRoomDto); if (hasInTime(tempFeeDto, reqJson) && tempFeeDto.getFeeTotalPrice() != 0) { tmpFeeDtos.add(tempFeeDto); } } } tmpRoomDto.setFees(tmpFeeDtos); return tmpRoomDto; } /** * 验证费用是否在时间范围内 */ private boolean hasInTime(FeeDto tempFeeDto, JSONObject reqJson) { if (!reqJson.containsKey("startTime") || !reqJson.containsKey("endTime")) { return true; } String startTime = reqJson.getString("startTime"); String endTime = reqJson.getString("endTime"); if (StringUtil.isEmpty(startTime) || StringUtil.isEmpty(endTime)) { return true; } if (tempFeeDto.getDeadlineTime() == null) { return true; } try { Date startDate = DateUtil.getDateFromStringB(startTime); Date endDate = DateUtil.getDateFromStringB(endTime); return tempFeeDto.getEndTime().before(startDate) && tempFeeDto.getDeadlineTime().after(endDate); } catch (Exception e) { e.printStackTrace(); return false; } } @Override public String getFileType() { return "docx"; // 明确生成docx格式 } }