You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
206 lines
8.7 KiB
206 lines
8.7 KiB
/* |
|
* 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; |
|
|
|
/** |
|
* <Function Description><br> |
|
* <WebServiceManagerImpl> |
|
* |
|
* @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("<dataset>"); |
|
resultXML.append("<err_code>").append(0).append("</err_code>"); |
|
resultXML.append("<err_msg>").append(StringKit.EMPTY).append("</err_msg>"); |
|
resultXML.append("<total_page_number>").append(totalPageNumber).append("</total_page_number>"); |
|
resultXML.append("<page_number>").append(pageNumber).append("</page_number>"); |
|
resultXML.append("<page_size>").append(pageSize).append("</page_size>"); |
|
resultXML.append("<data>"); |
|
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("</").append(dataModel.getColumnName(col)).append(">"); |
|
} |
|
} |
|
resultXML.append("</data>"); |
|
resultXML.append("</dataset>"); |
|
} 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; |
|
} |
|
} |