这个小问题是涛哥在禅道录的,叫我去完成一下这个小需求。
看到这两个需求之后,要立刻想到这两个需求是什么意思,这个步骤很重要,因为如果你对这个步骤都不熟悉,那么改代码就没有一个明确的方向。
因为一个表单有很多个作业标准,每个作业标准是一个sheet页。当你导出的时候,sheet页的名字是作业标准名称(如果有的话,如果这个作业标准没有名称,那就按照以前的规则导出就好了)。一个作业标准会根据周期定时生成任务,每个定时任务就是sheet页中的一行。
比如现在有一个任务表单,有2个作业标准,第一个作业标准生成了10条任务(在sheet页中对应10行),计划执行时间分别从2024-12-18到2024-12-28。第二个作业标准生成了3条定时任务(在sheet页中对应3行),计划执行时间分别从2024-12-23到2024-12-25。假如查询时间范围是2024-12-18到2024-12-22,导出的excel中第一个sheet页会显示2024-12-18到2024-12-22的任务,而第二个sheet页不会显示任何任务(因为第二个sheet页中没有一个任务的计划执行时间在2024-12-18到2024-12-22这个范围之内)。我希望当遇到这种情况的时候,第二个sheet页就不显示,也就是不导出时间段内无任务的标准。
这就是这两个需求大致想要达到的效果。只有明白了这个效果,写代码才有针对性和目的性。我之前就是在心里觉得知道了大致想要达到的效果,但是没有写出来,我后来反思了一下,其实我以为我知道达成的效果了,但真的只是我以为而已。当我尝试着把想要完成的思路写下来之后,我发现我还是很难写下来,因为在心里想效果是会把很多细节给默认忽略的,而这些细节正是最重要的东西。所以我现在一般都是把想法写在纸上。
接着,我大概看了一下这个导出接口整体的逻辑和思路,我发现这个导出接口的逻辑是这样的:首先拿到两个作业标准放到一个叫sopList的变量里面,然后给这两个作业标准生成sheet页,最后循环对这两个作业标准执行写入操作,这样一个excel就完成了。
如果想要达成涛哥想要的需求,那就需要对整个接口的逻辑进行修改,当拿到2个作业标准放到sopList变量的时候,接着根据查询的条件立刻从后端拿到这个作业标准对应的任务,如果没有任务就不生成sheet页,有任务才生成sheet页。然后生成sheet页之后继续对sheet页进行数据写入操作。
这是把逻辑换了一下之后的效果:
我发版到正式环境上,发现导出的时候出现了问题,有些表单导出为空了。后来睿哥告诉我如果我用taskList来判断是否生成sheet页的话,就会少生成sheet页,在后面的代码中,如果发现你少生成了sheet页的话,会有报错产生,因此最好还是要生成sheet页。睿哥告诉我,生成sheet页之后用taskList做判断,如果taskList为空就隐藏这个sheet页即可。隐藏比不生成好的地方在于隐藏只是你看不见,但是实际上还是有的,就不会说影响后面的代码。
总结
一般可以通过AI来帮助自己理解代码的大致结构,知道一份代码中这几行是干什么的,那几行是干什么的。
通过调试来大致了解哪些变量是关键变量,找到关键变量会有利于更好的了解代码。比如在这里,关键变量是sopList和taskList,sopList装着表单的所有作业标准,而taskList装着某一个作业标准生成的任务。