|
@@ -0,0 +1,145 @@
|
|
|
|
+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 lombok.extern.slf4j.Slf4j;
|
|
|
|
+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;
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * 初始化空间模型
|
|
|
|
+ */
|
|
|
|
+@Slf4j
|
|
|
|
+@Component("filtersHandler")
|
|
|
|
+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;
|
|
|
|
+ }
|
|
|
|
+ log.info("国际环境,开始初始化滤镜,num:{}", num);
|
|
|
|
+ ScenePlus scenePlus = scenePlusService.getScenePlusByNum(num);
|
|
|
|
+ if(scenePlus.getSceneSource() != SceneSource.BM.code()){
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ log.info("看看场景,开始初始化滤镜,num:{}", num);
|
|
|
|
+ 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);
|
|
|
|
+ log.info("点位id,{}",JSON.toJSONString(panoramaUuidList));
|
|
|
|
+ //{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());
|
|
|
|
+ log.info("滤镜数据,filterList,{}",JSON.toJSONString(filterList));
|
|
|
|
+ redisUtil.del(key);
|
|
|
|
+ redisUtil.lRightPushAll(key, filterList);
|
|
|
|
+
|
|
|
|
+ String userViewPath = String.format(UploadFilePath.USER_VIEW_PATH, num);
|
|
|
|
+ List<String> list = redisUtil.lGet(key, 0, -1);
|
|
|
|
+ JSONArray jsonArray = new JSONArray();
|
|
|
|
+ list.stream().forEach(str->jsonArray.add(JSON.parseObject(str)));
|
|
|
|
+ fYunFileService.uploadFile(JSON.toJSONBytes(jsonArray), userViewPath + "filter.json");
|
|
|
|
+
|
|
|
|
+ //写本地文件,作为备份
|
|
|
|
+ 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);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+}
|