forked from demo/example
Compare commits
138 Commits
release/9.
...
release/10
Author | SHA1 | Date |
---|---|---|
roger | e159509541 | 10 months ago |
Bruce.Deng-邓铖臻 | 737e4c42e5 | 1 year ago |
Bruce.Deng | 0614d33511 | 1 year ago |
Bruce.Deng | 504fd59217 | 1 year ago |
Bruce.Deng | d7737090ec | 1 year ago |
Bruce.Deng-邓铖臻 | 65312af3b2 | 2 years ago |
Bruce.Deng | 3f7ff140f8 | 2 years ago |
Rosie.Xu | f3f9a70b12 | 3 years ago |
Rosie.Xu | fb54bae1b0 | 3 years ago |
zack | 347a9332b8 | 3 years ago |
zack | 59aa0ad8be | 3 years ago |
zack | cddbf30e23 | 3 years ago |
zack | 2d925ee7af | 3 years ago |
zack | 60609d03e9 | 3 years ago |
zack | e79e8f895e | 3 years ago |
zack | 8cb1a2e82e | 3 years ago |
zack | bf88811291 | 3 years ago |
zack | b2d209136a | 3 years ago |
zack | 5ea33e5068 | 3 years ago |
ju|剧浩宇 | 00aa706b1f | 3 years ago |
zack | 3478bd0ac6 | 3 years ago |
zack | d51e4171ed | 4 years ago |
zack | cbdac5146e | 4 years ago |
pengda | f1600566e0 | 4 years ago |
pengda | 283f40f697 | 4 years ago |
zack | ff97ecf5fd | 4 years ago |
zack | 3f6541199b | 4 years ago |
zack | 0cf74b4e96 | 4 years ago |
zack | 471a43570c | 4 years ago |
zack | bc90de3c16 | 4 years ago |
zack | 128cd31f3c | 4 years ago |
zack | 8ec9a4a4ee | 4 years ago |
zack | cf6488f8cf | 4 years ago |
Rosie.Xu | edec0b6917 | 4 years ago |
Rosie | 1ab42424ac | 4 years ago |
zack | fdab845093 | 4 years ago |
zack | bff933481e | 4 years ago |
ju|剧浩宇 | 23ff4263ea | 4 years ago |
Rosie | cb4e9b9a7e | 4 years ago |
Rosie | 4d23fc467a | 4 years ago |
Roxy | 7266b28e75 | 4 years ago |
Roxy | 08ec05022c | 4 years ago |
zack | ebdca952ab | 4 years ago |
zack | ae0260ea55 | 4 years ago |
Bruce.Deng | 4c83348f58 | 4 years ago |
Bruce.Deng | ff72249144 | 4 years ago |
susie | 30b311bc87 | 4 years ago |
Rosie | a6372ce1d7 | 4 years ago |
Bruce.Deng | ef6abc7d72 | 4 years ago |
Bruce.Deng | 10bcae59cb | 4 years ago |
Bruce.Deng | 872fdb18a9 | 4 years ago |
Bruce.Deng | ec33b8c9b6 | 4 years ago |
Bruce.Deng | 19c77eb3ca | 4 years ago |
Bruce.Deng | 7453e18699 | 4 years ago |
Bruce.Deng | 35d5088d7b | 4 years ago |
Bruce.Deng | 81ff64e704 | 4 years ago |
Bruce.Deng | dbfa72c8c6 | 4 years ago |
susie | fb782a47e3 | 4 years ago |
Cloud.Liu | f060679c86 | 4 years ago |
Cloud.Liu | 28dbfb3466 | 5 years ago |
Cloud.Liu | 857af4e194 | 5 years ago |
susie | b6a7536cb0 | 5 years ago |
Harrison | 7210221021 | 5 years ago |
zack | 724bb47e92 | 5 years ago |
zack | 79b18ff09e | 5 years ago |
Cloud.Liu | 394c0dd1b9 | 5 years ago |
Cloud.Liu | 0fee1eaab2 | 5 years ago |
zack | 4312da4d33 | 5 years ago |
zack | 2bf2dd090c | 5 years ago |
Leo.Tsai | c027a144ad | 5 years ago |
Leo.Cai | 397bfa1d66 | 5 years ago |
Leo.Cai | 745b53362c | 5 years ago |
Leo.Tsai | 911c0c8041 | 5 years ago |
Leo.Cai | fb25c44e62 | 5 years ago |
Leo.Cai | ade1863442 | 5 years ago |
Leo.Cai | fdaf3bb08e | 5 years ago |
zack | 3df1638ac1 | 5 years ago |
zack | fd21d7c3bb | 5 years ago |
zack | 2e7bc0820e | 5 years ago |
zack | a57cdb8e44 | 5 years ago |
zack | 76811bfa84 | 5 years ago |
zack | 0277ceb6f1 | 5 years ago |
zack | c2a96733e3 | 5 years ago |
richie | 23f67b82bd | 6 years ago |
richie | 79772de12b | 6 years ago |
zack | 99a1e18f71 | 6 years ago |
zack | 4cef0ea288 | 6 years ago |
zack | 1505058f42 | 6 years ago |
zack | e5ffbcb32b | 6 years ago |
zack | 981fb9a86e | 6 years ago |
zack | 64bb5c2570 | 6 years ago |
zack | 4ccc1aa068 | 6 years ago |
zack | ebabb7f783 | 6 years ago |
zack | eca6f1bc68 | 6 years ago |
richie | 83494a8876 | 6 years ago |
richie | b1e79777c9 | 6 years ago |
richie | 824336db27 | 6 years ago |
richie | 5c8494b98f | 6 years ago |
richie | 69edb7daf5 | 6 years ago |
richie | 7ea154f0f7 | 6 years ago |
richie | 1fd1ece237 | 6 years ago |
richie | 0db3415469 | 6 years ago |
richie | b18c413633 | 6 years ago |
richie | 583434ab01 | 6 years ago |
richie | ecafaacb3d | 6 years ago |
richie | 5a01f0c5c2 | 6 years ago |
richie | 08b86af993 | 6 years ago |
richie | a08f37a35d | 6 years ago |
richie | 55ce7b22af | 6 years ago |
richie | d373cde1d2 | 6 years ago |
richie | 1f11299d04 | 6 years ago |
richie | 65715f0a47 | 6 years ago |
richie | 8b53267f50 | 6 years ago |
richie | 5f9d9e440b | 6 years ago |
richie | d2b98dc286 | 6 years ago |
richie | 13ff659951 | 6 years ago |
richie | 873aaa3553 | 6 years ago |
richie | 1f17678f58 | 6 years ago |
richie | 6fff5a3474 | 6 years ago |
richie | 357e421ba3 | 6 years ago |
richie | a3cf8f0275 | 6 years ago |
richie | c9c9288422 | 6 years ago |
yaoh.wu | 363ca91c46 | 6 years ago |
yaoh.wu | 09633c645c | 6 years ago |
yaoh.wu | 7478ed077a | 6 years ago |
yaoh.wu | 9c50c8a6f9 | 6 years ago |
richie | e21d1c254b | 6 years ago |
richie | c7b3eb9b03 | 6 years ago |
richie | 763032df10 | 6 years ago |
richie | 522200e773 | 6 years ago |
richie | d626676bb7 | 6 years ago |
richie | 736ae24ad4 | 6 years ago |
richie | be7702e112 | 6 years ago |
richie | 13016ed41b | 6 years ago |
richie | abc5a0c09d | 6 years ago |
richie | ea5ba3f181 | 6 years ago |
yaoh.wu | b40abd1c9f | 6 years ago |
yaoh.wu | 0251597f7b | 6 years ago |
215 changed files with 9185 additions and 1517 deletions
@ -1 +1,7 @@
|
||||
*.iml |
||||
.idea/ |
||||
/target/ |
||||
/download/ |
||||
/webroot/ |
||||
.DS_Store |
||||
lib/report/*.jar |
@ -1,3 +1,26 @@
|
||||
# 文档demo代码插件 |
||||
# 工程配置指南 |
||||
|
||||
## 只是为了验证文档demo代码是否能够编译,插件本身无任何作用。 |
||||
## 安装maven |
||||
用于构建开发工程,文档参考:http://wiki.jikexueyuan.com/project/maven/environment-setup.html |
||||
|
||||
## 安装ant |
||||
用于构建插件安装包,文档参考:http://wiki.jikexueyuan.com/project/ant/environment-setup.html |
||||
|
||||
## 配置开发工程 |
||||
直接使用IntelliJ IDEA打开这个目录即可。 |
||||
|
||||
如果需要复制jar包到webroot/WEB-INF/lib下,可以执行命令:```mvn install``` |
||||
|
||||
## 启动设计器 |
||||
如果希望正常的进行插件开发,使用```com.fr.learn.Leaner```启动设计器。 |
||||
|
||||
如果希望进行设计器调试,则使用```com.fr.learn.Leaner4Debug```启动设计器。 |
||||
|
||||
## 修改依赖的jar版本 |
||||
只需要更改pom.xml中的common-version属性即可。 |
||||
|
||||
|common-version|含义| |
||||
|--------------|----| |
||||
|10.0-RELEASE-SNAPSHOT|10.0的测试版本快照| |
||||
|10.0-SNAPSHOT|10.0的正式版本快照| |
||||
|10.0|10.0的正式版本| |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,212 @@
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
||||
<modelVersion>4.0.0</modelVersion> |
||||
<groupId>com.fr.plugin</groupId> |
||||
<artifactId>starter</artifactId> |
||||
<version>10.0</version> |
||||
<packaging>pom</packaging> |
||||
<properties> |
||||
<common-version>10.0-RELEASE-SNAPSHOT</common-version> |
||||
<web-inf-bucket>${project.basedir}/webroot/WEB-INF</web-inf-bucket> |
||||
</properties> |
||||
<dependencies> |
||||
<!-- core包 --> |
||||
<dependency> |
||||
<groupId>com.fr.third</groupId> |
||||
<artifactId>fine-third</artifactId> |
||||
<version>${common-version}</version> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>com.fr.activator</groupId> |
||||
<artifactId>fine-activator</artifactId> |
||||
<version>${common-version}</version> |
||||
<scope>compile</scope> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>com.fr.core</groupId> |
||||
<artifactId>fine-core</artifactId> |
||||
<version>${common-version}</version> |
||||
<scope>compile</scope> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>com.fr.webui</groupId> |
||||
<artifactId>fine-webui</artifactId> |
||||
<version>${common-version}</version> |
||||
<scope>compile</scope> |
||||
</dependency> |
||||
<!-- 数据源包 --> |
||||
<dependency> |
||||
<groupId>com.fr.datasource</groupId> |
||||
<artifactId>fine-datasource</artifactId> |
||||
<version>${common-version}</version> |
||||
<scope>compile</scope> |
||||
</dependency> |
||||
<!-- 决策平台包 --> |
||||
<dependency> |
||||
<groupId>com.fr.decision</groupId> |
||||
<artifactId>fine-decision</artifactId> |
||||
<version>${common-version}</version> |
||||
<scope>compile</scope> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>com.fr.decision</groupId> |
||||
<artifactId>fine-decision-report</artifactId> |
||||
<version>${common-version}</version> |
||||
<scope>compile</scope> |
||||
</dependency> |
||||
<!-- 定时调度包 --> |
||||
<dependency> |
||||
<groupId>com.fr.schedule</groupId> |
||||
<artifactId>fine-schedule</artifactId> |
||||
<version>${common-version}</version> |
||||
<scope>compile</scope> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>com.fr.schedule</groupId> |
||||
<artifactId>fine-schedule-report</artifactId> |
||||
<version>${common-version}</version> |
||||
<scope>compile</scope> |
||||
</dependency> |
||||
|
||||
<!-- 智能日志包 --> |
||||
<dependency> |
||||
<groupId>com.fr.intelligence</groupId> |
||||
<artifactId>fine-swift</artifactId> |
||||
<version>${common-version}</version> |
||||
<scope>compile</scope> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>com.fr.intelligence</groupId> |
||||
<artifactId>fine-accumulator</artifactId> |
||||
<version>${common-version}</version> |
||||
<scope>compile</scope> |
||||
</dependency> |
||||
<!-- 报表引擎包 --> |
||||
<dependency> |
||||
<groupId>com.fr.report</groupId> |
||||
<artifactId>fine-report-engine</artifactId> |
||||
<version>${common-version}</version> |
||||
<scope>compile</scope> |
||||
</dependency> |
||||
<!-- 设计器包 --> |
||||
<dependency> |
||||
<groupId>com.fr.report</groupId> |
||||
<artifactId>fine-report-designer</artifactId> |
||||
<version>${common-version}</version> |
||||
<scope>compile</scope> |
||||
</dependency> |
||||
|
||||
<!-- 远程设计用包 --> |
||||
<dependency> |
||||
<groupId>io.socket</groupId> |
||||
<artifactId>socket.io-client</artifactId> |
||||
<version>0.7.0</version> |
||||
<scope>compile</scope> |
||||
</dependency> |
||||
|
||||
<!-- AOP用包 --> |
||||
<dependency> |
||||
<groupId>org.aspectj</groupId> |
||||
<artifactId>aspectjrt</artifactId> |
||||
<version>1.6.9</version> |
||||
<scope>compile</scope> |
||||
</dependency> |
||||
|
||||
<!-- 设计器调试用包 --> |
||||
<dependency> |
||||
<groupId>org.swingexplorer</groupId> |
||||
<artifactId>swexpl</artifactId> |
||||
<version>2.0</version> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>org.swingexplorer</groupId> |
||||
<artifactId>swag</artifactId> |
||||
<version>1.0</version> |
||||
</dependency> |
||||
|
||||
<!-- tomcat包 --> |
||||
<dependency> |
||||
<groupId>org.apache.tomcat</groupId> |
||||
<artifactId>tomcat-catalina</artifactId> |
||||
<version>8.5.32</version> |
||||
</dependency> |
||||
|
||||
<!-- mysql驱动 --> |
||||
<dependency> |
||||
<groupId>mysql</groupId> |
||||
<artifactId>mysql-connector-java</artifactId> |
||||
<version>5.1.44</version> |
||||
</dependency> |
||||
|
||||
<dependency> |
||||
<groupId>junit</groupId> |
||||
<artifactId>junit</artifactId> |
||||
<version>4.12</version> |
||||
<scope>test</scope> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>org.easymock</groupId> |
||||
<artifactId>easymock</artifactId> |
||||
<version>3.5.1</version> |
||||
<scope>test</scope> |
||||
</dependency> |
||||
|
||||
</dependencies> |
||||
<build> |
||||
<outputDirectory>${web-inf-bucket}/classes</outputDirectory> |
||||
<plugins> |
||||
<plugin> |
||||
<artifactId>maven-compiler-plugin</artifactId> |
||||
<version>3.1</version> |
||||
<configuration> |
||||
<source>1.6</source> |
||||
<target>1.6</target> |
||||
<!--不生成target/generated-sources/annotations--> |
||||
<proc>none</proc> |
||||
</configuration> |
||||
</plugin> |
||||
<plugin> |
||||
<groupId>org.apache.maven.plugins</groupId> |
||||
<artifactId>maven-dependency-plugin</artifactId> |
||||
<executions> |
||||
<execution> |
||||
<id>copy</id> |
||||
<phase>package</phase> |
||||
<goals> |
||||
<goal>copy-dependencies</goal> |
||||
</goals> |
||||
<configuration> |
||||
<outputDirectory> |
||||
${project.basedir}/webroot/WEB-INF/lib |
||||
</outputDirectory> |
||||
</configuration> |
||||
</execution> |
||||
</executions> |
||||
</plugin> |
||||
</plugins> |
||||
</build> |
||||
<repositories> |
||||
<repository> |
||||
<id>fanruan</id> |
||||
<name>fanruan</name> |
||||
<url>http://mvn.finedevelop.com/repository/maven-public/</url> |
||||
<snapshots> |
||||
<enabled>true</enabled> |
||||
<updatePolicy>always</updatePolicy> |
||||
<checksumPolicy>warn</checksumPolicy> |
||||
</snapshots> |
||||
</repository> |
||||
</repositories> |
||||
<pluginRepositories> |
||||
<pluginRepository> |
||||
<id>fanruan</id> |
||||
<name>fanruan</name> |
||||
<url>http://mvn.finedevelop.com/repository/maven-public/</url> |
||||
<snapshots> |
||||
<enabled>true</enabled> |
||||
<updatePolicy>always</updatePolicy> |
||||
<checksumPolicy>warn</checksumPolicy> |
||||
</snapshots> |
||||
</pluginRepository> |
||||
</pluginRepositories> |
||||
</project> |
@ -0,0 +1,26 @@
|
||||
# 工程配置指南 |
||||
|
||||
## 安装maven |
||||
用于构建开发工程,文档参考:http://wiki.jikexueyuan.com/project/maven/environment-setup.html |
||||
|
||||
## 安装ant |
||||
用于构建插件安装包,文档参考:http://wiki.jikexueyuan.com/project/ant/environment-setup.html |
||||
|
||||
## 配置开发工程 |
||||
直接使用IntelliJ IDEA打开这个目录即可。 |
||||
|
||||
如果需要复制jar包到webroot/WEB-INF/lib下,可以执行命令:```mvn install``` |
||||
|
||||
## 启动设计器 |
||||
如果希望正常的进行插件开发,使用```com.fr.learn.Leaner```启动设计器。 |
||||
|
||||
如果希望进行设计器调试,则使用```com.fr.learn.Leaner4Debug```启动设计器。 |
||||
|
||||
## 修改依赖的jar版本 |
||||
只需要更改pom.xml中的common-version属性即可。 |
||||
|
||||
|common-version|含义| |
||||
|--------------|----| |
||||
|10.0-RELEASE-SNAPSHOT|10.0的测试版本快照| |
||||
|10.0-SNAPSHOT|10.0的正式版本快照| |
||||
|10.0|10.0的正式版本| |
@ -1,58 +0,0 @@
|
||||
package com.fr.data; |
||||
|
||||
import com.fr.general.data.TableDataException; |
||||
import org.apache.axis.client.Call; |
||||
import org.apache.axis.client.Service; |
||||
|
||||
import javax.xml.namespace.QName; |
||||
|
||||
public class WebServiceTableData extends AbstractTableData { |
||||
private String[][] data; |
||||
|
||||
public WebServiceTableData() { |
||||
this.data = this.getData(); |
||||
} |
||||
|
||||
//获取列数
|
||||
|
||||
@Override |
||||
public int getColumnCount() throws TableDataException { |
||||
return data[0].length; |
||||
} |
||||
|
||||
//获取列的名称为数组中第一行的值
|
||||
|
||||
@Override |
||||
public String getColumnName(int columnIndex) throws TableDataException { |
||||
return data[0][columnIndex]; |
||||
} |
||||
|
||||
//获取行数为数据的长度-1
|
||||
|
||||
@Override |
||||
public int getRowCount() throws TableDataException { |
||||
return data.length - 1; |
||||
} |
||||
|
||||
//获取值
|
||||
|
||||
@Override |
||||
public Object getValueAt(int rowIndex, int columnIndex) { |
||||
return data[rowIndex + 1][columnIndex]; |
||||
} |
||||
|
||||
public String[][] getData() { |
||||
try { |
||||
String endpoint = "http://localhost:8080/axis/TestWS2TDClient.jws"; |
||||
Service service = new Service(); |
||||
Call call = (Call) service.createCall(); |
||||
call.setTargetEndpointAddress(new java.net.URL(endpoint)); |
||||
call.setOperationName(new QName("http://localhost:8080/axis/TestWS2TDClient.jws", |
||||
"getTD")); |
||||
return (String[][]) call.invoke(new Object[]{}); |
||||
} catch (Exception e) { |
||||
e.printStackTrace(); |
||||
} |
||||
return new String[][]{}; |
||||
} |
||||
} |
@ -1,49 +0,0 @@
|
||||
package com.fr.demo; |
||||
|
||||
import com.fr.base.FRContext; |
||||
import com.fr.dav.LocalEnv; |
||||
|
||||
import java.io.File; |
||||
import java.io.FileInputStream; |
||||
import java.io.InputStream; |
||||
import java.sql.Connection; |
||||
import java.sql.DriverManager; |
||||
import java.sql.PreparedStatement; |
||||
|
||||
public class SaveReportToDatabase { |
||||
public static void main(String[] args) { |
||||
SaveReport(); |
||||
} |
||||
|
||||
private static void SaveReport() { |
||||
try { |
||||
// 定义报表运行环境,才能执行报表
|
||||
String envpath = "D:\\FineReport_8.0\\WebReport\\WEB-INF"; |
||||
FRContext.setCurrentEnv(new LocalEnv(envpath)); |
||||
// 连接数据库
|
||||
String driver = "com.mysql.jdbc.Driver"; |
||||
String url = "jdbc:mysql://112.124.109.239:3306/yourdatabase"; |
||||
String user = "yourusername"; |
||||
String pass = "yourpassword"; |
||||
Class.forName(driver); |
||||
Connection conn = DriverManager.getConnection(url, user, pass); //注意表名是否区分大小写
|
||||
conn.setAutoCommit(false); |
||||
PreparedStatement presmt = conn |
||||
.prepareStatement("INSERT INTO report VALUES(?,?)"); |
||||
// 读进需要保存入库的模板文件
|
||||
File cptfile = new File(envpath |
||||
+ "\\reportlets\\GettingStarted.cpt"); |
||||
int lens = (int) cptfile.length(); |
||||
InputStream ins = new FileInputStream(cptfile); |
||||
// 将模板保存入库
|
||||
presmt.setString(1, "GettingStarted.cpt"); // 第一个字段存放模板相对路径
|
||||
presmt.setBinaryStream(2, ins, lens); // 第二个字段存放模板文件的二进制流
|
||||
presmt.execute(); |
||||
conn.commit(); |
||||
presmt.close(); |
||||
conn.close(); |
||||
} catch (Exception e) { |
||||
e.printStackTrace(); |
||||
} |
||||
} |
||||
} |
@ -1,19 +0,0 @@
|
||||
package com.fr.function; |
||||
|
||||
import com.fr.script.AbstractFunction; |
||||
|
||||
public class StringCat extends AbstractFunction { |
||||
public StringCat() { |
||||
} |
||||
|
||||
public Object run(Object[] args) { |
||||
StringBuilder result = new StringBuilder(); |
||||
|
||||
for (int i = 0; i < args.length; ++i) { |
||||
Object para = args[i]; |
||||
result.append(para.toString()); |
||||
} |
||||
|
||||
return result.toString(); |
||||
} |
||||
} |
@ -1,73 +0,0 @@
|
||||
//图片在下文字在上
|
||||
package com.fr.function; |
||||
|
||||
import com.fr.base.BaseUtils; |
||||
import com.fr.base.GraphHelper; |
||||
import com.fr.script.AbstractFunction; |
||||
import com.fr.stable.CoreGraphHelper; |
||||
|
||||
import javax.imageio.ImageIO; |
||||
import javax.swing.JFrame; |
||||
import javax.swing.JPanel; |
||||
import java.awt.Graphics2D; |
||||
import java.awt.Image; |
||||
import java.awt.image.BufferedImage; |
||||
import java.io.File; |
||||
import java.io.IOException; |
||||
|
||||
|
||||
public class StringImage extends AbstractFunction { |
||||
public Object run(Object[] args) { |
||||
Image result = null; |
||||
int p = 0; |
||||
Object[] ob = new Object[2]; |
||||
for (int i = 0; (i < args.length && p <= 1); i++) { |
||||
if (args[i] == null) { |
||||
continue; |
||||
} |
||||
ob[p] = args[i]; |
||||
p++; |
||||
|
||||
} |
||||
try { |
||||
result = initStringImage(ob[0], ob[1]); |
||||
} catch (IOException e) { |
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace(); |
||||
} |
||||
return result; |
||||
} |
||||
|
||||
public Image initStringImage(Object nameOb, Object imageOb) |
||||
throws IOException { |
||||
String name = (String) nameOb; |
||||
Image image = null; |
||||
if (imageOb instanceof Image) |
||||
image = (Image) imageOb; |
||||
else |
||||
; |
||||
Image stringImage = null; |
||||
BufferedImage splashBuffedImage = CoreGraphHelper.toBufferedImage(image); |
||||
stringImage = splashBuffedImage; |
||||
Graphics2D splashG2d = splashBuffedImage.createGraphics(); |
||||
double centerX = 25; |
||||
double centerY = 25; |
||||
GraphHelper.drawString(splashG2d, name, centerX, centerY); |
||||
//
|
||||
String FilePath = "Test.png"; |
||||
File f = new File(FilePath); |
||||
ImageIO.write(splashBuffedImage, "png", f); |
||||
//
|
||||
return splashBuffedImage; |
||||
} |
||||
|
||||
public static void main(String arg[]) throws IOException { |
||||
StringImage tt = new StringImage(); |
||||
Image image = BaseUtils.readImage("D:\\1.jpg"); |
||||
String name = "12314124"; |
||||
Image aa = tt.initStringImage(name, image); |
||||
JFrame jf = new JFrame(); |
||||
JPanel jp = new JPanel(); |
||||
|
||||
} |
||||
} |
@ -1,45 +0,0 @@
|
||||
//SubSection函数-Oracle查询参数个数限制
|
||||
package com.fr.function; |
||||
|
||||
import com.fr.general.FArray; |
||||
import com.fr.script.AbstractFunction; |
||||
|
||||
public class SubSection extends AbstractFunction { |
||||
public Object run(Object[] args) { |
||||
// 获取第一个对象,即取得传入的参数
|
||||
Object para = args[0]; |
||||
String parastr = para.toString(); |
||||
// 由于是复选参数,因此要去掉前后的"("和")"
|
||||
if (parastr.startsWith("(") && parastr.endsWith(")")) { |
||||
parastr = parastr.substring(1, parastr.length() - 1); |
||||
} |
||||
// 将字符串转为","分割的数组
|
||||
String test[] = parastr.split(","); |
||||
int len = test.length; |
||||
int loopnum = len / 500; |
||||
if (len % 500 != 0) { |
||||
loopnum += 1; |
||||
} |
||||
; |
||||
// 返回的值是数组,需要定义成我们内部的类型FArray
|
||||
FArray result = new FArray(); |
||||
String str = ""; |
||||
int k = 1; |
||||
for (int i = 0; i < loopnum; i++) { |
||||
for (int j = 500 * i; j < 500 * (i + 1) && j < len; j++) { |
||||
if (k != 500 && j != (len - 1)) { |
||||
str += test[j] + ","; |
||||
} else { |
||||
str += test[j]; |
||||
} |
||||
k++; |
||||
} |
||||
// 每500个形成一组并在每组外部加上"("和")"
|
||||
str = "(" + str + ")"; |
||||
result.add(str); |
||||
str = ""; |
||||
k = 1; |
||||
} |
||||
return result; |
||||
} |
||||
} |
@ -1,105 +0,0 @@
|
||||
// 导出打印单选按钮及复选框
|
||||
package com.fr.function; |
||||
|
||||
import com.fr.base.AbstractPainter; |
||||
import com.fr.base.BaseUtils; |
||||
import com.fr.base.GraphHelper; |
||||
import com.fr.base.Style; |
||||
import com.fr.general.FArray; |
||||
import com.fr.general.FRFont; |
||||
import com.fr.script.AbstractFunction; |
||||
import com.fr.stable.Primitive; |
||||
import com.fr.stable.StringUtils; |
||||
|
||||
import java.awt.Color; |
||||
import java.awt.FontMetrics; |
||||
import java.awt.Graphics; |
||||
import java.awt.Graphics2D; |
||||
import java.awt.Image; |
||||
|
||||
public class Widget2Image extends AbstractFunction { |
||||
public Object run(Object[] args) { |
||||
if (args.length < 3) |
||||
return Primitive.NULL; |
||||
// 第一个参数:控件类型,不区分大小写
|
||||
String type = args[0].toString().toLowerCase(); |
||||
if (!("checkbox".equals(type) || "radiobutton".equals(type))) |
||||
return Primitive.ERROR_VALUE; |
||||
// 第二个参数:控件按钮个数
|
||||
int num = Integer.parseInt(args[1].toString()); |
||||
// 第三个参数:按钮组的值,哪些被选中
|
||||
String selection = args[2].toString(); |
||||
// 第四个参数:可选参数,按钮组对应的显示值数组
|
||||
FArray textArray = new FArray(); |
||||
if (args.length == 4 && args[3] instanceof FArray) { |
||||
textArray = (FArray) args[3]; |
||||
} |
||||
return new WidgetPaint(type, num, selection, textArray); |
||||
} |
||||
|
||||
public static class WidgetPaint extends AbstractPainter { |
||||
public static String CHECK_ON = "/com/fr/web/images/checkon.gif"; |
||||
public static String CHECK_OFF = "/com/fr/web/images/checkoff.gif"; |
||||
public static String RADIO_ON = "/com/fr/web/images/radioon.gif"; |
||||
public static String RADIO_OFF = "/com/fr/web/images/radiooff.gif"; |
||||
public static FRFont DEFUALT_FONT = FRFont.getInstance(); |
||||
public static FontMetrics FontMetrics = GraphHelper |
||||
.getFontMetrics(DEFUALT_FONT); |
||||
private String type; |
||||
private int num; |
||||
private String selection; |
||||
private FArray textArray; |
||||
|
||||
{ |
||||
DEFUALT_FONT = DEFUALT_FONT.applyForeground(Color.BLACK); |
||||
} |
||||
|
||||
public WidgetPaint(String type, int num, String selection, |
||||
FArray textArray) { |
||||
this.type = type; |
||||
this.num = num; |
||||
this.selection = selection; |
||||
this.textArray = textArray; |
||||
} |
||||
|
||||
private String resolveText(int i) { |
||||
if (i < this.textArray.length()) { |
||||
return this.textArray.elementAt(i).toString(); |
||||
} |
||||
return StringUtils.EMPTY; |
||||
} |
||||
|
||||
public void paint(Graphics g, int width, int height, int resolution, |
||||
Style style) { |
||||
String OFF = CHECK_OFF; |
||||
String ON = CHECK_ON; |
||||
if ("radiobutton".equals(type)) { |
||||
OFF = RADIO_OFF; |
||||
ON = RADIO_ON; |
||||
} |
||||
Image[] checkOFFON = {BaseUtils.readImage(OFF), |
||||
BaseUtils.readImage(ON)}; |
||||
int[] imgWidths = {checkOFFON[0].getWidth(null), |
||||
checkOFFON[1].getWidth(null)}; |
||||
int[] imgHeights = {checkOFFON[0].getHeight(null), |
||||
checkOFFON[1].getHeight(null)}; |
||||
Graphics2D g2d = (Graphics2D) g; |
||||
g2d.setFont(FRFont.getInstance()); |
||||
g2d.setPaint(Color.BLACK); |
||||
int x = 2; |
||||
int y = (height - imgHeights[0]) / 2; |
||||
String select = selection; |
||||
for (int i = 0; i < num; i++) { |
||||
int bit = Integer.parseInt(select.substring(i, i + 1)); |
||||
g2d.drawImage(checkOFFON[bit], x, y, imgWidths[bit], |
||||
imgHeights[bit], null); |
||||
x += imgWidths[bit] + 2; |
||||
String text = resolveText(i); |
||||
g2d.setBackground(Color.BLACK); |
||||
g2d.drawString(text, (float) x, (float) (y + FontMetrics |
||||
.getAscent())); |
||||
x += FontMetrics.stringWidth(text) + 2; |
||||
} |
||||
} |
||||
} |
||||
} |
@ -1,25 +0,0 @@
|
||||
package com.fr.io; |
||||
|
||||
import com.fr.general.ModuleContext; |
||||
import com.fr.io.importer.ExcelReportImporter; |
||||
import com.fr.main.TemplateWorkBook; |
||||
import com.fr.main.impl.WorkBook; |
||||
import com.fr.report.module.EngineModule; |
||||
|
||||
import java.io.File; |
||||
import java.io.FileInputStream; |
||||
import java.io.FileOutputStream; |
||||
import java.io.OutputStream; |
||||
|
||||
public class ExcelToCpt { |
||||
public static void main(String[] args) throws Exception { |
||||
File excelFile = new File("D:\\API.xls"); |
||||
FileInputStream a = new FileInputStream(excelFile); |
||||
ModuleContext.startModule(EngineModule.class.getName()); |
||||
TemplateWorkBook tpl = new ExcelReportImporter().generateWorkBookByStream(a); |
||||
OutputStream outputStream = new FileOutputStream(new File("D:\\abc.cpt")); |
||||
((WorkBook) tpl).export(outputStream); |
||||
outputStream.close(); |
||||
ModuleContext.stopModules(); |
||||
} |
||||
} |
@ -1,43 +0,0 @@
|
||||
package com.fr.io; |
||||
|
||||
import com.fr.base.FRContext; |
||||
import com.fr.dav.LocalEnv; |
||||
import com.fr.general.ModuleContext; |
||||
import com.fr.io.exporter.ExcelExporter; |
||||
import com.fr.main.TemplateWorkBook; |
||||
import com.fr.main.workbook.ResultWorkBook; |
||||
import com.fr.report.module.EngineModule; |
||||
import com.fr.stable.WriteActor; |
||||
|
||||
import java.io.File; |
||||
import java.io.FileOutputStream; |
||||
|
||||
|
||||
public class ExcuteDemo { |
||||
public static void main(String[] args) { |
||||
try { |
||||
// 首先需要定义执行所在的环境,这样才能正确读取数据库信息
|
||||
String envPath = "D:\\FineReport_8.0\\WebReport\\WEB-INF"; |
||||
FRContext.setCurrentEnv(new LocalEnv(envPath)); |
||||
ModuleContext.startModule(EngineModule.class.getName()); |
||||
// 读取模板
|
||||
TemplateWorkBook workbook = TemplateWorkBookIO.readTemplateWorkBook(FRContext.getCurrentEnv(), "\\doc\\Primary\\Parameter\\Parameter.cpt"); |
||||
/* |
||||
* 生成参数map,注入参数与对应的值,用于执行报表 该模板中只有一个参数地区,给其赋值华北 |
||||
* 若参数在发送请求时传过来,可以通过req.getParameter(name)获得 |
||||
* 获得的参数put进map中,paraMap.put(paraname,paravalue) |
||||
*/ |
||||
java.util.Map paraMap = new java.util.HashMap(); |
||||
paraMap.put("地区", "华北"); |
||||
// 使用paraMap执行生成结果
|
||||
ResultWorkBook result = workbook.execute(paraMap, new WriteActor()); |
||||
// 使用结果如导出至excel
|
||||
FileOutputStream outputStream = new FileOutputStream(new File( |
||||
"D:\\Parameter.xls")); |
||||
ExcelExporter excelExporter = new ExcelExporter(); |
||||
excelExporter.export(outputStream, result); |
||||
} catch (Exception e) { |
||||
e.printStackTrace(); |
||||
} |
||||
} |
||||
} |
@ -1,93 +0,0 @@
|
||||
package com.fr.io; |
||||
|
||||
import com.fr.base.FRContext; |
||||
import com.fr.base.Parameter; |
||||
import com.fr.dav.LocalEnv; |
||||
import com.fr.general.ModuleContext; |
||||
import com.fr.io.exporter.CSVExporter; |
||||
import com.fr.io.exporter.EmbeddedTableDataExporter; |
||||
import com.fr.io.exporter.ExcelExporter; |
||||
import com.fr.io.exporter.ImageExporter; |
||||
import com.fr.io.exporter.PDFExporter; |
||||
import com.fr.io.exporter.SVGExporter; |
||||
import com.fr.io.exporter.TextExporter; |
||||
import com.fr.io.exporter.WordExporter; |
||||
import com.fr.io.exporter.excel.stream.StreamExcel2007Exporter; |
||||
import com.fr.main.impl.WorkBook; |
||||
import com.fr.main.workbook.ResultWorkBook; |
||||
import com.fr.report.module.EngineModule; |
||||
import com.fr.stable.WriteActor; |
||||
|
||||
import java.io.File; |
||||
import java.io.FileOutputStream; |
||||
|
||||
|
||||
public class ExportApi { |
||||
public static void main(String[] args) { |
||||
// 定义报表运行环境,才能执行报表
|
||||
String envpath = "D:\\FineReport_8.0\\WebReport\\WEB-INF"; |
||||
FRContext.setCurrentEnv(new LocalEnv(envpath)); |
||||
ModuleContext.startModule(EngineModule.class.getName()); |
||||
ResultWorkBook rworkbook = null; |
||||
try { |
||||
// 未执行模板工作薄
|
||||
WorkBook workbook = (WorkBook) TemplateWorkBookIO |
||||
.readTemplateWorkBook(FRContext.getCurrentEnv(), |
||||
"\\doc\\Primary\\Parameter\\Parameter.cpt"); |
||||
// 获取报表参数并设置值,导出内置数据集时数据集会根据参数值查询出结果从而转为内置数据集
|
||||
Parameter[] parameters = workbook.getParameters(); |
||||
parameters[0].setValue("华东"); |
||||
// 定义parametermap用于执行报表,将执行后的结果工作薄保存为rworkBook
|
||||
java.util.Map parameterMap = new java.util.HashMap(); |
||||
for (int i = 0; i < parameters.length; i++) { |
||||
parameterMap.put(parameters[i].getName(), parameters[i] |
||||
.getValue()); |
||||
} |
||||
// 定义输出流
|
||||
FileOutputStream outputStream; |
||||
// 将未执行模板工作薄导出为内置数据集模板
|
||||
outputStream = new FileOutputStream(new File("D:\\EmbExport.cpt")); |
||||
EmbeddedTableDataExporter templateExporter = new EmbeddedTableDataExporter(); |
||||
templateExporter.export(outputStream, workbook); |
||||
// 将模板工作薄导出模板文件,在导出前您可以编辑导入的模板工作薄,可参考报表调用章节
|
||||
outputStream = new FileOutputStream(new File("D:\\TmpExport.cpt")); |
||||
((WorkBook) workbook).export(outputStream); |
||||
// 将结果工作薄导出为2003Excel文件
|
||||
outputStream = new FileOutputStream(new File("D:\\ExcelExport.xls")); |
||||
ExcelExporter ExcelExport = new ExcelExporter(); |
||||
ExcelExport.export(outputStream, workbook.execute(parameterMap, new WriteActor())); |
||||
// 将结果工作薄导出为Excel文件
|
||||
outputStream = new FileOutputStream(new File("D:\\ExcelExport.xlsx")); |
||||
StreamExcel2007Exporter ExcelExport1 = new StreamExcel2007Exporter(); |
||||
ExcelExport1.export(outputStream, workbook.execute(parameterMap, new WriteActor())); |
||||
// 将结果工作薄导出为Word文件
|
||||
outputStream = new FileOutputStream(new File("D:\\WordExport.doc")); |
||||
WordExporter WordExport = new WordExporter(); |
||||
WordExport.export(outputStream, workbook.execute(parameterMap, new WriteActor())); |
||||
// 将结果工作薄导出为Pdf文件
|
||||
outputStream = new FileOutputStream(new File("D:\\PdfExport.pdf")); |
||||
PDFExporter PdfExport = new PDFExporter(); |
||||
PdfExport.export(outputStream, workbook.execute(parameterMap, new WriteActor())); |
||||
// 将结果工作薄导出为Txt文件(txt文件本身不支持表格、图表等,被导出模板一般为明细表)
|
||||
outputStream = new FileOutputStream(new File("D:\\TxtExport.txt")); |
||||
TextExporter TxtExport = new TextExporter(); |
||||
TxtExport.export(outputStream, workbook.execute(parameterMap, new WriteActor())); |
||||
// 将结果工作薄导出为Csv文件
|
||||
outputStream = new FileOutputStream(new File("D:\\CsvExport.csv")); |
||||
CSVExporter CsvExport = new CSVExporter(); |
||||
CsvExport.export(outputStream, workbook.execute(parameterMap, new WriteActor())); |
||||
//将结果工作薄导出为SVG文件
|
||||
outputStream = new FileOutputStream(new File("D:\\SvgExport.svg")); |
||||
SVGExporter SvgExport = new SVGExporter(); |
||||
SvgExport.export(outputStream, workbook.execute(parameterMap, new WriteActor())); |
||||
//将结果工作薄导出为image文件
|
||||
outputStream = new FileOutputStream(new File("D:\\PngExport.png")); |
||||
ImageExporter ImageExport = new ImageExporter(); |
||||
ImageExport.export(outputStream, workbook.execute(parameterMap, new WriteActor())); |
||||
outputStream.close(); |
||||
ModuleContext.stopModules(); |
||||
} catch (Exception e) { |
||||
e.printStackTrace(); |
||||
} |
||||
} |
||||
} |
@ -1,90 +0,0 @@
|
||||
package com.fr.io; |
||||
|
||||
import com.fr.base.FRContext; |
||||
import com.fr.base.Parameter; |
||||
import com.fr.dav.LocalEnv; |
||||
import com.fr.general.ModuleContext; |
||||
import com.fr.io.exporter.ExcelExporter; |
||||
import com.fr.io.exporter.LargeDataPageExcelExporter; |
||||
import com.fr.io.exporter.PageExcel2007Exporter; |
||||
import com.fr.io.exporter.PageExcelExporter; |
||||
import com.fr.io.exporter.PageToSheetExcel2007Exporter; |
||||
import com.fr.io.exporter.PageToSheetExcelExporter; |
||||
import com.fr.io.exporter.excel.stream.StreamExcel2007Exporter; |
||||
import com.fr.main.impl.WorkBook; |
||||
import com.fr.main.workbook.ResultWorkBook; |
||||
import com.fr.report.core.ReportUtils; |
||||
import com.fr.report.module.EngineModule; |
||||
import com.fr.stable.WriteActor; |
||||
|
||||
import java.io.File; |
||||
import java.io.FileOutputStream; |
||||
|
||||
|
||||
public class ExportExcel { |
||||
public static void main(String[] args) { |
||||
// 定义报表运行环境,才能执行报表
|
||||
String envpath = "D:\\FineReport_8.0\\WebReport\\WEB-INF"; |
||||
FRContext.setCurrentEnv(new LocalEnv(envpath)); |
||||
ModuleContext.startModule(EngineModule.class.getName()); |
||||
ResultWorkBook rworkbook = null; |
||||
try { |
||||
// 未执行模板工作薄
|
||||
WorkBook workbook = (WorkBook) TemplateWorkBookIO |
||||
.readTemplateWorkBook(FRContext.getCurrentEnv(), |
||||
"\\doc\\Primary\\Parameter\\Parameter.cpt"); |
||||
// 获取报表参数并设置值,导出内置数据集时数据集会根据参数值查询出结果从而转为内置数据集
|
||||
Parameter[] parameters = workbook.getParameters(); |
||||
parameters[0].setValue("华东"); |
||||
// 定义parametermap用于执行报表,将执行后的结果工作薄保存为rworkBook
|
||||
java.util.Map parameterMap = new java.util.HashMap(); |
||||
for (int i = 0; i < parameters.length; i++) { |
||||
parameterMap.put(parameters[i].getName(), parameters[i] |
||||
.getValue()); |
||||
} |
||||
// 定义输出流
|
||||
FileOutputStream outputStream; |
||||
|
||||
//原样导出excel2003
|
||||
outputStream = new FileOutputStream(new File("E:\\ExcelExport.xls")); |
||||
ExcelExporter excel = new ExcelExporter(); |
||||
excel.export(outputStream, workbook.execute(parameterMap, new WriteActor())); |
||||
|
||||
//原样导出excel2007
|
||||
outputStream = new FileOutputStream(new File("E:\\ExcelExport.xlsx")); |
||||
StreamExcel2007Exporter excel1 = new StreamExcel2007Exporter(); |
||||
excel.export(outputStream, workbook.execute(parameterMap, new WriteActor())); |
||||
|
||||
//分页导出excel2003
|
||||
outputStream = new FileOutputStream(new File("E:\\PageExcelExport.xls")); |
||||
PageExcelExporter page = new PageExcelExporter(ReportUtils.getPaperSettingListFromWorkBook(workbook.execute(parameterMap, new WriteActor()))); |
||||
page.export(outputStream, workbook.execute(parameterMap, new WriteActor())); |
||||
|
||||
//分页导出excel2007
|
||||
outputStream = new FileOutputStream(new File("E:\\PageExcelExport.xlsx")); |
||||
PageExcel2007Exporter page1 = new PageExcel2007Exporter(ReportUtils.getPaperSettingListFromWorkBook(rworkbook)); |
||||
page1.export(outputStream, workbook.execute(parameterMap, new WriteActor())); |
||||
|
||||
//分页分sheet导出excel2003
|
||||
outputStream = new FileOutputStream(new File("E:\\PageSheetExcelExport.xls")); |
||||
PageToSheetExcelExporter sheet = new PageToSheetExcelExporter(ReportUtils.getPaperSettingListFromWorkBook(workbook.execute(parameterMap, new WriteActor()))); |
||||
sheet.export(outputStream, workbook.execute(parameterMap, new WriteActor())); |
||||
|
||||
//分页分sheet导出excel2007
|
||||
outputStream = new FileOutputStream(new File("E:\\PageSheetExcelExport.xlsx")); |
||||
PageToSheetExcel2007Exporter sheet1 = new PageToSheetExcel2007Exporter(ReportUtils.getPaperSettingListFromWorkBook(rworkbook)); |
||||
sheet1.export(outputStream, workbook.execute(parameterMap, new WriteActor())); |
||||
|
||||
//大数据量导出
|
||||
outputStream = new FileOutputStream(new File("E:\\LargeExcelExport.zip")); |
||||
LargeDataPageExcelExporter large = new LargeDataPageExcelExporter(ReportUtils.getPaperSettingListFromWorkBook(workbook.execute(parameterMap, new WriteActor())), true); |
||||
//导出2007版outputStream = new FileOutputStream(new File("E:\\LargeExcelExport.xlsx")); excel LargeDataPageExcel2007Exporter large = new LargeDataPageExcel2007Exporter(ReportUtils.getPaperSettingListFromWorkBook(rworkbook), true);
|
||||
large.export(outputStream, workbook.execute(parameterMap, new WriteActor())); |
||||
|
||||
outputStream.close(); |
||||
ModuleContext.stopModules(); |
||||
} catch (Exception e) { |
||||
e.printStackTrace(); |
||||
} |
||||
} |
||||
} |
@ -1,35 +0,0 @@
|
||||
package com.fr.io; |
||||
|
||||
import com.fr.base.FRContext; |
||||
import com.fr.base.Parameter; |
||||
import com.fr.dav.LocalEnv; |
||||
import com.fr.main.TemplateWorkBook; |
||||
import com.fr.print.PrintUtils; |
||||
|
||||
import java.util.HashMap; |
||||
|
||||
|
||||
public class JavaPrint { |
||||
public static void main(String[] args) { |
||||
// 定义报表运行环境,才能执行报表
|
||||
String envPath = "D:\\FineReport\\develop\\code\\build\\package\\WebReport\\WEB-INF"; |
||||
FRContext.setCurrentEnv(new LocalEnv(envPath)); |
||||
try { |
||||
TemplateWorkBook workbook = TemplateWorkBookIO.readTemplateWorkBook(FRContext.getCurrentEnv(), "GettingStarted.cpt"); |
||||
// 参数传值
|
||||
Parameter[] parameters = workbook.getParameters(); |
||||
HashMap<String, String> paraMap = new HashMap<String, String>(); |
||||
paraMap.put(parameters[0].getName(), "华北"); |
||||
|
||||
// java中调用报表打印方法
|
||||
boolean a = PrintUtils.printWorkBook("GettingStarted.cpt", paraMap, true); |
||||
if (a == false) { |
||||
System.out.println("失败啦!返回" + a); |
||||
} else { |
||||
System.out.println("成功!返回" + a); |
||||
} |
||||
} catch (Exception e) { |
||||
e.printStackTrace(); |
||||
} |
||||
} |
||||
} |
@ -1,76 +0,0 @@
|
||||
package com.fr.output; |
||||
|
||||
import com.fr.data.dao.CompatiableIDFCMapper; |
||||
import com.fr.data.dao.ObjectTableMapper; |
||||
import com.fr.json.JSONException; |
||||
import com.fr.json.JSONObject; |
||||
import com.fr.schedule.output.AbstractOutputFileAction; |
||||
import com.fr.schedule.output.FTPTransmission; |
||||
import com.fr.schedule.output.OutputFileAction; |
||||
import com.fr.schedule.output.ftp.DefaultFTPTransmit; |
||||
|
||||
import java.io.File; |
||||
|
||||
public class FTPUpload extends AbstractOutputFileAction { |
||||
@Override |
||||
public ObjectTableMapper objectTableMapper2Register() { |
||||
return null; |
||||
} |
||||
|
||||
@Override |
||||
public long getId() { |
||||
return 0; |
||||
} |
||||
|
||||
@Override |
||||
public File[] getFilesToDealWith(File[] files) { |
||||
return files; |
||||
} |
||||
|
||||
@Override |
||||
public void doFileAction(File[] files) { |
||||
FTPTransmission ftp = new FTPTransmission(); |
||||
ftp.setServerAddress("env.finedevelop.com"); |
||||
ftp.setPort(58321); |
||||
ftp.setSavePath("connie"); |
||||
ftp.setUsername("fr"); |
||||
ftp.setPassword("ilovejava"); |
||||
try { |
||||
new DefaultFTPTransmit().transmit(files, ftp.getServerAddress(), ftp.getPort(), ftp.getUsername(), ftp.getPassword(), ftp.getSavePath()); |
||||
} catch (Exception e) { |
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace(); |
||||
} |
||||
|
||||
} |
||||
|
||||
@Override |
||||
public CompatiableIDFCMapper getExtraOutputFileActionForeignKey() { |
||||
return null; |
||||
} |
||||
|
||||
@Override |
||||
public boolean isEmailNotification() { |
||||
// TODO Auto-generated method stub
|
||||
return false; |
||||
} |
||||
|
||||
@Override |
||||
public OutputFileAction analyzeJSON(JSONObject arg0) { |
||||
// TODO Auto-generated method stub
|
||||
return null; |
||||
} |
||||
|
||||
@Override |
||||
public JSONObject createJSONConfig() throws JSONException { |
||||
// TODO Auto-generated method stub
|
||||
return null; |
||||
} |
||||
|
||||
@Override |
||||
public String getJsonTag() { |
||||
// TODO Auto-generated method stub
|
||||
return null; |
||||
} |
||||
|
||||
} |
@ -1,100 +0,0 @@
|
||||
package com.fr.output; |
||||
|
||||
import com.fr.data.dao.CompatiableIDFCMapper; |
||||
import com.fr.data.dao.ObjectTableMapper; |
||||
import com.fr.json.JSONException; |
||||
import com.fr.json.JSONObject; |
||||
import com.fr.schedule.output.AbstractOutputFileAction; |
||||
import com.fr.schedule.output.OutputFileAction; |
||||
|
||||
import java.io.BufferedInputStream; |
||||
import java.io.BufferedOutputStream; |
||||
import java.io.File; |
||||
import java.io.FileInputStream; |
||||
import java.io.FileOutputStream; |
||||
import java.io.IOException; |
||||
import java.io.OutputStream; |
||||
|
||||
public class OutputExcel extends AbstractOutputFileAction { |
||||
|
||||
@Override |
||||
public File[] getFilesToDealWith(File[] files) { |
||||
return files; |
||||
} |
||||
|
||||
@Override |
||||
public void doFileAction(File[] files) { |
||||
// OutputStream out=new BufferedOutputStream(new FileOutputStream(new File(files.)));;
|
||||
System.out.println(files[0].getName()); |
||||
for (int i = 0; i < files.length; i++) { |
||||
String name = files[i].getName(); |
||||
String path = "D:/" + name; |
||||
BufferedInputStream in = null; |
||||
OutputStream out = null; |
||||
try { |
||||
out = new BufferedOutputStream(new FileOutputStream(new File(path))); |
||||
in = new BufferedInputStream(new FileInputStream(files[i])); |
||||
byte[] ba = new byte[in.available()]; |
||||
in.read(ba); |
||||
out.write(ba); |
||||
} catch (Exception e) { |
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace(); |
||||
} finally { |
||||
try { |
||||
if (in != null) { |
||||
in.close(); |
||||
} |
||||
if (out != null) { |
||||
out.close(); |
||||
} |
||||
} catch (IOException e) { |
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace(); |
||||
} |
||||
|
||||
} |
||||
|
||||
} |
||||
} |
||||
|
||||
@Override |
||||
public ObjectTableMapper objectTableMapper2Register() { |
||||
return null; |
||||
} |
||||
|
||||
@Override |
||||
public CompatiableIDFCMapper getExtraOutputFileActionForeignKey() { |
||||
return null; |
||||
} |
||||
|
||||
@Override |
||||
public long getId() { |
||||
return 0; |
||||
} |
||||
|
||||
@Override |
||||
public boolean isEmailNotification() { |
||||
// TODO Auto-generated method stub
|
||||
return false; |
||||
} |
||||
|
||||
@Override |
||||
public OutputFileAction analyzeJSON(JSONObject arg0) { |
||||
// TODO Auto-generated method stub
|
||||
return null; |
||||
} |
||||
|
||||
@Override |
||||
public JSONObject createJSONConfig() throws JSONException { |
||||
// TODO Auto-generated method stub
|
||||
return null; |
||||
} |
||||
|
||||
@Override |
||||
public String getJsonTag() { |
||||
// TODO Auto-generated method stub
|
||||
return null; |
||||
} |
||||
|
||||
} |
@ -1,77 +0,0 @@
|
||||
package com.fr.test; |
||||
|
||||
import com.fr.base.FRContext; |
||||
import com.fr.base.Formula; |
||||
import com.fr.general.FArray; |
||||
import com.fr.json.JSONObject; |
||||
import com.fr.script.AbstractFunction; |
||||
import com.fr.script.Calculator; |
||||
import com.fr.stable.Primitive; |
||||
|
||||
public class gauthority extends AbstractFunction { |
||||
public gauthority() { |
||||
} |
||||
|
||||
public Object run(Object[] args) { |
||||
int[] newArgs = new int[args.length]; |
||||
|
||||
for (int i = 0; i < args.length; ++i) { |
||||
if (!(args[i] instanceof Integer) || (Integer) args[i] <= 0) { |
||||
return Primitive.ERROR_NAME; |
||||
} |
||||
|
||||
newArgs[i] = (Integer) args[i]; |
||||
} |
||||
|
||||
FArray res = new FArray(); |
||||
Calculator ca = this.getCalculator(); |
||||
Formula f = new Formula("$fr_userposition"); |
||||
|
||||
try { |
||||
Object dp = ca.eval(f); |
||||
if (dp instanceof FArray) { |
||||
FArray fa = (FArray) dp; |
||||
|
||||
for (int i = 0; i < fa.length(); ++i) { |
||||
JSONObject jo = (JSONObject) fa.elementAt(i); |
||||
String dName = jo.getString("jobTitle"); |
||||
if (newArgs.length == 0) { |
||||
res.add(dName); |
||||
} else { |
||||
String[] dNames = dName.split(","); |
||||
res.add(this.buildRes(dNames, newArgs)); |
||||
} |
||||
} |
||||
} |
||||
} catch (Exception var12) { |
||||
FRContext.getLogger().error(var12.getMessage(), var12); |
||||
} |
||||
|
||||
return res; |
||||
} |
||||
|
||||
private String buildRes(String[] dNames, int[] args) { |
||||
StringBuffer sb = new StringBuffer(); |
||||
|
||||
for (int i = 0; i < args.length; ++i) { |
||||
int index = args[i]; |
||||
if (dNames.length >= index) { |
||||
sb.append(dNames[index - 1]).append(","); |
||||
} |
||||
} |
||||
|
||||
return sb.substring(0, sb.length() > 0 ? sb.length() - 1 : 0); |
||||
} |
||||
|
||||
public Type getType() { |
||||
return OTHER; |
||||
} |
||||
|
||||
public String getCN() { |
||||
return "GETUSERDEPARTMENTS():返回角色部门\n示例:\nGETUSERDEPARTMENTS():返回角色所有部门,若多个部门则数组\nGETUSERDEPARTMENTS(3,2):返回角色该部门的第三层和第二层名字,\n若多个部门则返回数组,若没有第三层则只显示第二层"; |
||||
} |
||||
|
||||
public String getEN() { |
||||
return ""; |
||||
} |
||||
} |
@ -0,0 +1,11 @@
|
||||
public class SimpleService |
||||
{ |
||||
public String getGreeting(String name) |
||||
{ |
||||
return "你好 " + name; |
||||
} |
||||
public int getPrice() |
||||
{ |
||||
return new java.util.Random().nextInt(1000); |
||||
} |
||||
} |
@ -0,0 +1,8 @@
|
||||
public class TestWS2TDClient { |
||||
public String[][] getTD() { |
||||
String[][] a = { { "城市", "销售员", "销售额" }, { "江苏", "Anna", "230" }, { "江苏", "Alex", "190" }, |
||||
|
||||
{ "江苏", "Jack", "320" }, { "江苏", "Apple", "210" }, { "浙江", "Faye", "150" }, { "浙江", "Sammi", "280" } }; |
||||
return a; |
||||
} |
||||
} |
@ -0,0 +1,111 @@
|
||||
package com.fr; |
||||
|
||||
import com.fr.data.NetworkHelper; |
||||
import com.fr.decision.mobile.terminal.TerminalHandler; |
||||
import com.fr.decision.webservice.utils.DecisionServiceConstants; |
||||
import com.fr.decision.webservice.v10.login.LoginService; |
||||
import com.fr.general.ComparatorUtils; |
||||
import com.fr.log.FineLoggerFactory; |
||||
import com.fr.security.JwtUtils; |
||||
import com.fr.stable.StringUtils; |
||||
import com.fr.stable.web.Device; |
||||
import org.jasig.cas.client.validation.Assertion; |
||||
import javax.servlet.Filter; |
||||
import javax.servlet.FilterChain; |
||||
import javax.servlet.FilterConfig; |
||||
import javax.servlet.ServletException; |
||||
import javax.servlet.ServletRequest; |
||||
import javax.servlet.ServletResponse; |
||||
import javax.servlet.http.HttpServletRequest; |
||||
import javax.servlet.http.HttpServletResponse; |
||||
import javax.servlet.http.HttpSession; |
||||
import java.io.IOException; |
||||
|
||||
/** |
||||
* Created by Zed on 2018/9/11. |
||||
*/ |
||||
public class FrFilter implements Filter { |
||||
|
||||
public FrFilter() { |
||||
|
||||
} |
||||
|
||||
@Override |
||||
public void init(FilterConfig filterConfig) throws ServletException { |
||||
|
||||
} |
||||
|
||||
@Override |
||||
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { |
||||
FineLoggerFactory.getLogger().info("fr cas login"); |
||||
HttpServletRequest req = (HttpServletRequest) servletRequest; |
||||
HttpServletResponse res = (HttpServletResponse) servletResponse; |
||||
HttpSession session = req.getSession(true); |
||||
FineLoggerFactory.getLogger().info("URL:" + req.getRequestURI()); |
||||
String username; |
||||
//获取cas传递过来的username
|
||||
Object object = req.getSession().getAttribute("_const_cas_assertion_"); |
||||
if (object != null) { |
||||
Assertion assertion = (Assertion) object; |
||||
username = assertion.getPrincipal().getName(); |
||||
} else { |
||||
username = (String) session.getAttribute("edu.yale.its.tp.cas.client.filter.user"); |
||||
} |
||||
|
||||
try { |
||||
//用户名为空,登录请求有问题,直接报错
|
||||
if (StringUtils.isNotEmpty(username)) { |
||||
FineLoggerFactory.getLogger().info("username:" + username); |
||||
//获取请求携带的token
|
||||
Object oldToken = session.getAttribute(DecisionServiceConstants.FINE_AUTH_TOKEN_NAME); |
||||
|
||||
//token不存在,或者token过期了,走后台登录方法
|
||||
if (oldToken == null || !checkTokenValid(req, (String) oldToken, username)) { |
||||
login(req, res, session, username); |
||||
filterChain.doFilter(req, res); |
||||
} else { |
||||
//放行
|
||||
filterChain.doFilter(req, res); |
||||
FineLoggerFactory.getLogger().info("no need"); |
||||
} |
||||
} else { |
||||
throw new Exception("username is empty"); |
||||
} |
||||
} catch (Exception e) { |
||||
FineLoggerFactory.getLogger().error(e.getMessage(), e); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* 后台登录方法 |
||||
*/ |
||||
private void login(HttpServletRequest req, HttpServletResponse res, HttpSession session, String username) throws Exception { |
||||
String token = LoginService.getInstance().login(req, res, username); |
||||
req.setAttribute(DecisionServiceConstants.FINE_AUTH_TOKEN_NAME, token); |
||||
FineLoggerFactory.getLogger().info("fr FrFilter is over with username is ###" + username); |
||||
} |
||||
|
||||
/** |
||||
* 校验token是否有效 |
||||
*/ |
||||
private boolean checkTokenValid(HttpServletRequest req, String token, String currentUserName) { |
||||
try { |
||||
//当前登录用户和token对应的用户名不同,需要重新生成token
|
||||
if (!ComparatorUtils.equals(currentUserName, JwtUtils.parseJWT(token).getSubject())) { |
||||
FineLoggerFactory.getLogger().info("username changed:" + currentUserName); |
||||
return false; |
||||
} |
||||
Device device = NetworkHelper.getDevice(req); |
||||
LoginService.getInstance().loginStatusValid(token, TerminalHandler.getTerminal(req, device)); |
||||
return true; |
||||
} catch (Exception ignore) { |
||||
} |
||||
|
||||
return false; |
||||
} |
||||
|
||||
@Override |
||||
public void destroy() { |
||||
|
||||
} |
||||
} |
@ -0,0 +1,60 @@
|
||||
package com.fr; |
||||
|
||||
import com.fr.decision.authority.data.User; |
||||
import com.fr.decision.webservice.exception.user.UserNotExistException; |
||||
import com.fr.decision.webservice.v10.login.LoginService; |
||||
import com.fr.decision.webservice.v10.login.TokenResource; |
||||
import com.fr.decision.webservice.v10.user.UserService; |
||||
import com.fr.log.FineLoggerFactory; |
||||
import com.fr.stable.StringUtils; |
||||
import com.fr.web.utils.WebUtils; |
||||
import java.io.IOException; |
||||
import javax.servlet.Filter; |
||||
import javax.servlet.FilterChain; |
||||
import javax.servlet.FilterConfig; |
||||
import javax.servlet.ServletException; |
||||
import javax.servlet.ServletRequest; |
||||
import javax.servlet.ServletResponse; |
||||
import javax.servlet.http.HttpServletRequest; |
||||
import javax.servlet.http.HttpServletResponse; |
||||
|
||||
public class FrLoginFilter implements Filter { |
||||
public FrLoginFilter() { |
||||
} |
||||
|
||||
public void init(FilterConfig filterConfig) throws ServletException { |
||||
} |
||||
|
||||
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { |
||||
HttpServletRequest req = (HttpServletRequest)servletRequest; |
||||
HttpServletResponse res = (HttpServletResponse)servletResponse; |
||||
String username = WebUtils.getHTTPRequestParameter(req, "username"); |
||||
|
||||
try { |
||||
if (StringUtils.isNotEmpty(username)) { |
||||
FineLoggerFactory.getLogger().error("username:" + username); |
||||
User user = UserService.getInstance().getUserByUserName(username); |
||||
if (user == null) { |
||||
throw new UserNotExistException(); |
||||
} |
||||
|
||||
String oldToken = TokenResource.COOKIE.getToken(req); |
||||
if (oldToken == null) { |
||||
String token = LoginService.getInstance().login(req, res, username); |
||||
req.setAttribute("fine_auth_token", token); |
||||
filterChain.doFilter(req, res); |
||||
} else { |
||||
filterChain.doFilter(req, res); |
||||
} |
||||
} else { |
||||
filterChain.doFilter(req, res); |
||||
} |
||||
} catch (Exception var10) { |
||||
FineLoggerFactory.getLogger().error(var10.getMessage(), var10); |
||||
} |
||||
|
||||
} |
||||
|
||||
public void destroy() { |
||||
} |
||||
} |
@ -0,0 +1,228 @@
|
||||
package com.fr; |
||||
|
||||
import java.security.*; |
||||
import javax.net.ssl.*; |
||||
import com.fr.third.org.hsqldb.lib.*; |
||||
import java.net.*; |
||||
import java.io.*; |
||||
import java.security.cert.CertificateException; |
||||
import java.security.cert.X509Certificate; |
||||
import java.util.HashMap; |
||||
import java.util.Map; |
||||
|
||||
public class HttpUtil |
||||
{ |
||||
private static final String DEFAULT_CHARSET = "UTF-8"; |
||||
private static final String METHOD_POST = "POST"; |
||||
private static final String METHOD_GET = "GET"; |
||||
private static final int CONNECTTIMEOUT = 5000; |
||||
private static final int READTIMEOUT = 5000; |
||||
|
||||
private static class DefaultTrustManager implements X509TrustManager { |
||||
|
||||
@Override |
||||
public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException { |
||||
|
||||
} |
||||
|
||||
@Override |
||||
public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException { |
||||
|
||||
} |
||||
|
||||
@Override |
||||
public X509Certificate[] getAcceptedIssuers() { |
||||
return null; |
||||
} |
||||
} |
||||
private static HttpURLConnection getConnection(final URL url, final String method, final String ctype) throws IOException { |
||||
HttpURLConnection conn = null; |
||||
if ("https".equals(url.getProtocol())) { |
||||
SSLContext ctx = null; |
||||
try { |
||||
ctx = SSLContext.getInstance("TLS"); |
||||
ctx.init(new KeyManager[0], new TrustManager[] { new DefaultTrustManager() }, new SecureRandom()); |
||||
} |
||||
catch (Exception e) { |
||||
throw new IOException(e); |
||||
} |
||||
final HttpsURLConnection connHttps = (HttpsURLConnection)url.openConnection(); |
||||
connHttps.setSSLSocketFactory(ctx.getSocketFactory()); |
||||
connHttps.setHostnameVerifier(new HostnameVerifier() { |
||||
@Override |
||||
public boolean verify(String s, SSLSession sslSession) { |
||||
return true; |
||||
} |
||||
}); |
||||
conn = connHttps; |
||||
} |
||||
else { |
||||
conn = (HttpURLConnection)url.openConnection(); |
||||
} |
||||
conn.setRequestMethod(method); |
||||
conn.setDoInput(true); |
||||
conn.setDoOutput(true); |
||||
conn.setRequestProperty("User-Agent", "quantangle- apiclient-java"); |
||||
conn.setRequestProperty("Content-Type", ctype); |
||||
conn.setRequestProperty("Connection", "Keep-Alive"); |
||||
return conn; |
||||
} |
||||
|
||||
public static String doGet(final String url, final Map<String, String> params) throws IOException { |
||||
return doGet(url, params, "UTF-8"); |
||||
} |
||||
|
||||
public static String doGet(String url, final Map<String, String> params, final String charset) throws IOException { |
||||
if (StringUtil.isEmpty(url) || params == null) { |
||||
return null; |
||||
} |
||||
String response = ""; |
||||
url = url + "?" + buildQuery(params, charset); |
||||
HttpURLConnection conn = null; |
||||
final String ctype = "application/x-www-form- urlencoded;charset=" + charset; |
||||
conn = getConnection(new URL(url), "GET", ctype); |
||||
response = getResponseAsString(conn); |
||||
return response; |
||||
} |
||||
|
||||
public static String doPost(final String url, final Map<String, String> params) throws IOException { |
||||
return doPost(url, params, 5000, 5000); |
||||
} |
||||
|
||||
public static String doPost(final String url, final Map<String, String> params, final int connectTimeOut, final int readTimeOut) throws IOException { |
||||
return doPost(url, params, "UTF-8", connectTimeOut, readTimeOut); |
||||
} |
||||
|
||||
public static String doPost(final String url, final Map<String, String> params, final String charset, final int connectTimeOut, final int readTimeOut) throws IOException { |
||||
HttpURLConnection conn = null; |
||||
String response = ""; |
||||
final String ctype = "application/x-www-form- urlencoded;charset=" + charset; |
||||
conn = getConnection(new URL(url), "POST", ctype); |
||||
conn.setConnectTimeout(connectTimeOut); |
||||
conn.setReadTimeout(readTimeOut); |
||||
conn.getOutputStream().write(buildQuery(params, charset).getBytes(charset)); |
||||
response = getResponseAsString(conn); |
||||
return response; |
||||
} |
||||
|
||||
public static String buildQuery(final Map<String, String> params, final String charset) { |
||||
if (params == null || params.isEmpty()) { |
||||
return null; |
||||
} |
||||
final StringBuilder sb = new StringBuilder(); |
||||
boolean first = true; |
||||
for (final Map.Entry<String, String> entry : params.entrySet()) { |
||||
if (first) { |
||||
first = false; |
||||
} |
||||
else { |
||||
sb.append("&"); |
||||
} |
||||
final String key = entry.getKey(); |
||||
final String value = entry.getValue(); |
||||
if (!StringUtil.isEmpty(key) && !StringUtil.isEmpty(value)) { |
||||
try { |
||||
sb.append(key).append("=").append(URLEncoder.encode(value, charset)); |
||||
} |
||||
catch (UnsupportedEncodingException ex) {} |
||||
} |
||||
} |
||||
return sb.toString(); |
||||
} |
||||
|
||||
public static Map<String, String> splitQuery(final String query, final String charset) { |
||||
final Map<String, String> ret = new HashMap<String, String>(); |
||||
if (!StringUtil.isEmpty(query)) { |
||||
final String[] split2; |
||||
final String[] splits = split2 = query.split("\\&"); |
||||
for (final String split : split2) { |
||||
final String[] keyAndValue = split.split("\\="); |
||||
boolean flag = true; |
||||
for (int i = 0, len = keyAndValue.length; i < len; ++i) { |
||||
if (StringUtil.isEmpty(keyAndValue[i])) { |
||||
flag = false; |
||||
break; |
||||
} |
||||
} |
||||
if (flag && keyAndValue.length == 2) { |
||||
try { |
||||
ret.put(keyAndValue[0], URLDecoder.decode(keyAndValue[1], charset)); |
||||
} |
||||
catch (UnsupportedEncodingException ex) {} |
||||
} |
||||
} |
||||
} |
||||
return ret; |
||||
} |
||||
|
||||
private static byte[] getTextEntry(final String fieldName, final String fieldValue, final String charset) throws IOException { |
||||
final StringBuilder entry = new StringBuilder(); |
||||
entry.append("Content-Disposition:form-data;name=\""); |
||||
entry.append(fieldName); |
||||
entry.append("\"\r\nContent-Type:text/plain\r\n\r\n"); |
||||
entry.append(fieldValue); |
||||
return entry.toString().getBytes(charset); |
||||
} |
||||
|
||||
private static byte[] getFileEntry(final String fieldName, final String fileName, final String mimeType, final String charset) throws IOException { |
||||
final StringBuilder entry = new StringBuilder(); |
||||
entry.append("Content-Disposition:form-data;name=\""); |
||||
entry.append(fieldName); |
||||
entry.append("\";filename=\""); |
||||
entry.append(fileName); |
||||
entry.append("\"\r\nContent-Type:"); |
||||
entry.append(mimeType); |
||||
entry.append("\r\n\r\n"); |
||||
return entry.toString().getBytes(charset); |
||||
} |
||||
|
||||
private static String getResponseAsString(final HttpURLConnection conn) throws IOException { |
||||
final String charset = getResponseCharset(conn.getContentType()); |
||||
final InputStream es = conn.getErrorStream(); |
||||
if (es == null) { |
||||
return getStreamAsString(conn.getInputStream(), charset); |
||||
} |
||||
final String msg = getStreamAsString(es, charset); |
||||
if (StringUtil.isEmpty(msg)) { |
||||
throw new IOException("{\"" + conn.getResponseCode() + "\":\"" + conn.getResponseMessage() + "\"}"); |
||||
} |
||||
throw new IOException(msg); |
||||
} |
||||
|
||||
private static String getStreamAsString(final InputStream input, final String charset) throws IOException { |
||||
final StringBuilder sb = new StringBuilder(); |
||||
BufferedReader bf = null; |
||||
try { |
||||
bf = new BufferedReader(new InputStreamReader(input, charset)); |
||||
String str; |
||||
while ((str = bf.readLine()) != null) { |
||||
sb.append(str); |
||||
} |
||||
return sb.toString(); |
||||
} |
||||
finally { |
||||
if (bf != null) { |
||||
bf.close(); |
||||
bf = null; |
||||
} |
||||
} |
||||
} |
||||
|
||||
private static String getResponseCharset(final String ctype) { |
||||
String charset = "UTF-8"; |
||||
if (!StringUtil.isEmpty(ctype)) { |
||||
final String[] split; |
||||
final String[] params = split = ctype.split("\\;"); |
||||
for (String param : split) { |
||||
param = param.trim(); |
||||
if (param.startsWith("charset")) { |
||||
final String[] pair = param.split("\\="); |
||||
if (pair.length == 2) { |
||||
charset = pair[1].trim(); |
||||
} |
||||
} |
||||
} |
||||
} |
||||
return charset; |
||||
} |
||||
} |
@ -0,0 +1,111 @@
|
||||
package com.fr; |
||||
|
||||
import java.io.InputStream; |
||||
import java.io.OutputStream; |
||||
import java.io.PrintWriter; |
||||
import java.net.URL; |
||||
import java.net.URLConnection; |
||||
import java.security.SecureRandom; |
||||
import java.security.cert.CertificateException; |
||||
import java.security.cert.X509Certificate; |
||||
import java.util.Iterator; |
||||
import java.util.Map; |
||||
import java.util.Map.Entry; |
||||
import javax.net.ssl.HostnameVerifier; |
||||
import javax.net.ssl.HttpsURLConnection; |
||||
import javax.net.ssl.KeyManager; |
||||
import javax.net.ssl.SSLContext; |
||||
import javax.net.ssl.SSLSession; |
||||
import javax.net.ssl.TrustManager; |
||||
import javax.net.ssl.X509TrustManager; |
||||
|
||||
import org.apache.oltu.oauth2.client.HttpClient; |
||||
import org.apache.oltu.oauth2.client.request.OAuthClientRequest; |
||||
import org.apache.oltu.oauth2.client.response.OAuthClientResponse; |
||||
import org.apache.oltu.oauth2.client.response.OAuthClientResponseFactory; |
||||
import org.apache.oltu.oauth2.common.exception.OAuthProblemException; |
||||
import org.apache.oltu.oauth2.common.exception.OAuthSystemException; |
||||
import org.apache.oltu.oauth2.common.utils.OAuthUtils; |
||||
|
||||
public class SSLConnectionClient implements HttpClient { |
||||
public SSLConnectionClient() { |
||||
} |
||||
|
||||
public <T extends OAuthClientResponse> T execute(OAuthClientRequest request, Map<String, String> headers, String requestMethod, Class<T> responseClass) throws OAuthSystemException, OAuthProblemException { |
||||
String responseBody = null; |
||||
URLConnection c = null; |
||||
boolean var7 = false; |
||||
|
||||
int responseCode; |
||||
try { |
||||
URL url = new URL(request.getLocationUri()); |
||||
c = url.openConnection(); |
||||
responseCode = -1; |
||||
if (c instanceof HttpsURLConnection) { |
||||
HttpsURLConnection httpsURLConnection = (HttpsURLConnection) c; |
||||
SSLContext sslContext = SSLContext.getInstance("TLS"); |
||||
sslContext.init((KeyManager[]) null, new TrustManager[]{new TrustAnyTrustManager()}, new SecureRandom()); |
||||
httpsURLConnection.setSSLSocketFactory(sslContext.getSocketFactory()); |
||||
httpsURLConnection.setHostnameVerifier(new TrustAnyHostnameVerifier()); |
||||
if (headers != null && !headers.isEmpty()) { |
||||
Iterator var11 = headers.entrySet().iterator(); |
||||
|
||||
while (var11.hasNext()) { |
||||
Entry<String, String> header = (Entry) var11.next(); |
||||
httpsURLConnection.addRequestProperty((String) header.getKey(), (String) header.getValue()); |
||||
} |
||||
} |
||||
|
||||
if (!OAuthUtils.isEmpty(requestMethod)) { |
||||
httpsURLConnection.setRequestMethod(requestMethod); |
||||
if (requestMethod.equals("POST")) { |
||||
httpsURLConnection.setDoOutput(true); |
||||
OutputStream ost = httpsURLConnection.getOutputStream(); |
||||
PrintWriter pw = new PrintWriter(ost); |
||||
pw.print(request.getBody()); |
||||
pw.flush(); |
||||
pw.close(); |
||||
} |
||||
} else { |
||||
httpsURLConnection.setRequestMethod("GET"); |
||||
} |
||||
|
||||
httpsURLConnection.connect(); |
||||
responseCode = httpsURLConnection.getResponseCode(); |
||||
InputStream inputStream; |
||||
if (responseCode == 400) { |
||||
inputStream = httpsURLConnection.getErrorStream(); |
||||
} else { |
||||
inputStream = httpsURLConnection.getInputStream(); |
||||
} |
||||
|
||||
responseBody = OAuthUtils.saveStreamAsString(inputStream); |
||||
} |
||||
} catch (Exception var13) { |
||||
throw new OAuthSystemException(var13); |
||||
} |
||||
|
||||
return OAuthClientResponseFactory.createCustomResponse(responseBody, c.getContentType(), responseCode, responseClass); |
||||
} |
||||
|
||||
public void shutdown() { |
||||
} |
||||
|
||||
static class TrustAnyTrustManager implements X509TrustManager { |
||||
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { |
||||
} |
||||
|
||||
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { |
||||
} |
||||
|
||||
public X509Certificate[] getAcceptedIssuers() { |
||||
return new X509Certificate[]{}; |
||||
} |
||||
} |
||||
|
||||
static class TrustAnyHostnameVerifier implements HostnameVerifier { |
||||
public boolean verify(String hostname, SSLSession session) { |
||||
return true; |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,58 @@
|
||||
import com.fr.cert.token.JwtBuilder; |
||||
import com.fr.cert.token.Jwts; |
||||
import com.fr.cert.token.SignatureAlgorithm; |
||||
import sun.misc.BASE64Encoder; |
||||
import javax.crypto.Mac; |
||||
import javax.crypto.spec.SecretKeySpec; |
||||
import java.util.Date; |
||||
|
||||
public class Test2 { |
||||
|
||||
public static void main(String[] args) { |
||||
//数字签名有效时长
|
||||
long validTime = 30 * 60 * 1000; |
||||
//数字签名内容,以访问资源的相对路径作为内容
|
||||
String path = "GettingStarted.cpt"; |
||||
//数字签名用的HS256的密钥
|
||||
String key = createSecret(); |
||||
//生成fine_digital_signature
|
||||
String fine_digital_signature = createJwt("", "", path, validTime, key); |
||||
//输出密钥
|
||||
System.out.println(key); |
||||
//输出fine_digital_signature
|
||||
System.out.println(fine_digital_signature); |
||||
} |
||||
|
||||
private static String createJwt(String issuer, String id, String subject, long validTime, String key) { |
||||
SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256; |
||||
Date currentTime = new Date(); |
||||
Date expirationTime = new Date(currentTime.getTime() + validTime); |
||||
JwtBuilder builder = Jwts.builder() |
||||
.setIssuer(issuer) |
||||
.setSubject(subject) |
||||
.setIssuedAt(currentTime) |
||||
.setExpiration(expirationTime) |
||||
.setId(id) |
||||
.signWith(signatureAlgorithm, key); |
||||
return builder.compact(); |
||||
} |
||||
|
||||
private static String createSecret() { |
||||
try { |
||||
//secret可以自定义的
|
||||
String secret = "2222222"; |
||||
String message = ""; |
||||
Mac sha256Hmac = Mac.getInstance("HmacSHA256"); |
||||
SecretKeySpec secret_key = new SecretKeySpec(secret.getBytes(), "HmacSHA256"); |
||||
sha256Hmac.init(secret_key); |
||||
BASE64Encoder encoder = new BASE64Encoder(); |
||||
String hash = encoder.encode(sha256Hmac.doFinal(message.getBytes())); |
||||
return hash; |
||||
|
||||
} catch (Exception e) { |
||||
System.out.println(e.getMessage()); |
||||
} |
||||
return ""; |
||||
} |
||||
|
||||
} |
@ -1,8 +1,5 @@
|
||||
package com.fr.data; |
||||
|
||||
/** |
||||
* @author fanruan |
||||
*/ |
||||
public class ArrayTableDataDemo extends AbstractTableData { |
||||
/** |
||||
* 定义程序数据集的列名与数据保存位置 |
@ -1,11 +1,10 @@
|
||||
package com.fr.data; |
||||
|
||||
import com.fr.stable.xml.XMLReadable; |
||||
import com.fr.stable.xml.XMLableReader; |
||||
|
||||
import java.io.InputStream; |
||||
import java.io.InputStreamReader; |
||||
import java.io.Reader; |
||||
import com.fr.stable.xml.XMLReadable; |
||||
import com.fr.stable.xml.XMLableReader; |
||||
|
||||
public class GetXmlDate { |
||||
// 定义返回值数组
|
@ -0,0 +1,29 @@
|
||||
package com.fr.data; |
||||
|
||||
import java.util.ArrayList; |
||||
import java.util.List; |
||||
|
||||
public class SimpleArrayTableDataDemo extends SimpleTableData { |
||||
|
||||
/** |
||||
* 初始化列头 |
||||
* @return |
||||
*/ |
||||
@Override |
||||
public String[] initColumnNames() { |
||||
return new String[]{"Name", "Score"}; |
||||
} |
||||
|
||||
/** |
||||
* 加载行列数据 |
||||
* @return |
||||
*/ |
||||
@Override |
||||
public List<Object[]> loadData() { |
||||
ArrayList<Object[]> valueList = new ArrayList(); |
||||
valueList.add(new Object[]{"Alex", 15}); |
||||
valueList.add(new Object[]{"Helly", 22}); |
||||
valueList.add(new Object[]{"Bobby", 99}); |
||||
return valueList; |
||||
} |
||||
} |
@ -0,0 +1,100 @@
|
||||
package com.fr.data; |
||||
|
||||
import com.fr.file.ConnectionConfig; |
||||
import com.fr.log.FineLoggerFactory; |
||||
import com.fr.stable.ParameterProvider; |
||||
|
||||
import java.sql.Connection; |
||||
import java.sql.DriverManager; |
||||
import java.sql.ResultSet; |
||||
import java.sql.ResultSetMetaData; |
||||
import java.sql.SQLException; |
||||
import java.sql.Statement; |
||||
import java.util.ArrayList; |
||||
import java.util.List; |
||||
|
||||
/** |
||||
* 带参数的程序数据集Demo 跟ParamTableDataDemo功能一样,但实现更简单 |
||||
* |
||||
* @author fanruan |
||||
*/ |
||||
public class SimpleParamTableDataDemo extends SimpleTableData { |
||||
|
||||
@Override |
||||
public String[] initColumnNames() { |
||||
String[] columnNames = new String[10]; |
||||
for (int i = 0; i < 10; i++) { |
||||
columnNames[i] = "column#" + i; |
||||
} |
||||
return columnNames; |
||||
} |
||||
|
||||
@Override |
||||
public List<Object[]> loadData() { |
||||
// 保存得到的数据库表名
|
||||
String tableName = ((ParameterProvider) (parameters.get().toArray())[0]).getValue().toString(); |
||||
|
||||
// 构造SQL语句,并打印出来
|
||||
String sql = "select * from " + tableName; |
||||
FineLoggerFactory.getLogger().info("Query SQL of ParamTableDataDemo: \n" + sql); |
||||
// 保存得到的结果集
|
||||
ArrayList<Object[]> valueList = new ArrayList(); |
||||
// 下面开始建立数据库连接,按照刚才的SQL语句进行查询
|
||||
// 根据连接名获取FR数据连接定义的数据连接,如果没有定义,也可以参考getConnection方法自己创建连接
|
||||
com.fr.data.impl.Connection conn = ConnectionConfig.getInstance().getConnection("FRDemo"); |
||||
Connection con = null; |
||||
try { |
||||
con = conn.createConnection(); |
||||
Statement stmt = con.createStatement(); |
||||
ResultSet rs = stmt.executeQuery(sql); |
||||
// 获得记录的详细信息,然后获得总列数
|
||||
ResultSetMetaData rsmd = rs.getMetaData(); |
||||
int colNum = rsmd.getColumnCount(); |
||||
// 用对象保存数据
|
||||
Object[] objArray = null; |
||||
while (rs.next()) { |
||||
objArray = new Object[colNum]; |
||||
for (int i = 0; i < colNum; i++) { |
||||
objArray[i] = rs.getObject(i + 1); |
||||
} |
||||
// 在valueList中加入这一行数据
|
||||
valueList.add(objArray); |
||||
} |
||||
// 释放数据库资源
|
||||
rs.close(); |
||||
stmt.close(); |
||||
} catch (Exception e) { |
||||
FineLoggerFactory.getLogger().error(e.getMessage(), e); |
||||
} finally { |
||||
try { |
||||
if (con != null) { |
||||
con.close(); |
||||
} |
||||
} catch (SQLException e) { |
||||
FineLoggerFactory.getLogger().error(e.getMessage(), e); |
||||
} |
||||
} |
||||
return valueList; |
||||
} |
||||
/** |
||||
* 获取数据库连接 driverName和 url 可以换成您需要的 |
||||
* |
||||
* @return Connection |
||||
*/ |
||||
private Connection getConnection() { |
||||
|
||||
String driverName = "org.sqlite.JDBC"; |
||||
String url = "jdbc:sqlite:////Applications//FineReport10_325//webapps//webroot//help//FRDemo.db"; |
||||
String username = ""; |
||||
String password = ""; |
||||
Connection con = null; |
||||
try { |
||||
Class.forName(driverName); |
||||
con = DriverManager.getConnection(url, username, password); |
||||
|
||||
} catch (Exception e) { |
||||
FineLoggerFactory.getLogger().error(e.getMessage(), e); |
||||
} |
||||
return con; |
||||
} |
||||
} |
@ -0,0 +1,86 @@
|
||||
package com.fr.data; |
||||
|
||||
import com.fr.general.data.TableDataException; |
||||
import com.fr.log.FineLoggerFactory; |
||||
import com.fr.stable.ParameterProvider; |
||||
import org.apache.axis.client.Call; |
||||
import org.apache.axis.client.Service; |
||||
|
||||
import javax.xml.namespace.QName; |
||||
import java.util.ArrayList; |
||||
import java.util.List; |
||||
|
||||
public class WebServiceTableData extends SimpleTableData { |
||||
|
||||
/** |
||||
* 初始化列名数组 |
||||
* |
||||
* @return {col1,col2,col3...} |
||||
* @throws TableDataException |
||||
*/ |
||||
@Override |
||||
public String[] initColumnNames() { |
||||
String[] columnNames = new String[10]; |
||||
for (int i = 0; i < 10; i++) { |
||||
columnNames[i] = "column#" + i; |
||||
} |
||||
return columnNames; |
||||
} |
||||
|
||||
/** |
||||
* 加载数据 |
||||
* |
||||
* @return 行列数据 |
||||
*/ |
||||
@Override |
||||
public List<Object[]> loadData() { |
||||
String tableName = ((ParameterProvider) (parameters.get().toArray())[0]).getValue().toString(); |
||||
FineLoggerFactory.getLogger().info("Query SQL of ParamTableDataDemo: \n" + tableName); |
||||
|
||||
// 保存得到的结果集
|
||||
ArrayList<Object[]> valueList = new ArrayList(); |
||||
|
||||
try { |
||||
// 调用 Web 服务获取数据
|
||||
String[][] data = createData(); |
||||
|
||||
// 如果数据为空,直接返回空列表
|
||||
if (data == null || data.length == 0) { |
||||
return valueList; |
||||
} |
||||
|
||||
// 获得总列数
|
||||
int colNum = data[0].length; |
||||
|
||||
// 用对象保存数据
|
||||
Object[] objArray = null; |
||||
for (int rowIndex = 1; rowIndex < data.length; rowIndex++) { |
||||
objArray = new Object[colNum]; |
||||
for (int i = 0; i < colNum; i++) { |
||||
objArray[i] = data[rowIndex][i]; |
||||
} |
||||
// 在valueList中加入这一行数据
|
||||
valueList.add(objArray); |
||||
} |
||||
} catch (Exception e) { |
||||
FineLoggerFactory.getLogger().error(e.getMessage(), e); |
||||
} |
||||
return valueList; |
||||
} |
||||
|
||||
public String[][] createData() { |
||||
try { |
||||
String endpoint = "http://localhost:8080/axis/TestWS2TDClient.jws"; |
||||
Service service = new Service(); |
||||
Call call = (Call) service.createCall(); |
||||
call.setTargetEndpointAddress(new java.net.URL(endpoint)); |
||||
call.setOperationName(new QName("http://localhost:8080/axis/TestWS2TDClient.jws", |
||||
"getTD")); |
||||
String[][] ret = (String[][])call.invoke(new Object[] {}); |
||||
return ret; |
||||
} catch (Exception e) { |
||||
e.printStackTrace(); |
||||
} |
||||
return new String[][] {}; |
||||
} |
||||
} |
@ -0,0 +1,50 @@
|
||||
package com.fr.data; |
||||
|
||||
import javax.servlet.http.HttpSession; |
||||
import java.io.IOException; |
||||
import java.io.PrintWriter; |
||||
import java.lang.String; |
||||
import javax.servlet.ServletException; |
||||
import javax.servlet.http.HttpServlet; |
||||
import javax.servlet.http.HttpServletRequest; |
||||
import javax.servlet.http.HttpServletResponse; |
||||
import com.fr.stable.CodeUtils; |
||||
|
||||
public class session extends HttpServlet { |
||||
public void doGet(HttpServletRequest request, |
||||
HttpServletResponse response) |
||||
throws IOException, ServletException |
||||
{ |
||||
response.setContentType("text/html; charset=gb2312"); |
||||
|
||||
PrintWriter out = response.getWriter(); |
||||
out.println("<html>"); |
||||
out.println("<body>"); |
||||
String urlid=request.getParameter("id"); //获取url通过ajax传递的值
|
||||
HttpSession session=request.getSession(true); |
||||
if(urlid==""||urlid==null){ |
||||
out.print("<form action=\""); |
||||
out.print("session\" "); |
||||
out.println("method=POST>"); |
||||
out.println("set session:<input type=text name=sessionvalue>"); |
||||
out.println("<input type=submit name=bbb value=tijiao>"); |
||||
out.println("</form>"); |
||||
if(request.getParameter("sessionvalue")!=null&&request.getParameter("sessionvalue")!=""){ |
||||
session.setAttribute("sessionname", request.getParameter("sessionvalue")); |
||||
} |
||||
} |
||||
else{ |
||||
urlid = CodeUtils.decodeText(urlid); |
||||
session.setAttribute("sessionname",urlid); //将值赋值给sessionname这个session中
|
||||
out.println("<script language='javascript'>window.close();</script>"); |
||||
} |
||||
out.println("</body>"); |
||||
out.println("</html>"); |
||||
} |
||||
public void doPost(HttpServletRequest request, |
||||
HttpServletResponse response) |
||||
throws IOException, ServletException |
||||
{ |
||||
doGet(request, response); |
||||
} |
||||
} |
@ -0,0 +1,19 @@
|
||||
package com.fr.decision.privilege.encrpt;; |
||||
import com.fr.base.Base64; |
||||
import com.fr.base.ServerConfig; |
||||
import com.fr.decision.privilege.encrpt.AbstractPasswordValidator; |
||||
import com.fr.log.FineLoggerFactory; |
||||
import java.io.UnsupportedEncodingException; |
||||
public class Base64PasswordValidator extends AbstractPasswordValidator { |
||||
public Base64PasswordValidator() { |
||||
|
||||
} |
||||
public String encode(String originText) { |
||||
try { |
||||
return Base64.encode(originText.getBytes(ServerConfig.getInstance().getServerCharset())); |
||||
} catch (UnsupportedEncodingException var3) { |
||||
FineLoggerFactory.getLogger().debug(var3.getMessage()); |
||||
return ""; |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,14 @@
|
||||
package com.fr.decision.privilege.encrpt; |
||||
|
||||
import com.fr.security.SecurityToolbox; |
||||
|
||||
public class CustomSHA256PasswordValidator extends AbstractPasswordValidator { |
||||
public CustomSHA256PasswordValidator() { |
||||
} |
||||
|
||||
@Override |
||||
public String encode(String originUserName, String originPassword) { //把 用户名+密码 加密成 SHA256字符
|
||||
String unionPwd = originUserName + originPassword; |
||||
return SecurityToolbox.sha256(unionPwd); |
||||
} |
||||
} |
@ -0,0 +1,72 @@
|
||||
package com.fr.demo; |
||||
|
||||
import com.fr.data.core.db.DBUtils; |
||||
import com.fr.form.main.Form; |
||||
import com.fr.log.FineLoggerFactory; |
||||
import com.fr.web.session.SessionLocalManager; |
||||
import com.fr.web.weblet.DBFormlet; |
||||
|
||||
import javax.servlet.http.HttpServletRequest; |
||||
import java.io.InputStream; |
||||
import java.sql.Blob; |
||||
import java.sql.Connection; |
||||
import java.sql.DriverManager; |
||||
import java.sql.ResultSet; |
||||
import java.sql.SQLException; |
||||
import java.sql.Statement; |
||||
import java.util.Map; |
||||
|
||||
|
||||
|
||||
public class NewReadFrmFromDatabase extends DBFormlet { |
||||
|
||||
@Override |
||||
public Form createForm(HttpServletRequest reportletRequest) { |
||||
String name = reportletRequest.getParameter("reportname"); |
||||
return createForm(name); |
||||
} |
||||
|
||||
@Override |
||||
public Form createForm(String reportName) { |
||||
Form form = new Form(); |
||||
Connection connection = null; |
||||
try { |
||||
connection = getConnection(); |
||||
// 从数据库中读模板
|
||||
String sql = "select frm from report where frmname = '" + reportName |
||||
+ "'"; |
||||
Statement smt = connection.createStatement(); |
||||
ResultSet rs = smt.executeQuery(sql); |
||||
while (rs.next()) { |
||||
Blob blob = rs.getBlob(1); |
||||
FineLoggerFactory.getLogger().info(blob.toString()); |
||||
InputStream ins = blob.getBinaryStream(); |
||||
form.readStream(ins); |
||||
return form; |
||||
} |
||||
} catch (Exception e) { |
||||
throw SessionLocalManager.createLogPackedException(e); |
||||
}finally { |
||||
DBUtils.closeConnection(connection); |
||||
} |
||||
|
||||
return form; |
||||
} |
||||
|
||||
private static Connection getConnection() throws ClassNotFoundException, SQLException { |
||||
// 定义数据连接(根据你实际数据库信息进行修改)
|
||||
String driver = "com.mysql.jdbc.Driver"; |
||||
String url = "jdbc:mysql://localhost:3306/test"; |
||||
String user = "root"; |
||||
String pass = "123456"; |
||||
Class.forName(driver); |
||||
Connection conn = DriverManager.getConnection(url, user, pass); |
||||
return conn; |
||||
} |
||||
|
||||
@Override |
||||
public void setParameterMap(Map<String, Object> arg0) { |
||||
// TODO Auto-generated method stub
|
||||
|
||||
} |
||||
} |
@ -0,0 +1,60 @@
|
||||
package com.fr.demo; |
||||
|
||||
import com.fr.form.main.Form; |
||||
import com.fr.io.utils.ResourceIOUtils; |
||||
import com.fr.log.FineLoggerFactory; |
||||
import com.fr.web.session.SessionLocalManager; |
||||
import com.fr.web.weblet.Formlet; |
||||
|
||||
import javax.servlet.http.HttpServletRequest; |
||||
import java.io.InputStream; |
||||
import java.sql.Blob; |
||||
import java.sql.Connection; |
||||
import java.sql.DriverManager; |
||||
import java.sql.ResultSet; |
||||
import java.sql.Statement; |
||||
import java.util.Map; |
||||
|
||||
|
||||
|
||||
public class ReadfrmFromDatabase extends Formlet { |
||||
|
||||
|
||||
public Form createForm(HttpServletRequest reportletRequest) { |
||||
|
||||
Form form= new Form(); |
||||
String name = reportletRequest.getParameter("reportname").toString(); |
||||
try { |
||||
// 定义数据连接(根据你实际数据库信息进行修改)
|
||||
String driver = "com.mysql.jdbc.Driver"; |
||||
String url = "jdbc:mysql://localhost:3306/test"; |
||||
String user = "root"; |
||||
String pass = "123456"; |
||||
Class.forName(driver); |
||||
Connection conn = DriverManager.getConnection(url, user, pass); |
||||
// 从数据库中读模板
|
||||
String sql = "select frm from report where frmname = '" + name |
||||
+ "'"; |
||||
Statement smt = conn.createStatement(); |
||||
ResultSet rs = smt.executeQuery(sql); |
||||
while (rs.next()) { |
||||
Blob blob = rs.getBlob(1); |
||||
FineLoggerFactory.getLogger().info(blob.toString()); |
||||
InputStream ins = blob.getBinaryStream(); |
||||
form.readStream(ins); |
||||
} |
||||
} catch (Exception e) { |
||||
throw SessionLocalManager.createLogPackedException(e); |
||||
} |
||||
System.out.println(ResourceIOUtils.getRealPath("assets")); |
||||
return form; |
||||
} |
||||
|
||||
@Override |
||||
public void setParameterMap(Map<String, Object> arg0) { |
||||
// TODO Auto-generated method stub
|
||||
|
||||
} |
||||
|
||||
|
||||
} |
@ -0,0 +1,85 @@
|
||||
package com.fr.demo; |
||||
|
||||
import com.fr.base.operator.common.CommonOperator; |
||||
import com.fr.chart.activator.ChartBaseActivator; |
||||
import com.fr.cluster.engine.activator.standalone.StandaloneModeActivator; |
||||
import com.fr.config.activator.BaseDBActivator; |
||||
import com.fr.config.activator.ConfigurationActivator; |
||||
import com.fr.env.operator.CommonOperatorImpl; |
||||
import com.fr.general.I18nResource; |
||||
import com.fr.health.activator.ModuleHealActivator; |
||||
import com.fr.io.ResourceRepositoryActivator; |
||||
import com.fr.module.Module; |
||||
import com.fr.module.tool.ActivatorToolBox; |
||||
import com.fr.report.ReportActivator; |
||||
import com.fr.report.RestrictionActivator; |
||||
import com.fr.report.module.ReportBaseActivator; |
||||
import com.fr.report.write.WriteActivator; |
||||
import com.fr.scheduler.SchedulerActivator; |
||||
import com.fr.store.StateServiceActivator; |
||||
import com.fr.workspace.simple.SimpleWork; |
||||
|
||||
import java.io.File; |
||||
import java.io.FileInputStream; |
||||
import java.io.InputStream; |
||||
import java.sql.Connection; |
||||
import java.sql.DriverManager; |
||||
import java.sql.PreparedStatement; |
||||
|
||||
public class SaveReportToDatabase { |
||||
public static void main(String[] args) { |
||||
SaveReport(); |
||||
} |
||||
|
||||
private static void SaveReport() { |
||||
try { |
||||
// 定义报表运行环境,用于执行报表
|
||||
Module module = ActivatorToolBox.simpleLink(new BaseDBActivator(), |
||||
new ConfigurationActivator(), |
||||
new ResourceRepositoryActivator(), |
||||
new StandaloneModeActivator(), |
||||
new ModuleHealActivator(), |
||||
new StateServiceActivator(), |
||||
new ChartBaseActivator(), |
||||
new SchedulerActivator(), |
||||
new ReportBaseActivator(), |
||||
new RestrictionActivator(), |
||||
new ReportActivator(), |
||||
new WriteActivator()); |
||||
SimpleWork.supply(CommonOperator.class, new CommonOperatorImpl()); |
||||
String envpath = "//Applications//FineReport10_325//webapps//webroot//WEB-INF";//工程路径
|
||||
SimpleWork.checkIn(envpath); |
||||
I18nResource.getInstance(); |
||||
module.start(); |
||||
|
||||
|
||||
// 连接数据库
|
||||
String driver = "com.mysql.jdbc.Driver"; |
||||
String url = "jdbc:mysql://review.finedevelop.com:3306/susie"; |
||||
String user = "root"; |
||||
String pass = "ilovejava"; |
||||
Class.forName(driver); |
||||
Connection conn = DriverManager.getConnection(url, user, pass); //注意表名是否区分大小写
|
||||
conn.setAutoCommit(false); |
||||
PreparedStatement presmt = conn |
||||
.prepareStatement("INSERT INTO report VALUES(?,?)"); |
||||
|
||||
// 读进需要保存入库的模板文件
|
||||
File cptfile = new File(envpath |
||||
+ "//reportlets//GettingStarted.cpt"); |
||||
int lens = (int) cptfile.length(); |
||||
InputStream ins = new FileInputStream(cptfile); |
||||
// 将模板保存入库
|
||||
presmt.setString(1, "GettingStarted.cpt"); // 第一个字段存放模板相对路径
|
||||
presmt.setBinaryStream(2, ins, lens); // 第二个字段存放模板文件的二进制流
|
||||
presmt.execute(); |
||||
conn.commit(); |
||||
presmt.close(); |
||||
conn.close(); |
||||
} catch (Exception e) { |
||||
e.printStackTrace(); |
||||
} finally { |
||||
SimpleWork.checkOut(); |
||||
} |
||||
} |
||||
} |
@ -1,25 +1,21 @@
|
||||
//程序网络报表
|
||||
package com.fr.demo; |
||||
|
||||
import com.fr.base.Env; |
||||
import com.fr.base.FRContext; |
||||
import com.fr.io.TemplateWorkBookIO; |
||||
import com.fr.main.TemplateWorkBook; |
||||
import com.fr.web.core.Reportlet; |
||||
import com.fr.web.request.ReportletRequest; |
||||
|
||||
import java.util.Map; |
||||
|
||||
|
||||
public class SimpleReportletDemo extends Reportlet { |
||||
public TemplateWorkBook createReport(ReportletRequest reportletrequest) { |
||||
// 新建一个WorkBook对象,用于保存最终返回的报表
|
||||
Env oldEnv = FRContext.getCurrentEnv(); |
||||
//新建一个WorkBook对象,用于保存最终返回的报表
|
||||
|
||||
TemplateWorkBook WorkBook = null; |
||||
try { |
||||
// 读取模板,将模板保存为workbook对象并返回
|
||||
WorkBook = TemplateWorkBookIO.readTemplateWorkBook(oldEnv, |
||||
"\\doc\\Primary\\Parameter\\Parameter.cpt"); |
||||
//读取模板,将模板保存为workbook对象并返回
|
||||
WorkBook = TemplateWorkBookIO.readTemplateWorkBook("//doc//Primary//Parameter//Parameter.cpt"); |
||||
} catch (Exception e) { |
||||
e.getStackTrace(); |
||||
} |
@ -0,0 +1,34 @@
|
||||
package com.fr.demo; |
||||
|
||||
import java.util.Map; |
||||
import javax.servlet.http.HttpServletRequest; |
||||
|
||||
import com.fr.form.main.Form; |
||||
import com.fr.form.main.FormIO; |
||||
import com.fr.log.FineLoggerFactory; |
||||
import com.fr.web.weblet.Formlet; |
||||
|
||||
|
||||
public class SimpleReportletDemoFrm extends Formlet { |
||||
|
||||
@Override |
||||
public void setParameterMap(Map arg0) { |
||||
// TODO Auto-generated method stub
|
||||
|
||||
} |
||||
|
||||
@Override |
||||
protected Form createForm(HttpServletRequest request) throws Exception { |
||||
Form form = null; |
||||
//模板的相对路径
|
||||
String tplPath = "//doc//frm//决策报表入门.frm"; |
||||
this.setTplPath(tplPath); |
||||
try { |
||||
form = FormIO.readForm(tplPath); |
||||
} catch (Exception e) { |
||||
FineLoggerFactory.getLogger().error(e.getMessage(), e); |
||||
} |
||||
return form; |
||||
} |
||||
|
||||
} |
@ -1,36 +1,28 @@
|
||||
// 程序网络报表中获取request中的值
|
||||
package com.fr.demo; |
||||
|
||||
import com.fr.base.FRContext; |
||||
import com.fr.base.Parameter; |
||||
import com.fr.dav.LocalEnv; |
||||
import com.fr.general.ModuleContext; |
||||
import com.fr.io.TemplateWorkBookIO; |
||||
import java.util.Map; |
||||
import com.fr.main.TemplateWorkBook; |
||||
import com.fr.report.module.EngineModule; |
||||
import com.fr.web.core.Reportlet; |
||||
import com.fr.web.request.ReportletRequest; |
||||
|
||||
import java.util.Map; |
||||
import com.fr.io.TemplateWorkBookIO; |
||||
import com.fr.base.Parameter; |
||||
|
||||
|
||||
@SuppressWarnings("unused") |
||||
public class URLParameterDemo extends Reportlet { |
||||
public TemplateWorkBook createReport(ReportletRequest reportletRequest) { |
||||
|
||||
String envPath = "D:\\FineReport_8.0\\WebReport\\WEB-INF"; |
||||
FRContext.setCurrentEnv(new LocalEnv(envPath)); |
||||
ModuleContext.startModule(EngineModule.class.getName()); |
||||
// 获取外部传来的参数
|
||||
TemplateWorkBook wbTpl = null; |
||||
String countryValue = reportletRequest.getParameter("地区").toString(); |
||||
try { |
||||
wbTpl = TemplateWorkBookIO.readTemplateWorkBook( |
||||
FRContext.getCurrentEnv(), "\\doc\\Primary\\Parameter\\Parameter.cpt"); |
||||
"//doc//Primary//Parameter//Parameter.cpt"); |
||||
// 提取报表参数组,由于原模板只有country一个参数,因此直接取index为0的参数,并将外部传入的值赋给该参数
|
||||
Parameter[] ps = wbTpl.getParameters(); |
||||
ps[0].setValue(countryValue); |
||||
// 原模板定义有参数界面,参数已经从外部获得,去掉参数页面
|
||||
// 若您想保留参数界面,则将模板设置为不延迟报表展示,再传入参数后直接根据参数值显示结果,否则还需要再次点击查询按钮
|
||||
// 如果想要参数面板,把下面wbTpl.getReportParameterAttr().setParameterUI(null); 这句去掉就行
|
||||
wbTpl.getReportParameterAttr().setParameterUI(null); |
||||
} catch (Exception e) { |
||||
e.printStackTrace(); |
@ -0,0 +1,73 @@
|
||||
package com.fr.demo; |
||||
|
||||
import com.fr.base.FRContext; |
||||
import com.fr.base.Utils; |
||||
import com.fr.cache.Attachment; |
||||
import com.fr.data.DefinedVerifyJob; |
||||
import com.fr.data.JobValue; |
||||
import com.fr.data.Verifier; |
||||
import com.fr.general.FArray; |
||||
import com.fr.script.Calculator; |
||||
import com.fr.log.FineLoggerFactory; |
||||
|
||||
public class VerifyJobDemo2 extends DefinedVerifyJob{ |
||||
/* |
||||
* 必须要定义此私有变量,变量名可改,表示校验状态 |
||||
* 0 表示校验成功,默认校验状态位为0 |
||||
* 1 表示校验失败 |
||||
*/ |
||||
private int type = 0; |
||||
|
||||
/** |
||||
* 当模板自定义事件增加的属性 名称与下面变量有对应时,则会自动赋值于此对应变量 |
||||
*/ |
||||
private JobValue file; // JobValue对应单元格
|
||||
private JobValue yesOrno; |
||||
// private int minnum; // 如果是非单元格,则对应具体类型值
|
||||
|
||||
public void doJob(Calculator calculator) throws Exception { |
||||
/* |
||||
* 如这边提供一个简单的判断来模拟执行过程 |
||||
* 校验规则为yesOrno等于1 并且 file 上传了附件:yesOrno == 1 && file 上传附件 |
||||
* 校验不通过,提示“请上传附件” |
||||
*/ |
||||
//这个是fr打印日志的接口,如果是设计器下的话 会在日志里看到对应的日志信息打印出来
|
||||
FRContext.getLogger().error("##### start verigy####"); |
||||
int yn = 0; |
||||
if(yesOrno.getValue() instanceof Integer){ //将单元格值转为整型以便用于比较
|
||||
yn = Integer.parseInt(yesOrno.getValue().toString()); |
||||
}else { |
||||
yn = Integer.parseInt(Utils.objectToString(yesOrno.getValue())); |
||||
} |
||||
FineLoggerFactory.getLogger().error("##### yn = "+yn +"####"); |
||||
if (yn == 1) { |
||||
//判断file是否有上传文件
|
||||
if (file.getValue() instanceof FArray && ((FArray) file.getValue()).length() > 0 |
||||
&& ((FArray) file.getValue()).elementAt(0) instanceof Attachment) { |
||||
type = 0; |
||||
} else { |
||||
type = 1; |
||||
} |
||||
} else { |
||||
type = 1; |
||||
} |
||||
} |
||||
|
||||
public String getMessage() { |
||||
// 根据校验状态是成功还是失败,设置校验失败的返回信息
|
||||
if(type == 1){ |
||||
return "请上传附件"; |
||||
} |
||||
return ""; |
||||
} |
||||
public Verifier.Status getType() { |
||||
// 返回校验状态
|
||||
return Verifier.Status.parse(type); |
||||
} |
||||
|
||||
public void doFinish(Calculator arg0) throws Exception { |
||||
// TODO Auto-generated method stub
|
||||
|
||||
} |
||||
|
||||
} |
Binary file not shown.
@ -1,4 +1,3 @@
|
||||
// 自定义函数中获取公式所在单元格
|
||||
package com.fr.function; |
||||
|
||||
import com.fr.base.Utils; |
@ -1,17 +1,16 @@
|
||||
package com.fr.function; |
||||
|
||||
import java.io.File; |
||||
import java.io.FileOutputStream; |
||||
import java.util.Properties; |
||||
|
||||
import com.sap.conn.jco.JCoDestination; |
||||
import com.sap.conn.jco.JCoDestinationManager; |
||||
import com.sap.conn.jco.JCoException; |
||||
import com.sap.conn.jco.ext.DestinationDataProvider; |
||||
|
||||
import java.io.File; |
||||
import java.io.FileOutputStream; |
||||
import java.util.Properties; |
||||
|
||||
public class ConnectSAPServer { |
||||
static String ABAP_AS_POOLED = "ABAP_AS_WITH_POOL"; |
||||
|
||||
static { |
||||
Properties connectProperties = new Properties(); |
||||
connectProperties.setProperty(DestinationDataProvider.JCO_ASHOST, |
Binary file not shown.
@ -0,0 +1,67 @@
|
||||
package com.fr.function; |
||||
|
||||
import com.fr.script.AbstractFunction; |
||||
import com.fr.stable.Primitive; |
||||
import java.util.Date; |
||||
import java.util.regex.Matcher; |
||||
import java.util.regex.Pattern; |
||||
|
||||
public class DateDiff extends AbstractFunction |
||||
{ |
||||
private static final long serialVersionUID = -2863679010825725885L; |
||||
public String format = null; |
||||
private Long dif = Long.valueOf(0L); |
||||
|
||||
public Object run(Object[] paramArrayOfObject) |
||||
{ |
||||
try |
||||
{ |
||||
Long localLong1 = Long.valueOf(((Date)paramArrayOfObject[0]).getTime()); |
||||
Long localLong2 = Long.valueOf(((Date)paramArrayOfObject[1]).getTime()); |
||||
this.dif = Long.valueOf(localLong2.longValue() - localLong1.longValue()); |
||||
this.format = ((String)paramArrayOfObject[2]); |
||||
replace("((?i)y)", Long.valueOf(31536000000L)); |
||||
replace("((?i)q)", Long.valueOf(7776000000L)); |
||||
replace("M", Long.valueOf(2592000000L)); |
||||
replace("((?i)w)", Long.valueOf(604800000L)); |
||||
replace("((?i)d)", Long.valueOf(86400000L)); |
||||
replace("((?i)h)", Long.valueOf(3600000L)); |
||||
replace("m", Long.valueOf(60000L)); |
||||
replace("((?i)s)", Long.valueOf(1000L)); |
||||
try |
||||
{ |
||||
return Long.valueOf(Long.parseLong(this.format)); |
||||
} |
||||
catch (Exception localException2) |
||||
{ |
||||
return this.format; |
||||
} |
||||
} |
||||
catch (Exception localException1) |
||||
{ |
||||
} |
||||
return Primitive.ERROR_VALUE; |
||||
} |
||||
|
||||
public void replace(String paramString, Long paramLong) |
||||
{ |
||||
Pattern localPattern = Pattern.compile(paramString + "\\{\\d*?\\}"); |
||||
Matcher localMatcher = localPattern.matcher(this.format); |
||||
int i = (int)(this.dif.longValue() / paramLong.longValue()); |
||||
int j = 1; |
||||
while (localMatcher.find()) |
||||
{ |
||||
String str1 = localMatcher.group(); |
||||
str1 = str1.replaceAll(paramString + "\\{", ""); |
||||
str1 = str1.replaceAll("\\}", ""); |
||||
int k = Integer.parseInt(str1); |
||||
String str2 = String.format("%0" + k + "d", new Object[] { Integer.valueOf(i) }); |
||||
if (j != 0) |
||||
{ |
||||
j = 0; |
||||
this.dif = Long.valueOf(this.dif.longValue() - i * paramLong.longValue()); |
||||
} |
||||
this.format = this.format.replaceFirst(paramString + "\\{\\d*?\\}", str2); |
||||
} |
||||
} |
||||
} |
Binary file not shown.
@ -0,0 +1,67 @@
|
||||
package com.fr.function; |
||||
import com.fr.script.AbstractFunction; |
||||
import com.fr.stable.Primitive; |
||||
public class FlagHtmlColor extends AbstractFunction { |
||||
public Object run(Object[] args) { |
||||
String txt=""; |
||||
String color=""; |
||||
String flag=""; |
||||
if(null==args||args.length==0){ |
||||
return Primitive.ERROR_NAME; |
||||
}else if(args.length==1){ |
||||
txt=args[0].toString(); |
||||
color="red"; |
||||
flag="N"; |
||||
}else if(args.length==2){ |
||||
txt=args[0].toString(); |
||||
color=args[1].toString(); |
||||
flag="N"; |
||||
}else{ |
||||
txt=args[0].toString(); |
||||
color=args[1].toString(); |
||||
flag=args[2].toString(); |
||||
} |
||||
String result=getHtmlStr(txt, color, flag); |
||||
return result; |
||||
} |
||||
public String getHtmlStr(String txt,String color,String flag){ |
||||
String starthtml="<font color='"+color+"'>"; |
||||
String endhtml="</font>"; |
||||
StringBuffer sb=new StringBuffer(); |
||||
int len=txt.length(); |
||||
if("N".equalsIgnoreCase(flag)){//数字
|
||||
for(int i=0;i<len;i++){ |
||||
char c=txt.charAt(i); |
||||
if(c>='0'&&c<='9'){ |
||||
String str=starthtml+c+endhtml; |
||||
sb.append(str); |
||||
}else{ |
||||
sb.append(c); |
||||
} |
||||
} |
||||
}else if("C".equalsIgnoreCase(flag)){//字母
|
||||
for(int i=0;i<len;i++){ |
||||
char c=txt.charAt(i); |
||||
if((c>='a'&&c<='z')||(c>='A'&&c<='Z')){ |
||||
String str=starthtml+c+endhtml; |
||||
sb.append(str); |
||||
}else{ |
||||
sb.append(c); |
||||
} |
||||
} |
||||
} else if("Z".equalsIgnoreCase(flag)){//中文
|
||||
for(int i=0;i<len;i++){ |
||||
char c=txt.charAt(i); |
||||
if(c >= 0x4E00 && c <= 0x9FA5){ |
||||
String str=starthtml+c+endhtml; |
||||
sb.append(str); |
||||
}else{ |
||||
sb.append(c); |
||||
} |
||||
} |
||||
}else{ |
||||
return txt; |
||||
} |
||||
return sb.toString(); |
||||
} |
||||
} |
@ -0,0 +1,23 @@
|
||||
package com.fr.function; |
||||
|
||||
import com.fr.script.AbstractFunction; |
||||
|
||||
import java.net.InetAddress; |
||||
|
||||
public class GETIP extends AbstractFunction { |
||||
|
||||
@Override |
||||
public Object run(Object[] objects) { |
||||
try { |
||||
InetAddress ia = InetAddress.getLocalHost(); |
||||
return ia.getHostAddress(); |
||||
} catch (Exception e) { |
||||
return e.getMessage(); |
||||
|
||||
} |
||||
} |
||||
|
||||
public static InetAddress getInetAddress() { |
||||
return null; |
||||
} |
||||
} |
Binary file not shown.
@ -0,0 +1,152 @@
|
||||
package com.fr.function; |
||||
|
||||
import java.math.BigDecimal; |
||||
|
||||
import com.fr.general.FArray; |
||||
import com.fr.general.GeneralUtils; |
||||
import com.fr.script.AbstractFunction; |
||||
|
||||
public class IRR extends AbstractFunction { |
||||
|
||||
private static final long serialVersionUID = 7634415917398642321L; |
||||
private static final String ERROR_VALUE = "#NUM!"; |
||||
|
||||
|
||||
@Override |
||||
public Object run(Object[] args) { |
||||
try{ |
||||
if(1 == args.length){ |
||||
return run( transArr( (FArray) args[0] ) ); |
||||
}else if(2 == args.length){ |
||||
return run( transArr( (FArray) args[0] ), trans( args[1] ) ); |
||||
} |
||||
}catch(Exception e){ |
||||
System.out.println(e); |
||||
} |
||||
return ERROR_VALUE; |
||||
} |
||||
|
||||
/** |
||||
* 将其他类型的数字转换为大数(保证精度) |
||||
* @param ele |
||||
* @return |
||||
*/ |
||||
private static BigDecimal trans(Object ele){ |
||||
try{ |
||||
String val = GeneralUtils.objectToString(ele); |
||||
return new BigDecimal(val); |
||||
}catch(Exception e){ |
||||
|
||||
} |
||||
return (BigDecimal) ele; |
||||
} |
||||
|
||||
/** |
||||
* 将数组转换为大数数组 |
||||
* @param in |
||||
* @return |
||||
*/ |
||||
private static FArray<BigDecimal> transArr(FArray in){ |
||||
FArray<BigDecimal> rt = new FArray<BigDecimal>(); |
||||
for(int i=0;i<in.length();i++){ |
||||
Object ele = in.elementAt(i); |
||||
rt.add(trans(ele)); |
||||
} |
||||
return rt; |
||||
} |
||||
|
||||
|
||||
private static BigDecimal run(FArray<BigDecimal> cashflow){ |
||||
return run( cashflow, new BigDecimal(0.1d) ); |
||||
} |
||||
|
||||
private static BigDecimal run(FArray<BigDecimal> cashflow,BigDecimal guess){ |
||||
BigDecimal maxrate = initRateMax(cashflow,guess); |
||||
BigDecimal minrate = initRateMin(cashflow,guess); |
||||
for( int i=0; i<Init_Max_Loop; i++ ){ |
||||
BigDecimal testrate = minrate.add(maxrate).divide( new BigDecimal(2d) ); |
||||
BigDecimal npv = NPV( cashflow, testrate ); |
||||
if( npv.abs().compareTo(Accuracy) == LESS ){ |
||||
guess = testrate; |
||||
break; |
||||
}else if( npv.compareTo(ZERO) == LESS ){ |
||||
minrate = testrate; |
||||
}else{ |
||||
maxrate = testrate; |
||||
} |
||||
} |
||||
//保留16位小数(足够精度)
|
||||
return guess.setScale(16,BigDecimal.ROUND_HALF_UP); |
||||
} |
||||
|
||||
//最小精度
|
||||
private static final BigDecimal Accuracy = new BigDecimal(0.00000001d); |
||||
//最大循环次数,excel用的是20次,不过精度只到小数点后两位,而且不一定一定能算出值,为了尽可能保证算出结果,我增加到100次,
|
||||
private static final int Init_Max_Loop = 100; |
||||
|
||||
private static final BigDecimal ZERO = new BigDecimal(0); |
||||
private static final BigDecimal ONE = new BigDecimal(1); |
||||
private static final BigDecimal Z005 = new BigDecimal(0.005d); |
||||
private static final BigDecimal Z2 = new BigDecimal(0.2d); |
||||
|
||||
private static final int GREATER = 1; |
||||
private static final int LESS = -1; |
||||
|
||||
/** |
||||
* 生成一个使NPV为负数的R作为内部收益率下限值 |
||||
* @param cashflow |
||||
* @param guess |
||||
* @return |
||||
*/ |
||||
private static BigDecimal initRateMin(FArray<BigDecimal> cashflow,BigDecimal guess){ |
||||
for( int i=0; i<Init_Max_Loop; i++ ){ |
||||
BigDecimal npv = NPV( cashflow, guess ); |
||||
|
||||
if( npv.compareTo(ZERO) == LESS ){ |
||||
return guess; |
||||
} |
||||
BigDecimal step = guess.abs().multiply( Z2 ); |
||||
guess = guess.add( step.compareTo( Z005 ) == LESS ? Z005 : step ); |
||||
} |
||||
return guess; |
||||
} |
||||
|
||||
/** |
||||
* 生成一个使NPV为正数的R作为内部收益率的上限制 |
||||
* @param cashflow |
||||
* @param guess |
||||
* @return |
||||
*/ |
||||
private static BigDecimal initRateMax(FArray<BigDecimal> cashflow,BigDecimal guess){ |
||||
for( int i=0; i<Init_Max_Loop; i++ ){ |
||||
BigDecimal npv = NPV( cashflow, guess ); |
||||
|
||||
if( npv.compareTo(ZERO) == GREATER ){ |
||||
return guess; |
||||
} |
||||
BigDecimal step = guess.abs().multiply( Z2 ); |
||||
guess = guess.subtract( step.compareTo( Z005 ) == LESS ? Z005 : step ); |
||||
} |
||||
return guess; |
||||
} |
||||
|
||||
/** |
||||
* 算NPV |
||||
* @param cashflow |
||||
* @param rate |
||||
* @return |
||||
*/ |
||||
private static BigDecimal NPV(FArray<BigDecimal> cashflow,BigDecimal rate){ |
||||
BigDecimal npv = ZERO; |
||||
BigDecimal rpowj = ONE;//(1+r)^0
|
||||
BigDecimal radd1 = rate.add(ONE);//1+r
|
||||
for( int j=0; j<cashflow.length(); j++ ){ |
||||
BigDecimal valuej = cashflow.elementAt(j); |
||||
npv = npv.add( valuej.divide( rpowj, 10, BigDecimal.ROUND_HALF_DOWN ) );// vj / (1+r)^j
|
||||
rpowj = rpowj.multiply(radd1); // (1+r)^j
|
||||
//npv += cashflow.elementAt(j) / Math.pow( 1+rate, j );
|
||||
} |
||||
return npv; |
||||
} |
||||
|
||||
} |
Binary file not shown.
Binary file not shown.
@ -0,0 +1,15 @@
|
||||
package com.fr.function; |
||||
|
||||
import com.fr.script.AbstractFunction; |
||||
|
||||
public class StringCat extends AbstractFunction { |
||||
public Object run(Object[] args) { |
||||
String result = ""; |
||||
Object para; |
||||
for (int i = 0; i < args.length; i++) { |
||||
para = args[i]; |
||||
result += para.toString(); |
||||
} |
||||
return result; |
||||
} |
||||
} |
Binary file not shown.
@ -0,0 +1,59 @@
|
||||
//图片在下文字在上
|
||||
package com.fr.function; |
||||
|
||||
import com.fr.base.GraphHelper; |
||||
import com.fr.data.core.db.BinaryObject; |
||||
import com.fr.log.FineLoggerFactory; |
||||
import com.fr.script.AbstractFunction; |
||||
import com.fr.stable.CoreGraphHelper; |
||||
import javax.imageio.ImageIO; |
||||
import java.awt.Graphics2D; |
||||
import java.awt.Image; |
||||
import java.awt.image.BufferedImage; |
||||
import java.io.IOException; |
||||
|
||||
|
||||
/** |
||||
* 图片在下文字在上 |
||||
*/ |
||||
public class StringImage extends AbstractFunction { |
||||
@Override |
||||
public Object run(Object[] args) { |
||||
Image result = null; |
||||
int p = 0; |
||||
Object[] ob = new Object[2]; |
||||
for (int i = 0; (i < args.length && p <= 1); i++) { |
||||
if (args[i] == null) { |
||||
continue; |
||||
} |
||||
ob[p] = args[i]; |
||||
p++; |
||||
|
||||
} |
||||
|
||||
if (ob[1] instanceof BinaryObject) { |
||||
BinaryObject binaryObject = (BinaryObject) ob[1]; |
||||
try { |
||||
result = initStringImage((String) ob[0], ImageIO.read(binaryObject.getInputStream())); |
||||
} catch (IOException e) { |
||||
e.printStackTrace(); |
||||
} |
||||
} else if (ob[1] instanceof Image) { |
||||
result = initStringImage((String) ob[0], (Image) ob[1]); |
||||
} else { |
||||
FineLoggerFactory.getLogger().warn("Unsupported type of " + ob[1].getClass()); |
||||
} |
||||
|
||||
return result; |
||||
} |
||||
|
||||
private Image initStringImage(String name, Image image) { |
||||
BufferedImage splashBuffedImage = CoreGraphHelper.toBufferedImage(image); |
||||
Graphics2D splashG2d = splashBuffedImage.createGraphics(); |
||||
double centerX = 25; |
||||
double centerY = 25; |
||||
GraphHelper.drawString(splashG2d, name, centerX, centerY); |
||||
return splashBuffedImage; |
||||
} |
||||
|
||||
} |
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue