package com.fdkankan.ucenter.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.fdkankan.common.constant.Constant;
import com.fdkankan.ucenter.common.constants.NacosProperty;
import com.fdkankan.ucenter.entity.*;
import com.fdkankan.ucenter.httpClient.service.LaserService;
import com.fdkankan.ucenter.mapper.ICameraDetailMapper;
import com.fdkankan.ucenter.service.*;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fdkankan.ucenter.vo.response.CameraAppVo;
import com.fdkankan.ucenter.vo.response.CameraSpaceVo;
import org.joda.time.DateTime;
import org.joda.time.Days;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Set;
/**
*
* 相机子表 服务实现类
*
*
* @author
* @since 2022-07-04
*/
@Service
public class CameraDetailServiceImpl extends ServiceImpl implements ICameraDetailService {
@Autowired
IUserService userService;
@Autowired
ICameraSpaceService cameraSpaceService;
@Autowired
LaserService fdkkLaserService;
@Autowired
ICameraService cameraService;
@Autowired
ISceneCooperationService sceneCooperationService;
@Autowired
ISceneProService sceneProService;
@Autowired
IScenePlusService scenePlusService;
@Override
public CameraDetail getByCameraId(Long cameraId) {
LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
wrapper.eq(CameraDetail::getCameraId,cameraId);
List list = this.list(wrapper);
if(list!=null && list.size() >0){
return list.get(0);
}
return null;
}
@Override
public HashMap getByCameraIds(List cameraIds) {
HashMap map = new HashMap<>();
if(cameraIds.size() >0){
LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
wrapper.in(CameraDetail::getCameraId,cameraIds);
List list = this.list(wrapper);
list.forEach(entity -> map.put(entity.getCameraId(),entity));
}
return map;
}
@Override
public Long getCountByCompanyId(Long companyId,Integer type) {
LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
wrapper.eq(CameraDetail::getCompanyId,companyId);
if(type != null){
wrapper.eq(CameraDetail::getGoodsId,type);
}
return this.count(wrapper);
}
@Override
public Integer deadlineNumber(String username) {
User user = userService.getByUserName(username);
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(CameraDetail::getUserId,user.getId());
List list = this.list(queryWrapper);
Integer number = 0;
List cameraList = null;
for (CameraDetail cameraDetailEntity : list) {
cameraList = cameraSpaceService.getVoListByCameraId(cameraDetailEntity.getCameraId());
if(cameraList != null && cameraList.size() > 0){
if(Days.daysBetween(new DateTime(), new DateTime(cameraList.get(0).getSpaceEndTime())).getDays() < 30){
number++;
}
}
}
return number;
}
@Override
public void unbindCamera(List cameraIds) {
HashMap detailMap = this.getByCameraIds(cameraIds);
HashMap cameraMap = cameraService.getByIds(cameraIds);
for (CameraDetail cameraDetail : detailMap.values()) {
LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>();
wrapper.eq(CameraDetail::getId,cameraDetail.getId());
wrapper.set(CameraDetail::getUserId,null);
wrapper.set(CameraDetail::getCooperationUser,null);
wrapper.set(CameraDetail::getTotalSpace,Long.parseLong(Constant.EXPANSION_SPACE_VALUE_1G ) * 10L);
this.update(wrapper);
cameraDetail.setTotalSpace(Long.parseLong(Constant.EXPANSION_SPACE_VALUE_1G ) * 10L);
if(!"local".equals(NacosProperty.uploadType)){
//sceneProService.lockOrUnLockBySpace(cameraDetail,cameraDetail.getCameraId(),-2); //封存场景
}
}
//恢复10G基本容量
//删除场景协作信息
List sceneProList = sceneProService.getListByCameraIds(cameraIds);
List scenePlusList = scenePlusService.getListByCameraIds(cameraIds);
sceneCooperationService.deleteCooperationList(sceneProList,scenePlusList);
fdkkLaserService.disableCooperation(detailMap, cameraMap);
}
@Override
public void bindCamera(List cameraIds,Long userId) {
if(cameraIds.size() >0){
LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>();
wrapper.in(CameraDetail::getCameraId,cameraIds)
.set(CameraDetail::getUserId,userId);
this.update(wrapper);
}
}
@Override
public void updateCooperationByIds(List cameraIds, Long userId) {
LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>();
wrapper.in(CameraDetail::getCameraId,cameraIds)
.set(CameraDetail::getCooperationUser,userId);
this.update(wrapper);
}
@Override
public void addUsedSpace(HashMap cameraMap) {
Set cameraIds = cameraMap.keySet();
LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
wrapper.in(CameraDetail::getCameraId,cameraIds);
List list = this.list(wrapper);
for (CameraDetail cameraDetail : list) {
long subSpace = cameraMap.get(cameraDetail.getCameraId()) == null ? 0L : cameraMap.get(cameraDetail.getCameraId());
long usedSpace = cameraDetail.getUsedSpace() - subSpace ;
cameraDetail.setUsedSpace(usedSpace < 0 ? 0L :usedSpace);
//解封封存场景
//sceneProService.lockOrUnLockBySpace(cameraDetail,cameraDetail.getCameraId(),1);
}
this.updateBatchById(list);
}
@Override
public List getListByUserAndType(Long companyId, Integer cameraType) {
return this.getBaseMapper().getListByUserAndType(companyId,cameraType);
}
@Override
public List getListByUserIdsAndType(List userId, Integer cameraType) {
return this.getBaseMapper().getListByUserIdsAndType(userId,cameraType);
}
@Override
public boolean updateCameraBalance(Long cameraId, int body, Integer points) {
CameraDetail detailEntity = this.getByCameraId(cameraId);
int sub = Integer.parseInt(detailEntity.getBalance());
if (0 == body){
sub += points;
}else if (-2 == body){
sub -= points;
}
detailEntity.setBalance(String.valueOf(sub));
return this.updateById(detailEntity);
}
@Override
public void uploadUserCameraInfo(Long id, String cameraVersion, String appVersion) {
LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>();
wrapper.eq(CameraDetail::getCameraId,id)
.set(CameraDetail::getUserCameraVersion,cameraVersion)
.set(CameraDetail::getAppVersion,appVersion)
.set(CameraDetail::getLastRequestTime,new DateTime());
this.update(wrapper);
}
}