Browse Source

first commit

master
独行之狼 4 years ago
parent
commit
d684e62c47
  1. 5
      build.xml
  2. BIN
      fr-plugin-DataEncryptor-1.0/fr-plugin-DataEncryptor-1.0.jar
  3. 19
      fr-plugin-DataEncryptor-1.0/plugin.xml
  4. BIN
      fr-plugin-MarketUpdate-1.0/fr-plugin-MarketUpdate-1.0.jar
  5. 8
      fr-plugin-MarketUpdate-1.0/plugin.xml
  6. BIN
      install/fr-plugin-DataEncryptor-1.0.zip
  7. BIN
      install/fr-plugin-MarketUpdate-1.0.zip
  8. BIN
      lib/commons-math3-3.6.1.jar
  9. BIN
      lib/fine-core-10.0-RELEASE-SNAPSHOT.jar
  10. BIN
      lib/fine-core-10.0.2020.04.26.jar
  11. BIN
      lib/fine-decision-10.0-RELEASE-20200826.160755-1740.jar
  12. BIN
      lib/fine-third-10.0-PERSIST-20200507.045822-102.jar
  13. BIN
      lib/finekit-10.0.jar
  14. BIN
      lib/jasypt-1.9.3.jar
  15. BIN
      lib/jsoup-1.13.1.jar
  16. 37
      plugin-function-data-encryptor.iml
  17. 97
      plugin-function-market-update.iml
  18. 13
      plugin.xml
  19. 43
      src/com/fr/plugin/data/encrypt/EncryptDataAccessBridge.java
  20. 32
      src/com/fr/plugin/data/encrypt/FRDEncryptWithMD5AndDES.java
  21. 32
      src/com/fr/plugin/data/encrypt/FRDEncryptWithMD5AndTripleDES.java
  22. 32
      src/com/fr/plugin/data/encrypt/FREncryptWithMD5AndDES.java
  23. 32
      src/com/fr/plugin/data/encrypt/FREncryptWithMD5AndTripleDES.java
  24. 24
      src/com/fr/plugin/data/encrypt/FREncryptorFunction.java
  25. 60
      src/com/fr/plugin/data/encrypt/FRGetDataFromHash.java
  26. 33
      src/com/fr/plugin/data/encrypt/FRHashData.java
  27. 101
      src/com/fr/plugin/data/encrypt/FunConstants.java
  28. 2
      src/com/fr/plugin/data/encrypt/FunLocaleFinder.java
  29. 6
      src/com/fr/plugin/data/encrypt/TestFun.java
  30. 15
      src/com/fr/plugin/data/encrypt/dao/EncryptDataDao.java
  31. 45
      src/com/fr/plugin/data/encrypt/entity/EncryptDataEntity.java
  32. 3
      src/com/fr/plugin/data/encrypt/local/dataEncrypt.properties
  33. 0
      src/com/fr/plugin/data/encrypt/local/dataEncrypt_zh_CN.properties
  34. 0
      src/com/fr/plugin/data/encrypt/resources/menuIcon.png
  35. 66
      src/com/fr/plugin/market/update/FRExchangeRate.java
  36. 26
      src/com/fr/plugin/market/update/FRFinanceFunction.java
  37. 41
      src/com/fr/plugin/market/update/FRForwardMarket.java
  38. 44
      src/com/fr/plugin/market/update/FRGoldSilver.java
  39. 40
      src/com/fr/plugin/market/update/FRMarketIndex.java
  40. 70
      src/com/fr/plugin/market/update/FRStockMarket.java
  41. 211
      src/com/fr/plugin/market/update/FunConstants.java
  42. 56
      src/com/fr/plugin/market/update/TestFun.java
  43. 3
      src/com/fr/plugin/market/update/local/marketUpdate.properties
  44. 66
      src/com/fr/plugin/market/update/local/marketUpdate_zh_CN.properties

5
build.xml

@ -13,7 +13,7 @@
<!-- 插件版本-->
<property name="plugin-version" value="${current-version}"/>
<!-- 插件名字-->
<property name="plugin-name" value="MarketUpdate"/>
<property name="plugin-name" value="DataEncryptor"/>
<property name="plugin-jar" value="fr-plugin-${plugin-name}-${plugin-version}.jar"/>
<target name="prepare">
@ -74,7 +74,8 @@
</fileset>
<!--下面加入第三方包-->
<zipfileset excludes="META-INF/*.SF" src="${libs}/jsoup-1.13.1.jar"></zipfileset>
<zipfileset excludes="META-INF/*.SF" src="${libs}/jasypt-1.9.3.jar"></zipfileset>
<zipfileset excludes="META-INF/*.SF" src="${libs}/finekit-10.0.jar"></zipfileset>
<zipfileset excludes="META-INF/*.SF" src="${libs}/fastjson-1.2.68.jar"></zipfileset>
<zipfileset excludes="META-INF/*.SF" src="${libs}/gson-2.8.5.jar"></zipfileset>
</jar>

BIN
fr-plugin-DataEncryptor-1.0/fr-plugin-DataEncryptor-1.0.jar

Binary file not shown.

19
fr-plugin-DataEncryptor-1.0/plugin.xml

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><plugin>
<id>com.fr.plugin.data.encrypt</id>
<name><![CDATA[数据加密函数]]></name>
<active>yes</active>
<version>1.0</version>
<env-version>10.0</env-version>
<jartime>2018-07-31</jartime>
<vendor>all100</vendor>
<description><![CDATA[一组数据加密函数]]></description>
<change-notes><![CDATA[
[2021-3-6]初始化插件。<br/>
]]></change-notes>
<extra-core>
<LocaleFinder class="com.fr.plugin.data.encrypt.FunLocaleFinder"/>
<FunctionGroup class="com.fr.plugin.data.encrypt.FREncryptorFunction"/>
<DBAccessProvider class="com.fr.plugin.data.encrypt.EncryptDataAccessBridge"/>
</extra-core>
<function-recorder class="com.fr.plugin.data.encrypt.FREncryptorFunction"/>
</plugin>

BIN
fr-plugin-MarketUpdate-1.0/fr-plugin-MarketUpdate-1.0.jar

Binary file not shown.

8
fr-plugin-MarketUpdate-1.0/plugin.xml

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><plugin>
<id>com.fr.plugin.market.update</id>
<id>com.fr.plugin.data.encrypt</id>
<name><![CDATA[金融行情数据]]></name>
<active>yes</active>
<version>1.0</version>
@ -11,8 +11,8 @@
[2021-3-6]初始化插件。<br/>
]]></change-notes>
<extra-core>
<LocaleFinder class="com.fr.plugin.market.update.FunLocaleFinder"/>
<FunctionGroup class="com.fr.plugin.market.update.FRFinanceFunction"/>
<LocaleFinder class="com.fr.plugin.data.encrypt.FunLocaleFinder"/>
<FunctionGroup class="com.fr.plugin.data.encrypt.FREncryptorFunction"/>
</extra-core>
<function-recorder class="com.fr.plugin.market.update.FRFinanceFunction"/>
<function-recorder class="com.fr.plugin.data.encrypt.FREncryptorFunction"/>
</plugin>

BIN
install/fr-plugin-DataEncryptor-1.0.zip

Binary file not shown.

BIN
install/fr-plugin-MarketUpdate-1.0.zip

Binary file not shown.

BIN
lib/commons-math3-3.6.1.jar

Binary file not shown.

BIN
lib/fine-core-10.0-RELEASE-SNAPSHOT.jar

Binary file not shown.

BIN
lib/fine-report-designer-10.0.jar → lib/fine-core-10.0.2020.04.26.jar

Binary file not shown.

BIN
lib/fine-decision-10.0-RELEASE-20200826.160755-1740.jar

Binary file not shown.

BIN
lib/fine-third-10.0-PERSIST-20200507.045822-102.jar

Binary file not shown.

BIN
lib/finekit-10.0.jar

Binary file not shown.

BIN
lib/jasypt-1.9.3.jar

Binary file not shown.

BIN
lib/jsoup-1.13.1.jar

Binary file not shown.

37
plugin-function-data-encryptor.iml

@ -0,0 +1,37 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="Maven: com.fr.core:fine-core:10.0-PERSIST-SNAPSHOT" level="project" />
<orderEntry type="module-library">
<library>
<CLASSES>
<root url="file://$MODULE_DIR$/lib" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="file://$MODULE_DIR$/lib" />
</SOURCES>
<jarDirectory url="file://$MODULE_DIR$/lib" recursive="false" />
<jarDirectory url="file://$MODULE_DIR$/lib" recursive="false" type="SOURCES" />
</library>
</orderEntry>
<orderEntry type="library" name="Maven: com.fr.core:fine-core:10.0-RELEASE-SNAPSHOT" level="project" />
<orderEntry type="library" name="Maven: com.fr.core:fine-core:10.0.2020.04.26" level="project" />
<orderEntry type="library" name="Maven: com.fr.third:fine-third:10.0-PERSIST-SNAPSHOT" level="project" />
<orderEntry type="module-library">
<library>
<CLASSES>
<root url="jar://$MODULE_DIR$/../plugin-menu-image/lib/report/finekit-10.0-20200406.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
</component>
</module>

97
plugin-function-market-update.iml

@ -1,97 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7">
<output url="file://$MODULE_DIR$/../webroot/WEB-INF/plugins/plugin-com.fr.plugin.function.test-1.0/classes" />
<output-test url="file://$MODULE_DIR$/target/test-classes" />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
<excludeFolder url="file://$MODULE_DIR$/target" />
<excludeFolder url="file://$MODULE_DIR$/../plugin-function/target" />
</content>
<orderEntry type="jdk" jdkName="1.8" jdkType="JavaSDK" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="module-library">
<library>
<CLASSES>
<root url="jar://$MODULE_DIR$/lib/Filters.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library>
<CLASSES>
<root url="jar://$MODULE_DIR$/lib/thumbnailator-0.4.8.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library>
<CLASSES>
<root url="jar://$MODULE_DIR$/../lib/genson-0.99.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Maven: com.fr.plugin:gson:1.0">
<CLASSES>
<root url="jar://$MODULE_DIR$/lib/gson-2.3.1.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="library" name="Maven: com.fr.core:fine-core:10.0.2020.04.26" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-all:4.1.17" level="project" />
<orderEntry type="library" name="Maven: com.jcraft:jzlib:1.1.3" level="project" />
<orderEntry type="library" name="Maven: com.fr.third:fine-third:10.0-RELEASE-SNAPSHOT" level="project" />
<orderEntry type="library" name="Maven: com.fr.activator:fine-activator:10.0-RELEASE-SNAPSHOT" level="project" />
<orderEntry type="library" name="Maven: com.fr.webui:fine-webui:10.0-RELEASE-SNAPSHOT" level="project" />
<orderEntry type="library" name="Maven: com.fr.datasource:fine-datasource:10.0-RELEASE-SNAPSHOT" level="project" />
<orderEntry type="library" name="Maven: com.fr.decision:fine-decision:10.0-RELEASE-SNAPSHOT" level="project" />
<orderEntry type="library" name="Maven: com.fr.decision:fine-decision-report:10.0-RELEASE-SNAPSHOT" level="project" />
<orderEntry type="library" name="Maven: com.fr.schedule:fine-schedule:10.0-RELEASE-SNAPSHOT" level="project" />
<orderEntry type="library" name="Maven: com.fr.schedule:fine-schedule-report:10.0-RELEASE-SNAPSHOT" level="project" />
<orderEntry type="library" name="Maven: com.fr.intelligence:fine-swift:10.0-RELEASE-SNAPSHOT" level="project" />
<orderEntry type="library" name="Maven: com.fineio:fineio:10.0-RELEASE-SNAPSHOT" level="project" />
<orderEntry type="library" name="Maven: com.fr.third.server:servlet-api:3.0" level="project" />
<orderEntry type="library" name="Maven: com.fr.intelligence:fine-accumulator:10.0-RELEASE-SNAPSHOT" level="project" />
<orderEntry type="library" name="Maven: com.fr.report:fine-report-engine:10.0-RELEASE-SNAPSHOT" level="project" />
<orderEntry type="library" name="Maven: com.fr.report:fine-report-designer:10.0-RELEASE-SNAPSHOT" level="project" />
<orderEntry type="library" name="Maven: io.socket:socket.io-client:0.7.0" level="project" />
<orderEntry type="library" name="Maven: io.socket:engine.io-client:0.7.0" level="project" />
<orderEntry type="library" name="Maven: com.squareup.okhttp3:okhttp-ws:3.0.1" level="project" />
<orderEntry type="library" name="Maven: com.squareup.okhttp3:okhttp:3.0.1" level="project" />
<orderEntry type="library" name="Maven: com.squareup.okio:okio:1.6.0" level="project" />
<orderEntry type="library" name="Maven: org.json:json:20090211" level="project" />
<orderEntry type="library" name="Maven: org.aspectj:aspectjrt:1.6.9" level="project" />
<orderEntry type="library" name="Maven: org.swingexplorer:swexpl:2.0" level="project" />
<orderEntry type="library" name="Maven: org.swingexplorer:swag:1.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.tomcat:tomcat-catalina:8.5.32" level="project" />
<orderEntry type="library" name="Maven: org.apache.tomcat:tomcat-servlet-api:8.5.32" level="project" />
<orderEntry type="library" name="Maven: org.apache.tomcat:tomcat-jsp-api:8.5.32" level="project" />
<orderEntry type="library" name="Maven: org.apache.tomcat:tomcat-el-api:8.5.32" level="project" />
<orderEntry type="library" name="Maven: org.apache.tomcat:tomcat-juli:8.5.32" level="project" />
<orderEntry type="library" name="Maven: org.apache.tomcat:tomcat-annotations-api:8.5.32" level="project" />
<orderEntry type="library" name="Maven: org.apache.tomcat:tomcat-api:8.5.32" level="project" />
<orderEntry type="library" name="Maven: org.apache.tomcat:tomcat-jni:8.5.32" level="project" />
<orderEntry type="library" name="Maven: org.apache.tomcat:tomcat-coyote:8.5.32" level="project" />
<orderEntry type="library" name="Maven: org.apache.tomcat:tomcat-util:8.5.32" level="project" />
<orderEntry type="library" name="Maven: org.apache.tomcat:tomcat-util-scan:8.5.32" level="project" />
<orderEntry type="library" name="Maven: org.apache.tomcat:tomcat-jaspic-api:8.5.32" level="project" />
<orderEntry type="library" name="Maven: mysql:mysql-connector-java:5.1.44" level="project" />
<orderEntry type="library" name="Maven: com.fr.third:jxbrowser:6.23.1" level="project" />
<orderEntry type="library" name="Maven: com.fr.third:jxbrowser-mac:6.23.1" level="project" />
<orderEntry type="library" name="Maven: com.fr.third:jxbrowser-win64:6.23.1" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: junit:junit:4.12" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest-core:1.3" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.easymock:easymock:3.5.1" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.objenesis:objenesis:2.6" level="project" />
</component>
</module>

13
plugin.xml

@ -1,18 +1,19 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><plugin>
<id>com.fr.plugin.market.update</id>
<name><![CDATA[金融行情数据]]></name>
<id>com.fr.plugin.data.encrypt</id>
<name><![CDATA[数据加密函数]]></name>
<active>yes</active>
<version>1.0</version>
<env-version>10.0</env-version>
<jartime>2018-07-31</jartime>
<vendor>all100</vendor>
<description><![CDATA[一组查询金融行情数据函数]]></description>
<description><![CDATA[一组数据加密函数]]></description>
<change-notes><![CDATA[
[2021-3-6]初始化插件。<br/>
]]></change-notes>
<extra-core>
<LocaleFinder class="com.fr.plugin.market.update.FunLocaleFinder"/>
<FunctionGroup class="com.fr.plugin.market.update.FRFinanceFunction"/>
<LocaleFinder class="com.fr.plugin.data.encrypt.FunLocaleFinder"/>
<FunctionGroup class="com.fr.plugin.data.encrypt.FREncryptorFunction"/>
<DBAccessProvider class="com.fr.plugin.data.encrypt.EncryptDataAccessBridge"/>
</extra-core>
<function-recorder class="com.fr.plugin.market.update.FRFinanceFunction"/>
<function-recorder class="com.fr.plugin.data.encrypt.FREncryptorFunction"/>
</plugin>

43
src/com/fr/plugin/data/encrypt/EncryptDataAccessBridge.java

@ -0,0 +1,43 @@
package com.fr.plugin.data.encrypt;
import com.fr.db.fun.impl.AbstractDBAccessProvider;
import com.fr.intelli.record.Focus;
import com.fr.intelli.record.Original;
import com.fr.plugin.data.encrypt.dao.EncryptDataDao;
import com.fr.plugin.data.encrypt.entity.EncryptDataEntity;
import com.fr.record.analyzer.EnableMetrics;
import com.fr.stable.db.accessor.DBAccessor;
import com.fr.stable.db.dao.BaseDAO;
import com.fr.stable.db.dao.DAOProvider;
@EnableMetrics
public class EncryptDataAccessBridge extends AbstractDBAccessProvider {
private static DBAccessor dbAccessor = null;
@Focus(id=FunConstants.PLUGIN_ID, text = "", source = Original.PLUGIN)
public static DBAccessor getDbAccessor() {
return dbAccessor;
}
@Override
public DAOProvider[] registerDAO() {
return new DAOProvider[]{
new DAOProvider() {
@Override
public Class getEntityClass() {
return EncryptDataEntity.class;
}
@Override
public Class<? extends BaseDAO> getDAOClass() {
return EncryptDataDao.class;
}
},
};
}
@Override
public void onDBAvailable(DBAccessor dbAccessor) {
EncryptDataAccessBridge.dbAccessor = dbAccessor;
}
}

32
src/com/fr/plugin/data/encrypt/FRDEncryptWithMD5AndDES.java

@ -0,0 +1,32 @@
package com.fr.plugin.data.encrypt;
import com.fr.intelli.record.Focus;
import com.fr.intelli.record.Original;
import com.fr.record.analyzer.EnableMetrics;
import com.fr.script.AbstractFunction;
import com.fr.stable.Primitive;
import com.fr.stable.fun.Authorize;
@EnableMetrics
@Authorize(callSignKey = FunConstants.PLUGIN_ID)
public class FRDEncryptWithMD5AndDES extends AbstractFunction {
@Override
@Focus(id = FunConstants.PLUGIN_ID, text = "Plugin-Function_FRDEncryptWithMD5AndDES", source = Original.PLUGIN)
public Object run(Object[] args) {
if (!FunConstants.author()) {
return FunConstants.AUTHOR_ERROR;
}
String checkRes = FunConstants.CheckArgs(args, 2);
if (!checkRes.equals(FunConstants.CHECK_PASS)) {
return Primitive.ERROR_VALUE + ":"+checkRes;
}
String key= args[0].toString();
String data = args[1].toString();
return FunConstants.EncryptData(key,data,"PBEWithMD5AndDES",false);
}
}

32
src/com/fr/plugin/data/encrypt/FRDEncryptWithMD5AndTripleDES.java

@ -0,0 +1,32 @@
package com.fr.plugin.data.encrypt;
import com.fr.intelli.record.Focus;
import com.fr.intelli.record.Original;
import com.fr.record.analyzer.EnableMetrics;
import com.fr.script.AbstractFunction;
import com.fr.stable.Primitive;
import com.fr.stable.fun.Authorize;
@EnableMetrics
@Authorize(callSignKey = FunConstants.PLUGIN_ID)
public class FRDEncryptWithMD5AndTripleDES extends AbstractFunction {
@Override
@Focus(id = FunConstants.PLUGIN_ID, text = "Plugin-Function_FRDEncryptWithMD5AndDES", source = Original.PLUGIN)
public Object run(Object[] args) {
if (!FunConstants.author()) {
return FunConstants.AUTHOR_ERROR;
}
String checkRes = FunConstants.CheckArgs(args, 2);
if (!checkRes.equals(FunConstants.CHECK_PASS)) {
return Primitive.ERROR_VALUE + ":"+checkRes;
}
String key= args[0].toString();
String data = args[1].toString();
return FunConstants.EncryptData(key,data,"PBEWithMD5AndTripleDES",false);
}
}

32
src/com/fr/plugin/data/encrypt/FREncryptWithMD5AndDES.java

@ -0,0 +1,32 @@
package com.fr.plugin.data.encrypt;
import com.fr.intelli.record.Focus;
import com.fr.intelli.record.Original;
import com.fr.record.analyzer.EnableMetrics;
import com.fr.script.AbstractFunction;
import com.fr.stable.Primitive;
import com.fr.stable.fun.Authorize;
@EnableMetrics
@Authorize(callSignKey = FunConstants.PLUGIN_ID)
public class FREncryptWithMD5AndDES extends AbstractFunction {
@Override
@Focus(id = FunConstants.PLUGIN_ID, text = "Plugin-Function_FREnWithMD5AndDES", source = Original.PLUGIN)
public Object run(Object[] args) {
if (!FunConstants.author()) {
return FunConstants.AUTHOR_ERROR;
}
String checkRes = FunConstants.CheckArgs(args, 2);
if (!checkRes.equals(FunConstants.CHECK_PASS)) {
return Primitive.ERROR_VALUE + ":"+checkRes;
}
String key= args[0].toString();
String data = args[1].toString();
return FunConstants.EncryptData(key,data,"PBEWithMD5AndDES",true);
}
}

32
src/com/fr/plugin/data/encrypt/FREncryptWithMD5AndTripleDES.java

@ -0,0 +1,32 @@
package com.fr.plugin.data.encrypt;
import com.fr.intelli.record.Focus;
import com.fr.intelli.record.Original;
import com.fr.record.analyzer.EnableMetrics;
import com.fr.script.AbstractFunction;
import com.fr.stable.Primitive;
import com.fr.stable.fun.Authorize;
@EnableMetrics
@Authorize(callSignKey = FunConstants.PLUGIN_ID)
public class FREncryptWithMD5AndTripleDES extends AbstractFunction {
@Override
@Focus(id = FunConstants.PLUGIN_ID, text = "Plugin-Function_FREnWithMD5AndDES", source = Original.PLUGIN)
public Object run(Object[] args) {
if (!FunConstants.author()) {
return FunConstants.AUTHOR_ERROR;
}
String checkRes = FunConstants.CheckArgs(args, 2);
if (!checkRes.equals(FunConstants.CHECK_PASS)) {
return Primitive.ERROR_VALUE + ":"+checkRes;
}
String key= args[0].toString();
String data = args[1].toString();
return FunConstants.EncryptData(key,data,"PBEWithMD5AndTripleDES",true);
}
}

24
src/com/fr/plugin/data/encrypt/FREncryptorFunction.java

@ -0,0 +1,24 @@
package com.fr.plugin.data.encrypt;
import com.fr.stable.fun.impl.AbstractFunctionDefContainer;
import com.fr.stable.script.FunctionDef;
public class FREncryptorFunction extends AbstractFunctionDefContainer {
@Override
public FunctionDef[] getFunctionDefs() {
return new FunctionDef[]{
new FunctionDef("FRHashData", "功能:生成数据散列码", FRHashData.class.getName()),
new FunctionDef("FRGetDataFromHash", "功能:数据散列码获得数据,如果数据被非法篡改,则返回错误信息。", FRGetDataFromHash.class.getName()),
new FunctionDef("FREncryptWithMD5AndDES", "功能:用MD5AndDES算法加密数据。", FREncryptWithMD5AndDES.class.getName()),
new FunctionDef("FREncryptWithMD5AndTripleDES", "功能:用MD5AndTripleDES算法加密数据。", FREncryptWithMD5AndTripleDES.class.getName()),
new FunctionDef("FRDEncryptWithMD5AndDES", "功能:用MD5AndDES算法解密密数据。", FRDEncryptWithMD5AndDES.class.getName()),
new FunctionDef("FRDEncryptWithMD5AndTripleDES", "功能:用MD5AndTripleDES算法解决密数据。", FRDEncryptWithMD5AndTripleDES.class.getName()),
};
}
@Override
public String getGroupName() {
return "数据加密函数";
}
}

60
src/com/fr/plugin/data/encrypt/FRGetDataFromHash.java

@ -0,0 +1,60 @@
package com.fr.plugin.data.encrypt;
import com.fanruan.api.query.QueryConditionKit;
import com.fanruan.api.query.RestrictionKit;
import com.fr.intelli.record.Focus;
import com.fr.intelli.record.Original;
import com.fr.plugin.data.encrypt.dao.EncryptDataDao;
import com.fr.plugin.data.encrypt.entity.EncryptDataEntity;
import com.fr.record.analyzer.EnableMetrics;
import com.fr.script.AbstractFunction;
import com.fr.stable.Primitive;
import com.fr.stable.db.action.DBAction;
import com.fr.stable.db.dao.DAOContext;
import com.fr.stable.exception.FormulaException;
import com.fr.stable.fun.Authorize;
import java.util.List;
@EnableMetrics
@Authorize(callSignKey = FunConstants.PLUGIN_ID)
public class FRGetDataFromHash extends AbstractFunction {
@Override
@Focus(id = FunConstants.PLUGIN_ID, text = "Plugin-Function_FRHashData", source = Original.PLUGIN)
public Object run(Object[] args) throws FormulaException {
if (!FunConstants.author()) {
return FunConstants.AUTHOR_ERROR;
}
String checkRes = FunConstants.CheckArgs(args, 1);
if (!checkRes.equals(FunConstants.CHECK_PASS)) {
return Primitive.ERROR_VALUE + ":"+checkRes;
}
String hashID= args[0].toString();
return QueryDataFromID(hashID);
}
final private String QueryDataFromID(String hashID){
try {
List<EncryptDataEntity> entities = EncryptDataAccessBridge.getDbAccessor().runQueryAction(new DBAction<List<EncryptDataEntity>>() {
@Override
public List<EncryptDataEntity> run(DAOContext daoContext) throws Exception {
// 查询收入大于10000的人
return daoContext.getDAO(EncryptDataDao.class).find(QueryConditionKit.newQueryCondition().addRestriction(RestrictionKit.eq("id", hashID)));
}
});
String result=entities.get(0).getData();
final String hashDataMd5 = FunConstants.HashData(result, "md5", false);
final String hashDataSha = FunConstants.HashData(result, "sha", false);
if(hashID.equals(hashDataMd5)||hashID.equals(hashDataSha)){
return result;
}
return Primitive.ERROR_VALUE+":数据错误!";
} catch (Exception e) {
return Primitive.ERROR_VALUE + ":"+e.getMessage();
}
}
}

33
src/com/fr/plugin/data/encrypt/FRHashData.java

@ -0,0 +1,33 @@
package com.fr.plugin.data.encrypt;
import com.fr.intelli.record.Focus;
import com.fr.intelli.record.Original;
import com.fr.log.FineLoggerFactory;
import com.fr.record.analyzer.EnableMetrics;
import com.fr.script.AbstractFunction;
import com.fr.stable.Primitive;
import com.fr.stable.fun.Authorize;
@EnableMetrics
@Authorize(callSignKey = FunConstants.PLUGIN_ID)
public class FRHashData extends AbstractFunction {
@Override
@Focus(id = FunConstants.PLUGIN_ID, text = "Plugin-Function_FRHashData", source = Original.PLUGIN)
public Object run(Object[] args) {
if (!FunConstants.author()) {
return FunConstants.AUTHOR_ERROR;
}
String checkRes = FunConstants.CheckArgs(args, 3);
if (!checkRes.equals(FunConstants.CHECK_PASS)) {
return Primitive.ERROR_VALUE + ":"+checkRes;
}
String message= args[0].toString();
String type = args[1].toString();
boolean isSave = Boolean.parseBoolean(args[2].toString());
FineLoggerFactory.getLogger().info("run :"+isSave);
return FunConstants.HashData(message,type,isSave);
}
}

101
src/com/fr/plugin/data/encrypt/FunConstants.java

@ -0,0 +1,101 @@
package com.fr.plugin.data.encrypt;
import com.fr.locale.InterProviderFactory;
import com.fr.log.FineLoggerFactory;
import com.fr.plugin.PluginLicenseManager;
import com.fr.plugin.data.encrypt.dao.EncryptDataDao;
import com.fr.plugin.data.encrypt.entity.EncryptDataEntity;
import com.fr.stable.ArrayUtils;
import com.fr.stable.Primitive;
import com.fr.stable.db.action.DBAction;
import com.fr.stable.db.dao.DAOContext;
import com.fr.stable.fun.Authorize;
import org.jasypt.encryption.pbe.PooledPBEStringEncryptor;
import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig;
import java.math.BigInteger;
import java.security.MessageDigest;
@Authorize(callSignKey = FunConstants.PLUGIN_ID)
public class FunConstants {
static final String PLUGIN_ID = "com.fr.plugin.data.encrypt";
public static final String TABLE_NAME = "FINE_PLUGIN_ENCRYPT_DATA";
static final String AUTHOR_ERROR =InterProviderFactory.getProvider().getLocText("Fine-Design_Data_Encrypt_AUTHOR_ERROR");
static final String CHECK_PASS = InterProviderFactory.getProvider().getLocText("Fine-Design_Data_Encrypt_CHECK_PASS");
static final String ARGS_ERROR= InterProviderFactory.getProvider().getLocText("Fine-Design_Data_Encrypt_ArgsCountError");
static final boolean author() {
return PluginLicenseManager.getInstance().getPluginLicenseByID(PLUGIN_ID).isAvailable();
}
static final String CheckArgs(Object[] args, int num) {
String res = FunConstants.CHECK_PASS;
int len = ArrayUtils.getLength(args);
if (len != num) {
return "Fine-Design_FRFinanceFunction_ArgsCountError";
}
return res;
}
static final boolean SaveData(String hashID,String hashType,String Data) {
try {
EncryptDataAccessBridge.getDbAccessor().runDMLAction(new DBAction<EncryptDataEntity>() {
@Override
public EncryptDataEntity run(DAOContext daoContext) throws Exception {
EncryptDataEntity entity = new EncryptDataEntity();
entity.setId(hashID);
entity.setHashType(hashType);
entity.setData(Data);
daoContext.getDAO(EncryptDataDao.class).add(entity);
return entity;
}
});
} catch (Exception e) {
FineLoggerFactory.getLogger().error("Save Date Error:"+e.getMessage());
return false;
}
return true;
}
static final String HashData(String message,String type,boolean isSave){
BigInteger shaID;
byte[] inputData = message.getBytes();
try{
MessageDigest messageDigest = MessageDigest.getInstance(type); //确定计算方法
messageDigest.update(inputData);
shaID = new BigInteger(messageDigest.digest()); //生成散列码
final String hashID = shaID.toString(32);
if(isSave){
FineLoggerFactory.getLogger().info("HashData hashID:"+hashID);
FunConstants.SaveData(hashID,type,message);
}
return hashID;
} catch (Exception e) {
return Primitive.ERROR_VALUE +":"+ e.getMessage();
}
}
final static SimpleStringPBEConfig getSimpleStringPBEConfig(String secretKey,String algorithm) {
SimpleStringPBEConfig config = new SimpleStringPBEConfig();
config.setPassword(secretKey);
config.setPoolSize("1");
// config.setAlgorithm("PBEWithMD5AndDES");
config.setAlgorithm(algorithm);
config.setKeyObtentionIterations("1000");
config.setProviderName("SunJCE");
config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
config.setIvGeneratorClassName("org.jasypt.iv.RandomIvGenerator");
config.setStringOutputType("base64");
return config;
}
final static String EncryptData(String secretKey, String message,String algorithm, boolean isEncrypt){
PooledPBEStringEncryptor pooledPBEStringEncryptor = new PooledPBEStringEncryptor();
pooledPBEStringEncryptor.setConfig(getSimpleStringPBEConfig(secretKey,algorithm));
String result = isEncrypt ? pooledPBEStringEncryptor.encrypt(message) : pooledPBEStringEncryptor.decrypt(message);
return result;
}
}

2
src/com/fr/plugin/market/update/FunLocaleFinder.java → src/com/fr/plugin/data/encrypt/FunLocaleFinder.java

@ -1,4 +1,4 @@
package com.fr.plugin.market.update;
package com.fr.plugin.data.encrypt;
import com.fr.intelli.record.Focus;
import com.fr.intelli.record.Original;

6
src/com/fr/plugin/data/encrypt/TestFun.java

@ -0,0 +1,6 @@
package com.fr.plugin.data.encrypt;
public class TestFun {
public static void main(String args[]) throws Exception {
}
}

15
src/com/fr/plugin/data/encrypt/dao/EncryptDataDao.java

@ -0,0 +1,15 @@
package com.fr.plugin.data.encrypt.dao;
import com.fr.plugin.data.encrypt.entity.EncryptDataEntity;
import com.fr.stable.db.dao.BaseDAO;
import com.fr.stable.db.session.DAOSession;
public class EncryptDataDao extends BaseDAO<EncryptDataEntity> {
public EncryptDataDao(DAOSession daoSession) {
super(daoSession);
}
@Override
protected Class<EncryptDataEntity> getEntityClass() {
return EncryptDataEntity.class;
}
}

45
src/com/fr/plugin/data/encrypt/entity/EncryptDataEntity.java

@ -0,0 +1,45 @@
package com.fr.plugin.data.encrypt.entity;
import com.fr.plugin.data.encrypt.FunConstants;
import com.fr.stable.AssistUtils;
import com.fr.stable.db.entity.BaseEntity;
import com.fr.third.javax.persistence.Column;
import com.fr.third.javax.persistence.Entity;
import com.fr.third.javax.persistence.Table;
@Entity
@Table(name = FunConstants.TABLE_NAME)
public class EncryptDataEntity extends BaseEntity {
@Column(name = "hashType")
private String hashType;
@Column(name = "Data")
private String data;
public EncryptDataEntity() {
}
public String getHashType() {
return hashType;
}
public void setHashType(String hashType) {
this.hashType = hashType;
}
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
@Override
public String toString() {
return AssistUtils.toString(this);
}
}

3
src/com/fr/plugin/data/encrypt/local/dataEncrypt.properties

@ -0,0 +1,3 @@
Fine-Design_Data_Encrypt_AUTHOR_ERROR=Error:authorization is expired
Fine-Design_Data_Encrypt_CHECK_PASS=checkPass
Fine-Design_Data_Encrypt_ArgsCountError=Args Count Error!

0
src/com/fr/plugin/data/encrypt/local/dataEncrypt_zh_CN.properties

0
src/com/fr/plugin/market/update/resources/menuIcon.png → src/com/fr/plugin/data/encrypt/resources/menuIcon.png

Before

Width:  |  Height:  |  Size: 749 B

After

Width:  |  Height:  |  Size: 749 B

66
src/com/fr/plugin/market/update/FRExchangeRate.java

@ -1,66 +0,0 @@
package com.fr.plugin.market.update;
import com.alibaba.fastjson.JSONObject;
import com.fr.intelli.record.Focus;
import com.fr.intelli.record.Original;
import com.fr.locale.InterProviderFactory;
import com.fr.log.FineLoggerFactory;
import com.fr.plugin.market.update.FunConstants;
import com.fr.record.analyzer.EnableMetrics;
import com.fr.script.AbstractFunction;
import com.fr.stable.ArrayUtils;
import com.fr.stable.Primitive;
import com.fr.stable.StringUtils;
import com.fr.stable.fun.Authorize;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import com.fr.design.i18n.Toolkit;
import static com.fr.plugin.market.update.FunConstants.CurrencyCodeList;
@EnableMetrics
@Authorize(callSignKey = FunConstants.PLUGIN_ID)
public class FRExchangeRate extends AbstractFunction {
@Focus(id = FunConstants.PLUGIN_ID, text = "Plugin-Test_Function_FRExchangeRate", source = Original.PLUGIN)
public Object run(Object[] args) {
if(!FunConstants.author()){
return FunConstants.AUTHOR_ERROR;
}
String checkRes = FunConstants.CheckArgs(args, 2);
if (!checkRes.equals(FunConstants.CHECK_PASS)) {
return Primitive.ERROR_VALUE + checkRes;
}
FineLoggerFactory.getLogger().info("InterProviderFactory.getProvider().getLocText(run):{}", InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_Shanghai_Composite"));
String currencyMain = args[0].toString();
String currencyOther = args[1].toString();
float result;
try {
result= getRate(currencyMain,currencyOther);
} catch (IOException e) {
return Primitive.ERROR_VALUE;
}
if(result==0.0f){
return Primitive.ERROR_VALUE;
}
return result;
}
private final float getRate(String currencyMain ,String currencyOther) throws IOException {
if(!ArrayUtils.contains(CurrencyCodeList,currencyMain)||!ArrayUtils.contains(CurrencyCodeList,currencyOther)){
FineLoggerFactory.getLogger().info(currencyMain+currencyOther);
return 0.0f;
}
final String URI = "https://v6.exchangerate-api.com/v6/ea38228941df52ee76c767cd/latest/"+currencyMain;
Document doc = Jsoup.connect(URI).ignoreContentType(true).get();
final String body = doc.getElementsByTag("body").first().text();
JSONObject j=JSONObject.parseObject(body);
final String rates = JSONObject.parseObject(j.get("conversion_rates").toString()).get(currencyOther).toString();
return Float.parseFloat(rates);
}
}

26
src/com/fr/plugin/market/update/FRFinanceFunction.java

@ -1,26 +0,0 @@
package com.fr.plugin.market.update;
import com.fr.intelli.record.Focus;
import com.fr.record.analyzer.EnableMetrics;
import com.fr.stable.fun.impl.AbstractFunctionDefContainer;
import com.fr.stable.script.FunctionDef;
@EnableMetrics
public class FRFinanceFunction extends AbstractFunctionDefContainer {
@Override
@Focus(id=FunConstants.PLUGIN_ID, text="金融行情数据")
public FunctionDef[] getFunctionDefs() {
return new FunctionDef[]{
new FunctionDef("FRExchangeRate", "功能:\n获取外汇市数据。\n参数1:\n外汇货币代码,如USD、CNY。\n参数2:\n外汇货币代码,如USD、CNY等。\n示例:\nFRExchangeRate(\"USD\",\"CNY\"),表示获取当前1美竞换多少人民币。", FRExchangeRate.class.getName()),
new FunctionDef("FRStockMarket", "功能:\n获取股票市场数据。\n参数1:\n上海或深圳。\n参数2:\n股票代码,\n参数3:股票具体参数,如:\"今日开盘价\",\"昨日收盘价\",\"当前价格\",\"今日最高价\",\"今日最低价\",\"竞买价\",\"竞卖价\",\"成交股票数\",\"成交金额\",\"买一手数\",\"买一报价\",\"买二手数\",\"买二报价\",\"买三手数\",\"买三报价\",\"买四手数\",\"买四报价\",\"买五手数\",\"买五报价\",\"卖一手数\",\"卖一报价\",\"卖二手数\",\"卖二报价\",\"卖三手数\",\"卖三报价\",\"卖四手数\",\"卖四报价\",\"卖五手数\",\"卖五报价\",\n示例:FRStockMarket(\"深圳\",\"002307\",\"今日开盘价\")。", FRStockMarket.class.getName()),
new FunctionDef("FRGoldSilver", "功能:\n获取国际金银行情,国际金价,国际金银行情,国际金价。\n参数1:\n\"伦敦金\",\"伦敦银\",\"COMEX黄金\",\"COMEX白银\",\"黄金T+D\",\"白银T+D\"。\n参数2:\n\"最新价\",\"涨跌\",\"涨跌幅\",\"最高价\",\"最低价\",\"今开价\",\"昨收价\"。\n示例:\nFRGoldSilver(\"白银T+D\",\"最新价\")。", FRGoldSilver.class.getName()),
new FunctionDef("FRForwardMarket", "功能:\n期货市场数据,包括:WTI原油,伦敦布伦特原油,黄金, 白银,天然气,铜,美国大豆。\n参数1:\n \"WTI原油\",\"伦敦布伦特原油\",\"黄金\",\"白银\",\"天然气\",\"铜\",\"美国大豆\"。\n参数2:\n\"最新\",\"昨收\",\"开盘\",\" 最低\",\"最高\"。\n示例:FRForwardMarket(\"伦敦布伦特原油\",\"最高\")。", FRForwardMarket.class.getName()),
new FunctionDef("FRMarketIndex", "功能:\n获取7×24小时权威及时股票指数行情:大盘指数、港股指数、美股指数、期货指数、全球股脂,今日股市指数尽在掌握。\n参数1:\n \"上证指数\",\"富时中国A50指数\",\"恒生指数\",\"日经225\",\"道琼斯30(F)\",\"美国标普500(F)\",\"美元指数期货\"。\n参数2:\n\"最新\",\"昨收\",\"开盘\",\" 最低\",\"最高\"。\n示例:FRMarketIndex(\"道琼斯30(F)\",\"最新\")。", FRMarketIndex.class.getName()),
};
}
@Override
public String getGroupName() {
return "金融行情数据";
}
}

41
src/com/fr/plugin/market/update/FRForwardMarket.java

@ -1,41 +0,0 @@
package com.fr.plugin.market.update;
import com.fr.intelli.record.Focus;
import com.fr.intelli.record.Original;
import com.fr.record.analyzer.EnableMetrics;
import com.fr.script.AbstractFunction;
import com.fr.stable.Primitive;
import com.fr.stable.fun.Authorize;
import java.io.IOException;
@EnableMetrics
@Authorize(callSignKey = FunConstants.PLUGIN_ID)
public class FRForwardMarket extends AbstractFunction {
@Focus(id = FunConstants.PLUGIN_ID, text = "Plugin-Test_Function_FRForwardMarket", source = Original.PLUGIN)
public Object run(Object[] args) {
if(!FunConstants.author()){
return FunConstants.AUTHOR_ERROR;
}
String checkRes = FunConstants.CheckArgs(args,2 );
if (!checkRes.equals(FunConstants.CHECK_PASS)) {
return Primitive.ERROR_VALUE + checkRes;
}
String forwardType = args[0].toString();
String forwardArgs = args[1].toString();
String result;
try {
result= FunConstants.GetForwardData(forwardType,forwardArgs);
} catch (IOException e) {
return Primitive.ERROR_VALUE;
}
if(result==FunConstants.ARGS_ERROR){
return Primitive.ERROR_VALUE;
}
return result;
}
}

44
src/com/fr/plugin/market/update/FRGoldSilver.java

@ -1,44 +0,0 @@
package com.fr.plugin.market.update;
import com.fr.intelli.record.Focus;
import com.fr.intelli.record.Original;
import com.fr.log.FineLoggerFactory;
import com.fr.record.analyzer.EnableMetrics;
import com.fr.script.AbstractFunction;
import com.fr.stable.ArrayUtils;
import com.fr.stable.Primitive;
import com.fr.stable.fun.Authorize;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import java.io.IOException;
@EnableMetrics
@Authorize(callSignKey = FunConstants.PLUGIN_ID)
public class FRGoldSilver extends AbstractFunction {
@Focus(id = FunConstants.PLUGIN_ID, text = "Plugin-Test_Function_FRGoldMarket", source = Original.PLUGIN)
public Object run(Object[] args) {
if(!FunConstants.author()){
return FunConstants.AUTHOR_ERROR;
}
String checkRes = FunConstants.CheckArgs(args,2 );
if (!checkRes.equals(FunConstants.CHECK_PASS)) {
return Primitive.ERROR_VALUE + checkRes;
}
String goldType = args[0].toString();
String goldArgs = args[1].toString();
String result;
try {
result= FunConstants.GetGoldData(goldType,goldArgs);
} catch (IOException e) {
return Primitive.ERROR_VALUE;
}
if(result==FunConstants.ARGS_ERROR){
return Primitive.ERROR_VALUE;
}
return result;
}
}

40
src/com/fr/plugin/market/update/FRMarketIndex.java

@ -1,40 +0,0 @@
package com.fr.plugin.market.update;
import com.fr.intelli.record.Focus;
import com.fr.intelli.record.Original;
import com.fr.record.analyzer.EnableMetrics;
import com.fr.script.AbstractFunction;
import com.fr.stable.Primitive;
import com.fr.stable.fun.Authorize;
import java.io.IOException;
@EnableMetrics
@Authorize(callSignKey = FunConstants.PLUGIN_ID)
public class FRMarketIndex extends AbstractFunction {
@Focus(id = FunConstants.PLUGIN_ID, text = "Plugin-Test_Function_FRMarketIndex", source = Original.PLUGIN)
public Object run(Object[] args) {
if(!FunConstants.author()){
return FunConstants.AUTHOR_ERROR;
}
String checkRes = FunConstants.CheckArgs(args,2 );
if (!checkRes.equals(FunConstants.CHECK_PASS)) {
return Primitive.ERROR_VALUE + checkRes;
}
String indexType = args[0].toString();
String indexArgs = args[1].toString();
String result;
try {
result= FunConstants.GetIndexData(indexType,indexArgs);
} catch (IOException e) {
return Primitive.ERROR_VALUE;
}
if(result==FunConstants.ARGS_ERROR){
return Primitive.ERROR_VALUE;
}
return result;
}
}

70
src/com/fr/plugin/market/update/FRStockMarket.java

@ -1,70 +0,0 @@
package com.fr.plugin.market.update;
import com.alibaba.fastjson.JSONObject;
import com.fr.intelli.record.Focus;
import com.fr.intelli.record.Original;
import com.fr.log.FineLoggerFactory;
import com.fr.record.analyzer.EnableMetrics;
import com.fr.script.AbstractFunction;
import com.fr.stable.ArrayUtils;
import com.fr.stable.Primitive;
import com.fr.stable.fun.Authorize;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import java.io.IOException;
import java.util.regex.Pattern;
import static com.fr.plugin.market.update.FunConstants.StockCity;
@EnableMetrics
@Authorize(callSignKey = FunConstants.PLUGIN_ID)
public class FRStockMarket extends AbstractFunction {
@Focus(id = FunConstants.PLUGIN_ID, text = "Plugin-Test_Function_FRStockMarket", source = Original.PLUGIN)
public Object run(Object[] args) {
if (!FunConstants.author()) {
return FunConstants.AUTHOR_ERROR;
}
String checkRes = FunConstants.CheckArgs(args, 3);
if (!checkRes.equals(FunConstants.CHECK_PASS)) {
return Primitive.ERROR_VALUE + checkRes;
}
String city = args[0].toString();
String stockCode = args[1].toString();
String stockArgs = args[2].toString();
String result;
try {
result = getStock(city, stockCode, stockArgs);
} catch (IOException e) {
return Primitive.ERROR_VALUE;
}
if (result == FunConstants.ARGS_ERROR) {
return Primitive.ERROR_VALUE;
}
return result;
}
private final String getStock(String city, String stockCode, String stockArgs) throws IOException {
if (!ArrayUtils.contains(StockCity, city) || !ArrayUtils.contains(FunConstants.StockArgs, stockArgs)) {
return FunConstants.ARGS_ERROR;
}
if (!FunConstants.CheckStockCode(stockCode)) {
return FunConstants.ARGS_ERROR;
}
final String cityCode = city.equals(StockCity[0]) ? "sh" : "sz";
final String CHINA_BANK_URI = "http://hq.sinajs.cn/list=" + cityCode + stockCode;
return getStockData(CHINA_BANK_URI, stockArgs);
}
private String getStockData(String url, String stockArgs) throws IOException {
Document doc = Jsoup.connect(url).ignoreContentType(true).get();
final String s = doc.text().split("\"")[1];
final String[] stocks = s.split(",");
final int stockArgsIndex = ArrayUtils.indexOf(FunConstants.StockArgs, stockArgs);
final String result = stocks[stockArgsIndex];
return result;
}
}

211
src/com/fr/plugin/market/update/FunConstants.java

@ -1,211 +0,0 @@
package com.fr.plugin.market.update;
import com.fr.locale.InterProviderFactory;
import com.fr.log.FineLoggerFactory;
import com.fr.plugin.PluginLicenseManager;
import com.fr.plugin.context.PluginContexts;
import com.fr.stable.ArrayUtils;
import com.fr.stable.fun.Authorize;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.regex.Pattern;
import com.fr.design.i18n.Toolkit;
@Authorize(callSignKey = FunConstants.PLUGIN_ID)
public class FunConstants {
static final String PLUGIN_ID = "com.fr.plugin.market.update";
static final String AUTHOR_ERROR =InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_AUTHOR_ERROR");
static final String CHECK_PASS = InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_CHECK_PASS");
static final String ARGS_ERROR= InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_ArgsCountError");
//外汇
static final String[] CurrencyCodeList = new String[]{
"USD", "AED", "AFN", "ALL", "AMD", "ANG", "AOA", "ARS", "AUD", "AWG", "AZN", "BAM", "BBD", "BDT", "BGN", "BHD", "BIF", "BMD", "BND", "BOB", "BRL", "BSD", "BTN", "BWP", "BYN", "BZD", "CAD", "CDF", "CHF", "CLP", "CNY", "COP", "CRC", "CUC", "CUP", "CVE", "CZK", "DJF", "DKK", "DOP", "DZD", "EGP", "ERN", "ETB", "EUR", "FJD", "FKP", "FOK", "GBP", "GEL", "GGP", "GHS", "GIP", "GMD", "GNF", "GTQ", "GYD", "HKD", "HNL", "HRK", "HTG", "HUF", "IDR", "ILS", "IMP", "INR", "IQD", "IRR", "ISK", "JMD", "JOD", "JPY", "KES", "KGS", "KHR", "KID", "KMF", "KRW", "KWD", "KYD", "KZT", "LAK", "LBP", "LKR", "LRD", "LSL", "LYD", "MAD", "MDL", "MGA", "MKD", "MMK", "MNT", "MOP", "MRU", "MUR", "MVR", "MWK", "MXN", "MYR", "MZN", "NAD", "NGN", "NIO", "NOK", "NPR", "NZD", "OMR", "PAB", "PEN", "PGK", "PHP", "PKR", "PLN", "PYG", "QAR", "RON", "RSD", "RUB", "RWF", "SAR", "SBD", "SCR", "SDG", "SEK", "SGD", "SHP", "SLL", "SOS", "SRD", "SSP", "STN", "SYP", "SZL", "THB", "TJS", "TMT", "TND", "TOP", "TRY", "TTD", "TVD", "TWD", "TZS", "UAH", "UGX", "UYU", "UZS", "VES", "VND", "VUV", "WST", "XAF", "XCD", "XDR", "XOF", "XPF", "YER", "ZAR", "ZMW"
};
//股市
static final String[] StockArgs={
// "股票名字","今日开盘价","昨日收盘价","当前价格","今日最高价","今日最低价","竞买价","竞卖价","成交股票数","成交金额",
InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_Stock_Name"),
InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_Begin_Price"),
InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_End_Price"),
InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_Now_Price"),
InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_High_Price"),
InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_Low_Price"),
InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_Bid_Price"),
InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_Auction_Price"),
InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_Trade_Volume"),
InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_Trade_Amount"),
// "买一手数","买一报价","买二手数","买二报价","买三手数","买三报价","买四手数","买四报价","买五手数","买五报价",
InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_Buy_1_Number"),
InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_Buy_1_Price"),
InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_Buy_2_Number"),
InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_Buy_2_Price"),
InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_Buy_3_Number"),
InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_Buy_3_Price"),
InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_Buy_4_Number"),
InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_Buy_4_Price"),
InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_Buy_5_Number"),
InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_Buy_5_Price"),
// "卖一手数","卖一报价","卖二手数","卖二报价","卖三手数","卖三报价","卖四手数","卖四报价","卖五手数","卖五报价",
InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_Sell_1_Number"),
InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_Sell_1_Price"),
InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_Sell_2_Number"),
InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_Sell_2_Price"),
InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_Sell_3_Number"),
InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_Sell_3_Price"),
InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_Sell_4_Number"),
InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_Sell_4_Price"),
InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_Sell_5_Number"),
InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_Sell_5_Price"),
// "日期","时间"
InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_Stock_Date"),
InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_Stock_Time"),
};
static final String[] StockCity={
// "上海","深圳",
InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_Shang_Hai"), InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_Shen_Zhen")
};
//金银
static final String[] GoldType={
// "伦敦金","伦敦银","COMEX黄金","COMEX白银","黄金T+D","白银T+D"
InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_British_Gold"),
InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_British_Silver"),
InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_COMEX_Gold"),
InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_COMEX_Silver"),
InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_Gold_TD"),
InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_Silver_TD"),
};
static final String[] GoldName={
// "最新价","涨跌","涨跌幅","最高价","最低价","今开价","昨收价"
InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_New_Price"),
InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_Rise_Fall"),
InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_Rise_Fall_Amount"),
InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_High_Price1"),
InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_Low_Price1"),
InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_Begin_Price1"),
InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_End_Price1"),
};
//期货
static final String[] ForwardType={
// "WTI原油","伦敦布伦特原油","黄金","白银","天然气","铜","美国大豆"
InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_Crude_Oil"),
InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_Brent_Oil"),
InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_Gold"),
InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_Silver"),
InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_Natural_Gas"),
InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_Copper"),
InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_Us_Soybeans"),
};
static final String[] ForwardURL={
"crude-oil","brent-oil","gold","silver","natural-gas","copper","us-soybeans"
};
static final String[] ForwardAndIndexArgs={
// "最新","昨收","开盘","最低","最高"
InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_Forward_New_Price"),
InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_Forward_End_Price"),
InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_Forward_Begin_Price"),
InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_Forward_Low_Price"),
InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_Forward_High_Price"),
};
//指数
static final String[] IndexType={
// "上证指数","富时中国A50指数","恒生指数","日经225","道琼斯30(F)","美国标普500(F)","美元指数期货"
InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_Shanghai_Composite"),
InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_Ftse_China_A50"),
InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_Hang_Sen"),
InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_Japan_Ni225"),
InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_US_30-Futures"),
InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_US_Spx_500_futures"),
InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_US_Dollar_Index"),
};
static final String[] IndexURL={
"shanghai-composite","ftse-china-a50","hang-sen-40","japan-ni225","us-30-futures","us-spx-500-futures","us-dollar-index"
};
static final boolean author() {
return PluginLicenseManager.getInstance().getPluginLicenseByID(PLUGIN_ID).isAvailable();
}
static final boolean CheckStockCode(String code){
final String regExp="^002[\\d]{3}|000[\\d]{3}|300[\\d]{3}|600[\\d]{3}|60[\\d]{4}$ ";
final boolean isMatched = Pattern.compile(regExp).matcher(code).matches();
return isMatched;
}
static final String CheckArgs(Object[] args, int num) {
String res = FunConstants.CHECK_PASS;
int len = ArrayUtils.getLength(args);
if (len != num) {
return "Fine-Design_FRFinanceFunction_ArgsCountError";
}
return res;
}
static final String GetGoldData(String goldType ,String goldArgs) throws IOException {
if(!ArrayUtils.contains(GoldType,goldType)||!ArrayUtils.contains(GoldName,goldArgs)){
return ARGS_ERROR;
}
final String GOLD_URI = "http://www.dyhjw.com/guojijin.html";
final String CLASS_NAME="gold_price_data";
final String CSS_QUERY_NAME="[code='XAU']";
Document doc = Jsoup.connect(GOLD_URI).ignoreContentType(true).get();
String r=doc.getElementsByClass(CLASS_NAME).first().select(CSS_QUERY_NAME).first().text();
String[] goldData=r.split(" ");
final int goldArgsIndex = ArrayUtils.indexOf(GoldName, goldArgs)+1;
return goldData[goldArgsIndex];
}
static final String GetForwardData(String forwardType ,String forwardArgs) throws IOException {
if(!ArrayUtils.contains(ForwardType,forwardType)||!ArrayUtils.contains(ForwardAndIndexArgs,forwardArgs)){
return ARGS_ERROR;
}
final int i = ArrayUtils.indexOf(ForwardType, forwardType);
final String CHINA_BANK_URI = "https://cn.investing.com/commodities/"+ForwardURL[i];
String agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.54";
Document doc = Jsoup.connect(CHINA_BANK_URI).ignoreContentType(true).userAgent(agent).get();
if(ForwardAndIndexArgs[0].equals(forwardArgs)){
return doc.getElementById("last_last").text();
}
final String ELEMENT_ID="quotes_summary_secondary_data";
final String CSS_QUERY="[ dir=\"ltr\"]";
final String summaryData = doc.getElementById(ELEMENT_ID).select(CSS_QUERY).text().replaceAll("- ","");
final String[] split = summaryData.split(" ");
final int argsIndex = ArrayUtils.indexOf(ForwardAndIndexArgs, forwardArgs);
return split[argsIndex-1];
}
static final String GetIndexData(String indexType ,String indexdArgs) throws IOException {
FineLoggerFactory.getLogger().info("InterProviderFactory.getProvider().getLocText(\"Fine-Design_Market_Update_Shanghai_Composite\"):{}",InterProviderFactory.getProvider().getLocText("Fine-Design_Market_Update_Shanghai_Composite"));
FineLoggerFactory.getLogger().info("IndexType[0]:{}",IndexType[0]);
FineLoggerFactory.getLogger().info("ForwardAndIndexArgs[0]:{}",ForwardAndIndexArgs[0]);
if(!ArrayUtils.contains(IndexType,indexType)||!ArrayUtils.contains(ForwardAndIndexArgs,indexdArgs)){
return ARGS_ERROR;
}
final int i = ArrayUtils.indexOf(IndexType, indexType);
final String CHINA_BANK_URI = "https://cn.investing.com/indices/"+IndexURL[i];
String agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.54";
Document doc = Jsoup.connect(CHINA_BANK_URI).ignoreContentType(true).userAgent(agent).get();
if(ForwardAndIndexArgs[0].equals(indexdArgs)){
return doc.getElementById("last_last").text();
}
final String summaryData = doc.getElementById("quotes_summary_secondary_data").select("[ dir=\"ltr\"]").text().replaceAll("- ","");
final String[] split = summaryData.split(" ");
final int argsIndex = ArrayUtils.indexOf(ForwardAndIndexArgs, indexdArgs);
return split[argsIndex-1];
}
}

56
src/com/fr/plugin/market/update/TestFun.java

@ -1,56 +0,0 @@
package com.fr.plugin.market.update;
import com.fr.log.FineLoggerFactory;
import com.fr.stable.ArrayUtils;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import java.util.ResourceBundle;
import static com.fr.design.i18n.Toolkit.i18nText;
public class TestFun {
public static void main(String args[]) throws Exception {
// URL u=new URL("http://hl.anseo.cn");
// InputStream in=u.openStream();
// ByteArrayOutputStream out=new ByteArrayOutputStream();
// try {
// byte buf[]=new byte[1024];
// int read = 0;
// while ((read = in.read(buf)) > 0) {
// out.write(buf, 0, read);
// }
// } finally {
// if (in != null) {
// in.close();
// }
// }
// byte b[]=out.toByteArray( );
// final String s = new String(b, "utf-8");
//// JSONObject j=JSONObject.parseObject(s);
// System.out.println(s);
final String CHINA_BANK_URI = "https://cn.investing.com/currencies/us-dollar-index";
if((!ArrayUtils.contains(FunConstants.IndexType,"上证指数"))){
System.out.printf("00");
}
Document doc = Jsoup.connect(CHINA_BANK_URI).ignoreContentType(true).userAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.54").get();
// final String body = doc.getElementsByTag("body").first().text();
// JSONObject j=JSONObject.parseObject(body);
// System.out.printf(JSONObject.parseObject(j.get("conversion_rates").toString()).get("CNY").toString());
// final String s = doc.text().split("\"")[1];
// final String[] stocks = s.split(",");
// final int stockArgsIndex = ArrayUtils.indexOf(FunConstants.StockArgs, "日期");
// final String regExp="^002[\\d]{3}|000[\\d]{3}|300[\\d]{3}|600[\\d]{3}|60[\\d]{4}$ ";
// final boolean isMatched = Pattern.compile(regExp).matcher("600928").matches();
// String r=doc.getElementsByClass("gold_price_data").first().select("[code='XAU']").first().text();
// String[] ra=r.split(" ");
ResourceBundle resourceBundle = ResourceBundle.getBundle("marketUpdate");
final String string = resourceBundle.getString("Plugin.Function.Market_Update_AUTHOR_ERROR");
FineLoggerFactory.getLogger().info(string);
FineLoggerFactory.getLogger().info(i18nText("Plugin.Function.Market_Update_AUTHOR_ERROR"));
FineLoggerFactory.getLogger().info(doc.getElementById("last_last").text());
FineLoggerFactory.getLogger().info(doc.getElementById("quotes_summary_secondary_data").select("[ dir=\"ltr\"]").text().replaceAll("- ",""));
}
}

3
src/com/fr/plugin/market/update/local/marketUpdate.properties

@ -1,3 +0,0 @@
Plugin.Function.Market_Update_AUTHOR_ERROR=Error:authorization is expired
Plugin.Function.Market_Update_CHECK_PASS=checkPass
Plugin.Function.Market_Update_ArgsCountError=Args Count Error!

66
src/com/fr/plugin/market/update/local/marketUpdate_zh_CN.properties

@ -1,66 +0,0 @@
Fine-Design_Market_Update_Shang_Hai=\u4e0a\u6d77
Fine-Design_Market_Update_Shen_Zhen=\u6df1\u5733
Fine-Design_Market_Update_Stock_Name=\u80a1\u7968\u540d\u5b57
Fine-Design_Market_Update_Begin_Price=\u4eca\u65e5\u5f00\u76d8\u4ef7
Fine-Design_Market_Update_End_Price=\u6628\u65e5\u6536\u76d8\u4ef7
Fine-Design_Market_Update_Now_Price=\u5f53\u524d\u4ef7\u683c
Fine-Design_Market_Update_High_Price=\u4eca\u65e5\u6700\u9ad8\u4ef7
Fine-Design_Market_Update_Low_Price=\u4eca\u65e5\u6700\u4f4e\u4ef7
Fine-Design_Market_Update_Bid_Price=\u7ade\u4e70\u4ef7
Fine-Design_Market_Update_Auction_Price=\u7ade\u5356\u4ef7
Fine-Design_Market_Update_Trade_Volume=\u6210\u4ea4\u80a1\u7968\u6570
Fine-Design_Market_Update_Trade_Amount=\u6210\u4ea4\u91d1\u989d
Fine-Design_Market_Update_Buy_1_Number=\u4e70\u4e00\u624b\u6570
Fine-Design_Market_Update_Buy_2_Number=\u4e70\u4e8c\u624b\u6570
Fine-Design_Market_Update_Buy_3_Number=\u4e70\u4e09\u624b\u6570
Fine-Design_Market_Update_Buy_4_Number=\u4e70\u56db\u624b\u6570
Fine-Design_Market_Update_Buy_5_Number=\u4e70\u4e94\u624b\u6570
Fine-Design_Market_Update_Buy_1_Price=\u4e70\u4e00\u62a5\u4ef7
Fine-Design_Market_Update_Buy_2_Price=\u4e70\u4e8c\u62a5\u4ef7
Fine-Design_Market_Update_Buy_3_Price=\u4e70\u4e09\u62a5\u4ef7
Fine-Design_Market_Update_Buy_4_Price=\u4e70\u56db\u62a5\u4ef7
Fine-Design_Market_Update_Buy_5_Price=\u4e70\u4e94\u62a5\u4ef7
Fine-Design_Market_Update_Sell_1_Number=\u5356\u4e00\u624b\u6570
Fine-Design_Market_Update_Sell_1_Price=\u5356\u4e00\u62a5\u4ef7
Fine-Design_Market_Update_Sell_2_Number=\u5356\u4e8c\u624b\u6570
Fine-Design_Market_Update_Sell_2_Price=\u5356\u4e8c\u62a5\u4ef7
Fine-Design_Market_Update_Sell_3_Number=\u5356\u4e09\u624b\u6570
Fine-Design_Market_Update_Sell_3_Price=\u5356\u4e09\u62a5\u4ef7
Fine-Design_Market_Update_Sell_4_Number=\u5356\u56db\u624b\u6570
Fine-Design_Market_Update_Sell_4_Price=\u5356\u56db\u62a5\u4ef7
Fine-Design_Market_Update_Sell_5_Number=\u5356\u4e94\u624b\u6570
Fine-Design_Market_Update_Sell_5_Price=\u5356\u4e94\u62a5\u4ef7
Fine-Design_Market_Update_Stock_Date=\u65e5\u671f
Fine-Design_Market_Update_Stock_Time=\u65f6\u95f4
Fine-Design_Market_Update_New_Price=\u6700\u65b0\u4ef7
Fine-Design_Market_Update_Rise_Fall=\u6da8\u8dcc
Fine-Design_Market_Update_Rise_Fall_Amount=\u6da8\u8dcc\u5e45
Fine-Design_Market_Update_High_Price1=\u6700\u9ad8\u4ef7
Fine-Design_Market_Update_Low_Price1=\u6700\u4f4e\u4ef7
Fine-Design_Market_Update_Begin_Price1=\u4eca\u5f00\u4ef7
Fine-Design_Market_Update_End_Price1=\u6628\u6536\u4ef7
Fine-Design_Market_Update_Crude_Oil=\u0057\u0054\u0049\u539f\u6cb9
Fine-Design_Market_Update_Brent_Oil=\u4f26\u6566\u5e03\u4f26\u7279\u539f\u6cb9
Fine-Design_Market_Update_Gold=\u9ec4\u91d1
Fine-Design_Market_Update_Silver=\u767d\u94f6
Fine-Design_Market_Update_Natural_Gas=\u5929\u7136\u6c14
Fine-Design_Market_Update_Copper=\u94dc
Fine-Design_Market_Update_Us_Soybeans=\u7f8e\u56fd\u5927\u8c46
Fine-Design_Market_Update_Forward_New_Price=\u6700\u65b0
Fine-Design_Market_Update_Forward_End_Price=\u6628\u6536
Fine-Design_Market_Update_Forward_Begin_Price=\u5f00\u76d8
Fine-Design_Market_Update_Forward_Low_Price=\u6700\u4f4e
Fine-Design_Market_Update_Forward_High_Price=\u6700\u9ad8
Fine-Design_Market_Update_Shanghai_Composite=\u4e0a\u8bc1\u6307\u6570
Fine-Design_Market_Update_Ftse_China_A50=\u5bcc\u65f6\u4e2d\u56fd\u0041\u0035\u0030\u6307\u6570
Fine-Design_Market_Update_Hang_Sen=\u6052\u751f\u6307\u6570
Fine-Design_Market_Update_Japan_Ni225=\u65e5\u7ecf\u0032\u0032\u0035
Fine-Design_Market_Update_US_30-Futures=\u9053\u743c\u65af\u0033\u0030\u0028\u0046\u0029
Fine-Design_Market_Update_US_Spx_500_futures=\u7f8e\u56fd\u6807\u666e\u0035\u0030\u0030\u0028\u0046\u0029
Fine-Design_Market_Update_US_Dollar_Index=\u7f8e\u5143\u6307\u6570\u671f\u8d27
Fine-Design_Market_Update_British_Gold=\u4f26\u6566\u91d1
Fine-Design_Market_Update_British_Silver=\u4f26\u6566\u94f6
Fine-Design_Market_Update_COMEX_Gold=\u0043\u004f\u004d\u0045\u0058\u9ec4\u91d1
Fine-Design_Market_Update_COMEX_Silver=\u0043\u004f\u004d\u0045\u0058\u767d\u94f6
Fine-Design_Market_Update_Gold_TD=\u9ec4\u91d1\u0054\u002b\u0044
Fine-Design_Market_Update_Silver_TD=\u767d\u94f6\u0054\u002b\u0044
Loading…
Cancel
Save