diff --git a/erm.frontend/package.json b/erm.frontend/package.json index 1610b50a..95bfa9c9 100644 --- a/erm.frontend/package.json +++ b/erm.frontend/package.json @@ -1,6 +1,6 @@ { "name": "erm.frontend", - "version": "8.1.50", + "version": "8.2.1", "description": "", "private": false, "keywords": [], @@ -111,7 +111,7 @@ "node-sql-parser": "5.3.4", "pinia": "2.2.6", "pinia-undo": "0.2.4", - "platform-core": "8.2.0", + "platform-core": "8.2.7", "quasar": "2.17.4", "sort-array": "5.0.0", "svg-path-commander": "2.1.5", diff --git a/erm.frontend/src/views/kpi/Indicator.vue b/erm.frontend/src/views/kpi/Indicator.vue index b6495932..ebfb21a8 100644 --- a/erm.frontend/src/views/kpi/Indicator.vue +++ b/erm.frontend/src/views/kpi/Indicator.vue @@ -4,8 +4,8 @@ :title="$t('erm.kpi.indicator.grid.title')" :config-button="true" selection="multiple" - :checkbox-selection="true" :sticky-num="2" + :checkbox-selection="true" :data-url="Environment.apiContextPath('/api/erm/kpi/indicator')" :query-form-cols-num="4" :query-form-fields="[ @@ -133,7 +133,6 @@ :editor="{ dialog: { width: '800px', - height: '650px', }, form: { colsNum: 3, @@ -248,7 +247,7 @@ import 'tailwindcss/utilities.css'; import { ref } from 'vue'; import { Environment, DictionaryTools, Formater, Options, Tools } from 'platform-core'; -import IndicatorStatus from './IndicatorStatus'; +//import IndicatorStatus from './IndicatorStatus'; const gridRef = ref(); diff --git a/erm.frontend/src/views/kpi/Lib.vue b/erm.frontend/src/views/kpi/Lib.vue index ca0b627c..2d8b8fe0 100644 --- a/erm.frontend/src/views/kpi/Lib.vue +++ b/erm.frontend/src/views/kpi/Lib.vue @@ -20,11 +20,11 @@ :toolbar-actions="[ 'refresh', 'separator', + 'expand', [ { extend: 'addTop', label: $t('erm.kpi.lib.grid.toolbar.addTop') }, { extend: 'addChild', label: $t('erm.kpi.lib.grid.toolbar.addChild') }, ], - 'expand', 'edit', 'remove', 'separator', @@ -42,7 +42,6 @@ :editor="{ dialog: { width: '600px', - height: '300px', }, form: { colsNum: 1, diff --git a/gradle.properties b/gradle.properties index ec052acf..c741c46e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -36,9 +36,9 @@ application_version=1.0.0 # platform ######################################gra##################### platform_group=io.sc -platform_version=8.1.50 -platform_plugin_version=8.1.50 -platform_core_frontend_version=8.2.0 +platform_version=8.2.1 +platform_plugin_version=8.2.1 +platform_core_frontend_version=8.2.7 ########################################################### # dependencies version diff --git a/io.sc.engine.mv.frontend/package.json b/io.sc.engine.mv.frontend/package.json index b6d7fbec..17978993 100644 --- a/io.sc.engine.mv.frontend/package.json +++ b/io.sc.engine.mv.frontend/package.json @@ -1,6 +1,6 @@ { "name": "io.sc.engine.mv.frontend", - "version": "8.1.50", + "version": "8.2.1", "description": "", "private": false, "keywords": [], @@ -111,7 +111,7 @@ "node-sql-parser": "5.3.4", "pinia": "2.2.6", "pinia-undo": "0.2.4", - "platform-core": "8.2.0", + "platform-core": "8.2.7", "quasar": "2.17.4", "sort-array": "5.0.0", "svg-path-commander": "2.1.5", diff --git a/io.sc.engine.rule.client.spring/src/main/java/io/sc/engine/rule/client/spring/initializer/AutoCompileDeployedModelInitializer.java b/io.sc.engine.rule.client.spring/src/main/java/io/sc/engine/rule/client/spring/initializer/AutoCompileDeployedModelInitializer.java index ca10a13b..152c0c56 100644 --- a/io.sc.engine.rule.client.spring/src/main/java/io/sc/engine/rule/client/spring/initializer/AutoCompileDeployedModelInitializer.java +++ b/io.sc.engine.rule.client.spring/src/main/java/io/sc/engine/rule/client/spring/initializer/AutoCompileDeployedModelInitializer.java @@ -2,7 +2,7 @@ package io.sc.engine.rule.client.spring.initializer; import io.sc.engine.rule.client.Executor; import io.sc.engine.rule.client.spring.service.ExecutorFactoryService; -import io.sc.engine.rule.core.classes.ResourceAbstract; +import io.sc.engine.rule.core.ResourceAbstract; import io.sc.engine.rule.core.enums.DeployStatus; import io.sc.platform.core.initializer.ApplicationInitializer; import io.sc.platform.core.initializer.ApplicationInitializerExecuteException; @@ -12,6 +12,7 @@ import org.slf4j.LoggerFactory; import org.springframework.context.ApplicationContext; import org.springframework.stereotype.Component; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -54,7 +55,7 @@ public class AutoCompileDeployedModelInitializer implements ApplicationInitializ Executor executor=executorFactoryService.getExecutor(); if(executor!=null) { try { - List resources =executor.getLoader().getAllReleasableResourceAbstract(); + List resources =new ArrayList<>();//executor.getLoader().getAllReleasableResourceAbstract(); if(resources!=null && resources.size()>0) { if ("deployed".equalsIgnoreCase(autoCompile)) { @@ -83,7 +84,7 @@ public class AutoCompileDeployedModelInitializer implements ApplicationInitializ for(ResourceAbstract resource : resources) { if(DeployStatus.ON_LINE.equals(resource.getStatus())) { log.info("auto compile deployed resource {}_V{}({}) ......",resource.getCode(),resource.getVersion(),resource.getName()); - executor.compileByCode(resource.getCode(), resource.getVersion()); + executor.compile(resource.getCode(), resource.getVersion()); } } } @@ -107,7 +108,7 @@ public class AutoCompileDeployedModelInitializer implements ApplicationInitializ for(Entry entry : last.entrySet()) { ResourceAbstract resource =entry.getValue(); log.info("auto compile deployed resource {}_V{}({}) ......",resource.getCode(),resource.getVersion(),resource.getName()); - executor.compileByCode(resource.getCode(), resource.getVersion()); + executor.compile(resource.getCode(), resource.getVersion()); } } } diff --git a/io.sc.engine.rule.client.spring/src/main/java/io/sc/engine/rule/client/spring/service/impl/LocalLoaderImpl.java b/io.sc.engine.rule.client.spring/src/main/java/io/sc/engine/rule/client/spring/service/impl/LocalLoaderImpl.java index 5c56b213..17007090 100644 --- a/io.sc.engine.rule.client.spring/src/main/java/io/sc/engine/rule/client/spring/service/impl/LocalLoaderImpl.java +++ b/io.sc.engine.rule.client.spring/src/main/java/io/sc/engine/rule/client/spring/service/impl/LocalLoaderImpl.java @@ -1,14 +1,12 @@ package io.sc.engine.rule.client.spring.service.impl; import io.sc.engine.rule.client.spring.service.LocalLoader; -import io.sc.engine.rule.core.classes.ResourceAbstract; -import io.sc.engine.rule.core.code.impl.support.ResourceWrapper; +import io.sc.engine.rule.core.code.ExecuteUnit; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.stereotype.Service; import java.lang.reflect.Method; -import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -16,43 +14,38 @@ import java.util.concurrent.ConcurrentHashMap; public class LocalLoaderImpl implements LocalLoader{ private static final String RESOURCE_SERVICE_BEAN_NAME ="io.sc.engine.rule.server.resource.service.impl.ResourceServiceImpl"; @Autowired private ApplicationContext applicationContext; - private Map cache =new ConcurrentHashMap(); + private Map cache =new ConcurrentHashMap<>(); @Override - public void cleanCache() throws Exception { - cache.clear(); - } - - @Override - public ResourceWrapper getResourceById(String resourceId) throws Exception { + public ExecuteUnit load(String resourceId) throws Exception { Object bean =applicationContext.getBean(RESOURCE_SERVICE_BEAN_NAME); if(bean!=null) { Method method =bean.getClass().getMethod("getDefineById", String.class); - ResourceWrapper result =(ResourceWrapper)method.invoke(bean, resourceId); + ExecuteUnit result =(ExecuteUnit)method.invoke(bean, resourceId); return result; } return null; } @Override - public ResourceWrapper getResourceByCode(String resourceCode, Integer version) throws Exception { + public ExecuteUnit load(String resourceCode, Integer version) throws Exception { if(version==null) {//未指定版本时,不缓存,加载最新的 Object bean =applicationContext.getBean(RESOURCE_SERVICE_BEAN_NAME); if(bean!=null) { Method method =bean.getClass().getMethod("getDefineByCode", String.class,Integer.class); - return (ResourceWrapper)method.invoke(bean, resourceCode,version); + return (ExecuteUnit)method.invoke(bean, resourceCode,version); } }else {//指定版本时,缓存 if(resourceCode!=null && !"".equals(resourceCode.trim())) { String key =getCacheKey(resourceCode,version); - ResourceWrapper wrapper =cache.get(key); + ExecuteUnit wrapper =cache.get(key); if(wrapper!=null) { return wrapper; }else { Object bean =applicationContext.getBean(RESOURCE_SERVICE_BEAN_NAME); if(bean!=null) { Method method =bean.getClass().getMethod("getDefineByCode", String.class,Integer.class); - wrapper =(ResourceWrapper)method.invoke(bean, resourceCode,version); + wrapper =(ExecuteUnit)method.invoke(bean, resourceCode,version); if(wrapper!=null) { key =getCacheKey(resourceCode,version); if(key!=null && !"".equals(key.trim())) { @@ -69,19 +62,6 @@ public class LocalLoaderImpl implements LocalLoader{ return null; } - @Override - @SuppressWarnings("unchecked") - public List getAllReleasableResourceAbstract() throws Exception { - Object bean =applicationContext.getBean(RESOURCE_SERVICE_BEAN_NAME); - if(bean!=null) { - Method method =bean.getClass().getMethod("getAllReleasableResourceAbstract"); - if(method!=null) { - return (List)method.invoke(bean); - } - } - return null; - } - private String getCacheKey(String code,Integer version) { String result =""; if(code!=null && !"".equals(code.trim())) { diff --git a/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/Executor.java b/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/Executor.java index af882050..8f6c8960 100644 --- a/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/Executor.java +++ b/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/Executor.java @@ -1,169 +1,33 @@ package io.sc.engine.rule.client; +import io.sc.engine.rule.core.ResourceResult; + import java.util.Map; -import io.sc.engine.rule.core.code.impl.support.ResourceResult; /** * 客户端执行器接口 */ public interface Executor { - /** - * 编译资源 - * @param resourceId 资源唯一标识 - * @throws Exception 违例 - */ - public void compileById(String resourceId) throws Exception; - - /** - * 编译资源 - * @param resourceCode 资源代码 - * @param version 资源版本 - * @throws Exception 违例 - */ - public void compileByCode(String resourceCode,Integer version) throws Exception; - - /** - * 执行资源 - * @param resourceId 资源唯一标识 - * @param json 需要提交给资源的参数 json 字符串 - * @return 执行结果 - * @throws Exception 违例 - */ - public ResourceResult executeById(String resourceId,String json) throws Exception; - - /** - * 执行资源 - * @param resourceId 资源唯一标识 - * @param subModelCode 子模型代码 - * @param json 需要提交给资源的参数 json 字符串 - * @return 执行结果 - * @throws Exception 违例 - */ - public ResourceResult executeById(String resourceId,String subModelCode,String json) throws Exception; - - /** - * 执行资源 - * @param resourceId 资源唯一标识 - * @param map 需要提交给资源的参数 map - * @return 执行结果 - * @throws Exception 违例 - */ - public ResourceResult executeById(String resourceId,Map map) throws Exception; - - /** - * 执行资源 - * @param resourceId 资源唯一标识 - * @param subModelCode 子模型代码 - * @param map 需要提交给资源的参数 map - * @return 执行结果 - * @throws Exception 违例 - */ - public ResourceResult executeById(String resourceId,String subModelCode,Map map) throws Exception; - - /** - * 执行资源 - * @param resourceCode 资源代码 - * @param version 资源版本 - * @param json 需要提交给资源的参数 json 字符串 - * @return 执行结果 - * @throws Exception 违例 - */ - public ResourceResult executeByCode(String resourceCode,Integer version,String json) throws Exception; - - /** - * 执行资源 - * @param resourceCode 资源代码 - * @param version 资源版本 - * @param subModelCode 子模型代码 - * @param json 需要提交给资源的参数 json 字符串 - * @return 执行结果 - * @throws Exception 违例 - */ - public ResourceResult executeByCode(String resourceCode,Integer version,String subModelCode,String json) throws Exception; - - /** - * 执行资源 - * @param resourceCode 资源代码 - * @param version 资源版本 - * @param map 需要提交给资源的参数 map - * @return 执行结果 - * @throws Exception 违例 - */ - public ResourceResult executeByCode(String resourceCode,Integer version,Map map) throws Exception; - - /** - * 执行资源 - * @param resourceCode 资源代码 - * @param version 资源版本 - * @param subModelCode 子模型代码 - * @param map 需要提交给资源的参数 map - * @return 执行结果 - * @throws Exception 违例 - */ - public ResourceResult executeByCode(String resourceCode,Integer version,String subModelCode,Map map) throws Exception; - - - - - /** - * 编译资源(测试) - * @param resourceId 资源唯一标识 - * @throws Exception 违例 - */ - public void compileByIdForTest(String resourceId) throws Exception; - - /** - * 编译资源(测试) - * @param resourceCode 资源代码 - * @param version 资源版本 - * @throws Exception 违例 - */ - public void compileByCodeForTest(String resourceCode,Integer version) throws Exception; - - /** - * 执行资源(测试) - * @param resourceId 资源唯一标识 - * @param map 需要提交给资源的参数 map - * @return 执行结果 - * @throws Exception 违例 - */ - public ResourceResult executeByIdForTest(String resourceId,Map map) throws Exception; - - /** - * 执行资源(测试) - * @param resourceId 资源唯一标识 - * @param subModelCode 子模型代码 - * @param map 需要提交给资源的参数 map - * @return 执行结果 - * @throws Exception 违例 - */ - public ResourceResult executeByIdForTest(String resourceId,String subModelCode,Map map) throws Exception; - - /** - * 执行资源(测试) - * @param resourceCode 资源代码 - * @param version 资源版本 - * @param map 需要提交给资源的参数 map - * @return 执行结果 - * @throws Exception 违例 - */ - public ResourceResult executeByCodeForTest(String resourceCode,Integer version,Map map) throws Exception; - - /** - * 执行资源(测试) - * @param resourceCode 资源代码 - * @param version 资源版本 - * @param subModelCode 子模型代码 - * @param map 需要提交给资源的参数 map - * @return 执行结果 - * @throws Exception 违例 - */ - public ResourceResult executeByCodeForTest(String resourceCode,Integer version,String subModelCode,Map map) throws Exception; - /** * 获取资源定义加载器 * @return 资源定义加载器 */ public Loader getLoader(); + + public void compile(String resourceId) throws Exception; + public void compile(String resourceCode,Integer version) throws Exception; + + public ResourceResult execute(String resourceId,Map map) throws Exception; + public ResourceResult execute(String resourceId, String json) throws Exception; + + public ResourceResult execute(String resourceId,String subModelCode,Map map) throws Exception; + public ResourceResult execute(String resourceId,String subModelCode,String json) throws Exception; + + + public ResourceResult execute(String resourceCode,Integer version,Map map) throws Exception; + public ResourceResult execute(String resourceCode,Integer version,String json) throws Exception; + + public ResourceResult execute(String resourceCode,Integer version,String subModelCode,Map map) throws Exception; + public ResourceResult execute(String resourceCode,Integer version,String subModelCode,String json) throws Exception; } diff --git a/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/Loader.java b/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/Loader.java index c854fd00..5df2563a 100644 --- a/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/Loader.java +++ b/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/Loader.java @@ -1,44 +1,12 @@ package io.sc.engine.rule.client; -import io.sc.engine.rule.core.classes.ResourceAbstract; -import io.sc.engine.rule.core.code.impl.support.ResourceWrapper; - -import java.util.List; +import io.sc.engine.rule.core.code.ExecuteUnit; /** * 客户端模型定义加载器接口 */ public interface Loader { - /** - * 获取资源定义 - * 说明: 通过 ID 加载资源定义时,系统不做缓存 - * @param resourceId 资源唯一标识 - * @return 资源定义 PO 对象 - * @throws Exception 违例 - */ - public ResourceWrapper getResourceById(String resourceId) throws Exception; - - /** - * 获取资源定义 - * 说明: 通过代码和版本加载资源定义时,如果有版本,则缓存,反之,不缓存 - * @param resourceCode 资源代码 - * @param version 资源版本 - * @return 资源定义 PO 对象 - * @throws Exception 违例 - */ - public ResourceWrapper getResourceByCode(String resourceCode,Integer version) throws Exception; - - /** - * 获取所有顶级资源摘要信息 - * @return 所有顶级资源摘要信息 - * @throws Exception 违例 - */ - public List getAllReleasableResourceAbstract() throws Exception; - - /** - * 清除已经加载的模型定义缓存 - * @throws Exception 违例 - */ - public void cleanCache() throws Exception; + public ExecuteUnit load(String resourceId) throws Exception; + public ExecuteUnit load(String resourceCode,Integer version) throws Exception; } diff --git a/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/local/LocalExecutor.java b/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/local/LocalExecutor.java index b0f23039..5ef7bcab 100644 --- a/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/local/LocalExecutor.java +++ b/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/local/LocalExecutor.java @@ -3,8 +3,8 @@ package io.sc.engine.rule.client.local; import io.sc.engine.rule.client.Executor; import io.sc.engine.rule.client.Loader; import io.sc.engine.rule.client.runtime.EngineRuntime; -import io.sc.engine.rule.core.code.impl.support.ResourceResult; -import io.sc.engine.rule.core.code.impl.support.ResourceWrapper; +import io.sc.engine.rule.core.ResourceResult; +import io.sc.engine.rule.core.code.ExecuteUnit; import java.util.Map; @@ -20,115 +20,69 @@ public class LocalExecutor implements Executor { public LocalExecutor(Loader loader) { this.loader =loader; } - - @Override - public void compileById(String resourceId) throws Exception { - ResourceWrapper wrapper =loader.getResourceById(resourceId); - EngineRuntime.getInstance().compileById(resourceId,wrapper); - } - - @Override - public void compileByCode(String resourceCode, Integer version) throws Exception { - ResourceWrapper wrapper =loader.getResourceByCode(resourceCode,version); - EngineRuntime.getInstance().compileByCode(resourceCode,version,wrapper); - } - - @Override - public ResourceResult executeById(String resourceId, String json) throws Exception { - ResourceWrapper wrapper =loader.getResourceById(resourceId); - return EngineRuntime.getInstance().executeById(this,resourceId,wrapper, json); - } - - @Override - public ResourceResult executeById(String resourceId, String subModelCode, String json) throws Exception { - ResourceWrapper wrapper =loader.getResourceById(resourceId); - return EngineRuntime.getInstance().executeById(this,resourceId,wrapper,subModelCode,json); - } - - @Override - public ResourceResult executeById(String resourceId, Map map) throws Exception { - ResourceWrapper wrapper =loader.getResourceById(resourceId); - return EngineRuntime.getInstance().executeById(this,resourceId,wrapper, map); - } - - @Override - public ResourceResult executeById(String resourceId, String subModelCode, Map map) throws Exception { - ResourceWrapper wrapper =loader.getResourceById(resourceId); - return EngineRuntime.getInstance().executeById(this,resourceId,wrapper,subModelCode,map); - } - + @Override - public ResourceResult executeByCode(String resourceCode, Integer version, String json) throws Exception { - ResourceWrapper wrapper =loader.getResourceByCode(resourceCode, version); - return EngineRuntime.getInstance().executeByCode(this,resourceCode,version,wrapper, json); + public Loader getLoader() { + return loader; } - + @Override - public ResourceResult executeByCode(String resourceCode, Integer version, String subModelCode, String json) throws Exception { - ResourceWrapper wrapper =loader.getResourceByCode(resourceCode, version); - return EngineRuntime.getInstance().executeByCode(this,resourceCode,version,wrapper,subModelCode,json); + public void compile(String resourceId) throws Exception { + ExecuteUnit executeUnit =loader.load(resourceId); + EngineRuntime.getInstance().compileById(resourceId,executeUnit); } - + @Override - public ResourceResult executeByCode(String resourceCode, Integer version, Map map) throws Exception { - ResourceWrapper wrapper =loader.getResourceByCode(resourceCode, version); - return EngineRuntime.getInstance().executeByCode(this,resourceCode,version,wrapper, map); + public void compile(String resourceCode, Integer version) throws Exception { + ExecuteUnit executeUnit =loader.load(resourceCode,version); + EngineRuntime.getInstance().compileByCode(resourceCode,version,executeUnit); } - + @Override - public ResourceResult executeByCode(String resourceCode, Integer version, String subModelCode, Map map) throws Exception { - ResourceWrapper wrapper =loader.getResourceByCode(resourceCode, version); - return EngineRuntime.getInstance().executeByCode(this,resourceCode,version,wrapper,subModelCode,map); + public ResourceResult execute(String resourceId, Map map) throws Exception { + ExecuteUnit executeUnit =loader.load(resourceId); + return EngineRuntime.getInstance().executeById(this,resourceId,executeUnit, map); } - - + @Override - public void compileByIdForTest(String resourceId) throws Exception { - ResourceWrapper wrapper =loader.getResourceById(resourceId); - wrapper.setIsExecuteTestCase(true); - EngineRuntime.getInstance().compileById(resourceId,wrapper); + public ResourceResult execute(String resourceId, String json) throws Exception { + ExecuteUnit executeUnit =loader.load(resourceId); + return EngineRuntime.getInstance().executeById(this,resourceId,executeUnit, json); } - + @Override - public void compileByCodeForTest(String resourceCode, Integer version) throws Exception { - ResourceWrapper wrapper =loader.getResourceByCode(resourceCode,version); - wrapper.setIsExecuteTestCase(true); - EngineRuntime.getInstance().compileByCode(resourceCode,version,wrapper); + public ResourceResult execute(String resourceId, String subModelCode, Map map) throws Exception { + ExecuteUnit executeUnit =loader.load(resourceId); + return EngineRuntime.getInstance().executeById(this,resourceId,executeUnit,subModelCode,map); } - + @Override - public ResourceResult executeByIdForTest(String resourceId, Map map) throws Exception { - ResourceWrapper wrapper =loader.getResourceById(resourceId); - wrapper.setIsExecuteTestCase(true); - return EngineRuntime.getInstance().executeById(this,resourceId,wrapper, map); + public ResourceResult execute(String resourceId, String subModelCode, String json) throws Exception { + ExecuteUnit executeUnit =loader.load(resourceId); + return EngineRuntime.getInstance().executeById(this,resourceId,executeUnit,subModelCode,json); } - + @Override - public ResourceResult executeByIdForTest(String resourceId, String subModelCode, Map map) throws Exception { - ResourceWrapper wrapper =loader.getResourceById(resourceId); - wrapper.setIsExecuteTestCase(true); - return EngineRuntime.getInstance().executeById(this,resourceId,wrapper,subModelCode,map); + public ResourceResult execute(String resourceCode, Integer version, Map map) throws Exception { + ExecuteUnit executeUnit =loader.load(resourceCode, version); + return EngineRuntime.getInstance().executeByCode(this,resourceCode,version,executeUnit, map); } - + @Override - public ResourceResult executeByCodeForTest(String resourceCode, Integer version, Map map) throws Exception { - ResourceWrapper wrapper =loader.getResourceByCode(resourceCode, version); - wrapper.setIsExecuteTestCase(true); - return EngineRuntime.getInstance().executeByCode(this,resourceCode,version,wrapper, map); + public ResourceResult execute(String resourceCode, Integer version, String json) throws Exception { + ExecuteUnit executeUnit =loader.load(resourceCode, version); + return EngineRuntime.getInstance().executeByCode(this,resourceCode,version,executeUnit, json); } - + @Override - public ResourceResult executeByCodeForTest(String resourceCode, Integer version, String subModelCode, Map map) throws Exception { - ResourceWrapper wrapper =loader.getResourceByCode(resourceCode, version); - wrapper.setIsExecuteTestCase(true); - return EngineRuntime.getInstance().executeByCode(this,resourceCode,version,wrapper,subModelCode,map); - } - - public Loader getLoader() { - return loader; + public ResourceResult execute(String resourceCode, Integer version, String subModelCode, Map map) throws Exception { + ExecuteUnit executeUnit =loader.load(resourceCode, version); + return EngineRuntime.getInstance().executeByCode(this,resourceCode,version,executeUnit,subModelCode,map); } - public void setLoader(Loader loader) { - this.loader = loader; + @Override + public ResourceResult execute(String resourceCode, Integer version, String subModelCode, String json) throws Exception { + ExecuteUnit executeUnit =loader.load(resourceCode, version); + return EngineRuntime.getInstance().executeByCode(this,resourceCode,version,executeUnit,subModelCode,json); } } diff --git a/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/remote/RemoteExecutor.java b/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/remote/RemoteExecutor.java index c04ff727..a579ab62 100644 --- a/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/remote/RemoteExecutor.java +++ b/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/remote/RemoteExecutor.java @@ -2,7 +2,7 @@ package io.sc.engine.rule.client.remote; import io.sc.engine.rule.client.Executor; import io.sc.engine.rule.client.Loader; -import io.sc.engine.rule.core.code.impl.support.ResourceResult; +import io.sc.engine.rule.core.ResourceResult; import io.sc.engine.rule.core.util.HttpRequestUtil; import io.sc.platform.util.ObjectMapperUtil; @@ -20,87 +20,64 @@ public class RemoteExecutor implements Executor{ this.remoteApiUrl =remoteApiUrl; this.loader =new RemoteLoader(remoteApiUrl); } - + @Override - public void compileById(String resourceId) throws Exception { - throw new RuntimeException("Remote Executor NOT Supported compile!"); + public Loader getLoader() { + return loader; } - + @Override - public void compileByCode(String resourceCode, Integer version) throws Exception { + public void compile(String resourceId) throws Exception { throw new RuntimeException("Remote Executor NOT Supported compile!"); } + @Override - public ResourceResult executeById(String resourceId,String json) throws Exception { - String result =HttpRequestUtil.post(getApiUrlById(resourceId), "",json); - return ObjectMapperUtil.json().readValue(result, ResourceResult.class); - } - - @Override - public ResourceResult executeById(String resourceId, String subModelCode, String json) throws Exception { - String result =HttpRequestUtil.post(getApiUrlById(resourceId,subModelCode), "",json); - return ObjectMapperUtil.json().readValue(result, ResourceResult.class); - } - - @Override - public ResourceResult executeById(String resourceId, Map map) throws Exception { - return executeById(resourceId,ObjectMapperUtil.json().writeValueAsString(map)); - } - - @Override - public ResourceResult executeById(String resourceId, String subModelCode, Map map) throws Exception { - return executeById(resourceId,subModelCode,ObjectMapperUtil.json().writeValueAsString(map)); + public void compile(String resourceCode, Integer version) throws Exception { + throw new RuntimeException("Remote Executor NOT Supported compile!"); } - + @Override - public ResourceResult executeByCode(String resourceCode, Integer version,String json) throws Exception{ - return executeByCode(resourceCode,version,null,json); + public ResourceResult execute(String resourceId, Map map) throws Exception { + return execute(resourceId,ObjectMapperUtil.json().writeValueAsString(map)); } - + @Override - public ResourceResult executeByCode(String resourceCode, Integer version, String subModelCode, String json) throws Exception { - String result =HttpRequestUtil.post(getApiUrlByCode(resourceCode,version,subModelCode), "",json); + public ResourceResult execute(String resourceId, String json) throws Exception { + String result =HttpRequestUtil.post(getApiUrlById(resourceId), "",json); return ObjectMapperUtil.json().readValue(result, ResourceResult.class); } - - @Override - public ResourceResult executeByCode(String resourceCode, Integer version, Map map) throws Exception { - return executeByCode(resourceCode,version,ObjectMapperUtil.json().writeValueAsString(map)); - } - - @Override - public ResourceResult executeByCode(String resourceCode, Integer version, String subModelCode, Map map) throws Exception { - return executeByCode(resourceCode,version,subModelCode,ObjectMapperUtil.json().writeValueAsString(map)); - } - + @Override - public void compileByIdForTest(String resourceId) throws Exception { - throw new RuntimeException("Remote Executor NOT Supported test mode compile!"); + public ResourceResult execute(String resourceId, String subModelCode, Map map) throws Exception { + return execute(resourceId, subModelCode,ObjectMapperUtil.json().writeValueAsString(map)); } - + @Override - public void compileByCodeForTest(String resourceCode, Integer version) throws Exception { - throw new RuntimeException("Remote Executor NOT Supported test mode compile!"); + public ResourceResult execute(String resourceId, String subModelCode, String json) throws Exception { + String result =HttpRequestUtil.post(getApiUrlById(resourceId,subModelCode), "",json); + return ObjectMapperUtil.json().readValue(result, ResourceResult.class); } - + @Override - public ResourceResult executeByIdForTest(String resourceId, Map map) throws Exception { - throw new RuntimeException("Remote Executor NOT Supported test mode execute!"); + public ResourceResult execute(String resourceCode, Integer version, Map map) throws Exception { + return execute(resourceCode,version,ObjectMapperUtil.json().writeValueAsString(map)); } - + @Override - public ResourceResult executeByIdForTest(String resourceId, String subModelCode, Map map) throws Exception { - throw new RuntimeException("Remote Executor NOT Supported test mode execute!"); + public ResourceResult execute(String resourceCode, Integer version, String json) throws Exception { + String result =HttpRequestUtil.post(getApiUrlByCode(resourceCode,version,null), "",json); + return ObjectMapperUtil.json().readValue(result, ResourceResult.class); } - + @Override - public ResourceResult executeByCodeForTest(String resourceCode, Integer version, Map map) throws Exception { - throw new RuntimeException("Remote Executor NOT Supported test mode execute!"); + public ResourceResult execute(String resourceCode, Integer version, String subModelCode, Map map) throws Exception { + return execute(resourceCode,version,subModelCode,ObjectMapperUtil.json().writeValueAsString(map)); } - + @Override - public ResourceResult executeByCodeForTest(String resourceCode, Integer version, String subModelCode, Map map) throws Exception { - throw new RuntimeException("Remote Executor NOT Supported test mode execute!"); + public ResourceResult execute(String resourceCode, Integer version, String subModelCode, String json) throws Exception { + String result =HttpRequestUtil.post(getApiUrlByCode(resourceCode,version,subModelCode), "",json); + return ObjectMapperUtil.json().readValue(result, ResourceResult.class); } public String getRemoteApiUrl() { @@ -110,14 +87,6 @@ public class RemoteExecutor implements Executor{ this.remoteApiUrl = remoteApiUrl; } - public Loader getLoader() { - return loader; - } - - public void setLoader(Loader loader) { - this.loader = loader; - } - private String getApiUrlById(String resourceId) { return remoteApiUrl + "/executeById?resourceId=" + resourceId; } diff --git a/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/remote/RemoteLoader.java b/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/remote/RemoteLoader.java index cadf4673..edc6204c 100644 --- a/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/remote/RemoteLoader.java +++ b/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/remote/RemoteLoader.java @@ -1,58 +1,51 @@ package io.sc.engine.rule.client.remote; -import com.fasterxml.jackson.core.type.TypeReference; import io.sc.engine.rule.client.Loader; -import io.sc.engine.rule.core.classes.ResourceAbstract; -import io.sc.engine.rule.core.code.impl.support.ResourceWrapper; +import io.sc.engine.rule.core.code.ExecuteUnit; import io.sc.engine.rule.core.util.HttpRequestUtil; import io.sc.platform.util.ObjectMapperUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; public class RemoteLoader implements Loader{ private static final Logger log =LoggerFactory.getLogger(RemoteLoader.class); private String remoteApiUrl; - private Map cache =new ConcurrentHashMap(); + private Map cache =new ConcurrentHashMap<>(); public RemoteLoader() {} public RemoteLoader(String remoteApiUrl) { this.remoteApiUrl =remoteApiUrl; } - - @Override - public void cleanCache() throws Exception { - cache.clear(); - } - + @Override - public ResourceWrapper getResourceById(String resourceId) throws Exception { + public ExecuteUnit load(String resourceId) throws Exception { if(resourceId!=null && !"".equals(resourceId.trim())) { String json =HttpRequestUtil.get(getApiUrlById(resourceId)); - return ObjectMapperUtil.json().readValue(json, ResourceWrapper.class); + return ObjectMapperUtil.json().readValue(json, ExecuteUnit.class); } return null; } + @Override - public ResourceWrapper getResourceByCode(String resourceCode, Integer version) throws Exception { + public ExecuteUnit load(String resourceCode, Integer version) throws Exception { if(version==null) {//未指定版本时,不缓存,加载最新的 String json =HttpRequestUtil.get(getApiUrlByCode(resourceCode,version)); if(log.isDebugEnabled()) {log.debug("remote resource json:\n{}",json);} - ResourceWrapper wrapper =ObjectMapperUtil.json().readValue(json, ResourceWrapper.class); + ExecuteUnit wrapper =ObjectMapperUtil.json().readValue(json, ExecuteUnit.class); if(log.isDebugEnabled()) {log.debug("resource json:\n{}",ObjectMapperUtil.json().writeValueAsString(wrapper));} return wrapper; }else {//指定版本时,缓存 if(resourceCode!=null && !"".equals(resourceCode.trim())) { String key =getCacheKey(resourceCode,version); - ResourceWrapper wrapper =cache.get(key); + ExecuteUnit wrapper =cache.get(key); if(wrapper!=null) { return wrapper; }else { String json =HttpRequestUtil.get(getApiUrlByCode(resourceCode,version)); - wrapper =ObjectMapperUtil.json().readValue(json, ResourceWrapper.class); + wrapper =ObjectMapperUtil.json().readValue(json, ExecuteUnit.class); if(wrapper!=null) { key =getCacheKey(resourceCode,version); if(key!=null && !"".equals(key.trim())) { @@ -65,16 +58,7 @@ public class RemoteLoader implements Loader{ return null; } } - - @Override - public List getAllReleasableResourceAbstract() throws Exception { - String json =HttpRequestUtil.get(getAllReleasableResourceAbstractApiUrl()); - if(json!=null && !"".equals(json)) { - return ObjectMapperUtil.json().readValue(json,new TypeReference>(){}); - } - return null; - } - + public String getRemoteApiUrl() { return remoteApiUrl; } @@ -93,11 +77,7 @@ public class RemoteLoader implements Loader{ return remoteApiUrl + "/getDefineByCode?code=" + modelCode; } } - - private String getAllReleasableResourceAbstractApiUrl() { - return remoteApiUrl + "/getAllReleasableResourceAbstract"; - } - + private String getCacheKey(String code,Integer version) { String result =""; if(code!=null && !"".equals(code.trim())) { diff --git a/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/runtime/EngineRuntime.java b/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/runtime/EngineRuntime.java index e56d20df..ade878f3 100644 --- a/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/runtime/EngineRuntime.java +++ b/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/runtime/EngineRuntime.java @@ -4,8 +4,8 @@ import java.util.Map; import io.sc.engine.rule.client.Executor; import io.sc.engine.rule.client.runtime.impl.GroovyEngineRuntime; -import io.sc.engine.rule.core.code.impl.support.ResourceResult; -import io.sc.engine.rule.core.code.impl.support.ResourceWrapper; +import io.sc.engine.rule.core.ResourceResult; +import io.sc.engine.rule.core.code.ExecuteUnit; public abstract class EngineRuntime { public static final String GROOVY ="groovy"; @@ -22,18 +22,18 @@ public abstract class EngineRuntime { return getInstance(GROOVY); } - public abstract ResourceResult executeById(Executor executor,String resourceId,ResourceWrapper wrapper,String json) throws Exception; - public abstract ResourceResult executeById(Executor executor,String resourceId,ResourceWrapper wrapper,String subModelCode,String json) throws Exception; + public abstract ResourceResult executeById(Executor executor, String resourceId, ExecuteUnit wrapper, String json) throws Exception; + public abstract ResourceResult executeById(Executor executor,String resourceId,ExecuteUnit wrapper,String subModelCode,String json) throws Exception; - public abstract ResourceResult executeByCode(Executor executor,String resourceCode,Integer version,ResourceWrapper wrapper,String json) throws Exception; - public abstract ResourceResult executeByCode(Executor executor,String resourceCode,Integer version,ResourceWrapper wrapper,String subModelCode,String json) throws Exception; + public abstract ResourceResult executeByCode(Executor executor,String resourceCode,Integer version,ExecuteUnit wrapper,String json) throws Exception; + public abstract ResourceResult executeByCode(Executor executor,String resourceCode,Integer version,ExecuteUnit wrapper,String subModelCode,String json) throws Exception; - public abstract ResourceResult executeById(Executor executor,String resourceId,ResourceWrapper wrapper,Map map) throws Exception; - public abstract ResourceResult executeById(Executor executor,String resourceId,ResourceWrapper wrapper,String subModelCode,Map map) throws Exception; + public abstract ResourceResult executeById(Executor executor,String resourceId,ExecuteUnit wrapper,Map map) throws Exception; + public abstract ResourceResult executeById(Executor executor,String resourceId,ExecuteUnit wrapper,String subModelCode,Map map) throws Exception; - public abstract ResourceResult executeByCode(Executor executor,String resourceCode,Integer version,ResourceWrapper wrapper,Map map) throws Exception; - public abstract ResourceResult executeByCode(Executor executor,String resourceCode,Integer version,ResourceWrapper wrapper,String subModelCode,Map map) throws Exception; + public abstract ResourceResult executeByCode(Executor executor,String resourceCode,Integer version,ExecuteUnit wrapper,Map map) throws Exception; + public abstract ResourceResult executeByCode(Executor executor,String resourceCode,Integer version,ExecuteUnit wrapper,String subModelCode,Map map) throws Exception; - public abstract void compileById(String resourceId,ResourceWrapper wrapper) throws Exception; - public abstract void compileByCode(String resourceCode,Integer version,ResourceWrapper wrapper) throws Exception; + public abstract void compileById(String resourceId,ExecuteUnit wrapper) throws Exception; + public abstract void compileByCode(String resourceCode,Integer version,ExecuteUnit wrapper) throws Exception; } diff --git a/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/runtime/impl/GroovyEngineRuntime.java b/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/runtime/impl/GroovyEngineRuntime.java index bfcf3b8f..13678982 100644 --- a/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/runtime/impl/GroovyEngineRuntime.java +++ b/io.sc.engine.rule.client/src/main/java/io/sc/engine/rule/client/runtime/impl/GroovyEngineRuntime.java @@ -3,19 +3,15 @@ package io.sc.engine.rule.client.runtime.impl; import java.util.HashMap; import java.util.Map; +import io.sc.engine.rule.core.ResourceResult; +import io.sc.engine.rule.core.code.*; +import io.sc.engine.rule.core.code.generator.GroovySourceCodeGenerator; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import io.sc.engine.rule.client.Executor; import io.sc.engine.rule.client.runtime.EngineRuntime; import io.sc.engine.rule.client.runtime.impl.groovy.GroovyScriptEngineService; import io.sc.engine.rule.client.runtime.impl.groovy.GroovyScriptEngineServiceImpl; -import io.sc.engine.rule.core.code.CodeGenerator; -import io.sc.engine.rule.core.code.SourceCode; -import io.sc.engine.rule.core.code.impl.GroovySourceCodeGenerator; -import io.sc.engine.rule.core.code.impl.support.ResourceResult; -import io.sc.engine.rule.core.code.impl.support.ResourceWrapper; -import io.sc.engine.rule.core.code.impl.support.ResourceWrapper4Lib; -import io.sc.engine.rule.core.code.impl.support.ResourceWrapper4Resource; import io.sc.engine.rule.core.po.lib.Lib; import io.sc.engine.rule.core.po.resource.Resource; @@ -23,7 +19,7 @@ public class GroovyEngineRuntime extends EngineRuntime{ private static final Logger log =LoggerFactory.getLogger(GroovyEngineRuntime.class); private static GroovyEngineRuntime instance =new GroovyEngineRuntime(); private GroovyScriptEngineService service =new GroovyScriptEngineServiceImpl(); - private CodeGenerator codeGenerator =new GroovySourceCodeGenerator(); + private SourceCodeGenerator generator =new GroovySourceCodeGenerator(); private GroovyEngineRuntime() {} @@ -32,15 +28,15 @@ public class GroovyEngineRuntime extends EngineRuntime{ } @Override - public void compileById(String resourceId, ResourceWrapper wrapper) throws Exception { - SourceCode code =codeGenerator.generateSourceCodeById(resourceId, wrapper); + public void compileById(String resourceId, ExecuteUnit executeUnit) throws Exception { + SourceCode code = generator.generate(resourceId, executeUnit); String resourceName =null; - if("RESOURCE".equals(wrapper.getType())){ - ResourceWrapper4Resource _wrapper =(ResourceWrapper4Resource)wrapper; + if("RESOURCE".equals(executeUnit.getType())){ + ExecuteUnit4Resource _wrapper =(ExecuteUnit4Resource)executeUnit; Resource resource =_wrapper.getResource(); resourceName =resource.getName(); - }else if("LIB".equals(wrapper.getType())) { - ResourceWrapper4Lib _wrapper =(ResourceWrapper4Lib)wrapper; + }else if("LIB".equals(executeUnit.getType())) { + ExecuteUnit4Lib _wrapper =(ExecuteUnit4Lib)executeUnit; Lib lib =_wrapper.getLib(); resourceName =lib.getName(); } @@ -48,19 +44,20 @@ public class GroovyEngineRuntime extends EngineRuntime{ service.validate(code.getSource()); } catch (Exception e) { log.error("Compile Error for " + resourceName + "(resourceId=" + resourceId + ")",e); + throw e; } } @Override - public void compileByCode(String resourceCode, Integer version, ResourceWrapper wrapper) throws Exception { - SourceCode code =codeGenerator.generateSourceCodeByCode(resourceCode, version, wrapper); + public void compileByCode(String resourceCode, Integer version, ExecuteUnit wrapper) throws Exception { + SourceCode code = generator.generate(resourceCode, version, wrapper); String resourceName =null; if("RESOURCE".equals(wrapper.getType())){ - ResourceWrapper4Resource _wrapper =(ResourceWrapper4Resource)wrapper; + ExecuteUnit4Resource _wrapper =(ExecuteUnit4Resource)wrapper; Resource resource =_wrapper.getResource(); resourceName =resource.getName(); }else if("LIB".equals(wrapper.getType())) { - ResourceWrapper4Lib _wrapper =(ResourceWrapper4Lib)wrapper; + ExecuteUnit4Lib _wrapper =(ExecuteUnit4Lib)wrapper; Lib lib =_wrapper.getLib(); resourceName =lib.getName(); } @@ -72,64 +69,64 @@ public class GroovyEngineRuntime extends EngineRuntime{ } @Override - public ResourceResult executeById(Executor executor,String resourceId, ResourceWrapper wrapper, String json) throws Exception { - SourceCode code =codeGenerator.generateSourceCodeById(resourceId,wrapper); + public ResourceResult executeById(Executor executor, String resourceId, ExecuteUnit wrapper, String json) throws Exception { + SourceCode code = generator.generate(resourceId,wrapper); if(log.isDebugEnabled()) {log.debug("generated groovy source code:\n{}",code.getSource());} ResourceResult result =(ResourceResult)service.eval(code.getSource(), "INPUT_PARAMETER", prepareParameter(executor,null,json)); return result; } @Override - public ResourceResult executeById(Executor executor,String resourceId, ResourceWrapper wrapper, String subModelCode, String json) throws Exception { - SourceCode code =codeGenerator.generateSourceCodeById(resourceId,wrapper); + public ResourceResult executeById(Executor executor,String resourceId, ExecuteUnit wrapper, String subModelCode, String json) throws Exception { + SourceCode code = generator.generate(resourceId,wrapper); if(log.isDebugEnabled()) {log.debug("generated groovy source code:\n{}",code.getSource());} ResourceResult result =(ResourceResult)service.eval(code.getSource(), "INPUT_PARAMETER", prepareParameter(executor,subModelCode,json)); return result; } @Override - public ResourceResult executeById(Executor executor,String resourceId, ResourceWrapper wrapper, Map map) throws Exception { - SourceCode code =codeGenerator.generateSourceCodeById(resourceId,wrapper); + public ResourceResult executeById(Executor executor,String resourceId, ExecuteUnit wrapper, Map map) throws Exception { + SourceCode code = generator.generate(resourceId,wrapper); if(log.isDebugEnabled()) {log.debug("generated groovy source code:\n{}",code.getSource());} ResourceResult result =(ResourceResult)service.eval(code.getSource(), "INPUT_PARAMETER", prepareParameter(executor,null,map)); return result; } @Override - public ResourceResult executeById(Executor executor,String resourceId, ResourceWrapper wrapper, String subModelCode, Map map) throws Exception { - SourceCode code =codeGenerator.generateSourceCodeById(resourceId,wrapper); + public ResourceResult executeById(Executor executor,String resourceId, ExecuteUnit wrapper, String subModelCode, Map map) throws Exception { + SourceCode code = generator.generate(resourceId,wrapper); if(log.isDebugEnabled()) {log.debug("generated groovy source code:\n{}",code.getSource());} ResourceResult result =(ResourceResult)service.eval(code.getSource(), "INPUT_PARAMETER", prepareParameter(executor,subModelCode,map)); return result; } @Override - public ResourceResult executeByCode(Executor executor,String resourceCode, Integer version, ResourceWrapper wrapper, String json) throws Exception { - SourceCode code =codeGenerator.generateSourceCodeByCode(resourceCode,version,wrapper); + public ResourceResult executeByCode(Executor executor,String resourceCode, Integer version, ExecuteUnit wrapper, String json) throws Exception { + SourceCode code = generator.generate(resourceCode,version,wrapper); if(log.isDebugEnabled()) {log.debug("generated groovy source code:\n{}",code.getSource());} ResourceResult result =(ResourceResult)service.eval(code.getSource(), "INPUT_PARAMETER", prepareParameter(executor,null,json)); return result; } @Override - public ResourceResult executeByCode(Executor executor,String resourceCode, Integer version, ResourceWrapper wrapper, String subModelCode, String json) throws Exception { - SourceCode code =codeGenerator.generateSourceCodeByCode(resourceCode,version,wrapper); + public ResourceResult executeByCode(Executor executor,String resourceCode, Integer version, ExecuteUnit wrapper, String subModelCode, String json) throws Exception { + SourceCode code = generator.generate(resourceCode,version,wrapper); if(log.isDebugEnabled()) {log.debug("generated groovy source code:\n{}",code.getSource());} ResourceResult result =(ResourceResult)service.eval(code.getSource(), "INPUT_PARAMETER", prepareParameter(executor,subModelCode,json)); return result; } @Override - public ResourceResult executeByCode(Executor executor,String resourceCode, Integer version, ResourceWrapper wrapper,Map map) throws Exception { - SourceCode code =codeGenerator.generateSourceCodeByCode(resourceCode,version,wrapper); + public ResourceResult executeByCode(Executor executor,String resourceCode, Integer version, ExecuteUnit wrapper,Map map) throws Exception { + SourceCode code = generator.generate(resourceCode,version,wrapper); //if(log.isDebugEnabled()) {log.debug("generated groovy source code:\n{}",code.getSource());} ResourceResult result =(ResourceResult)service.eval(code.getSource(), "INPUT_PARAMETER", prepareParameter(executor,null,map)); return result; } @Override - public ResourceResult executeByCode(Executor executor,String resourceCode, Integer version, ResourceWrapper wrapper, String subModelCode, Map map) throws Exception { - SourceCode code =codeGenerator.generateSourceCodeByCode(resourceCode,version,wrapper); + public ResourceResult executeByCode(Executor executor,String resourceCode, Integer version, ExecuteUnit wrapper, String subModelCode, Map map) throws Exception { + SourceCode code = generator.generate(resourceCode,version,wrapper); if(log.isDebugEnabled()) {log.debug("generated groovy source code:\n{}",code.getSource());} ResourceResult result =(ResourceResult)service.eval(code.getSource(), "INPUT_PARAMETER", prepareParameter(executor,subModelCode,map)); return result; diff --git a/io.sc.engine.rule.client/src/test/java/io/sc/engine/rule/client/test/Test.java b/io.sc.engine.rule.client/src/test/java/io/sc/engine/rule/client/test/Test.java index 2db05749..848c967b 100644 --- a/io.sc.engine.rule.client/src/test/java/io/sc/engine/rule/client/test/Test.java +++ b/io.sc.engine.rule.client/src/test/java/io/sc/engine/rule/client/test/Test.java @@ -5,8 +5,8 @@ import io.sc.engine.rule.client.ExecutorBuilder; import io.sc.engine.rule.client.ExecutorFactory; import io.sc.engine.rule.client.enums.ExecutorMode; import io.sc.engine.rule.client.enums.LoaderMode; -import io.sc.engine.rule.core.code.impl.support.ParameterResult; -import io.sc.engine.rule.core.code.impl.support.ResourceResult; +import io.sc.engine.rule.core.ParameterResult; +import io.sc.engine.rule.core.ResourceResult; import io.sc.platform.util.TimeMonitor; import java.util.HashMap; @@ -36,7 +36,7 @@ public class Test { //第一次执行,消除缓存对性能对比测试的影响 //executor.executeByCode(MODEL_CODE, MODEL_VERSION,JacksonObjectMapper.getDefaultObjectMapper().writeValueAsString(prepareData())); - ResourceResult result =executor.executeByCode(MODEL_CODE, MODEL_VERSION,prepareData()); + ResourceResult result =executor.execute(MODEL_CODE, MODEL_VERSION,prepareData()); List parameters =result.getData(); for(ParameterResult parameter : parameters) { System.out.println(parameter); @@ -57,7 +57,7 @@ public class Test { //准备执行的数据(输入参数) Map data =prepareData(); //executor.getLoader().getResourceByCode(MODEL_CODE, MODEL_VERSION); - executor.executeByCode(MODEL_CODE, MODEL_VERSION,data); + executor.execute(MODEL_CODE, MODEL_VERSION,data); } tracer.info("执行完毕(采用 map 对象作为参数)"); tracer.info("采用 map 对象作为输入参数将执行效率提高 20+ 倍!!!"); diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/ExecuteResult.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/ExecuteResult.java similarity index 97% rename from io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/ExecuteResult.java rename to io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/ExecuteResult.java index 538ca8d4..8c8384cb 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/ExecuteResult.java +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/ExecuteResult.java @@ -1,4 +1,4 @@ -package io.sc.engine.rule.core.code.impl.support; +package io.sc.engine.rule.core; import io.sc.engine.rule.core.enums.ParameterType; diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/FieldValidator.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/FieldValidator.java similarity index 58% rename from io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/FieldValidator.java rename to io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/FieldValidator.java index 7b8d58dd..2ff6842b 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/FieldValidator.java +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/FieldValidator.java @@ -1,4 +1,6 @@ -package io.sc.engine.rule.core.code.impl.support; +package io.sc.engine.rule.core; + +import io.sc.platform.util.StringUtil; import java.util.Date; import java.util.regex.Matcher; @@ -60,16 +62,25 @@ public class FieldValidator { return false; } - public static boolean integerRange(String fieldCode,String fieldName,Object obj,Integer min,Integer max,ValidateResult result) { + public static boolean integerRange(String fieldCode,String fieldName,Object obj,Boolean minInclude,Integer min,Integer max,Boolean maxInclude,ValidateResult result) { if(obj instanceof Integer) { if(min==null && max==null) { return true; } + String errorMessage =getRangeRestrictionMessage(minInclude,min,max,maxInclude); Integer value =(Integer)obj; if((min!=null && valuemax)) { - result.error(fieldCode,fieldName, "integer value between " + min + " and " + max + " can been accepted"); + result.error(fieldCode,fieldName, StringUtil.format("integer ${0} can been accepted",errorMessage)); return false; }else { + if((minInclude==null || !minInclude) && value==min){ + result.error(fieldCode,fieldName, StringUtil.format("integer ${0} can been accepted",errorMessage)); + return false; + } + if((maxInclude!=null || !maxInclude) && value==max){ + result.error(fieldCode,fieldName, StringUtil.format("integer ${0} can been accepted",errorMessage)); + return false; + } return true; } } @@ -77,16 +88,25 @@ public class FieldValidator { return false; } - public static boolean decimalRange(String fieldCode,String fieldName,Object obj,Double min,Double max,ValidateResult result) { + public static boolean decimalRange(String fieldCode,String fieldName,Object obj,Boolean minInclude,Double min,Double max,Boolean maxInclude,ValidateResult result) { if(obj instanceof Double) { if(min==null && max==null) { return true; } + String errorMessage =getRangeRestrictionMessage(minInclude,min,max,maxInclude); Double value =(Double)obj; if((min!=null && valuemax)) { - result.error(fieldCode,fieldName, "double value between " + min + " and " + max + " can been accepted"); + result.error(fieldCode,fieldName, StringUtil.format("decimal ${0} can been accepted",errorMessage)); return false; }else { + if((minInclude==null || !minInclude) && value==min){ + result.error(fieldCode,fieldName, StringUtil.format("decimal ${0} can been accepted",errorMessage)); + return false; + } + if((maxInclude!=null || !maxInclude) && value==max){ + result.error(fieldCode,fieldName, StringUtil.format("decimal ${0} can been accepted",errorMessage)); + return false; + } return true; } } @@ -94,16 +114,25 @@ public class FieldValidator { return false; } - public static boolean lengthRange(String fieldCode,String fieldName,Object obj,Integer min,Integer max,ValidateResult result) { + public static boolean lengthRange(String fieldCode,String fieldName,Object obj,Boolean minInclude,Integer min,Integer max,Boolean maxInclude,ValidateResult result) { if(obj instanceof String) { if(min==null && max==null) { return true; } + String errorMessage =getRangeRestrictionMessage(minInclude,min,max,maxInclude); String value =(String)obj; if((min!=null && value.length()max)) { - result.error(fieldCode,fieldName, "string value's length between " + min + " and " + max + " can been accepted"); + result.error(fieldCode,fieldName, StringUtil.format("length ${0} can been accepted",errorMessage)); return false; }else { + if((minInclude==null || !minInclude) && value.length()==min){ + result.error(fieldCode,fieldName, StringUtil.format("length ${0} can been accepted",errorMessage)); + return false; + } + if((maxInclude!=null || !maxInclude) && value.length()==max){ + result.error(fieldCode,fieldName, StringUtil.format("length ${0} can been accepted",errorMessage)); + return false; + } return true; } } @@ -111,16 +140,25 @@ public class FieldValidator { return false; } - public static boolean dateRange(String fieldCode,String fieldName,Object obj,Date min,Date max,ValidateResult result) { + public static boolean dateRange(String fieldCode,String fieldName,Object obj,Boolean minInclude,Date min,Date max,Boolean maxInclude,ValidateResult result) { if(obj instanceof Date) { if(min==null && max==null) { return true; } + String errorMessage =getRangeRestrictionMessage(minInclude,min,max,maxInclude); Date value =(Date)obj; if((min!=null && value.getTime()max.getTime())) { - result.error(fieldCode,fieldName, "date value's length between " + min + " and " + max + " can been accepted"); + result.error(fieldCode,fieldName, StringUtil.format("date ${0} can been accepted",errorMessage)); return false; }else { + if((minInclude==null || !minInclude) && value.getTime()==min.getTime()){ + result.error(fieldCode,fieldName, StringUtil.format("date ${0} can been accepted",errorMessage)); + return false; + } + if((maxInclude!=null || !maxInclude) && value.getTime()==max.getTime()){ + result.error(fieldCode,fieldName, StringUtil.format("date ${0} can been accepted",errorMessage)); + return false; + } return true; } } @@ -158,4 +196,14 @@ public class FieldValidator { result.error(fieldCode,fieldName, "only string value can been accepted"); return false; } + + private static String getRangeRestrictionMessage(Boolean minInclude,Object min,Object max,Boolean maxInclude){ + StringBuilder sb =new StringBuilder(); + sb.append(min==null?"":min).append(" "); + sb.append((minInclude==null || !minInclude)?"<":"<="); + sb.append(" value "); + sb.append((maxInclude==null || !maxInclude)?"<":"<=").append(" "); + sb.append(max==null?"":max); + return sb.toString(); + } } diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/ModelAbstract.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/ModelAbstract.java similarity index 92% rename from io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/ModelAbstract.java rename to io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/ModelAbstract.java index 27772838..da846675 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/ModelAbstract.java +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/ModelAbstract.java @@ -1,4 +1,4 @@ -package io.sc.engine.rule.core.code.impl.support; +package io.sc.engine.rule.core; /** * 模型摘要信息 diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/ParameterResult.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/ParameterResult.java similarity index 96% rename from io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/ParameterResult.java rename to io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/ParameterResult.java index 64e78171..f26484e2 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/ParameterResult.java +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/ParameterResult.java @@ -1,8 +1,6 @@ -package io.sc.engine.rule.core.code.impl.support; +package io.sc.engine.rule.core; import com.fasterxml.jackson.core.JsonProcessingException; -import io.sc.engine.rule.core.classes.RuleResult; -import io.sc.engine.rule.core.classes.SingleRuleResult; import io.sc.engine.rule.core.enums.ParameterType; import io.sc.platform.util.ObjectMapperUtil; diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/classes/ResourceAbstract.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/ResourceAbstract.java similarity index 95% rename from io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/classes/ResourceAbstract.java rename to io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/ResourceAbstract.java index aaa09cbc..697c3898 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/classes/ResourceAbstract.java +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/ResourceAbstract.java @@ -1,13 +1,11 @@ -package io.sc.engine.rule.core.classes; - -import java.util.Date; +package io.sc.engine.rule.core; import io.sc.engine.rule.core.enums.DeployStatus; +import java.util.Date; + /** * 资源摘要信息 - * @author wangshaoping - * */ public class ResourceAbstract { private String id; diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/ResourceResult.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/ResourceResult.java similarity index 97% rename from io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/ResourceResult.java rename to io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/ResourceResult.java index e18c1aac..67473093 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/ResourceResult.java +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/ResourceResult.java @@ -1,4 +1,4 @@ -package io.sc.engine.rule.core.code.impl.support; +package io.sc.engine.rule.core; import com.fasterxml.jackson.core.JsonProcessingException; import io.sc.engine.rule.core.enums.ParameterType; diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/classes/Rule.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/Rule.java similarity index 97% rename from io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/classes/Rule.java rename to io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/Rule.java index 5a252800..346ee8ff 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/classes/Rule.java +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/Rule.java @@ -1,9 +1,7 @@ -package io.sc.engine.rule.core.classes; +package io.sc.engine.rule.core; /** * 规则信息 - * @author wangshaoping - * */ public class Rule { private boolean isTriggered; //是否触发 diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/classes/RuleResult.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/RuleResult.java similarity index 97% rename from io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/classes/RuleResult.java rename to io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/RuleResult.java index cd696f95..8e250d40 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/classes/RuleResult.java +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/RuleResult.java @@ -1,4 +1,4 @@ -package io.sc.engine.rule.core.classes; +package io.sc.engine.rule.core; import com.fasterxml.jackson.core.JsonProcessingException; import io.sc.platform.util.ObjectMapperUtil; @@ -8,8 +8,6 @@ import java.util.List; /** * 规则结果值 - * @author wangshaoping - * */ public class RuleResult { private boolean triggered; //是否触发 diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/classes/SingleRuleResult.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/SingleRuleResult.java similarity index 96% rename from io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/classes/SingleRuleResult.java rename to io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/SingleRuleResult.java index 04321b70..a759e5cc 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/classes/SingleRuleResult.java +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/SingleRuleResult.java @@ -1,12 +1,10 @@ -package io.sc.engine.rule.core.classes; +package io.sc.engine.rule.core; import com.fasterxml.jackson.core.JsonProcessingException; import io.sc.platform.util.ObjectMapperUtil; /** * 单规则结果值 - * @author wangshaoping - * */ public class SingleRuleResult { private boolean triggered; //是否触发 diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/ValidateField.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/ValidateField.java similarity index 93% rename from io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/ValidateField.java rename to io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/ValidateField.java index 8f10279d..ebc12a28 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/ValidateField.java +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/ValidateField.java @@ -1,4 +1,4 @@ -package io.sc.engine.rule.core.code.impl.support; +package io.sc.engine.rule.core; public class ValidateField { private String fieldCode; diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/ValidateResult.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/ValidateResult.java similarity index 91% rename from io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/ValidateResult.java rename to io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/ValidateResult.java index 2cc230c5..864d689e 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/ValidateResult.java +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/ValidateResult.java @@ -1,4 +1,4 @@ -package io.sc.engine.rule.core.code.impl.support; +package io.sc.engine.rule.core; import java.util.ArrayList; import java.util.List; diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/CodeGenerator.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/CodeGenerator.java deleted file mode 100644 index 42d61692..00000000 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/CodeGenerator.java +++ /dev/null @@ -1,29 +0,0 @@ -package io.sc.engine.rule.core.code; - -import io.sc.engine.rule.core.code.impl.support.ResourceWrapper; - -/** - * 代码生成器接口 - * @author wangshaoping - * - */ -public interface CodeGenerator { - /** - * 生成可执行的源代码 - * @param resourceId 资源ID - * @param wrapper 资源封装器对象 - * @return 源代码封装对象 - * @throws Exception 违例 - */ - public SourceCode generateSourceCodeById(String resourceId,ResourceWrapper wrapper) throws Exception; - - /** - * 生成可执行的源代码 - * @param resourceCode 资源代码 - * @param version 模型版本 - * @param wrapper 资源封装器对象 - * @return 源代码封装对象 - * @throws Exception 违例 - */ - public SourceCode generateSourceCodeByCode(String resourceCode,Integer version,ResourceWrapper wrapper) throws Exception; -} diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/ExecuteUnit.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/ExecuteUnit.java similarity index 95% rename from io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/ExecuteUnit.java rename to io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/ExecuteUnit.java index 47d80710..7c756ced 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/ExecuteUnit.java +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/ExecuteUnit.java @@ -1,4 +1,4 @@ -package io.sc.engine.rule.core.code.impl.support; +package io.sc.engine.rule.core.code; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonSubTypes; diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/ExecuteUnit4Lib.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/ExecuteUnit4Lib.java similarity index 89% rename from io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/ExecuteUnit4Lib.java rename to io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/ExecuteUnit4Lib.java index 12cb53a5..d909e148 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/ExecuteUnit4Lib.java +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/ExecuteUnit4Lib.java @@ -1,4 +1,4 @@ -package io.sc.engine.rule.core.code.impl.support; +package io.sc.engine.rule.core.code; import com.fasterxml.jackson.annotation.JsonPropertyOrder; import io.sc.engine.rule.core.po.lib.Lib; diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/ExecuteUnit4Resource.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/ExecuteUnit4Resource.java similarity index 83% rename from io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/ExecuteUnit4Resource.java rename to io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/ExecuteUnit4Resource.java index 1c897660..a93dd11c 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/ExecuteUnit4Resource.java +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/ExecuteUnit4Resource.java @@ -1,10 +1,8 @@ -package io.sc.engine.rule.core.code.impl.support; +package io.sc.engine.rule.core.code; import com.fasterxml.jackson.annotation.JsonPropertyOrder; import io.sc.engine.rule.core.po.lib.Lib; -import io.sc.engine.rule.core.po.model.Model; import io.sc.engine.rule.core.po.resource.Resource; -import io.sc.engine.rule.core.vo.resource.ModelResource; import java.util.List; diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/SourceCodeGenerator.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/SourceCodeGenerator.java index a20d9404..81def6c3 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/SourceCodeGenerator.java +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/SourceCodeGenerator.java @@ -1,7 +1,8 @@ package io.sc.engine.rule.core.code; -import io.sc.engine.rule.core.code.impl.support.ExecuteUnit; public interface SourceCodeGenerator { - public SourceCode generateSourceCode(ExecuteUnit executeUnit) throws Exception; + public SourceCode generate(ExecuteUnit executeUnit) throws Exception; + public SourceCode generate(String resourceId,ExecuteUnit executeUnit) throws Exception; + public SourceCode generate(String resourceCode,Integer version,ExecuteUnit executeUnit) throws Exception; } diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/ExecuteUnit4LibGenerator.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/ExecuteUnit4LibGenerator.java index 7b0a3c1d..d3f7bd1e 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/ExecuteUnit4LibGenerator.java +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/ExecuteUnit4LibGenerator.java @@ -1,11 +1,20 @@ package io.sc.engine.rule.core.code.generator; -import io.sc.engine.rule.core.code.SourceCode; -import io.sc.engine.rule.core.code.impl.support.ExecuteUnit; -import io.sc.engine.rule.core.code.impl.support.ExecuteUnit4Lib; -import io.sc.engine.rule.core.code.impl.support.ExecuteUnit4Resource; + +import com.jfinal.template.Engine; +import com.jfinal.template.Template; +import io.sc.engine.rule.core.code.ExecuteUnit4Lib; +import io.sc.engine.rule.core.code.generator.impl.DictionaryGenerator; +import io.sc.engine.rule.core.code.generator.impl.IndicatorGenerator; +import io.sc.engine.rule.core.code.generator.impl.ParameterGenerator; +import io.sc.engine.rule.core.code.generator.impl.processor.*; +import io.sc.engine.rule.core.util.IdReplacer; + +import java.util.HashMap; +import java.util.Map; public class ExecuteUnit4LibGenerator extends ExecuteUnitGenerator { + private static final String template_location = "/io/sc/engine/rule/core/code/template/impl/lib.tpl"; private ExecuteUnit4Lib executeUnit; public ExecuteUnit4LibGenerator(ExecuteUnit4Lib executeUnit) { @@ -14,13 +23,43 @@ public class ExecuteUnit4LibGenerator extends ExecuteUnitGenerator { @Override public String getClassName() { - return executeUnit.getLib().getCode() + "_V" + executeUnit.getLib().getVersion(); + return IdReplacer.className(executeUnit.getLib().getCode(),executeUnit.getLib().getVersion()); } @Override public String generate() throws Exception { - StringBuilder sb =new StringBuilder(); + Engine engine = new Engine(Engine.MAIN_ENGINE_NAME); + engine.setDevMode(true); + engine.setToClassPathSourceFactory(); + engine.setStaticFieldExpression(true); + engine.setStaticMethodExpression(true); + + engine.addSharedStaticMethod(IdReplacer.class); + //engine.addSharedStaticMethod(ExpressionReplacer.class); + + // + engine.addSharedObject("DictionaryGenerator",new DictionaryGenerator()); + engine.addSharedObject("ParameterGenerator",new ParameterGenerator()); + engine.addSharedObject("IndicatorGenerator",new IndicatorGenerator()); + + engine.addSharedObject("Arithmetic",new Arithmetic()); + engine.addSharedObject("ConditionRange",new ConditionRange()); + engine.addSharedObject("DecisionTable",new DecisionTable()); + engine.addSharedObject("DecisionTable2C",new DecisionTable2C()); + engine.addSharedObject("DecisionTree",new DecisionTree()); + engine.addSharedObject("ExecutionFlow",new ExecutionFlow()); + engine.addSharedObject("MathFormula",new MathFormula()); + engine.addSharedObject("NumberRange",new NumberRange()); + engine.addSharedObject("ObjectProperty",new ObjectProperty()); + engine.addSharedObject("OptionValue",new OptionValue()); + engine.addSharedObject("SqlFieldMapping",new SqlFieldMapping()); + engine.addSharedObject("Ternary",new Ternary()); + engine.addSharedObject("WhenThen",new WhenThen()); - return sb.toString(); + Map data =new HashMap<>(); + data.put("packageName",this.getPackageName()); + data.put("executeUnit",executeUnit); + Template template =engine.getTemplate(template_location); + return template.renderToString(data).trim(); } } diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/ExecuteUnit4ResourceGenerator.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/ExecuteUnit4ResourceGenerator.java index 55581b2e..3f796e3c 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/ExecuteUnit4ResourceGenerator.java +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/ExecuteUnit4ResourceGenerator.java @@ -2,17 +2,20 @@ package io.sc.engine.rule.core.code.generator; import com.jfinal.template.Engine; import com.jfinal.template.Template; -import io.sc.engine.rule.core.code.impl.support.ExecuteUnit4Resource; +import io.sc.engine.rule.core.code.ExecuteUnit4Resource; +import io.sc.engine.rule.core.code.generator.impl.DictionaryGenerator; +import io.sc.engine.rule.core.code.generator.impl.IndicatorGenerator; +import io.sc.engine.rule.core.code.generator.impl.ParameterGenerator; +import io.sc.engine.rule.core.code.generator.impl.processor.*; import io.sc.engine.rule.core.po.resource.ModelResource; import io.sc.engine.rule.core.po.resource.Resource; -import io.sc.engine.rule.core.util.CodeReplacer; -import io.sc.engine.rule.core.util.ExpressionReplacer; +import io.sc.engine.rule.core.util.IdReplacer; import java.util.HashMap; import java.util.Map; public class ExecuteUnit4ResourceGenerator extends ExecuteUnitGenerator { - private static final String template_location = "/io/sc/engine/rule/core/code/generator/template/resource.tpl"; + private static final String template_location = "/io/sc/engine/rule/core/code/template/impl/resource.tpl"; private ExecuteUnit4Resource executeUnit; public ExecuteUnit4ResourceGenerator(ExecuteUnit4Resource executeUnit) { @@ -25,7 +28,7 @@ public class ExecuteUnit4ResourceGenerator extends ExecuteUnitGenerator { @Override public String getClassName() { - return executeUnit.getResource().getCode() + "_V" + executeUnit.getResource().getVersion(); + return IdReplacer.className(executeUnit.getResource().getCode(),executeUnit.getResource().getVersion()); } @Override @@ -36,24 +39,32 @@ public class ExecuteUnit4ResourceGenerator extends ExecuteUnitGenerator { engine.setStaticFieldExpression(true); engine.setStaticMethodExpression(true); - engine.addSharedStaticMethod(CodeReplacer.class); - engine.addSharedStaticMethod(ExpressionReplacer.class); - //engine.addSharedObject("TC",new CodeReplacer()); + engine.addSharedStaticMethod(IdReplacer.class); + //engine.addSharedStaticMethod(ExpressionReplacer.class); + + // + engine.addSharedObject("DictionaryGenerator",new DictionaryGenerator()); + engine.addSharedObject("ParameterGenerator",new ParameterGenerator()); + engine.addSharedObject("IndicatorGenerator",new IndicatorGenerator()); + + engine.addSharedObject("Arithmetic",new Arithmetic()); + engine.addSharedObject("ConditionRange",new ConditionRange()); + engine.addSharedObject("DecisionTable",new DecisionTable()); + engine.addSharedObject("DecisionTable2C",new DecisionTable2C()); + engine.addSharedObject("DecisionTree",new DecisionTree()); + engine.addSharedObject("ExecutionFlow",new ExecutionFlow()); + engine.addSharedObject("MathFormula",new MathFormula()); + engine.addSharedObject("NumberRange",new NumberRange()); + engine.addSharedObject("ObjectProperty",new ObjectProperty()); + engine.addSharedObject("OptionValue",new OptionValue()); + engine.addSharedObject("SqlFieldMapping",new SqlFieldMapping()); + engine.addSharedObject("Ternary",new Ternary()); + engine.addSharedObject("WhenThen",new WhenThen()); Map data =new HashMap<>(); data.put("packageName",this.getPackageName()); data.put("executeUnit",executeUnit); Template template =engine.getTemplate(template_location); - return template.renderToString(data); - -// StringBuilder sb =new StringBuilder(); -// sb.append(PackageGenerator.generate(getPackageName())).append("\n"); -// sb.append(CommonImportGenerator.generate()).append("\n"); -// sb.append(FunctionGenerator.generate(executeUnit.getFunctions())).append("\n"); -// sb.append(ResourceClassGenerator.generate(executeUnit.getResource())).append("\n"); -// sb.append(ArgumentClassGenerator.generate(executeUnit.getResource())).append("\n"); -// sb.append(DictionaryClassGenerator.generate(executeUnit.getDictionaries())).append("\n"); -// sb.append(LibClassGenerator.generate(executeUnit.getLibs())).append("\n"); -// return sb.toString(); + return template.renderToString(data).trim(); } } diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/ExecuteUnitGenerator.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/ExecuteUnitGenerator.java index 4e75d4a1..13a7fd35 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/ExecuteUnitGenerator.java +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/ExecuteUnitGenerator.java @@ -1,8 +1,6 @@ package io.sc.engine.rule.core.code.generator; import io.sc.engine.rule.core.code.SourceCode; -import io.sc.engine.rule.core.code.generator.impl.CommonImportGenerator; -import io.sc.engine.rule.core.code.generator.impl.PackageGenerator; public abstract class ExecuteUnitGenerator { public SourceCode generateSourceCode() throws Exception { @@ -14,7 +12,7 @@ public abstract class ExecuteUnitGenerator { } public String getPackageName() { - return "io.sc.engine.rule.core.code"; + return "io.sc.engine.rule.generated"; } public abstract String getClassName(); diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/GroovySourceCodeGenerator.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/GroovySourceCodeGenerator.java new file mode 100644 index 00000000..c9af0595 --- /dev/null +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/GroovySourceCodeGenerator.java @@ -0,0 +1,27 @@ +package io.sc.engine.rule.core.code.generator; + +import io.sc.engine.rule.core.code.*; + +public class GroovySourceCodeGenerator implements SourceCodeGenerator { + @Override + public SourceCode generate(ExecuteUnit executeUnit) throws Exception { + if(executeUnit instanceof ExecuteUnit4Resource){ + ExecuteUnitGenerator generator =new ExecuteUnit4ResourceGenerator((ExecuteUnit4Resource)executeUnit); + return generator.generateSourceCode(); + }else if(executeUnit instanceof ExecuteUnit4Lib){ + ExecuteUnitGenerator generator =new ExecuteUnit4LibGenerator((ExecuteUnit4Lib)executeUnit); + return generator.generateSourceCode(); + } + return null; + } + + @Override + public SourceCode generate(String resourceId, ExecuteUnit executeUnit) throws Exception { + return generate(executeUnit); + } + + @Override + public SourceCode generate(String resourceCode, Integer version, ExecuteUnit executeUnit) throws Exception { + return null; + } +} diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/ArgumentClassGenerator.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/ArgumentClassGenerator.java deleted file mode 100644 index 858cf5f1..00000000 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/ArgumentClassGenerator.java +++ /dev/null @@ -1,9 +0,0 @@ -package io.sc.engine.rule.core.code.generator.impl; - -import io.sc.engine.rule.core.po.resource.Resource; - -public class ArgumentClassGenerator { - public static String generate(Resource resource) { - return null; - } -} diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/CommonImportGenerator.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/CommonImportGenerator.java deleted file mode 100644 index cc5e3007..00000000 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/CommonImportGenerator.java +++ /dev/null @@ -1,13 +0,0 @@ -package io.sc.engine.rule.core.code.generator.impl; - -import org.springframework.util.StreamUtils; - -import java.nio.charset.StandardCharsets; - -public class CommonImportGenerator { - private static final String TEMPLATE_CLASSPATH = "/io/sc/engine/rule/core/code/generator/template/Import.tpl"; - - public static String generate() throws Exception{ - return StreamUtils.copyToString(ResourceClassGenerator.class.getResourceAsStream(TEMPLATE_CLASSPATH), StandardCharsets.UTF_8); - } -} diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/DictionaryClassGenerator.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/DictionaryClassGenerator.java deleted file mode 100644 index 5e1fcaa7..00000000 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/DictionaryClassGenerator.java +++ /dev/null @@ -1,11 +0,0 @@ -package io.sc.engine.rule.core.code.generator.impl; - -import io.sc.engine.rule.core.po.dictionary.Dictionary; - -import java.util.List; - -public class DictionaryClassGenerator { - public static String generate(List dictionaries) { - return null; - } -} diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/DictionaryGenerator.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/DictionaryGenerator.java new file mode 100644 index 00000000..c337246d --- /dev/null +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/DictionaryGenerator.java @@ -0,0 +1,75 @@ +package io.sc.engine.rule.core.code.generator.impl; + +import io.sc.engine.rule.core.po.dictionary.Dictionary; +import io.sc.engine.rule.core.po.dictionary.UserDefinedJavaClassField; +import io.sc.engine.rule.core.po.model.Parameter; +import io.sc.engine.rule.core.util.GroovyExpressionReplacer; +import io.sc.engine.rule.core.util.IdReplacer; +import io.sc.engine.rule.core.util.ValueTypeUtil; +import io.sc.platform.util.CollectionUtil; +import io.sc.platform.util.StringUtil; +import org.springframework.util.StringUtils; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class DictionaryGenerator { + public String generateFields(List fields){ + if(!CollectionUtil.hasElements(fields)){ return null; } + StringBuilder sb =new StringBuilder(""); + for(UserDefinedJavaClassField field : fields){ + String code =field.getCode(); + String name =field.getName(); + String valueType =field.getValueType(); + Integer valueTypeVersion =field.getValueTypeVersion(); + String defaultValue =field.getDefaultValue(); + + Map variables =new HashMap<>(); + variables.put("name",name); + variables.put("fieldName", IdReplacer.fieldName(code)); + variables.put("defaultValue",defaultValue); + if(ValueTypeUtil.isString(valueType)){ + if(StringUtils.hasText(defaultValue)){ + String tpl ="String ${fieldName} =\"\"\"${defaultValue}\"\"\"; //${name}"; + sb.append(StringUtil.format(tpl,variables)).append("\n"); + }else{ + String tpl ="String ${fieldName}; //${name}"; + sb.append(StringUtil.format(tpl,variables)).append("\n"); + } + }else{ + if(StringUtils.hasText(defaultValue)){ + variables.put("className",IdReplacer.className(valueType,valueTypeVersion)); + String tpl ="${className} ${fieldName} =${defaultValue}; //${name}"; + sb.append(StringUtil.format(tpl,variables)).append("\n"); + }else{ + variables.put("className",IdReplacer.className(valueType,valueTypeVersion)); + String tpl ="${className} ${fieldName}; //${name}"; + sb.append(StringUtil.format(tpl,variables)).append("\n"); + } + } + } + return sb.toString(); + } + + public String generateInits(List fields){ + if(!CollectionUtil.hasElements(fields)){ return null; } + StringBuilder sb =new StringBuilder(""); + for(UserDefinedJavaClassField field : fields){ + String code =field.getCode(); + String name =field.getName(); + String valueCalculation =field.getValueCalculation(); + + if(StringUtils.hasText(valueCalculation)) { + Map variables = new HashMap<>(); + variables.put("name", name); + variables.put("fieldName", IdReplacer.fieldName(code)); + variables.put("expression", GroovyExpressionReplacer.groovy(valueCalculation)); + + String tpl = "${fieldName} =${expression}; //${name}"; + sb.append(StringUtil.format(tpl, variables)).append("\n"); + } + } + return sb.toString(); + } +} diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/FunctionGenerator.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/FunctionGenerator.java deleted file mode 100644 index 215d27a4..00000000 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/FunctionGenerator.java +++ /dev/null @@ -1,29 +0,0 @@ -package io.sc.engine.rule.core.code.generator.impl; - -import io.sc.engine.rule.core.po.function.Function; -import io.sc.platform.util.StringUtil; -import org.springframework.util.StreamUtils; - -import java.nio.charset.StandardCharsets; -import java.util.List; - -public class FunctionGenerator { - private static final String TEMPLATE_CLASSPATH = "/io/sc/engine/rule/core/code/generator/template/Function.tpl"; - - public static String generate(List functions) throws Exception{ - String template =StreamUtils.copyToString(ResourceClassGenerator.class.getResourceAsStream(TEMPLATE_CLASSPATH), StandardCharsets.UTF_8); - StringBuilder sb =new StringBuilder(""); - if(functions!=null && !functions.isEmpty()){ - for(Function function : functions){ - String[] pattern =new String[]{ - "/**", - " * {0}", - " */", - }; - sb.append(StringUtil.format(pattern,function.getDescription())); - sb.append(function.getBody()).append("\n\n"); - } - } - return StringUtil.format(template,sb.toString()); - } -} diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/IndicatorGenerator.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/IndicatorGenerator.java new file mode 100644 index 00000000..cea816f9 --- /dev/null +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/IndicatorGenerator.java @@ -0,0 +1,256 @@ +package io.sc.engine.rule.core.code.generator.impl; + +import io.sc.engine.rule.core.enums.ParameterType; +import io.sc.engine.rule.core.po.lib.Indicator; +import io.sc.engine.rule.core.po.lib.IndicatorValidator; +import io.sc.engine.rule.core.po.lib.validator.*; +import io.sc.engine.rule.core.po.model.Parameter; +import io.sc.engine.rule.core.po.model.ParameterValidator; +import io.sc.engine.rule.core.po.model.validator.*; +import io.sc.engine.rule.core.util.IdReplacer; +import io.sc.engine.rule.core.util.ValueTypeUtil; +import io.sc.platform.util.CollectionUtil; +import io.sc.platform.util.StringUtil; +import org.springframework.util.StringUtils; + +import java.math.RoundingMode; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class IndicatorGenerator { + public String generateFields(List indicators){ + if(!CollectionUtil.hasElements(indicators)){ return null; } + StringBuilder sb =new StringBuilder(""); + for(Indicator indicator : indicators){ + String code =indicator.getCode(); + String name =indicator.getName(); + String valueType =indicator.getValueType(); + Integer valueTypeVersion =indicator.getValueTypeVersion(); + String defaultValue =indicator.getDefaultValue(); + + Map variables =new HashMap<>(); + variables.put("name",name); + variables.put("fieldName", IdReplacer.fieldName(code)); + variables.put("defaultValue",defaultValue); + if(ValueTypeUtil.isString(valueType)){ + if(StringUtils.hasText(defaultValue)){ + String tpl ="String ${fieldName} =\"\"\"${defaultValue}\"\"\"; //${name}"; + sb.append(StringUtil.format(tpl,variables)).append("\n"); + }else{ + String tpl ="String ${fieldName}; //${name}"; + sb.append(StringUtil.format(tpl,variables)).append("\n"); + } + }else{ + if(StringUtils.hasText(defaultValue)){ + variables.put("className",IdReplacer.className(valueType,valueTypeVersion)); + String tpl ="${className} ${fieldName} =${defaultValue}; //${name}"; + sb.append(StringUtil.format(tpl,variables)).append("\n"); + }else{ + variables.put("className",IdReplacer.className(valueType,valueTypeVersion)); + String tpl ="${className} ${fieldName}; //${name}"; + sb.append(StringUtil.format(tpl,variables)).append("\n"); + } + } + } + return sb.toString(); + } + + public static String generateConvertorFromMap(List indicators) { + if (!CollectionUtil.hasElements(indicators)) { + return null; + } + StringBuilder sb = new StringBuilder(""); + for (Indicator indicator : indicators) { + String code = indicator.getCode(); + String name = indicator.getName(); + String valueType = indicator.getValueType(); + Integer valueTypeVersion = indicator.getValueTypeVersion(); + + Map variables =new HashMap<>(); + variables.put("code",code); + variables.put("name",name); + variables.put("fieldName",IdReplacer.fieldName(code)); + variables.put("className",IdReplacer.className(valueType,valueTypeVersion)); + if (indicator.getValueTypeIsList()) { + String tpl ="arg.${fieldName} =TypeConvertor.getValue(map.get('${code}'),new TypeReference>(){}); //${name}"; + sb.append(StringUtil.format(tpl,variables)).append("\n"); + } else { + String tpl ="arg.${fieldName} =TypeConvertor.getValue(map.get('${code}'),${className}.class); //${name}"; + sb.append(StringUtil.format(tpl,variables)).append("\n"); + } + if (!ValueTypeUtil.isBase(valueType)) { + String tpl ="if(arg.${fieldName}!=null) { arg.${fieldName}.init(); }"; + sb.append(StringUtil.format(tpl,variables)).append("\n"); + } + } + return sb.toString(); + } + + public static String generateConvertorFromJson(List indicators) { + if (!CollectionUtil.hasElements(indicators)) { + return null; + } + StringBuilder sb = new StringBuilder(""); + for (Indicator indicator : indicators) { + String code = indicator.getCode(); + String name = indicator.getName(); + String valueType = indicator.getValueType(); + + Map variables =new HashMap<>(); + variables.put("fieldName",IdReplacer.fieldName(code)); + variables.put("name",name); + if (!ValueTypeUtil.isBase(valueType)) { + String tpl ="if(arg.${fieldName}!=null) { arg.${fieldName}.init(); } //${name}"; + sb.append(StringUtil.format(tpl,variables)).append("\n"); + } + } + return sb.toString(); + } + + public static String generateValidator(List indicators) { + if (!CollectionUtil.hasElements(indicators)) { + return null; + } + StringBuilder sb = new StringBuilder(""); + for (Indicator indicator : indicators) { + String code =indicator.getCode(); + String name =indicator.getName(); + if(CollectionUtil.hasElements(indicator.getValidators())){ + for(IndicatorValidator validator : indicator.getValidators()){ + Map variables =new HashMap<>(); + variables.put("code",code); + variables.put("name",name); + variables.put("fieldName",IdReplacer.fieldName(code)); + if(validator instanceof EmptyIndicatorValidator){ + String tpl ="FieldValidator.empty('${code}','${name}',this.${fieldName},result);"; + sb.append(StringUtil.format(tpl,variables)).append("\n"); + }else if(validator instanceof NotEmptyIndicatorValidator){ + String tpl ="FieldValidator.notEmpty('${code}','${name}',this.${fieldName},result);"; + sb.append(StringUtil.format(tpl,variables)).append("\n"); + }else if(validator instanceof TrueIndicatorValidator){ + String tpl ="FieldValidator.trueValue('${code}','${name}',this.${fieldName},result);"; + sb.append(StringUtil.format(tpl,variables)).append("\n"); + }else if(validator instanceof FalseIndicatorValidator){ + String tpl ="FieldValidator.falseValue('${code}','${name}',this.${fieldName},result);"; + sb.append(StringUtil.format(tpl,variables)).append("\n"); + }else if(validator instanceof EmailIndicatorValidator){ + String tpl ="FieldValidator.mail('${code}','${name}',this.${fieldName},result);"; + sb.append(StringUtil.format(tpl,variables)).append("\n"); + }else if(validator instanceof IntegerRangeIndicatorValidator){ + IntegerRangeIndicatorValidator integerRangeIndicatorValidator =(IntegerRangeIndicatorValidator)validator; + variables.put("minInclude",integerRangeIndicatorValidator.getMinInclude()); + variables.put("min",StringUtils.hasText(integerRangeIndicatorValidator.getMinValue())?integerRangeIndicatorValidator.getMinValue():"null"); + variables.put("max",StringUtils.hasText(integerRangeIndicatorValidator.getMaxValue())?integerRangeIndicatorValidator.getMaxValue():"null"); + variables.put("maxInclude",integerRangeIndicatorValidator.getMaxInclude()); + String tpl ="FieldValidator.integerRange('${code}','${name}',this.${fieldName},${minInclude},${min},${max},${maxInclude},result);"; + sb.append(StringUtil.format(tpl,variables)).append("\n"); + }else if(validator instanceof DecimalRangeIndicatorValidator){ + DecimalRangeIndicatorValidator decimalRangeIndicatorValidator =(DecimalRangeIndicatorValidator)validator; + variables.put("minInclude",decimalRangeIndicatorValidator.getMinInclude()); + variables.put("min",StringUtils.hasText(decimalRangeIndicatorValidator.getMinValue())?decimalRangeIndicatorValidator.getMinValue():"null"); + variables.put("max",StringUtils.hasText(decimalRangeIndicatorValidator.getMaxValue())?decimalRangeIndicatorValidator.getMaxValue():"null"); + variables.put("maxInclude",decimalRangeIndicatorValidator.getMaxInclude()); + String tpl ="FieldValidator.decimalRange('${code}','${name}',this.${fieldName},${minInclude},${min},${max},${maxInclude},result);"; + sb.append(StringUtil.format(tpl,variables)).append("\n"); + }else if(validator instanceof LengthRangeIndicatorValidator){ + LengthRangeIndicatorValidator lengthRangeIndicatorValidator =(LengthRangeIndicatorValidator)validator; + variables.put("minInclude",lengthRangeIndicatorValidator.getMinInclude()); + variables.put("min",StringUtils.hasText(lengthRangeIndicatorValidator.getMinValue())?lengthRangeIndicatorValidator.getMinValue():"null"); + variables.put("max",StringUtils.hasText(lengthRangeIndicatorValidator.getMaxValue())?lengthRangeIndicatorValidator.getMaxValue():"null"); + variables.put("maxInclude",lengthRangeIndicatorValidator.getMaxInclude()); + String tpl ="FieldValidator.lengthRange('${code}','${name}',this.${fieldName},${minInclude},${min},${max},${maxInclude},result);"; + sb.append(StringUtil.format(tpl,variables)).append("\n"); + }else if(validator instanceof DateRangeIndicatorValidator){ + DateRangeIndicatorValidator dateRangeIndicatorValidator =(DateRangeIndicatorValidator)validator; + variables.put("minInclude",dateRangeIndicatorValidator.getMinInclude()); + variables.put("min",StringUtils.hasText(dateRangeIndicatorValidator.getMinValue())?"DateUtil.parseDate(\"" + dateRangeIndicatorValidator.getMinValue() + "\",DateUtil.yyyy_MM_dd_HH_mm_ss)":"null"); + variables.put("max",StringUtils.hasText(dateRangeIndicatorValidator.getMaxValue())?"DateUtil.parseDate(\"" + dateRangeIndicatorValidator.getMaxValue() + "\",DateUtil.yyyy_MM_dd_HH_mm_ss)":"null"); + variables.put("maxInclude",dateRangeIndicatorValidator.getMaxInclude()); + String tpl ="FieldValidator.dateRange('${code}','${name}',this.${fieldName},${minInclude},${min},${max},${maxInclude},result);"; + sb.append(StringUtil.format(tpl,variables)).append("\n"); + }else if(validator instanceof PatternIndicatorValidator){ + PatternIndicatorValidator patternIndicatorValidator =(PatternIndicatorValidator)validator; + variables.put("pattern",StringUtils.hasText(patternIndicatorValidator.getPattern())?patternIndicatorValidator.getPattern():"null"); + String tpl ="FieldValidator.dateRange('${code}','${name}',this.${fieldName},'${pattern}',result);"; + sb.append(StringUtil.format(tpl,variables)).append("\n"); + } + } + } + } + return sb.toString(); + } + + public static String generateToResult(List indicators) { + if(!CollectionUtil.hasElements(indicators)){ return null; } + StringBuilder sb =new StringBuilder(""); + for(Indicator indicator : indicators){ + String type =indicator.getType().toString(); + String code =indicator.getCode(); + String name =indicator.getName(); + String valueType =indicator.getValueType(); + Integer valueScale =indicator.getValueScale(); + RoundingMode valueRoundingMode =indicator.getValueRoundingMode(); + Map variables =new HashMap<>(); + variables.put("type",type); + variables.put("code",code); + variables.put("name",name); + variables.put("valueType",valueType); + variables.put("valueScale",valueScale==null?8:valueScale); + variables.put("valueRoundingMode",valueRoundingMode==null?RoundingMode.HALF_UP:valueRoundingMode); + variables.put("fieldName",IdReplacer.fieldName(code)); + + if(ParameterType.INDICATOR.equals(indicator.getType()) || ParameterType.OUT.equals(indicator.getType()) || ParameterType.INTERMEDIATE.equals(indicator.getType())){ + if(ValueTypeUtil.isDecimal(indicator.getValueType())){ + String tpl ="result.addParameterResult(new ParameterResult('${code}','${name}',ParameterType.${type},'${valueType}',${valueScale},RoundingMode.${valueRoundingMode},this.${fieldName}==null?null:this.${fieldName}.setScale(${valueScale},RoundingMode.${valueRoundingMode})));"; + sb.append(StringUtil.format(tpl,variables)).append("\n"); + }else if(ValueTypeUtil.isBase(indicator.getValueType())){ + String tpl ="result.addParameterResult(new ParameterResult('${code}','${name}',ParameterType.${type},'${valueType}',null,null,this.${fieldName}==null?null:this.${fieldName}));"; + sb.append(StringUtil.format(tpl,variables)).append("\n"); + }else{ + String tpl ="result.addParameterResult(new ParameterResult('${code}','${name}',ParameterType.${type},'${valueType}',null,null,this.${fieldName}==null?null:ObjectMapperUtil.json().writeValueAsString(this.${fieldName})));"; + sb.append(StringUtil.format(tpl,variables)).append("\n"); + } + } + } + return sb.toString(); + } + + public static String generateToMap(List indicators) { + if(!CollectionUtil.hasElements(indicators)){ return null; } + StringBuilder sb =new StringBuilder(""); + for(Indicator indicator : indicators){ + String code =indicator.getCode(); + String name =indicator.getName(); + + Map variables =new HashMap<>(); + variables.put("code",code); + variables.put("name",name); + variables.put("fieldName",IdReplacer.fieldName(code)); + + String tpl ="map.put('${code}',this.${fieldName}); //${name}"; + sb.append(StringUtil.format(tpl,variables)).append("\n"); + } + return sb.toString(); + } + + public static String generateMergeResult(List indicators) { + if(!CollectionUtil.hasElements(indicators)){ return null; } + StringBuilder sb =new StringBuilder(""); + for(Indicator indicator : indicators){ + String code =indicator.getCode(); + String valueType = indicator.getValueType(); + Map variables =new HashMap<>(); + variables.put("code",code); + variables.put("valueType",valueType); + if(ValueTypeUtil.isBase(valueType)){ + String tpl ="if(result.exists('${code}')){ this.${code}=TypeConvertor.getValue(result.getValueByParameterCode('${code}'),${valueType}.class); }"; + sb.append(StringUtil.format(tpl,variables)).append("\n"); + }else{ + String tpl ="if(result.exists('${code}')){ this.${code}=result.getValueByParameterCode('${code}'); }"; + sb.append(StringUtil.format(tpl,variables)).append("\n"); + } + } + return sb.toString(); + } +} diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/LibClassGenerator.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/LibClassGenerator.java deleted file mode 100644 index f9bc07e1..00000000 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/LibClassGenerator.java +++ /dev/null @@ -1,12 +0,0 @@ -package io.sc.engine.rule.core.code.generator.impl; - -import io.sc.engine.rule.core.po.dictionary.Dictionary; -import io.sc.engine.rule.core.po.lib.Lib; - -import java.util.List; - -public class LibClassGenerator { - public static String generate(List libs) { - return null; - } -} diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/ModelGenerator.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/ModelGenerator.java deleted file mode 100644 index 6fd34119..00000000 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/ModelGenerator.java +++ /dev/null @@ -1,57 +0,0 @@ -package io.sc.engine.rule.core.code.generator.impl; - -import io.sc.engine.rule.core.po.model.Model; -import io.sc.engine.rule.core.util.CodeReplacer; -import io.sc.platform.util.CollectionUtil; -import io.sc.platform.util.FileUtil; -import io.sc.platform.util.StringUtil; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -public class ModelGenerator { - private static final String MODEL_TEMPLATE_CLASSPATH ="classpath:/io/sc/engine/rule/core/code/generator/templates/Model.tpl"; - private static final String MODEL_EXECUTE_METHOD_TEMPLATE_CLASSPATH ="classpath:/io/sc/engine/rule/core/code/generator/templates/ModelExecuteMethod.tpl"; - - public static String generate(Model model) throws Exception{ - String template = FileUtil.readString(MODEL_TEMPLATE_CLASSPATH); - StringBuilder sb =new StringBuilder(); - - Map variables =new HashMap<>(); - variables.put("enable",model.getEnable()); - variables.put("name",model.getName()); - variables.put("methodName", CodeReplacer.methodName(model.getCode())); - variables.put("executeMode",model.getExecuteMode().toString()); - variables.put("executeModelMethods",generateExecuteMethods(model)); - variables.put("executeParameterMethods",ParameterGenerator.generateExecuteMethods(model)); - variables.put("modelMethodBodys",generateMethodBodys(model.getChildren())); - variables.put("parameterMethodBodys",ParameterGenerator.generateMethodBodys(model.getAllParameters())); - sb.append(StringUtil.format(template,variables)); - return sb.toString(); - } - - public static String generateExecuteMethods(Model model) throws Exception { - StringBuilder sb =new StringBuilder(""); - if(CollectionUtil.hasElements(model.getChildren())){ - String template = FileUtil.readString(MODEL_EXECUTE_METHOD_TEMPLATE_CLASSPATH); - for(Model subModel : model.getChildren()) { - Map variables =new HashMap<>(); - variables.put("methodName", CodeReplacer.methodName(subModel.getCode())); - variables.put("comments",subModel.getName()); - sb.append(StringUtil.format(template,variables)); - } - } - return sb.toString(); - } - - public static String generateMethodBodys(List models) throws Exception { - StringBuilder sb =new StringBuilder(""); - if(CollectionUtil.hasElements(models)){ - for(Model model : models) { - sb.append(generate(model)); - } - } - return sb.toString(); - } -} diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/PackageGenerator.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/PackageGenerator.java deleted file mode 100644 index d894c9d1..00000000 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/PackageGenerator.java +++ /dev/null @@ -1,15 +0,0 @@ -package io.sc.engine.rule.core.code.generator.impl; - -import io.sc.platform.util.StringUtil; -import org.springframework.util.StreamUtils; - -import java.nio.charset.StandardCharsets; - -public class PackageGenerator { - private static final String TEMPLATE_CLASSPATH = "/io/sc/engine/rule/core/code/generator/template/Package.tpl"; - - public static String generate(String packageName) throws Exception{ - String template =StreamUtils.copyToString(ResourceClassGenerator.class.getResourceAsStream(TEMPLATE_CLASSPATH), StandardCharsets.UTF_8); - return StringUtil.format(template,packageName); - } -} diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/ParameterGenerator.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/ParameterGenerator.java index f1c8cd80..68c04aaa 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/ParameterGenerator.java +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/ParameterGenerator.java @@ -1,60 +1,253 @@ package io.sc.engine.rule.core.code.generator.impl; -import io.sc.engine.rule.core.po.model.Model; +import io.sc.engine.rule.core.enums.ParameterType; import io.sc.engine.rule.core.po.model.Parameter; -import io.sc.engine.rule.core.po.model.parameter.IntermediateParameter; -import io.sc.engine.rule.core.po.model.parameter.OutParameter; -import io.sc.engine.rule.core.util.CodeReplacer; +import io.sc.engine.rule.core.po.model.ParameterValidator; +import io.sc.engine.rule.core.po.model.validator.*; +import io.sc.engine.rule.core.util.IdReplacer; +import io.sc.engine.rule.core.util.ValueTypeUtil; import io.sc.platform.util.CollectionUtil; -import io.sc.platform.util.FileUtil; import io.sc.platform.util.StringUtil; +import org.springframework.util.StringUtils; +import java.math.RoundingMode; import java.util.HashMap; import java.util.List; import java.util.Map; public class ParameterGenerator { - private static final String PARAMETER_TEMPLATE_CLASSPATH ="classpath:/io/sc/engine/rule/core/code/generator/templates/Parameter.tpl"; - private static final String PARAMETER_EXECUTE_METHOD_TEMPLATE_CLASSPATH ="classpath:/io/sc/engine/rule/core/code/generator/templates/ParameterExecuteMethod.tpl"; - - public static String generate(Parameter parameter) throws Exception{ - String template = FileUtil.readString(PARAMETER_TEMPLATE_CLASSPATH); - StringBuilder sb =new StringBuilder(); - - Map variables =new HashMap<>(); - variables.put("name",parameter.getName()); - variables.put("methodName", CodeReplacer.methodName(parameter.getCode())); - variables.put("type", parameter.getType().toString()); - sb.append(StringUtil.format(template,variables)); + public String generateFields(List parameters){ + if(!CollectionUtil.hasElements(parameters)){ return null; } + StringBuilder sb =new StringBuilder(""); + for(Parameter parameter : parameters){ + String code =parameter.getCode(); + String name =parameter.getName(); + String valueType =parameter.getValueType(); + Integer valueTypeVersion =parameter.getValueTypeVersion(); + String defaultValue =parameter.getDefaultValue(); + + Map variables =new HashMap<>(); + variables.put("name",name); + variables.put("fieldName",IdReplacer.fieldName(code)); + variables.put("defaultValue",defaultValue); + if(ValueTypeUtil.isString(valueType)){ + if(StringUtils.hasText(defaultValue)){ + String tpl ="String ${fieldName} =\"\"\"${defaultValue}\"\"\"; //${name}"; + sb.append(StringUtil.format(tpl,variables)).append("\n"); + }else{ + String tpl ="String ${fieldName}; //${name}"; + sb.append(StringUtil.format(tpl,variables)).append("\n"); + } + }else{ + if(StringUtils.hasText(defaultValue)){ + variables.put("className",IdReplacer.className(valueType,valueTypeVersion)); + String tpl ="${className} ${fieldName} =${defaultValue}; //${name}"; + sb.append(StringUtil.format(tpl,variables)).append("\n"); + }else{ + variables.put("className",IdReplacer.className(valueType,valueTypeVersion)); + String tpl ="${className} ${fieldName}; //${name}"; + sb.append(StringUtil.format(tpl,variables)).append("\n"); + } + } + } return sb.toString(); } - public static String generateExecuteMethods(Model model) throws Exception { - StringBuilder sb =new StringBuilder(""); - if(CollectionUtil.hasElements(model.getParameters())){ - String template = FileUtil.readString(PARAMETER_EXECUTE_METHOD_TEMPLATE_CLASSPATH); - for(Parameter parameter : model.getParameters()) { - if(parameter instanceof IntermediateParameter || parameter instanceof OutParameter) { - Map variables = new HashMap<>(); - variables.put("methodName", CodeReplacer.methodName(parameter.getCode())); - variables.put("name", parameter.getName()); - variables.put("type", parameter.getType().toString()); - sb.append(StringUtil.format(template, variables)); + public static String generateConvertorFromMap(List parameters) { + if (!CollectionUtil.hasElements(parameters)) { + return null; + } + StringBuilder sb = new StringBuilder(""); + for (Parameter parameter : parameters) { + String code = parameter.getCode(); + String name = parameter.getName(); + String valueType = parameter.getValueType(); + Integer valueTypeVersion = parameter.getValueTypeVersion(); + + Map variables =new HashMap<>(); + variables.put("code",code); + variables.put("name",name); + variables.put("fieldName",IdReplacer.fieldName(code)); + variables.put("className",IdReplacer.className(valueType,valueTypeVersion)); + if (parameter.getValueTypeIsList()) { + String tpl ="arg.${fieldName} =TypeConvertor.getValue(map.get('${code}'),new TypeReference>(){}); //${name}"; + sb.append(StringUtil.format(tpl,variables)).append("\n"); + } else { + String tpl ="arg.${fieldName} =TypeConvertor.getValue(map.get('${code}'),${className}.class); //${name}"; + sb.append(StringUtil.format(tpl,variables)).append("\n"); + } + if (!ValueTypeUtil.isBase(valueType)) { + String tpl ="if(arg.${fieldName}!=null) { arg.${fieldName}.init(); }"; + sb.append(StringUtil.format(tpl,variables)).append("\n"); + } + } + return sb.toString(); + } + + public static String generateConvertorFromJson(List parameters) { + if (!CollectionUtil.hasElements(parameters)) { + return null; + } + StringBuilder sb = new StringBuilder(""); + for (Parameter parameter : parameters) { + String code = parameter.getCode(); + String name = parameter.getName(); + String valueType = parameter.getValueType(); + + Map variables =new HashMap<>(); + variables.put("fieldName",IdReplacer.fieldName(code)); + variables.put("name",name); + if (!ValueTypeUtil.isBase(valueType)) { + String tpl ="if(arg.${fieldName}!=null) { arg.${fieldName}.init(); } //${name}"; + sb.append(StringUtil.format(tpl,variables)).append("\n"); + } + } + return sb.toString(); + } + + public static String generateValidator(List parameters) { + if (!CollectionUtil.hasElements(parameters)) { + return null; + } + StringBuilder sb = new StringBuilder(""); + for (Parameter parameter : parameters) { + String code =parameter.getCode(); + String name =parameter.getName(); + if(CollectionUtil.hasElements(parameter.getValidators())){ + for(ParameterValidator validator : parameter.getValidators()){ + Map variables =new HashMap<>(); + variables.put("code",code); + variables.put("name",name); + variables.put("fieldName",IdReplacer.fieldName(code)); + if(validator instanceof EmptyParameterValidator){ + String tpl ="FieldValidator.empty('${code}','${name}',this.${fieldName},result);"; + sb.append(StringUtil.format(tpl,variables)).append("\n"); + }else if(validator instanceof NotEmptyParameterValidator){ + String tpl ="FieldValidator.notEmpty('${code}','${name}',this.${fieldName},result);"; + sb.append(StringUtil.format(tpl,variables)).append("\n"); + }else if(validator instanceof TrueParameterValidator){ + String tpl ="FieldValidator.trueValue('${code}','${name}',this.${fieldName},result);"; + sb.append(StringUtil.format(tpl,variables)).append("\n"); + }else if(validator instanceof FalseParameterValidator){ + String tpl ="FieldValidator.falseValue('${code}','${name}',this.${fieldName},result);"; + sb.append(StringUtil.format(tpl,variables)).append("\n"); + }else if(validator instanceof EmailParameterValidator){ + String tpl ="FieldValidator.mail('${code}','${name}',this.${fieldName},result);"; + sb.append(StringUtil.format(tpl,variables)).append("\n"); + }else if(validator instanceof IntegerRangeParameterValidator){ + IntegerRangeParameterValidator integerRangeParameterValidator =(IntegerRangeParameterValidator)validator; + variables.put("minInclude",integerRangeParameterValidator.getMinInclude()); + variables.put("min",StringUtils.hasText(integerRangeParameterValidator.getMinValue())?integerRangeParameterValidator.getMinValue():"null"); + variables.put("max",StringUtils.hasText(integerRangeParameterValidator.getMaxValue())?integerRangeParameterValidator.getMaxValue():"null"); + variables.put("maxInclude",integerRangeParameterValidator.getMaxInclude()); + String tpl ="FieldValidator.integerRange('${code}','${name}',this.${fieldName},${minInclude},${min},${max},${maxInclude},result);"; + sb.append(StringUtil.format(tpl,variables)).append("\n"); + }else if(validator instanceof DecimalRangeParameterValidator){ + DecimalRangeParameterValidator decimalRangeParameterValidator =(DecimalRangeParameterValidator)validator; + variables.put("minInclude",decimalRangeParameterValidator.getMinInclude()); + variables.put("min",StringUtils.hasText(decimalRangeParameterValidator.getMinValue())?decimalRangeParameterValidator.getMinValue():"null"); + variables.put("max",StringUtils.hasText(decimalRangeParameterValidator.getMaxValue())?decimalRangeParameterValidator.getMaxValue():"null"); + variables.put("maxInclude",decimalRangeParameterValidator.getMaxInclude()); + String tpl ="FieldValidator.decimalRange('${code}','${name}',this.${fieldName},${minInclude},${min},${max},${maxInclude},result);"; + sb.append(StringUtil.format(tpl,variables)).append("\n"); + }else if(validator instanceof LengthRangeParameterValidator){ + LengthRangeParameterValidator lengthRangeParameterValidator =(LengthRangeParameterValidator)validator; + variables.put("minInclude",lengthRangeParameterValidator.getMinInclude()); + variables.put("min",StringUtils.hasText(lengthRangeParameterValidator.getMinValue())?lengthRangeParameterValidator.getMinValue():"null"); + variables.put("max",StringUtils.hasText(lengthRangeParameterValidator.getMaxValue())?lengthRangeParameterValidator.getMaxValue():"null"); + variables.put("maxInclude",lengthRangeParameterValidator.getMaxInclude()); + String tpl ="FieldValidator.lengthRange('${code}','${name}',this.${fieldName},${minInclude},${min},${max},${maxInclude},result);"; + sb.append(StringUtil.format(tpl,variables)).append("\n"); + }else if(validator instanceof DateRangeParameterValidator){ + DateRangeParameterValidator dateRangeParameterValidator =(DateRangeParameterValidator)validator; + variables.put("minInclude",dateRangeParameterValidator.getMinInclude()); + variables.put("min",StringUtils.hasText(dateRangeParameterValidator.getMinValue())?"DateUtil.parseDate(\"" + dateRangeParameterValidator.getMinValue() + "\",DateUtil.yyyy_MM_dd_HH_mm_ss)":"null"); + variables.put("max",StringUtils.hasText(dateRangeParameterValidator.getMaxValue())?"DateUtil.parseDate(\"" + dateRangeParameterValidator.getMaxValue() + "\",DateUtil.yyyy_MM_dd_HH_mm_ss)":"null"); + variables.put("maxInclude",dateRangeParameterValidator.getMaxInclude()); + String tpl ="FieldValidator.dateRange('${code}','${name}',this.${fieldName},${minInclude},${min},${max},${maxInclude},result);"; + sb.append(StringUtil.format(tpl,variables)).append("\n"); + }else if(validator instanceof PatternParameterValidator){ + PatternParameterValidator patternParameterValidator =(PatternParameterValidator)validator; + variables.put("pattern",StringUtils.hasText(patternParameterValidator.getPattern())?patternParameterValidator.getPattern():"null"); + String tpl ="FieldValidator.dateRange('${code}','${name}',this.${fieldName},'${pattern}',result);"; + sb.append(StringUtil.format(tpl,variables)).append("\n"); + } } } } return sb.toString(); } - public static String generateMethodBodys(List parameters) throws Exception { + public static String generateToResult(List parameters) { + if(!CollectionUtil.hasElements(parameters)){ return null; } StringBuilder sb =new StringBuilder(""); - if(CollectionUtil.hasElements(parameters)){ - for(Parameter parameter : parameters) { - if(parameter instanceof IntermediateParameter || parameter instanceof OutParameter) { - sb.append(generate(parameter)); + for(Parameter parameter : parameters){ + String type =parameter.getType().toString(); + String code =parameter.getCode(); + String name =parameter.getName(); + String valueType =parameter.getValueType(); + Integer valueScale =parameter.getValueScale(); + RoundingMode valueRoundingMode =parameter.getValueRoundingMode(); + Map variables =new HashMap<>(); + variables.put("type",type); + variables.put("code",code); + variables.put("name",name); + variables.put("valueType",valueType); + variables.put("valueScale",valueScale==null?8:valueScale); + variables.put("valueRoundingMode",valueRoundingMode==null?RoundingMode.HALF_UP:valueRoundingMode); + variables.put("fieldName",IdReplacer.fieldName(code)); + + if(ParameterType.INDICATOR.equals(parameter.getType()) || ParameterType.OUT.equals(parameter.getType()) || ParameterType.INTERMEDIATE.equals(parameter.getType())){ + if(ValueTypeUtil.isDecimal(parameter.getValueType())){ + String tpl ="result.addParameterResult(new ParameterResult('${code}','${name}',ParameterType.${type},'${valueType}',${valueScale},RoundingMode.${valueRoundingMode},this.${fieldName}==null?null:this.${fieldName}.setScale(${valueScale},RoundingMode.${valueRoundingMode})));"; + sb.append(StringUtil.format(tpl,variables)).append("\n"); + }else if(ValueTypeUtil.isBase(parameter.getValueType())){ + String tpl ="result.addParameterResult(new ParameterResult('${code}','${name}',ParameterType.${type},'${valueType}',null,null,this.${fieldName}==null?null:this.${fieldName}));"; + sb.append(StringUtil.format(tpl,variables)).append("\n"); + }else{ + String tpl ="result.addParameterResult(new ParameterResult('${code}','${name}',ParameterType.${type},'${valueType}',null,null,this.${fieldName}==null?null:ObjectMapperUtil.json().writeValueAsString(this.${fieldName})));"; + sb.append(StringUtil.format(tpl,variables)).append("\n"); } } } return sb.toString(); } + + public static String generateToMap(List parameters) { + if(!CollectionUtil.hasElements(parameters)){ return null; } + StringBuilder sb =new StringBuilder(""); + for(Parameter parameter : parameters){ + String code =parameter.getCode(); + String name =parameter.getName(); + + Map variables =new HashMap<>(); + variables.put("code",code); + variables.put("name",name); + variables.put("fieldName",IdReplacer.fieldName(code)); + + String tpl ="map.put('${code}',this.${fieldName}); //${name}"; + sb.append(StringUtil.format(tpl,variables)).append("\n"); + } + return sb.toString(); + } + + public static String generateMergeResult(List parameters) { + if(!CollectionUtil.hasElements(parameters)){ return null; } + StringBuilder sb =new StringBuilder(""); + for(Parameter parameter : parameters){ + String code =parameter.getCode(); + String valueType = parameter.getValueType(); + Map variables =new HashMap<>(); + variables.put("code",code); + variables.put("valueType",valueType); + if(ValueTypeUtil.isBase(valueType)){ + String tpl ="if(result.exists('${code}')){ this.${code}=TypeConvertor.getValue(result.getValueByParameterCode('${code}'),${valueType}.class); }"; + sb.append(StringUtil.format(tpl,variables)).append("\n"); + }else{ + String tpl ="if(result.exists('${code}')){ this.${code}=result.getValueByParameterCode('${code}'); }"; + sb.append(StringUtil.format(tpl,variables)).append("\n"); + } + } + return sb.toString(); + } } diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/ParameterMethodGenerator.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/ParameterMethodGenerator.java deleted file mode 100644 index beb0f422..00000000 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/ParameterMethodGenerator.java +++ /dev/null @@ -1,23 +0,0 @@ -package io.sc.engine.rule.core.code.generator.impl; - -import io.sc.engine.rule.core.po.model.Parameter; -import io.sc.platform.util.FileUtil; -import io.sc.platform.util.StringUtil; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -public class ParameterMethodGenerator { - private static final String TEMPLATE_CLASSPATH ="classpath:/io/sc/engine/rule/core/code/generator/templates/ParameterMethod.tpl"; - - public static String generate(Parameter parameter) throws Exception{ - List templates = FileUtil.readStringAsList(TEMPLATE_CLASSPATH); - - Map variables =new HashMap<>(); - variables.put("code",parameter.getCode()); - variables.put("name",parameter.getName()); - - return StringUtil.format(templates,variables); - } -} diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/ResourceClassGenerator.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/ResourceClassGenerator.java deleted file mode 100644 index ca97e004..00000000 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/ResourceClassGenerator.java +++ /dev/null @@ -1,37 +0,0 @@ -package io.sc.engine.rule.core.code.generator.impl; - -import io.sc.engine.rule.core.po.model.Model; -import io.sc.engine.rule.core.po.resource.ModelResource; -import io.sc.engine.rule.core.po.resource.Resource; -import io.sc.engine.rule.core.util.CodeReplacer; -import io.sc.platform.util.FileUtil; -import io.sc.platform.util.StringUtil; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -public class ResourceClassGenerator { - private static final String TEMPLATE_CLASSPATH ="classpath:/io/sc/engine/rule/core/code/generator/templates/Resource.tpl"; - - public static String generate(Resource resource) throws Exception{ - StringBuilder sb =new StringBuilder(""); - if(resource!=null){ - List templates = FileUtil.readStringAsList(TEMPLATE_CLASSPATH); - - Map variables =new HashMap<>(); - variables.put("resourceClassName", CodeReplacer.className(resource.getCode(),resource.getVersion())); - variables.put("resourceName",resource.getName()); - variables.put("resourceVersion",resource.getVersion()); - if(resource instanceof ModelResource) { - Model model =((ModelResource)resource).getModel(); - variables.put("topModelName", model.getName()); - variables.put("topModelMethodName", CodeReplacer.methodName(model.getCode())); - variables.put("topModelMethod", ModelGenerator.generate(model)); - } - - sb.append(StringUtil.format(templates,variables)); - } - return sb.toString(); - } -} diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/processor/Arithmetic.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/processor/Arithmetic.java new file mode 100644 index 00000000..c7868f2a --- /dev/null +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/processor/Arithmetic.java @@ -0,0 +1,33 @@ +package io.sc.engine.rule.core.code.generator.impl.processor; + +import io.sc.engine.rule.core.po.lib.Indicator; +import io.sc.engine.rule.core.po.lib.processor.ArithmeticIndicatorProcessor; +import io.sc.engine.rule.core.po.model.Parameter; +import io.sc.engine.rule.core.po.model.processor.ArithmeticParameterProcessor; +import io.sc.engine.rule.core.util.GroovyExpressionReplacer; +import org.springframework.util.StringUtils; + +public class Arithmetic { + public String groovy(Parameter parameter, ArithmeticParameterProcessor processor) throws Exception{ + if(parameter==null || processor==null){ return null; } + try { + return groovy(parameter.getCode(),parameter.getValueType(),processor.getArithmetic()); + }catch(Exception e) { + throw new RuntimeException("There was a Error when generate " + parameter.getName()+ "'s Arithmetic groovy source code.", e); + } + } + + public String groovy(Indicator indicator, ArithmeticIndicatorProcessor processor) throws Exception{ + if(indicator==null || processor==null){ return null; } + try{ + return groovy(indicator.getCode(),indicator.getValueType(),processor.getArithmetic()); + }catch(Exception e) { + throw new RuntimeException("There was a Error when generate " + indicator.getName()+ "'s Arithmetic groovy source code.", e); + } + } + + private String groovy(String code, String valueType,String arthmetic) { + if(!StringUtils.hasText(arthmetic)){ return null; } + return GroovyExpressionReplacer.groovy(arthmetic,valueType); + } +} diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/processor/ConditionRange.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/processor/ConditionRange.java new file mode 100644 index 00000000..d8d51847 --- /dev/null +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/processor/ConditionRange.java @@ -0,0 +1,91 @@ +package io.sc.engine.rule.core.code.generator.impl.processor; + +import com.fasterxml.jackson.core.type.TypeReference; +import io.sc.engine.rule.core.po.lib.Indicator; +import io.sc.engine.rule.core.po.lib.processor.ConditionRangeIndicatorProcessor; +import io.sc.engine.rule.core.po.model.Parameter; +import io.sc.engine.rule.core.po.model.processor.ConditionRangeParameterProcessor; +import io.sc.engine.rule.core.util.GroovyExpressionReplacer; +import io.sc.engine.rule.core.util.IdReplacer; +import io.sc.platform.util.CollectionUtil; +import io.sc.platform.util.ObjectMapperUtil; +import org.springframework.util.StringUtils; + +import java.util.ArrayList; +import java.util.List; + +public class ConditionRange { + private String condition; + private String value; + + public List parse(String json) throws Exception{ + return ObjectMapperUtil.json().readValue(json, new TypeReference>(){}); + } + + public String groovy(Parameter parameter,ConditionRangeParameterProcessor processor) throws Exception{ + if(parameter==null || processor==null){ return null; } + try { + List conditionRanges =parse(processor.getConditionRange()); + return groovy(parameter.getCode(),parameter.getValueType(),conditionRanges); + }catch(Exception e) { + throw new RuntimeException("There was a Error when generate " + parameter.getName()+ "'s ConditionRange groovy source code.", e); + } + } + + public String groovy(Indicator indicator, ConditionRangeIndicatorProcessor processor) throws Exception{ + if(indicator==null || processor==null){ return null; } + try{ + List conditionRanges =parse(processor.getConditionRange()); + return groovy(indicator.getCode(),indicator.getValueType(),conditionRanges); + }catch(Exception e) { + throw new RuntimeException("There was a Error when generate " + indicator.getName()+ "'s ConditionRange groovy source code.", e); + } + } + + private String groovy(String code, String valueType,List conditionRanges){ + if(!CollectionUtil.hasElements(conditionRanges)){ return null; } + List _conditionRanges =new ArrayList(); + //移除没有填写条件的条件范围 + for(ConditionRange conditionRange : conditionRanges) { + if(StringUtils.hasText(conditionRange.getCondition())) { + _conditionRanges.add(conditionRange); + } + } + if(_conditionRanges.isEmpty()){ + return null; + } + + StringBuilder sb =new StringBuilder(); + int size =_conditionRanges.size(); + for(int i=0;i> parse(String json) throws Exception{ + return ObjectMapperUtil.json().readValue(json, new TypeReference>>(){}); + } + + public String groovy(Parameter parameter, DecisionTableParameterProcessor processor,List parameters) throws Exception{ + if(parameter==null || processor==null){ return null; } + try { + List> decisionTables =parse(processor.getDecisionTable()); + return groovy(parameter.getCode(),parameter.getValueType(),decisionTables,parameters); + }catch(Exception e) { + throw new RuntimeException("There was a Error when generate " + parameter.getName()+ "'s DecisionTable groovy source code.", e); + } + } + + private String groovy(String code, String valueType,List> decisionTables,List parameters){ + if(!CollectionUtil.hasElements(decisionTables)){ return null;} + StringBuilder sb =new StringBuilder(); + int conditionRowCount =getConditionRowCount(decisionTables); + int resultRowCount =getResultRowCount(decisionTables); + int colCount =getColCount(decisionTables); + for(int i=1;i conditions =new ArrayList<>(); + for(int j=0;j> decisionTables){ + if(!CollectionUtil.hasElements(decisionTables)){ return null;} + StringBuilder sb =new StringBuilder(); + int conditionRowCount =getConditionRowCount(decisionTables); + int resultRowCount =getResultRowCount(decisionTables); + int colCount =getColCount(decisionTables); + sb.append("if (true){").append("\n"); + sb.append("}"); + for(int j=1;j> decisionTables) { + if(decisionTables!=null && decisionTables.size()>0) { + Map row =decisionTables.get(0); + if(row!=null && row.size()>0) { + int index =0; + while(row.containsKey("C"+index)) { + index++; + } + return index; + } + } + return 0; + } + + private int getConditionRowCount(List> decisionTables) { + if(decisionTables!=null && decisionTables.size()>0) { + int index =0; + while("condition".equalsIgnoreCase((String)decisionTables.get(index).get("type"))) { + index++; + } + return index; + } + return 0; + } + + private int getResultRowCount(List> decisionTables) { + if(decisionTables!=null && decisionTables.size()>0) { + int index =0; + for(Map map : decisionTables) { + if("result".equalsIgnoreCase((String)map.get("type"))) { + index++; + } + } + return index; + } + return 0; + } +} diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/processor/DecisionTable2C.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/processor/DecisionTable2C.java new file mode 100644 index 00000000..d90615dd --- /dev/null +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/processor/DecisionTable2C.java @@ -0,0 +1,74 @@ +package io.sc.engine.rule.core.code.generator.impl.processor; + +import com.fasterxml.jackson.core.type.TypeReference; +import io.sc.engine.rule.core.po.model.Parameter; +import io.sc.engine.rule.core.po.model.processor.DecisionTable2CParameterProcessor; +import io.sc.engine.rule.core.util.ExpressionReplacer; +import io.sc.engine.rule.core.util.GroovyExpressionReplacer; +import io.sc.engine.rule.core.util.IdReplacer; +import io.sc.platform.util.CollectionUtil; +import io.sc.platform.util.ObjectMapperUtil; + +import java.util.List; +import java.util.Map; + +public class DecisionTable2C { + public List> parse(String json) throws Exception{ + return ObjectMapperUtil.json().readValue(json, new TypeReference>>(){}); + } + + public String groovy(Parameter parameter, DecisionTable2CParameterProcessor processor) throws Exception{ + if(parameter==null || processor==null){ return null; } + try { + List> decisionTable2Cs =parse(processor.getDecisionTable2C()); + return groovy(parameter.getCode(),parameter.getValueType(),decisionTable2Cs); + }catch(Exception e) { + throw new RuntimeException("There was a Error when generate " + parameter.getName()+ "'s DecisionTable2C groovy source code.", e); + } + } + + private String groovy(String code, String valueType,List> decisionTable2Cs){ + if(!CollectionUtil.hasElements(decisionTable2Cs)){ return null;} + StringBuilder sb =new StringBuilder(); + int rowCount =decisionTable2Cs.size(); + int colCount =getColCount(decisionTable2Cs); + boolean isFirstCondition =true; + for(int i=1;i> decisionTable2Cs) { + if(decisionTable2Cs!=null && decisionTable2Cs.size()>0) { + Map row =decisionTable2Cs.get(0); + if(row!=null && row.size()>0) { + int index =0; + while(row.containsKey("C"+index)) { + index++; + } + return index; + } + } + return 0; + } +} diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/processor/DecisionTree.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/processor/DecisionTree.java similarity index 75% rename from io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/processor/DecisionTree.java rename to io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/processor/DecisionTree.java index f5e0dfab..38dcab80 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/processor/DecisionTree.java +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/processor/DecisionTree.java @@ -1,18 +1,19 @@ -package io.sc.engine.rule.core.code.impl.support.processor; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +package io.sc.engine.rule.core.code.generator.impl.processor; import io.sc.engine.rule.core.mxgraph.parser.DecisionTreeParser; import io.sc.engine.rule.core.mxgraph.po.*; import io.sc.engine.rule.core.po.model.Parameter; import io.sc.engine.rule.core.po.model.processor.DecisionTreeParameterProcessor; import io.sc.engine.rule.core.util.ExpressionReplacer; +import io.sc.platform.util.StringUtil; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; public class DecisionTree { - public static GraphNode parse(String json) throws Exception{ + public GraphNode parse(String json) throws Exception{ if(json!=null && json.trim().length()>1) { DecisionTreeParser parser =new DecisionTreeParser(); GraphNode result =parser.parse(json); @@ -27,7 +28,7 @@ public class DecisionTree { * @return groovy 代码 * @throws Exception 违例 */ - public static String generateGroovyCode(Parameter parameter,DecisionTreeParameterProcessor processor) throws Exception{ + public String groovy(Parameter parameter,DecisionTreeParameterProcessor processor) throws Exception{ try { Map methodNameCache =new HashMap(); GraphNode node =parse(processor.getDecisionTree()); @@ -44,32 +45,30 @@ public class DecisionTree { * @param node 决策树第一个有效节点(即第一个条件节点) * @return groovy 代码 */ - private static String _generateGroovyCode(Map methodNameCache,Parameter parameter,GraphNode node) { - if(node!=null) { - StringBuilder sb =new StringBuilder(); - String methodName ="Tree_" + parameter.getCode() + "_" + node.getId(); - if(node instanceof ConditionNode) { - ConditionNode conditionNode =(ConditionNode)node; - if(!methodNameCache.containsKey(methodName)) { - sb.append(generateConditionGroovyCode(methodNameCache,parameter,conditionNode,methodName)); - methodNameCache.put(methodName, null); - } - }else if(node instanceof ExpressionNode) { - ExpressionNode expressionNode =(ExpressionNode)node; - if(!methodNameCache.containsKey(methodName)) { - sb.append(generateExpressionGroovyCode(methodNameCache,parameter,expressionNode,methodName)); - methodNameCache.put(methodName, null); - } - }else if(node instanceof ResourceAbstractNode) { - ResourceAbstractNode modelAbstractNode =(ResourceAbstractNode)node; - if(!methodNameCache.containsKey(methodName)) { - sb.append(generateResourceAbstractGroovyCode(methodNameCache,parameter,modelAbstractNode,methodName)); - methodNameCache.put(methodName, null); - } + private String _generateGroovyCode(Map methodNameCache,Parameter parameter,GraphNode node) { + if(node==null){ return null; } + StringBuilder sb =new StringBuilder(); + String methodName ="Tree_" + parameter.getCode() + "_" + node.getId(); + if(node instanceof ConditionNode) { + ConditionNode conditionNode =(ConditionNode)node; + if(!methodNameCache.containsKey(methodName)) { + sb.append(generateConditionGroovyCode(methodNameCache,parameter,conditionNode,methodName)); + methodNameCache.put(methodName, null); + } + }else if(node instanceof ExpressionNode) { + ExpressionNode expressionNode =(ExpressionNode)node; + if(!methodNameCache.containsKey(methodName)) { + sb.append(generateExpressionGroovyCode(methodNameCache,parameter,expressionNode,methodName)); + methodNameCache.put(methodName, null); + } + }else if(node instanceof ResourceAbstractNode) { + ResourceAbstractNode modelAbstractNode =(ResourceAbstractNode)node; + if(!methodNameCache.containsKey(methodName)) { + sb.append(generateResourceAbstractGroovyCode(methodNameCache,parameter,modelAbstractNode,methodName)); + methodNameCache.put(methodName, null); } - return sb.toString(); } - return null; + return StringUtil.tabs(sb.toString(),2); } /** @@ -80,7 +79,7 @@ public class DecisionTree { * @param methodName 方法名 * @return groovy 代码 */ - private static String generateConditionGroovyCode(Map methodNameCache,Parameter parameter,ConditionNode conditionNode,String methodName) { + private String generateConditionGroovyCode(Map methodNameCache,Parameter parameter,ConditionNode conditionNode,String methodName) { StringBuilder sb =new StringBuilder(); sb.append("\tprivate static ").append(parameter.getValueType()).append(" ").append(methodName).append("(Executor executor,Argument ").append(ExpressionReplacer.ARGUMENT_NAME).append("){//条件判断").append("\n"); List branches =conditionNode.getOuts(); //获取条件的所有出口边 @@ -128,7 +127,7 @@ public class DecisionTree { * @param methodName 方法名 * @return 代码 */ - private static String generateExpressionGroovyCode(Map methodNameCache,Parameter parameter,ExpressionNode expressionNode,String methodName) { + private String generateExpressionGroovyCode(Map methodNameCache,Parameter parameter,ExpressionNode expressionNode,String methodName) { StringBuilder sb =new StringBuilder(); sb.append("\tprivate static ").append(parameter.getValueType()).append(" ").append(methodName).append("(Executor executor,Argument ").append(ExpressionReplacer.ARGUMENT_NAME).append("){//表达式").append("\n"); String expression =expressionNode.getExpression(); @@ -150,7 +149,7 @@ public class DecisionTree { * @param methodName 方法名 * @return 代码 */ - private static String generateResourceAbstractGroovyCode(Map methodNameCache,Parameter parameter,ResourceAbstractNode expressionNode,String methodName) { + private String generateResourceAbstractGroovyCode(Map methodNameCache,Parameter parameter,ResourceAbstractNode expressionNode,String methodName) { StringBuilder sb =new StringBuilder(); sb.append("\tprivate static ").append(parameter.getValueType()).append(" ").append(methodName).append("(Executor executor,Argument ").append(ExpressionReplacer.ARGUMENT_NAME).append("){//资源").append("\n"); String code =ExpressionReplacer.groovy(expressionNode.getCode(),String.class.getName()); @@ -169,7 +168,7 @@ public class DecisionTree { * @param nodes 条件边 * @return 排序后的条件边 */ - private static List orderEdges(List nodes){ + private List orderEdges(List nodes){ List result =new ArrayList(); for(GraphNode node : nodes) { if(node instanceof EdgeConditionBranchNode) { diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/processor/ExecutionFlow.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/processor/ExecutionFlow.java similarity index 77% rename from io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/processor/ExecutionFlow.java rename to io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/processor/ExecutionFlow.java index fd2d47cb..07e00b53 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/processor/ExecutionFlow.java +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/processor/ExecutionFlow.java @@ -1,19 +1,20 @@ -package io.sc.engine.rule.core.code.impl.support.processor; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +package io.sc.engine.rule.core.code.generator.impl.processor; import io.sc.engine.rule.core.mxgraph.parser.ExecutionFlowParser; import io.sc.engine.rule.core.mxgraph.po.*; import io.sc.engine.rule.core.po.model.Parameter; import io.sc.engine.rule.core.po.model.processor.ExecutionFlowParameterProcessor; import io.sc.engine.rule.core.util.ExpressionReplacer; +import io.sc.platform.util.StringUtil; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; public class ExecutionFlow { - public static GraphNode parse(String json) throws Exception{ + public GraphNode parse(String json) throws Exception{ if(json!=null && json.trim().length()>1) { ExecutionFlowParser parser =new ExecutionFlowParser(); GraphNode result =parser.parse(json); @@ -29,7 +30,7 @@ public class ExecutionFlow { * @return groovy 代码 * @throws Exception 违例 */ - public static String generateGroovyCode(Parameter parameter,ExecutionFlowParameterProcessor processor) throws Exception{ + public String groovy(Parameter parameter,ExecutionFlowParameterProcessor processor) throws Exception{ try { Map methodNameCache =new HashMap(); GraphNode node =parse(processor.getExecutionFlow()); @@ -46,50 +47,48 @@ public class ExecutionFlow { * @param node 决策树第一个有效节点(即第一个条件节点) * @return groovy 代码 */ - private static String _generateGroovyCode(Map methodNameCache,Parameter parameter,GraphNode node) { - if(node!=null) { - StringBuilder sb =new StringBuilder(); - String methodName ="Flow_" + parameter.getCode() + "_" + node.getId(); - if(node instanceof ConditionNode) { - ConditionNode conditionNode =(ConditionNode)node; - if(!methodNameCache.containsKey(methodName)) { - sb.append(generateConditionGroovyCode(methodNameCache,parameter,conditionNode,methodName)); - methodNameCache.put(methodName, null); - } - }else if(node instanceof ParallelNode) { - ParallelNode parallelNode =(ParallelNode)node; - if(!methodNameCache.containsKey(methodName)) { - sb.append(generateParallelGroovyCode(methodNameCache,parameter,parallelNode,methodName)); - methodNameCache.put(methodName, null); - } - }else if(node instanceof CommandSetNode) { - CommandSetNode expressionNode =(CommandSetNode)node; - if(!methodNameCache.containsKey(methodName)) { - sb.append(generateCommandSetGroovyCode(methodNameCache,parameter,expressionNode,methodName)); - methodNameCache.put(methodName, null); - } - }else if(node instanceof ResourceAbstractNode) { - ResourceAbstractNode modelAbstractNode =(ResourceAbstractNode)node; - if(!methodNameCache.containsKey(methodName)) { - sb.append(generateResourceAbstractGroovyCode(methodNameCache,parameter,modelAbstractNode,methodName)); - methodNameCache.put(methodName, null); - } - }else if(node instanceof ConfigurableResourceAbstractNode) { - ConfigurableResourceAbstractNode configurableModelAbstractNode =(ConfigurableResourceAbstractNode)node; - if(!methodNameCache.containsKey(methodName)) { - sb.append(generateConfigurableResourceAbstractGroovyCode(methodNameCache,parameter,configurableModelAbstractNode,methodName)); - methodNameCache.put(methodName, null); - } - }else if(node instanceof SubModelAbstractNode) { - SubModelAbstractNode subModelAbstractNode =(SubModelAbstractNode)node; - if(!methodNameCache.containsKey(methodName)) { - sb.append(generateModelAbstractGroovyCode(methodNameCache,parameter,subModelAbstractNode,methodName)); - methodNameCache.put(methodName, null); - } + private String _generateGroovyCode(Map methodNameCache,Parameter parameter,GraphNode node) { + if(node==null) { return null; } + StringBuilder sb =new StringBuilder(); + String methodName ="Flow_" + parameter.getCode() + "_" + node.getId(); + if(node instanceof ConditionNode) { + ConditionNode conditionNode =(ConditionNode)node; + if(!methodNameCache.containsKey(methodName)) { + sb.append(generateConditionGroovyCode(methodNameCache,parameter,conditionNode,methodName)); + methodNameCache.put(methodName, null); + } + }else if(node instanceof ParallelNode) { + ParallelNode parallelNode =(ParallelNode)node; + if(!methodNameCache.containsKey(methodName)) { + sb.append(generateParallelGroovyCode(methodNameCache,parameter,parallelNode,methodName)); + methodNameCache.put(methodName, null); + } + }else if(node instanceof CommandSetNode) { + CommandSetNode expressionNode =(CommandSetNode)node; + if(!methodNameCache.containsKey(methodName)) { + sb.append(generateCommandSetGroovyCode(methodNameCache,parameter,expressionNode,methodName)); + methodNameCache.put(methodName, null); + } + }else if(node instanceof ResourceAbstractNode) { + ResourceAbstractNode modelAbstractNode =(ResourceAbstractNode)node; + if(!methodNameCache.containsKey(methodName)) { + sb.append(generateResourceAbstractGroovyCode(methodNameCache,parameter,modelAbstractNode,methodName)); + methodNameCache.put(methodName, null); + } + }else if(node instanceof ConfigurableResourceAbstractNode) { + ConfigurableResourceAbstractNode configurableModelAbstractNode =(ConfigurableResourceAbstractNode)node; + if(!methodNameCache.containsKey(methodName)) { + sb.append(generateConfigurableResourceAbstractGroovyCode(methodNameCache,parameter,configurableModelAbstractNode,methodName)); + methodNameCache.put(methodName, null); + } + }else if(node instanceof SubModelAbstractNode) { + SubModelAbstractNode subModelAbstractNode =(SubModelAbstractNode)node; + if(!methodNameCache.containsKey(methodName)) { + sb.append(generateModelAbstractGroovyCode(methodNameCache,parameter,subModelAbstractNode,methodName)); + methodNameCache.put(methodName, null); } - return sb.toString(); } - return null; + return StringUtil.tabs(sb.toString(),1); } /** @@ -100,7 +99,7 @@ public class ExecutionFlow { * @param methodName 方法名 * @return groovy 代码 */ - private static String generateConditionGroovyCode(Map methodNameCache,Parameter parameter,ConditionNode node,String methodName) { + private String generateConditionGroovyCode(Map methodNameCache,Parameter parameter,ConditionNode node,String methodName) { StringBuilder sb =new StringBuilder(); sb.append("\tprivate static void ").append(methodName).append("(Executor executor,Argument ").append(ExpressionReplacer.ARGUMENT_NAME).append("){//条件判断").append("\n"); List branches =node.getOuts(); //获取条件的所有出口边 @@ -148,7 +147,7 @@ public class ExecutionFlow { * @param methodName 方法名 * @return groovy 代码 */ - private static String generateParallelGroovyCode(Map methodNameCache,Parameter parameter,ParallelNode node,String methodName) { + private String generateParallelGroovyCode(Map methodNameCache,Parameter parameter,ParallelNode node,String methodName) { StringBuilder sb =new StringBuilder(); sb.append("\tprivate static void ").append(methodName).append("(Executor executor,Argument ").append(ExpressionReplacer.ARGUMENT_NAME).append("){//并发网关").append("\n"); List outs =node.getOuts(); //获取条件的所有出口边 @@ -176,7 +175,7 @@ public class ExecutionFlow { * @param methodName 方法名 * @return 代码 */ - private static String generateCommandSetGroovyCode(Map methodNameCache,Parameter parameter,CommandSetNode node,String methodName) { + private String generateCommandSetGroovyCode(Map methodNameCache,Parameter parameter,CommandSetNode node,String methodName) { StringBuilder sb =new StringBuilder(); sb.append("\tprivate static void ").append(methodName).append("(Executor executor,Argument ").append(ExpressionReplacer.ARGUMENT_NAME).append("){//指令集").append("\n"); String commands =node.getCommands(); @@ -212,7 +211,7 @@ public class ExecutionFlow { * @param methodName 方法名 * @return 代码 */ - private static String generateResourceAbstractGroovyCode(Map methodNameCache,Parameter parameter,ResourceAbstractNode node,String methodName) { + private String generateResourceAbstractGroovyCode(Map methodNameCache,Parameter parameter,ResourceAbstractNode node,String methodName) { StringBuilder sb =new StringBuilder(); sb.append("\tprivate static void ").append(methodName).append("(Executor executor,Argument ").append(ExpressionReplacer.ARGUMENT_NAME).append("){//资源").append("\n"); String code =node.getCode(); @@ -251,7 +250,7 @@ public class ExecutionFlow { * @param methodName 方法名 * @return 代码 */ - private static String generateConfigurableResourceAbstractGroovyCode(Map methodNameCache,Parameter parameter,ConfigurableResourceAbstractNode node,String methodName) { + private String generateConfigurableResourceAbstractGroovyCode(Map methodNameCache,Parameter parameter,ConfigurableResourceAbstractNode node,String methodName) { StringBuilder sb =new StringBuilder(); sb.append("\tprivate static void ").append(methodName).append("(Executor executor,Argument ").append(ExpressionReplacer.ARGUMENT_NAME).append("){//可配置资源").append("\n"); String code =node.getCode(); @@ -300,7 +299,7 @@ public class ExecutionFlow { * @param methodName 方法名 * @return 代码 */ - private static String generateModelAbstractGroovyCode(Map methodNameCache,Parameter parameter,SubModelAbstractNode node,String methodName) { + private String generateModelAbstractGroovyCode(Map methodNameCache,Parameter parameter,SubModelAbstractNode node,String methodName) { StringBuilder sb =new StringBuilder(); sb.append("\tprivate static void ").append(methodName).append("(Executor executor,Argument ").append(ExpressionReplacer.ARGUMENT_NAME).append("){//模型").append("\n"); String code =node.getCode(); @@ -332,7 +331,7 @@ public class ExecutionFlow { * @param nodes 条件边 * @return 排序后的条件边 */ - private static List orderEdges(List nodes){ + private List orderEdges(List nodes){ List result =new ArrayList(); for(GraphNode node : nodes) { if(node instanceof EdgeConditionBranchNode) { diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/processor/MathFormula.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/processor/MathFormula.java similarity index 88% rename from io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/processor/MathFormula.java rename to io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/processor/MathFormula.java index ccbeebee..c4a80115 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/processor/MathFormula.java +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/processor/MathFormula.java @@ -1,11 +1,12 @@ -package io.sc.engine.rule.core.code.impl.support.processor; +package io.sc.engine.rule.core.code.generator.impl.processor; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import io.sc.engine.rule.core.po.lib.Indicator; import io.sc.engine.rule.core.po.lib.processor.MathFormulaIndicatorProcessor; import io.sc.engine.rule.core.po.model.Parameter; import io.sc.engine.rule.core.po.model.processor.MathFormulaParameterProcessor; -import io.sc.engine.rule.core.util.ExpressionReplacer; +import io.sc.engine.rule.core.util.GroovyExpressionReplacer; +import io.sc.platform.util.StringUtil; import org.springframework.util.StringUtils; import javax.xml.stream.XMLEventReader; @@ -19,8 +20,8 @@ import java.util.ArrayDeque; @JsonIgnoreProperties(ignoreUnknown=true) public class MathFormula { - public static String generateGroovyCode(Indicator indicator, MathFormulaIndicatorProcessor processor) throws Exception { - if (indicator == null || processor == null) { + public String groovy(Parameter parameter, MathFormulaParameterProcessor processor) throws Exception{ + if (parameter == null || processor == null) { return null; } String mathXml =processor.getMathFormula(); @@ -31,11 +32,11 @@ public class MathFormula { if(!mathXml.startsWith("") && !mathXml.endsWith("")){ mathXml ="" + mathXml + ""; } - return ExpressionReplacer.groovy(buildGroovyCode(mathXml),null); + return StringUtil.tabs(GroovyExpressionReplacer.groovy(buildGroovyCode(mathXml)),2); } - public static String generateGroovyCode(Parameter parameter, MathFormulaParameterProcessor processor) throws Exception{ - if (parameter == null || processor == null) { + public String groovy(Indicator indicator, MathFormulaIndicatorProcessor processor) throws Exception { + if (indicator == null || processor == null) { return null; } String mathXml =processor.getMathFormula(); @@ -46,10 +47,11 @@ public class MathFormula { if(!mathXml.startsWith("") && !mathXml.endsWith("")){ mathXml ="" + mathXml + ""; } - return ExpressionReplacer.groovy(buildGroovyCode(mathXml),null); + //return StringUtil.tabs(buildGroovyCode(mathXml),2); + return StringUtil.tabs(GroovyExpressionReplacer.groovy(buildGroovyCode(mathXml)),2); } - private static String buildGroovyCode(String mathXml) throws Exception{ + private String buildGroovyCode(String mathXml) throws Exception{ Reader reader = new StringReader(mathXml); XMLInputFactory xmlInputFactory =XMLInputFactory.newFactory(); XMLEventReader xmlEventReader =xmlInputFactory.createXMLEventReader(reader); @@ -79,11 +81,7 @@ public class MathFormula { String text =characters.getData().trim(); String tagName =tagNameDeque.peek(); if("mi".equalsIgnoreCase(tagName)){ - if("(".equalsIgnoreCase(text) || ")".equalsIgnoreCase(text)){ - sb.append(text); - }else{ - sb.append("${").append(text); - } + sb.append(text); }else if("mo".equalsIgnoreCase(tagName)){ if("×".equalsIgnoreCase(text)){ sb.append("*"); @@ -113,12 +111,7 @@ public class MathFormula { if("mspace".equalsIgnoreCase(tagName)){ }else if("mi".equalsIgnoreCase(tagName)){ - String lastText =sb.substring(sb.length()-1); - if("(".equalsIgnoreCase(lastText) || ")".equalsIgnoreCase(lastText)){ - }else{ - sb.append("}"); - } }else if("mrow".equalsIgnoreCase(tagName)){ sb.append(")"); if( @@ -211,6 +204,6 @@ public class MathFormula { " \n" + ""; - System.out.println(MathFormula.buildGroovyCode(xml)); + System.out.println(new MathFormula().buildGroovyCode(xml)); } } diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/processor/NumberRange.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/processor/NumberRange.java new file mode 100644 index 00000000..24d0478a --- /dev/null +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/processor/NumberRange.java @@ -0,0 +1,133 @@ +package io.sc.engine.rule.core.code.generator.impl.processor; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.core.type.TypeReference; +import io.sc.engine.rule.core.po.lib.Indicator; +import io.sc.engine.rule.core.po.lib.processor.NumberRangeIndicatorProcessor; +import io.sc.engine.rule.core.po.model.Parameter; +import io.sc.engine.rule.core.po.model.processor.NumberRangeParameterProcessor; +import io.sc.engine.rule.core.util.GroovyExpressionReplacer; +import io.sc.platform.util.CollectionUtil; +import io.sc.platform.util.ObjectMapperUtil; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; + +@JsonIgnoreProperties(ignoreUnknown=true) +public class NumberRange { + private Boolean minIncluded; + private BigDecimal min; + private BigDecimal max; + private Boolean maxIncluded; + private String value; + + public List parse(String json) throws Exception{ + return ObjectMapperUtil.json().readValue(json, new TypeReference>(){}); + } + + public String groovy(Parameter parameter,NumberRangeParameterProcessor processor) throws Exception{ + if(parameter==null || processor==null){ return null; } + try { + List numberRanges = parse(processor.getNumberRange()); + return groovy(parameter.getCode(),parameter.getValueType(),processor.getNumberRangeVar(),numberRanges); + }catch(Exception e) { + throw new RuntimeException("There was a Error when generate " + parameter.getName()+ "'s NumberRange groovy source code.", e); + } + } + + public String groovy(Indicator indicator,NumberRangeIndicatorProcessor processor) throws Exception{ + if(indicator==null || processor==null){ return null; } + try { + List numberRanges = parse(processor.getNumberRange()); + return groovy(indicator.getCode(),indicator.getValueType(),processor.getNumberRangeVar(),numberRanges); + }catch(Exception e) { + throw new RuntimeException("There was a Error when generate " + indicator.getName()+ "'s NumberRange groovy source code.", e); + } + } + + public String groovy(String code, String valueType,String var,List numberRanges){ + if(!CollectionUtil.hasElements(numberRanges)){ return null; } + List _numberRanges =new ArrayList(); + + //移除空行 + if(numberRanges!=null && numberRanges.size()>0) { + for(NumberRange numberRange : numberRanges) { + if(numberRange.min!=null || numberRange.max!=null || numberRange.value!=null) { + _numberRanges.add(numberRange); + } + } + } + if(_numberRanges.isEmpty()){ + return null; + } + + if (var == null || "".equals(var.trim())) { + var = GroovyExpressionReplacer.ARGUMENT_NAME + "." + code; + } + StringBuilder sb = new StringBuilder(); + int size = _numberRanges.size(); + for (int i = 0; i < size; i++) { + NumberRange numberRange = _numberRanges.get(i); + if (i == 0) { + sb.append("if("); + } else { + sb.append("else if("); + } + if (numberRange.min == null && numberRange.max == null) { + sb.append(GroovyExpressionReplacer.groovy(var)).append("==null"); + } else if (numberRange.min != null) { + if (numberRange.minIncluded != null && numberRange.minIncluded) { + sb.append(GroovyExpressionReplacer.groovy(var)).append(">=").append(numberRange.min); + } else { + sb.append(GroovyExpressionReplacer.groovy(var)).append(">").append(numberRange.min); + } + } + if (numberRange.min != null && numberRange.max != null) { + sb.append(" && "); + } + if (numberRange.max != null) { + if (numberRange.maxIncluded != null && numberRange.maxIncluded) { + sb.append(GroovyExpressionReplacer.groovy(var)).append("<=").append(numberRange.max); + } else { + sb.append(GroovyExpressionReplacer.groovy(var)).append("<").append(numberRange.max); + } + } + sb.append(")").append("{").append("\n"); + sb.append("\t").append(GroovyExpressionReplacer.ARGUMENT_NAME).append(".").append(code).append(" =").append(GroovyExpressionReplacer.groovy(numberRange.value, valueType)).append(";\n"); + sb.append("}"); + } + return sb.toString(); + } + + public Boolean getMinIncluded() { + return minIncluded; + } + public void setMinIncluded(Boolean minIncluded) { + this.minIncluded = minIncluded; + } + public BigDecimal getMin() { + return min; + } + public void setMin(BigDecimal min) { + this.min = min; + } + public BigDecimal getMax() { + return max; + } + public void setMax(BigDecimal max) { + this.max = max; + } + public Boolean getMaxIncluded() { + return maxIncluded; + } + public void setMaxIncluded(Boolean maxIncluded) { + this.maxIncluded = maxIncluded; + } + public String getValue() { + return value; + } + public void setValue(String value) { + this.value = value; + } +} diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/processor/ObjectProperty.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/processor/ObjectProperty.java new file mode 100644 index 00000000..eaa9c5c8 --- /dev/null +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/processor/ObjectProperty.java @@ -0,0 +1,113 @@ +package io.sc.engine.rule.core.code.generator.impl.processor; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.core.type.TypeReference; +import io.sc.engine.rule.core.po.lib.Indicator; +import io.sc.engine.rule.core.po.lib.processor.ObjectPropertiesIndicatorProcessor; +import io.sc.engine.rule.core.po.model.Parameter; +import io.sc.engine.rule.core.po.model.processor.ObjectPropertiesParameterProcessor; +import io.sc.engine.rule.core.util.GroovyExpressionReplacer; +import io.sc.engine.rule.core.util.IdReplacer; +import io.sc.platform.util.CollectionUtil; +import io.sc.platform.util.ObjectMapperUtil; +import io.sc.platform.util.PlaceHolderExpressionUtil; +import org.springframework.util.StringUtils; + +import java.util.ArrayList; +import java.util.List; + +@JsonIgnoreProperties(ignoreUnknown=true) +public class ObjectProperty { + private String code; + private String name; + private String expression; + + public ObjectProperty(){} + + public ObjectProperty(String code, String name){ + this.code =code; + this.name =name; + } + + public List parse(String json) throws Exception { + return ObjectMapperUtil.json().readValue(json, new TypeReference>(){}); + } + + public String groovy(Parameter parameter, ObjectPropertiesParameterProcessor processor) throws Exception{ + if(parameter==null || processor==null){ return null; } + try { + List objectProperties =parse(processor.getObjectProperties()); + return groovy(parameter.getCode(),parameter.getValueType(),parameter.getValueTypeVersion(),processor.getObjectCondition(),objectProperties); + }catch(Exception e) { + throw new RuntimeException("There was a Error when generate " + parameter.getName()+ "'s ObjectProperty groovy source code.", e); + } + } + + public String groovy(Indicator indicator, ObjectPropertiesIndicatorProcessor processor) throws Exception{ + if(indicator==null || processor==null){ return null; } + try { + List objectProperties =parse(processor.getObjectProperties()); + return groovy(indicator.getCode(),indicator.getValueType(),indicator.getValueTypeVersion(),processor.getObjectCondition(),objectProperties); + }catch(Exception e) { + throw new RuntimeException("There was a Error when generate " + indicator.getName()+ "'s ObjectProperty groovy source code.", e); + } + } + + public String groovy(String code, String valueType, Integer valueTypeVersion,String condition,List objectProperties) throws Exception{ + if(!CollectionUtil.hasElements(objectProperties)){ return null; } + List _objectProperties =new ArrayList<>(); + //移除没有填写表达式的对象属性 + if(objectProperties!=null && objectProperties.size()>0) { + for(ObjectProperty objectProperty : objectProperties) { + if(StringUtils.hasText(objectProperty.getExpression())){ + _objectProperties.add(objectProperty); + } + } + } + if(_objectProperties.isEmpty()){ + return null; + } + StringBuilder sb =new StringBuilder(); + if(StringUtils.hasText(condition)){ + sb.append("if (").append(GroovyExpressionReplacer.groovy(condition)).append("){").append("\n"); + }else{ + sb.append("if (true) {").append("\n"); + } + sb.append("\tif (").append(GroovyExpressionReplacer.ARGUMENT_NAME).append(".").append(IdReplacer.fieldName(code)).append("==null) {").append("\n"); + sb.append("t\t").append(GroovyExpressionReplacer.ARGUMENT_NAME).append(".").append(IdReplacer.fieldName(code)).append(" =new ").append(valueType).append("_V").append(valueTypeVersion).append("();").append("\n"); + sb.append("\t}").append("\n"); + int size =_objectProperties.size(); + for(int i=0;i items = inOptionParameter.getOptions(); + if(!CollectionUtil.hasElements(items)){ return null; } + StringBuilder sb =new StringBuilder(); + int size =items.size(); + for(int i=0;i parse(String json) throws Exception{ + return ObjectMapperUtil.json().readValue(json, new TypeReference>(){}); + } + + public String groovy(Parameter parameter,SqlParameterProcessor processor) throws Exception{ + if(parameter==null || processor==null){ return null; } + try { + List sqlFieldMappings =parse(processor.getSqlFieldMapping()); + return groovy(parameter.getCode(),parameter.getValueType(),processor.getSqlDatasourceName(),processor.getSql(),sqlFieldMappings); + }catch(Exception e) { + throw new RuntimeException("There was a Error when generate " + parameter.getName()+ "'s SqlFieldMapping groovy source code.", e); + } + } + + public String groovy(Indicator indicator,SqlIndicatorProcessor processor) throws Exception{ + if(indicator==null || processor==null){ return null; } + try { + List sqlFieldMappings =parse(processor.getSqlFieldMapping()); + return groovy(indicator.getCode(),indicator.getValueType(),processor.getSqlDatasourceName(),processor.getSql(),sqlFieldMappings); + }catch(Exception e) { + throw new RuntimeException("There was a Error when generate " + indicator.getName()+ "'s SqlFieldMapping groovy source code.", e); + } + } + + private String groovy(String code, String valueType,String sqlDatasourceName,String sql,List sqlFieldMappings){ + if(!StringUtils.hasText(sql) || !CollectionUtil.hasElements(sqlFieldMappings)){ + return null; + } + StringBuilder sb =new StringBuilder(); + if(StringUtils.hasText(sqlDatasourceName)){ + sb.append(StringUtil.format("javax.sql.DataSource ds =io.sc.engine.rule.client.spring.util.EngineSpringApplicationContextUtil.getDataSource('${0}');",sqlDatasourceName)).append("\n"); + }else{ + sb.append("javax.sql.DataSource ds =io.sc.engine.rule.client.spring.util.EngineSpringApplicationContextUtil.getDefaultDataSource();").append("\n"); + } + sb.append(StringUtil.format("String sql =${0};", GroovyExpressionReplacer.groovy(sql,String.class.getName()))).append("\n"); + sb.append("ESql.withInstance(ds){ db->").append("\n"); + sb.append("\t").append("db.query(sql) { rs ->").append("\n"); + sb.append("\t\t").append("if (rs.next()) {").append("\n"); + for(SqlFieldMapping sqlFieldMapping : sqlFieldMappings) { + sb.append("\t\t\t") + .append(ExpressionReplacer.groovy(IdReplacer.fieldName(sqlFieldMapping.parameter), null)) + .append(" =") + .append("rs.getObject(\"").append(sqlFieldMapping.getField()).append("\");").append("\n"); + } + sb.append("\t\t}").append("\n"); + sb.append("\t}").append("\n"); + sb.append("}").append("\n"); + return sb.toString(); + } + + public String getParameter() { + return parameter; + } + + public void setParameter(String parameter) { + this.parameter = parameter; + } + + public String getField() { + return field; + } + + public void setField(String field) { + this.field = field; + } +} diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/processor/Ternary.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/processor/Ternary.java new file mode 100644 index 00000000..673c154b --- /dev/null +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/processor/Ternary.java @@ -0,0 +1,43 @@ +package io.sc.engine.rule.core.code.generator.impl.processor; + +import io.sc.engine.rule.core.po.lib.Indicator; +import io.sc.engine.rule.core.po.lib.processor.TernaryIndicatorProcessor; +import io.sc.engine.rule.core.po.model.Parameter; +import io.sc.engine.rule.core.po.model.processor.TernaryParameterProcessor; +import io.sc.engine.rule.core.util.GroovyExpressionReplacer; +import io.sc.engine.rule.core.util.IdReplacer; +import org.springframework.util.StringUtils; + +public class Ternary { + public String groovy(Parameter parameter, TernaryParameterProcessor processor) throws Exception{ + if(parameter==null || processor==null){ return null; } + try { + return groovy(parameter.getCode(),parameter.getValueType(),processor.getTernaryCondition(),processor.getTernaryTrue(),processor.getTernaryFalse()); + }catch(Exception e) { + throw new RuntimeException("There was a Error when generate " + parameter.getName()+ "'s Ternary groovy source code.", e); + } + } + + public String groovy(Indicator indicator, TernaryIndicatorProcessor processor) throws Exception{ + if(indicator==null || processor==null){ return null; } + try{ + return groovy(indicator.getCode(),indicator.getValueType(),processor.getTernaryCondition(),processor.getTernaryTrue(),processor.getTernaryFalse()); + }catch(Exception e) { + throw new RuntimeException("There was a Error when generate " + indicator.getName()+ "'s Ternary groovy source code.", e); + } + } + + private String groovy(String code, String valueType,String condition,String trueExpression,String falseExpression) { + if(!StringUtils.hasText(condition) || !StringUtils.hasText(trueExpression) || !StringUtils.hasText(falseExpression)){ + return null; + } + StringBuilder sb =new StringBuilder(); + sb.append(GroovyExpressionReplacer.ARGUMENT_NAME).append(".").append(IdReplacer.fieldName(code)).append(" ="); + sb.append("(").append(GroovyExpressionReplacer.groovy(condition)).append(")?"); + sb.append("(").append(GroovyExpressionReplacer.groovy(trueExpression,valueType)).append(")"); + sb.append(" : "); + sb.append("(").append(GroovyExpressionReplacer.groovy(falseExpression,valueType)).append(")"); + sb.append(";\n"); + return sb.toString(); + } +} diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/processor/WhenThen.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/processor/WhenThen.java new file mode 100644 index 00000000..66374245 --- /dev/null +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/impl/processor/WhenThen.java @@ -0,0 +1,51 @@ +package io.sc.engine.rule.core.code.generator.impl.processor; + +import io.sc.engine.rule.core.po.lib.Indicator; +import io.sc.engine.rule.core.po.lib.processor.WhenThenIndicatorProcessor; +import io.sc.engine.rule.core.po.model.Parameter; +import io.sc.engine.rule.core.po.model.processor.WhenThenParameterProcessor; +import io.sc.engine.rule.core.util.GroovyExpressionReplacer; +import io.sc.engine.rule.core.util.IdReplacer; +import io.sc.platform.util.StringUtil; +import org.springframework.util.StringUtils; + +public class WhenThen { + public String groovy(Parameter parameter, WhenThenParameterProcessor processor) throws Exception{ + if(parameter==null || processor==null){ return null; } + try { + return groovy(parameter.getCode(),parameter.getValueType(),processor.getWhen(),processor.getThen(),processor.getIsWhenThenShorted()); + }catch(Exception e) { + throw new RuntimeException("There was a Error when generate " + parameter.getName()+ "'s Ternary groovy source code.", e); + } + } + + public String groovy(Indicator indicator, WhenThenIndicatorProcessor processor) throws Exception{ + if(indicator==null || processor==null){ return null; } + try{ + return groovy(indicator.getCode(),indicator.getValueType(),processor.getWhen(),processor.getThen(),processor.getIsWhenThenShorted()); + }catch(Exception e) { + throw new RuntimeException("There was a Error when generate " + indicator.getName()+ "'s Ternary groovy source code.", e); + } + } + + private String groovy(String code, String valueType,String when,String then,Boolean isShorted) { + if(!StringUtils.hasText(when) || !StringUtils.hasText(then)){ + return null; + } + StringBuilder sb =new StringBuilder(); + sb.append("if (").append(GroovyExpressionReplacer.groovy(when)).append(") {").append("\n"); + sb.append("\t").append(GroovyExpressionReplacer.ARGUMENT_NAME).append(".").append(IdReplacer.fieldName(code)); + sb.append(" = "); + sb.append(GroovyExpressionReplacer.groovy(then,valueType)).append(";").append("\n"); + String debug =StringUtil.format("if(log.isDebugEnabled()){log.debug(\" WhenThen 运算结果 : {}\",${0});}",GroovyExpressionReplacer.ARGUMENT_NAME + "." + IdReplacer.fieldName(code)); + sb.append("\t").append(debug).append("\n"); + if(isShorted!=null && isShorted){ + sb.append("\t").append("if(log.isDebugEnabled()){log.debug(\" WhenThen 短路!!!\");}").append("\n"); + debug =StringUtil.format("if(log.isDebugEnabled()){log.debug(\" 参数结果值 : {}\",${0});}",GroovyExpressionReplacer.ARGUMENT_NAME + "." + IdReplacer.fieldName(code)); + sb.append("\t").append(debug).append("\n"); + sb.append("\t").append("return;").append("\n"); + } + sb.append("}").append("\n"); + return sb.toString(); + } +} diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/template/functions.tpl b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/template/functions.tpl deleted file mode 100644 index c7eb39ad..00000000 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/template/functions.tpl +++ /dev/null @@ -1,10 +0,0 @@ -/******************************************************** - * Functions - ********************************************************/ -#for(function : executeUnit.functions) - -/** - * #(function.description) - */ -#(function.body) -#end \ No newline at end of file diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/template/model.tpl b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/template/model.tpl deleted file mode 100644 index 8cebf93d..00000000 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/template/model.tpl +++ /dev/null @@ -1,28 +0,0 @@ -#define renderModel(model) - //模型(#(model.fullName)) - private static void #(methodName(model.code))(Executor executor,Argument argument){ - if(log.isDebugEnabled()){log.debug("开始调用模型: {}","#(model.fullName)");} - #if(!model.enable) - if(log.isDebugEnabled()){log.debug("开始调用模型: enable==false");} - #end - #if(model.executeMode.toString()=="DOWN_UP") - //模型的执行模式为:自下而上,首先执行子模型 - #for(subModel : model.children) - #(methodName(subModel.code))(executor,argument);//#(subModel.name) - #end - #end - - //处理模型的中间值和结果值 - #for(parameter : model.parameters) - #if(parameter.type.toString()=="INTERMEDIATE" || parameter.type.toString()=="OUT") - #(methodName(parameter.code))(executor,argument);//#(parameter.name),#(parameter.type) - #end - #end - } - - #for(subModel : model.children) -#@renderModel(subModel) - #end - - #@renderParameter(model) -#end \ No newline at end of file diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/template/package.tpl b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/template/package.tpl deleted file mode 100644 index 86f8d5e5..00000000 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/template/package.tpl +++ /dev/null @@ -1 +0,0 @@ -package #(packageName); \ No newline at end of file diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/template/parameter.tpl b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/template/parameter.tpl deleted file mode 100644 index f8b0fa4d..00000000 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/template/parameter.tpl +++ /dev/null @@ -1,37 +0,0 @@ -#define renderParameter(model) - #for(parameter : model.allParameters) - //参数处理器, #(parameter.name)(#(parameter.type)) - private static void #(methodName(parameter.code))(Executor executor,Argument argument) { - if(log.isDebugEnabled()){log.debug(" {}","#(parameter.name)(#(parameter.type))");} - #for(processor : parameter.processors) - #if(processor.enable) - #switch (processor.type.toString()) - #case ("ARITHMETIC") - #include("/io/sc/engine/rule/core/code/generator/template/processor/arithmetic.tpl") - #case ("CONDITION_RANGE") - #include("/io/sc/engine/rule/core/code/generator/template/processor/conditionRange.ftl") - #case ("DECISION_TABLE") - #case ("DECISION_TABLE_2C") - #case ("DECISION_TREE") - #case ("EXECUTION_FLOW") - #case ("GROOVY_SCRIPT") - #case ("HTTP_REQUEST") - #case ("MATH_FORMULA") - #case ("NUMBER_RANGE") - #include("/io/sc/engine/rule/core/code/generator/template/processor/numberRange.ftl") - #case ("OBJECT_PROPERTIES") - #case ("OPTION_VALUE") - #case ("PMML") - #case ("RULE") - #case ("SCORE_CARD") - #case ("SINGLE_RULE") - #case ("SQL") - #case ("TERNARY") - #case ("WHEN_THEN") - #end - #end - #end - if(log.isDebugEnabled()){log.debug(" 参数结果值 : {}",argument.#(fieldName(parameter.code)));} - } - #end -#end \ No newline at end of file diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/template/processor/DECISION_TABLE.ftl b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/template/processor/DECISION_TABLE.ftl deleted file mode 100644 index afd56363..00000000 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/template/processor/DECISION_TABLE.ftl +++ /dev/null @@ -1,4 +0,0 @@ - //决策表 - ${DecisionTable.generateGroovyCode(parameter,processor)} - if(log.isDebugEnabled()){log.debug(" 决策表运算结果 : {}",${ExpressionReplacer.ARGUMENT_NAME}.${CodeReplacer.fieldName(parameter.code)});} - \ No newline at end of file diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/template/processor/DECISION_TABLE_2C.ftl b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/template/processor/DECISION_TABLE_2C.ftl deleted file mode 100644 index ac42970b..00000000 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/template/processor/DECISION_TABLE_2C.ftl +++ /dev/null @@ -1,4 +0,0 @@ - //简单决策表 - ${DecisionTable2C.generateGroovyCode(parameter,processor)} - if(log.isDebugEnabled()){log.debug(" 简单决策表运算结果 : {}",${ExpressionReplacer.ARGUMENT_NAME}.${CodeReplacer.fieldName(parameter.code)});} - \ No newline at end of file diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/template/processor/DECISION_TREE.ftl b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/template/processor/DECISION_TREE.ftl deleted file mode 100644 index 6a873b76..00000000 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/template/processor/DECISION_TREE.ftl +++ /dev/null @@ -1,4 +0,0 @@ - //决策树(此处只是入口,真正的决策树计算逻辑在后面通过一系列方法完成) - ${ExpressionReplacer.ARGUMENT_NAME}.${CodeReplacer.fieldName(parameter.code)} =Tree_${CodeReplacer.fieldName(parameter.code)}_${DecisionTree.parse(processor.decisionTree).id}(executor,${ExpressionReplacer.ARGUMENT_NAME}); - if(log.isDebugEnabled()){log.debug(" 决策树运算结果 : {}",${ExpressionReplacer.ARGUMENT_NAME}.${CodeReplacer.fieldName(parameter.code)});} - \ No newline at end of file diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/template/processor/DECISION_TREE_FUNCTION.ftl b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/template/processor/DECISION_TREE_FUNCTION.ftl deleted file mode 100644 index cc765d79..00000000 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/template/processor/DECISION_TREE_FUNCTION.ftl +++ /dev/null @@ -1,13 +0,0 @@ - /*-------------------------------------------------------------------------------* - * 决策树函数 * - *-------------------------------------------------------------------------------*/ -<#list (model.getAllParameters())! as parameter><#-- 循环将每个参数处理生成一个方法 --> - <#if ("INTERMEDIATE"==parameter.type || "OUT"==parameter.type)> - <#list (parameter.processors)! as processor> - <#if "DECISION_TREE"==processor.type> - //${parameter.name}(${parameter.type}) -${DecisionTree.generateGroovyCode(parameter,processor)} - - - - \ No newline at end of file diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/template/processor/EXECUTION_FLOW_FUNCTION.ftl b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/template/processor/EXECUTION_FLOW_FUNCTION.ftl deleted file mode 100644 index 70cbd867..00000000 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/template/processor/EXECUTION_FLOW_FUNCTION.ftl +++ /dev/null @@ -1,13 +0,0 @@ - /*-------------------------------------------------------------------------------* - * 执行流函数 * - *-------------------------------------------------------------------------------*/ -<#list (model.getAllParameters())! as parameter><#-- 循环将每个参数处理生成一个方法 --> - <#if ("INTERMEDIATE"==parameter.type || "OUT"==parameter.type)> - <#list (parameter.processors)! as processor> - <#if "EXECUTION_FLOW"==processor.type> - //${parameter.name}(${parameter.type}) -${ExecutionFlow.generateGroovyCode(parameter,processor)} - - - - \ No newline at end of file diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/template/processor/GROOVY_SCRIPT.ftl b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/template/processor/GROOVY_SCRIPT.ftl deleted file mode 100644 index 62637aa0..00000000 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/template/processor/GROOVY_SCRIPT.ftl +++ /dev/null @@ -1,3 +0,0 @@ -<#if processor.groovyScript??> -${ExpressionReplacer.groovy(processor.groovyScript,null)} - diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/template/processor/MATH_FORMULA.ftl b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/template/processor/MATH_FORMULA.ftl deleted file mode 100644 index 2cd23cee..00000000 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/template/processor/MATH_FORMULA.ftl +++ /dev/null @@ -1,4 +0,0 @@ - //数学公式 - ${ExpressionReplacer.ARGUMENT_NAME}.${CodeReplacer.fieldName(parameter.code)} =${MathFormula.generateGroovyCode(parameter,processor)}; - if(log.isDebugEnabled()){log.debug(" 数学公式运算结果 : {}",${ExpressionReplacer.ARGUMENT_NAME}.${CodeReplacer.fieldName(parameter.code)});} - \ No newline at end of file diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/template/processor/OBJECT_PROPERTIES.ftl b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/template/processor/OBJECT_PROPERTIES.ftl deleted file mode 100644 index fa4ef3cc..00000000 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/template/processor/OBJECT_PROPERTIES.ftl +++ /dev/null @@ -1,4 +0,0 @@ - //对象属性函数 - ${ObjectProperty.generateGroovyCode(parameter,processor)} - if(log.isDebugEnabled()){log.debug(" 对象属性函数运算结果 : {}",${ExpressionReplacer.ARGUMENT_NAME}.${CodeReplacer.fieldName(parameter.code)});} - \ No newline at end of file diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/template/processor/OPTION_VALUE.ftl b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/template/processor/OPTION_VALUE.ftl deleted file mode 100644 index 15e866e2..00000000 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/template/processor/OPTION_VALUE.ftl +++ /dev/null @@ -1,34 +0,0 @@ - //选项值运算 -<#assign optionParameter=model.getParameterByOptionParameterCode(processor.optionCode)> -<#if optionParameter??> - if(${ExpressionReplacer.ARGUMENT_NAME}.${CodeReplacer.fieldName(optionParameter.code)}!=null){ - <#list model.getParameterOptionsByOptionParameterCode(processor.optionCode) as option> - <#if option_index==0> - <#if optionParameter.valueType=='java.lang.String'> - if(${ExpressionReplacer.ARGUMENT_NAME}.${CodeReplacer.fieldName(optionParameter.code)}=="""${option.inputValue}"""){ - <#else> - if(${ExpressionReplacer.ARGUMENT_NAME}.${CodeReplacer.fieldName(optionParameter.code)}==${option.inputValue}){ - - <#else> - <#if optionParameter.valueType=='java.lang.String'> - }else if(${ExpressionReplacer.ARGUMENT_NAME}.${CodeReplacer.fieldName(optionParameter.code)}=="""${option.inputValue}"""){ - <#else> - }else if(${ExpressionReplacer.ARGUMENT_NAME}.${CodeReplacer.fieldName(optionParameter.code)}==${option.inputValue}){ - - - <#if parameter.valueType=='java.lang.String'> - ${ExpressionReplacer.ARGUMENT_NAME}.${CodeReplacer.fieldName(parameter.code)} ="""${option.value}"""; - if(log.isDebugEnabled()){log.debug(" 选项运算结果 : {}",${ExpressionReplacer.ARGUMENT_NAME}.${CodeReplacer.fieldName(parameter.code)});} - <#else> - ${ExpressionReplacer.ARGUMENT_NAME}.${CodeReplacer.fieldName(parameter.code)} =${option.value}; - if(log.isDebugEnabled()){log.debug(" 选项运算结果 : {}",${ExpressionReplacer.ARGUMENT_NAME}.${CodeReplacer.fieldName(parameter.code)});} - - - }else{ - if(log.isDebugEnabled()){log.debug(" !!!未匹配到选项列表,选项运算结果 : {}",${ExpressionReplacer.ARGUMENT_NAME}.${CodeReplacer.fieldName(parameter.code)});} - } - }else{ - if(log.isDebugEnabled()){log.debug(" !!!未提供选项输入值,选项运算结果 : {}",${ExpressionReplacer.ARGUMENT_NAME}.${CodeReplacer.fieldName(parameter.code)});} - } - - \ No newline at end of file diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/template/processor/PMML.ftl b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/template/processor/PMML.ftl deleted file mode 100644 index f60f6669..00000000 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/template/processor/PMML.ftl +++ /dev/null @@ -1,3 +0,0 @@ -<#if processor.pmml??> - arg.${CodeReplacer.fieldName(parameter.code)} =JpmmlEvaluator.evaluate('${parameter.id}_${processor.id}','''${processor.pmml}''',arg.toMap()); - diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/template/processor/SQL.ftl b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/template/processor/SQL.ftl deleted file mode 100644 index f454710e..00000000 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/template/processor/SQL.ftl +++ /dev/null @@ -1,17 +0,0 @@ - //SQL 运算 -<#if processor.sqlDatasourceName??> - javax.sql.DataSource ds =io.sc.engine.rule.client.spring.util.EngineSpringApplicationContextUtil.getDataSource('${processor.sqlDatasourceName}'); -<#else> - javax.sql.DataSource ds =io.sc.engine.rule.client.spring.util.EngineSpringApplicationContextUtil.getDefaultDataSource(); - - String sql =${ExpressionReplacer.groovy("\n"+processor.sql,"java.lang.String")}; -<#if processor.sql??> - ESql.withInstance(ds){ db-> - db.query(sql) { rs -> - if (rs.next()) { -${SqlFieldMapping.generateGroovyCode(parameter,processor)} - } - } - } - - \ No newline at end of file diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/template/processor/TERNARY.ftl b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/template/processor/TERNARY.ftl deleted file mode 100644 index 1e46ea04..00000000 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/template/processor/TERNARY.ftl +++ /dev/null @@ -1,4 +0,0 @@ - //三元运算 - ${ExpressionReplacer.ARGUMENT_NAME}.${CodeReplacer.fieldName(parameter.code)} =(${ExpressionReplacer.groovy(processor.ternaryCondition,null)}) ? (${ExpressionReplacer.groovy(processor.ternaryTrue,parameter.valueType)}) : (${ExpressionReplacer.groovy(processor.ternaryFalse,parameter.valueType)}); - if(log.isDebugEnabled()){log.debug(" 三元运算结果 : {}",${ExpressionReplacer.ARGUMENT_NAME}.${CodeReplacer.fieldName(parameter.code)});} - \ No newline at end of file diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/template/processor/arithmetic.tpl b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/template/processor/arithmetic.tpl deleted file mode 100644 index 0e6b9041..00000000 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/template/processor/arithmetic.tpl +++ /dev/null @@ -1,4 +0,0 @@ - - //算数运算 - argument.#(fieldName(parameter.code)) =#(groovy(processor.arithmetic,parameter.valueType));//#(parameter.type), #(parameter.name) - if(log.isDebugEnabled()){log.debug(" 算数运算结果 : {}",argument.#(fieldName(parameter.code)));} \ No newline at end of file diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/template/processor/conditionRange.ftl b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/template/processor/conditionRange.ftl deleted file mode 100644 index b38e8b7b..00000000 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/template/processor/conditionRange.ftl +++ /dev/null @@ -1,3 +0,0 @@ - //条件分段函数 - #(io.sc.engine.rule.core.code.impl.support.processor.ConditionRange::generateGroovyCode(parameter,processor)) - if(log.isDebugEnabled()){log.debug(" 条件分段函数运算结果 : {}",argument.#(fieldName(parameter.code)));} diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/template/processor/numberRange.ftl b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/template/processor/numberRange.ftl deleted file mode 100644 index 88492a98..00000000 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/template/processor/numberRange.ftl +++ /dev/null @@ -1,4 +0,0 @@ - //数值分段函数 - #(io.sc.engine.rule.core.code.impl.support.processor.NumberRange::generateGroovyCode(parameter,processor)) - if(log.isDebugEnabled()){log.debug(" 数值分段函数运算结果 : {}",argument.#(fieldName(parameter.code)));} - \ No newline at end of file diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/template/resource.tpl b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/template/resource.tpl deleted file mode 100644 index 90b50672..00000000 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/template/resource.tpl +++ /dev/null @@ -1,118 +0,0 @@ -#include("package.tpl") - -#include("import.tpl") - -#include("functions.tpl") - -#set(resource = executeUnit.resource) -#set(libs =executeUnit.libs) -#set(model = resource.model) - -/******************************************************** - * Execute Unit - ********************************************************/ -/** - * type: #(executeUnit.type) - * code: #(resource.code), - * name: #(resource.name), - * version: #(resource.version) - */ -class #(className(resource.code,resource.version)) { - private static final Logger log =LoggerFactory.getLogger(#(className(resource.code,resource.version)).class); - - /** - * 执行方法(Map作为输入参数,该 Map 封装了调用模型的参数) - * @param map 输入参数封装器 - * @return 执行结果 - */ - public static ResourceResult execute(Map map) throws Exception{ - return execute(map["executor"],map["subModelCode"],map["argument"]); - } - - /** - * 执行方法 - * @param executor 执行器对象 - * @param subModelCode 子模型代码 - * @param data 输入参数 - * @return 执行结果 - */ - public static ResourceResult execute(Executor executor,String subModelCode,Object data) throws Exception{ - if(log.isDebugEnabled()){log.debug("开始执行: #(resource.name)");} - if(data instanceof Map){ - if(log.isDebugEnabled()){log.debug("显示输入参数(Map)=================================================\n{}",ObjectMapperUtil.json().writeValueAsString(data));} - }else if(data instanceof String){ - if(log.isDebugEnabled()){log.debug("显示输入参数(Json字符串)=================================================\n{}",data);} - } - - //初始化指标库 - #for(lib : libs) - if(log.isDebugEnabled()){log.debug("初始化指标库 : #(lib.name)_V#(lib.version)");} - - #(className(lib.code,lib.version)) #(varName(lib.code,lib.version)) =new #(className)(); - #(className(lib.code,lib.version)).convertArgument(data); - #end - - //初始化模型参数 - if(log.isDebugEnabled()){log.debug("从 {} 初始化模型参数","java.lang.String"==data.class?"Json":"Map");} - Argument argument =Argument.convertArgument(data); - - //输入参数合法性检查 - ValidateResult validateResult =new ValidateResult(); - - //输入参数合法性检查(指标库) - #for(lib : libs) - if(log.isDebugEnabled()){log.debug("开始检查输入参数数据合法性(指标库: #(lib.name)_V#(lib.version))");} - #(varName(lib.code,lib.version)).validate(validateResult); - if(validateResult.hasError()){ - if(log.isDebugEnabled()){log.debug("\t检查结果: 失败!");} - ResourceResult result =new ResourceResult(); - result.setValidateResult(validateResult); - return result; - } - if(log.isDebugEnabled()){log.debug("\t检查结果: 成功!");} - #end - - //输入参数合法性检查(模型) - if(log.isDebugEnabled()){log.debug("开始检查模型输入参数数据合法性");} - argument.validate(validateResult); - if(validateResult.hasError()){ - if(log.isDebugEnabled()){log.debug("\t检查结果: 失败!");} - ResourceResult result =new ResourceResult(); - result.setValidateResult(validateResult); - return result; - } - if(log.isDebugEnabled()){log.debug("\t检查结果: 成功!");} - - //执行指标库 - #for(lib : executeUnit.getLibs()) - if(log.isDebugEnabled()){log.debug("开始执行指标库: #(lib.name)_V#(lib.version)");} - #(varName(lib.code,lib.version)).execute(); - - #end - - //合并指标库指标 - if(log.isDebugEnabled()){log.debug("开始合并指标库指标");} - Map indicatorLibs =new HashMap(); - #for(lib : executeUnit.getLibs()) - indicatorLibs.put("#(varName(lib.code,lib.version))",#(varName(lib.code,lib.version))); - #end - argument.mergeParameterValueFromIndicatorLib(indicatorLibs); - if(log.isDebugEnabled()){log.debug("显示合并后输入参数:\n{}",ObjectMapperUtil.json().writeValueAsString(argument));} - - //执行模型 - if(subModelCode){ - subModelCode =CodeReplacer.methodName(subModelCode); - "${subModelCode}"(executor,argument);//调用子模型 - }else{ - #(methodName(model.code))(executor,argument);//调用顶级模型(#(model.name)) - } - - //返回结果 - ResourceResult result =argument.toResult(); - if(log.isDebugEnabled()){log.debug("模型调用成功,返回结果:\n{}",ObjectMapperUtil.json().writeValueAsString(result));} - return result; - } - - #include("parameter.tpl") - #include("model.tpl") - #@renderModel(model) diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/GroovySourceCodeGenerator.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/GroovySourceCodeGenerator.java deleted file mode 100644 index cf88be77..00000000 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/GroovySourceCodeGenerator.java +++ /dev/null @@ -1,128 +0,0 @@ -package io.sc.engine.rule.core.code.impl; - -import java.io.StringWriter; -import java.util.HashMap; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -import io.sc.engine.rule.core.code.CodeGenerator; -import io.sc.engine.rule.core.code.SourceCode; -import io.sc.engine.rule.core.code.impl.support.ResourceWrapper; -import io.sc.engine.rule.core.code.impl.support.ResourceWrapper4Lib; -import io.sc.engine.rule.core.code.impl.support.ResourceWrapper4Resource; -import io.sc.engine.rule.core.enums.ResourceType; -import io.sc.engine.rule.core.po.lib.Lib; -import io.sc.engine.rule.core.po.resource.ModelResource; -import io.sc.engine.rule.core.po.resource.Resource; - -import freemarker.cache.ClassTemplateLoader; -import freemarker.ext.beans.BeansWrapper; -import freemarker.ext.beans.BeansWrapperBuilder; -import freemarker.template.Configuration; -import freemarker.template.Template; -import freemarker.template.TemplateExceptionHandler; -import freemarker.template.TemplateHashModel; - -public class GroovySourceCodeGenerator implements CodeGenerator{ - private static final String PACKAGE_NAME ="io.sc.engine.rule.core.code.generated"; - private Map cache =new ConcurrentHashMap(); - - @Override - public SourceCode generateSourceCodeById(String resourceId, ResourceWrapper wrapper) throws Exception { - if(wrapper!=null) { - return _generateSourceCode(wrapper); - } - return null; - } - - @Override - public SourceCode generateSourceCodeByCode(String resourceCode, Integer version, ResourceWrapper wrapper) throws Exception { - if(wrapper!=null) { - if(version==null) { //未指定版本,不缓存 - return _generateSourceCode(wrapper); - }else { //指定了版本,缓存 - String key =getCacheKey(resourceCode,version); - SourceCode sourceCode =cache.get(key); - if(sourceCode==null) { - sourceCode =_generateSourceCode(wrapper); - cache.put(key, sourceCode); - return sourceCode; - }else { - return sourceCode; - } - } - } - return null; - } - - private SourceCode _generateSourceCode(ResourceWrapper wrapper) throws Exception{ - Configuration cfg = new Configuration(Configuration.VERSION_2_3_32); - cfg.setTemplateLoader(new ClassTemplateLoader(GroovySourceCodeGenerator.class,"/io/sc/engine/rule/core/code/template/groovy")); - cfg.setDefaultEncoding("UTF-8"); - cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER); - cfg.setLogTemplateExceptions(false); - cfg.setWrapUncheckedExceptions(true); - - Map root = new HashMap(); - - String wrapperCode =null; - if("RESOURCE".equals(wrapper.getType())){ - ResourceWrapper4Resource _wrapper =(ResourceWrapper4Resource)wrapper; - Resource resource =_wrapper.getResource(); - wrapperCode =resource.getCode(); - if(ResourceType.MODEL.equals(resource.getType())) { - ModelResource modelResource =(ModelResource)resource; - modelResource.getModel().buildFullName(); - } - }else if("LIB".equals(wrapper.getType())) { - ResourceWrapper4Lib _wrapper =(ResourceWrapper4Lib)wrapper; - Lib lib =_wrapper.getLib(); - wrapperCode =lib.getCode(); - } - - root.put("$wrapper", wrapper); - - root.put("CodeReplacer", getStaticMethod("io.sc.engine.rule.core.util.CodeReplacer")); - root.put("ExpressionReplacer", getStaticMethod("io.sc.engine.rule.core.util.ExpressionReplacer")); - root.put("ValueType", getStaticMethod("io.sc.engine.rule.core.enums.ValueType")); - - root.put("ObjectProperty", getStaticMethod("io.sc.engine.rule.core.code.impl.support.processor.ObjectProperty")); - root.put("MathFormula", getStaticMethod("io.sc.engine.rule.core.code.impl.support.processor.MathFormula")); - root.put("ConditionRange", getStaticMethod("io.sc.engine.rule.core.code.impl.support.processor.ConditionRange")); - root.put("NumberRange", getStaticMethod("io.sc.engine.rule.core.code.impl.support.processor.NumberRange")); - root.put("DecisionTable2C", getStaticMethod("io.sc.engine.rule.core.code.impl.support.processor.DecisionTable2C")); - root.put("DecisionTable", getStaticMethod("io.sc.engine.rule.core.code.impl.support.processor.DecisionTable")); - root.put("DecisionTree", getStaticMethod("io.sc.engine.rule.core.code.impl.support.processor.DecisionTree")); - root.put("ExecutionFlow", getStaticMethod("io.sc.engine.rule.core.code.impl.support.processor.ExecutionFlow")); - root.put("Option", getStaticMethod("io.sc.engine.rule.core.code.impl.support.processor.Option")); - root.put("Rule", getStaticMethod("io.sc.engine.rule.core.code.impl.support.processor.Rule")); - root.put("SingleRule", getStaticMethod("io.sc.engine.rule.core.code.impl.support.processor.SingleRule")); - root.put("SqlFieldMapping", getStaticMethod("io.sc.engine.rule.core.code.impl.support.processor.SqlFieldMapping")); - - root.put("LibUtil", getStaticMethod("io.sc.engine.rule.core.code.impl.support.lib.LibUtil")); - - - Template template =cfg.getTemplate("groovy.ftl"); - StringWriter out =new StringWriter(); - template.process(root, out); - out.close(); - return new SourceCode(PACKAGE_NAME,wrapperCode,out.toString()); - } - - private TemplateHashModel getStaticMethod(String className) throws Exception{ - BeansWrapper wrapper =new BeansWrapperBuilder(Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS).build(); - TemplateHashModel staticModels = wrapper.getStaticModels(); - return (TemplateHashModel)staticModels.get(className); - } - - private String getCacheKey(String code,Integer version) { - String result =""; - if(code!=null && !"".equals(code.trim())) { - result +=code; - } - if(version!=null) { - result +="_" + version; - } - return result; - } -} diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/JavaSourceCodeGenerator.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/JavaSourceCodeGenerator.java deleted file mode 100644 index 869dfde9..00000000 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/JavaSourceCodeGenerator.java +++ /dev/null @@ -1,24 +0,0 @@ -package io.sc.engine.rule.core.code.impl; - -import io.sc.engine.rule.core.code.SourceCode; -import io.sc.engine.rule.core.code.SourceCodeGenerator; -import io.sc.engine.rule.core.code.generator.ExecuteUnit4LibGenerator; -import io.sc.engine.rule.core.code.generator.ExecuteUnit4ResourceGenerator; -import io.sc.engine.rule.core.code.generator.ExecuteUnitGenerator; -import io.sc.engine.rule.core.code.impl.support.ExecuteUnit; -import io.sc.engine.rule.core.code.impl.support.ExecuteUnit4Lib; -import io.sc.engine.rule.core.code.impl.support.ExecuteUnit4Resource; - -public class JavaSourceCodeGenerator implements SourceCodeGenerator { - @Override - public SourceCode generateSourceCode(ExecuteUnit executeUnit) throws Exception { - if(executeUnit instanceof ExecuteUnit4Resource){ - ExecuteUnitGenerator generator =new ExecuteUnit4ResourceGenerator((ExecuteUnit4Resource)executeUnit); - return generator.generateSourceCode(); - }else if(executeUnit instanceof ExecuteUnit4Lib){ - ExecuteUnitGenerator generator =new ExecuteUnit4LibGenerator((ExecuteUnit4Lib)executeUnit); - return generator.generateSourceCode(); - } - return null; - } -} diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/ResourceWrapper.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/ResourceWrapper.java deleted file mode 100644 index 8af5b091..00000000 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/ResourceWrapper.java +++ /dev/null @@ -1,40 +0,0 @@ -package io.sc.engine.rule.core.code.impl.support; - -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonSubTypes; -import com.fasterxml.jackson.annotation.JsonTypeInfo; -import io.sc.engine.rule.core.po.function.Function; - -import java.util.List; - - -@JsonIgnoreProperties(ignoreUnknown=true) -@JsonTypeInfo(use=JsonTypeInfo.Id.NAME, include=JsonTypeInfo.As.PROPERTY, property="type",defaultImpl=ResourceWrapper4Resource.class) -@JsonSubTypes({ - @JsonSubTypes.Type(value=ResourceWrapper4Resource.class), - @JsonSubTypes.Type(value=ResourceWrapper4Lib.class) -}) -public abstract class ResourceWrapper { - protected boolean isExecuteTestCase; - protected List functions; - - public boolean getIsExecuteTestCase() { - return isExecuteTestCase; - } - - public void setIsExecuteTestCase(boolean isExecuteTestCase) { - this.isExecuteTestCase = isExecuteTestCase; - } - - public List getFunctions() { - return functions; - } - - public void setFunctions(List functions) { - this.functions = functions; - } - - @JsonIgnore - public abstract String getType(); -} diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/ResourceWrapper4Lib.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/ResourceWrapper4Lib.java deleted file mode 100644 index 4c974502..00000000 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/ResourceWrapper4Lib.java +++ /dev/null @@ -1,43 +0,0 @@ -package io.sc.engine.rule.core.code.impl.support; - -import java.util.List; - -import io.sc.engine.rule.core.po.dictionary.Dictionary; -import io.sc.engine.rule.core.po.lib.Lib; - -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonTypeName; - -@JsonTypeName("LIB") -@JsonIgnoreProperties(ignoreUnknown=true) -public class ResourceWrapper4Lib extends ResourceWrapper{ - private List dictionaries; - private Lib lib; - - - @Override - @JsonIgnore - public String getType() { - return "LIB"; - } - - - public List getDictionaries() { - return dictionaries; - } - - - public void setDictionaries(List dictionaries) { - this.dictionaries = dictionaries; - } - - - public Lib getLib() { - return lib; - } - - public void setLib(Lib lib) { - this.lib = lib; - } -} diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/ResourceWrapper4Resource.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/ResourceWrapper4Resource.java deleted file mode 100644 index 7dc1ae72..00000000 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/ResourceWrapper4Resource.java +++ /dev/null @@ -1,52 +0,0 @@ -package io.sc.engine.rule.core.code.impl.support; - -import java.util.List; - -import io.sc.engine.rule.core.po.dictionary.Dictionary; -import io.sc.engine.rule.core.po.lib.Lib; -import io.sc.engine.rule.core.po.resource.Resource; - -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonTypeName; - - -@JsonTypeName("RESOURCE") -@JsonIgnoreProperties(ignoreUnknown=true) -public class ResourceWrapper4Resource extends ResourceWrapper{ - private Resource resource; - private List dictionaries; - private List libs; - - - @Override - @JsonIgnore - public String getType() { - return "RESOURCE"; - } - - public Resource getResource() { - return resource; - } - - public void setResource(Resource resource) { - this.resource = resource; - } - - public List getDictionaries() { - return dictionaries; - } - - public void setDictionaries(List dictionaries) { - this.dictionaries = dictionaries; - } - - public List getLibs() { - return libs; - } - - public void setLibs(List libs) { - this.libs = libs; - } - -} diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/lib/LibUtil.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/lib/LibUtil.java deleted file mode 100644 index 08af1f38..00000000 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/lib/LibUtil.java +++ /dev/null @@ -1,54 +0,0 @@ -package io.sc.engine.rule.core.code.impl.support.lib; - -import java.util.List; - -import io.sc.engine.rule.core.po.lib.Indicator; -import io.sc.engine.rule.core.po.lib.IndicatorLib; -import io.sc.engine.rule.core.po.lib.Lib; - -/** - * 库辅助类 - * @author wangshaoping - * - */ -public class LibUtil { - /** - * 查找指标 - * @param libs 库列表 - * @param libCode 被查找的指标所属库代码 - * @param libVersion 被查找的指标所属库版本 - * @param indicatorCode 被查找的指标代码 - * @return 指标对象 - */ - public static Indicator findIndicator(List libs,String libCode,Integer libVersion,String indicatorCode) { - if(libs==null || libs.size()==0) { - return null; - } - if(libCode==null || "".equals(libCode.trim())) { - return null; - } - if(libVersion==null) { - return null; - } - if(indicatorCode==null || "".equals(indicatorCode.trim())) { - return null; - } - - for(Lib lib : libs) { - if(lib instanceof IndicatorLib) { - IndicatorLib indicatorLib =(IndicatorLib)lib; - if(libCode.equals(indicatorLib.getCode()) && libVersion.equals(indicatorLib.getVersion())) { - List indicators =indicatorLib.getIndicators(); - if(indicators!=null && indicators.size()>0) { - for(Indicator indicator : indicators) { - if(indicatorCode.equals(indicator.getCode())) { - return indicator; - } - } - } - } - } - } - return null; - } -} diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/parameter/ParameterGroovyCodeContributionItem.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/parameter/ParameterGroovyCodeContributionItem.java deleted file mode 100644 index 44319944..00000000 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/parameter/ParameterGroovyCodeContributionItem.java +++ /dev/null @@ -1,9 +0,0 @@ -package io.sc.engine.rule.core.code.impl.support.parameter; - -import io.sc.engine.rule.core.code.impl.support.ResourceWrapper; - -public interface ParameterGroovyCodeContributionItem { - public String forArgumentField(ResourceWrapper wrapper); - public String forConvertArgumentFromMap(ResourceWrapper wrapper,String targetVarName); - public String forConvertArgumentFromJson(ResourceWrapper wrapper,String targetVarName); -} diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/processor/ConditionRange.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/processor/ConditionRange.java deleted file mode 100644 index 84ae81fc..00000000 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/processor/ConditionRange.java +++ /dev/null @@ -1,125 +0,0 @@ -package io.sc.engine.rule.core.code.impl.support.processor; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.core.type.TypeReference; -import io.sc.engine.rule.core.po.lib.Indicator; -import io.sc.engine.rule.core.po.lib.processor.ConditionRangeIndicatorProcessor; -import io.sc.engine.rule.core.po.model.Parameter; -import io.sc.engine.rule.core.po.model.processor.ConditionRangeParameterProcessor; -import io.sc.engine.rule.core.util.CodeReplacer; -import io.sc.engine.rule.core.util.ExpressionReplacer; -import io.sc.platform.util.ObjectMapperUtil; - -import java.util.ArrayList; -import java.util.List; - -@JsonIgnoreProperties(ignoreUnknown=true) -public class ConditionRange { - private String condition; - private String value; - - public static List parse(String json) throws Exception{ - return ObjectMapperUtil.json().readValue(json, new TypeReference>(){}); - } - - public static String generateGroovyCode(Indicator indicator, ConditionRangeIndicatorProcessor processor) throws Exception{ - if(indicator==null || processor==null){ - return null; - } - try { - List conditionRanges =parse(processor.getConditionRange()); - List _conditionRanges =new ArrayList(); - - //移除没有填写条件的条件范围 - if(conditionRanges!=null && conditionRanges.size()>0) { - for(ConditionRange conditionRange : conditionRanges) { - if(conditionRange.getCondition()!=null && !"".equals(conditionRange.getCondition().trim())) { - _conditionRanges.add(conditionRange); - } - } - } - - if(_conditionRanges!=null && _conditionRanges.size()>0) { - StringBuilder sb =new StringBuilder(); - int size =_conditionRanges.size(); - for(int i=0;i conditionRanges =parse(processor.getConditionRange()); - List _conditionRanges =new ArrayList(); - - //移除没有填写条件的条件范围 - if(conditionRanges!=null && conditionRanges.size()>0) { - for(ConditionRange conditionRange : conditionRanges) { - if(conditionRange.getCondition()!=null && !"".equals(conditionRange.getCondition().trim())) { - _conditionRanges.add(conditionRange); - } - } - } - - if(_conditionRanges!=null && _conditionRanges.size()>0) { - StringBuilder sb =new StringBuilder(); - int size =_conditionRanges.size(); - for(int i=0;i> parse(String json) throws Exception{ - return ObjectMapperUtil.json().readValue(json, new TypeReference>>(){}); - } - - public static String generateGroovyCode(Parameter parameter,DecisionTableParameterProcessor processor) throws Exception{ - if(parameter==null || processor==null){ - return null; - } - - try { - List> decisionTables =parse(processor.getDecisionTable()); - if(decisionTables!=null && decisionTables.size()>0) { - StringBuilder sb =new StringBuilder(); - int conditionRowCount =getConditionRowCount(decisionTables); - int resultRowCount =getResultRowCount(decisionTables); - int colCount =getColCount(decisionTables); - sb.append("if (1==2){").append("\n"); - sb.append("\t\t}"); - for(int j=1;j> decisionTables) { - if(decisionTables!=null && decisionTables.size()>0) { - Map row =decisionTables.get(0); - if(row!=null && row.size()>0) { - int index =0; - while(row.containsKey("C"+index)) { - index++; - } - return index; - } - } - return 0; - } - - private static int getConditionRowCount(List> decisionTables) { - if(decisionTables!=null && decisionTables.size()>0) { - int index =0; - while("condition".equalsIgnoreCase((String)decisionTables.get(index).get("type"))) { - index++; - } - return index; - } - return 0; - } - - private static int getResultRowCount(List> decisionTables) { - if(decisionTables!=null && decisionTables.size()>0) { - int index =0; - for(Map map : decisionTables) { - if("result".equalsIgnoreCase((String)map.get("type"))) { - index++; - } - } - return index; - } - return 0; - } -} diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/processor/DecisionTable2C.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/processor/DecisionTable2C.java deleted file mode 100644 index 30244e8b..00000000 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/processor/DecisionTable2C.java +++ /dev/null @@ -1,66 +0,0 @@ -package io.sc.engine.rule.core.code.impl.support.processor; - -import com.fasterxml.jackson.core.type.TypeReference; -import io.sc.engine.rule.core.po.model.Parameter; -import io.sc.engine.rule.core.po.model.processor.DecisionTable2CParameterProcessor; -import io.sc.engine.rule.core.util.CodeReplacer; -import io.sc.engine.rule.core.util.ExpressionReplacer; -import io.sc.platform.util.ObjectMapperUtil; - -import java.util.List; -import java.util.Map; - -public class DecisionTable2C { - public static List> parse(String json) throws Exception{ - return ObjectMapperUtil.json().readValue(json, new TypeReference>>(){}); - } - - public static String generateGroovyCode(Parameter parameter,DecisionTable2CParameterProcessor processor) throws Exception{ - if(parameter==null || processor==null){ - return null; - } - - try { - List> decisionTable2Cs =parse(processor.getDecisionTable2C()); - if(decisionTable2Cs!=null && decisionTable2Cs.size()>0) { - StringBuilder sb =new StringBuilder(); - int rowCount =decisionTable2Cs.size(); - int colCount =getColCount(decisionTable2Cs); - sb.append("if (1==2){").append("\n"); - sb.append("\t\t}"); - for(int i=1;i> decisionTable2Cs) { - if(decisionTable2Cs!=null && decisionTable2Cs.size()>0) { - Map row =decisionTable2Cs.get(0); - if(row!=null && row.size()>0) { - int index =0; - while(row.containsKey("C"+index)) { - index++; - } - return index; - } - } - return 0; - } -} diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/processor/NumberRange.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/processor/NumberRange.java deleted file mode 100644 index 848b6214..00000000 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/processor/NumberRange.java +++ /dev/null @@ -1,187 +0,0 @@ -package io.sc.engine.rule.core.code.impl.support.processor; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.core.type.TypeReference; -import io.sc.engine.rule.core.po.lib.Indicator; -import io.sc.engine.rule.core.po.lib.processor.NumberRangeIndicatorProcessor; -import io.sc.engine.rule.core.po.model.Parameter; -import io.sc.engine.rule.core.po.model.processor.NumberRangeParameterProcessor; -import io.sc.engine.rule.core.util.CodeReplacer; -import io.sc.engine.rule.core.util.ExpressionReplacer; -import io.sc.platform.util.ObjectMapperUtil; - -import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.List; - -@JsonIgnoreProperties(ignoreUnknown=true) -public class NumberRange { - private Boolean minIncluded; - private BigDecimal min; - private BigDecimal max; - private Boolean maxIncluded; - private String value; - - public static List parse(String json) throws Exception{ - return ObjectMapperUtil.json().readValue(json, new TypeReference>(){}); - } - - public static String generateGroovyCode(Parameter parameter,NumberRangeParameterProcessor processor) throws Exception{ - if(parameter==null || processor==null){ - return null; - } - try { - List numberRanges =parse(processor.getNumberRange()); - List _numberRanges =new ArrayList(); - - //移除空行 - if(numberRanges!=null && numberRanges.size()>0) { - for(NumberRange numberRange : numberRanges) { - if(numberRange.min!=null || numberRange.max!=null || numberRange.value!=null) { - _numberRanges.add(numberRange); - } - } - } - - String parameterName =CodeReplacer.fieldName(parameter.getCode()); - String var =processor.getNumberRangeVar(); - String valueType =parameter.getValueType(); - if(_numberRanges!=null && _numberRanges.size()>0) { - if(var==null || "".equals(var.trim())) { - var =ExpressionReplacer.ARGUMENT_NAME + "." + parameterName; - } - StringBuilder sb =new StringBuilder(); - int size =_numberRanges.size(); - for(int i=0;i=").append(numberRange.min); - }else { - sb.append(ExpressionReplacer.groovy(var, null)).append(">").append(numberRange.min); - } - } - if(numberRange.min!=null && numberRange.max!=null) { - sb.append(" && "); - } - if(numberRange.max!=null) { - if(numberRange.maxIncluded!=null && numberRange.maxIncluded) { - sb.append(ExpressionReplacer.groovy(var, null)).append("<=").append(numberRange.max); - }else { - sb.append(ExpressionReplacer.groovy(var, null)).append("<").append(numberRange.max); - } - } - sb.append(")").append("{").append("\n"); - sb.append("\t\t\t").append(ExpressionReplacer.ARGUMENT_NAME).append(".").append(parameterName).append(" =").append(ExpressionReplacer.groovy(numberRange.value, valueType)).append(";\n"); - sb.append("\t\t}"); - } - return sb.toString(); - } - }catch(Exception e) { - throw new RuntimeException("There was a Error when generate " + parameter.getName()+ "'s NumberRange groovy source code.", e); - } - return null; - } - - public static String generateGroovyCode(Indicator indicator,NumberRangeIndicatorProcessor processor) throws Exception{ - if(indicator==null || processor==null){ - return null; - } - try { - List numberRanges =parse(processor.getNumberRange()); - List _numberRanges =new ArrayList(); - - //移除空行 - if(numberRanges!=null && numberRanges.size()>0) { - for(NumberRange numberRange : numberRanges) { - if(numberRange.min!=null || numberRange.max!=null || numberRange.value!=null) { - _numberRanges.add(numberRange); - } - } - } - - String parameterName =CodeReplacer.fieldName(indicator.getCode()); - String var =processor.getNumberRangeVar(); - String valueType =indicator.getValueType(); - if(_numberRanges!=null && _numberRanges.size()>0) { - if(var==null || "".equals(var.trim())) { - var =ExpressionReplacer.ARGUMENT_NAME + "." + parameterName; - } - StringBuilder sb =new StringBuilder(); - int size =_numberRanges.size(); - for(int i=0;i=").append(numberRange.min); - }else { - sb.append(ExpressionReplacer.groovy(var, null)).append(">").append(numberRange.min); - } - } - if(numberRange.min!=null && numberRange.max!=null) { - sb.append(" && "); - } - if(numberRange.max!=null) { - if(numberRange.maxIncluded!=null && numberRange.maxIncluded) { - sb.append(ExpressionReplacer.groovy(var, null)).append("<=").append(numberRange.max); - }else { - sb.append(ExpressionReplacer.groovy(var, null)).append("<").append(numberRange.max); - } - } - sb.append(")").append("{").append("\n"); - sb.append("\t\t\t").append(ExpressionReplacer.ARGUMENT_NAME).append(".").append(parameterName).append(" =").append(ExpressionReplacer.groovy(numberRange.value, valueType)).append(";\n"); - sb.append("\t\t}"); - } - return sb.toString(); - } - }catch(Exception e) { - throw new RuntimeException("There was a Error when generate " + indicator.getName()+ "'s NumberRange groovy source code.", e); - } - return null; - } - - public Boolean getMinIncluded() { - return minIncluded; - } - public void setMinIncluded(Boolean minIncluded) { - this.minIncluded = minIncluded; - } - public BigDecimal getMin() { - return min; - } - public void setMin(BigDecimal min) { - this.min = min; - } - public BigDecimal getMax() { - return max; - } - public void setMax(BigDecimal max) { - this.max = max; - } - public Boolean getMaxIncluded() { - return maxIncluded; - } - public void setMaxIncluded(Boolean maxIncluded) { - this.maxIncluded = maxIncluded; - } - public String getValue() { - return value; - } - public void setValue(String value) { - this.value = value; - } -} diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/processor/ObjectProperty.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/processor/ObjectProperty.java deleted file mode 100644 index c2a59ad5..00000000 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/processor/ObjectProperty.java +++ /dev/null @@ -1,146 +0,0 @@ -package io.sc.engine.rule.core.code.impl.support.processor; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.core.type.TypeReference; -import io.sc.engine.rule.core.po.lib.Indicator; -import io.sc.engine.rule.core.po.lib.processor.ObjectPropertiesIndicatorProcessor; -import io.sc.engine.rule.core.po.model.Parameter; -import io.sc.engine.rule.core.po.model.processor.ObjectPropertiesParameterProcessor; -import io.sc.engine.rule.core.util.CodeReplacer; -import io.sc.engine.rule.core.util.ExpressionReplacer; -import io.sc.platform.util.ObjectMapperUtil; -import org.springframework.util.StringUtils; - -import java.util.ArrayList; -import java.util.List; - -@JsonIgnoreProperties(ignoreUnknown=true) -public class ObjectProperty { - private String code; - private String name; - private String expression; - - public static List parse(String json) throws Exception { - return ObjectMapperUtil.json().readValue(json, new TypeReference>(){}); - } - - public static String generateGroovyCode(Indicator indicator, ObjectPropertiesIndicatorProcessor processor) throws Exception{ - if(indicator==null || processor==null){ - return null; - } - try { - String objectCondition =processor.getObjectCondition(); - List objectProperties =parse(processor.getObjectProperties()); - List _objectProperties =new ArrayList<>(); - - //移除没有填写表达式的对象属性 - if(objectProperties!=null && objectProperties.size()>0) { - for(ObjectProperty objectProperty : objectProperties) { - if(StringUtils.hasText(objectProperty.getExpression())){ - _objectProperties.add(objectProperty); - } - } - } - - if(_objectProperties!=null && !_objectProperties.isEmpty()) { - StringBuilder sb =new StringBuilder(); - if(StringUtils.hasText(objectCondition)){ - sb.append("if (").append(ExpressionReplacer.groovy(objectCondition, null)).append("){").append("\n"); - } - sb.append("\t\t\tif (").append(ExpressionReplacer.ARGUMENT_NAME).append(".").append(CodeReplacer.fieldName(indicator.getCode())).append("==null) {").append("\n"); - sb.append("\t\t\t\t").append(ExpressionReplacer.ARGUMENT_NAME).append(".").append(CodeReplacer.fieldName(indicator.getCode())).append(" =new ").append(indicator.getValueType()).append("_V").append(indicator.getValueTypeVersion()).append("();").append("\n"); - sb.append("\t\t\t}").append("\n"); - int size =_objectProperties.size(); - for(int i=0;i objectProperties =parse(processor.getObjectProperties()); - List _objectProperties =new ArrayList<>(); - - //移除没有填写表达式的对象属性 - if(objectProperties!=null && objectProperties.size()>0) { - for(ObjectProperty objectProperty : objectProperties) { - if(StringUtils.hasText(objectProperty.getExpression())){ - _objectProperties.add(objectProperty); - } - } - } - - if(_objectProperties!=null && !_objectProperties.isEmpty()) { - StringBuilder sb =new StringBuilder(); - if(StringUtils.hasText(objectCondition)){ - sb.append("if (").append(ExpressionReplacer.groovy(objectCondition, null)).append("){").append("\n"); - } - int size =_objectProperties.size(); - for(int i=0;i parse(String json) throws Exception{ - if(json!=null && !"".equals(json.trim())) { - return ObjectMapperUtil.json().readValue(json, new TypeReference>(){}); - } - return null; - } - - public String getUuid() { - return uuid; - } - public void setUuid(String uuid) { - this.uuid = uuid; - } - public String getValue() { - return value; - } - public void setValue(String value) { - this.value = value; - } - public String getTitle() { - return title; - } - public void setTitle(String title) { - this.title = title; - } - public String getDescription() { - return description; - } - public void setDescription(String description) { - this.description = description; - } - public String getScore() { - return score; - } - public void setScore(String score) { - this.score = score; - } -} diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/processor/Rule.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/processor/Rule.java deleted file mode 100644 index 29e54011..00000000 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/processor/Rule.java +++ /dev/null @@ -1,145 +0,0 @@ -package io.sc.engine.rule.core.code.impl.support.processor; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.core.type.TypeReference; -import io.sc.engine.rule.core.po.model.Parameter; -import io.sc.engine.rule.core.po.model.processor.RuleParameterProcessor; -import io.sc.engine.rule.core.util.CodeReplacer; -import io.sc.engine.rule.core.util.ExpressionReplacer; -import io.sc.platform.util.ObjectMapperUtil; - -import java.util.ArrayList; -import java.util.List; - -@JsonIgnoreProperties(ignoreUnknown=true) -public class Rule { - private String category; - private Integer level; - private String code; - private String name; - private String condition; - private String value; - private String message; - - public static List parse(String json) throws Exception{ - return ObjectMapperUtil.json().readValue(json, new TypeReference>(){}); - } - - public static String generateGroovyCode(Parameter parameter,RuleParameterProcessor processor) throws Exception{ - if(parameter==null || processor==null){ - return null; - } - try { - List rules =parse(processor.getRule()); - List _rules =new ArrayList(); - - //移除没有填写条件的条件范围 - if(rules!=null && rules.size()>0) { - for(Rule rule : rules) { - if(rule.getCondition()!=null && !"".equals(rule.getCondition().trim())) { - _rules.add(rule); - } - } - } - - if(_rules!=null && _rules.size()>0) { - StringBuilder sb =new StringBuilder(); - int size =_rules.size(); - for(int i=0;i parse(String json) throws Exception{ - return ObjectMapperUtil.json().readValue(json, new TypeReference>(){}); - } - - public static String generateGroovyCode(Parameter parameter,SingleRuleParameterProcessor processor) throws Exception{ - if(parameter==null || processor==null){ - return null; - } - try { - List rules =parse(processor.getSingleRule()); - List _rules =new ArrayList(); - - //移除没有填写条件的条件范围 - if(rules!=null && rules.size()>0) { - for(SingleRule rule : rules) { - if(rule.getCondition()!=null && !"".equals(rule.getCondition().trim())) { - _rules.add(rule); - } - } - } - - if(_rules!=null && _rules.size()>0) { - StringBuilder sb =new StringBuilder(); - sb.append("\t\tSingleRuleResult result =new SingleRuleResult();").append("\n"); - int size =_rules.size(); - for(int i=0;itemp.getLevel()){").append("\n"); - sb.append("\t\t\t\t").append("result =temp;").append("\n"); - sb.append("\t\t\t}").append("\n"); - sb.append("\t\t}\n"); - } - sb.append("\n"); - sb.append("\t\t").append(ExpressionReplacer.ARGUMENT_NAME).append(".").append(CodeReplacer.fieldName(parameter.getCode())).append(" =result;").append("\n"); - return sb.toString(); - } - }catch(Exception e) { - throw new RuntimeException("There was a Error when generate " + parameter.getName()+ "'s Single Rule groovy source code.", e); - } - return null; - } - - public Integer getLevel() { - return level; - } - - public void setLevel(Integer level) { - this.level = level; - } - - public String getCategory() { - return category; - } - - public void setCategory(String category) { - this.category = category; - } - - public String getCondition() { - return condition; - } - - public void setCondition(String condition) { - this.condition = condition; - } - - public String getValue() { - return value; - } - - public void setValue(String value) { - this.value = value; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } -} diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/processor/SqlFieldMapping.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/processor/SqlFieldMapping.java deleted file mode 100644 index cb7025e6..00000000 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/impl/support/processor/SqlFieldMapping.java +++ /dev/null @@ -1,81 +0,0 @@ -package io.sc.engine.rule.core.code.impl.support.processor; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.core.type.TypeReference; -import io.sc.engine.rule.core.po.lib.Indicator; -import io.sc.engine.rule.core.po.lib.processor.SqlIndicatorProcessor; -import io.sc.engine.rule.core.po.model.Parameter; -import io.sc.engine.rule.core.po.model.processor.SqlParameterProcessor; -import io.sc.engine.rule.core.util.CodeReplacer; -import io.sc.engine.rule.core.util.ExpressionReplacer; -import io.sc.platform.util.ObjectMapperUtil; - -import java.util.List; - -@JsonIgnoreProperties(ignoreUnknown=true) -public class SqlFieldMapping { - private String parameter; - private String field; - - public static List parse(String json) throws Exception{ - return ObjectMapperUtil.json().readValue(json, new TypeReference>(){}); - } - - public static String generateGroovyCode(Indicator indicator,SqlIndicatorProcessor processor) throws Exception{ - if(indicator==null || processor==null){ - return null; - } - try { - StringBuilder sb =new StringBuilder(); - List mappings =parse(processor.getSqlFieldMapping()); - if(mappings!=null && mappings.size()>0) { - for(SqlFieldMapping mapping : mappings) { - sb.append("\t\t\t\t\t") - .append(ExpressionReplacer.groovy(CodeReplacer.fieldName(mapping.parameter), null)) - .append(" =") - .append("rs.getObject(\"").append(mapping.getField()).append("\");"); - } - } - return sb.toString(); - }catch(Exception e) { - throw new RuntimeException("There was a Error when generate " + indicator.getName()+ "'s Rule groovy source code.", e); - } - } - - public static String generateGroovyCode(Parameter parameter,SqlParameterProcessor processor) throws Exception{ - if(parameter==null || processor==null){ - return null; - } - try { - StringBuilder sb =new StringBuilder(); - List mappings =parse(processor.getSqlFieldMapping()); - if(mappings!=null && mappings.size()>0) { - for(SqlFieldMapping mapping : mappings) { - sb.append("\t\t\t\t\t") - .append(ExpressionReplacer.groovy(CodeReplacer.fieldName(mapping.parameter), null)) - .append(" =") - .append("rs.getObject(\"").append(mapping.getField()).append("\");"); - } - } - return sb.toString(); - }catch(Exception e) { - throw new RuntimeException("There was a Error when generate " + parameter.getName()+ "'s Rule groovy source code.", e); - } - } - - public String getParameter() { - return parameter; - } - - public void setParameter(String parameter) { - this.parameter = parameter; - } - - public String getField() { - return field; - } - - public void setField(String field) { - this.field = field; - } -} diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/argument_render.tpl b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/argument_render.tpl new file mode 100644 index 00000000..61097356 --- /dev/null +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/argument_render.tpl @@ -0,0 +1,49 @@ +#define renderArgument(model) +@JsonIgnoreProperties(ignoreUnknown=true) +class Argument { + #(tabs(ParameterGenerator.generateFields(model.getAllParameters()),1)) + + public static Argument convertArgument(Map map){ + if(map!=null){ + Argument arg =new Argument(); + #(tabs(ParameterGenerator.generateConvertorFromMap(model.getAllParameters()),3)) + return arg; + } + return null; + } + + public static Argument convertArgument(String json){ + if(json!=null && !"".equals(json.trim())){ + Argument arg =ObjectMapperUtil.json().readValue(json, Argument.class); + #(tabs(ParameterGenerator.generateConvertorFromJson(model.getAllParameters()),3)) + return arg; + } + } + + public void validate(ValidateResult result) { + #(tabs(ParameterGenerator.generateValidator(model.getAllParameters()),2)) + } + + public void mergeParameterValueFromIndicatorLib(Map libs){ + + } + + public ResourceResult toResult(){ + ResourceResult result =new ResourceResult(); + #(tabs(ParameterGenerator.generateToResult(model.getAllParameters()),2)) + return result; + } + + public Map toMap(){ + Map map =new HashMap(); + #(tabs(ParameterGenerator.generateToMap(model.getAllParameters()),2)) + return map; + } + + public void mergeResult(ResourceResult result){ + if(result!=null){ + #(tabs(ParameterGenerator.generateMergeResult(model.getAllParameters()),3)) + } + } +} +#end \ No newline at end of file diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/dictionary_render.tpl b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/dictionary_render.tpl new file mode 100644 index 00000000..bd3b307b --- /dev/null +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/dictionary_render.tpl @@ -0,0 +1,13 @@ +#define renderDictionary(dictionary) +/** + * #(dictionary.name) + */ +@JsonIgnoreProperties(ignoreUnknown=true) +class #(className(dictionary.code,dictionary.version)) { + #(tabs(DictionaryGenerator.generateFields(dictionary.getFields()),1)) + + public void init(){ + #(tabs(DictionaryGenerator.generateInits(dictionary.getFields()),2)) + } +} +#end \ No newline at end of file diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/functions_render.tpl b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/functions_render.tpl new file mode 100644 index 00000000..1dd78ce0 --- /dev/null +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/functions_render.tpl @@ -0,0 +1,6 @@ +#define renderFunction(function) +/** + * #(function.description) + */ +#(function.body) +#end \ No newline at end of file diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/impl/lib.tpl b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/impl/lib.tpl new file mode 100644 index 00000000..309ea899 --- /dev/null +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/impl/lib.tpl @@ -0,0 +1,171 @@ +#set(dictionaries =executeUnit.dictionaries) +#set(lib =executeUnit.lib) + +####################################### +### 模版函数 +####################################### +#include("/io/sc/engine/rule/core/code/template/package_render.tpl") +#include("/io/sc/engine/rule/core/code/template/import_render.tpl") +#include("/io/sc/engine/rule/core/code/template/functions_render.tpl") +#include("/io/sc/engine/rule/core/code/template/dictionary_render.tpl") +#include("/io/sc/engine/rule/core/code/template/lib_render.tpl") + +#@renderPackage(packageName) + +#@renderImport() + +//****************************************************************************** +// 自定义函数 +//****************************************************************************** +#for(function : executeUnit.functions) +#@renderFunction(function) +#end + +//****************************************************************************** +// 执行主体类 +//****************************************************************************** +/** + * type: #(executeUnit.type) + * code: #(lib.code), + * name: #(lib.name), + * version: #(lib.version) + */ +class #(className(lib.code,lib.version)) { + private static final Logger log =LoggerFactory.getLogger(#(className(lib.code,lib.version)).class); + + /** + * 执行方法(Map作为输入参数,该 Map 封装了调用模型的参数) + * @param map 输入参数封装器 + * @return 执行结果 + */ + public static ResourceResult execute(Map map) throws Exception { + return execute(map["executor"],map["subModelCode"],map["argument"]); + } + + public static ResourceResult execute(Executor executor,String subModelCode,Object data) throws Exception { + if(log.isDebugEnabled()){log.debug("开始执行指标库 : #(className(lib.code,lib.version))");} + if(data instanceof Map){ + if(log.isDebugEnabled()){log.debug("显示输入参数(Map)=================================================\n{}",ObjectMapperUtil.json().writeValueAsString(data));} + }else if(data instanceof String){ + if(log.isDebugEnabled()){log.debug("显示输入参数(Json字符串)=================================================\n{}",data);} + } + if(log.isDebugEnabled()){log.debug("初始化指标库参数");} + Argument arg =Argument.convertArgument(data); + + if(log.isDebugEnabled()){log.debug("开始检查指标库输入参数数据合法性");} + ValidateResult validateResult =new ValidateResult(); + arg.validate(validateResult); + if(validateResult.hasError()){ + if(log.isDebugEnabled()){log.debug("\t检查结果: 失败!");} + ResourceResult result =new ResourceResult(); + result.setValidateResult(validateResult); + return result; + } + if(log.isDebugEnabled()){log.debug("\t检查结果: 成功!");} + + #for(indicator : lib.indicators) + #if("INDICATOR"==indicator.type.toString()) + #(methodName(indicator.code))(executor,arg);//#(indicator.name),#(indicator.type) + #end + #end + + //返回结果 + ResourceResult result =arg.toResult(); + if(log.isDebugEnabled()){log.debug("指标库调用成功,返回结果:\n{}",ObjectMapperUtil.json().writeValueAsString(result));} + return result; + } + +#for(indicator : lib.indicators) + #if("INDICATOR"==indicator.type.toString()) + #set(parameter=indicator) + + public static void #(methodName(indicator.code))(Executor executor,Argument arg) { + #for(processor : indicator.processors) + if(log.isDebugEnabled()){log.debug(" {}","#(parameter.name)(#(parameter.type))");} + #switch (processor.type.toString()) + #case ("ARITHMETIC") + //算数运算 + #include("/io/sc/engine/rule/core/code/template/processor/arithmetic.tpl") + if(log.isDebugEnabled()){log.debug(" 算数运算结果 : {}",arg.#(fieldName(parameter.code)));} + #case ("CONDITION_RANGE") + //条件分段函数 + #include("/io/sc/engine/rule/core/code/template/processor/conditionRange.tpl") + if(log.isDebugEnabled()){log.debug(" 条件分段函数运算结果 : {}",arg.#(fieldName(parameter.code)));} + #case ("GROOVY_SCRIPT") + //Groovy 脚本 + #include("/io/sc/engine/rule/core/code/template/processor/groovy_script.tpl") + #case ("HTTP_REQUEST") + //Http 请求 + #include("/io/sc/engine/rule/core/code/template/processor/http_request.tpl") + #case ("MATH_FORMULA") + //数学公式 + #include("/io/sc/engine/rule/core/code/template/processor/math_formula.tpl") + if(log.isDebugEnabled()){log.debug(" 数学公式运算结果 : {}",arg.#(fieldName(parameter.code)));} + #case ("NUMBER_RANGE") + //数值分段函数 + #include("/io/sc/engine/rule/core/code/template/processor/numberRange.tpl") + if(log.isDebugEnabled()){log.debug(" 数值分段函数运算结果 : {}",arg.#(fieldName(parameter.code)));} + #case ("OBJECT_PROPERTIES") + //对象属性赋值函数 + #include("/io/sc/engine/rule/core/code/template/processor/object_properties.tpl") + if(log.isDebugEnabled()){log.debug(" 对象属性函数运算结果 : {}",arg.#(fieldName(parameter.code)));} + #case ("SQL") + //SQL 运算 + #include("/io/sc/engine/rule/core/code/template/processor/sql.tpl") + #case ("TERNARY") + //三元运算 + #include("/io/sc/engine/rule/core/code/template/processor/ternary.tpl") + if(log.isDebugEnabled()){log.debug(" 三元运算结果 : {}",arg.#(fieldName(parameter.code)));} + #case ("WHEN_THEN") + //WhenThen 运算 + #include("/io/sc/engine/rule/core/code/template/processor/when_then.tpl") + if(log.isDebugEnabled()){log.debug(" WhenThen 运算结果 : {}",arg.#(fieldName(parameter.code)));} + #end + #end + } + #end +#end +} + +@JsonIgnoreProperties(ignoreUnknown=true) +class Argument { + #(tabs(IndicatorGenerator.generateFields(lib.indicators),1)) + public static Argument convertArgument(Map map){ + if(map!=null){ + Argument arg =new Argument(); + #(tabs(IndicatorGenerator.generateConvertorFromMap(lib.indicators),3)) + return arg; + } + return null; + } + + public static Argument convertArgument(String json){ + if(json!=null && !"".equals(json.trim())){ + Argument arg =ObjectMapperUtil.json().readValue(json, Argument.class); + #(tabs(IndicatorGenerator.generateConvertorFromJson(lib.indicators),3)) + return arg; + } + } + + public void validate(ValidateResult result) { + #(tabs(IndicatorGenerator.generateValidator(lib.indicators),2)) + } + + public ResourceResult toResult(){ + ResourceResult result =new ResourceResult(); + #(tabs(IndicatorGenerator.generateToResult(lib.indicators),2)) + return result; + } +} + +//****************************************************************************** +// 元数据定义类 +//****************************************************************************** +#for(dictionary : dictionaries) +#@renderDictionary(dictionary) +#end + +//****************************************************************************** +// 执行并返回结果 +//****************************************************************************** +#(className(lib.code,lib.version)).execute(INPUT_PARAMETER); \ No newline at end of file diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/impl/resource.tpl b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/impl/resource.tpl new file mode 100644 index 00000000..bac5220a --- /dev/null +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/impl/resource.tpl @@ -0,0 +1,158 @@ +#set(resource = executeUnit.resource) +#set(dictionaries =executeUnit.dictionaries) +#set(libs =executeUnit.libs) +#set(model = resource.model) + +####################################### +### 模版函数 +####################################### +#include("/io/sc/engine/rule/core/code/template/package_render.tpl") +#include("/io/sc/engine/rule/core/code/template/import_render.tpl") +#include("/io/sc/engine/rule/core/code/template/functions_render.tpl") +#include("/io/sc/engine/rule/core/code/template/parameter_render.tpl") +#include("/io/sc/engine/rule/core/code/template/model_render.tpl") +#include("/io/sc/engine/rule/core/code/template/argument_render.tpl") +#include("/io/sc/engine/rule/core/code/template/dictionary_render.tpl") +#include("/io/sc/engine/rule/core/code/template/lib_render.tpl") + +#@renderPackage(packageName) + +#@renderImport() + +//****************************************************************************** +// 自定义函数 +//****************************************************************************** +#for(function : executeUnit.functions) +#@renderFunction(function) +#end + +//****************************************************************************** +// 执行主体类 +//****************************************************************************** +/** + * type: #(executeUnit.type) + * code: #(resource.code), + * name: #(resource.name), + * version: #(resource.version) + */ +class #(className(resource.code,resource.version)) { + private static final Logger log =LoggerFactory.getLogger(#(className(resource.code,resource.version)).class); + + /** + * 执行方法(Map作为输入参数,该 Map 封装了调用模型的参数) + * @param map 输入参数封装器 + * @return 执行结果 + */ + public static ResourceResult execute(Map map) throws Exception{ + return execute(map["executor"],map["subModelCode"],map["arg"]); + } + + /** + * 执行方法 + * @param executor 执行器对象 + * @param subModelCode 子模型代码 + * @param data 输入参数 + * @return 执行结果 + */ + public static ResourceResult execute(Executor executor,String subModelCode,Object data) throws Exception{ + if(log.isDebugEnabled()){log.debug("开始执行: #(resource.name)");} + if(data instanceof Map){ + if(log.isDebugEnabled()){log.debug("显示输入参数(Map)=================================================\n{}",ObjectMapperUtil.json().writeValueAsString(data));} + }else if(data instanceof String){ + if(log.isDebugEnabled()){log.debug("显示输入参数(Json字符串)=================================================\n{}",data);} + } + + //初始化指标库 +#for(lib : libs) + if(log.isDebugEnabled()){log.debug("初始化指标库 : #(lib.name)_V#(lib.version)");} + + #(className(lib.code,lib.version)) #(varName(lib.code,lib.version)) =new #(className)(); + #(className(lib.code,lib.version)).convertArgument(data); +#end + + //初始化模型参数 + if(log.isDebugEnabled()){log.debug("从 {} 初始化模型参数","java.lang.String"==data.class?"Json":"Map");} + Argument arg =Argument.convertArgument(data); + + //输入参数合法性检查 + ValidateResult validateResult =new ValidateResult(); + + //输入参数合法性检查(指标库) +#for(lib : libs) + if(log.isDebugEnabled()){log.debug("开始检查输入参数数据合法性(指标库: #(lib.name)_V#(lib.version))");} + #(varName(lib.code,lib.version)).validate(validateResult); + if(validateResult.hasError()){ + if(log.isDebugEnabled()){log.debug("\t检查结果: 失败!");} + ResourceResult result =new ResourceResult(); + result.setValidateResult(validateResult); + return result; + } + if(log.isDebugEnabled()){log.debug("\t检查结果: 成功!");} +#end + + //输入参数合法性检查(模型) + if(log.isDebugEnabled()){log.debug("开始检查模型输入参数数据合法性");} + arg.validate(validateResult); + if(validateResult.hasError()){ + if(log.isDebugEnabled()){log.debug("\t检查结果: 失败!");} + ResourceResult result =new ResourceResult(); + result.setValidateResult(validateResult); + return result; + } + if(log.isDebugEnabled()){log.debug("\t检查结果: 成功!");} + + //执行指标库 +#for(lib : executeUnit.getLibs()) + if(log.isDebugEnabled()){log.debug("开始执行指标库: #(lib.name)_V#(lib.version)");} + #(varName(lib.code,lib.version)).execute(); +#end + + //合并指标库指标 + if(log.isDebugEnabled()){log.debug("开始合并指标库指标");} + Map indicatorLibs =new HashMap(); +#for(lib : executeUnit.getLibs()) + indicatorLibs.put("#(varName(lib.code,lib.version))",#(varName(lib.code,lib.version))); +#end + arg.mergeParameterValueFromIndicatorLib(indicatorLibs); + if(log.isDebugEnabled()){log.debug("显示合并后输入参数:\n{}",ObjectMapperUtil.json().writeValueAsString(arg));} + + //执行模型 + if(subModelCode){ + subModelCode =IdReplacer.methodName(subModelCode); + "${subModelCode}"(executor,arg);//调用子模型 + }else{ + #(methodName(model.code))(executor,arg);//调用顶级模型(#(model.name)) + } + + //返回结果 + ResourceResult result =arg.toResult(); + if(log.isDebugEnabled()){log.debug("模型调用成功,返回结果:\n{}",ObjectMapperUtil.json().writeValueAsString(result));} + return result; + } + + #@renderModel(model) +} + +//****************************************************************************** +// 模型参数定义类 +//****************************************************************************** +#@renderArgument(model) + +//****************************************************************************** +// 元数据定义类 +//****************************************************************************** +#for(dictionary : dictionaries) +#@renderDictionary(dictionary) +#end + +//****************************************************************************** +// 指标库定义类 +//****************************************************************************** +#for(lib : libs ) +#@renderLib(lib) +#end + +//****************************************************************************** +// 执行并返回结果 +//****************************************************************************** +#(className(resource.code,resource.version)).execute(INPUT_PARAMETER); \ No newline at end of file diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/template/import.tpl b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/import_render.tpl similarity index 83% rename from io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/template/import.tpl rename to io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/import_render.tpl index a3cc9970..8068450e 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/generator/template/import.tpl +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/import_render.tpl @@ -1,18 +1,19 @@ +#define renderImport() import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.core.type.TypeReference; import groovy.transform.Canonical; import io.sc.engine.rule.client.Executor; -import io.sc.engine.rule.core.classes.ResourceAbstract; -import io.sc.engine.rule.core.classes.RuleResult; -import io.sc.engine.rule.core.classes.SingleRuleResult; -import io.sc.engine.rule.core.code.impl.support.FieldValidator; -import io.sc.engine.rule.core.code.impl.support.ParameterResult; -import io.sc.engine.rule.core.code.impl.support.ResourceResult; -import io.sc.engine.rule.core.code.impl.support.ValidateResult; +import io.sc.engine.rule.core.ResourceAbstract; +import io.sc.engine.rule.core.RuleResult; +import io.sc.engine.rule.core.SingleRuleResult; +import io.sc.engine.rule.core.FieldValidator; +import io.sc.engine.rule.core.ParameterResult; +import io.sc.engine.rule.core.ResourceResult; +import io.sc.engine.rule.core.ValidateResult; import io.sc.engine.rule.core.enums.ParameterType; import io.sc.engine.rule.core.enums.RuntimeInputParameterType; import io.sc.engine.rule.core.function.JpmmlEvaluator; -import io.sc.engine.rule.core.util.CodeReplacer; +import io.sc.engine.rule.core.util.IdReplacer; import io.sc.engine.rule.core.util.ESql; import io.sc.platform.util.DateUtil; import io.sc.platform.util.ObjectMapperUtil; @@ -54,10 +55,10 @@ import static io.sc.engine.rule.core.function.StringFunction.lowerCase; import static io.sc.engine.rule.core.function.StringFunction.startsWith; import static io.sc.engine.rule.core.function.StringFunction.trim; import static io.sc.engine.rule.core.function.StringFunction.upperCase; -import static io.sc.engine.rule.core.util.NumberFormater.comma; -import static io.sc.engine.rule.core.util.NumberFormater.decimal; -import static io.sc.engine.rule.core.util.NumberFormater.money; -import static io.sc.engine.rule.core.util.NumberFormater.percent; +import static io.sc.platform.util.NumberUtil.comma; +import static io.sc.platform.util.NumberUtil.decimal; +import static io.sc.platform.util.NumberUtil.money; +import static io.sc.platform.util.NumberUtil.percent; import static java.lang.Math.E; import static java.lang.Math.IEEEremainder; import static java.lang.Math.PI; @@ -83,4 +84,5 @@ import static java.lang.Math.sqrt; import static java.lang.Math.tan; import static java.lang.Math.tanh; import static java.lang.Math.toDegrees; -import static java.lang.Math.toRadians; \ No newline at end of file +import static java.lang.Math.toRadians; +#end \ No newline at end of file diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/lib_render.tpl b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/lib_render.tpl new file mode 100644 index 00000000..4c0ead33 --- /dev/null +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/lib_render.tpl @@ -0,0 +1,3 @@ +#define renderLib(lib) + +#end diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/model_render.tpl b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/model_render.tpl new file mode 100644 index 00000000..bdb70d31 --- /dev/null +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/model_render.tpl @@ -0,0 +1,30 @@ +#define renderModel(model) + //#(model.fullName.contains("/")?"子":"主")模型(#(model.fullName)) + private static void #(methodName(model.code))(Executor executor,Argument arg){ + if(log.isDebugEnabled()){log.debug("开始调用模型: {}({})","#(model.fullName)","#(model.executeMode)");} + + #if(!model.enable) + if(log.isDebugEnabled()){log.debug("开始调用模型: enable==false");} + #end + #if(model.executeMode.toString()=="DOWN_UP") + //调用子模型 + #for(subModel : model.children) + #(methodName(subModel.code))(executor,arg);//#(subModel.name) + #end + #end + + //计算中间值和结果值 + #for(parameter : model.parameters) + #if(parameter.type.toString()=="INTERMEDIATE" || parameter.type.toString()=="OUT") + #(methodName(parameter.code))(executor,arg);//#(parameter.type), #(parameter.name) + #end + #end + } + + ### 递归调用生成子模式代码 + #for(subModel : model.children) + #@renderModel(subModel) + #end + + #@renderParameter(model) +#end diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/package_render.tpl b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/package_render.tpl new file mode 100644 index 00000000..c50ae80f --- /dev/null +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/package_render.tpl @@ -0,0 +1,3 @@ +#define renderPackage(packageName) +package #(packageName); +#end \ No newline at end of file diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/parameter_render.tpl b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/parameter_render.tpl new file mode 100644 index 00000000..18946681 --- /dev/null +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/parameter_render.tpl @@ -0,0 +1,106 @@ +#define renderParameter(model) +#for(parameter : model.allParameters) + #if("INTERMEDIATE"==parameter.type.toString() || "OUT"==parameter.type.toString()) + //参数处理器, #(parameter.name)(#(parameter.type)) + private static void #(methodName(parameter.code))(Executor executor,Argument arg) { + if(log.isDebugEnabled()){log.debug(" {}","#(parameter.name)(#(parameter.type))");} + #for(processor : parameter.processors) + #if(processor.enable) + #switch (processor.type.toString()) + #case ("ARITHMETIC") + //算数运算 + #include("/io/sc/engine/rule/core/code/template/processor/arithmetic.tpl") + if(log.isDebugEnabled()){log.debug(" 算数运算结果 : {}",arg.#(fieldName(parameter.code)));} + #case ("CONDITION_RANGE") + //条件分段函数 + #include("/io/sc/engine/rule/core/code/template/processor/conditionRange.tpl") + if(log.isDebugEnabled()){log.debug(" 条件分段函数运算结果 : {}",arg.#(fieldName(parameter.code)));} + #case ("DECISION_TABLE") + //决策表 + #include("/io/sc/engine/rule/core/code/template/processor/decision_table.tpl") + if(log.isDebugEnabled()){log.debug(" 决策表运算结果 : {}",arg.#(fieldName(parameter.code)));} + #case ("DECISION_TABLE_2C") + //简单决策表 + #include("/io/sc/engine/rule/core/code/template/processor/decision_table_2c.tpl") + if(log.isDebugEnabled()){log.debug(" 简单决策表运算结果 : {}",arg.#(fieldName(parameter.code)));} + #case ("DECISION_TREE") + //决策树(此处只是入口,真正的决策树计算逻辑在后面通过一系列方法完成) + #include("/io/sc/engine/rule/core/code/template/processor/decision_tree.tpl") + if(log.isDebugEnabled()){log.debug(" 决策树运算结果 : {}",,arg.#(fieldName(parameter.code)));} + #case ("EXECUTION_FLOW") + //执行流(此处只是入口,真正的执行流计算逻辑在后面通过一系列方法完成) + #include("/io/sc/engine/rule/core/code/template/processor/execution_flow.tpl") + if(log.isDebugEnabled()){log.debug(" 执行流运算结果 : {}",arg.#(fieldName(parameter.code)));} + #case ("GROOVY_SCRIPT") + //Groovy 脚本 + #include("/io/sc/engine/rule/core/code/template/processor/groovy_script.tpl") + #case ("HTTP_REQUEST") + //Http 请求 + #include("/io/sc/engine/rule/core/code/template/processor/http_request.tpl") + #case ("MATH_FORMULA") + //数学公式 + #include("/io/sc/engine/rule/core/code/template/processor/math_formula.tpl") + if(log.isDebugEnabled()){log.debug(" 数学公式运算结果 : {}",arg.#(fieldName(parameter.code)));} + #case ("NUMBER_RANGE") + //数值分段函数 + #include("/io/sc/engine/rule/core/code/template/processor/numberRange.tpl") + if(log.isDebugEnabled()){log.debug(" 数值分段函数运算结果 : {}",arg.#(fieldName(parameter.code)));} + #case ("OBJECT_PROPERTIES") + //对象属性赋值函数 + #include("/io/sc/engine/rule/core/code/template/processor/object_properties.tpl") + if(log.isDebugEnabled()){log.debug(" 对象属性函数运算结果 : {}",arg.#(fieldName(parameter.code)));} + #case ("OPTION_VALUE") + //选项值运算 + #include("/io/sc/engine/rule/core/code/template/processor/option_value.tpl") + if(log.isDebugEnabled()){log.debug(" 选项运算结果 : {}",arg.#(fieldName(parameter.code)));} + #case ("PMML") + //PMML + #include("/io/sc/engine/rule/core/code/template/processor/pmml.tpl") + #case ("RULE") + #case ("SCORE_CARD") + //评分卡 + #include("/io/sc/engine/rule/core/code/template/processor/score_card.tpl") + #case ("SINGLE_RULE") + #case ("SQL") + //SQL 运算 + #include("/io/sc/engine/rule/core/code/template/processor/sql.tpl") + #case ("TERNARY") + //三元运算 + #include("/io/sc/engine/rule/core/code/template/processor/ternary.tpl") + if(log.isDebugEnabled()){log.debug(" 三元运算结果 : {}",arg.#(fieldName(parameter.code)));} + #case ("WHEN_THEN") + //WhenThen 运算 + #include("/io/sc/engine/rule/core/code/template/processor/when_then.tpl") + if(log.isDebugEnabled()){log.debug(" WhenThen 运算结果 : {}",arg.#(fieldName(parameter.code)));} + #end + #end + #end + + if(log.isDebugEnabled()){log.debug(" 参数结果值 : {}",arg.#(fieldName(parameter.code)));} + } + +#end +#end + ### 决策树函数 + #for(parameter : model.allParameters) + #if("INTERMEDIATE"==parameter.type.toString() || "OUT"==parameter.type.toString()) + #for(processor : parameter.processors) + #if("DECISION_TREE"==processor.type.toString()) + //决策树函数: #(parameter.name)(#(parameter.type)) + #(DecisionTree.groovy(parameter,processor)) + #end + #end + #end + #end + ### 执行流函数 + #for(parameter : model.allParameters) + #if("INTERMEDIATE"==parameter.type.toString() || "OUT"==parameter.type.toString()) + #for(processor : parameter.processors) + #if("EXECUTION_FLOW"==processor.type.toString()) + //执行流函数: #(parameter.name)(#(parameter.type)) + #(ExecutionFlow.groovy(parameter,processor)) + #end + #end + #end + #end +#end \ No newline at end of file diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/processor/arithmetic.tpl b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/processor/arithmetic.tpl new file mode 100644 index 00000000..76ad3cbf --- /dev/null +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/processor/arithmetic.tpl @@ -0,0 +1 @@ +arg.#(fieldName(parameter.code)) =#(Arithmetic.groovy(parameter,processor)); \ No newline at end of file diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/processor/conditionRange.tpl b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/processor/conditionRange.tpl new file mode 100644 index 00000000..df3f6ba8 --- /dev/null +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/processor/conditionRange.tpl @@ -0,0 +1 @@ +#(tabs(ConditionRange.groovy(parameter,processor),2)) \ No newline at end of file diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/processor/decision_table.tpl b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/processor/decision_table.tpl new file mode 100644 index 00000000..0aac00c9 --- /dev/null +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/processor/decision_table.tpl @@ -0,0 +1 @@ +#(tabs(DecisionTable.groovy(parameter,processor,model.allParameters),2)) \ No newline at end of file diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/processor/decision_table_2c.tpl b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/processor/decision_table_2c.tpl new file mode 100644 index 00000000..eaec55ec --- /dev/null +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/processor/decision_table_2c.tpl @@ -0,0 +1 @@ +#(tabs(DecisionTable2C.groovy(parameter,processor),2)) \ No newline at end of file diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/processor/decision_tree.tpl b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/processor/decision_tree.tpl new file mode 100644 index 00000000..adc08687 --- /dev/null +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/processor/decision_tree.tpl @@ -0,0 +1 @@ +arg.#(fieldName(parameter.code)) =Tree_#(fieldName(parameter.code))_#(DecisionTree.parse(processor.decisionTree).id)(executor,arg); \ No newline at end of file diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/processor/execution_flow.tpl b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/processor/execution_flow.tpl new file mode 100644 index 00000000..c987cb11 --- /dev/null +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/processor/execution_flow.tpl @@ -0,0 +1 @@ +Flow_#(fieldName(parameter.code))_#(ExecutionFlow.parse(processor.executionFlow).id)(executor,arg); \ No newline at end of file diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/processor/groovy_script.tpl b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/processor/groovy_script.tpl new file mode 100644 index 00000000..7e3a0b40 --- /dev/null +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/processor/groovy_script.tpl @@ -0,0 +1 @@ +#(tabs(io.sc.engine.rule.core.util.GroovyExpressionReplacer::groovy(processor.groovyScript),2)) \ No newline at end of file diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/processor/http_request.tpl b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/processor/http_request.tpl new file mode 100644 index 00000000..e69de29b diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/processor/math_formula.tpl b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/processor/math_formula.tpl new file mode 100644 index 00000000..287307a4 --- /dev/null +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/processor/math_formula.tpl @@ -0,0 +1 @@ +arg.#(fieldName(parameter.code)) =#(MathFormula.groovy(parameter,processor)); \ No newline at end of file diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/processor/numberRange.tpl b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/processor/numberRange.tpl new file mode 100644 index 00000000..44e2df37 --- /dev/null +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/processor/numberRange.tpl @@ -0,0 +1 @@ +#(tabs(NumberRange.groovy(parameter,processor),2)) \ No newline at end of file diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/processor/object_properties.tpl b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/processor/object_properties.tpl new file mode 100644 index 00000000..5f5907f5 --- /dev/null +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/processor/object_properties.tpl @@ -0,0 +1 @@ +#(tabs(ObjectProperty.groovy(parameter,processor),2)) \ No newline at end of file diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/processor/option_value.tpl b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/processor/option_value.tpl new file mode 100644 index 00000000..fa0592b6 --- /dev/null +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/processor/option_value.tpl @@ -0,0 +1 @@ +#(tabs(OptionValue.groovy(parameter,processor,model),2)) \ No newline at end of file diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/processor/pmml.tpl b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/processor/pmml.tpl new file mode 100644 index 00000000..8a9ba03b --- /dev/null +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/processor/pmml.tpl @@ -0,0 +1,4 @@ +arg.#(fieldName(parameter.code)) =JpmmlEvaluator.evaluate( + '#(parameter.id)_#(processor.id)', + '''#(tabs(processor.pmml,3))''' + ,arg.toMap()); diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/processor/score_card.tpl b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/processor/score_card.tpl new file mode 100644 index 00000000..e69de29b diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/processor/sql.tpl b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/processor/sql.tpl new file mode 100644 index 00000000..784203e7 --- /dev/null +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/processor/sql.tpl @@ -0,0 +1 @@ +#(tabs(SqlFieldMapping.groovy(parameter,processor),2)) \ No newline at end of file diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/processor/ternary.tpl b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/processor/ternary.tpl new file mode 100644 index 00000000..d3ba932d --- /dev/null +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/processor/ternary.tpl @@ -0,0 +1 @@ +#(tabs(Ternary.groovy(parameter,processor),2)) \ No newline at end of file diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/processor/when_then.tpl b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/processor/when_then.tpl new file mode 100644 index 00000000..67c2fcad --- /dev/null +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/template/processor/when_then.tpl @@ -0,0 +1 @@ +#(tabs(WhenThen.groovy(parameter,processor),2)) \ No newline at end of file diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/convert/converter/DataTypeConversionService.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/convert/DataTypeConversionService.java similarity index 97% rename from io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/convert/converter/DataTypeConversionService.java rename to io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/convert/DataTypeConversionService.java index db7aafa6..51207098 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/convert/converter/DataTypeConversionService.java +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/convert/DataTypeConversionService.java @@ -1,4 +1,4 @@ -package io.sc.engine.rule.core.convert.converter; +package io.sc.engine.rule.core.convert; import org.springframework.core.convert.ConversionService; import org.springframework.core.convert.converter.ConverterRegistry; diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/enums/ProcessorOwnerType.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/enums/ProcessorOwnerType.java new file mode 100644 index 00000000..07596b0b --- /dev/null +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/enums/ProcessorOwnerType.java @@ -0,0 +1,9 @@ +package io.sc.engine.rule.core.enums; + +/** + * 处理器所有者类型 + */ +public enum ProcessorOwnerType { + PARAMETER, //模型参数 + INDICATOR; //指标 +} diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/math/MathType.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/math/MathType.java deleted file mode 100644 index 60a151f1..00000000 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/math/MathType.java +++ /dev/null @@ -1,330 +0,0 @@ -// -// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.2.8-b130911.1802 生成的 -// 请访问 http://java.sun.com/xml/jaxb -// 在重新编译源模式时, 对此文件的所有修改都将丢失。 -// 生成时间: 2024.07.16 时间 03:39:28 PM CST -// - - -package io.sc.engine.rule.core.math; - -import java.util.ArrayList; -import java.util.List; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlType; - - -/** - *

mathType complex type的 Java 类。 - * - *

以下模式片段指定包含在此类中的预期内容。 - * - *

- * <complexType name="mathType">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="mi" type="{http://www.w3.org/2001/XMLSchema}string" maxOccurs="unbounded" minOccurs="0"/>
- *         <element name="mn" type="{http://www.w3.org/2001/XMLSchema}string" maxOccurs="unbounded" minOccurs="0"/>
- *         <element name="mo" type="{http://www.w3.org/2001/XMLSchema}string" maxOccurs="unbounded" minOccurs="0"/>
- *         <element name="mspace" type="{http://www.w3.org/2001/XMLSchema}string" maxOccurs="unbounded" minOccurs="0"/>
- *         <element name="msqrt" type="{http://www.w3.org/2001/XMLSchema}string" maxOccurs="unbounded" minOccurs="0"/>
- *         <element name="mroot" type="{http://www.sc.io/engine/rule/core/math}mathType" maxOccurs="unbounded" minOccurs="0"/>
- *         <element name="mrow" type="{http://www.sc.io/engine/rule/core/math}mathType" maxOccurs="unbounded" minOccurs="0"/>
- *         <element name="msup" type="{http://www.sc.io/engine/rule/core/math}mathType" maxOccurs="unbounded" minOccurs="0"/>
- *         <element name="mfrac" type="{http://www.sc.io/engine/rule/core/math}mathType" maxOccurs="unbounded" minOccurs="0"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- * - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "mathType", propOrder = { - "mi", - "mn", - "mo", - "mspace", - "msqrt", - "mroot", - "mrow", - "msup", - "mfrac" -}) -public class MathType { - - protected List mi; - protected List mn; - protected List mo; - protected List mspace; - protected List msqrt; - protected List mroot; - protected List mrow; - protected List msup; - protected List mfrac; - - /** - * Gets the value of the mi property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the mi property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getMi().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link String } - * - * - */ - public List getMi() { - if (mi == null) { - mi = new ArrayList(); - } - return this.mi; - } - - /** - * Gets the value of the mn property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the mn property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getMn().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link String } - * - * - */ - public List getMn() { - if (mn == null) { - mn = new ArrayList(); - } - return this.mn; - } - - /** - * Gets the value of the mo property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the mo property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getMo().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link String } - * - * - */ - public List getMo() { - if (mo == null) { - mo = new ArrayList(); - } - return this.mo; - } - - /** - * Gets the value of the mspace property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the mspace property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getMspace().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link String } - * - * - */ - public List getMspace() { - if (mspace == null) { - mspace = new ArrayList(); - } - return this.mspace; - } - - /** - * Gets the value of the msqrt property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the msqrt property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getMsqrt().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link String } - * - * - */ - public List getMsqrt() { - if (msqrt == null) { - msqrt = new ArrayList(); - } - return this.msqrt; - } - - /** - * Gets the value of the mroot property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the mroot property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getMroot().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link MathType } - * - * - */ - public List getMroot() { - if (mroot == null) { - mroot = new ArrayList(); - } - return this.mroot; - } - - /** - * Gets the value of the mrow property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the mrow property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getMrow().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link MathType } - * - * - */ - public List getMrow() { - if (mrow == null) { - mrow = new ArrayList(); - } - return this.mrow; - } - - /** - * Gets the value of the msup property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the msup property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getMsup().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link MathType } - * - * - */ - public List getMsup() { - if (msup == null) { - msup = new ArrayList(); - } - return this.msup; - } - - /** - * Gets the value of the mfrac property. - * - *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the mfrac property. - * - *

- * For example, to add a new item, do as follows: - *

-     *    getMfrac().add(newItem);
-     * 
- * - * - *

- * Objects of the following type(s) are allowed in the list - * {@link MathType } - * - * - */ - public List getMfrac() { - if (mfrac == null) { - mfrac = new ArrayList(); - } - return this.mfrac; - } - -} diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/math/ObjectFactory.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/math/ObjectFactory.java deleted file mode 100644 index fffbd901..00000000 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/math/ObjectFactory.java +++ /dev/null @@ -1,60 +0,0 @@ -// -// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.2.8-b130911.1802 生成的 -// 请访问 http://java.sun.com/xml/jaxb -// 在重新编译源模式时, 对此文件的所有修改都将丢失。 -// 生成时间: 2024.07.16 时间 03:39:28 PM CST -// - - -package io.sc.engine.rule.core.math; - -import javax.xml.bind.JAXBElement; -import javax.xml.bind.annotation.XmlElementDecl; -import javax.xml.bind.annotation.XmlRegistry; -import javax.xml.namespace.QName; - - -/** - * This object contains factory methods for each - * Java content interface and Java element interface - * generated in the io.sc.engine.rule.core.math package. - *

An ObjectFactory allows you to programatically - * construct new instances of the Java representation - * for XML content. The Java representation of XML - * content can consist of schema derived interfaces - * and classes representing the binding of schema - * type definitions, element declarations and model - * groups. Factory methods for each of these are - * provided in this class. - * - */ -@XmlRegistry -public class ObjectFactory { - - private final static QName _Math_QNAME = new QName("http://www.sc.io/engine/rule/core/math", "math"); - - /** - * Create a new ObjectFactory that can be used to create new instances of schema derived classes for package: io.sc.engine.rule.core.math - * - */ - public ObjectFactory() { - } - - /** - * Create an instance of {@link MathType } - * - */ - public MathType createMathType() { - return new MathType(); - } - - /** - * Create an instance of {@link JAXBElement }{@code <}{@link MathType }{@code >}} - * - */ - @XmlElementDecl(namespace = "http://www.sc.io/engine/rule/core/math", name = "math") - public JAXBElement createMath(MathType value) { - return new JAXBElement(_Math_QNAME, MathType.class, null, value); - } - -} diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/math/package-info.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/math/package-info.java deleted file mode 100644 index ebb4bc9a..00000000 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/math/package-info.java +++ /dev/null @@ -1,9 +0,0 @@ -// -// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.2.8-b130911.1802 生成的 -// 请访问 http://java.sun.com/xml/jaxb -// 在重新编译源模式时, 对此文件的所有修改都将丢失。 -// 生成时间: 2024.07.16 时间 03:39:28 PM CST -// - -@javax.xml.bind.annotation.XmlSchema(namespace = "http://www.sc.io/engine/rule/core/math") -package io.sc.engine.rule.core.math; diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/dictionary/UserDefinedJavaClassField.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/dictionary/UserDefinedJavaClassField.java index 4364d5cb..2411f710 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/dictionary/UserDefinedJavaClassField.java +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/dictionary/UserDefinedJavaClassField.java @@ -15,6 +15,7 @@ public class UserDefinedJavaClassField { protected String defaultValue; //默认值 protected String valueCalculation; //值计算逻辑 protected Integer order; //排序 + protected Integer tab; //缩进 public String getId() { return id; @@ -88,4 +89,10 @@ public class UserDefinedJavaClassField { public void setOrder(Integer order) { this.order = order; } + public Integer getTab() { + return tab; + } + public void setTab(Integer tab) { + this.tab = tab; + } } diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/Indicator.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/Indicator.java index 3ac0bb2a..437ee85d 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/Indicator.java +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/Indicator.java @@ -1,21 +1,16 @@ package io.sc.engine.rule.core.po.lib; -import java.math.RoundingMode; -import java.util.ArrayList; -import java.util.List; - -import io.sc.engine.rule.core.code.impl.support.ResourceWrapper; -import io.sc.engine.rule.core.code.impl.support.parameter.ParameterGroovyCodeContributionItem; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonSubTypes; +import com.fasterxml.jackson.annotation.JsonTypeInfo; import io.sc.engine.rule.core.enums.IndicatorType; import io.sc.engine.rule.core.po.lib.indicator.IndicatorIndicator; import io.sc.engine.rule.core.po.lib.indicator.InterfaceIndicator; import io.sc.engine.rule.core.po.lib.processor.EmptyIndicatorProcessor; -import io.sc.engine.rule.core.util.CodeReplacer; -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.JsonSubTypes; -import com.fasterxml.jackson.annotation.JsonTypeInfo; -import io.sc.engine.rule.core.util.ValueTypeUtil; +import java.math.RoundingMode; +import java.util.ArrayList; +import java.util.List; /** * 指标 @@ -27,7 +22,7 @@ import io.sc.engine.rule.core.util.ValueTypeUtil; @JsonSubTypes.Type(value=InterfaceIndicator.class), //接口指标 @JsonSubTypes.Type(value=IndicatorIndicator.class) //计算指标 }) -public abstract class Indicator implements ParameterGroovyCodeContributionItem{ +public abstract class Indicator { protected String id; //ID,主键 protected String code; //代码 protected String name; //名称 @@ -44,81 +39,7 @@ public abstract class Indicator implements ParameterGroovyCodeContributionItem{ @JsonIgnore public abstract IndicatorType getType(); - - public String getValueTypeFullName() { - String parameterValueType =this.getValueType(); - if(ValueTypeUtil.isBase(parameterValueType)) { - return parameterValueType; - }else { - parameterValueType =parameterValueType + (this.getValueTypeVersion()==null?"":"_V" + this.getValueTypeVersion()); - } - return parameterValueType; - } - - @Override - public String forArgumentField(ResourceWrapper wrapper) { - StringBuilder sb =new StringBuilder(""); - String parameterCode =this.getCode(); - String parameterValueType =getValueTypeFullName(); - - if("String".equals(parameterValueType)) { - if(this.getDefaultValue()!=null) { - sb.append("String ").append(CodeReplacer.fieldName(parameterCode)).append(" =\"\"\"").append(this.getDefaultValue()).append("\"\"\"").append(";"); - }else { - sb.append("String ").append(CodeReplacer.fieldName(parameterCode)).append(";"); - } - sb.append("//").append(this.getName()); - }else { - if(this.getDefaultValue()!=null) { - sb.append(parameterValueType).append(" ").append(CodeReplacer.fieldName(parameterCode)).append(" =").append(this.getDefaultValue()).append(";"); - }else { - sb.append(parameterValueType).append(" ").append(CodeReplacer.fieldName(parameterCode)).append(";"); - } - sb.append("//").append(this.getName()); - } - return sb.toString(); - } - - @Override - public String forConvertArgumentFromMap(ResourceWrapper wrapper,String targetVarName) { - StringBuilder sb =new StringBuilder(""); - String parameterCode =this.getCode(); - String parameterValueType =getValueTypeFullName(); - - if(this.getValueTypeIsList()) { - sb.append("obj =DataTypeConvertor.convert(map.get(\"").append(parameterCode).append("\"),"); - sb.append("new TypeReference>(){});\n"); - }else { - sb.append("obj =DataTypeConvertor.convert(map.get(\"").append(parameterCode).append("\"),"); - sb.append(parameterValueType).append(".class);\n"); - } - sb.append("\t\t\t"); - sb.append("if(obj!=null){"); - sb.append(targetVarName).append(".").append(CodeReplacer.fieldName(parameterCode)).append(" =obj;"); - sb.append("}"); - sb.append("//").append(this.getName()); - - if(!ValueTypeUtil.isBase(parameterValueType)) { - sb.append("\n\t\t\t"); - sb.append("if(").append(targetVarName).append(".").append(CodeReplacer.fieldName(parameterCode)).append("!=null){"); - sb.append(targetVarName).append(".").append(CodeReplacer.fieldName(parameterCode)).append(".init();}"); - } - return sb.toString(); - } - @Override - public String forConvertArgumentFromJson(ResourceWrapper wrapper,String targetVarName) { - StringBuilder sb =new StringBuilder(""); - String parameterValueType =getValueTypeFullName(); - if(!ValueTypeUtil.isBase(parameterValueType)) { - sb.append("if(").append(targetVarName).append(".").append(CodeReplacer.fieldName(this.getCode())).append("!=null){"); - sb.append(targetVarName).append(".").append(CodeReplacer.fieldName(this.getCode())).append(".init();}"); - }else { - sb.append("//skip ").append(this.getName()); - } - return sb.toString(); - } - public String getId() { return id; } diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/indicator/IndicatorIndicator.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/indicator/IndicatorIndicator.java index 12a8a84f..1939de05 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/indicator/IndicatorIndicator.java +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/indicator/IndicatorIndicator.java @@ -1,16 +1,12 @@ package io.sc.engine.rule.core.po.lib.indicator; -import io.sc.engine.rule.core.code.impl.support.ResourceWrapper; -import io.sc.engine.rule.core.enums.IndicatorType; -import io.sc.engine.rule.core.po.lib.Indicator; - import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonTypeName; +import io.sc.engine.rule.core.enums.IndicatorType; +import io.sc.engine.rule.core.po.lib.Indicator; /** * 指标(接口) - * @author wangshaoping - * */ @JsonTypeName("INDICATOR") @JsonIgnoreProperties(ignoreUnknown=true) @@ -19,14 +15,4 @@ public class IndicatorIndicator extends Indicator { public IndicatorType getType() { return IndicatorType.INDICATOR; } - - @Override - public String forConvertArgumentFromMap(ResourceWrapper wrapper,String targetVarName) { - return "//skip " + this.getName(); - } - - @Override - public String forConvertArgumentFromJson(ResourceWrapper wrapper,String targetVarName) { - return "//" + this.getName(); - } } diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/indicator/InterfaceIndicator.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/indicator/InterfaceIndicator.java index ddf3b08b..af9500f4 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/indicator/InterfaceIndicator.java +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/indicator/InterfaceIndicator.java @@ -1,15 +1,12 @@ package io.sc.engine.rule.core.po.lib.indicator; -import io.sc.engine.rule.core.enums.IndicatorType; -import io.sc.engine.rule.core.po.lib.Indicator; - import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonTypeName; +import io.sc.engine.rule.core.enums.IndicatorType; +import io.sc.engine.rule.core.po.lib.Indicator; /** * 指标(接口) - * @author wangshaoping - * */ @JsonTypeName("INTERFACE") @JsonIgnoreProperties(ignoreUnknown=true) diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/Parameter.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/Parameter.java index 380229b1..5e9ff6eb 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/Parameter.java +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/Parameter.java @@ -3,12 +3,8 @@ package io.sc.engine.rule.core.po.model; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonSubTypes; import com.fasterxml.jackson.annotation.JsonTypeInfo; -import io.sc.engine.rule.core.code.impl.support.ResourceWrapper; -import io.sc.engine.rule.core.code.impl.support.parameter.ParameterGroovyCodeContributionItem; import io.sc.engine.rule.core.enums.ParameterType; import io.sc.engine.rule.core.po.model.parameter.*; -import io.sc.engine.rule.core.util.CodeReplacer; -import io.sc.engine.rule.core.util.ValueTypeUtil; import java.math.RoundingMode; import java.util.ArrayList; @@ -25,9 +21,8 @@ import java.util.List; @JsonSubTypes.Type(value=RuleResultParameter.class), //规则结果值 @JsonSubTypes.Type(value=SingleRuleResultParameter.class), //单规则结果值 @JsonSubTypes.Type(value=OutParameter.class) //结果值 - }) -public abstract class Parameter implements ParameterGroovyCodeContributionItem{ +public abstract class Parameter { protected String id;//ID,主键 protected String code;//代码 protected String name;//名称 @@ -39,79 +34,11 @@ public abstract class Parameter implements ParameterGroovyCodeContributionItem{ protected Boolean valueTypeIsList;//参数值类型是否是列表 protected String defaultValue;//默认值 protected Integer order;//排序 - protected List validators =new ArrayList();//包含的验证器 - protected List processors =new ArrayList();//包含的处理器 + protected List validators =new ArrayList<>();//包含的验证器 + protected List processors =new ArrayList<>();//包含的处理器 @JsonIgnore public abstract ParameterType getType(); - - public String getValueTypeFullName() { - return this.getValueType() + (this.getValueTypeVersion()==null?"":"_V" + this.getValueTypeVersion()); - } - - @Override - public String forArgumentField(ResourceWrapper wrapper) { - StringBuilder sb =new StringBuilder(""); - String parameterCode =this.getCode(); - String parameterValueType =getValueTypeFullName(); - - if("String".equals(parameterValueType)) { - if(this.getDefaultValue()!=null) { - sb.append("String ").append(CodeReplacer.fieldName(parameterCode)).append(" =\"\"\"").append(this.getDefaultValue()).append("\"\"\"").append(";"); - }else { - sb.append("String ").append(CodeReplacer.fieldName(parameterCode)).append(";"); - } - sb.append("//").append(this.getName()); - }else { - if(this.getDefaultValue()!=null) { - sb.append(parameterValueType).append(" ").append(CodeReplacer.fieldName(parameterCode)).append(" =").append(this.getDefaultValue()).append(";"); - }else { - sb.append(parameterValueType).append(" ").append(CodeReplacer.fieldName(parameterCode)).append(";"); - } - sb.append("//").append(this.getName()); - } - return sb.toString(); - } - - @Override - public String forConvertArgumentFromMap(ResourceWrapper wrapper,String targetVarName) { - StringBuilder sb =new StringBuilder(""); - String parameterCode =this.getCode(); - String parameterValueType =getValueTypeFullName(); - - if(this.getValueTypeIsList()) { - sb.append("obj =DataTypeConvertor.convert(map.get(\"").append(parameterCode).append("\"),"); - sb.append("new TypeReference>(){});\n"); - }else { - sb.append("obj =DataTypeConvertor.convert(map.get(\"").append(parameterCode).append("\"),"); - sb.append(parameterValueType).append(".class);\n"); - } - sb.append("\t\t\t"); - sb.append("if(obj!=null){"); - sb.append(targetVarName).append(".").append(CodeReplacer.fieldName(parameterCode)).append(" =obj;"); - sb.append("}"); - sb.append("//").append(this.getName()); - - if(!ValueTypeUtil.isBase(parameterValueType)) { - sb.append("\\n\t\t\t"); - sb.append("if(").append(targetVarName).append(".").append(CodeReplacer.fieldName(parameterCode)).append("!=null){"); - sb.append(targetVarName).append(".").append(CodeReplacer.fieldName(parameterCode)).append(".init();}"); - } - return sb.toString(); - } - - @Override - public String forConvertArgumentFromJson(ResourceWrapper wrapper,String targetVarName) { - StringBuilder sb =new StringBuilder(""); - String parameterValueType =getValueTypeFullName(); - if(!ValueTypeUtil.isBase(parameterValueType)) { - sb.append("if(").append(targetVarName).append(".").append(CodeReplacer.fieldName(this.getCode())).append("!=null){"); - sb.append(targetVarName).append(".").append(CodeReplacer.fieldName(this.getCode())).append(".init();}"); - }else { - sb.append("//skip ").append(this.getName()); - } - return sb.toString(); - } public String getId() { return id; diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/parameter/ConstantParameter.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/parameter/ConstantParameter.java index e3e2488c..516398c1 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/parameter/ConstantParameter.java +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/parameter/ConstantParameter.java @@ -8,8 +8,6 @@ import com.fasterxml.jackson.annotation.JsonTypeName; /** * 模型参数(常量) - * @author wangshaoping - * */ @JsonTypeName("CONSTANT") @JsonIgnoreProperties(ignoreUnknown=true) diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/parameter/InOptionParameter.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/parameter/InOptionParameter.java index 3ef742b4..7fc591fd 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/parameter/InOptionParameter.java +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/parameter/InOptionParameter.java @@ -12,8 +12,6 @@ import com.fasterxml.jackson.annotation.JsonTypeName; /** * 模型参数(输入选项) - * @author wangshaoping - * */ @JsonTypeName("IN_OPTION") @JsonIgnoreProperties(ignoreUnknown=true) diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/parameter/InParameter.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/parameter/InParameter.java index 050427b3..78eee37e 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/parameter/InParameter.java +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/parameter/InParameter.java @@ -8,8 +8,6 @@ import com.fasterxml.jackson.annotation.JsonTypeName; /** * 模型参数(输入值) - * @author wangshaoping - * */ @JsonTypeName("IN") @JsonIgnoreProperties(ignoreUnknown=true) diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/parameter/InSubOutParameter.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/parameter/InSubOutParameter.java index dbb91b91..09ca33ad 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/parameter/InSubOutParameter.java +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/parameter/InSubOutParameter.java @@ -1,16 +1,12 @@ package io.sc.engine.rule.core.po.model.parameter; -import io.sc.engine.rule.core.code.impl.support.ResourceWrapper; -import io.sc.engine.rule.core.enums.ParameterType; -import io.sc.engine.rule.core.po.model.Parameter; - import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonTypeName; +import io.sc.engine.rule.core.enums.ParameterType; +import io.sc.engine.rule.core.po.model.Parameter; /** * 模型参数(子模型输出) - * @author wangshaoping - * */ @JsonTypeName("IN_SUB_OUT") @JsonIgnoreProperties(ignoreUnknown=true) @@ -19,9 +15,4 @@ public class InSubOutParameter extends Parameter { public ParameterType getType() { return ParameterType.IN_SUB_OUT; } - - @Override - public String forArgumentField(ResourceWrapper wrapper) { - return ""; - } } diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/parameter/IndicatorParameter.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/parameter/IndicatorParameter.java index 808e6a13..b97d7990 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/parameter/IndicatorParameter.java +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/parameter/IndicatorParameter.java @@ -1,68 +1,20 @@ package io.sc.engine.rule.core.po.model.parameter; -import io.sc.engine.rule.core.code.impl.support.ResourceWrapper; -import io.sc.engine.rule.core.code.impl.support.ResourceWrapper4Resource; -import io.sc.engine.rule.core.code.impl.support.lib.LibUtil; -import io.sc.engine.rule.core.code.impl.support.parameter.ParameterGroovyCodeContributionItem; -import io.sc.engine.rule.core.enums.ParameterType; -import io.sc.engine.rule.core.po.lib.Indicator; -import io.sc.engine.rule.core.po.model.Parameter; -import io.sc.engine.rule.core.util.CodeReplacer; - import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonTypeName; -import io.sc.engine.rule.core.util.ValueTypeUtil; +import io.sc.engine.rule.core.enums.ParameterType; +import io.sc.engine.rule.core.po.model.Parameter; /** * 模型参数(指标) - * @author wangshaoping - * */ @JsonTypeName("INDICATOR") @JsonIgnoreProperties(ignoreUnknown=true) -public class IndicatorParameter extends Parameter implements ParameterGroovyCodeContributionItem{ +public class IndicatorParameter extends Parameter { protected String libCode;//库代码 protected Integer libVersion;//库版本 protected String indicatorCode;//指标代码 - @Override - public String forConvertArgumentFromMap(ResourceWrapper wrapper,String targetVarName) { - StringBuilder sb =new StringBuilder(""); - - //只要进入此处执行,一定是 ResourceWrapper4Resource - ResourceWrapper4Resource resourceWrapper =(ResourceWrapper4Resource)wrapper; - Indicator indicator =LibUtil.findIndicator(resourceWrapper.getLibs(),this.getLibCode(),this.getLibVersion(),this.getIndicatorCode()); - if(indicator!=null) { - String indicatorCode =indicator.getCode(); - String parameterCode =this.getCode(); - if(wrapper.getIsExecuteTestCase()) { //如果是在执行测试用例时 - indicatorCode =this.getCode(); - } - String parameterValueType =getValueTypeFullName(); - - if(this.getValueTypeIsList()) { - sb.append("obj =DataTypeConvertor.convert(map.get(\"").append(indicatorCode).append("\"),"); - sb.append("new TypeReference>(){});\n"); - }else { - sb.append("obj =DataTypeConvertor.convert(map.get(\"").append(indicatorCode).append("\"),"); - sb.append(parameterValueType).append(".class);\n"); - } - sb.append("\t\t\t"); - sb.append("if(obj!=null){"); - sb.append(targetVarName).append(".").append(CodeReplacer.fieldName(parameterCode)).append(" =obj;"); - sb.append("}"); - sb.append("//").append(this.getName()); - - if(!ValueTypeUtil.isBase(parameterValueType)) { - sb.append("\n\t\t\t"); - sb.append("if(").append(targetVarName).append(".").append(CodeReplacer.fieldName(parameterCode)).append("!=null){"); - sb.append(targetVarName).append(".").append(CodeReplacer.fieldName(parameterCode)).append(".init();}"); - } - sb.append("\n"); - } - return sb.toString(); - } - @Override public ParameterType getType() { return ParameterType.INDICATOR; @@ -86,14 +38,4 @@ public class IndicatorParameter extends Parameter implements ParameterGroovyCode public void setIndicatorCode(String indicatorCode) { this.indicatorCode = indicatorCode; } - - @Override - public String getValueType() { - return super.getValueType(); - } - - @Override - public Integer getValueTypeVersion() { - return super.getValueTypeVersion(); - } } diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/parameter/IntermediateParameter.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/parameter/IntermediateParameter.java index 30d5f841..1857916e 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/parameter/IntermediateParameter.java +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/parameter/IntermediateParameter.java @@ -1,33 +1,18 @@ package io.sc.engine.rule.core.po.model.parameter; -import io.sc.engine.rule.core.code.impl.support.ResourceWrapper; -import io.sc.engine.rule.core.code.impl.support.parameter.ParameterGroovyCodeContributionItem; -import io.sc.engine.rule.core.enums.ParameterType; -import io.sc.engine.rule.core.po.model.Parameter; - import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonTypeName; +import io.sc.engine.rule.core.enums.ParameterType; +import io.sc.engine.rule.core.po.model.Parameter; /** * 模型参数(中间值) - * @author wangshaoping - * */ @JsonTypeName("INTERMEDIATE") @JsonIgnoreProperties(ignoreUnknown=true) -public class IntermediateParameter extends Parameter implements ParameterGroovyCodeContributionItem{ +public class IntermediateParameter extends Parameter { @Override public ParameterType getType() { return ParameterType.INTERMEDIATE; } - - @Override - public String forConvertArgumentFromMap(ResourceWrapper wrapper,String targetVarName) { - return "//skip " + this.getName(); - } - - @Override - public String forConvertArgumentFromJson(ResourceWrapper wrapper,String targetVarName) { - return "//" + this.getName(); - } } diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/parameter/OutParameter.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/parameter/OutParameter.java index 6d17c98d..8892fc6e 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/parameter/OutParameter.java +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/parameter/OutParameter.java @@ -1,16 +1,12 @@ package io.sc.engine.rule.core.po.model.parameter; -import io.sc.engine.rule.core.code.impl.support.ResourceWrapper; -import io.sc.engine.rule.core.enums.ParameterType; -import io.sc.engine.rule.core.po.model.Parameter; - import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonTypeName; +import io.sc.engine.rule.core.enums.ParameterType; +import io.sc.engine.rule.core.po.model.Parameter; /** * 模型参数(结果值) - * @author wangshaoping - * */ @JsonTypeName("OUT") @JsonIgnoreProperties(ignoreUnknown=true) @@ -19,14 +15,4 @@ public class OutParameter extends Parameter { public ParameterType getType() { return ParameterType.OUT; } - - @Override - public String forConvertArgumentFromMap(ResourceWrapper wrapper,String targetVarName) { - return "//skip " + this.getName(); - } - - @Override - public String forConvertArgumentFromJson(ResourceWrapper wrapper,String targetVarName) { - return "//" + this.getName(); - } } diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/parameter/RuleResultParameter.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/parameter/RuleResultParameter.java index a43b4cc1..74502054 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/parameter/RuleResultParameter.java +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/parameter/RuleResultParameter.java @@ -1,16 +1,11 @@ package io.sc.engine.rule.core.po.model.parameter; -import io.sc.engine.rule.core.code.impl.support.ResourceWrapper; -import io.sc.engine.rule.core.enums.ParameterType; -import io.sc.engine.rule.core.util.CodeReplacer; - import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonTypeName; +import io.sc.engine.rule.core.enums.ParameterType; /** * 模型参数(规则结果) - * @author wangshaoping - * */ @JsonTypeName("RULE_RESULT") @JsonIgnoreProperties(ignoreUnknown=true) @@ -19,22 +14,4 @@ public class RuleResultParameter extends OutParameter { public ParameterType getType() { return ParameterType.RULE_RESULT; } - - @Override - public String forArgumentField(ResourceWrapper wrapper) { - StringBuilder sb =new StringBuilder(""); - sb.append("RuleResult ").append(CodeReplacer.fieldName(this.getCode())).append(" =new RuleResult();"); - sb.append("//").append(this.getName()); - return sb.toString(); - } - - @Override - public String forConvertArgumentFromMap(ResourceWrapper wrapper,String targetVarName) { - return "//skip " + this.getName(); - } - - @Override - public String forConvertArgumentFromJson(ResourceWrapper wrapper,String targetVarName) { - return "//skip " + this.getName(); - } } diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/parameter/SingleRuleResultParameter.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/parameter/SingleRuleResultParameter.java index f1ff757c..df5dfa99 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/parameter/SingleRuleResultParameter.java +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/parameter/SingleRuleResultParameter.java @@ -1,16 +1,11 @@ package io.sc.engine.rule.core.po.model.parameter; -import io.sc.engine.rule.core.code.impl.support.ResourceWrapper; -import io.sc.engine.rule.core.enums.ParameterType; -import io.sc.engine.rule.core.util.CodeReplacer; - import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonTypeName; +import io.sc.engine.rule.core.enums.ParameterType; /** * 模型参数(单规则结果) - * @author wangshaoping - * */ @JsonTypeName("SINGLE_RULE_RESULT") @JsonIgnoreProperties(ignoreUnknown=true) @@ -19,22 +14,4 @@ public class SingleRuleResultParameter extends OutParameter { public ParameterType getType() { return ParameterType.SINGLE_RULE_RESULT; } - - @Override - public String forArgumentField(ResourceWrapper wrapper) { - StringBuilder sb =new StringBuilder(""); - sb.append("SingleRuleResult ").append(CodeReplacer.fieldName(this.getCode())).append(";"); - sb.append("//").append(this.getName()); - return sb.toString(); - } - - @Override - public String forConvertArgumentFromMap(ResourceWrapper wrapper,String targetVarName) { - return "//skip " + this.getName(); - } - - @Override - public String forConvertArgumentFromJson(ResourceWrapper wrapper,String targetVarName) { - return "//skip " + this.getName(); - } } diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/util/ExpressionReplacer.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/util/ExpressionReplacer.java index 3984cad5..a922d74e 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/util/ExpressionReplacer.java +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/util/ExpressionReplacer.java @@ -1,7 +1,5 @@ package io.sc.engine.rule.core.util; -import org.springframework.util.StringUtils; - import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -191,7 +189,7 @@ public class ExpressionReplacer { founds.add(matcher.group(1)); } for(String found : founds) { - expression =expression.replace(found, CodeReplacer.varName(found)); + expression =expression.replace(found, IdReplacer.varName(found)); } return expression; } diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/util/GroovyExpressionReplacer.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/util/GroovyExpressionReplacer.java new file mode 100644 index 00000000..27f64d98 --- /dev/null +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/util/GroovyExpressionReplacer.java @@ -0,0 +1,71 @@ +package io.sc.engine.rule.core.util; + +import io.sc.platform.util.PlaceHolderExpressionUtil; +import io.sc.platform.util.support.StringLengthDescComparator; +import org.springframework.util.StringUtils; + +import java.util.Map; +import java.util.TreeMap; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class GroovyExpressionReplacer { + public static final String ARGUMENT_NAME ="arg"; + private static final Pattern EXPRESSION_REG_PATTERN =Pattern.compile("`(.+?)`"); + + /** + * 将表达式转换为 groovy 可执行的脚本代码 + * @param content 表达式 + * @return groovy 可执行的脚本代码 + */ + public static String groovy(String content) { + if(!StringUtils.hasText(content)){ + return null; + } + return groovy(content,""); + } + + /** + * 将表达式转换为 groovy 可执行的脚本代码 + * groovy("${xxx} + ${yyy}", "java.lang.Double");//结果: arg.xxx + arg.yyy + * groovy("${xxx} + ${yyy} + 3", "java.lang.Double");//结果: arg.xxx + arg.yyy + 3 + * groovy("max(${xxx},${yyy}) + 3", "java.lang.Double");//结果: max(arg.xxx,arg.yyy) + 3 + * + * groovy("${xxx} + ${yyy}", "java.lang.String");//结果: """${arg.xxx} + ${arg.yyy}""" + * groovy("${xxx} + ${yyy} + 3", "java.lang.String");//结果: """${arg.xxx} + ${arg.yyy} + 3""" + * groovy("max(${xxx},${yyy})", "java.lang.String");//结果: """max(${arg.xxx},${arg.yyy})""" + * + * groovy("`${xxx} + ${yyy}` + 3", "java.lang.String");//结果: """${arg.xxx + arg.yyy} + 3""" + * groovy("`max(${xxx},${yyy})` + 3", "java.lang.String");//结果: """${max(arg.xxx,arg.yyy)} + 3""" + * @param content 表达式 + * @param valueType 表达式返回值类型 + * @return groovy 可执行的脚本代码 + */ + public static String groovy(String content,String valueType) { + if(!StringUtils.hasText(content)){ + return null; + } + if(ValueTypeUtil.isString(valueType)){ + // 在替换时, 需要先替换长度较长的, 避免替换错误 + Map sortedCache =new TreeMap<>(new StringLengthDescComparator()); + // 先处理 `xxx`, 用占位符替换 + Matcher matcher =EXPRESSION_REG_PATTERN.matcher(content); + int index =0; + while(matcher.find()){ + String replaced = "${" + PlaceHolderExpressionUtil.replace(matcher.group(1),"arg.","") + "}"; + sortedCache.put("<%" + index + "%>",replaced); + content =content.replace(matcher.group(),"<%" + index + "%>"); + } + // 再处理 xxx + content =PlaceHolderExpressionUtil.replace(content,"${arg.","}"); + + // 最后处理 `xxx`, 替换回正确的值 + for(String key : sortedCache.keySet()){ + content =content.replace(key,sortedCache.get(key)); + } + return "\"\"\"" + content + "\"\"\""; + }else{ + return PlaceHolderExpressionUtil.replace(content,"arg.",""); + } + } +} diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/util/CodeReplacer.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/util/IdReplacer.java similarity index 76% rename from io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/util/CodeReplacer.java rename to io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/util/IdReplacer.java index 79ce3664..b19367e0 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/util/CodeReplacer.java +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/util/IdReplacer.java @@ -1,6 +1,7 @@ package io.sc.engine.rule.core.util; import io.sc.platform.util.StringUtil; +import org.springframework.util.StringUtils; import java.util.Arrays; @@ -10,7 +11,7 @@ import java.util.Arrays; * @author wangshaoping * */ -public class CodeReplacer { +public class IdReplacer { public static final String CLASS_NAME_PREFIX ="C"; public static final String FIELD_NAME_PREFIX ="_"; public static final String METHOD_NAME_PREFIX ="_"; @@ -36,14 +37,18 @@ public class CodeReplacer { * @return 合法的Java类名 */ public static String className(String code) { - return StringUtil.capitalize(code); + return StringUtil.capitalize(ValueTypeUtil.getSimpleName(code)); } public static String className(String code,Integer version) { - if(code!=null && version!=null) { + if(!StringUtils.hasText(code)){ + return "Object"; + } + if(version!=null){ return StringUtil.capitalize(code) + "_V" + version; + }else{ + return StringUtil.capitalize(ValueTypeUtil.getSimpleName(code)); } - return StringUtil.capitalize(code); } /** @@ -100,4 +105,27 @@ public class CodeReplacer { } return StringUtil.capitalize(code); } + + /** + * 对代码块进行整体缩进多个tab, 首行不缩进 + * @param block 代码块 + * @param count tab 个数 + * @return 替换后的代码块 + */ + public static String tabs(String block,int count){ + return StringUtil.tabs(block,count); + } + + /** + * 对代码块进行整体缩进多个tab, 首行不缩进 + * @param block 代码块 + * @param count tab 个数 + * @return 替换后的代码块 + */ + public static String tabs(String block,int count,boolean first){ + if(!StringUtils.hasText(block)){ + return block; + } + return StringUtil.repeat("\t",count) + StringUtil.tabs(block,count); + } } diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/util/ValueTypeUtil.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/util/ValueTypeUtil.java index 6af02780..510d1a44 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/util/ValueTypeUtil.java +++ b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/util/ValueTypeUtil.java @@ -27,6 +27,18 @@ public class ValueTypeUtil { } + public static boolean isString(Class type){ + return isString(type.getName()); + } + + public static boolean isString(String type){ + return String.class.getName().equals(type); + } + + public static boolean isDecimal(Class type) { return isDecimal(type.getName());} + + public static boolean isDecimal(String type) { return BigDecimal.class.getName().equals(type);} + public static boolean isBase(Class type){ return isBase(type.getName()); } @@ -43,6 +55,17 @@ public class ValueTypeUtil { return Map.class.isAssignableFrom(clazz); } + public static String getSimpleName(Class type) { + return getSimpleName(type.getName()); + } + + public static String getSimpleName(String type) { + if(BASE_CLASS_MAP.containsKey(type)){ + return BASE_CLASS_MAP.get(type).getSimpleName(); + } + return type; + } + public static String generateSampleValue(String type) { if(Boolean.class.getName().equals(type)) { return "true"; diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/vo/resource/FolderResource.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/vo/resource/FolderResource.java deleted file mode 100644 index 6e985ea8..00000000 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/vo/resource/FolderResource.java +++ /dev/null @@ -1,13 +0,0 @@ -package io.sc.engine.rule.core.vo.resource; - -import io.sc.engine.rule.core.enums.ResourceType; - -/** - * 文件夹资源实体类 - */ -public class FolderResource extends Resource { - @Override - public ResourceType getType() { - return ResourceType.FOLDER; - } -} diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/vo/resource/ModelResource.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/vo/resource/ModelResource.java deleted file mode 100644 index e2572947..00000000 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/vo/resource/ModelResource.java +++ /dev/null @@ -1,24 +0,0 @@ -package io.sc.engine.rule.core.vo.resource; - -import com.fasterxml.jackson.annotation.JsonIgnore; -import io.sc.engine.rule.core.enums.ResourceType; - -/** - * 模型资源实体类 - */ -public class ModelResource extends ReleasableResource { - @JsonIgnore - private String model;//模型 - - @Override - public ResourceType getType() { - return ResourceType.MODEL; - } - - public String getModel() { - return model; - } - public void setModel(String model) { - this.model = model; - } -} diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/vo/resource/ReleasableResource.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/vo/resource/ReleasableResource.java deleted file mode 100644 index a4744653..00000000 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/vo/resource/ReleasableResource.java +++ /dev/null @@ -1,74 +0,0 @@ -package io.sc.engine.rule.core.vo.resource; - -import io.sc.engine.rule.core.enums.DeployStatus; - -import java.util.Date; - -/** - * 可版本化资源 - */ -public abstract class ReleasableResource extends Resource { - protected DeployStatus status;//状态 - protected Integer version;//版本 - protected Date effectiveDate;//生效日期 - protected String imports;//引入外部包 - protected int attachmentCount;//附件个数 - protected String taskName;//审批任务节点名称 - protected String taskAssignee;//审批任务节点处理人 - - public DeployStatus getStatus() { - return status; - } - - public void setStatus(DeployStatus status) { - this.status = status; - } - - public Integer getVersion() { - return version; - } - - public void setVersion(Integer version) { - this.version = version; - } - - public Date getEffectiveDate() { - return effectiveDate; - } - - public void setEffectiveDate(Date effectiveDate) { - this.effectiveDate = effectiveDate; - } - - public String getImports() { - return imports; - } - - public void setImports(String imports) { - this.imports = imports; - } - - public int getAttachmentCount() { - return attachmentCount; - } - - public void setAttachmentCount(int attachmentCount) { - this.attachmentCount = attachmentCount; - } - - public String getTaskName() { - return taskName; - } - - public void setTaskName(String taskName) { - this.taskName = taskName; - } - - public String getTaskAssignee() { - return taskAssignee; - } - - public void setTaskAssignee(String taskAssignee) { - this.taskAssignee = taskAssignee; - } -} diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/vo/resource/Resource.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/vo/resource/Resource.java deleted file mode 100644 index f282f495..00000000 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/vo/resource/Resource.java +++ /dev/null @@ -1,66 +0,0 @@ -package io.sc.engine.rule.core.vo.resource; - -import io.sc.engine.rule.core.enums.ResourceType; -import io.sc.engine.rule.core.po.testcase.ResourceTestCase; -import io.sc.platform.orm.api.vo.AuditorVo; - -import java.util.ArrayList; -import java.util.List; - -/** - * 资源 - */ -public abstract class Resource extends AuditorVo { - protected ResourceType type;//类型(用于区分子类) - protected String id;//ID,主键 - protected String code;//代码 - protected String name;//名称 - protected String description;//描述 - protected Integer order;//排序 - protected String parent;//父 - private List children =new ArrayList();//孩子集合 - protected List testCases =new ArrayList();//测试用例 - - public ResourceType getType() { - return type; - } - public void setType(ResourceType type) { - this.type = type; - } - public String getId() { - return id; - } - public void setId(String id) { - this.id = id; - } - public String getCode() { - return code; - } - public void setCode(String code) { - this.code = code; - } - public String getName() { - return name; - } - public void setName(String name) { - this.name = name; - } - public String getDescription() { - return description; - } - public void setDescription(String description) { - this.description = description; - } - public Integer getOrder() { - return order; - } - public void setOrder(Integer order) { - this.order = order; - } - public String getParent() { - return parent; - } - public void setParent(String parent) { - this.parent = parent; - } -} diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/vo/testcase/TestCase.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/vo/testcase/TestCase.java deleted file mode 100644 index 376ff4b5..00000000 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/vo/testcase/TestCase.java +++ /dev/null @@ -1,70 +0,0 @@ -package io.sc.engine.rule.core.vo.testcase; - -import io.sc.engine.rule.core.enums.TestCaseOwnerType; -import io.sc.engine.rule.core.enums.TestResult; -import io.sc.platform.orm.api.vo.AuditorVo; - -import java.util.Date; - -/** - * 测试用例 - */ -public class TestCase extends AuditorVo { - protected TestCaseOwnerType ownerType;//类型(用于区分子类) - protected String ownerId;//所有者ID - protected String id;//ID,主键 - protected String name;//名称 - protected String description;//描述 - protected Integer order;//排序 - protected Date lastTestDate;//最近一次执行测试用例的日期 - protected TestResult testResult;//最近一次执行测试用例的结果 - - public TestCaseOwnerType getOwnerType() { - return ownerType; - } - public void setOwnerType(TestCaseOwnerType ownerType) { - this.ownerType = ownerType; - } - public String getOwnerId() { - return ownerId; - } - public void setOwnerId(String ownerId) { - this.ownerId = ownerId; - } - public String getId() { - return id; - } - public void setId(String id) { - this.id = id; - } - public String getName() { - return name; - } - public void setName(String name) { - this.name = name; - } - public String getDescription() { - return description; - } - public void setDescription(String description) { - this.description = description; - } - public Integer getOrder() { - return order; - } - public void setOrder(Integer order) { - this.order = order; - } - public Date getLastTestDate() { - return lastTestDate; - } - public void setLastTestDate(Date lastTestDate) { - this.lastTestDate = lastTestDate; - } - public TestResult getTestResult() { - return testResult; - } - public void setTestResult(TestResult testResult) { - this.testResult = testResult; - } -} diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/vo/testcase/TestCaseParameter.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/vo/testcase/TestCaseParameter.java deleted file mode 100644 index d7534163..00000000 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/vo/testcase/TestCaseParameter.java +++ /dev/null @@ -1,71 +0,0 @@ -package io.sc.engine.rule.core.vo.testcase; - -import io.sc.engine.rule.core.enums.TestResult; -import io.sc.platform.orm.api.vo.AuditorVo; - -/** - * 测试用例参数 - */ -public class TestCaseParameter extends AuditorVo { - protected String id;//ID,主键 - protected String code;//对应的参数代码 - protected Boolean skipCheck;//是否跳过检查 - protected String inputValue;//参数输入值 - protected String expectValue;//参数期望值 - protected String resultValue;//参数实际执行结果值 - protected TestResult testResult;//最近一次执行测试用例的结果 - protected String testCase;//所属测试用例 - - public String getId() { - return id; - } - public void setId(String id) { - this.id = id; - } - public String getCode() { - return code; - } - public void setCode(String code) { - this.code = code; - } - public Boolean getSkipCheck() { - return skipCheck; - } - public void setSkipCheck(Boolean skipCheck) { - this.skipCheck = skipCheck; - } - public String getInputValue() { - return inputValue; - } - public void setInputValue(String inputValue) { - this.inputValue = inputValue; - } - public String getExpectValue() { - return expectValue; - } - public void setExpectValue(String expectValue) { - this.expectValue = expectValue; - } - public String getResultValue() { - return resultValue; - } - public void setResultValue(String resultValue) { - this.resultValue = resultValue; - } - public TestResult getTestResult() { - return testResult; - } - public void setTestResult(TestResult testResult) { - this.testResult = testResult; - } - public String getTestCase() { - return testCase; - } - public void setTestCase(String testCase) { - this.testCase = testCase; - } - - public void clearTestResult() { - this.setTestResult(null); - } -} diff --git a/io.sc.engine.rule.core/src/main/resources/io/sc/engine/rule/core/code/template/groovy/groovy.ftl b/io.sc.engine.rule.core/src/main/resources/io/sc/engine/rule/core/code/template/groovy/groovy.ftl index bd35aa37..15665be8 100644 --- a/io.sc.engine.rule.core/src/main/resources/io/sc/engine/rule/core/code/template/groovy/groovy.ftl +++ b/io.sc.engine.rule.core/src/main/resources/io/sc/engine/rule/core/code/template/groovy/groovy.ftl @@ -28,7 +28,7 @@ import io.sc.engine.rule.core.util.DateUtil; import io.sc.engine.rule.core.util.DataTypeConvertor; import io.sc.engine.rule.core.util.ESql; import io.sc.engine.rule.core.util.JacksonObjectMapper; -import io.sc.engine.rule.core.util.CodeReplacer; +import io.sc.engine.rule.core.util.IdReplacer; import io.sc.engine.rule.core.util.Strings; import io.sc.engine.rule.client.Executor; diff --git a/io.sc.engine.rule.core/src/main/resources/io/sc/engine/rule/core/i18n/enums.properties b/io.sc.engine.rule.core/src/main/resources/io/sc/engine/rule/core/i18n/enums.properties index 5aff12cb..2e7f8088 100644 --- a/io.sc.engine.rule.core/src/main/resources/io/sc/engine/rule/core/i18n/enums.properties +++ b/io.sc.engine.rule.core/src/main/resources/io/sc/engine/rule/core/i18n/enums.properties @@ -43,6 +43,12 @@ io.sc.engine.rule.core.enums.ParameterType.SINGLE_RULE_RESULT=Single Rule Out io.sc.engine.rule.core.enums.ParameterType.OUT=Out io.sc.engine.rule.core.enums.ParameterType.CONSTANT=Constant +#================================================ +# \u5904\u7406\u5668\u6240\u6709\u8005\u7C7B\u578B\u679A\u4E3E +#================================================ +io.sc.engine.rule.core.enums.ProcessorOwnerType.PARAMETER=Parmeter +io.sc.engine.rule.core.enums.ProcessorOwnerType.INDICATOR=Indicator + #================================================ # \u5904\u7406\u5668\u7C7B\u578B\u679A\u4E3E #================================================ diff --git a/io.sc.engine.rule.core/src/main/resources/io/sc/engine/rule/core/i18n/enums_tw_CN.properties b/io.sc.engine.rule.core/src/main/resources/io/sc/engine/rule/core/i18n/enums_tw_CN.properties index e5b56d16..a4939b3c 100644 --- a/io.sc.engine.rule.core/src/main/resources/io/sc/engine/rule/core/i18n/enums_tw_CN.properties +++ b/io.sc.engine.rule.core/src/main/resources/io/sc/engine/rule/core/i18n/enums_tw_CN.properties @@ -43,6 +43,12 @@ io.sc.engine.rule.core.enums.ParameterType.SINGLE_RULE_RESULT=\u55AE\u898F\u5247 io.sc.engine.rule.core.enums.ParameterType.OUT=\u7D50\u679C\u503C io.sc.engine.rule.core.enums.ParameterType.CONSTANT=\u5E38\u91CF +#================================================ +# \u5904\u7406\u5668\u6240\u6709\u8005\u7C7B\u578B\u679A\u4E3E +#================================================ +io.sc.engine.rule.core.enums.ProcessorOwnerType.PARAMETER=\u53C3\u6578 +io.sc.engine.rule.core.enums.ProcessorOwnerType.INDICATOR=\u6307\u6A19 + #================================================ # \u5904\u7406\u5668\u7C7B\u578B\u679A\u4E3E #================================================ diff --git a/io.sc.engine.rule.core/src/main/resources/io/sc/engine/rule/core/i18n/enums_zh_CN.properties b/io.sc.engine.rule.core/src/main/resources/io/sc/engine/rule/core/i18n/enums_zh_CN.properties index ee5602e5..08da7958 100644 --- a/io.sc.engine.rule.core/src/main/resources/io/sc/engine/rule/core/i18n/enums_zh_CN.properties +++ b/io.sc.engine.rule.core/src/main/resources/io/sc/engine/rule/core/i18n/enums_zh_CN.properties @@ -43,6 +43,12 @@ io.sc.engine.rule.core.enums.ParameterType.SINGLE_RULE_RESULT=\u5355\u89C4\u5219 io.sc.engine.rule.core.enums.ParameterType.OUT=\u7ED3\u679C\u503C io.sc.engine.rule.core.enums.ParameterType.CONSTANT=\u5E38\u91CF +#================================================ +# \u5904\u7406\u5668\u6240\u6709\u8005\u7C7B\u578B\u679A\u4E3E +#================================================ +io.sc.engine.rule.core.enums.ProcessorOwnerType.PARAMETER=\u53C2\u6570 +io.sc.engine.rule.core.enums.ProcessorOwnerType.INDICATOR=\u6307\u6807 + #================================================ # \u5904\u7406\u5668\u7C7B\u578B\u679A\u4E3E #================================================ diff --git a/io.sc.engine.rule.frontend/package.json b/io.sc.engine.rule.frontend/package.json index 27a58773..5ac006b0 100644 --- a/io.sc.engine.rule.frontend/package.json +++ b/io.sc.engine.rule.frontend/package.json @@ -1,6 +1,6 @@ { "name": "io.sc.engine.rule.frontend", - "version": "8.1.50", + "version": "8.2.1", "description": "", "private": false, "keywords": [], @@ -111,7 +111,7 @@ "node-sql-parser": "5.3.4", "pinia": "2.2.6", "pinia-undo": "0.2.4", - "platform-core": "8.2.0", + "platform-core": "8.2.7", "quasar": "2.17.4", "sort-array": "5.0.0", "svg-path-commander": "2.1.5", diff --git a/io.sc.engine.rule.frontend/src/i18n/messages.json b/io.sc.engine.rule.frontend/src/i18n/messages.json index 959fe155..0d948c2b 100644 --- a/io.sc.engine.rule.frontend/src/i18n/messages.json +++ b/io.sc.engine.rule.frontend/src/i18n/messages.json @@ -51,7 +51,6 @@ "re.model.grid.toolbar.addChild": "Add Child Model", "re.model.grid.toolbar.deepClone.tip": "Are you sure to deep clone the model?", "re.model.grid.toolbar.generateGroovySourceCode": "Generate Script Code", - "re.model.grid.toolbar.generateGroovySourceCode4TestCase": "Generate Script Code(Test Case)", "re.model.grid.entity.resource": "Resource", "re.model.grid.entity.executeMode": "Execute Mode", @@ -198,7 +197,7 @@ "re.lib.grid.toolbar.deepClone.tip": "Are you sure to clone the Feature Library?", "re.lib.grid.toolbar.deepCloneNew": "Deep Clone (new)", "re.lib.grid.toolbar.deepCloneNew.tip": "Are you sure to clone the feature library as a new feature library?", - "re.lib.grid.toolbar.generateGroovy": "Generate Script Code", + "re.lib.grid.toolbar.generateGroovySourceCode": "Generate Script Code", "re.lib.grid.toolbar.deploy": "Deploy", "re.lib.grid.toolbar.deploy.tip": "Are you sure to deploy the Feature Library?", "re.lib.grid.toolbar.importGroup": "Import", diff --git a/io.sc.engine.rule.frontend/src/i18n/messages_tw_CN.json b/io.sc.engine.rule.frontend/src/i18n/messages_tw_CN.json index 1b88751b..a7a677fd 100644 --- a/io.sc.engine.rule.frontend/src/i18n/messages_tw_CN.json +++ b/io.sc.engine.rule.frontend/src/i18n/messages_tw_CN.json @@ -51,7 +51,6 @@ "re.model.grid.toolbar.addChild": "添加子模型", "re.model.grid.toolbar.deepClone.tip": "您確定要深度複製模型嗎?", "re.model.grid.toolbar.generateGroovySourceCode": "生成腳本代碼", - "re.model.grid.toolbar.generateGroovySourceCode4TestCase": "生成腳本代碼(測試用例)", "re.model.grid.entity.resource": "資源", "re.model.grid.entity.executeMode": "執行模式", @@ -198,7 +197,7 @@ "re.lib.grid.toolbar.deepClone.tip": "您確定要深度複製特征庫嗎?", "re.lib.grid.toolbar.deepCloneNew": "深度複製(新)", "re.lib.grid.toolbar.deepCloneNew.tip": "您確定要深度複製特征庫成一個新的特征庫嗎?", - "re.lib.grid.toolbar.generateGroovy": "生成腳本源代碼", + "re.lib.grid.toolbar.generateGroovySourceCode": "生成腳本代碼", "re.lib.grid.toolbar.deploy": "發佈", "re.lib.grid.toolbar.deploy.tip": "您確定要發佈特征庫嗎?", "re.lib.grid.toolbar.importGroup": "導入", diff --git a/io.sc.engine.rule.frontend/src/i18n/messages_zh_CN.json b/io.sc.engine.rule.frontend/src/i18n/messages_zh_CN.json index c4fe2c54..fb32a0b8 100644 --- a/io.sc.engine.rule.frontend/src/i18n/messages_zh_CN.json +++ b/io.sc.engine.rule.frontend/src/i18n/messages_zh_CN.json @@ -51,7 +51,6 @@ "re.model.grid.toolbar.addChild": "添加子模型", "re.model.grid.toolbar.deepClone.tip": "您确定要深度复制模型吗?", "re.model.grid.toolbar.generateGroovySourceCode": "生成脚本代码", - "re.model.grid.toolbar.generateGroovySourceCode4TestCase": "生成脚本代码(测试用例)", "re.model.grid.entity.resource": "资源", "re.model.grid.entity.executeMode": "执行模式", @@ -197,7 +196,7 @@ "re.lib.grid.toolbar.deepClone.tip": "您确定要深度复制特征库吗?", "re.lib.grid.toolbar.deepCloneNew": "深度复制(新)", "re.lib.grid.toolbar.deepCloneNew.tip": "您确定要深度复制特征库成一个新的特征库吗?", - "re.lib.grid.toolbar.generateGroovy": "生成脚本源代码", + "re.lib.grid.toolbar.generateGroovySourceCode": "生成脚本代码", "re.lib.grid.toolbar.deploy": "发布", "re.lib.grid.toolbar.deploy.tip": "您确定要发布特征库吗?", "re.lib.grid.toolbar.importGroup": "导入", diff --git a/io.sc.engine.rule.frontend/src/views/dictionary/dictionary.vue b/io.sc.engine.rule.frontend/src/views/dictionary/dictionary.vue index 59f25faa..ede9968e 100644 --- a/io.sc.engine.rule.frontend/src/views/dictionary/dictionary.vue +++ b/io.sc.engine.rule.frontend/src/views/dictionary/dictionary.vue @@ -362,7 +362,19 @@ ]" :columns="[ { width: 140, name: 'code', label: $t('code') }, - { width: 260, name: 'name', label: $t('name') }, + { + width: 260, + name: 'name', + label: $t('name'), + format: (value: any, row: any) => { + if (value) { + if (!Tools.isNill(row.tab)) { + return '' + value + ''; + } + } + return value; + }, + }, ...valueTypeManager.getColumns(), { width: 200, @@ -382,6 +394,7 @@ colsNum: 1, fields: [ { name: 'dictionary', label: $t('dictionary'), type: 'w-text', showIf: false, defaultValue: currentSelectedDictionaryIdRef }, + { name: 'tab', label: $t('tab'), type: 'w-integer' }, { name: 'code', label: $t('code'), type: 'w-text', requiredIf: true }, { name: 'name', label: $t('name'), type: 'w-text', requiredIf: true }, { name: 'description', label: $t('description'), type: 'w-text' }, @@ -420,7 +433,7 @@ (args: any) => { valueTypeManager.afterEditorOpen(args); autoCompletionManager.load( - Environment.apiContextPath('/api/re/common/listParameterAndValueTypeByDictionaryId/' + currentSelectedDictionaryIdRef), + Environment.apiContextPath('/api/re/common/parameterAndValueType/findByDictionaryId/' + currentSelectedDictionaryIdRef), ); userDefinedFunctionsManager.load(); } @@ -506,7 +519,7 @@ diff --git a/io.sc.engine.rule.frontend/src/views/resources/ImportSampleDialog.vue b/io.sc.engine.rule.frontend/src/views/resources/ImportSampleDialog.vue index 35f072dd..451e45cd 100644 --- a/io.sc.engine.rule.frontend/src/views/resources/ImportSampleDialog.vue +++ b/io.sc.engine.rule.frontend/src/views/resources/ImportSampleDialog.vue @@ -4,7 +4,7 @@ { + afterClick: (args: any) => { + console.log('>>>>>>1', args.grid.getEditorForm()); args.grid.getEditorForm().setFieldValue('type', 'FOLDER'); + console.log('>>>>>>2'); }, }, { extend: 'addChild', label: $t('re.resources.grid.toolbar.addChild'), - enableIf: (args) => { + enableIf: (args: any) => { return args.selected && args.selected.type === 'FOLDER'; }, - afterClick: (args) => { + afterClick: (args: any) => { args.grid.getEditorForm().setFieldValue('type', 'FOLDER'); }, }, @@ -55,10 +57,10 @@ name: 'addModel', label: $t('re.resources.grid.toolbar.addModel'), icon: 'bi-boxes', - enableIf: (args) => { + enableIf: (args: any) => { return args.selected && args.selected.type === 'FOLDER'; }, - afterClick: (args) => { + afterClick: (args: any) => { args.grid.getEditorForm().setFieldValue('type', 'MODEL'); }, }, @@ -69,10 +71,10 @@ name: 'deepClone', label: $t('deepClone'), icon: 'bi-copy', - enableIf: (args) => { + enableIf: (args: any) => { return args.selected && args.selected.type !== 'FOLDER'; }, - click: (args) => { + click: (args: any) => { DialogManager.confirm($t('re.resources.grid.toolbar.deepClone.tip'), () => { axios.post(Environment.apiContextPath('/api/re/resource/deepClone/' + args.selected.id)).then(() => { treeGridRef.refresh(); @@ -85,10 +87,10 @@ name: 'deepCloneNew', label: $t('re.resources.grid.toolbar.deepCloneNew'), icon: 'bi-copy', - enableIf: (args) => { + enableIf: (args: any) => { return args.selected && args.selected.type !== 'FOLDER'; }, - click: (args) => { + click: (args: any) => { DialogManager.confirm($t('re.resources.grid.toolbar.deepCloneNew.tip'), () => { axios.post(Environment.apiContextPath('/api/re/resource/deepCloneNew/' + args.selected.id)).then(() => { treeGridRef.refresh(); @@ -104,10 +106,10 @@ name: 'design', label: $t('re.resources.grid.toolbar.design'), icon: 'bi-vector-pen', - enableIf: (args) => { + enableIf: (args: any) => { return args.selected && args.selected.type !== 'FOLDER'; }, - click: (args) => { + click: (args: any) => { designerDialogRef.open(args.selected); }, }, @@ -116,7 +118,7 @@ name: 'deploy', label: $t('deploy'), icon: 'bi-balloon', - enableIf: (args) => { + enableIf: (args: any) => { return args.selected && args.selected.type !== 'FOLDER'; }, click: undefined, @@ -125,10 +127,10 @@ name: 'online', label: $t('re.resources.grid.toolbar.deploy.online'), icon: 'bi-arrow-up-right-circle', - enableIf: (args) => { + enableIf: (args: any) => { return args.selected && args.selected.type !== 'FOLDER' && args.selected.status !== 'ON_LINE'; }, - click: (args) => { + click: (args: any) => { currentSelectedResourceIdRef = args.selected.id; axios.get(Environment.apiContextPath('/api/parameter/list/parameter.re.server.deploy.approve.workflow.enable')).then((response) => { if (response.data === 'true') { @@ -149,10 +151,10 @@ name: 'offline', label: $t('re.resources.grid.toolbar.deploy.offline'), icon: 'bi-arrow-down-right-circle', - enableIf: (args) => { + enableIf: (args: any) => { return args.selected && args.selected.type !== 'FOLDER' && args.selected.status === 'ON_LINE'; }, - click: (args) => { + click: (args: any) => { currentSelectedResourceIdRef = args.selected.id; axios.get(Environment.apiContextPath('/api/parameter/list/parameter.re.server.deploy.approve.workflow.enable')).then((response) => { if (response.data === 'true') { @@ -174,10 +176,10 @@ name: 'attachment', label: $t('attachment'), icon: 'bi-briefcase-fill', - enableIf: (args) => { + enableIf: (args: any) => { return args.selected && args.selected.type !== 'FOLDER'; }, - click: (args) => { + click: (args: any) => { if (args.selected) { foreignValueRef = args.selected.id; attachmentDialogRef.open(); @@ -188,7 +190,7 @@ name: 'compare', label: $t('compare'), icon: 'bi-code', - enableIf: (args) => { + enableIf: (args: any) => { return args.tickeds && args.tickeds.length === 2; }, click: () => {}, @@ -200,7 +202,7 @@ name: 'viewBloodRelationship', label: $t('re.resources.grid.toolbar.viewBloodRelationship'), icon: 'hub', - enableIf: (args) => { + enableIf: (args: any) => { return args.selected && args.selected.type !== 'FOLDER'; }, click: (args) => { @@ -220,7 +222,7 @@ name: 'import', label: $t('import'), icon: 'file_upload', - click: () => { + click: (args: any) => { importDialogRef.open(); }, }, @@ -228,17 +230,17 @@ name: 'importExample', label: $t('re.resources.grid.toolbar.importExample'), icon: 'bi-database-up', - click: () => { + click: (args: any) => { importSampleDialogRef.open(); }, }, 'separator', { extend: 'export', - enableIf: (args) => { + enableIf: (args: any) => { return args.selected; }, - click: (args) => { + click: (args: any) => { Downloader.get(Environment.apiContextPath('/api/re/resource/export/' + args.selected.id), { loading: true }); }, }, @@ -279,7 +281,7 @@ label: $t('attachment'), sortable: false, align: 'right', - format: (value) => { + format: (value: any, row: any) => { if (value > 0) { return value; } else { @@ -300,7 +302,7 @@ name: 'code', label: $t('code'), type: 'w-text', - showIf: (args) => { + showIf: (args: any) => { const type = args.form.getFieldValue('type'); return type === 'MODEL' || type === 'SCORE_CARD'; }, @@ -315,7 +317,7 @@ lineWrap: true, lineBreak: false, toolbar: false, - showIf: (args) => { + showIf: (args: any) => { const type = args.form.getFieldValue('type'); return type === 'MODEL' || type === 'SCORE_CARD'; }, @@ -346,7 +348,7 @@ }, }" @row-db-click=" - (args) => { + (args: any) => { if (args.row.type !== 'FOLDER') { designerDialogRef.open(args.row); // router.push({ diff --git a/io.sc.engine.rule.frontend/src/views/resources/designer/Model.vue b/io.sc.engine.rule.frontend/src/views/resources/designer/Model.vue index 4e8a47fd..554061f8 100644 --- a/io.sc.engine.rule.frontend/src/views/resources/designer/Model.vue +++ b/io.sc.engine.rule.frontend/src/views/resources/designer/Model.vue @@ -13,7 +13,7 @@ :checkbox-selection="false" :tree="true" :tree-icon=" - (row) => { + (row: any) => { return { name: 'folder', color: 'amber' }; } " @@ -28,27 +28,27 @@ { extend: 'addChild', label: $t('re.model.grid.toolbar.addChild'), - enableIf: (arg) => { + enableIf: (args: any) => { return !readOnly; }, }, 'separator', { extend: 'clone', - enableIf: (arg) => { - return !readOnly && arg.selected && arg.selected.parent; + enableIf: (args: any) => { + return !readOnly && args.selected && args.selected.parent; }, }, { name: 'deepClone', label: $t('deepClone'), icon: 'bi-copy', - enableIf: (arg) => { - return !readOnly && arg.selected && arg.selected.parent; + enableIf: (args: any) => { + return !readOnly && args.selected && args.selected.parent; }, - click: (arg) => { + click: (args: any) => { DialogManager.confirm($t('re.model.grid.toolbar.deepClone.tip'), () => { - axios.post(Environment.apiContextPath('/api/re/model/deepClone/' + arg.selected.id)).then(() => { + axios.post(Environment.apiContextPath('/api/re/model/deepClone/' + args.selected.id)).then(() => { treeGridRef.refresh(); }); }); @@ -57,14 +57,14 @@ 'separator', { extend: 'edit', - enableIf: (arg) => { - return !readOnly && arg.selected; + enableIf: (args: any) => { + return !readOnly && args.selected; }, }, { extend: 'remove', - enableIf: (arg) => { - return !readOnly && arg.selected; + enableIf: (args: any) => { + return !readOnly && args.selected; }, }, 'separator', @@ -72,28 +72,11 @@ name: 'generateGroovySourceCode', label: $t('re.model.grid.toolbar.generateGroovySourceCode'), icon: 'bi-code', - enableIf: (arg) => { - return !readOnly && arg.selected; + enableIf: (args: any) => { + return !readOnly && args.selected; }, - click: (arg) => { - axios.post(Environment.apiContextPath('/api/re/executable/generateGroovySourceCode/' + resource.id), {}, { loading: true }).then((response) => { - sourceCodeDialogRef.open(response.data.source); - }); - }, - }, - { - name: 'generateGroovySourceCode4TestCase', - label: $t('re.model.grid.toolbar.generateGroovySourceCode4TestCase'), - icon: 'bi-code', - enableIf: (arg) => { - return !readOnly && arg.selected; - }, - click: (arg) => { - axios - .post(Environment.apiContextPath('/api/re/resource/generateGroovySourceCodeForTest/' + resource.id), {}, { loading: true }) - .then((response) => { - sourceCodeDialogRef.open(response.data.source); - }); + click: (args: any) => { + sourceCodeDialogRef.open(); }, }, 'separator', @@ -116,7 +99,7 @@ label: $t('re.model.grid.entity.executeMode'), align: 'center', sortable: false, - format: (value) => { + format: (value: any, row: any) => { if (value === 'UP_DOWN') { return { componentType: 'QIcon', @@ -175,7 +158,11 @@ }" v-bind="attrs" > - + diff --git a/io.sc.standard.frontend/src/views/standard/Industry.vue b/io.sc.standard.frontend/src/views/standard/Industry.vue index b714d96c..52742b94 100644 --- a/io.sc.standard.frontend/src/views/standard/Industry.vue +++ b/io.sc.standard.frontend/src/views/standard/Industry.vue @@ -6,6 +6,7 @@ :config-button="true" selection="multiple" :checkbox-selection="true" + db-click-operation="edit" dense :tree="true" :tree-icon=" diff --git a/io.sc.standard.frontend/src/views/standard/LoanProduct.vue b/io.sc.standard.frontend/src/views/standard/LoanProduct.vue index 2a9117cd..3847f42a 100644 --- a/io.sc.standard.frontend/src/views/standard/LoanProduct.vue +++ b/io.sc.standard.frontend/src/views/standard/LoanProduct.vue @@ -6,6 +6,7 @@ :config-button="true" selection="multiple" :checkbox-selection="true" + db-click-operation="edit" dense :tree="true" :tree-icon=" diff --git a/io.sc.standard.frontend/src/views/standard/PerformanceStatus.vue b/io.sc.standard.frontend/src/views/standard/PerformanceStatus.vue index 62218e9f..aebcc188 100644 --- a/io.sc.standard.frontend/src/views/standard/PerformanceStatus.vue +++ b/io.sc.standard.frontend/src/views/standard/PerformanceStatus.vue @@ -5,6 +5,7 @@ :config-button="true" selection="multiple" :checkbox-selection="true" + db-click-operation="edit" :tree="false" dense primary-key="code" diff --git a/io.sc.standard.frontend/src/views/standard/TradeFinanceProduct.vue b/io.sc.standard.frontend/src/views/standard/TradeFinanceProduct.vue index e1805927..3111ae5d 100644 --- a/io.sc.standard.frontend/src/views/standard/TradeFinanceProduct.vue +++ b/io.sc.standard.frontend/src/views/standard/TradeFinanceProduct.vue @@ -6,6 +6,7 @@ :config-button="true" selection="multiple" :checkbox-selection="true" + db-click-operation="edit" dense :tree="false" :tree-icon=" diff --git a/io.sc.standard/src/main/java/io/sc/standard/controller/FinancialReportingSubjectWebController.java b/io.sc.standard/src/main/java/io/sc/standard/controller/FinancialReportingSubjectWebController.java new file mode 100644 index 00000000..9348fcd5 --- /dev/null +++ b/io.sc.standard/src/main/java/io/sc/standard/controller/FinancialReportingSubjectWebController.java @@ -0,0 +1,15 @@ +package io.sc.standard.controller; + +import io.sc.platform.mvc.controller.support.RestCrudController; +import io.sc.standard.api.vo.FinancialReportingSubjectVo; +import io.sc.standard.jpa.entity.FinancialReportingSubjectEntity; +import io.sc.standard.jpa.repository.FinancialReportingSubjectRepository; +import io.sc.standard.service.FinancialReportingSubjectService; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController("io.sc.standard.controller.FinancialReportingSubjectWebController") +@RequestMapping("/api/standard/FinancialReportingSubject") +public class FinancialReportingSubjectWebController extends RestCrudController { + +} diff --git a/io.sc.standard/src/main/java/io/sc/standard/jpa/entity/FinancialReportingSubjectEntity.java b/io.sc.standard/src/main/java/io/sc/standard/jpa/entity/FinancialReportingSubjectEntity.java new file mode 100644 index 00000000..f6803943 --- /dev/null +++ b/io.sc.standard/src/main/java/io/sc/standard/jpa/entity/FinancialReportingSubjectEntity.java @@ -0,0 +1,227 @@ +package io.sc.standard.jpa.entity; + +import io.sc.platform.orm.converter.NumericBooleanConverter; +import io.sc.platform.orm.entity.AuditorEntity; +import io.sc.standard.api.enums.FinancialReportingStandard; +import io.sc.standard.api.enums.FinancialReportingSubjectCategory; +import io.sc.standard.api.enums.FinancialReportingType; +import io.sc.standard.api.vo.FinancialReportingSubjectVo; +import org.hibernate.annotations.GenericGenerator; + +import javax.persistence.*; +import javax.validation.constraints.Size; + +/** + * 一般企业财务报表(新准则: 即适用于已执行新金融准则、新收入准则和新租赁准则的企业) + */ +@Entity(name="io.sc.standard.jpa.entity.FinancialReportingSubjectEntity") +@Table(name="SD_FRS") +public class FinancialReportingSubjectEntity extends AuditorEntity { + @Id + @GeneratedValue(generator = "system-uuid") + @GenericGenerator(name = "system-uuid", strategy = "uuid2") + @Column(name="ID_", length=36) + @Size(max=36) + private String id; + + /** + * 报表适用准则(新旧准则) + */ + @Column(name="STANDARD_") + @Enumerated(EnumType.STRING) + private FinancialReportingStandard standard; + + /** + * 报表模版类型(一般企业、事业单位) + */ + @Column(name="TYPE_") + @Enumerated(EnumType.STRING) + private FinancialReportingType type; + + /** + * 报表项分类(所属表: 资产负债表,利润表,现金流量表) + */ + @Column(name="CATEGORY_") + @Enumerated(EnumType.STRING) + private FinancialReportingSubjectCategory category; + + /** + * 行号(用于显示时界面排序) + */ + @Column(name="ROW_") + private Integer row; + + /** + * 缩进(用于显示时界面缩进) + */ + @Column(name="TAB_") + private Integer tab; + + /** + * 是否具体项, 即该项是否有具体的数值 + */ + @Column(name="HAS_VALUE_") + @Convert(converter= NumericBooleanConverter.class) + private Boolean hasValue; + + @Column(name="CODE_", length=255) + @Size(max=255) + private String code; + + @Column(name="NAME_", length=255) + @Size(max=255) + private String name; + + @Column(name="ENAME_", length=255) + @Size(max=255) + private String ename; + + @Column(name="DESCRIPTION_", length=1024) + @Size(max=1024) + private String description; + + @Column(name="MAPPING_CODE_", length=255) + @Size(max=255) + private String mappingCode; + + @Column(name="MAPPING_NAME_", length=255) + @Size(max=255) + private String mappingName; + + @Column(name="MAPPING_DESCRIPTION_", length=1024) + @Size(max=1024) + private String mappingDescription; + + @Override + public FinancialReportingSubjectVo toVo() { + FinancialReportingSubjectVo vo =new FinancialReportingSubjectVo(); + super.toVo(vo); + vo.setId(this.getId()); + vo.setStandard(this.getStandard()); + vo.setType(this.getType()); + vo.setCategory(this.getCategory()); + vo.setRow(this.getRow()); + vo.setTab(this.getTab()); + vo.setHasValue(this.getHasValue()); + vo.setCode(this.getCode()); + vo.setName(this.getName()); + vo.setEname(this.getEname()); + vo.setDescription(this.getDescription()); + vo.setMappingCode(this.getMappingCode()); + vo.setMappingName(this.getMappingName()); + vo.setMappingDescription(this.getMappingDescription()); + return vo; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public FinancialReportingStandard getStandard() { + return standard; + } + + public void setStandard(FinancialReportingStandard standard) { + this.standard = standard; + } + + public FinancialReportingType getType() { + return type; + } + + public void setType(FinancialReportingType type) { + this.type = type; + } + + public FinancialReportingSubjectCategory getCategory() { + return category; + } + + public void setCategory(FinancialReportingSubjectCategory category) { + this.category = category; + } + + public Integer getRow() { + return row; + } + + public void setRow(Integer row) { + this.row = row; + } + + public Integer getTab() { + return tab; + } + + public void setTab(Integer tab) { + this.tab = tab; + } + + public Boolean getHasValue() { + return hasValue; + } + + public void setHasValue(Boolean hasValue) { + this.hasValue = hasValue; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getEname() { + return ename; + } + + public void setEname(String ename) { + this.ename = ename; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getMappingCode() { + return mappingCode; + } + + public void setMappingCode(String mappingCode) { + this.mappingCode = mappingCode; + } + + public String getMappingName() { + return mappingName; + } + + public void setMappingName(String mappingName) { + this.mappingName = mappingName; + } + + public String getMappingDescription() { + return mappingDescription; + } + + public void setMappingDescription(String mappingDescription) { + this.mappingDescription = mappingDescription; + } +} diff --git a/io.sc.standard/src/main/java/io/sc/standard/jpa/repository/FinancialReportingSubjectRepository.java b/io.sc.standard/src/main/java/io/sc/standard/jpa/repository/FinancialReportingSubjectRepository.java new file mode 100644 index 00000000..f781819e --- /dev/null +++ b/io.sc.standard/src/main/java/io/sc/standard/jpa/repository/FinancialReportingSubjectRepository.java @@ -0,0 +1,9 @@ +package io.sc.standard.jpa.repository; + +import io.sc.platform.orm.repository.DaoRepository; +import io.sc.standard.jpa.entity.FinancialReportingSubjectEntity; +import org.springframework.stereotype.Repository; + +@Repository("io.sc.standard.jpa.repository.FinancialReportingSubject4CompanyNewRepository") +public interface FinancialReportingSubjectRepository extends DaoRepository { +} diff --git a/io.sc.standard/src/main/java/io/sc/standard/service/FinancialReportingSubjectService.java b/io.sc.standard/src/main/java/io/sc/standard/service/FinancialReportingSubjectService.java new file mode 100644 index 00000000..ef39fbd6 --- /dev/null +++ b/io.sc.standard/src/main/java/io/sc/standard/service/FinancialReportingSubjectService.java @@ -0,0 +1,9 @@ +package io.sc.standard.service; + +import io.sc.platform.orm.service.DaoService; +import io.sc.standard.jpa.entity.FinancialReportingSubjectEntity; +import io.sc.standard.jpa.repository.FinancialReportingSubjectRepository; + +public interface FinancialReportingSubjectService extends DaoService { + +} diff --git a/io.sc.standard/src/main/java/io/sc/standard/service/impl/FinancialReportingSubjectServiceImpl.java b/io.sc.standard/src/main/java/io/sc/standard/service/impl/FinancialReportingSubjectServiceImpl.java new file mode 100644 index 00000000..a0148b55 --- /dev/null +++ b/io.sc.standard/src/main/java/io/sc/standard/service/impl/FinancialReportingSubjectServiceImpl.java @@ -0,0 +1,12 @@ +package io.sc.standard.service.impl; + +import io.sc.platform.orm.service.impl.DaoServiceImpl; +import io.sc.standard.jpa.entity.FinancialReportingSubjectEntity; +import io.sc.standard.jpa.repository.FinancialReportingSubjectRepository; +import io.sc.standard.service.FinancialReportingSubjectService; +import org.springframework.stereotype.Service; + +@Service("io.sc.standard.service.impl.FinancialReportingSubject4CompanyNewServiceImpl") +public class FinancialReportingSubjectServiceImpl extends DaoServiceImpl implements FinancialReportingSubjectService { + +} diff --git a/io.sc.standard/src/main/resources/io/sc/standard/liquibase/data/sd_frs.csv b/io.sc.standard/src/main/resources/io/sc/standard/liquibase/data/sd_frs.csv new file mode 100644 index 00000000..30281d7a --- /dev/null +++ b/io.sc.standard/src/main/resources/io/sc/standard/liquibase/data/sd_frs.csv @@ -0,0 +1,446 @@ +"SD_FRS",,,,,,,,,,,,,,,,,,, +"ID_","STANDARD_","TYPE_","CATEGORY_","ROW_","TAB_","HAS_VALUE_","CODE_","NAME_","ENAME_","DESCRIPTION_","MAPPING_CODE_","MAPPING_NAME_","MAPPING_DESCRIPTION_","JPA_VERSION_","DATA_COME_FROM_","CREATOR_","CREATE_DATE_","LAST_MODIFIER_","LAST_MODIFYDATE_" +"ID","会计准则(OLD:旧准则; NEW:新准则)","模版类型(COMPANY:一般企业; INSTITUTION:事业单位)","报表项分类(BALANCE_SHEET_ASSETS:资产表; BALANCE_SHEET_LIABILITIES:负债和所有者权益(或股东权益); INCOME_STATEMENT:利润表; CASH_FLOWS_STATEMENT:现金流量表)","行号(用于显示时界面排序)","缩进(用于显示时界面缩进)","是否有值","代码","名称","名称(英文)","描述","映射代码","映射名称","映射描述","JPA乐观锁版本","","创建人","创建日期","最后修改人","最后修改日期" +"VARCHAR","VARCHAR","VARCHAR","VARCHAR","INTEGER","INTEGER","SMALLINT","VARCHAR","VARCHAR","VARCHAR","VARCHAR","VARCHAR","VARCHAR","VARCHAR","INTEGER","VARCHAR","VARCHAR","TIMESTAMP","VARCHAR","TIMESTAMP" +"java.lang.String","java.lang.String","java.lang.String","java.lang.String","java.lang.Integer","java.lang.Integer","java.lang.Integer","java.lang.String","java.lang.String","java.lang.String","java.lang.String","java.lang.String","java.lang.String","java.lang.String","java.lang.Integer","java.lang.String","java.lang.String","java.sql.Timestamp","java.lang.String","java.sql.Timestamp" +"00d0402f-0ae4-4af4-bdbf-c58ae3c99bcd","OLD","COMPANY","COMPANY_CASH_FLOWS","34","0","1","OCC004","四、汇率变动对现金及现金等价物的影响","the impact of exchange rate changes on cash and cash equivalents",,"OCC004","四、汇率变动对现金及现金等价物的影响",,,"INPUT","admin","2024-12-09 18:09:08.0","admin","2024-12-13 18:43:22.0" +"01c8a43b-1eb5-47e7-a632-0dfea8889712","OLD","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","35","1","1","OCE004","减:库存股","less treasury stock",,"OCE004","减:库存股",,,"INPUT","admin","2024-12-09 17:12:01.0","admin","2024-12-13 18:32:50.0" +"01f152cd-d896-47b9-95e7-8e2348116773","OLD","COMPANY","COMPANY_ASSETS","4","1","1","OCA001003","衍生金融资产","derivative financial assets",,"OCA001003","衍生金融资产",,,"INPUT","admin","2024-12-09 16:13:03.0","admin","2024-12-13 18:28:41.0" +"0228afa6-d9ef-42d7-8e17-9e274f4fa63a","NEW","INSTITUTION","INSTITUTION_CASH_FLOWS","16","1","1","NIC002002","取得投资收益收到的现金","cash received from investment income","“取得投资收益收到的现金”项目,反映单位本年因对外投资而收到被投资单位分配的股利或利润,以及收到投资利息而取得的现金。本项目应当根据“库存现金”、“银行存款”、“应收股利”、“应收利息”、“投资收益”等科目的记录分析填列。","NIC002002","取得投资收益收到的现金","“取得投资收益收到的现金”项目,反映单位本年因对外投资而收到被投资单位分配的股利或利润,以及收到投资利息而取得的现金。本项目应当根据“库存现金”、“银行存款”、“应收股利”、“应收利息”、“投资收益”等科目的记录分析填列。",,"INPUT","admin","2024-12-12 17:31:02.0","admin","2024-12-13 18:13:55.0" +"03401b5d-e8c5-4d9d-bc6d-c83270377668","OLD","COMPANY","COMPANY_PROFIT","3","2","1","OCI001L02","税金及附加","less tax and extra",,"OCI001L02","税金及附加",,,"INPUT","admin","2024-12-09 17:51:16.0","admin","2024-12-13 18:39:21.0" +"0669b0d6-f9d3-4cc8-9af4-0f28e4ddc188","NEW","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","19","2","1","NCL00200201","其中:优先股","preferred stock of bonds",,"NCL00200201","其中:优先股",,,"INPUT","admin","2024-12-09 17:00:43.0","admin","2024-12-13 17:30:33.0" +"0783a141-f961-4253-bb81-777305e8b050","OLD","COMPANY","COMPANY_CASH_FLOWS","6","1","1","OCC001005","支付给职工以及为职工支付的现金","cash paid to and on behalf of employees",,"OCC001005","支付给职工以及为职工支付的现金",,,"INPUT","admin","2024-12-09 18:02:27.0","admin","2024-12-13 18:45:01.0" +"08191e98-aa7c-445e-b633-a6f7ab617830","OLD","COMPANY","COMPANY_PROFIT","4","2","1","OCI001L03","销售费用","less selling expenses",,"OCI001L03","销售费用",,,"INPUT","admin","2024-12-09 17:51:36.0","admin","2024-12-13 18:39:24.0" +"086b8dc3-8c2c-4fb4-bcfb-254848f1e366","NEW","INSTITUTION","INSTITUTION_INCOME_AND_EXPENSES","12","1","1","NII001010","(十)租金收入","rental income","“租金收入”项目,反映单位本期经批准利用国有资产出租取得并按规定纳入本单位预算管理的租金收入。本项目应当根据“租金收入”科目的本期发生额填列。","NII001010","(十)租金收入","“租金收入”项目,反映单位本期经批准利用国有资产出租取得并按规定纳入本单位预算管理的租金收入。本项目应当根据“租金收入”科目的本期发生额填列。",,"INPUT","admin","2024-12-12 17:11:32.0","admin","2024-12-13 18:09:06.0" +"088c9608-1e6f-4ec6-a094-d2a5784398da","NEW","COMPANY","COMPANY_CASH_FLOWS","30","1","1","NCC003005","分配股利、利润或偿付利息支付的现金","cash for the distribution of dividends profits or interest payments",,"NCC003005","分配股利、利润或偿付利息支付的现金",,,"INPUT","admin","2024-12-09 18:07:55.0","admin","2024-12-13 17:44:20.0" +"0a346241-c9ef-41da-90c9-d2f37b1e4029","OLD","COMPANY","COMPANY_ASSETS","20","1","1","OCA002004","长期股权投资","long term equity investment",,"OCA002004","长期股权投资",,,"INPUT","admin","2024-12-09 17:01:09.0","admin","2024-12-13 18:29:57.0" +"0b13c0ac-1827-494a-b76e-b791c840e9c3","NEW","COMPANY","COMPANY_PROFIT","26","1","1","NCI004002","(二)终止经营净利润(净亏损以“-”号填列)","net profit from discontinued operations","“(一)持续经营净利润”和“(二)终止经营净利润”项目,分别反映净利润中与持续经营相关的净利润和与终止经营相关的净利润;如为净亏损,以“-”号填列。该两个项目应按照《企业会计准则第 42 号——持有待售的非流动资产、处置组和终止经营》的相关规定分别列报。","NCI004002","(二)终止经营净利润(净亏损以“-”号填列)","“(一)持续经营净利润”和“(二)终止经营净利润”项目,分别反映净利润中与持续经营相关的净利润和与终止经营相关的净利润;如为净亏损,以“-”号填列。该两个项目应按照《企业会计准则第 42 号——持有待售的非流动资产、处置组和终止经营》的相关规定分别列报。",,"INPUT","admin","2024-12-09 17:57:56.0","admin","2024-12-13 17:38:59.0" +"0be78235-4ea4-418c-beee-a36a85d5c9d8","NEW","COMPANY","COMPANY_CASH_FLOWS","35","0","1","NCC005","五、现金及现金等价物净增加额","net increase in cash and cash equivalents",,"NCC005","五、现金及现金等价物净增加额",,,"INPUT","admin","2024-12-09 18:09:13.0","admin","2024-12-13 17:41:16.0" +"0c3ac84f-bcbb-4496-9075-2164607cd7a2","NEW","INSTITUTION","INSTITUTION_LIABILITIES_AND_NET_ASSETS","24","3","1","NILT","负债合计","total liabilities","“负债合计”项目,反映单位期末负债的合计数。本项目应当根据本表中“流动负债合计”、“非流动负债合计”、“受托代理负债”项目金额的合计数填列。","NILT","负债合计","“负债合计”项目,反映单位期末负债的合计数。本项目应当根据本表中“流动负债合计”、“非流动负债合计”、“受托代理负债”项目金额的合计数填列。",,"INPUT","admin","2024-12-09 17:07:07.0","admin","2024-12-13 18:05:07.0" +"0c3ac84f-bcbb-4496-9075-2164607cd7a9","NEW","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","28","3","1","NCL0020080101","负债合计","total liabilities",,"NCL0020080101","负债合计",,,"INPUT","admin","2024-12-09 17:07:07.0","admin","2024-12-13 17:31:54.0" +"0c714f22-67a5-48e1-9518-602b372ef9ee","NEW","COMPANY","COMPANY_ASSETS","30","1","1","NCA002014","开发支出","development costs",,"NCA002014","开发支出",,,"INPUT","admin","2024-12-09 17:08:22.0","admin","2024-12-13 17:26:44.0" +"0d49d92a-76a9-4777-8c3f-1b81bfd3a9e5","OLD","COMPANY","COMPANY_ASSETS","24","1","1","OCA002006","固定资产","fixed assets","“固定资产”项目,反映资产负债表日企业固定资产的期末账面价值和企业尚未清理完毕的固定资产清理净损益。该项目应根据“固定资产”科目的期末余额,减去“累计折旧”和“固定资产减值准备”科目的期末余额后的金额,以及“固定资产清理”科目的期末余额填列。","OCA002006","固定资产","“固定资产”项目,反映资产负债表日企业固定资产的期末账面价值和企业尚未清理完毕的固定资产清理净损益。该项目应根据“固定资产”科目的期末余额,减去“累计折旧”和“固定资产减值准备”科目的期末余额后的金额,以及“固定资产清理”科目的期末余额填列。",,"INPUT","admin","2024-12-09 17:04:42.0","admin","2024-12-13 18:30:04.0" +"0d4dc66d-1c95-47f1-a263-03ce4a72e7db","NEW","INSTITUTION","INSTITUTION_CASH_FLOWS","4","1","1","NIC001003","事业活动收到的除财政拨款以外的现金","cash received from institution activities other than financial appropriations","“事业活动收到的除财政拨款以外的现金”项目,反映事业单位本年开展专业业务活动及其辅助活动取得的除财政拨款以外的现金。本项目应当根据“库存现金”、“银行存款”、“其他货币资金”、“应收账款”、“应收票据”、“预收账款”、“事业收入”等科目及其所属明细科目的记录分析填列。","NIC001003","事业活动收到的除财政拨款以外的现金","“事业活动收到的除财政拨款以外的现金”项目,反映事业单位本年开展专业业务活动及其辅助活动取得的除财政拨款以外的现金。本项目应当根据“库存现金”、“银行存款”、“其他货币资金”、“应收账款”、“应收票据”、“预收账款”、“事业收入”等科目及其所属明细科目的记录分析填列。",,"INPUT","admin","2024-12-12 17:26:15.0","admin","2024-12-13 18:11:27.0" +"0da4eadc-fd7e-46e0-95a6-3a5f82f0efc8","NEW","INSTITUTION","INSTITUTION_CASH_FLOWS","33","1","1","NIC003006","支付的其他与筹资活动有关的现金","other cash disbursed in connection with fund raising activities","“支付的其他与筹资活动有关的现金”项目,反映单位本年支付的除上述项目之外与筹资活动有关的现金,如融资租入固定资产所支付的租赁费。本项目应当根据“库存现金”、“银行存款”、“长期应付款”等科目的记录分析填列。","NIC003006","支付的其他与筹资活动有关的现金","“支付的其他与筹资活动有关的现金”项目,反映单位本年支付的除上述项目之外与筹资活动有关的现金,如融资租入固定资产所支付的租赁费。本项目应当根据“库存现金”、“银行存款”、“长期应付款”等科目的记录分析填列。",,"INPUT","admin","2024-12-12 17:34:33.0","admin","2024-12-13 18:19:48.0" +"0e80117d-5133-4acb-bb49-5e7a44b8b9b1","NEW","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","24","1","1","NCL002006","递延收益","deferred income","“递延收益”项目中摊销期限只剩一年或不足一年的,或预计在一年内(含一年)进行摊销的部分,不得归类为流动负债,仍在该项目中填列,不转入“一年内到期的非流动负债”项目。","NCL002006","递延收益","“递延收益”项目中摊销期限只剩一年或不足一年的,或预计在一年内(含一年)进行摊销的部分,不得归类为流动负债,仍在该项目中填列,不转入“一年内到期的非流动负债”项目。",,"INPUT","admin","2024-12-09 17:04:50.0","admin","2024-12-13 17:31:27.0" +"0fe19cb4-15cd-45ba-b988-74a3f357785a","NEW","COMPANY","COMPANY_CASH_FLOWS","14","1","1","NCC002003","处置固定资产、无形资产和其他长期资产收回的现金净额","net cash received from disposal of fixed assets intangible assets and other long term assets",,"NCC002003","处置固定资产、无形资产和其他长期资产收回的现金净额",,,"INPUT","admin","2024-12-09 18:04:03.0","admin","2024-12-13 17:42:43.0" +"109b20fc-c281-4e53-8cf3-7d99405aedcf","NEW","COMPANY","COMPANY_CASH_FLOWS","33","3","1","NCC003T","筹资活动产生的现金流量净额","net cash flow from financing activities",,"NCC003T","筹资活动产生的现金流量净额",,,"INPUT","admin","2024-12-09 18:09:02.0","admin","2024-12-13 18:00:48.0" +"1132b1e8-f018-40a2-b348-1c4ffda2889d","OLD","COMPANY","COMPANY_PROFIT","16","0","1","OCI002","二、营业利润(亏损以“-”号填列)","operating profit",,"OCI002","二、营业利润(亏损以“-”号填列)",,,"INPUT","admin","2024-12-09 17:56:14.0","admin","2024-12-13 18:36:49.0" +"11389a24-621d-48aa-9d19-5dd879282994","OLD","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","13","1","1","OCL001011","一年内到期的非流动负债","non current liabilities in a year",,"OCL001011","一年内到期的非流动负债",,,"INPUT","admin","2024-12-09 16:57:39.0","admin","2024-12-13 18:34:54.0" +"11fa66c7-83ce-4e2e-9b7e-6f230d118492","OLD","COMPANY","COMPANY_CASH_FLOWS","30","1","1","OCC003005","分配股利、利润或偿付利息支付的现金","cash for the distribution of dividends profits or interest payments",,"OCC003005","分配股利、利润或偿付利息支付的现金",,,"INPUT","admin","2024-12-09 18:07:55.0","admin","2024-12-13 18:47:18.0" +"1391e8ae-ea62-4e29-a558-483851585a3d","NEW","INSTITUTION","INSTITUTION_LIABILITIES_AND_NET_ASSETS","30","1","1","NIN005","本期盈余*","earnings for the period","“本期盈余”项目,反映单位本年度截至报告期期末实现的累计盈余或亏损。本项目仅在月度报表中列示,年度报表中不列示。月度报表中本项目应当根据“本期盈余”科目的期末余额填列;“本期盈余”科目期末为借方余额时,以“-”号填列。","NIN005","本期盈余*","“本期盈余”项目,反映单位本年度截至报告期期末实现的累计盈余或亏损。本项目仅在月度报表中列示,年度报表中不列示。月度报表中本项目应当根据“本期盈余”科目的期末余额填列;“本期盈余”科目期末为借方余额时,以“-”号填列。",,"INPUT","admin","2024-12-13 16:11:06.0","admin","2024-12-13 18:07:38.0" +"13fa2157-b5db-4d32-89d1-f6d92d7ca079","OLD","COMPANY","COMPANY_PROFIT","8","3","1","OCI001L0601","其中:利息费用","including interest expenses","“财务费用”项目下的“利息费用”项目,反映企业为筹集生产经营所需资金等而发生的应予费用化的利息支出。该项目应根据“财务费用”科目的相关明细科目的发生额分析填列。该项目作为“财务费用”项目的其中项,以正数填列。","OCI001L0601","其中:利息费用","“财务费用”项目下的“利息费用”项目,反映企业为筹集生产经营所需资金等而发生的应予费用化的利息支出。该项目应根据“财务费用”科目的相关明细科目的发生额分析填列。该项目作为“财务费用”项目的其中项,以正数填列。",,"INPUT","admin","2024-12-09 17:52:43.0","admin","2024-12-13 18:39:42.0" +"147b25f3-1399-45f0-bec2-99651219f877","OLD","COMPANY","COMPANY_CASH_FLOWS","21","1","1","OCC002009","支付其他与投资活动有关的现金","payments of other cash related to investment activities",,"OCC002009","支付其他与投资活动有关的现金",,,"INPUT","admin","2024-12-09 18:06:04.0","admin","2024-12-13 18:46:38.0" +"1523ed50-bc99-4222-a61f-b46126d77368","NEW","COMPANY","COMPANY_ASSETS","29","1","1","NCA002013","无形资产","intangible assets",,"NCA002013","无形资产",,,"INPUT","admin","2024-12-09 17:07:26.0","admin","2024-12-13 17:26:40.0" +"15333a2a-aa4a-4570-bbd0-e69775e8db33","NEW","INSTITUTION","INSTITUTION_CASH_FLOWS","14","0","0","NIC002","二、投资活动产生的现金流量:","cash flows from investing activities",,"NIC002","二、投资活动产生的现金流量:",,,"INPUT","admin","2024-12-12 17:30:40.0","admin","2024-12-13 18:13:44.0" +"1590f483-3133-4af2-8b5a-542db4a0cbaf","NEW","INSTITUTION","INSTITUTION_INCOME_AND_EXPENSES","22","1","1","NIE001008","(八)其他费用","other expenses","“其他费用”项目,反映单位本期发生的除以上费用项目外的其他费用的总额。本项目应当根据“其他费用”科目的本期发生额填列。","NIE001008","(八)其他费用","“其他费用”项目,反映单位本期发生的除以上费用项目外的其他费用的总额。本项目应当根据“其他费用”科目的本期发生额填列。",,"INPUT","admin","2024-12-12 17:17:49.0","admin","2024-12-13 18:10:04.0" +"15ed902b-6ee7-4f61-b6cf-dd63a4083058","OLD","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","26","1","1","OCL002007","其他非流动负债","other non current liabilities",,"OCL002007","其他非流动负债",,,"INPUT","admin","2024-12-09 17:05:40.0","admin","2024-12-13 18:36:22.0" +"1628bb13-3c46-4aeb-8098-bddf059a2de4","OLD","COMPANY","COMPANY_PROFIT","2","1","1","OCI001L01","减:营业成本","less perating costs",,"OCI001L01","减:营业成本",,,"INPUT","admin","2024-12-09 17:51:05.0","admin","2024-12-13 18:39:03.0" +"16afde07-df1a-4384-92d8-da0f165c9f6b","NEW","COMPANY","COMPANY_PROFIT","16","2","1","NCI00100204","信用减值损失(损失以“-”号填列)","add credit impairment losses","“信用减值损失”项目,反映企业按照《企业会计准则第 22 号——金融工具确认和计量》(财会〔2017〕7 号)的要求计提的各项金融工具信用减值准备所确认的信用损失。该项目应根据“信用减值损失”科目的发生额分析填列。","NCI00100204","信用减值损失(损失以“-”号填列)","“信用减值损失”项目,反映企业按照《企业会计准则第 22 号——金融工具确认和计量》(财会〔2017〕7 号)的要求计提的各项金融工具信用减值准备所确认的信用损失。该项目应根据“信用减值损失”科目的发生额分析填列。",,"INPUT","admin","2024-12-09 17:55:02.0","admin","2024-12-13 17:37:53.0" +"17933ce2-ee4b-4d8e-9de7-a690e6ac619f","NEW","INSTITUTION","INSTITUTION_INCOME_AND_EXPENSES","15","1","1","NIE001001","(一)业务活动费用","expenses for operational activities","“业务活动费用”项目,反映单位本期为实现其职能目标,依法履职或开展专业业务活动及其辅助活动所发生的各项费用。本项目应当根据“业务活动费用”科目本期发生额填列。","NIE001001","(一)业务活动费用","“业务活动费用”项目,反映单位本期为实现其职能目标,依法履职或开展专业业务活动及其辅助活动所发生的各项费用。本项目应当根据“业务活动费用”科目本期发生额填列。",,"INPUT","admin","2024-12-12 17:13:38.0","admin","2024-12-13 18:09:34.0" +"18064722-49d9-486a-99e7-2357c20c907d","NEW","INSTITUTION","INSTITUTION_LIABILITIES_AND_NET_ASSETS","29","1","1","NIN004","无偿调拨净资产*","transfer of net assets without compensation","“无偿调拨净资产”项目,反映单位本年度截至报告期期末无偿调入的非现金资产价值扣减无偿调出的非现金资产价值后的净值。本项目仅在月度报表中列示,年度报表中不列示。月度报表中本项目应当根据“无偿调拨净资产”科目的期末余额填列;“无偿调拨净资产”科目期末为借方余额时,以“-”号填列。","NIN004","无偿调拨净资产*","“无偿调拨净资产”项目,反映单位本年度截至报告期期末无偿调入的非现金资产价值扣减无偿调出的非现金资产价值后的净值。本项目仅在月度报表中列示,年度报表中不列示。月度报表中本项目应当根据“无偿调拨净资产”科目的期末余额填列;“无偿调拨净资产”科目期末为借方余额时,以“-”号填列。",,"INPUT","admin","2024-12-13 16:09:59.0","admin","2024-12-13 18:07:34.0" +"185dc934-0fab-418d-baaa-f773350bb84b","NEW","INSTITUTION","INSTITUTION_CASH_FLOWS","20","1","1","NIC002005","购建固定资产、无形资产、公共基础设施等支付的现金","cash paid for the purchase and construction of fixed assets intangible assets public infrastructure etc","“购建固定资产、无形资产、公共基础设施等支付的现金”项目,反映单位本年购买和建造固定资产、无形资产、公共基础设施等非流动资产所支付的现金;融资租入固定资产支付的租赁费不在本项目反映,在筹资活动的现金流量中反映。本项目应当根据“库存现金”、“银行存款”、“固定资产”、“工程物资”、“在建工程” 、“无形资产”、“研发支出”、“公共基础设施”、“保障性住房”等科目的记录分析填列。","NIC002005","购建固定资产、无形资产、公共基础设施等支付的现金","“购建固定资产、无形资产、公共基础设施等支付的现金”项目,反映单位本年购买和建造固定资产、无形资产、公共基础设施等非流动资产所支付的现金;融资租入固定资产支付的租赁费不在本项目反映,在筹资活动的现金流量中反映。本项目应当根据“库存现金”、“银行存款”、“固定资产”、“工程物资”、“在建工程” 、“无形资产”、“研发支出”、“公共基础设施”、“保障性住房”等科目的记录分析填列。",,"INPUT","admin","2024-12-12 17:31:53.0","admin","2024-12-13 18:14:15.0" +"18c70882-15cc-42cb-a0a9-d5e25aef88e9","OLD","COMPANY","COMPANY_CASH_FLOWS","14","1","1","OCC002003","处置固定资产、无形资产和其他长期资产收回的现金净额","net cash received from disposal of fixed assets intangible assets and other long term assets",,"OCC002003","处置固定资产、无形资产和其他长期资产收回的现金净额",,,"INPUT","admin","2024-12-09 18:04:03.0","admin","2024-12-13 18:46:09.0" +"198cc469-7b9c-46e2-8a84-6669ca58269c","OLD","COMPANY","COMPANY_PROFIT","37","1","1","OCI007002","(二)稀释每股收益","diluted earnings per share",,"OCI007002","(二)稀释每股收益",,,"INPUT","admin","2024-12-09 17:59:55.0","admin","2024-12-13 18:42:22.0" +"1a7de9c4-93a0-4733-b149-c5e3d5c3f850","NEW","COMPANY","COMPANY_CASH_FLOWS","24","0","0","NCC003","三、筹资活动产生的现金流量:","cash flows from financing activities",,"NCC003","三、筹资活动产生的现金流量:",,,"INPUT","admin","2024-12-09 18:06:25.0","admin","2024-12-13 17:41:06.0" +"1abda260-b529-4d9c-9b6a-1f0c996517a2","NEW","INSTITUTION","INSTITUTION_INCOME_AND_EXPENSES","14","0","1","NIE001","二、本期费用","current expenses","“本期费用”项目,反映单位本期费用总额。本项目应当根据本表中“业务活动费用”、“单位管理费用”、“经营费用”、“资产处置费用”、“上缴上级费用”、“对附属单位补助费用”、“所得税费用”和“其他费用”项目金额的合计数填列。","NIE001","二、本期费用","“本期费用”项目,反映单位本期费用总额。本项目应当根据本表中“业务活动费用”、“单位管理费用”、“经营费用”、“资产处置费用”、“上缴上级费用”、“对附属单位补助费用”、“所得税费用”和“其他费用”项目金额的合计数填列。",,"INPUT","admin","2024-12-12 17:12:59.0","admin","2024-12-13 18:09:25.0" +"1b2fef73-3046-4731-8242-2b04f4f931d6","NEW","INSTITUTION","INSTITUTION_CASH_FLOWS","8","1","1","NIC001005","购买商品、接受劳务支付的现金","cash for the purchase of goods and payment for services","“购买商品、接受劳务支付的现金”项目,反映单位本年在日常活动中用于购买商品、接受劳务支付的现金。本项目应当根据“库存现金”、“银行存款”、“财政拨款收入”、“零余额账户用款额度”、“预付账款”、“在途物品”、“库存物品”、“应付账款”、“应付票据”、“业务活动费用”、“单位管理费用”、“经营费用”等科目及其所属明细科目的记录分析填列。","NIC001005","购买商品、接受劳务支付的现金","“购买商品、接受劳务支付的现金”项目,反映单位本年在日常活动中用于购买商品、接受劳务支付的现金。本项目应当根据“库存现金”、“银行存款”、“财政拨款收入”、“零余额账户用款额度”、“预付账款”、“在途物品”、“库存物品”、“应付账款”、“应付票据”、“业务活动费用”、“单位管理费用”、“经营费用”等科目及其所属明细科目的记录分析填列。",,"INPUT","admin","2024-12-12 17:29:04.0","admin","2024-12-13 18:12:07.0" +"1ba8dff5-80e2-404e-987b-c59655fce46d","NEW","COMPANY","COMPANY_PROFIT","15","2","1","NCI00100203","公允价值变动收益(损失以“-”号填列)","add income of fair value change","“其他权益工具投资公允价值变动”项目,反映企业指定为以公允价值计量且其变动计入其他综合收益的非交易性权益工具投资发生的公允价值变动。该项目应根据“其他综合收益”科目的相关明细科目的发生额分析填列。","NCI00100203","公允价值变动收益(损失以“-”号填列)","“其他权益工具投资公允价值变动”项目,反映企业指定为以公允价值计量且其变动计入其他综合收益的非交易性权益工具投资发生的公允价值变动。该项目应根据“其他综合收益”科目的相关明细科目的发生额分析填列。",,"INPUT","admin","2024-12-09 17:54:48.0","admin","2024-12-13 17:37:48.0" +"1c1666e2-863d-4d6e-8450-e6ff72ba4b74","OLD","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","3","1","1","OCL001003","衍生金融负债","derivative financial liabilities",,"OCL001003","衍生金融负债",,,"INPUT","admin","2024-12-09 16:54:57.0","admin","2024-12-13 18:34:20.0" +"1c5b08bb-4a39-424e-99ee-0b891d8d8710","OLD","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","32","2","1","OCE002001","其中:优先股","preferred stock of equity instrument",,"OCE002001","其中:优先股",,,"INPUT","admin","2024-12-09 17:09:42.0","admin","2024-12-13 18:32:22.0" +"1c877706-7809-4905-bd3e-5ffaf625e112","OLD","COMPANY","COMPANY_ASSETS","16","1","1","OCA002002","持有至到期投资","held to maturity investments",,"OCA002002","持有至到期投资",,,"INPUT","admin","2024-12-13 14:49:53.0","admin","2024-12-13 18:29:49.0" +"1d17484c-ed62-4075-88e8-13034eb7de11","NEW","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","29","0","0","NCE001","所有者权益(或股东权益):","shareholder equity",,"NCE001","所有者权益(或股东权益):",,,"INPUT","admin","2024-12-09 17:08:03.0","admin","2024-12-13 17:55:02.0" +"1d17484c-ed62-4075-88e8-13034eb7de14","NEW","INSTITUTION","INSTITUTION_LIABILITIES_AND_NET_ASSETS","25","0","0","NIN","净资产:","net assets",,"NIN","净资产:",,,"INPUT","admin","2024-12-09 17:08:03.0","admin","2024-12-13 18:04:09.0" +"1d27cbd6-c436-42c9-8bca-e371aa5a9ce4","NEW","COMPANY","COMPANY_ASSETS","17","1","1","NCA002001","债权投资","securities investment","“债权投资”项目,反映资产负债表日企业以摊余成本计量的长期债权投资的期末账面价值。该项目应根据“债权投资”科目的相关明细科目期末余额,减去“债权投资减值准备”科目中相关减值准备的期末余额后的金额分析填列。自资产负债表日起一年内到期的长期债权投资的期末账面价值,在“一年内到期的非流动资产”项目反映。企业购入的以摊余成本计量的一年内到期的债权投资的期末账面价值,在“其他流动资产”项目反映。","NCA002001","债权投资","“债权投资”项目,反映资产负债表日企业以摊余成本计量的长期债权投资的期末账面价值。该项目应根据“债权投资”科目的相关明细科目期末余额,减去“债权投资减值准备”科目中相关减值准备的期末余额后的金额分析填列。自资产负债表日起一年内到期的长期债权投资的期末账面价值,在“一年内到期的非流动资产”项目反映。企业购入的以摊余成本计量的一年内到期的债权投资的期末账面价值,在“其他流动资产”项目反映。",,"INPUT","admin","2024-12-09 16:59:23.0","admin","2024-12-13 17:25:39.0" +"1e7a6b1e-731d-401f-bea3-cfa4841c9b78","OLD","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","29","0","0","OCE","所有者权益(或股东权益):","shareholder equity",,"OCE","所有者权益(或股东权益):",,,"INPUT","admin","2024-12-09 17:08:03.0","admin","2024-12-13 18:31:51.0" +"1f247f6f-dec9-4c1d-83cf-3e98261ebeb9","NEW","COMPANY","COMPANY_PROFIT","1","0","1","NCI001","一、营业收入","operating income",,"NCI001","一、营业收入",,,"INPUT","admin","2024-12-09 17:50:48.0","admin","2024-12-13 17:34:16.0" +"204accf0-776d-422b-86dd-38313342aa5c","OLD","COMPANY","COMPANY_ASSETS","23","1","1","OCA002005","投资性房地产","investment properties",,"OCA002005","投资性房地产",,,"INPUT","admin","2024-12-09 17:04:21.0","admin","2024-12-13 18:30:00.0" +"214cf558-e1d9-4321-a490-7970c222af2e","OLD","COMPANY","COMPANY_CASH_FLOWS","24","0","0","OCC003","三、筹资活动产生的现金流量:","cash flows from financing activities",,"OCC003","三、筹资活动产生的现金流量:",,,"INPUT","admin","2024-12-09 18:06:25.0","admin","2024-12-13 18:43:18.0" +"21e5a346-dfac-43b4-bd7f-08fa254723d2","NEW","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","2","1","1","NCL001002","交易性金融负债","transactional moneytary liabilities","“交易性金融负债”项目,反映资产负债表日企业承担的交易性金融负债,以及企业持有的指定为以公允价值计量且其变动计入当期损益的金融负债的期末账面价值。该项目应根据“交易性金融负债”科目的相关明细科目的期末余额填列。","NCL001002","交易性金融负债","“交易性金融负债”项目,反映资产负债表日企业承担的交易性金融负债,以及企业持有的指定为以公允价值计量且其变动计入当期损益的金融负债的期末账面价值。该项目应根据“交易性金融负债”科目的相关明细科目的期末余额填列。",,"INPUT","admin","2024-12-09 16:54:36.0","admin","2024-12-13 17:29:04.0" +"21e5a346-dfac-43b4-bd7f-08fa254723d5","NEW","INSTITUTION","INSTITUTION_LIABILITIES_AND_NET_ASSETS","4","1","1","NIL001003","其他应交税费","other tax payable","“其他应交税费”项目,反映单位期末应缴未缴的除增值税以外的税费金额。本项目应当根据“其他应交税费”科目的期末余额填列;如“其他应交税费”科目期末为借方余额,以“-”号填列。","NIL001003","其他应交税费","“其他应交税费”项目,反映单位期末应缴未缴的除增值税以外的税费金额。本项目应当根据“其他应交税费”科目的期末余额填列;如“其他应交税费”科目期末为借方余额,以“-”号填列。",,"INPUT","admin","2024-12-09 16:54:36.0","admin","2024-12-13 18:05:41.0" +"21f400c2-c918-4715-9f12-21ccf4e8f81a","NEW","INSTITUTION","INSTITUTION_CASH_FLOWS","23","1","1","NIC002008","支付的其他与投资活动有关的现金","other cash paid in connection with investment activities","“支付的其他与投资活动有关的现金”项目,反映单位本年支付的除上述项目之外与投资活动有关的现金。对于金额较大的现金流出,应当单列项目反映。本项目应当根据“库存现金”、“银行存款”等有关科目的记录分析填列。","NIC002008","支付的其他与投资活动有关的现金","“支付的其他与投资活动有关的现金”项目,反映单位本年支付的除上述项目之外与投资活动有关的现金。对于金额较大的现金流出,应当单列项目反映。本项目应当根据“库存现金”、“银行存款”等有关科目的记录分析填列。",,"INPUT","admin","2024-12-12 17:32:24.0","admin","2024-12-13 18:14:26.0" +"23048b0f-fe33-41db-aa4d-10d53e6a6690","OLD","COMPANY","COMPANY_PROFIT","27","2","1","OCI00500102","2.权益法下不能转损益的其他综合收益","other comprehensive income that cannot be converted into profit or loss under the equity method",,"OCI00500102","2.权益法下不能转损益的其他综合收益",,,"INPUT","admin","2024-12-13 14:58:30.0","admin","2024-12-13 18:41:42.0" +"237b5496-7b90-4f8b-8043-ad3bb256df53","NEW","COMPANY","COMPANY_CASH_FLOWS","32","2","1","NCC003STO","筹资活动现金流出小计","subtotal cash outflows from financing activities",,"NCC003STO","筹资活动现金流出小计",,,"INPUT","admin","2024-12-09 18:08:55.0","admin","2024-12-13 18:00:41.0" +"23ac1d15-f020-4b6c-8c69-3cfffc3dfe28","OLD","COMPANY","COMPANY_PROFIT","26","2","1","OCI00500101","1.重新计量设定受益计划变动额","remeasurement of changes in defined benefit plans",,"OCI00500101","1.重新计量设定受益计划变动额",,,"INPUT","admin","2024-12-13 14:57:48.0","admin","2024-12-13 18:41:39.0" +"23d1d485-d151-4ae2-9d9f-1c9e3284f3a0","OLD","COMPANY","COMPANY_ASSETS","31","1","1","OCA002012","商誉","goodwill",,"OCA002012","商誉",,,"INPUT","admin","2024-12-09 17:09:05.0","admin","2024-12-13 18:30:30.0" +"25627b27-de40-446f-934a-bcb84db2b4d3","OLD","COMPANY","COMPANY_ASSETS","32","1","1","OCA002013","长期待摊费用","long term deferred assets",,"OCA002013","长期待摊费用",,,"INPUT","admin","2024-12-09 17:09:29.0","admin","2024-12-13 18:30:34.0" +"25f12220-fe59-49c7-89f3-500dbf57ee86","NEW","INSTITUTION","INSTITUTION_LIABILITIES_AND_NET_ASSETS","6","1","1","NIL001005","应付职工薪酬","employee pay payable","“应付职工薪酬”项目,反映单位期末按有关规定应付给职工及为职工支付的各种薪酬。本项目应当根据“应付职工薪酬”科目的期末余额填列。","NIL001005","应付职工薪酬","“应付职工薪酬”项目,反映单位期末按有关规定应付给职工及为职工支付的各种薪酬。本项目应当根据“应付职工薪酬”科目的期末余额填列。",,"INPUT","admin","2024-12-09 16:56:46.0","admin","2024-12-13 18:05:47.0" +"25f12220-fe59-49c7-89f3-500dbf57ee8c","NEW","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","9","1","1","NCL001008","应付职工薪酬","employee pay payable",,"NCL001008","应付职工薪酬",,,"INPUT","admin","2024-12-09 16:56:46.0","admin","2024-12-13 17:29:29.0" +"262417d7-691d-4ee5-9f3f-e735dc9bfcc7","NEW","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","35","1","1","NCE001004","减:库存股","less treasury stock",,"NCE001004","减:库存股",,,"INPUT","admin","2024-12-09 17:12:01.0","admin","2024-12-13 17:55:46.0" +"26326208-ff81-449d-a5d2-acd21b6bc37a","NEW","COMPANY","COMPANY_CASH_FLOWS","25","1","1","NCC003001","吸收投资收到的现金","absorb cash received from investments",,"NCC003001","吸收投资收到的现金",,,"INPUT","admin","2024-12-09 18:06:31.0","admin","2024-12-13 17:43:38.0" +"2638379f-ae11-438b-8c61-b9b98d80c618","OLD","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","24","1","1","OCL002005","递延收益","deferred income","“递延收益”项目中摊销期限只剩一年或不足一年的,或预计在一年内(含一年)进行摊销的部分,不得归类为流动负债,仍在该项目中填列,不转入“一年内到期的非流动负债”项目。","OCL002005","递延收益","“递延收益”项目中摊销期限只剩一年或不足一年的,或预计在一年内(含一年)进行摊销的部分,不得归类为流动负债,仍在该项目中填列,不转入“一年内到期的非流动负债”项目。",,"INPUT","admin","2024-12-09 17:04:50.0","admin","2024-12-13 18:36:13.0" +"2656292d-eaa9-4d32-853f-9ac1e7f53d43","NEW","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","8","1","1","NCL001007","合同负债","contract liabilities","“合同资产”和“合同负债”项目。企业应按照《企业会计准则第 14 号——收入》(财会〔2017〕22 号)的相关规定根据本企业履行履约义务与客户付款之间的关系在资产负债表中列示合同资产或合同负债。“合同资产”项目、“合同负债”项目,应分别根据“合同资产”科目、“合同负债”科目的相关明细科目的期末余额分析填列,同一合同下的合同资产和合同负债应当以净额列示,其中净额为借方余额的,应当根据其流动性在“合同资产”或“其他非流动资产”项目中填列,已计提减值准备的,还应减去“合同资产减值准备”科目中相关的期末余额后的金额填列;其中净额为贷方余额的,应当根据其流动性在“合同负债”或“其他非流动负债”项目中填列。 + +由于同一合同下的合同资产和合同负债应当以净额列示,企业也可以设置“合同结算”科目(或其他类似科目),以核算同一合同下属于在某一时段内履行履约义务涉及与客户结算对价的合同资产或合同负债,并在此科目下设置“合同结算——价款结算”科目反映定期与客户进行结算的金额,设置“合同结算——收入结转”科目反映按履约进度结转的收入金额。资产负债表日,“合同结算”科目的期末余额在借方的,根据其流动性在“合同资产”或“其他非流动资产”项目中填列;期末余额在贷方的,根据其流动性在“合同负债”或“其他非流动负债”项目中填列。","NCL001007","合同负债","“合同资产”和“合同负债”项目。企业应按照《企业会计准则第 14 号——收入》(财会〔2017〕22 号)的相关规定根据本企业履行履约义务与客户付款之间的关系在资产负债表中列示合同资产或合同负债。“合同资产”项目、“合同负债”项目,应分别根据“合同资产”科目、“合同负债”科目的相关明细科目的期末余额分析填列,同一合同下的合同资产和合同负债应当以净额列示,其中净额为借方余额的,应当根据其流动性在“合同资产”或“其他非流动资产”项目中填列,已计提减值准备的,还应减去“合同资产减值准备”科目中相关的期末余额后的金额填列;其中净额为贷方余额的,应当根据其流动性在“合同负债”或“其他非流动负债”项目中填列。 + +由于同一合同下的合同资产和合同负债应当以净额列示,企业也可以设置“合同结算”科目(或其他类似科目),以核算同一合同下属于在某一时段内履行履约义务涉及与客户结算对价的合同资产或合同负债,并在此科目下设置“合同结算——价款结算”科目反映定期与客户进行结算的金额,设置“合同结算——收入结转”科目反映按履约进度结转的收入金额。资产负债表日,“合同结算”科目的期末余额在借方的,根据其流动性在“合同资产”或“其他非流动资产”项目中填列;期末余额在贷方的,根据其流动性在“合同负债”或“其他非流动负债”项目中填列。",,"INPUT","admin","2024-12-09 16:56:35.0","admin","2024-12-13 17:29:25.0" +"2656292d-eaa9-4d32-853f-9ac1e7f53d48","NEW","INSTITUTION","INSTITUTION_LIABILITIES_AND_NET_ASSETS","9","1","1","NIL001008","应付政府补贴款","government subsidy payable","“应付政府补贴款”项目,反映负责发放政府补贴的行政单位期末按照规定应当支付给政府补贴接受者的各种政府补贴款余额。本项目应当根据“应付政府补贴款”科目的期末余额填列。","NIL001008","应付政府补贴款","“应付政府补贴款”项目,反映负责发放政府补贴的行政单位期末按照规定应当支付给政府补贴接受者的各种政府补贴款余额。本项目应当根据“应付政府补贴款”科目的期末余额填列。",,"INPUT","admin","2024-12-09 16:56:35.0","admin","2024-12-13 18:05:58.0" +"285180b5-74b3-497d-9b15-34f2f4f5a5a1","NEW","INSTITUTION","INSTITUTION_CASH_FLOWS","22","1","1","NIC002007","上缴处置固定资产、无形资产、公共基础设施等净收入支付的现金","cash paid from net income from the disposal of fixed assets intangible assets public infrastructure etc","“上缴处置固定资产、无形资产、公共基础设施等净收入支付的现金”项目,反映本年单位将处置固定资产、无形资产、公共基础设施等非流动资产所收回的现金净额予以上缴财政所支付的现金。本项目应当根据“库存现金”、“银行存款”、“应缴财政款”等科目的记录分析填列。","NIC002007","上缴处置固定资产、无形资产、公共基础设施等净收入支付的现金","“上缴处置固定资产、无形资产、公共基础设施等净收入支付的现金”项目,反映本年单位将处置固定资产、无形资产、公共基础设施等非流动资产所收回的现金净额予以上缴财政所支付的现金。本项目应当根据“库存现金”、“银行存款”、“应缴财政款”等科目的记录分析填列。",,"INPUT","admin","2024-12-12 17:32:14.0","admin","2024-12-13 18:14:23.0" +"28f27383-1c34-4663-a059-7665fa6dc5f3","OLD","COMPANY","COMPANY_CASH_FLOWS","9","2","1","OCC001STO","经营活动现金流出小计","subtotal cash outflows from operating activities",,"OCC001STO","经营活动现金流出小计",,,"INPUT","admin","2024-12-09 18:02:57.0","admin","2024-12-13 18:45:17.0" +"2ab7963e-d138-4bff-9989-6f7d69349a01","NEW","COMPANY","COMPANY_ASSETS","34","1","1","NCA002018","其他非流动资产","other non current assets",,"NCA002018","其他非流动资产",,,"INPUT","admin","2024-12-09 17:11:05.0","admin","2024-12-13 17:27:01.0" +"2c0e6ad1-a380-4143-9146-398398ad1b3e","NEW","INSTITUTION","INSTITUTION_INCOME_AND_EXPENSES","11","1","1","NII001009","(九)利息收入","interest income","“利息收入”项目,反映单位本期取得的银行存款利息收入。本项目应当根据“利息收入”科目的本期发生额填列。","NII001009","(九)利息收入","“利息收入”项目,反映单位本期取得的银行存款利息收入。本项目应当根据“利息收入”科目的本期发生额填列。",,"INPUT","admin","2024-12-12 17:11:02.0","admin","2024-12-13 18:09:01.0" +"2c15416a-8801-44bb-b1b2-e19dfd8c4290","OLD","COMPANY","COMPANY_PROFIT","25","1","1","OCI005001","(一)不能重分类进损益的其他综合收益","other comprehensive income that can not be reclassified",,"OCI005001","(一)不能重分类进损益的其他综合收益",,,"INPUT","admin","2024-12-09 17:58:26.0","admin","2024-12-13 18:41:24.0" +"2c6732f3-76ef-4544-8705-710dcd8fe55d","OLD","COMPANY","COMPANY_ASSETS","29","1","1","OCA002010","无形资产","intangible assets",,"OCA002010","无形资产",,,"INPUT","admin","2024-12-09 17:07:26.0","admin","2024-12-13 18:30:20.0" +"2cff99bc-649f-44d0-a74f-577317672fb3","NEW","INSTITUTION","INSTITUTION_CASH_FLOWS","5","1","1","NIC001004","收到的其他与日常活动有关的现金","other cash received in connection with daily activities","“收到的其他与日常活动有关的现金”项目,反映单位本年收到的除以上项目之外的与日常活动有关的现金。本项目应当根据“库存现金”、“银行存款”、“其他货币资金”、“上级补助收入”、“附属单位上缴收入”、“经营收入”、“非同级财政拨款收入”、“捐赠收入”、“利息收入”、“租金收入”、“其他收入”等科目及其所属明细科目的记录分析填列。","NIC001004","收到的其他与日常活动有关的现金","“收到的其他与日常活动有关的现金”项目,反映单位本年收到的除以上项目之外的与日常活动有关的现金。本项目应当根据“库存现金”、“银行存款”、“其他货币资金”、“上级补助收入”、“附属单位上缴收入”、“经营收入”、“非同级财政拨款收入”、“捐赠收入”、“利息收入”、“租金收入”、“其他收入”等科目及其所属明细科目的记录分析填列。",,"INPUT","admin","2024-12-12 17:27:10.0","admin","2024-12-13 18:11:31.0" +"2d3c186e-8480-40ac-af49-5014a66319ce","NEW","INSTITUTION","INSTITUTION_CASH_FLOWS","18","1","1","NIC002004","收到的其他与投资活动有关的现金","other cash received in connection with investing activities","“收到的其他与投资活动有关的现金”项目,反映单位本年收到的除上述项目之外与投资活动有关的现金。对于金额较大的现金流入,应当单列项目反映。本项目应当根据“库存现金”、“银行存款”等有关科目的记录分析填列。","NIC002004","收到的其他与投资活动有关的现金","“收到的其他与投资活动有关的现金”项目,反映单位本年收到的除上述项目之外与投资活动有关的现金。对于金额较大的现金流入,应当单列项目反映。本项目应当根据“库存现金”、“银行存款”等有关科目的记录分析填列。",,"INPUT","admin","2024-12-12 17:31:30.0","admin","2024-12-13 18:14:04.0" +"2e733726-6140-493c-a7d3-570eaa0b5267","OLD","COMPANY","COMPANY_CASH_FLOWS","33","3","1","OCC003T","筹资活动产生的现金流量净额","net cash flow from financing activities",,"OCC003T","筹资活动产生的现金流量净额",,,"INPUT","admin","2024-12-09 18:09:02.0","admin","2024-12-13 18:47:31.0" +"2ea6fec8-29e9-45ed-acd4-82923aac2d9e","OLD","COMPANY","COMPANY_CASH_FLOWS","5","1","1","OCC001004","购买商品、接受劳务支付的现金","cash for the purchase of goods and payment for services",,"OCC001004","购买商品、接受劳务支付的现金",,,"INPUT","admin","2024-12-09 18:02:18.0","admin","2024-12-13 18:44:54.0" +"2f17115f-b0a9-4015-8b1d-e7ee1df04e36","OLD","COMPANY","COMPANY_ASSETS","36","3","1","OCAT","资产总计","total assets",,"OCAT","资产总计",,,"INPUT","admin","2024-12-09 17:15:05.0","admin","2024-12-13 18:30:51.0" +"2f9ab3e8-08f1-4b24-8864-e038419e9973","NEW","COMPANY","COMPANY_CASH_FLOWS","31","1","1","NCC003006","支付其他与筹资活动有关的现金","disbursement of other cash related to fund raising activities",,"NCC003006","支付其他与筹资活动有关的现金",,,"INPUT","admin","2024-12-09 18:08:50.0","admin","2024-12-13 17:44:24.0" +"30e41dfe-f7b3-42da-bacd-7794abd2dae2","NEW","COMPANY","COMPANY_PROFIT","13","5","1","NCI0010020102","以摊余成本计量的金融资产终止确认收益(损失以“-”号填列)","including income on financial assets measured at amortized cost","“以摊余成本计量的金融资产终止确认收益”项目,反映企业因转让等情形导致终止确认以摊余成本计量的金融资产而产生的利得或损失。该项目应根据“投资收益”科目的相关明细科目的发生额分析填列;如为损失,以“-”号填列。","NCI0010020102","以摊余成本计量的金融资产终止确认收益(损失以“-”号填列)","“以摊余成本计量的金融资产终止确认收益”项目,反映企业因转让等情形导致终止确认以摊余成本计量的金融资产而产生的利得或损失。该项目应根据“投资收益”科目的相关明细科目的发生额分析填列;如为损失,以“-”号填列。",,"INPUT","admin","2024-12-09 17:54:04.0","admin","2024-12-13 17:37:28.0" +"31c7b8f5-0d40-4fed-9e2f-85b465fc1000","NEW","INSTITUTION","INSTITUTION_INCOME_AND_EXPENSES","7","1","1","NII001005","(五)经营收入","operating income","“经营收入”项目,反映事业单位本期在专业业务活动及其辅助活动之外开展非独立核算经营活动实现的收入。本项目应当根据“经营收入”科目的本期发生额填列。","NII001005","(五)经营收入","“经营收入”项目,反映事业单位本期在专业业务活动及其辅助活动之外开展非独立核算经营活动实现的收入。本项目应当根据“经营收入”科目的本期发生额填列。",,"INPUT","admin","2024-12-12 17:07:48.0","admin","2024-12-13 18:08:46.0" +"31ce2a14-af83-4213-851d-ccc3c54aed7a","OLD","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","10","1","1","OCL001008","应交税费","tax payable",,"OCL001008","应交税费",,,"INPUT","admin","2024-12-09 16:56:59.0","admin","2024-12-13 18:34:39.0" +"3277a6f2-5618-4731-aa48-db2aab8cc3f5","OLD","COMPANY","COMPANY_PROFIT","23","1","1","OCI004002","(二)终止经营净利润(净亏损以“-”号填列)","net profit from discontinued operations",,"OCI004002","(二)终止经营净利润(净亏损以“-”号填列)",,,"INPUT","admin","2024-12-09 17:57:56.0","admin","2024-12-13 18:41:12.0" +"338a6195-1964-40a3-9526-b1db1da1c0ff","NEW","COMPANY","COMPANY_CASH_FLOWS","0","0","0","NCC001","一、经营活动产生的现金流量:","cash flow from operating activities",,"NCC001","一、经营活动产生的现金流量:",,,"INPUT","admin","2024-12-09 18:00:21.0","admin","2024-12-13 17:40:56.0" +"3454dc5a-2ada-4beb-b469-c9ddf36855d3","OLD","COMPANY","COMPANY_PROFIT","22","1","1","OCI004001","(一)持续经营净利润(净亏损以“-”号填列)","net profit from continuing operations",,"OCI004001","(一)持续经营净利润(净亏损以“-”号填列)",,,"INPUT","admin","2024-12-09 17:57:40.0","admin","2024-12-13 18:41:08.0" +"34a0e339-1098-406e-8df7-90807bfa2cb3","NEW","INSTITUTION","INSTITUTION_INCOME_AND_EXPENSES","10","1","1","NII001008","(八)捐赠收入","donation income","“捐赠收入”项目,反映单位本期接受捐赠取得的收入。本项目应当根据“捐赠收入”科目的本期发生额填列。","NII001008","(八)捐赠收入","“捐赠收入”项目,反映单位本期接受捐赠取得的收入。本项目应当根据“捐赠收入”科目的本期发生额填列。",,"INPUT","admin","2024-12-12 17:10:31.0","admin","2024-12-13 18:08:57.0" +"3518f85f-018b-42e9-a691-073fafe48332","NEW","COMPANY","COMPANY_PROFIT","9","5","1","NCI0010010502","利息收入","including interest income",,"NCI0010010502","利息收入",,,"INPUT","admin","2024-12-09 17:52:57.0","admin","2024-12-13 17:36:45.0" +"362d5901-c0c4-4261-aa7f-d3886865c365","OLD","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","2","1","1","OCL001002","以公允价值计量且其变动计入当期损益的金融负债","financial liabilities at fair value through profit or loss",,"OCL001002","以公允价值计量且其变动计入当期损益的金融负债",,,"INPUT","admin","2024-12-09 16:54:36.0","admin","2024-12-13 18:34:16.0" +"368c0758-b52f-4ebb-87d0-aa9d4e4ab245","NEW","COMPANY","COMPANY_PROFIT","28","1","1","NCI005001","(一)不能重分类进损益的其他综合收益","other comprehensive income that can not be reclassified",,"NCI005001","(一)不能重分类进损益的其他综合收益",,,"INPUT","admin","2024-12-09 17:58:26.0","admin","2024-12-13 17:39:10.0" +"37b1370c-4871-46a9-af8b-cabcca5cf04b","OLD","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","15","2","1","OCL001T","流动负债合计","total current liabilities",,"OCL001T","流动负债合计",,,"INPUT","admin","2024-12-09 16:58:10.0","admin","2024-12-13 18:35:08.0" +"38537eb9-f9f7-47d2-9823-987a2d96d327","OLD","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","27","2","1","OCL002T","非流动负债合计","total non current liabilities",,"OCL002T","非流动负债合计",,,"INPUT","admin","2024-12-09 17:06:19.0","admin","2024-12-13 18:33:47.0" +"38d7f02a-c2c4-456c-a14a-32661efde920","NEW","COMPANY","COMPANY_PROFIT","19","0","1","NCI002","二、营业利润(亏损以“-”号填列)","operating profit",,"NCI002","二、营业利润(亏损以“-”号填列)",,,"INPUT","admin","2024-12-09 17:56:14.0","admin","2024-12-13 17:34:24.0" +"393c0a7f-bd65-4b0d-9089-7a6069f20347","NEW","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","25","1","1","NCL002007","递延所得税负债","deferred income tax liabilities",,"NCL002007","递延所得税负债",,,"INPUT","admin","2024-12-09 17:05:14.0","admin","2024-12-13 17:31:33.0" +"39acc1de-7bf2-4467-a447-f63bb084de40","OLD","COMPANY","COMPANY_ASSETS","33","1","1","OCA002014","递延所得税资产","deferred income tax assets",,"OCA002014","递延所得税资产",,,"INPUT","admin","2024-12-09 17:10:02.0","admin","2024-12-13 18:30:38.0" +"3a1e7352-6a0c-4052-a2da-7164d01977d7","NEW","COMPANY","COMPANY_PROFIT","5","2","1","NCI00100103","管理费用","less general and administrative expenses",,"NCI00100103","管理费用",,,"INPUT","admin","2024-12-09 17:51:57.0","admin","2024-12-13 17:36:15.0" +"3a8f6042-81ac-47a4-8f75-f370cdfc2e85","NEW","INSTITUTION","INSTITUTION_CASH_FLOWS","13","3","1","NIC001T","日常活动产生的现金流量净额","net cash flow from day to day activities","“日常活动产生的现金流量净额”项目,应当按照本表中“日常活动的现金流入小计”项目金额减去“日常活动的现金流出小计”项目金额后的金额填列;如为负数,以“-”号填列。","NIC001T","日常活动产生的现金流量净额","“日常活动产生的现金流量净额”项目,应当按照本表中“日常活动的现金流入小计”项目金额减去“日常活动的现金流出小计”项目金额后的金额填列;如为负数,以“-”号填列。",,"INPUT","admin","2024-12-12 17:30:27.0","admin","2024-12-13 18:12:48.0" +"3aade5be-9f75-42b2-8681-617e3a553c68","OLD","COMPANY","COMPANY_CASH_FLOWS","25","1","1","OCC003001","吸收投资收到的现金","absorb cash received from investments",,"OCC003001","吸收投资收到的现金",,,"INPUT","admin","2024-12-09 18:06:31.0","admin","2024-12-13 18:46:58.0" +"3b2e766c-43e2-4e55-b664-05eb8ddfcb23","OLD","COMPANY","COMPANY_CASH_FLOWS","27","1","1","OCC003003","收到其他与筹资活动有关的现金","other cash received in connection with fund raising activities",,"OCC003003","收到其他与筹资活动有关的现金",,,"INPUT","admin","2024-12-09 18:07:35.0","admin","2024-12-13 18:47:05.0" +"3d477046-2d82-4b11-821f-2851f6bfb4a9","NEW","COMPANY","COMPANY_CASH_FLOWS","4","2","1","NCC001STI","经营活动现金流入小计","sub total of cash flow from operating activities",,"NCC001STI","经营活动现金流入小计",,,"INPUT","admin","2024-12-09 18:01:14.0","admin","2024-12-13 17:59:04.0" +"3d5fa14e-f6b3-494f-8493-a64d113f32ab","NEW","INSTITUTION","INSTITUTION_CASH_FLOWS","12","2","1","NIC001STO","日常活动的现金流出小计","subtotal cash outflows from day to day activities","“日常活动的现金流出小计”项目,反映单位本年日常活动产生的现金流出的合计数。本项目应当根据本表中“购买商品、接受劳务支付的现金”、“支付给职工以及为职工支付的现金”、“支付的各项税费”、“支付的其他与日常活动有关的现金”项目金额的合计数填列。","NIC001STO","日常活动的现金流出小计","“日常活动的现金流出小计”项目,反映单位本年日常活动产生的现金流出的合计数。本项目应当根据本表中“购买商品、接受劳务支付的现金”、“支付给职工以及为职工支付的现金”、“支付的各项税费”、“支付的其他与日常活动有关的现金”项目金额的合计数填列。",,"INPUT","admin","2024-12-12 17:30:15.0","admin","2024-12-13 18:12:40.0" +"3dc1d040-e620-4830-92e3-decca68fb02e","NEW","COMPANY","COMPANY_ASSETS","8","1","1","NCA001007","预付款项","accounts prepaid",,"NCA001007","预付款项",,,"INPUT","admin","2024-12-09 16:20:52.0","admin","2024-12-13 17:22:37.0" +"3f35b71a-21a9-4cd6-a27e-ee7badb15600","NEW","INSTITUTION","INSTITUTION_CASH_FLOWS","24","2","1","NIC002STO","投资活动的现金流出小计","subtotal cash outflows from investing activities","“投资活动的现金流出小计”项目,反映单位本年投资活动产生的现金流出的合计数。本项目应当根据本表中“购建固定资产、无形资产、公共基础设施等支付的现金”、“对外投资支付的现金”、“上缴处置固定资产、无形资产、公共基础设施等净收入支付的现金”、“支付的其他与投资活动有关的现金”项目金额的合计数填列。","NIC002STO","投资活动的现金流出小计","“投资活动的现金流出小计”项目,反映单位本年投资活动产生的现金流出的合计数。本项目应当根据本表中“购建固定资产、无形资产、公共基础设施等支付的现金”、“对外投资支付的现金”、“上缴处置固定资产、无形资产、公共基础设施等净收入支付的现金”、“支付的其他与投资活动有关的现金”项目金额的合计数填列。",,"INPUT","admin","2024-12-12 17:32:37.0","admin","2024-12-13 18:18:59.0" +"3f914a6d-b7a2-4cfa-a336-695e0a790710","NEW","INSTITUTION","INSTITUTION_LIABILITIES_AND_NET_ASSETS","8","1","1","NIL001007","应付账款","account payable","“应付账款”项目,反映单位期末应当支付但尚未支付的偿还期限在 1 年以内(含 1 年)的应付账款的金额。本项目应当根据“应付账款”科目的期末余额填列。","NIL001007","应付账款","“应付账款”项目,反映单位期末应当支付但尚未支付的偿还期限在 1 年以内(含 1 年)的应付账款的金额。本项目应当根据“应付账款”科目的期末余额填列。",,"INPUT","admin","2024-12-09 16:55:38.0","admin","2024-12-13 18:05:54.0" +"3f914a6d-b7a2-4cfa-a336-695e0a790770","NEW","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","6","1","1","NCL001005","应付账款","account payable","“应付账款”项目,反映资产负债表日以摊余成本计量的、企业因购买材料、商品和接受服务等经营活动应支付的款项。该项目应根据“应付账款”和“预付账款”科目所属的相关明细科目的期末贷方余额合计数填列。","NCL001005","应付账款","“应付账款”项目,反映资产负债表日以摊余成本计量的、企业因购买材料、商品和接受服务等经营活动应支付的款项。该项目应根据“应付账款”和“预付账款”科目所属的相关明细科目的期末贷方余额合计数填列。",,"INPUT","admin","2024-12-09 16:55:38.0","admin","2024-12-13 17:29:17.0" +"3fcc5f08-c8b9-4f8a-9920-aa411c363eb8","NEW","COMPANY","COMPANY_PROFIT","18","2","1","NCI00100206","资产处置收益(损失以“-”号填列)","add income of disposal of assets","“资产处置收益”项目,反映企业出售划分为持有待售的非流动资产(金融工具、长期股权投资和投资性房地产除外)或处置组(子公司和业务除外)时确认的处置利得或损失,以及处置未划分为持有待售的固定资产、在建工程、生产性生物资产及无形资产而产生的处置利得或损失。债务重组中因处置非流动资产(金融工具、长期股权投资和投资性房地产除外)产生的利得或损失和非货币性资产交换中换出非流动资产(金融工具、长期股权投资和投资性房地产除外)产生的利得或损失也包括在本项目内。该项目应根据“资产处置损益”科目的发生额分析填列;如为处置损失,以“-”号填列。","NCI00100206","资产处置收益(损失以“-”号填列)","“资产处置收益”项目,反映企业出售划分为持有待售的非流动资产(金融工具、长期股权投资和投资性房地产除外)或处置组(子公司和业务除外)时确认的处置利得或损失,以及处置未划分为持有待售的固定资产、在建工程、生产性生物资产及无形资产而产生的处置利得或损失。债务重组中因处置非流动资产(金融工具、长期股权投资和投资性房地产除外)产生的利得或损失和非货币性资产交换中换出非流动资产(金融工具、长期股权投资和投资性房地产除外)产生的利得或损失也包括在本项目内。该项目应根据“资产处置损益”科目的发生额分析填列;如为处置损失,以“-”号填列。",,"INPUT","admin","2024-12-09 17:55:33.0","admin","2024-12-13 17:38:02.0" +"413ded1f-2374-48f8-b23c-e5de75169176","NEW","COMPANY","COMPANY_CASH_FLOWS","28","2","1","NCC003STI","筹资活动现金流入小计","subtotal cash inflows from financing activities",,"NCC003STI","筹资活动现金流入小计",,,"INPUT","admin","2024-12-09 18:07:42.0","admin","2024-12-13 18:00:29.0" +"439098e1-498f-4a26-80b7-dfb3a0c471ff","OLD","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","22","1","1","OCL002003","长期应付款","long term accounts payable","“长期应付款”项目,反映资产负债表日企业除长期借款和应付债券以外的其他各种长期应付款项的期末账面价值。该项目应根据“长期应付款”科目的期末余额,减去相关的“未确认融资费用”科目的期末余额后的金额,以及“专项应付款”科目的期末余额填列。","OCL002003","长期应付款","“长期应付款”项目,反映资产负债表日企业除长期借款和应付债券以外的其他各种长期应付款项的期末账面价值。该项目应根据“长期应付款”科目的期末余额,减去相关的“未确认融资费用”科目的期末余额后的金额,以及“专项应付款”科目的期末余额填列。",,"INPUT","admin","2024-12-09 17:04:09.0","admin","2024-12-13 18:36:06.0" +"4416bb9d-98f7-4d4d-baca-174b437fc76e","NEW","COMPANY","COMPANY_PROFIT","39","2","1","NCI00500206","6.外币财务报表折算差额","differences in translation of financial statements in foreign currencies",,"NCI00500206","6.外币财务报表折算差额",,,"INPUT","admin","2024-12-13 15:35:20.0","admin","2024-12-13 17:40:11.0" +"45017728-8670-4ff4-9969-4667eaf7675e","NEW","COMPANY","COMPANY_CASH_FLOWS","34","0","1","NCC004","四、汇率变动对现金及现金等价物的影响","the impact of exchange rate changes on cash and cash equivalents",,"NCC004","四、汇率变动对现金及现金等价物的影响",,,"INPUT","admin","2024-12-09 18:09:08.0","admin","2024-12-13 17:41:11.0" +"4536806d-b387-4e4a-ab20-e893a5062a13","NEW","INSTITUTION","INSTITUTION_CASH_FLOWS","30","2","1","NIC003STI","筹资活动的现金流入小计","subtotal of cash inflows from financing activities","“筹资活动的现金流入小计”项目,反映单位本年筹资活动产生的现金流入的合计数。本项目应当根据本表中“财政资本性项目拨款收到的现金”、“取得借款收到的现金”、“收到的其他与筹资活动有关的现金”项目金额的合计数填列。","NIC003STI","筹资活动的现金流入小计","“筹资活动的现金流入小计”项目,反映单位本年筹资活动产生的现金流入的合计数。本项目应当根据本表中“财政资本性项目拨款收到的现金”、“取得借款收到的现金”、“收到的其他与筹资活动有关的现金”项目金额的合计数填列。",,"INPUT","admin","2024-12-12 17:33:48.0","admin","2024-12-13 18:20:12.0" +"46200d3e-bffa-49db-b0b9-68eee555cd11","NEW","INSTITUTION","INSTITUTION_LIABILITIES_AND_NET_ASSETS","17","0","0","NIL002","非流动负债:","non current liabilities",,"NIL002","非流动负债:",,,"INPUT","admin","2024-12-09 16:59:07.0","admin","2024-12-13 18:02:03.0" +"46200d3e-bffa-49db-b0b9-68eee555cd74","NEW","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","16","0","0","NCL002","非流动负债:","non current liabilities",,"NCL002","非流动负债:",,,"INPUT","admin","2024-12-09 16:59:07.0","admin","2024-12-13 17:30:14.0" +"46442456-ffb9-4c31-89d3-d2e0b7498d43","OLD","COMPANY","COMPANY_ASSETS","13","2","1","OCA001T","流动资产合计","total current assets",,"OCA001T","流动资产合计",,,"INPUT","admin","2024-12-09 16:58:29.0","admin","2024-12-13 18:29:31.0" +"47ee4c9a-6dc6-4a91-953c-3ecf22eab12d","OLD","COMPANY","COMPANY_CASH_FLOWS","26","1","1","OCC003002","取得借款收到的现金","obtain cash received from borrowing",,"OCC003002","取得借款收到的现金",,,"INPUT","admin","2024-12-09 18:07:28.0","admin","2024-12-13 18:47:01.0" +"4837bdf4-626b-4cec-9a6b-b6321b64e7ec","OLD","COMPANY","COMPANY_ASSETS","10","1","1","OCA001009","持有待售资产","assets for sale","“持有待售资产”项目,反映资产负债表日划分为持有待售类别的非流动资产及划分为持有待售类别的处置组中的流动资产和非流动资产的期末账面价值。该项目应根据“持有待售资产”科目的期末余额,减去“持有待售资产减值准备”科目的期末余额后的金额填列。","OCA001009","持有待售资产","“持有待售资产”项目,反映资产负债表日划分为持有待售类别的非流动资产及划分为持有待售类别的处置组中的流动资产和非流动资产的期末账面价值。该项目应根据“持有待售资产”科目的期末余额,减去“持有待售资产减值准备”科目的期末余额后的金额填列。",,"INPUT","admin","2024-12-09 16:27:11.0","admin","2024-12-13 18:29:04.0" +"48588c69-1f55-45ce-9635-d3c7836513ff","OLD","COMPANY","COMPANY_CASH_FLOWS","19","1","1","OCC002007","投资支付的现金","cash paid for investment",,"OCC002007","投资支付的现金",,,"INPUT","admin","2024-12-09 18:04:37.0","admin","2024-12-13 18:46:31.0" +"489d1315-cc34-452f-8851-f7447ea8ed90","NEW","INSTITUTION","INSTITUTION_INCOME_AND_EXPENSES","16","1","1","NIE001002","(二)单位管理费用","unit management costs","“单位管理费用”项目,反映事业单位本期本级行政及后勤管理部门开展管理活动发生的各项费用,以及由单位统一负担的离退休人员经费、工会经费、诉讼费、中介费等。本项目应当根据“单位管理费用”科目的本期发生额填列。","NIE001002","(二)单位管理费用","“单位管理费用”项目,反映事业单位本期本级行政及后勤管理部门开展管理活动发生的各项费用,以及由单位统一负担的离退休人员经费、工会经费、诉讼费、中介费等。本项目应当根据“单位管理费用”科目的本期发生额填列。",,"INPUT","admin","2024-12-12 17:14:27.0","admin","2024-12-13 18:09:37.0" +"48d642b1-d338-4349-ae18-2995ff817112","NEW","INSTITUTION","INSTITUTION_LIABILITIES_AND_NET_ASSETS","21","1","1","NIL002004","其他非流动负债","other non current liabilities","“其他非流动负债”项目,反映单位期末除本表中上述各项之外的其他非流动负债的合计数。本项目应当根据有关科目的期末余额合计数填列。","NIL002004","其他非流动负债","“其他非流动负债”项目,反映单位期末除本表中上述各项之外的其他非流动负债的合计数。本项目应当根据有关科目的期末余额合计数填列。",,"INPUT","admin","2024-12-09 17:05:40.0","admin","2024-12-13 18:07:05.0" +"48d642b1-d338-4349-ae18-2995ff8171b4","NEW","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","26","1","1","NCL002008","其他非流动负债","other non current liabilities",,"NCL002008","其他非流动负债",,,"INPUT","admin","2024-12-09 17:05:40.0","admin","2024-12-13 17:31:37.0" +"4a2c4fbc-fca9-4c69-beca-dfdb5da9db6d","OLD","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","0","0","0","OCL001","流动负债:","current liabilities",,"OCL001","流动负债:",,,"INPUT","admin","2024-12-09 16:52:05.0","admin","2024-12-13 18:31:07.0" +"4a52c82e-0bf2-4899-9457-c0dd5d632463","NEW","COMPANY","COMPANY_CASH_FLOWS","12","1","1","NCC002001","收回投资收到的现金","cash received from the investment is recovered",,"NCC002001","收回投资收到的现金",,,"INPUT","admin","2024-12-09 18:03:36.0","admin","2024-12-13 17:42:35.0" +"4ac02f31-a5ef-46f7-8f44-571d947a48ec","NEW","COMPANY","COMPANY_CASH_FLOWS","21","1","1","NCC002009","支付其他与投资活动有关的现金","payments of other cash related to investment activities",,"NCC002009","支付其他与投资活动有关的现金",,,"INPUT","admin","2024-12-09 18:06:04.0","admin","2024-12-13 17:43:18.0" +"4b1b518e-db8c-45dd-8bb9-452d6750e1e4","OLD","COMPANY","COMPANY_ASSETS","5","1","1","OCA001004","应收票据","notes receivable","“应收票据”项目,反映资产负债表日以摊余成本计量的、企业因销售商品、提供服务等收到的商业汇票,包括银行承兑汇票和商业承兑汇票。该项目应根据“应收票据”科目的期末余额,减去“坏账准备”科目中相关坏账准备期末余额后的金额填列。","OCA001004","应收票据","“应收票据”项目,反映资产负债表日以摊余成本计量的、企业因销售商品、提供服务等收到的商业汇票,包括银行承兑汇票和商业承兑汇票。该项目应根据“应收票据”科目的期末余额,减去“坏账准备”科目中相关坏账准备期末余额后的金额填列。",,"INPUT","admin","2024-12-09 16:14:14.0","admin","2024-12-13 18:28:44.0" +"4bba35b1-bd6e-4471-94f4-3e3d9d66ba47","OLD","COMPANY","COMPANY_PROFIT","30","2","1","OCI00500202","2.可供出售金融资产公允价值变动损益","gains or losses on changes in fair value of available for sale financial assets",,"OCI00500202","2.可供出售金融资产公允价值变动损益",,,"INPUT","admin","2024-12-13 14:59:51.0","admin","2024-12-13 18:41:57.0" +"4c82f08b-ae7d-43ed-a5cd-39caef8faa82","OLD","COMPANY","COMPANY_ASSETS","26","1","1","OCA002008","生产性生物资产","productive biological assets",,"OCA002008","生产性生物资产",,,"INPUT","admin","2024-12-09 17:05:25.0","admin","2024-12-13 18:30:10.0" +"4ced75d4-85a3-4a03-b91d-9d90e0f39c12","NEW","COMPANY","COMPANY_CASH_FLOWS","36","1","1","NCC005001","加:期初现金及现金等价物余额","add opening cash and cash equivalents balances",,"NCC005001","加:期初现金及现金等价物余额",,,"INPUT","admin","2024-12-09 18:10:09.0","admin","2024-12-13 17:44:44.0" +"4e3044c7-1b80-4524-b22e-0d2e045bbce0","NEW","INSTITUTION","INSTITUTION_INCOME_AND_EXPENSES","18","1","1","NIE001004","(四)资产处置费用","asset disposal costs","“资产处置费用”项目,反映单位本期经批准处置资产时转销的资产价值以及在处置过程中发生的相关费用或者处置收入小于处置费用形成的净支出。本项目应当根据“资产处置费用”科目的本期发生额填列。","NIE001004","(四)资产处置费用","“资产处置费用”项目,反映单位本期经批准处置资产时转销的资产价值以及在处置过程中发生的相关费用或者处置收入小于处置费用形成的净支出。本项目应当根据“资产处置费用”科目的本期发生额填列。",,"INPUT","admin","2024-12-12 17:15:29.0","admin","2024-12-13 18:09:50.0" +"4e5c76c6-f5d7-4d4b-abaf-2be3dda864f7","OLD","COMPANY","COMPANY_CASH_FLOWS","35","0","1","OCC005","五、现金及现金等价物净增加额","net increase in cash and cash equivalents",,"OCC005","五、现金及现金等价物净增加额",,,"INPUT","admin","2024-12-09 18:09:13.0","admin","2024-12-13 18:43:27.0" +"4ee52b10-406a-4e5c-8f3c-29a64968b355","OLD","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","38","1","1","OCE007","盈余公积","surplus reserve",,"OCE007","盈余公积",,,"INPUT","admin","2024-12-09 17:13:11.0","admin","2024-12-13 18:33:00.0" +"4ffcdf53-1997-4320-8a19-26e6574f0bf9","OLD","COMPANY","COMPANY_ASSETS","27","1","1","OCA002009","油气资产","oil and gas assets",,"OCA002009","油气资产",,,"INPUT","admin","2024-12-09 17:05:51.0","admin","2024-12-13 18:30:14.0" +"5037e458-187c-415f-b38a-d1f6c9af1920","OLD","COMPANY","COMPANY_PROFIT","1","0","1","OCI001","一、营业收入","operating income",,"OCI001","一、营业收入",,,"INPUT","admin","2024-12-09 17:50:48.0","admin","2024-12-13 18:36:43.0" +"5114c8ff-1c41-48db-9208-ce521362f897","NEW","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","40","2","1","NCE001T","所有者权益(或股东权益)合计","total shareholder equity",,"NCE001T","所有者权益(或股东权益)合计",,,"INPUT","admin","2024-12-09 17:13:51.0","admin","2024-12-13 17:56:31.0" +"521d4e69-3e03-4def-9611-43cb945c2a8f","NEW","INSTITUTION","INSTITUTION_LIABILITIES_AND_NET_ASSETS","32","3","1","NILNT","负债和净资产总计","total liabilities and net assets","“负债和净资产总计”项目,应当按照本表中“负债合计”、“净资产合计”项目金额的合计数填列。","NILNT","负债和净资产总计","“负债和净资产总计”项目,应当按照本表中“负债合计”、“净资产合计”项目金额的合计数填列。",,"INPUT","admin","2024-12-12 16:55:30.0","admin","2024-12-13 18:02:57.0" +"5248e1bb-892e-4ecb-9f12-1415047ff976","NEW","COMPANY","COMPANY_CASH_FLOWS","37","0","1","NCC006","六、期末现金及现金等价物余额","closing cash and cash equivalents balances",,"NCC006","六、期末现金及现金等价物余额",,,"INPUT","admin","2024-12-09 18:10:16.0","admin","2024-12-13 17:41:21.0" +"52c54a3f-3bd0-4c4b-a649-ea462bc93ffa","NEW","COMPANY","COMPANY_CASH_FLOWS","8","1","1","NCC001007","支付其他与经营活动有关的现金","payment of other cash related to operating activities",,"NCC001007","支付其他与经营活动有关的现金",,,"INPUT","admin","2024-12-09 18:02:49.0","admin","2024-12-13 17:42:11.0" +"53d78fa9-3acb-43a5-9feb-4f213f5225d0","NEW","COMPANY","COMPANY_ASSETS","24","1","1","NCA002008","固定资产","fixed assets","“固定资产”项目,反映资产负债表日企业固定资产的期末账面价值和企业尚未清理完毕的固定资产清理净损益。该项目应根据“固定资产”科目的期末余额,减去“累计折旧”和“固定资产减值准备”科目的期末余额后的金额,以及“固定资产清理”科目的期末余额填列。","NCA002008","固定资产","“固定资产”项目,反映资产负债表日企业固定资产的期末账面价值和企业尚未清理完毕的固定资产清理净损益。该项目应根据“固定资产”科目的期末余额,减去“累计折旧”和“固定资产减值准备”科目的期末余额后的金额,以及“固定资产清理”科目的期末余额填列。",,"INPUT","admin","2024-12-09 17:04:42.0","admin","2024-12-13 17:26:16.0" +"55225846-e128-4439-8826-912eef47bf35","OLD","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","33","4","1","OCE002002","永续债","perpetual note of equity instrument",,"OCE002002","永续债",,,"INPUT","admin","2024-12-09 17:10:18.0","admin","2024-12-13 18:32:36.0" +"55c1b3fb-d85e-43fe-a804-9061c117692e","NEW","COMPANY","COMPANY_CASH_FLOWS","7","1","1","NCC001006","支付的各项税费","taxes and fees paid",,"NCC001006","支付的各项税费",,,"INPUT","admin","2024-12-09 18:02:37.0","admin","2024-12-13 17:42:06.0" +"56c494ee-d0f1-4f05-b926-ee8985847f0f","NEW","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","41","3","1","NCLET","负债和所有者权益(或股东权益)总计","total liabilities and shareholder equity",,"NCLET","负债和所有者权益(或股东权益)总计",,,"INPUT","admin","2024-12-09 17:14:19.0","admin","2024-12-13 17:56:43.0" +"5728f996-f487-4aa7-ad33-fa95eca05b31","OLD","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","7","1","1","OCL001006","预收款项","unearned revenue",,"OCL001006","预收款项",,,"INPUT","admin","2024-12-09 16:55:57.0","admin","2024-12-13 18:34:30.0" +"573bdbaa-8954-4722-ae70-129f77edd7b6","OLD","COMPANY","COMPANY_CASH_FLOWS","0","0","0","OCC001","一、经营活动产生的现金流量:","cash flow from operating activities",,"OCC001","一、经营活动产生的现金流量:",,,"INPUT","admin","2024-12-09 18:00:21.0","admin","2024-12-13 18:43:06.0" +"583ce4a3-1519-4ff7-9ee5-69d412480e15","NEW","INSTITUTION","INSTITUTION_LIABILITIES_AND_NET_ASSETS","1","0","0","NIL001","流动负债:","current liabilities",,"NIL001","流动负债:",,,"INPUT","admin","2024-12-09 16:52:05.0","admin","2024-12-13 18:01:54.0" +"583ce4a3-1519-4ff7-9ee5-69d412480e58","NEW","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","0","0","0","NCL001","流动负债:","current liabilities",,"NCL001","流动负债:",,,"INPUT","admin","2024-12-09 16:52:05.0","admin","2024-12-13 17:28:35.0" +"5a1089f1-4d57-45e8-9ddc-a7dcbf12171f","NEW","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","32","2","1","NCE00100201","其中:优先股","preferred stock of equity instrument",,"NCE00100201","其中:优先股",,,"INPUT","admin","2024-12-09 17:09:42.0","admin","2024-12-13 17:55:29.0" +"5aba8287-35d0-4491-aaff-cf7f886741d4","OLD","COMPANY","COMPANY_CASH_FLOWS","29","1","1","OCC003004","偿还债务支付的现金","cash payments for debt repayment",,"OCC003004","偿还债务支付的现金",,,"INPUT","admin","2024-12-09 18:07:48.0","admin","2024-12-13 18:47:15.0" +"5b2754fc-8a13-458a-9f84-2bb7ab449eee","NEW","COMPANY","COMPANY_CASH_FLOWS","17","2","1","NCC002STI","投资活动现金流入小计","sub total cash flows from investing activities",,"NCC002STI","投资活动现金流入小计",,,"INPUT","admin","2024-12-09 18:04:25.0","admin","2024-12-13 17:59:34.0" +"5b6de487-8f56-4a5f-9f18-acbe450c3a5d","OLD","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","14","1","1","OCL001012","其他流动负债","other current liabilities",,"OCL001012","其他流动负债",,,"INPUT","admin","2024-12-09 16:57:53.0","admin","2024-12-13 18:34:58.0" +"5c1586ff-2c15-4e56-ab39-2783c4530e17","NEW","INSTITUTION","INSTITUTION_LIABILITIES_AND_NET_ASSETS","18","1","1","NIL002001","长期借款","long term loans payable","“长期借款”项目,反映事业单位期末长期借款的余额。本项目应当根据“长期借款”科目的期末余额减去其中将于 1 年内(含 1年)到期的长期借款余额后的金额填列。","NIL002001","长期借款","“长期借款”项目,反映事业单位期末长期借款的余额。本项目应当根据“长期借款”科目的期末余额减去其中将于 1 年内(含 1年)到期的长期借款余额后的金额填列。",,"INPUT","admin","2024-12-09 16:59:40.0","admin","2024-12-13 18:06:54.0" +"5c1586ff-2c15-4e56-ab39-2783c4530e29","NEW","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","17","1","1","NCL002001","长期借款","long term loans payable",,"NCL002001","长期借款",,,"INPUT","admin","2024-12-09 16:59:40.0","admin","2024-12-13 17:30:24.0" +"5c2c9c32-5d34-4e95-930b-7f3d4da7797d","NEW","INSTITUTION","INSTITUTION_LIABILITIES_AND_NET_ASSETS","23","0","1","NIL003","受托代理负债","fiduciary agent liabilities","“受托代理负债”项目,反映单位期末受托代理负债的金额。本项目应当根据“受托代理负债”科目的期末余额填列。","NIL003","受托代理负债","“受托代理负债”项目,反映单位期末受托代理负债的金额。本项目应当根据“受托代理负债”科目的期末余额填列。",,"INPUT","admin","2024-12-12 16:58:59.0","admin","2024-12-13 18:02:13.0" +"5c3198bf-f735-4c1b-9017-6835a42e9e5c","NEW","INSTITUTION","INSTITUTION_CASH_FLOWS","3","1","1","NIC001002","财政非资本性项目拨款收到的现金","cash received from financial non capital project appropriations","“财政非资本性项目拨款收到的现金”项目,反映单位本年接受除用于购建固定资产、无形资产、公共基础设施等资本性项目以外的财政项目拨款取得的现金。本项目应当根据“银行存款”、“零余额账户用款额度”、“财政拨款收入”等科目及其所属明细科目的记录分析填列。","NIC001002","财政非资本性项目拨款收到的现金","“财政非资本性项目拨款收到的现金”项目,反映单位本年接受除用于购建固定资产、无形资产、公共基础设施等资本性项目以外的财政项目拨款取得的现金。本项目应当根据“银行存款”、“零余额账户用款额度”、“财政拨款收入”等科目及其所属明细科目的记录分析填列。",,"INPUT","admin","2024-12-12 17:24:52.0","admin","2024-12-13 18:11:24.0" +"5e1ef696-6a64-47f1-8ed7-48dfe9a09d9c","NEW","COMPANY","COMPANY_ASSETS","5","1","1","NCA001004","应收票据","notes receivable","“应收票据”项目,反映资产负债表日以摊余成本计量的、企业因销售商品、提供服务等收到的商业汇票,包括银行承兑汇票和商业承兑汇票。该项目应根据“应收票据”科目的期末余额,减去“坏账准备”科目中相关坏账准备期末余额后的金额分析填列。","NCA001004","应收票据","“应收票据”项目,反映资产负债表日以摊余成本计量的、企业因销售商品、提供服务等收到的商业汇票,包括银行承兑汇票和商业承兑汇票。该项目应根据“应收票据”科目的期末余额,减去“坏账准备”科目中相关坏账准备期末余额后的金额分析填列。",,"INPUT","admin","2024-12-09 16:14:14.0","admin","2024-12-13 17:22:22.0" +"5e2ddc9d-bd8d-4e4d-b4eb-dedbcd820513","NEW","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","23","1","1","NCL002005","预计负债","accrued liabilities",,"NCL002005","预计负债",,,"INPUT","admin","2024-12-09 17:04:31.0","admin","2024-12-13 17:31:23.0" +"5e2ddc9d-bd8d-4e4d-b4eb-dedbcd820518","NEW","INSTITUTION","INSTITUTION_LIABILITIES_AND_NET_ASSETS","20","1","1","NIL002003","预计负债","accrued liabilities","“预计负债”项目,反映单位期末已确认但尚未偿付的预计负债的余额。本项目应当根据“预计负债”科目的期末余额填列。","NIL002003","预计负债","“预计负债”项目,反映单位期末已确认但尚未偿付的预计负债的余额。本项目应当根据“预计负债”科目的期末余额填列。",,"INPUT","admin","2024-12-09 17:04:31.0","admin","2024-12-13 18:07:01.0" +"5f52f7d6-6f9f-4584-8548-e894145a8b92","NEW","INSTITUTION","INSTITUTION_CASH_FLOWS","31","1","1","NIC003004","偿还借款支付的现金","repay the cash paid for the borrowing","“偿还借款支付的现金”项目,反映事业单位本年偿还借款本金所支付的现金。本项目应当根据“库存现金”、“银行存款”、“短期借款”、“长期借款”等科目的记录分析填列。","NIC003004","偿还借款支付的现金","“偿还借款支付的现金”项目,反映事业单位本年偿还借款本金所支付的现金。本项目应当根据“库存现金”、“银行存款”、“短期借款”、“长期借款”等科目的记录分析填列。",,"INPUT","admin","2024-12-12 17:34:09.0","admin","2024-12-13 18:19:41.0" +"5fdb798f-1d0f-46c0-bd4b-510087c78f0b","NEW","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","34","1","1","NCE001003","资本公积","capital surplus",,"NCE001003","资本公积",,,"INPUT","admin","2024-12-09 17:11:27.0","admin","2024-12-13 17:55:41.0" +"5fdb798f-1d0f-46c0-bd4b-510087c78f19","NEW","INSTITUTION","INSTITUTION_LIABILITIES_AND_NET_ASSETS","28","1","1","NIN003","权益法调整","equity method adjustments","“权益法调整”项目,反映事业单位期末在被投资单位除净损益和利润分配以外的所有者权益变动中累积享有的份额。本项目应当根据“权益法调整”科目的期末余额填列。如“权益法调整”科目期末为借方余额,以“-”号填列。","NIN003","权益法调整","“权益法调整”项目,反映事业单位期末在被投资单位除净损益和利润分配以外的所有者权益变动中累积享有的份额。本项目应当根据“权益法调整”科目的期末余额填列。如“权益法调整”科目期末为借方余额,以“-”号填列。",,"INPUT","admin","2024-12-09 17:11:27.0","admin","2024-12-13 18:07:31.0" +"603a589b-dcd0-4f7f-a8c2-0e9e70f1c048","OLD","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","20","4","1","OCL00200202","永续债","perpetual note of bonds",,"OCL00200202","永续债",,,"INPUT","admin","2024-12-09 17:01:23.0","admin","2024-12-13 18:35:33.0" +"614956a0-e076-447e-aa74-be3f3b7f4a67","OLD","COMPANY","COMPANY_ASSETS","11","1","1","OCA001010","一年内到期的非流动资产","non current assets in a yaear","“一年内到期的非流动资产”项目,通常反映预计自资产负债表日起一年内变现的非流动资产。对于按照相关会计准则采用折旧(或摊销、折耗)方法进行后续计量的固定资产、无形资产和长期待摊费用等非流动资产,折旧(或摊销、折耗)年限(或期限)只剩一年或不足一年的,或预计在一年内(含一年)进行折旧(或摊销、折耗)的部分,不得归类为流动资产,仍在各该非流动资产项目中填列,不转入“一年内到期的非流动资产”项目。","OCA001010","一年内到期的非流动资产","“一年内到期的非流动资产”项目,通常反映预计自资产负债表日起一年内变现的非流动资产。对于按照相关会计准则采用折旧(或摊销、折耗)方法进行后续计量的固定资产、无形资产和长期待摊费用等非流动资产,折旧(或摊销、折耗)年限(或期限)只剩一年或不足一年的,或预计在一年内(含一年)进行折旧(或摊销、折耗)的部分,不得归类为流动资产,仍在各该非流动资产项目中填列,不转入“一年内到期的非流动资产”项目。",,"INPUT","admin","2024-12-09 16:29:28.0","admin","2024-12-13 18:29:14.0" +"6194e398-e48d-4176-9c3b-853a0fb419d4","NEW","COMPANY","COMPANY_ASSETS","18","1","1","NCA002002","其他债权投资","other ecurities investment","“其他债权投资”项目,反映资产负债表日企业分类为以公允价值计量且其变动计入其他综合收益的长期债权投资的期 +末账面价值。该项目应根据“其他债权投资”科目的相关明细科目的期末余额分析填列。自资产负债表日起一年内到期的长期债权投资的期末账面价值,在“一年内到期的非流动资产”项目反映。企业购入的以公允价值计量且其变动计入其他综合收益的一年内到期的债权投资的期末账面价值,在“其他流动资产”项目反映。","NCA002002","其他债权投资","“其他债权投资”项目,反映资产负债表日企业分类为以公允价值计量且其变动计入其他综合收益的长期债权投资的期 +末账面价值。该项目应根据“其他债权投资”科目的相关明细科目的期末余额分析填列。自资产负债表日起一年内到期的长期债权投资的期末账面价值,在“一年内到期的非流动资产”项目反映。企业购入的以公允价值计量且其变动计入其他综合收益的一年内到期的债权投资的期末账面价值,在“其他流动资产”项目反映。",,"INPUT","admin","2024-12-09 17:00:02.0","admin","2024-12-13 17:25:50.0" +"61fc13fb-97ea-4dad-a0d3-af0dba3d93c0","NEW","COMPANY","COMPANY_CASH_FLOWS","15","1","1","NCC002004","处置子公司及其他营业单位收到的现金净额","net cash received from disposal subsidiaries and other business units",,"NCC002004","处置子公司及其他营业单位收到的现金净额",,,"INPUT","admin","2024-12-09 18:04:11.0","admin","2024-12-13 17:42:47.0" +"627154d1-c554-4f3d-96dc-3b772b44407d","OLD","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","6","1","1","OCL001005","应付账款","account payable","“应付账款”项目,反映资产负债表日以摊余成本计量的、企业因购买材料、商品和接受服务等经营活动应支付的款项。该项目应根据“应付账款”和“预付账款”科目所属的相关明细科目的期末贷方余额合计数填列。","OCL001005","应付账款","“应付账款”项目,反映资产负债表日以摊余成本计量的、企业因购买材料、商品和接受服务等经营活动应支付的款项。该项目应根据“应付账款”和“预付账款”科目所属的相关明细科目的期末贷方余额合计数填列。",,"INPUT","admin","2024-12-09 16:55:38.0","admin","2024-12-13 18:34:27.0" +"62d46f31-3686-4fa4-8cbf-1aa2d48910b9","OLD","COMPANY","COMPANY_ASSETS","3","1","1","OCA001002","以公允价值计量且其变动计入当期损益的金融资产","financial assets at fair value through profit or loss",,"OCA001002","以公允价值计量且其变动计入当期损益的金融资产",,,"INPUT","admin","2024-12-09 16:11:29.0","admin","2024-12-13 18:28:37.0" +"6565b1a7-2eeb-45d3-a133-797299381497","OLD","COMPANY","COMPANY_CASH_FLOWS","3","1","1","OCC001003","收到其他与经营活动有关的现金","cash received relating to other operating activities",,"OCC001003","收到其他与经营活动有关的现金",,,"INPUT","admin","2024-12-09 18:00:48.0","admin","2024-12-13 18:43:48.0" +"65b1661d-e57e-4568-bde6-7b1599655728","OLD","COMPANY","COMPANY_PROFIT","5","2","1","OCI001L04","管理费用","less general and administrative expenses",,"OCI001L04","管理费用",,,"INPUT","admin","2024-12-09 17:51:57.0","admin","2024-12-13 18:39:28.0" +"67a02b09-d1a0-4921-a320-c60f5bfe5d16","OLD","COMPANY","COMPANY_PROFIT","34","0","1","OCI006","六、综合收益总额","total comprehensive income",,"OCI006","六、综合收益总额",,,"INPUT","admin","2024-12-09 17:59:13.0","admin","2024-12-13 18:37:09.0" +"67d95fce-f177-456d-ad80-d7e174b85fe8","NEW","INSTITUTION","INSTITUTION_INCOME_AND_EXPENSES","2","1","1","NII001001","(一)财政拨款收入","fiscal appropriation revenue","“财政拨款收入”项目,反映单位本期从同级政府财政部门取得的各类财政拨款。本项目应当根据“财政拨款收入”科目的本期发生额填列。","NII001001","(一)财政拨款收入","“财政拨款收入”项目,反映单位本期从同级政府财政部门取得的各类财政拨款。本项目应当根据“财政拨款收入”科目的本期发生额填列。",,"INPUT","admin","2024-12-12 17:02:34.0","admin","2024-12-13 18:08:22.0" +"68f46b76-d151-4734-9ba5-f251285b6835","NEW","COMPANY","COMPANY_PROFIT","22","0","1","NCI003","三、利润总额(亏损总额以“-”号填列)","total profit",,"NCI003","三、利润总额(亏损总额以“-”号填列)",,,"INPUT","admin","2024-12-09 17:56:59.0","admin","2024-12-13 17:34:29.0" +"69edb00d-113d-4c25-83a6-13b821cea228","NEW","COMPANY","COMPANY_PROFIT","32","2","1","NCI00500104","4.企业自身信用风险公允价值变动","changes in the fair value of the enterprise own credit risk","“企业自身信用风险公允价值变动”项目,反映企业指定为以公允价值计量且其变动计入当期损益的金融负债,由企业自身信用风险变动引起的公允价值变动而计入其他综合收益的金额。该项目应根据“其他综合收益”科目的相关明细科目的发生额分析填列。","NCI00500104","4.企业自身信用风险公允价值变动","“企业自身信用风险公允价值变动”项目,反映企业指定为以公允价值计量且其变动计入当期损益的金融负债,由企业自身信用风险变动引起的公允价值变动而计入其他综合收益的金额。该项目应根据“其他综合收益”科目的相关明细科目的发生额分析填列。",,"INPUT","admin","2024-12-13 15:33:20.0","admin","2024-12-13 17:39:32.0" +"6a6b3565-b85b-11ef-8a87-0242ac120002","NEW","INSTITUTION","INSTITUTION_ASSETS","40","0","1","NIA003","受托代理资产","fiduciary agent assets","“受托代理资产”项目,反映单位期末受托代理资产的价值。本项目应当根据“受托代理资产”科目的期末余额与“库存现金”、“银行存款”科目下“受托代理资产”明细科目的期末余额的合计数填列。","NIA003","受托代理资产","“受托代理资产”项目,反映单位期末受托代理资产的价值。本项目应当根据“受托代理资产”科目的期末余额与“库存现金”、“银行存款”科目下“受托代理资产”明细科目的期末余额的合计数填列。",,"INPUT","admin","2024-12-12 15:23:11.0","admin","2024-12-13 17:47:02.0" +"6a6b5f37-b85b-11ef-8a87-0242ac120002","NEW","INSTITUTION","INSTITUTION_ASSETS","25","2","1","NIA00200601","减:无形资产累计摊销","less accumulated amortization of intangible assets","“无形资产累计摊销”项目,反映单位期末无形资产已计提的累计摊销金额。本项目应当根据“无形资产累计摊销”科目的期末余额填列。","NIA00200601","减:无形资产累计摊销","“无形资产累计摊销”项目,反映单位期末无形资产已计提的累计摊销金额。本项目应当根据“无形资产累计摊销”科目的期末余额填列。",,"INPUT","admin","2024-12-09 17:08:22.0","admin","2024-12-13 17:47:50.0" +"6a6b638d-b85b-11ef-8a87-0242ac120002","NEW","INSTITUTION","INSTITUTION_ASSETS","34","2","1","NIA00201101","减:保障性住房累计折旧","less accumulated depreciation of affordable housing","“保障性住房累计折旧”项目,反映单位期末控制的保障性住房已计提的累计折旧金额。本项目应当根据“保障性住房累计折旧”科目的期末余额填列。","NIA00201101","减:保障性住房累计折旧","“保障性住房累计折旧”项目,反映单位期末控制的保障性住房已计提的累计折旧金额。本项目应当根据“保障性住房累计折旧”科目的期末余额填列。",,"INPUT","admin","2024-12-12 15:18:15.0","admin","2024-12-13 17:48:37.0" +"6a6b6630-b85b-11ef-8a87-0242ac120002","NEW","INSTITUTION","INSTITUTION_ASSETS","24","1","1","NIA002006","无形资产原值","intangible assets","“无形资产原值”项目,反映单位期末无形资产的原值。本项目应当根据“无形资产”科目的期末余额填列。","NIA002006","无形资产原值","“无形资产原值”项目,反映单位期末无形资产的原值。本项目应当根据“无形资产”科目的期末余额填列。",,"INPUT","admin","2024-12-09 17:07:26.0","admin","2024-12-13 17:47:45.0" +"6a6b692a-b85b-11ef-8a87-0242ac120002","NEW","INSTITUTION","INSTITUTION_ASSETS","33","1","1","NIA002011","保障性住房原值","affordable housing","“保障性住房原值”项目,反映单位期末控制的保障性住房的原值。本项目应当根据“保障性住房”科目的期末余额填列。","NIA002011","保障性住房原值","“保障性住房原值”项目,反映单位期末控制的保障性住房的原值。本项目应当根据“保障性住房”科目的期末余额填列。",,"INPUT","admin","2024-12-12 15:17:09.0","admin","2024-12-13 17:48:32.0" +"6a6b6c8b-b85b-11ef-8a87-0242ac120002","NEW","INSTITUTION","INSTITUTION_ASSETS","18","1","1","NIA002002","长期债权投资","long term securities investment","“长期债券投资”项目,反映事业单位期末持有的长期债券投资的账面余额。本项目应当根据“长期债券投资”科目的期末余额减去其中将于 1 年内(含 1 年)到期的长期债券投资余额后的金额填列。","NIA002002","长期债权投资","“长期债券投资”项目,反映事业单位期末持有的长期债券投资的账面余额。本项目应当根据“长期债券投资”科目的期末余额减去其中将于 1 年内(含 1 年)到期的长期债券投资余额后的金额填列。",,"INPUT","admin","2024-12-09 16:59:23.0","admin","2024-12-13 17:47:18.0" +"6a6b6e40-b85b-11ef-8a87-0242ac120002","NEW","INSTITUTION","INSTITUTION_ASSETS","37","1","1","NIA002013","待处理财产损溢","pending property","“待处理财产损溢”项目,反映单位期末尚未处理完毕的各种资产的净损失或净溢余。本项目应当根据“待处理财产损溢”科目的期末借方余额填列;如“待处理财产损溢”科目期末为贷方余额,以“-”号填列。","NIA002013","待处理财产损溢","“待处理财产损溢”项目,反映单位期末尚未处理完毕的各种资产的净损失或净溢余。本项目应当根据“待处理财产损溢”科目的期末借方余额填列;如“待处理财产损溢”科目期末为贷方余额,以“-”号填列。",,"INPUT","admin","2024-12-09 17:11:05.0","admin","2024-12-13 17:48:50.0" +"6a6b73bf-b85b-11ef-8a87-0242ac120002","NEW","INSTITUTION","INSTITUTION_ASSETS","7","1","1","NIA001006","预付账款","accounts prepaid","“预付账款”项目,反映单位期末预付给商品或者劳务供应单位的款项。本项目应当根据“预付账款”科目的期末余额填列。","NIA001006","预付账款","“预付账款”项目,反映单位期末预付给商品或者劳务供应单位的款项。本项目应当根据“预付账款”科目的期末余额填列。",,"INPUT","admin","2024-12-09 16:20:52.0","admin","2024-12-13 17:45:55.0" +"6a6b74d8-b85b-11ef-8a87-0242ac120002","NEW","INSTITUTION","INSTITUTION_ASSETS","19","1","1","NIA002003","固定资产原值","fixed assets","“固定资产原值”项目,反映单位期末固定资产的原值。本项目应当根据“固定资产”科目的期末余额填列。“固定资产累计折旧”项目,反映单位期末固定资产已计提的累计折旧金额。本项目应当根据“固定资产累计折旧”科目的期末余额填列。“固定资产净值”项目,反映单位期末固定资产的账面价值。本项目应当根据“固定资产”科目期末余额减去“固定资产累计折旧”科目期末余额后的金额填列。","NIA002003","固定资产原值","“固定资产原值”项目,反映单位期末固定资产的原值。本项目应当根据“固定资产”科目的期末余额填列。“固定资产累计折旧”项目,反映单位期末固定资产已计提的累计折旧金额。本项目应当根据“固定资产累计折旧”科目的期末余额填列。“固定资产净值”项目,反映单位期末固定资产的账面价值。本项目应当根据“固定资产”科目期末余额减去“固定资产累计折旧”科目期末余额后的金额填列。",,"INPUT","admin","2024-12-09 17:04:42.0","admin","2024-12-13 17:47:22.0" +"6a6b7680-b85b-11ef-8a87-0242ac120002","NEW","INSTITUTION","INSTITUTION_ASSETS","5","1","1","NIA001004","应收票据","notes receivable","“应收票据”项目,反映事业单位期末持有的应收票据的票面金额。本项目应当根据“应收票据”科目的期末余额填列。","NIA001004","应收票据","“应收票据”项目,反映事业单位期末持有的应收票据的票面金额。本项目应当根据“应收票据”科目的期末余额填列。",,"INPUT","admin","2024-12-09 16:14:14.0","admin","2024-12-13 17:45:48.0" +"6a6b9ab4-b85b-11ef-8a87-0242ac120002","NEW","INSTITUTION","INSTITUTION_ASSETS","20","2","1","NIA00200301","减:固定资产累计折旧","less accumulated depreciation of fixed assets",,"NIA00200301","减:固定资产累计折旧",,,"INPUT","admin","2024-12-09 17:00:02.0","admin","2024-12-13 17:47:28.0" +"6a6b9bc6-b85b-11ef-8a87-0242ac120002","NEW","INSTITUTION","INSTITUTION_ASSETS","17","1","1","NIA002001","长期股权投资","long term equity investment","“长期股权投资”项目,反映事业单位期末持有的长期股权投资的账面余额。本项目应当根据“长期股权投资”科目的期末余额填列。","NIA002001","长期股权投资","“长期股权投资”项目,反映事业单位期末持有的长期股权投资的账面余额。本项目应当根据“长期股权投资”科目的期末余额填列。",,"INPUT","admin","2024-12-09 17:01:09.0","admin","2024-12-13 17:47:15.0" +"6a6b9d0a-b85b-11ef-8a87-0242ac120002","NEW","INSTITUTION","INSTITUTION_ASSETS","29","2","1","NIA00200801","减:公共基础设施累计折旧(摊销)","less accumulated depreciation of public infrastructure","“公共基础设施累计折旧(摊销)”项目,反映单位期末控制的公共基础设施已计提的累计折旧和累计摊销金额。本项目应当根据“公共基础设施累计折旧(摊销)”科目的期末余额填列。","NIA00200801","减:公共基础设施累计折旧(摊销)","“公共基础设施累计折旧(摊销)”项目,反映单位期末控制的公共基础设施已计提的累计折旧和累计摊销金额。本项目应当根据“公共基础设施累计折旧(摊销)”科目的期末余额填列。",,"INPUT","admin","2024-12-09 17:06:39.0","admin","2024-12-13 17:48:10.0" +"6a6ba0eb-b85b-11ef-8a87-0242ac120002","NEW","INSTITUTION","INSTITUTION_ASSETS","9","1","1","NIA001008","应收利息","interest receivable","“应收利息”项目,反映事业单位期末因债券投资等而应收取的利息。事业单位购入的到期一次还本付息的长期债券投资持有期间应收的利息,不包括在本项目内。本项目应当根据“应收利息”科目的期末余额填列。","NIA001008","应收利息","“应收利息”项目,反映事业单位期末因债券投资等而应收取的利息。事业单位购入的到期一次还本付息的长期债券投资持有期间应收的利息,不包括在本项目内。本项目应当根据“应收利息”科目的期末余额填列。",,"INPUT","admin","2024-12-09 16:21:54.0","admin","2024-12-13 17:46:03.0" +"6a6ba92c-b85b-11ef-8a87-0242ac120002","NEW","INSTITUTION","INSTITUTION_ASSETS","38","1","1","NIA002014","其他非流动资产","other non current assets","“其他非流动资产”项目,反映单位期末除本表中上述各项之外的其他非流动资产的合计数。本项目应当根据有关科目的期末余额合计数填列。","NIA002014","其他非流动资产","“其他非流动资产”项目,反映单位期末除本表中上述各项之外的其他非流动资产的合计数。本项目应当根据有关科目的期末余额合计数填列。",,"INPUT","admin","2024-12-12 15:21:51.0","admin","2024-12-13 17:48:54.0" +"6a6ba9be-b85b-11ef-8a87-0242ac120002","NEW","INSTITUTION","INSTITUTION_ASSETS","15","2","1","NIA001T","流动资产合计","total current assets","“流动资产合计”项目,反映单位期末流动资产的合计数。本项目应当根据本表中“货币资金”、“短期投资”、“财政应返还额度”、“应收票据”、“应收账款净额”、“预付账款”、“应收股利”、“应收利息”、“其他应收款净额”、“存货”、“待摊费用”、“一年内到期的非流动资产”、“其他流动资产”项目金额的合计数填列。","NIA001T","流动资产合计","“流动资产合计”项目,反映单位期末流动资产的合计数。本项目应当根据本表中“货币资金”、“短期投资”、“财政应返还额度”、“应收票据”、“应收账款净额”、“预付账款”、“应收股利”、“应收利息”、“其他应收款净额”、“存货”、“待摊费用”、“一年内到期的非流动资产”、“其他流动资产”项目金额的合计数填列。",,"INPUT","admin","2024-12-09 16:58:29.0","admin","2024-12-13 17:51:34.0" +"6a6baa70-b85b-11ef-8a87-0242ac120002","NEW","INSTITUTION","INSTITUTION_ASSETS","6","1","1","NIA001005","应收账款净额","net accounts receivable","“应收账款净额”项目,反映单位期末尚未收回的应收账款减去已计提的坏账准备后的净额。本项目应当根据“应收账款”科目的期末余额,减去“坏账准备”科目中对应收账款计提的坏账准备的期末余额后的金额填列。","NIA001005","应收账款净额","“应收账款净额”项目,反映单位期末尚未收回的应收账款减去已计提的坏账准备后的净额。本项目应当根据“应收账款”科目的期末余额,减去“坏账准备”科目中对应收账款计提的坏账准备的期末余额后的金额填列。",,"INPUT","admin","2024-12-09 16:15:17.0","admin","2024-12-13 17:45:52.0" +"6a6bac27-b85b-11ef-8a87-0242ac120002","NEW","INSTITUTION","INSTITUTION_ASSETS","13","1","1","NIA001012","一年内到期的非流动资产","non current assets in a yaear","“一年内到期的非流动资产”项目,反映单位期末非流动资产项目中将在 1 年内(含 1 年)到期的金额,如事业单位将在 1 年内(含 1 年)到期的长期债券投资金额。本项目应当根据“长期债券投资”等科目的明细科目的期末余额分析填列。","NIA001012","一年内到期的非流动资产","“一年内到期的非流动资产”项目,反映单位期末非流动资产项目中将在 1 年内(含 1 年)到期的金额,如事业单位将在 1 年内(含 1 年)到期的长期债券投资金额。本项目应当根据“长期债券投资”等科目的明细科目的期末余额分析填列。",,"INPUT","admin","2024-12-09 16:29:28.0","admin","2024-12-13 17:46:21.0" +"6a6baeb9-b85b-11ef-8a87-0242ac120002","NEW","INSTITUTION","INSTITUTION_ASSETS","30","2","1","NIA00200802","公共基础设施净值","public infrastructure net value","“公共基础设施净值”项目,反映单位期末控制的公共基础设施的账面价值。本项目应当根据“公共基础设施”科目期末余额减去“公共基础设施累计折旧(摊销)”科目期末余额后的金额填列。","NIA00200802","公共基础设施净值","“公共基础设施净值”项目,反映单位期末控制的公共基础设施的账面价值。本项目应当根据“公共基础设施”科目期末余额减去“公共基础设施累计折旧(摊销)”科目期末余额后的金额填列。",,"INPUT","admin","2024-12-09 17:10:02.0","admin","2024-12-13 17:48:14.0" +"6a6bb003-b85b-11ef-8a87-0242ac120002","NEW","INSTITUTION","INSTITUTION_ASSETS","14","1","1","NIA001013","其他流动资产","other current assets","“其他流动资产”项目,反映单位期末除本表中上述各项之外的其他流动资产的合计金额。本项目应当根据有关科目期末余额的合计数填列。","NIA001013","其他流动资产","“其他流动资产”项目,反映单位期末除本表中上述各项之外的其他流动资产的合计金额。本项目应当根据有关科目期末余额的合计数填列。",,"INPUT","admin","2024-12-09 16:30:32.0","admin","2024-12-13 17:46:25.0" +"6a6bb1a9-b85b-11ef-8a87-0242ac120002","NEW","INSTITUTION","INSTITUTION_ASSETS","10","1","1","NIA001009","其他应收款净额","other receivables","“其他应收款净额”项目,反映单位期末尚未收回的其他应收款减去已计提的坏账准备后的净额。本项目应当根据“其他应收”科目的期末余额减去“坏账准备”科目中对其他应收款计提的坏账准备的期末余额后的金额填列。","NIA001009","其他应收款净额","“其他应收款净额”项目,反映单位期末尚未收回的其他应收款减去已计提的坏账准备后的净额。本项目应当根据“其他应收”科目的期末余额减去“坏账准备”科目中对其他应收款计提的坏账准备的期末余额后的金额填列。",,"INPUT","admin","2024-12-09 16:22:52.0","admin","2024-12-13 17:46:07.0" +"6a6bb259-b85b-11ef-8a87-0242ac120002","NEW","INSTITUTION","INSTITUTION_ASSETS","36","1","1","NIA002012","长期待摊费用","long term amortized expenses","“长期待摊费用”项目,反映单位期末已经支出,但应由本期和以后各期负担的分摊期限在 1 年以上(不含 1 年)的各项费用。本项目应当根据“长期待摊费用”科目的期末余额填列。","NIA002012","长期待摊费用","“长期待摊费用”项目,反映单位期末已经支出,但应由本期和以后各期负担的分摊期限在 1 年以上(不含 1 年)的各项费用。本项目应当根据“长期待摊费用”科目的期末余额填列。",,"INPUT","admin","2024-12-09 17:00:25.0","admin","2024-12-13 17:48:46.0" +"6a6bf869-b85b-11ef-8a87-0242ac120002","NEW","INSTITUTION","INSTITUTION_ASSETS","22","1","1","NIA002004","工程物资","project material","“工程物资”项目,反映单位期末为在建工程准备的各种物资的实际成本。本项目应当根据“工程物资”科目的期末余额填列。","NIA002004","工程物资","“工程物资”项目,反映单位期末为在建工程准备的各种物资的实际成本。本项目应当根据“工程物资”科目的期末余额填列。",,"INPUT","admin","2024-12-09 17:05:25.0","admin","2024-12-13 17:47:37.0" +"6a6bf991-b85b-11ef-8a87-0242ac120002","NEW","INSTITUTION","INSTITUTION_ASSETS","8","1","1","NIA001007","应收股利","dividend receivable","“应收股利”项目,反映事业单位期末因股权投资而应收取的现金股利或应当分得的利润。本项目应当根据“应收股利”科目的期末余额填列。","NIA001007","应收股利","“应收股利”项目,反映事业单位期末因股权投资而应收取的现金股利或应当分得的利润。本项目应当根据“应收股利”科目的期末余额填列。",,"INPUT","admin","2024-12-09 16:16:31.0","admin","2024-12-13 17:45:59.0" +"6a6bfbc9-b85b-11ef-8a87-0242ac120002","NEW","INSTITUTION","INSTITUTION_ASSETS","16","0","0","NIA002","非流动资产:","non current assets",,"NIA002","非流动资产:",,,"INPUT","admin","2024-12-09 16:58:51.0","admin","2024-12-13 17:46:44.0" +"6a6bfcde-b85b-11ef-8a87-0242ac120002","NEW","INSTITUTION","INSTITUTION_ASSETS","4","1","1","NIA001003","财政应返还额度","financial refund","“财政应返还额度”项目,反映单位期末财政应返还额度的金额。本项目应当根据“财政应返还额度”科目的期末余额填列。","NIA001003","财政应返还额度","“财政应返还额度”项目,反映单位期末财政应返还额度的金额。本项目应当根据“财政应返还额度”科目的期末余额填列。",,"INPUT","admin","2024-12-09 16:13:03.0","admin","2024-12-13 17:45:45.0" +"6a6bfdc6-b85b-11ef-8a87-0242ac120002","NEW","INSTITUTION","INSTITUTION_ASSETS","39","2","1","NIA002T","非流动资产合计","total non current assets","“非流动资产合计”项目,反映单位期末非流动资产的合计数。本项目应当根据本表中“长期股权投资”、“长期债券投资”、“固定资产净值”、“工程物资”、“在建工程”、“无形资产净值”、“研发支出”、“公共基础设施净值”、“政府储备物资”、“文物文化资产”、“保障性住房净值”、“长期待摊费用”、“待处理财产损溢”、“其他非流动资产”项目金额的合计数填列。","NIA002T","非流动资产合计","“非流动资产合计”项目,反映单位期末非流动资产的合计数。本项目应当根据本表中“长期股权投资”、“长期债券投资”、“固定资产净值”、“工程物资”、“在建工程”、“无形资产净值”、“研发支出”、“公共基础设施净值”、“政府储备物资”、“文物文化资产”、“保障性住房净值”、“长期待摊费用”、“待处理财产损溢”、“其他非流动资产”项目金额的合计数填列。",,"INPUT","admin","2024-12-09 17:11:45.0","admin","2024-12-13 17:51:53.0" +"6a6bfe55-b85b-11ef-8a87-0242ac120002","NEW","INSTITUTION","INSTITUTION_ASSETS","26","2","1","NIA00200602","无形资产净值","intangible assets net value","“无形资产净值”项目,反映单位期末无形资产的账面价值。本项目应当根据“无形资产”科目期末余额减去“无形资产累计摊销”科目期末余额后的金额填列。","NIA00200602","无形资产净值","“无形资产净值”项目,反映单位期末无形资产的账面价值。本项目应当根据“无形资产”科目期末余额减去“无形资产累计摊销”科目期末余额后的金额填列。",,"INPUT","admin","2024-12-09 17:09:05.0","admin","2024-12-13 17:47:55.0" +"6a6bfeef-b85b-11ef-8a87-0242ac120002","NEW","INSTITUTION","INSTITUTION_ASSETS","27","1","1","NIA002007","研发支出","research and development expenses","“研发支出”项目,反映单位期末正在进行的无形资产开发项目开发阶段发生的累计支出数。本项目应当根据“研发支出”科目的期末余额填列。","NIA002007","研发支出","“研发支出”项目,反映单位期末正在进行的无形资产开发项目开发阶段发生的累计支出数。本项目应当根据“研发支出”科目的期末余额填列。",,"INPUT","admin","2024-12-09 17:03:55.0","admin","2024-12-13 17:47:59.0" +"6a6bff75-b85b-11ef-8a87-0242ac120002","NEW","INSTITUTION","INSTITUTION_ASSETS","32","1","1","NIA002010","文物文化资产","cultural relics and cultural assets","“文物文化资产”项目,反映单位期末控制的文物文化资产的成本。本项目应当根据“文物文化资产”科目的期末余额填列。","NIA002010","文物文化资产","“文物文化资产”项目,反映单位期末控制的文物文化资产的成本。本项目应当根据“文物文化资产”科目的期末余额填列。",,"INPUT","admin","2024-12-12 15:15:55.0","admin","2024-12-13 17:48:27.0" +"6a6c002c-b85b-11ef-8a87-0242ac120002","NEW","INSTITUTION","INSTITUTION_ASSETS","12","1","1","NIA001011","待摊费用","deferred assets","“待摊费用”项目,反映单位期末已经支出,但应当由本期和以后各期负担的分摊期在 1 年以内(含 1 年)的各项费用。本项目应当根据“待摊费用”科目的期末余额填列。","NIA001011","待摊费用","“待摊费用”项目,反映单位期末已经支出,但应当由本期和以后各期负担的分摊期在 1 年以内(含 1 年)的各项费用。本项目应当根据“待摊费用”科目的期末余额填列。",,"INPUT","admin","2024-12-09 17:09:29.0","admin","2024-12-13 17:46:17.0" +"6a6c00f1-b85b-11ef-8a87-0242ac120002","NEW","INSTITUTION","INSTITUTION_ASSETS","11","1","1","NIA001010","存货","inventories","“存货”项目,反映单位期末存储的存货的实际成本。本项目应当根据“在途物品”、“库存物品”、“加工物品”科目的期末余额的合计数填列。","NIA001010","存货","“存货”项目,反映单位期末存储的存货的实际成本。本项目应当根据“在途物品”、“库存物品”、“加工物品”科目的期末余额的合计数填列。",,"INPUT","admin","2024-12-09 16:25:05.0","admin","2024-12-13 17:46:13.0" +"6a6c016a-b85b-11ef-8a87-0242ac120002","NEW","INSTITUTION","INSTITUTION_ASSETS","41","3","1","NIAT","资产总计","total assets","“资产总计”项目,反映单位期末资产的合计数。本项目应当根据本表中“流动资产合计”、“非流动资产合计”、“受托代理资产”项目金额的合计数填列。","NIAT","资产总计","“资产总计”项目,反映单位期末资产的合计数。本项目应当根据本表中“流动资产合计”、“非流动资产合计”、“受托代理资产”项目金额的合计数填列。",,"INPUT","admin","2024-12-09 17:15:05.0","admin","2024-12-13 17:50:57.0" +"6a6c020f-b85b-11ef-8a87-0242ac120002","NEW","INSTITUTION","INSTITUTION_ASSETS","2","1","1","NIA001001","货币资金","cash","“货币资金”项目,反映单位期末库存现金、银行存款、零余额账户用款额度、其他货币资金的合计数。本项目应当根据“库存现金”、“银行存款”、“零余额账户用款额度”、“其他货币资金”科目的期末余额的合计数填列;若单位存在通过“库存现金”、“银行存款”科目核算的受托代理资产还应当按照前述合计数扣减“库存现金”、“银行存款”科目下“受托代理资产”明细科目的期末余额后的金额填列。","NIA001001","货币资金","“货币资金”项目,反映单位期末库存现金、银行存款、零余额账户用款额度、其他货币资金的合计数。本项目应当根据“库存现金”、“银行存款”、“零余额账户用款额度”、“其他货币资金”科目的期末余额的合计数填列;若单位存在通过“库存现金”、“银行存款”科目核算的受托代理资产还应当按照前述合计数扣减“库存现金”、“银行存款”科目下“受托代理资产”明细科目的期末余额后的金额填列。",,"INPUT","admin","2024-12-09 15:54:15.0","admin","2024-12-13 17:45:32.0" +"6a6c03da-b85b-11ef-8a87-0242ac120002","NEW","INSTITUTION","INSTITUTION_ASSETS","21","2","1","NIA00200302","固定资产净值","fixed assets net value",,"NIA00200302","固定资产净值",,,"INPUT","admin","2024-12-09 17:05:51.0","admin","2024-12-13 17:47:33.0" +"6a6c04cf-b85b-11ef-8a87-0242ac120002","NEW","INSTITUTION","INSTITUTION_ASSETS","28","1","1","NIA002008","公共基础设施原值","public infrastructure","“公共基础设施原值”项目,反映单位期末控制的公共基础设施的原值。本项目应当根据“公共基础设施”科目的期末余额填列。","NIA002008","公共基础设施原值","“公共基础设施原值”项目,反映单位期末控制的公共基础设施的原值。本项目应当根据“公共基础设施”科目的期末余额填列。",,"INPUT","admin","2024-12-09 17:03:20.0","admin","2024-12-13 17:48:04.0" +"6a6c05e0-b85b-11ef-8a87-0242ac120002","NEW","INSTITUTION","INSTITUTION_ASSETS","31","1","1","NIA002009","政府储备物资","government stockpiles supplies","“政府储备物资”项目,反映单位期末控制的政府储备物资的实际成本。本项目应当根据“政府储备物资”科目的期末余额填列。","NIA002009","政府储备物资","“政府储备物资”项目,反映单位期末控制的政府储备物资的实际成本。本项目应当根据“政府储备物资”科目的期末余额填列。",,"INPUT","admin","2024-12-09 17:04:21.0","admin","2024-12-13 17:48:19.0" +"6a6c06c7-b85b-11ef-8a87-0242ac120002","NEW","INSTITUTION","INSTITUTION_ASSETS","23","1","1","NIA002005","在建工程","construction in progress","“在建工程”项目,反映单位期末所有的建设项目工程的实际成本。本项目应当根据“在建工程”科目的期末余额填列。","NIA002005","在建工程","“在建工程”项目,反映单位期末所有的建设项目工程的实际成本。本项目应当根据“在建工程”科目的期末余额填列。",,"INPUT","admin","2024-12-09 17:05:01.0","admin","2024-12-13 17:47:41.0" +"6a6c073e-b85b-11ef-8a87-0242ac120002","NEW","INSTITUTION","INSTITUTION_ASSETS","35","2","1","NIA00201102","保障性住房净值","affordable housing net value","“保障性住房净值”项目,反映单位期末控制的保障性住房的账面价值。本项目应当根据“保障性住房”科目期末余额减去“保障性住房累计折旧”科目期末余额后的金额填列。","NIA00201102","保障性住房净值","“保障性住房净值”项目,反映单位期末控制的保障性住房的账面价值。本项目应当根据“保障性住房”科目期末余额减去“保障性住房累计折旧”科目期末余额后的金额填列。",,"INPUT","admin","2024-12-12 15:19:23.0","admin","2024-12-13 17:48:42.0" +"6a6c0894-b85b-11ef-8a87-0242ac120002","NEW","INSTITUTION","INSTITUTION_ASSETS","3","1","1","NIA001002","短期投资","short term investments","“短期投资”项目,反映事业单位期末持有的短期投资账面余额。本项目应当根据“短期投资”科目的期末余额填列。","NIA001002","短期投资","“短期投资”项目,反映事业单位期末持有的短期投资账面余额。本项目应当根据“短期投资”科目的期末余额填列。",,"INPUT","admin","2024-12-09 16:11:29.0","admin","2024-12-13 17:45:41.0" +"6a6c097e-b85b-11ef-8a87-0242ac120002","NEW","INSTITUTION","INSTITUTION_ASSETS","1","0","0","NIA001","流动资产:","current assets",,"NIA001","流动资产:",,,"INPUT","admin","2024-12-09 15:49:57.0","admin","2024-12-13 17:45:14.0" +"6abc089f-7fe5-4c49-b28a-ce2341c95ff9","OLD","COMPANY","COMPANY_PROFIT","11","2","1","OCI001A02","投资收益(损失以“-”号填列)","add income on investment",,"OCI001A02","投资收益(损失以“-”号填列)",,,"INPUT","admin","2024-12-09 17:53:29.0","admin","2024-12-13 18:40:09.0" +"6b4a2b4a-32f3-46a6-a650-0c524d687970","NEW","COMPANY","COMPANY_PROFIT","8","3","1","NCI0010010501","其中:利息费用","including interest expenses","“财务费用”项目下的“利息收入”项目,反映企业按照相关会计准则确认的应冲减财务费用的利息收入。该项目应根据“财务费用”科目的相关明细科目的发生额分析填列。该项目作为“财务费用”项目的其中项,以正数填列。","NCI0010010501","其中:利息费用","“财务费用”项目下的“利息收入”项目,反映企业按照相关会计准则确认的应冲减财务费用的利息收入。该项目应根据“财务费用”科目的相关明细科目的发生额分析填列。该项目作为“财务费用”项目的其中项,以正数填列。",,"INPUT","admin","2024-12-09 17:52:43.0","admin","2024-12-13 17:36:41.0" +"6ce177ac-b21f-41fd-bb3f-cb9f5d86d454","OLD","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","36","1","1","OCE005","其他综合收益","other comprehensive income",,"OCE005","其他综合收益",,,"INPUT","admin","2024-12-09 17:12:42.0","admin","2024-12-13 18:32:53.0" +"6eed2c9e-e593-4ea3-a73d-a55bc875e298","OLD","COMPANY","COMPANY_ASSETS","9","1","1","OCA001008","存货","inventories",,"OCA001008","存货",,,"INPUT","admin","2024-12-09 16:22:52.0","admin","2024-12-13 18:29:00.0" +"700c5013-4465-4cf5-88dc-50d1815add31","OLD","COMPANY","COMPANY_ASSETS","12","1","1","OCA001011","其他流动资产","other current assets",,"OCA001011","其他流动资产",,,"INPUT","admin","2024-12-09 16:30:32.0","admin","2024-12-13 18:29:20.0" +"70790f97-0304-4972-8e02-1136ffe9bad8","NEW","COMPANY","COMPANY_CASH_FLOWS","10","3","1","NCC001T","经营活动产生的现金流量净额","net cash flow from operating activities",,"NCC001T","经营活动产生的现金流量净额",,,"INPUT","admin","2024-12-09 18:03:08.0","admin","2024-12-13 17:58:20.0" +"7091c89a-4d26-4b17-b8ad-0c1261e41b0f","OLD","COMPANY","COMPANY_ASSETS","8","1","1","OCA001007","其他应收款","other receivables","“其他应收款”项目,应根据“应收利息”“应收股利”和“其他应收款”科目的期末余额合计数,减去“坏账准备”科目中相关坏账准备期末余额后的金额填列。","OCA001007","其他应收款","“其他应收款”项目,应根据“应收利息”“应收股利”和“其他应收款”科目的期末余额合计数,减去“坏账准备”科目中相关坏账准备期末余额后的金额填列。",,"INPUT","admin","2024-12-09 16:21:54.0","admin","2024-12-13 18:28:57.0" +"71f6a2d5-b014-4151-b7d1-a531465f22a1","NEW","COMPANY","COMPANY_PROFIT","4","2","1","NCI00100102","销售费用","less selling expenses",,"NCI00100102","销售费用",,,"INPUT","admin","2024-12-09 17:51:36.0","admin","2024-12-13 17:36:10.0" +"72cac667-82ff-4ac8-8534-f40a4c857e82","OLD","COMPANY","COMPANY_PROFIT","32","2","1","OCI00500204","4.现金流量套期损益的有效部分","the effective portion of the cash flow hedge profit or loss",,"OCI00500204","4.现金流量套期损益的有效部分",,,"INPUT","admin","2024-12-13 15:00:34.0","admin","2024-12-13 18:42:03.0" +"741355be-5552-4bef-b019-20d8182dc7ba","NEW","COMPANY","COMPANY_ASSETS","20","1","1","NCA002004","长期股权投资","long term equity investment",,"NCA002004","长期股权投资",,,"INPUT","admin","2024-12-09 17:01:09.0","admin","2024-12-13 17:25:59.0" +"74f38a4c-0385-4526-a1c6-20aa7493d457","OLD","COMPANY","COMPANY_ASSETS","19","1","1","OCA002003","长期应收款","long term receivables",,"OCA002003","长期应收款",,,"INPUT","admin","2024-12-09 17:00:25.0","admin","2024-12-13 18:29:53.0" +"759d31b5-90c8-408a-bb46-480ed6d9e558","NEW","COMPANY","COMPANY_ASSETS","28","1","1","NCA002012","使用权资产","right of use assets","“使用权资产”项目,反映资产负债表日承租人企业持有的使用权资产的期末账面价值。该项目应根据“使用权资产”科目的期末余额,减去“使用权资产累计折旧”和“使用权资产减值准备”科目的期末余额后的金额填列。","NCA002012","使用权资产","“使用权资产”项目,反映资产负债表日承租人企业持有的使用权资产的期末账面价值。该项目应根据“使用权资产”科目的期末余额,减去“使用权资产累计折旧”和“使用权资产减值准备”科目的期末余额后的金额填列。",,"INPUT","admin","2024-12-09 17:06:39.0","admin","2024-12-13 17:26:36.0" +"7720d82b-4f98-429e-9995-71ec0ce6ac95","NEW","COMPANY","COMPANY_ASSETS","9","1","1","NCA001008","其他应收款","other receivables","“其他应收款”项目,应根据“应收利息”“应收股利”和“其他应收款”科目的期末余额合计数,减去“坏账准备”科目中相关坏账准备期末余额后的金额填列。其中的“应收利息”仅反映相关金融工具已到期可收取但于资产负债表日尚未收到的利息。基于实际利率法计提的金融工具的利息应包含在相应金融工具的账面余额中。","NCA001008","其他应收款","“其他应收款”项目,应根据“应收利息”“应收股利”和“其他应收款”科目的期末余额合计数,减去“坏账准备”科目中相关坏账准备期末余额后的金额填列。其中的“应收利息”仅反映相关金融工具已到期可收取但于资产负债表日尚未收到的利息。基于实际利率法计提的金融工具的利息应包含在相应金融工具的账面余额中。",,"INPUT","admin","2024-12-09 16:21:54.0","admin","2024-12-13 17:23:08.0" +"77c06b74-47ed-433c-9311-362a59f41b21","NEW","INSTITUTION","INSTITUTION_INCOME_AND_EXPENSES","17","1","1","NIE001003","(三)经营费用","operating expenses","“经营费用”项目,反映事业单位本期在专业业务活动及其辅助活动之外开展非独立核算经营活动发生的各项费用。本项目应当根据“经营费用”科目的本期发生额填列。","NIE001003","(三)经营费用","“经营费用”项目,反映事业单位本期在专业业务活动及其辅助活动之外开展非独立核算经营活动发生的各项费用。本项目应当根据“经营费用”科目的本期发生额填列。",,"INPUT","admin","2024-12-12 17:14:59.0","admin","2024-12-13 18:09:46.0" +"79069056-d29e-4226-92d2-8eebc35e17f2","OLD","COMPANY","COMPANY_ASSETS","2","1","1","OCA001001","货币资金","cash",,"OCA001001","货币资金",,,"INPUT","admin","2024-12-09 15:54:15.0","admin","2024-12-13 18:28:33.0" +"79d4ce14-53df-49e4-b9da-b6fa11c42f05","OLD","COMPANY","COMPANY_CASH_FLOWS","20","1","1","OCC002008","取得子公司及其他营业单位支付的现金净额","net cash payments from subsidiaries and other business units",,"OCC002008","取得子公司及其他营业单位支付的现金净额",,,"INPUT","admin","2024-12-09 18:04:44.0","admin","2024-12-13 18:46:34.0" +"7afa88d6-2885-4fe0-a986-9e8e0348bac9","OLD","COMPANY","COMPANY_CASH_FLOWS","18","1","1","OCC002006","购建固定资产、无形资产和其他长期资产支付的现金","cash paid for the purchase and construction of fixed assets intangible assets and other long term assets",,"OCC002006","购建固定资产、无形资产和其他长期资产支付的现金",,,"INPUT","admin","2024-12-09 18:04:31.0","admin","2024-12-13 18:46:26.0" +"7bc59c23-7602-4606-8125-77c175e6ed4d","NEW","COMPANY","COMPANY_CASH_FLOWS","26","1","1","NCC003002","取得借款收到的现金","obtain cash received from borrowing",,"NCC003002","取得借款收到的现金",,,"INPUT","admin","2024-12-09 18:07:28.0","admin","2024-12-13 17:43:42.0" +"7c01d801-2f51-4a0c-bfbf-2d61430e9715","NEW","COMPANY","COMPANY_PROFIT","42","1","1","NCI007001","(一)基本每股收益","base earnings per share",,"NCI007001","(一)基本每股收益",,,"INPUT","admin","2024-12-09 17:59:42.0","admin","2024-12-13 17:40:21.0" +"7c0d308e-400c-4d22-ac11-da5691808d4a","NEW","INSTITUTION","INSTITUTION_INCOME_AND_EXPENSES","19","1","1","NIE001005","(五)上缴上级费用","pay the fees to the superiors","“上缴上级费用”项目,反映事业单位按照规定上缴上级单位款项发生的费用。本项目应当根据“上缴上级费用”科目的本期发生额填列。","NIE001005","(五)上缴上级费用","“上缴上级费用”项目,反映事业单位按照规定上缴上级单位款项发生的费用。本项目应当根据“上缴上级费用”科目的本期发生额填列。",,"INPUT","admin","2024-12-12 17:16:12.0","admin","2024-12-13 18:09:53.0" +"7d0853a5-f1f0-4dd4-9c64-ec60c29d5570","OLD","COMPANY","COMPANY_ASSETS","6","1","1","OCA001005","应收账款","accounts receivable","“应收账款”项目,反映资产负债表日以摊余成本计量的、企业因销售商品、提供服务等经营活动应收取的款项。该项目应根据“应收账款”科目的期末余额,减去“坏账准备”科目中相关坏账准备期末余额后的金额填列。","OCA001005","应收账款","“应收账款”项目,反映资产负债表日以摊余成本计量的、企业因销售商品、提供服务等经营活动应收取的款项。该项目应根据“应收账款”科目的期末余额,减去“坏账准备”科目中相关坏账准备期末余额后的金额填列。",,"INPUT","admin","2024-12-09 16:15:17.0","admin","2024-12-13 18:28:48.0" +"7d8c23e3-25da-4823-a5e2-b505ab21d3e5","NEW","COMPANY","COMPANY_ASSETS","15","2","1","NCA001T","流动资产合计","total current assets",,"NCA001T","流动资产合计",,,"INPUT","admin","2024-12-09 16:58:29.0","admin","2024-12-13 17:52:45.0" +"7df5a26c-969e-44dd-b4e9-ae3dfa0c3a2f","OLD","COMPANY","COMPANY_CASH_FLOWS","2","1","1","OCC001002","收到的税费返还","refunds of taxes",,"OCC001002","收到的税费返还",,,"INPUT","admin","2024-12-09 18:00:39.0","admin","2024-12-13 18:43:44.0" +"7eb3c28d-78cc-431d-89a4-c2b0cc853aab","OLD","COMPANY","COMPANY_PROFIT","29","2","1","OCI00500201","1.权益法下可转损益的其他综合收益","other comprehensive income from transferable gains or losses under the equity method",,"OCI00500201","1.权益法下可转损益的其他综合收益",,,"INPUT","admin","2024-12-13 14:59:18.0","admin","2024-12-13 18:41:53.0" +"7faa0bdd-c2ed-4b9f-8816-3a75fbe5cdeb","OLD","COMPANY","COMPANY_PROFIT","28","1","1","OCI005002","(二)将重分类进损益的其他综合收益","other comprehensive income that can be reclassified",,"OCI005002","(二)将重分类进损益的其他综合收益",,,"INPUT","admin","2024-12-09 17:58:56.0","admin","2024-12-13 18:41:28.0" +"806498b6-d439-4eff-89d3-194c429f8826","OLD","COMPANY","COMPANY_ASSETS","7","1","1","OCA001006","预付款项","accounts prepaid",,"OCA001006","预付款项",,,"INPUT","admin","2024-12-09 16:20:52.0","admin","2024-12-13 18:28:53.0" +"80ca9270-1c82-4880-8bab-bdf740781628","OLD","COMPANY","COMPANY_PROFIT","7","2","1","OCI001L06","财务费用","less financial expenses",,"OCI001L06","财务费用",,,"INPUT","admin","2024-12-09 17:52:29.0","admin","2024-12-13 18:39:37.0" +"8108414f-489c-4aa7-a2fd-c5b118d4c208","NEW","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","3","1","1","NCL001003","衍生金融负债","derivative financial liabilities",,"NCL001003","衍生金融负债",,,"INPUT","admin","2024-12-09 16:54:57.0","admin","2024-12-13 17:29:09.0" +"8108414f-489c-4aa7-a2fd-c5b118d4c210","NEW","INSTITUTION","INSTITUTION_LIABILITIES_AND_NET_ASSETS","5","1","1","NIL001004","应缴财政款","contributions payable","“应缴财政款”项目,反映单位期末应当上缴财政但尚未缴纳的款项。本项目应当根据“应缴财政款”科目的期末余额填列。","NIL001004","应缴财政款","“应缴财政款”项目,反映单位期末应当上缴财政但尚未缴纳的款项。本项目应当根据“应缴财政款”科目的期末余额填列。",,"INPUT","admin","2024-12-09 16:54:57.0","admin","2024-12-13 18:05:44.0" +"821fbd63-5edc-48da-ae67-977847497eb0","OLD","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","9","1","1","OCL001007","应付职工薪酬","employee pay payable",,"OCL001007","应付职工薪酬",,,"INPUT","admin","2024-12-09 16:56:46.0","admin","2024-12-13 18:34:36.0" +"82b122bf-d1c0-4606-8ce2-9f59729ef708","OLD","COMPANY","COMPANY_CASH_FLOWS","22","2","1","OCC002STO","投资活动现金流出小计","subtotal cash outflows from investing activities",,"OCC002STO","投资活动现金流出小计",,,"INPUT","admin","2024-12-09 18:06:14.0","admin","2024-12-13 18:46:43.0" +"8333cfed-5165-48a0-9708-a41adacc23d7","OLD","COMPANY","COMPANY_ASSETS","34","1","1","OCA002015","其他非流动资产","other non current assets",,"OCA002015","其他非流动资产",,,"INPUT","admin","2024-12-09 17:11:05.0","admin","2024-12-13 18:30:42.0" +"84083dc7-51ea-46f6-9921-b750b1302275","OLD","COMPANY","COMPANY_CASH_FLOWS","1","1","1","OCC001001","销售商品、提供劳务收到的现金","cash received from sales of goods or rendering of services",,"OCC001001","销售商品、提供劳务收到的现金",,,"INPUT","admin","2024-12-09 18:00:30.0","admin","2024-12-13 18:43:41.0" +"85ef4153-45c2-4c94-b7ce-c436f47eba3c","NEW","INSTITUTION","INSTITUTION_CASH_FLOWS","32","1","1","NIC003005","偿还利息支付的现金","cash repayment of interest payments","“偿付利息支付的现金”项目,反映事业单位本年支付的借款利息等。本项目应当根据“库存现金”、“银行存款”、“应付利息”、“长期借款”等科目的记录分析填列。","NIC003005","偿还利息支付的现金","“偿付利息支付的现金”项目,反映事业单位本年支付的借款利息等。本项目应当根据“库存现金”、“银行存款”、“应付利息”、“长期借款”等科目的记录分析填列。",,"INPUT","admin","2024-12-12 17:34:22.0","admin","2024-12-13 18:19:45.0" +"8712ff08-4c53-401e-838d-aebad169a11f","NEW","INSTITUTION","INSTITUTION_CASH_FLOWS","37","0","1","NIC005","五、现金净增加额","net increase in cash","“现金净增加额”项目,反映单位本年现金变动的净额。本项目应当根据本表中“日常活动产生的现金流量净额”、“投资活动产生的现金流量净额”、“筹资活动产生的现金流量净额”和“汇率变动对现金的影响额”项目金额的合计数填列;如为负数,以“-”号填列。","NIC005","五、现金净增加额","“现金净增加额”项目,反映单位本年现金变动的净额。本项目应当根据本表中“日常活动产生的现金流量净额”、“投资活动产生的现金流量净额”、“筹资活动产生的现金流量净额”和“汇率变动对现金的影响额”项目金额的合计数填列;如为负数,以“-”号填列。",,"INPUT","admin","2024-12-12 17:35:36.0","admin","2024-12-13 18:20:37.0" +"88aac526-7e9f-449b-a36c-2d3c61a736f2","NEW","COMPANY","COMPANY_ASSETS","6","1","1","NCA001005","应收账款","accounts receivable","“应收账款”项目,反映资产负债表日以摊余成本计量的、企业因销售商品、提供服务等经营活动应收取的款项。该项目应根据“应收账款”科目的期末余额,减去“坏账准备”科目中相关坏账准备期末余额后的金额分析填列。","NCA001005","应收账款","“应收账款”项目,反映资产负债表日以摊余成本计量的、企业因销售商品、提供服务等经营活动应收取的款项。该项目应根据“应收账款”科目的期末余额,减去“坏账准备”科目中相关坏账准备期末余额后的金额分析填列。",,"INPUT","admin","2024-12-09 16:15:17.0","admin","2024-12-13 17:22:27.0" +"88f584e7-2a92-41e3-be12-2125bd2d411b","NEW","COMPANY","COMPANY_ASSETS","12","1","1","NCA001011","持有待售资产","assets for sale","“持有待售资产”项目,反映资产负债表日划分为持有待售类别的非流动资产及划分为持有待售类别的处置组中的流动资产和非流动资产的期末账面价值。该项目应根据“持有待售资产”科目的期末余额,减去“持有待售资产减值准备”科目的期末余额后的金额填列。","NCA001011","持有待售资产","“持有待售资产”项目,反映资产负债表日划分为持有待售类别的非流动资产及划分为持有待售类别的处置组中的流动资产和非流动资产的期末账面价值。该项目应根据“持有待售资产”科目的期末余额,减去“持有待售资产减值准备”科目的期末余额后的金额填列。",,"INPUT","admin","2024-12-09 16:27:11.0","admin","2024-12-13 17:23:26.0" +"896cf9d7-d393-4823-bbbe-2e2e654bec1d","OLD","COMPANY","COMPANY_PROFIT","10","1","1","OCI001A01","加:其他收益","add other income","“其他收益”项目,反映计入其他收益的政府补助,以及其他与日常活动相关且计入其他收益的项目。该项目应根据“其他收益”科目的发生额分析填列。企业作为个人所得税的扣缴义务人,根据《中华人民共和国个人所得税法》收到的扣缴税款手续费,应作为其他与日常活动相关的收益在该项目中填列。","OCI001A01","加:其他收益","“其他收益”项目,反映计入其他收益的政府补助,以及其他与日常活动相关且计入其他收益的项目。该项目应根据“其他收益”科目的发生额分析填列。企业作为个人所得税的扣缴义务人,根据《中华人民共和国个人所得税法》收到的扣缴税款手续费,应作为其他与日常活动相关的收益在该项目中填列。",,"INPUT","admin","2024-12-09 17:53:15.0","admin","2024-12-13 18:39:59.0" +"8a1ada1c-6324-4d7e-8883-292f339ebde5","NEW","COMPANY","COMPANY_ASSETS","13","1","1","NCA001012","一年内到期的非流动资产","non current assets in a yaear","“一年内到期的非流动资产”项目,通常反映预计自资产负债表日起一年内变现的非流动资产。对于按照相关会计准则采用折旧(或摊销、折耗)方法进行后续计量的固定资产、使用权资产、无形资产和长期待摊费用等非流动资产,折旧(或摊销、折耗)年限(或期限)只剩一年或不足一年的,或预计在一年内(含一年)进行折旧(或摊销、折耗)的部分,不得归类为流动资产,仍在各该非流动资产项目中填列,不转入“一年内到期的非流动资产”项目。","NCA001012","一年内到期的非流动资产","“一年内到期的非流动资产”项目,通常反映预计自资产负债表日起一年内变现的非流动资产。对于按照相关会计准则采用折旧(或摊销、折耗)方法进行后续计量的固定资产、使用权资产、无形资产和长期待摊费用等非流动资产,折旧(或摊销、折耗)年限(或期限)只剩一年或不足一年的,或预计在一年内(含一年)进行折旧(或摊销、折耗)的部分,不得归类为流动资产,仍在各该非流动资产项目中填列,不转入“一年内到期的非流动资产”项目。",,"INPUT","admin","2024-12-09 16:29:28.0","admin","2024-12-13 17:23:30.0" +"8acb8c9b-7df4-4a55-bdc9-03cbb162ea9c","OLD","COMPANY","COMPANY_PROFIT","14","2","1","OCI001A04","资产减值损失(损失以“-”号填列)","add asset impairment losses",,"OCI001A04","资产减值损失(损失以“-”号填列)",,,"INPUT","admin","2024-12-09 17:55:16.0","admin","2024-12-13 18:40:24.0" +"8b75da74-7002-450d-b686-07af6f78cae4","NEW","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","38","1","1","NCE001007","盈余公积","surplus reserve",,"NCE001007","盈余公积",,,"INPUT","admin","2024-12-09 17:13:11.0","admin","2024-12-13 17:56:02.0" +"8c261624-73c1-46bd-ade9-bf5806d14e44","NEW","COMPANY","COMPANY_ASSETS","33","1","1","NCA002017","递延所得税资产","deferred income tax assets",,"NCA002017","递延所得税资产",,,"INPUT","admin","2024-12-09 17:10:02.0","admin","2024-12-13 17:26:56.0" +"8cca8643-b1a0-407d-af7e-4d9b48ffd022","NEW","INSTITUTION","INSTITUTION_LIABILITIES_AND_NET_ASSETS","12","1","1","NIL001011","其他应付款","other payable","“其他应付款”项目,反映单位期末其他各项偿还期限在 1 年内(含 1 年)的应付及暂收款项余额。本项目应当根据“其他应付款”科目的期末余额填列。","NIL001011","其他应付款","“其他应付款”项目,反映单位期末其他各项偿还期限在 1 年内(含 1 年)的应付及暂收款项余额。本项目应当根据“其他应付款”科目的期末余额填列。",,"INPUT","admin","2024-12-09 16:57:11.0","admin","2024-12-13 18:06:31.0" +"8cca8643-b1a0-407d-af7e-4d9b48ffd098","NEW","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","11","1","1","NCL001010","其他应付款","other payable","“其他应付款”项目,应根据“应付利息”“应付股利”和“其他应付款”科目的期末余额合计数填列。其中的“应付利息”仅反映相关金融工具已到期应支付但于资产负债表日尚未支付的利息。基于实际利率法计提的金融工具的利息应包含在相应金融工具的账面余额中。","NCL001010","其他应付款","“其他应付款”项目,应根据“应付利息”“应付股利”和“其他应付款”科目的期末余额合计数填列。其中的“应付利息”仅反映相关金融工具已到期应支付但于资产负债表日尚未支付的利息。基于实际利率法计提的金融工具的利息应包含在相应金融工具的账面余额中。",,"INPUT","admin","2024-12-09 16:57:11.0","admin","2024-12-13 17:29:40.0" +"8d1efeb6-2cd9-45c3-ad6e-586cf51fbdfb","OLD","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","31","1","1","OCE002","其他权益工具","other equity instrument","“其他权益工具”项目,反映资产负债表日企业发行在外的除普通股以外分类为权益工具的金融工具的期末账面价值。对于资产负债表日企业发行的金融工具,分类为金融负债的,应在“应付债券”项目填列,对于优先股和永续债,还应在“应付债券”项目下的“优先股”项目和“永续债”项目分别填列;分类为权益工具的\, 应在“其他权益工具”项目填列,对于优先股和永续债,还应在“其他权益工具”项目下的“优先股”项目和“永续债”项目分别填列。","OCE002","其他权益工具","“其他权益工具”项目,反映资产负债表日企业发行在外的除普通股以外分类为权益工具的金融工具的期末账面价值。对于资产负债表日企业发行的金融工具,分类为金融负债的,应在“应付债券”项目填列,对于优先股和永续债,还应在“应付债券”项目下的“优先股”项目和“永续债”项目分别填列;分类为权益工具的\, 应在“其他权益工具”项目填列,对于优先股和永续债,还应在“其他权益工具”项目下的“优先股”项目和“永续债”项目分别填列。",,"INPUT","admin","2024-12-09 17:09:17.0","admin","2024-12-13 18:32:14.0" +"8d26d9f4-28b2-47c9-a275-e70a21be820d","NEW","COMPANY","COMPANY_ASSETS","14","1","1","NCA001013","其他流动资产","other current assets",,"NCA001013","其他流动资产",,,"INPUT","admin","2024-12-09 16:30:32.0","admin","2024-12-13 17:23:34.0" +"8d3396f6-08da-4bf3-bba5-bc0bfa5b39bf","NEW","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","37","1","1","NCE001006","专项储备","special reserve","“专项储备”项目,反映高危行业企业按国家规定提取的安全生产费的期末账面价值。该项目应根据“专项储备”科目的期末余额填列。","NCE001006","专项储备","“专项储备”项目,反映高危行业企业按国家规定提取的安全生产费的期末账面价值。该项目应根据“专项储备”科目的期末余额填列。",,"INPUT","admin","2024-12-09 17:12:59.0","admin","2024-12-13 17:55:57.0" +"8e565e3b-fa4c-4161-a3c0-e0befd01fbca","NEW","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","39","1","1","NCE001008","未分配利润","retained earnings",,"NCE001008","未分配利润",,,"INPUT","admin","2024-12-09 17:13:23.0","admin","2024-12-13 17:56:06.0" +"8f4dafbd-f1f5-466f-a8bb-f2a2bd67d02b","NEW","INSTITUTION","INSTITUTION_INCOME_AND_EXPENSES","9","1","1","NII001007","(七)投资收益","investment income","“投资收益”项目,反映事业单位本期股权投资和债券投资所实现的收益或发生的损失。本项目应当根据“投资收益”科目的本期发生额填列;如为投资净损失,以“-”号填列。","NII001007","(七)投资收益","“投资收益”项目,反映事业单位本期股权投资和债券投资所实现的收益或发生的损失。本项目应当根据“投资收益”科目的本期发生额填列;如为投资净损失,以“-”号填列。",,"INPUT","admin","2024-12-12 17:10:00.0","admin","2024-12-13 18:08:54.0" +"8f93d9c8-2a6d-4aac-a030-c23b919a27c4","OLD","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","5","1","1","OCL001004","应付票据","note payable","“应付票据”项目,反映资产负债表日以摊余成本计量的、企业因购买材料、商品和接受服务等开出、承兑的商业汇票,包括银行承兑汇票和商业承兑汇票。该项目应根据“应付票据”科目的期末余额填列。","OCL001004","应付票据","“应付票据”项目,反映资产负债表日以摊余成本计量的、企业因购买材料、商品和接受服务等开出、承兑的商业汇票,包括银行承兑汇票和商业承兑汇票。该项目应根据“应付票据”科目的期末余额填列。",,"INPUT","admin","2024-12-09 16:55:27.0","admin","2024-12-13 18:34:23.0" +"8f98b132-5557-4465-8c72-fdf4285b3eca","NEW","COMPANY","COMPANY_CASH_FLOWS","6","1","1","NCC001005","支付给职工以及为职工支付的现金","cash paid to and on behalf of employees",,"NCC001005","支付给职工以及为职工支付的现金",,,"INPUT","admin","2024-12-09 18:02:27.0","admin","2024-12-13 17:42:01.0" +"90ceb747-d112-4732-91a1-516b874c7f53","NEW","COMPANY","COMPANY_ASSETS","10","1","1","NCA001009","存货","inventories",,"NCA001009","存货",,,"INPUT","admin","2024-12-09 16:22:52.0","admin","2024-12-13 17:23:13.0" +"917eb91e-d622-4b68-839c-63d2d3b3fcdc","OLD","COMPANY","COMPANY_PROFIT","18","1","1","OCI002L01 ","减:营业外支出","less non operating expenses ","“营业外支出”项目,反映企业发生的除营业利润以外的支出,主要包括公益性捐赠支出、非常损失、盘亏损失、非流动资产毁损报废损失等。该项目应根据“营业外支出”科目的发生额分析填列。“非流动资产毁损报废损失”通常包括因自然灾害发生毁损、已丧失使用功能等原因而报废清理产生的损失。企业在不同交易中形成的非流动资产毁损报废利得和损失不得相互抵销,应分别在“营业外收入”项目和“营业外支出”项目进行填列。","OCI002L01 ","减:营业外支出","“营业外支出”项目,反映企业发生的除营业利润以外的支出,主要包括公益性捐赠支出、非常损失、盘亏损失、非流动资产毁损报废损失等。该项目应根据“营业外支出”科目的发生额分析填列。“非流动资产毁损报废损失”通常包括因自然灾害发生毁损、已丧失使用功能等原因而报废清理产生的损失。企业在不同交易中形成的非流动资产毁损报废利得和损失不得相互抵销,应分别在“营业外收入”项目和“营业外支出”项目进行填列。",,"INPUT","admin","2024-12-09 17:56:46.0","admin","2024-12-13 18:40:47.0" +"91a3d980-5e95-4921-8534-ce0c2410eb27","NEW","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","21","1","1","NCL002003","租赁负债","lease liabilities","“租赁负债”项目,反映资产负债表日承租人企业尚未支付的租赁付款额的期末账面价值。该项目应根据“租赁负债”科目的期末余额填列。自资产负债表日起一年内到期应予以清偿的租赁负债的期末账面价值,在“一年内到期的非流动负债”项目反映。","NCL002003","租赁负债","“租赁负债”项目,反映资产负债表日承租人企业尚未支付的租赁付款额的期末账面价值。该项目应根据“租赁负债”科目的期末余额填列。自资产负债表日起一年内到期应予以清偿的租赁负债的期末账面价值,在“一年内到期的非流动负债”项目反映。",,"INPUT","admin","2024-12-09 17:03:31.0","admin","2024-12-13 17:31:15.0" +"91afc6d1-0997-46cc-b733-a997da91dc10","NEW","COMPANY","COMPANY_ASSETS","19","1","1","NCA002003","长期应收款","long term receivables",,"NCA002003","长期应收款",,,"INPUT","admin","2024-12-09 17:00:25.0","admin","2024-12-13 17:25:54.0" +"91b831fa-90f6-41c7-8c39-b91db2997110","OLD","COMPANY","COMPANY_PROFIT","19","0","1","OCI003","三、利润总额(亏损总额以“-”号填列)","total profit",,"OCI003","三、利润总额(亏损总额以“-”号填列)",,,"INPUT","admin","2024-12-09 17:56:59.0","admin","2024-12-13 18:36:53.0" +"929adc4f-8066-407f-8e3f-3f6eeec5fdb1","OLD","COMPANY","COMPANY_CASH_FLOWS","31","1","1","OCC003006","支付其他与筹资活动有关的现金","disbursement of other cash related to fund raising activities",,"OCC003006","支付其他与筹资活动有关的现金",,,"INPUT","admin","2024-12-09 18:08:50.0","admin","2024-12-13 18:47:22.0" +"936bbaf2-92ce-4fd2-a012-faf40b1911e4","NEW","COMPANY","COMPANY_PROFIT","7","2","1","NCI00100105","财务费用","less financial expenses","“财务费用”项目下的“利息费用”项目,反映企业为筹集生产经营所需资金等而发生的应予费用化的利息支出。该项目应根据“财务费用”科目的相关明细科目的发生额分析填列。该项目作为“财务费用”项目的其中项,以正数填列。","NCI00100105","财务费用","“财务费用”项目下的“利息费用”项目,反映企业为筹集生产经营所需资金等而发生的应予费用化的利息支出。该项目应根据“财务费用”科目的相关明细科目的发生额分析填列。该项目作为“财务费用”项目的其中项,以正数填列。",,"INPUT","admin","2024-12-09 17:52:29.0","admin","2024-12-13 17:36:25.0" +"93ad3214-1f80-4a23-ac46-e6ee3fce02ec","NEW","COMPANY","COMPANY_ASSETS","26","1","1","NCA002010","生产性生物资产","productive biological assets",,"NCA002010","生产性生物资产",,,"INPUT","admin","2024-12-09 17:05:25.0","admin","2024-12-13 17:26:26.0" +"94a02581-964c-4529-aace-79a4c449a7a9","OLD","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","16","0","0","OCL002","非流动负债:","non current liabilities",,"OCL002","非流动负债:",,,"INPUT","admin","2024-12-09 16:59:07.0","admin","2024-12-13 18:31:28.0" +"94ea9826-0d48-4bc4-b7a4-0dcc4a190fdb","NEW","INSTITUTION","INSTITUTION_CASH_FLOWS","15","1","1","NIC002001","收回投资收到的现金","cash received from the investment is recovered","“收回投资收到的现金”项目,反映单位本年出售、转让或者收回投资收到的现金。本项目应该根据“库存现金”、“银行存款”、“短期投资”、“长期股权投资”、“长期债券投资”等科目的记录分析填列。","NIC002001","收回投资收到的现金","“收回投资收到的现金”项目,反映单位本年出售、转让或者收回投资收到的现金。本项目应该根据“库存现金”、“银行存款”、“短期投资”、“长期股权投资”、“长期债券投资”等科目的记录分析填列。",,"INPUT","admin","2024-12-12 17:30:52.0","admin","2024-12-13 18:13:51.0" +"951696b0-3f2b-40e2-8d58-32438ac25802","NEW","COMPANY","COMPANY_PROFIT","38","2","1","NCI00500205","5.现金流量套期储备","cash flow hedging reserves","“现金流量套期储备”项目,反映企业套期工具产生的利得或损失中属于套期有效的部分。该项目应根据“其他综合收益”科目下的“套期储备”明细科目的发生额分析填列。","NCI00500205","5.现金流量套期储备","“现金流量套期储备”项目,反映企业套期工具产生的利得或损失中属于套期有效的部分。该项目应根据“其他综合收益”科目下的“套期储备”明细科目的发生额分析填列。",,"INPUT","admin","2024-12-13 15:35:05.0","admin","2024-12-13 17:40:07.0" +"9569181b-1847-46b5-b6a5-2a3f11eec6ae","NEW","COMPANY","COMPANY_ASSETS","7","1","1","NCA001006","应收款项融资","receivable financing","“应收款项融资”项目,反映资产负债表日以公允价值计量且其变动计入其他综合收益的应收票据和应收账款等。","NCA001006","应收款项融资","“应收款项融资”项目,反映资产负债表日以公允价值计量且其变动计入其他综合收益的应收票据和应收账款等。",,"INPUT","admin","2024-12-09 16:16:31.0","admin","2024-12-13 17:22:32.0" +"95f06b67-e3d9-435a-bece-3181b21c124f","NEW","INSTITUTION","INSTITUTION_CASH_FLOWS","17","1","1","NIC002003","处置固定资产、无形资产、公共基础设施等收回的现金净额","net cash recovered from disposal of fixed assets intangible assets public infrastructure etc","“处置固定资产、无形资产、公共基础设施等收回的现金净额”项目,反映单位本年处置固定资产、无形资产、公共基础设施等非流动资产所取得的现金,减去为处置这些资产而支付的有关费用之后的净额。由于自然灾害所造成的固定资产等长期资产损失而收到的保险赔款收入,也在本项目反映。本项目应当根据“库存现金”、“银行存款”、“待处理财产损溢”等科目的记录分析填列。","NIC002003","处置固定资产、无形资产、公共基础设施等收回的现金净额","“处置固定资产、无形资产、公共基础设施等收回的现金净额”项目,反映单位本年处置固定资产、无形资产、公共基础设施等非流动资产所取得的现金,减去为处置这些资产而支付的有关费用之后的净额。由于自然灾害所造成的固定资产等长期资产损失而收到的保险赔款收入,也在本项目反映。本项目应当根据“库存现金”、“银行存款”、“待处理财产损溢”等科目的记录分析填列。",,"INPUT","admin","2024-12-12 17:31:13.0","admin","2024-12-13 18:13:58.0" +"960a025c-8941-4b0c-8595-cd4bce7e2f6c","NEW","COMPANY","COMPANY_CASH_FLOWS","9","2","1","NCC001STO","经营活动现金流出小计","subtotal cash outflows from operating activities",,"NCC001STO","经营活动现金流出小计",,,"INPUT","admin","2024-12-09 18:02:57.0","admin","2024-12-13 17:59:15.0" +"99c683ff-67cb-43fd-85c2-92293dccfd94","NEW","INSTITUTION","INSTITUTION_CASH_FLOWS","36","0","1","NIC004","四、汇率变动对现金的影响额","amount of the impact of exchange rate changes on cash","“汇率变动对现金的影响额”项目,反映单位本年外币现金流量折算为人民币时,所采用的现金流量发生日的汇率折算的人民币金额与外币现金流量净额按期末汇率折算的人民币金额之间的差额。","NIC004","四、汇率变动对现金的影响额","“汇率变动对现金的影响额”项目,反映单位本年外币现金流量折算为人民币时,所采用的现金流量发生日的汇率折算的人民币金额与外币现金流量净额按期末汇率折算的人民币金额之间的差额。",,"INPUT","admin","2024-12-12 17:35:22.0","admin","2024-12-13 18:20:32.0" +"99e5db76-e770-464d-8309-e430dbf381ff","NEW","INSTITUTION","INSTITUTION_CASH_FLOWS","34","2","1","NIC003STO","筹资活动的现金流出小计","subtotal cash outflows from financing activities","“筹资活动的现金流出小计”项目,反映单位本年筹资活动产生的现金流出的合计数。本项目应当根据本表中“偿还借款支付的现金”、“偿付利息支付的现金”、“支付的其他与筹资活动有关的现金”项目金额的合计数填列。","NIC003STO","筹资活动的现金流出小计","“筹资活动的现金流出小计”项目,反映单位本年筹资活动产生的现金流出的合计数。本项目应当根据本表中“偿还借款支付的现金”、“偿付利息支付的现金”、“支付的其他与筹资活动有关的现金”项目金额的合计数填列。",,"INPUT","admin","2024-12-12 17:34:47.0","admin","2024-12-13 18:20:17.0" +"9b0f6254-126d-4316-b6e1-1875d02121a1","NEW","INSTITUTION","INSTITUTION_INCOME_AND_EXPENSES","20","1","1","NIE001006","(六)对附属单位补助费用","subsidy to affiliated units","“对附属单位补助费用”项目,反映事业单位用财政拨款收入之外的收入对附属单位补助发生的费用。本项目应当根据“对附属单位补助费用”科目的本期发生额填列。","NIE001006","(六)对附属单位补助费用","“对附属单位补助费用”项目,反映事业单位用财政拨款收入之外的收入对附属单位补助发生的费用。本项目应当根据“对附属单位补助费用”科目的本期发生额填列。",,"INPUT","admin","2024-12-12 17:16:49.0","admin","2024-12-13 18:09:56.0" +"9bb0e036-98d6-4ad4-889f-f43a4e770618","NEW","COMPANY","COMPANY_PROFIT","35","2","1","NCI00500202","2.其他债权投资公允价值变动","changes in the fair value of other debt investments",,"NCI00500202","2.其他债权投资公允价值变动",,,"INPUT","admin","2024-12-13 15:34:21.0","admin","2024-12-13 17:39:55.0" +"9bf3882c-6983-48ef-bc03-2ed3184acd26","NEW","INSTITUTION","INSTITUTION_LIABILITIES_AND_NET_ASSETS","13","1","1","NIL001012","预提费用","withholding expenses","“预提费用”项目,反映单位期末已预先提取的已经发生但尚未支付的各项费用。本项目应当根据“预提费用”科目的期末余额填列。","NIL001012","预提费用","“预提费用”项目,反映单位期末已预先提取的已经发生但尚未支付的各项费用。本项目应当根据“预提费用”科目的期末余额填列。",,"INPUT","admin","2024-12-09 16:57:21.0","admin","2024-12-13 18:06:26.0" +"9bf3882c-6983-48ef-bc03-2ed3184acd66","NEW","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","12","1","1","NCL001011","持有待售负债","held for sale liabilities","“持有待售负债”项目,反映资产负债表日处置组中与划分为持有待售类别的资产直接相关的负债的期末账面价值。该项目应根据“持有待售负债”科目的期末余额填列。","NCL001011","持有待售负债","“持有待售负债”项目,反映资产负债表日处置组中与划分为持有待售类别的资产直接相关的负债的期末账面价值。该项目应根据“持有待售负债”科目的期末余额填列。",,"INPUT","admin","2024-12-09 16:57:21.0","admin","2024-12-13 17:29:45.0" +"9c0f99c6-e5d9-42dc-9f44-6f2b51ccae41","OLD","COMPANY","COMPANY_ASSETS","1","0","0","OCA001","流动资产:","current assets",,"OCA001","流动资产:",,,"INPUT","admin","2024-12-09 15:49:57.0","admin","2024-12-13 18:28:26.0" +"9d58d646-1f8e-4f5d-94ac-7793e902b4cc","NEW","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","33","4","1","NCE00100202","永续债","perpetual note of equity instrument",,"NCE00100202","永续债",,,"INPUT","admin","2024-12-09 17:10:18.0","admin","2024-12-13 17:55:37.0" +"9e0cccdf-26a8-47e3-b283-c55316c445e8","NEW","INSTITUTION","INSTITUTION_CASH_FLOWS","27","1","1","NIC003001","财政资本性项目拨款收到的现金","cash received from appropriations for financial capital projects","“财政资本性项目拨款收到的现金”项目,反映单位本年接受用于购建固定资产、无形资产、公共基础设施等资本性项目的财政项目拨款取得的现金。本项目应当根据“银行存款”、“零余额账户用款额度”、“财政拨款收入”等科目及其所属明细科目的记录分析填列。","NIC003001","财政资本性项目拨款收到的现金","“财政资本性项目拨款收到的现金”项目,反映单位本年接受用于购建固定资产、无形资产、公共基础设施等资本性项目的财政项目拨款取得的现金。本项目应当根据“银行存款”、“零余额账户用款额度”、“财政拨款收入”等科目及其所属明细科目的记录分析填列。",,"INPUT","admin","2024-12-12 17:33:12.0","admin","2024-12-13 18:19:27.0" +"9e15d334-072f-403f-9196-6c4715c6753f","NEW","INSTITUTION","INSTITUTION_INCOME_AND_EXPENSES","4","1","1","NII001002","(二)事业收入","institution income","“事业收入”项目,反映事业单位本期开展专业业务活动及其辅助活动实现的收入。本项目应当根据“事业收入”科目的本期发生额填列。","NII001002","(二)事业收入","“事业收入”项目,反映事业单位本期开展专业业务活动及其辅助活动实现的收入。本项目应当根据“事业收入”科目的本期发生额填列。",,"INPUT","admin","2024-12-12 17:04:52.0","admin","2024-12-13 18:08:34.0" +"9e36e064-d06f-4559-886d-0b27aa130cc2","NEW","INSTITUTION","INSTITUTION_CASH_FLOWS","1","0","0","NIC001","一、日常活动产生的现金流量:","cash flow from day to day activities",,"NIC001","一、日常活动产生的现金流量:",,,"INPUT","admin","2024-12-12 17:22:48.0","admin","2024-12-13 18:11:14.0" +"9e4c90cf-54f1-4cc1-931e-fd5c2e5172b2","OLD","COMPANY","COMPANY_CASH_FLOWS","16","1","1","OCC002005","收到其他与投资活动有关的现金","receipt of other cash related to investment activities",,"OCC002005","收到其他与投资活动有关的现金",,,"INPUT","admin","2024-12-09 18:04:18.0","admin","2024-12-13 18:46:16.0" +"9eec9950-072c-4baa-a89b-7bb425701462","OLD","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","40","2","1","OCET","所有者权益(或股东权益)合计","total shareholder equity",,"OCET","所有者权益(或股东权益)合计",,,"INPUT","admin","2024-12-09 17:13:51.0","admin","2024-12-13 18:33:18.0" +"a00cfec4-bdd3-41ac-9908-579ae827b8d8","NEW","COMPANY","COMPANY_ASSETS","16","0","0","NCA002","非流动资产:","non current assets",,"NCA002","非流动资产:",,,"INPUT","admin","2024-12-09 16:58:51.0","admin","2024-12-13 17:25:26.0" +"a077feb3-5933-4b13-8900-fbe6aedc5c28","NEW","INSTITUTION","INSTITUTION_LIABILITIES_AND_NET_ASSETS","16","2","1","NIL001T","流动负债合计","total current liabilities","“流动负债合计”项目,反映单位期末流动负债合计数。本项目应当根据本表“短期借款”、“应交增值税”、“其他应交税费”、“应缴财政款”、“应付职工薪酬”、“应付票据”、“应付账款”、“应付政府补贴款”、“应付利息”、“预收账款”、“其他应付款”、“预提费用”、“一年内到期的非流动负债”、“其他流动负债”项目金额的合计数填列。","NIL001T","流动负债合计","“流动负债合计”项目,反映单位期末流动负债合计数。本项目应当根据本表“短期借款”、“应交增值税”、“其他应交税费”、“应缴财政款”、“应付职工薪酬”、“应付票据”、“应付账款”、“应付政府补贴款”、“应付利息”、“预收账款”、“其他应付款”、“预提费用”、“一年内到期的非流动负债”、“其他流动负债”项目金额的合计数填列。",,"INPUT","admin","2024-12-09 16:58:10.0","admin","2024-12-13 18:04:40.0" +"a077feb3-5933-4b13-8900-fbe6aedc5c3e","NEW","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","15","2","1","NCL001T","流动负债合计","total current liabilities",,"NCL001T","流动负债合计",,,"INPUT","admin","2024-12-09 16:58:10.0","admin","2024-12-13 17:53:24.0" +"a092bdb3-13eb-4828-b756-5a41c86fc8ac","OLD","COMPANY","COMPANY_PROFIT","21","0","1","OCI004","四、净利润(净亏损以“-”号填列)","net profit","“(一)持续经营净利润”和“(二)终止经营净利润”项目,分别反映净利润中与持续经营相关的净利润和与终止经营相关的净利润;如为净亏损,以“-”号填列。该两个项目应按照《企业会计准则第 42 号——持有待售的非流动资产、处置组和终止经营》的相关规定分别列报。","OCI004","四、净利润(净亏损以“-”号填列)","“(一)持续经营净利润”和“(二)终止经营净利润”项目,分别反映净利润中与持续经营相关的净利润和与终止经营相关的净利润;如为净亏损,以“-”号填列。该两个项目应按照《企业会计准则第 42 号——持有待售的非流动资产、处置组和终止经营》的相关规定分别列报。",,"INPUT","admin","2024-12-09 17:57:27.0","admin","2024-12-13 18:36:57.0" +"a0d4c143-d92c-4b21-8a2c-def93d77f130","OLD","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","11","1","1","OCL001009","其他应付款","other payable","“其他应付款”项目,应根据“应付利息”“应付股利”和“其他应付款”科目的期末余额合计数填列。","OCL001009","其他应付款","“其他应付款”项目,应根据“应付利息”“应付股利”和“其他应付款”科目的期末余额合计数填列。",,"INPUT","admin","2024-12-09 16:57:11.0","admin","2024-12-13 18:34:45.0" +"a170c59a-5081-4600-b64c-d6da53f0bc42","OLD","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","12","1","1","OCL001010","持有待售负债","held for sale liabilities","“持有待售负债”项目,反映资产负债表日处置组中与划分为持有待售类别的资产直接相关的负债的期末账面价值。该项目应根据“持有待售负债”科目的期末余额填列。","OCL001010","持有待售负债","“持有待售负债”项目,反映资产负债表日处置组中与划分为持有待售类别的资产直接相关的负债的期末账面价值。该项目应根据“持有待售负债”科目的期末余额填列。",,"INPUT","admin","2024-12-09 16:57:21.0","admin","2024-12-13 18:34:51.0" +"a202cb62-1a74-445d-b35d-9e53571c869e","NEW","COMPANY","COMPANY_CASH_FLOWS","16","1","1","NCC002005","收到其他与投资活动有关的现金","receipt of other cash related to investment activities",,"NCC002005","收到其他与投资活动有关的现金",,,"INPUT","admin","2024-12-09 18:04:18.0","admin","2024-12-13 17:42:51.0" +"a2c0d8f6-084a-4f1e-8ab3-26ad10f63423","OLD","COMPANY","COMPANY_PROFIT","20","1","1","OCI003L01","减:所得税费用","less income tax expenses",,"OCI003L01","减:所得税费用",,,"INPUT","admin","2024-12-09 17:57:11.0","admin","2024-12-13 18:40:57.0" +"a403777a-a231-494a-bb9f-85593590f76e","NEW","COMPANY","COMPANY_ASSETS","4","1","1","NCA001003","衍生金融资产","derivative financial assets",,"NCA001003","衍生金融资产",,,"INPUT","admin","2024-12-09 16:13:03.0","admin","2024-12-13 17:22:17.0" +"a4d156b2-fbdd-49b7-96fd-8bee0414447c","NEW","COMPANY","COMPANY_PROFIT","41","0","1","NCI007","七、每股收益:","earnings per share",,"NCI007","七、每股收益:",,,"INPUT","admin","2024-12-09 17:59:28.0","admin","2024-12-13 17:34:59.0" +"a4df998c-dfe2-46a3-b49d-86928dd2a165","NEW","INSTITUTION","INSTITUTION_CASH_FLOWS","28","1","1","NIC003002","取得借款收到的现金","obtain cash received from borrowing","“取得借款收到的现金”项目,反映事业单位本年举借短期、长期借款所收到的现金。本项目应当根据“库存现金”、“银行存款”、“短期借款”、“长期借款”等科目记录分析填列。","NIC003002","取得借款收到的现金","“取得借款收到的现金”项目,反映事业单位本年举借短期、长期借款所收到的现金。本项目应当根据“库存现金”、“银行存款”、“短期借款”、“长期借款”等科目记录分析填列。",,"INPUT","admin","2024-12-12 17:33:22.0","admin","2024-12-13 18:19:31.0" +"a5242b58-0bd9-4792-bd28-a24410337e95","NEW","INSTITUTION","INSTITUTION_CASH_FLOWS","7","2","1","NIC001STI","日常活动的现金流入小计","subtotal of cash inflows from day to day activities","“日常活动的现金流入小计”项目,反映单位本年日常活动产生的现金流入的合计数。本项目应当根据本表中“财政基本支出拨款收到的现金”、“财政非资本性项目拨款收到的现金”、“事业活动收到的除财政拨款以外的现金”、“收到的其他与日常活动有关的现金”项目金额的合计数填列。","NIC001STI","日常活动的现金流入小计","“日常活动的现金流入小计”项目,反映单位本年日常活动产生的现金流入的合计数。本项目应当根据本表中“财政基本支出拨款收到的现金”、“财政非资本性项目拨款收到的现金”、“事业活动收到的除财政拨款以外的现金”、“收到的其他与日常活动有关的现金”项目金额的合计数填列。",,"INPUT","admin","2024-12-12 17:28:08.0","admin","2024-12-13 18:11:56.0" +"a5bb0eda-4abb-4a71-904a-06e5fbe950f8","NEW","COMPANY","COMPANY_ASSETS","35","2","1","NCA002T","非流动资产合计","total non current assets",,"NCA002T","非流动资产合计",,,"INPUT","admin","2024-12-09 17:11:45.0","admin","2024-12-13 17:52:56.0" +"a5c8f4cb-cc60-458c-bc28-f5e3511707c9","OLD","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","19","2","1","OCL00200201","其中:优先股","preferred stock of bonds",,"OCL00200201","其中:优先股",,,"INPUT","admin","2024-12-09 17:00:43.0","admin","2024-12-13 18:35:50.0" +"a703225f-6d65-4344-be29-59f21c740275","NEW","COMPANY","COMPANY_ASSETS","31","1","1","NCA002015","商誉","goodwill",,"NCA002015","商誉",,,"INPUT","admin","2024-12-09 17:09:05.0","admin","2024-12-13 17:26:48.0" +"a8b568e7-d4e3-452e-b95b-3a8b74108f00","OLD","COMPANY","COMPANY_PROFIT","36","1","1","OCI007001","(一)基本每股收益","base earnings per share",,"OCI007001","(一)基本每股收益",,,"INPUT","admin","2024-12-09 17:59:42.0","admin","2024-12-13 18:42:18.0" +"a9915b01-bb7c-481d-a4df-5646d3230c31","OLD","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","28","3","1","OCLT","负债合计","total liabilities",,"OCLT","负债合计",,,"INPUT","admin","2024-12-09 17:07:07.0","admin","2024-12-13 18:33:53.0" +"aa49dc3a-cd74-4dcf-b1ac-274b61575ead","NEW","COMPANY","COMPANY_PROFIT","34","2","1","NCI00500201","1.权益法下可转损益的其他综合收益","other comprehensive income from transferable gains or losses under the equity method",,"NCI00500201","1.权益法下可转损益的其他综合收益",,,"INPUT","admin","2024-12-13 15:34:06.0","admin","2024-12-13 17:39:51.0" +"ab9b638e-da7d-46cb-af14-ae215510504e","NEW","COMPANY","COMPANY_CASH_FLOWS","29","1","1","NCC003004","偿还债务支付的现金","cash payments for debt repayment",,"NCC003004","偿还债务支付的现金",,,"INPUT","admin","2024-12-09 18:07:48.0","admin","2024-12-13 17:44:17.0" +"abcd99e8-4dcc-44bd-bb3d-a0f41bdbcd74","NEW","COMPANY","COMPANY_CASH_FLOWS","11","0","0","NCC002","二、投资活动产生的现金流量:","cash flows from investing activities",,"NCC002","二、投资活动产生的现金流量:",,,"INPUT","admin","2024-12-09 18:03:21.0","admin","2024-12-13 17:41:02.0" +"abfcca09-025e-4e77-879b-621ac25a7714","NEW","COMPANY","COMPANY_PROFIT","33","1","1","NCI005002","(二)将重分类进损益的其他综合收益","other comprehensive income that can be reclassified",,"NCI005002","(二)将重分类进损益的其他综合收益",,,"INPUT","admin","2024-12-09 17:58:56.0","admin","2024-12-13 17:39:42.0" +"ac0a79b0-caed-48d4-82a1-f43d73331553","NEW","COMPANY","COMPANY_ASSETS","22","1","1","NCA002006","其他非流动金融资产","other non current financial assets",,"NCA002006","其他非流动金融资产",,,"INPUT","admin","2024-12-09 17:03:55.0","admin","2024-12-13 17:26:08.0" +"ac73ef87-6fe6-4e9c-9fcc-3dec6e817111","NEW","COMPANY","COMPANY_PROFIT","10","1","1","NCI001002","加:其他收益","add other income","“其他收益”项目,反映计入其他收益的政府补助,以及其他与日常活动相关且计入其他收益的项目。该项目应根据“其他收益”科目的发生额分析填列。企业作为个人所得税的扣缴义务人,根据《中华人民共和国个人所得税法》收到的扣缴税款手续费,应作为其他与日常活动相关的收益在该项目中填列。","NCI001002","加:其他收益","“其他收益”项目,反映计入其他收益的政府补助,以及其他与日常活动相关且计入其他收益的项目。该项目应根据“其他收益”科目的发生额分析填列。企业作为个人所得税的扣缴义务人,根据《中华人民共和国个人所得税法》收到的扣缴税款手续费,应作为其他与日常活动相关的收益在该项目中填列。",,"INPUT","admin","2024-12-09 17:53:15.0","admin","2024-12-13 17:36:57.0" +"ad35611b-a65a-4758-9c3d-2e21c13f9a71","NEW","INSTITUTION","INSTITUTION_LIABILITIES_AND_NET_ASSETS","31","2","1","NINT","净资产合计","total net assets","“净资产合计”项目,反映单位期末净资产合计数。本项目应当根据本表中“累计盈余”、“专用基金”、“权益法调整”、“无偿调拨净资产”[月度报表]、“本期盈余”[月度报表]项目金额的合计数填列。","NINT","净资产合计","“净资产合计”项目,反映单位期末净资产合计数。本项目应当根据本表中“累计盈余”、“专用基金”、“权益法调整”、“无偿调拨净资产”[月度报表]、“本期盈余”[月度报表]项目金额的合计数填列。",,"INPUT","admin","2024-12-12 16:54:40.0","admin","2024-12-13 18:04:17.0" +"ae55a86e-020c-47a4-bc35-b4925b12d0c7","NEW","INSTITUTION","INSTITUTION_CASH_FLOWS","9","1","1","NIC001006","支付给职工以及为职工支付的现金","cash paid to and on behalf of employees","“支付给职工以及为职工支付的现金”项目,反映单位本年支付给职工以及为职工支付的现金。本项目应当根据“库存现金”、“银行存款”、“零余额账户用款额度”、 “财政拨款收入”、“应付职工薪酬”、“业务活动费用”、“单位管理费用”、“经营费用”等科目及其所属明细科目的记录分析填列。","NIC001006","支付给职工以及为职工支付的现金","“支付给职工以及为职工支付的现金”项目,反映单位本年支付给职工以及为职工支付的现金。本项目应当根据“库存现金”、“银行存款”、“零余额账户用款额度”、 “财政拨款收入”、“应付职工薪酬”、“业务活动费用”、“单位管理费用”、“经营费用”等科目及其所属明细科目的记录分析填列。",,"INPUT","admin","2024-12-12 17:29:28.0","admin","2024-12-13 18:12:18.0" +"ae814187-50b5-4c33-8eff-3c8ae5a989e7","NEW","COMPANY","COMPANY_ASSETS","32","1","1","NCA002016","长期待摊费用","long term deferred assets",,"NCA002016","长期待摊费用",,,"INPUT","admin","2024-12-09 17:09:29.0","admin","2024-12-13 17:26:52.0" +"af051654-432c-4e39-bc01-da2f848175bd","NEW","COMPANY","COMPANY_ASSETS","11","1","1","NCA001010","合同资产","contract assert",,"NCA001010","合同资产",,,"INPUT","admin","2024-12-09 16:25:05.0","admin","2024-12-13 17:23:18.0" +"afeed993-0a1c-49e9-8cb8-c0f682f07a49","NEW","COMPANY","COMPANY_CASH_FLOWS","18","1","1","NCC002006","购建固定资产、无形资产和其他长期资产支付的现金","cash paid for the purchase and construction of fixed assets intangible assets and other long term assets",,"NCC002006","购建固定资产、无形资产和其他长期资产支付的现金",,,"INPUT","admin","2024-12-09 18:04:31.0","admin","2024-12-13 17:43:03.0" +"b02750d1-5cdb-418a-b731-571b9e05f4b5","OLD","COMPANY","COMPANY_CASH_FLOWS","10","3","1","OCC001T","经营活动产生的现金流量净额","net cash flow from operating activities",,"OCC001T","经营活动产生的现金流量净额",,,"INPUT","admin","2024-12-09 18:03:08.0","admin","2024-12-13 18:45:40.0" +"b1c483d3-c5b2-43c9-9b2b-630b25b7f91d","NEW","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","1","1","1","NCL001001","短期借款","short term loans",,"NCL001001","短期借款",,,"INPUT","admin","2024-12-09 16:53:33.0","admin","2024-12-13 17:28:58.0" +"b1c483d3-c5b2-43c9-9b2b-630b25b7f929","NEW","INSTITUTION","INSTITUTION_LIABILITIES_AND_NET_ASSETS","2","1","1","NIL001001","短期借款","short term loans","“短期借款”项目,反映事业单位期末短期借款的余额。本项目应当根据“短期借款”科目的期末余额填列。","NIL001001","短期借款","“短期借款”项目,反映事业单位期末短期借款的余额。本项目应当根据“短期借款”科目的期末余额填列。",,"INPUT","admin","2024-12-09 16:53:33.0","admin","2024-12-13 18:05:32.0" +"b1fed9e1-51f3-4dc3-b7ce-856b35739578","OLD","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","23","1","1","OCL002004","预计负债","accrued liabilities",,"OCL002004","预计负债",,,"INPUT","admin","2024-12-09 17:04:31.0","admin","2024-12-13 18:36:09.0" +"b26aac56-a6f7-4aa3-8e2b-963581e71ea9","NEW","INSTITUTION","INSTITUTION_INCOME_AND_EXPENSES","3","2","1","NII00100101","其中:政府性基金收入","including government fund income","“政府性基金收入”项目,反映单位本期取得的财政拨款收入中属于政府性基金预算拨款的金额。本项目应当根据“财政拨款收入”相关明细科目的本期发生额填列。","NII00100101","其中:政府性基金收入","“政府性基金收入”项目,反映单位本期取得的财政拨款收入中属于政府性基金预算拨款的金额。本项目应当根据“财政拨款收入”相关明细科目的本期发生额填列。",,"INPUT","admin","2024-12-12 17:03:50.0","admin","2024-12-13 18:08:27.0" +"b2a613f5-e00e-4f6d-85fc-ddf9a7ca3ee4","NEW","COMPANY","COMPANY_PROFIT","12","3","1","NCI0010020101","其中:对联营企业和合营企业的投资收益","including income on investment in associates and joint ventures",,"NCI0010020101","其中:对联营企业和合营企业的投资收益",,,"INPUT","admin","2024-12-09 17:53:44.0","admin","2024-12-13 17:37:24.0" +"b39f1aee-ded9-43fc-8e1e-2ee47b211930","OLD","COMPANY","COMPANY_PROFIT","33","2","1","OCI00500205","5.外币财务报表折算差额","differences in translation of financial statements in foreign currencies",,"OCI00500205","5.外币财务报表折算差额",,,"INPUT","admin","2024-12-13 15:00:51.0","admin","2024-12-13 18:42:08.0" +"b3e986f9-4e4a-42de-95d0-c48c34c92f30","NEW","INSTITUTION","INSTITUTION_LIABILITIES_AND_NET_ASSETS","15","1","1","NIL001014","其他流动负债","other current liabilities","“其他流动负债”项目,反映单位期末除本表中上述各项之外的其他流动负债的合计数。本项目应当根据有关科目的期末余额的合计数填列。","NIL001014","其他流动负债","“其他流动负债”项目,反映单位期末除本表中上述各项之外的其他流动负债的合计数。本项目应当根据有关科目的期末余额的合计数填列。",,"INPUT","admin","2024-12-09 16:57:53.0","admin","2024-12-13 18:06:39.0" +"b3e986f9-4e4a-42de-95d0-c48c34c92f55","NEW","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","14","1","1","NCL001013","其他流动负债","other current liabilities",,"NCL001013","其他流动负债",,,"INPUT","admin","2024-12-09 16:57:53.0","admin","2024-12-13 17:29:53.0" +"b6f34049-9827-4d0e-8be4-fa748e2b0ec1","NEW","COMPANY","COMPANY_ASSETS","41","3","1","NCAT","资产总计","total assets",,"NCAT","资产总计",,,"INPUT","admin","2024-12-09 17:15:05.0","admin","2024-12-13 17:52:33.0" +"b7612abc-41e4-4eac-97d2-e2f54f5a43a8","NEW","COMPANY","COMPANY_PROFIT","40","0","1","NCI006","六、综合收益总额","total comprehensive income",,"NCI006","六、综合收益总额",,,"INPUT","admin","2024-12-09 17:59:13.0","admin","2024-12-13 17:34:53.0" +"b7a38a8b-5d8f-4783-b8f9-25b1835a4231","NEW","INSTITUTION","INSTITUTION_LIABILITIES_AND_NET_ASSETS","10","1","1","NIL001009","应付利息","interest payable","“应付利息”项目,反映事业单位期末按照合同约定应支付的借款利息。事业单位到期一次还本付息的长期借款利息不包括在本项目内。本项目应当根据“应付利息”科目的期末余额填列。","NIL001009","应付利息","“应付利息”项目,反映事业单位期末按照合同约定应支付的借款利息。事业单位到期一次还本付息的长期借款利息不包括在本项目内。本项目应当根据“应付利息”科目的期末余额填列。",,"INPUT","admin","2024-12-09 16:56:59.0","admin","2024-12-13 18:06:02.0" +"b7a38a8b-5d8f-4783-b8f9-25b1835a4277","NEW","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","10","1","1","NCL001009","应交税费","tax payable",,"NCL001009","应交税费",,,"INPUT","admin","2024-12-09 16:56:59.0","admin","2024-12-13 17:29:33.0" +"b91928c3-8d66-479f-af27-2938a275baef","OLD","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","25","1","1","OCL002006","递延所得税负债","deferred income tax liabilities",,"OCL002006","递延所得税负债",,,"INPUT","admin","2024-12-09 17:05:14.0","admin","2024-12-13 18:36:16.0" +"b9c3014f-e715-41aa-bd7b-674c991e1406","NEW","COMPANY","COMPANY_PROFIT","2","1","1","NCI001001","减:营业成本","less perating costs",,"NCI001001","减:营业成本",,,"INPUT","admin","2024-12-09 17:51:05.0","admin","2024-12-13 17:35:22.0" +"ba1af45b-52ba-484e-b7db-9b6be163b118","NEW","COMPANY","COMPANY_CASH_FLOWS","20","1","1","NCC002008","取得子公司及其他营业单位支付的现金净额","net cash payments from subsidiaries and other business units",,"NCC002008","取得子公司及其他营业单位支付的现金净额",,,"INPUT","admin","2024-12-09 18:04:44.0","admin","2024-12-13 17:43:13.0" +"ba386081-30a8-4c79-b8cc-3d0af7ee4f35","NEW","COMPANY","COMPANY_ASSETS","2","1","1","NCA001001","货币资金","cash",,"NCA001001","货币资金",,,"INPUT","admin","2024-12-09 15:54:15.0","admin","2024-12-13 17:22:03.0" +"bb0bf316-c851-4e3b-b1b1-99b39300a893","NEW","COMPANY","COMPANY_ASSETS","27","1","1","NCA002011","油气资产","oil and gas assets",,"NCA002011","油气资产",,,"INPUT","admin","2024-12-09 17:05:51.0","admin","2024-12-13 17:26:32.0" +"bb831fdf-73cf-4fee-940f-086f9a57eb86","NEW","COMPANY","COMPANY_CASH_FLOWS","27","1","1","NCC003003","收到其他与筹资活动有关的现金","other cash received in connection with fund raising activities",,"NCC003003","收到其他与筹资活动有关的现金",,,"INPUT","admin","2024-12-09 18:07:35.0","admin","2024-12-13 17:43:51.0" +"bbd3a8bd-521e-4d23-810a-a666a6f5a332","NEW","INSTITUTION","INSTITUTION_LIABILITIES_AND_NET_ASSETS","19","1","1","NIL002002 ","长期应付款","long term accounts payable ","“长期应付款”项目,反映单位期末长期应付款的余额。本项目应当根据“长期应付款”科目的期末余额减去其中将于 1 年内(含1 年)到期的长期应付款余额后的金额填列。","NIL002002 ","长期应付款","“长期应付款”项目,反映单位期末长期应付款的余额。本项目应当根据“长期应付款”科目的期末余额减去其中将于 1 年内(含1 年)到期的长期应付款余额后的金额填列。",,"INPUT","admin","2024-12-09 17:00:11.0","admin","2024-12-13 18:06:57.0" +"bbd3a8bd-521e-4d23-810a-a666a6f5a39f","NEW","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","18","1","1","NCL002002","应付债券","bonds payable",,"NCL002002","应付债券",,,"INPUT","admin","2024-12-09 17:00:11.0","admin","2024-12-13 17:30:27.0" +"bc581c4e-3373-45c8-a5a6-aa8feaef4622","OLD","COMPANY","COMPANY_PROFIT","24","0","1","OCI005","五、其他综合收益的税后净额","net after tax on other comprehensive income",,"OCI005","五、其他综合收益的税后净额",,,"INPUT","admin","2024-12-09 17:58:12.0","admin","2024-12-13 18:37:03.0" +"bd1af66f-4d02-46a9-879d-f9aedd9e6dc5","OLD","COMPANY","COMPANY_CASH_FLOWS","15","1","1","OCC002004","处置子公司及其他营业单位收到的现金净额","net cash received from disposal subsidiaries and other business units",,"OCC002004","处置子公司及其他营业单位收到的现金净额",,,"INPUT","admin","2024-12-09 18:04:11.0","admin","2024-12-13 18:46:12.0" +"bef7a776-a5c4-4ad7-a622-e1dcf88469df","NEW","INSTITUTION","INSTITUTION_INCOME_AND_EXPENSES","5","1","1","NII001003","(三)上级补助收入","subsidy income from superiors","“上级补助收入”项目,反映事业单位本期从主管部门和上级单位收到或应收的非财政拨款收入。本项目应当根据“上级补助收入”科目的本期发生额填列。","NII001003","(三)上级补助收入","“上级补助收入”项目,反映事业单位本期从主管部门和上级单位收到或应收的非财政拨款收入。本项目应当根据“上级补助收入”科目的本期发生额填列。",,"INPUT","admin","2024-12-12 17:06:15.0","admin","2024-12-13 18:08:39.0" +"c018566c-5d27-4742-89f0-80cdde90201e","OLD","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","17","1","1","OCL002001","长期借款","long term loans payable",,"OCL002001","长期借款",,,"INPUT","admin","2024-12-09 16:59:40.0","admin","2024-12-13 18:35:20.0" +"c17c8f78-3bc5-4b41-9317-ed67799ef4b9","NEW","COMPANY","COMPANY_PROFIT","25","1","1","NCI004001","(一)持续经营净利润(净亏损以“-”号填列)","net profit from continuing operations","“(一)持续经营净利润”和“(二)终止经营净利润”项目,分别反映净利润中与持续经营相关的净利润和与终止经营相关的净利润;如为净亏损,以“-”号填列。该两个项目应按照《企业会计准则第 42 号——持有待售的非流动资产、处置组和终止经营》的相关规定分别列报。","NCI004001","(一)持续经营净利润(净亏损以“-”号填列)","“(一)持续经营净利润”和“(二)终止经营净利润”项目,分别反映净利润中与持续经营相关的净利润和与终止经营相关的净利润;如为净亏损,以“-”号填列。该两个项目应按照《企业会计准则第 42 号——持有待售的非流动资产、处置组和终止经营》的相关规定分别列报。",,"INPUT","admin","2024-12-09 17:57:40.0","admin","2024-12-13 17:38:55.0" +"c1d883a9-5d1b-46d4-bdb4-cff01ede40f0","NEW","COMPANY","COMPANY_ASSETS","21","1","1","NCA002005","其他权益工具投资","other investment","“其他权益工具投资”项目,反映资产负债表日企业指定为以公允价值计量且其变动计入其他综合收益的非交易性权益工具投资的期末账面价值。该项目应根据“其他权益工具投资”科目的期末余额填列。","NCA002005","其他权益工具投资","“其他权益工具投资”项目,反映资产负债表日企业指定为以公允价值计量且其变动计入其他综合收益的非交易性权益工具投资的期末账面价值。该项目应根据“其他权益工具投资”科目的期末余额填列。",,"INPUT","admin","2024-12-09 17:03:20.0","admin","2024-12-13 17:26:04.0" +"c298ccf8-c699-4c0c-a53f-e95ac5716b14","NEW","INSTITUTION","INSTITUTION_INCOME_AND_EXPENSES","6","1","1","NII001004","(四)附属单位上缴收入","affiliated units hand over income","“附属单位上缴收入”项目,反映事业单位本期收到或应收的独立核算的附属单位按照有关规定上缴的收入。本项目应当根据“附属单位上缴收入”科目的本期发生额填列。","NII001004","(四)附属单位上缴收入","“附属单位上缴收入”项目,反映事业单位本期收到或应收的独立核算的附属单位按照有关规定上缴的收入。本项目应当根据“附属单位上缴收入”科目的本期发生额填列。",,"INPUT","admin","2024-12-12 17:07:00.0","admin","2024-12-13 18:08:42.0" +"c4be16ed-64f3-40e7-9754-a4c950b3b7f8","OLD","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","18","1","1","OCL002002","应付债券","bonds payable",,"OCL002002","应付债券",,,"INPUT","admin","2024-12-09 17:00:11.0","admin","2024-12-13 18:35:24.0" +"c4c314fe-4c44-4268-b1bb-a79619667b74","OLD","COMPANY","COMPANY_ASSETS","14","0","0","OCA002","非流动资产:","non current assets",,"OCA002","非流动资产:",,,"INPUT","admin","2024-12-09 16:58:51.0","admin","2024-12-13 18:29:40.0" +"c5d1ad39-66ae-4eac-b933-c5ef54dbc26e","NEW","COMPANY","COMPANY_CASH_FLOWS","22","2","1","NCC002STO","投资活动现金流出小计","subtotal cash outflows from investing activities",,"NCC002STO","投资活动现金流出小计",,,"INPUT","admin","2024-12-09 18:06:14.0","admin","2024-12-13 17:59:45.0" +"c676b991-a5b7-4412-9fa7-380ecb8d8eb9","NEW","INSTITUTION","INSTITUTION_CASH_FLOWS","35","3","1","NIC003T","筹资活动产生的现金流量净额","net cash flow from financing activities","“筹资活动产生的现金流量净额”项目,应当按照本表中“筹资活动的现金流入小计”项目金额减去“筹资活动的现金流出小计”金额后的金额填列;如为负数,以“-”号填列。","NIC003T","筹资活动产生的现金流量净额","“筹资活动产生的现金流量净额”项目,应当按照本表中“筹资活动的现金流入小计”项目金额减去“筹资活动的现金流出小计”金额后的金额填列;如为负数,以“-”号填列。",,"INPUT","admin","2024-12-12 17:35:08.0","admin","2024-12-13 18:20:05.0" +"c859727f-190c-40a1-a145-c64bef3203c6","OLD","COMPANY","COMPANY_CASH_FLOWS","4","2","1","OCC001STI","经营活动现金流入小计","sub total of cash flow from operating activities",,"OCC001STI","经营活动现金流入小计",,,"INPUT","admin","2024-12-09 18:01:14.0","admin","2024-12-13 18:45:24.0" +"c8c18168-e74c-4a62-ae00-0c2a33576d6e","NEW","COMPANY","COMPANY_CASH_FLOWS","13","1","1","NCC002002","取得投资收益收到的现金","cash received from investment income",,"NCC002002","取得投资收益收到的现金",,,"INPUT","admin","2024-12-09 18:03:54.0","admin","2024-12-13 17:42:39.0" +"ca7c81c5-47ef-4383-a1b1-d715361917ee","OLD","COMPANY","COMPANY_CASH_FLOWS","13","1","1","OCC002002","取得投资收益收到的现金","cash received from investment income",,"OCC002002","取得投资收益收到的现金",,,"INPUT","admin","2024-12-09 18:03:54.0","admin","2024-12-13 18:46:06.0" +"caa0bb9f-0eaf-4fbd-ba40-a2ce2002c519","OLD","COMPANY","COMPANY_CASH_FLOWS","36","1","1","OCC005A001","加:期初现金及现金等价物余额","add opening cash and cash equivalents balances",,"OCC005A001","加:期初现金及现金等价物余额",,,"INPUT","admin","2024-12-09 18:10:09.0","admin","2024-12-13 18:47:44.0" +"cb0bda26-c2c6-448c-a0b3-9324245ff86e","NEW","COMPANY","COMPANY_PROFIT","37","2","1","NCI00500204","4.其他债权投资信用减值准备","other credit impairment provisions for debt investments","“其他债权投资信用减值准备”项目,反映企业按照《企业会计准则第 22 号——金融工具确认和计量》(财会〔2017〕7号)第十八条分类为以公允价值计量且其变动计入其他综合收益的金融资产的损失准备。该项目应根据“其他综合收益”科目下的“信用减值准备”明细科目的发生额分析填列。","NCI00500204","4.其他债权投资信用减值准备","“其他债权投资信用减值准备”项目,反映企业按照《企业会计准则第 22 号——金融工具确认和计量》(财会〔2017〕7号)第十八条分类为以公允价值计量且其变动计入其他综合收益的金融资产的损失准备。该项目应根据“其他综合收益”科目下的“信用减值准备”明细科目的发生额分析填列。",,"INPUT","admin","2024-12-13 15:34:49.0","admin","2024-12-13 17:40:03.0" +"cb4bd205-e30d-4966-a6f9-8e08a3410646","OLD","COMPANY","COMPANY_CASH_FLOWS","28","2","1","OCC003STI","筹资活动现金流入小计","subtotal cash inflows from financing activities",,"OCC003STI","筹资活动现金流入小计",,,"INPUT","admin","2024-12-09 18:07:42.0","admin","2024-12-13 18:47:10.0" +"cb68b2fd-b3a4-4ab2-8ec5-909d1b7e79a2","NEW","INSTITUTION","INSTITUTION_LIABILITIES_AND_NET_ASSETS","11","1","1","NIL001010","预收账款","unearned revenue","“预收账款”项目,反映事业单位期末预先收取但尚未确认收入和实际结算的款项余额。本项目应当根据“预收账款”科目的期末余额填列。","NIL001010","预收账款","“预收账款”项目,反映事业单位期末预先收取但尚未确认收入和实际结算的款项余额。本项目应当根据“预收账款”科目的期末余额填列。",,"INPUT","admin","2024-12-12 16:45:51.0","admin","2024-12-13 18:06:08.0" +"cc887abc-ad67-4e9a-9551-07b5731651aa","NEW","INSTITUTION","INSTITUTION_LIABILITIES_AND_NET_ASSETS","3","1","1","NIL001002","应交增值税","gains tax payable","“应交增值税”项目,反映单位期末应缴未缴的增值税税额。本项目应当根据“应交增值税”科目的期末余额填列;如“应交增值税”科目期末为借方余额,以“-”号填列。","NIL001002","应交增值税","“应交增值税”项目,反映单位期末应缴未缴的增值税税额。本项目应当根据“应交增值税”科目的期末余额填列;如“应交增值税”科目期末为借方余额,以“-”号填列。",,"INPUT","admin","2024-12-12 16:33:56.0","admin","2024-12-13 18:05:37.0" +"cca075d6-4c8f-47b1-8954-c23455b9d7e8","OLD","COMPANY","COMPANY_CASH_FLOWS","17","2","1","OCC002STI","投资活动现金流入小计","sub total cash flows from investing activities",,"OCC002STI","投资活动现金流入小计",,,"INPUT","admin","2024-12-09 18:04:25.0","admin","2024-12-13 18:46:23.0" +"ce33bdf6-1c16-4388-9009-f2491a4e46bf","NEW","INSTITUTION","INSTITUTION_CASH_FLOWS","10","1","1","NIC001007","支付的各项税费","taxes and fees paid","“支付的各项税费”项目,反映单位本年用于缴纳日常活动相关税费而支付的现金。本项目应当根据“库存现金”、“银行存款”、“零余额账户用款额度”、“应交增值税”、“其他应交税费”、“业务活动费用”、“单位管理费用”、“经营费用”、“所得税费用”等科目及其所属明细科目的记录分析填列。","NIC001007","支付的各项税费","“支付的各项税费”项目,反映单位本年用于缴纳日常活动相关税费而支付的现金。本项目应当根据“库存现金”、“银行存款”、“零余额账户用款额度”、“应交增值税”、“其他应交税费”、“业务活动费用”、“单位管理费用”、“经营费用”、“所得税费用”等科目及其所属明细科目的记录分析填列。",,"INPUT","admin","2024-12-12 17:29:53.0","admin","2024-12-13 18:12:22.0" +"ceba04e7-4851-4feb-9f06-f06b04fd8d43","NEW","COMPANY","COMPANY_PROFIT","29","2","1","NCI00500101","1.重新计量设定受益计划变动额","remeasurement of changes in defined benefit plans",,"NCI00500101","1.重新计量设定受益计划变动额",,,"INPUT","admin","2024-12-13 15:32:27.0","admin","2024-12-13 17:39:18.0" +"cee98732-9ba2-4517-b84c-8aa8feb95833","NEW","INSTITUTION","INSTITUTION_LIABILITIES_AND_NET_ASSETS","26","1","1","NIN001","累计盈余","accumulated surplus","“累计盈余”项目,反映单位期末未分配盈余(或未弥补亏损)以及无偿调拨净资产变动的累计数。本项目应当根据“累计盈余”科目的期末余额填列。","NIN001","累计盈余","“累计盈余”项目,反映单位期末未分配盈余(或未弥补亏损)以及无偿调拨净资产变动的累计数。本项目应当根据“累计盈余”科目的期末余额填列。",,"INPUT","admin","2024-12-09 17:08:47.0","admin","2024-12-13 18:07:22.0" +"cee98732-9ba2-4517-b84c-8aa8feb95868","NEW","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","30","1","1","NCE001001","实收资本(或股本)","subscribed capital",,"NCE001001","实收资本(或股本)",,,"INPUT","admin","2024-12-09 17:08:47.0","admin","2024-12-13 17:55:21.0" +"cf8f117c-bf7e-49b3-9755-cd4ac5eb561f","OLD","COMPANY","COMPANY_CASH_FLOWS","32","2","1","OCC003STO","筹资活动现金流出小计","subtotal cash outflows from financing activities",,"OCC003STO","筹资活动现金流出小计",,,"INPUT","admin","2024-12-09 18:08:55.0","admin","2024-12-13 18:47:27.0" +"d2283db1-174c-4fb0-af92-127621cc54f9","NEW","COMPANY","COMPANY_ASSETS","23","1","1","NCA002007","投资性房地产","investment properties",,"NCA002007","投资性房地产",,,"INPUT","admin","2024-12-09 17:04:21.0","admin","2024-12-13 17:26:12.0" +"d2497548-1af5-438e-84dc-9dccfdcff46a","NEW","COMPANY","COMPANY_ASSETS","25","1","1","NCA002009","在建工程","construction in progress","“在建工程”项目,反映资产负债表日企业尚未达到预定可使用状态的在建工程的期末账面价值和企业为在建工程准备的各种物资的期末账面价值。该项目应根据“在建工程”科目的期末余额,减去“在建工程减值准备”科目的期末余额后的金额,以及“工程物资”科目的期末余额,减去“工程物资减值准备”科目的期末余额后的金额填列。","NCA002009","在建工程","“在建工程”项目,反映资产负债表日企业尚未达到预定可使用状态的在建工程的期末账面价值和企业为在建工程准备的各种物资的期末账面价值。该项目应根据“在建工程”科目的期末余额,减去“在建工程减值准备”科目的期末余额后的金额,以及“工程物资”科目的期末余额,减去“工程物资减值准备”科目的期末余额后的金额填列。",,"INPUT","admin","2024-12-09 17:05:01.0","admin","2024-12-13 17:26:20.0" +"d33b866d-936d-4405-93c4-e2e1f54de407","NEW","INSTITUTION","INSTITUTION_CASH_FLOWS","19","2","1","NIC002STI","投资活动的现金流入小计","subtotal of cash inflows from investing activities","“投资活动的现金流入小计”项目,反映单位本年投资活动产生的现金流入的合计数。本项目应当根据本表中“收回投资收到的现金”、“取得投资收益收到的现金”、“处置固定资产、无形资产、公共基础设施等收回的现金净额”、“收到的其他与投资活动有关的现金”项目金额的合计数填列。","NIC002STI","投资活动的现金流入小计","“投资活动的现金流入小计”项目,反映单位本年投资活动产生的现金流入的合计数。本项目应当根据本表中“收回投资收到的现金”、“取得投资收益收到的现金”、“处置固定资产、无形资产、公共基础设施等收回的现金净额”、“收到的其他与投资活动有关的现金”项目金额的合计数填列。",,"INPUT","admin","2024-12-12 17:31:41.0","admin","2024-12-13 18:18:53.0" +"d4514601-5d3a-4c52-a1b0-890a09e15421","NEW","INSTITUTION","INSTITUTION_INCOME_AND_EXPENSES","13","1","1","NII001011","(十一)其他收入","other income","“其他收入”项目,反映单位本期取得的除以上收入项目外的其他收入的总额。本项目应当根据“其他收入”科目的本期发生额填列。","NII001011","(十一)其他收入","“其他收入”项目,反映单位本期取得的除以上收入项目外的其他收入的总额。本项目应当根据“其他收入”科目的本期发生额填列。",,"INPUT","admin","2024-12-12 17:12:15.0","admin","2024-12-13 18:09:10.0" +"d543476a-650a-45b7-bde2-508ce7a4d173","OLD","COMPANY","COMPANY_CASH_FLOWS","12","1","1","OCC002001","收回投资收到的现金","cash received from the investment is recovered",,"OCC002001","收回投资收到的现金",,,"INPUT","admin","2024-12-09 18:03:36.0","admin","2024-12-13 18:46:02.0" +"d61a5d77-67ad-4a81-8298-82cc0d301223","NEW","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","22","1","1","NCL002004","长期应付款","long term accounts payable","“长期应付款”项目,反映资产负债表日企业除长期借款和应付债券以外的其他各种长期应付款项的期末账面价值。该项目应根据“长期应付款”科目的期末余额,减去相关的“未确认融资费用”科目的期末余额后的金额,以及“专项应付款”科目的期末余额填列。","NCL002004","长期应付款","“长期应付款”项目,反映资产负债表日企业除长期借款和应付债券以外的其他各种长期应付款项的期末账面价值。该项目应根据“长期应付款”科目的期末余额,减去相关的“未确认融资费用”科目的期末余额后的金额,以及“专项应付款”科目的期末余额填列。",,"INPUT","admin","2024-12-09 17:04:09.0","admin","2024-12-13 17:31:19.0" +"d6f71c56-8003-4e48-af45-e4cb96eb0e48","NEW","INSTITUTION","INSTITUTION_CASH_FLOWS","26","0","0","NIC003","三、筹资活动产生的现金流量:","cash flows from financing activities",,"NIC003","三、筹资活动产生的现金流量:",,,"INPUT","admin","2024-12-12 17:33:01.0","admin","2024-12-13 18:19:20.0" +"d7484592-853a-41b5-8d03-ee279b88cdf6","OLD","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","30","1","1","OCE001","实收资本(或股本)","subscribed capital",,"OCE001","实收资本(或股本)",,,"INPUT","admin","2024-12-09 17:08:47.0","admin","2024-12-13 18:32:09.0" +"d8a367a0-8fbc-4da2-bd29-424bf244b2b3","OLD","COMPANY","COMPANY_PROFIT","35","0","1","OCI007","七、每股收益:","earnings per share",,"OCI007","七、每股收益:",,,"INPUT","admin","2024-12-09 17:59:28.0","admin","2024-12-13 18:37:13.0" +"db32aed6-bd65-4e2f-b569-d4b6e7542f43","NEW","COMPANY","COMPANY_CASH_FLOWS","2","1","1","NCC001002","收到的税费返还","refunds of taxes",,"NCC001002","收到的税费返还",,,"INPUT","admin","2024-12-09 18:00:39.0","admin","2024-12-13 17:41:36.0" +"db691af8-d1d4-493e-b2d6-dc088a72117a","OLD","COMPANY","COMPANY_CASH_FLOWS","11","0","0","OCC002","二、投资活动产生的现金流量:","cash flows from investing activities",,"OCC002","二、投资活动产生的现金流量:",,,"INPUT","admin","2024-12-09 18:03:21.0","admin","2024-12-13 18:43:13.0" +"dbfd475a-e772-415c-8dc4-3f750bff3dad","OLD","COMPANY","COMPANY_PROFIT","13","2","1","OCI001A03","公允价值变动收益(损失以“-”号填列)","add income of fair value change",,"OCI001A03","公允价值变动收益(损失以“-”号填列)",,,"INPUT","admin","2024-12-09 17:54:48.0","admin","2024-12-13 18:40:21.0" +"dcfa48fd-77c6-45d0-a80d-3df1c4fa8ae1","NEW","COMPANY","COMPANY_PROFIT","36","2","1","NCI00500203","3.金融资产重分类计入其他综合收益的金额","the amount of financial assets that are reclassified into other comprehensive income","“金融资产重分类计入其他综合收益的金额”项目,反映企业将一项以摊余成本计量的金融资产重分类为以公允价值计量且其变动计入其他综合收益的金融资产时,计入其他综合收益的原账面价值与公允价值之间的差额。该项目应根据“其他综合收益”科目下的相关明细科目的发生额分析填列。","NCI00500203","3.金融资产重分类计入其他综合收益的金额","“金融资产重分类计入其他综合收益的金额”项目,反映企业将一项以摊余成本计量的金融资产重分类为以公允价值计量且其变动计入其他综合收益的金融资产时,计入其他综合收益的原账面价值与公允价值之间的差额。该项目应根据“其他综合收益”科目下的相关明细科目的发生额分析填列。",,"INPUT","admin","2024-12-13 15:34:35.0","admin","2024-12-13 17:39:59.0" +"dd2323d4-67d1-467f-9cfa-891824814fde","NEW","INSTITUTION","INSTITUTION_CASH_FLOWS","25","3","1","NIC002T","投资活动产生的现金流量净额","net cash flow from investing activities","“投资活动产生的现金流量净额”项目,应当按照本表中“投资活动的现金流入小计”项目金额减去“投资活动的现金流出小计”项目金额后的金额填列;如为负数,以“-”号填列。","NIC002T","投资活动产生的现金流量净额","“投资活动产生的现金流量净额”项目,应当按照本表中“投资活动的现金流入小计”项目金额减去“投资活动的现金流出小计”项目金额后的金额填列;如为负数,以“-”号填列。",,"INPUT","admin","2024-12-12 17:32:47.0","admin","2024-12-13 18:19:06.0" +"dd7af2cd-fbc4-4e11-bb0c-2ba78f0fa1d9","NEW","COMPANY","COMPANY_PROFIT","20","1","1","NCI002001","加:营业外收入","add non operating income","“营业外收入”项目,反映企业发生的除营业利润以外的收益,主要包括与企业日常活动无关的政府补助、盘盈利得、捐赠利得(企业接受股东或股东的子公司直接或间接的捐赠,经济实质属于股东对企业的资本性投入的除外)等。该项目应根据“营业外收入”科目的发生额分析填列。","NCI002001","加:营业外收入","“营业外收入”项目,反映企业发生的除营业利润以外的收益,主要包括与企业日常活动无关的政府补助、盘盈利得、捐赠利得(企业接受股东或股东的子公司直接或间接的捐赠,经济实质属于股东对企业的资本性投入的除外)等。该项目应根据“营业外收入”科目的发生额分析填列。",,"INPUT","admin","2024-12-09 17:56:35.0","admin","2024-12-13 17:38:21.0" +"dde6c957-a739-4b85-89fa-46fd59b50a80","OLD","COMPANY","COMPANY_PROFIT","17","1","1","OCI002A01","加:营业外收入","add non operating income","“营业外收入”项目,反映企业发生的除营业利润以外的收益,主要包括与企业日常活动无关的政府补助、盘盈利得、捐赠利得(企业接受股东或股东的子公司直接或间接的捐赠,经济实质属于股东对企业的资本性投入的除外)等。该项目应根据“营业外收入”科目的发生额分析填列。","OCI002A01","加:营业外收入","“营业外收入”项目,反映企业发生的除营业利润以外的收益,主要包括与企业日常活动无关的政府补助、盘盈利得、捐赠利得(企业接受股东或股东的子公司直接或间接的捐赠,经济实质属于股东对企业的资本性投入的除外)等。该项目应根据“营业外收入”科目的发生额分析填列。",,"INPUT","admin","2024-12-09 17:56:35.0","admin","2024-12-13 18:40:41.0" +"de2671b0-ce11-4149-89bd-2518cb718b2c","NEW","INSTITUTION","INSTITUTION_CASH_FLOWS","11","1","1","NIC001008","支付的其他与日常活动有关的现金","other cash payments related to daily activities","“支付的其他与日常活动有关的现金”项目,反映单位本年支付的除上述项目之外与日常活动有关的现金。本项目应当根据“库存现金”、“银行存款”、 “零余额账户用款额度”、 “财政拨款收入”、“其他应付款”、“业务活动费用”、“单位管理费用”、“经营费用”、“其他费用”等科目及其所属明细科目的记录分析填列。","NIC001008","支付的其他与日常活动有关的现金","“支付的其他与日常活动有关的现金”项目,反映单位本年支付的除上述项目之外与日常活动有关的现金。本项目应当根据“库存现金”、“银行存款”、 “零余额账户用款额度”、 “财政拨款收入”、“其他应付款”、“业务活动费用”、“单位管理费用”、“经营费用”、“其他费用”等科目及其所属明细科目的记录分析填列。",,"INPUT","admin","2024-12-12 17:30:04.0","admin","2024-12-13 18:12:26.0" +"de9bca97-8878-4f43-aa52-2677d7773ced","NEW","INSTITUTION","INSTITUTION_INCOME_AND_EXPENSES","8","1","1","NII001006","(六)非同级财政拨款收入","revenue from fiscal appropriations at the non same level","“非同级财政拨款收入”项目,反映单位本期从非同级政府财政部门取得的财政拨款,不包括事业单位因开展科研及其辅助活动从非同级财政部门取得的经费拨款。本项目应当根据“非同级财政拨款收入”科目的本期发生额填列。","NII001006","(六)非同级财政拨款收入","“非同级财政拨款收入”项目,反映单位本期从非同级政府财政部门取得的财政拨款,不包括事业单位因开展科研及其辅助活动从非同级财政部门取得的经费拨款。本项目应当根据“非同级财政拨款收入”科目的本期发生额填列。",,"INPUT","admin","2024-12-12 17:08:26.0","admin","2024-12-13 18:08:50.0" +"e0883267-2ced-414f-bb35-b1f80e66f2f9","OLD","COMPANY","COMPANY_PROFIT","9","5","1","OCI001L0602","利息收入","including interest income","“财务费用”项目下的“利息收入”项目,反映企业按照相关会计准则确认的应冲减财务费用的利息收入。该项目应根据“财务费用”科目的相关明细科目的发生额分析填列。该项目作为“财务费用”项目的其中项,以正数填列。","OCI001L0602","利息收入","“财务费用”项目下的“利息收入”项目,反映企业按照相关会计准则确认的应冲减财务费用的利息收入。该项目应根据“财务费用”科目的相关明细科目的发生额分析填列。该项目作为“财务费用”项目的其中项,以正数填列。",,"INPUT","admin","2024-12-09 17:52:57.0","admin","2024-12-13 18:39:46.0" +"e12eef49-3c01-40d9-b9bd-b637ac9f649e","NEW","COMPANY","COMPANY_CASH_FLOWS","23","3","1","NCC002T","投资活动产生的现金流量净额","net cash flow from investing activities",,"NCC002T","投资活动产生的现金流量净额",,,"INPUT","admin","2024-12-09 18:06:19.0","admin","2024-12-13 17:59:52.0" +"e207b09e-51cb-4dd8-834e-bf1588edca90","NEW","COMPANY","COMPANY_CASH_FLOWS","3","1","1","NCC001003","收到其他与经营活动有关的现金","cash received relating to other operating activities",,"NCC001003","收到其他与经营活动有关的现金",,,"INPUT","admin","2024-12-09 18:00:48.0","admin","2024-12-13 17:41:40.0" +"e23fda88-e3ba-4088-9051-71970bc85fc2","OLD","COMPANY","COMPANY_PROFIT","15","2","1","OCI001A05","资产处置收益(损失以“-”号填列)","add income of disposal of assets","“资产处置收益”项目,反映企业出售划分为持有待售的非流动资产(金融工具、长期股权投资和投资性房地产除外)或处置组(子公司和业务除外)时确认的处置利得或损失,以及处置未划分为持有待售的固定资产、在建工程、生产性生物资产及无形资产而产生的处置利得或损失。债务重组中因处置非流动资产(金融工具、长期股权投资和投资性房地产除外)产生的利得或损失和非货币性资产交换中换出非流动资产(金融工具、长期股权投资和投资性房地产除外)产生的利得或损失也包括在本项目内。该项目应根据“资产处置损益”科目的发生额分析填列;如为处置损失,以“-”号填列。","OCI001A05","资产处置收益(损失以“-”号填列)","“资产处置收益”项目,反映企业出售划分为持有待售的非流动资产(金融工具、长期股权投资和投资性房地产除外)或处置组(子公司和业务除外)时确认的处置利得或损失,以及处置未划分为持有待售的固定资产、在建工程、生产性生物资产及无形资产而产生的处置利得或损失。债务重组中因处置非流动资产(金融工具、长期股权投资和投资性房地产除外)产生的利得或损失和非货币性资产交换中换出非流动资产(金融工具、长期股权投资和投资性房地产除外)产生的利得或损失也包括在本项目内。该项目应根据“资产处置损益”科目的发生额分析填列;如为处置损失,以“-”号填列。",,"INPUT","admin","2024-12-09 17:55:33.0","admin","2024-12-13 18:40:28.0" +"e26b1e00-3278-45db-88c2-d5c3183bdf00","NEW","INSTITUTION","INSTITUTION_INCOME_AND_EXPENSES","1","0","1","NII001","一、本期收入","current revenue","“本期收入”项目,反映单位本期收入总额。本项目应当根据本表中“财政拨款收入”、“事业收入”、“上级补助收入”、“附属单位上缴收入”、“经营收入”、“非同级财政拨款收入”、“投资收益”、“捐赠收入”、“利息收入”、“租金收入”、“其他收入”项目金额的合计数填列。","NII001","一、本期收入","“本期收入”项目,反映单位本期收入总额。本项目应当根据本表中“财政拨款收入”、“事业收入”、“上级补助收入”、“附属单位上缴收入”、“经营收入”、“非同级财政拨款收入”、“投资收益”、“捐赠收入”、“利息收入”、“租金收入”、“其他收入”项目金额的合计数填列。",,"INPUT","admin","2024-12-12 17:01:32.0","admin","2024-12-13 18:08:13.0" +"e2840fce-17e5-49e5-95d9-45ea931a0530","NEW","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","20","4","1","NCL00200202","永续债","perpetual note of bonds",,"NCL00200202","永续债",,,"INPUT","admin","2024-12-09 17:01:23.0","admin","2024-12-13 17:30:58.0" +"e2acd8ff-133a-4890-a798-4722b8a8dc8c","NEW","INSTITUTION","INSTITUTION_INCOME_AND_EXPENSES","21","1","1","NIE001007","(七)所得税费用","income tax expense","“所得税费用”项目,反映有企业所得税缴纳义务的事业单位本期计算应交纳的企业所得税。本项目应当根据“所得税费用”科目的本期发生额填列。","NIE001007","(七)所得税费用","“所得税费用”项目,反映有企业所得税缴纳义务的事业单位本期计算应交纳的企业所得税。本项目应当根据“所得税费用”科目的本期发生额填列。",,"INPUT","admin","2024-12-12 17:17:23.0","admin","2024-12-13 18:10:00.0" +"e37c7273-8122-4ba3-8b2f-e2f922dca9ac","NEW","INSTITUTION","INSTITUTION_CASH_FLOWS","21","1","1","NIC002006","对外投资支付的现金","cash paid for foreign investment","“对外投资支付的现金”项目,反映单位本年为取得短期投资、长期股权投资、长期债券投资而支付的现金。本项目应当根据“库存现金”、“银行存款”、“短期投资”、“长期股权投资”、“长期债券投资”等科目的记录分析填列。","NIC002006","对外投资支付的现金","“对外投资支付的现金”项目,反映单位本年为取得短期投资、长期股权投资、长期债券投资而支付的现金。本项目应当根据“库存现金”、“银行存款”、“短期投资”、“长期股权投资”、“长期债券投资”等科目的记录分析填列。",,"INPUT","admin","2024-12-12 17:32:03.0","admin","2024-12-13 18:14:19.0" +"e3dc02c4-1d90-4a21-98c3-ad540257f670","OLD","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","1","1","1","OCL001001","短期借款","short term loans",,"OCL001001","短期借款",,,"INPUT","admin","2024-12-09 16:53:33.0","admin","2024-12-13 18:34:13.0" +"e4239d95-b4c6-41f4-b4d2-eddbabe7b6d2","OLD","COMPANY","COMPANY_CASH_FLOWS","7","1","1","OCC001006","支付的各项税费","taxes and fees paid",,"OCC001006","支付的各项税费",,,"INPUT","admin","2024-12-09 18:02:37.0","admin","2024-12-13 18:45:04.0" +"e461c832-b754-4041-afea-d09df0d0931a","NEW","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","27","2","1","NCL002T","非流动负债合计","total non current liabilities",,"NCL002T","非流动负债合计",,,"INPUT","admin","2024-12-09 17:06:19.0","admin","2024-12-13 17:53:34.0" +"e461c832-b754-4041-afea-d09df0d09336","NEW","INSTITUTION","INSTITUTION_LIABILITIES_AND_NET_ASSETS","22","2","1","NIL002T","非流动负债合计","total non current liabilities","“非流动负债合计”项目,反映单位期末非流动负债合计数。本项目应当根据本表中“长期借款”、“长期应付款”、“预计负债”、“其他非流动负债”项目金额的合计数填列。","NIL002T","非流动负债合计","“非流动负债合计”项目,反映单位期末非流动负债合计数。本项目应当根据本表中“长期借款”、“长期应付款”、“预计负债”、“其他非流动负债”项目金额的合计数填列。",,"INPUT","admin","2024-12-09 17:06:19.0","admin","2024-12-13 18:04:51.0" +"e4d32833-0ad5-4704-b99c-b8a17d744ffe","NEW","COMPANY","COMPANY_PROFIT","43","1","1","NCI007002","(二)稀释每股收益","diluted earnings per share",,"NCI007002","(二)稀释每股收益",,,"INPUT","admin","2024-12-09 17:59:55.0","admin","2024-12-13 17:40:26.0" +"e4e2ddad-ccd0-4032-a4f8-6224f9d49bcc","NEW","COMPANY","COMPANY_ASSETS","3","1","1","NCA001002","交易性金融资产","trading financial assets","“交易性金融资产”项目,反映资产负债表日企业分类为以公允价值计量且其变动计入当期损益的金融资产,以及企业持有的指定为以公允价值计量且其变动计入当期损益的金融资产的期末账面价值。该项目应根据“交易性金融资产”科目的相关明细科目的期末余额分析填列。自资产负债表日起超过一年到期且预期持有超过一年的以公允价值计量且其变动计入当期损益的非流动金融资产的期末账面价值,在“其他非流动金融资产”项目反映。","NCA001002","交易性金融资产","“交易性金融资产”项目,反映资产负债表日企业分类为以公允价值计量且其变动计入当期损益的金融资产,以及企业持有的指定为以公允价值计量且其变动计入当期损益的金融资产的期末账面价值。该项目应根据“交易性金融资产”科目的相关明细科目的期末余额分析填列。自资产负债表日起超过一年到期且预期持有超过一年的以公允价值计量且其变动计入当期损益的非流动金融资产的期末账面价值,在“其他非流动金融资产”项目反映。",,"INPUT","admin","2024-12-09 16:11:29.0","admin","2024-12-13 17:22:12.0" +"e50e00cd-bdc4-4f0b-bca0-61d229772acc","NEW","COMPANY","COMPANY_CASH_FLOWS","19","1","1","NCC002007","投资支付的现金","cash paid for investment",,"NCC002007","投资支付的现金",,,"INPUT","admin","2024-12-09 18:04:37.0","admin","2024-12-13 17:43:08.0" +"e58e96fa-e682-4406-81d6-9bc2befc9b60","NEW","COMPANY","COMPANY_PROFIT","6","2","1","NCI00100104","研发费用","less research and development expenses","“研发费用”项目,反映企业进行研究与开发过程中发生的费用化支出,以及计入管理费用的自行开发无形资产的摊销。该项目应根据“管理费用”科目下的“研究费用”明细科目的发生额,以及“管理费用”科目下的“无形资产摊销”明细科目的发生额分析填列。","NCI00100104","研发费用","“研发费用”项目,反映企业进行研究与开发过程中发生的费用化支出,以及计入管理费用的自行开发无形资产的摊销。该项目应根据“管理费用”科目下的“研究费用”明细科目的发生额,以及“管理费用”科目下的“无形资产摊销”明细科目的发生额分析填列。",,"INPUT","admin","2024-12-09 17:52:17.0","admin","2024-12-13 17:36:20.0" +"e5e96d6f-7657-4cbb-8a8c-4cf8d71e8937","NEW","INSTITUTION","INSTITUTION_LIABILITIES_AND_NET_ASSETS","14","1","1","NIL001013","一年内到期的非流动负债","non current liabilities in a year","“一年内到期的非流动负债”项目,反映单位期末将于 1 年内(含 1 年)偿还的非流动负债的余额。本项目应当根据“长期应付款”、“长期借款”等科目的明细科目的期末余额分析填列。","NIL001013","一年内到期的非流动负债","“一年内到期的非流动负债”项目,反映单位期末将于 1 年内(含 1 年)偿还的非流动负债的余额。本项目应当根据“长期应付款”、“长期借款”等科目的明细科目的期末余额分析填列。",,"INPUT","admin","2024-12-09 16:57:39.0","admin","2024-12-13 18:06:35.0" +"e5e96d6f-7657-4cbb-8a8c-4cf8d71e89f5","NEW","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","13","1","1","NCL001012","一年内到期的非流动负债","non current liabilities in a year",,"NCL001012","一年内到期的非流动负债",,,"INPUT","admin","2024-12-09 16:57:39.0","admin","2024-12-13 17:29:49.0" +"e64e88ab-73ad-4b9e-aff4-ce6871d5a29e","NEW","COMPANY","COMPANY_ASSETS","1","0","0","NCA001","流动资产:","current assets",,"NCA001","流动资产:",,,"INPUT","admin","2024-12-09 15:49:57.0","admin","2024-12-13 17:21:52.0" +"e69e3a1a-c6aa-4a57-9e48-ee1ed35330f1","NEW","COMPANY","COMPANY_PROFIT","30","2","1","NCI00500102","2.权益法下不能转损益的其他综合收益","other comprehensive income that cannot be converted into profit or loss under the equity method",,"NCI00500102","2.权益法下不能转损益的其他综合收益",,,"INPUT","admin","2024-12-13 15:32:45.0","admin","2024-12-13 17:39:23.0" +"e776c550-006d-4c5e-bf97-0345dcec82ee","OLD","COMPANY","COMPANY_CASH_FLOWS","37","0","1","OCC006","六、期末现金及现金等价物余额","closing cash and cash equivalents balances",,"OCC006","六、期末现金及现金等价物余额",,,"INPUT","admin","2024-12-09 18:10:16.0","admin","2024-12-13 18:43:31.0" +"e81244c5-8bb0-4790-af30-767765fcfdcd","OLD","COMPANY","COMPANY_ASSETS","35","2","1","OCA002T","非流动资产合计","total non current assets",,"OCA002T","非流动资产合计",,,"INPUT","admin","2024-12-09 17:11:45.0","admin","2024-12-13 18:30:47.0" +"e82a50ae-d6e0-4ff1-9dc9-c324cfca7e38","NEW","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","5","1","1","NCL001004","应付票据","note payable","“应付票据”项目,反映资产负债表日以摊余成本计量的、企业因购买材料、商品和接受服务等开出、承兑的商业汇票,包括银行承兑汇票和商业承兑汇票。该项目应根据“应付票据”科目的期末余额填列。","NCL001004","应付票据","“应付票据”项目,反映资产负债表日以摊余成本计量的、企业因购买材料、商品和接受服务等开出、承兑的商业汇票,包括银行承兑汇票和商业承兑汇票。该项目应根据“应付票据”科目的期末余额填列。",,"INPUT","admin","2024-12-09 16:55:27.0","admin","2024-12-13 17:29:13.0" +"e9330e2c-ba64-4223-8227-f24738dce730","OLD","COMPANY","COMPANY_ASSETS","30","1","1","OCA002011","开发支出","development costs",,"OCA002011","开发支出",,,"INPUT","admin","2024-12-09 17:08:22.0","admin","2024-12-13 18:30:24.0" +"e9551a4a-0e01-4081-8a5d-b6447c1bddf0","NEW","COMPANY","COMPANY_PROFIT","27","0","1","NCI005","五、其他综合收益的税后净额","net after tax on other comprehensive income",,"NCI005","五、其他综合收益的税后净额",,,"INPUT","admin","2024-12-09 17:58:12.0","admin","2024-12-13 17:34:46.0" +"ea192358-203b-40fd-b330-5033034da1f0","NEW","COMPANY","COMPANY_CASH_FLOWS","1","1","1","NCC001001","销售商品、提供劳务收到的现金","cash received from sales of goods or rendering of services",,"NCC001001","销售商品、提供劳务收到的现金",,,"INPUT","admin","2024-12-09 18:00:30.0","admin","2024-12-13 17:41:31.0" +"ea84c8f5-04fd-4221-b431-8ee106bd9839","NEW","INSTITUTION","INSTITUTION_LIABILITIES_AND_NET_ASSETS","7","1","1","NIL001006","应付票据","note payable","“应付票据”项目,反映事业单位期末应付票据的金额。本项目应当根据“应付票据”科目的期末余额填列。","NIL001006","应付票据","“应付票据”项目,反映事业单位期末应付票据的金额。本项目应当根据“应付票据”科目的期末余额填列。",,"INPUT","admin","2024-12-09 16:55:57.0","admin","2024-12-13 18:05:51.0" +"ea84c8f5-04fd-4221-b431-8ee106bd9891","NEW","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","7","1","1","NCL001006","预收款项","unearned revenue",,"NCL001006","预收款项",,,"INPUT","admin","2024-12-09 16:55:57.0","admin","2024-12-13 17:29:21.0" +"eb363c79-f083-43fd-a6f8-5100a7117659","OLD","COMPANY","COMPANY_CASH_FLOWS","8","1","1","OCC001007","支付其他与经营活动有关的现金","payment of other cash related to operating activities",,"OCC001007","支付其他与经营活动有关的现金",,,"INPUT","admin","2024-12-09 18:02:49.0","admin","2024-12-13 18:45:08.0" +"eb4f2771-952f-4625-b9e5-b39f0facbfd4","NEW","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","36","1","1","NCE001005","其他综合收益","other comprehensive income",,"NCE001005","其他综合收益",,,"INPUT","admin","2024-12-09 17:12:42.0","admin","2024-12-13 17:55:52.0" +"ec90da86-acce-4c60-a814-1b7c8cc3ce16","NEW","INSTITUTION","INSTITUTION_CASH_FLOWS","29","1","1","NIC003003","收到的其他与筹资活动有关的现金","other cash received in connection with fund raising activities","“收到的其他与筹资活动有关的现金”项目,反映单位本年收到的除上述项目之外与筹资活动有关的现金。对于金额较大的现金流入,应当单列项目反映。本项目应当根据“库存现金”、“银行存款”等有关科目的记录分析填列。","NIC003003","收到的其他与筹资活动有关的现金","“收到的其他与筹资活动有关的现金”项目,反映单位本年收到的除上述项目之外与筹资活动有关的现金。对于金额较大的现金流入,应当单列项目反映。本项目应当根据“库存现金”、“银行存款”等有关科目的记录分析填列。",,"INPUT","admin","2024-12-12 17:33:33.0","admin","2024-12-13 18:19:35.0" +"edba8bc4-5a49-4c71-ae9c-f10ce2a265fc","NEW","COMPANY","COMPANY_PROFIT","24","0","1","NCI004","四、净利润(净亏损以“-”号填列)","net profit",,"NCI004","四、净利润(净亏损以“-”号填列)",,,"INPUT","admin","2024-12-09 17:57:27.0","admin","2024-12-13 17:34:35.0" +"ee36a185-797f-4f1f-861c-a8c1ad1d7074","NEW","INSTITUTION","INSTITUTION_CASH_FLOWS","2","1","1","NIC001001","财政基本支出拨款收到的现金","cash received from the appropriation of basic financial expenditures","“财政基本支出拨款收到的现金”项目,反映单位本年接受财政基本支出拨款取得的现金。本项目应当根据“零余额账户用款额度”、“财政拨款收入”、“银行存款”等科目及其所属明细科目的记录分析填列。","NIC001001","财政基本支出拨款收到的现金","“财政基本支出拨款收到的现金”项目,反映单位本年接受财政基本支出拨款取得的现金。本项目应当根据“零余额账户用款额度”、“财政拨款收入”、“银行存款”等科目及其所属明细科目的记录分析填列。",,"INPUT","admin","2024-12-12 17:23:58.0","admin","2024-12-13 18:11:21.0" +"f009963d-5af1-4a11-beb2-62e49673bc05","OLD","COMPANY","COMPANY_ASSETS","25","1","1","OCA002007","在建工程","construction in progress","“在建工程”项目,反映资产负债表日企业尚未达到预定可使用状态的在建工程的期末账面价值和企业为在建工程准备的各种物资的期末账面价值。该项目应根据“在建工程”科目的期末余额,减去“在建工程减值准备”科目的期末余额后的金额,以及“工程物资”科目的期末余额,减去“工程物资减值准备”科目的期末余额后的金额填列。","OCA002007","在建工程","“在建工程”项目,反映资产负债表日企业尚未达到预定可使用状态的在建工程的期末账面价值和企业为在建工程准备的各种物资的期末账面价值。该项目应根据“在建工程”科目的期末余额,减去“在建工程减值准备”科目的期末余额后的金额,以及“工程物资”科目的期末余额,减去“工程物资减值准备”科目的期末余额后的金额填列。",,"INPUT","admin","2024-12-09 17:05:01.0","admin","2024-12-13 18:30:07.0" +"f01b45b4-86bd-4695-9b21-b931e1fc423d","OLD","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","37","1","1","OCE006","专项储备","special reserve","“专项储备”项目,反映高危行业企业按国家规定提取的安全生产费的期末账面价值。该项目应根据“专项储备”科目的期末余额填列。","OCE006","专项储备","“专项储备”项目,反映高危行业企业按国家规定提取的安全生产费的期末账面价值。该项目应根据“专项储备”科目的期末余额填列。",,"INPUT","admin","2024-12-09 17:12:59.0","admin","2024-12-13 18:32:57.0" +"f0662ce7-c14f-4091-9600-9ff482419941","NEW","INSTITUTION","INSTITUTION_LIABILITIES_AND_NET_ASSETS","27","1","1","NIN002","专用基金","dedicated funds","“专用基金”项目,反映事业单位期末累计提取或设置但尚未使用的专用基金余额。本项目应当根据“专用基金”科目的期末余额填列。","NIN002","专用基金","“专用基金”项目,反映事业单位期末累计提取或设置但尚未使用的专用基金余额。本项目应当根据“专用基金”科目的期末余额填列。",,"INPUT","admin","2024-12-09 17:09:17.0","admin","2024-12-13 18:07:27.0" +"f0662ce7-c14f-4091-9600-9ff4824199ba","NEW","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","31","1","1","NCE001002","其他权益工具","other equity instrument","“其他权益工具”项目,反映资产负债表日企业发行在外的除普通股以外分类为权益工具的金融工具的期末账面价值。对于资产负债表日企业发行的金融工具,分类为金融负债的,应在“应付债券”项目填列,对于优先股和永续债,还应在“应付债券”项目下的“优先股”项目和“永续债”项目分别填列;分类为权益工具的\, 应在“其他权益工具”项目填列,对于优先股和永续债,还应在“其他权益工具”项目下的“优先股”项目和“永续债”项目分别填列。","NCE001002","其他权益工具","“其他权益工具”项目,反映资产负债表日企业发行在外的除普通股以外分类为权益工具的金融工具的期末账面价值。对于资产负债表日企业发行的金融工具,分类为金融负债的,应在“应付债券”项目填列,对于优先股和永续债,还应在“应付债券”项目下的“优先股”项目和“永续债”项目分别填列;分类为权益工具的\, 应在“其他权益工具”项目填列,对于优先股和永续债,还应在“其他权益工具”项目下的“优先股”项目和“永续债”项目分别填列。",,"INPUT","admin","2024-12-09 17:09:17.0","admin","2024-12-13 17:55:25.0" +"f1243c40-4f80-40b3-936f-7b0b73b10d5e","OLD","COMPANY","COMPANY_PROFIT","31","2","1","OCI00500203","3.持有至到期投资重分类为可供出售金融资产损益","held to maturity investments are reclassified as gains or losses on available for sale financial assets",,"OCI00500203","3.持有至到期投资重分类为可供出售金融资产损益",,,"INPUT","admin","2024-12-13 15:00:14.0","admin","2024-12-13 18:42:00.0" +"f29faada-378b-4ff5-a52e-1c4fd1d56a4c","OLD","COMPANY","COMPANY_PROFIT","12","3","1","OCI001A0201","其中:对联营企业和合营企业的投资收益","including income on investment in associates and joint ventures",,"OCI001A0201","其中:对联营企业和合营企业的投资收益",,,"INPUT","admin","2024-12-09 17:53:44.0","admin","2024-12-13 18:40:15.0" +"f3297f3e-2583-4974-a6da-2133d13302ea","NEW","COMPANY","COMPANY_PROFIT","31","2","1","NCI00500103","3.其他权益工具投资公允价值变动","changes in the fair value of investments in other equity instruments","“其他债权投资公允价值变动”项目,反映企业分类为以公允价值计量且其变动计入其他综合收益的债权投资发生的公允价值变动。企业将一项以公允价值计量且其变动计入其他综合收益的金融资产重分类为以摊余成本计量的金融资产,或重分类为以公允价值计量且其变动计入当期损益的金融资产时,之前计入其他综合收益的累计利得或损失从其他综合收益中转出的金额作为该项目的减项。该项目应根据“其他综合收益”科目下的相关明细科目的发生额分析填列。","NCI00500103","3.其他权益工具投资公允价值变动","“其他债权投资公允价值变动”项目,反映企业分类为以公允价值计量且其变动计入其他综合收益的债权投资发生的公允价值变动。企业将一项以公允价值计量且其变动计入其他综合收益的金融资产重分类为以摊余成本计量的金融资产,或重分类为以公允价值计量且其变动计入当期损益的金融资产时,之前计入其他综合收益的累计利得或损失从其他综合收益中转出的金额作为该项目的减项。该项目应根据“其他综合收益”科目下的相关明细科目的发生额分析填列。",,"INPUT","admin","2024-12-13 15:32:59.0","admin","2024-12-13 17:39:27.0" +"f379a242-61be-40f7-9d1f-78f6f64ccc35","NEW","COMPANY","COMPANY_PROFIT","14","2","1","NCI00100202","净敞口套期收益(损失以“-”号填列)","add net exposure hedge income","“净敞口套期收益”项目,反映净敞口套期下被套期项目累计公允价值变动转入当期损益的金额或现金流量套期储备转入当期损益的金额。该项目应根据“净敞口套期损益”科目的发生额分析填列;如为套期损失,以“-”号填列。","NCI00100202","净敞口套期收益(损失以“-”号填列)","“净敞口套期收益”项目,反映净敞口套期下被套期项目累计公允价值变动转入当期损益的金额或现金流量套期储备转入当期损益的金额。该项目应根据“净敞口套期损益”科目的发生额分析填列;如为套期损失,以“-”号填列。",,"INPUT","admin","2024-12-09 17:54:16.0","admin","2024-12-13 17:37:38.0" +"f39a8110-87ec-4bdf-a88c-730619f6bf85","OLD","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","39","1","1","OCE008","未分配利润","retained earnings",,"OCE008","未分配利润",,,"INPUT","admin","2024-12-09 17:13:23.0","admin","2024-12-13 18:33:11.0" +"f556e26f-790f-4748-b473-26809ddb68a0","OLD","COMPANY","COMPANY_CASH_FLOWS","23","3","1","OCC002T","投资活动产生的现金流量净额","net cash flow from investing activities",,"OCC002T","投资活动产生的现金流量净额",,,"INPUT","admin","2024-12-09 18:06:19.0","admin","2024-12-13 18:46:48.0" +"f87e9f66-1b60-410d-926f-f94299be6bd3","OLD","COMPANY","COMPANY_ASSETS","15","1","1","OCA002001","可供出售金融资产","available for sale financial assets",,"OCA002001","可供出售金融资产",,,"INPUT","admin","2024-12-13 14:47:18.0","admin","2024-12-13 18:29:46.0" +"f999b2dd-1f6a-41ed-8c41-4819d56728ee","NEW","COMPANY","COMPANY_PROFIT","17","2","1","NCI00100205","资产减值损失(损失以“-”号填列)","add asset impairment losses",,"NCI00100205","资产减值损失(损失以“-”号填列)",,,"INPUT","admin","2024-12-09 17:55:16.0","admin","2024-12-13 17:37:57.0" +"f9a001f0-9df6-42b2-8c3f-46c039949442","NEW","COMPANY","COMPANY_PROFIT","11","2","1","NCI00100201","投资收益(损失以“-”号填列)","add income on investment",,"NCI00100201","投资收益(损失以“-”号填列)",,,"INPUT","admin","2024-12-09 17:53:29.0","admin","2024-12-13 17:37:16.0" +"fa5fb2bf-725b-4316-9c4b-e98b4fdff655","NEW","COMPANY","COMPANY_PROFIT","21","1","1","NCI002002 ","减:营业外支出","less non operating expenses ","“营业外支出”项目,反映企业发生的除营业利润以外的支出,主要包括公益性捐赠支出、非常损失、盘亏损失、非流动资产毁损报废损失等。该项目应根据“营业外支出”科目的发生额分析填列。“非流动资产毁损报废损失”通常包括因自然灾害发生毁损、已丧失使用功能等原因而报废清理产生的损失。企业在不同交易中形成的非流动资产毁损报废利得和损失不得相互抵销,应分别在“营业外收入”项目和“营业外支出”项目进行填列。","NCI002002 ","减:营业外支出","“营业外支出”项目,反映企业发生的除营业利润以外的支出,主要包括公益性捐赠支出、非常损失、盘亏损失、非流动资产毁损报废损失等。该项目应根据“营业外支出”科目的发生额分析填列。“非流动资产毁损报废损失”通常包括因自然灾害发生毁损、已丧失使用功能等原因而报废清理产生的损失。企业在不同交易中形成的非流动资产毁损报废利得和损失不得相互抵销,应分别在“营业外收入”项目和“营业外支出”项目进行填列。",,"INPUT","admin","2024-12-09 17:56:46.0","admin","2024-12-13 17:38:35.0" +"fa660eed-da35-49d1-920f-c0bfcb692f1f","NEW","COMPANY","COMPANY_CASH_FLOWS","5","1","1","NCC001004","购买商品、接受劳务支付的现金","cash for the purchase of goods and payment for services",,"NCC001004","购买商品、接受劳务支付的现金",,,"INPUT","admin","2024-12-09 18:02:18.0","admin","2024-12-13 17:41:57.0" +"fa978a23-7994-4313-a804-2303eff8e130","NEW","COMPANY","COMPANY_PROFIT","23","1","1","NCI003001","减:所得税费用","less income tax expenses",,"NCI003001","减:所得税费用",,,"INPUT","admin","2024-12-09 17:57:11.0","admin","2024-12-13 17:38:46.0" +"fb7e76bb-d470-4e5d-b7b6-b0e822fa27a5","NEW","COMPANY","COMPANY_PROFIT","3","2","1","NCI00100101","税金及附加","less tax and extra",,"NCI00100101","税金及附加",,,"INPUT","admin","2024-12-09 17:51:16.0","admin","2024-12-13 17:35:40.0" +"fc73445c-dd74-4e2f-a90b-df47f2b9e672","OLD","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","41","3","1","OCLET","负债和所有者权益(或股东权益)总计","total liabilities and shareholder equity",,"OCLET","负债和所有者权益(或股东权益)总计",,,"INPUT","admin","2024-12-09 17:14:19.0","admin","2024-12-13 18:33:26.0" +"fcbd27d2-8e53-4a6b-ae22-ce3b2f7333d8","OLD","COMPANY","COMPANY_LIABILITIES_AND_OWNERS_EQUITY","34","1","1","OCE003","资本公积","capital surplus",,"OCE003","资本公积",,,"INPUT","admin","2024-12-09 17:11:27.0","admin","2024-12-13 18:32:45.0" +"fee240a6-20d5-40be-bc04-898d516485ae","OLD","COMPANY","COMPANY_PROFIT","6","2","1","OCI001L05","研发费用","less research and development expenses","“研发费用”项目,反映企业进行研究与开发过程中发生的费用化支出,以及计入管理费用的自行开发无形资产的摊销。该项目应根据“管理费用”科目下的“研究费用”明细科目的发生额,以及“管理费用”科目下的“无形资产摊销”明细科目的发生额分析填列。","OCI001L05","研发费用","“研发费用”项目,反映企业进行研究与开发过程中发生的费用化支出,以及计入管理费用的自行开发无形资产的摊销。该项目应根据“管理费用”科目下的“研究费用”明细科目的发生额,以及“管理费用”科目下的“无形资产摊销”明细科目的发生额分析填列。",,"INPUT","admin","2024-12-09 17:52:17.0","admin","2024-12-13 18:39:31.0" +"ffa42ca7-1acf-48e9-92ee-9c1163c0fefd","NEW","INSTITUTION","INSTITUTION_INCOME_AND_EXPENSES","23","0","1","NIIET","三、本期盈余","current earnings","“本期盈余”项目,反映单位本期收入扣除本期费用后的净额。本项目应当根据本表中“本期收入”项目金额减去“本期费用”项目金额后的金额填列;如为负数,以“-”号填列。","NIIET","三、本期盈余","“本期盈余”项目,反映单位本期收入扣除本期费用后的净额。本项目应当根据本表中“本期收入”项目金额减去“本期费用”项目金额后的金额填列;如为负数,以“-”号填列。",,"INPUT","admin","2024-12-12 17:18:46.0","admin","2024-12-13 18:10:44.0" diff --git a/io.sc.standard/src/main/resources/liquibase/io.sc.standard_1.0.0_20221020__Standard Data.xml b/io.sc.standard/src/main/resources/liquibase/io.sc.standard_1.0.0_20221020__Standard Data.xml index 4ae7a97c..6ea88749 100644 --- a/io.sc.standard/src/main/resources/liquibase/io.sc.standard_1.0.0_20221020__Standard Data.xml +++ b/io.sc.standard/src/main/resources/liquibase/io.sc.standard_1.0.0_20221020__Standard Data.xml @@ -71,6 +71,11 @@ + + + + + diff --git a/io.sc.standard/src/main/resources/liquibase/io.sc.standard_1.0.0_20221020__Standard Schema DDL.xml b/io.sc.standard/src/main/resources/liquibase/io.sc.standard_1.0.0_20221020__Standard Schema DDL.xml index fb543d10..999dd1ed 100644 --- a/io.sc.standard/src/main/resources/liquibase/io.sc.standard_1.0.0_20221020__Standard Schema DDL.xml +++ b/io.sc.standard/src/main/resources/liquibase/io.sc.standard_1.0.0_20221020__Standard Schema DDL.xml @@ -253,12 +253,12 @@ - - + + - - - + + + @@ -272,6 +272,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/io.sc.standard/src/main/resources/standard/一般企业财务报表格式(适用于已执行新金融准则、新收入准则和新租赁准则的企业).pdf b/io.sc.standard/src/main/resources/standard/一般企业财务报表格式(适用于已执行新金融准则、新收入准则和新租赁准则的企业).pdf new file mode 100644 index 00000000..9644cf06 Binary files /dev/null and b/io.sc.standard/src/main/resources/standard/一般企业财务报表格式(适用于已执行新金融准则、新收入准则和新租赁准则的企业).pdf differ diff --git a/io.sc.standard/src/main/resources/standard/一般企业财务报表格式(适用于未执行新金融准则、新收入准则和新租赁准则的企业).pdf b/io.sc.standard/src/main/resources/standard/一般企业财务报表格式(适用于未执行新金融准则、新收入准则和新租赁准则的企业).pdf new file mode 100644 index 00000000..7bca4f20 Binary files /dev/null and b/io.sc.standard/src/main/resources/standard/一般企业财务报表格式(适用于未执行新金融准则、新收入准则和新租赁准则的企业).pdf differ diff --git a/io.sc.standard/src/main/resources/standard/行政事业单位会计科目和报表.pdf b/io.sc.standard/src/main/resources/standard/行政事业单位会计科目和报表.pdf new file mode 100644 index 00000000..a7cf6046 Binary files /dev/null and b/io.sc.standard/src/main/resources/standard/行政事业单位会计科目和报表.pdf differ diff --git a/io.sc.website/package.json b/io.sc.website/package.json index d3b27d79..57b31929 100644 --- a/io.sc.website/package.json +++ b/io.sc.website/package.json @@ -1,6 +1,6 @@ { "name": "io.sc.website", - "version": "8.1.50", + "version": "8.2.1", "description": "", "main": "index.js", "scripts": { @@ -28,6 +28,6 @@ }, "dependencies": { "vue": "3.5.13", - "platform-core": "8.2.0" + "platform-core": "8.2.7" } } \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index 9f33decb..1b04bcfc 100755 --- a/settings.gradle +++ b/settings.gradle @@ -36,6 +36,7 @@ include ':io.sc.platform.gradle' include ':io.sc.platform.groovy' include ':io.sc.platform.installer' include ':io.sc.platform.jdbc' +include ':io.sc.platform.jdbc.driver' include ':io.sc.platform.jdbc.driver.db2' include ':io.sc.platform.jdbc.driver.dm' include ':io.sc.platform.jdbc.driver.h2'