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