10. 对SKILL进行一次全新尝试,改为框架+细节方式的实践及验证:二次联调(3)——jet-user-web流程搭建与日志排查

0 阅读9分钟

10. 对SKILL进行一次全新尝试,改为框架+细节方式的实践及验证:二次联调(3)——jet-user-web流程搭建与日志排查

上一期把前端 jet-admin-web 的问题过了一遍,这期转到另一个前端 jet-user-web。相比 admin-web 那种「入口删了连权限一起删」的粗放错误,user-web 这边更多是流程性的磨炼:测试用例脚本写了一遍又一遍、操作日志死活存不进去、SQL 和删目录的老毛病反复发作。

这套联调本质是在打一场持久战:后端我已经启动,AI 只能测不能编译;所有流程要一条条走通、闭环记录到测试脚本;日志、权限、重复 bug 这些重复过多次的问题,也一次次冒出来。每一处都逼着我把文档和 SKILL 翻出来对照,才算稍有进展。

这篇把 jet-user-web 前半段的联调过程记录下来:从测试用例脚本的准备、走通流程,到运行方式与冒烟,再到操作日志为空的攻坚,重点看 AI 在流程测试和日志落库上的表现。

一、测试用例脚本的准备

这一轮先从测试用例脚本入手,把要覆盖的流程、角色和用户先理清楚,为后面的逐条闭环测试打底。

jet-user-web (为主)jet-admin-web(为附) 
前面说无效的密码应该是2a,2b的问题,这个修改后端代码。
前面专门写过一个测试用例脚本.md
现在要细化,每一条都要完事闭环。
比如说,入库某部件,审批等流程,最后出库到哪里。如果有告警也是要的。一条一条的写。
全部测试可能也是麻烦。先做基础准备工作。
1、各种用户搞齐,每个人角色不同登录的菜单肯定也不同。这一块要搞好,每个角色至少2个用户,各种不同角色要建齐。每个人登录等任何操作都要有记录在测试用例脚本中。前面说过这个脚本就是最终用户手册,当然比用户手册要丰富得多。
2、先走通一两个流程,就以入库这个吧。
入库某部件,审批等流程,最后出库到哪里。如果有告警也是要的。一条一条的写。
结果是:
1、优化测试用例脚本
2、前端代码有问题要优化
3、后端代码问题先列出来,如果不改就进行不下去,则停止,告诉我,修改后再进行。

QQ_1788357216432.png QQ_1788358061200

a

QQ_1788358121224

QQ_1788358768521

QQ_1788359362538

二、走通流程:缺什么补什么

脚本的思路定下后,开始真正走通入库流程,AI 却动不动就想停下来问,只能一遍遍压着它缺什么补什么。

操,你他妈的不是说了wms具体的我不知道,你按网上或正常逻辑添加上。不要再停止了。
只要是缺的就补上,不用再一步一步的问了。
虽然前面没说要做的,但走不通肯定要补上的。
走不通的就补上,不用管前面说的流程。只要是缺的都补上。但要严格按文档和SKILL来,别随ai瞎飘。

QQ_1788359505821

QQ_1788360697174

后端已运行,进行下一步

QQ_1788361593387

先停止

QQ_1788362643165

我启动了后端 ,先测试验证再修改

QQ_1788363141005

QQ_1788363534442

我运行的后端,你编译是不行的,后端问题只能先提出来。

QQ_1788363854269

三、运行方式与冒烟流程

运行方式固定下来后,先跑一轮运行时冒烟做终验,确认改了后端后怎么重新打包、复制、重启才顺。

补充一点记录memory的知识
E:\jet-wms\jet-wms\doc\run
autorun.cmd 可以运行网关等三个jar。如果你调试源码,则将target中的jar复制到此处,然后关闭,运行。

下次修改后端后,package后,复制到上面目录。

我已启动,跑运行时冒烟(建 In 草稿→审核→查 stock_log 是否增入库流水;Issue 发料→查出库流水;Return 验收→查入库流水)做终验。

QQ_1788393018266

不是告诉你了,可以自己重启吗?
启动好了

QQ_1788393199243

QQ_1788393415610

后端代码缺失功能都编好了吗
测试用例脚本一定要编写好,可行的。因为以后我会逐条按那个执行的。

QQ_1788394575391

QQ_1788394600838

我已启动后端,接着前面任务

QQ_1788398634360

四、操作日志为空的问题

这一章正式碰最头疼的一块:操作日志死活为空,前后端反复重启排查,绕了很久才抓到根因。

为什么操作日志还是空的?
为什么保存没有生成操作日志?还是你通过sql插入数据的?不应该啊,也做了新增,删除操作吧。这个查一下。
@RecordOperLog(...) 保存删除都是有记录的,查一下为什么数据库里面也是空的。
菜单管理 怎么没有按钮的显示了 

QQ_1788399353091

又没有启动好是吧,
我重启了

QQ_1788400107245

QQ_1788400740006

你要的是将编译的 target 中的 jar文件复制到 当前目录 jet-wms\doc\run 下,然后关闭重启。
我运行好了后端,接着测试吧

QQ_1788400965279

QQ_1788402228697

QQ_1788402310320

重启了,接着测试,先将前面任务完成就可以了。

QQ_1788402696710

要不这样,你直接调试后端代码,通过接口操作,不用界面,将operlog调通再说

QQ_1788402842487

4.1 直接运行源码定位

先放下界面,改为直接运行源码,目标就一个:让 jet-oper-log 里有数据。

你不用复制到doc/run,直接运行源码,最终结果是jet-oper-log有数据。

QQ_1788403278386

QQ_1788405953597

我已重启后端
1、测试一下 operlog
2、前面还有没有完成的任务

QQ_1788406208147

   List<OperLog> buffer = new ArrayList<>(BATCH);
        while (!Thread.currentThread().isInterrupted()) {
            String json;
            try {
                // 阻塞 1s 取一条(rightPop 带超时,避免连接被长阻塞)
                json = redisTemplate.opsForList().rightPop(KEY, Duration.ofSeconds(1));
                
                try {
                OperLog entity = mapper.readValue(json, OperLog.class);
                fillAudit(entity);
                buffer.add(entity);
                if (buffer.size() >= BATCH) {
                    flushWithRetry(buffer);
                }
            } catch (Exception e) {
                // 单条解析/校验失败:重新投递回队列头部,保证不丢、稍后重试
                log.warn("oper-log 解析失败,重新投递: {}", e.getMessage());
                reEnqueue(json);
            }
            
            
            保存日志怎么能这样写,不可以监听事件吗?还循环,循你妈呀。
            并且不要批量保存,或者批量保存要增加个时间,比如,超过2秒,则不管batch是否满都必须保存

QQ_1788413764539

日志的问题,最终还是靠我自己来修改,如果不是我来查找,可能使用200积分也不一定能解决。AI写程序是严谨,但该严谨的地方却不全局看代码。什么意思?就是AI知道,一定要给Id赋值,但没想到,代码里面save时却是通过id的null来判断是新增还是修改的。唉。全局代码量才是王道啊。

4.2 根因:强行给 id 赋值导致更新而非插入

定位到最后,问题出在我说的这个细节:给 id 强赋值,把插入变成了更新。

问题出在强行给id赋值,导致保存时是更新而不是插入

   if (e.getId() == null) {
        e.setId(Sid.nextShort());
    } 操你妈,问题出在这,你妈的不看源码吗?我已修改,操

QQ_1788413834791

五、重复错误:clientType 与 status 为空

日志刚有眉目,重复错误又冒出来了:说过不要的 clientType,和不能为空的 status,原样又来一遍。

操你妈,重复错误要多少次啊,
全部是以前的重复错误。说过登录不要clientType
太多,改过的bug又出现了。操

### SQL: INSERT INTO jet_dept  ( id,created_by,created_time,del_flag,description,extro,leader,level,name,parent_id,phone,remark,sort,status,updated_by,updated_time ) VALUES( ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,? )
### Cause: java.sql.SQLIntegrityConstraintViolationException: Column 'status' cannot be null
; Column 'status' cannot be null

 这个问题,应该在数据库中处理一下,同样的问题一直出现 ,还有前面登录clientType问题,一次性搞定啊猪。操

QQ_1788414742626

QQ_1788416446237

QQ_1788416871480

六、重写测试用例脚本

日志之外,测试用例脚本也得按照规范重写,交互过程暴露了 AI 死记模板、连示例名字都不带改的毛病。

重写测试用例脚本

jet-wms 业务流程黑盒测试用例脚本 
你的这个写的不行要求:
1、第一章,数据准备
   只要执行04 -test 就可以了,所有的用户,角色都自动导入(可以有说明,但不是主要内容,前面说每个角色二个用户,可以列个表格)
   最终用户列表如下:(这些数据要一次性初始化好,还有用户手机号是全局唯一要使用删除还能插入的那个主键方式)
人员	手机号	单位(现在是部门,这是举例)	说明 (真实的是我们自己定的标题)
胡勇	13855551111	乌什二期 电场	电场人员
何斌	13855555555	乌什二期 电场	乌什二期审批人员
...



2、从第二章开始
   2.1  每一条都是一个大流程,里面有分支
             2.1.1 完全正确流程
             2.1.2 (这个2.1.234,可能多个,是不同流程的,如2.1.2 是获取不到数据,抛出异常等)
   2.2 
   2.3
   
3、倒数第二章,补充说明
4、最后一章:小结

QQ_1788417289704

操你妈,我给的是实例,不是叫你全部抄啊,操

乌什二期电场电场人员(现场 / 查询)
还都用这个,我不是写了个单位/部门吗?这些叫你按真实的部门来。

前面我是给个实例,他妈的,竟然连名字都不改。

QQ_1788424751477

操你妈,不是拣配员(本人)吗?难道没有自己的部门?仓管员(本部门)没有部门,操

QQ_1788425067774

https://www.jiandaoyun.com/blog/article/1170914/ 这里有完事的部门

QQ_1788425421326

QQ_1788425655374

QQ_1788426263331

QQ_1788426619715

?

七、小结

jet-user-web 前半段的联调,最耗费心力的是日志落库和重复错误:

  1. 流程要能闭环:把入库、审批、出库、告警一条条写进测试用例脚本,还要求这脚本能当最终用户手册用,AI 却常把示例当真抄、部门名字都不改。
  2. 走通要缺什么补什么:后端我已启动,AI 只能测不能编译;缺的就直接补上,但必须严格按文档和 SKILL 来。
  3. 操作日志的问题只能靠我自己排查:AI 写代码够严谨,但看不到全局——强行给 id 赋值,导致 save 按 id 判空时走了更新而不是插入,日志就存不进去了。
  4. 直接运行源码定位根因:最终要么靠接口操作、要么靠代码审阅逐行找,才能把 oper-log 调通。

下一篇继续处理 jet-user-web 后半段的 SQL 与数据库问题,再转入 screen 大屏和全量运行收尾。