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

news2024/10/11 12:24:27

目录

会海跳槽

票务开启

漂泊在外的日子

未完待续


会海跳槽

随着时刻表的出炉,意味着大规模的界面开发逐步进入正规。项目组里陆陆续续引进了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())
				{
					//得到新的出库单Id
					iID= 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.coloradmin.cn/o/2195093.html

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

相关文章

攸信动态丨厦门火炬大学堂携手厦门攸信技术,共探盈趣汽车电子数字化转型标杆之路

今日上午&#xff0c;在厦门市工信局指导下&#xff0c;由厦门盈趣汽车电子有限公司、厦门攸信信息技术有限公司携手北京赛昇科技有限公司与厦门火炬大学堂联合举办的“厦门中小企业数字化转型人才培训&#xff08;第14期&#xff09;”活动&#xff0c;在热烈而充实的氛围中圆…

gitlab-ci 集成 k3s 部署spring boot 应用

环境 一台ECS gitlab 16.10 一台ECS gitlab-runner docker方式 一台腾讯云服务器 k3s k3s version v1.30.5k3s1 (9b586704) go version go1.22.6 本地: idea 2024 准备开始 gitlab上创建"api"仓库,本地IDEA 创建spring boot web demo项目k8s-gitlab-demo. 确保能…

手把手带你服务端实现支付功能的通用解决方案!(全网最新)

友情提示&#xff1a; 跳转到本人juejin观看体验更佳&#xff08;当然CSDN也很好&#x1f60b;&#xff09; link —> https://juejin.cn/user/679936123997707/posts Thanks!&#x1f339; 前言 前段时间&#xff0c;和朋友们一起搭建的一个网站需要实现支付功能&#xff…

速卖通、Shopee、Lazada自养号测评的五大关键步骤:从环境构建到风控应对

在跨境电商领域&#xff0c;速卖通、Shopee和Lazada等平台上的自养号测评已成为提升销量、优化产品排名的重要手段。自养号测评不仅能够帮助卖家快速积累好评&#xff0c;还能有效提升产品的曝光率和转化率。然而&#xff0c;自养号测评并非易事&#xff0c;需要掌握一系列专业…

软考UML图 -- ( 类图,对象图,用例图,序列图,通信图,状态图,活动图,构件图,部署图)

文章目录 一、UML统一建模语言二、关系三、UML图1. 类图2. 对象图3. 用例图4. 序列图&#xff08;顺序图&#xff09;—— 交互图5. 通信图 —— 交互图6. 状态图7. 活动图8. 构件图&#xff08;组件图&#xff09;9. 部署图10. 总结 一、UML统一建模语言 UML由3个要素构成:UM…

Linux 外设驱动 应用 1 IO口输出

从这里开始外设驱动介绍&#xff0c;这里使用的IMX8的芯片作为驱动介绍 开发流程&#xff1a; 修改设备树&#xff0c;配置 GPIO1_IO07 为 GPIO 输出。使用 sysfs 接口或编写驱动程序控制 GPIO 引脚。编译并测试。 这里假设设备树&#xff0c;已经配置好了。不在论述这个问题…

PDF转JPG神器!这四款软件让你轻松搞定文档转换

尊敬的朋友们&#xff0c;您是否曾在数字办公和娱乐的海洋中&#xff0c;遭遇过因格式问题而一筹莫展的时刻&#xff1f;比如&#xff0c;手头有一份绝美的PDF文件&#xff0c;却想将其转换为JPG图片格式&#xff0c;好让它能在你的社交圈中大放异彩&#xff1b;别急&#xff0…

自然语言处理-语言转换

文章目录 一、语言模型二、统计语言模型1.含义与方法2.存在的问题 三、神经语言模型1.含义与方法2.one-hot编码3.词嵌入-word2vec4.模型的训练过程 四、总结 自然语言处理&#xff08;NLP&#xff09;中的语言转换方法主要涉及将一种形式的语言数据转换为另一种形式&#xff0c…

IDEA创建、导入、删除maven项目

全局配置&#xff1a; 1.File->Close Project 2.Customize->All settings 3. Apply 4.选择JRE版本->Apply 5.选择字节码版本->Apply->OK 全局配置结束 创建maven项目&#xff1a; 1.File->New->Module 2.Build system选择Maven GroupId&#xff1a…

Django学习笔记十三:优秀案例学习

Django CMS 是一个基于 Django 框架的开源内容管理系统&#xff0c;它允许开发者轻松地创建和管理网站内容。Django CMS 提供了一个易于使用的界面来实现动态网站的快速开发&#xff0c;并且具有丰富的内容管理功能和多种插件扩展。以下是 Django CMS 的一些核心特性和如何开始…

智能医疗:Spring Boot医院管理系统开发

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常适…

手术器械检测系统源码分享

手术器械检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vision …

【Nacos入门到实战十三】Nacos配置管理:配置优先级与加载顺序解读

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

Thinkphp/Laravel基于vue的金融理财产品销售系统设计与实现Vscode毕业设计成品源码.

目录 技术栈和环境说明具体实现截图设计思路关键技术课题的重点和难点&#xff1a;框架介绍数据访问方式PHP核心代码部分展示代码目录结构解析系统测试详细视频演示源码获取 技术栈和环境说明 采用PHP语言开发&#xff0c;开发环境为phpstudy 开发工具notepad并使用MYSQL数据库…

allegro 替换过孔

操作步骤如下 1.选择操作对象&#xff08;需要替换的过孔&#xff09;&#xff0c;右键–>Repace……–>Selected…… 2.在弹出的窗口中选择最终需要的过孔既可以

2024系统分析师考试---数据仓库相关概念

前言&#xff1a; 传统的操作型数据库主要面向业务的&#xff0c;所执行的操作基本上也是联机事务处理&#xff0c;随着企业规模的增长&#xff0c;历史积累的数据越来越多&#xff0c;如何利用历史数据来为未来决策服务&#xff0c;就显得越来越重要了&#xff0c;而数据仓库就…

微信小程序开发问题记录

文章目录 一&#xff0c;全局文件配置windows title不起作用 一&#xff0c;全局文件配置windows title不起作用 全局配置中配置窗口导航栏标题不生效。 但是页面使用的导航栏插件配置的title能生效。

source insight 的开源替代

source insight 的开源替代——sourcetrail&#xff0c;开源地址&#xff1a;https://github.com/CoatiSoftware/Sourcetrail Sourcetrail 是一个交互式源代码浏览器&#xff0c;它通过为代码编制索引并收集有关其结构的数据来简化现有源代码中的导航。然后&#xff0c;Sourcet…

图吧工具箱

图吧工具箱202309绿色版自动解压程序R2.exe&#xff0c;永久有效 链接&#xff1a;https://pan.baidu.com/s/1M6TI7Git8bXOzZX_qZ3LJw?pwdzked 提取码&#xff1a;zked

Java中常用的线程工具(JUC)

多线程 多线程 基本概念 CAS (Compare-And-Swap&#xff0c;比较并交换)&#xff0c;是一种用于实现多线程同步的原子操作。主要原理&#xff1a;1.比较内存中的某个位置的当前值和预期值 2.交换如果当前值与预期值相等&#xff0c;则将该位置的值更新为新值&#xff0c;否则…