低代码平台实测踩坑记录:从审核排序到历史数据,问题逐条清零

0 阅读8分钟

低代码平台实测踩坑记录:从审核排序到历史数据,问题逐条清零

低代码平台前后端都跑起来了,我按界面一条条实测,一批问题就露出来了:提交审核明明改了数据,审核页按 updateTime 排序却是乱的;自己提交的界面想废弃,提示无权限;连续新增第二条,上一次填的还在框里没清;历史数据点进去,看到的是版本不是数据。

这些都不是编译报错,是在界面上点出来的,AI 自己想想不到这么多。这篇就记这段实测:排序、停用闭环、创建人筛选、历史数据、还有一个人自审自发的设计问题,怎么发现又怎么改的。

一、提交审核没更新 updateTime

1.1 问题

明明提交审核了,在低代码审核时,以 updateTime 排序竟然不对,下图已经修改。

QQ_1792713886291

一看代码原来 MetaAppServiceImpl 中的函数 applyStatus 里面到处都是 Example 进行查询,还调用 mapper 进行更新。

 Example example = new Example(MetaApp.class);
        example.createCriteria().andEqualTo("id", id).andEqualTo("version", expectVersion);
        int n = metaAppMapper.updateByExampleSelective(rec, example);

这时肯定就没有更新 updatetime,而 updateTime 更新是放在 save 函数中的,save 调用 insert 和 update。所以这样的代码肯定是不对的,前面虽然规定了,mapper 只能自己的 service 调用,但没想到会这样,里面全是随便调用 mapper 的地方。

1.2 解决

MetaAppServiceImpl.applyStatus  
applyStatus
 Example example = new Example(MetaApp.class);
        example.createCriteria().andEqualTo("id", id).andEqualTo("version", expectVersion);
        int n = metaAppMapper.updateByExampleSelective(rec, example);

这种代码是不合格的,不应该将这种逻辑写在函数里, 尽可能提取出函数,还有调用里面的update,add或save,
不然就会出现更新了没有updatetime

QQ_1792714456164

QQ_1792714482901

这个要全改, 刚才代码先添加一个函数  byIdAndVersion这种,保存一定要调用save(新增不用id)。这次是重构。记住原则

QQ_1792714518503

这个虽然看似是小问题,但是,其实是非常大的问题,还是要规定,无论是自己还是别的 service,只能调用同层的 service,具体的操作应该封装在 service 里,一般这种情况都是 xxxService 调用 xxxMapper 的情况。以后要规定,类似于防腐层,调用下一层的 mapper 时,必须封装在里面,只可以规定的函数才可以调用,或者函数中不可以多次调用 mapper,如果有多次就必须提取出函数。如现在的代码:

  /** 生命周期状态更新:先按 (id,expectVersion) 载入并做归属/登录/版本断言,再 mutate cur 并走 saveLifecycle。 */
    private MetaApp applyStatus(String id, int expectVersion, List<String> allowedFrom, String to,
                                String operator, boolean setSubmitter, boolean setReviewer, String extroValue) {
        MetaApp cur = byIdAndVersion(id, expectVersion, operator);
        if (!allowedFrom.contains(cur.getStatus())) {
            throw new XException(400, "当前状态不允许该操作:" + cur.getStatus());
        }
        cur.setStatus(to);
        cur.setExtro(extroValue);
        if (setSubmitter) {
            cur.setSubmittedBy(operator);
        }
        if (setReviewer) {
            cur.setReviewedBy(operator);
            cur.setReviewedAt(LocalDateTime.now());
        }
        return saveLifecycle(cur);
    }

    /** 按 id + expectVersion 载入并做三重断言:登录(401)、归属/存在(404/403)、版本匹配(409)。 */
    private MetaApp byIdAndVersion(String id, int expectVersion, String operator) {
        MetaApp cur = queryById(id);
        guard(cur, operator);
        if (cur.getVersion() == null || cur.getVersion().intValue() != expectVersion) {
            throw new XException(409, "版本冲突:界面已被修改,请刷新后重试");
        }
        return cur;
    }

QQ_1792714766583

这样才是重构,尽可能添加上这一条。

二、停用的逻辑闭环

2.1 停用的逻辑问题

废弃,只能自己废弃,但自己废弃只能是停用待审,可是进入低代码审核却只有提交审核的通过,而没有停用待审的问题。还有个废弃,不知道什么意思。

记事本	notepad	黄山 提交的,huangweihua想废弃,报错 无审核权限或不可处理自己提交的界面? 查一下,难道只有自己可能废弃?如果没有权限废弃,那就不能显示 ? 我自己停用,审核人进入显示的是 停用待审,有哪个?通过停用? 你也没有测试这个闭环吗。修改测试脚本,操。按我这个逻辑查一下,并添加进测试脚本

QQ_1792714977565

QQ_1792715026763

QQ_1792715082381

2.2 测试脚本有问题

一看这个错误,就知道测试脚本肯定是没有覆盖到这个问题。因为 AI 根本就没有想到这个问题。

QQ_1792715139771

QQ_1792715170285

QQ_1792715197202

2.3 修改后的测试

QQ_1792715344034

先切换人员登录,进行审核

QQ_1792715396754

新建测试停用的数据,供后面测试历史数据

2.4 申请停用

QQ_1792716122891

切换审核,通过停用

QQ_1792716273706

通过停用后

QQ_1792716300947

2.5 历史数据

重新刷新后,就可以看到测试停用的,再查看数据

QQ_1792716326809

QQ_1792716489714

这个界面是错误的,详见第五章 历史数据问题。

三、新增数据没清空原数据

3.1 新增数据没有清空原来数据

QQ_1792715532030

低代码通过后,新增数据没有问题,
但是,新增多条时,第二次新西兰没有清空原来数据,显示的是上一次填写的数据

QQ_1792716658960

QQ_1792717033530

3.2 测试

QQ_1792717072079

可以了。

四、我的设计问题

4.1 测试停用不应该显示在这

我的设计要根据创建人来筛选,明明是 huangshan 创建的,为什么 huangweihua 还显示

QQ_1792716234024

这条数据显示在 huangweihua 中是不对的。

4.2 修改

我的设计要根据创建人来筛选,测试停用  明明是huangshan创建的,为什么huangweihua还显示
测试停用 这条数据显示在huangweihua中是不对的。

QQ_1792717273078

QQ_1792717787715

QQ_1792717921728

注意,不是随便加,只是 这个函数才加上的

果然有错,唉,AI 什么时候能听懂人话。

QQ_1792717954320

QQ_1792718195964

不可通过  通用 addExample 接受任意传入的 createdBy,来,直接在查询的时候添加createBy,不可乱改

QQ_1792718218459

QQ_1792719034098

4.3 多了一个问题,创建人用中文

QQ_1792718279793

我的设计  多了一个问题,创建人用中文,前面创建人问题我已冗余了中文名,全部检测一下,使用id的,要使用中文名

QQ_1792719135309

QQ_1792719597227

4.4 测试

QQ_1792719624915

五、历史数据问题

5.1 历史数据显示的是历史版本

QQ_1792716403872

历史数据怎么又改回去了,历史数据,明白什么意思吗?我要看的是数据,数据。

这个界面有什么用,根据无法查看数据。我记得以前设计的时候是两个选择,一个界面,一个版本,下面显示的是分页数据。怎么搞错了。

还真是不能认真测试啊。

历史数据怎么又改回去了,历史数据,明白什么意思吗?我要看的是数据,数据。
这个界面有什么用,根据无法查看数据。我记得以前设计的时候是两个选择,一个界面,一个版本,下面显示的是分页数据。怎么搞错了。
还真是不能认真测试啊。我要的是查看历史的数据,不是看版本

QQ_1792719779617

QQ_1792719856619

QQ_1792719992099

QQ_1792720061496

QQ_1792720401570

历史数据,就不要数据权限了,只要能查看历史数据菜单,里面所有数据都可以查看的。因为这些数据是废弃的,其他人也是看不到的。

QQ_1792720460827

QQ_1792720479463

5.2 测试

加载界面列表失败:您的权限不足,无法继续操作!

QQ_1792720518282

为什么,huangweihua 刷新历史数据显示没有权限
加载界面列表失败:您的权限不足,无法继续操作!

QQ_1792720614768

QQ_1792721106786

QQ_1792721148029

删除此历史版本
历史版本是不可删除的,去掉

QQ_1792721253284

QQ_1792721332871

好的,现在好了。

先解决这些问题,看来完全靠 AI 还是有些问题的。

六、为什么我第一次创建版本是 4

6.1 难道全局统一版本

为什么我第一次创建版本,并停用,结果版本是4,难道全局统一版本?查一下原因,并说明

QQ_1792722036923

QQ_1792722052736

QQ_1792722083419

6.2 这样啊

这样啊,那就不改,如果要修改,可能还要添加表计数。

这样啊,那就不改,如果要修改,可能还要添加表计数。

QQ_1792722152301

七、一个人自审自发的设计问题

7.1 还有个设计问题,不是代码问题

还有个设计问题,不是代码问题, 如,huangweihua 审核低代码,也只有一个人审核(就是自己),如果 huangwehua 发布低代码会怎样?自己发?自已审?这个问题有没有好的解决办法

还有个设计问题,不是代码问题,
如,huangweihua审核低代码,也只有一个人审核(就是自己),如果huangwehua发布低代码会怎样?自己发?自已审?这个问题有没有好的解决办法

QQ_1792722979010

A 不要加在jg-admin上,加上wanglong上吧

QQ_1792723078960

7.2 多人审核

QQ_1792723185269

这个互审,也要加在测试脚本中。huanweihua增加低代码,wanglong审核,这个增加一节测试。自己看着加

QQ_1792723474270

QQ_1792723537437

QQ_1792723567079

QQ_1792724174617

QQ_1792724203858

八、小结

这一轮实测下来,问题基本都对着界面一条条清了,简单记几笔:

  1. updateTime 排序不对,根子是 service 里直接拿 Example 调 mapper 更新,绕过了 save,凡是这类调用都得收进封装函数里,保存统一走 save,这个后面要当硬规矩守着。
  2. 停用、废弃的闭环,测试脚本压根没覆盖,AI 自己想不出来,只能人在界面上点一遍才暴露,改完还得回补进脚本。
  3. 新增多条没清空、创建人筛选用中文、历史数据显示成了版本——这些都是界面细节和权限设计,光读代码看不出,非得真跑不可。
  4. 一个人自审自发是设计上的死角,得拆成两个人互审:huangweihua 提、wanglong 审,这条也补进测试脚本。
  5. 第一次创建版本号就排到 4,查清楚了是全局统一版本的设计如此,先不改,要改得加表计数。
  6. 整体下来,AI 能把功能堆出来,但闭环、边界、界面体验这些还得靠人实测一条条校,测试脚本要跟着实测一起长。