Compare commits

...

2 Commits

Author SHA1 Message Date
ljf 4a4fbb4823 Merge remote-tracking branch 'origin/master' 1 year ago
ljf 8b5cc555c1 mh jicheng 1 year ago
  1. 10
      shuili-admin/pom.xml
  2. 2
      shuili-admin/src/main/java/com/kms/TianhuiApplication.java
  3. 265
      shuili-admin/src/main/java/com/kms/web/controller/system/CmsCallBackController.java
  4. 242
      shuili-admin/src/main/java/com/kms/web/controller/system/SysLoginController.java
  5. 11
      shuili-admin/src/main/java/com/kms/web/utils/CallBackRequest.java
  6. 19
      shuili-admin/src/main/java/com/kms/web/utils/CallType.java
  7. 154
      shuili-admin/src/main/java/com/kms/web/utils/SHACoder.java
  8. 291
      shuili-admin/src/main/java/com/kms/web/utils/WaterRequestUtil.java
  9. 27
      shuili-admin/src/main/java/com/kms/web/utils/WaterResult.java
  10. 215
      shuili-admin/src/main/java/com/kms/web/utils/scheduled/WaterScheduled.java
  11. 25
      shuili-admin/src/main/java/com/kms/web/utils/singleDomain/SingleMenu.java
  12. 387
      shuili-admin/src/main/java/com/kms/web/utils/singleDomain/SingleOrg.java
  13. 25
      shuili-admin/src/main/java/com/kms/web/utils/singleDomain/SingleRole.java
  14. 26
      shuili-admin/src/main/java/com/kms/web/utils/singleDomain/SingleUser.java
  15. 45
      shuili-admin/src/main/resources/application-test.yml
  16. 3
      shuili-admin/src/main/resources/application.yml
  17. 7
      shuili-framework/src/main/java/com/shuili/common/core/domain/entity/SysDept.java
  18. 11
      shuili-framework/src/main/java/com/shuili/common/core/domain/entity/SysRole.java
  19. 8
      shuili-framework/src/main/java/com/shuili/common/core/domain/entity/SysUser.java
  20. 10
      shuili-system/src/main/java/com/kms/system/service/SysUserService.java

10
shuili-admin/pom.xml

@ -27,6 +27,11 @@
<version>2.2.6</version> <version>2.2.6</version>
</dependency> </dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
</dependency>
<!--<dependency> <!--<dependency>
<groupId>org.springframework.kafka</groupId> <groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId> <artifactId>spring-kafka</artifactId>
@ -67,6 +72,11 @@
<artifactId>swagger-models</artifactId> <artifactId>swagger-models</artifactId>
<version>1.5.21</version> <version>1.5.21</version>
</dependency> </dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.65</version>
</dependency>
</dependencies> </dependencies>

2
shuili-admin/src/main/java/com/kms/TianhuiApplication.java

@ -7,6 +7,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.ComponentScan;
import org.springframework.scheduling.annotation.EnableScheduling;
/** /**
@ -14,6 +15,7 @@ import org.springframework.context.annotation.ComponentScan;
* *
* @author kms * @author kms
*/ */
@EnableScheduling
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class }) @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
@ComponentScan(basePackages = {"com.shuili.*","com.kms.*"}) @ComponentScan(basePackages = {"com.shuili.*","com.kms.*"})
@MapperScan(basePackages = {"com.shuili.*","com.kms.*"}) @MapperScan(basePackages = {"com.shuili.*","com.kms.*"})

265
shuili-admin/src/main/java/com/kms/web/controller/system/CmsCallBackController.java

@ -0,0 +1,265 @@
package com.kms.web.controller.system;
import cn.hutool.core.collection.CollectionUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.kms.system.domain.SysUserRole;
import com.kms.system.service.SysDeptService;
import com.kms.system.service.SysRoleService;
import com.kms.system.service.SysUserRoleService;
import com.kms.system.service.SysUserService;
import com.kms.web.utils.CallBackRequest;
import com.kms.web.utils.CallType;
import com.kms.web.utils.WaterResult;
import com.kms.web.utils.singleDomain.SingleOrg;
import com.kms.web.utils.singleDomain.SingleRole;
import com.kms.web.utils.singleDomain.SingleUser;
import com.shuili.common.core.domain.entity.SysDept;
import com.shuili.common.core.domain.entity.SysRole;
import com.shuili.common.core.domain.entity.SysUser;
import com.shuili.common.exception.CustomException;
import com.shuili.common.utils.password.PasswordUtil;
import com.shuili.common.utils.uuid.IdUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
@RequestMapping("/callBack")
@Controller
public class CmsCallBackController {
@Autowired
SysUserService userService;
@Autowired
SysDeptService deptService;
@Autowired
SysRoleService roleService;
@Autowired
SysUserRoleService userRoleService;
private static final Logger log = LoggerFactory.getLogger(CmsCallBackController.class);
@PostMapping("/notify")
public WaterResult callBack(@RequestBody CallBackRequest callBackRequest){
log.info("--------开启同步请求--------------,时间:{}",new Date());
log.info("发起同步请求的参数为:{}",callBackRequest);
String type = callBackRequest.getType();
String content = callBackRequest.getContent();
if(type.equals(CallType.USER_ADD)){
SingleUser singleUser = JSONObject.parseObject(content, SingleUser.class);
QueryWrapper<SysUser> query = Wrappers.query();
query.eq("single_user_id",singleUser.getId());
SysUser user = userService.getOne(query,false);
if(user!=null){
throw new CustomException("该用户已存在,无法添加");
}
user = new SysUser();
user.preInsert();
user.setCreateUid("1");
user.setUpdateUid("1");
user.setRemark("门户定时任务数据添加");
user.setId(IdUtils.fastSimpleUUID());
user.setIsPcUser("0");
user.setDelFlag("0");
user.setPhonenumber(singleUser.getPhone());
user.setNickName(singleUser.getName());
user.setUserName(singleUser.getUsername());
user.setSingleUserSource(singleUser.getSource());
user.setSingleUserType(singleUser.getType());
user.setSingleUserId(singleUser.getId());
user.setPassword(PasswordUtil.entryptPassword(singleUser.getUsername()));
user.setIsFirst(singleUser.getFirstSignIn().toString());
if(singleUser.getStatus()==null||singleUser.getStatus().equals("1")){
user.setStatus("0");
}else {
user.setStatus("1");
}
SingleOrg org = singleUser.getOrg();
if(org!=null){
user.setDeptId(org.getId());
String orgType = org.getType();
if(orgType.equals("GA")){ //政务
user.setUserType("00");
}else if(orgType.equals("SVA")){ //服务
user.setUserType("01");
}
}
if(CollectionUtil.isNotEmpty(singleUser.getRoleList())) {
List<String> collect = singleUser.getRoleList().stream().map(singleRole -> singleRole.getId()).collect(Collectors.toList());
user.setRoleIds(collect.toArray(new String[collect.size()]));
}
userService.singleInsertUser(user);
}else if(type.equals(CallType.USER_UPDATE)){
SingleUser singleUser = JSONObject.parseObject(content, SingleUser.class);
QueryWrapper<SysUser> query = Wrappers.query();
query.eq("single_user_id",singleUser.getId());
SysUser user = userService.getOne(query,false);
if(user==null){
throw new CustomException("该用户不存在,无法修改");
}
SingleOrg org = singleUser.getOrg();
if(org!=null){
user.setDeptId(org.getId());
String orgType = org.getType();
if(orgType.equals("GA")){ //政务
user.setUserType("00");
}else if(orgType.equals("SVA")){ //服务
user.setUserType("01");
}
}
user.setPhonenumber(singleUser.getPhone());
user.setNickName(singleUser.getName());
user.setUserName(singleUser.getUsername());
user.setSingleUserSource(singleUser.getSource());
user.setSingleUserType(singleUser.getType());
user.setSingleUserId(singleUser.getId());
user.setPassword(PasswordUtil.entryptPassword(singleUser.getUsername()));
user.setIsFirst(singleUser.getFirstSignIn().toString());
if(singleUser.getStatus()==null||singleUser.getStatus().equals("1")){
user.setStatus("0");
}else {
user.setStatus("1");
}
if(CollectionUtil.isNotEmpty(singleUser.getRoleList())) {
List<String> collect = singleUser.getRoleList().stream().map(singleRole -> singleRole.getId()).collect(Collectors.toList());
user.setRoleIds(collect.toArray(new String[collect.size()]));
}
userService.updateUser(user);
}else if(type.equals(CallType.USER_DELETE)){
SingleUser singleUser = JSONObject.parseObject(content, SingleUser.class);
QueryWrapper<SysUser> query = Wrappers.query();
query.eq("single_user_id",singleUser.getId());
SysUser one = userService.getOne(query, false);
if(one==null){
throw new CustomException("该用户不存在,无法删除");
}
userService.deleteUserById(one.getId());
}else if(type.equals(CallType.ORG_ADD)){
SingleOrg singleOrg = JSONObject.parseObject(content, SingleOrg.class);
SysDept dept = deptService.getById(singleOrg.getId());
if(dept==null) {
dept = new SysDept();
dept.setIsDownload("0");
dept.setIsComment("0");
dept.setDelFlag("0");
dept.setCreateTime(new Date());
BeanUtils.copyProperties(singleOrg,dept);
dept.setXzqhId(singleOrg.getArea());
dept.setXzqhName(singleOrg.getAreaText());
dept.setSingleCode(singleOrg.getCode());
dept.setSingleSeq(singleOrg.getSeq());
dept.setSingleType(singleOrg.getType());
dept.setDeptName(singleOrg.getName());
dept.setParentId(singleOrg.getParent());
dept.setLeader(singleOrg.getDutyPerson());
dept.setName(singleOrg.getName());
dept.setAdminName(singleOrg.getName());
dept.setUpdateTime(new Date());
if(singleOrg.getStatus()==null||singleOrg.getStatus().equals("1")){
dept.setStatus("0");
}else {
dept.setStatus("1");
}
deptService.save(dept);
}
}else if(type.equals(CallType.ORG_UPDATE)){
SingleOrg singleOrg = JSONObject.parseObject(content, SingleOrg.class);
SysDept dept = deptService.getById(singleOrg.getId());
if(dept!=null) {
BeanUtils.copyProperties(singleOrg, dept);
dept.setXzqhId(singleOrg.getArea());
dept.setXzqhName(singleOrg.getAreaText());
dept.setSingleCode(singleOrg.getCode());
dept.setSingleSeq(singleOrg.getSeq());
dept.setSingleType(singleOrg.getType());
dept.setDeptName(singleOrg.getName());
dept.setParentId(singleOrg.getParent());
dept.setLeader(singleOrg.getDutyPerson());
dept.setName(singleOrg.getName());
dept.setAdminName(singleOrg.getName());
dept.setUpdateTime(new Date());
if(singleOrg.getStatus()==null||singleOrg.getStatus().equals("1")){
dept.setStatus("0");
}else {
dept.setStatus("1");
}
deptService.updateById(dept);
}
}else if(type.equals(CallType.ROLE_ADD)){
log.info("执行消息:角色添加,参数为:"+content);
SingleRole singleRole = JSONObject.parseObject(content, SingleRole.class);
SysRole sysRole = roleService.getById(singleRole.getId());
if(sysRole==null){
sysRole = new SysRole();
sysRole.setStatus("0");
if(sysRole.getStatus()==null||sysRole.getStatus()=="0"){
sysRole.setStatus("1");
}
sysRole.setDelFlag("0");
sysRole.setRoleSort("0");
sysRole.setCreateTime(new Date());
BeanUtils.copyProperties(singleRole,sysRole);
sysRole.setRoleName(singleRole.getName());
sysRole.setRoleKey(singleRole.getCode());
sysRole.setUpdateTime(new Date());
roleService.save(sysRole);
}
}else if(type.equals(CallType.ROLE_UPDATE)){
SingleRole singleRole = JSONObject.parseObject(content, SingleRole.class);
SysRole sysRole = roleService.getById(singleRole.getId());
if(sysRole!=null){
if(sysRole.getStatus()==null||sysRole.getStatus()=="0"){
sysRole.setStatus("1");
}else{
sysRole.setStatus("0");
}
BeanUtils.copyProperties(singleRole,sysRole);
sysRole.setRoleName(singleRole.getName());
sysRole.setRoleKey(singleRole.getCode());
sysRole.setUpdateTime(new Date());
roleService.updateById(sysRole);
}
}else if(type.equals(CallType.ROLE_DELETE)){
SingleRole singleRole = JSONObject.parseObject(content, SingleRole.class);
roleService.deleteRoleById(singleRole.getId());
}else if(type.equals(CallType.ROLE_USER_BIND)){ //绑定
JSONObject jsonObject = JSONObject.parseObject(content);
String roleId = jsonObject.getString("roleId");
JSONArray userIds = jsonObject.getJSONArray("userIds");
List<String> list = userIds.toJavaList(String.class);
for (String id : list) {
SysUserRole sysUserRole = new SysUserRole();
sysUserRole.preInsert();
sysUserRole.setUserId(id);
sysUserRole.setRoleId(roleId);
userRoleService.save(sysUserRole);
}
}else if(type.equals(CallType.ROLE_USER_UNBIND)) { //解绑
JSONObject jsonObject = JSONObject.parseObject(content);
String roleId = jsonObject.getString("roleId");
JSONArray userIds = jsonObject.getJSONArray("userIds");
List<String> list = userIds.toJavaList(String.class);
QueryWrapper<SysUserRole> query = Wrappers.query();
query.eq("role_id",roleId).in("user_id",list);
userRoleService.remove(query);
}
log.info("--------同步请求结束--------------,时间:{}",new Date());
return WaterResult.success();
}
}

242
shuili-admin/src/main/java/com/kms/web/controller/system/SysLoginController.java

@ -2,16 +2,28 @@ package com.kms.web.controller.system;
import cn.dev33.satoken.stp.StpUtil; import cn.dev33.satoken.stp.StpUtil;
import cn.hutool.core.collection.CollectionUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.kms.system.domain.SysRoleMenu;
import com.kms.system.service.SysRoleMenuService;
import com.kms.system.service.SysRoleService;
import com.kms.web.utils.WaterRequestUtil;
import com.kms.web.utils.WaterResult;
import com.kms.web.utils.singleDomain.SingleMenu;
import com.shuili.common.constant.Constants; import com.shuili.common.constant.Constants;
import com.shuili.common.constant.YesOrNo; import com.shuili.common.constant.YesOrNo;
import com.shuili.common.core.controller.BaseController; import com.shuili.common.core.controller.BaseController;
import com.shuili.common.core.domain.AjaxResult; import com.shuili.common.core.domain.AjaxResult;
import com.shuili.common.core.domain.entity.SysMenu; import com.shuili.common.core.domain.entity.SysMenu;
import com.shuili.common.core.domain.entity.SysRole;
import com.shuili.common.core.domain.entity.SysUser; import com.shuili.common.core.domain.entity.SysUser;
import com.shuili.common.core.domain.model.LoginBody; import com.shuili.common.core.domain.model.LoginBody;
import com.shuili.common.core.redis.RedisCache; import com.shuili.common.core.redis.RedisCache;
import com.shuili.common.enums.UserStatus; import com.shuili.common.enums.UserStatus;
import com.shuili.common.exception.BaseException; import com.shuili.common.exception.BaseException;
import com.shuili.common.exception.CustomException;
import com.shuili.common.mybaitsplus.BeanToWrapper; import com.shuili.common.mybaitsplus.BeanToWrapper;
import com.shuili.common.utils.StringUtils; import com.shuili.common.utils.StringUtils;
import com.shuili.common.utils.password.PasswordUtil; import com.shuili.common.utils.password.PasswordUtil;
@ -25,13 +37,22 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.view.RedirectView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.stream.Collectors;
/** /**
* 登录验证 * 登录验证
@ -52,6 +73,10 @@ public class SysLoginController extends BaseController {
private SysUserService userService; private SysUserService userService;
@Autowired @Autowired
private RedisCache redisCache; private RedisCache redisCache;
@Autowired
WaterRequestUtil waterRequestUtil;
@Value("${water.redirect}")
private String redirect;
@PostMapping("/login") @PostMapping("/login")
@ApiOperation("登录接口") @ApiOperation("登录接口")
@ -144,4 +169,213 @@ public class SysLoginController extends BaseController {
return AjaxResult.success(menuService.buildMenus(menus)); return AjaxResult.success(menuService.buildMenus(menus));
} }
/**
* 门户单点认证登录
* @return
*/
@GetMapping("/signOnLogin")
public ModelAndView signOnLogin(HttpServletRequest request,
HttpServletResponse response,
@RequestParam(name = "page",required = false) String page,
@RequestParam(name = "token")String token) throws IOException {
WaterResult waterResult;
CountDownLatch countDownLatch = new CountDownLatch(1);
try {
waterResult = waterRequestUtil.authUser(token);
}catch (Exception e){
log.error(e.getMessage());
throw new CustomException("登录失败");
}
//异步执行菜单同步
executorService.submit(new RolePerms(token,waterResult,countDownLatch));
JSONObject jsonObject = JSONObject.parseObject(waterResult.getData());
String user = jsonObject.getString("user");
JSONObject userJsonObject = JSONObject.parseObject(user);
String uid = userJsonObject.getString("id");
QueryWrapper<SysUser> query = Wrappers.query();
query.eq("single_user_id",uid);
List<SysUser> list = userService.list(query);
if(CollectionUtil.isEmpty(list)){
throw new CustomException("数据异常,登录失败");
}
AjaxResult ajax = AjaxResult.success();
SysUser sysUser = list.get(0);
if (UserStatus.DELETED.getCode().equals(sysUser.getDelFlag())) {
log.info(" :{} 已被删除.", sysUser.getUserName());
AsyncManager.me().execute(AsyncFactory.recordLogininfor(sysUser.getUserName(), Constants.LOGIN_FAIL, "账户已删除"));
throw new BaseException("对不起,您的账号:" + sysUser.getUserName() + " 已被删除");
} else if (UserStatus.DISABLE.getCode().equals(sysUser.getStatus())) {
log.info("登录用户:{} 已被停用.", sysUser.getUserName());
AsyncManager.me().execute(AsyncFactory.recordLogininfor(sysUser.getUserName(), Constants.LOGIN_FAIL, "账户已停用"));
throw new BaseException("对不起,您的账号:" + sysUser.getUserName() + " 已停用");
}
AsyncManager.me().execute(AsyncFactory.recordLogininfor(sysUser.getUserName(), Constants.LOGIN_SUCCESS, "登录成功"));
StpUtil.login(sysUser.getId());
StpUtil.getSession().set("jianwei-user",sysUser);
String tokenValue = StpUtil.getTokenValue();
userService.updateWithReids(sysUser);
ajax.put("token",tokenValue);
ajax.put("authorization",token);
try {
countDownLatch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
// if(StringUtils.isEmpty(page)){
// List<SysMenu> menus = menuService.selectMenuTreeByUserId(sysUser.getId());
// List<RouterVo> routerVos = menuService.buildMenus(menus);
// StringBuffer stringBuffer = new StringBuffer();
// for (RouterVo routerVo : routerVos) {
// stringBuffer.append("/"+routerVo.getPath());
// List<RouterVo> children = routerVo.getChildren();
// if(CollectionUtil.isEmpty(children)){
// continue;
// }else {
// RouterVo vo = children.get(0);
// List<RouterVo> childrenTwo = vo.getChildren();
// if(CollectionUtil.isEmpty(childrenTwo)){
//
// }
// }
// }
// }
RedirectView redirectView = new RedirectView(redirect+"?token="+tokenValue+"&page="+page);
ModelAndView modelAndView = new ModelAndView(redirectView);
return modelAndView;
}
@Autowired
SysRoleService sysRoleService;
@Autowired
SysRoleMenuService sysRoleMenuService;
@Autowired
SysMenuService sysMenuService;
ExecutorService executorService = Executors.newFixedThreadPool(5);
/**
* 根据用户token获取资源权限
* @param
* @return
*/
// @GetMapping("/getSingleRotes/{token}")
// public AjaxResult getSingleRotes(@PathVariable String token){
// WaterResult waterResult = waterRequestUtil.authUser(token);
// String data = waterResult.getData();
// JSONObject jsonObject = JSONObject.parseObject(data);
// List<String> functionPerms = jsonObject.getJSONArray("functionPerms").toJavaList(String.class);
// List<String> roles = jsonObject.getJSONArray("roles").toJavaList(String.class);
// QueryWrapper<SysRole> query = Wrappers.query();
// query.in("role_key",roles);
// List<SysRole> roleList = sysRoleService.list(query);
// QueryWrapper<SysMenu> menuQueryWrapper = Wrappers.query();
// menuQueryWrapper.in("perms",functionPerms);
// List<SysMenu> menus = sysMenuService.list(menuQueryWrapper);
//
// return AjaxResult.success(menuService.buildMenus(menus));
// }
class RolePerms implements Runnable{
public String token;
public WaterResult waterResult;
public CountDownLatch countDownLatch;
public RolePerms(String token,WaterResult waterResult,CountDownLatch countDownLatch){
this.token = token;
this.waterResult = waterResult;
this.countDownLatch = countDownLatch;
}
@Override
@Transactional
public void run() {
try {
WaterResult result = waterRequestUtil.getUserResource(token);
List<SingleMenu> singleMenus = JSONObject.parseArray(result.getData(), SingleMenu.class);
List<SingleMenu> singleAllMenus = new ArrayList<>();
setChildren(singleMenus,singleAllMenus);
String data = waterResult.getData();
JSONObject datajson = JSONObject.parseObject(data);
List<String> functionPerms = datajson.getJSONArray("functionPerms").toJavaList(String.class);
List<String> collect = singleAllMenus.stream().map(singleMenu -> singleMenu.getPermissionCode()).collect(Collectors.toList());
collect.addAll(functionPerms);
QueryWrapper<SysMenu> menuQueryWrapper = Wrappers.query();
menuQueryWrapper.in("perms",collect);
List<SysMenu> menus = sysMenuService.list(menuQueryWrapper);
List<String> menuids = menus.stream().map(menu -> {
return menu.getId();
}).collect(Collectors.toList());
// WaterResult waterResult = waterRequestUtil.authUser(token);
List<String> roles = datajson.getJSONArray("roles").toJavaList(String.class);
log.info("获取的权限有:"+roles);
if(CollectionUtil.isNotEmpty(roles)) {
QueryWrapper<SysRole> sysRoleQueryWrapper = Wrappers.query();
sysRoleQueryWrapper.in("role_key", roles);
List<SysRole> roleList = sysRoleService.list(sysRoleQueryWrapper);
if (CollectionUtil.isNotEmpty(roleList)) {
List<String> rids = roleList.stream().map(role -> role.getId()).collect(Collectors.toList());
for (SysRole sysRole : roleList) {
QueryWrapper<SysRoleMenu> sysRoleMenuQueryWrapper = Wrappers.query();
if (CollectionUtil.isNotEmpty(rids)) {
sysRoleMenuQueryWrapper.eq("role_id", sysRole.getId());
List<SysRoleMenu> list = sysRoleMenuService.list(sysRoleMenuQueryWrapper);
List<String> menutwoids = list.stream().map(menu -> {
return menu.getMenuId();
}).collect(Collectors.toList());
List<String> disjunction = (List<String>) CollectionUtil.disjunction(menuids, menutwoids);
menuids.removeAll(menutwoids);
if(CollectionUtil.isNotEmpty(disjunction)) { //存在不存在的按钮 进行删除
sysRoleMenuQueryWrapper.in("menu_id", disjunction);
sysRoleMenuService.remove(sysRoleMenuQueryWrapper);
}
}
for (String menu : menuids) {
SysRoleMenu sysRoleMenu = new SysRoleMenu();
sysRoleMenu.preInsert();
sysRoleMenu.setRoleId(sysRole.getId());
sysRoleMenu.setMenuId(menu);
sysRoleMenuService.save(sysRoleMenu);
}
}
}
}
}catch (Exception e){
log.error("同步菜单权限失败:"+e.getMessage());
throw e;
}finally {
countDownLatch.countDown();
}
}
}
public static void setChildren(List<SingleMenu> singleMenus,List<SingleMenu> singleAllMenus){
if(CollectionUtil.isNotEmpty(singleMenus)) {
for (SingleMenu singleMenu :
singleMenus) { //剔除掉不符合的
if(singleMenu.getVisible()!=null&&singleMenu.getStatus()!=null) {
if (singleMenu.getStatus().equals("1")) {
singleAllMenus.add(singleMenu);
}
}
if (CollectionUtil.isNotEmpty(singleMenu.getChildren())) {
List<SingleMenu> children = singleMenu.getChildren();
for (SingleMenu child : children) {
if(singleMenu.getVisible()!=null&&singleMenu.getStatus()!=null) {
if (singleMenu.getStatus().equals("1")) {
singleAllMenus.add(child);
}
}
if(CollectionUtil.isNotEmpty(child.getChildren())) {
setChildren(child.getChildren(),singleAllMenus);
}
}
}
}
}
}
} }

11
shuili-admin/src/main/java/com/kms/web/utils/CallBackRequest.java

@ -0,0 +1,11 @@
package com.kms.web.utils;
import lombok.Data;
@Data
public class CallBackRequest {
private String type;
private String content;
}

19
shuili-admin/src/main/java/com/kms/web/utils/CallType.java

@ -0,0 +1,19 @@
package com.kms.web.utils;
import lombok.Data;
@Data
public class CallType {
public final static String USER_ADD = "USER_ADD";
public final static String USER_UPDATE = "USER_UPDATE";
public static String USER_DELETE = "USER_DELETE";
public static String ORG_UPDATE = "ORG_UPDATE";
public static String ORG_ADD = "ORG_ADD";
public static String ROLE_ADD = "ROLE_ADD";
public static String ROLE_UPDATE = "ROLE_UPDATE";
public static String ROLE_DELETE = "ROLE_DELETE";
public static String ROLE_USER_BIND = "ROLE_USER_BIND";//用户角色关系绑定
public static String ROLE_USER_UNBIND = "ROLE_USER_UNBIND";//用户角色关系解绑
}

154
shuili-admin/src/main/java/com/kms/web/utils/SHACoder.java

@ -0,0 +1,154 @@
package com.kms.web.utils;
import org.apache.commons.codec.digest.DigestUtils;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.util.encoders.Hex;
import java.security.MessageDigest;
import java.security.Security;
public abstract class SHACoder {
/**
* SHA加密
*
* @param data 待加密数据
* @return byte[] 消息摘要
* @throws Exception
*/
public static byte[] encodeSHA(String data) throws Exception {
// 执行消息摘要
return DigestUtils.sha(data);
}
/**
* SHAHex加密
*
* @param data 待加密数据
* @return String 消息摘要
* @throws Exception
*/
public static String encodeSHAHex(String data) throws Exception {
// 执行消息摘要
return DigestUtils.shaHex(data);
}
/**
* SHA-224加密
*
* @param data
* 待加密数据
* @return byte[] 消息摘要
*
* @throws Exception
*/
public static byte[] encodeSHA224(byte[] data) throws Exception {
// 加入BouncyCastleProvider支持
Security.addProvider(new BouncyCastleProvider());
// 初始化MessageDigest
MessageDigest md = MessageDigest.getInstance("SHA-224");
// 执行消息摘要
return md.digest(data);
}
/**
* SHA-224加密
*
* @param data
* 待加密数据
* @return byte[] 消息摘要
* @throws Exception
*/
public static String encodeSHA224Hex(byte[] data) throws Exception {
// 执行消息摘要
byte[] b = encodeSHA224(data);
// 做十六进制编码处理
return new String(Hex.encode(b));
}
/**
* SHA256加密
*
* @param data 待加密数据
* @return byte[] 消息摘要
* @throws Exception
*/
public static byte[] encodeSHA256(String data) throws Exception {
// 执行消息摘要
return DigestUtils.sha256(data);
}
/**
* SHA256Hex加密
*
* @param data 待加密数据
* @return String 消息摘要
* @throws Exception
*/
public static String encodeSHA256Hex(String data) throws Exception {
// 执行消息摘要
return DigestUtils.sha256Hex(data);
}
/**
* SHA384加密
*
* @param data 待加密数据
* @return byte[] 消息摘要
* @throws Exception
*/
public static byte[] encodeSHA384(String data) throws Exception {
// 执行消息摘要
return DigestUtils.sha384(data);
}
/**
* SHA384Hex加密
*
* @param data 待加密数据
* @return String 消息摘要
* @throws Exception
*/
public static String encodeSHA384Hex(String data) throws Exception {
// 执行消息摘要
return DigestUtils.sha384Hex(data);
}
/**
* SHA512Hex加密
*
* @param data 待加密数据
* @return byte[] 消息摘要
* @throws Exception
*/
public static byte[] encodeSHA512(String data) throws Exception {
// 执行消息摘要
return DigestUtils.sha512(data);
}
/**
* SHA512Hex加密
*
* @param data 待加密数据
* @return String 消息摘要
* @throws Exception
*/
public static String encodeSHA512Hex(String data) throws Exception {
// 执行消息摘要
return DigestUtils.sha512Hex(data);
}
}

291
shuili-admin/src/main/java/com/kms/web/utils/WaterRequestUtil.java

@ -0,0 +1,291 @@
package com.kms.web.utils;
import cn.hutool.core.util.IdUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import com.alibaba.fastjson.JSONObject;
import com.shuili.common.exception.CustomException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.HashMap;
@Component
public class WaterRequestUtil {
private static final Logger log = LoggerFactory.getLogger(WaterRequestUtil.class);
@Value("${water.paasToken}")
public String paasToken;
@Value("${water.paasId}")
public String paasId;
//网关
@Value("${water.url}")
public String url;
//单点登录id
@Value("${water.singOnServiceId}")
public String singOnServiceId;
//单点登录密钥
@Value("${water.singOnAppsecret}")
public String singOnAppsecret;
@Value("${water.singOnUrl}")
public String singOnUrl;
//验证用户登录
@Value("${water.userUrl}")
public String userUrl;
@Value("${water.authUserServiceId}")
public String authUserServiceId;
@Value("${water.authUserAppsecret}")
public String authUserAppsecret;
@Value("${water.systemCode}")
public String systemCode;
@Value("${water.systemName}")
public String systemName;
//获取部门信息
@Value("${water.orgUrl}")
public String orgUrl;
@Value("${water.orgServiceId}")
public String orgServiceId;
@Value("${water.orgAppsecret}")
public String orgAppsecret;
//业务角色
@Value("${water.roleUrl}")
public String roleUrl;
@Value("${water.roleServiceId}")
public String roleServiceId;
@Value("${water.roleAppsecret}")
public String roleAppsecret;
@Value("${water.systemUrl}")
public String systemUrl;
@Value("${water.systemServiceId}")
public String systemServiceId;
@Value("${water.systemAppsecret}")
public String systemAppsecret;
@Value("${water.usersUrl}")
public String usersUrl;
@Value("${water.usersServiceId}")
public String usersServiceId;
@Value("${water.usersAppsecret}")
public String usersAppsecret;
@Value("${water.resourceUrl}")
public String resourceUrl;
@Value("${water.resourceServiceId}")
public String resourceServiceId;
@Value("${water.resourceAppsecret}")
public String resourceAppsecret;
/**
* 设置
* @param httpRequest
* @param serviceId
* @param appsecret
*/
private void setHead(HttpRequest httpRequest,String serviceId,String appsecret){
String timestamp = String.valueOf(new Date().getTime());
String nonce = IdUtil.fastSimpleUUID();
String signature = timestamp + paasToken + nonce + timestamp;
try {
signature = SHACoder.encodeSHA256Hex(signature).toUpperCase();
} catch (Exception e) {
e.printStackTrace();
}
httpRequest
.header("x-tsp-paasid",paasId)
.header("x-tsp-signature",signature)
.header("x-tsp-timestamp",timestamp)
.header("x-tsp-nonce", nonce)
.header("x-tsp-serviceid",serviceId)
.header("x-tsp-appsecret",appsecret);
}
public HttpRequest createGet(String url,String serviceId,String appsecret){
HttpRequest httpRequest = HttpRequest.get(url);
setHead(httpRequest,serviceId,appsecret);
return httpRequest;
}
public HttpRequest createPost(String url,String serviceId,String appsecret){
HttpRequest httpRequest = HttpRequest.post(url);
setHead(httpRequest,serviceId,appsecret);
return httpRequest;
}
/**
* 业务系统
* @return
*/
public WaterResult systemPage(){
log.info("查询业务系统-----------------");
HttpRequest post = createPost(systemUrl, systemServiceId, systemAppsecret);
HashMap<String, String> query = new HashMap<>();
query.put("code",systemCode);
query.put("name",systemName);
HttpResponse response = post.body(JSONObject.toJSONString(query))
.execute();
String body = response.body();
WaterResult waterResult = JSONObject.parseObject(body, WaterResult.class);
isSuccess(waterResult);
//{
// "msg": "操作成功",
// "code": 200,
// "data": {
// "code": 200,
// "message": "成功",
// "success": true,
// "data": "[{\"contractor\":\"数字广东网络建设有限公司\",\"code\":\"sgc-jg\",\"buildingLinkman\":\"张三\",\"contractorId\":\"1647768587123822593\",\"displayMobileFlag\":\"2\",\"manageUrl\":\"http://19.25.74.73:8001/\",\"type\":\"2\",\"building\":\"广东省水利厅\",\"developerId\":\"1732646766216482817\",\"developerPhone\":\"13333333333\",\"contractorPhone\":\"17324499124\",\"levelText\":\"省级\",\"buildingPhone\":\"13333333333\",\"id\":\"1732648267643097090\",\"manageImg\":\"{}\",\"area\":\"440000\",\"level\":\"1\",\"displayFlag\":\"1\",\"buildingId\":\"202206101718001\",\"createTime\":\"2023-12-07 06:28:33\",\"developerLinkman\":\"张三\",\"name\":\"水工程应用-水利工程建设管理模块\",\"publicUrl\":\"http://10.169.133.130:8001\",\"developer\":\"中通服建设有限公司\",\"contractorLinkman\":\"徐勇\",\"status\":\"1\"}]",
// "timestamp": "1710140017747"
// }
//}
return waterResult;
}
// public static void main(String[] args) {
// HttpRequest post = createPost("http://19.25.35.204:31190/data_center/gateway/api/usrc/open-api/system/list", "DGSP_1606199297580052481", "b26a1c7b95744369c00f65b7a0790b6");
// HashMap<String, String> query = new HashMap<>();
// query.put("code","sgc-jg");
// query.put("name","水工程应用-水利工程建设管理模块");
// HttpResponse response = post.body(JSONObject.toJSONString(query))
// .execute();
// String body = response.body();
// WaterResult waterResult = JSONObject.parseObject(body, WaterResult.class);
//
// }
/**
* 单点登录
* @return
*/
public WaterResult signOn(String userId){
HttpRequest get = createGet(userUrl,singOnServiceId,singOnAppsecret);
HttpResponse response = get.header("x-tsp-target", paasId)
.header("x-tsp-uid-type", "id")
.header("x-tsp-uid", userId)
.execute();
String body = response.body();
return JSONObject.parseObject(body, WaterResult.class);
}
/**
* 验证用户登录
* @param authorization
* @return
*/
public WaterResult authUser(String authorization){
log.info("--------请求统一门户用户验证,请求地址为:"+userUrl);
HttpRequest get = createGet(userUrl,authUserServiceId,authUserAppsecret);
HttpResponse response = get.header("Authorization", authorization)
.execute();
String body = response.body();
WaterResult waterResult = JSONObject.parseObject(body, WaterResult.class);
isSuccess(waterResult);
return waterResult;
}
public WaterResult getOrgPage(){
log.info("--------请求获取门户组织信息,请求地址为:"+orgUrl);
HashMap<String, Object> hashMap = new HashMap<>();
hashMap.put("page",1);
hashMap.put("size",100);
hashMap.put("systemCode",systemCode);
HttpRequest get = createPost(orgUrl,orgServiceId,orgAppsecret);
HttpResponse response = get.body(JSONObject.toJSONString(hashMap))
.execute();
String body = response.body();
WaterResult waterResult = JSONObject.parseObject(body, WaterResult.class);
isSuccess(waterResult);
//{
// "msg": "操作成功",
// "code": 200,
// "data": {
// "code": 200,
// "message": "成功",
// "success": true,
// "data": "{\"total\":4,\"size\":100,\"records\":[{\"parent\":\"202206101718001\",\"source\":\"tif\",\"type\":\"GA\",\"levelText\":\"省级\",\"id\":\"1646339896680984578\",\"area\":\"440000\",\"level\":\"1\",\"sourceText\":\"统一身份认证\",\"categoryText\":\"单位\",\"name\":\"水文局\",\"treeCode\":\"00030-00016\",\"status\":\"1\",\"code\":\"SJ0013\",\"orgId\":\"1646339896680984578\",\"tifld\":\"1232236\",\"seq\":18,\"areaText\":\"广东省\",\"updateTime\":\"2024-02-28 02:45:24\",\"createTime\":\"2023-04-13 02:29:54\",\"statusText\":\"启用\",\"category\":\"1\",\"crossParent\":\"\"},{\"parent\":\"0\",\"type\":\"FIRM\",\"levelText\":\"省级\",\"id\":\"1732646766216482817\",\"area\":\"440000\",\"level\":\"1\",\"categoryText\":\"单位\",\"name\":\"中通服建设有限公司\",\"treeCode\":\"00028\",\"status\":\"1\",\"code\":\"914400001903268010\",\"orgId\":\"1732646766216482817\",\"seq\":84,\"areaText\":\"广东省\",\"updateTime\":\"2023-12-11 18:05:29\",\"createTime\":\"2023-12-07 06:22:35\",\"statusText\":\"启用\",\"category\":\"1\"},{\"parent\":\"0\",\"natureText\":\"\",\"source\":\"input\",\"type\":\"GA\",\"levelText\":\"省级\",\"id\":\"202206101718001\",\"area\":\"440000\",\"level\":\"1\",\"sourceText\":\"手动创建\",\"categoryText\":\"单位\",\"name\":\"广东省水利厅\",\"treeCode\":\"00030\",\"status\":\"1\",\"code\":\"006941135\",\"abbrName\":\"水利厅\",\"uscc\":\"114400000069411352\",\"orgId\":\"202206101718001\",\"tifld\":\"114400000069411352\",\"seq\":67,\"nature\":\"1\",\"areaText\":\"广东省\",\"updateTime\":\"2024-02-28 02:45:24\",\"createTime\":\"2022-12-14 10:02:37\",\"statusText\":\"启用\",\"category\":\"1\",\"remarks\":\"默认机构,不可删除\"},{\"parent\":\"202206101718001\",\"source\":\"tif\",\"type\":\"GA\",\"deptTags\":\"noEntity\",\"levelText\":\"省级\",\"id\":\"1646339701234806785\",\"area\":\"440000\",\"level\":\"1\",\"sourceText\":\"统一身份认证\",\"categoryText\":\"部门\",\"name\":\"建设处\",\"treeCode\":\"00030-00044\",\"status\":\"1\",\"code\":\"SJ0001-024\",\"orgId\":\"1646339701234806785\",\"seq\":114,\"areaText\":\"广东省\",\"updateTime\":\"2024-01-08 18:47:31\",\"deptTagsText\":\"\",\"createTime\":\"2023-04-13 02:29:07\",\"statusText\":\"启用\",\"category\":\"2\",\"crossParent\":\"\"}],\"page\":1}",
// "timestamp": "1710140677104"
// }
//}
return waterResult;
}
public WaterResult getUserResource(String authorization){
log.info("--------请求获取门户角色信息,请求地址为:"+resourceUrl);
HashMap<String, Object> hashMap = new HashMap<>();
hashMap.put("systemCode",systemCode);
HttpRequest get = createPost(resourceUrl+"?systemCode="+systemCode,resourceServiceId,resourceAppsecret);
// HttpRequest get = createPost(resourceUrl,resourceServiceId,resourceAppsecret);
get.header("Authorization",authorization);
HttpResponse response = get
.execute();
String body = response.body();
WaterResult waterResult = JSONObject.parseObject(body, WaterResult.class);
isSuccess(waterResult);
//{\"total\":1,\"size\":100,\"records\":[{\"area\":\"440000\",\"systemList\":[{\"area\":\"440000\",\"code\":\"sgc-jg\",\"name\":\"水工程应用-水利工程建设管理模块\",\"id\":\"1732648267643097090\"}],\"code\":\"YW00013\",\"level\":\"1d\",\"dataConfig\":\"none\",\"type\":\"BUSINESS\",\"posts\":[],\"users\":[{\"id\":\"20231225000006\"},{\"id\":\"20240119000002\"}],\"name\":\"水利工程应用-水利工程建设管理模块角色\",\"id\":\"20231213000001\",\"category\":\"BUSINESS\",\"businesses\":[{\"parent\":\"1762458920822599682\",\"businessCode\":\"YWSLGCJSGL0008\",\"parentName\":\"水利工程建设管理\",\"businessName\":\"水利工程建设管理\",\"description\":\"\",\"id\":\"1705128209926942721\",\"delFlag\":0}],\"status\":\"1\"}],\"page\":1}
return waterResult;
}
public WaterResult getRolePage(){
log.info("--------请求获取门户角色信息,请求地址为:"+roleUrl);
HashMap<String, Object> hashMap = new HashMap<>();
hashMap.put("page",1);
hashMap.put("size",100);
hashMap.put("systemCode",systemCode);
HttpRequest get = createPost(roleUrl,roleServiceId,roleAppsecret);
HttpResponse response = get.body(JSONObject.toJSONString(hashMap))
.execute();
String body = response.body();
WaterResult waterResult = JSONObject.parseObject(body, WaterResult.class);
isSuccess(waterResult);
//{\"total\":1,\"size\":100,\"records\":[{\"area\":\"440000\",\"systemList\":[{\"area\":\"440000\",\"code\":\"sgc-jg\",\"name\":\"水工程应用-水利工程建设管理模块\",\"id\":\"1732648267643097090\"}],\"code\":\"YW00013\",\"level\":\"1d\",\"dataConfig\":\"none\",\"type\":\"BUSINESS\",\"posts\":[],\"users\":[{\"id\":\"20231225000006\"},{\"id\":\"20240119000002\"}],\"name\":\"水利工程应用-水利工程建设管理模块角色\",\"id\":\"20231213000001\",\"category\":\"BUSINESS\",\"businesses\":[{\"parent\":\"1762458920822599682\",\"businessCode\":\"YWSLGCJSGL0008\",\"parentName\":\"水利工程建设管理\",\"businessName\":\"水利工程建设管理\",\"description\":\"\",\"id\":\"1705128209926942721\",\"delFlag\":0}],\"status\":\"1\"}],\"page\":1}
return waterResult;
}
public WaterResult usersPage(){
log.info("--------请求获取门户用户信息,请求地址为:"+usersUrl);
HashMap<String, Object> hashMap = new HashMap<>();
hashMap.put("page",1);
hashMap.put("size",100);
hashMap.put("systemCode",systemCode);
HttpRequest get = createPost(usersUrl,usersServiceId,usersAppsecret);
HttpResponse response = get.body(JSONObject.toJSONString(hashMap))
.execute();
String body = response.body();
WaterResult waterResult = JSONObject.parseObject(body, WaterResult.class);
isSuccess(waterResult);
return waterResult;
}
private void isSuccess(WaterResult waterResult){
if(waterResult==null){
throw new CustomException("请求异常");
}
if(waterResult.getCode()!=200||!waterResult.getSuccess()){
throw new CustomException("请求失败,原因:"+waterResult.getMessage());
}
}
}

27
shuili-admin/src/main/java/com/kms/web/utils/WaterResult.java

@ -0,0 +1,27 @@
package com.kms.web.utils;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class WaterResult {
private int code;
private String message;
private Boolean success;
private String data;
private String timestamp;
public static WaterResult success(){
WaterResult waterResult = new WaterResult();
waterResult.setCode(200);
waterResult.setSuccess(true);
waterResult.setTimestamp(String.valueOf(System.currentTimeMillis()));
waterResult.setMessage("发布成功");
return waterResult;
}
}

215
shuili-admin/src/main/java/com/kms/web/utils/scheduled/WaterScheduled.java

@ -0,0 +1,215 @@
package com.kms.web.utils.scheduled;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.kms.system.service.SysDeptService;
import com.kms.system.service.SysRoleService;
import com.kms.system.service.SysUserService;
import com.kms.web.controller.system.SysRoleController;
import com.kms.web.utils.WaterRequestUtil;
import com.kms.web.utils.WaterResult;
import com.kms.web.utils.singleDomain.SingleOrg;
import com.kms.web.utils.singleDomain.SingleRole;
import com.kms.web.utils.singleDomain.SingleUser;
import com.shuili.common.constant.UserConstants;
import com.shuili.common.core.domain.entity.SysDept;
import com.shuili.common.core.domain.entity.SysRole;
import com.shuili.common.core.domain.entity.SysUser;
import com.shuili.common.utils.password.MD5Util;
import com.shuili.common.utils.password.PasswordUtil;
import com.shuili.common.utils.uuid.IdUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.Scheduled;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
@Configuration
public class WaterScheduled {
private static final Logger log = LoggerFactory.getLogger(WaterScheduled.class);
@Autowired
WaterRequestUtil waterRequestUtil;
@Autowired
SysUserService userService;
@Autowired
SysDeptService deptService;
@Autowired
SysRoleController roleController;
@Autowired
SysRoleService roleService;
// @Scheduled(cron = "0 * * * * ?")
@Scheduled(cron = "0 0/10 * * * ? ")
public void userScheduled(){
log.info("----------------------开始执行用户同步功能----------------------------");
WaterResult waterResult = waterRequestUtil.usersPage();
String data = waterResult.getData();
String records = JSONObject.parseObject(data).getString("records");
List<SingleUser> singleUserList = JSONObject.parseArray(records, SingleUser.class);
for (SingleUser singleUser : singleUserList) {
String id = singleUser.getId();
QueryWrapper<SysUser> query = Wrappers.query();
query.eq("single_user_id",id);
SysUser user = userService.getOne(query,false);
Boolean flag = (user==null);
if(flag){
user = new SysUser();
user.preInsert();
user.setCreateUid("1");
user.setUpdateUid("1");
user.setRemark("门户定时任务数据添加");
user.setId(IdUtils.fastSimpleUUID());
user.setIsPcUser("0");
user.setDelFlag("0");
// user.setUserType("00");
user.setMd5(MD5Util.MD5Encode(singleUser.toString(), "utf-8"));
}else {
String md = MD5Util.MD5Encode(singleUser.toString(), "utf-8");
if(user.getMd5()!=null&&md.equals(user.getMd5())){
continue;
}
}
SingleOrg org = singleUser.getOrg();
if(org!=null){
user.setDeptId(org.getId());
user.setDeptId(org.getId());
String orgType = org.getType();
if(orgType.equals("GA")){ //政务
user.setUserType("00");
}else if(orgType.equals("SVA")){ //服务
user.setUserType("01");
}
}
user.setPhonenumber(singleUser.getPhone());
user.setNickName(singleUser.getName());
user.setUserName(singleUser.getUsername());
user.setSingleUserSource(singleUser.getSource());
user.setSingleUserType(singleUser.getType());
user.setSingleUserId(singleUser.getId());
user.setPassword(PasswordUtil.entryptPassword(singleUser.getUsername()));
user.setIsFirst(singleUser.getFirstSignIn().toString());
if(singleUser.getStatus()==null||singleUser.getStatus().equals("1")){
user.setStatus("0");
}else {
user.setStatus("1");
}
List<String> collect = singleUser.getRoleList().stream().map(singleRole -> singleRole.getId()).collect(Collectors.toList());
user.setRoleIds(collect.toArray(new String[collect.size()]));
if(flag){
userService.singleInsertUser(user);
}else {
userService.updateUser(user);
}
}
}
/**
*
*/
@Scheduled(cron = "0 0/10 * * * ? ")
public void orgScheduled(){
log.info("----------------------开始执行部门同步功能----------------------------");
WaterResult waterResult = waterRequestUtil.getOrgPage();
String data = waterResult.getData();
String records = JSONObject.parseObject(data).getString("records");
List<SingleOrg> singleOrgs = JSONObject.parseArray(records, SingleOrg.class);
for (SingleOrg singleOrg : singleOrgs) {
SysDept dept = deptService.getById(singleOrg.getId());
boolean flag = (dept!=null);
if(flag){
String md = MD5Util.MD5Encode(singleOrg.toString(), "utf-8");
if(dept.getMd5()!=null&&md.equals(dept.getMd5())){
continue;
}
}else {
dept = new SysDept();
dept.setCreateUid("1");
dept.setUpdateUid("1");
dept.setRemark("门户定时任务数据添加");
dept.setIsDownload("0");
dept.setIsComment("0");
dept.setDelFlag("0");
dept.setCreateTime(new Date());
String md = MD5Util.MD5Encode(singleOrg.toString(), "utf-8");
dept.setMd5(md);
}
dept.setMd5(MD5Util.MD5Encode(singleOrg.toString(), "utf-8"));
BeanUtils.copyProperties(singleOrg,dept);
dept.setXzqhId(singleOrg.getArea());
dept.setXzqhName(singleOrg.getAreaText());
dept.setSingleCode(singleOrg.getCode());
dept.setSingleSeq(singleOrg.getSeq());
dept.setSingleType(singleOrg.getType());
dept.setDeptName(singleOrg.getName());
dept.setParentId(singleOrg.getParent());
dept.setLeader(singleOrg.getDutyPerson());
dept.setName(singleOrg.getName());
dept.setAdminName(singleOrg.getName());
dept.setUpdateTime(new Date());
if(singleOrg.getStatus()==null||singleOrg.getStatus().equals("1")){
dept.setStatus("0");
}else {
dept.setStatus("1");
}
if (UserConstants.NOT_UNIQUE.equals(deptService.checkDeptNameUnique(dept)))
{
log.error("新增部门'" + dept.getDeptName() + "'失败,部门名称已存在");
}
if(flag){
deptService.updateById(dept);
}else {
deptService.save(dept);
}
}
}
@Scheduled(cron = "0 0/10 * * * ? ")
public void roleScheduled(){
log.info("----------------------开始执行角色同步功能----------------------------");
WaterResult rolePage = waterRequestUtil.getRolePage();
String data = rolePage.getData();
String records = JSONObject.parseObject(data).getString("records");
List<SingleRole> singleRoles = JSONObject.parseArray(records, SingleRole.class);
for (SingleRole singleRole : singleRoles) {
SysRole sysRole = roleService.getById(singleRole.getId());
if(sysRole!=null){
String md = MD5Util.MD5Encode(singleRole.toString(), "utf-8");
if(sysRole.getMd5()!=null&&md.equals(sysRole.getMd5())){
continue;
}
sysRole.setMd5(MD5Util.MD5Encode(singleRole.toString(), "utf-8"));
BeanUtils.copyProperties(singleRole,sysRole);
sysRole.setRoleName(singleRole.getName());
sysRole.setRoleKey(singleRole.getCode());
sysRole.setUpdateTime(new Date());
roleService.updateById(sysRole);
}else {
sysRole = new SysRole();
sysRole.preInsert();
sysRole.setStatus("0");
sysRole.setDelFlag("0");
sysRole.setRoleSort("0");
sysRole.setCreateUid("1");
sysRole.setUpdateUid("1");
sysRole.setRemark("门户定时任务数据添加");
sysRole.setMd5(MD5Util.MD5Encode(singleRole.toString(), "utf-8"));
BeanUtils.copyProperties(singleRole,sysRole);
sysRole.setRoleName(singleRole.getName());
sysRole.setRoleKey(singleRole.getCode());
roleService.save(sysRole);
}
}
}
}

25
shuili-admin/src/main/java/com/kms/web/utils/singleDomain/SingleMenu.java

@ -0,0 +1,25 @@
package com.kms.web.utils.singleDomain;
import lombok.Data;
import java.util.List;
@Data
public class SingleMenu {
private String systemId;
private String code; //菜单标识
private String visible; //是否可见 1可见 0不可见
private String icon; //菜单图标
private String pid;
private String type;
private String path; //路径
private String name; //资源名称
private String id;
private String iframe;//是否外链
private Integer seq; //排序
private String status; //状态 1启用 0停用
private String permissionCode; //权限标识
private List<SingleMenu> children;
}

387
shuili-admin/src/main/java/com/kms/web/utils/singleDomain/SingleOrg.java

@ -0,0 +1,387 @@
package com.kms.web.utils.singleDomain;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class SingleOrg {
private String address; //机构地址
private String area; //机构区域
private String areaText; //机构区域描述
private String businessScope; //业务范围
private String category;//机构类别(单位、部门)
private String categoryText;//单位、部门
private String code;//机构代码
private String parent;//同级父级机构ID
private String crossParent; //跨级父级机构ID
private String donaQualif;//是否具有公开募捐资格(字典)
private String name;//机构名称
private String nature;//机构性质
private String natureText;//机构性质描述
private String level;//机构级别
private String levelText;//机构级别名称
private String record;//是否备案
private String dutyPerson; //机构负责人
private String foundDate; //成立时间
private String registerDate;//登记日期
private String manageOrg;//登记管理机关
private String dutyPersonPhone;//负责人联系方式
private String expiryDate;//机构有效期
private String target;//组织建设目标
private String promoter;//发起人
private String promoterPhone;//发起人联系方式
private String source;//机构来源
private String volunteerNum;//志愿者人数
private String tel;//座机电话
private String businessTime;//营业时间
private String map;//机构经纬度信息
private String tifld;//统一社会信用代码
private String uscc;//统一身份认证关联id
private String govOrgId;//监管部门/发起单位Id
private String govOrgName;//监管部门/发起单位名称
private String legalPerson;//法定代表人
private String legalPersonNo;//法定代表人身份证
private String legalPersonPhone;//法定代表人联系电话
private String seq;
private String type; //类型
private String id;
private String status;
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getArea() {
return area;
}
public void setArea(String area) {
this.area = area;
}
public String getAreaText() {
return areaText;
}
public void setAreaText(String areaText) {
this.areaText = areaText;
}
public String getBusinessScope() {
return businessScope;
}
public void setBusinessScope(String businessScope) {
this.businessScope = businessScope;
}
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
public String getCategoryText() {
return categoryText;
}
public void setCategoryText(String categoryText) {
this.categoryText = categoryText;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getParent() {
return parent;
}
public void setParent(String parent) {
this.parent = parent;
}
public String getCrossParent() {
return crossParent;
}
public void setCrossParent(String crossParent) {
this.crossParent = crossParent;
}
public String getDonaQualif() {
return donaQualif;
}
public void setDonaQualif(String donaQualif) {
this.donaQualif = donaQualif;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getNature() {
return nature;
}
public void setNature(String nature) {
this.nature = nature;
}
public String getNatureText() {
return natureText;
}
public void setNatureText(String natureText) {
this.natureText = natureText;
}
public String getLevel() {
return level;
}
public void setLevel(String level) {
this.level = level;
}
public String getLevelText() {
return levelText;
}
public void setLevelText(String levelText) {
this.levelText = levelText;
}
public String getRecord() {
return record;
}
public void setRecord(String record) {
this.record = record;
}
public String getDutyPerson() {
return dutyPerson;
}
public void setDutyPerson(String dutyPerson) {
this.dutyPerson = dutyPerson;
}
public String getFoundDate() {
return foundDate;
}
public void setFoundDate(String foundDate) {
this.foundDate = foundDate;
}
public String getRegisterDate() {
return registerDate;
}
public void setRegisterDate(String registerDate) {
this.registerDate = registerDate;
}
public String getManageOrg() {
return manageOrg;
}
public void setManageOrg(String manageOrg) {
this.manageOrg = manageOrg;
}
public String getDutyPersonPhone() {
return dutyPersonPhone;
}
public void setDutyPersonPhone(String dutyPersonPhone) {
this.dutyPersonPhone = dutyPersonPhone;
}
public String getExpiryDate() {
return expiryDate;
}
public void setExpiryDate(String expiryDate) {
this.expiryDate = expiryDate;
}
public String getTarget() {
return target;
}
public void setTarget(String target) {
this.target = target;
}
public String getPromoter() {
return promoter;
}
public void setPromoter(String promoter) {
this.promoter = promoter;
}
public String getPromoterPhone() {
return promoterPhone;
}
public void setPromoterPhone(String promoterPhone) {
this.promoterPhone = promoterPhone;
}
public String getSource() {
return source;
}
public void setSource(String source) {
this.source = source;
}
public String getVolunteerNum() {
return volunteerNum;
}
public void setVolunteerNum(String volunteerNum) {
this.volunteerNum = volunteerNum;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
public String getBusinessTime() {
return businessTime;
}
public void setBusinessTime(String businessTime) {
this.businessTime = businessTime;
}
public String getMap() {
return map;
}
public void setMap(String map) {
this.map = map;
}
public String getTifld() {
return tifld;
}
public void setTifld(String tifld) {
this.tifld = tifld;
}
public String getUscc() {
return uscc;
}
public void setUscc(String uscc) {
this.uscc = uscc;
}
public String getGovOrgId() {
return govOrgId;
}
public void setGovOrgId(String govOrgId) {
this.govOrgId = govOrgId;
}
public String getGovOrgName() {
return govOrgName;
}
public void setGovOrgName(String govOrgName) {
this.govOrgName = govOrgName;
}
public String getLegalPerson() {
return legalPerson;
}
public void setLegalPerson(String legalPerson) {
this.legalPerson = legalPerson;
}
public String getLegalPersonNo() {
return legalPersonNo;
}
public void setLegalPersonNo(String legalPersonNo) {
this.legalPersonNo = legalPersonNo;
}
public String getLegalPersonPhone() {
return legalPersonPhone;
}
public void setLegalPersonPhone(String legalPersonPhone) {
this.legalPersonPhone = legalPersonPhone;
}
public String getSeq() {
return seq;
}
public void setSeq(String seq) {
this.seq = seq;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
}

25
shuili-admin/src/main/java/com/kms/web/utils/singleDomain/SingleRole.java

@ -0,0 +1,25 @@
package com.kms.web.utils.singleDomain;
import lombok.AllArgsConstructor;
import lombok.Data;
@Data
@AllArgsConstructor
public class SingleRole {
private String id;
private String area;
private String systemList;
private String code;
private String level;
private String dataConfig;
private String type;
private String category;
private String posts;
private String users;
private String name;
private String businesses;
}

26
shuili-admin/src/main/java/com/kms/web/utils/singleDomain/SingleUser.java

@ -0,0 +1,26 @@
package com.kms.web.utils.singleDomain;
import lombok.Data;
import java.util.List;
@Data
public class SingleUser {
private String id;
private String source;
private String type;
private Long seq;
private Integer firstSignIn;
private SingleOrg org;
private Boolean isPartTimeUser;
private List<SingleRole> roleList;
private List<SingleOrg> deptList;
private List<SingleOrg> orgs;
private String phone;
private String name;
private String status;
private String username;
}

45
shuili-admin/src/main/resources/application-test.yml

@ -247,3 +247,48 @@ http:
# ocr: http://192.168.0.62:12340/ExtractServer?WSDL # ocr: http://192.168.0.62:12340/ExtractServer?WSDL
# #内容是文件类型识别 # #内容是文件类型识别
# fielTypeAndContent: http://192.168.0.42:8089/detect # fielTypeAndContent: http://192.168.0.42:8089/detect
water:
#跳转地址
redirect: http://19.25.74.73:8001/#/singleLogin
#业务系统编码
systemCode: sgc-yg
systemName: 水工程应用-水利工程运行管理模块(运管处)
#请求测试环境网关
# url: http://19.25.35.204:31190/data_center/gateway/api
url: http://19.25.40.10:31190/data_center/gateway/portal
#应用token
paasToken: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzeXN0ZW1JZCI6IjE3MzI3MDMxMTE1NDc0ODIxMTQifQ.4oiD3WBwrxT5z8goAvA9O88vsYVxwaE-8vyQmWl7xbg
#应用id
paasId: 1732703111547482114
singOnUrl: ${water.url}/uaa/social/sso
#服务id
singOnServiceId: DGSP_1606192265703567361
#服务密钥
singOnAppsecret: 92c8749c5a424758ba550f3cc79cf882
userUrl: ${water.url}/uaa/auth/user
usersUrl: ${water.url}/usrc/open-api/user/page
# 组织
orgUrl: ${water.url}/usrc/open-api/org/orgPage
# 业务系统
systemUrl: ${water.url}/usrc/open-api/system/list
# 业务角色
businessRole: ${water.url}/usrc/open-api/role/page
# 用户资源
resourceUrl: ${water.url}/usrc/resource/build
usersAppsecret: 97ba97908eca4624aa131f7530cc4d30
usersServiceId: DGSP_1606198353790349313
orgServiceId: DGSP_1606197217079439362
orgAppsecret: 7ac7d77ddaa14ad1b653a0263906c0f8
roleUrl: ${water.url}/usrc/open-api/role/page
authUserServiceId: DGSP_1606192911177592833
authUserAppsecret: 4961464000044bb6907e9b61d736d194
roleServiceId: DGSP_1731517609955848193
roleAppsecret: e49e175c07fd4bbe90b3c928772fa58f
systemServiceId: DGSP_1606199297580052481
systemAppsecret: 4b26a1c7b95744369c00f65b7a0790b6
resourceServiceId: DGSP_1606193569955950593
resourceAppsecret: e9fbf96d53b34abca030b8f64de70ce9

3
shuili-admin/src/main/resources/application.yml

@ -1,5 +1,6 @@
spring: spring:
profiles: profiles:
# include: dev,druid-dev # include: dev,druid-dev
include: sy,druid-sy # include: sy,druid-sy
# include: zhishiku,druid-zhishiku # include: zhishiku,druid-zhishiku
include: test,druid-test

7
shuili-framework/src/main/java/com/shuili/common/core/domain/entity/SysDept.java

@ -61,9 +61,14 @@ public class SysDept extends BaseEntity
private String parentName; private String parentName;
private String xzqhId; private String xzqhId;
private String xzqhName;
private String xzqhName; private String category;
private String singleSeq;
private String singleCode;
private String singleType;
private String md5;
/** 子部门 */ /** 子部门 */
@TableField(exist = false) @TableField(exist = false)

11
shuili-framework/src/main/java/com/shuili/common/core/domain/entity/SysRole.java

@ -6,6 +6,7 @@ import javax.validation.constraints.Size;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.shuili.common.mybaitsplus.NoQuery; import com.shuili.common.mybaitsplus.NoQuery;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle; import org.apache.commons.lang3.builder.ToStringStyle;
@ -18,6 +19,7 @@ import com.shuili.common.core.domain.BaseEntity;
* @author shuili * @author shuili
*/ */
@TableName("sys_role") @TableName("sys_role")
@Data
public class SysRole extends BaseEntity public class SysRole extends BaseEntity
{ {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@ -59,6 +61,15 @@ public class SysRole extends BaseEntity
@TableField(exist = false) @TableField(exist = false)
private String[] deptIds; private String[] deptIds;
private String area;
private String code;
private String level;
private String dataConfig;
private String type;
private String category;
private String md5;
public SysRole() public SysRole()
{ {

8
shuili-framework/src/main/java/com/shuili/common/core/domain/entity/SysUser.java

@ -124,7 +124,15 @@ public class SysUser extends BaseEntity
@TableField(exist = false) @TableField(exist = false)
private String roleName; //邀请人 private String roleName; //邀请人
private String userType;
private String singleUserId; //单点用户id
private String singleUserSource; //用户来源
private String singleUserType; //用户类型
private String md5;
public String getInvitee() { public String getInvitee() {
return invitee; return invitee;

10
shuili-system/src/main/java/com/kms/system/service/SysUserService.java

@ -486,4 +486,14 @@ public class SysUserService extends BaseService<SysUserMapper,SysUser> {
return userMapper.findList(sysUser); return userMapper.findList(sysUser);
} }
@Transactional
public boolean singleInsertUser(SysUser user) {
// 新增用户信息
boolean rows = saveWithRedis(user);
// 新增用户岗位关联
insertUserPost(user);
// 新增用户与角色管理
insertUserRole(user);
return rows;
}
} }

Loading…
Cancel
Save