Browse Source

提交开源任务材料

10.0
LAPTOP-SB56SG4Q\86185 3 years ago
parent
commit
ed4b3ee816
  1. BIN
      JSD-8210 -需求确认书V1.1.docx
  2. 5
      README.md
  3. 26
      plugin.xml
  4. 19
      src/main/java/com/fr/plugin/xxx/report/Alias.java
  5. 17
      src/main/java/com/fr/plugin/xxx/report/CSSImporter.java
  6. 23
      src/main/java/com/fr/plugin/xxx/report/Init.java
  7. 22
      src/main/java/com/fr/plugin/xxx/report/JSImporter.java
  8. 71
      src/main/java/com/fr/plugin/xxx/report/Server.java
  9. 18
      src/main/java/com/fr/plugin/xxx/report/ServerBridge.java
  10. 17
      src/main/java/com/fr/plugin/xxx/report/SheetControlActorBridge.java
  11. 40
      src/main/java/com/fr/plugin/xxx/report/SpReportSessionHelpProvider.java
  12. 83
      src/main/java/com/fr/plugin/xxx/report/actor/SheetControlActor.java
  13. 21
      src/main/java/com/fr/plugin/xxx/report/core/BuilderProvider.java
  14. 93
      src/main/java/com/fr/plugin/xxx/report/core/DsUtils.java
  15. 48
      src/main/java/com/fr/plugin/xxx/report/core/RelationBuilder.java
  16. 36
      src/main/java/com/fr/plugin/xxx/report/core/SPTemplateReportlet.java
  17. 38
      src/main/java/com/fr/plugin/xxx/report/core/SheetNameBuilder.java
  18. 53
      src/main/java/com/fr/plugin/xxx/report/core/ViewSheetBuilder.java
  19. 55
      src/main/java/com/fr/plugin/xxx/report/core/ViewWidgetBuilder.java
  20. 37
      src/main/java/com/fr/plugin/xxx/report/creator/SPReportletCreator.java
  21. 90
      src/main/java/com/fr/plugin/xxx/report/link/ReportletCreator.java
  22. 0
      src/main/resources/com/fr/plugin/xxx/report/main.css
  23. 143
      src/main/resources/com/fr/plugin/xxx/report/main.js

BIN
JSD-8210 -需求确认书V1.1.docx

Binary file not shown.

5
README.md

@ -1,3 +1,6 @@
# open-JSD-8210
JSD-8210开源任务材料
JSD-8210 开源任务材料\
免责说明:该源码为第三方爱好者提供,不保证源码和方案的可靠性,也不提供任何形式的源码教学指导和协助!\
仅作为开发者学习参考使用!禁止用于任何商业用途!\
为保护开发者隐私,开发者信息已隐去!若原开发者希望公开自己的信息,可联系hugh处理。

26
plugin.xml

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><plugin>
<id>com.fr.plugin.xxx.report</id>
<name><![CDATA[ 模板预览定制 ]]></name>
<active>yes</active>
<version>1.3.4</version>
<env-version>10.0~10.0</env-version>
<vendor>fr.open</vendor>
<jartime>2018-04-01</jartime>
<description><![CDATA[ ]]></description>
<change-notes><![CDATA[
]]></change-notes>
<main-package>com.fr.plugin.xxx.report</main-package>
<function-recorder class="com.fr.plugin.xxx.report.JSImporter"/>
<lifecycle-monitor class="com.fr.plugin.xxx.report.Init"/>
<extra-core>
<CssFileHandler class="com.fr.plugin.xxx.report.CSSImporter"/>
<JavaScriptFileHandler class="com.fr.plugin.xxx.report.JSImporter"/>
</extra-core>
<extra-decision>
<HttpHandlerProvider class="com.fr.plugin.xxx.report.ServerBridge"/>
<URLAliasProvider class="com.fr.plugin.xxx.report.Alias"/>
</extra-decision>
<extra-report>
<ActorProvider class="com.fr.plugin.xxx.report.SheetControlActorBridge"/>
</extra-report>
</plugin>

19
src/main/java/com/fr/plugin/xxx/report/Alias.java

@ -0,0 +1,19 @@
package com.fr.plugin.xxx.report;
import com.fr.decision.fun.impl.AbstractURLAliasProvider;
import com.fr.decision.webservice.url.alias.URLAlias;
import com.fr.decision.webservice.url.alias.URLAliasFactory;
/**
* @author 秃破天际
* @version 10.0
* Created by 秃破天际 on 2020-04-17
**/
public class Alias extends AbstractURLAliasProvider {
@Override
public URLAlias[] registerAlias() {
return new URLAlias[]{
URLAliasFactory.createPluginAlias( Server.URI, Server.URI, true),
};
}
}

17
src/main/java/com/fr/plugin/xxx/report/CSSImporter.java

@ -0,0 +1,17 @@
package com.fr.plugin.xxx.report;
import com.fr.stable.fun.impl.AbstractCssFileHandler;
/**
* @author 秃破天际
* @version 10.0
* Created by 秃破天际 on 2020-04-03
**/
public class CSSImporter extends AbstractCssFileHandler {
@Override
public String[] pathsForFiles() {
return new String[]{
"/com/fr/plugin/deqing/report/main.css"
};
}
}

23
src/main/java/com/fr/plugin/xxx/report/Init.java

@ -0,0 +1,23 @@
package com.fr.plugin.xxx.report;
import com.fr.plugin.context.PluginContext;
import com.fr.plugin.observer.inner.AbstractPluginLifecycleMonitor;
/**
* @author 秃破天际
* @version 10.0
* Created by 秃破天际 on 2020-04-01
**/
public class Init extends AbstractPluginLifecycleMonitor {
public Init(){
}
@Override
public void afterRun(PluginContext pluginContext) {
}
@Override
public void beforeStop(PluginContext pluginContext) {
}
}

22
src/main/java/com/fr/plugin/xxx/report/JSImporter.java

@ -0,0 +1,22 @@
package com.fr.plugin.xxx.report;
import com.fr.plugin.transform.ExecuteFunctionRecord;
import com.fr.plugin.transform.FunctionRecorder;
import com.fr.stable.fun.impl.AbstractJavaScriptFileHandler;
/**
* @author 秃破天际
* @version 10.0
* Created by 秃破天际 on 2020-04-01
**/
@FunctionRecorder
public class JSImporter extends AbstractJavaScriptFileHandler {
@Override
@ExecuteFunctionRecord
public String[] pathsForFiles() {
return new String[]{
"/com/fr/plugin/xxx/report/main.js"
};
}
}

71
src/main/java/com/fr/plugin/xxx/report/Server.java

@ -0,0 +1,71 @@
package com.fr.plugin.xxx.report;
import com.fr.decision.fun.impl.BaseHttpHandler;
import com.fr.json.JSONArray;
import com.fr.json.JSONObject;
import com.fr.log.FineLoggerFactory;
import com.fr.main.TemplateWorkBook;
import com.fr.plugin.xxx.report.core.DsUtils;
import com.fr.script.Calculator;
import com.fr.third.springframework.web.bind.annotation.RequestMethod;
import com.fr.web.core.ReportSessionIDInfor;
import com.fr.web.core.SessionPoolManager;
import com.fr.web.utils.WebUtils;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;
/**
* @author 秃破天际
* @version 10.0
* Created by 秃破天际 on 2020-04-17
**/
public class Server extends BaseHttpHandler {
public final static String URI = "/sheet/info";
@Override
public RequestMethod getMethod() {
return RequestMethod.GET;
}
@Override
public String getPath() {
return URI;
}
@Override
public boolean isPublic() {
return true;
}
@Override
public void handle(HttpServletRequest req, HttpServletResponse res) throws Exception {
FineLoggerFactory.getLogger().info("##### /sheet/info start...");
String sid = WebUtils.getHTTPRequestParameter(req,"sessionId");
FineLoggerFactory.getLogger().info("##### sid={}",sid);
ReportSessionIDInfor info = SessionPoolManager.getSessionIDInfor(sid, ReportSessionIDInfor.class);
Calculator cal = info.createSessionCalculator(req,res);
TemplateWorkBook book = info.getWorkBookDefine();
FineLoggerFactory.getLogger().info("##### book={}",book.toString());
Map<String,String> relation = DsUtils.getRelation("CONF_SHEET","id","name", book,cal);
JSONArray result = JSONArray.create();
FineLoggerFactory.getLogger().info("##### book.length={}",book.getReportCount());
for( int i=0,len=book.getReportCount();i<len;i++ ){
String id = book.getReportName(i);
FineLoggerFactory.getLogger().info("##### id[{}]={}",i,id);
JSONObject item = JSONObject.create().put("id",id);
if( relation.containsKey(id) ){
FineLoggerFactory.getLogger().info("##### name[{}]={}",i,relation.get(id));
item.put("name",relation.get(id));
}else{
FineLoggerFactory.getLogger().info("##### name[{}]={}",i,id);
item.put("name",id);
}
result.put(item);
}
FineLoggerFactory.getLogger().info("##### result={}",result.toString());
WebUtils.flushSuccessMessageAutoClose(req,res,result);
}
}

18
src/main/java/com/fr/plugin/xxx/report/ServerBridge.java

@ -0,0 +1,18 @@
package com.fr.plugin.xxx.report;
import com.fr.decision.fun.HttpHandler;
import com.fr.decision.fun.impl.AbstractHttpHandlerProvider;
/**
* @author 秃破天际
* @version 10.0
* Created by 秃破天际 on 2020-04-17
**/
public class ServerBridge extends AbstractHttpHandlerProvider {
@Override
public HttpHandler[] registerHandlers() {
return new HttpHandler[]{
new Server()
};
}
}

17
src/main/java/com/fr/plugin/xxx/report/SheetControlActorBridge.java

@ -0,0 +1,17 @@
package com.fr.plugin.xxx.report;
import com.fr.plugin.xxx.report.actor.SheetControlActor;
import com.fr.report.fun.impl.AbstractActorProvider;
import com.fr.report.stable.fun.Actor;
/**
* @Author fr.open
* @Date 2021/7/14
* @Description
**/
public class SheetControlActorBridge extends AbstractActorProvider {
@Override
public Actor[] createActor() {
return new Actor[]{new SheetControlActor()};
}
}

40
src/main/java/com/fr/plugin/xxx/report/SpReportSessionHelpProvider.java

@ -0,0 +1,40 @@
package com.fr.plugin.xxx.report;
import com.fr.log.FineLoggerFactory;
import com.fr.main.TemplateWorkBook;
import com.fr.plugin.xxx.report.core.BuilderProvider;
import com.fr.plugin.xxx.report.core.ViewSheetBuilder;
import com.fr.plugin.xxx.report.core.ViewWidgetBuilder;
import com.fr.report.fun.impl.AbstractReportSessionHelpProvider;
import com.fr.stable.web.Repository;
import com.fr.web.core.ReportSessionIDInfor;
import com.fr.web.core.SessionPoolManager;
import com.fr.web.request.AbstractReportletRequest;
/**
* @Author fr.open
* @Date 2021/7/8
* @Description
**/
public class SpReportSessionHelpProvider extends AbstractReportSessionHelpProvider {
private final static BuilderProvider[] builders = new BuilderProvider[]{
new ViewSheetBuilder("CONF_SHEET_GROUP", "id", "group"),
new ViewWidgetBuilder("CONF_WIDGET", "id", "group")//,
//new SheetNameBuilder("CONF_SHEET","id","name")
};
@Override
public void dealWithSession(Repository repository) {
String sessionID = repository.getSessionID();
ReportSessionIDInfor session = SessionPoolManager.getSessionIDInfor(sessionID, ReportSessionIDInfor.class);
TemplateWorkBook book = session.getWorkBookDefine();
for (BuilderProvider builder : builders) {
try {
builder.build(book, AbstractReportletRequest.getInstance(repository.getHttpServletRequest()));
} catch (Exception e) {
FineLoggerFactory.getLogger().error(e.getMessage(),e);
}
}
}
}

83
src/main/java/com/fr/plugin/xxx/report/actor/SheetControlActor.java

@ -0,0 +1,83 @@
package com.fr.plugin.xxx.report.actor;
import com.fr.json.JSONArray;
import com.fr.json.JSONObject;
import com.fr.log.FineLoggerFactory;
import com.fr.main.TemplateWorkBook;
import com.fr.main.workbook.ResultWorkBook;
import com.fr.plugin.xxx.report.core.BuilderProvider;
import com.fr.plugin.xxx.report.core.DsUtils;
import com.fr.plugin.xxx.report.core.ViewSheetBuilder;
import com.fr.plugin.xxx.report.core.ViewWidgetBuilder;
import com.fr.report.core.sheet.SheetSequenceExecutor;
import com.fr.stable.ArrayUtils;
import com.fr.stable.StringUtils;
import com.fr.stable.WriteActor;
import com.fr.stable.web.Repository;
import com.fr.web.RepositoryHelper;
import com.fr.web.core.ReportSession;
import com.fr.web.request.AbstractReportletRequest;
import java.util.Map;
/**
* @Author fr.open
* @Date 2021/7/14
* @Description
**/
public class SheetControlActor extends WriteActor {
private final static BuilderProvider[] builders = new BuilderProvider[]{
new ViewSheetBuilder("CONF_SHEET_GROUP", "id", "group"),
new ViewWidgetBuilder("CONF_WIDGET", "id", "group")//,
//new SheetNameBuilder("CONF_SHEET","id","name")
};
@Override
public ResultWorkBook executeWorkBook(TemplateWorkBook book, Map parameterMap) {
for (BuilderProvider builder : builders) {
try {
builder.build(book,AbstractReportletRequest.getInstance(parameterMap));
} catch (Exception e) {
FineLoggerFactory.getLogger().error(e.getMessage(),e);
}
}
return new SheetSequenceExecutor(book, parameterMap).execute(this);
}
@Override
public JSONArray processMultipleSheet(Repository repository) {
JSONArray array = super.processMultipleSheet(repository);
ReportSession session = (ReportSession) RepositoryHelper.getSessionIDInfor(repository);
TemplateWorkBook book = session.getWorkBookDefine();
AbstractReportletRequest request = AbstractReportletRequest.getInstance(repository.getHttpServletRequest());
Map<String, String> relation = DsUtils.getRelation("CONF_SHEET_GROUP", "id", "group", book, request);
String groupId = (String) request.getParameter("__sheet_group__");
String [] group = split( relation.get(groupId), ",");
if( 0 == group.length ){
return array;
}
JSONArray result = JSONArray.create();
for (int i = 0; i < array.size(); i++) {
JSONObject obj = array.getJSONObject(i);
if(!obj.has("title")){
continue;
}
if(ArrayUtils.contains(group,obj.getString("title")) ){
result.add(obj);
}
}
return result;
}
protected String[] split( String record , String sep ){
if( StringUtils.isEmpty( record ) ){
return new String[0];
}
String [] group = new String[]{record};
if( record.contains(sep) ){
group = record.split(sep);
}
return group;
}
}

21
src/main/java/com/fr/plugin/xxx/report/core/BuilderProvider.java

@ -0,0 +1,21 @@
package com.fr.plugin.xxx.report.core;
import com.fr.main.TemplateWorkBook;
import com.fr.web.request.ReportletRequest;
/**
* @author 秃破天际
* @version 10.0
* Created by 秃破天际 on 2020-04-01
**/
public abstract class BuilderProvider {
/**
* 通过这个方法对模板的不同部分进行调整
* @param book
* @param request
*/
public abstract void build(TemplateWorkBook book, ReportletRequest request )throws Exception;
}

93
src/main/java/com/fr/plugin/xxx/report/core/DsUtils.java

@ -0,0 +1,93 @@
package com.fr.plugin.xxx.report.core;
import com.fr.base.ParameterMapNameSpace;
import com.fr.base.SynchronizedLiveDataModelUtils;
import com.fr.base.TableData;
import com.fr.data.TableDataSource;
import com.fr.data.api.TableDataAssist;
import com.fr.general.data.DataModel;
import com.fr.main.TemplateWorkBook;
import com.fr.script.Calculator;
import com.fr.stable.ParameterProvider;
import com.fr.web.request.ReportletRequest;
import java.util.HashMap;
import java.util.Map;
/**
* @author 秃破天际
* @version 10.0
* Created by 秃破天际 on 2020-04-01
**/
public final class DsUtils {
private DsUtils(){}
private final static Calculator initCalculator(TemplateWorkBook book){
Calculator calculator = Calculator.createCalculator();
calculator.setAttribute(TableDataSource.KEY,book);
return calculator;
}
private final static void initParameter(Calculator calculator,TableData ds,ReportletRequest request){
Map<String,Object> parameters = new HashMap<String,Object>();
ParameterProvider[] ps = ds.getParameters(calculator);
for( ParameterProvider p : ps ){
String pname = p.getName();
Object v = request.getParameter(pname);
if( null != v ){
parameters.put(pname, v);
}
}
ParameterMapNameSpace space = ParameterMapNameSpace.create(parameters);
calculator.pushNameSpace(space);
}
public static DataModel getDataModel(TemplateWorkBook book, ReportletRequest request, String dsName ){
Calculator calculator = initCalculator(book);
TableData ds = TableDataAssist.getTableData(calculator, dsName);
initParameter(calculator,ds,request);
DataModel dm = SynchronizedLiveDataModelUtils.getSELiveDataModel4Share(calculator, dsName);
if ( null == dm ) {
dm = ds == null ? null : ds.createDataModel(calculator);
}
return dm;
}
public static DataModel getDataModel(TemplateWorkBook book, Calculator calculator, String dsName ){
TableData ds = TableDataAssist.getTableData(calculator, dsName);
DataModel dm = SynchronizedLiveDataModelUtils.getSELiveDataModel4Share(calculator, dsName);
if ( null == dm ) {
dm = ds == null ? null : ds.createDataModel(calculator);
}
return dm;
}
public static Map<String,String> getRelation(String dsName, String keyCol, String valueCol, TemplateWorkBook book, Calculator cal){
Map<String,String> rt = new HashMap<String,String>();
try{
DataModel dm = getDataModel(book,cal,dsName);
int vIdx = dm.getColumnIndex(valueCol);
int kIdx = dm.getColumnIndex(keyCol);
for( int i=0,len=dm.getRowCount();i<len;i++ ){
rt.put( (String)dm.getValueAt( i, kIdx), (String)dm.getValueAt( i, vIdx) );
}
}catch(Exception e){
}
return rt;
}
public static Map<String,String> getRelation(String dsName, String keyCol, String valueCol, TemplateWorkBook book, ReportletRequest request){
Map<String,String> rt = new HashMap<String,String>();
try{
DataModel dm = getDataModel(book,request,dsName);
int vIdx = dm.getColumnIndex(valueCol);
int kIdx = dm.getColumnIndex(keyCol);
for( int i=0,len=dm.getRowCount();i<len;i++ ){
rt.put( (String)dm.getValueAt( i, kIdx), (String)dm.getValueAt( i, vIdx) );
}
}catch(Exception e){
}
return rt;
}
}

48
src/main/java/com/fr/plugin/xxx/report/core/RelationBuilder.java

@ -0,0 +1,48 @@
package com.fr.plugin.xxx.report.core;
import com.fr.main.TemplateWorkBook;
import com.fr.stable.StringUtils;
import com.fr.web.request.ReportletRequest;
import java.util.Map;
/**
* @author 秃破天际
* @version 10.0
* Created by 秃破天际 on 2020-04-03
**/
public abstract class RelationBuilder extends BuilderProvider {
private String dsName;
private String colKey;
private String colValue;
public RelationBuilder( String dsName, String colKey, String colValue ){
this.dsName = dsName;
this.colKey = colKey;
this.colValue = colValue;
}
protected abstract boolean accept(TemplateWorkBook book, ReportletRequest request)throws Exception;
protected abstract void build(TemplateWorkBook book, ReportletRequest request,Map<String, String> relation)throws Exception;
@Override
public void build(TemplateWorkBook book, ReportletRequest request )throws Exception{
if( !accept(book,request) ){
return;
}
Map<String, String> relation = DsUtils.getRelation(dsName, colKey, colValue, book, request);
build(book,request,relation);
}
protected String[] split( String record , String sep ){
if( StringUtils.isEmpty( record ) ){
return new String[0];
}
String [] group = new String[]{record};
if( record.contains(sep) ){
group = record.split(sep);
}
return group;
}
}

36
src/main/java/com/fr/plugin/xxx/report/core/SPTemplateReportlet.java

@ -0,0 +1,36 @@
package com.fr.plugin.xxx.report.core;
import com.fr.main.TemplateWorkBook;
import com.fr.web.WebletException;
import com.fr.web.reportlet.TemplateReportlet;
import com.fr.web.request.ReportletRequest;
/**
* @author 秃破天际
* @version 10.0
* Created by 秃破天际 on 2020-04-01
**/
public class SPTemplateReportlet extends TemplateReportlet {
public SPTemplateReportlet(String path) {
super(path);
}
private final static BuilderProvider[] builders = new BuilderProvider[]{
new ViewSheetBuilder("CONF_SHEET_GROUP","id","group"),
new ViewWidgetBuilder("CONF_WIDGET","id","group")//,
//new SheetNameBuilder("CONF_SHEET","id","name")
};
@Override
public TemplateWorkBook createReport( ReportletRequest request ) throws WebletException{
TemplateWorkBook book = super.createReport(request);
for( BuilderProvider builder : builders ){
try{
builder.build(book,request);
}catch(Exception e){
}
}
return book;
}
}

38
src/main/java/com/fr/plugin/xxx/report/core/SheetNameBuilder.java

@ -0,0 +1,38 @@
package com.fr.plugin.xxx.report.core;
import com.fr.main.TemplateWorkBook;
import com.fr.web.request.ReportletRequest;
import java.util.Map;
/**
* @author 秃破天际
* @version 10.0
* Created by 秃破天际 on 2020-04-01
* 设置每个sheet的名称的构建适配器
**/
public class SheetNameBuilder extends RelationBuilder {
public SheetNameBuilder(String dsName, String colKey, String colValue) {
super(dsName, colKey, colValue);
}
@Override
protected boolean accept(TemplateWorkBook book, ReportletRequest request) throws Exception {
return true;
}
@Override
protected void build(TemplateWorkBook book, ReportletRequest request, Map<String, String> relation) throws Exception {
if( relation.isEmpty() ){
return;
}
for(int i=0,len=book.getReportCount();i<len;i++){
String id = book.getReportName(i);
if( relation.containsKey(id) ){
book.setReportName(i, relation.get(id) );
}
}
}
}

53
src/main/java/com/fr/plugin/xxx/report/core/ViewSheetBuilder.java

@ -0,0 +1,53 @@
package com.fr.plugin.xxx.report.core;
import com.fr.main.TemplateWorkBook;
import com.fr.stable.ArrayUtils;
import com.fr.stable.StringUtils;
import com.fr.web.request.ReportletRequest;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* @author 秃破天际
* @version 10.0
* Created by 秃破天际 on 2020-04-03
**/
public class ViewSheetBuilder extends RelationBuilder{
private static final String DS_NAME = "CONF_SHEET_GROUP";
private static final String COL_KEY = "id";
private static final String COL_VALUE = "group";
public ViewSheetBuilder(String dsName, String colKey, String colValue) {
super(dsName, colKey, colValue);
}
@Override
protected boolean accept(TemplateWorkBook book, ReportletRequest request) throws Exception {
String groupId = (String)request.getParameter("__SHEET_GROUP__");
return StringUtils.isNotEmpty(groupId);
}
@Override
protected void build(TemplateWorkBook book, ReportletRequest request, Map<String, String> relation) throws Exception {
String groupId = (String)request.getParameter("__SHEET_GROUP__");
String [] group = split( relation.get(groupId), ",");
if( 0 == group.length ){
return;
}
List<String> dels = new ArrayList<String>();
for(int i=0,len=book.getReportCount();i<len;i++ ){
String id = book.getReportName(i);
for( int j=0; j<group.length; j++ ){
if( !ArrayUtils.contains(group,id) ){
dels.add(id);
}
}
}
for( String id : dels ){
book.removeReport(id);
}
}
}

55
src/main/java/com/fr/plugin/xxx/report/core/ViewWidgetBuilder.java

@ -0,0 +1,55 @@
package com.fr.plugin.xxx.report.core;
import com.fr.form.ui.Widget;
import com.fr.main.TemplateWorkBook;
import com.fr.report.cell.AbstractWidgetCellElement;
import com.fr.report.worksheet.WorkSheet;
import com.fr.stable.ArrayUtils;
import com.fr.stable.StringUtils;
import com.fr.web.request.ReportletRequest;
import java.util.Iterator;
import java.util.Map;
/**
* @author 秃破天际
* @version 10.0
* Created by 秃破天际 on 2020-04-03
**/
public class ViewWidgetBuilder extends RelationBuilder {
public ViewWidgetBuilder(String dsName, String colKey, String colValue) {
super(dsName, colKey, colValue);
}
@Override
protected boolean accept(TemplateWorkBook book, ReportletRequest request) throws Exception {
String groupId = (String)request.getParameter("__WIDGET_GROUP__");
return StringUtils.isNotEmpty( groupId );
}
@Override
protected void build(TemplateWorkBook book, ReportletRequest request, Map<String, String> relation) throws Exception {
String groupId = (String)request.getParameter("__WIDGET_GROUP__");
String [] group = split( relation.get(groupId), ",");
if( 0 == group.length ){
return;
}
int count = book.getReportCount();
for( int i=0; i<count; i++ ){
WorkSheet sheet = (WorkSheet)book.getReport(i);
build( sheet, group );
}
}
private void build( WorkSheet sheet, String [] group ){
Iterator<AbstractWidgetCellElement> cells = sheet.cellIterator();
while (cells.hasNext() ){
AbstractWidgetCellElement cell = cells.next();
Widget widget = cell.getWidget();
if( null != widget && !ArrayUtils.contains(group,widget.getWidgetName())){
cell.setWidget(null);
}
}
}
}

37
src/main/java/com/fr/plugin/xxx/report/creator/SPReportletCreator.java

@ -0,0 +1,37 @@
package com.fr.plugin.xxx.report.creator;
import com.fr.data.NetworkHelper;
import com.fr.general.ComparatorUtils;
import com.fr.plugin.xxx.report.core.SPTemplateReportlet;
import com.fr.plugin.xxx.report.link.ReportletCreator;
import com.fr.stable.web.TemplatePathNode;
import com.fr.stable.web.Weblet;
import com.fr.web.reportlet.OldWeblet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* @author 秃破天际
* @version 10.0
* Created by 秃破天际 on 2020-04-01
**/
public class SPReportletCreator extends ReportletCreator {
public static final SPReportletCreator KEY = new SPReportletCreator();
@Override
public Weblet createWebletByRequest(HttpServletRequest req, HttpServletResponse res){
TemplatePathNode pathNode = queryPath(req);
String reportlet = pathNode.getPath();
if (oldWebletOrServletCheck(req, pathNode)) {
return OldWeblet.asOldReportlet(reportlet);
}
// 暂时兼容cptx从cpt格式中读取
if (ComparatorUtils.equals(NetworkHelper.getHTTPRequestParameter(req, FORMAT), X)) {
return new SPTemplateReportlet(reportlet + X);
}
return new SPTemplateReportlet(reportlet);
}
}

90
src/main/java/com/fr/plugin/xxx/report/link/ReportletCreator.java

@ -0,0 +1,90 @@
package com.fr.plugin.xxx.report.link;
import com.fr.base.extension.FileExtension;
import com.fr.data.NetworkHelper;
import com.fr.general.ComparatorUtils;
import com.fr.stable.ActorConstants;
import com.fr.stable.ActorFactory;
import com.fr.stable.web.*;
import com.fr.web.reportlet.EmbeddedTplReportlet;
import com.fr.web.reportlet.OldWeblet;
import com.fr.web.reportlet.TemplateReportlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;
/**
* @author 秃破天际
* @version 10.0
* Created by 秃破天际 on 2020-04-01
**/
public class ReportletCreator extends AbstractWebletCreator {
public static final ReportletCreator KEY = new ReportletCreator();
/**
* hugh:直接把10.0的report-engine的ReportletCreator的代码复制过来把构造改成public即可
* 以后如果产品的ReportletCreator发生了变更同样要copy过来
*/
public ReportletCreator() {
}
@Override
public TemplatePathMarker[] queryPathMarker() {
return new TemplatePathMarker[]{PathMarkerImpl.VIEWLET, PathMarkerImpl.REPORTLET};
}
@Override
public FileExtension suffix() {
return FileExtension.CPT;
}
/**
* 通过http请求构造Weblet
*
* @param req http请求
* @param res http应答
* @return 构造的Weblet
* @throws Exception
*/
@Override
public Weblet createWebletByRequest(HttpServletRequest req, HttpServletResponse res) {
TemplatePathNode pathNode = queryPath(req);
String reportlet = pathNode.getPath();
if (oldWebletOrServletCheck(req, pathNode)) {
return OldWeblet.asOldReportlet(reportlet);
}
// 暂时兼容cptx从cpt格式中读取
if (ComparatorUtils.equals(NetworkHelper.getHTTPRequestParameter(req, FORMAT), X)) {
return new TemplateReportlet(reportlet + X);
}
return new TemplateReportlet(reportlet);
}
/**
* 根据模板路径生成合适的Weblet
*
* @param tplPath 模板路径模板名
* @param parameterMap 参数
* @return 构造的Weblet
* @throws Exception
*/
@Override
public Weblet createEmbeddedWeblet(String tplPath, Map<String, Object> parameterMap) {
if (tplPath == null || !matchReportTpl(tplPath)) {
return null;
}
return new EmbeddedTplReportlet(tplPath, ActorFactory.getActor(ActorConstants.TYPE_PAGE), parameterMap);
}
/**
* 是否是报表模板
*
* @param tplPath 模板路径
* @return 如果是报表模板返回true否则false
*/
private boolean matchReportTpl(String tplPath) {
return FileExtension.CPT.matchExtension(tplPath);
}
}

0
src/main/resources/com/fr/plugin/xxx/report/main.css

143
src/main/resources/com/fr/plugin/xxx/report/main.js

@ -0,0 +1,143 @@
/**
* @author 秃破天际
* @version 10.0
* Created by 秃破天际 on 2020-04-01
**/
!(function () {
window.onload = function(){
var getQueryVariable = function(variable) {
var query = window.location.search.substring(1);
var vars = query.split("&");
for (var i=0;i<vars.length;i++) {
var pair = vars[i].split("=");
if(pair[0] == variable){
return pair[1];
}
}
return(false);
};
/**
* 是否是填报预览或者数据分析预览
* @returns {boolean}
*/
var isWriteOrView = function () {
return typeof FR != "undefined" && (typeof FR.Write != "undefined" || typeof FR.ViewPane != "undefined")
};
/**
* 是否是新填报预览
* @returns {boolean}
*/
var isWritePlus = function () {
return typeof FR != "undefined" && typeof WT != "undefined";
};
if( getQueryVariable("_show_") != "true" ||( !isWriteOrView() && !isWritePlus() ) ){
return;
}
/**
* 获取当前报表的所有sheet定义
* @returns {*}
*/
var getSheetList = function(){
var list;
FR.ajax({
url:FR.fineServletURL+"/url/sheet/info?sessionId="+_g().currentSessionID,
success:function(data){
list = FR.jsonDecode(data);
},
async:false
});
return list;
};
/**
* 获取当前激活的sheet
*/
var getActiveSheet = function () {
if( isWritePlus() ){
return _g().sheetContainer.activeIndex;
}else{
return _g().$contentPane.data("TabPane").activeTabIndex;
}
};
var $active = null;
var items = [];
/**
* 设置激活的sheet仅UI不触发真正的sheet切换
* @param index
*/
var setActive =function ( index ) {
if( null != $active){
$active.removeClass("hg-active");
}
$active = items[index];
$active.addClass("hg-active");
};
var initSheetItem = function( item,h,idx ){
var lv = "hg-font-lv5";
if( h<=27 ){lv = "hg-font-lv4"}
if( h<=24 ){lv = "hg-font-lv3"}
if( h<=21 ){lv = "hg-font-lv2"}
if( h<=18 ){lv = "hg-font-lv1"}
var $item = $("<li/>").addClass("hg-list-item").addClass(lv)
.append($("<span/>").html(item.name));
$item.click(function (e) {
FR.SheetController.selectSheetByID(item.id);
setActive(idx);
});
return $item;
};
$.extend(FR,{SheetController:{
/**
* 通过sheet名称切换到指定sheet
* @param name
*/
selectSheetByID: function ( id ) {
var self = this;
if( isWritePlus() ){
var list = getSheetList();
list.forEach(function(item,index){
if( item.id == id ){
_g().sheetContainer.selectSheet(index);
}
});
}else{
_g().$contentPane.data("TabPane").selectTabByName(id);
}
},
init:function () {
debugger;
var list = getSheetList();
if( typeof list == "undefined" || list.length <= 1 ){
return ;
}
var $wrap = $("<div/>").addClass("hg-sheet-ctrl-wrap").appendTo("body");
var $sideBtn = $("<div/>").addClass("hg-side-hotspot").appendTo($wrap);
var $guidepost = $("<div/>").addClass("hg-guidepost").appendTo($wrap);
var $list = $("<div/>").addClass("hg-list").addClass("hg-card").appendTo($wrap);
$list.hide();
var showList = function (e) {
var idx = getActiveSheet();
setActive(idx);
$list.show();
$guidepost.hide();
};
var hideList = function (e) {
$list.hide();
$guidepost.show();
};
$sideBtn.mousemove(showList);
$guidepost.click(showList);
$list.mouseleave(hideList);
var item_height = parseInt(document.body.clientHeight/list.length);
list.forEach(function(item,index){
var $item = initSheetItem(item,item_height,index).appendTo($list);
items.push($item);
$item.click(hideList);
});
}
}});
FR.SheetController.init();
};
})();
Loading…
Cancel
Save