InnerServiceImpl.java 13 KB

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