package cn.com.goldenwater.dcproj.service.impl.synchronous; import cn.com.goldenwater.dcproj.constValue.AdCodeLabel; import cn.com.goldenwater.dcproj.constValue.PlusEnum; import cn.com.goldenwater.dcproj.dao.BisInspOrgDao; import cn.com.goldenwater.dcproj.model.BisInspAll; import cn.com.goldenwater.dcproj.model.BisInspAllRlationPers; import cn.com.goldenwater.dcproj.model.BisInspOrg; import cn.com.goldenwater.dcproj.model.BisInspPersOrg; import cn.com.goldenwater.dcproj.model.OlBisInspOrg; import cn.com.goldenwater.dcproj.model.UserRole; import cn.com.goldenwater.dcproj.param.BisInspAllRlationPersParam; import cn.com.goldenwater.dcproj.param.BisInspOrgParam; import cn.com.goldenwater.dcproj.param.BisInspPersOrgParam; import cn.com.goldenwater.dcproj.param.UserRoleParam; import cn.com.goldenwater.dcproj.service.BisInspAllRlationPersService; import cn.com.goldenwater.dcproj.service.BisInspPersOrgService; import cn.com.goldenwater.dcproj.service.CdCasService; import cn.com.goldenwater.dcproj.service.OlBisInspOrgService; import cn.com.goldenwater.dcproj.service.UserRoleService; import cn.com.goldenwater.dcproj.service.impl.system.OrganizationTreeImpl; import cn.com.goldenwater.dcproj.utils.JWTTokenUtil; import cn.com.goldenwater.dcproj.utils.UserMsgSectrityUtils; import cn.com.goldenwater.id.util.UuidUtil; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletRequest; import java.util.Date; import java.util.List; import java.util.Map; import java.util.concurrent.TimeUnit; /** * * 成都 单点登录 * @author lxf * @date 2022/12/08 18:00 */ @Service @Transactional public class CdCasServiceImpl implements CdCasService { @Autowired private BisInspAllRlationPersService bisInspAllRlationPersService; @Autowired private OrganizationTreeImpl organizationTree; @Autowired private RedisTemplate redisTemplate; @Autowired private OlBisInspOrgService olBisInspOrgService; @Autowired private BisInspOrgDao bisInspOrgDao; @Autowired private BisInspPersOrgService persOrgService; @Autowired private UserRoleService userRoleService; private Logger logger = LoggerFactory.getLogger(getClass()); @Override public BisInspAllRlationPers validateUser(Map ssoUserMap) throws Exception { //用户编号 String userCode = ssoUserMap.get("loginName").toString(); // 真实姓名 String trueName = ssoUserMap.get("userName").toString(); String mobile = ssoUserMap.get("phone").toString(); if (StringUtils.isNotBlank(userCode) && StringUtils.isNotBlank(mobile) && StringUtils.isNotBlank(trueName)) { BisInspAllRlationPersParam bisInspAllRlationPersParam = new BisInspAllRlationPersParam(); bisInspAllRlationPersParam.setMobilenumb(mobile); BisInspAllRlationPers bisInspAllRlationPers = bisInspAllRlationPersService.getBy(bisInspAllRlationPersParam); // 若本地用户无,则查询同步水管平台用户是否存在,不存在则请求水管平台接口同步用户,存在则添加本地用户数据 if (bisInspAllRlationPers != null) { bisInspAllRlationPers.setOrgId("120"); bisInspAllRlationPers.setOrgNm("成都市水务局"); return bisInspAllRlationPers; } else { bisInspAllRlationPers = addBisInspAllRlationPers(userCode, mobile, trueName); return bisInspAllRlationPers; } } else { this.logger.info("请求水管用户接口异常 ==> 用户编码:" + userCode + "或手机号:" + mobile); throw new Exception("请求水管用户接口异常 ==> 用户编码:" + userCode + "或手机号:" + mobile); } } @Override public BisInspAllRlationPers validateTicket(BisInspAllRlationPers bisInspAllRlationPers, String uuid, HttpServletRequest request) { bisInspAllRlationPers = getBisInspAllRlations(bisInspAllRlationPers); BisInspAllRlationPers pers = new BisInspAllRlationPers(); pers.setGuid(bisInspAllRlationPers.getGuid()); pers.setLoginTm(new Date()); if (StringUtils.isBlank(bisInspAllRlationPers.getPersType())) { bisInspAllRlationPers.setPersType("3"); pers.setPersType("3"); } bisInspAllRlationPersService.update(pers); bisInspAllRlationPers.setPwd(null); String accessToken = JWTTokenUtil.sign(bisInspAllRlationPersService.getLoginUser(bisInspAllRlationPers), bisInspAllRlationPers.getGuid()); redisTemplate.opsForValue().set(uuid, accessToken, JWTTokenUtil.maxAge, TimeUnit.MILLISECONDS); redisTemplate.opsForValue().set(uuid + bisInspAllRlationPers.getGuid(), accessToken, JWTTokenUtil.refreshmaxAge, TimeUnit.MILLISECONDS); bisInspAllRlationPersService.sendChannel(uuid, bisInspAllRlationPers, request, PlusEnum.ADD.getNumber()); bisInspAllRlationPers.setMobilenumb(UserMsgSectrityUtils.blurPhone(bisInspAllRlationPers.getMobilenumb())); return bisInspAllRlationPers; } /** * @Description 获取本系统 * @Date 2020/7/14 **/ private BisInspAllRlationPers getBisInspAllRlations(BisInspAllRlationPers bisInspAllRlationPers) { BisInspOrg bisInspOrg = new BisInspOrg(); if (StringUtils.isNotBlank(bisInspAllRlationPers.getOrgId())) { String orgId = bisInspAllRlationPers.getOrgId(); bisInspOrg = olBisInspOrgService.getDefaultOrg(orgId); bisInspAllRlationPers.setDefaultOrg(bisInspOrg); BisInspOrgParam inspOrgParam = new BisInspOrgParam(); inspOrgParam.setPersId(bisInspAllRlationPers.getGuid()); List inspOrgList = bisInspOrgDao.findPersOrgList(inspOrgParam); bisInspAllRlationPers.setAllOrg(inspOrgList); } if (StringUtils.isNotBlank(bisInspAllRlationPers.getGuid())) { List allNode = organizationTree.getAllNode(bisInspAllRlationPers.getGuid(), "", bisInspAllRlationPers.getOrgId(), "", "", "","",""); if (allNode.size() > 0) { StringBuffer s = new StringBuffer(); s.append("1"); String sk = "0"; String ry = "000"; String sh = "0"; String ogc = "0"; String dxs = "0"; String sz = "0"; String sd = "0"; for (BisInspAll b : allNode) { if ("001".equals(b.getId().substring(0, 3))) { sk = "1"; } if ("002".equals(b.getId().substring(0, 3))) { ry = "111"; } if ("003".equals(b.getId().substring(0, 3))) { sh = "1"; } if ("004".equals(b.getId().substring(0, 3))) { ogc = "1"; } if ("005".equals(b.getId().substring(0, 3))) { dxs = "1"; } if ("006".equals(b.getId().substring(0, 3))) { sz = "1"; } if ("011".equals(b.getId().substring(0, 3))) { sd = "1"; } } s.append(sk).append(ry).append(sh).append(ogc).append(dxs).append(sz).append(sd); bisInspAllRlationPers.setJurisdiction(s.toString()); } else { bisInspAllRlationPers.setJurisdiction("100000000"); } bisInspAllRlationPers.setAllNode(allNode); } return bisInspAllRlationPers; } /** * @Description ,添加用户权限中角色信息,添加用户关联机构,添加用户任务列表 **/ public BisInspAllRlationPers addBisInspAllRlationPers(String userCode, String mobile, String trueName) { BisInspAllRlationPers bisInspAllRlationPers = new BisInspAllRlationPers(); String uuid = UuidUtil.uuid(); // 生成uuid bisInspAllRlationPers.setGuid(uuid); bisInspAllRlationPers.setPersName(trueName); bisInspAllRlationPers.setMobilenumb(mobile); bisInspAllRlationPers.setOwnerSystem("DC_ALL"); bisInspAllRlationPers.setPersType("1"); bisInspAllRlationPers.setOrgId("120"); bisInspAllRlationPers.setOrgNm("成都市水务局"); addPreOrg(bisInspAllRlationPers); //添加本地用户信息 bisInspAllRlationPersService.insert(bisInspAllRlationPers); // 人员角色表添加数据 UserRole userRole = new UserRole(); userRole.setUserId(uuid); // 成都市人员角色 id userRole.setRoleId("30195505f0d7476c9cf552d726c815bb"); UserRoleParam userRoleParam = new UserRoleParam(); userRoleParam.setRoleId(userRole.getRoleId()); userRoleParam.setUserId(userRole.getUserId()); if (null == userRoleService.getBy(userRoleParam)) { userRoleService.insert(userRole); } //人员机构对应表添加数据 BisInspPersOrg inspPersOrg = new BisInspPersOrg(); inspPersOrg.setOrgId(bisInspAllRlationPers.getOrgId()); inspPersOrg.setPersId(bisInspAllRlationPers.getGuid()); if (StringUtils.isNotBlank(bisInspAllRlationPers.getPersType())) { inspPersOrg.setUserType(bisInspAllRlationPers.getPersType()); } else { inspPersOrg.setUserType(AdCodeLabel.GROUP_LEADER); } BisInspPersOrgParam bisInspPersOrgParam = new BisInspPersOrgParam(); bisInspPersOrgParam.setPersId(inspPersOrg.getPersId()); bisInspPersOrgParam.setOrgId(inspPersOrg.getOrgId()); if (null == persOrgService.getBy(bisInspPersOrgParam)) { persOrgService.insert(inspPersOrg); } return bisInspAllRlationPers; } /** * @Description 本地用户行政区划分配 **/ private void addPreOrg(BisInspAllRlationPers bisInspAllRlationPers) { if (StringUtils.isNotBlank(bisInspAllRlationPers.getOrgId())) { OlBisInspOrg olBisInspOrg = olBisInspOrgService.get(bisInspAllRlationPers.getOrgId()); if (olBisInspOrg != null) { bisInspAllRlationPers.setOrgNm(olBisInspOrg.getOrgNm()); bisInspAllRlationPers.setProvince(olBisInspOrg.getAdCode()); } BisInspPersOrg inspPersOrg = new BisInspPersOrg(); inspPersOrg.setOrgId(bisInspAllRlationPers.getOrgId()); inspPersOrg.setPersId(bisInspAllRlationPers.getGuid()); if (StringUtils.isNotBlank(bisInspAllRlationPers.getPersType())) { inspPersOrg.setUserType(bisInspAllRlationPers.getPersType()); } else { inspPersOrg.setUserType(AdCodeLabel.GROUP_LEADER); } BisInspPersOrgParam bisInspPersOrgParam = new BisInspPersOrgParam(); bisInspPersOrgParam.setPersId(inspPersOrg.getPersId()); bisInspPersOrgParam.setOrgId(inspPersOrg.getOrgId()); if (null == persOrgService.getBy(bisInspPersOrgParam)) { persOrgService.insert(inspPersOrg); } } } }