在没有需求文档的情况下,根据系统现有实现的功能,梳理各个模块的功能点及测试点。
1.商品管理
1.1.商品类别
1.1.1.新增类别
界面字段:名称、编号、上级目录、排序、备注
对应数据库表:jsh_material_category》name、serial_no、parent_id、sort、remark
测试点:
(1)名称长度1-50
名称长度1、长度50
名称不可为空
名称长度不可51(当前效果是:前端没有控制,点击保存后,提示异常,但是直接关闭新增弹框了,不太友好吧)
名称输入中文、英文、特殊字符
名称不可和delete_flag=0的类别名称重复
名称可和delete_flag=1的类别名称重复
名称可空格
(2)编号长度1-100
长度1、长度100
不可为空
长度不可101(当前效果:前端没有控制,点击保存后,提示异常,但是直接关闭新增弹框了,不太友好吧)
输入中文、英文、特殊字符
可重复
可空格
(3)上级目录
上级目录的下拉选项为delete_flag=0的类别数据
上级目录为空,则为一级类别,parent_id为空
上级目录不为空,则为所选上级下的子类别,parent_id保存父类别id
账号A在新增类别弹框,选择了上级目录后,页面停留;账号B把该上级目录删除;账号A操作保存(当前效果:保存成功。但问题是,父类别已经删除,这条数据保存下来算是废了,而且页面上是看不见的,想去再次添加,又有重名判断。)
(4)排序
前端控制只能输入正负数字,其他字符输入不进去
排序为正
排序为负
排序长度1、长度10
排序长度不可11当前效果:前端没有控制,点击保存后,提示异常,但是直接关闭新增弹框了,不太友好吧)
排序可为空
(5)备注
长度1、长度1024
不可为空
长度不可1025(当前效果是:前端没有控制,点击保存后,提示异常,但是直接关闭新增弹框了,不太友好吧)
输入中文、英文、特殊字符
(6)点击确定,新增成功,表jsh_material_category新增记录,关闭弹框,类别树显示该类别。
点击关闭/×,弹框关闭,数据无变化。
(7)父类别下的子类别数、父的层级数,应该是没有限制。
1.1.2. 类别树
(1)查询jsh_material_category》delete_flag=0的类别数据,根据parent_id以树的形式展示,默认全部展开
(2)一级类别,排序按照:先显示sort为空的、然后sort从小到大的,sort相同时,按照创建时间顺序排列
(3)点击分类名称,右侧显示对应编辑区域
(4)添加一定量的分类数据,查看页面滚动条是否正常
(5)添加一定长度的分类数据,查看页面显示是否正常(会超出显示区域,如上图。)
(6)树操作-父子关联:
(7)树操作-取消关联:
默认是取消关联的,即,勾选父类别或子类别,不会影响其父子类别的勾选状态。
1.1.3. 批量删除
未勾选类别,点击批量删除,提示请勾选
勾选没有子类别的类别,点击批量删除,删除后,delete_flag=1
勾选没有子类别的类别,点击批量删除,提示有子类别,不能删除
类别若与商品关联后,是否能删除,暂时未验证
批量删除弹框,显示勾选的类别数量
(这里有个场景是,取消关联时,勾选了4个,然后点击父子关联,然后点击批量删除,弹框数量与页面显示的不一致)
1.1.4.编辑类别
各个字段的输入限制校验,与新增时一致;
但修改类别的上级目录需注意:
(1)修改根类别的上级目录,保存成功后,该parent_id是为空到有值的情况,类别树自动刷新后,该根类别及其子类别移动到新的上级目录下;
(2)修改中间类别的上级目录,保存成功后,该parent_id是从一个值变为另一个值;
(3)修改叶子类别的上级目录为空,保存成功后,该parent_id是从一个值变为空。
这里第(3)种就有bug了:保存成功后,parent_id没有变为空。
1.2.计量单位(数据库表jsh_unit)
1.2.1.新增计量单位
提交保存后,直接一个黄色感叹号,提示让人看不懂。
F12后看是500,未知异常,后端也不说明为啥报500。看了数据库字段类型,应该是输入类型不合规,但是这前端和后端也不提示。
算了,计量单位和多属性这两模块,就是增删改查,不看了。
1.3.商品信息(数据库表jsh_material)
1.3.1.新增商品
一直报301,数据写入异常:
看了下后端日志,没懂新增商品的时候为啥会有一句update的软删除操作,不知道是否有什么业务逻辑;
但就功能来说,这让使用者一头雾水。
找到这个文件的对应方法,加了一个条件处理
重启后端后,可保存成功了。
但是又有一个问题了,就是列表显示的条数和列表显示出来的条数不一致
难道我改出问题了?
看日志,查询的时候执行了3个SQL:
2023/05/20-02:23:42 DEBUG [http-nio-9999-exec-4] com.jsh.erp.datasource.mappers.MaterialMapperEx.selectByConditionMaterial - ==> Preparing: SELECT m.*, u.name unitName, mc.name categoryName, me.bar_code, me.purchase_decimal, me.commodity_decimal, me.wholesale_decimal, me.low_decimal, me.sku FROM jsh_material m LEFT JOIN jsh_material_extend me ON me.tenant_id = 63 AND m.id = me.material_id AND ifnull(me.delete_Flag, '0') != '1' LEFT JOIN jsh_unit u ON u.tenant_id = 63 AND m.unit_id = u.id AND ifnull(u.delete_Flag, '0') != '1' LEFT JOIN jsh_material_category mc ON mc.tenant_id = 63 AND m.category_id = mc.id AND ifnull(mc.delete_Flag, '0') != '1' WHERE m.tenant_id = 63 AND 1 = 1 AND ifnull(m.delete_flag, '0') != '1' GROUP BY m.id ORDER BY m.id DESC LIMIT ?, ?
2023/05/20-02:23:42 DEBUG [http-nio-9999-exec-4] com.jsh.erp.datasource.mappers.MaterialMapperEx.selectByConditionMaterial - ==> Parameters: 0(Integer), 10(Integer)
2023/05/20-02:23:42 DEBUG [http-nio-9999-exec-4] com.jsh.erp.datasource.mappers.MaterialMapperEx.selectByConditionMaterial - <== Total: 10
2023/05/20-02:23:42 DEBUG [http-nio-9999-exec-4] com.jsh.erp.datasource.mappers.MaterialCurrentStockMapperEx.getCurrentStockMapByIdList - ==> Preparing: SELECT material_id, sum(current_number) current_number FROM jsh_material_current_stock WHERE jsh_material_current_stock.tenant_id = 63 AND 1 = 1 AND ifnull(delete_flag, '0') != '1' AND material_id IN (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) GROUP BY material_id
2023/05/20-02:23:42 DEBUG [http-nio-9999-exec-4] com.jsh.erp.datasource.mappers.MaterialCurrentStockMapperEx.getCurrentStockMapByIdList - ==> Parameters: 657(Long), 655(Long), 619(Long), 588(Long), 587(Long), 586(Long), 579(Long), 577(Long), 570(Long), 569(Long)
2023/05/20-02:23:42 DEBUG [http-nio-9999-exec-4] com.jsh.erp.datasource.mappers.MaterialCurrentStockMapperEx.getCurrentStockMapByIdList - <== Total: 3
2023/05/20-02:23:42 DEBUG [http-nio-9999-exec-4] com.jsh.erp.datasource.mappers.MaterialMapperEx.countsByMaterial - ==> Preparing: SELECT COUNT(m.id) FROM jsh_material m LEFT JOIN jsh_material_extend me ON me.tenant_id = 63 AND m.id = me.material_id AND ifnull(me.delete_Flag, '0') != '1' LEFT JOIN jsh_unit u ON u.tenant_id = 63 AND m.unit_id = u.id AND ifnull(u.delete_Flag, '0') != '1' LEFT JOIN jsh_material_category mc ON mc.tenant_id = 63 AND m.category_id = mc.id AND ifnull(mc.delete_Flag, '0') != '1' WHERE m.tenant_id = 63 AND 1 = 1 AND me.default_flag = 1 AND ifnull(m.delete_flag, '0') != '1'
2023/05/20-02:23:42 DEBUG [http-nio-9999-exec-4] com.jsh.erp.datasource.mappers.MaterialMapperEx.countsByMaterial - ==> Parameters:
2023/05/20-02:23:42 DEBUG [http-nio-9999-exec-4] com.jsh.erp.datasource.mappers.MaterialMapperEx.countsByMaterial - <== Total: 1
第一个是商品表(jsh_material)左连接商品价格表(jsh_material_extend)、计量单位(jsh_unit)、商品类别(jsh_material_category),查未删除的全部数据,按商品分组,并分页返回。
第二个是查询商品库存(jsh_material_current_stock)
第三个是查询商品表(jsh_material)左连接商品价格表(jsh_material_extend)、计量单位(jsh_unit)、商品类别(jsh_material_category),且商品价格表中delete_Flag=0的记录数。如下图结果为2。
那再接着看回商品价格表的这个delete_Flag字段:
观察数据发现一个问题,新增的数据默认delete_Flag=0,而通过SQL初始化的数据delete_Flag=1
查看初始化时的SQL,值都是设为0的,那应该是什么操作触发,使值都变为了1。
所以到这里的话,需要再看下这个字段的完整业务逻辑,排除是否是数据问题。
今天先到这里吧,没有需求文档真是痛苦。