Browse Source

单点登录加同步

dev_kxc
ljf 1 year ago
parent
commit
3ba213fde2
  1. 6
      jwtech-admin/pom.xml
  2. 153
      jwtech-admin/src/main/java/com/kms/config/SHACoder.java
  3. 111
      jwtech-admin/src/main/java/com/kms/config/WaterPortal.java
  4. 152
      jwtech-admin/src/main/java/com/kms/config/WaterRequestUtil.java
  5. 15
      jwtech-admin/src/main/java/com/kms/config/WaterResult.java
  6. 76
      jwtech-admin/src/main/java/com/kms/config/scheduled/UserScheduled.java
  7. 60
      jwtech-admin/src/main/java/com/kms/config/singleDomain/SingleOrg.java
  8. 67
      jwtech-admin/src/main/java/com/kms/web/controller/system/SysLoginController.java
  9. 30
      jwtech-admin/src/main/resources/application-test.yml
  10. 5
      jwtech-framework/src/main/java/com/jianwei/common/core/domain/entity/SysDept.java
  11. 2
      jwtech-framework/src/main/java/com/jianwei/common/core/domain/entity/SysUser.java
  12. 6
      jwtech-system/pom.xml

6
jwtech-admin/pom.xml

@ -28,6 +28,12 @@
<version>2.2.6</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.12</version>
</dependency>
<!--<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>

153
jwtech-admin/src/main/java/com/kms/config/SHACoder.java

@ -0,0 +1,153 @@
package com.kms.config;
import java.security.MessageDigest;
import java.security.Security;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.util.encoders.Hex;
import org.apache.commons.codec.digest.DigestUtils;
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);
}
}

111
jwtech-admin/src/main/java/com/kms/config/WaterPortal.java

@ -0,0 +1,111 @@
package com.kms.config;
import cn.hutool.core.lang.UUID;
import cn.hutool.core.util.IdUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import com.alibaba.fastjson.JSONObject;
import com.jianwei.common.utils.http.HttpUtils;
import com.jwtech.util.HttpUtil;
import com.kms.common.http.utils.HttpClientUtils;
import com.kms.config.singleDomain.SingleOrg;
import lombok.Data;
import org.apache.http.HttpEntity;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.HttpClientBuilder;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import java.io.IOException;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
@Data
public class WaterPortal {
public static String paasToken;
public static String paasId;
//网关
public static String url;
//登录
public static String login;
//单点登录id
public static String loginServiceId;
//单点登录密钥
public static String loginAppsecret;
static String ul = "http://19.25.35.204:31190/data_center/gateway/api";
static String loginUrl = ul + "/uaa/social/sso";
static String getUserUrl = ul + "/usrc/open-api/user/page";
static String orgUrl = ul + "/usrc/open-api/org/orgPage";
public static void main(String[] args) throws Exception {
String timestamp = String.valueOf(new Date().getTime());
String nonce = IdUtil.fastSimpleUUID();
String paasToken = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzeXN0ZW1JZCI6IjE3MzI3MDMxMTE1NDc0ODIxMTQifQ.4oiD3WBwrxT5z8goAvA9O88vsYVxwaE-8vyQmWl7xbg";
String paasId = "1732703111547482114";
String signature = timestamp + paasToken + nonce + timestamp;
signature = SHACoder.encodeSHA256Hex(signature).toUpperCase();
// HttpResponse httpGet = HttpRequest.get(loginUrl)
// .header("x-tsp-target",paasId)
// .header("x-tsp-uid-type","id")
// .header("x-tsp-uid","20231207000003")
// .header("x-tsp-paasid",paasId)
// .header("x-tsp-signature",signature)
// .header("x-tsp-timestamp",timestamp)
// .header("x-tsp-serviceid","DGSP_1606192265703567361")
// .header("x-tsp-nonce", nonce)
// .header("x-tsp-appsecret","92c8749c5a424758ba550f3cc79cf882")
// .execute();
//获取用户
// HashMap<String, Object> hashMap = new HashMap<>();
// hashMap.put("page",1);
// hashMap.put("size",100);
// hashMap.put("systemCode","sgc-jg");
// HttpResponse httpGet = HttpRequest.post(getUserUrl)
// .header("x-tsp-paasid","1732703111547482114")
// .header("x-tsp-signature",signature)
// .header("x-tsp-timestamp",timestamp)
// .header("x-tsp-serviceid","DGSP_1606192265703567361")
// .header("x-tsp-nonce", nonce)
// .header("x-tsp-appsecret","92c8749c5a424758ba550f3cc79cf882")
// .body(JSONObject.toJSONString(hashMap))
// .execute();
//获取部门信息
HashMap<String, Object> hashMap = new HashMap<>();
hashMap.put("page",1);
hashMap.put("size",100);
hashMap.put("systemCode","sgc-jg");
HttpResponse httpGet = HttpRequest.post(orgUrl)
.header("x-tsp-paasid","1732703111547482114")
.header("x-tsp-signature",signature)
.header("x-tsp-timestamp",timestamp)
.header("x-tsp-serviceid","DGSP_1606192265703567361")
.header("x-tsp-nonce", nonce)
.header("x-tsp-appsecret","92c8749c5a424758ba550f3cc79cf882")
.body(JSONObject.toJSONString(hashMap))
.execute();
String body = httpGet.body();
JSONObject jsonObject = JSONObject.parseObject(body);
String records = jsonObject.getJSONObject("data").getString("records");
List<SingleOrg> singleOrgs = JSONObject.parseArray(records, SingleOrg.class);
System.out.println(body);
}
}

152
jwtech-admin/src/main/java/com/kms/config/WaterRequestUtil.java

@ -0,0 +1,152 @@
package com.kms.config;
import cn.hutool.core.util.IdUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import com.alibaba.fastjson.JSONObject;
import com.jianwei.common.core.domain.AjaxResult;
import com.jianwei.common.exception.CustomException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
@Component
public class WaterRequestUtil {
@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("${orgUrl}")
public String orgUrl;
@Value("${water.orgServiceId}")
public String orgServiceId;
@Value("${water.orgAppsecret}")
public String orgAppsecret;
/**
* 设置
* @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 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){
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(){
HashMap<String, Object> hashMap = new HashMap<>();
hashMap.put("page",1);
hashMap.put("size",100);
hashMap.put("systemCode",systemCode);
HttpRequest get = createPost(userUrl,authUserServiceId,authUserAppsecret);
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());
}
}
}

15
jwtech-admin/src/main/java/com/kms/config/WaterResult.java

@ -0,0 +1,15 @@
package com.kms.config;
import lombok.AllArgsConstructor;
import lombok.Data;
@Data
@AllArgsConstructor
public class WaterResult {
private int code;
private String message;
private Boolean success;
private String data;
private String timestamp;
}

76
jwtech-admin/src/main/java/com/kms/config/scheduled/UserScheduled.java

@ -0,0 +1,76 @@
package com.kms.config.scheduled;
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.fastjson.JSONObject;
import com.jianwei.common.constant.UserConstants;
import com.jianwei.common.core.domain.AjaxResult;
import com.jianwei.common.core.domain.entity.SysDept;
import com.kms.common.utils.BaseEntityUtils;
import com.kms.config.WaterRequestUtil;
import com.kms.config.WaterResult;
import com.kms.config.singleDomain.SingleOrg;
import com.kms.system.service.SysDeptService;
import com.kms.system.service.SysUserService;
import lombok.extern.log4j.Log4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.parsing.BeanEntry;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.Scheduled;
import java.util.List;
@Configuration
public class UserScheduled {
private static final Logger log = LoggerFactory.getLogger(UserScheduled.class);
@Autowired
WaterRequestUtil waterRequestUtil;
@Autowired
SysUserService userService;
@Autowired
SysDeptService deptService;
// @Scheduled
// public void userScheduled(){
//
//
//
// }
@Scheduled
public void orgScheduled(){
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 = new SysDept();
BaseEntityUtils.preInsert(dept);
BeanUtils.copyProperties(dept,singleOrg);
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());
if(singleOrg.getStatus().equals("1")){
dept.setStatus("0");
}
if (UserConstants.NOT_UNIQUE.equals(deptService.checkDeptNameUnique(dept)))
{
log.error("新增部门'" + dept.getDeptName() + "'失败,部门名称已存在");
}
// dept.setParentId("100");
int i = deptService.insertDept(dept);
}
}
}

60
jwtech-admin/src/main/java/com/kms/config/singleDomain/SingleOrg.java

@ -0,0 +1,60 @@
package com.kms.config.singleDomain;
import lombok.AllArgsConstructor;
import lombok.Data;
@Data
@AllArgsConstructor
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;
}

67
jwtech-admin/src/main/java/com/kms/web/controller/system/SysLoginController.java

@ -2,6 +2,10 @@ package com.kms.web.controller.system;
import cn.dev33.satoken.stp.StpUtil;
import cn.hutool.http.HttpResponse;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.jianwei.common.constant.Constants;
import com.jianwei.common.constant.YesOrNo;
import com.jianwei.common.core.controller.BaseController;
@ -12,10 +16,13 @@ import com.jianwei.common.core.domain.model.LoginBody;
import com.jianwei.common.core.redis.RedisCache;
import com.jianwei.common.enums.UserStatus;
import com.jianwei.common.exception.BaseException;
import com.jianwei.common.exception.CustomException;
import com.jianwei.common.mybaitsplus.BeanToWrapper;
import com.jianwei.common.utils.StringUtils;
import com.jianwei.common.utils.password.PasswordUtil;
import com.kms.common.utils.UserUtils;
import com.kms.config.WaterRequestUtil;
import com.kms.config.WaterResult;
import com.kms.framework.manager.AsyncManager;
import com.kms.framework.manager.factory.AsyncFactory;
import com.kms.framework.web.service.SysPermissionService;
@ -25,11 +32,15 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.view.RedirectView;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
import java.util.Set;
@ -52,6 +63,10 @@ public class SysLoginController extends BaseController {
private SysUserService userService;
@Autowired
private RedisCache redisCache;
@Autowired
private WaterRequestUtil waterRequestUtil;
@Value("${jianwei.redirect}")
private String redirect;
@PostMapping("/login")
@ApiOperation("登录接口")
@ -144,4 +159,46 @@ public class SysLoginController extends BaseController {
return AjaxResult.success(menuService.buildMenus(menus));
}
private String DOORURL = "http://19.25.35.204:31190/data_center/gateway/api";
/**
* 门户单点认证登录
* @return
*/
@GetMapping("/signOnLogin")
public ModelAndView signOnLogin(HttpServletRequest request,
HttpServletResponse response,
@RequestParam(name = "token")String token) throws IOException {
WaterResult waterResult = waterRequestUtil.authUser(token);
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(list.isEmpty()){
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",user);
String tokenValue = StpUtil.getTokenValue();
ajax.put("token",tokenValue);
RedirectView redirectView = new RedirectView(redirect+"?token="+tokenValue);
ModelAndView modelAndView = new ModelAndView(redirectView);
return modelAndView;
}
}

30
jwtech-admin/src/main/resources/application-test.yml

@ -24,6 +24,7 @@ jianwei:
init: true
#上传类型
uploadType: disk
#neo4j的一个from
database: tianhui_cg
# 开发环境配置
@ -130,8 +131,8 @@ spring:
# redis 配置
redis:
# 地址
#host: 127.0.0.1
host: 192.168.2.189
host: 127.0.0.1
# host: 192.168.2.189
# cluster:
# nodes: 192.168.1.20:7001,192.168.1.20:7002,192.168.1.20:7003,192.168.1.20:7004,192.168.1.20:7005,192.168.1.20:7006
# max-redirects: 3
@ -226,7 +227,8 @@ ignored:
/system/file/**,
/system/user/exportExcel,
/system/kaptcha/render,
/test/**
/test/**,
/signOnLogin
# http请求连接池
http:
pool:
@ -248,3 +250,25 @@ http:
# ocr: http://192.168.0.62:12340/ExtractServer?WSDL
# #内容是文件类型识别
# fielTypeAndContent: http://192.168.0.42:8089/detect
water:
#跳转地址
redirect: http://101.33.237.22:8094/#/project/special
#业务系统编码
systemCode: sgc-jg
#请求网关
url: http://19.25.35.204:31190/data_center/gateway/api
#应用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
authUserServiceId: DGSP_1606192911177592833
authUserAppsecret: 4961464000044bb6907e9b61d736d194
orgUrl: ${water.url}/usrc/open-api/org/orgPage
orgServiceId: DGSP_1606197217079439362
orgAppsecret: 7ac7d77ddaa14ad1b653a0263906c0f8

5
jwtech-framework/src/main/java/com/jianwei/common/core/domain/entity/SysDept.java

@ -67,6 +67,11 @@ public class SysDept extends BaseEntity
private String xzqhName;
private String category;
private String singleSeq;
private String singleCode;
private String singleType;
/** 子部门 */
@TableField(exist = false)
@NoQuery

2
jwtech-framework/src/main/java/com/jianwei/common/core/domain/entity/SysUser.java

@ -127,6 +127,8 @@ public class SysUser extends BaseEntity
@TableField(exist = false)
private String roleName; //邀请人
private String singleUserId; //单点用户id
public String getInvitee() {

6
jwtech-system/pom.xml

@ -21,6 +21,12 @@
<dependencies>
<!-- hutool -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.7.20</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>

Loading…
Cancel
Save