# hzero-demo **Repository Path**: hzero-book/hzero-demo ## Basic Information - **Project Name**: hzero-demo - **Description**: HZERO后端Demo工程 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 4 - **Forks**: 1 - **Created**: 2021-04-20 - **Last Updated**: 2023-06-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # README 初始化本示例项目,请先创建相应的数据库 hzero_demo,接着进行表结构及数据初始化。如: ``` CREATE DATABASE hzero_demo DEFAULT CHARACTER SET utf8mb4; GRANT ALL PRIVILEGES ON hzero_demo.* TO hzero@'%'; FLUSH PRIVILEGES; ``` 本示例使用到的表结构及初始化脚本,如下: ``` CREATE TABLE demo_material_item ( item_id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '物料ID,主键', item_code varchar(80) NOT NULL COMMENT '物料编码', item_name varchar(200) NOT NULL COMMENT '物料名称', description varchar(2000) DEFAULT NULL COMMENT '描述说明', std_uom varchar(30) DEFAULT NULL COMMENT '标准单位', std_price decimal(11,0) DEFAULT NULL COMMENT '标准单价', enabled_flag tinyint(1) NOT NULL DEFAULT '1' COMMENT '启用标识', tenant_id bigint(20) NOT NULL DEFAULT '0' COMMENT '租户ID', object_version_number bigint(20) NOT NULL DEFAULT '1' COMMENT '行版本号,用来处理锁', creation_date datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, created_by bigint(20) NOT NULL DEFAULT '-1', last_updated_by bigint(20) NOT NULL DEFAULT '-1', last_update_date datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, attribute_category varchar(30) DEFAULT NULL, attribute1 varchar(150) DEFAULT NULL, attribute2 varchar(150) DEFAULT NULL, attribute3 varchar(150) DEFAULT NULL, attribute4 varchar(150) DEFAULT NULL, attribute5 varchar(150) DEFAULT NULL, attribute6 varchar(150) DEFAULT NULL, attribute7 varchar(150) DEFAULT NULL, attribute8 varchar(150) DEFAULT NULL, attribute9 varchar(150) DEFAULT NULL, attribute10 varchar(150) DEFAULT NULL, PRIMARY KEY (item_id), UNIQUE KEY demo_material_item_u1 (item_code,tenant_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='物料表'; CREATE TABLE demo_material_item_tl ( item_id bigint(20) NOT NULL COMMENT '物料ID,主键', lang varchar(30) NOT NULL COMMENT '语言', item_name varchar(200) NOT NULL COMMENT '物料名称', tenant_id bigint(20) NOT NULL DEFAULT '0' COMMENT '租户ID', UNIQUE KEY demo_material_item_tl_u1 (item_id,lang) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='物料多语言表'; CREATE TABLE demo_customer ( customer_id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '客户ID,主键', customer_code varchar(30) NOT NULL COMMENT '客户编码', customer_name varchar(200) DEFAULT NULL COMMENT '客户名称', area_code varchar(30) DEFAULT NULL COMMENT '所在地区,参考数据字典:DEMO.AREA_CODE', address varchar(200) DEFAULT NULL COMMENT '地址', contacts varchar(150) DEFAULT NULL COMMENT '联系人', contact_tel varchar(80) DEFAULT NULL COMMENT '联系电话', enabled_flag tinyint(1) NOT NULL DEFAULT '1' COMMENT '启用标识', tenant_id bigint(20) NOT NULL DEFAULT '0' COMMENT '租户ID', object_version_number bigint(20) NOT NULL DEFAULT '1' COMMENT '行版本号,用来处理锁', creation_date datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, created_by bigint(20) NOT NULL DEFAULT '-1', last_updated_by bigint(20) NOT NULL DEFAULT '-1', last_update_date datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, attribute_category varchar(30) DEFAULT NULL, attribute1 varchar(150) DEFAULT NULL, attribute2 varchar(150) DEFAULT NULL, attribute3 varchar(150) DEFAULT NULL, attribute4 varchar(150) DEFAULT NULL, attribute5 varchar(150) DEFAULT NULL, attribute6 varchar(150) DEFAULT NULL, attribute7 varchar(150) DEFAULT NULL, attribute8 varchar(150) DEFAULT NULL, attribute9 varchar(150) DEFAULT NULL, attribute10 varchar(150) DEFAULT NULL, PRIMARY KEY (customer_id), UNIQUE KEY demo_customer_u1 (customer_code,tenant_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='客户表'; CREATE TABLE demo_order_header ( order_header_id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '订单头表ID,主键', order_number varchar(30) NOT NULL COMMENT '订单编号', customer_id bigint(20) DEFAULT NULL COMMENT '客户ID', contacts varchar(150) DEFAULT NULL COMMENT '订单联系人', contact_tel varchar(80) DEFAULT NULL COMMENT '订单联系电话', need_date date DEFAULT NULL COMMENT '订单需求日期', order_status varchar(30) NOT NULL DEFAULT 'new' COMMENT '订单状态,参考快码:DEMO.ORDER_STATUS', approval_status varchar(30) NOT NULL DEFAULT 'unapproved' COMMENT '审批状态,参考快码:DEMO.APPROVAL_STATUS', description longtext COMMENT '备注说明', tenant_id bigint(20) NOT NULL DEFAULT '0' COMMENT '租户ID', object_version_number bigint(20) NOT NULL DEFAULT '1' COMMENT '行版本号,用来处理锁', creation_date datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, created_by bigint(20) NOT NULL DEFAULT '-1', last_updated_by bigint(20) NOT NULL DEFAULT '-1', last_update_date datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, attribute_category varchar(30) DEFAULT NULL, attribute1 varchar(150) DEFAULT NULL, attribute2 varchar(150) DEFAULT NULL, attribute3 varchar(150) DEFAULT NULL, attribute4 varchar(150) DEFAULT NULL, attribute5 varchar(150) DEFAULT NULL, attribute6 varchar(150) DEFAULT NULL, attribute7 varchar(150) DEFAULT NULL, attribute8 varchar(150) DEFAULT NULL, attribute9 varchar(150) DEFAULT NULL, attribute10 varchar(150) DEFAULT NULL, PRIMARY KEY (order_header_id), UNIQUE KEY demo_order_header_u1 (order_number,tenant_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单头表'; CREATE TABLE demo_order_line ( order_line_id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '订单行表ID,主键', order_header_id bigint(20) NOT NULL COMMENT '订单行头表ID', line_num bigint(20) DEFAULT NULL COMMENT '行号', item_id bigint(20) DEFAULT NULL COMMENT '物料ID', item_uom varchar(30) DEFAULT NULL COMMENT '物料单位', item_price decimal(10,2) DEFAULT NULL COMMENT '物料单价', description varchar(2000) DEFAULT NULL COMMENT '行备注', tenant_id bigint(20) NOT NULL DEFAULT '0' COMMENT '租户ID', object_version_number bigint(20) NOT NULL DEFAULT '1' COMMENT '行版本号,用来处理锁', creation_date datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, created_by bigint(20) NOT NULL DEFAULT '-1', last_updated_by bigint(20) NOT NULL DEFAULT '-1', last_update_date datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, attribute_category varchar(30) DEFAULT NULL, attribute1 varchar(150) DEFAULT NULL, attribute2 varchar(150) DEFAULT NULL, attribute3 varchar(150) DEFAULT NULL, attribute4 varchar(150) DEFAULT NULL, attribute5 varchar(150) DEFAULT NULL, attribute6 varchar(150) DEFAULT NULL, attribute7 varchar(150) DEFAULT NULL, attribute8 varchar(150) DEFAULT NULL, attribute9 varchar(150) DEFAULT NULL, attribute10 varchar(150) DEFAULT NULL, PRIMARY KEY (order_line_id), UNIQUE KEY demo_order_line_u1 (order_header_id,line_num) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单行表'; ``` 对HZERO平台的表结构及初始化数据在 hzero-resource 项目下。 * groovy:表结构 groovy 脚本 * init-data:初始化数据 * tool-jar:执行初始化的工具 * database-init.sh:执行初始化的脚本 ![](http://hzerodoc.saas.hand-china.com/img/docs/installation-configuration/install/1563380297.jpg) * 脚本内容如图 ![](http://hzerodoc.saas.hand-china.com/img/docs/installation-configuration/install/1563380641.jpg) * 需要替换以下配置 - `spring.datasource.url`:数据库连接URL - `spring.datasource.username`:数据库名称 - `spring.datasource.password`:数据库密码 - `data.update.exclusion`:排除数据更新的表或列 - `service`:要初始化或升级的服务,不同的服务需更改此处执行 - `dir`:要初始化或升级的脚本路径,不同的数据库需更改此处执行
请注意:表结构和初始化数据是分开执行的,便于服务升级。如果更新表结构,设置 dir=groovy/$service 即可;如果更新数据,设置 dir=init-data/$service 即可。特别需要注意的是,hzero-iam 服务下的数据分 SaaS 版本和 OP 版本,请选择对应版本的数据初始化。
hzero-iam 的数据初始化好之后,默认的用户名密码为 [admin/Admin@123],可使用此用户密码登陆系统。 在 **部署后端服务** 完成后,需调用IAM服务的初始化接口进行一些初始化操作。 * 调用 `[GET /v1/init/menu-level-path]` 初始化菜单层级路径(`h_level_path`),如果发现有些 level_path 不正确,可以直接将本列清掉并调用该接口重新生成。 * 调用 `[GET /v1/init/role-level-path]` 初始化角色层级路径(`h_level_path`、`h_inherit_level__path`),如果发现有些 level_path 不正确,可以直接将这两列清掉并调用该接口重新生成。 * 调用 `[GET /v1/init/super-role-permission-sets]` 将权限集分别分配到平台超级管理员和租户超级管理员上。 ![](http://hzerodoc.saas.hand-china.com/img/docs/installation-configuration/install/1550746345.jpg)
服务初始化前,请先确定项目或产品是使用SaaS版还是OP版,SaaS 版本支持多租户,OP版本没有租户概念。
* 正常情况下依赖于 hzero 的服务进行开发,hzero 服务发新版之后可自行决定是否升级服务。注:所有HZERO服务及组件在发布时都会统一升级一个版本,升级服务时可定一个稳定版本即可。 * 以 hzero-gateway 服务为例,首先创建一个空的工程,一般以产品或编码为前缀命名,如 demo-gateway。 ![](http://hzerodoc.saas.hand-china.com/img/docs/installation-configuration/install/demo_1550742871.jpg) * 修改 `pom.xml`,可以 hzero-parent 为父 pom,也可自行建一个所属产品或项目的顶级 parent 项目进行统一版本管理,接着引入依赖的服务。 > 引用服务坐标时,可在服务清单下找到服务的坐标,SaaS 版本的 artifactId 是以 -saas 结尾的,请注意区分。 ![](http://hzerodoc.saas.hand-china.com/img/docs/installation-configuration/install/demo_1550742991.jpg) ```xml org.hzero hzero-parent 0.11.0.RELEASE org.hzero hzero-gateway org.springframework.cloud spring-cloud-starter-netflix-eureka-client io.choerodon choerodon-starter-config-client mysql-connector-java mysql ``` * 第一次使用需在 pom 中加入HZERO的Maven仓库地址: ```xml HandPublic Hand-Public Repository http://nexus.saas.hand-china.com/content/repositories/public/ true HzeroRelease Hzero-Release Repository http://nexus.saas.hand-china.com/content/repositories/Hzero-Release/ false HzeroSnapshot Hzero-Snapshot Repository http://nexus.saas.hand-china.com/content/repositories/Hzero-Snapshot/ true ``` * 从依赖包中复制出配置文件到 `resources/` 目录下,主要修改 application.yml 中的一些配置即可。 ![](http://hzerodoc.saas.hand-china.com/img/docs/installation-configuration/install/demo_1550745832.jpg) * 修改启动类,加入对应的 `@EnableHZeroXxx` 注解,会自动扫描依赖服务的包。 ![](http://hzerodoc.saas.hand-china.com/img/docs/installation-configuration/install/demo_1550745930.jpg) * **添加客户端依赖** 需自行根据使用的注册中心、配置中心、数据库驱动不同,加入相应的依赖,具体的依赖或配置请参考 [客户端依赖](../../service-config/dependency/) * 之后就可以运行服务测试了。 后端服务主要包括基础服务和平台通用服务,因为服务间有依赖,服务需按一定顺序安装,可根据下面的列表按装HZero平台必备服务。每个服务可按 **服务初始化** 中的流程创建自己产品或项目的服务。 服务|简码|默认端口|描述 ---|---|---|--- hzero-register|HREG|8000|注册中心 hzero-config|HCFG|8010|配置服务 hzero-gateway|HGWY|8080|网关服务 hzero-oauth|HOTH|8020|认证服务 hzero-iam|HIAM|8030|IAM服务 hzero-swagger|HSWG|8050|Swagger测试服务(开发环境可装) hzero-platform|HPFM|8100|平台服务 下面以注册中心为例,利用jenkins启动服务(**注意拉取自己创建服务的源码**)。 * 以SSH方式拉取项目源码:`# git clone git@xxxx/demo-register.git` * 下载 [run.sh](/files/docs/installation-configuration/install/run.sh) 脚本放到 hzero-register 根目录下 * 修改 run.sh,将`JAR`设置为服务名,`MPORT`设置为配置文件中 `management.port` 的端口。该脚本会拉取最新代码、打包、停止原服务、启动新服务。 ![](http://hzerodoc.saas.hand-china.com/img/docs/installation-configuration/install/1546075203.jpg) * 设置 run.sh 可执行:`# chmod +x run.sh` * Jenkins 添加 SSH 服务器:在系统管理>系统配置下,用于连接部署的服务器 ![](http://hzerodoc.saas.hand-china.com/img/docs/installation-configuration/install/1546077096.jpg) * 创建项目 ![](http://hzerodoc.saas.hand-china.com/img/docs/installation-configuration/install/1546077246.jpg) * 基础配置 ![](http://hzerodoc.saas.hand-china.com/img/docs/installation-configuration/install/1546077358.jpg) * 增加构建配置 ![](http://hzerodoc.saas.hand-china.com/img/docs/installation-configuration/install/1546077416.jpg) * 构建并启动服务 ![](http://hzerodoc.saas.hand-china.com/img/docs/installation-configuration/install/1546077925.jpg) * 按照服务列表一个个按上面的步骤部署服务即可。其中,`hzero-config`、`hzero-iam`、`hzero-asgard`、`hzero-swagger` 需要初始化表及数据,按照 `数据初始化` 操作即可。 * hzero_platform 的数据初始化完成后,请检查 `fd_organization`、`hpfm_tenant`、`hpfm_group` 三张表,是否都有一条ID=0的数据,由于表自增,需手动将 HZERO 这个租户的ID设置为0。 ![](http://hzerodoc.saas.hand-china.com/img/docs/installation-configuration/install/1546432910.jpg) * 服务都部署成功后,可以查看注册中心上的服务是否都注册成功 *注册中心地址:`http://dev.hzero.org:8000`* ![](http://hzerodoc.saas.hand-china.com/img/docs/installation-configuration/install/1546430614.jpg) * 访问 swagger 页面,测试API是否可用 *Swagger地址:`http://dev.hzero.org:8080/swagger/swagger-ui.html`* 查看服务列表: ![](http://hzerodoc.saas.hand-china.com/img/docs/installation-configuration/install/1546430697.jpg) 例如找平台服务的API进行测试,首先需要授权,默认会跳转到 oauth 登录页面进行登录授权。之后便可访问API测试。 ![](http://hzerodoc.saas.hand-china.com/img/docs/installation-configuration/install/1546433265.jpg) ![](http://hzerodoc.saas.hand-china.com/img/docs/installation-configuration/install/1546433435.jpg)