| | |
| | | import com.java110.front.smo.assetExport.IExportFeeManualCollectionSMO; |
| | | import com.java110.utils.constant.ServiceConstant; |
| | | import com.java110.utils.util.Assert; |
| | | import com.java110.utils.util.Base64Convert; |
| | | import com.java110.utils.util.DateUtil; |
| | | import com.java110.utils.util.Money2ChineseUtil; |
| | | import org.apache.poi.ss.usermodel.Cell; |
| | | import org.apache.poi.ss.usermodel.CellStyle; |
| | | import org.apache.poi.ss.usermodel.Row; |
| | | import org.apache.poi.ss.usermodel.Sheet; |
| | | import org.apache.poi.ss.usermodel.Workbook; |
| | | import org.apache.poi.ss.usermodel.*; |
| | | import org.apache.poi.ss.util.CellRangeAddress; |
| | | import org.apache.poi.xssf.usermodel.XSSFClientAnchor; |
| | | import org.apache.poi.xssf.usermodel.XSSFWorkbook; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | |
| | | import java.io.ByteArrayOutputStream; |
| | | import java.io.IOException; |
| | | import java.math.BigDecimal; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * @ClassName AssetImportSmoImpl |
| | |
| | | try { |
| | | workbook.write(os); |
| | | context = os.toByteArray(); |
| | | os.close(); |
| | | workbook.close(); |
| | | |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | // 保存数据 |
| | | return new ResponseEntity<Object>("导出失败", HttpStatus.INTERNAL_SERVER_ERROR); |
| | | } finally { |
| | | try { |
| | | os.close(); |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | try { |
| | | workbook.close(); |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | // 保存数据 |
| | | return new ResponseEntity<Object>(context, headers, HttpStatus.OK); |
| | |
| | | * @param workbook |
| | | */ |
| | | private void getRoomOweFees(IPageData pd, ComponentValidateResult result, Workbook workbook) { |
| | | |
| | | Sheet sheet = workbook.createSheet("催缴单"); |
| | | Drawing patriarch = sheet.createDrawingPatriarch(); |
| | | String apiUrl = ""; |
| | | ResponseEntity<String> responseEntity = null; |
| | | apiUrl = ServiceConstant.SERVICE_API_URL + "/api/feeApi/listAllRoomOweFees?communityId=" + result.getCommunityId(); |
| | | JSONObject reqJson = JSONObject.parseObject(pd.getReqData()); |
| | | apiUrl = ServiceConstant.SERVICE_API_URL + "/api/feeApi/listAllRoomOweFees" + mapToUrlParam(reqJson); |
| | | responseEntity = this.callCenterService(restTemplate, pd, "", apiUrl, HttpMethod.GET); |
| | | |
| | | if (responseEntity.getStatusCode() != HttpStatus.OK) { //跳过 保存单元信息 |
| | |
| | | return; |
| | | } |
| | | |
| | | Sheet sheet = workbook.createSheet("催缴单"); |
| | | //查询催缴单二维码 |
| | | JSONObject feePrint = null; |
| | | apiUrl = ServiceConstant.SERVICE_API_URL + "/api/feePrintSpec/queryFeePrintSpec?page=1&row=1&specCd=1010&communityId=" + result.getCommunityId(); |
| | | responseEntity = this.callCenterService(restTemplate, pd, "", apiUrl, HttpMethod.GET); |
| | | if (responseEntity.getStatusCode() == HttpStatus.OK) { |
| | | JSONObject feePrintResults = JSONObject.parseObject(responseEntity.getBody(), Feature.OrderedField); |
| | | if (feePrintResults.containsKey("data")) { |
| | | JSONArray feePrints = feePrintResults.getJSONArray("data"); |
| | | if (feePrints != null && feePrints.size() > 0) { |
| | | feePrint = feePrints.getJSONObject(0); |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | int line = 0; |
| | | double totalPageHeight = 0; |
| | | for (int roomIndex = 0; roomIndex < rooms.size(); roomIndex++) { |
| | | line = generatorRoomOweFee(sheet, workbook, rooms.getJSONObject(roomIndex), line + 1); |
| | | Map<String, Object> info = generatorRoomOweFee(sheet, workbook, rooms.getJSONObject(roomIndex), line, totalPageHeight, patriarch, feePrint); |
| | | line = Integer.parseInt(info.get("line").toString()) + 1; |
| | | totalPageHeight = Double.parseDouble(info.get("totalPageHeight").toString()); |
| | | } |
| | | } |
| | | |
| | | private int generatorRoomOweFee(Sheet sheet, Workbook workbook, JSONObject room, int line) { |
| | | private Map<String, Object> generatorRoomOweFee(Sheet sheet, Workbook workbook, JSONObject room, int line, double totalPageHeight, Drawing patriarch, JSONObject feePrint) { |
| | | JSONArray fees = room.getJSONArray("fees"); |
| | | String[] feePrintRemarks = null; |
| | | if (feePrint != null) { |
| | | feePrintRemarks = feePrint.getString("content").toLowerCase().replace("</br>", "").split("\n"); |
| | | } |
| | | 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); |
| | | cell0.setCellValue("缴费通知单"); |
| | | CellStyle cs = workbook.createCellStyle(); |
| | | cs.setWrapText(true); //关键 |
| | | cell0.setCellStyle(cs); |
| | | row.setHeight((short) (200 * 10)); |
| | | //第一行 |
| | | //标题设置字体 |
| | | 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 (feePrint != 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 = feePrint.getString("qrImg").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); |
| | | row.createCell(0).setCellValue("收费二维码"); |
| | | row.createCell(1).setCellValue("房号:" + room.getString("floorNum") |
| | | |
| | | Cell cell1 = row.createCell(1); |
| | | cell1.setCellValue("房号:" + room.getString("floorNum") |
| | | + "-" + room.getString("unitNum") |
| | | + "-" + room.getString("roomNum")); |
| | | row.createCell(2).setCellValue("业主:" + room.getString("ownerName")); |
| | | row.createCell(3).setCellValue(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_B)); |
| | | cell1.setCellStyle(subTitleCellStyle); |
| | | |
| | | row.createCell(2).setCellValue(""); |
| | | 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, 1, 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); |
| | | row.createCell(0).setCellValue("收费名称"); |
| | | row.createCell(1).setCellValue("收费标准"); |
| | | row.createCell(2).setCellValue("数量/面积"); |
| | | row.createCell(3).setCellValue("欠费时间"); |
| | | row.createCell(4).setCellValue("应缴金额(元)"); |
| | | row.createCell(5).setCellValue("违约金(元)"); |
| | | row.createCell(6).setCellValue("备注"); |
| | | cell0 = row.createCell(0); |
| | | cell0.setCellValue("收费名称"); |
| | | cell0.setCellStyle(cellStyle); |
| | | cell1 = row.createCell(1); |
| | | cell1.setCellValue("收费标准"); |
| | | cell1.setCellStyle(cellStyle); |
| | | Cell 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)); |
| | | |
| | | JSONArray fees = room.getJSONArray("fees"); |
| | | |
| | | BigDecimal totalPrice = new BigDecimal(0); |
| | | String startTime = ""; |
| | | String endTime = ""; |
| | | for (int feeIndex = 0; feeIndex < fees.size(); feeIndex++) { |
| | | JSONObject feeObj = fees.getJSONObject(feeIndex); |
| | | row = sheet.createRow(line + feeIndex + 3); |
| | | row.createCell(0).setCellValue(feeObj.getString("feeName")); |
| | | row.createCell(1).setCellValue(feeObj.getString("squarePrice")); |
| | | row.createCell(2).setCellValue(room.getString("builtUpArea")); |
| | | row.createCell(3).setCellValue(feeObj.getString("endTime") + "至" + feeObj.getString("deadlineTime")); |
| | | row.createCell(4).setCellValue(room.getString("feePrice")); |
| | | row.createCell(5).setCellValue("0"); |
| | | row.createCell(6).setCellValue(""); |
| | | totalPrice.add(new BigDecimal(feeObj.getString("squarePrice"))); |
| | | startTime = feeObj.getString("endTime").length() > 10 ? feeObj.getString("endTime").substring(0, 10) : feeObj.getString("endTime"); |
| | | endTime = feeObj.getString("deadlineTime").length() > 10 ? feeObj.getString("deadlineTime").substring(0, 10) : feeObj.getString("deadlineTime"); |
| | | |
| | | cell0 = row.createCell(0); |
| | | cell0.setCellValue(feeObj.getString("feeName")); |
| | | cell0.setCellStyle(cellStyle); |
| | | cell1 = row.createCell(1); |
| | | cell1.setCellValue(feeObj.getString("squarePrice")); |
| | | cell1.setCellStyle(cellStyle); |
| | | cell2 = row.createCell(2); |
| | | cell2.setCellValue(room.getString("builtUpArea")); |
| | | cell2.setCellStyle(cellStyle); |
| | | cell3 = row.createCell(3); |
| | | cell3.setCellValue(startTime + "至" + endTime); |
| | | cell3.setCellStyle(cellStyle); |
| | | cell4 = row.createCell(4); |
| | | cell4.setCellValue(feeObj.getString("feePrice")); |
| | | 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("feePrice"))); |
| | | } |
| | | |
| | | row = sheet.createRow(line + fees.size() + 3); |
| | | row.createCell(0).setCellValue("合计(大写):"); |
| | | row.createCell(1).setCellValue(Money2ChineseUtil.toChineseChar(totalPrice.doubleValue())); |
| | | row.createCell(2).setCellValue(""); |
| | | row.createCell(3).setCellValue(""); |
| | | row.createCell(4).setCellValue(totalPrice.doubleValue()); |
| | | row.createCell(5).setCellValue(""); |
| | | row.createCell(6).setCellValue(""); |
| | | |
| | | row = sheet.createRow(line + fees.size() + 4); |
| | | row.createCell(0).setCellValue("1、请收到通知单5日内到物业处或微信支付"); |
| | | row = sheet.createRow(fees.size() + 5); |
| | | row.createCell(0).setCellValue("2、逾期未缴,将按规定收取违约金,会给您照成不必要的损失"); |
| | | 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)); |
| | | |
| | | return line + fees.size() + 4; |
| | | |
| | | //合计 合并 |
| | | 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; |
| | | } |
| | | |
| | | |
| | |
| | | } |
| | | |
| | | public static void main(String[] args) { |
| | | Java110ThreadPoolFactory<String> pool =Java110ThreadPoolFactory.getInstance().createThreadPool(20); |
| | | for (int i = 20; i > 0; i--) { |
| | | Java110ThreadPoolFactory<String> pool = Java110ThreadPoolFactory.getInstance().createThreadPool(20); |
| | | for (int i = 21; i > 0; i--) { |
| | | Integer data = i; |
| | | pool.submit(() -> { |
| | | //这个地方可以写一个函数,参数可以从外层传入 |
| | | System.out.println("网络操作开始" + data); |
| | | Thread.sleep(data * 1000); |
| | | System.out.println("网络操作结束" + data); |
| | | return data+""; |
| | | return data + ""; |
| | | }); |
| | | } |
| | | List<String> users = pool.get(); |