You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
257 lines
9.1 KiB
257 lines
9.1 KiB
package com.fr.plugin.user.tuomin.controller; |
|
|
|
import com.fr.decision.authority.base.constant.type.operation.SyncOperationType; |
|
import com.fr.decision.authority.controller.personnel.PersonnelController; |
|
import com.fr.decision.authority.controller.personnel.PersonnelWork; |
|
import com.fr.decision.sync.CascadeData; |
|
import com.fr.decision.sync.SourceConflictData; |
|
import com.fr.decision.sync.SourceConflictStrategy; |
|
import com.fr.decision.sync.SyncDetail; |
|
import com.fr.decision.sync.data.RowData; |
|
import com.fr.decision.sync.result.FailedData; |
|
import com.fr.decision.sync.result.SyncResultData; |
|
import com.fr.decision.sync.result.SyncWorkResult; |
|
import com.fr.decision.sync.work.SyncWork; |
|
import com.fr.decision.sync.work.impl.*; |
|
import com.fr.decision.webservice.interceptor.handler.PreHandlerFactory; |
|
import com.fr.general.data.DataModel; |
|
import com.fr.log.FineLoggerFactory; |
|
import com.fr.script.Calculator; |
|
|
|
import java.lang.reflect.Field; |
|
import java.util.Iterator; |
|
import java.util.Map; |
|
import java.util.Set; |
|
import java.util.TreeMap; |
|
import java.util.Map.Entry; |
|
import java.util.regex.Matcher; |
|
import java.util.regex.Pattern; |
|
|
|
public class TableDataSyncAction implements PersonnelWork { |
|
private SyncDetail syncDetail; |
|
private DataModel dm; |
|
private Map<Integer, SyncWork> syncWorks = new TreeMap(); |
|
private UserSyncWork userSyncWork; |
|
|
|
public static com.fr.plugin.user.tuomin.controller.TableDataSyncAction create(SyncDetail var0) { |
|
return new com.fr.plugin.user.tuomin.controller.TableDataSyncAction(var0); |
|
} |
|
|
|
private TableDataSyncAction(SyncDetail var1) { |
|
this.syncDetail = var1; |
|
this.dm = var1.getSyncSource().buildTableData(var1.getDataSetName()).createDataModelWithTimeout(Calculator.createCalculator(), (int)var1.getRate()); |
|
} |
|
|
|
public void before(PersonnelController var1) throws Exception { |
|
this.registerSyncWorks(var1); |
|
this.checkPlatformDirtyData(); |
|
} |
|
|
|
|
|
private static final String PW_PATTERN = "^(?![A-Za-z0-9]+$)(?![a-z0-9\\W]+$)(?![A-Za-z\\W]+$)(?![A-Z0-9\\W]+$)[a-zA-Z0-9\\W]{8,}$"; |
|
|
|
private boolean validatePwd(String pswd,String userName){ |
|
boolean falg = false; |
|
try { |
|
if (null==pswd&&pswd.isEmpty()&&pswd.length()>9){ |
|
return falg; |
|
} |
|
//不全是特殊符号 不全是数字 不全是字母 不全是大写 不全是小写 |
|
if (pswd.matches(PW_PATTERN)){ |
|
falg = true; |
|
} |
|
|
|
} catch (Exception e) { |
|
falg = false; |
|
} |
|
|
|
if(falg == false){ |
|
FineLoggerFactory.getLogger().info("密码强度验证:长度,大小写字母,符号不符合"); |
|
return false; |
|
} |
|
|
|
if(pswd.toLowerCase().indexOf(userName.toLowerCase()) != -1){ |
|
FineLoggerFactory.getLogger().info("密码强度验证:密码不能包含用户名"); |
|
return false; |
|
} |
|
return true; |
|
} |
|
|
|
public SyncResultData execute(PersonnelController var1) throws Exception { |
|
this.clearDiffSource(); |
|
this.preparePlatformData(); |
|
this.beforePrepareSyncData(); |
|
this.prepareSyncData(); |
|
this.afterPrepareSyncData(); |
|
Field[] fileds = this.userSyncWork.getClass().getDeclaredFields(); |
|
for(int i = 0 ; i < fileds.length;i++) { |
|
Field field = fileds[i]; |
|
String fieldName = field.getName(); |
|
FineLoggerFactory.getLogger().info("fieldName:"+fieldName); |
|
if(fieldName.equals("syncNamePasswordMap")){ |
|
try { |
|
field.setAccessible(true); |
|
Object obj = field.get( this.userSyncWork); |
|
Map<String, String> syncNamePasswordMap = (Map<String, String>)obj; |
|
FineLoggerFactory.getLogger().info("一共有几个用户导入:"+syncNamePasswordMap.size()); |
|
Set<String> keys = syncNamePasswordMap.keySet(); |
|
for(String key : keys){ |
|
String pwd = syncNamePasswordMap.get(key).toString(); |
|
//这里判断密码强度 |
|
boolean isOk = validatePwd(pwd,key); |
|
|
|
if(isOk == false){ |
|
SyncResultData resultData = new SyncResultData(); |
|
resultData.setSuccessUserCount(-100); |
|
return resultData; |
|
} |
|
} |
|
} |
|
catch (IllegalAccessException e) { |
|
e.printStackTrace(); |
|
} |
|
} |
|
} |
|
|
|
this.sourceCover(); |
|
this.addOrUpdate(); |
|
this.delete(); |
|
return this.over(); |
|
} |
|
|
|
private void registerSyncWorks(PersonnelController var1) { |
|
this.userSyncWork = new UserSyncWork(var1, this.syncDetail); |
|
SyncWork[] var2 = new SyncWork[]{userSyncWork, new DepartmentSyncWork(var1, this.syncDetail), new PostSyncWork(var1, this.syncDetail), new CustomRoleSyncWork(var1, this.syncDetail), new DepRoleSyncWork(var1, this.syncDetail), new UserRoleMiddleSyncWork(var1, this.syncDetail)}; |
|
SyncWork[] var3 = var2; |
|
int var4 = var2.length; |
|
|
|
for(int var5 = 0; var5 < var4; ++var5) { |
|
SyncWork var6 = var3[var5]; |
|
this.syncWorks.put(var6.processOrder(), var6); |
|
} |
|
|
|
} |
|
|
|
private void checkPlatformDirtyData() throws Exception { |
|
Iterator var1 = this.syncWorks.values().iterator(); |
|
|
|
while(var1.hasNext()) { |
|
SyncWork var2 = (SyncWork)var1.next(); |
|
var2.checkPlatformDirtyData(); |
|
} |
|
|
|
} |
|
|
|
private void preparePlatformData() throws Exception { |
|
Iterator var1 = this.syncWorks.values().iterator(); |
|
|
|
while(var1.hasNext()) { |
|
SyncWork var2 = (SyncWork)var1.next(); |
|
var2.preparePlatformData(); |
|
} |
|
|
|
} |
|
|
|
private void beforePrepareSyncData() throws Exception { |
|
Iterator var1 = this.syncWorks.values().iterator(); |
|
|
|
while(var1.hasNext()) { |
|
SyncWork var2 = (SyncWork)var1.next(); |
|
var2.beforePrepareSyncData(this.dm); |
|
} |
|
|
|
} |
|
|
|
private void prepareSyncData() throws Exception { |
|
for(int var1 = 0; var1 < this.dm.getRowCount(); ++var1) { |
|
RowData var2 = new RowData(var1); |
|
Iterator var3 = this.syncWorks.values().iterator(); |
|
|
|
while(var3.hasNext()) { |
|
SyncWork var4 = (SyncWork)var3.next(); |
|
var4.prepareSyncData(this.dm, var2); |
|
} |
|
} |
|
|
|
this.dm.release(); |
|
} |
|
|
|
private void afterPrepareSyncData() throws Exception { |
|
CascadeData var1 = new CascadeData(); |
|
|
|
SyncWork var3; |
|
for(Iterator var2 = this.syncWorks.values().iterator(); var2.hasNext(); var1 = var3.afterPrepareSyncData(var1)) { |
|
var3 = (SyncWork)var2.next(); |
|
} |
|
|
|
} |
|
|
|
private void sourceCover() throws Exception { |
|
SourceConflictData var1 = new SourceConflictData(); |
|
|
|
SyncWork var3; |
|
for(Iterator var2 = this.syncWorks.values().iterator(); var2.hasNext(); var1 = var3.resolveSourceConflict(var1)) { |
|
var3 = (SyncWork)var2.next(); |
|
} |
|
|
|
} |
|
|
|
private void addOrUpdate() throws Exception { |
|
Iterator var1 = this.syncWorks.values().iterator(); |
|
|
|
while(var1.hasNext()) { |
|
SyncWork var2 = (SyncWork)var1.next(); |
|
var2.addOrUpdate(); |
|
} |
|
|
|
} |
|
|
|
private void delete() throws Exception { |
|
if (this.syncDetail.getOperationType() == SyncOperationType.KEY) { |
|
CascadeData var1 = new CascadeData(); |
|
Iterator var2 = this.syncWorks.values().iterator(); |
|
|
|
while(var2.hasNext()) { |
|
SyncWork var3 = (SyncWork)var2.next(); |
|
var3.delete(var1); |
|
} |
|
|
|
} |
|
} |
|
|
|
private void clearDiffSource() throws Exception { |
|
if (this.syncDetail.getSourceConflictStrategy() == SourceConflictStrategy.CLEAR) { |
|
SyncWork[] var1 = new SyncWork[]{(SyncWork)this.syncWorks.get(1), (SyncWork)this.syncWorks.get(5), (SyncWork)this.syncWorks.get(2), (SyncWork)this.syncWorks.get(3), (SyncWork)this.syncWorks.get(4)}; |
|
SyncWork[] var2 = var1; |
|
int var3 = var1.length; |
|
|
|
for(int var4 = 0; var4 < var3; ++var4) { |
|
SyncWork var5 = var2[var4]; |
|
var5.clearDiffSource(); |
|
} |
|
} |
|
|
|
} |
|
|
|
private SyncResultData over() throws Exception { |
|
SyncResultData var1 = new SyncResultData(); |
|
Iterator var2 = this.syncWorks.entrySet().iterator(); |
|
|
|
while(var2.hasNext()) { |
|
Entry var3 = (Entry)var2.next(); |
|
SyncWorkResult var4 = ((SyncWork)var3.getValue()).over(); |
|
if (var4 != null) { |
|
if ((Integer)var3.getKey() == 1) { |
|
var1.setSuccessUserCount(var4.getAddOrUpdateCount()); |
|
var1.setCurrentUserCount(var4.getCurrentCount()); |
|
} |
|
|
|
var1.addFailedData(var4.getRoleType(), (FailedData[])var4.getFailedData().toArray(new FailedData[0])); |
|
var1.addOtherSourceRole(var4.getRoleType(), (String[])var4.getDiffSourceData().toArray(new String[0])); |
|
} |
|
} |
|
|
|
return var1; |
|
} |
|
} |
|
|
|
|