private Double countTimes(List<Record> list) throws ParseException {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat DateFormat = new SimpleDateFormat("yyyy-MM-dd");
List al=new ArrayList();
for(int i=0;i<list.size();i++){
Record r=list.get(i);
String s = r.getWorkTime();//获得的参数 ["11:30","12:00"]
if(StringUtils.isNotNull(s)){
Object[] times = JSONArray.parseArray(s).toArray();
Long [] oj=new Long[times.length];
for (int k = 0; k < times.length; k++) {
String time = DateFormat.format(new Date()) + " " + times[k] + ":00";
oj[k]=simpleDateFormat.parse(time).getTime()/1000;
}
if(times.length==2){
if(i==0){//取出第一次入参的参数作为参照对象
al.add(oj[0]);
al.add(oj[1]);
}else{//下面是比较去除交叉重叠的时间算法逻辑
for(int j=0;j<al.size()/2;j++){
if(oj[0]<Convert.toLong(al.get(j*2))){
if(oj[1]<Convert.toLong(al.get(j*2))){
if(j==0||(j>0&&oj[0]>Convert.toLong(al.get(j*2-1)))){
al.add(2*j,oj[0]);
al.add(2*j+1,oj[1]);
break;
}
}else{
if(oj[1]<Convert.toLong(al.get(2*j+1))){
if(j>0&&oj[0]<=Convert.toLong(al.get(2*j-1))){
al.remove(j*2);
al.remove(j*2-1);
}else {
al.remove(j*2);
al.add(j*2,oj[0]);
}
}else{
if(j>0&&oj[0]<Convert.toLong(al.get(2*j-1))){
al.remove(j*2);
al.remove(j*2);
}else {
al.remove(j*2);
al.add(j*2,oj[0]);
al.remove(j*2+1);
al.add(j*2+1,oj[1]);
}
}
}
}else{
if(oj[0]>Convert.toLong(al.get(2*j+1))){
if((al.size()-(2*j+1))<=1) {
al.add(oj[0]);
al.add(oj[1]);
break;
}
}else {
if(oj[1]>Convert.toLong(al.get(2*j+1))){
al.remove(2*j+1);
al.add(2*j+1,oj[1]);
}
}
}
}
}
}
}
}
double h=0.00;
for(int l=0;l<al.size()/2;l++){
long max=Convert.toLong(al.get(l*2+1))/60;
long min=Convert.toLong(al.get(l*2))/60;
double f1 = new BigDecimal((float)(max-min)/60).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
h+=f1;
logger.info("f1="+f1);
logger.info("h="+h);
}
return h;
}