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; @Autowired ICaseService caseService; @Override public Object getAuthType(SceneParam param) { if(StringUtils.isBlank(param.getNum()) || param.getCaseId() == null){ throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS); } if(StringUtils.isNotBlank(param.getNum()) && param.getCaseId() !=null){ param.setCaseId(null); } JySceneAuth jySceneAuth = null; if(StringUtils.isNotBlank(param.getNum())){ caseService.checkNumInCase(param.getNum()); ScenePlus plus = scenePlusService.getByNum(param.getNum()); if(plus == null){ throw new BusinessException(ResultCode.SCENE_NOT_EXIST); } jySceneAuth = jySceneAuthService.getByNum(param.getNum()); if(jySceneAuth == null ){ return new JySceneAuth(0); } } if(param.getCaseId() != null){ Case caseEntity = caseService.getById(param.getCaseId()); if(caseEntity == null){ throw new BusinessException(ResultCode.CASE_NOT_EXIST); } jySceneAuth = jySceneAuthService.getByCaseId(param.getCaseId()); if(jySceneAuth == null ){ return new JySceneAuth(0); } } return jySceneAuth; } @Override public Object getAuthList(SceneParam param) { if(StringUtils.isBlank(param.getNum()) || param.getCaseId() == null){ throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS); } if(StringUtils.isNotBlank(param.getNum()) && param.getCaseId() !=null){ param.setCaseId(null); } Long sceneUserId = null; JyUser loginUser = null; Long sysRoleId = null; if(StringUtils.isNotBlank(param.getNum())){ ScenePlus plus = scenePlusService.getByNum(param.getNum()); if(plus == null){ throw new BusinessException(ResultCode.SCENE_NOT_EXIST); } caseService.checkNumInCase(param.getNum()); sceneUserId = plus.getUserId(); } if(param.getCaseId() != null){ Case caseEntity = caseService.getById(param.getCaseId()); if(caseEntity == null){ throw new BusinessException(ResultCode.CASE_NOT_EXIST); } JyUser jyUser = jyUserService.getBySysId(caseEntity.getSysUserId()); if(jyUser == null){ throw new BusinessException(ResultCode.USER_NOT_EXIST); } sceneUserId = jyUser.getUserId(); } 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<>(); if(StringUtils.isNotBlank(param.getNum())){ wrapper.eq(JySceneUserAuth::getNum,param.getNum()); } if(param.getCaseId() != null){ wrapper.eq(JySceneUserAuth::getCaseId,param.getCaseId()); } wrapper.eq(JySceneUserAuth::getAuthType,param.getAuthType()); if(!sceneUserId.equals(loginUser.getUserId()) && sysRoleId!=null && sysRoleId == 47L ){ List ids = new ArrayList<>(); getSubAuthorIdsById(loginUser.getId(),param.getNum(),param.getCaseId(),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,Integer caseId,List ids) { ids.add(id); LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); if(StringUtils.isNotBlank(num)){ wrapper.eq(JySceneUserAuth::getNum,num); } if(caseId != null){ wrapper.eq(JySceneUserAuth::getCaseId,caseId); } 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,caseId,ids); } } } @Override public void setAuthType(JySceneUserAuth param) { if(StringUtils.isBlank(param.getNum()) || param.getCaseId() == null || param.getAuthType() == null){ throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS); } if(StringUtils.isNotBlank(param.getNum()) && param.getCaseId() !=null){ param.setCaseId(null); } if(StringUtils.isNotBlank(param.getNum())){ ScenePlus plus = scenePlusService.getByNum(param.getNum()); if( plus == null){ throw new BusinessException(ResultCode.SCENE_NOT_EXITS); } jySceneAuthService.updateAuthTypeByNum(param.getNum(),param.getAuthType()); } if(param.getCaseId() != null){ Case caseEntity = caseService.getById(param.getCaseId()); if(caseEntity == null){ throw new BusinessException(ResultCode.CASE_NOT_EXIST); } jySceneAuthService.updateAuthTypeByCaseId(param.getCaseId(),param.getAuthType()); } } @Override public synchronized void addAuth(JySceneUserAuth param) { if(StringUtils.isBlank(param.getNum()) || param.getCaseId() == null ){ throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS); } 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); } Long sceneUserId = null; JySceneUserAuth jySceneUserAuth = null; if(StringUtils.isNotBlank(param.getNum())){ ScenePlus plus = scenePlusService.getByNum(param.getNum()); if(plus == null){ throw new BusinessException(ResultCode.SCENE_NOT_EXIST); } caseService.checkNumInCase(param.getNum()); sceneUserId = plus.getUserId(); jySceneUserAuth = jySceneUserAuthService.getByNumAndJyUserId(jyUser.getId(), param.getNum(),param.getAuthType()); } if(param.getCaseId() != null){ Case caseEntity = caseService.getById(param.getCaseId()); if(caseEntity == null){ throw new BusinessException(ResultCode.CASE_NOT_EXIST); } JyUser jyUser2 = jyUserService.getBySysId(caseEntity.getSysUserId()); if(jyUser2 == null){ throw new BusinessException(ResultCode.USER_NOT_EXIST); } sceneUserId = jyUser2.getUserId(); jySceneUserAuth = jySceneUserAuthService.getByCaseIdAndJyUserId(jyUser.getId(), param.getCaseId(),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()); } 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 = null; if(StringUtils.isNotBlank(param.getNum())){ jySceneAuth = jySceneAuthService.getByNum(param.getNum()); } if(param.getCaseId() != null){ jySceneAuth = jySceneAuthService.getByCaseId(param.getCaseId()); } if(jySceneAuth == null){ jySceneAuth = new JySceneAuth(param.getAuthType()); if(StringUtils.isNotBlank(param.getNum())){ jySceneAuth.setNum(param.getNum()); } if(param.getCaseId() != null){ jySceneAuth.setCaseId(param.getCaseId()); } 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 getByCaseIdAndJyUserId(Integer jyUserId, Integer caseId, Integer authType) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(JySceneUserAuth::getJyUserId,jyUserId); wrapper.eq(JySceneUserAuth::getCaseId,caseId); 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 JySceneUserAuth getByCaseIdAndRyId(Integer caseId, String ryId) { JyUser jyUser = jyUserService.getByRyId(ryId); if(jyUser == null){ throw new BusinessException(ResultCode.JY_ID_NO_EXIST); } JySceneAuth jySceneAuth = jySceneAuthService.getByCaseId(caseId); if(jySceneAuth == null){ throw new BusinessException(ResultCode.DEL_AUTH_ERROR); } return this.getByCaseIdAndJyUserId(jyUser.getId(),caseId,jySceneAuth.getAuthType()); } @Override public JySceneUserAuth getByCaseIdAndRyNo(Integer caseId, String ryNo) { JyUser jyUser = jyUserService.getByRyNo(ryNo); if(jyUser == null){ throw new BusinessException(ResultCode.JY_ID_NO_EXIST); } JySceneAuth jySceneAuth = jySceneAuthService.getByCaseId(caseId); if(jySceneAuth == null){ throw new BusinessException(ResultCode.DEL_AUTH_ERROR); } return this.getByCaseIdAndJyUserId(jyUser.getId(),caseId,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; @Autowired IJyUserPlatformService jyUserPlatformService; @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); } List caseList = caseService.getCaseByNum(num); for (Case aCase : caseList) { JySceneAuth jySceneAuth1 = jySceneAuthService.getByCaseId(aCase.getCaseId()); if(jySceneAuth1!=null && jySceneAuth1.getAuthType() == 1){ sceneAuthVo.setViewAuth(true); break; } } 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() == 1L ){ sceneAuthVo.setViewAuth(true); sceneAuthVo.setEditAuth(true); return sceneAuthVo; } if(byId.getRoleId() == 45L || byId.getRoleId() == 48L){ Integer loginPlatformId = jyUserPlatformService.getLoginPlatformId(); if(loginPlatformId != null){ List byUserIdPlatform = jyUserService.getByUserIdPlatform(loginPlatformId); if(byUserIdPlatform.contains(sceneUserId)){ 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()); setFlag(jySceneUserAuth,sceneAuthVo); } if(!caseList.isEmpty()){ for (Case aCase : caseList) { JySceneUserAuth jySceneUserAuth = jySceneUserAuthService.getByCaseIdAndJyUserId(jyUser.getId(), aCase.getCaseId(),jySceneAuth.getAuthType()); setFlag(jySceneUserAuth,sceneAuthVo); } } 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 jyUserShares = jyUserShareService.getByJyUserId(jyUser.getId()); List mainUserIds = jyUserShares.stream().map(JyUserShare::getMainJyUserId).collect(Collectors.toList()); HashMap roleMap = new HashMap<>(); if(!mainUserIds.isEmpty()){ List jyUsers = jyUserService.listByIds(mainUserIds); Set sysIds = jyUsers.stream().map(JyUser::getSysUserId).collect(Collectors.toSet()); HashMap byIds = sysUserService.getByIds(sysIds); jyUsers.forEach( e-> roleMap.put(e.getId(),byIds.get(e.getSysUserId()).getRoleId())); for (JyUser user : jyUsers) { Long roleId = roleMap.get(user.getId()); if(user.getPlatformId() != null && (roleId == 1L || roleId == 45L || roleId == 48L)){ sceneAuthVo.setViewAuth(true); }else if(user.getUserId().equals(sceneUserId)){ sceneAuthVo.setViewAuth(true); } } } } return sceneAuthVo; } private void setFlag(JySceneUserAuth jySceneUserAuth,SceneAuthVo sceneAuthVo){ 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); } } } @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; } }