OpenAuth.Net/newdocs/docs/notes/pro/devnewmulti.md
2025-05-18 21:14:28 +08:00

6.6 KiB
Raw Blame History

title createTime permalink
多表代码生成 2025/04/23 23:43:26 /pro/devnewmulti/

本章节视频讲解请参考:OpenAuth.Net视频合集--多表代码生成

上节介绍了单表代码生成,本节介绍多表代码生成。

准备工作

本文以mysql数据库为例在openauthpro数据库中添加父表parenttable、子表childtable,参考表结构如下:

CREATE TABLE `parenttable`  (
  `id` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '父表ID',
  `externalno` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '自定义编号',
  `status` int(11) NOT NULL COMMENT '状态',
  `name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '名称',

  `createtime` datetime NOT NULL COMMENT '创建时间',
  `createuserid` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '创建人ID',
  `createusername` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '创建人',
  `updatetime` datetime NULL DEFAULT NULL COMMENT '最后更新时间',
  `updateuserid` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '最后更新人ID',
  `updateusername` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '最后更新人',
  `orgid` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '所属部门',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '父表' ROW_FORMAT = DYNAMIC;

CREATE TABLE `childtable`  (
  `id` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '子表ID',
  `parentid` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '父表ID',
  `remark` text CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '备注',
  `pricenotax` decimal(18, 6) NULL DEFAULT NULL COMMENT '单价',
  `asnstatus` int(11) NOT NULL COMMENT '细单状态',
  `name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '商品名称',
  `goodssku` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '商品SKU',
  `goodsbatch` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '商品批号',
  `ordernum` decimal(18, 2) NOT NULL COMMENT '数量',
  `proddate` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '生产日期',
  `expiredate` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '失效日期',

  `createtime` datetime NOT NULL COMMENT '创建时间',
  `createuserid` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '创建人ID',
  `createusername` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '创建人',
  `updatetime` datetime NULL DEFAULT NULL COMMENT '最后更新时间',
  `updateuserid` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '最后更新人ID',
  `updateusername` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '最后更新人',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '子表' ROW_FORMAT = DYNAMIC;

后续操作全部在系统中完成。

添加父表

代码生成界面,点击添加按钮,输入想添加的模块信息。相关字段说明可参考代码生成功能字段详解 20250518152210

录入基础信息,点击右下角确认保存后,系统会添加一条记录,并自动加载对应的字段信息。

20250518152235

这时,编辑字段具体的属性。如是否【可显示】【可编辑】等。

添加子表

同添加父表一样,点击添加按钮,输入子模块信息。

20250518152326

::: warning 注意

  • 子表的父表为必填字段,选择刚刚添加的父表。
  • 子表的外键字段为必填字段,选择子表设计的类似父表ID字段,从而可以与父表关联。
  • 子表的动态头部属性务必与父表保持一致,否则会造成生成的代码不能正常运行 :::

生成模块

选中刚刚添加的父表依次点击【生成实体】【生成业务代码】【生成vue页面】; 子表虽然不需要生成vue页面但需要生成前端js api;

成功后生成的后端.Net代码位置如下

OpenAuth.Repository\Domain\Parentable.cs OpenAuth.App\ParentableApp\ParentableApp.cs OpenAuth.App\ParentableApp\Request\AddOrUpdateParentableReq.cs OpenAuth.App\ParentableApp\Request\QueryParentableListReq.cs OpenAuth.WebApi\Controllers\ParentablesController.cs

OpenAuth.Repository\Domain\Childtable.cs OpenAuth.App\ChildtableApp\ChildtableApp.cs OpenAuth.App\ChildtableApp\Request\AddOrUpdateChildtableReq.cs OpenAuth.App\ChildtableApp\Request\QueryChildtableListReq.cs OpenAuth.WebApi\Controllers\ChildtablesController.cs

前端Vue代码 src\api\parentables.js src\api\childtables.js src\views\parentables\index.vue

::: warning 注意

  1. 完成以上步骤后请重启OpenAuth.WebApi用来重新加载刚刚生成的后台代码

  2. 代码生成器生成的应用层XxxxApp.cs里面的编辑功能只修改部分属性且按帕斯卡命名。需要根据业务需要调整要编辑的字段。如

 public void Update(AddOrUpdateChildtableReq obj)
    {
        var user = _auth.GetCurrentUser().User;
        Repository.Update(u => new Childtable
        {
            //todo: 根据业务需要调整字段
            Updatetime = DateTime.Now,
            Updateuserid = user.Id,
            Updateusername = user.Name
        },u => u.Id == obj.Id);

    }

:::

配置模块地址

经过以上步骤重启系统后使用System账号重新登录在【模块管理】中添加测试模块模块,如下图:

20250518153337

这样就可以访问刚刚新加的测试模块功能,到此就完成了添加一个新模块功能:

20250518153406

尝试增加一条记录,看看模块是否能正常运行。