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.

133 lines
6.3 KiB

2 years ago
package com.fr.plugin.user.tuomin.controller;
import com.fr.config.Configuration;
import com.fr.decision.authority.AuthorityContext;
import com.fr.decision.authority.base.constant.type.operation.ManualOperationType;
import com.fr.decision.config.Encryption;
import com.fr.decision.config.EncryptionConfig;
import com.fr.decision.config.SystemConfig;
import com.fr.decision.config.UserDataSetConfig;
import com.fr.decision.sync.SyncDetail;
import com.fr.decision.sync.SyncUserStatus;
import com.fr.decision.sync.result.SyncResultData;
import com.fr.decision.webservice.Response;
import com.fr.decision.webservice.annotation.DecisionControllerLog;
import com.fr.decision.webservice.annotation.LoginStatusChecker;
import com.fr.decision.webservice.annotation.VisitRefer;
import com.fr.decision.webservice.bean.user.UserDataSetBean;
import com.fr.decision.webservice.bean.user.UserImportOperation;
import com.fr.decision.webservice.exception.user.EncryptChangeUserNotCleanupException;
import com.fr.decision.webservice.v10.login.LoginService;
import com.fr.decision.webservice.v10.user.UserService;
import com.fr.general.ComparatorUtils;
import com.fr.intelligence.IntelligenceRuntimeException;
import com.fr.log.FineLoggerFactory;
import com.fr.record.analyzer.EnableMetrics;
import com.fr.stable.query.QueryFactory;
import com.fr.stable.query.restriction.RestrictionFactory;
import com.fr.third.springframework.stereotype.Controller;
import com.fr.third.springframework.web.bind.annotation.*;
import com.fr.transaction.Configurations;
import com.fr.transaction.Worker;
import com.fr.transaction.WorkerAdaptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@EnableMetrics
@Controller
@LoginStatusChecker(
required = false
)
@RequestMapping({"/{version}"})
public class UserTMController {
@RequestMapping(
value = {"/dataset/newUsers"},
method = {RequestMethod.POST}
)
@VisitRefer(
refer = {"decision-management-user-add"}
)
@ResponseBody
public Response importUser(HttpServletRequest req, HttpServletResponse res, @PathVariable("version") String version, @RequestBody UserDataSetBean userDataSet, @RequestParam(value = "importOp",required = false,defaultValue = "0") int importOp) throws Exception {
String currentUser = LoginService.getInstance().getUserNameFromRequest(req);
FineLoggerFactory.getLogger().info("导入数据......");
SyncUserStatus status = importUsers(currentUser, userDataSet, UserImportOperation.parse(importOp));
if(status.getResultData().getSuccessUserCount() == -100){
return Response.error("500","导入失败,用户密码不满足密码强度");
}
else{
return Response.ok(status);
}
}
public SyncUserStatus importUsers(String currentUserName, UserDataSetBean userDataSetBean, UserImportOperation userImportOperation) throws Exception {
Encryption oldEncryption = EncryptionConfig.getInstance().getEncryption(ManualOperationType.KEY);
int oldEmbedEncryption = oldEncryption.getEncryption();
final int newEmbedEncryption = userDataSetBean.getEncryption();
final String newEmbedCustomEncrypt = userDataSetBean.getCustomEncrypt();
boolean encryptionChanged = !ComparatorUtils.equals(oldEmbedEncryption, newEmbedEncryption) || !ComparatorUtils.equals(oldEncryption.getCustomEncrypt(), userDataSetBean.getCustomEncrypt());
userDataSetBean.setTurnOn(false);
if (userImportOperation != UserImportOperation.CLEAR && encryptionChanged) {
throw new EncryptChangeUserNotCleanupException();
} else {
if (userImportOperation == UserImportOperation.CLEAR) {
UserService.getInstance().deleteAllCommonUsers((String)UserService.getInstance().getAdminUserNameList().get(0));
AuthorityContext.getInstance().getCustomRoleController().remove(QueryFactory.create().addRestriction(RestrictionFactory.eq("creationType", ManualOperationType.KEY)).addRestriction(RestrictionFactory.neq("id", "super-user-custom-role")));
AuthorityContext.getInstance().getDepartmentController().remove(QueryFactory.create().addRestriction(RestrictionFactory.eq("creationType", ManualOperationType.KEY)));
AuthorityContext.getInstance().getPostController().remove(QueryFactory.create().addRestriction(RestrictionFactory.eq("creationType", ManualOperationType.KEY)));
}
Configurations.update(new Worker() {
public void run() {
Encryption embedEncrypt = new Encryption();
embedEncrypt.setEncryption(newEmbedEncryption);
embedEncrypt.setCustomEncrypt(newEmbedCustomEncrypt);
EncryptionConfig.getInstance().removeEncryption(ManualOperationType.KEY);
EncryptionConfig.getInstance().setEncryption(ManualOperationType.KEY, embedEncrypt);
}
public Class<? extends Configuration>[] targets() {
return new Class[]{UserDataSetConfig.class, EncryptionConfig.class};
}
});
SyncUserStatus var10;
try {
SyncDetail detail = SyncDetail.parse(userDataSetBean);
SyncResultData syncResultData = AuthorityContext.getInstance().doPersonnelWork(TableDataSyncAction.create(detail));
SyncUserStatus var11 = (new SyncUserStatus()).resultData(syncResultData);
return var11;
} catch (IntelligenceRuntimeException var15) {
var10 = (new SyncUserStatus()).status(SyncUserStatus.Status.FAIL).error(var15);
} finally {
if (userImportOperation == UserImportOperation.CLEAR && encryptionChanged) {
class NamelessClass_1 extends WorkerAdaptor {
NamelessClass_1(Class x0, Class... x1) {
super(x0, x1);
}
public void run() {
SystemConfig.getInstance().setServerInitStatus("fail");
}
}
Configurations.update(new NamelessClass_1(SystemConfig.class, new Class[0]));
}
}
return var10;
}
}
}