|
@@ -39,21 +39,12 @@ import com.fdkankan.ucenter.util.SceneResourcePath;
|
|
|
import com.fdkankan.ucenter.vo.ResponseScene;
|
|
|
import com.fdkankan.ucenter.vo.request.RequestScene;
|
|
|
import com.fdkankan.ucenter.vo.request.SceneParam;
|
|
|
-import com.fdkankan.ucenter.vo.response.GroupByCount;
|
|
|
-import com.fdkankan.ucenter.vo.response.SceneInfoVo;
|
|
|
-import com.fdkankan.ucenter.vo.response.SceneNumVo;
|
|
|
-import com.fdkankan.ucenter.vo.response.SceneVo;
|
|
|
+import com.fdkankan.ucenter.vo.response.*;
|
|
|
+
|
|
|
import java.io.File;
|
|
|
import java.net.InetAddress;
|
|
|
import java.net.UnknownHostException;
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.Arrays;
|
|
|
-import java.util.Collections;
|
|
|
-import java.util.Date;
|
|
|
-import java.util.HashMap;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Map;
|
|
|
-import java.util.Objects;
|
|
|
+import java.util.*;
|
|
|
import java.util.concurrent.CompletableFuture;
|
|
|
import java.util.concurrent.ExecutorService;
|
|
|
import java.util.concurrent.locks.Condition;
|
|
@@ -252,72 +243,55 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ Long usedSpace = 0L;
|
|
|
+ List<SimpleSceneVo> voList = this.getSimpleSceneVo(cameraId);
|
|
|
+ if(voList .size() <=0){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ List<Long> spaceList = voList.stream().filter(entity -> entity.getPayStatus() == 1).map(SimpleSceneVo::getSpace).collect(Collectors.toList());
|
|
|
+ for (Long aLong : spaceList) {
|
|
|
+ usedSpace += aLong;
|
|
|
+ }
|
|
|
+ //计算时间倒序
|
|
|
+ List<SimpleSceneVo> sceneVos = voList.stream().sorted(Comparator.comparing(SimpleSceneVo::getCreateTime).reversed()).collect(Collectors.toList());
|
|
|
//使用容量大于总容量,不予解封
|
|
|
- if(payStatus == 1 && totalSpace != -1 && cameraDetail.getUsedSpace() >= cameraDetail.getTotalSpace()){
|
|
|
+ if(payStatus == 1 && totalSpace != -1 && usedSpace >= cameraDetail.getTotalSpace()){
|
|
|
return;
|
|
|
}
|
|
|
// 总容量大于已使用容量,不予封存
|
|
|
- if (payStatus == -2 && (totalSpace == -1 || totalSpace >= cameraDetail.getUsedSpace() )) {
|
|
|
+ if (payStatus == -2 && (totalSpace == -1 || totalSpace >= usedSpace )) {
|
|
|
return;
|
|
|
}
|
|
|
-
|
|
|
- LambdaQueryWrapper<ScenePro> wrapper = new LambdaQueryWrapper<>();
|
|
|
- LambdaQueryWrapper<ScenePlus> plusWr = new LambdaQueryWrapper<>();
|
|
|
- wrapper.eq(ScenePro::getStatus,-2);
|
|
|
- plusWr.eq(ScenePlus::getSceneStatus,-2);
|
|
|
-
|
|
|
log.info("lockOrUnLockBySpace---cameraId:{},payStatus:{},totalSpace:{},useSpace{}",
|
|
|
- cameraId,payStatus,totalSpace,cameraDetail.getUsedSpace());
|
|
|
- if(payStatus == 1){ //解封,判断用户权益,用户会员权益无限容量
|
|
|
- wrapper.orderByAsc(ScenePro::getCreateTime);
|
|
|
- plusWr.orderByAsc(ScenePlus::getCreateTime);
|
|
|
- wrapper.eq(ScenePro::getPayStatus,-2);
|
|
|
- plusWr.eq(ScenePlus::getPayStatus,-2);
|
|
|
- }else {
|
|
|
- wrapper.orderByDesc(ScenePro::getCreateTime);
|
|
|
- plusWr.orderByDesc(ScenePlus::getCreateTime);
|
|
|
- wrapper.eq(ScenePro::getPayStatus,1);
|
|
|
- plusWr.eq(ScenePlus::getPayStatus,1);
|
|
|
- }
|
|
|
+ cameraId,payStatus,totalSpace,usedSpace);
|
|
|
|
|
|
- wrapper.eq(ScenePro::getCameraId,cameraId)
|
|
|
- .eq(ScenePro::getIsUpgrade,0);
|
|
|
-
|
|
|
- plusWr.eq(ScenePlus::getCameraId,cameraId);
|
|
|
-
|
|
|
- List<ScenePro> list = this.list(wrapper);
|
|
|
- List<ScenePlus> plusList = scenePlusService.list(plusWr);
|
|
|
-
|
|
|
- List<Long> lockedIds = new ArrayList<>();
|
|
|
|
|
|
if(totalSpace == -1){ // 无限容量 全部解封
|
|
|
- List<Long> collect = list.stream().map(ScenePro::getId).collect(Collectors.toList());
|
|
|
- List<Long> collect2 = plusList.stream().map(ScenePlus::getId).collect(Collectors.toList());
|
|
|
- lockedIds.addAll(collect);
|
|
|
- lockedIds.addAll(collect2);
|
|
|
- lockOrUnLockScenes(lockedIds,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;
|
|
|
- if(payStatus == 1){
|
|
|
- beyondSpace = totalSpace - cameraDetail.getUsedSpace();
|
|
|
- getSceneLockedIds(lockedIds,list,beyondSpace,accumulateSpace);
|
|
|
- getScenePlusLockedIds(lockedIds, plusList, beyondSpace, accumulateSpace);
|
|
|
+ if(payStatus == 1){ //解封
|
|
|
+ beyondSpace = totalSpace - usedSpace;
|
|
|
+ getSceneLockedIds(lockedIds,sceneVos,beyondSpace,accumulateSpace);
|
|
|
}else {
|
|
|
- beyondSpace = cameraDetail.getUsedSpace() - totalSpace;
|
|
|
- getScenePlusLockedIds(lockedIds,plusList,beyondSpace,accumulateSpace);
|
|
|
- getSceneLockedIds(lockedIds, list, beyondSpace, accumulateSpace);
|
|
|
+ beyondSpace = usedSpace - totalSpace;
|
|
|
+ Collections.reverse(sceneVos);
|
|
|
+ getSceneLockedIds(lockedIds,sceneVos, beyondSpace, accumulateSpace);
|
|
|
}
|
|
|
lockOrUnLockScenes(lockedIds,payStatus);
|
|
|
}
|
|
|
|
|
|
-
|
|
|
-
|
|
|
- private void getSceneLockedIds(List<Long> lockedIds ,List<ScenePro> list,Long beyondSpace,Long accumulateSpace){
|
|
|
+ private void getSceneLockedIds(List<Long> lockedIds ,List<SimpleSceneVo> list,Long beyondSpace,Long accumulateSpace){
|
|
|
if (list != null && list.size() > 0){
|
|
|
- for (ScenePro scenePro : list){
|
|
|
+ for (SimpleSceneVo scenePro : list){
|
|
|
accumulateSpace += scenePro.getSpace()== null ? 0 : scenePro.getSpace();
|
|
|
if (accumulateSpace.compareTo(beyondSpace) > 0){
|
|
|
break;
|
|
@@ -326,20 +300,6 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- private void getScenePlusLockedIds(List<Long> lockedIds , List<ScenePlus> list, Long beyondSpace, Long accumulateSpace){
|
|
|
- if (list != null && list.size() > 0){
|
|
|
- List<Long> plusIds = list.parallelStream().map(ScenePlus::getId).collect(Collectors.toList());
|
|
|
- HashMap<Long, ScenePlusExt> byPlusIds = scenePlusExtService.getByPlusIds(plusIds);
|
|
|
- for (ScenePlus scenePlus : list){
|
|
|
- ScenePlusExt scenePlusExt = byPlusIds.get(scenePlus.getId());
|
|
|
- accumulateSpace += scenePlusExt.getSpace() == null ? 0 : scenePlusExt.getSpace();
|
|
|
- if (accumulateSpace.compareTo(beyondSpace) > 0){
|
|
|
- break;
|
|
|
- }
|
|
|
- lockedIds.add(scenePlus.getId());
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
|
|
|
|
|
|
// payStatus 为 -2 封存,为 1 解封
|
|
@@ -1059,6 +1019,41 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
|
|
|
|
|
|
|
|
|
@Override
|
|
|
+ public List<SimpleSceneVo> getSimpleSceneVo(Long cameraId) {
|
|
|
+ List<SimpleSceneVo> voList = new ArrayList<>();
|
|
|
+ List<ScenePro> proList = this.getListByCameraId(cameraId);
|
|
|
+ for (ScenePro scenePro : proList) {
|
|
|
+ if(scenePro.getStatus() !=-2){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ SimpleSceneVo sceneVo = new SimpleSceneVo();
|
|
|
+ sceneVo.setId(scenePro.getId());
|
|
|
+ sceneVo.setNum(scenePro.getNum());
|
|
|
+ sceneVo.setPayStatus(scenePro.getPayStatus());
|
|
|
+ sceneVo.setCreateTime(DateUserUtil.getDate(scenePro.getCreateTime()).getTime());
|
|
|
+ sceneVo.setSpace(scenePro.getSpace());
|
|
|
+ voList.add(sceneVo);
|
|
|
+ }
|
|
|
+ List<ScenePlus> plusList = scenePlusService.getListByCameraId(cameraId);
|
|
|
+ List<Long> plusIds = plusList.stream().map(ScenePlus::getId).collect(Collectors.toList());
|
|
|
+ HashMap<Long, ScenePlusExt> plusMap = scenePlusExtService.getByPlusIds(plusIds);
|
|
|
+ for (ScenePlus scenePlus : plusList) {
|
|
|
+ ScenePlusExt ext = plusMap.get(scenePlus.getId());
|
|
|
+ if(ext == null || scenePlus.getSceneStatus() !=-2){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ SimpleSceneVo sceneVo = new SimpleSceneVo();
|
|
|
+ sceneVo.setId(scenePlus.getId());
|
|
|
+ sceneVo.setNum(scenePlus.getNum());
|
|
|
+ sceneVo.setPayStatus(scenePlus.getPayStatus());
|
|
|
+ sceneVo.setCreateTime(DateUserUtil.getDate(ext.getAlgorithmTime()).getTime());
|
|
|
+ sceneVo.setSpace(ext.getSpace());
|
|
|
+ voList.add(sceneVo);
|
|
|
+ }
|
|
|
+ return voList;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
public void generateObjFile(String num) {
|
|
|
// LambdaQueryWrapper<ScenePro> wrapper = new LambdaQueryWrapper<>();
|
|
|
// wrapper.eq(ScenePro::getNum,num).eq(ScenePro::getRecStatus,"A");
|