前置条件:

开发环境需要安装的工具:g++/gcc、JDK、Maven、node.js、UnixODBC及数据库驱动。

见《Linux 开发环境配置》

# 创建 C++ 系统

以用户 kmyckj 为例登录系统,打开【基础功能】->【创建系统】功能,点击【创建系统】打开创建系统对话框,录入系统信息

系统名称:prj_c,数据库为:PostgreSQL,开发语言:C++,签名算法:SHA256, 如图

点击【确定】后,成功创建了 prj_c 系统。这时系统界面主栏出现了刚才创建的系统:prj_c,如图

注意:如果在开发过程中重置了appid和key,影响到前端的服务参数,前端工程要同步更改,服务代码不受影响。

点击操作列【编译】按钮对系统源码做第一次编译

点击操作列【编译】按钮查看appid和签名key,appid和key在调用服务api时用到,如图

生成的系统源码目录结构,如图

生成的系统动态库目录结构,如图

# 初始化数据库

假设已经安装了 PostgreSQL 数据库,在目录 bin/lib/kmyckj/ 下找到 initialize_table_struct_for_PostgreSQL.sql 文件,内容如下:

-- ----------------------------
-- Table structure for sys_employee
-- ----------------------------
DROP TABLE IF EXISTS "public"."sys_employee";
CREATE TABLE "public"."sys_employee" (
  "usr_id" varchar(32) COLLATE "pg_catalog"."default" NOT NULL,
  "org_id" varchar(32) COLLATE "pg_catalog"."default",
  "employee_code" varchar(32) COLLATE "pg_catalog"."default",
  "employee_name" varchar(32) COLLATE "pg_catalog"."default",
  "post_id" varchar(32) COLLATE "pg_catalog"."default"
)
;
COMMENT ON COLUMN "public"."sys_employee"."usr_id" IS '成员ID';
COMMENT ON COLUMN "public"."sys_employee"."org_id" IS '组织ID';
COMMENT ON COLUMN "public"."sys_employee"."employee_code" IS '员工编号';
COMMENT ON COLUMN "public"."sys_employee"."employee_name" IS '员工姓名';
COMMENT ON COLUMN "public"."sys_employee"."post_id" IS '岗位ID';

-- ----------------------------
-- Table structure for sys_function
-- ----------------------------
DROP TABLE IF EXISTS "public"."sys_function";
CREATE TABLE "public"."sys_function" (
  "func_id" varchar(32) COLLATE "pg_catalog"."default" NOT NULL,
  "func_parent_id" varchar(32) COLLATE "pg_catalog"."default",
  "func_code" varchar(32) COLLATE "pg_catalog"."default",
  "menu_title" varchar(64) COLLATE "pg_catalog"."default",
  "router_path" varchar(256) COLLATE "pg_catalog"."default",
  "component_path" varchar(256) COLLATE "pg_catalog"."default",
  "icon" varchar(64) COLLATE "pg_catalog"."default",
  "func_type" int4,
  "sort_num" int4
)
;
COMMENT ON COLUMN "public"."sys_function"."func_id" IS '功能ID';
COMMENT ON COLUMN "public"."sys_function"."func_parent_id" IS '父功能ID';
COMMENT ON COLUMN "public"."sys_function"."func_code" IS '功能名称/路由name';
COMMENT ON COLUMN "public"."sys_function"."menu_title" IS '菜单名称';
COMMENT ON COLUMN "public"."sys_function"."router_path" IS '路由路径';
COMMENT ON COLUMN "public"."sys_function"."component_path" IS '组件路径';
COMMENT ON COLUMN "public"."sys_function"."icon" IS '图标';
COMMENT ON COLUMN "public"."sys_function"."func_type" IS '类型(有组件路径 1(详细功能,没有下级) ,否则0(节点下有详细功能))';
COMMENT ON COLUMN "public"."sys_function"."sort_num" IS '同级排列序号';

-- ----------------------------
-- Table structure for sys_organization
-- ----------------------------
DROP TABLE IF EXISTS "public"."sys_organization";
CREATE TABLE "public"."sys_organization" (
  "org_id" varchar(32) COLLATE "pg_catalog"."default" NOT NULL,
  "org_parent_id" varchar(32) COLLATE "pg_catalog"."default",
  "org_code" varchar(32) COLLATE "pg_catalog"."default",
  "org_name" varchar(128) COLLATE "pg_catalog"."default"
)
;
COMMENT ON COLUMN "public"."sys_organization"."org_id" IS '组织ID';
COMMENT ON COLUMN "public"."sys_organization"."org_parent_id" IS '父组织ID';
COMMENT ON COLUMN "public"."sys_organization"."org_code" IS '组织代码';
COMMENT ON COLUMN "public"."sys_organization"."org_name" IS '组织名称';

-- ----------------------------
-- Table structure for sys_post
-- ----------------------------
DROP TABLE IF EXISTS "public"."sys_post";
CREATE TABLE "public"."sys_post" (
  "post_id" varchar(32) COLLATE "pg_catalog"."default" NOT NULL,
  "post_name" varchar(64) COLLATE "pg_catalog"."default" NOT NULL
)
;
COMMENT ON COLUMN "public"."sys_post"."post_id" IS '岗位ID';
COMMENT ON COLUMN "public"."sys_post"."post_name" IS '岗位名称';

-- ----------------------------
-- Table structure for sys_role
-- ----------------------------
DROP TABLE IF EXISTS "public"."sys_role";
CREATE TABLE "public"."sys_role" (
  "role_id" varchar(32) COLLATE "pg_catalog"."default" NOT NULL,
  "role_name" varchar(32) COLLATE "pg_catalog"."default"
)
;
COMMENT ON COLUMN "public"."sys_role"."role_id" IS '角色ID';
COMMENT ON COLUMN "public"."sys_role"."role_name" IS '角色名称';

-- ----------------------------
-- Table structure for sys_role_function_relation
-- ----------------------------
DROP TABLE IF EXISTS "public"."sys_role_function_relation";
CREATE TABLE "public"."sys_role_function_relation" (
  "relation_id" varchar(32) COLLATE "pg_catalog"."default" NOT NULL,
  "role_id" varchar(32) COLLATE "pg_catalog"."default" NOT NULL,
  "func_id" varchar(32) COLLATE "pg_catalog"."default" NOT NULL
)
;
COMMENT ON COLUMN "public"."sys_role_function_relation"."relation_id" IS '角色模块功能关系ID';
COMMENT ON COLUMN "public"."sys_role_function_relation"."role_id" IS '角色ID';
COMMENT ON COLUMN "public"."sys_role_function_relation"."func_id" IS '模块功能ID';

-- ----------------------------
-- Table structure for sys_user
-- ----------------------------
DROP TABLE IF EXISTS "public"."sys_user";
CREATE TABLE "public"."sys_user" (
  "usr_id" varchar(32) COLLATE "pg_catalog"."default" NOT NULL,
  "usr_name" varchar(32) COLLATE "pg_catalog"."default" NOT NULL,
  "usr_pw" varchar(64) COLLATE "pg_catalog"."default",
  "login_time" varchar(23) COLLATE "pg_catalog"."default",
  "usr_status" int4,
  "login_key" varchar(32) COLLATE "pg_catalog"."default",
  "usr_type" int2 DEFAULT 0
)
;
COMMENT ON COLUMN "public"."sys_user"."usr_id" IS '用户ID';
COMMENT ON COLUMN "public"."sys_user"."usr_name" IS '用户登录名称';
COMMENT ON COLUMN "public"."sys_user"."usr_pw" IS '用户登录密码';
COMMENT ON COLUMN "public"."sys_user"."login_time" IS '登录时间';
COMMENT ON COLUMN "public"."sys_user"."usr_status" IS '用户状态:0-正常;-1-注销;-2-其他状态';
COMMENT ON COLUMN "public"."sys_user"."login_key" IS '登录验证信息,每次登录成功后更新该值。服务调用时,必须传该值';
COMMENT ON COLUMN "public"."sys_user"."usr_type" IS '0-业务系统级用户;1-接口级用户';

-- ----------------------------
-- Table structure for sys_user_role
-- ----------------------------
DROP TABLE IF EXISTS "public"."sys_user_role";
CREATE TABLE "public"."sys_user_role" (
  "usr_role_id" varchar(32) COLLATE "pg_catalog"."default" NOT NULL,
  "usr_id" varchar(32) COLLATE "pg_catalog"."default" NOT NULL,
  "role_id" varchar(32) COLLATE "pg_catalog"."default" NOT NULL
)
;
COMMENT ON COLUMN "public"."sys_user_role"."usr_role_id" IS '用户角色关系ID';
COMMENT ON COLUMN "public"."sys_user_role"."usr_id" IS '用户ID';
COMMENT ON COLUMN "public"."sys_user_role"."role_id" IS '角色ID';

-- ----------------------------
-- Primary Key structure for table sys_employee
-- ----------------------------
ALTER TABLE "public"."sys_employee" ADD CONSTRAINT "sys_member_pkey" PRIMARY KEY ("usr_id");

-- ----------------------------
-- Primary Key structure for table sys_function
-- ----------------------------
ALTER TABLE "public"."sys_function" ADD CONSTRAINT "sys_module_function_pkey" PRIMARY KEY ("func_id");

-- ----------------------------
-- Primary Key structure for table sys_organization
-- ----------------------------
ALTER TABLE "public"."sys_organization" ADD CONSTRAINT "sys_organization_pkey" PRIMARY KEY ("org_id");

-- ----------------------------
-- Primary Key structure for table sys_post
-- ----------------------------
ALTER TABLE "public"."sys_post" ADD CONSTRAINT "sys_post_pkey" PRIMARY KEY ("post_id");

-- ----------------------------
-- Primary Key structure for table sys_role
-- ----------------------------
ALTER TABLE "public"."sys_role" ADD CONSTRAINT "sys_role_pkey" PRIMARY KEY ("role_id");

-- ----------------------------
-- Primary Key structure for table sys_role_function_relation
-- ----------------------------
ALTER TABLE "public"."sys_role_function_relation" ADD CONSTRAINT "sys_role_module_function_pkey" PRIMARY KEY ("role_id", "func_id");

-- ----------------------------
-- Primary Key structure for table sys_user
-- ----------------------------
ALTER TABLE "public"."sys_user" ADD CONSTRAINT "sys_user_pkey" PRIMARY KEY ("usr_name");

-- ----------------------------
-- Primary Key structure for table sys_user_role
-- ----------------------------
ALTER TABLE "public"."sys_user_role" ADD CONSTRAINT "sys_user_role_pkey" PRIMARY KEY ("usr_id", "role_id");

-- ----------------------------------------------------------------------------------------------------------------

-- ----------------------------
-- Initialized Data for table sys_user
-- ----------------------------
INSERT INTO "sys_user" ("usr_id", "usr_name", "usr_pw", "login_time", "usr_status", "login_key", "usr_type") VALUES ('6f47b6cc2d174b01b335e4cedb4735ce', 'super', '5fdf54dc68d6348b46c269d4c190f407d74de4b657b3c88a6b96750d7cc3b5bd', '2024-07-08 17:59:22.034', 1, 'bd02a2beca8c49c6b7fd49cd2b361bdd', 0);

-- ----------------------------
-- Initialized Data for table sys_organization
-- ----------------------------
INSERT INTO "sys_organization" ("org_id", "org_parent_id", "org_code", "org_name") VALUES ('a133fd68ffd34a388c18ae05a3585952', '0', '001', 'XX有限公司');

-- ----------------------------
-- Initialized Data for table sys_function
-- ----------------------------
INSERT INTO "sys_function" ("func_id", "func_parent_id", "func_code", "menu_title", "router_path", "component_path", "icon", "func_type", "sort_num") VALUES ('013e6757f27f4d829ce050b7af5d52c0', '0', 'sys_basic_functions', '基础功能', '/sys_basic_functions', '', 'jcgn', 0, 0);
INSERT INTO "sys_function" ("func_id", "func_parent_id", "func_code", "menu_title", "router_path", "component_path", "icon", "func_type", "sort_num") VALUES ('d13cea5e49cd49a791b96b4ab4845ca3', '013e6757f27f4d829ce050b7af5d52c0', 'organization_configue', '组织机构', 'organization_configue', '@/views/sys_basic_functions/organization_configue', 'zzjg', 1, 0);
INSERT INTO "sys_function" ("func_id", "func_parent_id", "func_code", "menu_title", "router_path", "component_path", "icon", "func_type", "sort_num") VALUES ('779a9eda55df43d0aa5d22ba17ad6770', '013e6757f27f4d829ce050b7af5d52c0', 'post_manage', '岗位管理', 'post_manage', '@/views/sys_basic_functions/post_manage', 'gwgl', 1, 1);
INSERT INTO "sys_function" ("func_id", "func_parent_id", "func_code", "menu_title", "router_path", "component_path", "icon", "func_type", "sort_num") VALUES ('2718d1b3c5dd45d4a10db72026465f75', '013e6757f27f4d829ce050b7af5d52c0', 'function_manage', '功能管理', 'function_manage', '@/views/sys_basic_functions/function_manage', 'gngl', 1, 2);
INSERT INTO "sys_function" ("func_id", "func_parent_id", "func_code", "menu_title", "router_path", "component_path", "icon", "func_type", "sort_num") VALUES ('fed5cb7f55224254ae53d884a38d69ff', '013e6757f27f4d829ce050b7af5d52c0', 'role_permission_namange', '角色功能管理', 'role_permission_namange', '@/views/sys_basic_functions/role_permission_namange', 'jsgngl', 1, 3);
INSERT INTO "sys_function" ("func_id", "func_parent_id", "func_code", "menu_title", "router_path", "component_path", "icon", "func_type", "sort_num") VALUES ('e7e7176649404ff3bc29e39280a69a4e', '013e6757f27f4d829ce050b7af5d52c0', 'employee_manage', '员工管理', 'employee_manage', '@/views/sys_basic_functions/employee_manage', 'yggl', 1, 4);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195

在数据库中创建数据库实例:db_for_prj_c,并执行以上脚本创建数据库表及初始化数据

系统登录的用户名为 super,密码为:123456A,密码在数据库中的密文为sha256签名的字符串

# 配置ODBC数据源

编辑 /etc/odbc.ini 文件,配置如下

[db_for_prj_c]
Description = link to pg
Driver = PostgreSQL ANSI
Database = db_for_prj_c
Servername = 192.168.43.135
UserName = postgres
Password = postgres
Port = 5432
ReadOnly = 0
ConnSettings = set client_encoding to UTF8
1
2
3
4
5
6
7
8
9
10

# 验证数据库连接

连接成功的结果显示如下

isql -v db_for_prj_c
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| echo [string]                         |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> 
1
2
3
4
5
6
7
8
9
10
11

# 配置db_connect.ini

编辑 bin/lib/kmyckj/db_connect.ini 文件,修改如下

[kmyckj]
prj_c=postgres/postgres@db_for_prj_c
1
2

# 编译整个项目

在项目源码目录下执行 make_all.sh 脚本

./make_all.sh
1

# 编译单个服务模块

在项目源码目录中 modules/模块名称/ 的路径下,执行 make 命令

make
1

# 创建 Java 系统

以用户 kmyckj 为例登录系统,打开【基础功能】->【创建系统】功能,点击【创建系统】打开创建系统对话框,录入系统信息

系统名称:prj_java,数据库为:PostgreSQL,开发语言:Java,签名算法:SHA256, 如图

点击【确定】后,成功创建了 prj_java 系统。这时系统界面主栏出现了刚才创建的系统:prj_java,如图

注意:如果在开发过程中重置了appid和key,影响到前端的服务参数,前端工程要同步更改,服务代码不受影响。

点击操作列【编译】按钮对系统源码做第一次编译

点击操作列【编译】按钮查看appid和签名key,appid和key在调用服务api时用到,如图

生成的系统源码目录结构,如图

生成的系统Jar包目录结构,如图

# 初始化数据库

与“创建C++服务系统”的“初始化数据库”相同。

# 配置 JDBC

在 pom.xml 文件中加入 PostgreSQL 数据库驱动依赖

<?xml version="1.0" encoding="UTF-8"?>
<project 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">
    <modelVersion>4.0.0</modelVersion>

    <groupId>kmyckj.prj_java</groupId>
    <artifactId>prj_java</artifactId>
    <version>1.0</version>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
    </properties>

    <dependencies>
        <!-- 采用Gson实现Json字符串与对象互转 -->
        <!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.10.1</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.postgresql/postgresql -->
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>42.7.3</version>
        </dependency>
    </dependencies>

    ...
</project>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

编辑项目源码目录 src/main/resources 的 prj_java.properties 资源文件,修改数据库的 url、user 和 password,如图:

# Java项目编译

通过 Maven 插件编译 Java

# 创建 Vue2 前端工程

通过菜单打开【我的系统】->【prj_c】->【前端工程】功能,点击【创建前端工程】打开对话框,创建前端工程 prj_vue2,如图:

prj_vue2源代码目录结构,如图:

如果安装的 Node.js 是17.x及以上版本,而操作系统的 OpenSSL 库是 1.1 版本的,需要在 package.json 中的编译命令之前加:export NODE_OPTIONS=--openssl-legacy-provider,以支持旧版本库加密库接口,如:

{
  "scripts": {
    "dev": "export NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve",
    "build:prod": "export NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service build",
    "build:stage": "export NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service build --mode staging"
  }
}
1
2
3
4
5
6
7

# 设置环境变量

在 prj_vue2 工程根路径下,修改环境变量:.env.development(开发)、.env.production(生产)、.env.staging(演示)

# base api IP 和 端口,如果端口是 80443 则省略
VUE_APP_BASE_API = 'http://192.168.43.134'

# API参数中的appid
VUE_APP_APP_ID = '9d6ab21aab7c491a80256fbc9180c4f8'

# API参数中参与签名的key
VUE_APP_SIGN_KEY = '50dfe69f33904468a32214d9ede29395230cbdc196e541a6b380ee7b50eca3939eb6c66f90ec44b395dc39533a2a0ab77ab4ea77aa2e45809a77647e270fe862'

# API参数的系统名称
VUE_APP_SYS_NAME = 'prj_c'

# 是否AES加密
VUE_APP_IS_ENCRYPT = '0'

# AES加密密钥和向量  不要使用这3个符号  ~ |  &
VUE_APP_AES_KEY = ''
VUE_APP_AES_IV = ''

# 部署时相对于www根目录的路径
VUE_APP_PUBLIC_PATH = '/'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

# 设置 package.json

在 prj_vue2 工程根路径下,修改 package.json 的 name、version、description、author 为自己系统相关的内容

{
  "name": "prj_vue2",
  "version": "1.0.0",
  "description": "A vue admin template with Element UI & axios & iconfont & permission control & lint",
  "author": "kmyckj",
  ...
}
1
2
3
4
5
6
7

# 设置 settings.js

在 prj_vue2 工程 src 路径下,修改 settings.js 的 title 为自己系统的标题

{
  module.exports = {
    title: 'prj_vue2',
    ...
  }
}
1
2
3
4
5
6

在 prj_vue2 工程根路径下的 src/layout/components/Sidebar 目录下,修改 Logo.vue 文件

# 安装插件

在 prj_vue2 工程根路径下,执行命令

npm install
1

# 运行(开发模式)

在 prj_vue2 工程根路径下,执行命令

npm run dev
1

# 登录系统

打开浏览器,在地址栏输入:http://192.168.43.131:8082/

系统登录的默认用户:user,密码:123456A

系统包含了最基础的组织机构、岗位管理、功能管理、角色管理、员工管理(创建账号)等基本功能框架,根据实际需求进行修改,添加业务模块和功能。

至此,一套系统的前后端工程创建完成。