来源

所在部门领导答应另一个部门领导解决业务上的一些问题,刚好是我负责。由于各总原因,没过试用期,领导需要我离职了,跟另一个部门领导确认后,就在离职前 2 天加个班,交付了已经完成的部分。

大概 2 个月后,前同事找我,说要继续做剩下的部分。

项目内容

其实就是把已经在用的 ERP ( Oracle 数据库) 对接简道云的 API,包括推送数据到简道云和从简道云接收表单数据两个部分,而 ERP 这块是没有源代码进行二次开发的,只能修改下数据库存储过程。

由于时间限制,在职时交付的代码主要目的是验证可行性,完成剩余部分的功能需要做一些重构。做了一个分两阶段交付的计划,首先是重构基础代码,再来交付添加新功能的代码。

数据推送

之前有做过一个 Laravel 项目,用的 Laravel Queue 加上数据库作为队列存储。因为 Lavael Queue 的实现是轮询表,然后代码维护了队列各种逻辑,觉得不够优雅 :doge:,加上这次需要用 Python 来实现,所以要另找办法。

仔细查了 Oracle 的官方文档之后发现有个 Advanced Queue 功能,另外还顺便查了下 SQL Server 的 Service Broken 也有个 Message Queue,并且两者都有 CDC 功能。因为不需要收集所有变化的数据,所以就不用 CDC 了。

实现思路是由存储过程将定义好结构的 Message Object push 到 Queue,python 代码获取,并转换结构,推送到指定的 API。整个过程是异步的,不会增加事务耗时,队列的有序、可靠性、重试直接用数据库自带机制就能实现。

坑总是避不掉的,这里新旧坑都说一下。

数据库时区

数据库用的是 UTC+0 时区,但 ERP 客户端应用处理业务数据都是把时间当本地时间看的,也就是整个 ERP 系统的时间其实是错的,还不能去修正。

长连接无法保持

本来 Advanced Queue 是可以做成监听模式,但是我发现无法保持长连接,并且还不会报错!问了下才知道,服务器那边数据库实例随时可能会重启之类的。没办法,改成轮询模式,并且每次都主动打开关闭连接。因为简道云 API 的请求频率限制,性能影响这点可以忽略。

部署到 Windows

开始做的时候说了是要部署到 Linux,结果临交付了说要弄到 Windows 上。

Windows 服务器(附带 360 全家桶)根本就没更新过,缺少 VC++ 库需要的补丁,安装不了 Python3.6 依赖的 VC++ 库,运行不了 Python3.6 !考虑直接使用系统更新功能需要安装的补丁太多,怕更新失败服务器就起不来,只能查补丁依赖列表,手动安装 VC++ 库需要的补丁。

简道云 API 更新了

准备验收结款了,简道云 API 更新了:doge:,不过不是兼容问题,只是增加了部门成员查询接口。最开始做的时候,随口说过的话把自己坑了——这个功能是 API 不支持,否则肯定给你们做。

加了个部门成员信息定时同步到本地数据库的功能,然后我觉得反正做都做了,就再加了个企业微信通知推送报错信息,后面出问题好查一些。

结果

因为自己也觉得应该把之前的事情做完,预计 5 个工作日,不会很肝,所以报价 3000,最终交付完成总计 3 周(仅工作日)。

超期的原因:

拯救艾泽拉斯

各个阶段交付时不能影响正在运行的业务,反馈需要有等待时间

需求变化

需求增加

总结

术士不配拯救艾泽拉斯(已 A )

下次别给自己加戏了,吃饭要紧

事后

抽空重构了一个版本,加上了 SQL Server 的支持,不过总的来说实际意义不大,毕竟应用场景太小众,而收集分析数据 CDC 方式更合适。另外还可以 Message Queue 触发存储过程实现一些业务,或者单机实现异步执行存储过程,不过互联网应用应该是不存在对数据库编程强依赖的场景,依旧用处不大。

不过如果你刚好有 SQL Server 或者 Oracle 需要通过数据库触发 API 之类的需求,还是可以参考一下的。

接oracle私活价格,也来记录一下第一次接私活的体验相关推荐

  1. 我第一次接私活,就被骗了···

    低代码开发平台(Low Code Development Plat,LCDP)是无需编写代码或通过少量代码就可以快速生成应用程序的开发平台.由于采用了可视化的编程方式,因此开发人员无需掌握专业的编程技 ...

  2. 程序员第一次接私活?记住这三点让你事半功倍

    不少程序员都有接私活的想法,但恰恰就如开发者之间的论调一样,接私活其实是有一定难度的,想找到合适的单子,顺利地做完并拿到薪水,需要注意的事儿很多,接下来和大家分享一下,程序员第一次接私活需要注意的一些 ...

  3. oracle distinct关键字过滤掉重复记录

    为什么80%的码农都做不了架构师?>>>    oracle distinct关键字过滤掉重复记录  distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用 它来返回 ...

  4. 【Oracle RAC+DG实验】Oracle RAC+ASM+DataGuard配置实验记录+常见问题

    [Oracle RAC+DG实验]Oracle RAC+ASM+DataGuard配置实验记录+常见问题 1.环境规划: ---RAC环境介绍(primary database)            ...

  5. oracle 查找不重复的数据,oracle不用distinct查找不重复记录和删除重复记录

    1.oracle中怎么不用distinct查找不重复记录,users表有字段userid,username,password? 答: 第一种方法: select userid,username,pas ...

  6. linux数据库12c安装图解,Linux + Oracle 12c RAC安装配置详细记录过程_图文并茂.pdf

    Linux +Oracle12cRAC安装配置详细记录过程_图文并茂_v1.0 Version:<1.0> Linux +Oracle12cRAC安装配置详细记录过程_图文并茂_v1.0 ...

  7. python入门可以接私活_第一次接私活亲身经历

    前提 我相信很多人都接过私活,我想把我的接私活的经历说下,希望能帮助更多的园友,引以为戒,在这个项目中我也有很多原因,再次自我检讨(希望通过每次自我反省能更好的完善自己),好了 说主题.在3月19号通 ...

  8. Oracle如何删除表中重复记录

    1  引言 在对数据库进行操作过程中我们可能会遇到这种情况,表中的数据可能重复出现,使我们对数据库的操作过程中带来读诸多不便,那么怎么删除这些重复没有用的数据呢? 平时工作中可能会遇到当试图对库表中的 ...

  9. oracle审计日志在哪,Oracle EBS 应用用户审计日志记录

    Oracle EBS已经存在表fnd_logins,可以通过设置配置文件对Oracle EBS用户登录行为进行记录,但默认没有打开. 默认情况下该表已经有大量的记录了,类型为Concurrent,猜测 ...

最新文章

  1. linux awk语法格式,Awk是什么?一文带运维小白快速掌握Linux Awk用法
  2. css图片过大,CSS解决图片过大撑破DIV的方法
  3. 一个Mapreduce案例
  4. php输出分组,ThinkPHP 项目分组中的模板输出
  5. 超级签名源码_企业签名和超级签名有哪些区别?
  6. [网络流24题] 最长递增子序列
  7. 小米10至尊纪念版今日开卖:120hz高刷+120W秒充
  8. jmeter web监听结果_监听器-聚合报告监听性能测试结果
  9. 关于laravel报错Class 'Barryvdh\Debugbar\ServiceProvider' not found
  10. 灰灰考研c语言讲义,灰灰全书之数据结构试讲
  11. osgEarth的Rex引擎原理分析(一二二)着色器程序的opengl过程
  12. 8.4 大学生,不要再拿兴趣说事——《逆袭大学》连载
  13. Android 开发笔记 “android调试遇到ADB server didn't ACK以及顽固的sjk_daemon进程 ”
  14. 前端如何实现一个滚动的文本字幕
  15. 走进诺奖大师系列:科斯(Ronald H.Coase)
  16. Java之切割时间段
  17. QQ界面技术(DirectUI)
  18. 【Python入门教程】第85篇 常用字符串方法之大小写判断
  19. 程序员的自我修养(一)
  20. Python基础知识(5)控制流程

热门文章

  1. Chuck Cobb谈敏捷组织中PMO的角色
  2. ​std::multimap
  3. 传说中的window8 的种子
  4. Photoshop的批处理(有海量的数码照片,想传上网的话就看下)
  5. SQL2000里的数据类型
  6. Sleep() sleep() usleep()
  7. (三)系统与架构级低功耗设计
  8. C#decimal数据类型
  9. ANSYS——查看某一截面的云图分布(也叫做切片图)
  10. sunday java_Sunday算法:最快的字符串匹配算法