package com.fdkankan.contro.service.impl; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.fdkankan.common.constant.ErrorCode; import com.fdkankan.common.constant.PayStatus; import com.fdkankan.common.constant.SceneStatus; import com.fdkankan.common.constant.SpaceType; import com.fdkankan.contro.entity.CameraDetail; import com.fdkankan.contro.entity.ScenePlus; import com.fdkankan.contro.entity.ScenePlusExt; import com.fdkankan.contro.mapper.IScenePlusMapper; import com.fdkankan.contro.service.ICameraDetailService; import com.fdkankan.contro.service.IScenePlusExtService; import com.fdkankan.contro.service.IScenePlusService; import com.fdkankan.web.response.ResultData; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.ObjectUtils; import java.util.Objects; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; /** *

* 场景主表 服务实现类 *

* * @author * @since 2022-03-16 */ @Slf4j @Service public class ScenePlusServiceImpl extends ServiceImpl implements IScenePlusService { @Autowired private IScenePlusExtService scenePlusExtService; @Autowired private ICameraDetailService cameraDetailService; @Override public ScenePlus getScenePlusByNum(String num) { return this.getOne(new LambdaQueryWrapper().eq(ScenePlus::getNum, num)); } @Override public ResultData resetSpace(String num){ ScenePlus scenePlus = this.getScenePlusByNum(num); ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId()); if(Objects.isNull(scenePlus)){ log.info("该场景不存在无法重置容量,场景码为:" + num); return ResultData.error(ErrorCode.FAILURE_CODE_5058); } if(scenePlus.getSceneStatus() == SceneStatus.EXCEED_SPACE.code()){//超出容量的场景不需要更新容量 return ResultData.ok(); } if(!ObjectUtils.isEmpty(scenePlusExt) && !ObjectUtils.isEmpty(scenePlusExt.getSpace())){ Long space = -scenePlusExt.getSpace(); CameraDetail cameraDetail = cameraDetailService.getByCameraId(scenePlus.getCameraId()); String spaceType = cameraDetail.getUnit(); if(spaceType.equals(SpaceType.SP.code())){ space = -1L; } cameraDetailService.updateCameraDetailByCameraIdAndSpace(scenePlus.getCameraId(), space); } scenePlusExt.setSpace(Long.parseLong("0")); scenePlusExtService.updateById(scenePlusExt); return ResultData.ok(); } @Override public String getDataSourceLikeUnicode(String unicode) { // 防止plus表删除,ext表未删除 ScenePlusExt scenePlusExt = scenePlusExtService.getOne( new LambdaQueryWrapper().select(ScenePlusExt::getPlusId, ScenePlusExt::getDataSource).like(ScenePlusExt::getDataSource, unicode)); if (Objects.isNull(scenePlusExt)) { return null; } ScenePlus plus = getById(scenePlusExt.getPlusId()); if (Objects.nonNull(plus)) { return scenePlusExt.getDataSource(); } scenePlusExtService.removeById(scenePlusExt); return null; } @Override public ScenePlus getByFileId(String fileId) { // 防止plus表删除,ext表未删除 List scenePlusExts = scenePlusExtService.list( new LambdaQueryWrapper().like(ScenePlusExt::getDataSource, fileId) .eq(ScenePlusExt::getRecStatus, "A")); if (ObjectUtils.isEmpty(scenePlusExts)) { return null; } for (ScenePlusExt scenePlusExt : scenePlusExts) { ScenePlus plus = getById(scenePlusExt.getPlusId()); if (!ObjectUtils.isEmpty(plus) && plus.getRecStatus().equals("A")) { return plus; } } return null; } @Override public Long sumUsedSpaceByCameraId(Long cameraId, String spaceTypeStr) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper() .eq(ScenePlus::getCameraId, cameraId) .in(ScenePlus::getSceneStatus, SceneStatus.SUCCESS.code(), SceneStatus.NO_DISPLAY.code()); SpaceType spaceType = SpaceType.get(spaceTypeStr); switch (spaceType){ case GB: List list = this.list(wrapper); if(CollUtil.isEmpty(list)){ return 0L; } List plusIdList = list.stream().map(scenePlus -> scenePlus.getId()).collect(Collectors.toList()); List scenePlusExtList = scenePlusExtService.list(new LambdaQueryWrapper().in(ScenePlusExt::getPlusId, plusIdList)); return scenePlusExtList.stream().mapToLong(pro -> { Long space = pro.getSpace(); return Objects.isNull(space) ? 0L : space; }).sum(); case SP: wrapper.eq(ScenePlus::getPayStatus, PayStatus.PAY.code()); return this.count(wrapper); } return null; } }