bitset使用
场景一、使用bitset对时间区间进行判断是否冲突
例如:会议房间,时间区间内只能开一场会议,时间重复了就会冲突
注意:可能会导致outOfMemery,需要 processTime = new BitSet();
/**
* 检查时间区间是否冲突
* @param entity
*/
public void checkTimeRepeat(XsfxWillProcess entity){
if(ObjectUtil.isNotEmpty(entity.getWillId()) && ObjectUtil.isNotEmpty(entity.getStartTime()) &&
ObjectUtil.isNotEmpty(entity.getEndTime())){
if(entity.getEndTime().equals(entity.getStartTime())){
throw new BizException("起止时间不能相同");
}
if(entity.getEndTime() < entity.getStartTime()){
throw new BizException("开始时间不能大于结束时间");
}
BitSet processTime = new BitSet();
WillProcessListParamDto dto = new WillProcessListParamDto();
dto.setTempleId(entity.getTempleId());
dto.setWillId(entity.getWillId());
List<WillProcessListPo> willProcessList = xsfxWillProcessMapper.listWillProcess(dto);
if(ObjectUtil.isNotEmpty(willProcessList)){
for (WillProcessListPo po : willProcessList) {
//修改法会流程相等时
if(ObjectUtil.isNotEmpty(entity.getId()) && entity.getId().equals(po.getId())){
continue;
}
processTime.set(po.getStartTime().intValue(), po.getEndTime().intValue());
}
if(!processTime.get(entity.getStartTime().intValue(), entity.getEndTime().intValue()).isEmpty()){
processTime = new BitSet();
throw new BizException("流程时间冲突");
}
}
processTime = new BitSet();
}
}