Debug日志2

用友实习-debug日志

本周主要进入的项目是FDIP下的全面税务管理项目,主要对项目中的需求性bug进行修改,并通过GitLab与同事进行版本控制,于周末同意打新补丁,更新项目版本。

image-20241107151555625

缺陷BUG

人员工时明细,有问题的数据要一起显示出来

image-20241107153213650

image-20241107153241775

​ 还是通过测试环境获取入口类并开始调试打断点Debug查询数据

image-20241107153607527

​ 发现前端传回的数据staffNo=null,属于前端缺陷:

image-20241107153742497

​ 但我是后端开发,前端React找不到点击事件(太复杂),只能通过后端sql进行信息反写,开始打算使用的是staffName查询对应的staffNo,但是后端也设置了限制,需要获取到机构编码,才能进行staffName的查询。

1
2
3
4
// 通过 pkStaff 查询人员信息
StaffHourDetail staff = staffHourDetailAssoService.queryList("staffName", vo.getEntity().getStaffName()).get(0);
// 获取人员编号
String staffNo = staff.getStaffNo();

抛出方法抛出 'org.springframework.jdbc.BadSqlGrammarException' 异常

org.springframework.jdbc.BadSqlGrammarException 是 Spring 框架中用于处理与 SQL 语法相关错误的异常类。该异常通常在执行数据库操作时抛出,主要原因包括:

  1. SQL 语法错误:执行的 SQL 语句有语法错误,例如拼写错误、缺失的关键字或符号等。
  2. 表或列不存在:引用了一个不存在的表或列名。
  3. 不正确的数据类型:传递给 SQL 查询的参数类型与数据库中字段的类型不匹配。
  4. SQL 语句不符合数据库规范:不同的数据库系统(如 MySQL, PostgreSQL, Oracle 等)对 SQL 语法的要求可能不同,使用了不被当前数据库支持的语法。

要解决这个问题,可以考虑以下几步:

  • 检查抛出异常的 SQL 语句,确保语法正确。
  • 验证所涉及的表和列是否存在。
  • 确保所有参数的类型与数据库字段类型匹配。
  • 参考数据库的文档,确保使用的 SQL 语法是兼容的。

image-20241107154156739

image-20241107154423920

最后的解决方法:

在代码的字段中有一个字段:pkStaff为人员基本信息的唯一主键,可以通过这个唯一组件去查询出该人员的所有基本信息,然后在获取staffNo

1
2
3
4
// 通过 pkStaff 查询人员信息
StaffHourDetail staff = staffHourDetailAssoService.queryList("pkStaff", vo.getEntity().getPkStaff()).get(0);
// 获取人员编号
String staffNo = staff.getStaffNo();

image-20241107154627483

最后获取到staffNo

image-20241107154958051

加入异常抛出信息中,就可以了,这个bug让我知道还是要对SQL字段每个代表什么要了解清楚,不要一味通过No–>Name,Name–>No

这种方式去获取空值的对象。

1
2
3
if (workHour.compareTo(new BigDecimal("1")) > 0) {
throw new RuntimeException("人员 " + staffNo + " 在 " + staffHourDetailB.getDates() + " 的工时总和超出1天,请修改");
}