package com.fdkankan.scene.service.impl;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fdkankan.common.ErrorCode;
import com.fdkankan.feign.TietaFeignClient;
import com.fdkankan.redis.constant.RedisKey;
import com.fdkankan.redis.util.RedisClient;
import com.fdkankan.scene.bean.ResultData;
import com.fdkankan.scene.entity.Scene;
import com.fdkankan.scene.entity.SceneFileMapping;
import com.fdkankan.scene.mapper.SceneMapper;
import com.fdkankan.scene.service.SceneFileMappingService;
import com.fdkankan.scene.service.SceneService;
import com.fdkankan.scene.vo.SceneEditControlsVO;
import com.fdkankan.scene.vo.SceneInfoParamVO;
import com.fdkankan.scene.vo.SceneInfoVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
/**
*
* 服务实现类
*
*
* @author dsx
* @since 2024-06-26
*/
@Service
public class SceneServiceImpl extends ServiceImpl implements SceneService {
@Value("${spring.cloud.nacos.discovery.access-key}")
private String accessKey;
@Value("${tieta.checkToken.syscode}")
private String syscode;
@Autowired
private SceneFileMappingService sceneFileMappingService;
@Autowired
private RedisClient redisClient;
@Resource
private TietaFeignClient tietaFeignClient;
@Override
public ResultData getSceneInfo(SceneInfoParamVO param) throws Exception {
String token = param.getToken();
String acctId = param.getAcctId();
JSONObject params = new JSONObject();
params.put("SYSCODE", syscode);
params.put("ACCTID", acctId);
params.put("TOKEN", token);
JSONObject result = tietaFeignClient.checkProwadaTokenMicro(params);
if(!"0".equals(result.get("RSP"))){
return ResultData.error(4000, (String) result.get("ERRDESC"));
}
String num = param.getNum();
SceneInfoVO sceneInfoVO = null;
String key = String.format(RedisKey.SCENE_JSON, num);
String sceneJson = redisClient.get(key);
if(StrUtil.isNotEmpty(sceneJson)){
sceneInfoVO = JSON.parseObject(sceneJson, SceneInfoVO.class);
sceneInfoVO.getControls().setShowRule(1);
sceneInfoVO.getControls().setShowFloorplan(0);
sceneInfoVO.getControls().setShowDollhouse(0);
sceneInfoVO.setFloorLogo("2");
}else{
Scene scene = this.getOne(new LambdaQueryWrapper().eq(Scene::getNum, num));
if(Objects.isNull(scene)){
return ResultData.error(ErrorCode.FAILURE_CODE_5005.code(), ErrorCode.FAILURE_CODE_5005.message());
}
sceneInfoVO = new SceneInfoVO();
sceneInfoVO.setTitle(scene.getTitle());
sceneInfoVO.setNum(scene.getNum());
sceneInfoVO.setFloorLogoSize(Integer.valueOf(scene.getFloorlogosize()));
sceneInfoVO.setSceneKind(scene.getScenekind());
sceneInfoVO.setSceneResolution(scene.getSceneresolution());
sceneInfoVO.setSceneFrom(scene.getScenefrom());
sceneInfoVO.setModelKind(scene.getModelkind());
sceneInfoVO.setFloorPlanAngle(Float.valueOf(scene.getFloorplanangle()));
sceneInfoVO.setFloorLogo("2");
SceneEditControlsVO sceneEditControlsBean = SceneEditControlsVO.builder().showRule(1).showFloorplan(0).showDollhouse(0).showMap(1).showPanorama(1).showVR(1).showTitle(1).build();
sceneInfoVO.setControls(sceneEditControlsBean);
redisClient.add(key, JSON.toJSONString(sceneInfoVO));
}
List mappingList = sceneFileMappingService.list(new LambdaQueryWrapper().eq(SceneFileMapping::getNum, num));
Map keyMap = mappingList.stream().collect(Collectors.toMap(SceneFileMapping::getKey, SceneFileMapping::getUrl));
sceneInfoVO.setMapping(keyMap);
return ResultData.ok(sceneInfoVO);
}
}