SceneProServiceImpl.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281
  1. package com.fdkankan.agent.service.impl;
  2. import cn.hutool.core.io.FileUtil;
  3. import cn.hutool.json.JSONUtil;
  4. import com.alibaba.fastjson.JSONObject;
  5. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  6. import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
  7. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  8. import com.fdkankan.agent.common.OssPath;
  9. import com.fdkankan.agent.common.PageInfo;
  10. import com.fdkankan.agent.common.ResultCode;
  11. import com.fdkankan.agent.entity.*;
  12. import com.fdkankan.agent.exception.BusinessException;
  13. import com.fdkankan.agent.httpClient.client.FdKKClient;
  14. import com.fdkankan.agent.httpClient.service.LaserService;
  15. import com.fdkankan.agent.mapper.ISceneProMapper;
  16. import com.fdkankan.agent.request.SceneParam;
  17. import com.fdkankan.agent.response.SceneVo;
  18. import com.fdkankan.agent.service.*;
  19. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  20. import com.fdkankan.agent.util.MangerUploadToOssUtil;
  21. import com.fdkankan.agent.util.SceneStatusUtil;
  22. import com.fdkankan.common.constant.SceneConstant;
  23. import com.fdkankan.common.util.FileUtils;
  24. import lombok.extern.slf4j.Slf4j;
  25. import org.apache.commons.lang3.StringUtils;
  26. import org.springframework.beans.factory.annotation.Autowired;
  27. import org.springframework.stereotype.Service;
  28. import javax.annotation.Resource;
  29. import java.util.ArrayList;
  30. import java.util.HashMap;
  31. import java.util.List;
  32. import java.util.stream.Collectors;
  33. /**
  34. * <p>
  35. * pro场景表 服务实现类
  36. * </p>
  37. *
  38. * @author
  39. * @since 2022-11-09
  40. */
  41. @Service
  42. @Slf4j
  43. public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro> implements ISceneProService {
  44. @Autowired
  45. LaserService laserService;
  46. @Autowired
  47. IScenePlusService scenePlusService;
  48. @Autowired
  49. IScenePlusExtService scenePlusExtService;
  50. @Resource
  51. FdKKClient fdKKClient;
  52. @Autowired
  53. ICameraService cameraService;
  54. @Autowired
  55. ICameraDetailService cameraDetailService;
  56. @Autowired
  57. IUserIncrementService userIncrementService;
  58. @Autowired
  59. IIncrementTypeService incrementTypeService;
  60. @Autowired
  61. MangerUploadToOssUtil mangerUploadToOssUtil;
  62. @Autowired
  63. IFolderSceneService folderSceneService;
  64. @Autowired
  65. ISceneService sceneService;
  66. @Autowired
  67. ISceneCopyLogService sceneCopyLogService;
  68. @Autowired
  69. IUserService userService;
  70. @Autowired
  71. IAgentNewService agentNewService;
  72. @Autowired
  73. IAgentNewCameraService agentNewCameraService;
  74. @Override
  75. public Object pageList(SceneParam param) {
  76. if(param.getAgentId() == null){
  77. throw new BusinessException(ResultCode.PARAM_MISS);
  78. }
  79. if(param.getType() == 3){ //双目lite
  80. return sceneService.pageList(param);
  81. }
  82. //优化查询,去掉left join
  83. //snCode 查询,userName 查询,companyId查询
  84. //snCode回显,userName回显
  85. if(StringUtils.isNotBlank(param.getSnCode())){
  86. List<Camera> cameraList = cameraService.getLikeBySnCode(param.getSnCode());
  87. List<Long> cameraIds = cameraList.stream().map(Camera::getId).collect(Collectors.toList());
  88. param.setCameraIds(cameraIds);
  89. }
  90. if(StringUtils.isNotBlank(param.getUserName())){
  91. List<User> userList = userService.getLikeByUserName(param.getUserName());
  92. List<Long> userIds = userList.stream().map(User::getId).collect(Collectors.toList());
  93. param.setUserIds(userIds);
  94. }
  95. if(param.getAgentNew().getParentId() != null){ //分销商
  96. AgentNew agentNew = agentNewService.getById(param.getAgentNew().getParentId());
  97. param.setSubAgentId(param.getAgentId());
  98. param.setAgentId(agentNew.getId());
  99. }
  100. List<CameraDetail> details = cameraDetailService.getListByAgentId(param.getAgentId());
  101. List<Long> cameraIds = details.stream().map(CameraDetail::getCameraId).collect(Collectors.toList());
  102. if(param.getCameraIds() == null ){
  103. param.setCameraIds(cameraIds);
  104. }else {
  105. if(param.getCameraIds().isEmpty()){
  106. return PageInfo.PageInfo(new Page(param.getPageNum(),param.getPageSize()));
  107. }
  108. List<Long> intersection = cameraIds.stream().filter(param.getCameraIds()::contains).collect(Collectors.toList());
  109. param.setCameraIds(intersection);
  110. }
  111. if((param.getCameraIds() != null && param.getCameraIds().size()<=0) || (param.getUserIds() != null && param.getUserIds().size()<=0)){
  112. return PageInfo.PageInfo(new Page(param.getPageNum(),param.getPageSize()));
  113. }
  114. if(param.getSubAgentId() != null){ //指定分销商查询
  115. List<Long> subCameraIds = agentNewCameraService.getBySubAgent(param.getSubAgentId());
  116. if(subCameraIds.isEmpty()){
  117. return PageInfo.PageInfo(new Page(param.getPageNum(),param.getPageSize()));
  118. }
  119. if(!param.getCameraIds().isEmpty()){
  120. List<Long> newCameraIds = param.getCameraIds().stream().filter(subCameraIds::contains).collect(Collectors.toList());
  121. param.setCameraIds(newCameraIds);
  122. if(newCameraIds.isEmpty()){
  123. return PageInfo.PageInfo(new Page(param.getPageNum(),param.getPageSize()));
  124. }
  125. }else {
  126. param.setCameraIds(subCameraIds);
  127. }
  128. }
  129. Page<SceneVo> page = this.getBaseMapper().pageList(new Page<>(param.getPageNum(),param.getPageSize()),param);
  130. List<SceneVo> records = page.getRecords();
  131. HashMap<String,SceneCopyLog> map = null;
  132. HashMap<Long, User> userMap = null;
  133. HashMap<Long, Camera> cameraMap = null;
  134. HashMap<String,JSONObject> ssSceneMap = null;
  135. List<String> sceneNumList = page.getRecords().stream().map(SceneVo::getNum).collect(Collectors.toList());
  136. if(!records.isEmpty()){
  137. map = sceneCopyLogService.getByNewNumList(sceneNumList);
  138. List<Long> userIds = records.parallelStream().map(SceneVo::getUserId).collect(Collectors.toList());
  139. userMap = userService.getByIds(userIds);
  140. List<Long> cameraIds2 = records.parallelStream().map(SceneVo::getCameraId).collect(Collectors.toList());
  141. cameraMap = cameraService.getByIds(cameraIds2);
  142. if(param.getType() == 2 ){
  143. ssSceneMap = laserService.list(sceneNumList,4);
  144. }
  145. if(param.getType() == 6){
  146. ssSceneMap = laserService.list(sceneNumList,5);
  147. }
  148. }
  149. for (SceneVo record : page.getRecords()) {
  150. if(param.getType() == 2 || param.getType() == 6){
  151. JSONObject ssObj = ssSceneMap.get(record.getNum());
  152. if(ssObj!=null){
  153. record.setSceneName(ssObj.getString("title"));
  154. record.setThumb(ssObj.getString("thumb"));
  155. record.setWebSite(ssObj.getString("webSite"));
  156. record.setIsObj(ssObj.getInteger("buildObjStatus"));
  157. record.setViewCount(ssObj.getInteger("viewCount"));
  158. record.setStatus(toFdStatus(ssObj.getInteger("status")));
  159. record.setAlgorithmTime(ssObj.getString("algorithmTime"));
  160. }else{
  161. record.setStatus(0);
  162. record.setWebSite(null);
  163. }
  164. }
  165. record.setStatusString(SceneStatusUtil.getStatusString(record));
  166. if(userMap != null){
  167. User user = userMap.get(record.getUserId());
  168. if(user != null){
  169. record.setUserName(user.getUserName());
  170. }
  171. }
  172. if(cameraMap != null){
  173. Camera camera = cameraMap.get(record.getCameraId());
  174. if(camera != null){
  175. record.setSnCode(camera.getSnCode());
  176. }
  177. }
  178. if(map !=null ){
  179. SceneCopyLog sceneCopyLog = map.get(record.getNum());
  180. if(sceneCopyLog != null){
  181. record.setCopyTime(sceneCopyLog.getCreateTime());
  182. record.setIsCopy(true);
  183. }
  184. }
  185. }
  186. return PageInfo.PageInfo(page);
  187. }
  188. @Override
  189. public void copy(String sceneNum) throws Exception {
  190. ScenePro scenePro = this.getByNum(sceneNum);
  191. ScenePlus scenePlus = scenePlusService.getByNum(sceneNum);
  192. if((scenePro == null || scenePro.getCameraId() == null ) && (scenePlus== null || scenePlus.getCameraId() == null)){
  193. throw new BusinessException(ResultCode.SCENE_EMPTY);
  194. }
  195. Long cameraId = scenePro == null ? scenePlus.getCameraId() : scenePro.getCameraId();
  196. Camera camera = cameraService.getById(cameraId);
  197. if(camera == null){
  198. throw new BusinessException(ResultCode.CAMERA_EMPTY);
  199. }
  200. CameraDetail detailEntity = cameraDetailService.getByCameraId(cameraId);
  201. if(detailEntity == null){
  202. throw new BusinessException(ResultCode.CAMERA_EMPTY);
  203. }
  204. Long needSpace = 0L;
  205. if(scenePro != null){
  206. needSpace = scenePro.getSpace();
  207. }
  208. if(scenePlus != null){
  209. ScenePlusExt scenePlusExt = scenePlusExtService.getByPlusId(scenePlus.getId());
  210. if(scenePlusExt != null && scenePlusExt.getSpace() != null){
  211. needSpace = scenePlusExt.getSpace();
  212. }
  213. }
  214. Boolean checkSpace = cameraDetailService.checkSpace(detailEntity, needSpace);
  215. if(!checkSpace){
  216. throw new BusinessException(ResultCode.CAMERA_SPACE_ERROR);
  217. }
  218. HashMap<String, Object> param = new HashMap<>();
  219. param.put("num",sceneNum);
  220. JSONObject jsonObject = fdKKClient.copyScene(param, "m_a_n_a_g_e");
  221. Integer code = jsonObject.getInteger("code");
  222. if(code != 0){
  223. throw new BusinessException(jsonObject.getInteger("code"),jsonObject.getString("msg"));
  224. }
  225. }
  226. @Override
  227. public ScenePro getByNum(String num) {
  228. LambdaQueryWrapper<ScenePro> wrapper = new LambdaQueryWrapper<>();
  229. wrapper.eq(ScenePro::getNum,num);
  230. wrapper.eq(ScenePro::getIsUpgrade,0);
  231. List<ScenePro> list = this.list(wrapper);
  232. if(list == null || list.size() <=0){
  233. return null;
  234. }
  235. return list.get(0);
  236. }
  237. @Override
  238. public Long getCountByCameraId(Long cameraId) {
  239. LambdaQueryWrapper<ScenePro> wrapper = new LambdaQueryWrapper<>();
  240. wrapper.eq(ScenePro::getIsUpgrade,0);
  241. wrapper.eq(ScenePro::getCameraId,cameraId);
  242. wrapper.in(ScenePro::getStatus,0,-2);
  243. return this.count(wrapper);
  244. }
  245. private Integer toFdStatus(Integer status) {
  246. //深时状态,-1:场景被删 0:计算中 1计算失败 2计算成功 3封存 4生成OBJ中
  247. switch (status) {
  248. case 0:
  249. case 4:
  250. return 0;
  251. case 2:
  252. return -2;
  253. case 3:
  254. return -3;
  255. default:
  256. return -1;
  257. }
  258. }
  259. }