一个程序设计思路的问题
现在的项目中有这么一个业务:
第一步:某一产品签订一个合同,并定义了唯一的一个编号(假如为HT001);
第二步:然后当需要使用该产品时需要一个进场处理,这时确定一个进场日期(假如为s1);
第三步:当用完后,需要退场处理,这时确定一个退出日期(假如为e1);
第四步:会对其进行结算,需要一个工作时间即时间段,该时间段由用户选择的起日(假如为js1)止日(假如为je1)中统计出退场日期--进场日期的时间(即e1--s1 假设 js1<s1<e1<je1)
(第二步和第三步和第四步可以循环进行,即可以多次进退场,多次结算,结算时要过滤掉以前结算过的日期)
业务大致如上,我在给出一个应用的场景:
一产品 编号为HT001
(1号进场s1-------3号退场e1)------(6号进场s2-------8号退场e2)-------(10号进场s3---------20号退场e3)........
此时结算如下
结算单j1:起日为2号js1,止日为4号je1 那么得到的时间段应该为 :3-2=1
结算单j2:起日为8号js2,止日为12号je2 那么得到的时间段应该为:(8-8)+(12-10)=2
结算单j3:起日为3号js3,止日为17号je3 那么得到的时间段应该为 :(3-3)+(8-6)+(17-10)-1-2=6
(因为j1中已经结算过3号,j2中已经结算过10号,11号,所以减去这3天)
.......
(不知我描述的是否清楚,不清楚我再描述下)
有很多种结算情况,即结算单的起止日可以重复,包含等,但进退场日期不会重复,每一天都是唯一的
结算单就要考虑已经结算过的天,要减掉结算过的日期
大致情况就是这样,此问题困扰我2-3天了,想了很多,但发现会做过多的判断或者某一种情况会出现错误数据,故此请各位帮下忙,讨论给出一个计算方法,思路或者数据库加一些标识字段以便统计
数据库大致会有4张表:合同,进场,退场,结算