package com.fdkankan.scene.service.impl;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fdkankan.common.constant.RecStatus;
import com.fdkankan.common.response.ResultData;
import com.fdkankan.redis.constant.RedisKey;
import com.fdkankan.redis.util.RedisUtil;
import com.fdkankan.scene.bean.RequestSceneProV4;
import com.fdkankan.scene.entity.SceneCooperation;
import com.fdkankan.scene.entity.ScenePro;
import com.fdkankan.scene.entity.SceneResource;
import com.fdkankan.scene.entity.SceneResourceCooperation;
import com.fdkankan.scene.mapper.ISceneProMapper;
import com.fdkankan.scene.service.ISceneCooperationService;
import com.fdkankan.scene.service.ISceneProService;
import com.fdkankan.scene.service.ISceneResourceCooperationService;
import com.fdkankan.scene.service.ISceneResourceService;
import com.google.common.collect.Lists;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
*
* pro场景表 服务实现类
*
*
* @author
* @since 2022-07-04
*/
@Service
public class SceneProServiceImpl extends ServiceImpl implements ISceneProService {
@Autowired
private ISceneCooperationService sceneCooperationService;
@Autowired
private RedisUtil redisUtil;
@Autowired
private ISceneResourceCooperationService sceneResourceCooperationService;
@Autowired
private ISceneResourceService sceneResourceService;
@Override
public ResultData upgradeToV4ResultSync(RequestSceneProV4 param) throws Exception {
ScenePro scenePro = this.getById(param.getId());
scenePro.setWebSite(param.getWebSite());
scenePro.setIsUpgrade(1);
this.updateById(scenePro);
String num = scenePro.getNum();
//如果场景有协作者,默认勾选上v4所有菜单
SceneCooperation SceneCooperation = sceneCooperationService.getByNum(num);
if(Objects.nonNull(SceneCooperation)){
redisUtil.hset(RedisKey.SCENE_COOPERATION_NUM_USERID, num, SceneCooperation.getUserId() + "");
//判断是否已经有了v4的菜单,如果已经有了,证明已经迁移过,不需要再初始化菜单资源
List sceneResourceCooperationList = sceneResourceCooperationService.list(
new LambdaQueryWrapper()
.eq(SceneResourceCooperation::getSceneCooperationId, SceneCooperation.getId()));
if(CollUtil.isNotEmpty(sceneResourceCooperationList)){
List sceneSourceList = sceneResourceCooperationList.stream()
.map(item -> item.getSceneResourceId()).collect(Collectors.toList());
List sceneResourceList
= sceneResourceService.list(
new LambdaQueryWrapper()
.eq(SceneResource::getVersion, "v4")
.in(SceneResource::getId, sceneSourceList));
if(CollUtil.isEmpty(sceneResourceList)){//如果查出来的这个场景的v4资源是空的,证明是第一次升级,需要初始化菜单资源
sceneResourceList = sceneResourceService.list(
new LambdaQueryWrapper()
.eq(SceneResource::getVersion, "v4"));// 查出所有的v4菜单,给这个场景的协作者初始化所有v4菜单资源
if(CollUtil.isNotEmpty(sceneResourceList)){
List list = Lists.newArrayList();
SceneResourceCooperation sceneResourceCooperation = null;
for (SceneResource sceneResource : sceneResourceList) {
sceneResourceCooperation = new SceneResourceCooperation();
sceneResourceCooperation.setSceneResourceId(sceneResource.getId());
sceneResourceCooperation.setSceneCooperationId(SceneCooperation.getId());
sceneResourceCooperation.setCreateTime(new Date());
sceneResourceCooperation.setUpdateTime(new Date());
sceneResourceCooperation.setRecStatus(RecStatus.VALID.code());
list.add(sceneResourceCooperation);
}
sceneResourceCooperationService.saveBatch(list);
}
}
}
}
return ResultData.ok();
}
}