InnerServiceImpl.java 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342
  1. package com.fdkankan.ucenter.service.impl;
  2. import cn.hutool.core.util.HexUtil;
  3. import cn.hutool.core.util.StrUtil;
  4. import cn.hutool.crypto.SecureUtil;
  5. import cn.hutool.crypto.SmUtil;
  6. import cn.hutool.crypto.asymmetric.KeyType;
  7. import cn.hutool.crypto.asymmetric.SM2;
  8. import com.alibaba.fastjson.JSON;
  9. import com.alibaba.fastjson.JSONObject;
  10. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  11. import com.fdkankan.common.constant.ErrorCode;
  12. import com.fdkankan.common.exception.BusinessException;
  13. import com.fdkankan.common.util.JwtUtil;
  14. import com.fdkankan.common.util.SecurityUtil;
  15. import com.fdkankan.fyun.face.FYunFileServiceInterface;
  16. import com.fdkankan.redis.constant.RedisKey;
  17. import com.fdkankan.redis.util.RedisUtil;
  18. import com.fdkankan.ucenter.common.Result;
  19. import com.fdkankan.ucenter.common.constants.ConstantFilePath;
  20. import com.fdkankan.ucenter.common.constants.ResultCode;
  21. import com.fdkankan.ucenter.constant.LoginConstant;
  22. import com.fdkankan.ucenter.entity.*;
  23. import com.fdkankan.ucenter.service.*;
  24. import com.fdkankan.ucenter.vo.RelicsSceneInitQueueDTO;
  25. import com.fdkankan.ucenter.vo.request.SceneParam;
  26. import com.fdkankan.ucenter.util.RsaUtils;
  27. import com.fdkankan.ucenter.vo.response.LaserSceneInfoVo;
  28. import lombok.extern.slf4j.Slf4j;
  29. import org.apache.commons.lang3.ObjectUtils;
  30. import org.apache.commons.lang3.StringUtils;
  31. import org.springframework.beans.factory.annotation.Autowired;
  32. import org.springframework.stereotype.Service;
  33. import java.io.File;
  34. import java.util.ArrayList;
  35. import java.util.HashMap;
  36. import java.util.List;
  37. import java.security.KeyPair;
  38. import java.security.PrivateKey;
  39. import java.util.Date;
  40. import java.util.Objects;
  41. import java.util.stream.Collectors;
  42. /**
  43. * <p>
  44. * TODO
  45. * </p>
  46. *
  47. * @author dengsixing
  48. * @since 2022/9/27
  49. **/
  50. @Slf4j
  51. @Service
  52. public class InnerServiceImpl implements IInnerService {
  53. @Autowired
  54. private ISceneProService sceneProService;
  55. @Autowired
  56. private ISceneProEditService sceneProEditService;
  57. @Autowired
  58. private IScenePlusService scenePlusService;
  59. @Autowired
  60. private IScenePlusExtService scenePlusExtService;
  61. @Autowired
  62. private ISceneEditInfoService sceneEditInfoService;
  63. @Autowired
  64. private IUserService userService;
  65. @Autowired
  66. private RedisUtil redisUtil;
  67. @Autowired
  68. private ICameraDetailService cameraDetailService;
  69. @Autowired
  70. private ICameraService cameraService;
  71. @Autowired
  72. private FYunFileServiceInterface fYunFileService;
  73. @Override
  74. public Result createTokenByNum(String num) {
  75. Long userId = null;
  76. ScenePro scenePro = sceneProService.getByNum(num);
  77. if(Objects.nonNull(scenePro)){
  78. userId = scenePro.getUserId();
  79. }else{
  80. ScenePlus scenePlus = scenePlusService.getByNum(num);
  81. if(Objects.isNull(scenePlus)){
  82. return Result.failure("场景为空");
  83. }
  84. userId = scenePlus.getUserId();
  85. }
  86. User user = userService.getById(userId);
  87. String token = JwtUtil.createJWT(-1, user.getUserName(), "user");
  88. String redisKey = String.format(RedisKey.TOKEN_V3,token);
  89. redisUtil.set(redisKey, JSON.toJSONString(user), RedisKey.EXPIRE_TIME_2_HOUR);
  90. JSONObject object = new JSONObject();
  91. object.put("token", token);
  92. return Result.success(object);
  93. }
  94. @Override
  95. public String getSceneNumVersion(String num) {
  96. String version = null;
  97. ScenePro scenepro = sceneProService.getByNum(num);
  98. if(scenepro == null){
  99. ScenePlus plus = scenePlusService.getByNum(num);
  100. if(plus != null){
  101. version = "V4";
  102. }
  103. }else {
  104. version = "V3";
  105. }
  106. return version;
  107. }
  108. @Override
  109. public String querySceneDataSource(String num) {
  110. String dataSource = null;
  111. ScenePro scenePro = sceneProService.getByNum(num);
  112. if(Objects.isNull(scenePro)){
  113. ScenePlus scenePlus = scenePlusService.getByNum(num);
  114. if(Objects.isNull(scenePlus)){
  115. return Result.failure(ErrorCode.FAILURE_CODE_5005.code(), ErrorCode.FAILURE_CODE_5005.message()).toString();
  116. }
  117. ScenePlusExt scenePlusExt = scenePlusExtService.getByPlusId(scenePlus.getId());
  118. dataSource = scenePlusExt.getDataSource();
  119. }else{
  120. dataSource = scenePro.getDataSource();
  121. }
  122. return dataSource;
  123. }
  124. @Override
  125. public Result downloadCapture(String num) {
  126. ScenePro scenePro = sceneProService.getByNum(num);
  127. ScenePlus scenePlus = scenePlusService.getByNum(num);
  128. if (ObjectUtils.isEmpty(scenePlus) && ObjectUtils.isEmpty(scenePro)) {
  129. return Result.failure("场景为空");
  130. }
  131. String dataSource = null;
  132. if(!ObjectUtils.isEmpty(scenePlus)){
  133. ScenePlusExt scenePlusExt = scenePlusExtService.getByPlusId(scenePlus.getId());
  134. dataSource = scenePlusExt.getDataSource();
  135. }else{
  136. dataSource = scenePro.getDataSource();
  137. }
  138. String ossPath = ConstantFilePath.OSS_PREFIX
  139. + dataSource.replace(ConstantFilePath.BUILD_MODEL_PATH, "")
  140. .replace(ConstantFilePath.BUILD_MODEL_LASER_PATH, "");
  141. if (!ossPath.endsWith("/")) {
  142. ossPath = ossPath.concat("/");
  143. }
  144. fYunFileService.downloadFileByCommand(dataSource + File.separator + "capture", ossPath);
  145. return Result.success();
  146. }
  147. @Override
  148. public Result querySceneNum(String path) {
  149. ScenePro scenePro = sceneProService.findByFileId(path);
  150. if (!ObjectUtils.isEmpty(scenePro)) {
  151. return Result.success(scenePro.getNum());
  152. }
  153. ScenePlusExt scenePlusExt = scenePlusExtService.getByUnicode(path);
  154. if (!ObjectUtils.isEmpty(scenePlusExt)) {
  155. return Result.success(scenePlusService.getById(scenePlusExt.getPlusId()).getNum());
  156. }
  157. return null;
  158. }
  159. @Override
  160. public LaserSceneInfoVo getSceneInfo(String num) {
  161. LaserSceneInfoVo vo = new LaserSceneInfoVo();
  162. ScenePro scenepro = sceneProService.getByNum(num);
  163. if(scenepro != null){
  164. vo.setNum(scenepro.getNum());
  165. vo.setVersion("V3");
  166. vo.setSceneSource(scenepro.getSceneSource());
  167. vo.setSceneScheme(scenepro.getSceneScheme());
  168. vo.setSceneKind(null);
  169. vo.setSceneResolution(null);
  170. vo.setObjScenePath(scenepro.getWebSite());
  171. vo.setIsObj(scenepro.getIsObj());
  172. vo.setAlgorithmTime(scenepro.getCreateTime());
  173. vo.setStatus(scenepro.getStatus());
  174. vo.setPayStatus(scenepro.getPayStatus());
  175. vo.setTitle(scenepro.getSceneName());
  176. SceneProEdit sceneProEdit = sceneProEditService.getByProId(scenepro.getId());
  177. if(sceneProEdit != null){
  178. vo.setImgVersion(sceneProEdit.getImagesVersion());
  179. }
  180. return vo;
  181. }
  182. ScenePlus plus = scenePlusService.getByNum(num);
  183. if(plus != null){
  184. ScenePlusExt plusExt = scenePlusExtService.getByPlusId(plus.getId());
  185. if(plusExt != null){
  186. vo.setNum(plus.getNum());
  187. vo.setVersion("V4");
  188. vo.setSceneSource(plus.getSceneSource());
  189. vo.setSceneScheme(plusExt.getSceneScheme());
  190. vo.setSceneKind(plusExt.getSceneKind());
  191. vo.setSceneResolution(plusExt.getSceneResolution());
  192. vo.setObjScenePath(plusExt.getWebSite());
  193. vo.setIsObj(plusExt.getIsObj());
  194. vo.setAlgorithmTime(plusExt.getAlgorithmTime());
  195. vo.setStatus(plus.getSceneStatus());
  196. vo.setPayStatus(plus.getPayStatus());
  197. vo.setTitle(plus.getTitle());
  198. SceneEditInfo sceneEditInfo = sceneEditInfoService.getByScenePlusId(plus.getId());
  199. if(sceneEditInfo != null){
  200. vo.setImgVersion(sceneEditInfo.getImgVersion());
  201. }
  202. return vo;
  203. }
  204. }
  205. throw new BusinessException(ResultCode.FAILURE_CODE_400002,ResultCode.FAILURE_MSG_400002);
  206. }
  207. @Override
  208. public Object getCameraDetail(String snCode) {
  209. Camera camera = cameraService.getBySnCode(snCode);
  210. if(camera == null){
  211. throw new BusinessException(-1,"相机不存在");
  212. }
  213. return cameraDetailService.getByCameraId(camera.getId());
  214. }
  215. @Override
  216. public Boolean checkSign(String sign) {
  217. try {
  218. if(StringUtils.isBlank(sign)){
  219. return false;
  220. }
  221. String deTxt = RsaUtils.decipher(sign, RsaUtils.privateKey);
  222. if(StringUtils.isBlank(deTxt)){
  223. return false;
  224. }
  225. JSONObject jsonObject = JSONObject.parseObject(deTxt);
  226. String appId = jsonObject.getString("appId");
  227. Long timestamp = jsonObject.getLong("timestamp");
  228. if(StringUtils.isBlank(appId) || timestamp == null){
  229. return false;
  230. }
  231. if(!appId.equals("ucenter")){
  232. return false;
  233. }
  234. Long time = new Date().getTime();
  235. if(time -timestamp >1000 * 30){
  236. return false;
  237. }
  238. return true;
  239. }catch (Exception e){
  240. log.info("checkSign-error:{}",sign,e);
  241. return false;
  242. }
  243. }
  244. public static void main(String[] args) {
  245. JSONObject jsonObject = new JSONObject();
  246. jsonObject.put("appId","ucenter");
  247. jsonObject.put("timestamp",new Date().getTime());
  248. System.out.println(jsonObject);
  249. }
  250. @Override
  251. public Object getSceneBySnCode(SceneParam param) {
  252. Camera camera = cameraService.getBySnCode(param.getSnCode());
  253. if(camera == null ){
  254. throw new BusinessException(ResultCode.FAILURE_CODE_400017,ResultCode.FAILURE_MSG_400017);
  255. }
  256. CameraDetail cameraDetail = cameraDetailService.getByCameraId(camera.getId());
  257. if(cameraDetail == null ){
  258. throw new BusinessException(ResultCode.FAILURE_CODE_400017,ResultCode.FAILURE_MSG_400017);
  259. }
  260. LambdaQueryWrapper<ScenePlus> wrapper = new LambdaQueryWrapper<>();
  261. wrapper.eq(ScenePlus::getCameraId,camera.getId());
  262. if(param.getSceneSource() != null){
  263. wrapper.eq(ScenePlus::getSceneSource,param.getSceneSource());
  264. }
  265. List<ScenePlus> list = scenePlusService.list(wrapper);
  266. if(list.isEmpty()){
  267. return new ArrayList<>();
  268. }
  269. List<Long> plusIds = list.stream().map(ScenePlus::getId).collect(Collectors.toList());
  270. List<Long> userIds = list.stream().map(ScenePlus::getUserId).collect(Collectors.toList());
  271. LambdaQueryWrapper<ScenePlusExt> wrapper1 = new LambdaQueryWrapper<>();
  272. wrapper1.in(ScenePlusExt::getPlusId,plusIds);
  273. if(param.getLocation() != null){
  274. wrapper1.eq(ScenePlusExt::getLocation,param.getLocation());
  275. }
  276. HashMap<Long,ScenePlus> map = new HashMap<>();
  277. HashMap<Long, User> userMap = userService.getByIds(userIds);
  278. list.forEach(e ->map.put(e.getId(),e) );
  279. List<ScenePlusExt> extList = scenePlusExtService.list(wrapper1);
  280. List<RelicsSceneInitQueueDTO> voList = new ArrayList<>(extList.size());
  281. for (ScenePlusExt scenePlusExt : extList) {
  282. ScenePlus scenePlus = map.get(scenePlusExt.getPlusId());
  283. if(scenePlus == null){
  284. continue;
  285. }
  286. User user = userMap.get(scenePlus.getUserId());
  287. RelicsSceneInitQueueDTO dto = getRelicsSceneInitQueueDTO(param, scenePlusExt, scenePlus,user);
  288. voList.add(dto);
  289. }
  290. return voList;
  291. }
  292. private RelicsSceneInitQueueDTO getRelicsSceneInitQueueDTO(SceneParam param, ScenePlusExt scenePlusExt, ScenePlus scenePlus,User user) {
  293. RelicsSceneInitQueueDTO dto = new RelicsSceneInitQueueDTO();
  294. dto.setSceneCode(scenePlus.getNum());
  295. dto.setLocation(scenePlusExt.getLocation());
  296. dto.setSceneSource(scenePlus.getSceneSource());
  297. dto.setAlgorithmTime(scenePlusExt.getAlgorithmTime());
  298. dto.setCreateTime(scenePlus.getCreateTime());
  299. if(user!=null){
  300. dto.setPhoneNum(user.getUserName());
  301. }
  302. dto.setUserId(scenePlus.getUserId());
  303. dto.setSnCode(param.getSnCode());
  304. dto.setStatus(scenePlus.getSceneStatus());
  305. if(scenePlus.getSceneStatus() ==-2){
  306. dto.setStatus(1);
  307. }
  308. dto.setSceneName(scenePlus.getTitle());
  309. dto.setShootCount(scenePlusExt.getShootCount());
  310. return dto;
  311. }
  312. }