记录一次业务逻辑的分析过程

标签: 业务分析
26人阅读 评论(0) 收藏 举报
首先简单描述一下业务上的需求:要计算出差的补助。
计算规则如下:
1.有三组变量,分别为出差时间、规定劳动时间、出差地当地劳动时间(各自包含开始和结束时间)
2.原来的需求描述为:
出差时间在规定劳动时间内的话不计算补助。
出差开始时间早于规定劳动时间的话,差的时间作为补助时间来计算。但是差的时间内包含出差地当地的劳动时间的话要将其前后的时间作为补助时间计算。
出差结束时间晚于规定劳动时间的话,差的时间作为补助时间来计算。但是差的时间内包含出差地当地的劳动时间的话要将其前后的时间作为补助时间计算。
3.在规定劳动时间之前的出差时间称为前补助时间,规定劳动时间之后的出差时间称为后补助时间。
4.补助计算以小时计,只舍不入。
5.工作日的补助计算是前后时间单算,补助金额相加;非工作日的补助计算是前补助时间加上后补助时间,一块算金额。
6.存在跨天选项,即有可能是从21点工作到第二天凌晨3点。
7.职务人员只考虑规定劳动时间。
乍一看这需求,字挺多,但是倒也不难理解。就是算出来出差时间既不在规定劳动时间也不在当地劳动时间的时间就ok了呗。
首先祭出if else大法。
似乎有一些麻烦,算了,先想单一的,工作日的计算。
首先,获取各个时间。startTime,endTime,ruleStartTime,ruleEndTime,localStartTime,ruleEndTime
第一种情况,最简单的,规定劳动时间和当地劳动时间正好重合了;
if ruleStartTime==localStartTime&&ruleEndTime==ruleEndTime:
  beforeTime=ruleStartTime-startTime>0?ruleStartTime-startTime:startTime-ruleStartTime
继续,稍微复杂一点,规定劳动时间开始时间晚于当地劳动时间开始时间;
再来,规定劳动时间开始时间早于当地劳动时间开始时间,也不难;
等等,还有一种情况,规定劳动时间的结束时间也早于当地劳动时间的结束时间,
还有,当地劳动时间开始时间介于规定劳动时间开始时间和结束时间中间;
厉害了word哥,这还没算上工作日和休息日、跨天、职务的区分,光一个前补助时间就这么多条件了,并且最可怕的是,可能还没想全。
看来这个if else大法不太灵光,又傻,代码量还高,并且逻辑上不安全。
那就得想一下了,回到之前那句话:算出来出差时间既不在规定劳动时间也不在当地劳动时间的时间。
简单一想,这不就是求出来出差时间这个集合与(规定劳动时间与当地劳动时间的合集)的差集吗?
第一个念头是区间,有现成的可以表示区间的数据结构吗,仔细想了想想不着。凑合用Array[2]吧。也能达到目的。
这个方法好!是真好,我接下来只需要实现两个方法;
function  求合集(arr1,arr2)
function 求差集(arr1,arr2)
开始面向过程。。。
还是不行,why?还得考虑 规定劳动时间与当地劳动时间的合集 不连续的情况,不连续的话求差集要分开算。而分开算的差集也有可能不是连续的。最长可能为三段
那么还是得调用2的3次方次 function 求差集。太麻烦了,不想弄。还是得多动脑子少编码。
可是光想这几个方法的实现已经耗费了大半个晚上的时间,老婆喊着要睡觉了。
躺床上就在想,数学上的集合不好使,用编程上的集合,全列出来。
第二天起来,思路一写,哈哈,问题解决了。
时间全部换算成分钟制,区间写入array,求合集,直接用set。求差集,直接for not in,set;
求出差集之后,判断一下是否连续,也很简单,首尾之差是否等于数组的长度。不连续就拆分一下。
拆分完了,每一段分别比较一下和规定劳动时间的大小,确定是前补助时间还是后补助时间。完事,除以60,得到小时数。美滋滋。
并且我这个只给你算出来时间,至于你要怎么用时间,怎么算补助,是什么职位,后边简单一算就行了。so easy。
编程真有趣,哈哈。
现在看来这个抽象思想,建模思想真是好。不然我们小时候做应用题为什么要列方程而不是穷举呢?
并且也给我解决问题提供了一种思路,多总结规律,抽象出数学模型,问题就会简单的多。
最重要的,多思考,用脑子编程。




  
查看评论

记录一次ddos分析过程

记录一次ddos分析过程 记录一次ddos分析过程 事情概述 排查思路 事情概述 周三上午到公司一看监控,在阿里云slb上的流量out traffic突然飙高,已初步怀疑遇到了d...
  • CaroLjy
  • CaroLjy
  • 2018-04-04 11:01:45
  • 4

一次数据分析的全过程

刚下完班的时候,在公司无聊的坐着,一位同事拿了一些数据给我,说让我实现一个类似交叉表格的统计报表。 源数据就是个日志文本信息2008/1/11               02:14:33:181  ...
  • baoqiangwang
  • baoqiangwang
  • 2011-08-06 11:21:50
  • 2320

记录一次iOS上线的坎坷经历

本次上线被苹果拒了将近10次,这次上线真可谓坎坷,多磨!对苹果的审核人员真是无语了,感觉上线7分靠运气,3分靠实力!再此记录一些细节: 1 第一次被拒 原因:APP名字中出现“联通”两个字,结果被...
  • u012951123
  • u012951123
  • 2017-03-10 17:11:53
  • 328

分析代码中的业务逻辑是程序员的必经之路

这一段时间都在现有的项目上开发,开发的前提是要弄清楚业务逻辑。业务逻辑蕴藏在项目的各个代码片断中,所以从代码中去分析出业务逻辑,是一个程序员成长的必经之路。我很佩服我们头,他在不看代码的情况下,就靠分...
  • firefox1
  • firefox1
  • 2007-08-01 23:25:00
  • 1718

Android 一次点击动作的分析

Android 系统的事件传递和处理的简单分析
  • wanlong2713
  • wanlong2713
  • 2015-11-20 17:52:27
  • 400

业务逻辑详解

细说业务逻辑   2010-08-02 作者:张洋 来源:EricZhang's Tech Blog   前言 记...
  • YEJIANSHENG123
  • YEJIANSHENG123
  • 2014-06-29 22:55:44
  • 1840

MySQL查询处理过程分析

MySQL查询处理过程分析介绍查询操作是关系型数据库中使用最为频繁的操作,也是构成其它SQL语句(如:Delete、Update)的基础。要删除或更新某些记录时,首先要查询出这些记录,然后对其进行相应...
  • nicewuranran
  • nicewuranran
  • 2016-08-16 23:14:55
  • 576

记录一次系统调用慢的 分析过程

收到问题jira描述 •    •      [EM] 0131559] [工厂适应性问题] 执行shell命令,系统反应慢 •       分析发现调用系统system函数执行命令的时间过...
  • weixin_41041321
  • weixin_41041321
  • 2017-12-05 11:21:19
  • 55

关于软件中业务逻辑的形式化表现

有个想法,记录如下: 【上下文】 软件产品中充斥着大量的复杂的业务逻辑 代码中经常有很多复杂的逻辑判断 由于业务逻辑的演变,代码中的逻辑经常被改动 代码的改动者未必了解最初作者的原意,可能会无...
  • yasi_xi
  • yasi_xi
  • 2015-05-14 13:48:00
  • 677

记录一次数据恢复过程

年前的时候买了个笔记本,出厂安装的是win7我就没换,一直用着,但是最近几个项目驱动win7不合适,没办法昨天终于决定换成xp,难道我们总是最后才能换系统么? 说正事儿。 换xp本来是个很正常的操作...
  • energeticsunxiaocong
  • energeticsunxiaocong
  • 2012-12-20 15:07:49
  • 326
    个人资料
    持之以恒
    等级:
    访问量: 788
    积分: 81
    排名: 152万+
    文章分类
    文章存档
    最新评论