diff --git a/orange-demo-multi/orange-demo-multi-service/.gitignore b/orange-demo-multi/orange-demo-multi-service/.gitignore
deleted file mode 100644
index e3fa94cd..00000000
--- a/orange-demo-multi/orange-demo-multi-service/.gitignore
+++ /dev/null
@@ -1,26 +0,0 @@
-target/
-!.mvn/wrapper/maven-wrapper.jar
-/.mvn/*
-
-### STS ###
-.apt_generated
-.classpath
-.factorypath
-.project
-.settings
-.springBeans
-.sts4-cache
-
-### IntelliJ IDEA ###
-.idea
-*.iws
-*.iml
-*.ipr
-
-### NetBeans ###
-/nbproject/private/
-/build/
-/nbbuild/
-/dist/
-/nbdist/
-/.nb-gradle/
\ No newline at end of file
diff --git a/orange-demo-multi/orange-demo-multi-service/README.md b/orange-demo-multi/orange-demo-multi-service/README.md
deleted file mode 100644
index 33c6c911..00000000
--- a/orange-demo-multi/orange-demo-multi-service/README.md
+++ /dev/null
@@ -1,90 +0,0 @@
-### 必知要点
----
-在该文档中,我们将主要介绍开发和调试阶段,系统所依赖的服务组件的启动与控制台访问方式。
-
-1. 我们目前提供的启动方式包括,docker-compose和本地命令行两种方式。推荐操作更为简便的docker-compose方式。
-2. 对于基础服务组件,如注册中心(nacos/consul)、配置中心(nacos/consul)、Redis、Zookeeper和Kafka,均可通过docker-compose的方式启动。
-与此同时,我们也为这些服务组件提供了本地启动文档,具体详见开发文档中[环境准备章节](http://www.orangeforms.com/development-doc/environment/)。
-3. 出于某些原因,apollo配置中心和skywalking,我们目前尚未提供docker-compose方式,因此只能通过本地命令行的方式启动。
-具体详见开发文档中[环境准备章节](http://www.orangeforms.com/development-doc/environment/)。
-4. ELK、Prometheus、Grafana和PinPoint,由于不会影响正常的开发和调试,我们目前仅提供了docker-compose的启动方式。
-
-最后,我们真诚的希望能够得到您的反馈,并持续改进我们的产品、文档、服务和操作流程。
-### 服务接口文档
----
-- Knife4j
- - 服务启动后,Knife4j的文档入口地址 [http://localhost:8082/doc.html#/plus](http://localhost:8082/doc.html#/plus)
-- Postman
- - 无需启动服务,即可将当前工程的接口导出成Postman格式。在工程的common/common-tools/模块下,找到ExportApiApp文件,并执行main函数。
-
-### 系统依赖服务组件
----
-当前工程所有微服务启动前,需将下列服务组件依次启动,可选组件可根据实际需要决定是否启动。
-> 如果采用本地启动方式,启动顺序如下。docker-compose方式,脚本文件中已经编排好启动顺序。
-- Redis
- - 版本:4
- - 端口: 6379
- - 推荐客户端工具 [AnotherRedisDesktopManager](https://github.com/qishibo/AnotherRedisDesktopManager)
-- Zookeeper
- - 版本:3.5.5
- - 端口:2181
- - 推荐客户端工具 [zkui](https://github.com/DeemOpen/zkui)
-- Kafka
- - 版本:2.12-2.4.0
- - 端口:9092
- - 推荐客户端工具 [Kafka Tool](http://www.kafkatool.com/download.html)
-- Nacos
- - 版本:1.3.1
- - 控制台URL:localhost:8848/nacos
- - 用户名密码:nacos/nacos
-- Sentinel-Dashboard (可选)
- - 版本:1.7.2
- - 控制台URL: localhost:8858
- - 用户名密码:sentinel/sentinel
- - 注意:该服务缺省端口为8080,容易冲突,所以改为8858。我们在所有的配置中均使用了8858,而非8080。
-- ELK (可选,docker-compose-elk)
- - 版本:7.5.x
- - Kibana控制台URL:localhost:5601
-- SkyWalking (可选,仅当尝试使用SkyWalking进行链路跟踪时使用)
- - 版本:8.1.x
- - 控制台URL:localhost:8095
- - 注意:该服务缺省端口为8080,容易冲突,所以改为8095。具体修改方式参考开发文档[环境准备章节](http://www.orangeforms.com/development-doc/environment/#skywalking)
-- admin-monitor服务模块 (可选)
- - 控制台URL:localhost:8769
-- XXL-Job (可选,仅当启动Job服务时使用)
- - 重要声明:xxl_job 官网仅提供对mysql的支持,如果您在橙单中选择了postgresql,xxl-job-admin仍需依赖mysql。
- - 版本:2.2.0
- - 控制台URL:localhost:8081/xxl-job-admin/
- - 注意:该服务缺省端口为8080,容易冲突,所以改为了8081。我们在所有的配置中均使用了8081,而非8080。
- - 用户名密码:admin/123456
-- 启动upms服务 (保证登录和用户权限服务可用)
-- 启动其他业务应用微服务
- 推荐在gateway服务之前启动,以便gateway服务启动后可以即刻发现服务。由于gateway是从注册中心定时拉取微服务信息,所以在gateway之后启动的微服务,通常会延迟一小段时间之后才会被发现。
-- 启动gateway网关服务
- 在所有微服务之后启动,启动后即可发现所有微服务。仅有被gateway发现的微服务,该服务的请求才可以被正常转发。
-
-### 服务组件启动
----
-> 下述文件位于工程目录的zz-resource/docker-files子目录内。
-- docker-compose.yml (必须)
- - 包含系统所需的必备组件,如注册中心、配置中心、Sentinel-Dashboard、Redis、Kafka和Zookeeper。
- - 第一次启动方式为 docker-compose up -d
- - 停止方式推荐为 docker-compose stop
- - 再次启动方式推荐为 docker-compose start
- - 强行停止方式为 docker-compose down
- - 强行停止后再次启动,可能导致kafka和zookeeper出现数据错误,执行./clear-data.sh可清空部分临时数据。
- - 清空后再次执行docker-compose up -d 即可。
- - docker-compose start和docker-compose stop不会出现该类数据问题。
- - 查看启动日志命令 docker-compose logs
-- docker-compose-full.yml (可选)
- - 包含全部服务的启动项,基础服务 + elk + gp。
- - 启动方式为 docker-compose -f docker-compose-full.yml up -d
- - 停止方式和数据错误处理方式,请参考上面docker-compose.yml的说明。
-- Skywalking服务启动 (可选)
- - 启动方式,目前仅支持命令行方式,具体参考开发文档中[环境准备章节](http://www.orangeforms.com/development-doc/environment/#skywalking)
-
-### 本地命令行启动方式
----
-1. Nacos、Consul、Sentinel、Apollo、XXL-Job、Redis、Kafka、Zookeeper、Skywalking的本地启动方式,请参考开发文档中[环境准备章节](http://www.orangeforms.com/development-doc/environment/)。
-2. ELK、Grafana、Prometheus、Pinpoint目前仅提供docker-compose方式。
-3. 再次强调,通过本地命令行启动所有系统服务组件时,启动顺序一定要和上面"系统依赖服务组件"部分列出的服务顺序保持一致,因为服务组件之间是有依赖的。
\ No newline at end of file
diff --git a/orange-demo-multi/orange-demo-multi-service/application-consumer/operation-log-consumer/pom.xml b/orange-demo-multi/orange-demo-multi-service/application-consumer/operation-log-consumer/pom.xml
deleted file mode 100644
index 9d84aa9d..00000000
--- a/orange-demo-multi/orange-demo-multi-service/application-consumer/operation-log-consumer/pom.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-
-
-
- application-consumer
- com.orangeforms
- 1.0.0
-
- 4.0.0
-
- operation-log-consumer
-
-
-
- com.orangeforms
- common-log
- 1.0.0
-
-
-
-
-
-
- src/main/resources
-
- **/*.*
-
- false
-
-
- src/main/java
-
- **/*.xml
-
- false
-
-
-
-
- org.springframework.boot
- spring-boot-maven-plugin
- ${spring-boot.version}
-
-
-
-
\ No newline at end of file
diff --git a/orange-demo-multi/orange-demo-multi-service/application-consumer/operation-log-consumer/src/main/java/com/orangeforms/operationlogconsumer/OperationLogConsumerApplication.java b/orange-demo-multi/orange-demo-multi-service/application-consumer/operation-log-consumer/src/main/java/com/orangeforms/operationlogconsumer/OperationLogConsumerApplication.java
deleted file mode 100644
index f6a5f42b..00000000
--- a/orange-demo-multi/orange-demo-multi-service/application-consumer/operation-log-consumer/src/main/java/com/orangeforms/operationlogconsumer/OperationLogConsumerApplication.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.orangeforms.operationlogconsumer;
-
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
-import org.springframework.context.annotation.ComponentScan;
-
-/**
- * 操作日志消费者服务启动类。
- *
- * @author Jerry
- * @date 2020-08-08
- */
-@ComponentScan("com.orangeforms")
-@EnableDiscoveryClient
-@SpringBootApplication
-public class OperationLogConsumerApplication {
-
- public static void main(String[] args) {
- SpringApplication.run(OperationLogConsumerApplication.class, args);
- }
-}
diff --git a/orange-demo-multi/orange-demo-multi-service/application-consumer/operation-log-consumer/src/main/java/com/orangeforms/operationlogconsumer/config/DataSourceConfig.java b/orange-demo-multi/orange-demo-multi-service/application-consumer/operation-log-consumer/src/main/java/com/orangeforms/operationlogconsumer/config/DataSourceConfig.java
deleted file mode 100644
index ef6b0a82..00000000
--- a/orange-demo-multi/orange-demo-multi-service/application-consumer/operation-log-consumer/src/main/java/com/orangeforms/operationlogconsumer/config/DataSourceConfig.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package com.orangeforms.operationlogconsumer.config;
-
-import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Primary;
-import org.springframework.transaction.annotation.EnableTransactionManagement;
-import org.mybatis.spring.annotation.MapperScan;
-
-import javax.sql.DataSource;
-
-/**
- * 数据源配置Bean对象。
- *
- * @author Jerry
- * @date 2020-08-08
- */
-@Configuration
-@EnableTransactionManagement
-@MapperScan(value = {"com.orangeforms.*.dao", "com.orangeforms.common.*.dao"})
-public class DataSourceConfig {
-
- @Bean(initMethod = "init", destroyMethod = "close")
- @Primary
- @ConfigurationProperties(prefix = "spring.datasource.druid")
- public DataSource druidDataSource() {
- return DruidDataSourceBuilder.create().build();
- }
-}
diff --git a/orange-demo-multi/orange-demo-multi-service/application-consumer/operation-log-consumer/src/main/java/com/orangeforms/operationlogconsumer/consumer/OperationLogConsumer.java b/orange-demo-multi/orange-demo-multi-service/application-consumer/operation-log-consumer/src/main/java/com/orangeforms/operationlogconsumer/consumer/OperationLogConsumer.java
deleted file mode 100644
index 79b3bf78..00000000
--- a/orange-demo-multi/orange-demo-multi-service/application-consumer/operation-log-consumer/src/main/java/com/orangeforms/operationlogconsumer/consumer/OperationLogConsumer.java
+++ /dev/null
@@ -1,90 +0,0 @@
-package com.orangeforms.operationlogconsumer.consumer;
-
-import com.alibaba.fastjson.JSON;
-import com.orangeforms.common.log.model.SysOperationLog;
-import com.orangeforms.common.log.service.SysOperationLogService;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.kafka.clients.consumer.ConsumerRecord;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Bean;
-import org.springframework.dao.DuplicateKeyException;
-import org.springframework.kafka.annotation.KafkaListener;
-import org.springframework.kafka.config.ConcurrentKafkaListenerContainerFactory;
-import org.springframework.kafka.config.KafkaListenerContainerFactory;
-import org.springframework.kafka.core.ConsumerFactory;
-import org.springframework.kafka.listener.ContainerProperties;
-import org.springframework.kafka.support.Acknowledgment;
-import org.springframework.stereotype.Component;
-
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Optional;
-
-/**
- * 各个微服务操作日志的消费者对象。该消费者会集中处理操作日志。
- *
- * @author Jerry
- * @date 2020-08-08
- */
-@Component
-@Slf4j
-public class OperationLogConsumer {
-
- @Autowired
- private SysOperationLogService sysOperationLogService;
-
- @Bean
- public KafkaListenerContainerFactory> batchFactory(ConsumerFactory consumerFactory) {
- ConcurrentKafkaListenerContainerFactory factory =
- new ConcurrentKafkaListenerContainerFactory<>();
- factory.setConsumerFactory(consumerFactory);
- factory.setConcurrency(10);
- factory.getContainerProperties().setPollTimeout(1500);
- //设置为批量消费,每个批次数量在Kafka配置参数中设置
- factory.setBatchListener(true);
- factory.getContainerProperties().setAckMode(ContainerProperties.AckMode.MANUAL_IMMEDIATE);
- return factory;
- }
-
- @KafkaListener(
- topics = {"${common-log.operation-log.kafkaTopic}"},
- containerFactory = "batchFactory",
- groupId = "operation-log")
- public void listen(List> recordList, Acknowledgment ack) {
- if (CollectionUtils.isNotEmpty(recordList)) {
- List operationLogList = new LinkedList<>();
- for (ConsumerRecord, ?> record : recordList) {
- Optional> message = Optional.ofNullable(record.value());
- if (message.isPresent()) {
- SysOperationLog operationLog =
- JSON.parseObject(message.get().toString(), SysOperationLog.class);
- operationLogList.add(operationLog);
- }
- }
- if (CollectionUtils.isNotEmpty(operationLogList)) {
- try {
- sysOperationLogService.batchSave(operationLogList);
- } catch (Exception e) {
- log.error("Failed to batchSave SysOperationLog and try again one by one", e);
- this.safeSave(operationLogList);
- }
- }
- }
- ack.acknowledge();
- }
-
- private void safeSave(List operationLogList) {
- for (SysOperationLog operationLog : operationLogList) {
- try {
- // 如果批量插入失败,为了确保最大限度的将操作日志数据插入到目的表。
- // 这里我们将逐条插入,对于重复插入直接忽略错误,对于其他异常,需要用户修改后自行处理。
- sysOperationLogService.saveNew(operationLog);
- } catch (DuplicateKeyException e1) {
- // 出现重复的场景,很大可能是因为之前插入数据库成功了,但是提交kafka offset失败了。
- // 因此就会出现重复消费的情况,我们通过logId主键进行了去重。
- log.warn("Duplicated Key for logId [{}]", operationLog.getLogId());
- }
- }
- }
-}
diff --git a/orange-demo-multi/orange-demo-multi-service/application-consumer/operation-log-consumer/src/main/resources/bootstrap.yml b/orange-demo-multi/orange-demo-multi-service/application-consumer/operation-log-consumer/src/main/resources/bootstrap.yml
deleted file mode 100644
index c82c159c..00000000
--- a/orange-demo-multi/orange-demo-multi-service/application-consumer/operation-log-consumer/src/main/resources/bootstrap.yml
+++ /dev/null
@@ -1,19 +0,0 @@
-spring:
- application:
- name: operation-log-consumer
- profiles:
- active: dev
- cloud:
- nacos:
- discovery:
- server-addr: localhost:8848
- config:
- server-addr: localhost:8848
- file-extension: yaml
- # 共享配置文件,排序越高后,优先级越高。
- shared-configs:
- - data-id: application-dev.yaml
- group: DEFAULT_GROUP
- refresh: true
- main:
- allow-bean-definition-overriding: true
diff --git a/orange-demo-multi/orange-demo-multi-service/application-consumer/operation-log-consumer/src/main/resources/log4j2.xml b/orange-demo-multi/orange-demo-multi-service/application-consumer/operation-log-consumer/src/main/resources/log4j2.xml
deleted file mode 100644
index 30e414d7..00000000
--- a/orange-demo-multi/orange-demo-multi-service/application-consumer/operation-log-consumer/src/main/resources/log4j2.xml
+++ /dev/null
@@ -1,79 +0,0 @@
-
-
-
-
-
-
-
-
-
- ./zzlogs/operation-log-consumer
-
- ./zzlogs/operation-log-consumer/backup
-
- info
-
-
-
-
-
-
-
- [%-5p] [%d{YYYY-MM-dd HH:mm:ss}] [%t] ==> %msg%n
-
-
-
- [%-5p] [%d{YYYY-MM-dd HH:mm:ss}] [%t] ==> [%traceId] %msg%n
-
-
- 31
-
- 20M
-
-
-
-
-
-
- localhost:9092
- 10000
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/orange-demo-multi/orange-demo-multi-service/application-consumer/pom.xml b/orange-demo-multi/orange-demo-multi-service/application-consumer/pom.xml
deleted file mode 100644
index ae588d2b..00000000
--- a/orange-demo-multi/orange-demo-multi-service/application-consumer/pom.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
-
- OrangeMultiDemo
- com.orangeforms
- 1.0.0
-
- 4.0.0
-
- application-consumer
- pom
-
- operation-log-consumer
-
-
-
-
- com.alibaba.cloud
- spring-cloud-starter-alibaba-nacos-discovery
-
-
-
\ No newline at end of file
diff --git a/orange-demo-multi/orange-demo-multi-service/application/application-common/pom.xml b/orange-demo-multi/orange-demo-multi-service/application/application-common/pom.xml
deleted file mode 100644
index 81befd73..00000000
--- a/orange-demo-multi/orange-demo-multi-service/application/application-common/pom.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
- com.orangeforms
- application
- 1.0.0
-
- 4.0.0
-
- application-common
- 1.0.0
- application-common
- jar
-
\ No newline at end of file
diff --git a/orange-demo-multi/orange-demo-multi-service/application/application-common/src/main/java/com/orangeforms/application/common/constant/DeviceType.java b/orange-demo-multi/orange-demo-multi-service/application/application-common/src/main/java/com/orangeforms/application/common/constant/DeviceType.java
deleted file mode 100644
index 85a18f58..00000000
--- a/orange-demo-multi/orange-demo-multi-service/application/application-common/src/main/java/com/orangeforms/application/common/constant/DeviceType.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package com.orangeforms.application.common.constant;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * 设备类型常量字典对象。
- *
- * @author Jerry
- * @date 2020-08-08
- */
-public final class DeviceType {
-
- /**
- * iOS。
- */
- public static final int IOS = 0;
- /**
- * Android。
- */
- public static final int ANDROID = 1;
- /**
- * PC。
- */
- public static final int PC = 2;
-
- private static final Map