可爱静

记录生活、学习和工作

0%

记一次低码平台问题排查

问题描述

主表为产品表,子表关联主表id,并且有一个状态字段来标明该产品的状态;新建时可以对该state字段进行赋值,而编辑时更新该字段不生效。

若不做关联,单单更新子表该状态时,更新是正常的。

调试

单表更新时的请求体(正常)

1
2
3
path:/api/visualdev/OnlineDev/418773450413310789/418791234753004357?n=1682039432
body:
{"id":"418791234753004357","data":"{\"pro_num\":\"998\",\"pro_status\":\"3\",\"id\":\"418791234753004357\",\"flowId\":\"\"}"}

其中pro_status字段为关联数据字典的字段,关联enCode。

主从表新增(正常)

1
2
3
path:/api/visualdev/OnlineDev/419027988068172613?n=1682041034
body:
{"id":"","data":"{\"pro_num\":\"xx1\",\"F_Description\":\"xx1\",\"heifan_pro_status_heifan_pro_status\":\"1\",\"id\":\"\",\"flowId\":\"\"}"}

主从表更新(异常)

1
2
3
path:/api/visualdev/OnlineDev/419027988068172613/419030400854131525?n=1682041193
body:
{"id":"419030400854131525","data":"{\"F_Description\":\"xx11\",\"pro_num\":\"xx1\",\"id\":\"419030400854131525\",\"heifan_pro_status_heifan_pro_status\":\"2\",\"flowId\":\"\"}"}

主表中的F_Description字段更新成功,表示子表里status字段的heifan_pro_status_heifan_pro_status更新失败。

更新后列表返回的数据为

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
{
"code": 200,
"msg": "Success",
"data": {
"list": [
{
"heifan_pro_status_heifan_pro_status": null,# 此字段为null
"F_Id": "419030400854131525",
"id": "419030400854131525",
"F_Description": "xx11",
"pro_num": "xx1"
}
],
"pagination": {
"currentPage": 1,
"pageSize": 20,
"total": 1
}
}
}

测试主从表更新时,从表的其他值是否会更新

1
2
3
path:/api/visualdev/OnlineDev/419027988068172613/419032755356042053?n=1682041757
body:
{"id":"419032755356042053","data":"{\"F_Description\":\"xx2\",\"pro_num\":\"xx2\",\"id\":\"419032755356042053\",\"heifan_pro_status_heifan_pro_status\":\"3\",\"heifan_pro_status_heifan_pro_desc\":\"生产中\",\"flowId\":\"\"}"}

测试后发现,子表其他字段也是更新失败。

在测试过程中发现,编辑子表时回显有一定的问题;新建的所有属性均能正确的存入库中,但列表返回时子表的所有字段都会为空。

解决问题

过程

  1. debug更新接口,对入参以及key值转换进行检查,发现一切正常;
  2. 逐行调试代码,发现在获取子表数据时会生成一个UUID,更新时应该是不需要生成新的ID的,这是疑问点①;
  3. 在生成sql后,执行前,将sql语句粘贴至工具内执行发现更新语句有问题,WHERE id = 主表id,疑问点②;

解决

  1. 疑问点①,源码应该是被二开过,为了适配postgresSQL;
  2. 疑问点②,拼接SQL将列名改为关联字段,实现WHERE ref_id = 主表id,问题解决。

总结

问题是小问题,花的时间有点多,原因在于项目代码不够熟悉,还得多看多熟悉!