InnerServiceImpl.java 12 KB

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