需求10——通过改一个小bug来学习如何定位问题

news/2024/10/11 12:23:00/

在浏览我之前完成的一些小需求时,我发现了一个非常有价值的需求。这个需求可以让我深入了解系统中关于故障上报的功能。通过完善这个需求,我能够全面掌握整个故障上报的流程。

这个需求主要是关于故障上报流程中出现的问题。当前的流程如下:

  1. 员工A上报故障。
  2. 维修工进行处理。
  3. 按理说,处理完毕后应该由员工A进行验收,但因为员工A没空,所以转交给了员工B。
  4. 员工B进行验收,但验收不通过,于是重新发起故障上报。

问题出现在重新发起故障上报的环节:

  • 当员工B重新发起故障上报时,系统界面上显示的上报人仍然是员工A,而不是员工B。
  • 同样地,故障处理完成后,界面上显示的待验收人也依然是员工A,而不是员工B。

我们希望在这种情况下,能够将第二张故障单的上报人和待验收人都改为员工B,而不是继续显示员工A。

具体来说,当员工B点击“验收不通过”时,第一张故障单已经结束。而当员工B重新发起故障上报时,实际上已经生成了一张新的故障单。

现在的问题是,第一张故障单的处理流程没有问题,但在第二张故障单中,上报人和待验收人仍然显示为员工A。我们希望修改系统,使得在第二张故障单中,上报人和待验收人都显示为员工B。

之后我登录甘有博的账号:

当点击验收不通过的时候,第一张故障单就已经结束了。

当点击“提交”后,第二张故障单就已经完成了。

现在我已经大致了解了整个故障上报的流程,并且明确了问题所在。我们的目标很明确:将第二张故障单的上报人和待验收人改为员工B(甘有博)。

在实际操作中,我发现点击“验收不通过”时,系统并没有立即出现问题,只是新开了一张故障单。然而,当我进行到“提交”这一步时,问题就出现了:

为了找到这个问题的根源,我们需要找到相关的接口,然后进入这个接口看看接口的内部逻辑是什么样的。

还有一种方法找到这个接口,就是你去看前端代码中关于“提交”按钮的事件处理函数,看看点击“提交”按钮的时候,事件处理函数调用了哪个接口。我演示一下:

这个接口已经被成功找到了。进入这个接口的后端:

在查看代码的过程中,我发现 controller 层没有什么问题,所以我继续深入查看 service 层的代码逻辑。通过对 service 层的分析,我们可以进一步定位问题并找到解决方案。

在 service 层,我找到了这样一行代码:

这是将 form 对象转换成 entity 对象的代码。具体的转换思路如下:

  1. 属性复制:在转换的过程中,portalForm2Entity 方法会将 form 对象中的属性值复制到 entity 对象中。如果 entity 对象有的属性在 form 对象中不存在,那么这些属性在 entity 中保持默认值(通常是 null)。
  2. 后续处理:在转换之后,代码中可能会对 entity 对象的某些属性进一步赋值和处理。如果某些属性没有被进一步处理,这些属性就一直保持 null,并且在保存到数据库时以 null 的形式存储。

了解了 service 层的代码后,我开始思考:这里有没有对上报人的值进行后续处理呢?结果发现,还真没有。代码中只是让待验收人等于上报人,但并没有明确表明上报人是谁。

因此,为了解决这个问题,我们需要在 service 层添加一些逻辑,将上报人设置为当前用户。具体操作如下:

通过上述修改,我们确保每次创建故障单时,上报人都会被设置为当前用户,从而避免了上报人属性是第一张故障单的上报人的问题。

总结

在当前系统中,创建故障单时,上报人属性没有被正确设置,导致上报人属性总是等于第一张故障单的上报人。

为了解决这个问题,我们需要在 service 层添加逻辑,将上报人明确设置为当前用户,以确保每次创建故障单时,上报人属性都是当前用户。

具体的步骤就是,在将 form 对象转换为 entity 对象之后,设置 entity 对象的上报人属性为当前用户。

通过上述修改,每次创建故障单时,上报人都会被设置为当前用户,从而避免了上报人属性是第一张故障单的上报人的问题。


http://www.ppmy.cn/news/1537454.html

相关文章

网优学习干货:王者荣耀游戏用户体验洞察及质差识别(1)

一、课题背景 二、课题目的 针对热点游戏(王者荣耀)进行业务质量评估,并通过对端到端定界分析,从无线、核心网、互联网维度识别影响用户体验关键因素,为游戏用户的体验优化提供依据。 三、课题实施进度 王者荣耀卡顿特…

【JS】在 Node.js 和 Electron 中获取设备 UUID 的最佳实践

在现代应用开发中,识别设备的唯一性是一个常见需求。无论是为了授权、数据跟踪还是用户设备管理,获取设备 UUID 都是实现这些目标的关键。在这篇博客中,我们将探讨如何在 Node.js 和 Electron 中获取设备的 UUID,并比较两种主要方…

代理IP的类型及其在爬虫中的应用

1 动态住宅代理 这些IP地址来自真实的住宅用户,因此具有很高的匿名性和隐私性,不易被别为代理IP。而增加了爬虫任务的安全性。这类代理有以下特点: 高安全性:使用这类代理可发起真实有效的请求,提高爬虫效率的同时&am…

『网络游戏』客户端发送消息到服务器【17】

将上一章服务器的协议PEProtocol的.dll文件重新生成导入unity客户端中 命名为Net 点击生成 另一种导入.dll文件方式 在客户端粘贴即可 此时Net文件夹的.dll文件就导入进来了 创建脚本:NetSvc.cs 编写脚本:NetSvc.cs 修改脚本:GameRoot.cs 在…

Excel-查找和引用数据-VLOOKUP 和 HLOOKUP 函数

在 Excel 中,VLOOKUP 和 HLOOKUP 是用于查找和引用数据的函数。下面是它们的基本用法: VLOOKUP 用途:在表格的第一列中查找某个值,并返回该值所在行的指定列中的数据。 语法: VLOOKUP(lookup_value, table_array, …

【银河麒麟高级服务器操作系统】安全配置基线相关分析全过程及解决方案

了解更多银河麒麟操作系统全新产品,请点击访问 麒麟软件产品专区:https://product.kylinos.cn 开发者专区:https://developer.kylinos.cn 文档中心:https://documentkylinos.cn 服务器环境以及配置 【机型】物理机或虚机 【…

顶会论文复现:PROVING TEST SET CONTAMINATION IN BLACK BOX LANGUAGE MODELS

文章目录 1 资料2 我的总结3 复现源码首先你需要有gpt的api接口安装:数据集执行指令源码 4 结果 1 资料 我复现的源码:https://github.com/Whiffe/test_set_contamination 官网源码:https://github.com/tatsu-lab/test_set_contamination 论文&#x…

WPF|依赖属性SetCurrentValue方法不会使绑定失效, SetValue方法会使绑定失效?是真的吗?

引言 最近因为一个触发器设置的结果总是不起效果的原因,进一步去了解[依赖属性的优先级](Dependency property value precedence - WPF .NET | Microsoft Learn)。在学习这个的过程中发现对SetCurrentValue一直以来的谬误。 在WPF中依赖属性Dependency property的…