【开发心得】筑梦上海:项目风云录(6)

目录

会海跳槽

票务开启

漂泊在外的日子

未完待续


会海跳槽

随着时刻表的出炉,意味着大规模的界面开发逐步进入正规。项目组里陆陆续续引进了8个人,最多的时候,同时有10个人在现场。“松工”为我们准备的办公室坐的满满当当,另外在他的办公室里也开辟了一个小会议桌,专门负责演示最新的系统界面。

这个时候,“会海”反而提出了离职请求。但我的记忆是比较模糊的,大概当时太专注于项目,而且“小娇”、“小光”、“小魏”,最初项目组的几个人,陆陆续续都因为各种各样的原因离职了。人员的变动对我来说已经是日常行为了。

不太记得“会海”离职的时候都说了些什么,当时公司也没有离职面谈的流程,只记得“会海”还是很客气,还是从其他同事哪里获悉,“会海”认为“小娇”的离去对他打击很大,但后来他是否还和“小娇”联系,就不得而知了。

还是介绍几个新成员,其中小骥就是前文做时刻表的员工:

海根:负责架构,造轮子,票务系统

小海:负责机务系统

海华:负责汽修系统和测试

文政:负责汽修系统

小骥:负责营运系统

巍巍:负责测试

票务开启

复盘看来,海根进入项目组以后,项目进度有了极大的推进。海根是架构出身,也是外地来上海的。虽然看上去其貌不扬,但是架构、设计、代码样样精通。进入项目组以后,就开始着手整理‘会海’之前留下来的轮子。

经过一番整理,最终确定了整个系统的构架,每个模块都可以独立的编译、测试、运行。同时一共共用的模块也进行了整合,把系统的耦合度降低了不少。

同时,由他负责了最复杂的票务系统的设计与开发。那个阶段,每天几乎都要跟他一起去票务部门进行调研。海根的记忆力奇好,甚至不用带本子做记录,回来以后就能够按照客户的描述,把界面全部画出来。而且他几乎不用借助其他工具,业务逻辑全部靠手写,代码也非常的清楚,即使在各类开发工具满天飞,AI编码也开始辅助人工的今天,他的代码依然还是很经典,看看票箱及相关操作的代码欣赏一下:

using System;
using Traffic.Common;
using System.Collections;namespace Traffic.TicketBusiness.TicketBox
{/// <summary>/// 票箱。/// </summary>[Serializable()]public class TicketBox:Props{[InTable]public int Id;								//Id[InTable]public int TicketStoreId;					//票库Id[InTable]public string Code;						//名称[InTable]public double TotalSum;					//现存金额[InTable]public System.DateTime CancelDate;			//作废日期[InTable]public int CancelFlag;						//作废标志public TicketBox(Props objProps){this.TableName = Const.TABLENAME_TICKETBOX;this.PropsToFields(objProps);}public TicketBox(){this.TableName = Const.TABLENAME_TICKETBOX;}}/// <summary>/// 售票员、票箱、工号的对照表。/// </summary>[Serializable()]public class TicketBoxRelation:Props{[InTable]public int Id;							//Id[InTable]public int TicketBoxCode;				//票箱号[InTable]public string ConductorCode;			//售票员工号[InTable]public int RouteId;					//路别Id[InTable]public bool HasConditioner;			//是否空调[InTable]public int RedFlag;					//红绿箱标志public TicketBoxRelation(Props objProps){this.TableName = Const.TABLENAME_TICKETBOXRELATION;this.PropsToFields(objProps);}public TicketBoxRelation(){//// TODO: 在此处添加构造函数逻辑//this.TableName = Const.TABLENAME_TICKETBOXRELATION;}}
}

票箱操作有很多功能,下面是发生遗失票的时候,改如何实现:

/// <summary>///      遗失票登记。///      一个票价一个遗失票登记单和一个一个遗失票登记单明细。/// </summary>/// <param name="sTicketBoxCode">票箱代号</param>/// <param name="dTicketPrice">票价</param>/// <param name="sBeginTicketMarkMolecule">开始票记(分子/分母)</param>/// <param name="iBeginTicketNo">开始票号</param>/// <param name="sEndTicketMarkMolecule">结束票记(分子/分母)</param>/// <param name="iEndTicketNo">结束票号</param>/// <returns></returns>public Reports  TicketLost(string sOperator,string sTicketBoxCode,double dTicketPrice,int iTicketMarkMolecule,int iTicketMarkDenominator,int iBeginTicketNo,int iEndTicketNo){int  iID;int iCloseOffBillID=0;int iTurnTime=0;			string sSQL;OleDbDataReader reader;Reports reports=new Reports();//得到最新的客票结算单。sSQL="Select Top 1 Id from pwTicketCloseOffBill Where TicketBoxCode='"+sTicketBoxCode+"' Order by CloseOffDate DESC";reader=this.GetReader(sSQL);if (reader.Read()){iCloseOffBillID=Conversion.getInt(reader.GetValue(0));}//票库作废是必须判断最后的客票结算单中是否有此票记票号。			sSQL="Select TurnTime from  pwTicketCloseOffBillDetail  Where TicketCloseOffBillID="+iCloseOffBillID+" And TicketPrice="+dTicketPrice+"  And TicketMarkDenominator="+iTicketMarkDenominator+" And TicketMarkMolecule="+iTicketMarkMolecule+" And (BeginTicketNo<="+iBeginTicketNo+" And EndTicketNo>="+iEndTicketNo+")";reader=this.GetReader(sSQL);//如果找到,则取出其TurnTime,如果存在两个票记,则提示。if ( reader.Read()){iTurnTime=Conversion.getInt(reader.GetValue(0));//第一次轮次为1.if (iTurnTime==0) iTurnTime=1;if ( reader.Read()){reports.ReturnBool =false;reports.ErrorReport="票箱中相同票记、票号中存在多个,不能同时作废!";return reports;}}try{//向部分票报废表新增一条记录。sSQL="Insert Into pwTicketBoxLost(TicketBoxCode,LostDate,Operator) Values ('"+sTicketBoxCode+"','"+System.DateTime.Now.ToShortDateString()+"','"+sOperator+"')";sSQL+= " Select Id From pwTicketBoxLost Where Id = @@IDENTITY";reader=this.GetReader(sSQL);if (reader.Read()){//得到新的出库单IdiID= Conversion.getInt(reader.GetValue(0));//向票箱变更单明细中插入一条新记录。sSQL="Insert Into pwTicketBoxDetail(TicketBoxCode,BillID,BillType,OperateDate,TicketPrice,TurnTime,TicketMarkMolecule,TicketMarkDenominator,BeginTicketNo,EndTicketNo) Values('"+sTicketBoxCode +"',"+iID +","+(int)enumBillType.CancelBill +",'"+System.DateTime.Now.ToShortDateString()+"',"+dTicketPrice +","+iTurnTime+","+iTicketMarkMolecule +","+iTicketMarkDenominator +","+iBeginTicketNo +","+iEndTicketNo+")";this.GetReader(sSQL);}reports.ReturnBool=true;}catch(Exception e){Error.Log(e.Message);reports.ErrorReport=e.Message;reports.ReturnBool=false;}return reports;	}

当然,可能有人会说,代码里怎么还有SQL语句,这个耦合度太高了。是的,在当时流行的CS架构中,很多都是这么干的。至于MVC这样的架构,是项目完成后几年后才出现的。

海根现在看到这些代码,应该也会会心一笑了,毕竟这种代码的方式,在当时虽然每次改动SQL代码都要重新编译,但是仅仅就是一句SQL语句,不涉及其他代码的调整。 

漂泊在外的日子

那段时间,由于项目推进要求,而甲方在浦西,我们大多住在浦东,后来经过协调,公司专门在甲方附近帮我们租了一个两室一厅的房子供路远的员工晚上休息,这样可以节约大量的通勤时间。

房东是一位上海出入境管理局的领导,当时他很有远见,自己早早的就在附近买了新住宅,租给我们的房子,是单位分配的。那时候虽然自己也买了房子,但属于老破小。一是没有投资意识,没有继续带杠杆买房;二是胆子小,感觉贷款压力太大;前文提到的肖博士,当时也没有投资房产,我们都属于没有能够跟上这波长达20多年的房地产鼎盛周期的那类人。这个就是运气。

这位领导后来我们还经常联系,甚至有一次春节回家买票,还是托他找熟人买的车票,当年12306甚至连电话订票都没有的年代,碰到这位领导真是幸运之极!本来打算一直跟他保持联系的,但是结果是大家都没有想到的,过于惨烈,就不再回忆了。很多事就是命运使然。

未完待续。。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1556611.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Maven 高级之分模块设计与继承、聚合

在软件开发中&#xff0c;随着项目规模的扩大&#xff0c;代码量和复杂度不断增加&#xff0c;传统的一体化开发模式逐渐暴露出诸多问题。为了解决这些问题&#xff0c;模块化开发应运而生&#xff0c;而 Maven 正是模块化开发的利器&#xff0c;它提供的继承和聚合机制为构建和…

wc命令:统计文本行数、单词数、字节数

一、命令简介 ​wc​&#xff08;word count&#xff09;是一个在类 Unix 系统中常用的命令行工具&#xff0c;用于统计文本文件的 行数​、单词数 ​和 字节数​。 ​​ ‍ 二、命令参数 ​wc​ 命令的基本语法如下&#xff1a; wc [选项] 文件选项&#xff1a; ​-c​…

当管理遇上AI,工作效率翻了3倍!

最近这段时间&#xff0c;很多企业都开始降薪、裁员。 在降本增效的大背景下&#xff0c;企业但凡有什么大动作&#xff0c;压力往往都会转嫁到管理者的身上。 一方面&#xff0c;要调大家的状态&#xff0c;处理团队中的各种琐事&#xff1b;另一方面&#xff0c;要及时响应…

【ESP32】Arduino开发 | Timer定时器+定时器闹钟例程

有关定时器外设的详细介绍在ESP-IDF的对应文章中&#xff0c;跳转栏目目录可以找到。 1. API 1.1 启动定时器 hw_timer_t * timerBegin(uint8_t timer, uint16_t divider, bool countUp); timer&#xff1a;定时器序号&#xff08;ESP32有4个硬件定时器&#xff0c;所以可填序…

SpringBoot赋能旅游管理:系统设计与实现

第三章 系统分析 3.1可行性分析 对所有的系统来说&#xff0c;都有可能会受到时间和空间上的制约。所以&#xff0c;我们在设计每一个项目的时候&#xff0c;必须对该系统实行可行性分析&#xff0c;这样不但能够降低项目的危害&#xff0c;还能改降低人力、物力和财力的损耗。…

【CKA】十六、监控Pod度量指标

16、监控Pod度量指标 1. 考题内容&#xff1a; 2. 答题思路&#xff1a; 题目意思是&#xff1a;找出label有namecpu-user的CPU最高的Pod&#xff0c;然后把它的名字写在已经存在的 /opt/KUTR00401/KUTR00401.txt文件里 3. 官网地址&#xff1a; https://kubernetes.io/zh-…

LeetCode 54 Spiral Matrix 解题思路和python代码

题目&#xff1a; Given an m x n matrix, return all elements of the matrix in spiral order. Example 1: Input: matrix [[1,2,3],[4,5,6],[7,8,9]] Output: [1,2,3,6,9,8,7,4,5] Example 2: Input: matrix [[1,2,3,4],[5,6,7,8],[9,10,11,12]] Output: [1,2,3,4,8,1…

反射在Go语言中的具体应用场景

在Go语言中&#xff0c;反射&#xff08;Reflection&#xff09;是一种强大的特性&#xff0c;它允许程序在运行时检查、修改和操作变量的类型信息。 尽管反射在性能上通常不如直接操作&#xff0c;但它在某些特定场景下非常有用。 反射在Go语言中的具体应用场景&#xff1a;…

基于JAVA的鲜花商城管理系统(源码+定制+讲解)鲜花商城管理系统、鲜花商城管理平台、鲜花商城信息管理、鲜花商城系统开发与应用、鲜花在线商城管理系统

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

基于Springboot海宝海鲜餐厅系统JAVA|VUE|SSM计算机毕业设计源代码+数据库+LW文档+开题报告+答辩稿+部署教+代码讲解

源代码数据库LW文档&#xff08;1万字以上&#xff09;开题报告答辩稿 部署教程代码讲解代码时间修改教程 一、开发工具、运行环境、开发技术 开发工具 1、操作系统&#xff1a;Window操作系统 2、开发工具&#xff1a;IntelliJ IDEA或者Eclipse 3、数据库存储&#xff1a…

旅游管理智能化转型:SpringBoot系统设计与实现

第四章 系统设计 4.1系统结构设计 对于本系统的开发设计&#xff0c;先自上向下&#xff0c;将一个完整的系统分解成许多个小系统来进行实现&#xff1b;再自下向上&#xff0c;将所有的“零件”组装成一个大的、完整的系统。因此这里面的许多个小功能块都要对将要实现的功能进…

微软GraphRAG实战解析:全局理解力如何超越传统RAG

微软近日开源了新一代RAG框架GraphRAG&#xff0c;以解决当前RAG在大型语料库上全局理解问题。当前RAG主要聚焦于局部检索能力&#xff0c;即根据查询语句在向量库中匹配部分知识&#xff0c;然后通过大型语言模型合成这些检索到的信息&#xff0c;生成一个自然流畅的回答。相信…

【NLP自然语言处理】03 - 使用Anaconda创建新的环境/pycharm切换环境

NLP基础阶段&#xff1a;创建新的虚拟环境 第一步&#xff1a;查看有多少个虚拟环境 conda env list 第二步&#xff1a;创建一个新的虚拟环境&#xff0c;起个名字&#xff1a;nlpbase 打开anconda prompt终端&#xff0c;输入命令: conda create -n nlpbase python3.10 第三步…

数据仓库拉链表

数仓拉链表是数据仓库中常用的一种数据结构&#xff0c;用于记录维度表中某个属性的历史变化情况。在实际应用中&#xff0c;数仓拉链表可以帮助企业更好地进行数据分析和决策。 数仓拉链表&#xff08;Slowly Changing Dimension, SCD&#xff09;是一种用于处理维表中数据变化…

MATLAB中lsqminnorm函数用法

目录 语法 说明 示例 求解具有无限个解的线性系统 指定容差以减少含噪数据的影响 切换显示低秩矩阵警告 lsqminnorm函数的功能是线性方程的最小范数最小二乘解。 语法 X lsqminnorm(A,B) X lsqminnorm(A,B,tol) X lsqminnorm(___,rankWarn) 说明 X lsqminnorm(A,B…

[单master节点k8s部署]34.ingress 反向代理(一)

ingress是k8s中的标准API资源&#xff0c;作用是定义外部流量如何进入集群&#xff0c;并根据核心路由规则将流量转发到集群内的服务。 ingress和Istio工作栈中的virtual service都是基于service之上&#xff0c;更细致准确的一种流量规则。每一个pod对应的service是四层代理&…

YOLO11改进|卷积篇|引入线性可变形卷积LDConv

目录 一、【LDConv】卷积1.1【LDConv】卷积介绍1.2【LDConv】核心代码 二、添加【LDConv】卷积2.1STEP12.2STEP22.3STEP32.4STEP4 三、yaml文件与运行3.1yaml文件3.2运行成功截图 一、【LDConv】卷积 1.1【LDConv】卷积介绍 下图是【LDCNV】的结构图&#xff0c;让我们简单分析…

JumperServer入门

一、安装部署 官方安装文档&#xff1a;快速入门 - JumpServer 文档 机器准备 CentOS7 ip 角色 192.168.252.145 主节点 192.168.252.146 被控节点1 192.168.252.148 被控节点2 安装JumperServer curl -sSL https://resource.fit2cloud.com/jumpserver/jumpserver…

集合框架03:List接口介绍及使用

1.视频链接&#xff1a;13.08 List接口使用&#xff08;1&#xff09;_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1zD4y1Q7Fw?p8&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 2.代码示例 package com.yundait.Demo01;import java.util.ArrayList; import java…

Final Glory推出“荣耀勋章-神龙”,推动游戏叙事范式发展

GameFi赛道因基建设施的缺失而长期处于加密市场的边缘位置&#xff0c;该叙事在市场中的占有率正在下降。不过好的一面是&#xff0c;随着MetaArena引擎面向市场&#xff0c;正在推动区块链游戏市场的叙事向全新的范式发展。 MetaArena引擎是以零知识证明方案为基础的Web3游戏基…