关于销帮帮签订时间与开始时间错误的批量处理工具

开发背景

在使用销帮帮的时候错误的将签订时间和开始时间弄错了,造成开始时间是正确的签订时间,签订时间是正确的开始时间。在2020年前需要把错误数据处理掉。

解决方案

方案一:可以通过导入导出功能,把数据导出来,然后更新字段后重新导入进去。

缺点:由于有同名的人员,销帮帮的导入不能正确处理同名的人员信息,所以该方案否决。

方案二:通过销帮帮API更新数据,通过咨询销帮帮的相关技术负责人,确定更新时,不需要拿到所有的数据,更新那个字段就修改那个字段即可,类似于SQL:

Update Table Set Field1=Value1 where ID=1 的格式。感觉可行

中间遇到的问题:通过接口API测试时,发现如果修改了字段后,会重新走审批流程。确定这是API的错误,销帮帮会修改该问题。

由于时间紧张,而销帮帮的问题修复需要时间,所以暂时把签订、开始时间从审批中去掉解决该问题。 确定方案可行

方案三:通过模拟修改数据,可以通过抓包模拟正常操作进行数据修改

缺点:1、需要知道所有的字段,然后更新的时候也要更新所有的字段。不能实现类似Update Table Set Field=Value Where ID=1 格式的修改

2、 需要实现查询、数据分析、然后更新 抓包比APi复杂。不采用该方法。

开发逻辑

通过【合同订单列表接口】抓取合同的列表信息

在抓取合同列表信息时发现的问题

1、 隐藏的字段是不显示的,虽然这些字段在审批时会用到,但是依然不显示。

2、 技术问题:由于数据是Json格式的,不想写个固定的类,然后NewtonSoft去转换,采用了dynamic 类型,只要找到自己要的几个字段即可。

3、 为了试试技术能力,还特意想吧Json的所有的字段都采集下来,然后整理成一张SQL表,方便查询所有的数据。Json的dynamic后只有JArray/JObject/JValue/JProperty 4中类型,根据4种类型遍历 然后整理成 Key=Value类型的数据存储到一张表里即可。根据需要列转行即可。

4、 为了确定数据处理过,准备一张表保存已经处理过的数据,保证不重复处理。

5、 为了省事,还专门准备了Dapper进行数据库处理,在处理过程中发现Dapper对数据库的批量入库并不友好。自己又写了个SQLBulkCopy 来进行批量入库,开始的时候10条/秒的速度入库,后来读完即可完成入库。总共468083条数据,好庆幸写了SQLBulkCopy 否则不知道采集一次到什么时候了。

软件使用教程

习惯了VS开发各种工具,所以还是使用C#+SQLServer开发

以前作爬虫留下的习惯,所有的方法只完成一个功能,数据通过队列进行中转,比如采集只需要把数据采集下来,然后分析的另起线程进行分析,数据分析完后,有专门的线程进行保存入库,有专门的队列保存执行日志,专门的线程显示日志。

1、 采集合同列表信息

首先点击按钮开始,按照分页采集合同列表信息,如下图。等待提示全部采集完成后,开始分析数据

2、 数据分析

通过SQL初始化合同信息基本信息,ID,编号,通过【更新到数据库】按钮整理需要的字段到合同表中。

在销帮帮字段名称、数据库字段名称中输入需要转换的字段名称,选择字段类型,如果是字符串,直接复制;如果是时间类型,则转换为标准的年-月-日 时:分:秒格式的数据;如果是枚举类型,则根据枚举值获取枚举描述信息。

3、 数据分析后,会把需要把数据都整理到合同表中

4、 数据处理更新到销帮帮

数据处理可以分为批量数据处理、单条数据处理。根据已经采集到数据库的信息进行批量的销帮帮数据更新,更新后在对应的表中保存已修改状态,防止重复修改。并在销帮帮新增系统备注字段标识:已经处理 2步验证 防止重复修改。

为了快熟处理特定条目的数据,可以通过【更新时间到销帮帮】按钮单条修改合同信息,在上面的文本框输入合同编号,然后点击下方的【更新时间到销帮帮】按钮更新单条合同信息。

总结

通过这次小工具的开发,感觉还是没有准备好各种基础工具类,包括ORM标准类,日志处理标准类、Http采集标准类等。

唯一有点挑战的也就是系统标准化、枚举匹配、递归函数处理。

这次的Json处理,感觉NOSQL越来越近了,很多东西都不能通过关系型数据库关联起来了。如果非要关联起来会非常的麻烦,比如这次的合同表就有合同基本信息、模版信息、负责人、协同人、附件等信息整个而成。如果整理成关系型数据库最少得4张表。

各有优劣吧

原文地址:https://www.cnblogs.com/wenqingluomo/p/12133138.html

时间: 2024-10-12 13:46:03

关于销帮帮签订时间与开始时间错误的批量处理工具的相关文章

sqoop导入数据时间日期类型错误

一个问题困扰了很久,用sqoop import从mysql数据库导入到HDFS中的时候一直报错,最后才发现是一个时间日期类型的非法值导致. hive只支持timestamp类型,而mysql中的日期类型是datetime, 当datetime的值为0000-00-00 00:00:00的时候,sqoop import成功,但是在hive中执行select语句查询该字段的时候报错. 解决方法是在创建hive表时用string字段类型. sqoop导入数据时间日期类型错误,布布扣,bubuko.co

ORA-02266错误的批量生成脚本解决方案

原文:ORA-02266错误的批量生成脚本解决方案 ORA-02266: unique/primary keys in table referenced by enabled foreign keys这篇博客是很早之前总结的一篇文章,最近导数时使用TRUNCATE清理主表数据又遇到了这个错误,发现还有其它解决方案: a) 禁用与主表相关的外键约束 b) TRUNCATE TABLE c) 启用那些外键约束. 在实际操作中,发现使用上面的流程操作虽然正确,但是要写很多脚本,有些主表中的字段可能是多

linux部署时间服务器出现错误no server suitable for synchronization found

一台centos最小化安装的机器,yum -y install ntpdate安装ntpdate同步时间.执行ntpdate time.nist.gov,无法与服务器同步时间,并出现以下错误:ntpdate[1897]: no server suitable for synchronization found 执行:ntpdate -d time.nist.gov命令调试的时候,打印结果如下: ntpdate[1976]: ntpdate [email protected] Mon Feb  6

设置两个WdatePicker的开始时间小于结束时间,结束时间大于开始时间

contract_start_date_id为开始时间ID contract_end_date_id为结束时间ID $("#contract_start_date_id").bind("click focus", function () { var endtimeTf = $dp.$('contract_end_date_id'); WdatePicker({ //skin: dateSkin, maxDate: '#F{$dp.$D(\'contract_end_

element-ui date-picker 设置结束时间大于等于开始时间且开始时间小于等于结束时间

Part.1  问题 date-picker 组件在使用时,默认对时间是没有限制的,可以随便选择区间,官方文档添加了快捷选项,如:一周丶一月... 但是从用户体验方面出发,我们还是希望对时间进行有利的把控,如 我们的开始时间选定后,结束时间的可选区间应该大于或者等于开始时间,反之同理 Part.2  实现 HTML <el-date-picker v-model="startTime" type="datetime" placeholder="开始日

Problem B: 时间类的错误数据处理

Description 封装一个时间类Time,用于时间处理的相关功能,支持以下操作: 1. Time::Time()无参构造方法. 2. Time::Time(int,int,int)构造方法:传递时分秒的三个参数构造对象. 3. Time::Time(const T&)拷贝构造方法. 4. 成员读函数: Time::hour()  :返回Time的小时数: Time::minute():返回Time的分钟数: Time::second():返回Time的秒数. 5. 成员写函数: Time:

mysql 5.1超过默认8小时空闲时间解决办法(错误:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure)

报错: MySQL第二天早上第一次连接超时报错, com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure 原因: 上述问题是由mysql5数据库的配置引起的.mysql5将其连接的等待时间(wait_timeout .interactive_timeout)缺省为8小时.在其客户程序中可以这样来查看其值: mysql> show global variables like 'wait

服务器时间和时区错误引起的mysql数据统计出错

运营那边说,后台获取的数据,时间都不准确了,立马找到运维这边,程序那边也给我这边提供了一个线索,就是在mysql里面执行了 SELECT from_unixtime(1476883657); 显示的时间并不是北京时间.因为最近刚把mysql搬到了香港,需要都按照北京时间来设置服务器时间. 先看了下服务器的系统时间 date Thu Oct 20 13:54:12 EDT 2016 时间确实不正确,设置下系统时间 date -s "2016-10-20 14:41:31" 写入cmos

bootstrap 的 datetimepicker 结束时间大于开始时间

web的时间js控件,在管理性的项目中频繁用到,总结了一些用到的知识,分享出来,供以后学习: 1.首先引用资源包: bootstrap基础资源包: bootstrap.min.css .bootstrap-responsive.min.css.style.css.jquery-1.10.1.min.js. datetimepicker资源包: bootstrap-datetimepicker.min.css.bootstrap-datetimepicker.min.js.bootstrap-da