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.
145 lines
7.0 KiB
145 lines
7.0 KiB
3 years ago
|
package com.fr.plugin.handers;
|
||
|
|
||
|
import com.fanruan.api.log.LogKit;
|
||
|
import com.fr.collections.FineCollections;
|
||
|
import com.fr.collections.api.FineLock;
|
||
|
import com.fr.decision.authority.AuthorityContext;
|
||
|
import com.fr.decision.authority.base.constant.type.operation.ManualOperationType;
|
||
|
import com.fr.decision.authority.controller.DepartmentController;
|
||
|
import com.fr.decision.authority.controller.PostController;
|
||
|
import com.fr.decision.authority.controller.UserController;
|
||
|
import com.fr.decision.authority.data.Department;
|
||
|
import com.fr.decision.authority.data.Post;
|
||
|
import com.fr.decision.authority.data.User;
|
||
|
import com.fr.decision.fun.impl.BaseHttpHandler;
|
||
|
import com.fr.json.JSONObject;
|
||
|
import com.fr.log.FineLoggerFactory;
|
||
|
import com.fr.plugin.HttpUtils;
|
||
|
import com.fr.plugin.SafeCheckUtils;
|
||
|
import com.fr.plugin.transform.ExecuteFunctionRecord;
|
||
|
import com.fr.plugin.transform.FunctionRecorder;
|
||
|
import com.fr.stable.StringUtils;
|
||
|
import com.fr.stable.query.QueryFactory;
|
||
|
import com.fr.stable.query.data.DataList;
|
||
|
import com.fr.stable.query.restriction.RestrictionFactory;
|
||
|
import com.fr.third.springframework.web.bind.annotation.RequestMethod;
|
||
|
import com.fr.web.utils.WebUtils;
|
||
|
|
||
|
import javax.servlet.http.HttpServletRequest;
|
||
|
import javax.servlet.http.HttpServletResponse;
|
||
|
import java.util.List;
|
||
|
import java.util.concurrent.TimeUnit;
|
||
|
|
||
|
@FunctionRecorder
|
||
|
public class SynPositionHander extends BaseHttpHandler {
|
||
|
@Override
|
||
|
public RequestMethod getMethod() {
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public String getPath() {
|
||
|
return "/positions";
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public boolean isPublic() {
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
@ExecuteFunctionRecord
|
||
|
public void handle(HttpServletRequest req, HttpServletResponse httpServletResponse) throws Exception {
|
||
|
String body = HttpUtils.inputStream2String(req.getInputStream());
|
||
|
if (StringUtils.isNotBlank(body)) {
|
||
|
String xtime = req.getHeader("xtime");
|
||
|
String xsign = req.getHeader("xkey");
|
||
|
// if (!SafeCheckUtils.checkSafe(body, "", xtime, xsign)) {
|
||
|
// FineLoggerFactory.getLogger().error("SynPositionHander: 验证失败");
|
||
|
// JSONObject successJSONObject = HttpUtils.getError("签名验证失败", 101);
|
||
|
// WebUtils.printAsJSON(httpServletResponse, successJSONObject);
|
||
|
// return;
|
||
|
// }
|
||
|
FineLoggerFactory.getLogger().info("SynPositionHander: 请求参数 {}", body);
|
||
|
PostController postController = AuthorityContext.getInstance().getPostController();
|
||
|
JSONObject jsonObject = new JSONObject(body);
|
||
|
if (jsonObject.has("position_info")) {
|
||
|
JSONObject entries = jsonObject.getJSONObject("position_info");
|
||
|
String postionId = entries.getString("id");
|
||
|
FineLock lock = FineCollections.getInstance().getClient().getLock("syncuser", "lockedpostion" + postionId);
|
||
|
try {
|
||
|
if (lock.tryLock(1L, 20, TimeUnit.SECONDS)) {
|
||
|
String status = entries.getString("status");
|
||
|
Post post = postController.findOne(QueryFactory.create().addRestriction(RestrictionFactory.eq("id", postionId)));
|
||
|
boolean enable = true;
|
||
|
if (StringUtils.equals(status, "1")) {
|
||
|
enable = false;
|
||
|
}
|
||
|
String dep_id = entries.getString("dep_id");
|
||
|
if (post == null) {
|
||
|
post = new Post();
|
||
|
post.setName(entries.getString("name"));
|
||
|
post.setId(postionId);
|
||
|
post.setEnable(enable);
|
||
|
post.setCreationType(ManualOperationType.KEY);
|
||
|
try {
|
||
|
postController.add(post);
|
||
|
postController.addPostToDepartment(postionId, dep_id);
|
||
|
} catch (Exception e) {
|
||
|
FineLoggerFactory.getLogger().error("添加职位到部门失败:", e);
|
||
|
WebUtils.printAsJSON(httpServletResponse, HttpUtils.getErrorByCreateRelation());
|
||
|
return;
|
||
|
}
|
||
|
} else {
|
||
|
post.setName(entries.getString("name"));
|
||
|
post.setId(postionId);
|
||
|
post.setEnable(enable);
|
||
|
post.setCreationType(ManualOperationType.KEY);
|
||
|
postController.update(post);
|
||
|
DepartmentController departmentController = AuthorityContext.getInstance().getDepartmentController();
|
||
|
List<Department> departments = departmentController.findByPost(post.getId(), QueryFactory.create());
|
||
|
UserController userController = AuthorityContext.getInstance().getUserController();
|
||
|
boolean notneedadd = false;
|
||
|
for (Department de : departments) {
|
||
|
if (StringUtils.equals(de.getId(), dep_id)) {
|
||
|
notneedadd = true;
|
||
|
} else {
|
||
|
DataList<User> users = userController.findByDepartmentAndPost(de.getId(), postionId, QueryFactory.create());
|
||
|
List<User> list = users.getList();
|
||
|
for (User user : list) {
|
||
|
userController.removeUserFromDepartmentAndPost(user.getId(), de.getId(), postionId);
|
||
|
}
|
||
|
postController.removePostFromDepartment(postionId, de.getId());
|
||
|
}
|
||
|
}
|
||
|
if (!notneedadd) {
|
||
|
try {
|
||
|
postController.addPostToDepartment(postionId, dep_id);
|
||
|
} catch (Exception e) {
|
||
|
FineLoggerFactory.getLogger().error("添加职位到部门失败:", e);
|
||
|
WebUtils.printAsJSON(httpServletResponse, HttpUtils.getErrorByCreateRelation());
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
} else {
|
||
|
WebUtils.printAsJSON(httpServletResponse, HttpUtils.getError("获取职位同步锁失败", 111));
|
||
|
return;
|
||
|
}
|
||
|
}catch (Exception e){
|
||
|
LogKit.error("同步异常:{}",e);
|
||
|
}finally {
|
||
|
try {
|
||
|
lock.unlock();
|
||
|
}catch (Exception e){
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
}
|
||
|
}
|
||
|
WebUtils.printAsJSON(httpServletResponse, HttpUtils.getSuccessJSONObject());
|
||
|
}
|
||
|
|
||
|
}
|