LAPTOP-SB56SG4Q\86185
3 years ago
23 changed files with 954 additions and 1 deletions
Binary file not shown.
@ -1,3 +1,6 @@
|
||||
# open-JSD-8210 |
||||
|
||||
JSD-8210开源任务材料 |
||||
JSD-8210 开源任务材料\ |
||||
免责说明:该源码为第三方爱好者提供,不保证源码和方案的可靠性,也不提供任何形式的源码教学指导和协助!\ |
||||
仅作为开发者学习参考使用!禁止用于任何商业用途!\ |
||||
为保护开发者隐私,开发者信息已隐去!若原开发者希望公开自己的信息,可联系hugh处理。 |
@ -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> |
@ -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), |
||||
}; |
||||
} |
||||
} |
@ -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" |
||||
}; |
||||
} |
||||
} |
@ -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) { |
||||
} |
||||
} |
@ -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" |
||||
}; |
||||
} |
||||
} |
@ -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); |
||||
} |
||||
} |
@ -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() |
||||
}; |
||||
} |
||||
} |
@ -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()}; |
||||
} |
||||
} |
@ -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); |
||||
} |
||||
} |
||||
} |
||||
} |
@ -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; |
||||
} |
||||
} |
@ -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; |
||||
|
||||
|
||||
} |
@ -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; |
||||
} |
||||
|
||||
} |
@ -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; |
||||
} |
||||
} |
@ -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; |
||||
} |
||||
} |
@ -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) ); |
||||
} |
||||
} |
||||
} |
||||
|
||||
} |
@ -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); |
||||
} |
||||
} |
||||
} |
@ -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); |
||||
} |
||||
} |
||||
} |
||||
} |
@ -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); |
||||
} |
||||
|
||||
|
||||
} |
@ -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,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…
Reference in new issue