Kaynağa Gözat

封存解封

lyhzzz 2 yıl önce
ebeveyn
işleme
660acb8be2

+ 3 - 4
src/main/java/com/fdkankan/ucenter/service/ISceneProService.java

@@ -11,10 +11,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 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.util.HashMap;
 import java.util.List;
@@ -86,4 +83,6 @@ public interface ISceneProService extends IService<ScenePro> {
      void updateOssStatus(String path,Integer payStatus) ;
 
     Integer getSceneSourceByNum(String sceneNum);
+
+    List<SimpleSceneVo> getSimpleSceneVo(Long cameraId);
 }

+ 6 - 4
src/main/java/com/fdkankan/ucenter/service/impl/ScenePlusExtServiceImpl.java

@@ -36,11 +36,13 @@ public class ScenePlusExtServiceImpl extends ServiceImpl<IScenePlusExtMapper, Sc
 
     @Override
     public HashMap<Long, ScenePlusExt> getByPlusIds(List<Long> plusIds) {
-        LambdaQueryWrapper<ScenePlusExt> wrapper = new LambdaQueryWrapper<>();
-        wrapper.in(ScenePlusExt::getPlusId,plusIds);
-        List<ScenePlusExt> list = this.list(wrapper);
         HashMap<Long,ScenePlusExt> map = new HashMap<>();
-        list.forEach(entity -> map.put(entity.getPlusId(),entity));
+        if(plusIds.size() >0){
+            LambdaQueryWrapper<ScenePlusExt> wrapper = new LambdaQueryWrapper<>();
+            wrapper.in(ScenePlusExt::getPlusId,plusIds);
+            List<ScenePlusExt> list = this.list(wrapper);
+            list.forEach(entity -> map.put(entity.getPlusId(),entity));
+        }
         return map;
     }
 

+ 66 - 71
src/main/java/com/fdkankan/ucenter/service/impl/SceneProServiceImpl.java

@@ -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");

+ 14 - 0
src/main/java/com/fdkankan/ucenter/vo/response/SimpleSceneVo.java

@@ -0,0 +1,14 @@
+package com.fdkankan.ucenter.vo.response;
+
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class SimpleSceneVo {
+    private Long id;
+    private String num;
+    private Integer payStatus;
+    private Long createTime;
+    private Long space = 0L;
+}