Bito智能辅助编程体验报告
??号称 IDE 的“瑞士军刀”,可以提升开发 10 倍的效率;
生成代码:要求 Bito 使用自然语言提示生成任何语言的代码。(例如,编写一个 Java 函数将数字从一种基数转换为另一种基数)
命令语法:询问任何技术命令的语法。(例如,How to set a global variable for git?")
测试用例:为代码生成测试用例。
生成代码:直接在编辑器中写出提示来生成代码。
解释代码:解释所选代码。询问这段代码是如何工作的或者它做了什么。
代码调试:找出代码中的问题
注释方法:为要添加到代码中的函数或方法生成注释。
提高性能:询问如何提高给定代码的性能。
检查安全性:询问所选代码是否存在任何已知的安全问题。
学习技术概念:提出有关任何技术概念的问题
回答代码片段相关问题:你可以询问与你的项目相关的问题,或在某个任务上进行迭代
提供代码建议:提供实时的代码建议,包括单行代码、整个函数,甚至是代码块
生成文档:能够自动生成代码文档,帮助文档化你的项目
代码重构和优化:使用提示来解释和重构代码
转换文件语言:可以帮助将文件从一种编程语言转换为另一种
???
????自动代码补全: 预测你下一步代码想要写什么
Bito 的用例非常适合各种开发人员:
寻求自动化日常任务和提高代码质量的软件开发人员
希望通过 AI 帮助提高生产力和效率的开发团队
旨在通过强大的代码助手增强其编码体验的个人程序员
总的来说,Bito 为开发人员提供了一种用户友好且安全的解决方案,可以更快地生成代码并简化他们的工作流程。
???对咋们代码的理解能力,是辅助我们写代码,给出方案建议,代码优化/重构等能够帮助我们提升开发效率的前提;
???现在咋们用解释代码这个功能来测试它代码理解能力,解释代码:
通常用于熟悉新代码,并用您选择的语言进行解释
用它来解释/总结整个存储库、文件、模块或函数
轻松选择一段代码或整个文件,并以任何语言(英语、中文、法语等)对其进行解释
使用 Bito 聊天、快捷方式、上下文菜单或 CLI 获取任何格式的内容
??在向代码提问之前需要让BITO索引到我们本地代码库:
索引存储在您的系统本地,以提供更好的性能,同时维护私有代码的安全/隐私
索引完成后,您可以通过在我们的 Bito 聊天框中的请求中添加特定关键字(例如“我的代码”、“我的代码库”“我的仓库”、“我的项目”、“我的文件夹”等)来提出问题。
???
把该函数的总体逻辑轮廓概括出来了,准确率还可以; 只是它解读代码只能读到代码的“表象”,读不出这样设计的原因,这里就需要结合业务需求去理解代码;
加上详细注解,会发现受到注解的影响比较大,逻辑解析得更加详细了;同一个问题我们多次提问给出答案也是有所区别得,对于复杂的函数我们多询问几次,以便更加清楚的了解代码逻辑;对于复杂的业务函数我们需要结合业务需求,设计方案,数据表结构,作者注释加ai辅助,我们就可以快速高效理清业务模块;只有做好第一步,理清了逻辑,我们才好基于这个基本逻辑进一步深入提问。
总结后进行摘要;prd 需求需要具体;
这种方式来解释代码,像打流水一样,感觉作用不大,还是多使用检索的方式来解析代码;
代码要注释清楚
解释源码:
???知其然也要知其所以然。为了探究实现的原理,往往离不开查看源码的过程。以我最近在研究的HashMap为例子???????????????
?static final int hash(Object key) {?
? ?int h;? ?
??return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
?}
代码本身并不复杂,但是一个右移16位做异或的操作却让我难以理解。为啥要做异或运算?为啥又是右移了16位再做异或运算?我翻遍了百度、知乎,也才笼统的得到一个答案:可能是为了解决哈希冲突。
但是当我向AI请求这段代码的含义时,简简单单就获得了一个清晰易懂的答案。
看到答案的我也不由的惊呼起来,有这等工具加持,我还会怕冗长的Spring框架看不懂吗?我还会害怕自己理解不了繁琐的源码原理吗?
显然,有了这样的工具,对于程序员理解框架、理解内在的实现含义,必然是一大助力。
解读代码模块:
通过对文件夹的索引,能够展示被调用函数的解读
能够帮助我们检测出指定函数调用了其他的拿一些函数
添加接口测试 测试负复杂的业务函数
单元测试 根据代码结构和注释理解了代码逻辑,生成出来的单元测试也是比较完整的覆盖了三个场景,但是生成的代码需要稍微调整后才能运行,极大的可以帮助我们写单元测试提升效能。
自动补全的依据是可以直接写注释方式,或者我们写了“上文”,自动帮我们补充下文;(提示文来自上下文和当前正在写的代码);也可以在我们修改代码时给出比较优雅的处理;
我们在写代码的过程中,会根据上下文和注解提示自动生成下文,有的情况会有多个结果,让我们进行选择,按tab 键进行确认;
Bito 实时学习您的代码,提供多种建议来完成行或块供您选择。在编辑器中使用注释描述功能,并使用 Bito 自动生成代码选项供您选择。Bito 了解您的整个代码库,以确保 AI 生成的代码符合您的编码标准,并与您现有的代码良好集成.当您在编辑器中编写代码时,Bito 使用行业领先的 AI 模型生成高质量的编码建议
人工智能代码完成度有多好?
由于 Bito 熟悉您的整个代码库,因此它可以提供比当今其他人工智能编码助手更准确的代码建议。
例如:
Bito 可以查看您的导入并预测您要尝试完成的任务。
Bito 可以读取您所在的功能并预测您下一步要做什么。
Bito 可以发现您集成的 API 并建议可能的调用端点。
收集上下文后,Bito 使用不同的大型语言模型 (LLM)来提出一些您接下来最有可能想要编写的选项。因此,如果一种解决方案不起作用,您可以尝试更多解决方案。
Bito 提供与您正在处理的代码保持一致的高质量代码补全。但是,如果建议的完成在您的具体情况下不那么准确,您可以编写额外的代码或在注释中提供明确的说明,以帮助 Bito 更好地理解上下文并生成更精确的解决方案。
这个举个演示一个,根据给出的公式来计算结果
请帮写一个函数,函数需要根据公式计算完成率,公式为:v1>0 and v2=0 ,100%;v1<0 and v2=0, 0% , 否则 (v1-v2)/abs(v2)+1 该函数的入参为:(BigDecimal v1,BigDecimal v2) 和公式中的v1,v2进行对应;函数的返回类型为BigDecimal
对于这种带算法属性的函数可以信手拈来;而且还把我没有提示完整的精度给我补全了
我们首先要自己清楚自已要写的函数的目标,以及具体的逻辑,然后给出的出入参说明,特别时入参字段的说明; 当然我们可以根据给出函数目标和参数要素说明,让它自己编写逻辑,或者根据我们的大概逻辑的框架,让他完善具体代码;当然可以在自己写完代码后,我们review 后给出修正建议或者让他自己进行自我纠正
如:
在我的代码 在EarlyWarningBiTriggerServiceImpl.java 文件中,根据该文件的上下文,请帮写一个函数,该函数主要向early_warning_bi_trigger_status 表中新增数据或更新数据,
该函数的入参(List<EarlyWarningBiTriggerStatus> triggerStatus,Long enableTriggerId) 无返回值 void
该函数的目的是,根据入参triggerStatus 去数据表early_warning_bi_trigger_status 根据enableTriggerId,和入参结合中的orgIndicatorId 去查找满足条件的数据行
把存在的数据进行状态更新,不存在的进行新增;如果在early_warning_bi_trigger_status 表中查找不到就将triggerStatus 数据全部插入该表中
生成的代码基本正确,标黄的部分没有加入其中,在代码中就没有体现出来;可见我们要指挥它做事,还是需要把逻辑说完整的;尴尬了,比我写得还要简洁点。。。我还写复杂了;从这个层面来看,它还可以帮助我们扩展思路
基于原有生成的代码补充未完善的逻辑
我们需要将做的功能进行模块化,越小越好;
?示例二:
在我的代码库中,找到这四张表org_organization,org_employee_position,org_position,org_employee;他们之间的关联关系是 (org_organization.id = org_employee_position.organization_id;org_employee_position.employee_id = org_employee.id; org_employee_position.position_id = org_position.id;)
请根据上下文环境和表结构关系,编写一个函数来构建树结构数据(岗位信息根据org_employee_position.position_id = org_position.id 关联关系,查找出来放在对应的org_organization.id 下面,也就是父节点是对应的org_organization.id,岗位下级就是对应的员工信息
根据这个org_employee_position 表找对应的员工信息)函数入参是 org_organization中的id ,函数返回的实体类要包含的字段要有( @ApiModelProperty("树节点ID") private Long id;
?@ApiModelProperty("树节点名称") private String name;
@ApiModelProperty("父节点ID") private Long parentId;
@ApiModelProperty(value = "手机号") private String mobile;
@ApiModelProperty("组织树编码,唯一") private String code;
@ApiModelProperty("组织类型code") private String type;
) 请中文解释回答
进一步修改prompt
生成效果思路是正确的,我们需要验证微调一下就可以了;当然我们可以调整让它多生成几次,调整思路;
注释驱动的编码
在编辑器中使用注释描述功能,并使用 Bito 自动生成代码选项供您选择。接收直接从您自己的代码库中的知识中提取的个性化、上下文感知的答案。用简单的语言提出任何问题,并直接从您的代码库中获得答案。使用它可以快速掌握新代码,找到与功能或错误相关的代码,或了解依赖关系。
如:
·??我的项目中的DateUtils.java 文件中有根据当前是日期查找当前日期所在本月的最后一天的函数吗?
当我们不知道整个工程中我们要用的函数是否存在,可以用自然语言匹配;特别是工具性通用的函数;
·???我的代码库中,有任何代码或脚本在发送电子邮件吗?
提示语用正确 才能进行本地代码的检索
·???在我的代码库中列出了在 EarlyWarningBiTriggerServiceImpl.java 中使用了列出使用了该ruleList对象集合的所有行号
自动完成用于 CRUD 操作、表结构定义、SQL 连接、通配符等的 SQL 查询。您甚至可以要求 Bito 编写更安全的查询来防止 SQL 注入。
给出表结构以及表结构关系,按照要求写出sql
现在有四张表,表结构语句如下:
CREATE TABLE `early_warning_bi_trigger` (
??`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
??`tenant_id` bigint(20) NOT NULL COMMENT '租户ID',
??`warning_name` varchar(255) NOT NULL COMMENT '预警名称',
??`warning_level` char(63) NOT NULL DEFAULT '' COMMENT '预警等级,数据字典EARLYWN',
??`trigger_condition` tinyint(1) NOT NULL COMMENT '触发条件(0满足所有条件,1表示满足任意条件)',
??`warning_way` char(63) DEFAULT NULL COMMENT '预警方式 数据字典WARNINGWAY',
??`creat_employee_id` bigint(20) NOT NULL COMMENT '创建人id',
??`creat_employee_name` varchar(50) NOT NULL COMMENT '创建人名称',
??`create_mobile` char(50) NOT NULL COMMENT '创建人手机号',
??`enabled` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否启用(0表示禁用,1表示启用)',
??`node_type` tinyint(1) NOT NULL COMMENT '节点类型(1表示项目节点,2表示组织节点)',
??`dispatch_response_time` int(11) DEFAULT NULL COMMENT '调度响应时长,单位:分钟',
??`alarm_type` char(63) NOT NULL DEFAULT '' COMMENT '告警类型,数据字典ALARMTYPE',
??`uuid` varchar(63) CHARACTER SET utf8 NOT NULL DEFAULT '' COMMENT '唯一标识',
??`version` int(11) NOT NULL COMMENT '数据版本号',
??`create_time` datetime NOT NULL COMMENT '创建时间',
??`create_by` varchar(63) NOT NULL DEFAULT '' COMMENT '创建人',
??`update_time` datetime NOT NULL COMMENT '修改时间',
??`update_by` varchar(63) NOT NULL DEFAULT '' COMMENT '修改人',
??`delete_flag` bigint(20) NOT NULL DEFAULT '0' COMMENT '是否已经逻辑删除: 0-未删除, 非0-已删除',
??PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COMMENT='预警配置表';
CREATE TABLE `early_warning_bi_trigger_rule` (
??`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
??`tenant_id` bigint(20) NOT NULL COMMENT '租户ID',
??`early_warning_bi_trigger_id` bigint(20) NOT NULL COMMENT '预警配置ID',
??`menu_id` varchar(50) NOT NULL DEFAULT '' COMMENT '菜单ID 最后一级',
??`diagram_id` varchar(50) NOT NULL DEFAULT '' COMMENT '图表ID 最后一级',
??`indicator_id` varchar(50) NOT NULL DEFAULT '' COMMENT '指标ID,最后一级',
??`menu_name` varchar(50) NOT NULL DEFAULT '' COMMENT '菜单名称',
??`indicator_name` varchar(50) NOT NULL DEFAULT '' COMMENT '指标名称',
??`diagram_name` varchar(50) NOT NULL DEFAULT '' COMMENT '图表名称',
??`indicator_type` tinyint(1) NOT NULL COMMENT '指标类型(1数值型,2比例型)',
??`indicator_condition` varchar(63) NOT NULL COMMENT '指标条件(大于-gt、大于等于-ge、小于-lt、小于等于-le、介于-between)',
??`indicator_value1` decimal(20,6) unsigned zerofill NOT NULL DEFAULT '00000000000000.000000' COMMENT '指标数值1',
??`indicator_value2` decimal(20,6) unsigned zerofill NOT NULL DEFAULT '00000000000000.000000' COMMENT '指标数值2',
??`is_covered` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否被覆盖:0 否 ?1 是',
??`org_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '预警范围',
??`org_name` varchar(255) NOT NULL DEFAULT '' COMMENT '预警范围名称',
??`org_type` tinyint(1) NOT NULL COMMENT '类型,1为总部,2为项管中心,3项目',
??`data_type` tinyint(1) NOT NULL COMMENT '数据类型:0为实时数据,1为 t+1 数据 ',
??`create_role_level` tinyint(1) NOT NULL DEFAULT '1' COMMENT '角色等级:1 总部 ?2 项管中心 ?3 项目',
??`version` int(11) NOT NULL COMMENT '数据版本号',
??`create_time` datetime(6) NOT NULL COMMENT '创建时间',
??`create_by` varchar(63) NOT NULL DEFAULT '' COMMENT '创建人',
??`update_time` datetime NOT NULL COMMENT '修改时间',
??`update_by` varchar(63) NOT NULL DEFAULT '' COMMENT '修改人',
??`delete_flag` bigint(20) NOT NULL DEFAULT '0' COMMENT '是否已经逻辑删除: 0-未删除, 非0-已删除',
??PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5352 DEFAULT CHARSET=utf8mb4 COMMENT='预警配置规则表';
CREATE TABLE `early_warning_bi_trigger_employee` (
??`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
??`tenant_id` bigint(20) NOT NULL COMMENT '租户ID',
??`early_warning_bi_trigger_id` bigint(20) NOT NULL COMMENT '预警配置ID',
??`project_id` bigint(20) NOT NULL COMMENT '项目ID',
??`project_name` varchar(63) NOT NULL COMMENT '项目名称',
??`employee_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '员工ID',
??`mobile` varchar(63) NOT NULL DEFAULT '' COMMENT '手机号',
??`employee_name` varchar(63) NOT NULL DEFAULT '' COMMENT '姓名',
??`position_id` bigint(20) NOT NULL COMMENT '岗位ID',
??`position_name` varchar(63) NOT NULL DEFAULT '' COMMENT '岗位名称',
??`version` int(11) NOT NULL COMMENT '数据版本号',
??`create_time` datetime(6) NOT NULL COMMENT '创建时间',
??`create_by` varchar(63) NOT NULL DEFAULT '' COMMENT '创建人',
??`update_time` datetime NOT NULL COMMENT '修改时间',
??`update_by` varchar(63) NOT NULL DEFAULT '' COMMENT '修改人',
??`delete_flag` bigint(20) NOT NULL DEFAULT '0' COMMENT '是否已经逻辑删除: 0-未删除, 非0-已删除',
??PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=779 DEFAULT CHARSET=utf8mb4 COMMENT='预警接收人表';
CREATE TABLE `early_warning_bi_trigger_tosend_message` (
??`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
??`early_warning_bi_trigger_id` bigint(20) NOT NULL COMMENT '预警配置ID',
??`org_id` bigint(20) NOT NULL COMMENT '组织ID',
??`warning_name` varchar(255) NOT NULL COMMENT '预警名称',
??`org_name` varchar(255) NOT NULL DEFAULT '' COMMENT '组织节点名称',
??`menu_id` varchar(50) NOT NULL DEFAULT '' COMMENT '菜单ID 最后一级''',
??`menu_name` varchar(50) NOT NULL DEFAULT '' COMMENT '菜单名称',
??`diagram_id` varchar(50) NOT NULL DEFAULT '' COMMENT '图表ID 最后一级',
??`diagram_name` varchar(50) NOT NULL DEFAULT '' COMMENT '图表名称',
??`indicator_id` varchar(50) NOT NULL DEFAULT '' COMMENT '指标ID,最后一级',
??`indicator_name` varchar(50) NOT NULL DEFAULT '' COMMENT '指标名称',
??`indicator_type` tinyint(1) NOT NULL COMMENT '指标类型(1数值型,2比例型)',
??`indicator_condition` varchar(63) NOT NULL COMMENT '指标条件(大于-gt、大于等于-ge、小于-lt、小于等于-le、介于-between)',
??`indicator_value1` decimal(20,6) NOT NULL DEFAULT '0.000000' COMMENT '指标数值1',
??`indicator_value2` decimal(20,6) NOT NULL DEFAULT '0.000000' COMMENT '指标数值2',
??`real_trigger_value` varchar(255) NOT NULL DEFAULT '' COMMENT '实际触发值',
??`send_time` datetime DEFAULT NULL COMMENT '消息推送时间',
??`is_need_send` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否需要推送 0 否 ?1 是',
??`is_sended` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否推送 0 未推送(已触发) 1 已推送(已触发)',
??`dispatch_task_name` varchar(50) DEFAULT NULL COMMENT '调度任务名称',
??`work_order_status` varchar(30) DEFAULT NULL COMMENT '工单状态',
??`complete_time` datetime DEFAULT NULL COMMENT '工单完成时间',
??`description` varchar(500) DEFAULT NULL COMMENT '工单处理描述',
??`work_order_no` varchar(30) DEFAULT NULL COMMENT '工单编号',
??`task_status` varchar(30) DEFAULT NULL COMMENT '任务状态',
??`trigger_condition` varchar(1024) DEFAULT NULL COMMENT '触发条件',
??`send_message` varchar(1024) DEFAULT NULL COMMENT '预警信息/调度信息',
??`create_time` datetime NOT NULL COMMENT '创建时间(被修改时间)',
??`update_time` datetime NOT NULL COMMENT '修改时间',
??`delete_flag` bigint(20) NOT NULL DEFAULT '0' COMMENT '是否已经逻辑删除: 0-未删除, 非0-已删除',
??PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='触发预警信息待推送送消息';
这四张表的关联关系是 early_warning_bi_trigger.id = early_warning_bi_trigger_rule.early_warning_bi_trigger_id ; ?early_warning_bi_trigger.id = early_warning_bi_trigger_employee.early_warning_bi_trigger_id;
?early_warning_bi_trigger.id ?= early_warning_bi_trigger_tosend_message.early_warning_bi_trigger_id
请帮写一个sql ,查询 预警名称(warning_name) 是 “财务预算预警", 指标名称(indicator_name)是 "车厂收入" ,所有已经触发预警并推送了消息的数据
可以快速帮助我们写sql ,需要把表结构定义好,并且说明好关联关系,最后说明要查询的条件和要求,需要返回的字段有哪些;给出的结果符合要求。我们直接可以执行检验最终的结果;
根据需求信息,自定义表结构:
(直接粘贴的prd原文)
业务需求如下:
当点击新建预警调度后,弹出该弹框进行预警的新建。
在预警&调度类型中选择:仅预警时
包含的字段有
l预警名称:支持中英文输入,最多输入50个字符。
l预警等级:可通过下拉选择,包含一级、二级、三级
l预警方式:支持单选珂多选,包含app、手机短信,基于预警等级的选择,会联动选择预警方式(数据关联逻辑取自数据源录入),也可以在此基础上进行修改,选择其他方式
l预警对象:单选框,分别是项目节点和组织节点,
ü当选择项目节点时:用户可以通过选择总部、或者项管中心以此全选对应的项目,具有传递性,方便批量选择。
ü当选择组织节点时:当用户选择总部时,即,仅预警作用于总部,与次级的项管中心和项目没有关系,不具备传递性。当用户选择项管中心时,即,仅预警作用于选择的项管中心,与次级的项目没有关系,不具备传递性。当用户选择项目名称时,即,仅预警作用于选择的项目。
l预警范围:按基础平台的数据包含总部、项管中心、项目、三个层级以级联的方式进行选择。三个层级分别对应,总部高层、项管总、项目经理三个角色。支持各个层级的独立选择,即可以直接选择总部、或选择到项管中心、或选择到项目。总部角色可以对三个层级进行级联选择,项管总仅拥有项管中心和项目的级联选择,项目经理经理仅拥有项目的下拉选择,做权限控制。当三个层级中,同时对同一个项目或同一个项管的指标进行预警时,以层级高的规则为准,如果层级低的已经完成创建,那么该条规则会被覆盖,被覆盖的内容隐藏,并通知到创建人,通知内容:“在某年某月某日某时某分,您创建的预警名称被新的创建人覆盖,对应的项目名称是:项目名称1、项目名称2、项目名称3、等、指标名称为:****、新的预警名称为:新预警名称”。通知方式默认为app,并且被覆盖的项目及对应的指标 进行置灰展示。
l接收人:接收人为总部高层、项管总、项目经理三个角色对应的用户,数据取自基础数据
l预警菜单:包含、车场数据看板的菜单名称、预警调度看板的菜单名称、以及车场业务报表的名称。后续不断新增业务场景相关的看板和报表名称也会逐项增补在下拉列表
l预警图表:选中菜单下的图表名称,包含但不限于、指标卡、柱状图、折线图、柱状图的名称
l预警触发条件:支持多条件同时满足和单条件设置,多条件最多支持3种,
?请选择指标:基于选定的图表下,在指标名称下拉框中,自动展示对应图表相关的指标。
?请选择条件:条件包含大于、大于等于、小于、小于等于、介于
?请输入指标值:根据指标名称的选择进行校验,
ü当指标名称选择数值型指标时,如:实际值、预算值,在输入框中,直接填数据即可,默认保留2位小数,
ü当指标名称选择比例型指标时,如:预算完成率、同比、环比,输入框后面默认回显百分比,如图:
ü当条件选择介于时,回显出两个输入框,中间以~分隔,以便用户输入数值区间。
ü如果是比例型指标,如图:
ü如果是数值型指标,如图:
当完成创建,并触发了预警后,对接收人发出以下信息:
预警信息
指标监控名称:预警名称
截至检测时间,您关注的指标名称,触发了预警,预警条件为:在作用项目,触发条件,请及时关注
指标来源:来源报表、来源图表
请根据业务需求,设计出对应的表结构;如果是多张表,请标明表之间的关系
强大,可以快速帮助我们设计表结构,虽然字段还不够完整,需要我们去核对和完善,(当让prd上的信息也不够太完善导致的),但是可以快速帮助我们提供设计思路 ,设计字段的数据类型也基本正确,我们只需要根据具体的要求进行微调即可。
3 在维护内部信息化时,帮助我们编写update 语句 和 insert 语句;
当我们2个数据库的类型不一致 需要根据班次名称 关联 更新班次id
帮写update 语句,提升维护效率;凡是人工做的重复劳动,且具有一定逻辑规律,ai 都能帮你完成。
信息维护:
EHR中班次新增之后,找到EHR数据库中的kq_class(班次表),根据此班次的名称去保利内部信息化数据库中找到kq_class_dd(钉钉班次表),拿到此班次的class_id(此id为钉钉的班次id),将EHR数据库kq_class表中的class_id修改为此id(每个班次大约需要5分钟)
kq_class_dd(钉钉班次表)的class_id 和 name 字段名和值
class_id name
1088484792 2024安保行政班次A
1088504725 2024工程类班次A
1088564455 2024工程类班次5
1088564458 2024安保类班次3
1088564475 2024工程类班次B
1088584353 2024安保类早班3
1088584358 2024安保类转班A4
1088604426 2024客服类早班
1088644389 2024安保类转班B2
1088664357 2024安保类转班A2
1088664358 2024客服类晚班
1088664389 2024工程类早班
1088724210 2024安保类晚班
1088724247 2024客服班次2
1088743966 2024工程类班次7
1088744033 2024客服班次1
1092660381 2024工程类中班2
1166639426 2024安保类晚班3
1166679454 2024安保类早班
1167889977 2024工程类晚班3
1167969552 2024安保行政班次B
1167989566 2024安保类班次2
1167989624 2024安保类班次4
1167989626 2024安保类晚班2
1168069245 2024安保类转班A
1168069269 2024安保类转班B3
1168069276 2024行政班次B
1168089277 2024安保类早班2
1168089300 2024工程类班次1
1168109239 2024客服类班次4
1168109265 2024工程类班次6
1168129251 2024工程类晚班2
1173774508 2024工程类班次3
1173774512 2024行政班次A
1173814356 2024安保类班次1
1173854367 2024工程类班次4
1173854374 2024工程类班次2
1173854382 2024工程类晚班
1173914448 2024客服类中班
1173914469 2024客服班次3
1173934211 2024安保类转班B
1173934233 2024客服班次4
1173974109 2024工程类中班
1177970295 2024安保类转班A3
kq_class表中的class_id ?和 name 字段名和值
class_id name
504 2024安保类班次4
505 2024安保类转班B4
508 2024安保类转班A5
509 2024安保类晚班4
511 2024安保类早班4
1088484792 2024安保行政班次A
1088504725 2024工程类班次A
1088564455 2024工程类班次5
1088564458 2024安保类班次3
1088564475 2024工程类班次B
1088584353 2024安保类早班3
1088584358 2024安保类转班A4
1088604426 2024客服类早班
1088644389 2024安保类转班B2
1088664357 2024安保类转班A2
1088664358 2024客服类晚班
1088664389 2024工程类早班
1088724210 2024安保类晚班
1088724247 2024客服班次2
1088743966 2024工程类班次7
1088744033 2024客服班次1
1092660381 2024工程类中班2
1166639426 2024安保类晚班3
1166679454 2024安保类早班
1167889977 2024工程类晚班3
1167969552 2024安保行政班次B
1167989566 2024安保类班次2
1167989626 2024安保类晚班2
1168069245 2024安保类转班A
1168069269 2024安保类转班B3
1168069276 2024行政班次B
1168089277 2024安保类早班2
1168089300 2024工程类班次1
1168109239 2024客服类班次4
1168109265 2024工程类班次6
1168129251 2024工程类晚班2
1173774508 2024工程类班次3
1173774512 2024行政班次A
1173814356 2024安保类班次1
1173854367 2024工程类班次4
1173854374 2024工程类班次2
1173854382 2024工程类晚班
1173914448 2024客服类中班
1173914469 2024客服班次3
1173934211 2024安保类转班B
1173934233 2024客服班次4
1173974109 2024工程类中班
1177970295 2024安保类转班A3
这里有2组数据 kq_class_dd(钉钉班次表)和kq_class表 中的数据(这2个表属于不同的数据库中);
现在 需要帮助识别出 kq_class_dd.name = kq_class.name ?去匹配 kq_class_dd 中对应的class_id
为kq_class表 写update 语句,将kq_class 表中的 class_id 更新为 kq_class_dd.class_id
批量写出这48条update 语句
?以一组数据为标准,进行数据比对;帮我们写批量更新数据
以日志数据为依据,帮助我们生成insert 语句,将驼峰数据转为 下划线的字段数据。
一类的问题放在一个session 中,有问题记录功能 上下文
在我的代码中列出在表early_warning_bi_trigger_rule?中添加列
?`menu_type` varchar(50) NOT NULL DEFAULT '' COMMENT '菜单类型',所需的所有文件和代码更改
能够列举一部分,但是还是不够全面;需要人工核对
帮助我们提升代码质量和代码性能
由于检索的是git 仓库的代码,这里模拟逻辑漏洞的检测和修复前,需要将有逻辑漏洞的代码提交git
原有的代码:
改造后的代码:
?标红的部分都动了手脚;现在让ai 帮我们检测:
请注意,我假设了 org_employee_project?表和 org_project 表之间通过 project_id 进行连接,你需要根据实际数据库结构进行调整。另外,如果 name 字段经常用于搜索且数据量很大,你可能需要考虑全文搜索或其他搜索优化策略来替代 LIKE 查询。
代码格式检测,把刚才故意挖坑基本展示出来了
代码安全检查:这个个很到位,一次性把坑都填了
总结:对于代码的格式 安全 和性能的检测使用Bito内置的template Prompt 效果会更好。
????????这种拆分方法的方式可以使主逻辑更加清晰,同时提高了代码的复用性。代码重构不仅仅是体现在方法的切分上;
代码重构
在我的代码区中建议对 api.java?进行代码重构,并提及需要相应更新的所有其他文件.
1 根据多表结构生成测试数据
现在有四张表,表结构语句如下:
CREATE TABLE `early_warning_bi_trigger` (
??`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
??`tenant_id` bigint(20) NOT NULL COMMENT '租户ID',
??`warning_name` varchar(255) NOT NULL COMMENT '预警名称',
??`warning_level` char(63) NOT NULL DEFAULT '' COMMENT '预警等级,数据字典EARLYWN',
??`trigger_condition` tinyint(1) NOT NULL COMMENT '触发条件(0满足所有条件,1表示满足任意条件)',
??`warning_way` char(63) DEFAULT NULL COMMENT '预警方式 数据字典WARNINGWAY',
??`creat_employee_id` bigint(20) NOT NULL COMMENT '创建人id',
??`creat_employee_name` varchar(50) NOT NULL COMMENT '创建人名称',
??`create_mobile` char(50) NOT NULL COMMENT '创建人手机号',
??`enabled` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否启用(0表示禁用,1表示启用)',
??`node_type` tinyint(1) NOT NULL COMMENT '节点类型(1表示项目节点,2表示组织节点)',
??`dispatch_response_time` int(11) DEFAULT NULL COMMENT '调度响应时长,单位:分钟',
??`alarm_type` char(63) NOT NULL DEFAULT '' COMMENT '告警类型,数据字典ALARMTYPE',
??`uuid` varchar(63) CHARACTER SET utf8 NOT NULL DEFAULT '' COMMENT '唯一标识',
??`version` int(11) NOT NULL COMMENT '数据版本号',
??`create_time` datetime NOT NULL COMMENT '创建时间',
??`create_by` varchar(63) NOT NULL DEFAULT '' COMMENT '创建人',
??`update_time` datetime NOT NULL COMMENT '修改时间',
??`update_by` varchar(63) NOT NULL DEFAULT '' COMMENT '修改人',
??`delete_flag` bigint(20) NOT NULL DEFAULT '0' COMMENT '是否已经逻辑删除: 0-未删除, 非0-已删除',
??PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COMMENT='预警配置表';
CREATE TABLE `early_warning_bi_trigger_rule` (
??`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
??`tenant_id` bigint(20) NOT NULL COMMENT '租户ID',
??`early_warning_bi_trigger_id` bigint(20) NOT NULL COMMENT '预警配置ID',
??`menu_id` varchar(50) NOT NULL DEFAULT '' COMMENT '菜单ID 最后一级',
??`diagram_id` varchar(50) NOT NULL DEFAULT '' COMMENT '图表ID 最后一级',
??`indicator_id` varchar(50) NOT NULL DEFAULT '' COMMENT '指标ID,最后一级',
??`menu_name` varchar(50) NOT NULL DEFAULT '' COMMENT '菜单名称',
??`indicator_name` varchar(50) NOT NULL DEFAULT '' COMMENT '指标名称',
??`diagram_name` varchar(50) NOT NULL DEFAULT '' COMMENT '图表名称',
??`indicator_type` tinyint(1) NOT NULL COMMENT '指标类型(1数值型,2比例型)',
??`indicator_condition` varchar(63) NOT NULL COMMENT '指标条件(大于-gt、大于等于-ge、小于-lt、小于等于-le、介于-between)',
??`indicator_value1` decimal(20,6) unsigned zerofill NOT NULL DEFAULT '00000000000000.000000' COMMENT '指标数值1',
??`indicator_value2` decimal(20,6) unsigned zerofill NOT NULL DEFAULT '00000000000000.000000' COMMENT '指标数值2',
??`is_covered` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否被覆盖:0 否 ?1 是',
??`org_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '预警范围',
??`org_name` varchar(255) NOT NULL DEFAULT '' COMMENT '预警范围名称',
??`org_type` tinyint(1) NOT NULL COMMENT '类型,1为总部,2为项管中心,3项目',
??`data_type` tinyint(1) NOT NULL COMMENT '数据类型:0为实时数据,1为 t+1 数据 ',
??`create_role_level` tinyint(1) NOT NULL DEFAULT '1' COMMENT '角色等级:1 总部 ?2 项管中心 ?3 项目',
??`version` int(11) NOT NULL COMMENT '数据版本号',
??`create_time` datetime(6) NOT NULL COMMENT '创建时间',
??`create_by` varchar(63) NOT NULL DEFAULT '' COMMENT '创建人',
??`update_time` datetime NOT NULL COMMENT '修改时间',
??`update_by` varchar(63) NOT NULL DEFAULT '' COMMENT '修改人',
??`delete_flag` bigint(20) NOT NULL DEFAULT '0' COMMENT '是否已经逻辑删除: 0-未删除, 非0-已删除',
??PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5352 DEFAULT CHARSET=utf8mb4 COMMENT='预警配置规则表';
CREATE TABLE `early_warning_bi_trigger_employee` (
??`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
??`tenant_id` bigint(20) NOT NULL COMMENT '租户ID',
??`early_warning_bi_trigger_id` bigint(20) NOT NULL COMMENT '预警配置ID',
??`project_id` bigint(20) NOT NULL COMMENT '项目ID',
??`project_name` varchar(63) NOT NULL COMMENT '项目名称',
??`employee_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '员工ID',
??`mobile` varchar(63) NOT NULL DEFAULT '' COMMENT '手机号',
??`employee_name` varchar(63) NOT NULL DEFAULT '' COMMENT '姓名',
??`position_id` bigint(20) NOT NULL COMMENT '岗位ID',
??`position_name` varchar(63) NOT NULL DEFAULT '' COMMENT '岗位名称',
??`version` int(11) NOT NULL COMMENT '数据版本号',
??`create_time` datetime(6) NOT NULL COMMENT '创建时间',
??`create_by` varchar(63) NOT NULL DEFAULT '' COMMENT '创建人',
??`update_time` datetime NOT NULL COMMENT '修改时间',
??`update_by` varchar(63) NOT NULL DEFAULT '' COMMENT '修改人',
??`delete_flag` bigint(20) NOT NULL DEFAULT '0' COMMENT '是否已经逻辑删除: 0-未删除, 非0-已删除',
??PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=779 DEFAULT CHARSET=utf8mb4 COMMENT='预警接收人表';
CREATE TABLE `early_warning_bi_trigger_tosend_message` (
??`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
??`early_warning_bi_trigger_id` bigint(20) NOT NULL COMMENT '预警配置ID',
??`org_id` bigint(20) NOT NULL COMMENT '组织ID',
??`warning_name` varchar(255) NOT NULL COMMENT '预警名称',
??`org_name` varchar(255) NOT NULL DEFAULT '' COMMENT '组织节点名称',
??`menu_id` varchar(50) NOT NULL DEFAULT '' COMMENT '菜单ID 最后一级''',
??`menu_name` varchar(50) NOT NULL DEFAULT '' COMMENT '菜单名称',
??`diagram_id` varchar(50) NOT NULL DEFAULT '' COMMENT '图表ID 最后一级',
??`diagram_name` varchar(50) NOT NULL DEFAULT '' COMMENT '图表名称',
??`indicator_id` varchar(50) NOT NULL DEFAULT '' COMMENT '指标ID,最后一级',
??`indicator_name` varchar(50) NOT NULL DEFAULT '' COMMENT '指标名称',
??`indicator_type` tinyint(1) NOT NULL COMMENT '指标类型(1数值型,2比例型)',
??`indicator_condition` varchar(63) NOT NULL COMMENT '指标条件(大于-gt、大于等于-ge、小于-lt、小于等于-le、介于-between)',
??`indicator_value1` decimal(20,6) NOT NULL DEFAULT '0.000000' COMMENT '指标数值1',
??`indicator_value2` decimal(20,6) NOT NULL DEFAULT '0.000000' COMMENT '指标数值2',
??`real_trigger_value` varchar(255) NOT NULL DEFAULT '' COMMENT '实际触发值',
??`send_time` datetime DEFAULT NULL COMMENT '消息推送时间',
??`is_need_send` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否需要推送 0 否 ?1 是',
??`is_sended` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否推送 0 未推送(已触发) 1 已推送(已触发)',
??`dispatch_task_name` varchar(50) DEFAULT NULL COMMENT '调度任务名称',
??`work_order_status` varchar(30) DEFAULT NULL COMMENT '工单状态',
??`complete_time` datetime DEFAULT NULL COMMENT '工单完成时间',
??`description` varchar(500) DEFAULT NULL COMMENT '工单处理描述',
??`work_order_no` varchar(30) DEFAULT NULL COMMENT '工单编号',
??`task_status` varchar(30) DEFAULT NULL COMMENT '任务状态',
??`trigger_condition` varchar(1024) DEFAULT NULL COMMENT '触发条件',
??`send_message` varchar(1024) DEFAULT NULL COMMENT '预警信息/调度信息',
??`create_time` datetime NOT NULL COMMENT '创建时间(被修改时间)',
??`update_time` datetime NOT NULL COMMENT '修改时间',
??`delete_flag` bigint(20) NOT NULL DEFAULT '0' COMMENT '是否已经逻辑删除: 0-未删除, 非0-已删除',
??PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='触发预警信息待推送送消息';
这四张表的关联关系是 early_warning_bi_trigger.id = early_warning_bi_trigger_rule.early_warning_bi_trigger_id ; ?early_warning_bi_trigger.id = early_warning_bi_trigger_employee.early_warning_bi_trigger_id;
?early_warning_bi_trigger.id ?= early_warning_bi_trigger_tosend_message.early_warning_bi_trigger_id
请为这四张表 生成不少于100 条测试数据,生成为 insert 语句,注意表结构直接的关联关系
轻松生成,对于个别字段的comment 我们要说明清楚;生成的数据会更加准确;
2 ?根据接口生成测试数据
请根据一下json 格式数据要求 ,填充测试数据,用于接口访问
{
??"data": [
????{
??????"alarmType": "string",
??????"diagramId": "string",
??????"diagramName": "string",
??????"dispatchResponseTime": 0,
??????"id": 0,
??????"indicatorNodes": [
????????{
??????????"dataType": 0,
??????????"id": 0,
??????????"indicatorCondition": "string",
??????????"indicatorId": "string",
??????????"indicatorName": "string",
??????????"indicatorType": 0,
??????????"indicatorValue1": 0,
??????????"indicatorValue2": 0
????????}
??????],
??????"menuId": "string",
??????"menuName": "string",
??????"nodeType": 0,
??????"orgIds": [
????????{
??????????"id": 0,
??????????"orgId": 0,
??????????"orgName": "string",
??????????"type": 0
????????}
??????],
??????"triggerCondition": 0,
??????"uuid": "string",
??????"warningAccepters": [
????????{
??????????"employeeId": 0,
??????????"employeeName": "string",
??????????"id": 0,
??????????"mobile": "string",
??????????"positionId": 0,
??????????"positionName": "string"
????????}
??????],
??????"warningLevelCode": "string",
??????"warningName": "string",
??????"warningWayCodes": [
????????"string"
??????]
????}
??]
}
当我们写完接口后,需要自测接口,对于接口中需要输入大量参数的接口,为了提高输入效率,我们可以 使用Bito 来提升效率
问题:
CREATE TABLE `early_warning_bi_trigger` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID', `tenant_id` bigint(20) NOT NULL COMMENT '租户ID', `warning_name` varchar(255) NOT NULL COMMENT '预警名称', `warning_level` char(63) NOT NULL DEFAULT '' COMMENT '预警等级,数据字典EARLYWN', `trigger_condition` tinyint(1) NOT NULL COMMENT '触发条件(0满足所有条件,1表示满足任意条件)', `warning_way` char(63) DEFAULT NULL COMMENT '预警方式 数据字典WARNINGWAY', `creat_employee_id` bigint(20) NOT NULL COMMENT '创建人id', `creat_employee_name` varchar(50) NOT NULL COMMENT '创建人名称', `create_mobile` char(50) NOT NULL COMMENT '创建人手机号', `enabled` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否启用(0表示禁用,1表示启用)', `node_type` tinyint(1) NOT NULL COMMENT '节点类型(1表示项目节点,2表示组织节点)', `dispatch_response_time` int(11) DEFAULT NULL COMMENT '调度响应时长,单位:分钟', `alarm_type` char(63) NOT NULL DEFAULT '' COMMENT '告警类型,数据字典ALARMTYPE', `uuid` varchar(63) CHARACTER SET utf8 NOT NULL DEFAULT '' COMMENT '唯一标识', `version` int(11) NOT NULL COMMENT '数据版本号', `create_time` datetime NOT NULL COMMENT '创建时间', `create_by` varchar(63) NOT NULL DEFAULT '' COMMENT '创建人', `update_time` datetime NOT NULL COMMENT '修改时间', `update_by` varchar(63) NOT NULL DEFAULT '' COMMENT '修改人', `delete_flag` bigint(20) NOT NULL DEFAULT '0' COMMENT '是否已经逻辑删除: 0-未删除, 非0-已删除', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COMMENT='预警配置表'; 请根据该表结构 生成对应的 OOP 样板代码(类、属性、方法)
将终端中的任何错误扔到 Bito 聊天中并要求 Bito 进行解释,并重写代码来处理错误,再次运行代码,得到一个新的错误,然后再次将其扔进Bito以修复下一个错误;
这些bito 都是自己内置的提示模板; 如下图:
将选中的代码进行询问,性能检测
安全检测:
代码风格:
轻松帮助我们进行代码review Code ,拓展我们思路,有助于提升代码的质量
很好的组织语言来节省时间
Bito 了解世界知识,了解您的代码 - 向它询问有关您的代码的任何问题,如何设计某些东西,如何做某些事情等等......
要求提供命令语法,例如“git 命令使用选项标志进行变基”
“给我建议如何设计一个可以查询数百个城市天气并且不会挂起的模块”
创建、保存和运行您的个性化提示模板,以获得定制的 AI 体验。使用宏在模板中插入选定的代码,构建您自己的AI工作流程
https://docs.bito.ai/templates/custom-prompt-templates
创建有效的提示是高质量人工智能响应的关键。探索 Prompthub,获取由 Bito 团队和我们充满活力的社区创建的基本指南和一系列以开发人员为中心的提示。