synchronizer jdbc & optimize
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright [2021] [MaxKey of copyright http://www.maxkey.top]
|
||||
* Copyright [2022] [MaxKey of copyright http://www.maxkey.top]
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -19,8 +19,12 @@ package org.maxkey.synchronizer.jdbc;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.sql.Statement;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.maxkey.constants.ConstsStatus;
|
||||
import org.maxkey.entity.DbTableMetaData;
|
||||
import org.maxkey.entity.Organizations;
|
||||
import org.maxkey.synchronizer.AbstractSynchronizerService;
|
||||
import org.maxkey.synchronizer.ISynchronizerService;
|
||||
@@ -32,54 +36,131 @@ import org.springframework.stereotype.Service;
|
||||
@Service
|
||||
public class JdbcOrganizationService extends AbstractSynchronizerService implements ISynchronizerService{
|
||||
final static Logger _logger = LoggerFactory.getLogger(JdbcOrganizationService.class);
|
||||
|
||||
Connection conn = null;
|
||||
Statement stmt = null;
|
||||
ResultSet rs = null;
|
||||
|
||||
String querySql = "select * from org";
|
||||
|
||||
public void sync() {
|
||||
Connection conn = null;
|
||||
Statement stmt = null;
|
||||
ResultSet rs = null;
|
||||
try {
|
||||
conn = JdbcUtils.connect(
|
||||
synchronizer.getProviderUrl(),
|
||||
synchronizer.getPrincipal(),
|
||||
synchronizer.getCredentials(),
|
||||
synchronizer.getDriverClass());
|
||||
|
||||
stmt = conn.createStatement();
|
||||
rs = stmt.executeQuery(querySql);
|
||||
while(rs.next()) {
|
||||
Organizations queryOrg = this.organizationsService.get(rs.getString("id"));
|
||||
if(queryOrg == null) {
|
||||
if(StringUtils.isNotBlank(synchronizer.getOrgFilters())){
|
||||
_logger.info("Sync Org Filters {}",synchronizer.getOrgFilters());
|
||||
conn = JdbcUtils.connect(
|
||||
synchronizer.getProviderUrl(),
|
||||
synchronizer.getPrincipal(),
|
||||
synchronizer.getCredentials(),
|
||||
synchronizer.getDriverClass());
|
||||
|
||||
stmt = conn.createStatement();
|
||||
rs = stmt.executeQuery(synchronizer.getOrgFilters());
|
||||
while(rs.next()) {
|
||||
Organizations org = buildOrganization(rs);
|
||||
organizationsService.insert(org);
|
||||
}else{
|
||||
//this.organizationsService.update(org);
|
||||
Organizations queryOrg = this.organizationsService.get(org.getId());
|
||||
if(queryOrg == null) {
|
||||
organizationsService.insert(org);
|
||||
}else{
|
||||
this.organizationsService.update(org);
|
||||
}
|
||||
}
|
||||
}
|
||||
JdbcUtils.release(conn, stmt, rs);
|
||||
} catch (Exception e) {
|
||||
_logger.error("Exception " , e);
|
||||
}finally {
|
||||
JdbcUtils.release(conn, stmt, rs);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public Organizations buildOrganization(ResultSet rs) {
|
||||
try {
|
||||
Organizations org = new Organizations();
|
||||
|
||||
org.setId(org.generateId());
|
||||
org.setOrgCode(rs.getString("code"));
|
||||
org.setOrgName(rs.getString("orgname"));
|
||||
org.setInstId(this.synchronizer.getInstId());
|
||||
public Organizations buildOrganization(ResultSet rs) throws SQLException {
|
||||
DbTableMetaData meta = JdbcUtils.getMetaData(rs);
|
||||
Organizations org = new Organizations();
|
||||
if(meta.getColumnsMap().containsKey("id")) {
|
||||
org.setId(org.generateId());
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("orgcode")) {
|
||||
org.setOrgCode(rs.getString("orgcode"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("orgname")) {
|
||||
org.setOrgName(rs.getString("orgname"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("fullname")) {
|
||||
org.setFullName(rs.getString("fullname"));
|
||||
}
|
||||
//parent
|
||||
if(meta.getColumnsMap().containsKey("parentid")) {
|
||||
org.setParentId(rs.getString("parentid"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("parentcode")) {
|
||||
org.setParentCode(rs.getString("parentcode"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("parentname")) {
|
||||
org.setParentName(rs.getString("parentname"));
|
||||
}
|
||||
//ex attr
|
||||
if(meta.getColumnsMap().containsKey("type")) {
|
||||
org.setType(rs.getString("type"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("codepath")) {
|
||||
org.setCodePath(rs.getString("codepath"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("namepath")) {
|
||||
org.setNamePath(rs.getString("namepath"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("level")) {
|
||||
org.setLevel(rs.getInt("level"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("haschild")) {
|
||||
org.setHasChild(rs.getString("haschild"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("division")) {
|
||||
org.setDivision(rs.getString("division"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("country")) {
|
||||
org.setCountry(rs.getString("country"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("region")) {
|
||||
org.setRegion(rs.getString("region"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("locality")) {
|
||||
org.setLocality(rs.getString("locality"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("street")) {
|
||||
org.setStreet(rs.getString("street"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("address")) {
|
||||
org.setAddress(rs.getString("address"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("contact")) {
|
||||
org.setContact(rs.getString("contact"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("postalcode")) {
|
||||
org.setPostalCode(rs.getString("postalcode"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("phone")) {
|
||||
org.setPhone(rs.getString("phone"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("fax")) {
|
||||
org.setFax(rs.getString("fax"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("email")) {
|
||||
org.setEmail(rs.getString("email"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("sortindex")) {
|
||||
org.setSortIndex(rs.getInt("sortindex"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("ldapdn")) {
|
||||
org.setLdapDn(rs.getString("ldapdn"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("description")) {
|
||||
org.setDescription(rs.getString("description"));
|
||||
}
|
||||
org.setInstId(this.synchronizer.getInstId());
|
||||
if(meta.getColumnsMap().containsKey("status")) {
|
||||
org.setStatus(rs.getInt("status"));
|
||||
}else {
|
||||
org.setStatus(ConstsStatus.ACTIVE);
|
||||
|
||||
_logger.debug("Organization " + org);
|
||||
return org;
|
||||
} catch (Exception e) {
|
||||
_logger.error("NamingException " , e);
|
||||
}
|
||||
return null;
|
||||
|
||||
_logger.debug("Organization {}" , org);
|
||||
return org;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,6 +23,7 @@ import java.sql.SQLException;
|
||||
import java.sql.Statement;
|
||||
|
||||
import org.maxkey.constants.ConstsStatus;
|
||||
import org.maxkey.entity.DbTableMetaData;
|
||||
import org.maxkey.entity.UserInfo;
|
||||
import org.maxkey.synchronizer.AbstractSynchronizerService;
|
||||
import org.maxkey.synchronizer.ISynchronizerService;
|
||||
@@ -36,61 +37,248 @@ import org.springframework.stereotype.Service;
|
||||
public class JdbcUsersService extends AbstractSynchronizerService implements ISynchronizerService{
|
||||
final static Logger _logger = LoggerFactory.getLogger(JdbcUsersService.class);
|
||||
|
||||
Connection conn = null;
|
||||
Statement stmt = null;
|
||||
ResultSet rs = null;
|
||||
|
||||
String querySql = "select * from account";
|
||||
public void sync() {
|
||||
_logger.info("Sync Jdbc Users...");
|
||||
Connection conn = null;
|
||||
Statement stmt = null;
|
||||
ResultSet rs = null;
|
||||
|
||||
try {
|
||||
conn = JdbcUtils.connect(
|
||||
synchronizer.getProviderUrl(),
|
||||
synchronizer.getPrincipal(),
|
||||
synchronizer.getCredentials(),
|
||||
synchronizer.getDriverClass());
|
||||
|
||||
stmt = conn.createStatement();
|
||||
rs = stmt.executeQuery(querySql);
|
||||
long insertCount = 0;
|
||||
long updateCount = 0;
|
||||
long readCount = 0;
|
||||
while(rs.next()) {
|
||||
UserInfo queryUser = this.userInfoService.findByUsername(rs.getString("mobile"));
|
||||
readCount ++;
|
||||
if(queryUser == null) {
|
||||
if(StringUtils.isNotBlank(synchronizer.getOrgFilters())){
|
||||
_logger.info("Sync User Filters {}",synchronizer.getOrgFilters());
|
||||
conn = JdbcUtils.connect(
|
||||
synchronizer.getProviderUrl(),
|
||||
synchronizer.getPrincipal(),
|
||||
synchronizer.getCredentials(),
|
||||
synchronizer.getDriverClass());
|
||||
|
||||
stmt = conn.createStatement();
|
||||
rs = stmt.executeQuery(synchronizer.getUserFilters());
|
||||
long insertCount = 0;
|
||||
long updateCount = 0;
|
||||
long readCount = 0;
|
||||
while(rs.next()) {
|
||||
UserInfo user = buildUserInfo(rs);
|
||||
if(StringUtils.isBlank(rs.getString("password"))) {
|
||||
user.setPassword(rs.getString("mobile"));
|
||||
userInfoService.insert(user,true);
|
||||
}else {
|
||||
user.setPassword("{bcrypt}"+rs.getString("password"));
|
||||
userInfoService.insert(user,false);
|
||||
UserInfo queryUser = this.userInfoService.findByUsername(user.getUsername());
|
||||
readCount ++;
|
||||
if(queryUser == null) {
|
||||
if(user.getPassword().indexOf("{") > -1 && user.getPassword().indexOf("}") > -1) {
|
||||
userInfoService.insert(user,false);
|
||||
}else {
|
||||
//passwordEncoder
|
||||
userInfoService.insert(user,true);
|
||||
}
|
||||
user.setBadPasswordCount(1);
|
||||
insertCount++;
|
||||
}else{
|
||||
//no need update password , set null
|
||||
user.setPassword(null);
|
||||
userInfoService.update(user);
|
||||
updateCount++;
|
||||
}
|
||||
insertCount++;
|
||||
}else{
|
||||
//userInfoService.update(queryUser);
|
||||
updateCount++;
|
||||
_logger.trace("read Count {} , insert Count {} , updateCount {} " , readCount,insertCount,updateCount);
|
||||
}
|
||||
_logger.debug("read Count {} , insert Count {} , updateCount {} " , readCount,insertCount,updateCount);
|
||||
_logger.info("read Count {} , insert Count {} , updateCount {} " , readCount,insertCount,updateCount);
|
||||
}
|
||||
_logger.info("read Count {} , insert Count {} , updateCount {} " , readCount,insertCount,updateCount);
|
||||
JdbcUtils.release(conn, stmt, rs);
|
||||
} catch (Exception e) {
|
||||
_logger.error("Exception " , e);
|
||||
}finally {
|
||||
JdbcUtils.release(conn, stmt, rs);
|
||||
}
|
||||
}
|
||||
|
||||
public UserInfo buildUserInfo(ResultSet rs) throws SQLException {
|
||||
DbTableMetaData meta = JdbcUtils.getMetaData(rs);
|
||||
UserInfo user = new UserInfo();
|
||||
user.setId(rs.getString("id"));
|
||||
user.setUsername(rs.getString("mobile"));
|
||||
user.setDisplayName(rs.getString("nickname"));
|
||||
user.setNickName(rs.getString("nickname"));
|
||||
user.setMobile(rs.getString("mobile"));
|
||||
user.setEmail(rs.getString("email"));
|
||||
//basic
|
||||
if(meta.getColumnsMap().containsKey("id")) {
|
||||
user.setId(rs.getString("id"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("username")) {
|
||||
user.setUsername(rs.getString("username"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("picture")) {
|
||||
user.setPicture(rs.getBytes("picture"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("displayname")) {
|
||||
user.setDisplayName(rs.getString("displayname"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("nickname")) {
|
||||
user.setNickName(rs.getString("nickname"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("mobile")) {
|
||||
user.setMobile(rs.getString("mobile"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("email")) {
|
||||
user.setEmail(rs.getString("email"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("birthdate")) {
|
||||
user.setBirthDate(rs.getString("birthdate"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("usertype")) {
|
||||
user.setUserType(rs.getString("usertype"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("userstate")) {
|
||||
user.setUserState(rs.getString("userstate"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("windowsaccount")) {
|
||||
user.setWindowsAccount(rs.getString("windowsaccount"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("givenname")) {
|
||||
user.setGivenName(rs.getString("givenname"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("middlename")) {
|
||||
user.setMiddleName(rs.getString("middlename"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("married")) {
|
||||
user.setMarried(rs.getInt("married"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("gender")) {
|
||||
user.setGender(rs.getInt("gender"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("idtype")) {
|
||||
user.setIdType(rs.getInt("idtype"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("idcardno")) {
|
||||
user.setIdCardNo(rs.getString("idcardno"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("website")) {
|
||||
user.setWebSite(rs.getString("website"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("startworkdate")) {
|
||||
user.setStartWorkDate(rs.getString("startworkdate"));
|
||||
}
|
||||
//work
|
||||
if(meta.getColumnsMap().containsKey("workcountry")) {
|
||||
user.setWorkCountry(rs.getString("workcountry"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("workregion")) {
|
||||
user.setWorkRegion(rs.getString("workregion"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("worklocality")) {
|
||||
user.setWorkLocality(rs.getString("worklocality"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("workstreetaddress")) {
|
||||
user.setWorkStreetAddress(rs.getString("workstreetaddress"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("workaddressformatted")) {
|
||||
user.setWorkAddressFormatted(rs.getString("workaddressformatted"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("workemail")) {
|
||||
user.setWorkEmail(rs.getString("workemail"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("workphonenumber")) {
|
||||
user.setWorkPhoneNumber(rs.getString("workphonenumber"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("workpostalcode")) {
|
||||
user.setWorkPostalCode(rs.getString("workpostalcode"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("workfax")) {
|
||||
user.setWorkFax(rs.getString("workfax"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("workofficename")) {
|
||||
user.setWorkOfficeName(rs.getString("workofficename"));
|
||||
}
|
||||
//home
|
||||
if(meta.getColumnsMap().containsKey("homecountry")) {
|
||||
user.setHomeCountry(rs.getString("homecountry"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("homeregion")) {
|
||||
user.setHomeRegion(rs.getString("homeregion"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("homelocality")) {
|
||||
user.setHomeLocality(rs.getString("homelocality"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("homestreetaddress")) {
|
||||
user.setHomeStreetAddress(rs.getString("homestreetaddress"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("homeaddressformatted")) {
|
||||
user.setHomeAddressFormatted(rs.getString("homeaddressformatted"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("homeemail")) {
|
||||
user.setHomeEmail(rs.getString("homeemail"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("homephonenumber")) {
|
||||
user.setHomePhoneNumber(rs.getString("homephonenumber"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("homepostalcode")) {
|
||||
user.setHomePostalCode(rs.getString("homepostalcode"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("homefax")) {
|
||||
user.setHomeFax(rs.getString("homefax"));
|
||||
}
|
||||
//company
|
||||
if(meta.getColumnsMap().containsKey("employeenumber")) {
|
||||
user.setEmployeeNumber(rs.getString("employeenumber"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("costcenter")) {
|
||||
user.setCostCenter(rs.getString("costcenter"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("organization")) {
|
||||
user.setOrganization(rs.getString("organization"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("division")) {
|
||||
user.setDivision(rs.getString("division"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("departmentid")) {
|
||||
user.setDepartmentId(rs.getString("departmentid"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("department")) {
|
||||
user.setDepartment(rs.getString("department"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("jobtitle")) {
|
||||
user.setJobTitle(rs.getString("jobtitle"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("joblevel")) {
|
||||
user.setJobLevel(rs.getString("joblevel"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("managerid")) {
|
||||
user.setManagerId(rs.getString("managerid"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("manager")) {
|
||||
user.setManager(rs.getString("manager"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("assistantid")) {
|
||||
user.setAssistantId(rs.getString("assistantid"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("assistant")) {
|
||||
user.setAssistant(rs.getString("assistant"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("entrydate")) {
|
||||
user.setEntryDate(rs.getString("entrydate"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("quitdate")) {
|
||||
user.setQuitDate(rs.getString("quitdate"));
|
||||
}
|
||||
//common
|
||||
if(meta.getColumnsMap().containsKey("ldapdn")) {
|
||||
user.setLdapDn(rs.getString("ldapdn"));
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("status")) {
|
||||
user.setStatus(rs.getInt("status"));
|
||||
}else {
|
||||
user.setStatus(ConstsStatus.ACTIVE);
|
||||
}
|
||||
if(meta.getColumnsMap().containsKey("description")) {
|
||||
user.setDescription(rs.getString("description"));
|
||||
}
|
||||
//password
|
||||
if(meta.getColumnsMap().containsKey("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);
|
||||
}
|
||||
user.setInstId(this.synchronizer.getInstId());
|
||||
user.setStatus(ConstsStatus.ACTIVE);
|
||||
_logger.debug("User {} " , user);
|
||||
return user;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user