package com.fdkankan.jp.xspace.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.fdkankan.common.constant.RecStatus; import com.fdkankan.fyun.face.FYunFileServiceInterface; import com.fdkankan.jp.xspace.common.PageInfo; import com.fdkankan.jp.xspace.common.Result; import com.fdkankan.jp.xspace.common.ResultCode; import com.fdkankan.jp.xspace.common.constant.OSSPathConstant; import com.fdkankan.jp.xspace.common.rabbitmq.RabbitmqConstant; import com.fdkankan.jp.xspace.common.rabbitmq.dto.SceneXspaceMqDTO; import com.fdkankan.jp.xspace.dto.XspacePageDTO; import com.fdkankan.jp.xspace.entity.ScenePlus; import com.fdkankan.jp.xspace.entity.SceneXspace; import com.fdkankan.jp.xspace.entity.User; import com.fdkankan.jp.xspace.mapper.ISceneXspaceMapper; import com.fdkankan.jp.xspace.service.IScenePlusService; import com.fdkankan.jp.xspace.service.ISceneXspaceService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.fdkankan.jp.xspace.service.IUserRoleService; import com.fdkankan.jp.xspace.service.IUserService; import com.fdkankan.jp.xspace.common.util.UniqueStringGenerator; import com.fdkankan.jp.xspace.vo.XspaceVO; import com.fdkankan.rabbitmq.util.RabbitMqProducer; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.List; import java.util.Map; import java.util.Set; import java.util.stream.Collectors; /** *

* xspace同步表 服务实现类 *

* * @author * @since 2024-07-22 */ @Service public class SceneXspaceServiceImpl extends ServiceImpl implements ISceneXspaceService { @Value("${webSiteFormat}") private String webSiteFormat; @Autowired private IUserRoleService userRoleService; @Autowired private IUserService userService; @Autowired private IScenePlusService scenePlusService; @Autowired private RabbitMqProducer mqProducer; @Resource private FYunFileServiceInterface fYunFileService; @Override public PageInfo pageXspace(XspacePageDTO param, User user) { Set roleIds = userRoleService.getByUser(user); if(!roleIds.contains(5)){//平台管理员可以看到所有 if(roleIds.contains(6)){//公司管理员可以看到同一公司下所有 param.setCompanyId(user.getCompanyId()); }else{//普通员工只能看到自己的 param.setUserId(user.getId()); } } Page xspaceVOPage = this.baseMapper.pageXspace(new Page(param.getPageNum(), param.getPageSize()), param); xspaceVOPage.getRecords().stream().forEach(v->{ v.setWebSite(String.format(webSiteFormat, v.getNum(), v.getSerial())); }); return PageInfo.PageInfo(xspaceVOPage); } @Override public Result delete(List ids, User user) { List sceneXspaces = this.listByIds(ids); if(CollUtil.isEmpty(sceneXspaces)){ return Result.success(); } //校验数据 Set userIds = sceneXspaces.stream().map(x -> x.getUserId()).collect(Collectors.toSet()); Set roleIds = userRoleService.getByUser(user); boolean notPermission = false; if(!roleIds.contains(5)){//平台管理员可以看到所有 if(roleIds.contains(6)){//公司管理员可以看到同一公司下所有 List users = userService.listByIds(userIds); notPermission = users.stream().anyMatch(u -> !u.getCompanyId().equals(user.getCompanyId())); }else{//普通员工只能删除自己的 notPermission = userIds.stream().anyMatch(id -> !id.equals(user.getId())); } } if(notPermission){ return Result.failure(ResultCode.NOT_PERMISSION); } sceneXspaces.stream().forEach(x->{ x.setUpdater(user.getId()); x.setRecStatus(RecStatus.DISABLE.code()); this.updateById(x); this.removeById(x.getId()); String xspaceSceneKey = String.format(OSSPathConstant.XSPACE_SCENE_FORMAT, x.getNum(), x.getSerial()); fYunFileService.deleteFolder(xspaceSceneKey); }); return Result.success(); } @Override public Result sync(List nums, User user) { List syncList = this.list(new LambdaQueryWrapper().in(SceneXspace::getNum, nums).eq(SceneXspace::getUserId, user.getId())); List canSyncList = nums; if(CollUtil.isNotEmpty(syncList)){ List doneNumsList = syncList.stream().map(v -> v.getNum()).collect(Collectors.toList()); canSyncList = nums.stream().filter(v->!doneNumsList.contains(v)).collect(Collectors.toList()); } List scenePlusList = scenePlusService.list(new LambdaQueryWrapper().eq(ScenePlus::getUserId, user.getId()).in(ScenePlus::getNum, canSyncList)); if(CollUtil.isEmpty(scenePlusList)){ return Result.success(); } List sceneXspaceList = scenePlusList.stream().map(p -> { SceneXspace sceneXspace = new SceneXspace(); sceneXspace.setNum(p.getNum()); sceneXspace.setUserId(p.getUserId()); sceneXspace.setSerial(UniqueStringGenerator.getUniqueString()); return sceneXspace; }).collect(Collectors.toList()); this.saveBatch(sceneXspaceList); sceneXspaceList.stream().forEach(v->{ mqProducer.sendByWorkQueue(RabbitmqConstant.QUEUE_PACK_XSPACE, v); }); return Result.success(); } }