Преглед изворни кода

Merge branch 'lyh-bug-increment-exp'

lyhzzz пре 2 година
родитељ
комит
cbc8856e15

+ 12 - 5
src/main/java/com/fdkankan/ucenter/controller/TestController.java

@@ -3,6 +3,7 @@ package com.fdkankan.ucenter.controller;
 import cn.hutool.core.io.FileUtil;
 import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.fdkankan.common.util.FileUtils;
 import com.fdkankan.common.util.JwtUtil;
@@ -12,10 +13,7 @@ import com.fdkankan.redis.constant.RedisKey;
 import com.fdkankan.redis.util.RedisUtil;
 import com.fdkankan.sms.SmsService;
 import com.fdkankan.ucenter.common.*;
-import com.fdkankan.ucenter.entity.ScenePlus;
-import com.fdkankan.ucenter.entity.ScenePlusExt;
-import com.fdkankan.ucenter.entity.ScenePro;
-import com.fdkankan.ucenter.entity.SceneProRe;
+import com.fdkankan.ucenter.entity.*;
 import com.fdkankan.ucenter.service.*;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -46,6 +44,8 @@ public class TestController extends BaseController {
     IScenePlusExtService scenePlusExtService;
     @Autowired
     ISceneProReService sceneProReService;
+    @Autowired
+    IUserIncrementService userIncrementService;
 
     @RequestMapping("/_updateViewCount_test")
     public Result updateViewCount() throws Exception {
@@ -65,8 +65,15 @@ public class TestController extends BaseController {
         return Result.success( );
     }
 
+    @GetMapping("checkIncrement")
+    public Result checkIncrement() throws Exception {
+        List<UserIncrement> list = userIncrementService.list();
+        userIncrementService.lockScene(list);
+        return Result.success();
+    }
+
 
-    @RequestMapping("/sendMail")
+        @RequestMapping("/sendMail")
     public Result sendMail() throws Exception {
         return Result.success( );
     }

+ 0 - 3
src/main/java/com/fdkankan/ucenter/httpClient/service/LaserService.java

@@ -56,9 +56,6 @@ public class LaserService {
      */
     public SceneNumVo getLaserSceneNumByUser(String token) {
         SceneNumVo sceneNumVo = new SceneNumVo();
-        if("aws".equals(NacosProperty.uploadType)){
-            return sceneNumVo;
-        }
         try {
             Result sceneNum = laserClient.getSceneNum(token);
             if(sceneNum != null && sceneNum.getCode() == 200){

+ 2 - 0
src/main/java/com/fdkankan/ucenter/service/ICameraDetailService.java

@@ -46,4 +46,6 @@ public interface ICameraDetailService extends IService<CameraDetail> {
     void uploadUserCameraInfo(Long id, String cameraVersion, String appVersion);
 
     List<CameraExcelVo> getListByUserAndTypeEx(Long cameraId);
+
+    void updateSpaceByCameraId(Long cameraId, Long cameraDetailSpace);
 }

+ 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);
 }

+ 2 - 0
src/main/java/com/fdkankan/ucenter/service/IUserIncrementService.java

@@ -36,6 +36,8 @@ public interface IUserIncrementService extends IService<UserIncrement> {
 
     void incrementExpire();
 
+    void lockScene(List<UserIncrement> list);
+
     void incrementExpireSendSms() throws Exception;
 
     void addByCameraAndUser(List<Long> cameraIds, Long id);

+ 8 - 0
src/main/java/com/fdkankan/ucenter/service/impl/CameraDetailServiceImpl.java

@@ -214,4 +214,12 @@ public class CameraDetailServiceImpl extends ServiceImpl<ICameraDetailMapper, Ca
     public List<CameraExcelVo> getListByUserAndTypeEx(Long userId) {
         return this.getBaseMapper().getListByUserAndTypeEx(userId);
     }
+
+    @Override
+    public void updateSpaceByCameraId(Long cameraId, Long cameraDetailSpace) {
+        LambdaUpdateWrapper<CameraDetail> wrapper = new LambdaUpdateWrapper<>();
+        wrapper.eq(CameraDetail::getCameraId,cameraId)
+                .set(CameraDetail::getUsedSpace,cameraDetailSpace);
+        this.update(wrapper);
+    }
 }

+ 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;
     }
 

+ 85 - 73
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;
@@ -242,7 +233,7 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
 
         Long totalSpace = cameraDetail.getTotalSpace();
         UserIncrement userIncrement = userIncrementService.getByCameraId(cameraId);
-        if(userIncrement!=null){
+        if(userIncrement!=null && userIncrement.getIsExpired()==0){
             IncrementType incrementType = incrementTypeService.getById(userIncrement.getIncrementTypeId());
             if(incrementType!=null){
                 if(incrementType.getCameraCapacity() == -1){
@@ -252,93 +243,79 @@ 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;
+        }
+        cameraDetailService.updateSpaceByCameraId(cameraId,usedSpace);
+        //计算时间倒序
+        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);
+        Long cameraDetailSpace = 0L;
+        if(payStatus == 1){ //解封
+            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 {
-            beyondSpace =  cameraDetail.getUsedSpace() - totalSpace;
-            getSceneLockedIds(lockedIds, list, beyondSpace, accumulateSpace);
-            getScenePlusLockedIds(lockedIds,plusList,beyondSpace,accumulateSpace);
+            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;
         }
+        cameraDetailService.updateSpaceByCameraId(cameraId,cameraDetailSpace);
         lockOrUnLockScenes(lockedIds,payStatus);
     }
 
-
-
-    private void getSceneLockedIds(List<Long> lockedIds ,List<ScenePro> list,Long beyondSpace,Long accumulateSpace){
+    private Long getSceneLockedIds(List<Long> lockedIds ,List<SimpleSceneVo> list,Long beyondSpace,Long accumulateSpace){
+        Long space = 0L;
         if (list != null && list.size() > 0){
-            for (ScenePro scenePro : list){
+            for (SimpleSceneVo scenePro : list){
+                if(scenePro.getSpace() > beyondSpace){
+                    continue;
+                }
                 accumulateSpace += scenePro.getSpace()== null ? 0 : scenePro.getSpace();
-                if (accumulateSpace.compareTo(beyondSpace) > 0){
+                if (accumulateSpace > beyondSpace){
                     break;
                 }
+                space += scenePro.getSpace();
                 lockedIds.add(scenePro.getId());
             }
         }
-    }
-    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());
-            }
-        }
+        return space;
     }
 
 
@@ -1058,6 +1035,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");

+ 23 - 5
src/main/java/com/fdkankan/ucenter/service/impl/UserIncrementServiceImpl.java

@@ -27,6 +27,7 @@ import com.fdkankan.ucenter.util.DateUserUtil;
 import com.fdkankan.ucenter.vo.request.IncrementParam;
 import com.fdkankan.ucenter.vo.response.UserIncrementVo;
 import jodd.util.StringUtil;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -244,14 +245,31 @@ public class UserIncrementServiceImpl extends ServiceImpl<IUserIncrementMapper,
         wrapper.eq(UserIncrement::getIsExpired,0);
         wrapper.lt(UserIncrement::getIncrementEndTime,DateUserUtil.getDate(new Date()));
         List<UserIncrement> list = this.list(wrapper);
+        lockScene(list);
+    }
+
+    public void lockScene(List<UserIncrement> list){
         for (UserIncrement userIncrement : list) {
-            userIncrement.setIsExpired(1);
+            Integer payStatus = 1;
+            if(DateUserUtil.getDate(userIncrement.getIncrementEndTime()).getTime() > new Date().getTime()){
+                userIncrement.setIsExpired(0);
+                payStatus = 1;
+            }else {
+                payStatus = -2;
+                userIncrement.setIsExpired(1);
+            }
             userIncrement.setUpdateTime(null);
-            this.updateById(userIncrement);
             //解除相机权益
-            IncrementParam incrementParam = new IncrementParam();
-            incrementParam.setId(userIncrement.getId());
-            this.unbindCamera(incrementParam);
+            CameraDetail cameraDetail = cameraDetailService.getByCameraId(userIncrement.getCameraId());
+            if(cameraDetail == null){
+                continue;
+            }
+            userIncrement.setCameraId(null);
+            this.updateById(userIncrement);
+
+            if(cameraDetail.getType() !=10){
+                sceneProService.lockOrUnLockBySpace(cameraDetail,cameraDetail.getCameraId(),payStatus);
+            }
         }
     }
 

+ 3 - 3
src/main/java/com/fdkankan/ucenter/task/TaskService.java

@@ -59,7 +59,7 @@ public class TaskService {
             delFile(files);
             delFile(files1);
             delFile(files2);
-            log.info("delLoginQrCode:结束定时清理本地登录二维码:耗时{}秒",(new Date().getTime() - startTime)/1000 );
+            //log.info("delLoginQrCode:结束定时清理本地登录二维码:耗时{}秒",(new Date().getTime() - startTime)/1000 );
             this.updateSceneViewCount();
         }catch (Exception e){
             log.error("delLoginQrCode错误",e);
@@ -74,7 +74,7 @@ public class TaskService {
         String redisKey = RedisKeyUtil.V4_SCENE_VISIT_CNT;
         Map<String,String> hmget = redisUtil.hmget(redisKey);
         for (String key : hmget.keySet()) {
-            log.info("定时更新场景viewCount--num:{},viewCount:{}",key,hmget.get(key));
+            //log.info("定时更新场景viewCount--num:{},viewCount:{}",key,hmget.get(key));
             sceneProService.updateDbViewCount(key,hmget.get(key));
         }
     }
@@ -92,7 +92,7 @@ public class TaskService {
             }
             String name = f.getName().substring(0,f.getName().lastIndexOf("."));
             if(!redisUtil.hasKey(RedisKeyUtil.QRCODE + name)){
-                log.info("删除文件:{}",f.getPath());
+                //log.info("删除文件:{}",f.getPath());
                 FileUtils.delFile(f.getPath());
             }
         }

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

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