Explorar el Código

国际环境 计算后 默认加上滤镜

dengsixing hace 1 año
padre
commit
3a2f46dda4

+ 2 - 0
src/main/java/com/fdkankan/contro/constant/UserEditDataType.java

@@ -7,6 +7,8 @@ public enum UserEditDataType {
 
     BOX_MODEL("boxModel", "boxModelHandler"),
     FLOORPLAN("floorplan", "floorplanHandler"),
+
+    FILTERS("filters", "filtersHandler"),
     ;
 
     private String code;

+ 132 - 0
src/main/java/com/fdkankan/contro/factory/UserEditData/FiltersHandler.java

@@ -0,0 +1,132 @@
+package com.fdkankan.contro.factory.UserEditData;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.common.constant.CommonStatus;
+import com.fdkankan.common.constant.SceneSource;
+import com.fdkankan.common.util.FileUtils;
+import com.fdkankan.contro.entity.SceneEditInfo;
+import com.fdkankan.contro.entity.SceneEditInfoExt;
+import com.fdkankan.contro.entity.ScenePlus;
+import com.fdkankan.contro.entity.ScenePlusExt;
+import com.fdkankan.contro.service.ISceneEditInfoExtService;
+import com.fdkankan.contro.service.ISceneEditInfoService;
+import com.fdkankan.contro.service.IScenePlusExtService;
+import com.fdkankan.contro.service.IScenePlusService;
+import com.fdkankan.fyun.face.FYunFileServiceInterface;
+import com.fdkankan.model.constants.ConstantFilePath;
+import com.fdkankan.model.constants.UploadFilePath;
+import com.fdkankan.model.utils.SceneUtil;
+import com.fdkankan.redis.constant.RedisKey;
+import com.fdkankan.redis.constant.RedisLockKey;
+import com.fdkankan.redis.util.RedisLockUtil;
+import com.fdkankan.redis.util.RedisUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.io.File;
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * 初始化空间模型
+ */
+@Component("floorplanHandler")
+public class FiltersHandler implements UserEditDataHandler {
+
+    @Autowired
+    private IScenePlusService scenePlusService;
+    @Autowired
+    private IScenePlusExtService scenePlusExtService;
+    @Autowired
+    private ISceneEditInfoService sceneEditInfoService;
+    @Autowired
+    private ISceneEditInfoExtService sceneEditInfoExtService;
+    @Resource
+    private FYunFileServiceInterface fYunFileService;
+    @Autowired
+    private RedisUtil redisUtil;
+    @Value("${env:gn}")
+    private String env;
+    @Resource
+    private RedisLockUtil redisLockUtil;
+
+    @Override
+    public void init(String num, Map<String, Object> params) throws Exception {
+
+        //国际服且看看且没有滤镜数据的才需要生成默认滤镜信息
+        if(!"eur".equals(env)){
+            return;
+        }
+        ScenePlus scenePlus = scenePlusService.getScenePlusByNum(num);
+        if(scenePlus.getSceneSource() != SceneSource.BM.code()){
+            return;
+        }
+        ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId());
+        String dataSource = scenePlusExt.getDataSource();
+        SceneEditInfo sceneEditInfo = sceneEditInfoService.getByScenePlusId(scenePlus.getId());
+        SceneEditInfoExt sceneEditInfoExt = sceneEditInfoExtService.getByEditInfoId(sceneEditInfo.getId());
+        if(Objects.nonNull(sceneEditInfoExt.getFilters())
+                && sceneEditInfoExt.getFilters() == CommonStatus.YES.code().intValue()){
+            return;
+        }
+
+        //获取全景图id
+        String visionPath = dataSource + File.separator + "results" + File.separator + "vision.txt";
+
+        List<String> panoramaUuidList = SceneUtil.getPanoramaUuidList(visionPath);
+        //{saturation: 0.35, brightness: 0.35, contrast: 0.4, temperature: 0.25, id: "0"}
+        List<JSONObject> collect = panoramaUuidList.stream().map(v -> {
+            JSONObject jsonObject = new JSONObject();
+            jsonObject.put("id", v);
+            jsonObject.put("saturation", new BigDecimal(-4).divide(new BigDecimal(20)).setScale(2));//饱和度
+            jsonObject.put("brightness", new BigDecimal(0).divide(new BigDecimal(20)).setScale(2));//亮度
+            jsonObject.put("contrast", new BigDecimal(0).divide(new BigDecimal(20)).setScale(2));//对比度
+            jsonObject.put("temperature", new BigDecimal(2).divide(new BigDecimal(20)).setScale(2));//对比度
+            return jsonObject;
+        }).collect(Collectors.toList());
+
+        String key = String.format(RedisKey.SCENE_filter_DATA,num);
+        List<String> filterList = collect.stream().map(item->JSON.toJSONString(item)).collect(Collectors.toList());
+        redisUtil.lRightPushAll(key, filterList);
+
+        //写本地文件,作为备份
+        this.writeFilter(num);
+
+        sceneEditInfoExt.setFilters(CommonStatus.YES.code().intValue());
+        sceneEditInfoExtService.updateById(sceneEditInfoExt);
+
+    }
+
+    private void writeFilter(String num) throws Exception{
+
+        String filterPath = String.format(ConstantFilePath.SCENE_USER_PATH_V4, num) + "filter.json";
+
+        String key = String.format(RedisKey.SCENE_filter_DATA, num);
+        List<String> filters = redisUtil.lGet(key, 0, -1);
+        if(CollUtil.isEmpty(filters)){
+            FileUtils.deleteFile(filterPath);
+            return;
+        }
+
+        String lockKey = String.format(RedisLockKey.LOCK_filter_JSON, num);
+        String lockVal = cn.hutool.core.lang.UUID.randomUUID().toString();
+        boolean lock = redisLockUtil.lock(lockKey, lockVal, RedisKey.EXPIRE_TIME_1_MINUTE);
+        if(!lock){
+            return;
+        }
+        try{
+            FileUtils.writeFile(filterPath, JSON.toJSONString(filters));
+        }finally {
+            redisLockUtil.unlockLua(lockKey, lockVal);
+        }
+    }
+}

+ 1 - 1
src/main/java/com/fdkankan/contro/factory/UserEditData/UserEditDataHandler.java

@@ -4,6 +4,6 @@ import java.util.Map;
 
 public interface UserEditDataHandler {
 
-    void init(String num, Map<String, Object> params);
+    void init(String num, Map<String, Object> params) throws Exception;
 
 }

+ 1 - 0
src/main/java/com/fdkankan/contro/mq/service/impl/BuildSceneServiceImpl.java

@@ -307,6 +307,7 @@ public class BuildSceneServiceImpl implements IBuildSceneService {
             Set<String> bizs = new HashSet<>();
             bizs.add(UserEditDataType.BOX_MODEL.message());
             bizs.add(UserEditDataType.FLOORPLAN.message());
+            bizs.add(UserEditDataType.FLOORPLAN.message());
             commonService.initUserEditData(sceneCode, bizs, null);
 
             //上传计算结果文件

+ 1 - 1
src/main/java/com/fdkankan/contro/service/ICommonService.java

@@ -25,7 +25,7 @@ public interface ICommonService {
      *               key : bizType
      *               value: Map<String ,Object> 参数map
      */
-    public void initUserEditData(String num, Set<String> bizs, Map<String, Map<String ,Object>> params);
+    public void initUserEditData(String num, Set<String> bizs, Map<String, Map<String ,Object>> params) throws Exception;
 
     public void uploadFloorplanJson(String num, String dataSource) throws Exception;
 

+ 1 - 1
src/main/java/com/fdkankan/contro/service/impl/CommonServiceImpl.java

@@ -221,7 +221,7 @@ public class CommonServiceImpl implements ICommonService {
     }
 
     @Override
-    public void initUserEditData(String num, Set<String> bizs, Map<String, Map<String ,Object>> params) {
+    public void initUserEditData(String num, Set<String> bizs, Map<String, Map<String ,Object>> params) throws Exception {
         if(StrUtil.isEmpty(num) || CollUtil.isEmpty(bizs)){
             return;
         }