package com.fdkankan.ucenter.service.impl; import cn.hutool.core.util.HexUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.crypto.SecureUtil; import cn.hutool.crypto.SmUtil; import cn.hutool.crypto.asymmetric.KeyType; import cn.hutool.crypto.asymmetric.SM2; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.fdkankan.common.constant.ErrorCode; import com.fdkankan.common.exception.BusinessException; import com.fdkankan.common.util.JwtUtil; import com.fdkankan.common.util.SecurityUtil; import com.fdkankan.fyun.face.FYunFileServiceInterface; import com.fdkankan.redis.constant.RedisKey; import com.fdkankan.redis.util.RedisUtil; import com.fdkankan.ucenter.common.Result; import com.fdkankan.ucenter.common.constants.ConstantFilePath; import com.fdkankan.ucenter.common.constants.ResultCode; import com.fdkankan.ucenter.constant.LoginConstant; import com.fdkankan.ucenter.entity.*; import com.fdkankan.ucenter.service.*; import com.fdkankan.ucenter.vo.RelicsSceneInitQueueDTO; import com.fdkankan.ucenter.vo.request.SceneParam; import com.fdkankan.ucenter.util.RsaUtils; import com.fdkankan.ucenter.vo.response.LaserSceneInfoVo; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.io.File; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.security.KeyPair; import java.security.PrivateKey; import java.util.Date; import java.util.Objects; import java.util.stream.Collectors; /** *
* TODO *
* * @author dengsixing * @since 2022/9/27 **/ @Slf4j @Service public class InnerServiceImpl implements IInnerService { @Autowired private ISceneProService sceneProService; @Autowired private ISceneProEditService sceneProEditService; @Autowired private IScenePlusService scenePlusService; @Autowired private IScenePlusExtService scenePlusExtService; @Autowired private ISceneEditInfoService sceneEditInfoService; @Autowired private IUserService userService; @Autowired private RedisUtil redisUtil; @Autowired private ICameraDetailService cameraDetailService; @Autowired private ICameraService cameraService; @Autowired private FYunFileServiceInterface fYunFileService; @Override public Result createTokenByNum(String num) { Long userId = null; ScenePro scenePro = sceneProService.getByNum(num); if(Objects.nonNull(scenePro)){ userId = scenePro.getUserId(); }else{ ScenePlus scenePlus = scenePlusService.getByNum(num); if(Objects.isNull(scenePlus)){ return Result.failure("场景为空"); } userId = scenePlus.getUserId(); } User user = userService.getById(userId); String token = JwtUtil.createJWT(-1, user.getUserName(), "user"); String redisKey = String.format(RedisKey.TOKEN_V3,token); redisUtil.set(redisKey, JSON.toJSONString(user), RedisKey.EXPIRE_TIME_2_HOUR); JSONObject object = new JSONObject(); object.put("token", token); return Result.success(object); } @Override public String getSceneNumVersion(String num) { String version = null; ScenePro scenepro = sceneProService.getByNum(num); if(scenepro == null){ ScenePlus plus = scenePlusService.getByNum(num); if(plus != null){ version = "V4"; } }else { version = "V3"; } return version; } @Override public String querySceneDataSource(String num) { String dataSource = null; ScenePro scenePro = sceneProService.getByNum(num); if(Objects.isNull(scenePro)){ ScenePlus scenePlus = scenePlusService.getByNum(num); if(Objects.isNull(scenePlus)){ return Result.failure(ErrorCode.FAILURE_CODE_5005.code(), ErrorCode.FAILURE_CODE_5005.message()).toString(); } ScenePlusExt scenePlusExt = scenePlusExtService.getByPlusId(scenePlus.getId()); dataSource = scenePlusExt.getDataSource(); }else{ dataSource = scenePro.getDataSource(); } return dataSource; } @Override public Result downloadCapture(String num) { ScenePro scenePro = sceneProService.getByNum(num); ScenePlus scenePlus = scenePlusService.getByNum(num); if (ObjectUtils.isEmpty(scenePlus) && ObjectUtils.isEmpty(scenePro)) { return Result.failure("场景为空"); } String dataSource = null; if(!ObjectUtils.isEmpty(scenePlus)){ ScenePlusExt scenePlusExt = scenePlusExtService.getByPlusId(scenePlus.getId()); dataSource = scenePlusExt.getDataSource(); }else{ dataSource = scenePro.getDataSource(); } String ossPath = ConstantFilePath.OSS_PREFIX + dataSource.replace(ConstantFilePath.BUILD_MODEL_PATH, "") .replace(ConstantFilePath.BUILD_MODEL_LASER_PATH, ""); if (!ossPath.endsWith("/")) { ossPath = ossPath.concat("/"); } fYunFileService.downloadFileByCommand(dataSource + File.separator + "capture", ossPath); return Result.success(); } @Override public Result querySceneNum(String path) { ScenePro scenePro = sceneProService.findByFileId(path); if (!ObjectUtils.isEmpty(scenePro)) { return Result.success(scenePro.getNum()); } ScenePlusExt scenePlusExt = scenePlusExtService.getByUnicode(path); if (!ObjectUtils.isEmpty(scenePlusExt)) { return Result.success(scenePlusService.getById(scenePlusExt.getPlusId()).getNum()); } return null; } @Override public LaserSceneInfoVo getSceneInfo(String num) { LaserSceneInfoVo vo = new LaserSceneInfoVo(); ScenePro scenepro = sceneProService.getByNum(num); if(scenepro != null){ vo.setNum(scenepro.getNum()); vo.setVersion("V3"); vo.setSceneSource(scenepro.getSceneSource()); vo.setSceneScheme(scenepro.getSceneScheme()); vo.setSceneKind(null); vo.setSceneResolution(null); vo.setObjScenePath(scenepro.getWebSite()); vo.setIsObj(scenepro.getIsObj()); vo.setAlgorithmTime(scenepro.getCreateTime()); vo.setStatus(scenepro.getStatus()); vo.setPayStatus(scenepro.getPayStatus()); vo.setTitle(scenepro.getSceneName()); SceneProEdit sceneProEdit = sceneProEditService.getByProId(scenepro.getId()); if(sceneProEdit != null){ vo.setImgVersion(sceneProEdit.getImagesVersion()); } return vo; } ScenePlus plus = scenePlusService.getByNum(num); if(plus != null){ ScenePlusExt plusExt = scenePlusExtService.getByPlusId(plus.getId()); if(plusExt != null){ vo.setNum(plus.getNum()); vo.setVersion("V4"); vo.setSceneSource(plus.getSceneSource()); vo.setSceneScheme(plusExt.getSceneScheme()); vo.setSceneKind(plusExt.getSceneKind()); vo.setSceneResolution(plusExt.getSceneResolution()); vo.setObjScenePath(plusExt.getWebSite()); vo.setIsObj(plusExt.getIsObj()); vo.setAlgorithmTime(plusExt.getAlgorithmTime()); vo.setStatus(plus.getSceneStatus()); vo.setPayStatus(plus.getPayStatus()); vo.setTitle(plus.getTitle()); SceneEditInfo sceneEditInfo = sceneEditInfoService.getByScenePlusId(plus.getId()); if(sceneEditInfo != null){ vo.setImgVersion(sceneEditInfo.getImgVersion()); } return vo; } } throw new BusinessException(ResultCode.FAILURE_CODE_400002,ResultCode.FAILURE_MSG_400002); } @Override public Object getCameraDetail(String snCode) { Camera camera = cameraService.getBySnCode(snCode); if(camera == null){ throw new BusinessException(-1,"相机不存在"); } return cameraDetailService.getByCameraId(camera.getId()); } @Override public Boolean checkSign(String sign) { try { if(StringUtils.isBlank(sign)){ return false; } String deTxt = RsaUtils.decipher(sign, RsaUtils.privateKey); if(StringUtils.isBlank(deTxt)){ return false; } JSONObject jsonObject = JSONObject.parseObject(deTxt); String appId = jsonObject.getString("appId"); Long timestamp = jsonObject.getLong("timestamp"); if(StringUtils.isBlank(appId) || timestamp == null){ return false; } if(!appId.equals("ucenter")){ return false; } Long time = new Date().getTime(); if(time -timestamp >1000 * 30){ return false; } return true; }catch (Exception e){ log.info("checkSign-error:{}",sign,e); return false; } } public static void main(String[] args) { JSONObject jsonObject = new JSONObject(); jsonObject.put("appId","ucenter"); jsonObject.put("timestamp",new Date().getTime()); System.out.println(jsonObject); } @Override public Object getSceneBySnCode(SceneParam param) { Camera camera = cameraService.getBySnCode(param.getSnCode()); if(camera == null ){ throw new BusinessException(ResultCode.FAILURE_CODE_400017,ResultCode.FAILURE_MSG_400017); } CameraDetail cameraDetail = cameraDetailService.getByCameraId(camera.getId()); if(cameraDetail == null ){ throw new BusinessException(ResultCode.FAILURE_CODE_400017,ResultCode.FAILURE_MSG_400017); } LambdaQueryWrapper