package com.fdkankan.scene.service.impl;
import cn.hutool.core.collection.CollUtil;
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.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fdkankan.common.constant.RecStatus;
import com.fdkankan.common.constant.TbStatus;
import com.fdkankan.common.response.ResultData;
import com.fdkankan.common.user.SSOLoginHelper;
import com.fdkankan.common.user.SSOUser;
import com.fdkankan.platform.api.feign.PlatformGoodsClient;
import com.fdkankan.platform.api.vo.Camera;
import com.fdkankan.scene.entity.Folder;
import com.fdkankan.scene.entity.SceneCooperation;
import com.fdkankan.scene.entity.ScenePro;
import com.fdkankan.scene.mapper.ISceneCooperationMapper;
import com.fdkankan.scene.service.ISceneCooperationService;
import com.fdkankan.scene.service.ISceneProService;
import com.fdkankan.scene.service.ISceneResourceService;
import com.fdkankan.scene.vo.SceneCooperationParamVO;
import com.fdkankan.scene.vo.SceneParamVO;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.stream.Collectors;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Calendar;
import java.util.List;
import java.util.Objects;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.RequestBody;
/**
*
* 服务实现类
*
*
* @author dengsixing
* @since 2021-12-23
*/
@Service
public class SceneCooperationServiceImpl extends ServiceImpl implements ISceneCooperationService {
@Autowired
SSOLoginHelper ssoLoginHelper;
@Autowired
PlatformGoodsClient platformGoodsClient;
@Autowired
ISceneProService sceneProService;
@Autowired
ISceneResourceService sceneResourceService;
@Override
public void updateRecStatus(String sceneNum) {
this.update(new LambdaUpdateWrapper()
.eq(SceneCooperation::getNum, sceneNum)
.set(SceneCooperation::getUpdateTime, Calendar.getInstance().getTime())
.set(SceneCooperation::getTbStatus, TbStatus.DELETE.code()));
}
@Override
public String findUserName(String sceneNum) {
SceneCooperation sceneCooperation = this.findBySceneNum(sceneNum);
if(Objects.isNull(sceneCooperation)) return null;
return sceneCooperation.getUserName();
}
@Override
public SceneCooperation findBySceneNum(String sceneNum) {
List list = this.list(new QueryWrapper()
.eq("tb_status", TbStatus.VALID.code())
.eq("scene_code", sceneNum)
.orderByDesc("id"));
if(CollUtil.isEmpty(list)){
return null;
}
return list.get(0);
}
@Override
public ResultData sceneResourceBySceneNum(SceneCooperationParamVO param) throws Exception{
ResultData cameraResult = platformGoodsClient.getCameraByChildName(param.getUserName());
Camera camera = cameraResult.getData();
if(camera != null){
return ResultData.ok();
}
SceneCooperation sceneCooperation = this.findBySceneNum(param.getNum());
//若数据为空表示可操作全部资源
if(sceneCooperation == null || !sceneCooperation.getUserId().equals(param.getUserId())){
return ResultData.ok();
}
ScenePro scenePro= sceneProService.findBySceneNum(param.getNum());
if(scenePro != null && scenePro.getUserId().equals(sceneCooperation.getUserId())){
return ResultData.ok();
}
return ResultData.ok(sceneResourceService.findByCooperationId(sceneCooperation.getId()));
}
@Override
public List getListByUserId(List userIds) {
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.in(SceneCooperation::getUserId,userIds);
return this.list(queryWrapper);
}
@Override
public Page cooperationSceneListNew(SceneParamVO param) throws Exception{
//查询该用户所有的协作场景
List list = this.list(
new LambdaQueryWrapper()
.select(SceneCooperation::getNum)
.eq(SceneCooperation::getUserId, param.getUserId())
.orderByDesc(SceneCooperation::getId));
if(CollUtil.isEmpty(list)){
return new Page(param.getPageNum(), param.getPageSize());
}
//获取所有协作场景的场景码集合
List sceneNumList = new ArrayList<>();
for(SceneCooperation cooperation: list){
if(Objects.isNull(cooperation.getNum())){
continue;
}
sceneNumList.add(cooperation.getNum());
}
if(sceneNumList.size() <= 0){
return new Page(param.getPageNum(), param.getPageSize());
}
List