Browse Source

Merge remote-tracking branch 'origin/master'

jxing 4 years ago
parent
commit
0bf42009c7
33 changed files with 768 additions and 13 deletions
  1. 5 3
      docs/.vuepress/components/example/web/graph/DrawLine1.vue
  2. 6 1
      docs/.vuepress/components/example/web/graph/DrawRect1.vue
  3. 193 0
      docs/.vuepress/components/example/web/graph/scene/ClockItem.vue
  4. 218 0
      docs/.vuepress/components/example/web/graph/scene/Undo1.vue
  5. 8 1
      docs/dev/saga-graphy/index.js
  6. 1 0
      docs/dev/saga-graphy/scene-manage/items/README.md
  7. 10 0
      docs/dev/saga-graphy/scene-manage/items/clock.md
  8. 10 0
      docs/dev/saga-graphy/scene-manage/undo.md
  9. 2 0
      docs/setup/centos/README.md
  10. 2 2
      docs/setup/centos/app-server/README.md
  11. 135 0
      docs/setup/centos/app-server/datacenter.md
  12. 44 0
      docs/setup/centos/app-server/dataplatform-sync.md
  13. 52 0
      docs/setup/centos/app-server/equip-component.md
  14. 52 0
      docs/setup/centos/app-server/ibms.md
  15. BIN
      docs/setup/centos/app-server/img/data_001.png
  16. BIN
      docs/setup/centos/app-server/img/data_002.png
  17. BIN
      docs/setup/centos/app-server/img/data_003.png
  18. BIN
      docs/setup/centos/app-server/img/datacenter_001.png
  19. BIN
      docs/setup/centos/app-server/img/datacenter_002.png
  20. BIN
      docs/setup/centos/app-server/img/datacenter_004.png
  21. BIN
      docs/setup/centos/app-server/img/datacenter_005.png
  22. BIN
      docs/setup/centos/app-server/img/datacenter_006.png
  23. BIN
      docs/setup/centos/app-server/img/equip_001.png
  24. BIN
      docs/setup/centos/app-server/img/equip_002.png
  25. BIN
      docs/setup/centos/app-server/img/equip_003.png
  26. BIN
      docs/setup/centos/app-server/img/ibms_001.png
  27. BIN
      docs/setup/centos/app-server/img/ibms_002.png
  28. BIN
      docs/setup/centos/app-server/img/ibms_003.png
  29. BIN
      docs/setup/centos/app-server/img/ibms_005.png
  30. BIN
      docs/setup/centos/server/img/pg_003.png
  31. 23 0
      docs/setup/centos/server/postgresql.md
  32. 4 3
      docs/setup/index.js
  33. 3 3
      package.json

+ 5 - 3
docs/.vuepress/components/example/web/graph/DrawLine1.vue

@@ -12,14 +12,16 @@
         }
 
         onDraw(canvas: SPainter): void {
+            // 清除画布
+            canvas.clearRect(0,0,800,100);
+
             // 在此编写绘制操作相关命令
             canvas.drawLine(0,0, 100, 100);
 
             canvas.pen.lineWidth = 1;
-            canvas.pen.dashOffset += 10;
-            canvas.pen.lineDash = [25, 5, 10, 30];
+            canvas.pen.dashOffset = new Date().getTime()/50%60;
+            canvas.pen.lineDash = [10,50];
             canvas.drawLine(200, 50, 400, 50);
-
             this.update();
         }
     }

+ 6 - 1
docs/.vuepress/components/example/web/graph/DrawRect1.vue

@@ -12,6 +12,8 @@
         }
 
         onDraw(canvas: SPainter): void {
+            canvas.clearRect(0,0,800,200);
+
             canvas.pen.color = SColor.Blue;
             canvas.brush.color = SColor.Red;
             canvas.drawRect(10, 10, 80, 80);
@@ -34,9 +36,12 @@
             canvas.pen.lineWidth = 2;
             canvas.pen.color = SColor.Blue;
             canvas.brush.color = SColor.Red;
-            for (let i = 1; i < 100; i += 10) {
+            let k = new Date().getTime()/100%10;
+            for (let i = 1; i < k*10; i += 10) {
                 canvas.drawRect(510 + i, i, 80, 80);
             }
+
+            this.update();
         }
     }
 

+ 193 - 0
docs/.vuepress/components/example/web/graph/scene/ClockItem.vue

@@ -0,0 +1,193 @@
+<template>
+    <canvas id="clockItem1" width="400" height="400" />
+</template>
+
+<script lang="ts">
+    import { SColor, SPainter, SRect } from "@saga-web/draw";
+    import { SGraphyItem, SGraphyScene, SGraphyView } from "@saga-web/graphy";
+
+    class ClockItem extends SGraphyItem {
+        /** 宽度 */
+        width = 100;
+        /** 高度 */
+        height = 100;
+
+        /** 半径 */
+        get radius(): number {
+            return Math.min(this.width, this.height) / 2.0;
+        }
+
+        /**
+         * 构造函数
+         *
+         * @param   parent      指向父Item
+         * @param   width       宽度
+         * @param   height      高度
+         */
+        constructor(parent: SGraphyItem | null, width: number, height: number) {
+            super(parent);
+            this.width = width;
+            this.height = height;
+        }
+
+        /**
+         * 对象边界区域
+         *
+         * @return  边界区域
+         */
+        boundingRect(): SRect {
+            return new SRect(0, 0, this.width, this.height);
+        }
+
+        /**
+         * Item绘制操作
+         *
+         * @param   canvas      画布
+         */
+        onDraw(canvas: SPainter): void {
+            canvas.translate(this.width / 2, this.height / 2);
+            const t = new Date();
+            this.drawScale(canvas);
+            this.drawHour(canvas, t.getHours(), t.getMinutes(), t.getSeconds());
+            this.drawMinute(canvas, t.getMinutes(), t.getSeconds());
+            this.drawSecond(canvas, t.getSeconds() + t.getMilliseconds() / 1000.0);
+
+            this.update();
+        }
+
+        /**
+         * 绘制表刻度
+         *
+         * @param   canvas      画布
+         */
+        private drawScale(canvas: SPainter): void {
+            const scaleLength = Math.max(this.radius / 10.0, 2.0);
+            const scaleLength1 = scaleLength * 1.2;
+            const strokeWidth = Math.max(this.radius / 100.0, 2.0);
+            const strokeWidth1 = strokeWidth * 2.0;
+
+            canvas.save();
+            canvas.pen.color = SColor.Blue;
+
+            for (let i = 1; i <= 12; i++) {
+                // 12小时刻度
+                canvas.pen.lineWidth = strokeWidth1;
+                canvas.drawLine(
+                    0,
+                    -this.radius,
+                    0,
+                    -this.radius + scaleLength1
+                );
+
+                if (this.radius >= 40) {
+                    // 如果半度大于40显示分钟刻度
+                    canvas.rotate((6 * Math.PI) / 180);
+                    for (let j = 1; j <= 4; j++) {
+                        // 分钟刻度
+                        canvas.pen.lineWidth = strokeWidth;
+                        canvas.drawLine(
+                            0,
+                            -this.radius,
+                            0,
+                            -this.radius + scaleLength
+                        );
+                        canvas.rotate((6 * Math.PI) / 180);
+                    }
+                } else {
+                    canvas.rotate((30 * Math.PI) / 180);
+                }
+            }
+
+            canvas.restore();
+        }
+
+        /**
+         * 绘制时针
+         *
+         * @param   canvas      画布
+         * @param   hour        时
+         * @param   minute      分
+         * @param   second      秒
+         */
+        private drawHour(
+            canvas: SPainter,
+            hour: number,
+            minute: number,
+            second: number
+        ): void {
+            canvas.save();
+            canvas.pen.color = SColor.Black;
+            canvas.rotate(
+                ((hour * 30.0 + (minute * 30.0) / 60 + (second * 30.0) / 3600) *
+                    Math.PI) /
+                180
+            );
+            canvas.drawLine(
+                0,
+                this.radius / 10.0,
+                0,
+                -this.radius / 2.0
+            );
+            canvas.restore();
+        }
+
+        /**
+         * 绘制秒针
+         *
+         * @param   canvas      画布
+         * @param   minute      分
+         * @param   second      秒
+         */
+        private drawMinute(canvas: SPainter, minute: number, second: number): void {
+            canvas.save();
+            canvas.pen.color = SColor.Black;
+            canvas.rotate(((minute * 6 + (second * 6) / 60.0) * Math.PI) / 180);
+            canvas.drawLine(
+                0,
+                this.radius / 10.0,
+                0,
+                (-this.radius * 2.0) / 3.0
+            );
+            canvas.restore();
+        }
+
+        /**
+         * 绘制秒针
+         *
+         * @param   canvas      画布
+         * @param   second      秒
+         */
+        private drawSecond(canvas: SPainter, second: number): void {
+            canvas.save();
+            canvas.pen.color = SColor.Red;
+            canvas.rotate((second * 6 * Math.PI) / 180);
+            canvas.drawLine(
+                0,
+                this.radius / 5.0,
+                0,
+                -this.radius + this.radius / 10.0
+            );
+            canvas.restore();
+        }
+    }
+
+    class TestView extends SGraphyView {
+        clock1 = new ClockItem(null, 300, 300);
+
+        constructor() {
+            super("clockItem1");
+            this.scene = new SGraphyScene();
+            this.scene.addItem(this.clock1);
+        }
+    }
+
+    export default {
+        mounted(): void {
+            new TestView();
+        }
+    }
+</script>
+
+<style scoped>
+
+</style>

+ 218 - 0
docs/.vuepress/components/example/web/graph/scene/Undo1.vue

@@ -0,0 +1,218 @@
+<template>
+    <div>
+        <el-button @click="addCircle">Circle</el-button>
+        <el-button @click="addRect">Rect</el-button>
+        <el-button @click="deleteItem">Delete</el-button>
+        <el-button @click="undo">Undo</el-button>
+        <el-button @click="redo">Redo</el-button>
+        <canvas id="undoFrame" width="800" height="400" />
+    </div>
+</template>
+
+<script lang="ts">
+    import Vue from "vue";
+    import ElementUI from "element-ui";
+    import { SMouseEvent, SUndoStack } from "@saga-web/base";
+    import { SColor, SPainter, SRect } from "@saga-web/draw";
+    import { SGraphyItem, SGraphyScene, SGraphyView } from "@saga-web/graphy";
+    import {SGraphyCommand} from "@saga-web/graphy/lib";
+    import {SUndoCommand} from "@saga-web/base/lib";
+    import {SPoint} from "@saga-web/draw/lib";
+
+    Vue.use(ElementUI);
+
+    class RectItem extends SGraphyItem {
+        width = 100;
+        height = 100;
+
+        constructor(parent: SGraphyItem | null) {
+            super(parent);
+            this.moveable = true;
+            this.selectable = true;
+            this.selected = true;
+        }
+
+        boundingRect(): SRect {
+            return new SRect(0, 0, this.width, this.height);
+        }
+
+        onDraw(canvas: SPainter): void {
+            canvas.pen.color = SColor.Blue;
+            canvas.pen.lineWidth = 5;
+            canvas.brush.color = this.selected ? SColor.Red : SColor.Green;
+            canvas.drawRect(0, 0, this.width, this.height)
+        }
+    }
+
+    class CircleItem extends SGraphyItem {
+        r = 50;
+
+        constructor(parent: SGraphyItem | null) {
+            super(parent);
+            this.moveable = true;
+            this.selectable = true;
+        }
+
+        boundingRect(): SRect {
+            return new SRect(0, 0, this.r * 2, this.r * 2);
+        }
+
+        onDraw(canvas: SPainter): void {
+            canvas.pen.color = SColor.Blue;
+            canvas.pen.lineWidth = 5;
+            canvas.brush.color = this.selected ? SColor.Red : SColor.Green;
+            canvas.drawCircle(this.r, this.r, this.r);
+        }
+    }
+
+    class SScene extends SGraphyScene {
+        undoStack = new SUndoStack();
+        /** 定义命令 */
+        cmd = 0;
+
+        constructor() {
+            super();
+        }
+
+
+        onMouseUp(event: SMouseEvent): void {
+            switch(this.cmd) {
+                case 1:
+                    this.addCircle(event.x, event.y);
+                    break;
+                case 2:
+                    this.addRect(event.x, event.y);
+                    break;
+                default:
+                    super.onMouseUp(event);
+            }
+            this.cmd = 0;
+        }
+
+        private addCircle(x: number, y: number): void {
+            let item = new CircleItem();
+            item.moveTo(x - 50, y - 50);
+            this.addItem(item);
+            this.undoStack.push(new SGraphyAddCommand(this, item));
+            item.connect("onMove", this, this.onItemMove.bind(this));
+        }
+
+        private addRect(x: number, y: number): void {
+            let item = new RectItem();
+            item.moveTo(x - 50, y - 50);
+            this.addItem(item);
+            this.undoStack.push(new SGraphyAddCommand(this, item));
+            item.connect("onMove", this, this.onItemMove.bind(this));
+        }
+
+        onItemMove(item: SGraphyItem, ...arg: any): void {
+            this.undoStack.push(new SGraphyMoveCommand(this, item, arg[0][0] as SPoint, arg[0][1] as SPoint));
+        }
+    }
+
+    class TestView extends SGraphyView {
+        constructor() {
+            super("undoFrame");
+        }
+    }
+
+    class SGraphyAddCommand extends SGraphyCommand {
+        item: SGraphyItem;
+        parent: SGraphyItem | null;
+
+        constructor(scene: SGraphyScene, item: SGraphyItem) {
+            super(scene);
+            this.item = item;
+            this.parent = item.parent;
+        }
+        mergeWith(command: SUndoCommand): boolean {
+            return false;
+        }
+
+        redo(): void {
+            this.item.parent = this.parent;
+            this.parent.update();
+        }
+
+        undo(): void {
+            this.item.parent = null;
+            this.parent.update();
+        }
+    }
+
+    class SGraphyDeleteCommand extends SGraphyCommand {
+        mergeWith(command: SUndoCommand): boolean {
+            return false;
+        }
+
+        redo(): void {
+        }
+
+        undo(): void {
+        }
+    }
+
+    class SGraphyMoveCommand extends SGraphyCommand {
+        item: SGraphyItem;
+        old: SPoint;
+        pos: SPoint;
+
+        constructor(scene: SGraphyScene, item: SGraphyItem, old: SPoint, pos: SPoint) {
+            super(scene);
+            this.item = item;
+            this.old = old;
+            this.pos = pos;
+        }
+        mergeWith(command: SUndoCommand): boolean {
+            if (command instanceof  SGraphyMoveCommand && command.item == this.item) {
+                command.pos = this.pos;
+                return true;
+            }
+            return false;
+        }
+
+        redo(): void {
+            this.item.pos = new SPoint(this.pos.x, this.pos.y);
+            this.item.update();
+        }
+
+        undo(): void {
+            this.item.pos = new SPoint(this.old.x, this.old.y);
+            this.item.update();
+        }
+    }
+
+    export default {
+        data() {
+            return {
+                scene: new SScene();
+            }
+        },
+        mounted(): void {
+            let view = new TestView();
+            view.scene = this.scene;//new SScene(); //this.data.scene;
+        },
+        methods: {
+            addCircle() {
+                this.scene.cmd = 1;
+            },
+            addRect() {
+                this.scene.cmd = 2;
+            },
+            deleteItem() {
+
+            },
+            undo() {
+                console.log("undo");
+                this.scene.undoStack.undo();
+            },
+            redo() {
+                this.scene.undoStack.redo();
+            }
+        }
+    }
+</script>
+
+<style scoped>
+
+</style>

+ 8 - 1
docs/dev/saga-graphy/index.js

@@ -18,7 +18,14 @@ const content = [
         title: "场景管理",
         path: "/dev/saga-graphy/scene-manage/",
         children: [
-
+            {
+                title: "图元素实例",
+                path: "/dev/saga-graphy/scene-manage/items/",
+                children: [
+                    ["/dev/saga-graphy/scene-manage/items/clock", "时钟"],
+                ]
+            },
+            ["/dev/saga-graphy/scene-manage/undo", "Undo示例"]
         ]
     },
     {

+ 1 - 0
docs/dev/saga-graphy/scene-manage/items/README.md

@@ -0,0 +1 @@
+Item

+ 10 - 0
docs/dev/saga-graphy/scene-manage/items/clock.md

@@ -0,0 +1,10 @@
+# 时钟实例
+::: details 目录
+[[toc]]
+:::
+
+<example-web-graph-scene-ClockItem />
+
+::: details 查看代码
+<<< @/docs/.vuepress/components/example/web/graph/scene/ClockItem.vue
+:::

+ 10 - 0
docs/dev/saga-graphy/scene-manage/undo.md

@@ -0,0 +1,10 @@
+# Undo/Redo 框架
+::: details 目录
+[[toc]]
+:::
+
+<example-web-graph-scene-Undo1 />
+
+::: details 查看代码
+<<< @/docs/.vuepress/components/example/web/graph/scene/Undo1.vue
+:::

+ 2 - 0
docs/setup/centos/README.md

@@ -7,3 +7,5 @@
 ### PostgreSQL
 
 ## 应用服务
+### datacenter
+### ibms

+ 2 - 2
docs/setup/centos/app-server/README.md

@@ -1,4 +1,4 @@
 # 应用服务
-## datacenter
-## scanbuilding
+## datacenter 
 ## ibms
+

+ 135 - 0
docs/setup/centos/app-server/datacenter.md

@@ -0,0 +1,135 @@
+# datacenter 
+
+## 部署前需要的基础信息
+
+1.物理世界的IP以及端口号
+
+例如:
+172.16.42.210:8080
+ 
+2.activemq 的IP 端口号以及账号密码  
+
+例如: 
+user:admin 
+password: admin
+broker-url: tcp://172.17.11.222:61616
+
+3.数据库地址 以及账号密码,数据中心使用的是postgresql  数据库 默认端口号为:5432
+
+例如:
+driver-class-name:                  org.postgresql.Driver
+url:                                jdbc:postgresql://10.30.128.200:5432/datacenter
+username:                           postgres
+password:                           123qwe!@#
+
+4.eureka 的IP以及端口号
+
+例如:10.30.128.200:8761
+
+### 调整项目yml 文件配置 
+
+针对不同的私有项目部署会有不同的yml配置  因为每个项目使用的ip和端口号不能保证对接的项目都是一致的
+
+![yml](./img/datacenter_001.png)
+
+新建一个文件夹命名 -后面针对部署的项目的名称, 内部在建一个以项目名结尾的yml 
+
+![yml](./img/datacenter_002.png)
+
+yml文件内的内容:
+```
+# spring-cloud相关配置
+eureka:
+  client:                                   #客户端注册进eureka服务列表内
+    service-url:
+      defaultZone:                          http://eureka-service:8761/eureka
+
+  instance:
+    # 实例ID
+    # instance-id:                            ${spring.application.name}:${server.port}:${project.version}
+    # 优先使用IP地址方式进行注册服务
+    prefer-ip-address:                      true
+
+#启用监控
+management:
+  endpoints:
+    web:
+      exposure:
+        include:
+          - "*"  # 开放所有端点health,info,metrics,通过actuator/+端点名就可以获取相应的信息。默认打开health和info
+  endpoint:
+    health:
+      #未开启actuator/health时,我们获取到的信息是{"status":"UP"},status的值还有可能是 DOWN。开启后打印详细信息
+      show-details:                       always
+
+server:
+  port: 28080
+
+spring:
+  datasource:
+    url:                                jdbc:postgresql://data-center:5432/datacenter
+    username:                           postgres
+    password:                           123qwe!@#
+
+  activemq:
+    user:                               admin
+    password:                           admin
+    broker-url:                         tcp://activemq:61616
+
+  servlet:
+    multipart:
+      max-request-size:                500MB        # 限制上传的多个文件的总大小
+      max-file-size:                   500MB        # 限制单个文件的最大值
+
+```
+
+上面就是 新建的yml  文件中的内容 data-center 指的是数据中心数据库IP,activemq是MQ的IP,eureka-service是 eureka的IP
+
+### build.gradle 配置
+
+在build.gradle最后面添加如下代码
+```
+task buildProd {
+    doFirst {
+        sourceSets.main.resources.srcDirs = ["src/main/resources", "src/main/resources-prod"]
+        test.onlyIf {
+            project.hasProperty("needTest")
+        }
+    }
+    finalizedBy(build)
+}
+```
+然后更新 gradle 配置,就会看到人下图:
+
+![yml](./img/datacenter_004.png)
+
+点击buildProd 就会生成一个war包,直接复制到tomcat的webapps 文件夹中部署就可以了
+
+![yml](./img/datacenter_005.png)
+
+
+### hosts 文件配置
+上面提到了data-center、activemq、eureka-service 是配置在服务器的hosts 文件中的,下面是可能用到的例子
+
+```
+172.17.11.174  api.sagacloud.cn
+172.17.11.168  data-platform
+172.17.11.168  activemq
+172.17.11.175  qr-code
+127.0.0.1  data-center
+172.17.11.174  eureka-service
+```
+
+### 注意事项
+注意在主文件yml 中 application下的名字,部署ibms 的时候会用到
+![yml](./img/datacenter_006.png)
+
+
+
+
+
+ 
+
+
+
+

+ 44 - 0
docs/setup/centos/app-server/dataplatform-sync.md

@@ -0,0 +1,44 @@
+# dataplatform-sync
+
+## 部署前需要的基础信息
+请参考数据中心部署中需要的IP以及端口号,在部署dataplatform-sync也是需要的
+
+### 配置
+dataplatform-sync 中部署比较简单同样新建yml文件,它只需要在resources 新建就可以了
+
+![yml](./img/data_001.png)
+
+yml内容如下
+```
+server:
+  port: 8080
+
+spring:
+  datasource:
+    url:                                jdbc:postgresql://data-center:5432/datacenter
+    username:                           postgres
+    password:                           123qwe!@#
+
+  activemq:
+    user:                               admin
+    password:                           admin
+    broker-url:                         tcp://activemq:61616
+
+saga:
+                                          dataPlatform:                         http://data-platform:8888/data-platform-3
+
+```
+同步gradle数据,data-platform 、data-center、data-platform  是对应服务器hosts文件中配置的IP详细参考数据中心部署 
+
+![yml](./img/data_002.png)
+
+点击上图的build 生成war包,直接部署到服务器即可
+
+![yml](./img/data_003.png)
+
+### 注意事项
+
+
+
+
+

+ 52 - 0
docs/setup/centos/app-server/equip-component.md

@@ -0,0 +1,52 @@
+# equip-component
+
+## 部署前需要的基础信息
+请参考数据中心部署中需要的IP以及端口号,在部署equip-component同样需要的
+
+### 配置
+ibms 中部署比较简单同样新建yml文件,它只需要在resources 新建就可以了
+
+![yml](./img/equip_001.png)
+
+yml内容如下
+```
+# spring-cloud相关配置
+eureka:
+  client:                                   #客户端注册进eureka服务列表内
+    service-url:
+      defaultZone:                          http://eureka-service:8761/eureka
+
+  instance:
+    # 实例ID
+    # instance-id:                            ${spring.application.name}:${server.port}:${project.version}
+    # 优先使用IP地址方式进行注册服务
+    prefer-ip-address:                      true
+
+server:
+  port: 8080
+
+spring:
+  datasource:
+    url:                                jdbc:postgresql://data-center:5432/datacenter
+    username:                           postgres
+    password:                           123qwe!@#
+
+  activemq:
+    user:                               admin
+    password:                           admin
+    broker-url:                         tcp://activemq:61616
+```
+同步gradle数据,eureka-service 、data-center、activemq  是对应服务器hosts文件中配置的IP详细参考数据中心部署 
+
+![yml](./img/equip_002.png)
+
+点击上图的build 生成war包,直接部署到服务器即可
+
+![yml](./img/equip_003.png)
+
+### 注意事项
+
+
+
+
+

+ 52 - 0
docs/setup/centos/app-server/ibms.md

@@ -0,0 +1,52 @@
+# ibms
+
+## 部署前需要的基础信息
+请参考数据中心部署中需要的IP以及端口号,在部署ibms也是需要的
+
+### 配置
+ibms 中部署比较简单同样新建yml文件,它只需要在resources 新建就可以了
+
+![yml](./img/ibms_001.png)
+
+yml内容如下
+```
+eureka:
+  client:                                   #客户端注册进eureka服务列表内
+    service-url:
+      defaultZone:                          http://eureka-service:8761/eureka
+
+  instance:
+    # 实例ID
+    # instance-id:                            ${spring.application.name}:${server.port}:${project.version}
+    # 优先使用IP地址方式进行注册服务
+    prefer-ip-address:                      true
+
+server:
+  port: 52009
+
+spring:
+  datasource:
+    url:                                jdbc:postgresql://data-center:5432/datacenter
+    username:                           postgres
+    password:                           123qwe!@#
+
+saga:
+  dataPlatform:                         http://data-platform:28888/data-platform-3
+  godhand:   
+```
+同步gradle数据,eureka-service 、data-center、data-platform  是对应服务器hosts文件中配置的IP详细参考数据中心部署 
+
+![yml](./img/ibms_002.png)
+
+点击上图的build 生成war包,直接部署到服务器即可
+
+![yml](./img/ibms_003.png)
+
+### 注意事项
+ibms 代码UserService类中的DATACENTER 一定要和数据中心在eureka中生成的名字一直,数据中心中提到的application结构下的名字
+
+![yml](./img/ibms_005.png)
+
+
+
+

BIN
docs/setup/centos/app-server/img/data_001.png


BIN
docs/setup/centos/app-server/img/data_002.png


BIN
docs/setup/centos/app-server/img/data_003.png


BIN
docs/setup/centos/app-server/img/datacenter_001.png


BIN
docs/setup/centos/app-server/img/datacenter_002.png


BIN
docs/setup/centos/app-server/img/datacenter_004.png


BIN
docs/setup/centos/app-server/img/datacenter_005.png


BIN
docs/setup/centos/app-server/img/datacenter_006.png


BIN
docs/setup/centos/app-server/img/equip_001.png


BIN
docs/setup/centos/app-server/img/equip_002.png


BIN
docs/setup/centos/app-server/img/equip_003.png


BIN
docs/setup/centos/app-server/img/ibms_001.png


BIN
docs/setup/centos/app-server/img/ibms_002.png


BIN
docs/setup/centos/app-server/img/ibms_003.png


BIN
docs/setup/centos/app-server/img/ibms_005.png


BIN
docs/setup/centos/server/img/pg_003.png


+ 23 - 0
docs/setup/centos/server/postgresql.md

@@ -112,6 +112,29 @@ tar -xzvf pg12_rpm_packs.tar.gz
 ```
 yum install --downloadonly --downloaddir=./pg12_rpm_packs postgresql12-plpython3
 ```
+![requirements.txt](./img/pg_003.png)
+
+主要安装的是 libtirpc-0.2.4-0.16.el7.x86_64 和  python3-libs-3.6.8-13.el7.x86_64 先安装 python3-libs
+
+```
+rpm -ivh python3-libs-3.6.8-13.el7.x86_64.rpm --force --nodeps
+```
+ 注意后面的 --force --nodeps 没有会安装失败  然后安装 libtirpc-0.2.4-0.16.el7.x86_64 注意这个要执行两边否则会缺少依赖包
+ ```
+rpm -ivh libtirpc-0.2.4-0.16.el7.x86_64 .rpm
+```
+
+然后执行安装 postgresql12-plpython3-12.3-1PGDG.rhel7.x86_64.rpm
+```
+rpm -ivh postgresql12-plpython3-12.3-1PGDG.rhel7.x86_64.rpm
+```
+
+打开数据库 输入扩展SQL
+```
+CREATE extension plpython3u;
+```
+
+
 
 
 

+ 4 - 3
docs/setup/index.js

@@ -28,10 +28,11 @@ const content = [
                 title: "应用服务",
                 path: "/setup/centos/app-server/",
                 children: [
-                    // ["/setup/centos/app-server/datacenter", "数据中心"],
+                    ["/setup/centos/app-server/datacenter", "数据中心datacenter"],
                     // ["/setup/centos/app-server/pointconfig", "点位配置"],
-                    // ["/setup/centos/app-server/ibms", "慧运营后台"],
-                    // ["/setup/centos/app-server/scanbuilding", "扫楼后台"]
+                    ["/setup/centos/app-server/ibms", "用户信息服务ibms"],
+                    ["/setup/centos/app-server/equip-component", "慧云盈定制接口服务equip-component"],
+                    ["/setup/centos/app-server/dataplatform-sync", "数据同步服务dataplatform-sync"]
                 ]
             }
         ]

+ 3 - 3
package.json

@@ -12,9 +12,9 @@
     "publish": "node publish.js"
   },
   "dependencies": {
-    "@saga-web/base": "^2.1.9",
-    "@saga-web/draw": "^2.1.80",
-    "@saga-web/graphy": "^2.1.52",
+    "@saga-web/base": "^2.1.14",
+    "@saga-web/draw": "^2.1.83",
+    "@saga-web/graphy": "^2.1.58",
     "axios": "^0.18.1",
     "element-ui": "^2.12.0",
     "vue": "^2.6.10",