独行之狼
4 years ago
44 changed files with 529 additions and 733 deletions
Binary file not shown.
@ -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> |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -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> |
@ -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> |
@ -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> |
@ -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; |
||||
} |
||||
} |
@ -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); |
||||
} |
||||
|
||||
|
||||
|
||||
} |
@ -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); |
||||
} |
||||
|
||||
|
||||
|
||||
} |
@ -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); |
||||
} |
||||
|
||||
|
||||
|
||||
} |
@ -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); |
||||
} |
||||
|
||||
|
||||
|
||||
} |
@ -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 "数据加密函数"; |
||||
} |
||||
} |
@ -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(); |
||||
} |
||||
} |
||||
} |
@ -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); |
||||
} |
||||
|
||||
|
||||
} |
@ -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; |
||||
} |
||||
} |
@ -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; |
@ -0,0 +1,6 @@
|
||||
package com.fr.plugin.data.encrypt; |
||||
|
||||
public class TestFun { |
||||
public static void main(String args[]) throws Exception { |
||||
} |
||||
} |
@ -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; |
||||
} |
||||
} |
@ -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); |
||||
} |
||||
} |
@ -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! |
Before Width: | Height: | Size: 749 B After Width: | Height: | Size: 749 B |
@ -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); |
||||
} |
||||
} |
@ -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 "金融行情数据"; |
||||
} |
||||
} |
@ -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; |
||||
} |
||||
|
||||
|
||||
} |
@ -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; |
||||
} |
||||
|
||||
|
||||
} |
@ -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; |
||||
} |
||||
|
||||
|
||||
} |
@ -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; |
||||
} |
||||
} |
@ -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]; |
||||
|
||||
} |
||||
} |
@ -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("- ","")); |
||||
} |
||||
} |
@ -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! |
@ -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…
Reference in new issue