同步器增加属性配置管理

This commit is contained in:
llh
2024-09-24 17:00:56 +08:00
parent 0199445c51
commit e3b9fdb201
39 changed files with 6003 additions and 71 deletions

View File

@@ -25,9 +25,13 @@ import org.dromara.maxkey.entity.HistorySynchronizer;
import org.dromara.maxkey.entity.Organizations;
import org.dromara.maxkey.synchronizer.AbstractSynchronizerService;
import org.dromara.maxkey.synchronizer.ISynchronizerService;
import org.dromara.maxkey.entity.SyncJobConfigField;
import org.dromara.maxkey.synchronizer.service.SyncJobConfigFieldService;
import org.dromara.maxkey.synchronizer.utils.MyResultSet;
import org.dromara.maxkey.util.JdbcUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.sql.Connection;
@@ -35,11 +39,20 @@ import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static org.dromara.maxkey.synchronizer.utils.FieldUtil.setFieldValue;
@Service
public class JdbcOrganizationService extends AbstractSynchronizerService implements ISynchronizerService {
final static Logger _logger = LoggerFactory.getLogger(JdbcOrganizationService.class);
static ArrayList<ColumnFieldMapper> mapperList = new ArrayList<>();
@Autowired
private SyncJobConfigFieldService syncJobConfigFieldService;
private static final Integer ORG_TYPE = 2;
@Override
public void sync() {
@@ -74,6 +87,87 @@ public class JdbcOrganizationService extends AbstractSynchronizerService impleme
}
}
public Organizations buildOrgByFieldMap(ResultSet rs) throws SQLException{
Organizations org = new Organizations();
DbTableMetaData meta = JdbcUtils.getMetaData(rs);
Map<String, String> fieldMap = getFieldMap(Long.parseLong(synchronizer.getId()));
for (Map.Entry<String, String> entry : fieldMap.entrySet()) {
String column = entry.getValue();
String field = entry.getKey();
Object value = rs.getObject(column);
if (value != null) {
try {
setFieldValue(org,field,value);
} catch (Exception e) {
_logger.error("setProperty {}", e);
}
}
}
org.setType("department");
org.setId(org.generateId());
org.setInstId(synchronizer.getInstId());
if (meta.getColumnsMap().containsKey("status")) {
org.setStatus(rs.getInt("status"));
} else {
org.setStatus(ConstsStatus.ACTIVE);
}
_logger.debug("Organization {}", org);
HistorySynchronizer historySynchronizer = new HistorySynchronizer();
historySynchronizer.setId(historySynchronizer.generateId());
historySynchronizer.setSyncId(synchronizer.getId());
historySynchronizer.setSyncName(synchronizer.getName());
historySynchronizer.setObjectId(org.getId());
historySynchronizer.setObjectName(org.getOrgName());
historySynchronizer.setObjectType(Organizations.class.getSimpleName());
historySynchronizer.setInstId(synchronizer.getInstId());
historySynchronizer.setResult("success");
historySynchronizerService.insert(historySynchronizer);
return org;
}
public Organizations buildOrgByFieldMapTemp(MyResultSet rs) throws SQLException{
Organizations org = new Organizations();
//DbTableMetaData meta = JdbcUtils.getMetaData(rs);
Map<String, String> fieldMap = getFieldMap(Long.parseLong(synchronizer.getId()));
for (Map.Entry<String, String> entry : fieldMap.entrySet()) {
String column = entry.getValue();
String field = entry.getKey();
Object value = rs.getObject(column);
if (value != null) {
try {
setFieldValue(org,field,value);
} catch (Exception e) {
_logger.error("setProperty {}", e);
}
}
}
org.setId(org.generateId());
org.setInstId(synchronizer.getInstId());
if (rs.getColumnNames().contains("status")) {
org.setStatus(rs.getInt("status"));
} else {
org.setStatus(ConstsStatus.ACTIVE);
}
_logger.debug("Organization {}", org);
/*HistorySynchronizer historySynchronizer = new HistorySynchronizer();
historySynchronizer.setId(historySynchronizer.generateId());
historySynchronizer.setSyncId(synchronizer.getId());
historySynchronizer.setSyncName(synchronizer.getName());
historySynchronizer.setObjectId(org.getId());
historySynchronizer.setObjectName(org.getOrgName());
historySynchronizer.setObjectType(Organizations.class.getSimpleName());
historySynchronizer.setInstId(synchronizer.getInstId());
historySynchronizer.setResult("success");
historySynchronizerService.insert(historySynchronizer);*/
return org;
}
public Organizations buildOrganization(ResultSet rs) throws SQLException {
DbTableMetaData meta = JdbcUtils.getMetaData(rs);
@@ -121,6 +215,72 @@ public class JdbcOrganizationService extends AbstractSynchronizerService impleme
}
public Organizations buildOrganizationTemp(MyResultSet rs) throws SQLException {
//DbTableMetaData meta = JdbcUtils.getMetaData(rs);
Organizations org = new Organizations();
for (ColumnFieldMapper mapper : mapperList) {
if (rs.getColumnNames().contains(mapper.getColumn())) {
Object value = null;
if (mapper.getType().equalsIgnoreCase("String")) {
value = rs.getString(mapper.getColumn());
} else {
value = rs.getInt(mapper.getColumn());
}
if (value != null) {
try {
PropertyUtils.setSimpleProperty(org, mapper.getField(), value);
} catch (Exception e) {
_logger.error("setSimpleProperty {}", e);
}
}
}
}
org.setId(org.generateId());
org.setInstId(synchronizer.getInstId());
if (rs.getColumnNames().contains("status")) {
org.setStatus(rs.getInt("status"));
} else {
org.setStatus(ConstsStatus.ACTIVE);
}
_logger.debug("Organization {}", org);
/*HistorySynchronizer historySynchronizer = new HistorySynchronizer();
historySynchronizer.setId(historySynchronizer.generateId());
historySynchronizer.setSyncId(synchronizer.getId());
historySynchronizer.setSyncName(synchronizer.getName());
historySynchronizer.setObjectId(org.getId());
historySynchronizer.setObjectName(org.getOrgName());
historySynchronizer.setObjectType(Organizations.class.getSimpleName());
historySynchronizer.setInstId(synchronizer.getInstId());
historySynchronizer.setResult("success");
historySynchronizerService.insert(historySynchronizer);*/
return org;
}
public Map<String,String> getFieldMap(Long jobId){
Map<String,String> filedMap = new HashMap<>();
//根据job id查询属性映射表
List<SyncJobConfigField> syncJobConfigFieldList = syncJobConfigFieldService.findByJobId(jobId);
//获取用户属性映射
for(SyncJobConfigField element:syncJobConfigFieldList){
if(Integer.parseInt(element.getObjectType()) == ORG_TYPE.intValue()){
filedMap.put(element.getTargetField(), element.getSourceField());
}
}
return filedMap;
}
public SyncJobConfigFieldService getSyncJobConfigFieldService() {
return syncJobConfigFieldService;
}
public void setSyncJobConfigFieldService(SyncJobConfigFieldService syncJobConfigFieldService) {
this.syncJobConfigFieldService = syncJobConfigFieldService;
}
static {
mapperList.add(new ColumnFieldMapper("id", "id", "String"));
@@ -129,7 +289,7 @@ public class JdbcOrganizationService extends AbstractSynchronizerService impleme
mapperList.add(new ColumnFieldMapper("fullname", "fullName", "String"));
mapperList.add(new ColumnFieldMapper("parentid", "parentId", "String"));
mapperList.add(new ColumnFieldMapper("parentcode", "parentCode", "String"));
mapperList.add(new ColumnFieldMapper("parentname", "parentName", "String"));
mapperList.add(new ColumnFieldMapper(" ", "parentName", "String"));
mapperList.add(new ColumnFieldMapper("type", "type", "String"));
mapperList.add(new ColumnFieldMapper("codepath", "codePath", "String"));

View File

@@ -24,22 +24,35 @@ import org.dromara.maxkey.entity.HistorySynchronizer;
import org.dromara.maxkey.entity.UserInfo;
import org.dromara.maxkey.synchronizer.AbstractSynchronizerService;
import org.dromara.maxkey.synchronizer.ISynchronizerService;
import org.dromara.maxkey.entity.SyncJobConfigField;
import org.dromara.maxkey.synchronizer.service.SyncJobConfigFieldService;
import org.dromara.maxkey.synchronizer.utils.MyResultSet;
import org.dromara.maxkey.util.JdbcUtils;
import org.dromara.maxkey.util.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.lang.reflect.InvocationTargetException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static org.dromara.maxkey.synchronizer.utils.FieldUtil.setFieldValue;
@Service
public class JdbcUsersService extends AbstractSynchronizerService implements ISynchronizerService {
final static Logger _logger = LoggerFactory.getLogger(JdbcUsersService.class);
@Autowired
public SyncJobConfigFieldService syncJobConfigFieldService;
private static final Integer USER_TYPE = 1;
static ArrayList<ColumnFieldMapper> mapperList = new ArrayList<>();
@Override
@@ -93,6 +106,65 @@ public class JdbcUsersService extends AbstractSynchronizerService implements ISy
}
}
public UserInfo buildUserInfoTemp(MyResultSet rs) throws SQLException {
//DbTableMetaData meta = JdbcUtils.getMetaData(rs);
UserInfo user = new UserInfo();
//basic
for (ColumnFieldMapper mapper : mapperList) {
if (rs.getColumnNames().contains(mapper.getColumn())) {
Object value = null;
if (mapper.getType().equalsIgnoreCase("String")) {
value = rs.getString(mapper.getColumn());
} else {
value = rs.getInt(mapper.getColumn());
}
if (value != null) {
try {
PropertyUtils.setSimpleProperty(user, mapper.getField(), value);
} catch (Exception e) {
_logger.error("setSimpleProperty {}", e);
}
}
}
}
if (rs.getColumnNames().contains("status")) {
user.setStatus(rs.getInt("status"));
} else {
user.setStatus(ConstsStatus.ACTIVE);
}
user.setInstId(synchronizer.getInstId());
//password
if (rs.getColumnNames().contains("password")) {
user.setPassword(rs.getString("password"));
} else {
//后4位
String last4Char = "6666";
if (StringUtils.isNotBlank(user.getIdCardNo())) {
last4Char = user.getIdCardNo().substring(user.getIdCardNo().length() - 4);
} else if (StringUtils.isNotBlank(user.getMobile())) {
last4Char = user.getMobile().substring(user.getMobile().length() - 4);
} else if (StringUtils.isNotBlank(user.getEmployeeNumber())) {
last4Char = user.getEmployeeNumber().substring(user.getEmployeeNumber().length() - 4);
}
user.setPassword(user.getUsername() + "@M" + last4Char);
}
/*HistorySynchronizer historySynchronizer = new HistorySynchronizer();
historySynchronizer.setId(historySynchronizer.generateId());
historySynchronizer.setSyncId(synchronizer.getId());
historySynchronizer.setSyncName(synchronizer.getName());
historySynchronizer.setObjectId(user.getId());
historySynchronizer.setObjectName(user.getUsername());
historySynchronizer.setObjectType(UserInfo.class.getSimpleName());
historySynchronizer.setInstId(synchronizer.getInstId());
historySynchronizer.setResult("success");
historySynchronizerService.insert(historySynchronizer);*/
_logger.debug("User {} ", user);
return user;
}
public UserInfo buildUserInfo(ResultSet rs) throws SQLException {
DbTableMetaData meta = JdbcUtils.getMetaData(rs);
UserInfo user = new UserInfo();
@@ -153,6 +225,137 @@ public class JdbcUsersService extends AbstractSynchronizerService implements ISy
return user;
}
public UserInfo buildUserInfoByFieldMapTemp(MyResultSet rs) throws SQLException, InvocationTargetException, NoSuchMethodException, IllegalAccessException {
//DbTableMetaData meta = JdbcUtils.getMetaData(rs);
UserInfo user = new UserInfo();
Map<String, String> fieldMap = getFieldMap(Long.parseLong(synchronizer.getId()));
for(Map.Entry<String,String> entry: fieldMap.entrySet()){
String column = entry.getValue();
String field = entry.getKey();
Object value = null;
if(rs.getColumnNames().contains(column) && !field.equals("status") && !field.equals("password")){
value = rs.getObject(column);
if(value!=null){
setFieldValue(user,field,value);
}
}
}
//password的获取和user的其他属性相关如果在遍历过程中进行属性映射需要在password映射之前先完成其他属性的映射
if (rs.getColumnNames().contains("status")) {
user.setStatus(rs.getInt("status"));
} else {
user.setStatus(ConstsStatus.ACTIVE);
}
user.setInstId(synchronizer.getInstId());
// password
if (rs.getColumnNames().contains("password")) {
user.setPassword(rs.getString("password"));
} else {
String last4Char = "6666";
if (StringUtils.isNotBlank(user.getIdCardNo())) {
last4Char = user.getIdCardNo().substring(user.getIdCardNo().length() - 4);
} else if (StringUtils.isNotBlank(user.getMobile())) {
last4Char = user.getMobile().substring(user.getMobile().length() - 4);
} else if (StringUtils.isNotBlank(user.getEmployeeNumber())) {
last4Char = user.getEmployeeNumber().substring(user.getEmployeeNumber().length() - 4);
}
user.setPassword(user.getUsername() + "@M" + last4Char);
}
/*HistorySynchronizer historySynchronizer = new HistorySynchronizer();
historySynchronizer.setId(historySynchronizer.generateId());
historySynchronizer.setSyncId(synchronizer.getId());
historySynchronizer.setSyncName(synchronizer.getName());
historySynchronizer.setObjectId(user.getId());
historySynchronizer.setObjectName(user.getUsername());
historySynchronizer.setObjectType(UserInfo.class.getSimpleName());
historySynchronizer.setInstId(synchronizer.getInstId());
historySynchronizer.setResult("success");
historySynchronizerService.insert(historySynchronizer);
_logger.debug("User {} ", user);*/
return user;
}
public UserInfo buildUserInfoByFieldMap(ResultSet rs) throws SQLException, InvocationTargetException, NoSuchMethodException, IllegalAccessException {
DbTableMetaData meta = JdbcUtils.getMetaData(rs);
UserInfo user = new UserInfo();
Map<String, String> fieldMap = getFieldMap(Long.parseLong(synchronizer.getId()));
for(Map.Entry<String,String> entry: fieldMap.entrySet()){
String column = entry.getValue();
String field = entry.getKey();
Object value = null;
if(meta.getColumnsMap().containsKey(column) && !field.equals("status") && !field.equals("password")){
value = rs.getObject(column);
if(value!=null){
setFieldValue(user,field,value);
}
}
}
user.setUserType("EMPLOYEE");
user.setUserState("RESIDENT");
//password的获取和user的其他属性相关如果在遍历过程中进行属性映射需要在password映射之前先完成其他属性的映射
if (meta.getColumnsMap().containsKey("status")) {
user.setStatus(rs.getInt("status"));
} else {
user.setStatus(ConstsStatus.ACTIVE);
}
user.setInstId(synchronizer.getInstId());
// password
if (meta.getColumnsMap().containsKey("password")) {
user.setPassword(rs.getString("password"));
} else {
String last4Char = "6666";
if (StringUtils.isNotBlank(user.getIdCardNo())) {
last4Char = user.getIdCardNo().substring(user.getIdCardNo().length() - 4);
} else if (StringUtils.isNotBlank(user.getMobile())) {
last4Char = user.getMobile().substring(user.getMobile().length() - 4);
} else if (StringUtils.isNotBlank(user.getEmployeeNumber())) {
last4Char = user.getEmployeeNumber().substring(user.getEmployeeNumber().length() - 4);
}
user.setPassword(user.getUsername() + "@M" + last4Char);
}
HistorySynchronizer historySynchronizer = new HistorySynchronizer();
historySynchronizer.setId(historySynchronizer.generateId());
historySynchronizer.setSyncId(synchronizer.getId());
historySynchronizer.setSyncName(synchronizer.getName());
historySynchronizer.setObjectId(user.getId());
historySynchronizer.setObjectName(user.getUsername());
historySynchronizer.setObjectType(UserInfo.class.getSimpleName());
historySynchronizer.setInstId(synchronizer.getInstId());
historySynchronizer.setResult("success");
historySynchronizerService.insert(historySynchronizer);
_logger.debug("User {} ", user);
return user;
}
public Map<String,String> getFieldMap(Long jobId){
Map<String,String> fieldMap = new HashMap<>();
//根据job id查询属性映射表
List<SyncJobConfigField> syncJobConfigFieldList = syncJobConfigFieldService.findByJobId(jobId);
//获取用户属性映射
for(SyncJobConfigField element:syncJobConfigFieldList){
if(Integer.parseInt(element.getObjectType()) == USER_TYPE.intValue()){
fieldMap.put(element.getTargetField(), element.getSourceField());
}
}
return fieldMap;
}
public SyncJobConfigFieldService getSyncJobConfigFieldService() {
return syncJobConfigFieldService;
}
public void setSyncJobConfigFieldService(SyncJobConfigFieldService syncJobConfigFieldService) {
this.syncJobConfigFieldService = syncJobConfigFieldService;
}
static {
mapperList.add(new ColumnFieldMapper("id", "id", "String"));
mapperList.add(new ColumnFieldMapper("username", "username", "String"));
@@ -191,7 +394,7 @@ public class JdbcUsersService extends AbstractSynchronizerService implements ISy
mapperList.add(new ColumnFieldMapper("homestreetaddress", "homeStreetAddress", "String"));
mapperList.add(new ColumnFieldMapper("homeaddressformatted", "homeAddressFormatted", "String"));
mapperList.add(new ColumnFieldMapper("homeemail", "homeEmail", "String"));
mapperList.add(new ColumnFieldMapper("homephonenumber", "homePhonenumber", "String"));
mapperList.add(new ColumnFieldMapper("homephoneNumber", "homePhonenumber", "String"));
mapperList.add(new ColumnFieldMapper("homepostalcode", "homePostalCode", "String"));
mapperList.add(new ColumnFieldMapper("homefax", "homeFax", "String"));
//company
@@ -207,8 +410,8 @@ public class JdbcUsersService extends AbstractSynchronizerService implements ISy
mapperList.add(new ColumnFieldMapper("manager", "manager", "String"));
mapperList.add(new ColumnFieldMapper("assistantid", "assistantId", "String"));
mapperList.add(new ColumnFieldMapper("assistant", "assistant", "String"));
mapperList.add(new ColumnFieldMapper("entrydate", "entrydate", "String"));
mapperList.add(new ColumnFieldMapper("quitdate", "quitdate", "String"));
mapperList.add(new ColumnFieldMapper("entryDate", "entrydate", "String"));
mapperList.add(new ColumnFieldMapper("quitDate", "quitdate", "String"));
mapperList.add(new ColumnFieldMapper("ldapdn", "ldapDn", "String"));
mapperList.add(new ColumnFieldMapper("description", "description", "String"));