前言:
最近被一个“简单”的需求,搞的有点难受。需求其实很简单,就是记录某成品生产过程数据,然后进行展示,但因需求部门是管理部门。为了能获取足够多的参数来提高生产效率和研发进度。因此需要生产来统计收集对应生产过程的参数,如收集某个反应单号、反应釜对应是什么时候开始的,开始的时候对应反应的参数,如温度、PH、电流、搅拌频率、氨浓度、粒度等等,不下40多个检测项目,因此可想而知这个收集表是又臭又长。因此最后的成品大概长这样。
从图片可以看出后面还有很多很多参数没显示出来。
一、针尖对麦芒
1、会议讨论猛如虎,剩下只有能不能
从上面的图片我们可想而知,管理部门在推动生产去做录入应用的时候,生产主任肯定会抱怨,录入的内容太多了,数据能不能自动带出来、能不能防呆、等等。因此在第一次试运行会议上,就出现了针尖对麦芒对麦芒的场景。最后一顿群枪舌剑后,提出了3年都改不完的需求到了我们这边。哈哈哈哈,真是鹬蚌相争,IT“得利"。
最后主要提出的需求点是:
1、日期能不能自动带出来,时间能不能自动累计变化,反应时长能不能自动变?
2、能不能像EXCEL那样直接拉一下数据就跟着变?
3、能不能根据我录入时间自动变化日期?有些值是固定的,能不能自动填充?
4、能不能通过EXCEL一次性把数据导入进去?
5、能不能做数据录入校验,比如录数据的地方不能录字符?
6、能不能设置必填项,重要信息比较完整?
7、能不能规定录入的内容,比如只能录入“是”或者“否”的地方,不能录入其他的,比如是加一个空格?
8、能不能.......?
2、能不能?不能?那得能
2.1、内心的emo
哈哈哈,上面的一顿能不能实在是把我问麻了?我整个人都emo了。从刚开始的激情分析,到后面的可以,我想想办法,最后我甚至都懒得动嘴了。然后他们看我不回答了,旁边的小伙伴直接来一句先记下来,我们回去研究研究。我心里真的是想谢谢你呢。
其实这一切的罪恶之源,就是数字化建设需要一个较长的过程,但是业务部门在建设时期,需要开展业务,也想提高效率,因此想先手工录入数据,将业务先固化下来,把标准规则做起来,至少数据线上化了,共享了,不在会出现N个版本的数据,也不需要跨部门催数据。总的来说是好的。因此对于IT人员来说,确实能体现我们的价值,加上IT人员都是热心肠,那不就是能,太能了啊!哈哈哈哈,那看看都是怎么实现的吧。
2.2、一点小思路
因为提的需求实在太多,这边就挑几个典型的说下实现思路。
因为不同工序的录入人员不愿意统一在一个大表录入,因此我们将最开始的那张大表拆分成了三张小表,如下图所示,小试、中试、量试。
如我们将小试拆分成了这样,默认我们就会带出反应级别为小试,默认带出当天的日期。默认未录入数据的时候不能进行删除操作等等。
为了保证数据质量,通过设置必填提示,并颜色标记必填项提醒用户哪些是必填的,等等。
二、有点AI的东西
其实受最近AI的影响,导致下面40 50岁的大爷,天天刷短视频,说这个能不能自动带出来,那个能不能自动计算,能不能自动查重。。。等等,主打的就是一个自动,主打的就是一个解放双手。针对前面提到的 "日期能不能自动带出来,时间能不能自动累计变化,反应时长能不能自动变?",来聊聊这个有点AI的东西。
1、AI进化论
首先看这个日期自动带出,就存在一个BT的点,就是用户在录入数据的时候,自动带出当天的日期,超过12点带出第二天的日期,这个需求还是比较简单实现,默认为空的时候赋值为today()的函数来获取系统日期。但是有个BT的点就是,当用户在录入某个日期23点的数据后,再点击新增就需要变化至第二天日期,并变化时间。因为需设置时间是24小时制。而且需要进位加1天的日期。针对这个需求你觉得应该怎么实现呢?
我们先看效果
效果图
如上图所示,当我们选择时间为00:57后点插入行,自动变化为01:57,并且反应时长自动累加。
当然班次是根据时间自动判断的,0点到8点半是早班,8点半到17点是中班,其他是晚班。当然这些都比较简单,复杂的是时间自动跳的时候超过23点的时候,自动回0并且日期加1天。因此我们通过截取选择时间的:左边的小时,或者对应的小时,点插入行的时候,自动将小时加1,然后再判断时间时候小于10小时,小于10时,前面填充个0变成01 02 03 。。09。然后再和后面的分钟拼接起来。 这样基本就实现了自动跳小时加1。最后通过mod(小时,24)自动让小时从0到23变化。其实这时候的日期变化就变的简单,只要上一行的小时变化成23的时候,自动将日期+1即可。
具体的动态效果我们可以看下视频
20230816_225117
2、进化论2.0
细心的小伙伴,可能会发现,插入行的时候因为是根据上一行的值来自动填充下一行的值,因此,如果我们点击的不是最后一行就会导致填充的数据错误,因此用户就开始emo了。
因此用户需要一个自动能填充多行,而且不用担心填充错误的功能,说实话,我也是第一次遇到这么BT的需求,因此苦苦研究了下,想到了一个数据定位功能,让功能按钮每次都能定位到最后一行,此时再点击插入就不会导致数据插入错误,只要无脑点击就行,当然了有插入必然会因为插入点的比较嗨,导致插入的多了,因此也需要一个无脑可以删除的功能,只需要点击删除就可以删除最后一行。因此最后通过JS来判断数据位置,每次从最后一行 进行数据的插入和删除就实现了这个需求。最后这个功能界面长这样。
定位插入行位置,每次自动定位,删除/插入最后一行
三、你以为这就结束了?
经过,多次迭代终于将上面提的需求完成了,但是万万没想到出现了一个emo需求,因为上下是两个表,因此数据存在两个表中,为了防止数据被误删除了,因此数据都是没有被真正删除,而是通过一个删除标记来记录是否删除,比如当删除标记dr=0时表示未删除,dr=1就表示删除。因为没考虑到他们会对删除的数据做修改或者二次录入因此,最后出现了一个这样的场景,上面主表是没数据,当明细表时有数据的,我们称之为无头勇士。真的是笑喷了,这也为我无尽的需求增添了一丝丝慰藉,哈哈哈,真是愉快的一天啊~