当前位置: 首页 > news >正文

从针尖对麦芒,到丝滑入扣,记录那些BT需求

前言:

        最近被一个“简单”的需求,搞的有点难受。需求其实很简单,就是记录某成品生产过程数据,然后进行展示,但因需求部门是管理部门。为了能获取足够多的参数来提高生产效率和研发进度。因此需要生产来统计收集对应生产过程的参数,如收集某个反应单号、反应釜对应是什么时候开始的,开始的时候对应反应的参数,如温度、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就表示删除。因为没考虑到他们会对删除的数据做修改或者二次录入因此,最后出现了一个这样的场景,上面主表是没数据,当明细表时有数据的,我们称之为无头勇士。真的是笑喷了,这也为我无尽的需求增添了一丝丝慰藉,哈哈哈,真是愉快的一天啊~

 

相关文章:

从针尖对麦芒,到丝滑入扣,记录那些BT需求

前言: 最近被一个“简单”的需求,搞的有点难受。需求其实很简单,就是记录某成品生产过程数据,然后进行展示,但因需求部门是管理部门。为了能获取足够多的参数来提高生产效率和研发进度。因此需要生产来统计收集对应生产…...

封装vue2局部组件都要注意什么

一. 关于局部组件组成的三个部分&#xff08;template, script, style&#xff09; template > 组件的模板结构 &#xff08;必选&#xff09; 每个组件对应的模板结构&#xff0c;需要定义到template节点中 <template><!-- 当前组件的dom结构&#xff0c;需…...

【深入浅出程序设计竞赛(基础篇)第三章 算法从0开始】

深入浅出程序设计竞赛&#xff08;基础篇&#xff09;第三章 算法从0开始 第三章 例题例3-1例3-2例3-3例3-4例3-5例3-6例3-7例3-8例3-9例3-10例3-11例3-12 第三章 课后习题3-13-23-33-43-53-63-73-83-9 第三章 例题 例3-1 #include<iostream> using namespace std;int …...

安全之安全(security²)博客目录导读

研究方向&#xff1a;安全之安全 研究内容&#xff1a;ARM/RISC-V安全架构、TF-A/TEE之安全、GP安全认证、静态代码分析、FUZZ模糊测试、IDA逆向分析、安全与功耗等&#xff0c;欢迎您的关注&#x1f496;&#x1f496; 一、ARM安全架构 1、ARM安全架构及其发展趋势&#xff0…...

ubuntu安装opencv4

apt 安装 sudo apt install libopencv-dev python3-opencvpkg-config查看安装 sudo apt install pkg-configpkg-config --modversion opencv4pkg-config --libs --cflags opencv4参考 如何在 Ubuntu 20.04 上安装 OpenCV pkg-config 详解...

Qt 当磁盘可用空间小于指定大小时删除早期的文件

1. 需求 用户反应&#xff0c;电脑由于自身磁盘空间只有128G&#xff0c;由于软件执行一次任务&#xff0c;就要录视频记录&#xff0c;导致磁盘空间爆满&#xff0c;电脑卡&#xff0c;无法再次生成视频 2. 分析&#xff1a;当时软件没有写自动删除视频的代码导致的。 可以…...

浙大数据结构第七周之07-图6 旅游规划

题目详情&#xff1a; 有了一张自驾旅游路线图&#xff0c;你会知道城市间的高速公路长度、以及该公路要收取的过路费。现在需要你写一个程序&#xff0c;帮助前来咨询的游客找一条出发地和目的地之间的最短路径。如果有若干条路径都是最短的&#xff0c;那么需要输出最便宜的…...

RocketMQ双主双从同步集群部署

&#x1f388; 作者&#xff1a;互联网-小啊宇 &#x1f388; 简介&#xff1a; CSDN 运维领域创作者、阿里云专家博主。目前从事 Kubernetes运维相关工作&#xff0c;擅长Linux系统运维、开源监控软件维护、Kubernetes容器技术、CI/CD持续集成、自动化运维、开源软件部署维护…...

分类预测 | MATLAB实现EVO-CNN多输入分类预测

分类预测 | MATLAB实现EVO-CNN多输入分类预测 目录 分类预测 | MATLAB实现EVO-CNN多输入分类预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.MATLAB实现EVO-CNN多输入分类预测 2.代码说明&#xff1a;量谷优化卷积神经网络的数据分类预测&#xff1a;要求于Matlab …...

DAY04_SpringMVC—SpringMVC简介PostMan和ApiFox工具使用SpringMVC请求与响应REST风格

目录 一 SpringMVC简介1 SpringMVC概述问题导入1.1 SpringMVC概述 2 入门案例问题导入2.0 回顾Servlet技术开发web程序流程2.1 使用SpringMVC技术开发web程序流程2.2 代码实现【第一步】创建web工程&#xff08;Maven结构&#xff09;【第二步】设置tomcat服务器&#xff0c;加…...

phpstorm配置ftp同步文件到服务器

这里的默认快捷键 不是 CtrlS &#xff1b;需要设置快捷键&#xff0c;这里原来是save all操作时上传文件到服务器&#xff1b; ** 设置好快捷键后按 CtrlS就会同步文件&#xff08;添加删除文件后保存&#xff0c;服务器也会同步&#xff09; ** 搜索出save all 后&#xf…...

前端jd要求:了解一门后端开发语言优先 解决方案之Node.js

前端jd要求&#xff1a;了解一门后端开发语言优先 解决方案之Node.js 前言常见的后端开发语言一、什么是 Node.js二、学习 Node.js 的前置知识三、学习 Node.js 的步骤1、Node.js 的安装2、Node.js 的基本语法和 API模块导入和导出文件读写操作HTTP 服务器命令行参数 3、Node.j…...

什么是ServiceMesh(Istio一)

现在最火的后端架构无疑是微服务了&#xff0c;微服务将之前的单体应用拆分成了许多独立的服务应用&#xff0c;每个微服务都是独立的&#xff0c;好处自然很多&#xff0c;但是随着应用的越来越大&#xff0c;微服务暴露出来的问题也就随之而来了&#xff0c;微服务越来越多&a…...

【腾讯云 Cloud Studio 实战训练营】Hexo 框架 Butterfly 主题搭建个人博客

什么是Cloud Studio Cloud Studio 是基于浏览器的集成式开发环境&#xff08;IDE&#xff09;&#xff0c;为开发者提供了一个永不间断的云端工作站。用户在使用 Cloud Studio 时无需安装&#xff0c;随时随地打开浏览器就能在线编程。 ​ Hexo 博客成品展示 本人博客如下&…...

搭建Excel服务器

1、下载Excel服务器 下载地址 2、解压文件 3、打开服务器 4、服务器运行信息 5、连接测试 打开客户端 6、登录到服务器 默认账号 密码 admin 3 修改文件保存路径(服务器端点击配置) 7、客户端整体界面 8、配置权限 9、设计模板 10、其他用户登录就可以填写信息 11、用户&#…...

渗透测试成功的8个关键

渗透测试 (penetration test)并没有一个标准的定义&#xff0c;国外一些安全组织达成共识的通用说法是&#xff1a;渗透测试是通过模拟恶意黑客的攻击方法&#xff0c;来评估计算机网络系统安全的一种评估方法。这个过程包括对系统的任何弱点、技术缺陷或漏洞的主动分析&#x…...

【leetcode】链表part2

24. 两两交换链表中的节点 迭代方法 public static ListNode swapPairs(ListNode head) {// 输入&#xff1a;head [1,2,3,4]// 输出&#xff1a;[2,1,4,3]ListNode dummy new ListNode(0);dummy.next head;ListNode cur dummy;while (cur.next ! null && cur.ne…...

C#数据类型转换

目录 1.常用的数据类型: ​编辑1.1别名概念例子: 输出结果&#xff1a; 2.数值类型之间的相互转换: 2.1举例: ​编辑输出结果: 1.常用的数据类型: 1.1别名概念例子: 输出结果&#xff1a; 用GetType来获取数据类型的时候&#xff0c;就是指向System.Byte和System.Char这个…...

mybatis-plus逻辑删除的坑

一旦在逻辑字段上加了TableLogic逻辑删除的配置&#xff0c;并且使用mybatis-plus自带的方法时&#xff08;如果自己用xml写SQL不会出现下面的情况&#xff09; 查询、修改时会自动排除逻辑删除的数据 当使用mybatis-plus自带的查询方法时&#xff0c;就不用每次查询的时候跟…...

SQL Server基础之游标

一&#xff1a;认识游标 游标是SQL Server的一种数据访问机制&#xff0c;它允许用户访问单独的数据行。用户可以对每一行进行单独的处理&#xff0c;从而降低系统开销和潜在的阻隔情况&#xff0c;用户也可以使用这些数据生成的SQL代码并立即执行或输出。 1.游标的概念 游标是…...

(二)结构型模式:4、组合模式(Composite Pattern)(C++实例)

目录 1、组合模式&#xff08;Composite Pattern&#xff09;含义 2、组合模式应用场景 3、组合模式的优缺点 4、组合模式的UML图学习 5、C实现组合模式的简单示例&#xff08;公司的OA系统&#xff09; 1、组合模式&#xff08;Composite Pattern&#xff09;含义 组合模…...

flask接口请求频率限制

pip install Flask-Limiter Flask-Limiter官方文档 基本使用 默认是用IP作为key进行计数的&#xff0c;你也可以自定义key&#xff0c;具体看官网 from flask import Flask from flask_limiter import Limiter from flask_limiter.util import get_remote_addressapp Flas…...

javaweb监听器和juery技术

监听servlet创建 package com.hspedu.listener;import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener;/*** 老韩解读* 1. 当一个类实现了 ServletContextListener* 2. 该类就是一个监听器* 3. 该类可…...

C++并发多线程--std::unique_lock的使用

目录 1--std::unique_lock的使用 1-1--std::adopt_lock参数 1-2--std::try_to_lock参数 1-3--std::defer_lock参数 1-4--互斥量所有权转移 1--std::unique_lock的使用 常用成员函数&#xff1a; ① lock(): 加锁&#xff1b; ② unlock(): 解锁&#xff1b; ③ try_lock()…...

【ChatGLM】ChatGLM-6B模型Win+4GB显卡本地部署笔记

ChatGLM-6B是清华大学知识工程和数据挖掘小组发布的一个类似ChatGPT的开源对话机器人&#xff0c;由于该模型是经过约1T标识符的中英文训练&#xff0c;且大部分都是中文&#xff0c;因此十分适合国内使用。 预期环境 本机电脑备注&#xff1a; Win10专业版 32G内存256固态系统…...

青翼科技自研2路250MSPS DA回放FMC子卡模块

FMC150_V30是一款基于VITA57.1规范的2路125MSPS采样率16位分辨率AD采集、2路250MSPS采样率16位分辨率DA回放FMC子卡模块。该模块遵循VITA57.1规范&#xff0c;可直接与符合VITA57.1规范的FPGA载卡配合使用&#xff0c;板卡ADC器件采用ADI公司的AD9268芯片&#xff0c;板卡DAC器…...

硬件产品经理:从入门到精通(新书发布)

目录 简介 新书 框架内容 相关课程 简介 在完成多款硬件产品从设计到推向市场的过程后。 笔者于2020年开始在产品领域平台输出硬件相关的内容。 在这个过程中经常会收到很多读者的留言&#xff0c;希望能推荐一些硬件相关的书籍或资料。 其实&#xff0c;笔者刚开始做硬…...

Opencv-C++笔记 (17) : 模板匹配

文章目录 1--概念2-- 方法3 结果3.1 ROI区域的获取使用自适应目标匹配 1–概念 opencv 提供了一个专门用于模板匹配的函数 cv::matchTemplate();其调用方式如下&#xff1a; void cv::matchTemplate(cv::InputArray image, // 用于搜索的输入图像, 8U 或 32F, 大小 W-Hcv::Inpu…...

Maven(四)常用命令大全

目录 一、mvn 命令参数二、mvn 插件命令1.介绍2.查看插件的使用文档3.常用的插件命令 官网地址&#xff1a; https://maven.apache.org/官方插件清单&#xff1a; https://maven.apache.org/plugins/index.html Maven 是一个强大的构建工具&#xff0c;它提供了许多命令来进行项…...

13.3 目标检测和边界框

锚框的计算公式 假设原图的高为H,宽为W 详细公式推导 以同一个像素点为锚框&#xff0c;可以生成 (n个缩放 m个宽高比 -1 )个锚框 锚框的作用&#xff1a; 不用直接去预测真实框的四个坐标&#xff0c;而是&#xff1a; 1.先生成多个锚框。 2.预测每个锚框里是否含有要预测…...