三江统一登录的增量用户和机构同步

This commit is contained in:
Administrator 2023-03-29 17:50:19 +08:00
parent 7565de20d4
commit bd38907f72
5 changed files with 427 additions and 71 deletions

View File

@ -1,17 +1,23 @@
package com.zhgd.sjmq.service;
import com.chinacreator.c2.uop.sync.message.org.OrgCreateMessage;
import com.gexin.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.chinacreator.c2.uop.sync.message.categoryorg.CategoryOrgCreateMessage;
import com.chinacreator.c2.uop.sync.message.categoryorg.CategoryOrgDeleteMessage;
import com.chinacreator.c2.uop.sync.message.categoryorg.CategoryOrgUpdateMessage;
import com.chinacreator.c2.uop.sync.message.org.*;
import com.chinacreator.c2.uop.sync.message.user.*;
import com.zhgd.xmgl.modules.basicdata.entity.Company;
import com.zhgd.xmgl.modules.basicdata.entity.SystemUser;
import com.zhgd.xmgl.modules.basicdata.mapper.CompanyMapper;
import com.zhgd.xmgl.modules.basicdata.mapper.SystemUserMapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.stereotype.Component;
import java.util.Map;
@Service
@Component
@Slf4j
public class SjMqService {
@Autowired
@ -20,29 +26,306 @@ public class SjMqService {
private SystemUserMapper systemUserMapper;
private Company convertToCompany(OrgCreateMessage orgCreateMessage) {
log.info("sj的mq接收{}", JSON.toJSONString(orgCreateMessage));
Map<String, Object> organization = orgCreateMessage.getOrganization();
String id = orgCreateMessage.getId();
Map<String, Object> oMap = orgCreateMessage.getOrganization();
String name = String.valueOf(oMap.get("name"));
String pids = String.valueOf(oMap.get("pid"));
String pid = StringUtils.substringAfterLast(pids, "-");
Company parentCompany = companyMapper.selectOne(new LambdaQueryWrapper<Company>().eq(Company::getCompanySn, pid));
Company company = new Company();
//company.setCompanyId();
//company.setCompanySn();
//company.setCompanyName();
//company.setCreateTime();
//company.setCompanyTel();
//company.setCompanyType();
//company.setParentId();
//company.setHeadquartersSn();
//company.setLongitude();
//company.setLatitude();
//company.setPropagateFile();
//company.setFullSn();
//company.setRangeAddr();
//company.setParentSn();
//company.setEditType();
//公司sn就是那边的id
company.setCompanySn(id);
company.setCompanyName(name);
company.setCompanyType(parentCompany.getCompanyType() + 1);
company.setParentId(parentCompany.getCompanyId());
company.setHeadquartersSn("2e07f0e2569c43fb835ae2082d1d314f");
return company;
}
public void onOrgCreated(OrgCreateMessage orgCreateMessage) {
/*
{
"category": "2-2",
"id": "eNiamYRsRSfibgy1o9KaukNg",
"organization": {
"creator": "Z4K0Un08TibykTF5tiauD15Q",
"code": "",
"jgzt": "",
"name": "测试名称",
"pid": "2-2-le5DuXudTHe7jjUfCEDIGQ",
"sn": 999,
"id": "eNiamYRsRSfibgy1o9KaukNg"
},
"timestamp": 1680073256840
}
*/
Company company = convertToCompany(orgCreateMessage);
companyMapper.insert(company);
}
public void onOrgUpdated(OrgUpdateMessage orgUpdateMessage) {
}
public void onOrgDeleted(OrgDeleteMessage orgDeleteMessage) {
/*
{
"category": "2-2",
"id": "BkIaPt9FT626g68qZJ95xQ",
"organization": {
"categoryOrgId": "2-2",
"creator": "1",
"allUserInstanceIds": [],
"jgzt": "",
"name": "测试2",
"pid": "2-2",
"allOrgInstanceIds": [
"2-2-BkIaPt9FT626g68qZJ95xQ"
],
"id": "BkIaPt9FT626g68qZJ95xQ",
"lastModified": 1680075024794,
"sn": 999,
"delflag": "n",
"createAt": 1680075025000
},
"timestamp": 1680075115353
}
*/
companyMapper.delete(new LambdaQueryWrapper<Company>().eq(Company::getCompanySn, orgDeleteMessage.getId()));
}
public void onOrgCategoryChanged(OrgCategoryChangeMessage orgCategoryChangeMessage) {
}
public void onBatchOrgCategoryChanged(BatchOrgCategoryChangeMessage arg0) {
}
public void onCategoryOrgCreate(CategoryOrgCreateMessage arg0) {
}
public void onCategoryOrgUpdate(CategoryOrgUpdateMessage categoryOrgUpdateMessage) {
}
public void onCategoryOrgDelete(CategoryOrgDeleteMessage categoryOrgDeleteMessage) {
}
public void onUserOrgChanged(UserOrgChangeMessage userOrgChangeMessage) {
/*
新增用户
{
"category": "2-2",
"id": "wnibicyw0TTVSymhmKmWW1ZA",
"orgId": "le5DuXudTHe7jjUfCEDIGQ",
"timestamp": 1680080521157,
"type": "COPY",
"user": {
"creator": "Z4K0Un08TibykTF5tiauD15Q",
"$opType": "copy",
"sex": "0",
"jobs": "测试岗位",
"categoryUsers": [],
"workno": "",
"phone": "17708138875",
"name": "测试234",
"state": "1",
"sn": 0,
"id": "wnibicyw0TTVSymhmKmWW1ZA",
"certificateNum": "511622199408010230",
"authLevel": "0",
"email": "",
"effectiveDate": 0,
"certificateType": "idcard"
}
}
*/
/*
转移用户
{
"category": "2-2",
"id": "906WVquxTvuICklTCib2ycw",
"oldOrgId": "le5DuXudTHe7jjUfCEDIGQ",
"orgId": "u0D9zibI1TjKUCVjub94DiaA",
"timestamp": 1680082252596,
"type": "MOVE",
"user": {
"creator": "Z4K0Un08TibykTF5tiauD15Q",
"jp": "csdjzh",
"sex": "1",
"jobs": "",
"createAt": 1680128267000,
"orgId": "2-2-u0D9zibI1TjKUCVjub94DiaA",
"workno": "",
"categoryOrgId": "2-2",
"orgIds": [
"le5DuXudTHe7jjUfCEDIGQ"
],
"$orgAttrs": [
{
"org": {
"orgName": "宜宾三江投资集团",
"orgId": "le5DuXudTHe7jjUfCEDIGQ"
},
"attrs": {
"orgInstanceId": "2-2-le5DuXudTHe7jjUfCEDIGQ",
"sn": ""
}
}
],
"phone": "023432434",
"name": "测试顶级账号",
"id": "906WVquxTvuICklTCib2ycw",
"lastModified": 1680081467472,
"state": "1",
"certificateNum": "540102197511230593",
"authLevel": "0",
"delflag": "n",
"email": "",
"certificateType": "idcard",
"qp": "ceshidingjizhanghao"
}
}
*/
/*
删除用户
{
"category": "2-2",
"id": "wnibicyw0TTVSymhmKmWW1ZA",
"orgId": "le5DuXudTHe7jjUfCEDIGQ",
"timestamp": 1680083189110,
"type": "DELETE"
}
*/
UserOrgChangeType type = userOrgChangeMessage.getType();
if (type.equals(UserOrgChangeType.COPY)) {
//复制 新增用户
SystemUser systemUser = convertToSystemUser(userOrgChangeMessage);
systemUserMapper.insert(systemUser);
} else if (type.equals(UserOrgChangeType.MOVE)) {
//移动用户
SystemUser systemUser = systemUserMapper.selectOne(new LambdaQueryWrapper<SystemUser>().eq(SystemUser::getSjUnifiedAuthenticationUserId, userOrgChangeMessage.getId()));
if (systemUser != null) {
systemUser.setSn(userOrgChangeMessage.getOldOrgId());
systemUserMapper.updateById(systemUser);
}
} else if (type.equals(UserOrgChangeType.DELETE)) {
//删除用户
systemUserMapper.delete(new LambdaQueryWrapper<SystemUser>().eq(SystemUser::getSjUnifiedAuthenticationUserId, userOrgChangeMessage.getId()));
}
}
private SystemUser convertToSystemUser(UserOrgChangeMessage userOrgChangeMessage) {
String oldOrgId = userOrgChangeMessage.getOldOrgId();
Company company = companyMapper.selectOne(new LambdaQueryWrapper<Company>().eq(Company::getCompanySn, oldOrgId));
if (company == null) {
throw new RuntimeException("三江mq同步用户用户的企业查询为空");
}
Map<String, Object> userMap = userOrgChangeMessage.getUser();
String account = String.valueOf(userMap.get("certificateNum"));
String name = String.valueOf(userMap.get("name"));
String phone = String.valueOf(userMap.get("phone"));
SystemUser systemUser = new SystemUser();
systemUser.setAccount(account);
//默认密码123456
systemUser.setPassword("$2a$12$Bb9UuoLJQSYchIgl3yW05eyc1qPCMf4ogKn20VsN22VjELa73kjpu");
systemUser.setShowPassword("123456");
systemUser.setRealName(name);
systemUser.setUserTel(phone);
systemUser.setSn(oldOrgId);
systemUser.setAccountType(getAccountType(company.getCompanyType()));
systemUser.setSjUnifiedAuthenticationUserId(userOrgChangeMessage.getId());
return systemUser;
}
private Integer getAccountType(Integer companyType) {
/*
`company_type` tinyint(3) DEFAULT NULL COMMENT '企业类型1总部2区域3城市4项目部',
`account_type` tinyint(3) DEFAULT '2' COMMENT '账号类型1系统管理员2企业管理员账号3企业区账号4企业市账号5项目账号6项目子账号7项目部账号,8参建单位9政务',
*/
switch (companyType) {
case 2:
return 3;
case 3:
return 4;
case 4:
return 5;
}
return null;
}
public void onUserCreated(UserCreateMessage userCreateMessage) {
}
public void onUserUpdated(UserUpdateMessage userUpdateMessage) {
/*
{
"category": "2-2",
"id": "906WVquxTvuICklTCib2ycw",
"timestamp": 1680081467489,
"user": {
"creator": "Z4K0Un08TibykTF5tiauD15Q",
"jp": "csdjzh",
"sex": "1",
"jobs": "",
"createAt": 1680128267000,
"workno": "",
"categoryOrgId": "2-2",
"orgIds": [
"le5DuXudTHe7jjUfCEDIGQ"
],
"$orgAttrs": [
{
"org": {
"orgName": "宜宾三江投资集团",
"orgId": "le5DuXudTHe7jjUfCEDIGQ"
},
"attrs": {
"orgInstanceId": "2-2-le5DuXudTHe7jjUfCEDIGQ",
"sn": ""
}
}
],
"phone": "023432434",
"name": "测试顶级账号",
"id": "906WVquxTvuICklTCib2ycw",
"lastModified": 1680081467472,
"state": "1",
"certificateNum": "540102197511230593",
"authLevel": "0",
"delflag": "n",
"email": "",
"certificateType": "idcard",
"qp": "ceshidingjizhanghao"
}
}
*/
SystemUser systemUser = convertToSystemUserUpdate(userUpdateMessage);
systemUserMapper.update(systemUser, new LambdaQueryWrapper<SystemUser>().eq(SystemUser::getSjUnifiedAuthenticationUserId, userUpdateMessage.getId()));
}
private SystemUser convertToSystemUserUpdate(UserUpdateMessage userUpdateMessage) {
Map<String, Object> userMap = userUpdateMessage.getUser();
String account = String.valueOf(userMap.get("certificateNum"));
String name = String.valueOf(userMap.get("name"));
String phone = String.valueOf(userMap.get("phone"));
SystemUser systemUser = new SystemUser();
systemUser.setAccount(account);
//默认密码123456
systemUser.setPassword("$2a$12$Bb9UuoLJQSYchIgl3yW05eyc1qPCMf4ogKn20VsN22VjELa73kjpu");
systemUser.setShowPassword("123456");
systemUser.setRealName(name);
systemUser.setUserTel(phone);
return systemUser;
}
public void onUserDeleted(UserDeleteMessage userDeleteMessage) {
}
}

View File

@ -21,93 +21,160 @@ import com.chinacreator.c2.uop.sync.message.user.UserOrgChangeMessage;
import com.chinacreator.c2.uop.sync.message.user.UserUpdateMessage;
import com.chinacreator.c2.uop.sync.receiver.UopModifyMessageListener;
import com.gexin.fastjson.JSON;
import com.zhgd.xmgl.modules.basicdata.entity.Company;
import com.zhgd.xmgl.modules.basicdata.mapper.CompanyMapper;
import com.zhgd.xmgl.modules.basicdata.mapper.SystemUserMapper;
import com.zhgd.jeecg.common.util.SpringContextUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.util.Map;
/**
* 三江统一登录的mq数据同步处理service
*/
@Slf4j
@Component
public class UopCustomMessageReceiverServiceImpl implements UopModifyMessageListener {
@Autowired
private SjMqService service;
public void init() {
service = (SjMqService) SpringContextUtils.getBean("sjMqService");
}
@Override
public void onOrgCreated(OrgCreateMessage orgCreateMessage) {
log.info("sj的mq接收{}", JSON.toJSONString(orgCreateMessage));
service.onOrgCreated(orgCreateMessage);
try {
init();
log.info("sj的mq接收{}", JSON.toJSONString(orgCreateMessage));
service.onOrgCreated(orgCreateMessage);
} catch (Exception e) {
log.error("mqError", e);
}
}
@Override
public void onOrgUpdated(OrgUpdateMessage orgUpdateMessage) {
log.info("sj的mq接收{}", JSON.toJSONString(orgUpdateMessage));
try {
init();
log.info("sj的mq接收{}", JSON.toJSONString(orgUpdateMessage));
service.onOrgUpdated(orgUpdateMessage);
} catch (Exception e) {
log.error("mqError", e);
}
}
@Override
public void onOrgDeleted(OrgDeleteMessage orgDeleteMessage) {
log.info("sj的mq接收{}", JSON.toJSONString(orgDeleteMessage));
try {
init();
log.info("sj的mq接收{}", JSON.toJSONString(orgDeleteMessage));
service.onOrgDeleted(orgDeleteMessage);
} catch (Exception e) {
log.error("mqError", e);
}
}
@Override
public void onOrgCategoryChanged(OrgCategoryChangeMessage orgCategoryChangeMessage) {
log.info("sj的mq接收{}", JSON.toJSONString(orgCategoryChangeMessage));
try {
init();
log.info("sj的mq接收{}", JSON.toJSONString(orgCategoryChangeMessage));
service.onOrgCategoryChanged(orgCategoryChangeMessage);
} catch (Exception e) {
log.error("mqError", e);
}
}
@Override
public void onBatchOrgCategoryChanged(BatchOrgCategoryChangeMessage arg0) {
log.info("sj的mq接收{}", JSON.toJSONString(arg0));
try {
init();
log.info("sj的mq接收{}", JSON.toJSONString(arg0));
service.onBatchOrgCategoryChanged(arg0);
} catch (Exception e) {
log.error("mqError", e);
}
}
@Override
public void onCategoryOrgCreate(CategoryOrgCreateMessage arg0) {
log.info("sj的mq接收{}", JSON.toJSONString(arg0));
try {
init();
log.info("sj的mq接收{}", JSON.toJSONString(arg0));
service.onCategoryOrgCreate(arg0);
} catch (Exception e) {
log.error("mqError", e);
}
}
@Override
public void onCategoryOrgUpdate(CategoryOrgUpdateMessage categoryOrgUpdateMessage) {
log.info("sj的mq接收{}", JSON.toJSONString(categoryOrgUpdateMessage));
try {
init();
log.info("sj的mq接收{}", JSON.toJSONString(categoryOrgUpdateMessage));
service.onCategoryOrgUpdate(categoryOrgUpdateMessage);
} catch (Exception e) {
log.error("mqError", e);
}
}
@Override
public void onCategoryOrgDelete(CategoryOrgDeleteMessage categoryOrgDeleteMessage) {
log.info("sj的mq接收{}", JSON.toJSONString(categoryOrgDeleteMessage));
try {
init();
log.info("sj的mq接收{}", JSON.toJSONString(categoryOrgDeleteMessage));
service.onCategoryOrgDelete(categoryOrgDeleteMessage);
} catch (Exception e) {
log.error("mqError", e);
}
}
@Override
public void onUserOrgChanged(UserOrgChangeMessage userOrgChangeMessage) {
log.info("sj的mq接收{}", JSON.toJSONString(userOrgChangeMessage));
try {
init();
log.info("sj的mq接收{}", JSON.toJSONString(userOrgChangeMessage));
service.onUserOrgChanged(userOrgChangeMessage);
} catch (Exception e) {
log.error("mqError", e);
}
}
@Override
public void onUserCreated(UserCreateMessage userCreateMessage) {
log.info("sj的mq接收{}", JSON.toJSONString(userCreateMessage));
try {
init();
log.info("sj的mq接收{}", JSON.toJSONString(userCreateMessage));
service.onUserCreated(userCreateMessage);
} catch (Exception e) {
log.error("mqError", e);
}
}
@Override
public void onUserUpdated(UserUpdateMessage userUpdateMessage) {
log.info("sj的mq接收{}", JSON.toJSONString(userUpdateMessage));
try {
init();
log.info("sj的mq接收{}", JSON.toJSONString(userUpdateMessage));
service.onUserUpdated(userUpdateMessage);
} catch (Exception e) {
log.error("mqError", e);
}
}
@Override
public void onUserDeleted(UserDeleteMessage userDeleteMessage) {
log.info("sj的mq接收{}", JSON.toJSONString(userDeleteMessage));
try {
init();
log.info("sj的mq接收{}", JSON.toJSONString(userDeleteMessage));
service.onUserDeleted(userDeleteMessage);
} catch (Exception e) {
log.error("mqError", e);
}
}
/*************************************************************************/
@Override

View File

@ -117,4 +117,8 @@ public class SystemUser implements Serializable {
@ApiModelProperty(value = "岗位名称")
private java.lang.String jobName;
/**
* 三江统一登录的用户id
*/
private String sjUnifiedAuthenticationUserId;
}

View File

@ -112,26 +112,28 @@ public class JwtTokenFilter extends OncePerRequestFilter {
|| Objects.equals(accountType, 4) || Objects.equals(accountType, 5)) {
//统一登录
String tokenDetails = redisTemplate.opsForValue().get(SJ_TOKEN_PREFIX + account);
TokenResponse tokenResponse = JSON.parseObject(tokenDetails, TokenResponse.class);
String c2AT = tokenResponse.getAccess_token();
String c2rt = tokenResponse.getRefresh_token();
//应用过滤器中判断请求头request中是否含有C2AT若C2AT存在C2AT的校验过期更新请参考凭证更新令牌流程
//C2AT不存在且更新令牌失败则返回401并在Location中带上登录页面地址登录页面地址在应用过滤器中拼装拼装方式请参考3.1.1获取授权码接口地址
JwtPayloadUserInfo jwtPayloadUserInfo = null;
if (StringUtils.isNotBlank(c2AT)) {
//C2AT的校验
//1.判断是否过期
//2.令牌校验
jwtPayloadUserInfo = JwtRsaUtils.verifyWithUserInfo(c2AT);
sjUser.set(jwtPayloadUserInfo);
//token校验失败先尝试刷新token失败就重定向统一登录
if (jwtPayloadUserInfo == null) {
if (tokenDetails != null) {
TokenResponse tokenResponse = JSON.parseObject(tokenDetails, TokenResponse.class);
String c2AT = tokenResponse.getAccess_token();
String c2rt = tokenResponse.getRefresh_token();
//应用过滤器中判断请求头request中是否含有C2AT若C2AT存在C2AT的校验过期更新请参考凭证更新令牌流程
//C2AT不存在且更新令牌失败则返回401并在Location中带上登录页面地址登录页面地址在应用过滤器中拼装拼装方式请参考3.1.1获取授权码接口地址
JwtPayloadUserInfo jwtPayloadUserInfo = null;
if (StringUtils.isNotBlank(c2AT)) {
//C2AT的校验
//1.判断是否过期
//2.令牌校验
jwtPayloadUserInfo = JwtRsaUtils.verifyWithUserInfo(c2AT);
sjUser.set(jwtPayloadUserInfo);
//token校验失败先尝试刷新token失败就重定向统一登录
if (jwtPayloadUserInfo == null) {
tryRefreshToken(request, response);
} else {
setSjAuthenticationToken(jwtPayloadUserInfo);
}
} else if (StringUtils.isNotBlank(c2rt)) {
tryRefreshToken(request, response);
} else {
setSjAuthenticationToken(jwtPayloadUserInfo);
}
} else if (StringUtils.isNotBlank(c2rt)) {
tryRefreshToken(request, response);
}
} else {

View File

@ -1,16 +1,16 @@
#http.port=30250
http.port=22123
http.port=30221
#spring.datasource.url=jdbc:mysql://124.71.178.44:3306/wisdomsite_lgdc?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&autoReconnect=true
#spring.datasource.url=jdbc:mysql://183.60.227.61:20246/wisdomsite?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&autoReconnect=true&serverTimezone=UTC
#spring.datasource.url=jdbc:mysql://36.137.53.203:3306/wisdomsite?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&autoReconnect=true
#spring.datasource.url=jdbc:mysql://139.9.66.234:3386/wisdomsite_ty?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&autoReconnect=true
#spring.datasource.url=jdbc:mysql://182.90.224.237:3306/wisdomsite?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&autoReconnect=true&useSSL=false
#spring.datasource.url=jdbc:mysql://139.9.66.234:3306/wisdomsite?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&autoReconnect=true
spring.datasource.url=jdbc:mysql://192.168.34.221:3306/wisdomsite?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&autoReconnect=true&useSSL=false
spring.datasource.url=jdbc:mysql://192.168.34.221:3306/wisdomsite_sj?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&autoReconnect=true&useSSL=false
spring.datasource.username=ENC(XR4C/hvTYCUqudS49Wh/jA==)
#spring.datasource.password=ENC(hHkiHEc6vSWjqfOtg2/2Uiihs0vX3l7V)
spring.datasource.password=ENC(LsKaVL2ycDu+uUNoPndYLA==)
server.port=8199
server.port=11111
#server.port=30246
basePath=C:/jxj/prod/backEnd/itbgpImage/
server.tomcat.basedir=C:/jxj/prod/backEnd/tempImage/
@ -19,7 +19,7 @@ server.tomcat.basedir=C:/jxj/prod/backEnd/tempImage/
#server.tomcat.basedir=F:/zhgd/tempImage/
#arcsoft.dllPath=F:/zhgd/dll
arcsoft.dllPath=C:/jxj/prod/backEnd/dll
security.enable=false
security.enable=true
isGetStandardData=false
isGetEnvironmentData=false
isGetFaceFeatureDate=false