package com.fdkankan.manage.service.impl; import cn.dev33.satoken.stp.StpUtil; import cn.hutool.jwt.JWTUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.fdkankan.manage.common.PageInfo; import com.fdkankan.manage.common.RedisKeyUtil; import com.fdkankan.manage.common.ResultCode; import com.fdkankan.manage.entity.*; import com.fdkankan.manage.exception.BusinessException; import com.fdkankan.manage.mapper.IJySceneUserAuthMapper; import com.fdkankan.manage.service.*; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.fdkankan.manage.vo.request.SceneParam; import com.fdkankan.manage.vo.response.CheckOtherVo; import com.fdkankan.manage.vo.response.ManageLoginResponse; import com.fdkankan.manage.vo.response.SceneAuthVo; import com.fdkankan.redis.util.RedisUtil; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.stream.Collectors; /** *

* 服务实现类 *

* * @author * @since 2023-08-24 */ @Service public class JySceneUserAuthServiceImpl extends ServiceImpl implements IJySceneUserAuthService { @Autowired IJyUserService jyUserService; @Autowired IJySceneAuthService jySceneAuthService; @Autowired ISceneProService sceneProService; @Autowired IScenePlusService scenePlusService; @Autowired ISysUserService sysUserService; @Override public Object getAuthList(SceneParam param) { if(StringUtils.isBlank(param.getNum())){ throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS); } ScenePro pro = sceneProService.getByNum(param.getNum()); ScenePlus plus = scenePlusService.getByNum(param.getNum()); if(pro == null && plus == null){ throw new BusinessException(ResultCode.SCENE_NOT_EXIST); } Long sceneUserId = pro == null ? plus.getUserId(): pro.getUserId(); SysUser byId = sysUserService.getById(Long.valueOf(StpUtil.getLoginId().toString())); JyUser loginUser = jyUserService.getBySysId(byId.getId()); JySceneAuth jySceneAuth = jySceneAuthService.getByNum(param.getNum()); if(jySceneAuth == null ){ return new JySceneAuth(0); } LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(JySceneUserAuth::getNum,param.getNum()); if(!sceneUserId.equals(loginUser.getUserId())){ List ids = new ArrayList<>(); getSubAuthorIdsById(loginUser.getId(),param.getNum(),ids); if(ids.size()<=0){ return jySceneAuth; } wrapper.in(JySceneUserAuth::getAuthorId,ids); } wrapper.orderByDesc(JySceneUserAuth::getCreateTime); Page page = this.page(new Page<>(param.getPageNum(), param.getPageSize()), wrapper); List jyUserIds = page.getRecords().stream().map(JySceneUserAuth::getJyUserId).collect(Collectors.toList()); HashMap map = jyUserService.getByIds(jyUserIds); for (JySceneUserAuth jySceneUserAuth : page.getRecords()) { JyUser jyUser = map.get(jySceneUserAuth.getJyUserId()); if(jyUser != null){ jySceneUserAuth.setRyId(jyUser.getRyId()); jySceneUserAuth.setRyNickName(jyUser.getRyNickName()); } } jySceneAuth.setPageInfo(PageInfo.PageInfo(page)); return jySceneAuth; } private void getSubAuthorIdsById(Integer id,String num,List ids) { ids.add(id); LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(JySceneUserAuth::getNum,num); wrapper.eq(JySceneUserAuth::getAuthorId,id); List list = this.list(wrapper); if(list.size() >0){ for (JySceneUserAuth auth : list) { ids.add(auth.getAuthorId()); getSubAuthorIdsById(auth.getId(),num,ids); } } } @Override public void setAuthType(JySceneUserAuth param) { if(StringUtils.isBlank(param.getNum()) || param.getAuthType() == null){ throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS); } ScenePro pro = sceneProService.getByNum(param.getNum()); ScenePlus plus = scenePlusService.getByNum(param.getNum()); if(pro == null && plus == null){ throw new BusinessException(ResultCode.SCENE_NOT_EXITS); } jySceneAuthService.updateAuthTypeByNum(param.getNum(),param.getAuthType()); } @Override public void addAuth(JySceneUserAuth param) { if(StringUtils.isBlank(param.getNum()) ){ throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS); } ScenePro pro = sceneProService.getByNum(param.getNum()); ScenePlus plus = scenePlusService.getByNum(param.getNum()); if(pro == null && plus == null){ throw new BusinessException(ResultCode.SCENE_NOT_EXITS); } if(StringUtils.isBlank(param.getRyId()) ){ throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS); } JyUser jyUser = jyUserService.getByRyId(param.getRyId()); if(jyUser == null){ throw new BusinessException(ResultCode.JY_ID_NO_EXIST); } Long sceneUserId = pro == null ? plus.getUserId():pro.getUserId(); if(sceneUserId.equals(jyUser.getUserId())){ throw new BusinessException(ResultCode.AUTH_ERROR); } JyUser sceneJyUser = jyUserService.getByUserId(sceneUserId); JySceneUserAuth auth = this.getByNumAndJyUserId(jyUser.getId(),param.getNum()); if(auth != null){ param.setId(auth.getId()); } param.setJyUserId(jyUser.getId()); param.setAuthorId(sceneJyUser.getId()); this.saveOrUpdate(param); } @Override public void delAuth(JySceneUserAuth param) { if(param.getId() == null){ throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS); } this.removeById(param.getId()); } @Override public JySceneUserAuth getByNumAndJyUserId(Integer jyUserId, String num) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(JySceneUserAuth::getJyUserId,jyUserId); wrapper.eq(JySceneUserAuth::getNum,num); return this.getOne(wrapper); } @Override public JySceneUserAuth getByNumAndRyId(String num, String ryId) { JyUser jyUser = jyUserService.getByRyId(ryId); if(jyUser == null){ throw new BusinessException(ResultCode.JY_ID_NO_EXIST); } return this.getByNumAndJyUserId(jyUser.getId(),num); } @Override public Object checkAuthOther(JySceneUserAuth param) { if(StringUtils.isBlank(param.getNum())){ throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS); } ScenePro pro = sceneProService.getByNum(param.getNum()); ScenePlus plus = scenePlusService.getByNum(param.getNum()); if(pro == null && plus == null){ throw new BusinessException(ResultCode.SCENE_NOT_EXITS); } Long sceneUserId = pro == null ? plus.getUserId() :pro.getUserId(); CheckOtherVo vo = new CheckOtherVo(); SysUser byId = sysUserService.getById(Long.valueOf(StpUtil.getLoginId().toString())); JyUser jyUser = jyUserService.getBySysId(byId.getId()); if( byId.getRoleId() == 1L || byId.getRoleId() ==45L || jyUser.getUserId().equals(sceneUserId)){ vo.setIsAuthor(1); vo.setEditAuth(1); vo.setLookAuth(1); }else { JySceneUserAuth auth = jySceneUserAuthService.getByNumAndJyUserId(jyUser.getId(), param.getNum()); if(auth !=null){ if(auth.getCanAuthLook() == 1 ){ vo.setLookAuth(auth.getLookAuth()); vo.setLookEndTime(auth.getLookEndTime()); } if(auth.getCanEditLook() == 1){ vo.setEditAuth(auth.getEditAuth()); vo.setEditEndTime(auth.getEditEndTime()); } } } return vo; } @Autowired RedisUtil redisUtil; @Autowired IJySceneUserAuthService jySceneUserAuthService; @Override public Object checkNumAuth(String num,String token) { if(StringUtils.isBlank(num)){ throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS); } ScenePro pro = sceneProService.getByNum(num); ScenePlus plus = scenePlusService.getByNum(num); if(pro == null && plus == null){ throw new BusinessException(ResultCode.SCENE_NOT_EXITS); } String redisKey = String.format(RedisKeyUtil.loginToken,token); if(!redisUtil.hasKey(redisKey)){ throw new BusinessException(ResultCode.USER_NOT_LOGIN); } String userStr = redisUtil.get(redisKey); ManageLoginResponse result = JSONObject.parseObject(userStr,ManageLoginResponse.class); Long userId = result.getUserId(); if(userId == null){ redisUtil.del(redisKey); throw new BusinessException(ResultCode.USER_NOT_LOGIN); } SceneAuthVo sceneAuthVo = new SceneAuthVo(); JySceneAuth jySceneAuth = jySceneAuthService.getByNum(num); if(jySceneAuth!=null && jySceneAuth.getAuthType() == 1){ sceneAuthVo.setViewAuth(true); } SysUser byId = sysUserService.getById(result.getId()); JyUser jyUser = jyUserService.getBySysId(byId.getId()); JySceneUserAuth jySceneUserAuth = jySceneUserAuthService.getByNumAndJyUserId(jyUser.getId(), num); if(jySceneAuth != null && jySceneUserAuth !=null){ Date date = new Date(); if(jySceneUserAuth.getLookAuth() == 1 || ( jySceneUserAuth.getLookAuth() == 2 && jySceneUserAuth.getLookEndTime().getTime() >date.getTime())){ sceneAuthVo.setViewAuth(true); } if(jySceneUserAuth.getEditAuth() == 1 || (jySceneUserAuth.getEditAuth() == 2 && jySceneUserAuth.getEditEndTime().getTime() >date.getTime())){ sceneAuthVo.setEditAuth(true); } } if(pro != null && jyUser.getUserId().equals(pro.getUserId())){ sceneAuthVo.setViewAuth(true); sceneAuthVo.setEditAuth(true); } if(plus != null && jyUser.getUserId().equals(plus.getUserId())){ sceneAuthVo.setViewAuth(true); sceneAuthVo.setEditAuth(true); } return sceneAuthVo; } @Override public List getByJyUserId(Integer jyUserId) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(JySceneUserAuth::getJyUserId,jyUserId); return this.list(wrapper); } }