|
@@ -225,11 +225,16 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
|
|
|
return map;
|
|
|
}
|
|
|
|
|
|
+ public void lockOrUnLockBySpace(Long cameraId){
|
|
|
+ CameraDetail cameraDetail = cameraDetailService.getByCameraId(cameraId);
|
|
|
+ this.lockOrUnLockBySpace(cameraDetail,cameraId);
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* @param payStatus -2 封存,为 1 解封
|
|
|
*/
|
|
|
@Override
|
|
|
- public void lockOrUnLockBySpace(CameraDetail cameraDetail, Long cameraId, Integer payStatus) {
|
|
|
+ public void lockOrUnLockBySpace(CameraDetail cameraDetail, Long cameraId) {
|
|
|
|
|
|
Long totalSpace = cameraDetail.getTotalSpace();
|
|
|
UserIncrement userIncrement = userIncrementService.getByCameraId(cameraId);
|
|
@@ -255,67 +260,60 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
|
|
|
cameraDetailService.updateSpaceByCameraId(cameraId,usedSpace);
|
|
|
//计算时间倒序
|
|
|
List<SimpleSceneVo> sceneVos = voList.stream().sorted(Comparator.comparing(SimpleSceneVo::getCreateTime).reversed()).collect(Collectors.toList());
|
|
|
- //使用容量大于总容量,不予解封
|
|
|
- if(payStatus == 1 && totalSpace != -1 && usedSpace >= cameraDetail.getTotalSpace()){
|
|
|
- return;
|
|
|
- }
|
|
|
- // 总容量大于已使用容量,不予封存
|
|
|
- if (payStatus == -2 && (totalSpace == -1 || totalSpace >= usedSpace )) {
|
|
|
- return;
|
|
|
- }
|
|
|
- log.info("lockOrUnLockBySpace---cameraId:{},payStatus:{},totalSpace:{},useSpace{}",
|
|
|
- cameraId,payStatus,totalSpace,usedSpace);
|
|
|
|
|
|
-
|
|
|
- if(totalSpace == -1){ // 无限容量 全部解封
|
|
|
+ log.info("lockOrUnLockBySpace---cameraId:{},totalSpace:{},useSpace{}", cameraId,totalSpace,usedSpace);
|
|
|
+ if(totalSpace == -1){ // 无限容量 全部解封
|
|
|
List<Long> sceneIds = sceneVos.stream().filter(entity -> entity.getPayStatus() !=1).map(SimpleSceneVo::getId).collect(Collectors.toList());
|
|
|
lockOrUnLockScenes(sceneIds,1);
|
|
|
return;
|
|
|
}
|
|
|
- //修改已场景实际容量为准
|
|
|
- //按计算完成时间由新到旧封存
|
|
|
- //按计算完成时间由旧到新解封
|
|
|
-
|
|
|
List<Long> lockedIds = new ArrayList<>();
|
|
|
- Long beyondSpace = 0L;
|
|
|
- Long accumulateSpace = 0L;
|
|
|
- Long cameraDetailSpace = 0L;
|
|
|
- if(payStatus == 1){ //解封
|
|
|
+ Long cameraDetailSpace = usedSpace;
|
|
|
+ if(usedSpace < totalSpace){ //使用容量小于总容量,解封
|
|
|
sceneVos = sceneVos.stream().filter(entity -> entity.getPayStatus() !=1).collect(Collectors.toList());
|
|
|
- Collections.reverse(sceneVos);
|
|
|
- beyondSpace = totalSpace - usedSpace;
|
|
|
- Long space = getSceneLockedIds(lockedIds, sceneVos, beyondSpace, accumulateSpace);
|
|
|
- cameraDetailSpace = usedSpace + space;
|
|
|
- }else {
|
|
|
+ Long space = getSceneUnLockedIds(lockedIds, sceneVos, totalSpace - usedSpace);
|
|
|
+ cameraDetailSpace += space;
|
|
|
+ lockOrUnLockScenes(lockedIds,1);
|
|
|
+ }
|
|
|
+ if(usedSpace > totalSpace){
|
|
|
sceneVos = sceneVos.stream().filter(entity -> entity.getPayStatus() ==1).collect(Collectors.toList());
|
|
|
- beyondSpace = usedSpace - totalSpace;
|
|
|
- Long space = getSceneLockedIds(lockedIds,sceneVos, beyondSpace, accumulateSpace);
|
|
|
- if(lockedIds.size() <=0 && sceneVos.size() >0){
|
|
|
- space = sceneVos.get(0).getSpace();
|
|
|
- lockedIds.add(sceneVos.get(0).getId());
|
|
|
- }
|
|
|
- cameraDetailSpace = usedSpace -space;
|
|
|
+ Long space = getSceneLockedIds(lockedIds,sceneVos,usedSpace - totalSpace);
|
|
|
+ lockOrUnLockScenes(lockedIds,-2);
|
|
|
+ cameraDetailSpace -= space;
|
|
|
}
|
|
|
cameraDetailService.updateSpaceByCameraId(cameraId,cameraDetailSpace);
|
|
|
- lockOrUnLockScenes(lockedIds,payStatus);
|
|
|
}
|
|
|
|
|
|
- private Long getSceneLockedIds(List<Long> lockedIds ,List<SimpleSceneVo> list,Long beyondSpace,Long accumulateSpace){
|
|
|
+ private Long getSceneUnLockedIds(List<Long> lockedIds ,List<SimpleSceneVo> list,Long beyondSpace){
|
|
|
Long space = 0L;
|
|
|
if (list != null && list.size() > 0){
|
|
|
for (SimpleSceneVo scenePro : list){
|
|
|
Long sceneSpace = scenePro.getSpace()== null ? 0 : scenePro.getSpace();
|
|
|
- if (accumulateSpace + sceneSpace > beyondSpace){
|
|
|
+ if (space + sceneSpace > beyondSpace){
|
|
|
continue;
|
|
|
}
|
|
|
- accumulateSpace += sceneSpace;
|
|
|
- space += scenePro.getSpace();
|
|
|
+ space += sceneSpace;
|
|
|
lockedIds.add(scenePro.getId());
|
|
|
}
|
|
|
}
|
|
|
return space;
|
|
|
}
|
|
|
|
|
|
+ private Long getSceneLockedIds(List<Long> lockedIds ,List<SimpleSceneVo> list,Long beyondSpace){
|
|
|
+ Long space = 0L;
|
|
|
+ if (list != null && list.size() > 0){
|
|
|
+ for (SimpleSceneVo scenePro : list){
|
|
|
+ Long sceneSpace = scenePro.getSpace()== null ? 0 : scenePro.getSpace();
|
|
|
+ space += sceneSpace;
|
|
|
+ lockedIds.add(scenePro.getId());
|
|
|
+ if (space > beyondSpace){
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return space;
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
// payStatus 为 -2 封存,为 1 解封
|
|
|
private void lockOrUnLockScenes(List<Long> lockedIds,Integer payStatus) {
|