pioneer
2 years ago
commit
720f55cc0f
29 changed files with 1613 additions and 0 deletions
@ -0,0 +1,6 @@
|
||||
# open-JSD-9974 |
||||
|
||||
JSD-9974 报表可以自动解析出表头信息并存入数据库\ |
||||
免责说明:该源码为第三方爱好者提供,不保证源码和方案的可靠性,也不提供任何形式的源码教学指导和协助!\ |
||||
仅作为开发者学习参考使用!禁止用于任何商业用途!\ |
||||
为保护开发者隐私,开发者信息已隐去!若原开发者希望公开自己的信息,可联系【pioneer】处理。 |
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,409 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<WorkBook xmlVersion="20211223" releaseVersion="10.0.0"> |
||||
<TableDataMap> |
||||
<TableData name="ds1" class="com.fr.data.impl.DBTableData"> |
||||
<Parameters/> |
||||
<Attributes maxMemRowCount="-1"/> |
||||
<Connection class="com.fr.data.impl.NameDatabaseConnection"> |
||||
<DatabaseName> |
||||
<![CDATA[finedb]]></DatabaseName> |
||||
</Connection> |
||||
<Query> |
||||
<![CDATA[select * from PUBLIC.FINE_REPORT_INDEX_INFO order by REPORT_CODE, TABLE_CODE,INDEX_CODE;]]></Query> |
||||
<PageQuery> |
||||
<![CDATA[]]></PageQuery> |
||||
</TableData> |
||||
</TableDataMap> |
||||
<ReportWebAttr> |
||||
<ServerPrinter/> |
||||
<WebPageContent> |
||||
<ToolBars> |
||||
<ToolBarManager> |
||||
<Location> |
||||
<Embed position="1"/> |
||||
</Location> |
||||
<ToolBar> |
||||
<Widget class="com.fr.report.web.button.page.First"> |
||||
<WidgetAttr aspectRatioLocked="false" aspectRatioBackup="0.0" description=""> |
||||
<MobileBookMark useBookMark="false" bookMarkName="" frozen="false"/> |
||||
<PrivilegeControl/> |
||||
</WidgetAttr> |
||||
<Text> |
||||
<![CDATA[${i18n('Fine-Engine_Report_ReportServerP_First')}]]></Text> |
||||
<Hotkeys> |
||||
<![CDATA[]]></Hotkeys> |
||||
<IconName> |
||||
<![CDATA[first]]></IconName> |
||||
</Widget> |
||||
<Widget class="com.fr.report.web.button.page.Previous"> |
||||
<WidgetAttr aspectRatioLocked="false" aspectRatioBackup="0.0" description=""> |
||||
<MobileBookMark useBookMark="false" bookMarkName="" frozen="false"/> |
||||
<PrivilegeControl/> |
||||
</WidgetAttr> |
||||
<Text> |
||||
<![CDATA[${i18n('Fine-Engine_Report_ReportServerP_Previous')}]]></Text> |
||||
<Hotkeys> |
||||
<![CDATA[]]></Hotkeys> |
||||
<IconName> |
||||
<![CDATA[previous]]></IconName> |
||||
</Widget> |
||||
<Widget class="com.fr.report.web.button.page.PageNavi"> |
||||
<WidgetAttr aspectRatioLocked="false" aspectRatioBackup="0.0" description=""> |
||||
<MobileBookMark useBookMark="false" bookMarkName="" frozen="false"/> |
||||
<PrivilegeControl/> |
||||
</WidgetAttr> |
||||
</Widget> |
||||
<Widget class="com.fr.report.web.button.page.Next"> |
||||
<WidgetAttr aspectRatioLocked="false" aspectRatioBackup="0.0" description=""> |
||||
<MobileBookMark useBookMark="false" bookMarkName="" frozen="false"/> |
||||
<PrivilegeControl/> |
||||
</WidgetAttr> |
||||
<Text> |
||||
<![CDATA[${i18n('Fine-Engine_ReportServerP_Next')}]]></Text> |
||||
<Hotkeys> |
||||
<![CDATA[]]></Hotkeys> |
||||
<IconName> |
||||
<![CDATA[next]]></IconName> |
||||
</Widget> |
||||
<Widget class="com.fr.report.web.button.page.Last"> |
||||
<WidgetAttr aspectRatioLocked="false" aspectRatioBackup="0.0" description=""> |
||||
<MobileBookMark useBookMark="false" bookMarkName="" frozen="false"/> |
||||
<PrivilegeControl/> |
||||
</WidgetAttr> |
||||
<Text> |
||||
<![CDATA[${i18n('Fine-Engine_Report_ReportServerP_Last')}]]></Text> |
||||
<Hotkeys> |
||||
<![CDATA[]]></Hotkeys> |
||||
<IconName> |
||||
<![CDATA[last]]></IconName> |
||||
</Widget> |
||||
<Widget class="com.fr.report.web.button.NewPrint"> |
||||
<WidgetAttr aspectRatioLocked="false" aspectRatioBackup="0.0" description=""> |
||||
<MobileBookMark useBookMark="false" bookMarkName="" frozen="false"/> |
||||
<PrivilegeControl/> |
||||
</WidgetAttr> |
||||
<Text> |
||||
<![CDATA[${i18n('Fine-Engine_Print')}]]></Text> |
||||
<Hotkeys> |
||||
<![CDATA[]]></Hotkeys> |
||||
<IconName> |
||||
<![CDATA[print]]></IconName> |
||||
</Widget> |
||||
<Widget class="com.fr.report.web.button.Export"> |
||||
<WidgetAttr aspectRatioLocked="false" aspectRatioBackup="0.0" description=""> |
||||
<MobileBookMark useBookMark="false" bookMarkName="" frozen="false"/> |
||||
<PrivilegeControl/> |
||||
</WidgetAttr> |
||||
<Text> |
||||
<![CDATA[${i18n('Export')}]]></Text> |
||||
<Hotkeys> |
||||
<![CDATA[]]></Hotkeys> |
||||
<IconName> |
||||
<![CDATA[export]]></IconName> |
||||
<Buttons pdf="true" excelP="true" excelO="true" excelS="true" word="true" image="true" html="true"/> |
||||
</Widget> |
||||
<Widget class="com.fr.report.web.button.Email"> |
||||
<WidgetAttr aspectRatioLocked="false" aspectRatioBackup="0.0" description=""> |
||||
<MobileBookMark useBookMark="false" bookMarkName="" frozen="false"/> |
||||
<PrivilegeControl/> |
||||
</WidgetAttr> |
||||
<Text> |
||||
<![CDATA[${i18n('Fine-Engine_Report_Email')}]]></Text> |
||||
<Hotkeys> |
||||
<![CDATA[]]></Hotkeys> |
||||
<IconName> |
||||
<![CDATA[email]]></IconName> |
||||
<EmailButton customConsignee="true" consigneeByDepartment="false" consigneeByRole="false"/> |
||||
</Widget> |
||||
<Widget class="com.fr.plugin.isgd.toolbar.ColumnExtensionButton" pluginID="com.fr.plugin.isgd.v10" plugin-version="1.0"> |
||||
<WidgetAttr aspectRatioLocked="false" aspectRatioBackup="-1.0" description=""> |
||||
<MobileBookMark useBookMark="false" bookMarkName="" frozen="false"/> |
||||
<PrivilegeControl/> |
||||
</WidgetAttr> |
||||
<Text> |
||||
<![CDATA[表头行处理定制]]></Text> |
||||
<Hotkeys> |
||||
<![CDATA[]]></Hotkeys> |
||||
<IconName> |
||||
<![CDATA[isgd]]></IconName> |
||||
</Widget> |
||||
</ToolBar> |
||||
</ToolBarManager> |
||||
</ToolBars> |
||||
<WebPage isPage="false" showAsImage="false" autoScale="false" tdHeavy="false"/> |
||||
</WebPageContent> |
||||
<WebViewContent> |
||||
<ToolBars> |
||||
<ToolBarManager> |
||||
<Location> |
||||
<Embed position="1"/> |
||||
</Location> |
||||
<ToolBar> |
||||
<Widget class="com.fr.report.web.button.PageSetup"> |
||||
<WidgetAttr aspectRatioLocked="false" aspectRatioBackup="0.0" description=""> |
||||
<MobileBookMark useBookMark="false" bookMarkName="" frozen="false"/> |
||||
<PrivilegeControl/> |
||||
</WidgetAttr> |
||||
<Text> |
||||
<![CDATA[${i18n('Fine-Engine_Report_Page_Setup')}]]></Text> |
||||
<Hotkeys> |
||||
<![CDATA[]]></Hotkeys> |
||||
<IconName> |
||||
<![CDATA[pagesetup]]></IconName> |
||||
</Widget> |
||||
<Widget class="com.fr.report.web.button.PrintPreview"> |
||||
<WidgetAttr aspectRatioLocked="false" aspectRatioBackup="0.0" description=""> |
||||
<MobileBookMark useBookMark="false" bookMarkName="" frozen="false"/> |
||||
<PrivilegeControl/> |
||||
</WidgetAttr> |
||||
<Text> |
||||
<![CDATA[${i18n('Fine-Engine_Report_PrintP_Print_Preview')}]]></Text> |
||||
<Hotkeys> |
||||
<![CDATA[]]></Hotkeys> |
||||
<IconName> |
||||
<![CDATA[preview]]></IconName> |
||||
</Widget> |
||||
<Widget class="com.fr.report.web.button.NewPrint"> |
||||
<WidgetAttr aspectRatioLocked="false" aspectRatioBackup="0.0" description=""> |
||||
<MobileBookMark useBookMark="false" bookMarkName="" frozen="false"/> |
||||
<PrivilegeControl/> |
||||
</WidgetAttr> |
||||
<Text> |
||||
<![CDATA[${i18n('Fine-Engine_Print')}]]></Text> |
||||
<Hotkeys> |
||||
<![CDATA[]]></Hotkeys> |
||||
<IconName> |
||||
<![CDATA[print]]></IconName> |
||||
</Widget> |
||||
<Widget class="com.fr.report.web.button.Export"> |
||||
<WidgetAttr aspectRatioLocked="false" aspectRatioBackup="0.0" description=""> |
||||
<MobileBookMark useBookMark="false" bookMarkName="" frozen="false"/> |
||||
<PrivilegeControl/> |
||||
</WidgetAttr> |
||||
<Text> |
||||
<![CDATA[${i18n('Export')}]]></Text> |
||||
<Hotkeys> |
||||
<![CDATA[]]></Hotkeys> |
||||
<IconName> |
||||
<![CDATA[export]]></IconName> |
||||
<Buttons pdf="true" excelP="true" excelO="true" excelS="true" word="true" image="true" html="true"/> |
||||
</Widget> |
||||
<Widget class="com.fr.report.web.button.Email"> |
||||
<WidgetAttr aspectRatioLocked="false" aspectRatioBackup="0.0" description=""> |
||||
<MobileBookMark useBookMark="false" bookMarkName="" frozen="false"/> |
||||
<PrivilegeControl/> |
||||
</WidgetAttr> |
||||
<Text> |
||||
<![CDATA[${i18n('Fine-Engine_Report_Email')}]]></Text> |
||||
<Hotkeys> |
||||
<![CDATA[]]></Hotkeys> |
||||
<IconName> |
||||
<![CDATA[email]]></IconName> |
||||
<EmailButton customConsignee="true" consigneeByDepartment="false" consigneeByRole="false"/> |
||||
</Widget> |
||||
</ToolBar> |
||||
</ToolBarManager> |
||||
</ToolBars> |
||||
<SortFuncCheck check="true"/> |
||||
<ConditionFuncCheck check="true"/> |
||||
<ListFuncCheck check="true"/> |
||||
</WebViewContent> |
||||
</ReportWebAttr> |
||||
<ReportFitAttr fitStateInPC="1" fitFont="false"/> |
||||
<ElementCaseMobileAttr> |
||||
<ElementCaseMobileAttrProvider horizontal="1" vertical="1" zoom="true" refresh="false" isUseHTML="false" isMobileCanvasSize="false" appearRefresh="false" allowFullScreen="false" allowDoubleClickOrZoom="true" functionalWhenUnactivated="false"/> |
||||
</ElementCaseMobileAttr> |
||||
<Report class="com.fr.report.worksheet.WorkSheet" name="sheet1"> |
||||
<ReportPageAttr> |
||||
<HR/> |
||||
<FR/> |
||||
<HC/> |
||||
<FC/> |
||||
</ReportPageAttr> |
||||
<ColumnPrivilegeControl> |
||||
<PrivilegeControl/> |
||||
</ColumnPrivilegeControl> |
||||
<RowPrivilegeControl/> |
||||
<RowHeight defaultValue="723900"> |
||||
<![CDATA[792480,723900,723900,723900,723900,723900,723900,723900,723900,723900,723900]]></RowHeight> |
||||
<ColumnWidth defaultValue="2743200"> |
||||
<![CDATA[2743200,2743200,2743200,2407920,2743200,2743200,2743200,2743200,2743200,2743200,2743200]]></ColumnWidth> |
||||
<CellElementList> |
||||
<C c="0" r="0" s="0"> |
||||
<O> |
||||
<![CDATA[测试A]]></O> |
||||
<PrivilegeControl/> |
||||
<Expand/> |
||||
</C> |
||||
<C c="1" r="0" s="1"> |
||||
<O> |
||||
<![CDATA[测试B]]></O> |
||||
<PrivilegeControl/> |
||||
<CellGUIAttr showAsHTML="true"/> |
||||
<CellPageAttr/> |
||||
<Expand/> |
||||
</C> |
||||
<C c="2" r="0" s="1"> |
||||
<O> |
||||
<![CDATA[测试C]]></O> |
||||
<PrivilegeControl/> |
||||
<CellGUIAttr showAsHTML="true"/> |
||||
<CellPageAttr/> |
||||
<Expand/> |
||||
</C> |
||||
<C c="3" r="0" s="1"> |
||||
<O> |
||||
<![CDATA[测试D]]></O> |
||||
<PrivilegeControl/> |
||||
<CellGUIAttr showAsHTML="true"/> |
||||
<CellPageAttr/> |
||||
<Expand/> |
||||
</C> |
||||
<C c="4" r="0" s="2"> |
||||
<O> |
||||
<![CDATA[测试E]]></O> |
||||
<PrivilegeControl/> |
||||
<Expand/> |
||||
</C> |
||||
<C c="5" r="0" s="2"> |
||||
<O> |
||||
<![CDATA[测试F]]></O> |
||||
<PrivilegeControl/> |
||||
<Expand/> |
||||
</C> |
||||
<C c="6" r="0" s="2"> |
||||
<O> |
||||
<![CDATA[测试G]]></O> |
||||
<PrivilegeControl/> |
||||
<Expand/> |
||||
</C> |
||||
<C c="7" r="0" s="2"> |
||||
<O> |
||||
<![CDATA[测试H]]></O> |
||||
<PrivilegeControl/> |
||||
<Expand/> |
||||
</C> |
||||
<C c="8" r="0" s="2"> |
||||
<O> |
||||
<![CDATA[测试I]]></O> |
||||
<PrivilegeControl/> |
||||
<Expand/> |
||||
</C> |
||||
<C c="0" r="1"> |
||||
<O> |
||||
<![CDATA[A]]></O> |
||||
<PrivilegeControl/> |
||||
<Expand/> |
||||
</C> |
||||
<C c="1" r="1"> |
||||
<O> |
||||
<![CDATA[B]]></O> |
||||
<PrivilegeControl/> |
||||
<Expand/> |
||||
</C> |
||||
<C c="2" r="1" s="3"> |
||||
<O> |
||||
<![CDATA[C]]></O> |
||||
<PrivilegeControl/> |
||||
<Expand/> |
||||
</C> |
||||
<C c="3" r="1"> |
||||
<O> |
||||
<![CDATA[D]]></O> |
||||
<PrivilegeControl/> |
||||
<Expand/> |
||||
</C> |
||||
<C c="4" r="1"> |
||||
<O t="XMLable" class="com.fr.base.Formula"> |
||||
<Attributes> |
||||
<![CDATA[=D2]]></Attributes> |
||||
</O> |
||||
<PrivilegeControl/> |
||||
<Expand/> |
||||
</C> |
||||
<C c="5" r="1"> |
||||
<O> |
||||
<![CDATA[F]]></O> |
||||
<PrivilegeControl/> |
||||
<Expand/> |
||||
</C> |
||||
<C c="6" r="1"> |
||||
<O t="XMLable" class="com.fr.base.Formula"> |
||||
<Attributes> |
||||
<![CDATA[=F2]]></Attributes> |
||||
</O> |
||||
<PrivilegeControl/> |
||||
<Expand/> |
||||
</C> |
||||
</CellElementList> |
||||
<ReportAttrSet> |
||||
<ReportSettings headerHeight="0" footerHeight="0"> |
||||
<PaperSetting/> |
||||
<Background name="ColorBackground" color="-1"/> |
||||
</ReportSettings> |
||||
<Header reportPageType="0"> |
||||
<Background name="NullBackground"/> |
||||
<LeftList/> |
||||
<CenterList/> |
||||
<RightList/> |
||||
</Header> |
||||
<Footer reportPageType="0"> |
||||
<Background name="NullBackground"/> |
||||
<LeftList/> |
||||
<CenterList/> |
||||
<RightList/> |
||||
</Footer> |
||||
</ReportAttrSet> |
||||
<PrivilegeControl/> |
||||
</Report> |
||||
<ReportParameterAttr> |
||||
<Attributes showWindow="true" delayPlaying="true" windowPosition="1" align="0" useParamsTemplate="true" currentIndex="0"/> |
||||
<PWTitle> |
||||
<![CDATA[参数]]></PWTitle> |
||||
</ReportParameterAttr> |
||||
<StyleList> |
||||
<Style imageLayout="1"> |
||||
<FRFont name="SimSun" style="0" size="72"/> |
||||
<Background name="NullBackground"/> |
||||
<Border> |
||||
<Top style="5"/> |
||||
<Bottom style="5"/> |
||||
<Left style="5"/> |
||||
</Border> |
||||
</Style> |
||||
<Style imageLayout="1"> |
||||
<FRFont name="SimSun" style="0" size="72" foreground="-12632257"/> |
||||
<Background name="ColorBackground" color="-1"/> |
||||
<Border> |
||||
<Top style="1" color="-16777216"/> |
||||
<Bottom style="1" color="-16777216"/> |
||||
<Left style="1" color="-16777216"/> |
||||
<Right style="1" color="-16777216"/> |
||||
</Border> |
||||
</Style> |
||||
<Style imageLayout="1"> |
||||
<FRFont name="SimSun" style="0" size="72"/> |
||||
<Background name="NullBackground"/> |
||||
<Border> |
||||
<Top style="5"/> |
||||
<Bottom style="5"/> |
||||
</Border> |
||||
</Style> |
||||
<Style imageLayout="1"> |
||||
<FRFont name="SimSun" style="0" size="72"/> |
||||
<Background name="ColorBackground" color="-1"/> |
||||
<Border/> |
||||
</Style> |
||||
</StyleList> |
||||
<DesignerVersion DesignerVersion="KAA"/> |
||||
<PreviewType PreviewType="0"/> |
||||
<CustomColumnConfig class="com.fr.plugin.isgd.menu.ParamConfig" pluginID="com.fr.plugin.isgd.v10" plugin-version="1.0"> |
||||
<Attr headerRow="1,2"/> |
||||
</CustomColumnConfig> |
||||
<TemplateIdAttMark class="com.fr.base.iofile.attr.TemplateIdAttrMark"> |
||||
<TemplateIdAttMark TemplateId="0ca3278d-67f8-4dbd-a6c1-caa5f4b1ab7c"/> |
||||
</TemplateIdAttMark> |
||||
<TemplateCloudInfoAttrMark class="com.fr.plugin.cloud.analytics.attr.TemplateInfoAttrMark" pluginID="com.fr.plugin.cloud.analytics.v10" plugin-version="2.6.1.20220408"> |
||||
<TemplateCloudInfoAttrMark createTime="1650381971588"/> |
||||
</TemplateCloudInfoAttrMark> |
||||
</WorkBook> |
Binary file not shown.
@ -0,0 +1,33 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<plugin> |
||||
<id>com.fr.plugin.isgd.v10</id> |
||||
<name><![CDATA[表头行处理定制]]></name> |
||||
<active>yes</active> |
||||
<version>1.0</version> |
||||
<env-version>10.0</env-version> |
||||
<jartime>2018-07-31</jartime> |
||||
<vendor>fr.open</vendor> |
||||
<description><![CDATA[预览报表可以自动解析出表头信息,并实现保存数据库。]]></description> |
||||
<change-notes><![CDATA[ |
||||
预览报表可以自动解析出表头信息,并实现保存数据库。<br/> |
||||
]]></change-notes> |
||||
<main-package>com.fr.plugin.isgd</main-package> |
||||
<extra-core> |
||||
<IOFileAttrMark class="com.fr.plugin.isgd.menu.ParamConfig"/> |
||||
<LocaleFinder class="com.fr.plugin.isgd.LocaleFinder"/> |
||||
<DBAccessProvider class="com.fr.plugin.isgd.provider.ProcessDBAccess"/> |
||||
</extra-core> |
||||
<extra-report> |
||||
<ExtensionButtonProvider class="com.fr.plugin.isgd.toolbar.ColumnExtensionButton"/> |
||||
<JavaScriptFileHandler class="com.fr.plugin.isgd.web.JavaScriptFile"/> |
||||
<CssFileHandler class="com.fr.plugin.isgd.web.CssFile"/> |
||||
</extra-report> |
||||
<extra-decision> |
||||
<HttpHandlerProvider class="com.fr.plugin.isgd.service.ReportRowHandlerProvider"/> |
||||
</extra-decision> |
||||
<extra-designer> |
||||
<ToolbarItemProvider class="com.fr.plugin.isgd.toolbar.ColumnToolbarUI"/> |
||||
<MenuHandler class="com.fr.plugin.isgd.menu.ParamMenuHandler"/> |
||||
</extra-designer> |
||||
<function-recorder class="com.fr.plugin.isgd.web.JavaScriptFile"/> |
||||
</plugin> |
@ -0,0 +1,27 @@
|
||||
/* |
||||
* Copyright (C), 2015-2019 |
||||
* FileName: Constants |
||||
* Author: xx |
||||
* Date: 2019/9/4 16:09 |
||||
* Description: Constants |
||||
* History: |
||||
* <author> <time> <version> <desc> |
||||
*/ |
||||
package com.fr.plugin.isgd; |
||||
|
||||
import com.fanruan.api.i18n.I18nKit; |
||||
|
||||
/** |
||||
* <Function Description><br> |
||||
* <Constants> |
||||
* |
||||
* @author xx |
||||
* @since 1.0.0 |
||||
*/ |
||||
public class Constants { |
||||
public static final String PLUGIN_ID = "com.fr.plugin.isgd.v10"; |
||||
public static final String ICON_PATH = "/com/fr/plugin/isgd/images/column16.png"; |
||||
public static final String ACTION_NAME = I18nKit.getLocText("Plugin-isgd_Action_Name"); |
||||
public static final String PARAM_CUSTOM_COLUMN = "isgd"; |
||||
public static final String REPORT_NAME = "REPORTNAME"; |
||||
} |
@ -0,0 +1,31 @@
|
||||
/* |
||||
* Copyright (C), 2015-2019 |
||||
* FileName: LocaleFinder |
||||
* Author: xx |
||||
* Date: 2019/9/4 16:20 |
||||
* Description: LocaleFinder |
||||
* History: |
||||
* <author> <time> <version> <desc> |
||||
*/ |
||||
package com.fr.plugin.isgd; |
||||
|
||||
import com.fr.stable.fun.impl.AbstractLocaleFinder; |
||||
|
||||
/** |
||||
* <Function Description><br> |
||||
* <LocaleFinder> |
||||
* |
||||
* @author xx |
||||
* @since 1.0.0 |
||||
*/ |
||||
public class LocaleFinder extends AbstractLocaleFinder { |
||||
@Override |
||||
public String find() { |
||||
return "com/fr/plugin/isgd/locale/lang"; |
||||
} |
||||
|
||||
@Override |
||||
public int currentAPILevel() { |
||||
return CURRENT_LEVEL; |
||||
} |
||||
} |
@ -0,0 +1,172 @@
|
||||
/* |
||||
* Copyright (C), 2018-2020 |
||||
* Project: starter |
||||
* FileName: ParamColumn |
||||
* Author: xx |
||||
* Date: 2020/12/8 11:27 |
||||
*/ |
||||
package com.fr.plugin.isgd.bean; |
||||
|
||||
import com.fanruan.api.i18n.I18nKit; |
||||
import com.fanruan.api.util.GeneralKit; |
||||
import com.fanruan.api.util.StringKit; |
||||
import com.fr.base.Formula; |
||||
import com.fr.base.Style; |
||||
import com.fr.chart.chartattr.ChartCollection; |
||||
import com.fr.chart.chartattr.ChartPainter; |
||||
import com.fr.general.DateUtils; |
||||
import com.fr.general.ImageWithSuffix; |
||||
import com.fr.json.JSONArray; |
||||
import com.fr.main.impl.LinkWorkBookTemplate; |
||||
import com.fr.plugin.isgd.entity.ReportIndexInfoEntity; |
||||
import com.fr.plugin.isgd.menu.ParamConfig; |
||||
import com.fr.report.cell.ResultCellElement; |
||||
import com.fr.report.cell.cellattr.core.ResultSubReport; |
||||
import com.fr.report.cell.cellattr.core.RichText; |
||||
import com.fr.report.cell.cellattr.core.SubReport; |
||||
import com.fr.report.cell.cellattr.core.group.DSColumn; |
||||
import com.fr.report.cell.painter.BiasTextPainter; |
||||
import com.fr.report.report.ECReport; |
||||
import com.fr.stable.StableUtils; |
||||
import org.jetbrains.annotations.NotNull; |
||||
|
||||
import java.util.*; |
||||
|
||||
/** |
||||
* <Function Description><br> |
||||
* <自定义列参数bean> |
||||
* |
||||
* @author xx |
||||
* @since 1.0.0 |
||||
*/ |
||||
public class ParamColumn { |
||||
public static final String REGEX_HTML1 = "\\&[a-zA-Z]{1,10};"; |
||||
public static final String REGEX_HTML2 = "<[^>]*>"; |
||||
public static final String REGEX_HTML3 = "[(/>)<]"; |
||||
private String reportName; |
||||
private int[] headerRows; |
||||
private JSONArray columnArray; |
||||
|
||||
public ParamColumn() { |
||||
} |
||||
|
||||
/** |
||||
* 单元格结果值转为字符串 |
||||
* |
||||
* @param resultCellElement |
||||
* @return |
||||
*/ |
||||
@NotNull |
||||
private String getCellText(ResultCellElement resultCellElement) { |
||||
String cellText; |
||||
Object value = this.getCellValue(resultCellElement); |
||||
Style style = resultCellElement.getStyle(); |
||||
if (style != null) { |
||||
cellText = Style.valueToText(value, style.getFormat()); |
||||
} else { |
||||
cellText = GeneralKit.objectToString(value); |
||||
} |
||||
cellText = cellText.replaceAll(REGEX_HTML1, StringKit.EMPTY) |
||||
.replaceAll(REGEX_HTML2, StringKit.EMPTY).replaceAll(REGEX_HTML3, StringKit.EMPTY); |
||||
return cellText; |
||||
} |
||||
|
||||
/** |
||||
* 获得展示列值 |
||||
* |
||||
* @param ecReport |
||||
* @return |
||||
*/ |
||||
public List<ReportIndexInfoEntity> getReportIndexInfoEntities(ECReport ecReport, String reportCode, String currentUserName) { |
||||
List<ReportIndexInfoEntity> result = new ArrayList<>(); |
||||
ReportIndexInfoEntity entity; |
||||
ResultCellElement resultCellElement; |
||||
for (int headerRow : headerRows) { |
||||
Iterator iterator = ecReport.getRow(headerRow - 1); |
||||
String cellText; |
||||
while (iterator.hasNext()) { |
||||
resultCellElement = (ResultCellElement) iterator.next(); |
||||
cellText = getCellText(resultCellElement); |
||||
entity = new ReportIndexInfoEntity(); |
||||
entity.setId(UUID.randomUUID().toString()); |
||||
entity.setReportCode(reportCode); |
||||
entity.setTableCode(headerRow); |
||||
entity.setIndexCode(StableUtils.convertIntToABC(resultCellElement.getColumn() + 1)); |
||||
entity.setIndexName(cellText); |
||||
entity.setCreateDate(DateUtils.getDate2LStr(new Date())); |
||||
entity.setUpdateDate(DateUtils.getDate2LStr(new Date())); |
||||
entity.setOpUsername(currentUserName); |
||||
result.add(entity); |
||||
} |
||||
} |
||||
return result; |
||||
} |
||||
|
||||
/** |
||||
* 读取cell值 |
||||
* |
||||
* @param cell |
||||
* @return |
||||
*/ |
||||
private Object getCellValue(ResultCellElement cell) { |
||||
if (cell == null) { |
||||
return StringKit.EMPTY; |
||||
} |
||||
Object value = cell.getShowValue(); |
||||
if (value instanceof Formula) { |
||||
value = ((Formula) value).getPureContent(); |
||||
} else if (value instanceof BiasTextPainter) { |
||||
value = ((BiasTextPainter) value).getText(); |
||||
} else if (value instanceof DSColumn) { |
||||
value = ((DSColumn) value).getDSName(); |
||||
} else if (value instanceof SubReport) { |
||||
value = ((LinkWorkBookTemplate) ((SubReport) value).getPackee()).getTemplatePath(); |
||||
} else if (value instanceof ResultSubReport) { |
||||
value = I18nKit.getLocText("Plugin-isgd_SubReport_Column"); |
||||
} else if (value instanceof ChartCollection) { |
||||
value = ((ChartCollection) value).getChartName(0); |
||||
} else if (value instanceof ChartPainter) { |
||||
value = ((ChartPainter) value).getGlyphName(0); |
||||
} else if (value instanceof RichText) { |
||||
value = ((RichText) value).getContent(); |
||||
} else if (value instanceof ImageWithSuffix) { |
||||
value = I18nKit.getLocText("Plugin-isgd_Image_Column"); |
||||
} |
||||
return value == null ? StringKit.EMPTY : value; |
||||
} |
||||
|
||||
public String getReportName() { |
||||
return reportName; |
||||
} |
||||
|
||||
public void setReportName(String reportName) { |
||||
this.reportName = reportName; |
||||
} |
||||
|
||||
public JSONArray getColumnArray() { |
||||
return columnArray; |
||||
} |
||||
|
||||
public void setColumnArray(JSONArray columnArray) { |
||||
this.columnArray = columnArray; |
||||
} |
||||
|
||||
public int[] getHeaderRows() { |
||||
return headerRows; |
||||
} |
||||
|
||||
/** |
||||
* 设置表头列值所在行码 |
||||
* |
||||
* @param paramConfig |
||||
* @return |
||||
*/ |
||||
public void setHeaderRows(ParamConfig paramConfig) { |
||||
int[] headerRows = paramConfig != null ? paramConfig.getHeaderRowInts() : new int[]{0}; |
||||
this.setHeaderRows(headerRows); |
||||
} |
||||
|
||||
public void setHeaderRows(int[] headerRow) { |
||||
this.headerRows = headerRow; |
||||
} |
||||
} |
@ -0,0 +1,43 @@
|
||||
/* |
||||
* Copyright (C), 2018-2021 |
||||
* Project: starter |
||||
* FileName: ReportIndexInfoDao |
||||
* Author: xx |
||||
* Date: 2021/9/15 10:12 |
||||
*/ |
||||
package com.fr.plugin.isgd.dao; |
||||
|
||||
import com.fr.plugin.isgd.entity.ReportIndexInfoEntity; |
||||
import com.fr.stable.db.dao.BaseDAO; |
||||
import com.fr.stable.db.dao.DAOProvider; |
||||
import com.fr.stable.db.session.DAOSession; |
||||
|
||||
/** |
||||
* <Function Description><br> |
||||
* <ReportIndexInfoDao> |
||||
* |
||||
* @author xx |
||||
* @since 1.0.0 |
||||
*/ |
||||
public class ReportIndexInfoDao extends BaseDAO<ReportIndexInfoEntity> { |
||||
public final static DAOProvider<ReportIndexInfoEntity> DAO = new DAOProvider<ReportIndexInfoEntity>() { |
||||
@Override |
||||
public Class<ReportIndexInfoEntity> getEntityClass() { |
||||
return ReportIndexInfoEntity.class; |
||||
} |
||||
|
||||
@Override |
||||
public Class<? extends BaseDAO<ReportIndexInfoEntity>> getDAOClass() { |
||||
return ReportIndexInfoDao.class; |
||||
} |
||||
}; |
||||
|
||||
public ReportIndexInfoDao(DAOSession daoSession) { |
||||
super(daoSession); |
||||
} |
||||
|
||||
@Override |
||||
protected Class<ReportIndexInfoEntity> getEntityClass() { |
||||
return ReportIndexInfoEntity.class; |
||||
} |
||||
} |
@ -0,0 +1,107 @@
|
||||
/* |
||||
* Copyright (C), 2018-2021 |
||||
* Project: starter |
||||
* FileName: ReportIndexInfoEntity |
||||
* Author: xx |
||||
* Date: 2021/9/15 10:08 |
||||
*/ |
||||
package com.fr.plugin.isgd.entity; |
||||
|
||||
import com.fr.stable.db.entity.BaseEntity; |
||||
import com.fr.third.javax.persistence.Column; |
||||
import com.fr.third.javax.persistence.Entity; |
||||
import com.fr.third.javax.persistence.Table; |
||||
|
||||
/** |
||||
* <Function Description><br> |
||||
* <fine_report_index_info> |
||||
* |
||||
* @author xx |
||||
* @since 1.0.0 |
||||
*/ |
||||
@Entity |
||||
@Table(name = "fine_report_index_info") |
||||
public class ReportIndexInfoEntity extends BaseEntity { |
||||
public static final String REPORT_CODE = "REPORT_CODE"; |
||||
public static final String TABLE_CODE = "TABLE_CODE"; |
||||
public static final String INDEX_CODE = "INDEX_CODE"; |
||||
public static final String INDEX_NAME = "INDEX_NAME"; |
||||
public static final String CREATE_DATE = "CREATE_DATE"; |
||||
public static final String UPDATE_DATE = "UPDATE_DATE"; |
||||
public static final String OP_USERNAME = "OP_USERNAME"; |
||||
private static final long serialVersionUID = -7911976863964679579L; |
||||
|
||||
@Column(name = REPORT_CODE) |
||||
private String reportCode; |
||||
@Column(name = TABLE_CODE) |
||||
private int tableCode; |
||||
@Column(name = INDEX_CODE) |
||||
private String indexCode; |
||||
@Column(name = INDEX_NAME) |
||||
private String indexName; |
||||
@Column(name = CREATE_DATE) |
||||
private String createDate; |
||||
@Column(name = UPDATE_DATE) |
||||
private String updateDate; |
||||
@Column(name = OP_USERNAME) |
||||
private String opUsername; |
||||
|
||||
public ReportIndexInfoEntity() { |
||||
} |
||||
|
||||
public String getReportCode() { |
||||
return reportCode; |
||||
} |
||||
|
||||
public void setReportCode(String reportCode) { |
||||
this.reportCode = reportCode; |
||||
} |
||||
|
||||
public int getTableCode() { |
||||
return tableCode; |
||||
} |
||||
|
||||
public void setTableCode(int tableCode) { |
||||
this.tableCode = tableCode; |
||||
} |
||||
|
||||
public String getIndexCode() { |
||||
return indexCode; |
||||
} |
||||
|
||||
public void setIndexCode(String indexCode) { |
||||
this.indexCode = indexCode; |
||||
} |
||||
|
||||
public String getIndexName() { |
||||
return indexName; |
||||
} |
||||
|
||||
public void setIndexName(String indexName) { |
||||
this.indexName = indexName; |
||||
} |
||||
|
||||
public String getCreateDate() { |
||||
return createDate; |
||||
} |
||||
|
||||
public void setCreateDate(String createDate) { |
||||
this.createDate = createDate; |
||||
} |
||||
|
||||
public String getUpdateDate() { |
||||
return updateDate; |
||||
} |
||||
|
||||
public void setUpdateDate(String updateDate) { |
||||
this.updateDate = updateDate; |
||||
} |
||||
|
||||
public String getOpUsername() { |
||||
return opUsername; |
||||
} |
||||
|
||||
public void setOpUsername(String opUsername) { |
||||
this.opUsername = opUsername; |
||||
} |
||||
} |
@ -0,0 +1,60 @@
|
||||
/* |
||||
* Copyright (C), 2015-2019 |
||||
* FileName: ParamAction |
||||
* Author: xx |
||||
* Date: 2019/09/09 |
||||
* Description: ParamAction |
||||
* History: |
||||
* <author> <time> <version> <desc> |
||||
* 作者姓名 修改时间 版本号 描述 |
||||
*/ |
||||
package com.fr.plugin.isgd.menu; |
||||
|
||||
import com.fanruan.api.design.DesignKit; |
||||
import com.fanruan.api.design.ui.container.BasicDialog; |
||||
import com.fanruan.api.util.IOKit; |
||||
import com.fr.design.actions.JWorkBookAction; |
||||
import com.fr.design.dialog.DialogActionAdapter; |
||||
import com.fr.design.mainframe.JWorkBook; |
||||
import com.fr.main.impl.WorkBook; |
||||
|
||||
import java.awt.event.ActionEvent; |
||||
|
||||
import static com.fr.plugin.isgd.Constants.ACTION_NAME; |
||||
import static com.fr.plugin.isgd.Constants.ICON_PATH; |
||||
|
||||
/** |
||||
* <功能简述><br> |
||||
* <ParamAction> |
||||
* |
||||
* @author xx |
||||
* @create 2019/09/09 |
||||
* @since 1.0.0 |
||||
*/ |
||||
public class ParamAction extends JWorkBookAction { |
||||
public ParamAction(JWorkBook jWorkBook) { |
||||
super(jWorkBook); |
||||
this.setSmallIcon(IOKit.readIcon(ICON_PATH)); |
||||
setName(ACTION_NAME); |
||||
} |
||||
|
||||
@Override |
||||
public void actionPerformed(ActionEvent actionEvent) { |
||||
final JWorkBook jwb = getEditingComponent(); |
||||
if (jwb == null) { |
||||
return; |
||||
} |
||||
final WorkBook wb = jwb.getTarget(); |
||||
final ParamConfigPane configPane = new ParamConfigPane(); |
||||
configPane.populate(wb); |
||||
BasicDialog dialog = configPane.showWindow(DesignKit.getDesignerFrame(), new DialogActionAdapter() { |
||||
@Override |
||||
public void doOk() { |
||||
ParamConfig config = configPane.update(); |
||||
wb.addAttrMark(config); |
||||
jwb.fireTargetModified(); |
||||
} |
||||
}); |
||||
dialog.setVisible(true); |
||||
} |
||||
} |
@ -0,0 +1,89 @@
|
||||
/* |
||||
* Copyright (C), 2015-2019 |
||||
* FileName: ParamConfig |
||||
* Author: xx |
||||
* Date: 2019/09/09 |
||||
* Description: ParamConfig |
||||
* History: |
||||
* <author> <time> <version> <desc> |
||||
* 作者姓名 修改时间 版本号 描述 |
||||
*/ |
||||
package com.fr.plugin.isgd.menu; |
||||
|
||||
import com.fanruan.api.err.JSONException; |
||||
import com.fanruan.api.json.JSONKit; |
||||
import com.fr.json.JSONObject; |
||||
import com.fr.stable.fun.impl.AbstractIOFileAttrMark; |
||||
import com.fr.stable.xml.XMLPrintWriter; |
||||
import com.fr.stable.xml.XMLableReader; |
||||
|
||||
/** |
||||
* <功能简述><br> |
||||
* <ParamConfig> |
||||
* |
||||
* @author xx |
||||
* @create 2019/09/09 |
||||
* @since 1.0.0 |
||||
*/ |
||||
public class ParamConfig extends AbstractIOFileAttrMark { |
||||
public static final String XML_TAG = "CustomColumnConfig"; |
||||
|
||||
private String headerRow; |
||||
|
||||
public ParamConfig() { |
||||
|
||||
} |
||||
|
||||
@Override |
||||
public void readXML(XMLableReader xmLableReader) { |
||||
if (xmLableReader.isChildNode()) { |
||||
String tagName = xmLableReader.getTagName(); |
||||
if ("Attr".equals(tagName)) { |
||||
setHeaderRow(xmLableReader.getAttrAsString("headerRow", "1")); |
||||
} |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
public void writeXML(XMLPrintWriter xmlPrintWriter) { |
||||
xmlPrintWriter.startTAG("Attr"); |
||||
xmlPrintWriter.attr("headerRow", headerRow); |
||||
xmlPrintWriter.end(); |
||||
} |
||||
|
||||
@Override |
||||
public ParamConfig clone() { |
||||
ParamConfig cloned = (ParamConfig) super.clone(); |
||||
cloned.headerRow = headerRow; |
||||
return cloned; |
||||
} |
||||
|
||||
@Override |
||||
public JSONObject createJSONConfig() throws JSONException { |
||||
JSONObject paramJSON = JSONKit.create(); |
||||
paramJSON.put("headerRow", headerRow); |
||||
return paramJSON; |
||||
} |
||||
|
||||
@Override |
||||
public String xmlTag() { |
||||
return XML_TAG; |
||||
} |
||||
|
||||
public String getHeaderRow() { |
||||
return headerRow; |
||||
} |
||||
|
||||
public void setHeaderRow(String headerRow) { |
||||
this.headerRow = headerRow; |
||||
} |
||||
|
||||
public int[] getHeaderRowInts() { |
||||
String[] headerArray = this.headerRow.split(","); |
||||
int[] headers = new int[headerArray.length]; |
||||
for (int i = 0; i < headerArray.length; i++) { |
||||
headers[i] = Integer.parseInt(headerArray[i]); |
||||
} |
||||
return headers; |
||||
} |
||||
} |
@ -0,0 +1,79 @@
|
||||
/* |
||||
* Copyright (C), 2015-2019 |
||||
* FileName: ParamConfigPane |
||||
* Author: xx |
||||
* Date: 2019/09/09 |
||||
* Description: ParamConfigPane |
||||
* History: |
||||
* <author> <time> <version> <desc> |
||||
* 作者姓名 修改时间 版本号 描述 |
||||
*/ |
||||
package com.fr.plugin.isgd.menu; |
||||
|
||||
import com.fanruan.api.design.ui.component.UILabel; |
||||
import com.fanruan.api.design.ui.component.UITextField; |
||||
import com.fanruan.api.design.ui.container.BasicPane; |
||||
import com.fanruan.api.design.ui.layout.TableLayoutKit; |
||||
import com.fanruan.api.i18n.I18nKit; |
||||
import com.fr.main.impl.WorkBook; |
||||
|
||||
import javax.swing.*; |
||||
import java.awt.*; |
||||
|
||||
import static com.fr.plugin.isgd.Constants.ACTION_NAME; |
||||
|
||||
/** |
||||
* <功能简述><br> |
||||
* <ParamConfigPane> |
||||
* |
||||
* @author xx |
||||
* @create 2019/09/09 |
||||
* @since 1.0.0 |
||||
*/ |
||||
public class ParamConfigPane extends BasicPane { |
||||
|
||||
private UITextField headerTextField; |
||||
|
||||
public ParamConfigPane() { |
||||
UILabel headerLabel = new UILabel(I18nKit.getLocText("Plugin-isgd_Header_Row")); |
||||
headerTextField = new UITextField(); |
||||
|
||||
double p = TableLayoutKit.PREFERRED; |
||||
double f = TableLayoutKit.FILL; |
||||
double[] columnSize = new double[]{p, f}; |
||||
double[] rowSize = new double[]{p, p, p}; |
||||
|
||||
Component[][] components = new Component[][]{ |
||||
new Component[]{headerLabel, headerTextField}, |
||||
}; |
||||
JPanel centerPane = TableLayoutKit.createTableLayoutPane(components, rowSize, columnSize); |
||||
JPanel pane = new JPanel(); |
||||
pane.setLayout(new BorderLayout()); |
||||
pane.add(centerPane, BorderLayout.NORTH); |
||||
|
||||
setLayout(new BorderLayout()); |
||||
add(pane, BorderLayout.CENTER); |
||||
} |
||||
|
||||
public void populate(WorkBook workBook) { |
||||
if (workBook == null) { |
||||
return; |
||||
} |
||||
ParamConfig paramConfig = workBook.getAttrMark(ParamConfig.XML_TAG); |
||||
if (paramConfig != null) { |
||||
headerTextField.setText(paramConfig.getHeaderRow()); |
||||
} |
||||
} |
||||
|
||||
public ParamConfig update() { |
||||
ParamConfig paramConfig = new ParamConfig(); |
||||
paramConfig.setHeaderRow(headerTextField.getText()); |
||||
return paramConfig; |
||||
} |
||||
|
||||
@Override |
||||
protected String title4PopupWindow() { |
||||
return ACTION_NAME; |
||||
} |
||||
|
||||
} |
@ -0,0 +1,55 @@
|
||||
/* |
||||
* Copyright (C), 2015-2019 |
||||
* FileName: ParamMenuHandler |
||||
* Author: xx |
||||
* Date: 2019/09/09 |
||||
* Description: ParamMenuHandler |
||||
* History: |
||||
* <author> <time> <version> <desc> |
||||
* 作者姓名 修改时间 版本号 描述 |
||||
*/ |
||||
package com.fr.plugin.isgd.menu; |
||||
|
||||
import com.fr.design.fun.MenuHandler; |
||||
import com.fr.design.fun.impl.AbstractMenuHandler; |
||||
import com.fr.design.mainframe.JWorkBook; |
||||
import com.fr.design.mainframe.toolbar.ToolBarMenuDockPlus; |
||||
import com.fr.design.menu.ShortCut; |
||||
|
||||
/** |
||||
* <功能简述><br> |
||||
* <ParamMenuHandler> |
||||
* |
||||
* @author xx |
||||
* @create 2019/09/09 |
||||
* @since 1.0.0 |
||||
*/ |
||||
public class ParamMenuHandler extends AbstractMenuHandler { |
||||
@Override |
||||
public ShortCut shortcut(ToolBarMenuDockPlus toolBarMenuDockPlus) { |
||||
if (toolBarMenuDockPlus instanceof JWorkBook) { |
||||
return new ParamAction((JWorkBook) toolBarMenuDockPlus); |
||||
} |
||||
return null; |
||||
} |
||||
|
||||
@Override |
||||
public int insertPosition(int i) { |
||||
return LAST; |
||||
} |
||||
|
||||
@Override |
||||
public boolean insertSeparatorBefore() { |
||||
return false; |
||||
} |
||||
|
||||
@Override |
||||
public boolean insertSeparatorAfter() { |
||||
return false; |
||||
} |
||||
|
||||
@Override |
||||
public String category() { |
||||
return MenuHandler.TEMPLATE; |
||||
} |
||||
} |
@ -0,0 +1,82 @@
|
||||
/* |
||||
* Copyright (C), 2018-2020 |
||||
* Project: starter |
||||
* FileName: ProcessDBAccess |
||||
* Author: xx |
||||
* Date: 2020/6/4 11:48 |
||||
*/ |
||||
package com.fr.plugin.isgd.provider; |
||||
|
||||
import com.fanruan.api.log.LogKit; |
||||
import com.fr.plugin.db.AbstractDBAccessProvider; |
||||
import com.fr.plugin.isgd.dao.ReportIndexInfoDao; |
||||
import com.fr.plugin.isgd.entity.ReportIndexInfoEntity; |
||||
import com.fr.stable.db.accessor.DBAccessor; |
||||
import com.fr.stable.db.action.DBAction; |
||||
import com.fr.stable.db.dao.DAOContext; |
||||
import com.fr.stable.db.dao.DAOProvider; |
||||
|
||||
import java.util.List; |
||||
|
||||
/** |
||||
* 〈Function Description〉<br> |
||||
* 〈ProcessDBAccess〉 |
||||
* |
||||
* @author xx |
||||
* @since 1.0.0 |
||||
*/ |
||||
public class ProcessDBAccess extends AbstractDBAccessProvider { |
||||
private static DBAccessor accessor; |
||||
|
||||
public ProcessDBAccess() { |
||||
} |
||||
|
||||
public static DBAccessor getAccessor() { |
||||
return accessor; |
||||
} |
||||
|
||||
public static void saveAll(List<ReportIndexInfoEntity> entities) { |
||||
try { |
||||
ProcessDBAccess.getAccessor().runDMLAction(new DBAction<Boolean>() { |
||||
@Override |
||||
public Boolean run(DAOContext daoContext) throws Exception { |
||||
for (ReportIndexInfoEntity entity : entities) { |
||||
(daoContext.getDAO(ReportIndexInfoDao.class)).addOrUpdate(entity); |
||||
} |
||||
return true; |
||||
} |
||||
}); |
||||
} catch (Exception e) { |
||||
LogKit.error(e.getMessage(), e); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* @param entity |
||||
*/ |
||||
public static void save(final ReportIndexInfoEntity entity) { |
||||
try { |
||||
getAccessor().runDMLAction(new DBAction<Boolean>() { |
||||
@Override |
||||
public Boolean run(DAOContext context) throws Exception { |
||||
(context.getDAO(ReportIndexInfoDao.class)).addOrUpdate(entity); |
||||
return true; |
||||
} |
||||
}); |
||||
} catch (Exception e) { |
||||
LogKit.error(e.getMessage(), e); |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
public DAOProvider<?>[] registerDAO() { |
||||
return new DAOProvider[]{ |
||||
ReportIndexInfoDao.DAO |
||||
}; |
||||
} |
||||
|
||||
@Override |
||||
public void onDBAvailable(DBAccessor dbAccessor) { |
||||
accessor = dbAccessor; |
||||
} |
||||
} |
@ -0,0 +1,113 @@
|
||||
/* |
||||
* Copyright (C), 2018-2020 |
||||
* Project: starter |
||||
* FileName: ReportRowHandler |
||||
* Author: xx |
||||
* Date: 2020/11/26 21:35 |
||||
*/ |
||||
package com.fr.plugin.isgd.service; |
||||
|
||||
import com.fanruan.api.i18n.I18nKit; |
||||
import com.fanruan.api.log.LogKit; |
||||
import com.fanruan.api.util.StringKit; |
||||
import com.fr.decision.fun.impl.BaseHttpHandler; |
||||
import com.fr.json.JSONException; |
||||
import com.fr.json.JSONObject; |
||||
import com.fr.main.workbook.ResultWorkBook; |
||||
import com.fr.plugin.context.PluginContexts; |
||||
import com.fr.plugin.isgd.bean.ParamColumn; |
||||
import com.fr.plugin.isgd.entity.ReportIndexInfoEntity; |
||||
import com.fr.plugin.isgd.menu.ParamConfig; |
||||
import com.fr.plugin.isgd.provider.ProcessDBAccess; |
||||
import com.fr.report.report.ECReport; |
||||
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.List; |
||||
import java.util.Map; |
||||
|
||||
/** |
||||
* <Function Description><br> |
||||
* <ReportRowHandler> |
||||
* |
||||
* @author xx |
||||
* @since 1.0.0 |
||||
*/ |
||||
public class ReportRowHandler extends BaseHttpHandler { |
||||
|
||||
public ReportRowHandler() { |
||||
} |
||||
|
||||
@Override |
||||
public RequestMethod getMethod() { |
||||
return RequestMethod.GET; |
||||
} |
||||
|
||||
@Override |
||||
public String getPath() { |
||||
return "/isgd"; |
||||
} |
||||
|
||||
@Override |
||||
public boolean isPublic() { |
||||
return true; |
||||
} |
||||
|
||||
@Override |
||||
public void handle(HttpServletRequest request, HttpServletResponse response) throws Exception { |
||||
if (PluginContexts.currentContext() == null || !PluginContexts.currentContext().isAvailable()) { |
||||
LogKit.error(I18nKit.getLocText("Plugin-isgd_Licence_Expired")); |
||||
WebUtils.flushSuccessMessageAutoClose(request, response, createNoChangedResponseJSONObject()); |
||||
return; |
||||
} |
||||
String sessionID = WebUtils.getHTTPRequestParameter(request, "sessionID"); |
||||
ReportSessionIDInfor sessionIDInfo = SessionPoolManager.getSessionIDInfor(sessionID, ReportSessionIDInfor.class); |
||||
ResultWorkBook resultWorkBook = sessionIDInfo.getExistWorkBook2Show(); |
||||
ParamConfig paramConfig = resultWorkBook.getAttrMark(ParamConfig.XML_TAG); |
||||
if (paramConfig == null) { |
||||
WebUtils.flushSuccessMessageAutoClose(request, response, createNoChangedResponseJSONObject()); |
||||
return; |
||||
} |
||||
ParamColumn paramColumn = new ParamColumn(); |
||||
paramColumn.setHeaderRows(paramConfig); |
||||
ECReport ecReport = resultWorkBook.getElementCaseReport(0); |
||||
List<ReportIndexInfoEntity> reportIndexInfoEntities = paramColumn.getReportIndexInfoEntities(ecReport, sessionIDInfo.getRelativePath(), getUsername(resultWorkBook)); |
||||
ProcessDBAccess.saveAll(reportIndexInfoEntities); |
||||
WebUtils.flushSuccessMessageAutoClose(request, response, createSuccessResponseJSONObject()); |
||||
} |
||||
|
||||
/** |
||||
* 取参数FR_USERNAME或者FINE_USERNAME |
||||
* |
||||
* @param resultWorkBook |
||||
* @return |
||||
*/ |
||||
private String getUsername(ResultWorkBook resultWorkBook) { |
||||
Map<String, Object> parameters = resultWorkBook.getExecuteParameters(); |
||||
if (parameters.containsKey("FR_USERNAME")) { |
||||
return String.valueOf(parameters.get("FR_USERNAME")); |
||||
} |
||||
if (parameters.containsKey("FINE_USERNAME")) { |
||||
return String.valueOf(parameters.get("FINE_USERNAME")); |
||||
} |
||||
return StringKit.EMPTY; |
||||
} |
||||
|
||||
private JSONObject createSuccessResponseJSONObject() throws JSONException { |
||||
JSONObject successJSON = JSONObject.create(); |
||||
successJSON.put("errorCode", 0); |
||||
successJSON.put("status", "success"); |
||||
return successJSON; |
||||
} |
||||
|
||||
private JSONObject createNoChangedResponseJSONObject() throws JSONException { |
||||
JSONObject successJSON = JSONObject.create(); |
||||
successJSON.put("errorCode", 1); |
||||
successJSON.put("status", "noChanged"); |
||||
return successJSON; |
||||
} |
||||
} |
@ -0,0 +1,34 @@
|
||||
/* |
||||
* Copyright (C), 2018-2020 |
||||
* Project: starter |
||||
* FileName: ReportRowHandlerProvider |
||||
* Author: xx |
||||
* Date: 2020/11/26 21:34 |
||||
*/ |
||||
package com.fr.plugin.isgd.service; |
||||
|
||||
import com.fr.decision.fun.impl.AbstractHttpHandlerProvider; |
||||
import com.fr.decision.fun.impl.BaseHttpHandler; |
||||
import com.fr.stable.fun.Authorize; |
||||
|
||||
import static com.fr.plugin.isgd.Constants.PLUGIN_ID; |
||||
|
||||
/** |
||||
* <Function Description><br> |
||||
* <ReportRowHandlerProvider> |
||||
* |
||||
* @author xx |
||||
* @since 1.0.0 |
||||
*/ |
||||
@Authorize(callSignKey = PLUGIN_ID) |
||||
public class ReportRowHandlerProvider extends AbstractHttpHandlerProvider { |
||||
public ReportRowHandlerProvider() { |
||||
} |
||||
|
||||
@Override |
||||
public BaseHttpHandler[] registerHandlers() { |
||||
return new BaseHttpHandler[]{ |
||||
new ReportRowHandler() |
||||
}; |
||||
} |
||||
} |
@ -0,0 +1,77 @@
|
||||
/* |
||||
* Copyright (C), 2015-2019 |
||||
* FileName: ColumnExtensionButton |
||||
* Author: xx |
||||
* Date: 2019/9/4 17:16 |
||||
* Description: ColumnExtensionButton |
||||
* History: |
||||
* <author> <time> <version> <desc> |
||||
*/ |
||||
package com.fr.plugin.isgd.toolbar; |
||||
|
||||
import com.fanruan.api.i18n.I18nKit; |
||||
import com.fr.form.ui.Widget; |
||||
import com.fr.js.JavaScriptImpl; |
||||
import com.fr.plugin.isgd.utils.FuncUtils; |
||||
import com.fr.report.fun.impl.AbstractExtensionButton; |
||||
import com.fr.stable.web.Repository; |
||||
|
||||
/** |
||||
* <Function Description><br> |
||||
* <ColumnExtensionButton> |
||||
* |
||||
* @author xx |
||||
* @since 1.0.0 |
||||
*/ |
||||
public class ColumnExtensionButton extends AbstractExtensionButton { |
||||
public static final String PARAM_COLUMN = "column"; |
||||
public static final String PARAM_TEXT = "text"; |
||||
public static final String PARAM_SELECTED = "selected"; |
||||
|
||||
public ColumnExtensionButton() { |
||||
super(I18nKit.getLocText("Plugin-isgd_Button"), FuncUtils.loadIcon()); |
||||
} |
||||
|
||||
public ColumnExtensionButton(String text) { |
||||
super(text); |
||||
} |
||||
|
||||
public ColumnExtensionButton(String text, String iconName) { |
||||
super(text, iconName); |
||||
} |
||||
|
||||
@Override |
||||
public Class<? extends Widget> classForDirectoryButton() { |
||||
return this.getClass(); |
||||
} |
||||
|
||||
@Override |
||||
public String getParentDirectory() { |
||||
return null; |
||||
} |
||||
|
||||
@Override |
||||
public String getType() { |
||||
return null; |
||||
} |
||||
|
||||
@Override |
||||
public String getRelatedCheckBoxTitle() { |
||||
return null; |
||||
} |
||||
|
||||
@Override |
||||
public boolean isSelected() { |
||||
return false; |
||||
} |
||||
|
||||
@Override |
||||
public void setSelected(boolean b) { |
||||
|
||||
} |
||||
|
||||
@Override |
||||
protected JavaScriptImpl clickAction(Repository repository) { |
||||
return new JavaScriptImpl("FR.saveReportRows()"); |
||||
} |
||||
} |
@ -0,0 +1,40 @@
|
||||
/* |
||||
* Copyright (C), 2015-2019 |
||||
* FileName: JSONExportToolbarUI |
||||
* Author: xx |
||||
* Date: 2019/9/4 16:15 |
||||
* Description: JSONExportToolbarUI |
||||
* History: |
||||
* <author> <time> <version> <desc> |
||||
*/ |
||||
package com.fr.plugin.isgd.toolbar; |
||||
|
||||
import com.fanruan.api.i18n.I18nKit; |
||||
import com.fr.design.fun.impl.AbstractToolbarItem; |
||||
import com.fr.form.ui.Widget; |
||||
|
||||
import static com.fr.plugin.isgd.Constants.ICON_PATH; |
||||
|
||||
/** |
||||
* <Function Description><br> |
||||
* <JSONExportToolbarUI> |
||||
* |
||||
* @author xx |
||||
* @since 1.0.0 |
||||
*/ |
||||
public class ColumnToolbarUI extends AbstractToolbarItem { |
||||
@Override |
||||
public Class<? extends Widget> classForWidget() { |
||||
return ColumnExtensionButton.class; |
||||
} |
||||
|
||||
@Override |
||||
public String iconPathForWidget() { |
||||
return ICON_PATH; |
||||
} |
||||
|
||||
@Override |
||||
public String nameForWidget() { |
||||
return I18nKit.getLocText("Plugin-isgd_Export"); |
||||
} |
||||
} |
@ -0,0 +1,34 @@
|
||||
/* |
||||
* Copyright (C), 2015-2019 |
||||
* FileName: FuncUtils |
||||
* Author: xx |
||||
* Date: 2019/9/4 15:05 |
||||
* Description: FuncUtils |
||||
* History: |
||||
* <author> <time> <version> <desc> |
||||
*/ |
||||
package com.fr.plugin.isgd.utils; |
||||
|
||||
import com.fanruan.api.util.IOKit; |
||||
import com.fr.base.Icon; |
||||
import com.fr.base.IconManager; |
||||
|
||||
import static com.fr.plugin.isgd.Constants.ICON_PATH; |
||||
|
||||
/** |
||||
* <Function Description><br> |
||||
* <FuncUtils> |
||||
* |
||||
* @author xx |
||||
* @since 1.0.0 |
||||
*/ |
||||
public class FuncUtils { |
||||
public static String loadIcon() { |
||||
Icon icon = new Icon("isgd", IOKit.readImage(ICON_PATH)); |
||||
IconManager.getIconManager().addIcon(icon, true); |
||||
return icon.getName(); |
||||
} |
||||
|
||||
public static void main(String[] args) { |
||||
} |
||||
} |
@ -0,0 +1,12 @@
|
||||
package com.fr.plugin.isgd.web; |
||||
|
||||
import com.fr.stable.fun.impl.AbstractCssFileHandler; |
||||
|
||||
public class CssFile extends AbstractCssFileHandler { |
||||
@Override |
||||
public String[] pathsForFiles() { |
||||
return new String[]{ |
||||
"/com/fr/plugin/isgd/web/isgd.css" |
||||
}; |
||||
} |
||||
} |
@ -0,0 +1,45 @@
|
||||
/* |
||||
* Copyright (C), 2015-2019 |
||||
* FileName: JavaScriptFile |
||||
* Author: xx |
||||
* Date: 2019/9/4 16:33 |
||||
* Description: JavaScriptFile |
||||
* History: |
||||
* <author> <time> <version> <desc> |
||||
*/ |
||||
package com.fr.plugin.isgd.web; |
||||
|
||||
import com.fanruan.api.i18n.I18nKit; |
||||
import com.fanruan.api.log.LogKit; |
||||
import com.fr.intelli.record.Focus; |
||||
import com.fr.intelli.record.Original; |
||||
import com.fr.plugin.context.PluginContexts; |
||||
import com.fr.record.analyzer.EnableMetrics; |
||||
import com.fr.stable.fun.Authorize; |
||||
import com.fr.stable.fun.impl.AbstractJavaScriptFileHandler; |
||||
|
||||
import static com.fr.plugin.isgd.Constants.PLUGIN_ID; |
||||
|
||||
/** |
||||
* <Function Description><br> |
||||
* <JavaScriptFile> |
||||
* |
||||
* @author xx |
||||
* @since 1.0.0 |
||||
*/ |
||||
@EnableMetrics |
||||
@Authorize(callSignKey = PLUGIN_ID) |
||||
public class JavaScriptFile extends AbstractJavaScriptFileHandler { |
||||
@Override |
||||
@Focus(id = PLUGIN_ID, text = "Plugin-isgd", source = Original.PLUGIN) |
||||
public String[] pathsForFiles() { |
||||
if (PluginContexts.currentContext().isAvailable()) { |
||||
return new String[]{ |
||||
"/com/fr/plugin/isgd/web/isgd.js" |
||||
}; |
||||
} else { |
||||
LogKit.error(I18nKit.getLocText("Plugin-isgd_Licence_Expired")); |
||||
return new String[]{}; |
||||
} |
||||
} |
||||
} |
After Width: | Height: | Size: 208 B |
@ -0,0 +1,9 @@
|
||||
Plugin-isgd=Report Row Custom |
||||
Plugin-isgd_Export=Report Row Custom |
||||
Plugin-isgd_Button=Report Row Hide |
||||
Plugin-isgd_Action_Name=Custom Report Row Panel Properties |
||||
Plugin-isgd_Header_Row=Header Row Number: |
||||
Plugin-isgd_Column=Column |
||||
Plugin-isgd_Image_Column=Image Column |
||||
Plugin-isgd_SubReport_Column=SubReport Column |
||||
Plugin-isgd_Licence_Expired=Column Custom Licence Expired |
@ -0,0 +1,9 @@
|
||||
Plugin-isgd=\u8868\u5934\u884C\u5904\u7406\u5B9A\u5236 |
||||
Plugin-isgd_Export=\u8868\u5934\u884C\u5904\u7406\u5B9A\u5236 |
||||
Plugin-isgd_Button=\u8868\u5934\u884C\u5904\u7406 |
||||
Plugin-isgd_Action_Name=\u8868\u5934\u884C\u5C5E\u6027 |
||||
Plugin-isgd_Header_Row=\u8868\u5934\u884C\u53F7\uFF1A |
||||
Plugin-isgd_Column=\u5217 |
||||
Plugin-isgd_Image_Column=\u56FE\u7247\u5217 |
||||
Plugin-isgd_SubReport_Column=\u5B50\u62A5\u8868\u5217 |
||||
Plugin-isgd_Licence_Expired=\u8868\u5934\u884C\u5904\u7406\u5B9A\u5236\u63D2\u4EF6\u8BB8\u53EF\u8FC7\u671F |
@ -0,0 +1,25 @@
|
||||
#columnList{ |
||||
width:150px; |
||||
z-index: 99; |
||||
padding-top:0px; |
||||
padding-left:0px; |
||||
padding-bottom:0px; |
||||
position:absolute; |
||||
border: 1px solid #ccc; |
||||
background: #f0f0f0 url(/webroot/decision/view/report?op=resource&resource=/com/fr/web/images/menu/menu.gif) repeat-y; |
||||
} |
||||
#columnList ul{ |
||||
margin-top:0px; |
||||
margin-bottom:0px; |
||||
padding-left:0px; |
||||
list-style:none; |
||||
} |
||||
#columnList ul li{ |
||||
padding-left:0px; |
||||
white-space: nowrap; |
||||
overflow: hidden; |
||||
text-overflow: ellipsis; |
||||
} |
||||
#columnList ul li input{ |
||||
margin-left:15px; |
||||
} |
@ -0,0 +1,22 @@
|
||||
(function ($) { |
||||
$.extend(FR, { |
||||
saveReportRows: function () { |
||||
FR.ajax({ |
||||
url: FR.fineServletURL + "/plugin/public/com.fr.plugin.isgd.v10/isgd", |
||||
async: true, |
||||
type: 'GET', |
||||
data: { |
||||
sessionID: FR.SessionMgr.getSessionID() |
||||
}, |
||||
complete: function (res) { |
||||
var result = FR.jsonDecode(res.responseText); |
||||
if (FR.equals(result.errorCode, 0)) { |
||||
FR.Msg.toast("表头行数据保存成功!"); |
||||
} else { |
||||
FR.Msg.toast("表头行数据保存失败!"); |
||||
} |
||||
} |
||||
}); |
||||
} |
||||
}); |
||||
})(jQuery); |
Loading…
Reference in new issue