Bladeren bron

Merge branch 'lyh-pay-status-mq' into test

# Conflicts:
#	src/main/java/com/fdkankan/ucenter/service/ISceneProService.java
lyhzzz 2 jaren geleden
bovenliggende
commit
ed5b2676c7

+ 60 - 0
src/main/java/com/fdkankan/ucenter/mq/consumer/ScenePayStatusConsumer.java

@@ -0,0 +1,60 @@
+package com.fdkankan.ucenter.mq.consumer;
+
+import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.ucenter.httpClient.vo.PayOrderVo;
+import com.fdkankan.ucenter.mq.vo.ScenePayStatusVo;
+import com.fdkankan.ucenter.pay.strategy.impl.DownloadOrderImpl;
+import com.fdkankan.ucenter.pay.strategy.impl.EntityOrderImpl;
+import com.fdkankan.ucenter.pay.strategy.impl.IncrementOrderImpl;
+import com.fdkankan.ucenter.service.ISceneProService;
+import com.rabbitmq.client.Channel;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang.StringEscapeUtils;
+import org.springframework.amqp.core.Message;
+import org.springframework.amqp.rabbit.annotation.Queue;
+import org.springframework.amqp.rabbit.annotation.RabbitListener;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.nio.charset.StandardCharsets;
+
+/**
+ * 场景封存解封 mq
+ */
+@Slf4j
+@Component
+public class ScenePayStatusConsumer {
+
+
+    @Autowired
+    ISceneProService sceneProService;
+
+    @RabbitListener(
+            queuesToDeclare = @Queue("${queue.scene.pay-status:scene-pay-status}")
+    )
+    public void consumerQueue(Channel channel, Message message)  {
+        try {
+            String messageId = message.getMessageProperties().getMessageId();
+            String msg = new String(message.getBody(), StandardCharsets.UTF_8);
+            log.info("接受下单结果mq--messageId:{},msg:{}",messageId,msg);
+
+            channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
+            msg = msg.substring(1, msg.length() - 1);
+
+            msg = StringEscapeUtils.unescapeJava(msg);
+
+            ScenePayStatusVo order = JSONObject.parseObject(msg, ScenePayStatusVo.class);
+            if(order == null){
+                return;
+            }
+            sceneProService.lockOrUnLockBySpace(order.getCameraId());
+
+        }catch (Exception e){
+            log.error("order-payResult----消费失败",e);
+        }finally {
+
+        }
+
+    }
+
+}

+ 10 - 0
src/main/java/com/fdkankan/ucenter/mq/vo/ScenePayStatusVo.java

@@ -0,0 +1,10 @@
+package com.fdkankan.ucenter.mq.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class ScenePayStatusVo implements Serializable {
+    private Long cameraId;
+}

+ 1 - 1
src/main/java/com/fdkankan/ucenter/pay/strategy/impl/ExpansionOrderImpl.java

@@ -52,7 +52,7 @@ public class ExpansionOrderImpl implements OrderStrategy {
             CameraDetail detailEntity = cameraDetailService.getByCameraId(expansionOrder.getCameraId());
             detailEntity.setTotalSpace(cameraSpaceEntity.getSpace());
             cameraDetailService.updateById(detailEntity);
-            sceneProService.lockOrUnLockBySpace(detailEntity,detailEntity.getCameraId() ,1);
+            sceneProService.lockOrUnLockBySpace(detailEntity,detailEntity.getCameraId() );
         }else {
             cameraSpaceEntity = cameraSpaceService.getById(spaceId);
             DateTime date = null;

+ 1 - 1
src/main/java/com/fdkankan/ucenter/pay/strategy/impl/IncrementOrderImpl.java

@@ -86,7 +86,7 @@ public class IncrementOrderImpl implements OrderStrategy {
             //解封所有场景
             if(userIncrementEntity.getUserId() != null && userIncrementEntity.getCameraId() != null){
                 CameraDetail cameraDetail = cameraDetailService.getByCameraId(userIncrementEntity.getCameraId());
-                sceneProService.lockOrUnLockBySpace(cameraDetail, userIncrementEntity.getCameraId(),1);
+                sceneProService.lockOrUnLockBySpace(cameraDetail, userIncrementEntity.getCameraId());
             }
         }
 

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

@@ -21,7 +21,7 @@ import java.util.List;
  * pro场景表 服务类
  * </p>
  *
- * @author 
+ * @author
  * @since 2022-07-04
  */
 public interface ISceneProService extends IService<ScenePro> {
@@ -30,7 +30,10 @@ public interface ISceneProService extends IService<ScenePro> {
 
     HashMap<Long, GroupByCount> findSceneNumByCameraIds(List<Long> cameraIdList);
 
-    void lockOrUnLockBySpace(CameraDetail cameraDetail, Long cameraId, Integer payStatus);
+
+    void lockOrUnLockBySpace(CameraDetail cameraDetail, Long cameraId);
+
+    void lockOrUnLockBySpace(Long cameraId);
 
     List<ScenePro> getListByCameraId(Long cameraId);
 
@@ -79,7 +82,7 @@ public interface ISceneProService extends IService<ScenePro> {
 
     Object getScenes(String username, RequestScene param);
 
-     void updateOssStatus(String path,Integer payStatus) ;
+    void updateOssStatus(String path,Integer payStatus) ;
 
     Integer getSceneSourceByNum(String sceneNum);
 

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

@@ -111,7 +111,7 @@ public class CameraDetailServiceImpl extends ServiceImpl<ICameraDetailMapper, Ca
             this.update(wrapper);
             cameraDetail.setTotalSpace(Long.parseLong(Constant.EXPANSION_SPACE_VALUE_1G ) * 10L);
             if(!"local".equals(NacosProperty.uploadType) && cameraDetail.getType()!=10){
-                sceneProService.lockOrUnLockBySpace(cameraDetail,cameraDetail.getCameraId(),-2);     //封存场景
+                sceneProService.lockOrUnLockBySpace(cameraDetail,cameraDetail.getCameraId());     //封存场景
             }
             if(cameraDetail.getType() == 10){
                 fdkkLaserService.toBind(false,cameraMap.get(cameraDetail.getCameraId()).getSnCode(),null,null);
@@ -165,7 +165,7 @@ public class CameraDetailServiceImpl extends ServiceImpl<ICameraDetailMapper, Ca
             long usedSpace = cameraDetail.getUsedSpace() - subSpace ;
             cameraDetail.setUsedSpace(usedSpace < 0 ? 0L :usedSpace);
             //解封封存场景
-            sceneProService.lockOrUnLockBySpace(cameraDetail,cameraDetail.getCameraId(),1);
+            sceneProService.lockOrUnLockBySpace(cameraDetail,cameraDetail.getCameraId());
         }
         this.updateBatchById(list);
     }

+ 36 - 38
src/main/java/com/fdkankan/ucenter/service/impl/SceneProServiceImpl.java

@@ -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) {

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

@@ -205,7 +205,7 @@ public class UserIncrementServiceImpl extends ServiceImpl<IUserIncrementMapper,
         userIncrement.setUpdateTime(DateUserUtil.getDate(new Date()));
         this.updateById(userIncrement);
         cameraIncrementLogService.saveLog(cameraEntity.getId(),userIncrement.getId(),user.getId(),0);
-        sceneProService.lockOrUnLockBySpace(cameraDetailEntity,cameraEntity.getId(),1);
+        sceneProService.lockOrUnLockBySpace(cameraDetailEntity,cameraEntity.getId());
     }
 
     @Override
@@ -234,7 +234,7 @@ public class UserIncrementServiceImpl extends ServiceImpl<IUserIncrementMapper,
         wrapper.set(UserIncrement::getCameraId,null);
         this.update(wrapper);
         if(cameraDetail.getType() !=10){
-            sceneProService.lockOrUnLockBySpace(cameraDetail,cameraDetail.getCameraId(),-2);
+            sceneProService.lockOrUnLockBySpace(cameraDetail,cameraDetail.getCameraId());
         }
     }
 
@@ -268,7 +268,7 @@ public class UserIncrementServiceImpl extends ServiceImpl<IUserIncrementMapper,
             this.updateById(userIncrement);
 
             if(cameraDetail.getType() !=10){
-                sceneProService.lockOrUnLockBySpace(cameraDetail,cameraDetail.getCameraId(),payStatus);
+                sceneProService.lockOrUnLockBySpace(cameraDetail,cameraDetail.getCameraId());
             }
         }
     }