package com.cloud.control.service.impl;
|
|
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSONArray;
|
import com.alibaba.fastjson.JSONObject;
|
import com.cloud.common.utils.JsonUtil;
|
import com.cloud.common.utils.RestTemplateUtil;
|
import com.cloud.control.dao.TaskMapper;
|
import com.cloud.control.dao.TaskUserMapper;
|
import com.cloud.control.model.Task;
|
import com.cloud.control.model.TaskUser;
|
import com.cloud.control.service.TaskService;
|
import com.cloud.control.service.ClusterService;
|
import com.cloud.control.service.TaskUserService;
|
import com.cloud.control.vo.TaskUserEditVo;
|
import com.cloud.control.vo.TaskUserInfoVo;
|
import com.cloud.control.utils.DevInfoColumnMap;
|
import lombok.extern.slf4j.Slf4j;
|
import com.cloud.control.utils.EnumStr;
|
import com.cloud.control.vo.MenuTreeVo;
|
import com.cloud.model.common.Result;
|
import org.apache.commons.lang3.StringUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.http.MediaType;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.util.MultiValueMap;
|
import java.util.*;
|
import java.util.List;
|
import java.util.Map;
|
|
@Slf4j
|
@Service
|
public class TaskUserServiceImpl implements TaskUserService {
|
|
@Autowired
|
private TaskUserMapper taskUserDao;
|
@Autowired
|
private TaskMapper taskDao;
|
@Autowired
|
private TaskService taskService;
|
@Autowired
|
private ClusterServiceImpl clusterServiceImpl;
|
@Autowired
|
private ClusterService clusterService;
|
@Autowired
|
private EnumStr enumStr;
|
|
@Override
|
public Map select(Map<String, Object> params) {
|
Map map = new HashMap();
|
List<Map> list = taskUserDao.select(params);
|
if(list !=null && list.size() >0) {
|
list.forEach(map1 -> {
|
List<String> nameList = new ArrayList();
|
JSONArray scope = JSONArray.parseArray( taskDao.selectScopeById(map1.get("taskId").toString()).getScope().toString());
|
Integer syncType = taskDao.selectScopeById(map1.get("taskId").toString()).getSyncType();
|
String taskName = taskDao.selectScopeById(map1.get("taskId").toString()).getName();
|
scope.forEach(item->{
|
String cluId = JSON.parseObject(item.toString()).get("cluId").toString();
|
String cluName = taskService.getCluOrDevAndNameOrIpById(cluId, DevInfoColumnMap.CluType,DevInfoColumnMap.nameType);
|
if(syncType == 0){
|
//本地库去请求nodes信息
|
JSONArray nodes = JSONArray.parseArray(JSON.parseObject(item.toString()).get("nodes").toString());
|
if(nodes != null){
|
nodes.forEach(node->{
|
String nodeIp = JSON.parseObject(node.toString()).get("id").toString();
|
String nodeName = taskService.getCluOrDevAndNameOrIpById(nodeIp, DevInfoColumnMap.DevType,DevInfoColumnMap.nameType);
|
nameList.add(map1.get("taskName")+"(集群:"+cluName+"/"+"节点:"+nodeName+")");
|
});
|
}else{
|
nameList.add(map1.get("taskName")+"(集群:"+cluName+")");
|
}
|
}else{
|
nameList.add(map1.get("taskName")+"(集群:"+cluName+")");
|
}
|
|
});
|
map1.put("baseInfo",nameList);
|
});
|
map.put("total", list.size());
|
map.put("list", list);
|
}else{
|
map.put("total", 0);
|
map.put("list", Collections.emptyList());
|
}
|
return map;
|
}
|
|
@Override
|
@Transactional
|
public void stopControl(List<String> ids) {
|
ids.forEach(id->{
|
taskUserDao.stopControl(id);
|
Map taskMap = taskUserDao.selectById(id);
|
Integer syncType = (Integer)taskMap.get("syncType");
|
|
if(syncType != null && syncType == 1){
|
log.info("集群同步库");
|
JSONArray scope = JSON.parseArray(taskMap.get("scope").toString());
|
scope.forEach(item->{
|
String cluld = ((JSONObject)item).get(DevInfoColumnMap.cluId).toString();
|
String ip = taskService.getCluOrDevAndNameOrIpById(((JSONObject)item).get(DevInfoColumnMap.cluId).toString(), DevInfoColumnMap.CluType,DevInfoColumnMap.ipType);
|
String url = "http://" + ip+ "/addPerson";
|
JSONObject jsonParam = new JSONObject();
|
jsonParam.put("uuid",taskMap.get("userId").toString());
|
jsonParam.put("TableId",taskMap.get("taskId").toString());
|
jsonParam.put("TableName",taskMap.get("name").toString());
|
jsonParam.put("SyncType","1");
|
jsonParam.put("enabled","0");
|
String result = RestTemplateUtil.post(url, jsonParam, MediaType.APPLICATION_FORM_URLENCODED,true);
|
if(result.contains("error")){
|
throw new IllegalArgumentException("erlang is null");
|
}
|
});
|
}else{
|
log.info("设备本地库");
|
JSONArray scope = JSON.parseArray(taskMap.get("scope").toString());
|
scope.forEach(item->{
|
JSONArray nodes = JSON.parseArray(JSON.parseObject(item.toString()).get(DevInfoColumnMap.nodes).toString());
|
nodes.forEach(node->{
|
String ip = taskService.getCluOrDevAndNameOrIpById(JSON.parseObject(node.toString()).get(DevInfoColumnMap.devId).toString(),
|
DevInfoColumnMap.DevType,DevInfoColumnMap.ipType);
|
String url = "http://" + ip+ "/addPerson";
|
JSONObject jsonParam = new JSONObject();
|
jsonParam.put("uuid",taskMap.get("userId").toString());
|
jsonParam.put("TableId",taskMap.get("taskId").toString());
|
jsonParam.put("TableName",taskMap.get("name").toString());
|
jsonParam.put("SyncType","0");
|
jsonParam.put("enabled","0");
|
String result = RestTemplateUtil.post(url, jsonParam, MediaType.APPLICATION_FORM_URLENCODED,true);
|
if(result.contains("error")){
|
throw new IllegalArgumentException("erlang is null");
|
}
|
});
|
});
|
}
|
});
|
}
|
|
@Override
|
@Transactional
|
public void deleteTaskUser(List<TaskUser> list) {
|
list.forEach(record-> {
|
taskUserDao.deleteTaskUser(record);
|
// Map taskMap = taskUserDao.selectById(record.getId());
|
// Integer syncType = (Integer)taskMap.get("syncType");
|
//
|
// if(syncType != null && syncType == 1){
|
// log.info("集群同步库");
|
// JSONArray scope = JSON.parseArray(taskMap.get("scope").toString());
|
// scope.forEach(item->{
|
// String ip = taskService.getCluOrDevAndNameOrIpById(JSON.parseObject(item.toString()).get("cluld").toString(), DevInfoColumnMap.CluType,DevInfoColumnMap.ipType);
|
// String url = "http://" + ip+ "/addPerson";
|
// JSONObject jsonParam = new JSONObject();
|
// jsonParam.put("uuid",taskMap.get("userId").toString());
|
// jsonParam.put("TableId",taskMap.get("taskId").toString());
|
// jsonParam.put("TableName",taskMap.get("name").toString());
|
// jsonParam.put("SyncType","1");
|
// jsonParam.put("enabled","0");
|
// String result = RestTemplateUtil.post(url, jsonParam, MediaType.APPLICATION_FORM_URLENCODED,true);
|
// if(result.contains("error")){
|
// throw new IllegalArgumentException("erlang is null");
|
// }
|
// });
|
// }else{
|
// log.info("设备本地库");
|
// JSONArray scope = JSON.parseArray(taskMap.get("scope").toString());
|
// scope.forEach(item->{
|
// JSONArray nodes = JSON.parseArray(JSON.parseObject(item.toString()).get("nodes").toString());
|
// nodes.forEach(node->{
|
// String ip = taskService.getCluOrDevAndNameOrIpById(JSON.parseObject(node.toString()).get("cluld").toString(), DevInfoColumnMap.DevType,DevInfoColumnMap.ipType);
|
// String url = "http://" + ip+ "/addPerson";
|
// JSONObject jsonParam = new JSONObject();
|
// jsonParam.put("isAdd",false);
|
// jsonParam.put("uuid",taskMap.get("userId").toString());
|
// jsonParam.put("TableId",taskMap.get("taskId").toString());
|
// jsonParam.put("TableName",taskMap.get("name").toString());
|
// jsonParam.put("SyncType","0");
|
// jsonParam.put("enabled","0");
|
// String result = RestTemplateUtil.post(url, jsonParam, MediaType.APPLICATION_FORM_URLENCODED,true);
|
// if(result.contains("error")){
|
// throw new IllegalArgumentException("erlang is null");
|
// }
|
// });
|
// });
|
// }
|
});
|
}
|
|
@Override
|
public Map selectById(String id) {
|
Map taskMap = taskUserDao.selectById(id);
|
return taskMap;
|
}
|
|
@Override
|
@Transactional
|
public void save(TaskUser taskUser) {
|
taskUserDao.updateByPrimaryKeySelective(taskUser);
|
//判断身份证号是否变化了,变了的话需要往C同步
|
// Map taskMap = taskUserDao.selectById(taskUser.getId());
|
// if(!taskMap.get("idCard").toString().equals(taskUser.getIdCard())) {
|
// log.info("身份证号改变,需要更新到C");
|
// Integer syncType = (Integer) taskMap.get("syncType");
|
//
|
// if (syncType != null && syncType == 1) {
|
// log.info("集群同步库");
|
// JSONArray scope = JSON.parseArray(taskMap.get("scope").toString());
|
// scope.forEach(item -> {
|
// String ip = taskService.getCluOrDevAndNameOrIpById(JSON.parseObject(item.toString()).get("id").toString(), DevInfoColumnMap.CluType, DevInfoColumnMap.ipType);
|
// String url = "http://" + ip + "/addPerson";
|
// JSONObject jsonParam = new JSONObject();
|
// jsonParam.put("uuid", taskMap.get("userId").toString());
|
// jsonParam.put("TableId", taskMap.get("taskId").toString());
|
// jsonParam.put("TableName", taskMap.get("name").toString());
|
// jsonParam.put("SyncType", "1");
|
//
|
// String result = RestTemplateUtil.post(url, jsonParam, MediaType.APPLICATION_FORM_URLENCODED, true);
|
// if (result.contains("error")) {
|
// throw new IllegalArgumentException("erlang is null");
|
// }
|
// });
|
// } else {
|
// log.info("设备本地库");
|
// JSONArray scope = JSON.parseArray(taskMap.get("scope").toString());
|
// scope.forEach(item -> {
|
// JSONArray nodes = JSON.parseArray(JSON.parseObject(item.toString()).get("nodes").toString());
|
// nodes.forEach(node -> {
|
// String ip = taskService.getCluOrDevAndNameOrIpById(JSON.parseObject(node.toString()).get("id").toString(), DevInfoColumnMap.DevType, DevInfoColumnMap.ipType);
|
// String url = "http://" + ip + "/addPerson";
|
// JSONObject jsonParam = new JSONObject();
|
// jsonParam.put("isAdd", false);
|
// jsonParam.put("uuid", taskMap.get("userId").toString());
|
// jsonParam.put("TableId", taskMap.get("taskId").toString());
|
// jsonParam.put("TableName", taskMap.get("name").toString());
|
// jsonParam.put("SyncType", "0");
|
// String result = RestTemplateUtil.post(url, jsonParam, MediaType.APPLICATION_FORM_URLENCODED, true);
|
// if (result.contains("error")) {
|
// throw new IllegalArgumentException("erlang is null");
|
// }
|
// });
|
// });
|
// }
|
// }
|
}
|
|
@Override
|
@Transactional
|
public void saveFromC(List<TaskUser> taskUsers) {
|
taskUsers.forEach(taskUser -> {
|
taskUserDao.selectById(taskUser.getId());
|
taskUserDao.updateByPrimaryKeySelective(taskUser);
|
});
|
|
}
|
|
@Override
|
public void add(TaskUser taskUser) {
|
taskUser.setId(UUID.randomUUID().toString());
|
taskUser.setDelFlag("0");
|
taskUser.setSource(2);
|
taskUser.setCreateTime(new Date());
|
taskUser.setUpdateTime(new Date());
|
taskUserDao.insertSelective(taskUser);
|
}
|
|
@Override
|
public void joinControl(TaskUser taskUser) {
|
//先删除原有的用户布控任务关联
|
taskUserDao.deleteByUser(taskUser.getUserId());
|
List<String> taskIds = taskUser.getTaskIds();
|
//再进行新的关联
|
taskIds.forEach(taskId->{
|
taskUser.setId(UUID.randomUUID().toString());
|
taskUser.setTaskId(taskId);
|
taskUserDao.insertSelective(taskUser);
|
});
|
|
}
|
|
/**
|
* 编辑布控任务人员时,从集群底库中选择
|
* @param params
|
* @return
|
*/
|
@Override
|
public List findTaskUserMenusFromCluster(Map<String, Object> params) {
|
List result = new ArrayList<>();
|
|
List<TaskUser> taskUserAll = taskUserDao.findAll(params);
|
final String TYPE_MENU = "MENU";
|
Result allClusterInfo = clusterService.findAllNode();//查找所有集群-》节点(包含同步库)-》设备(本地库信息)
|
if(allClusterInfo !=null && allClusterInfo.isSuccess()){
|
JSONArray jsonClusters = JSONArray.parseArray(allClusterInfo.getData().toString());
|
if(jsonClusters !=null && jsonClusters.size()>0){
|
for(Object clusterOjb: jsonClusters){
|
JSONObject clusterJson = (JSONObject)clusterOjb;
|
JSONObject clusterMenu = new JSONObject();
|
clusterMenu.put("id", clusterJson.getString("id"));//集群id
|
clusterMenu.put("type", TYPE_MENU);//菜单
|
clusterMenu.put("userInfo", clusterJson.getString("name"));//集群名称
|
|
List childs = new ArrayList<>();
|
JSONArray syncDbs = clusterJson.getJSONArray("syncDbs");//集群内同步库信息
|
if(syncDbs !=null && syncDbs.size()>0){
|
for(Object syncDb : syncDbs){
|
JSONObject jsonSyncDb = (JSONObject) syncDb;
|
JSONObject syncMenu = new JSONObject();
|
String syncDbId = jsonSyncDb.getString("uuid");//同步库id
|
syncMenu.put("id", syncDbId);
|
syncMenu.put("userInfo", jsonSyncDb.getString("tableName"));//同步库名
|
syncMenu.put("type", TYPE_MENU);
|
List syncUsers = getTaskUserChildren(syncDbId, taskUserAll);
|
syncMenu.put("child", syncUsers);
|
|
childs.add(syncMenu);
|
}
|
}
|
|
JSONArray nodes = clusterJson.getJSONArray("nodes");//集群内节点信息
|
if(nodes !=null && nodes.size()>0){
|
for(Object node : nodes){
|
JSONObject jsonNode = (JSONObject)node;
|
JSONArray nodeLocalDbs = jsonNode.getJSONArray("localDates");
|
if(nodeLocalDbs !=null && nodeLocalDbs.size()>0){
|
for(Object localDb : nodeLocalDbs){
|
JSONObject jsonLocalDb = (JSONObject) localDb;
|
JSONObject localMenu = new JSONObject();
|
String localDbId = jsonLocalDb.getString("uuid");
|
localMenu.put("id", localDbId);
|
localMenu.put("userInfo", jsonLocalDb.getString("tableName")+"("+jsonNode.getString("devName")+")");
|
localMenu.put("type", TYPE_MENU);
|
List localUsers = getTaskUserChildren(localDbId, taskUserAll);
|
localMenu.put("child", localUsers);
|
|
childs.add(localMenu);
|
}
|
}
|
}
|
}
|
|
clusterMenu.put("child", childs);
|
result.add(clusterMenu);
|
|
}
|
}
|
}
|
|
return result;
|
}
|
|
/**
|
* 计算同步库或本地库id下的人员,并生成对应的递归菜单结构
|
* @param parentId
|
* @param taskUsers
|
* @return
|
*/
|
private List getTaskUserChildren(String parentId,List<TaskUser> taskUsers){
|
List list = new ArrayList<>();
|
if(taskUsers !=null && taskUsers.size()>0){
|
for(TaskUser taskUser : taskUsers){
|
if(taskUser.getTaskId().equals(parentId)){
|
JSONObject menu = new JSONObject();
|
menu.put("id", taskUser.getId());
|
menu.put("icon", taskUser.getImgUrl());
|
String showName = "";
|
TaskUserInfoVo userInfo = new TaskUserInfoVo();
|
if(StringUtils.isNotEmpty(taskUser.getUserName()))
|
showName += taskUser.getUserName();
|
if(taskUser.getSex() != null)
|
showName += "/" + (taskUser.getSex() == 1?"男":"女");
|
if(StringUtils.isNotEmpty(taskUser.getIdCard()))
|
showName += "/" + taskUser.getIdCard();
|
if(StringUtils.isNotEmpty(taskUser.getMobile()))
|
showName += "/" + taskUser.getMobile();
|
if(showName.startsWith("/"))
|
showName = showName.substring(1);
|
|
userInfo.setId(taskUser.getId());
|
userInfo.setSex(taskUser.getSex());
|
userInfo.setUsername(taskUser.getUserName());
|
userInfo.setIdCard(taskUser.getIdCard());
|
userInfo.setMobile(taskUser.getMobile());
|
userInfo.setImgUrl(taskUser.getImgUrl());
|
|
menu.put("userInfo", showName);
|
menu.put("detail", userInfo);
|
|
list.add(menu);
|
}
|
}
|
}
|
|
return list;
|
}
|
|
/**
|
* 从人员管理选择布控人员
|
* @param params
|
* @return
|
*/
|
public List findTaskUserMenusFromPlat(Map<String, Object> params){
|
List resultList = new ArrayList();
|
if(params !=null && params.containsKey("orgById") && params.get("orgById")!=null && StringUtils.isNotEmpty(params.get("orgById").toString())){
|
String baseUrl = "http://"+enumStr.getUserHOSTNAME()+":"+enumStr.getUserHTTP_PORT();
|
JSONObject orgParams = new JSONObject();
|
orgParams.put("currentId", params.get("orgById"));
|
orgParams.put("name", params.get("name"));//模糊搜索组织名称
|
//1.获取这个人可以看到的组织机构列表
|
String strOrgs = RestTemplateUtil.get(baseUrl+"/data/api-u/org/findDownByType", orgParams,true);
|
if(StringUtils.isNotEmpty(strOrgs)){//有组织机构id
|
JSONArray orgList = JSONArray.parseArray(strOrgs);
|
|
//2.获取人员总库中当前登录人可以管理的总库人员
|
JSONObject userQueryParams = new JSONObject();
|
userQueryParams.put("id", params.get("orgById"));
|
userQueryParams.put("name", params.get("name"));//模糊搜索用户姓名
|
|
String strBbPersons = RestTemplateUtil.get(baseUrl+"/data/api-u/BbEmployee/findBbEmployeeByCurUser",userQueryParams, true);
|
if(StringUtils.isNotEmpty(strBbPersons)){//底库中有人员信息
|
JSONArray userList = JSONArray.parseArray(strBbPersons);
|
if(userList !=null && userList.size()>0){
|
String userParentOrgId = null;
|
for(Object orgObj: orgList){
|
if(params.get("orgById").equals(((JSONObject)orgObj).getString("id"))){
|
userParentOrgId = ((JSONObject)orgObj).getString("parentId");
|
}
|
}
|
if(StringUtils.isNotEmpty(userParentOrgId))
|
setPlatOrgTreeUser(userParentOrgId, orgList, userList, resultList);
|
}
|
}
|
}
|
}
|
|
return resultList;
|
}
|
|
/**
|
* 保存任务布控人员
|
* 1.获取已布控人员列表
|
* 2.获取删除人员
|
* 3.获取新增人员
|
* @param map
|
*/
|
@Override
|
@Transactional
|
public String saveTaskUser(Map<String, Object> map) {
|
String result = "";
|
Map<String, Object> oldMap = new HashMap<>();
|
Map<String, Object> newMap = new HashMap<>();
|
|
JSONObject jsonObj = JsonUtil.mapToJson(map);
|
if(jsonObj !=null && jsonObj.get("taskId")!=null){
|
String taskId = jsonObj.get("taskId").toString();
|
JSONArray userList = jsonObj.getJSONArray("userList");//userList的size可以是0,表示清除了任务内的人员
|
log.info("taskId:"+taskId+"userList:"+userList);
|
Map<String, Object> queryParam = new HashMap<>();
|
queryParam.put("taskId", taskId);
|
List<TaskUser> taskUsers = taskUserDao.findAll(queryParam);//任务内已布控人员
|
|
for(TaskUser taskUser : taskUsers){
|
oldMap.put(taskUser.getId(), taskUser);
|
}
|
for(Object curObj : userList){
|
JSONObject curJson = (JSONObject)curObj;
|
String id = curJson.getString("id");
|
newMap.put(id,curObj);//保存时的新集合
|
if(!oldMap.containsKey(id)){
|
//新增的人员,解析后insert
|
TaskUser taskUser = new TaskUser();
|
if(StringUtils.isEmpty(id)) {
|
taskUser.setId(UUID.randomUUID().toString());
|
}
|
taskUser.setImgUrl(curJson.getString("imgUrl"));
|
taskUser.setTaskId(curJson.getString("taskId"));
|
taskUserDao.insert(taskUser);
|
}
|
}
|
for(TaskUser taskUser : taskUsers){
|
if(!newMap.containsKey(taskUser.getId())){//已删除的人员
|
taskUserDao.deleteTaskUser(taskUser);
|
}
|
}
|
|
}
|
|
|
return result;
|
}
|
|
private void setPlatOrgTreeUser(String parentId, JSONArray allOrgs, JSONArray allUsers, List list){
|
allOrgs.forEach(org->{
|
JSONObject jsonOrg = (JSONObject)org;
|
|
if(parentId.equals(jsonOrg.getString("parentId"))){//当前人组织下的组织机构
|
JSONObject curMenu = new JSONObject();
|
curMenu.put("id",jsonOrg.getString("id"));
|
curMenu.put("type", "MENU");
|
curMenu.put("userInfo", jsonOrg.getString("name"));
|
|
List child = new ArrayList();
|
curMenu.put("child",child);
|
setPlatOrgTreeUser(jsonOrg.getString("id"), allOrgs, allUsers, child);
|
|
list.add(curMenu);
|
}
|
});
|
allUsers.forEach(user->{
|
JSONObject jsonUser = (JSONObject)user;
|
if(parentId.equals(jsonUser.getString("orgId"))){
|
JSONObject userMenu = new JSONObject();
|
userMenu.put("id", jsonUser.getString("id"));
|
userMenu.put("type","");
|
String showName = "";
|
TaskUserInfoVo userInfo = new TaskUserInfoVo();
|
if(StringUtils.isNotEmpty(jsonUser.getString("name")))
|
showName += jsonUser.getString("name");
|
if(StringUtils.isNotEmpty(jsonUser.getString("gender"))){
|
showName += "/" + jsonUser.getString("gender");
|
userInfo.setSex(jsonUser.getString("gender") == "男"? 1:0);
|
}else{
|
userInfo.setSex(1);
|
}
|
|
if(StringUtils.isNotEmpty(jsonUser.getString("cardId")))
|
showName += "/" + jsonUser.getString("cardId");
|
if(StringUtils.isNotEmpty(jsonUser.getString("phone")))
|
showName += "/" + jsonUser.getString("phone");
|
|
userInfo.setId(jsonUser.getString("id"));
|
userInfo.setUsername(jsonUser.getString("name"));
|
userInfo.setIdCard(jsonUser.getString("cardId"));
|
userInfo.setMobile(jsonUser.getString("phone"));
|
userInfo.setImgUrl(jsonUser.getString("photos"));
|
|
if(showName.startsWith("/"))
|
showName = showName.substring(1);
|
userMenu.put("userInfo", showName);//姓名
|
userMenu.put("icon", jsonUser.getString("photos"));//人脸图片
|
userMenu.put("child", Collections.emptyList());
|
userMenu.put("detail", userInfo);
|
list.add(userMenu);
|
}
|
});
|
}
|
}
|