JSD-9551 WebService开放
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

/*
* 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;
}
}