package com.fdkankan.manage.service.impl; import cn.dev33.satoken.stp.StpUtil; import cn.hutool.extra.servlet.ServletUtil; 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.common.util.JwtUtil; 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.util.AesUtil; 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.manage.vo.response.SceneUserAuthVo; import com.fdkankan.redis.util.RedisUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.tomcat.util.security.Escape; import org.joda.time.DateTime; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.*; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; /** *

* 服务实现类 *

* * @author * @since 2023-08-24 */ @Service @Slf4j 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 getAuthType(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); } JySceneAuth jySceneAuth = jySceneAuthService.getByNum(param.getNum()); if(jySceneAuth == null ){ return new JySceneAuth(0); } return jySceneAuth; } @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(); JyUser loginUser = null; Long sysRoleId = null; if(StpUtil.isLogin()){ loginUser = jyUserService.getBySysId(StpUtil.getLoginId()); SysUser byId = sysUserService.getById(Long.valueOf(StpUtil.getLoginId().toString())); sysRoleId = byId.getRoleId(); }else { if(StringUtils.isNotBlank(param.getRyId())){ loginUser = jyUserService.getByRyId(param.getRyId()); } if(StringUtils.isNotBlank(param.getRyNo())){ loginUser = jyUserService.getByRyNo(param.getRyNo()); } if(loginUser != null){ SysUser byId = sysUserService.getById(loginUser.getSysUserId()); sysRoleId = byId.getRoleId(); } } if(loginUser == null){ throw new BusinessException(ResultCode.USER_NOT_EXIST); } LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(JySceneUserAuth::getNum,param.getNum()); wrapper.eq(JySceneUserAuth::getAuthType,param.getAuthType()); if(!sceneUserId.equals(loginUser.getUserId()) && sysRoleId!=null && sysRoleId == 47L ){ List ids = new ArrayList<>(); getSubAuthorIdsById(loginUser.getId(),param.getNum(),ids); if(ids.size()<=0){ return PageInfo.PageInfo(new Page(param.getPageNum(),param.getPageSize())); } 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()); jySceneUserAuth.setRyNo(jyUser.getRyNo()); } } return PageInfo.PageInfo(page); } 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 synchronized 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); } JyUser jyUser = null; if(StringUtils.isNotBlank(param.getRyId()) ){ jyUser = jyUserService.getByRyId(param.getRyId()); if(jyUser == null){ throw new BusinessException(ResultCode.JY_ID_NO_EXIST); } } if(StringUtils.isNotBlank(param.getRyNo()) ){ jyUser = jyUserService.getByRyNo(param.getRyNo()); if(jyUser == null){ throw new BusinessException(ResultCode.JY_ID_NO_EXIST); } } if(jyUser == null){ throw new BusinessException(ResultCode.JY_ID_NO_EXIST); } JySceneUserAuth jySceneUserAuth = jySceneUserAuthService.getByNumAndJyUserId(jyUser.getId(), param.getNum(),param.getAuthType()); if(jySceneUserAuth != null && param.getCanDel() != 1){ throw new BusinessException(ResultCode.SCENE_AUTH_EXITS); } if(jySceneUserAuth != null && param.getCanDel() == 1){ param.setId(jySceneUserAuth.getId()); } Long sceneUserId = pro == null ? plus.getUserId():pro.getUserId(); if(sceneUserId.equals(jyUser.getUserId())){ throw new BusinessException(ResultCode.AUTH_ERROR); } JyUser sceneJyUser = null; if(StpUtil.isLogin()){ sceneJyUser = jyUserService.getBySysId(StpUtil.getLoginId()); }else { sceneJyUser = jyUserService.getByUserId(sceneUserId); } if(param.getCanEditLook() == 1 || param.getCanAuthLook() == 1){ param.setIsAuthor(1); } if(param.getCanEditLook() == 1 ){ param.setCanAuthLook(1); } if(param.getCanEditLook() == 0 && param.getCanAuthLook() == 0){ param.setIsAuthor(0); } JySceneAuth jySceneAuth = jySceneAuthService.getByNum(param.getNum()); if(jySceneAuth == null){ jySceneAuth = new JySceneAuth(param.getAuthType()); jySceneAuth.setNum(param.getNum()); jySceneAuthService.save(jySceneAuth); } 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,Integer authType) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(JySceneUserAuth::getJyUserId,jyUserId); wrapper.eq(JySceneUserAuth::getNum,num); wrapper.eq(JySceneUserAuth::getAuthType,authType); 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); } JySceneAuth jySceneAuth = jySceneAuthService.getByNum(num); if(jySceneAuth == null){ throw new BusinessException(ResultCode.DEL_AUTH_ERROR); } return this.getByNumAndJyUserId(jyUser.getId(),num,jySceneAuth.getAuthType()); } @Override public JySceneUserAuth getByNumAndRyNo(String num, String ryNo) { JyUser jyUser = jyUserService.getByRyNo(ryNo); if(jyUser == null){ throw new BusinessException(ResultCode.JY_ID_NO_EXIST); } JySceneAuth jySceneAuth = jySceneAuthService.getByNum(num); if(jySceneAuth == null){ throw new BusinessException(ResultCode.DEL_AUTH_ERROR); } return this.getByNumAndJyUserId(jyUser.getId(),num,jySceneAuth.getAuthType()); } @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() != 47L || jyUser.getUserId().equals(sceneUserId)){ vo.setIsAuthor(1); vo.setEditAuth(1); vo.setLookAuth(1); }else { JySceneUserAuth auth = jySceneUserAuthService.getByNumAndJyUserId(jyUser.getId(), param.getNum(),param.getAuthType()); 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; @Autowired IJyUserShareService jyUserShareService; @Autowired ManageService manageService; @Override public Object checkNumAuth(String num,String token,String clientIP,String userName,String password) { if(StringUtils.isBlank(num)){ throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS); } log.info("checkNumAuth-----------num:{},token:{},userName:{},password:{}",num,token,userName,password); ScenePro pro = sceneProService.getByNum(num); ScenePlus plus = scenePlusService.getByNum(num); if(pro == null && plus == null){ throw new BusinessException(ResultCode.SCENE_NOT_EXITS); } Long sceneUserId = pro == null ? plus.getUserId():pro.getUserId(); SceneAuthVo sceneAuthVo = new SceneAuthVo(); JySceneAuth jySceneAuth = jySceneAuthService.getByNum(num); if(jySceneAuth!=null && jySceneAuth.getAuthType() == 1){ sceneAuthVo.setViewAuth(true); } if(StringUtils.isBlank(token) && (StringUtils.isBlank(userName) || StringUtils.isBlank(password))){ return sceneAuthVo; } Long sysUserId = null; if(StringUtils.isNotBlank(token)){ String redisKey = String.format(RedisKeyUtil.loginToken,token); if( !redisUtil.hasKey(redisKey) ){ return sceneAuthVo; } 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); }else { redisUtil.expire(redisKey,2 * 60 * 60); } sysUserId = result.getId(); } if(StringUtils.isNotBlank(userName) && StringUtils.isNotBlank(password)){ ManageLoginResponse login = manageService.login(clientIP, userName, password,true); sysUserId = login.getId(); } if(sysUserId == null){ return sceneAuthVo; } SysUser byId = sysUserService.getById(sysUserId); if(byId.getRoleId() != 47L ){ sceneAuthVo.setViewAuth(true); sceneAuthVo.setEditAuth(true); return sceneAuthVo; } JyUser jyUser = jyUserService.getBySysId(byId.getId()); //if(jySceneAuth != null && jySceneAuth.getAuthType() == 0){ if(jySceneAuth != null ){ JySceneUserAuth jySceneUserAuth = jySceneUserAuthService.getByNumAndJyUserId(jyUser.getId(), num,jySceneAuth.getAuthType()); if(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); sceneAuthVo.setIsAuthor(true); } if(plus != null && jyUser.getUserId().equals(plus.getUserId())){ sceneAuthVo.setViewAuth(true); sceneAuthVo.setEditAuth(true); sceneAuthVo.setIsAuthor(true); } if(!sceneAuthVo.getViewAuth()){ List shareList = jyUserShareService.getByJyUserId(jyUser.getId()); List jyUserIds = shareList.stream().map(JyUserShare::getMainJyUserId).collect(Collectors.toList()); HashMap userHashMap = jyUserService.getByIds(jyUserIds); for (Integer jyUserId : userHashMap.keySet()) { JyUser jyUser1 = userHashMap.get(jyUserId); if(jyUser1.getUserId().equals(sceneUserId)){ sceneAuthVo.setViewAuth(true); } } } return sceneAuthVo; } @Override public List getByJyUserId(Integer jyUserId) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(JySceneUserAuth::getJyUserId,jyUserId); return this.list(wrapper); } @Override public void delByJyUserId(Integer jyUserId) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(JySceneUserAuth::getJyUserId,jyUserId); this.remove(wrapper); } @Override public HashMap> getByNumList(List numList) { HashMap> map = new HashMap<>(); if(numList.isEmpty()){ return map; } LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.in(JySceneUserAuth::getNum,numList); List list = this.list(wrapper); for (JySceneUserAuth e : list) { String key = e.getNum() + "_"+ e.getAuthType(); map.computeIfAbsent(key, k -> new ArrayList<>()); map.get(key).add(e); } return map; } @Override public HashMap> getByNumList(List numList,Integer jyUserId) { HashMap> map = new HashMap<>(); if(numList.isEmpty()){ return map; } LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.in(JySceneUserAuth::getNum,numList); wrapper.eq(JySceneUserAuth::getAuthorId,jyUserId); List list = this.list(wrapper); for (JySceneUserAuth e : list) { String key = e.getNum() + "_"+ e.getAuthType(); map.computeIfAbsent(key, k -> new ArrayList<>()); map.get(key).add(e); } return map; } }