{"id":15043558,"url":"https://github.com/oiue/oiue","last_synced_at":"2025-04-14T23:12:02.789Z","repository":{"id":52542603,"uuid":"61998615","full_name":"OIUE/OIUE","owner":"OIUE","description":"如果你同我一样对耦合深恶痛绝 Open Intelligent Unitive Efficient [开放 智能 统一 高效] 用积木思想编程，低门槛、轻量化、标准化、架构解耦、模块化以及去框架","archived":false,"fork":false,"pushed_at":"2021-04-26T17:33:40.000Z","size":42095,"stargazers_count":11,"open_issues_count":1,"forks_count":3,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-04-14T23:11:44.356Z","etag":null,"topics":["framework","ios","java","jwt","microservices","nospring","nospringcloud","quartz","redis","saas","service-graph","service-mesh","shop","tcp","zookeeper"],"latest_commit_sha":null,"homepage":"http://www.oiue.org","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/OIUE.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-06-26T16:44:25.000Z","updated_at":"2024-05-29T20:51:31.000Z","dependencies_parsed_at":"2022-09-02T07:00:12.237Z","dependency_job_id":null,"html_url":"https://github.com/OIUE/OIUE","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OIUE%2FOIUE","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OIUE%2FOIUE/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OIUE%2FOIUE/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OIUE%2FOIUE/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/OIUE","download_url":"https://codeload.github.com/OIUE/OIUE/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248975329,"owners_count":21192210,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["framework","ios","java","jwt","microservices","nospring","nospringcloud","quartz","redis","saas","service-graph","service-mesh","shop","tcp","zookeeper"],"created_at":"2024-09-24T20:49:16.001Z","updated_at":"2025-04-14T23:12:02.766Z","avatar_url":"https://github.com/OIUE.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"OIUE是一套完全解耦的服务化平台\n=======\n如果你同我一样对耦合深恶痛绝\n\nOpen Intelligent Unitive Efficient [开放 智能 统一 高效]\n**用积木思想编程，低门槛、轻量化、标准化、架构解耦、模块化以及去框架化**\n##项目交流\n\n```\nQQ群：10939695  作者：Every、Harry等\n官网：http://www.oiue.org\n敬请参与 联系我们：team@oiue.org\n提议吐槽：https://issues.sonatype.org/browse/OSSRH-23545\n更多介绍详见OIUE主工程：\nhttps://github.com/OIUE/OIUE\nhttp://git.oschina.net/every.oschina.net/OIUE\n```\n\n[入门指导](../../#入门指导)\n\n[现有服务通信协议约定](../../#现有服务通信协议约定)\n\n[相关开源库](../../#相关开源库)\n\n[相关服务](../../#相关开源库)\n\n[TOC]\n\n\n如果你同我一样对耦合深恶痛绝，那么同我一起支持OIUE，拒绝spring的一坨屎一样的耦合在一起，把专业的事交给专注的服务，将研发与维护变的更加轻松！\n\n======\n题外话：\n\n`\t不知道你有没有修改开源项目的经历，好比在一锅乱炖里去捞所有的白菜，很多时候，需要把一锅都翻遍才能找出所有的白菜叶，我们希望倡导一种方式，完全遵循解耦的架构，从根本去解决这种一锅乱炖的局面。`\n\t\n`\tOIUE 开源的目的是为了降低入门门槛，像玩积木一样编程，推进轻量化、标准化、架构解耦、模块化以及去框架化，框架立足将模块切分最小粒度，确保每个模块均可单独替换、并最小限度模块依赖，开发者无需培训即可快速入手，亦不用关心底层架构、分布式服务调用及服务治理等相关繁琐复杂的实现。1.0版本框架采用了OSGI的底层容器，部分遵循OSGI标准，但模块Activator请严格遵循本项目，后续将推出多个版本的启动容器，以满足不同场景下业务需求，同时也欢迎有兴趣的朋友共同加入与探讨。`\n\t\n`\t作为程序开发人员，每天都在重复同样的工作，浪费了大量时间，严重影响了开发热情，简单而又重复的工作占用了我们太多的时间。程序语言由低级逐渐走向高级，出现了许多控件及框架，Java中spring等是很不错的框架，其应用广泛程度难有出其右者，但极其庞大的体系结构让人望而却步，笨重而又耦合的模块体系是在让人无法恭维，强制的调用及结构已经改变了语言原本的色彩，其本质并未从根本上解决程序开发中大量的重复工作，我们希望有一个工具或者一套设计，能够按照我们所习惯的操作模式，最大程度的复用、更高程度的解耦，延续一些开发偏好，以及更大的灵活性，不约定俗成的满足我们的开发需求，开放、智能、统一、高效，本软件框架构想由此应运而生。`\n\t\n`\t许多人会好奇为什么选择OSGI作运行容器，\"OSGI架构师的天堂\"这句话并不足以概括初衷，最重要的是，OSGI优秀的模块化结构，要求我们更加严谨，同时也让我们更加重视对封装、模块化的理解，模块应该尽可能减少对外界的依赖除非逼不得已，我见过太多原本应该最小实现却引用一大堆附加无用的功能的工具包，这里不一一列举，无力吐槽、仁者见仁智者见智吧，筑建一个开放、严谨、高效的开发群体，是本架构的初衷之一。`\n\t\t\n\t\n`\t从未见过哪个男人跟女生吵架能吵赢的，不是气急败坏地动起了手，就是沉默以对。这仅仅是男人的问题吗？达尔文说：\"以前也有吵赢的，后来他们都找不到女朋友，于是灭绝了。\"\n\t我们不希望出现类似与上面的故事，从前有一群很刻苦的人，由于没有时间恋爱，后来灭绝了！`\n\n#入门指导\n\n\n下载OIUE主工程，\nhttps://github.com/OIUE/OIUE\nhttp://git.oschina.net/every.oschina.net/OIUE\n\n工程结构如下：\n\n```\n├── LICENSE\n├── README.md\n├── conf\n│   ├── config.properties\n│   └── org\n│       ├── apache\n│       │   └── felix\n│       │       └── webconsole\n│       │           └── internal\n│       │               └── servlet\n│       │                   └── OsgiManager.config\n│       └── oiue\n│           └── service\n│               ├── action\n│               │   ├── filter\n│               │   │   └── auth\n│               │   │       └── Activator.config\n│               │   ├── http\n│               │   │   ├── action\n│               │   │   │   └── Activator.config\n│               │   │   ├── managed\n│               │   │   ├── services\n│               │   │   │   └── Activator.config\n│               │   │   └── upload\n│               │   │       └── Activator.config\n│               │   └── tcp\n│               │       ├── action\n│               │       │   └── Activator.config\n│               │       └── bytes\n│               │           └── Activator.config\n│               ├── auth\n│               │   └── local\n│               │       └── Activator.config\n│               ├── buffer\n│               │   └── synchronization\n│               │       └── db\n│               │           └── Activator.config\n│               ├── cache\n│               │   ├── impl\n│               │   │   └── Activator.config\n│               │   ├── jedis\n│               │   │   └── Activator.config\n│               │   └── tree\n│               │       └── zookeeper\n│               │           └── curator\n│               │               └── Activator.config\n│               ├── debug\n│               │   ├── cache\n│               │   │   └── Activator.config\n│               │   └── treecache\n│               │       └── Activator.config\n│               ├── driver\n│               │   └── listener\n│               │       └── storage\n│               │           └── Activator.config\n│               ├── log4j\n│               │   └── Activator.config\n│               ├── message\n│               │   └── impl\n│               │       └── Activator.config\n│               ├── odp\n│               │   └── res\n│               │       └── base\n│               │           └── Activator.config\n│               ├── online\n│               │   └── impl\n│               │       └── Activator.config\n│               ├── osgi\n│               │   └── rpc\n│               │       └── Activator.config\n│               ├── permission\n│               │   ├── impl\n│               │   │   └── Activator.config\n│               │   └── verify\n│               │       └── Activator.config\n│               ├── sql\n│               │   └── apache\n│               │       └── Activator.config\n│               ├── system\n│               │   └── analyzer\n│               │       └── impl\n│               │           └── Activator.config\n│               └── template\n│                   └── beetl\n│                       └── Activator.config\n├── oiue.sh\n└── pom.xml\n```\n其中 \nconf是各服务的配置文件\n\n执行`mvn install`\n修改oiue.sh中jre及工程的目录\n修改`conf\\org\\oiue\\service\\sql\\apache\\Activator.config` 连接自己的数据库\n修改`conf/org/oiue/service/cache/jedis/Activator.config` 连接自己的redis数据库，redis必须设定密码连接方式\n修改`conf/org/oiue/service/cache/tree/zookeeper/curator/Activator.config` 连接自己的zookeeper\n\n执行`./oiue.sh start`启动服务\n\n\n`开源库中提供了部分开放服务，可快捷搭建自己的各类应用服务。`\n\n**创建自己的服务**[以实现登录认证为例]\n创建Meavn项目，\n\n```\n├── pom.xml\n└── src\n    └── main\n        └── java\n            └── org\n                └── oiue\n                    └── service\n                        └── auth\n                            └── local\n                                ├── Activator.java\n                                └── AuthLocalServiceImpl.java\n```\n登录认证依赖于日志服务（父工程已经引用）、认证服务、数据查询服务，配置如下：\n\n```\n\u003cproject xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\"\u003e\n\t\u003cmodelVersion\u003e4.0.0\u003c/modelVersion\u003e\n\t\u003cartifactId\u003eorg.oiue.service.auth.local\u003c/artifactId\u003e\n\t\u003cpackaging\u003ebundle\u003c/packaging\u003e\n\n\t\u003cname\u003eOIUE service for auth impl by local \u003c/name\u003e\n\t\u003cdescription\u003eA bundle that Auth service by local \u003c/description\u003e\n\t\u003cparent\u003e\n\t\t\u003cgroupId\u003eorg.oiue.services\u003c/groupId\u003e\n\t\t\u003cartifactId\u003eservices\u003c/artifactId\u003e\n\t\t\u003cversion\u003e1.0.1\u003c/version\u003e\n\t\u003c/parent\u003e\n\n\t\u003cdependencies\u003e\n\t\t\u003cdependency\u003e\n\t\t\t\u003cgroupId\u003eorg.oiue.services\u003c/groupId\u003e\n\t\t\t\u003cartifactId\u003eorg.oiue.service.auth\u003c/artifactId\u003e\n\t\t\t\u003cversion\u003e1.0.1\u003c/version\u003e\n\t\t\u003c/dependency\u003e\n\t\t\u003cdependency\u003e\n\t\t\t\u003cgroupId\u003eorg.oiue.services.odps\u003c/groupId\u003e\n\t\t\t\u003cartifactId\u003eorg.oiue.service.odp.res.api\u003c/artifactId\u003e\n\t\t\t\u003cversion\u003e1.0.1\u003c/version\u003e\n\t\t\u003c/dependency\u003e\n\t\u003c/dependencies\u003e\n\t\u003cproperties\u003e\n\t\t\u003cproject.activator\u003e${project.artifactId}.Activator\u003c/project.activator\u003e\n\t\u003c/properties\u003e\n\u003c/project\u003e\n```\n服务初始化时传入依赖的服务，从配置中读取事件ID，以及客户端传递过来的用户名密码结构路径、此认证服务的名称。\n如客户端用户认证信息如下：\n\n```\n{\n    \"modulename\": \"login\",\n    \"tag\": \"exttag\",\n    \"operation\": \"login\",\n    \"data\": {\n        \"type\": \"local\",\n        \"userName\": \"name\",\n        \"userPass\": \"passwd\"\n    }\n}\n```\n\n服务的配置文件在主工程的conf目录下，\n配置文件如下：\n\n```\nservice.pid=\"org.oiue.service.auth.local.Activator\"\nlogin.local.auth.eventId=\"fm_system_service_auth_user\"\nlogin.sso.type=\"local\"\nlogin.local.key.name=\"userName\"\nlogin.local.key.pass=\"userPass\"\n```\n则服务代码实现如下：\n\n```\npackage org.oiue.service.auth.local;\n\nimport java.io.Serializable;\nimport java.util.Dictionary;\nimport java.util.HashMap;\nimport java.util.Map;\nimport java.util.UUID;\nimport java.util.concurrent.ConcurrentHashMap;\n\nimport org.oiue.service.auth.AuthService;\nimport org.oiue.service.auth.AuthServiceManager;\nimport org.oiue.service.log.LogService;\nimport org.oiue.service.log.Logger;\nimport org.oiue.service.odp.base.FactoryService;\nimport org.oiue.service.odp.res.api.IResource;\nimport org.oiue.service.online.Online;\nimport org.oiue.service.online.OnlineImpl;\nimport org.oiue.service.online.Type;\nimport org.oiue.tools.string.StringUtil;\n\n@SuppressWarnings({ \"unchecked\", \"rawtypes\" })\npublic class AuthLocalServiceImpl implements AuthService, Serializable {\n    private static final long serialVersionUID = -3485450639722467031L;\n    private Logger logger;\n    private String event_id;\n    private FactoryService factoryService;\n    private AuthServiceManager authServiceManager;\n    private String type = \"local\";\n    private String name = \"userName\";\n    private String pass = \"userPass\";\n\n    public AuthLocalServiceImpl(LogService logService, FactoryService iresource, AuthServiceManager authServiceManager) {\n        logger = logService.getLogger(this.getClass().getName());\n        this.factoryService = iresource;\n        this.authServiceManager = authServiceManager;\n    }\n\n    public void updated(Dictionary dict) {\n        try {\n            event_id = (String) dict.get(\"login.local.auth.eventId\");\n            name = (String) dict.get(\"login.local.key.name\");\n            pass = (String) dict.get(\"login.local.key.pass\");\n            String type = (String) dict.get(\"login.sso.type\");\n            if (!StringUtil.isEmptys(type) \u0026\u0026 !type.equals(this.type)) {\n                authServiceManager.unRegisterAuthService(this.type);\n                this.type = type;\n            }\n            authServiceManager.registerAuthService(type, this);\n        } catch (Throwable e) {\n            logger.error(\"config is error :\" + dict, e);\n        }\n    }\n\n    @Override\n    public void unregister() {\n        authServiceManager.unRegisterAuthService(type);\n    }\n\n    @Override\n    public Online login(Map per) {\n        String username = (String) per.remove(name);\n        String password = (String) per.remove(pass);\n        String tokenId = null;\n        Online online = new OnlineImpl();\n        if (!StringUtil.isEmptys(username) \u0026\u0026 !StringUtil.isEmptys(password)) {\n            Map\u003cString, Object\u003e map = new HashMap\u003c\u003e();\n            map.put(\"origin_name\", type);\n            map.put(\"user_name\", username);\n            map.put(\"password\", password);\n            try {\n                IResource iResource = factoryService.getBmo(IResource.class.getName());\n                map = (Map\u003cString, Object\u003e) iResource.callEvent(event_id, null, map);\n                if (map == null || map.size() == 0) {\n                    throw new RuntimeException(\"login error,username or password is error!\");\n                }\n            } catch (Throwable e) {\n                throw new RuntimeException(e);\n            }\n            tokenId = UUID.randomUUID().toString().replaceAll(\"-\", \"\");\n            online.setO(new ConcurrentHashMap\u003c\u003e());\n            online.setTokenId(tokenId);\n            online.setType(Type.http);\n            online.setUser(map);\n            online.setUser_id(map.get(\"user_id\") + \"\");\n            online.setUser_name(map.get(\"user_name\") + \"\");\n        }\n        return online;\n    }\n\n    @Override\n    public boolean logout(Map per) {\n        return false;\n    }\n\n}\n```\n\n**服务注册Activator如下：**\n\n```\npackage org.oiue.service.auth.local;\n\nimport java.util.Dictionary;\n\nimport org.oiue.service.auth.AuthService;\nimport org.oiue.service.auth.AuthServiceManager;\nimport org.oiue.service.log.LogService;\nimport org.oiue.service.odp.base.FactoryService;\nimport org.oiue.service.odp.res.api.IResource;\nimport org.oiue.service.osgi.FrameActivator;\nimport org.oiue.service.osgi.MulitServiceTrackerCustomizer;\n\npublic class Activator extends FrameActivator {\n\n    @Override\n    public void start() throws Exception {\n        this.start(new MulitServiceTrackerCustomizer() {\n            AuthLocalServiceImpl authService;\n\n            @Override\n            public void removedService() {\n            \tauthService.unregister();\n            }\n\n            @SuppressWarnings(\"unused\")\n            @Override\n            public void addingService() {\n                LogService logService = getService(LogService.class);\n                FactoryService factoryService = getService(FactoryService.class);\n                AuthServiceManager authServiceManager = getService(AuthServiceManager.class);\n                IResource iResource = getService(IResource.class);\n\n                authService = new AuthLocalServiceImpl(logService, factoryService, authServiceManager);\n\n                registerService(AuthService.class, authService);\n            }\n\n            @Override\n            public void updated(Dictionary\u003cString, ?\u003e props) {\n                authService.updated(props);\n            }\n        }, LogService.class, AuthServiceManager.class, FactoryService.class,IResource.class);\n    }\n\n    @Override\n    public void stop() throws Exception {}\n}\n```\n `public final void start(MulitServiceTrackerCustomizer mstc, Class... cs)`中cs为依赖的服务，通过getService获取服务实例。\n \nOIUE1.0采用Mysql作为主数据库，数据库操作相关服务均以此为基础，数据库设计如下：\n![DB](OIUE_DB.png)\n\n#现有服务通信协议约定\n# HTTP/TCP/UDP字符流请求/响应格式规范定义\n\n服务平台开放式服务接收客户端采用TCP、HTTP等方式调用。本章节规范并定义本平台开放式服务的标准请求/响应格式，并为非开放式服务及特定业务服务提供协议参考。\n后续章节均以TCP交互为例，HTTP方式请求请参考本章节泛化。\n\n## 客户端TCP/UDP调用服务外层格式定义\n\nTCP/UDP字符流方式调用服务采用JSON格式的数据请求，经过相应处理转换为java原生对象传给后端服务及服务池。\n\n**请求格式定义：**\n\n```\n{\n\t\"modulename\": \"queryCar\",\n\t\"operation\": \"\",\n\t[ \"version\": \"\",]\n\t\"tag\": \"12345\",\n\t\"token:\": \"\",\n\t[\"processkey\": \"\", ] \n\t[\"encrypt\": \"\", ] \n\t[\"debug\": \"\", ] \n\t\"data\": {}\n}\n```\n其中：\n**modulename** 标识客户端调用模块名称\n**operation** 标识客户端操作\n**version** 模块版本，默认为最新版本，非必选\n**tag**标识客户端处理响应标记，请求信息原样返回，可作为客户端发起请求流水\n**token**为用户身份标识，用于标识当前请求发起的用户身份信息，采用JWT规范编码信息\n**data**为请求业务数据实体，此数据将由管理类直接交互给对应处理服务\n**processkey** 事务key，默认单次请求为一次弱事物，若开启事物，需客户端手工结束事物，事物操作超时时间默认为300s，非必选\n**encrypt** 加密及压缩标识，默认为明文不压缩，非必选\n**debug** 调试标识，默认为非调试模式，非必选\n注：为优化权限管理，修复业务访问权限bug，请求格式做适当调整，客户端无需传递模块对应的后端服务，将其定义到数据库模块数据上，以防权限注入，调试时可传入调用服务及方法。\n\n## 客户端HTTP调用服务外层格式定义\n\nHTTP字符流方式调用服务可分为实时请求及准实时请求。准实时请求为非高动态变更数据，在一定时间范围内请求与响应数据一致，如资源数据、档案数据、周期性数据等，准实时数据为平台对接集团CDN加速数据；实时数据为高动态数据，如位置上报等。服务平台接受客户端JSON格式的数据请求，经过相应处理转换为java原生对象传给后端服务及服务池。\n\n**HTTP请求地址为：***http://service:port/services/version/modulename/operation?*\n\n**请求格式定义：**\n\n```\n{\n\t\"tag\": \"12345\",\n\t\"token:\": \"\",\n\t[\"processkey\": \"\", ] \n\t[\"encrypt\": \"\", ] \n\t[\"debug\": \"\", ] \n\t[\"callback\": \"\", ]\n\t\"data\": {}\n}\n```\n\n其中：\n**modulename** 标识客户端调用模块名称\n**operation** 标识客户端操作\n**version** 模块版本，默认为最新版本，非必选\n**tag**标识客户端处理响应标记，请求信息原样返回，可作为客户端发起请求流水\n**token**为用户身份标识，用于标识当前请求发起的用户身份，登录用户获得的唯一标识\n**data**为请求业务数据实体，此数据将由管理类直接交互给对应处理服务\n**processkey** 事务key，默认单次请求为一次弱事物，若开启事物，需客户端手工结束事物，事物操作超时时间默认为300s，非必选\n**encrypt** 加密及压缩标识，默认为明文不压缩，非必选\n**debug** 调试标识，默认为非调试模式，非必选\n**callback** Jsonp支持，非必选\n**注：***目前后端仅支持kv请求，key为parameter,value为上述json*\n\n## 服务端响应调用返回外层格式定义\n**返回格式定义：**\n\n```\n{\n\t[\"services\": \"action\", \"exception\": \"\",]\n\t\"modulename\": \"queryCar\", \n\t\"operation\": \"\", \n\t\"tag\": \"12345\",\n\t\"status\": 1,\n\t\"msg\": \"\",\n\t[\"processkey\": \"\",] \n\t[ \"version\": \"\",]\n\t\"data\": {}\n}\n```\n其中:\n**services**标识该业务后端处理方法，\n**modulename**标识前端调用模块\n**operation** 标识后端操作\n**tag**为前端发起请求或注册后端回调时的回调参数\n**status**为后端处理状态,处理状态为success/warn/error。 success为成功标识；warn标识后端有一些警告信息，但并不影响整个流程处理，其中非关键异常信息存储在exception信息中；error标识后端处理发送关键异常，导致整个过程处理终端，其关键异常信息存储在exception中。\n**注：***\u003c=-120  关键异常   \u003c=-110 权限不足  \u003c=-101尚未登录  \u003c=-1非关键异常  \u003e0 成功*\n**exception**为端产生的异常信息，此字段不作为关键参数存在\n**processkey**为后端传输给前端的回调参数，在处理流程事务，以及连续操作时使用，此字段也非关键参数\n**data**为后端处理服务响应数据\n\n## 客户端HTTP文件上传调用服务外层格式定义\n\nHTTP字符流方式调用服务可分为实时请求及准实时请求。准实时请求为非高动态变更数据，在一定时间范围内请求与响应数据一致，如资源数据、档案数据、周期性数据等，准实时数据为平台对接集团CDN加速数据；实时数据为高动态数据，如位置上报等。服务平台接受客户端JSON格式的数据请求，经过相应处理转换为java原生对象传给后端服务及服务池。\n\n**HTTP请求地址为：***http://service:port/upload/version/modulename/operation?*\n\n**请求格式定义：**\n\n```\n{\n\t\"tag\": \"12345\",\n\t\"token:\": \"\",\n\t[\"processkey\": \"\", ] \n\t[\"encrypt\": \"\", ] \n\t[\"debug\": \"\", ] \n\t[\"callback\": \"\", ]\n\t\"data\": {}\n}\n```\n\n其中：\n**modulename** 标识客户端调用模块名称\n**operation** 标识客户端操作\n**version** 模块版本，默认为最新版本，非必选\n**tag**标识客户端处理响应标记，请求信息原样返回，可作为客户端发起请求流水\n**token**为用户身份标识，用于标识当前请求发起的用户身份，登录用户获得的唯一标识\n**data**为请求业务数据实体，此数据将由管理类直接交互给对应处理服务\n**processkey** 事务key，默认单次请求为一次弱事物，若开启事物，需客户端手工结束事物，事物操作超时时间默认为300s，非必选\n**encrypt** 加密及压缩标识，默认为明文不压缩，非必选\n**debug** 调试标识，默认为非调试模式，非必选\n**callback** Jsonp支持，非必选\n**注：***目前后端仅支持kv请求，key为parameter,value为上述json*\n\n## 服务端响应调用返回外层格式定义\n**返回格式定义：**\n\n```\n{\n\t[\"services\": \"action\", \"exception\": \"\",]\n\t\"modulename\": \"queryCar\", \n\t\"operation\": \"\", \n\t\"tag\": \"12345\",\n\t\"status\": 1,\n\t\"msg\": \"\",\n\t[\"processkey\": \"\",] \n\t[ \"version\": \"\",]\n\t\"data\": {}\n}\n```\n其中:\n**services**标识该业务后端处理方法，\n**modulename**标识前端调用模块\n**operation** 标识后端操作\n**tag**为前端发起请求或注册后端回调时的回调参数\n**status**为后端处理状态,处理状态为success/warn/error。 success为成功标识；warn标识后端有一些警告信息，但并不影响整个流程处理，其中非关键异常信息存储在exception信息中；error标识后端处理发送关键异常，导致整个过程处理终端，其关键异常信息存储在exception中。\n**注：***\u003c=-120  关键异常   \u003c=-110 权限不足  \u003c=-101尚未登录  \u003c=-1非关键异常  \u003e0 成功*\n**exception**为端产生的异常信息，此字段不作为关键参数存在\n**processkey**为后端传输给前端的回调参数，在处理流程事务，以及连续操作时使用，此字段也非关键参数\n**data**为后端处理服务响应数据\n\n## 分页请求\n当查询数据超过一定数量时，建议分页请求数据，分页请求数据体遵循以下规范。\n请求格式：\n\n```\n{\n\t\"start\": 0,\n\t\"limit\": 20,\n\t...\n}\n```\n**start**开始行 （limit\\*n）\n**limit** 当前页显示行数\n**...** 其他过滤条件\n\n响应格式：\n\n```\n{\n\t\"totalProperty\": 8,\n\t\"root\": [{}]\n}\n```\n**totalProperty**总条数\n**root** 具体数据\n\n## 在线维持\n用户登录后需维持在线状态，后端将清理无效在线用户，维持真实在线用户列表，防止僵尸用户：\n\n```\n{\n\t\"modulename\": \"systime\",\n\t\"tag\": \"exttag\",\n\t\"operation\": \"systime\",\n\t\"data\": {},\n\t\"token\": \"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJmcm9tX3VzZXIiOiJCIiwidGFyZ2V0X3VzZXIiOiJBIn0.rSWamyAYwuHCo7IFAgd1oRpSP7nzL7BF5t7ItqpKViM\"\n}\n```\n\n后端服务实施更新每个用户最后请求时间，当最后通信时间超出阀值（默认为10分钟），后端将清理该用户连接等相关在线缓存信息，因此，如前端需要维持在线状态需定时发送在线维持请求，确保最后请求时间不超过超时阀值。 \n\n```\n{\n\t\"operation\": \"systime\",\n\t\"modulename\": \"systime\",\n\t\"status\": 1,\n\t\"tag\": \"exttag\",\n\t\"data\": {\n\t\t\"systemTime\": 1388112191\n\t},\n\t\"token\": \"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJmcm9tX3VzZXIiOiJCIiwidGFyZ2V0X3VzZXIiOiJBIn0.rSWamyAYwuHCo7IFAgd1oRpSP7nzL7BF5t7ItqpKViM\"\n}\n```\n其中 ：\n**status**为1表示响应成功\n**systemTime**为当前服务平台系统时间UTC\n\n## 系统登录\n系统登录 调用login模块，其参数格式如： \n\"\n```\n{\n\t\"modulename\": \"login\",\n\t\"tag\": \"exttag\",\n\t\"operation\": \"login\",\n\t\"data\": {\n\t\t\"type\": \"login_type\",\n\t\t\"userName\": \"name\",\n\t\t\"userPass\": \"passwd\"\n\t}\n}\n{\n\t\"modulename\": \"login\",\n\t\"tag\": \"exttag\",\n\t\"operation\": \"login\",\n\t\"data\": {\n\t\t\"type\": \"local\",\n\t\t\"userName\": \"name\",\n\t\t\"userPass\": \"passwd\"\n\t}\n}\n```\n其中 ：\n**type** 登录方式，不同登录方式传递data内数据项不同\n**userName**对应的值为登录用户名\n**userPass**为登录密码\n\n\n**返回格式定义：**\n\n```\n{\n\t\"operation\": \"login\",\n\t\"modulename\": \"login\",\n\t\"status\": 1,\n\t\"tag\": \"exttag\",\n\t\"data\": {\n\t\t\"status\": 1,\n\t\t\"userName\": \"name\",\n\t\t\"token\": \"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJmcm9tX3VzZXIiOiJCIiwidGFyZ2V0X3VzZXIiOiJBIn0.rSWamyAYwuHCo7IFAgd1oRpSP7nzL7BF5t7ItqpKViM\",\n\t\t\"msg\": \"登录成功！\"\n\t}\n\t\"msg\": \"登录成功！\"\n}\n```\n如上登录成功消息：\n**status**为1表示登录成功，\n**token**为登录成功后生成的用户信息令牌，可唯一标识当前登录客户端，所有后端数据访问均需附带此用户信息！\n\n## 系统登出\n系统登出 调用logout模块，其参数格式如： \n\n```\n{\n\t\"modulename\": \"logout\",\n\t\"tag\": \"exttag\",\n\t\"operation\": \" logout \",\n\t\"data\": {},\n\t\"token\": \"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJmcm9tX3VzZXIiOiJCIiwidGFyZ2V0X3VzZXIiOiJBIn0.rSWamyAYwuHCo7IFAgd1oRpSP7nzL7BF5t7ItqpKViM\"\n}\n```\n其中 ：\n**token**为登录成功后生成的用户信息标识，唯一标识当前登录客户端\n\n```\n{\n\t\"operation\": \"logout\",\n\t\"modulename\": \"logout\",\n\t\"status\": 1,\n\t\"tag\": \"exttag\",\n\t\"data\": {\n\t\t\"status\": 1,\n\t\t\"msg\": \"登出成功！\"\n\t},\n\t\"token\": \"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJmcm9tX3VzZXIiOiJCIiwidGFyZ2V0X3VzZXIiOiJBIn0.rSWamyAYwuHCo7IFAgd1oRpSP7nzL7BF5t7ItqpKViM\",\n\t\"msg\": \"登出成功！\"\n}\n```\n如上登出成功消息：\n**status**为1表示登出成功\n\n## Tcp通道建立\nC/S订阅消息由后端主动推送，需订阅前建立通信通道，建立通道连接格式如下：\n\n### 文本格式\n\n```\n{\n\t\"token\": \"7679138619ce484ea39d6a73b20b4024\",\n\t\"modulename\": \"message_module\",\n\t\"operation\": \"passageway\",\n\t\"tag\": \"getway1\",\n\t\"data\": {}\n}\n```\n其中：\n**operation**标识为passageway建立订阅消息通道\n**tag**为指定订阅通道号标识，需与上述订阅一致\n\n### 二进制格式\n消息ID：0x0100。\n通道数据格式\n\n起始字节|字段|数据类型|描述及要求 \n---|---|---|--- \n0|目标标识|BYTE[36]|tokenid\n36|通道标识|BYTE[n]|tag\n\n例如：\n`7E 01 00 00 00 2B 00 01 31 37 66 33 66 39 33 61 2D 34 35 38 30 2D 31 31 65 35 2D 62 37 38 35 2D 66 61 31 36 33 65 36 66 37 39 36 31 67 65 74 77 61 79 63 7E`\n拆解如下：\n\n`7E \n01 00 \n00 \n00 2A \n00 01 \n31 37 66 33 66 39 33 61 2D 34 35 38 30 2D 31 31 65 35 2D 62 37 38 35 2D 66 61 31 36 33 65 36 66 37 39 36 31 \n67 65 74 77 61 79 \n63 \n7E`\n\n## 订阅/取消订阅消息\n订阅/取消订阅消息指令格式如下：\n\n```\n{\n\t\"token\": \"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJmcm9tX3VzZXIiOiJCIiwidGFyZ2V0X3VzZXIiOiJBIn0.rSWamyAYwuHCo7IFAgd1oRpSP7nzL7BF5t7ItqpKViM\",\n\t\"modulename\": \"message_module\",\n\t\"operation\": \"consume\",\n\t\"tag\": \"consume1\",\n\t\"data\": {\n\t\t\"type\": \"track\",\n\t\t\"tag\": \"getway1\",\n\t\t\"target_id\": 1\n\t}\n}\n{\n\t\"token\": \"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJmcm9tX3VzZXIiOiJCIiwidGFyZ2V0X3VzZXIiOiJBIn0.rSWamyAYwuHCo7IFAgd1oRpSP7nzL7BF5t7ItqpKViM\",\n\t\"modulename\": \"message_module\",\n\t\"operation\": \"unconsume\",\n\t\"tag\": \"consume1\",\n\t\"data\":{\n\t\t\"type\": \"track\",\n\t\t\"tag\": \"getway1\",\n\t\t\"target_id\": 1\n\t}\n}\n```\n其中：\n**operation**标识为consume /unconsume,订阅/取消订阅消息\n**type**订阅/取消订阅消息类型，不同登录方式传递data内数据项不同\n**tag**标识为订阅通道号\n\nB/S获取订阅消息指令格式如下：\n \n```\n{\n\t\"token\": \"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJmcm9tX3VzZXIiOiJCIiwidGFyZ2V0X3VzZXIiOiJBIn0.rSWamyAYwuHCo7IFAgd1oRpSP7nzL7BF5t7ItqpKViM\",\n\t\"modulename\": \"message_module\",\n\t\"operation\": \"query\",\n\t\"tag\": \"getway1\",\n\t\"data\": {}\n}\n```\n其中：\n**operation**标识为query查询订阅消息\n**tag**标识为获取指定订阅通道号的信息，需与上述订阅一致\n\n##FOTA\n获取最新版本信息 `/services/1.0.0/terminal/getFOTAInfo`\n请求地址 `/fota/version/type/imei`\n\n##创建实体对象Entity\n请求地址\n\n##HTTP数据接入\n请求地址 `/access/version/driverName/type`\nget方式\npost方式key/value\npost方式object\n请求参数：\n\n```\n{\n    \"driverName\": \"lt-test\",\n    \"type\": \"track\",\n    \"tag\": \"tag\",\n    \"data\": {\n        \"imei\": \"sdfsdfsdfsdf\",\n        \"longitude\": 123.999999,\n        \"latitude\": 45.999999,\n        \"altitude\": 1,\n        \"speed\": 99.99,\n        \"bearing\": 125,\n        \"accuracy\": 2.22,\n        \"altitudeAccuracy\": 1.99,\n        \"timestamp\": 123456546\n    }\n}\n```\n**driverName** 驱动名称\n**type** 数据类型\n**imei** 设备唯一标识\n**longitude** 经度\n**latitude** 维度\n**altitude** 高度\n**speed** 速度\n**bearing** 方向\n**accuracy** 经纬度精度\n**altitudeAccuracy** 高度精度\n**timestamp**定位时间（UTC秒）\n\n## 定位数据接入\n请求地址 `/access/version/16/location`\n请求参数：\n\n```\n{\n    \"tag\": \"tag\",\n    \"data\": {\n        \"employee_id\": \"sdfsdfsdfsdf\",\n        \"longitude\": 123.999999,\n        \"latitude\": 45.999999,\n        \"altitude\": 1,\n        \"speed\": 99.99,\n        \"bearing\": 125,\n        \"accuracy\": 2.22,\n        \"altitudeAccuracy\": 1.99,\n        \"timestamp\": 1514736000,\n        \"city_cn\": \"北京\",\n        \"city_en\": ”beijing“,\n    }\n}\n```\n参数:\n**employee_id** 设备唯一标识\n**longitude** 经度\n**latitude** 维度\n**altitude** 高度\n**speed** 速度\n**bearing** 方向\n**accuracy** 经纬度精度\n**altitudeAccuracy** 高度精度\n**timestamp**定位时间（UTC秒）\n**city_cn**城市名 中文\n**city_en** 城市名 英文\n\n#业务接口\n##系统桌面\n请求系统SCREEN菜单如下：\n\n`/services/1.0.1/chat_execute/fm_system_query_screen`\n\n返回如下：\n\n```\n{\n    \"parent_id\": \"\",\n    \"menu_id\": \"chat_flatscreen\",\n    \"component_instance_id\": \"chat_flatscreen\",\n    \"name\": \"首页\",\n    \"memo\": \"\",\n    \"sort\": 1,\n    \"model\": \"index.html\",\n    \"content\": \"\",\n    \"icon\": \"flatscreen\",\n    \"height\": \"\",\n    \"width\": 0,\n    \"status\": 1,\n    \"update_time\": 0,\n    \"update_user_id\": \"\"\n}\n```\n**parent_id**父菜单id\n**menu_id**菜单id\n**component_instance_id**关联模块id\n**name**菜单名称\n**memo**菜单描述\n**sort**菜单在同级中的位置\n**model**菜单链接\n**content**菜单配置数据\n**icon**菜单图标\n**height**菜单高度\n**width**菜单宽度\n**status**菜单状态\n\n##子系统一级菜单\n请求系统一级菜单如下：\n\n`/services/1.0.1/execute/fm_system_query_menu`\n\n返回如下：\n\n```\n{\n    \"parent_id\": \"\",\n    \"menu_id\": \"chat_flatscreen\",\n    \"component_instance_id\": \"chat_flatscreen\",\n    \"name\": \"首页\",\n    \"memo\": \"\",\n    \"sort\": 1,\n    \"model\": \"index.html\",\n    \"content\": \"\",\n    \"icon\": \"flatscreen\",\n    \"height\": \"\",\n    \"width\": 0,\n    \"status\": 1,\n    \"update_time\": 0,\n    \"update_user_id\": \"\"\n}\n```\n**parent_id**父菜单id\n**menu_id**菜单id\n**component_instance_id**关联模块id\n**name**菜单名称\n**memo**菜单描述\n**sort**菜单在同级中的位置\n**model**菜单链接\n**content**菜单配置数据\n**icon**菜单图标\n**height**菜单高度\n**width**菜单宽度\n**status**菜单状态\n\n##请求子菜单\n请求系统一级菜单如下：\n\n`/services/1.0.1/execute/fm_system_query_childmenu`\n参数\n\n```\n{\n    \"menu_id\": \"\"\n}\n```\n**menu_id**父菜单id\n返回如下：\n\n```\n{\n    \"parent_id\": \"\",\n    \"menu_id\": \"chat_flatscreen\",\n    \"component_instance_id\": \"chat_flatscreen\",\n    \"name\": \"首页\",\n    \"memo\": \"\",\n    \"sort\": 1,\n    \"model\": \"index.html\",\n    \"content\": \"\",\n    \"icon\": \"flatscreen\",\n    \"height\": \"\",\n    \"width\": 0,\n    \"status\": 1,\n    \"update_time\": 0,\n    \"update_user_id\": \"\"\n}\n```\n**parent_id**父菜单id\n**menu_id**菜单id\n**component_instance_id**关联模块id\n**name**菜单名称\n**memo**菜单描述\n**sort**菜单在同级中的位置\n**model**菜单链接\n**content**菜单配置数据\n**icon**菜单图标\n**height**菜单高度\n**width**菜单宽度\n**status**菜单状态\n\n##组织机构管理\n###组织机构查询\n请求地址如下：\n\n`/services/1.0.1/execute/fm_system_query_corp`\n参数\n`无`\n返回如下：\n\n```\n[\n    {\n        \"status\": 1,\n        \"memo\": \"\",\n        \"update_time\": 0,\n        \"corp_name\": \"CHAT系统\",\n        \"update_user_id\": \"fm_system_user_root\",\n        \"corp_id\": \"fm_system_chat\",\n        \"parent_id\": \"fm_system_corp\"\n    }\n]\n```\n**parent_id**归属机构id \n**corp_id**组织机构id\n**corp_name**组织机构名称\n**memo**描述\n**status**状态\n###组织机构下属机构查询\n请求地址如下：\n\n`/services/1.0.1/execute/fm_system_query_corp_child`\n参数\n\n\n```\n{\n    \"corp_id\": \"\"\n}\n```\n**corp_id**当前机构id\n返回如下：\n\n```\n[\n    {\n        \"status\": 1,\n        \"memo\": \"\",\n        \"update_time\": 0,\n        \"corp_name\": \"CHAT系统\",\n        \"update_user_id\": \"fm_system_user_root\",\n        \"corp_id\": \"fm_system_chat\",\n        \"parent_id\": \"fm_system_corp\"\n    }\n]\n```\n**parent_id**归属机构id \n**corp_id**组织机构id\n**corp_name**组织机构名称\n**memo**描述\n**status**状态\n###增加组织机构下属机构\n请求地址如下：\n\n`/services/1.0.1/execute/fm_system_insert_corp`\n参数\n\n```\n{\n    \"corp_id\": \"\",\n    \"corp_name\": \"\",\n    \"memo\": \"\"\n}\n```\n**corp_id**当前机构id\n**corp_name**下属机构名称\n**memo**机构描述\n标准返回\n\n###修改组织机构\n请求地址如下：\n\n`/services/1.0.1/execute/fm_system_update_corp`\n参数\n\n```\n{\n    \"corp_id\": \"\",\n    \"corp_name\": \"\",\n    \"memo\": \"\"\n}\n```\n**corp_id**机构id\n**corp_name**机构名称\n**memo**机构描述\n标准返回\n\n##用户管理\n###组织机构下属用户查询\n请求地址如下：\n\n`/services/1.0.1/execute/fm_system_query_corp_user`\n参数\n\n\n```\n{\n    \"corp_id\": \"\"\n}\n```\n**corp_id**当前机构id\n返回如下：\n\n```\n[\n    {\n        \"update_time\": 0,\n        \"is_administrator\": 1,\n        \"origin_name\": \"local\",\n        \"source_id\": \"\",\n        \"status\": 1,\n        \"update_user_id\": \"fm_system_user_root\",\n        \"login_name\": \"12334235345\",\n        \"user_name\": \"chat_王王\",\n        \"icon\": \"\",\n        \"gender\": 2,\n        \"memo\": \"\",\n        \"user_id\": \"821780b7-5590-11e7-b185-001c424e87b5\"\n    }\n]\n```\n**user_id**用户id \n**login_name**登录名称\n**user_name**用户名称\n**icon**用户头像\n**gender**用户性别\n**is_administrator**是否为管理员\n**origin_name**用户来源\n**source_id**来源id\n**memo**描述\n**status**状态\n###增加组织机构下属用户\n请求地址如下：\n\n`/services/1.0.1/execute/fm_system_insert_user`\n参数\n\n```\n{\n    \"corp_id\": \"\",\n    \"login_name\": \"\",\n    \"password\": \"\",\n    \"is_administrator\": \"\",\n    \"user_name\": \"\",\n    \"icon\": \"\",\n    \"gender\": 1,\n    \"memo\": \"\"\n}\n```\n**corp_id**当前机构id\n**login_name**登录名称\n**user_name**用户名称\n**password**登录密码\n**is_administrator**是否为管理员\n**icon**用户头像\n**gender**性别\n**memo**描述\n标准返回\n\n###修改用户信息\n请求地址如下：\n\n`/services/1.0.1/execute/fm_system_update_user`\n参数\n\n```\n{\n    \"user_id\": \"\",\n    \"corp_id\": \"\",\n    \"login_name\": \"\",\n    \"password\": \"\",\n    \"is_administrator\": \"\",\n    \"user_name\": \"\",\n    \"icon\": \"\",\n    \"gender\": 1,\n    \"memo\": \"\"\n}\n```\n**user_id**用户id\n**corp_id**所属机构id\n**login_name**登录名称\n**user_name**用户名称\n**password**登录密码\n**is_administrator**是否为管理员\n**icon**用户头像\n**gender**性别\n**memo**描述\n标准返回\n##数据源管理\n###查询服务分类\n请求地址如下：\n\n`/services/1.0.1/execute/d96c960f-8d23-4a64-92d5-035abde07c33`\n参数无\n返回如下：\n\n```\n{\n    \"service_class_id\": \"fm_system_service_base\",\n    \"name\": \"系统基础服务\",\n    \"parent_id\": \"\",\n    \"desc\": \"系统基础服务，请勿删除\"\n}\n```\n**service_class_id**服务分类id\n**parent_id**服务分类所属分类id\n**name**服务分类名称\n**desc**描述\n###查询服务\n请求地址如下：\n\n`/services/1.0.1/execute/0581fa6f-733b-49f0-8772-ebbc3cb4d7b7`\n参数无\n返回如下：\n\n```\n[\n    {\n        \"status\": 1,\n        \"service_class_id\": \"fm_system_service_base\",\n        \"service_id\": \"fm_mall_service_cart\",\n        \"name\": \"购物车服务\",\n        \"desc\": \"\"\n    }\n]\n```\n**service_class_id**服务分类id\n**service_id**服务id\n**name**服务名称\n**desc**描述\n**status**状态\n\n###查询数据源\n请求地址如下：\n\n`/services/1.0.1/execute/8e9cd8f7-ccdb-426b-b251-1bdf51480421`\n参数无\n返回如下：\n\n```\n[\n    {\n        \"name\": \"ChatAddFriend\",\n        \"remark\": \"\",\n        \"desc\": \"添加好友\",\n        \"service_id\": \"fm_system_service_execute\",\n        \"type\": \"call\",\n        \"service_event_id\": \"chat_add_friend\"\n    }\n]\n```\n**service_id**服务id\n**service_event_id**数据源id\n**name**服务名称\n**desc**描述\n**remark**注记\n**type**类型\n**status**状态\n\n###查询数据源配置\n请求地址如下：\n\n`/services/1.0.1/execute/a5a547ae-f126-48ad-9f4e-2642189c1e6f`\n参数无\n返回如下：\n\n```\n[\n    {\n        \"service_event_parameters_id\": \"004d41e2-5d16-11e6-b409-fa163e51eb24\",\n        \"remark\": \"\",\n        \"desc\": \"查询模块配置映射\",\n        \"content\": \"\",\n        \"service_id\": \"fm_system_service_execute\",\n        \"expression\": \"model,domain\",\n        \"data_type_class_id\": \"system_data_type_mysql\",\n        \"rule\": \"\",\n        \"service_event_id\": \"fm_system_query_r_attribute\"\n    }\n]\n```\n**service_id**服务id\n**service_event_id**数据源id\n**service_event_parameters_id**数据源配置id\n**data_type_class_id**数据源连接分类类型id\n**desc**描述\n**remark**注记\n**rule**规则\n**content**内容\n**expression**表达式/参数\n\n###增加数据源\n请求地址如下：\n`/services/1.0.1/execute/fm_system_add_services_event`\n参数\n\n```\n{\n    \"service_id\": \"\",\n    \"name\": \"\",\n    \"description\": \"\",\n    \"type\": \"\",\n    \"content\": \"\",\n    \"expression\": \"\"\n}\n```\n**service_id**服务id\n**name**数据源名称\n**description**数据源名称\n**type**数据源类型\n**content**数据源定义\n**expression**数据源参数\n返回如下：\n\n```\n{\n    \"add_services_event\": \"3bb63ac8-f063-4158-8bd2-31875b794957\"\n}\n```\n**add_services_event**添加的数据源id\n###自定义数据源\n请求地址如下：\n`/services/1.0.1/execute/2d901cb4-84ea-46bd-bf49-5809cae70dac`\n参数\n\n```\n{\n\t\"data\": {\n\t\t\"entity_desc\": \"对对对\",\n\t\t\"fields\": [{\n\t\t\t\"precision\": 26,\n\t\t\t\"null_able\": 0,\n\t\t\t\"type\": \"postgres_character_varying\",\n\t\t\t\"column_desc\": \"放\",\n\t\t\t\"primary_key\": 1\n\t\t}]\n\t},\n\t\"tag\": \"tag\"\n}\n```\n外层表信息字段释义\n**entity_class_id** 表实体所属分类，非必填，默认\"Sm@rtMapX_system\"\n**table_name** 表名称，遵循数据库表格命名规范，非必填，可自动生成\n**table_schema** 表模式，非必填，默认用户模式下\n**table_type** 表类型，非必填，默认为\"user\"\n**data_source_id** 所属数据源，非必填，默认为\"fm_data_source_postgresql\"\n**entity_desc** 表注释\n**remark** 表描述信息，非必填，默认为空\n**short_code** 快捷操作编码，非必填，默认为空\n**islevel** 是否为层级表[0,1]，非必填，默认为非层级表[0]\n表字段信息释义\n**column_name** 字段名称，非必填，可自动生成\n**column_desc** 字段注释\n**remark** 表字段描述信息，非必填，默认为空\n**null_able** 能否为空[0,1]，非必填，默认未允许空[1]\n**primary_key** 是否为主键，非必填，默认为非主键[0]\n**precision** 长度\n**scale** 小数精度\n**type** 字段类型，详见字段类型字典，默认未字符串\n**encrypt_type** 字段加密类型，非必填，默认为不加密[0]\n\n## 地址匹配\n请求地址如下：\n`/services/1.0.1/dataconvert/geocoding`\n参数\n\n```\n{\n    \"conjunction\": \"and\",\n    \"filters\": [\n        {\n            \"service_event_config_id\": \"6a566b05-e0f4-43e6-b6d3-6dd9b324fabf\",\n            \"rule\": \"4f1392a2-491f-42b3-81ff-73f3f98e555b\",\n            \"value\": \"s\",\n            \"data_type_id\": \"postgres_character_varying\"\n        }\n    ],\n    \"column_province\": \"\",\n    \"column_city\": \"\",\n    \"column_district\": \"\",\n    \"column_address\": \"\"\n}\n```\n标准返回\n\n## 逆地理接口\n请求地址如下：\n`/api/regeo/[lon,lat]`\n如：`/api/regeo/[116.29378573835402,39.89561127554049]`\n返回如下：\n\n```\n{\n    \"lon\": 116.29378573835402,\n    \"lat\": 39.89561127554049,\n    \"desc\": \"北京市,丰台区,万丰路(西98米),金家村第二社区居民委员会外来人口管理站(南44米)\"\n}\n```\n\n\n#微信小程序\n`近期有比较迫切的微信支付需求，选择了小程序支付，原本以为应该很快就可以搭起完整的流程，或许是因为不熟悉开程序开发和微信支付开发，利用零零散散的时间搞了几天才彻底打通，在此将所有过程记录下来并将成果分享给大家，让各位像我一样的微信盲快速实现微信小程序支付。\n`\n\n#相关开源库\n\n**开源库及服务说明如下：**\n\n开源库名称|描述\n---|---\nOIUE主工程（服务启动容器felix）|https://github.com/OIUE/OIUE\nOIUE基于OSGI打包配置|https://github.com/OIUE/OIUE-CONFIGURATOR\nOIUE核心服务（容器隔离及核心服务定义）|https://github.com/OIUE/OIUE-CORE\nOIUE核心服务实现|https://github.com/OIUE/OIUE-BASE\nOIUE基于jdbc事物封装|https://github.com/OIUE/OIUE-ODPS\nOIUE开放服务|https://github.com/OIUE/OIUE-SERVICES\n\n以下服务均可在maven中央库及 https://mvnrepository.com 找到\n\n#相关服务\n\n服务名称|纯接口|bundle\n---|---|---\n工具包|N|[org.oiue.tools-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue/tools/1.0.1)\n启动容器隔离封装服务（基于OSGI）|N|[org.oiue.service.osgi.rpc-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services/org.oiue.service.osgi.rpc/1.0.1)\nAction服务定义|Y|[org.oiue.service.action.api-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services.actions/org.oiue.service.action.api/1.0.1)\nAction调度服务实现|N|[org.oiue.service.action.base-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services.actions/org.oiue.service.action.base/1.0.1)\nActionFilter认证服务|N|[org.oiue.service.action.filter.auth-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services.actions/org.oiue.service.action.filter.auth/1.0.1)\n免登陆调试服务|N|org.oiue.service.action.filter.auth.debug-1.0.1.jar\nAction服务HTTP方式访问实现OLD|N|org.oiue.service.action.http.action-1.0.1.jar\nHTTP图片验证码服务|N|[org.oiue.service.action.http.imageCode-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services.actions/org.oiue.service.action.http.imageCode/1.0.1)\nAction服务HTTP方式访问实现NEW|N|[org.oiue.service.action.http.services-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services.actions/org.oiue.service.action.http.services/1.0.1)\nHTTP文件上传服务|N|[org.oiue.service.action.http.upload-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services.actions/org.oiue.service.action.http.upload/1.0.1)\nAction服务TCP方式JSON访问实现|N|[org.oiue.service.action.tcp.action-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services.actions/org.oiue.service.action.tcp.action/1.0.1)\nAction服务TCP方式流访问实现|N|[org.oiue.service.action.tcp.bytes-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services.actions/org.oiue.service.action.tcp.bytes/1.0.1)\n认证服务定义|Y|[org.oiue.service.auth-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services/org.oiue.service.auth/1.0.1)\n认证调度服务实现|N|[org.oiue.service.auth.impl-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services/org.oiue.service.auth.impl/1.0.1)\n本地认证服务实现(直接查jdbc库)|N|[org.oiue.service.auth.local-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services/org.oiue.service.auth.local/1.0.1)\n自定义缓存定义|Y|[org.oiue.service.buffer-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services/org.oiue.service.buffer/1.0.1)\n自定义缓存实现|N|[org.oiue.service.buffer.impl-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services/org.oiue.service.buffer.impl/1.0.1)\n自定义缓存同步服务|N|[org.oiue.service.buffer.synchronization.db-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services/org.oiue.service.buffer.synchronization.db/1.0.1)\n流数据编解码处理服务定义|Y|[org.oiue.service.bytes.api-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services.bytes/org.oiue.service.bytes.api)\n流数据编解码调度处理服务实现|N|[org.oiue.service.bytes.base-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services.bytes/org.oiue.service.bytes.base)\n数据流编解码|N|[org.oiue.service.bytes.bytes-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services.bytes/org.oiue.service.bytes.bytes)\n整形数据编解码|N|[org.oiue.service.bytes.int16-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services.bytes/org.oiue.service.bytes.int16)\n字符串编解码|N|[org.oiue.service.bytes.string-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services.bytes/org.oiue.service.bytes.string)\n缓存服务定义|Y|[org.oiue.service.cache-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services/org.oiue.service.cache)\n自定义缓存实现|N|[org.oiue.service.cache.buffer-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services/org.oiue.service.cache.buffer)\n缓存调度实现|N|[org.oiue.service.cache.impl-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services/org.oiue.service.cache.impl)\n混存redis封装|N|[org.oiue.service.cache.jedis-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services/org.oiue.service.cache.jedis)\n混存脚本操作|N|[org.oiue.service.cache.script-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services/org.oiue.service.cache.script)\n树状结构缓存定义|Y|[org.oiue.service.cache.tree-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services/org.oiue.service.cache.tree)\n树状缓存脚本操作|N|[org.oiue.service.cache.tree.script-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services/org.oiue.service.cache.tree.script)\n树状缓存zookeeper封装|N|[org.oiue.service.cache.tree.zookeeper.curator-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services/org.oiue.service.cache.tree.zookeeper.curator)\n缓存调试服务|N|org.oiue.service.debug.cache-1.0.1.jar\nHttp客户端调试服务|N|org.oiue.service.debug.httpclient-1.0.1.jar\n资源操作调试服务|N|org.oiue.service.debug.res-1.0.1.jar\n树状缓存调试服务|N|org.oiue.service.debug.treecache-1.0.1.jar\n数据接入总线服务定义|Y|[org.oiue.service.driver.api-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services.drivers/org.oiue.service.driver.api)\n数据接入总线调度实现|N|[org.oiue.service.driver.base-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services.drivers/org.oiue.service.driver.base)\n数据总线过滤实现|N|[org.oiue.service.driver.filter.impl-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services.drivers/org.oiue.service.driver.filter.impl)\n数据总线订阅实现|N|[org.oiue.service.driver.listener.impl-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services.drivers/org.oiue.service.driver.listener.impl)\n数据总线存储实现|N|[org.oiue.service.driver.listener.storage-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services.drivers/org.oiue.service.driver.listener.storage)\n事件执行服务定义|Y|[org.oiue.service.event.execute-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services/org.oiue.service.event.execute)\n事件执行服务实现|N|[org.oiue.service.event.execute.impl-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services/org.oiue.service.event.execute.impl)\n获取系统时间事件定义|Y|[org.oiue.service.event.system.time-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services/org.oiue.service.event.system.time)\n获取系统时间事件实现|N|[org.oiue.service.event.system.time.impl-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services/org.oiue.service.event.system.time.impl)\n文件上传服务定义|Y|[org.oiue.service.file.upload-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services/org.oiue.service.file.upload)\n文件上传服务实现|N|[org.oiue.service.file.upload.impl-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services/org.oiue.service.file.upload.impl)\nHTTP客户端服务定义|Y|[org.oiue.service.http.client-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services/org.oiue.service.http.client)\napacheHttp客户端封装|N|[org.oiue.service.http.client.apache-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services/org.oiue.service.http.client.apache)\n日志服务定义|Y|[org.oiue.service.log-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services/org.oiue.service.log)\n日志Log4j封装|N|[org.oiue.service.log4j-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services/org.oiue.service.log4j)\n消息服务定义|Y|[org.oiue.service.message-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services/org.oiue.service.message)\n消息服务实现|N|[org.oiue.service.message.impl-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services/org.oiue.service.message.impl)\nJDBC事务基础服务|N|[org.oiue.service.odp.base-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services.odps/org.oiue.service.odp.base)\nH2持久层底层公共方法定义|N|[org.oiue.service.odp.dmo.h2-1.0.1.jar]()\nMysql持久层底层公共方法定义|N|[org.oiue.service.odp.dmo.mysql-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services.odps/org.oiue.service.odp.dmo.mysql)\nNeo4j持久层底层公共方法定义|N|[org.oiue.service.odp.dmo.neo4j-1.0.1.jar]()\nPostgresql持久层底层公共方法定义|N|[org.oiue.service.odp.dmo.postgresql-1.0.1.jar]()\n数据操作事件定义|Y|[org.oiue.service.odp.event.api-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services.odps.events/org.oiue.service.odp.event.api)\n数据操作事件Mysql实现|N|[org.oiue.service.odp.event.dmo.mysql-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services.odps/org.oiue.service.odp.dmo.mysql)\n数据操作事件Mysql查询实现|N|[org.oiue.service.odp.event.dmo.mysql.q-1.0.1.jar]()\n数据操作事件Mysql单条查询实现|N|[org.oiue.service.odp.event.dmo.mysql.select-1.0.1.jar]()\n数据操作事件Mysql多条查询实现|N|[org.oiue.service.odp.event.dmo.mysql.selects-1.0.1.jar]()\n数据操作事件Mysql查询事件转换实现|N|[org.oiue.service.odp.event.dmo.mysql.t-1.0.1.jar]()\n数据操作事件Neo4j实现|N|[org.oiue.service.odp.event.dmo.neo4j-1.0.1.jar]()\n数据操作事件Neo4j插入实现|N|[org.oiue.service.odp.event.dmo.neo4j.insert-1.0.1.jar]()\n数据操作事件Postgresql实现|N|[org.oiue.service.odp.event.dmo.postgresql-1.0.1.jar]()\n数据操作事件Postgresql查询实现|N|[org.oiue.service.odp.event.dmo.postgresql.q-1.0.1.jar]()\n数据操作事件Postgresql查询实现|N|[org.oiue.service.odp.event.dmo.postgresql.query-1.0.1.jar]()\n数据操作事件Postgresql查询实现|N|[org.oiue.service.odp.event.dmo.postgresql.selects-1.0.1.jar]()\n事件sql处理定义|Y|[org.oiue.service.odp.event.sql.structure-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services.odps.events/org.oiue.service.odp.event.sql.structure)\n事件sql处理实现|N|[org.oiue.service.odp.event.sql.structure.impl-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services.odps.events/org.oiue.service.odp.event.sql.structure.impl)\n资源操作服务定义|Y|[org.oiue.service.odp.res.api-1.0.1.jar]()\n资源操作服务业务实现|N|[org.oiue.service.odp.res.base-1.0.1.jar]()\n资源操作持久层定义|Y|[org.oiue.service.odp.res.dmo-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services.odps/org.oiue.service.odp.res.dmo)\nH2资源操作持久层实现|N|[org.oiue.service.odp.res.dmo.h2-1.0.1.jar]()\nMysql资源操作持久层实现|N|[org.oiue.service.odp.res.dmo.mysql-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services.odps/org.oiue.service.odp.res.dmo.mysql)\nNeo4j资源操作持久层实现|N|[org.oiue.service.odp.res.dmo.neo4j-1.0.1.jar]()\nsql处理定义|Y|[org.oiue.service.odp.structure-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services.odps/org.oiue.service.odp.structure)\nsql处理实现|N|[org.oiue.service.odp.structure.impl-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services.odps.events/org.oiue.service.odp.event.sql.structure.impl)\n查询sql处理实现|N|[org.oiue.service.odp.structure.selectsql-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services.odps/org.oiue.service.odp.structure.selectsql)\n在线维护服务定义|Y|[org.oiue.service.online-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services/org.oiue.service.online)\n在线维护服务实现|N|[org.oiue.service.online.impl-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services/org.oiue.service.online.impl)\n权限校验服务定义|Y|[org.oiue.service.permission-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services/org.oiue.service.permission)\n权限校验调度服务实现|N|[org.oiue.service.permission.impl-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services/org.oiue.service.permission.impl)\n访问鉴权及转换服务|N|[org.oiue.service.permission.verify-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services/org.oiue.service.permission.verify)\nJDBC连接池定义|Y|[org.oiue.service.sql-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services/org.oiue.service.sql)\nApache的JDBC连接池封装|N|[org.oiue.service.sql.apache-1.0.1.jar]()\n系统分析服务定义|Y|[org.oiue.service.system.analyzer-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services/org.oiue.service.system.analyzer)\n系统分析服务实现|N|[org.oiue.service.system.analyzer.impl-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services/org.oiue.service.system.analyzer.impl)\n定时任务调度服务定义|Y|[org.oiue.service.task-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services/org.oiue.service.task)\n定时任务调度|N|[org.oiue.service.task.quartz-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services/org.oiue.service.task.quartz)\nTCP/UDP服务定义|Y|[org.oiue.service.tcp-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services/org.oiue.service.tcp)\nMina封装|N|[org.oiue.service.tcp.mina-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services/org.oiue.service.tcp.mina)\n模板定义|Y|[org.oiue.service.template.api-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services.templates/org.oiue.service.template.api)\n模板管理服务实现|N|[org.oiue.service.template.base-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services.templates/org.oiue.service.template.base)\nbeetl封装|N|[org.oiue.service.template.beetl-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services/org.oiue.service.template.beetl)\nvelocity封装|N|[org.oiue.service.template.velocity-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services.templates/org.oiue.service.template.velocity)\n线程池定义|Y|[org.oiue.service.threadpool-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services/org.oiue.service.threadpool)\n线程池实现|N|[org.oiue.service.threadpool.impl-1.0.1.jar](https://mvnrepository.com/artifact/org.oiue.services/org.oiue.service.threadpool.impl)\n\n[more](http://www.oiue.org)\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foiue%2Foiue","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foiue%2Foiue","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foiue%2Foiue/lists"}