import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class Main {
/**
*
*/
public static class Contract {
/**
* 公司名
*/
private String companyName;
/**
* 全部子
*/
private List<Contract> contracts;
/**
* 生效时间
*/
private Date startDate;
/**
* 失效时间
*/
private Date endDate;
public String getCompanyName() {
return companyName;
}
public void setCompanyName(String companyName) {
this.companyName = companyName;
}
public List<Contract> getContracts() {
return contracts;
}
public void setContracts(List<Contract> contracts) {
this.contracts = contracts;
}
public Date getStartDate() {
return startDate;
}
public void setStartDate(Date startDate) {
this.startDate = startDate;
}
public Date getEndDate() {
return endDate;
}
public void setEndDate(Date endDate) {
this.endDate = endDate;
}
}
public static class EffectiveTimeRange {
/**
*
*/
Date latestStartDate;
/**
*
*/
Date earliestEndDate;
public Date getLatestStartDate() {
return latestStartDate;
}
public void setLatestStartDate(Date latestStartDate) {
this.latestStartDate = latestStartDate;
}
public Date getEarliestEndDate() {
return earliestEndDate;
}
public void setEarliestEndDate(Date earliestEndDate) {
this.earliestEndDate = earliestEndDate;
}
}
//测试
public static void main(String[] args) throws ParseException {
String d1 = "2019-6-1 1:10:10";
String d2 = "2020-6-1 1:10:10";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// 调用parse()方法,将字符串转换为日期
Date date1 = sdf.parse(d1);
Date date2 = sdf.parse(d2);
List<Contract> list = new ArrayList<>();
Contract contract = new Contract();
contract.setCompanyName("a");
contract.setEndDate(date1);
contract.setStartDate(date2);
List<Contract> list1 = new ArrayList<>();
list.add(contract);
Contract contract1 = new Contract();
contract1.setCompanyName("a");
contract1.setEndDate(date1);
contract1.setStartDate(date2);
list1.add(contract1);
contract.setContracts(list1);
EffectiveTimeRange effective = getRelatedEffectiveTimeRange(contract, "a");
if (effective == null) {
System.out.println("重合时间不存在");
} else {
System.out.println("开始时间:" + effective.getEarliestEndDate());
System.out.println("结束时间:" + effective.getLatestStartDate());
}
}
/**
* @param contract 主信息
* @param companyName 公司名
* @return 获取时间范围
*/
public static EffectiveTimeRange getRelatedEffectiveTimeRange(Contract contract, String companyName) {
// 待实现逻辑
try {
List<Contract> list = contractDisplay(contract);
List<EffectiveTimeRange> listTime = new ArrayList<>();
for (int i = 0; i < list.size() - 1; i++) {
EffectiveTimeRange effective = getTimeRangeMethod(list.get(i), companyName);
listTime.add(effective);
}
Date startTime = null;
Date endTime = null;
if (listTime == null) {
return null;
}
if (listTime.size() > 1) {
for (int j = 0; j < listTime.size() - 1; j++) {
if (listTime.get(j).getEarliestEndDate().after(listTime.get(j + 1).getEarliestEndDate())) {
startTime = listTime.get(j).getEarliestEndDate();
}
if (listTime.get(j).getLatestStartDate().before(listTime.get(j + 1).getLatestStartDate())) {
endTime = listTime.get(j).getLatestStartDate();
}
}
} else if (listTime.size() == 1) {
startTime = listTime.get(0).getEarliestEndDate();
endTime = listTime.get(0).getLatestStartDate();
}
if (startTime.before(endTime)) {
EffectiveTimeRange eff = new EffectiveTimeRange();
eff.setLatestStartDate(startTime);
eff.setEarliestEndDate(endTime);
return eff;
}
} catch (Exception e) {
System.out.println(e);
}
return null;
}
//取当前Contract本层中的时间
public static EffectiveTimeRange getTimeRangeMethod(Contract contract, String companyName) {
EffectiveTimeRange effectiveTimeRange = new EffectiveTimeRange();
if (companyName != null && companyName.equals(contract.getCompanyName())) {
effectiveTimeRange.setEarliestEndDate(contract.getEndDate());
effectiveTimeRange.setLatestStartDate(contract.getStartDate());
}
return effectiveTimeRange;
}
// 递归取所有合同
public static List<Contract> contractDisplay(Contract contract) {
List<Contract> list = new ArrayList<>();
if (contract != null && contract.getContracts() != null && contract.getContracts().size() > 0) {
for (int i = 0; i < contract.getContracts().size(); i++) {
List<Contract> subList = contractDisplay(contract.getContracts().get(i));
list.addAll(subList);
}
}
list.add(contract);
return list;
}
}
递归计算公共生效时间范围
最新推荐文章于 2022-01-09 23:01:24 发布