ScenePlusServiceImpl.java 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. package com.fdkankan.contro.service.impl;
  2. import cn.hutool.core.collection.CollUtil;
  3. import cn.hutool.core.util.StrUtil;
  4. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  5. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  6. import com.fdkankan.common.constant.*;
  7. import com.fdkankan.contro.entity.CameraDetail;
  8. import com.fdkankan.contro.entity.ScenePlus;
  9. import com.fdkankan.contro.entity.ScenePlusExt;
  10. import com.fdkankan.contro.entity.ScenePro;
  11. import com.fdkankan.contro.mapper.IScenePlusMapper;
  12. import com.fdkankan.contro.service.ICameraDetailService;
  13. import com.fdkankan.contro.service.IScenePlusExtService;
  14. import com.fdkankan.contro.service.IScenePlusService;
  15. import com.fdkankan.web.response.ResultData;
  16. import lombok.extern.slf4j.Slf4j;
  17. import org.springframework.beans.factory.annotation.Autowired;
  18. import org.springframework.beans.factory.annotation.Value;
  19. import org.springframework.stereotype.Service;
  20. import org.springframework.util.ObjectUtils;
  21. import java.util.List;
  22. import java.util.Objects;
  23. import java.util.stream.Collectors;
  24. /**
  25. * <p>
  26. * 场景主表 服务实现类
  27. * </p>
  28. *
  29. * @author
  30. * @since 2022-03-16
  31. */
  32. @Slf4j
  33. @Service
  34. public class ScenePlusServiceImpl extends ServiceImpl<IScenePlusMapper, ScenePlus> implements IScenePlusService {
  35. @Autowired
  36. private IScenePlusExtService scenePlusExtService;
  37. @Autowired
  38. private ICameraDetailService cameraDetailService;
  39. @Override
  40. public ScenePlus getScenePlusByNum(String num) {
  41. return this.getOne(new LambdaQueryWrapper<ScenePlus>().eq(ScenePlus::getNum, num));
  42. }
  43. @Override
  44. public ResultData resetSpace(String num){
  45. ScenePlus scenePlus = this.getScenePlusByNum(num);
  46. ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId());
  47. if(Objects.isNull(scenePlus)){
  48. log.info("该场景不存在无法重置容量,场景码为:" + num);
  49. return ResultData.error(ErrorCode.FAILURE_CODE_5058);
  50. }
  51. if(scenePlus.getSceneStatus() == SceneStatus.EXCEED_SPACE.code()){//超出容量的场景不需要更新容量
  52. return ResultData.ok();
  53. }
  54. if(!ObjectUtils.isEmpty(scenePlusExt) && !ObjectUtils.isEmpty(scenePlusExt.getSpace())){
  55. Long space = -scenePlusExt.getSpace();
  56. CameraDetail cameraDetail = cameraDetailService.getByCameraId(scenePlus.getCameraId());
  57. String spaceType = cameraDetail.getUnit();
  58. if(spaceType.equals(SpaceType.SP.code())){
  59. space = -1L;
  60. }
  61. if(scenePlus.getSceneSource() == SceneSource.BM.code()
  62. || scenePlus.getSceneSource() == SceneSource.ZT.code()
  63. || (spaceType.equals(SpaceType.SP.code()))){
  64. try {
  65. cameraDetailService.updateCameraDetailByCameraIdAndSpace(scenePlus.getCameraId(), space);
  66. }catch (Exception e){
  67. log.error("重算回退相机已使用用量失败, num:{}, cameraId:{}", num, scenePlus.getCameraId(), e);
  68. }
  69. }
  70. }
  71. scenePlusExt.setSpace(Long.parseLong("0"));
  72. scenePlusExtService.updateById(scenePlusExt);
  73. return ResultData.ok();
  74. }
  75. @Override
  76. public String getDataSourceLikeUnicode(String unicode) {
  77. // 防止plus表删除,ext表未删除
  78. ScenePlusExt scenePlusExt = scenePlusExtService.getOne(
  79. new LambdaQueryWrapper<ScenePlusExt>().select(ScenePlusExt::getPlusId, ScenePlusExt::getDataSource).like(ScenePlusExt::getDataSource, unicode));
  80. if (Objects.isNull(scenePlusExt)) {
  81. return null;
  82. }
  83. ScenePlus plus = getById(scenePlusExt.getPlusId());
  84. if (Objects.nonNull(plus)) {
  85. return scenePlusExt.getDataSource();
  86. }
  87. scenePlusExtService.removeById(scenePlusExt);
  88. return null;
  89. }
  90. @Override
  91. public ScenePlus getByFileId(String fileId) {
  92. // 防止plus表删除,ext表未删除
  93. List<ScenePlusExt> scenePlusExts = scenePlusExtService.list(
  94. new LambdaQueryWrapper<ScenePlusExt>().like(ScenePlusExt::getDataSource, fileId)
  95. .eq(ScenePlusExt::getRecStatus, "A"));
  96. if (ObjectUtils.isEmpty(scenePlusExts)) {
  97. return null;
  98. }
  99. for (ScenePlusExt scenePlusExt : scenePlusExts) {
  100. ScenePlus plus = getById(scenePlusExt.getPlusId());
  101. if (!ObjectUtils.isEmpty(plus) && plus.getRecStatus().equals("A")) {
  102. return plus;
  103. }
  104. }
  105. return null;
  106. }
  107. @Override
  108. public Long sumUsedSpaceByCameraId(Long cameraId, String spaceTypeStr) {
  109. LambdaQueryWrapper<ScenePlus> wrapper = new LambdaQueryWrapper<ScenePlus>()
  110. .eq(ScenePlus::getCameraId, cameraId)
  111. .in(ScenePlus::getSceneStatus, SceneStatus.SUCCESS.code(), SceneStatus.NO_DISPLAY.code());
  112. SpaceType spaceType = SpaceType.get(spaceTypeStr);
  113. switch (spaceType){
  114. case GB:
  115. List<ScenePlus> list = this.list(wrapper);
  116. if(CollUtil.isEmpty(list)){
  117. return 0L;
  118. }
  119. List<Long> plusIdList = list.stream().map(scenePlus -> scenePlus.getId()).collect(Collectors.toList());
  120. List<ScenePlusExt> scenePlusExtList = scenePlusExtService.list(new LambdaQueryWrapper<ScenePlusExt>().in(ScenePlusExt::getPlusId, plusIdList));
  121. return scenePlusExtList.stream().mapToLong(pro -> {
  122. Long space = pro.getSpace();
  123. return Objects.isNull(space) ? 0L : space;
  124. }).sum();
  125. case SP:
  126. wrapper.eq(ScenePlus::getPayStatus, PayStatus.PAY.code());
  127. return this.count(wrapper);
  128. }
  129. return null;
  130. }
  131. }