/* * Copyright (C), 2018-2021 * Project: starter * FileName: WebServiceManagerImpl * Author: Louis * Date: 2021/7/12 11:34 */ package com.fr.plugin.tabledataservice.webservice; import com.fanruan.api.log.LogKit; import com.fanruan.api.report.ActorKit; import com.fanruan.api.util.StringKit; import com.fr.base.TableData; import com.fr.data.impl.ConditionTableData; import com.fr.general.ComparatorUtils; import com.fr.general.data.DataModel; import com.fr.io.TemplateWorkBookIO; import com.fr.main.TemplateWorkBook; import com.fr.main.workbook.ResultWorkBook; import com.fr.plugin.tabledataservice.ConfigTableDataService; import com.fr.plugin.tabledataservice.bean.DataSetRequest; import com.fr.plugin.tabledataservice.bean.ReportRequest; import com.fr.plugin.tabledataservice.bean.Response; import com.fr.plugin.tabledataservice.exporter.XMLExporter; import com.fr.plugin.tabledataservice.utils.FuncUtils; import com.fr.plugin.tabledataservice.utils.JaxbUtil; import com.fr.script.Calculator; import com.fr.stable.ActorConstants; import com.fr.stable.StringUtils; import javax.jws.WebService; import java.io.ByteArrayOutputStream; import java.io.OutputStream; import static com.fr.plugin.tabledataservice.request.TableDataHandler.START_ROW; import static com.fr.plugin.tabledataservice.request.TableDataHandler.TOTAL_PAGE_NUMBER; /** *
* * * @author fr.open * @since 1.0.0 */ @WebService(endpointInterface = "com.fr.plugin.tabledataservice.webservice.WebServiceManager", serviceName = WebServiceManager.SERVICE_NAME) public class WebServiceManagerImpl implements WebServiceManager { @Override public Response BizOperationReq(String fromUnit, String toUnit, String fromSys, String toSys, String bizOperation, String key, String bizData, String op1) { try { LogKit.info("tabledataservice-WebServiceManagerImpl-BizOperationReq-bizData:{}, op1:{}", bizData, op1); if (StringKit.equalsIgnoreCase(op1, "dataset")) { return datasetOperation(bizData); } else if (StringKit.equalsIgnoreCase(op1, "report")) { return reportOperation(bizData); } else { return Response.failed(18); } } catch (Exception e) { LogKit.error(e.getMessage(), e); return Response.failed(); } } /** * 数据集导出数据操作 * * @param bizData * @return * @throws Exception */ private Response datasetOperation(String bizData) throws Exception { // if (!PluginContexts.currentContext().isAvailable()) { // LogKit.error(I18nKit.getLocText("Plugin-tabledataservice_Licence_Expired")); // return Response.failed(21); // } DataSetRequest dataSetRequest = JaxbUtil.converyToJavaBean(bizData, DataSetRequest.class); int errorCode = isErrorDataset(dataSetRequest); if (!ComparatorUtils.equals(errorCode, 0)) { return Response.failed(errorCode); } TemplateWorkBook workBook = TemplateWorkBookIO.readTemplateWorkBook(dataSetRequest.getReportPath()); if (workBook == null) { return Response.failed(14); } TableData tableData = workBook.getTableData(dataSetRequest.getDatasourceName()); if (tableData == null) { return Response.failed(20); } if (dataSetRequest.getParameters() != null || !dataSetRequest.getParameters().isEmpty()) { if (tableData instanceof ConditionTableData) { ((ConditionTableData) tableData).setDefineParameters(dataSetRequest.getFRParameters()); } else { tableData.setParameters(dataSetRequest.getFRParameters()); } } StringBuilder resultXML = tableDataToXML(tableData, dataSetRequest.getPageNumber(), dataSetRequest.getPageSize()); return Response.success(resultXML.toString()); } private StringBuilder tableDataToXML(TableData tableData, int pageNumber, int pageSize) throws Exception { StringBuilder resultXML = new StringBuilder(); DataModel dataModel = null; try { dataModel = tableData.createDataModel(Calculator.createCalculator()); int rowCount = dataModel.getRowCount(); int totalPageNumber = TOTAL_PAGE_NUMBER; int startRow = START_ROW; int endRow = rowCount - 1; if (pageNumber > 0 && pageSize > 0) { totalPageNumber = (rowCount + pageSize - 1) / pageSize; startRow = (pageNumber - 1) * pageSize; endRow = (pageNumber * pageSize) - 1; } resultXML.append(""); resultXML.append("").append(0).append(""); resultXML.append("").append(StringKit.EMPTY).append(""); resultXML.append("").append(totalPageNumber).append(""); resultXML.append("").append(pageNumber).append(""); resultXML.append("").append(pageSize).append(""); resultXML.append(""); for (int row = startRow; row <= endRow && row < rowCount; row++) { for (int col = 0; col < dataModel.getColumnCount(); col++) { resultXML.append("<").append(dataModel.getColumnName(col)).append(">"); resultXML.append(dataModel.getValueAt(row, col)); resultXML.append(""); } } resultXML.append(""); resultXML.append(""); } catch (Exception e) { LogKit.error(e.getMessage(), e); } finally { if (dataModel != null) { dataModel.release(); } } return resultXML; } /** * 报表结果导出数据操作 * * @param bizData * @return * @throws Exception */ private Response reportOperation(String bizData) throws Exception { // if (!PluginContexts.currentContext().isAvailable()) { // LogKit.error(I18nKit.getLocText("Plugin-tabledataservice_Licence_Expired")); // return Response.failed(21); // } ReportRequest reportRequest = JaxbUtil.converyToJavaBean(bizData, ReportRequest.class); int errorCode = isErrorReport(reportRequest); if (!ComparatorUtils.equals(errorCode, 0)) { return Response.failed(errorCode); } TemplateWorkBook workBook = TemplateWorkBookIO.readTemplateWorkBook(reportRequest.getReportPath()); if (workBook == null) { return Response.failed(14); } ResultWorkBook resultWorkBook = workBook.execute(reportRequest.getFRParameters(), ActorKit.getActor(ActorConstants.TYPE_PAGE)); XMLExporter xmlExporter = new XMLExporter(); xmlExporter.setExporterObject(reportRequest); OutputStream outputStream = new ByteArrayOutputStream(); xmlExporter.export(outputStream, resultWorkBook); return Response.success(outputStream.toString()); } private int isErrorDataset(DataSetRequest dataSetRequest) { if (StringUtils.isEmpty(dataSetRequest.getReportPath())) { return 10; } if (StringUtils.isEmpty(dataSetRequest.getDatasourceName())) { return 11; } if (ComparatorUtils.equals(dataSetRequest.getPageNumber(), 0)) { return 12; } if (ComparatorUtils.equals(dataSetRequest.getPageSize(), 0)) { return 13; } String appKey = ConfigTableDataService.getInstance().getAppKey(); if (StringUtils.isNotEmpty(appKey) && !FuncUtils.validateMD5(appKey, dataSetRequest.getReportPath(), dataSetRequest.getTimestamp(), dataSetRequest.getSign())) { return 15; } return 0; } private int isErrorReport(ReportRequest reportRequest) { if (StringUtils.isEmpty(reportRequest.getReportPath())) { return 10; } if (ComparatorUtils.equals(reportRequest.getStartPage(), 0)) { return 16; } if (ComparatorUtils.equals(reportRequest.getEndPage(), 0)) { return 17; } String appKey = ConfigTableDataService.getInstance().getAppKey(); if (StringUtils.isNotEmpty(appKey) && !FuncUtils.validateMD5(appKey, reportRequest.getReportPath(), reportRequest.getTimestamp(), reportRequest.getSign())) { return 15; } return 0; } }