Merge remote-tracking branch 'origin/master' into wangliwen
This commit is contained in:
commit
a8e4c6871a
|
@ -162,4 +162,16 @@ public class SysUserController {
|
|||
|
||||
ExcelUtils.exportExcelToTarget(response, null, "用户管理", list, SysUserExcel.class);
|
||||
}
|
||||
|
||||
@GetMapping("getDeptInfoFromJH")
|
||||
@ApiOperation("从金宏获取行政区划信息并保存到表中")
|
||||
public Result getDeptInfoFromJH(){
|
||||
return sysUserService.getDeptInfoFromJH();
|
||||
}
|
||||
|
||||
@GetMapping("getUserInfoFromJH")
|
||||
@ApiOperation("从金宏获取用户信息并保存到表中")
|
||||
public Result getUserInfoFromJH() {
|
||||
return sysUserService.getUserInfoFromJH();
|
||||
}
|
||||
}
|
|
@ -41,4 +41,8 @@ public interface SysUserDao extends BaseDao<SysUserEntity> {
|
|||
SysUserEntity getByDeptIdAndRoleId(@Param("deptId") Long deptId, @Param("roleId") Long roleId);
|
||||
|
||||
Long countAllUser();
|
||||
|
||||
void batchSaveUser(@Param("list")List<Map> list);
|
||||
|
||||
SysUserEntity getUserByName(@Param("username") String username);
|
||||
}
|
|
@ -73,5 +73,10 @@ public class SysUserEntity extends BaseEntity {
|
|||
*/
|
||||
@TableField(exist=false)
|
||||
private String deptName;
|
||||
/**
|
||||
* 用户guid
|
||||
* 2022-06-21 ytl根据黄工的需求新增
|
||||
*/
|
||||
private String guid;
|
||||
|
||||
}
|
|
@ -0,0 +1,114 @@
|
|||
package io.renren.modules.sys.enums;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 金宏项目LDAP查询用户的根节点enum
|
||||
*/
|
||||
public enum JhDeptEnum {
|
||||
//人大常委会("1","人大常委会"),
|
||||
即墨区("即墨区",new String[]{
|
||||
"即墨区人大","即墨区委办公室","即墨区委宣传部","即墨区委组织部","即墨区推进大数据发展","即墨区政协办公室",
|
||||
"即墨区新型冠状病毒感染肺炎疫情防控指挥部","即墨区监察委","即墨区直单位","即墨区纪委","即墨区街道办事处","即墨区项目指挥部"
|
||||
|
||||
})
|
||||
, 城阳区("城阳区",new String[]{
|
||||
"区属机关","城阳区乡镇及街道办事处","城阳区人大","城阳区委办公室","城阳区政协","城阳区政府办公室","城阳区网上审批","工作机构"
|
||||
})
|
||||
, 崂山区("崂山区",new String[]{
|
||||
"中共崂山区纪委监委机关","区委区政府议事协调机构","区直事业单位","区直企业","崂山区人大机关","崂山区党委部门","崂山区政协机关",
|
||||
"崂山区政府部门","崂山区武装部","崂山区科技创新委员会","群团部门","街道科室及社区","青岛东亿实业总公司","青岛金家岭金融聚集区管委会",
|
||||
"驻区企业","驻区单位"
|
||||
})
|
||||
,市南区("市南区",new String[]{
|
||||
"市南区人大","市南区公检法","市南区区委","市南区政协","市南区政府","市南区电子政务和信息资源管理办公室","市南区纪委"
|
||||
})
|
||||
,市直企业("市直企业",new String[]{"世园集团","中石化青岛石油分公司","中石化经纬有限公司","中路财产保险股份有限公司",
|
||||
"二轻总公司","交运集团","华电青岛热力有限公司","国信实业有限公司","国际机场集团","市政集团","海尔集团技术研发中心",
|
||||
"纺织总公司","青岛万通证券公司","青岛中泰集团","青岛公交集团","青岛区域经济合作有限公司","青岛华通国有资本运营(集团)有限责任公司",
|
||||
"青岛华青公司","青岛双星集团","青岛啤酒股份有限公司制造中心","青岛啤酒集团","青岛国信集团","青岛国投有限公司", "青岛城市发展集团有限公司",
|
||||
"青岛城市建设集团有限公司","青岛旅游集团","青岛水务集团有限公司","青岛海信集团","青岛海尔集团","青岛海湾集团有限公司","青岛港集团",
|
||||
"青岛澳柯玛集团","青岛红星化工集团有限责任公司","青岛能源集团有限公司","青岛西海岸有限公司","青岛银行","青岛饮料集团有限公司",
|
||||
"青钢集团"
|
||||
})
|
||||
,市直机关("市直机关",new String[]{
|
||||
"中共青岛中德生态园党组","中级法院","人力资源和社会保障局","人防办","企业托管中心","供销社","侨联","信访局","公安局","其他单位",
|
||||
"出版社","医疗保障局","卫生健康委","司法局","商务局","团市委","国家统计局青岛调查队","国资委","外办","妇联","审计局","宣传部",
|
||||
"崂山风景区管理局","工商联","市农业农村局","市发展改革委","市场监督管理局","市城市管理局","市委党校","市委军民融合办","市委政研室",
|
||||
"市委网信办","市工业和信息化局","市政府研究室","市政府驻京办","市直机关工委","市纪委监委机关","市经济发展研究院","市自然资源和规划局",
|
||||
"广播电视局","应急管理局","建管局","总工会","政法委","教育局","文联","日报社","机关事务局","档案馆","检察院","残联","民政局",
|
||||
"气象局","电大","畜牧兽医局","社科院","科协","科技局","红十字会","组织部","统战部","统计局","综合行政执法支队","编委办",
|
||||
"老干局","财政局","贸促会","退役军人事务局","青岛仲裁委员会办公室","青岛前湾保税港区","青岛国际邮轮港管理局","青岛工程职业学院",
|
||||
"青岛市乡村振兴局","青岛市交通运输局","青岛市住房公积金管理中心","青岛市住房和城乡建设局","青岛市体育局","青岛市信息产业局",
|
||||
"青岛市园林和林业局","青岛市地铁工程建设指挥部","青岛市大数据发展管理局","青岛市委党史研究院","青岛市委台港澳工作办公室",
|
||||
"青岛市政府驻沪办","青岛市文化和旅游局","青岛市民营经济发展局","青岛市水务管理局","青岛市水文局","青岛市海洋发展局","青岛市深圳联络办事处",
|
||||
"青岛市生态环境局","青岛市董家口港区开发建设指挥部","青岛市行政审批服务局","青岛市金融工作办公室","青岛市驻济南办事办",
|
||||
"青岛技师学院","青岛技院","青岛海洋科学与技术国家实验室发展中心","青岛蓝谷管理局","青岛蓝谷管理局"
|
||||
})
|
||||
,平度市("平度市",new String[]{
|
||||
"人大","企业用户","市委办","市直各单位","政协","政府办"
|
||||
})
|
||||
,新市北区("新市北区",new String[]{
|
||||
"区属企业","四方区","市北区","市北区人大","市北区委","市北区政协","市北区政府","市北区政法机关","市北区纪委","驻区单位"
|
||||
})
|
||||
,李沧区("李沧区",new String[]{
|
||||
"“五位一体”联合督查","其他企业","区属机关","李沧区人大办公室","李沧区委“作风能力提升年”活动领导小组","李沧区委办公室",
|
||||
"李沧区政协办公室","李沧区政府办公室","李沧区街道办事处","青岛市李沧区行政审批大厅"
|
||||
})
|
||||
,胶州市("胶州市",new String[]{
|
||||
"12345","365便民服务中心","中共胶州市纪律检查委员会机关(胶州市监察委员会机关)","垂直管理机构","市委机构","政协胶州市委员会机构",
|
||||
"政府机构","胶州市人大常委会","胶州市人民团体","胶州市人民检察院","胶州市人民武装部","胶州市人民法院","胶州市企业发展局",
|
||||
"胶州市发展和改革局","胶州市镇及街道办事处","集团公司"
|
||||
})
|
||||
,莱西市用户("",new String[]{
|
||||
"人大办","区属机关","双管单位","市委办","市级领导","政协办","政府办","省青岛市驻莱西机构","莱西市疫情防控指挥部",
|
||||
"重点企业"
|
||||
})
|
||||
,青岛市级("青岛市级",new String[]{
|
||||
|
||||
})
|
||||
,驻青单位("驻青单位",new String[]{
|
||||
"中国农科院烟草研究所","中国动物卫生与流行病学中心","中国铁塔股份有限公司青岛市分公司","交通运输部北海航海保障中心青岛通信中心",
|
||||
"国家体育总局青岛航海运动学校","安全局","山东广电网络有限公司青岛分公司","山东省海警第二支队","市邮政管理局",
|
||||
"民航青岛安监管理局","气象局","海事局","烟草专卖局","省胶东调水局青岛分局","财政部青岛监管局","铁路分局","青岛出入境检验检疫局",
|
||||
"青岛地质勘查开发局","青岛大学","青岛市税务局","青岛市驻青国企党建研究会","青岛广电影视传媒集团有限公司","青岛机场检验检疫局",
|
||||
"青岛海关"
|
||||
})
|
||||
,黄岛区("黄岛区",new String[]{
|
||||
"中共青岛市黄岛区委军民融合发展委员会办公室","中央驻区单位","公众投诉热线","其他联网单位","凤凰岛南岛片区村庄拆迁工作指挥部",
|
||||
"垂直机构","胶南市委办公室","董家口管委","西海岸中央公园建设指挥部","西海岸新区新型冠状病毒感染肺炎疫情防控指挥部",
|
||||
"西海岸新区涉稳隐患排查化解指挥部","西海岸新区解放思想大讨论工作推进小组办公室","西海岸经济新区中央商务区开发建设指挥部",
|
||||
"西海岸经济新区工委管委","西海岸轨道交通指挥部","转型发展区建设推进指挥部","青岛中央活力区规划建设指挥部","青岛海洋高新区管理委员会",
|
||||
"青岛西海岸新区“啤酒之城”攻坚战指挥部","青岛西海岸新区六大攻坚战总指挥部","青岛西海岸新区教育卫生项目建设推进工作领导小组",
|
||||
"驻青单位","黄岛区人大","黄岛区企业","黄岛区区直机关","黄岛区委","黄岛区政协","黄岛区政府办公室","黄岛区督导巡查组","黄岛区骨干企业(原胶南市骨干企业)"
|
||||
})
|
||||
;
|
||||
|
||||
private String[] value;
|
||||
private String code;
|
||||
|
||||
JhDeptEnum(String code,String[] value) {
|
||||
this.code = code;
|
||||
this.value = value;
|
||||
}
|
||||
public String[] getValue(){
|
||||
return value;
|
||||
}
|
||||
public String getCode(){
|
||||
return code;
|
||||
}
|
||||
|
||||
public static List<Map> getAllToList() {
|
||||
List<Map> list = new ArrayList<>();
|
||||
JhDeptEnum[] values = values();
|
||||
for(JhDeptEnum r:values){
|
||||
Map pd = new HashMap();
|
||||
pd.put(r.getCode(),r.getValue());
|
||||
list.add(pd);
|
||||
}
|
||||
return list;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,50 @@
|
|||
package io.renren.modules.sys.enums;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public enum JhDeptsEnum {
|
||||
|
||||
即墨区("1","即墨区"),
|
||||
城阳区("2","城阳区"),
|
||||
崂山区("3","崂山区"),
|
||||
市南区("4","市南区"),
|
||||
市直企业("5","市直企业"),
|
||||
市直机关("6","市直机关"),
|
||||
平度市("7","平度市"),
|
||||
新市北区("8","新市北区"),
|
||||
李沧区("9","李沧区"),
|
||||
胶州市("10","胶州市"),
|
||||
莱西市用户("11","莱西市用户"),
|
||||
青岛市级("12","青岛市级"),
|
||||
驻青单位("13","驻青单位"),
|
||||
黄岛区("14","黄岛区")
|
||||
;
|
||||
|
||||
private String value;
|
||||
private String code;
|
||||
|
||||
JhDeptsEnum(String code,String value) {
|
||||
this.code = code;
|
||||
this.value = value;
|
||||
}
|
||||
public String getValue(){
|
||||
return value;
|
||||
}
|
||||
public String getCode(){
|
||||
return code;
|
||||
}
|
||||
|
||||
public static List<Map> getAllToList() {
|
||||
List<Map> list = new ArrayList<>();
|
||||
JhDeptsEnum[] values = values();
|
||||
for(JhDeptsEnum r:values){
|
||||
Map pd = new HashMap();
|
||||
pd.put(r.getCode(),r.getValue());
|
||||
list.add(pd);
|
||||
}
|
||||
return list;
|
||||
}
|
||||
}
|
|
@ -2,6 +2,7 @@ package io.renren.modules.sys.service;
|
|||
|
||||
import io.renren.common.page.PageData;
|
||||
import io.renren.common.service.BaseService;
|
||||
import io.renren.common.utils.Result;
|
||||
import io.renren.modules.sys.dto.SysUserDTO;
|
||||
import io.renren.modules.sys.entity.SysUserEntity;
|
||||
|
||||
|
@ -55,4 +56,8 @@ public interface SysUserService extends BaseService<SysUserEntity> {
|
|||
*/
|
||||
Long countAllUser();
|
||||
|
||||
Result getDeptInfoFromJH();
|
||||
|
||||
Result getUserInfoFromJH();
|
||||
|
||||
}
|
||||
|
|
|
@ -1,16 +1,25 @@
|
|||
package io.renren.modules.sys.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import io.renren.common.constant.Constant;
|
||||
import io.renren.common.page.PageData;
|
||||
import io.renren.common.service.impl.BaseServiceImpl;
|
||||
import io.renren.common.utils.ConvertUtils;
|
||||
import io.renren.common.utils.JhlDAPTool;
|
||||
import io.renren.common.utils.Result;
|
||||
import io.renren.modules.security.password.PasswordUtils;
|
||||
import io.renren.modules.security.user.SecurityUser;
|
||||
import io.renren.modules.security.user.UserDetail;
|
||||
import io.renren.modules.sys.dao.SysDeptDao;
|
||||
import io.renren.modules.sys.dao.SysRegionDao;
|
||||
import io.renren.modules.sys.dao.SysUserDao;
|
||||
import io.renren.modules.sys.dto.SysUserDTO;
|
||||
import io.renren.modules.sys.entity.SysDeptEntity;
|
||||
import io.renren.modules.sys.entity.SysRegionEntity;
|
||||
import io.renren.modules.sys.entity.SysUserEntity;
|
||||
import io.renren.modules.sys.enums.JhDeptEnum;
|
||||
import io.renren.modules.sys.enums.JhDeptsEnum;
|
||||
import io.renren.modules.sys.enums.SuperAdminEnum;
|
||||
import io.renren.modules.sys.service.SysDeptService;
|
||||
import io.renren.modules.sys.service.SysRoleUserService;
|
||||
|
@ -21,9 +30,11 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import javax.naming.ldap.LdapContext;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.atomic.AtomicLong;
|
||||
|
||||
|
||||
/**
|
||||
|
@ -37,6 +48,14 @@ public class SysUserServiceImpl extends BaseServiceImpl<SysUserDao, SysUserEntit
|
|||
private SysDeptService sysDeptService;
|
||||
@Autowired
|
||||
private SysUserPostService sysUserPostService;
|
||||
@Autowired
|
||||
private JhlDAPTool jhlDAPTool;
|
||||
@Autowired
|
||||
private SysDeptDao sysDeptDao;
|
||||
@Autowired
|
||||
private SysUserDao sysUserDao;
|
||||
@Autowired
|
||||
private SysRegionDao regionDao;
|
||||
|
||||
@Override
|
||||
public PageData<SysUserDTO> page(Map<String, Object> params) {
|
||||
|
@ -177,4 +196,265 @@ public class SysUserServiceImpl extends BaseServiceImpl<SysUserDao, SysUserEntit
|
|||
return baseDao.countAllUser();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result getDeptInfoFromJH(){
|
||||
List<Map> deptList = JhDeptEnum.getAllToList();
|
||||
int size = deptList.size();
|
||||
|
||||
try{
|
||||
ExecutorService executorService = Executors.newSingleThreadExecutor();
|
||||
executorService.execute(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
for (int n = 0; n < size; n++) {
|
||||
|
||||
Map map1 = deptList.get(n);
|
||||
Set<String> set = map1.keySet();
|
||||
String mName = "";
|
||||
for(String s:set){
|
||||
mName = s;
|
||||
}
|
||||
String key = mName;//区名,“即墨区”
|
||||
|
||||
String[] ouStr = (String[])map1.get(key);
|
||||
|
||||
for(String ou:ouStr){
|
||||
String OU = ou+","+"OU="+mName;
|
||||
LdapContext ldapContext = jhlDAPTool.LDAP_connect(OU);
|
||||
List<Map<String,Object>> lists = jhlDAPTool.readLdap(ldapContext,"(&(OU=*)(ou=*)(!(sAMAccountType=*))(instanceType=4))");
|
||||
//Iterator<Map<String,Object>> iterator = lists.iterator();
|
||||
//给pid pids赋值
|
||||
if (lists.size() > 0) {
|
||||
lists.forEach(dept->{//1.遍历每一个map
|
||||
String namespace = dept.get("namespace").toString();
|
||||
//OU=地税局分局,OU=驻区单位,OU=新市北区,DC=qd,DC=gov,DC=cn
|
||||
String[] namespaces = namespace.split(",");
|
||||
//判断namespaces的长度,
|
||||
for(int i=1;i<namespaces.length-3;i++) {//遍历每一个map的namespace
|
||||
String dName = namespaces[i].split("=")[1];//具体的上级部门名称
|
||||
int c = i;
|
||||
for (int j = 0; j < lists.size(); j++) {
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
if (dName.equals(lists.get(j).get("name").toString())) {
|
||||
String id = lists.get(j).get("id").toString();
|
||||
String pidsOld = dept.get("pids").toString() == ""? "" : (dept.get("pids").toString() + ",");
|
||||
if (c == 1) {
|
||||
dept.put("pid", id);
|
||||
dept.put("pids", pidsOld + id);
|
||||
} else {
|
||||
dept.put("pids", pidsOld + id);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
//给district和type赋值
|
||||
String districtName,type;
|
||||
Long distict;
|
||||
switch (key){
|
||||
case "新市北区":
|
||||
districtName = "市北区";
|
||||
distict = getDistict(districtName);
|
||||
lists.forEach(l->{
|
||||
l.put("district",distict);
|
||||
String name = l.get("name").toString();
|
||||
if(name.contains("企业") || name.contains("集团") || name.contains("公司")){
|
||||
l.put("type",4);
|
||||
}else{
|
||||
l.put("type",3);
|
||||
}
|
||||
});
|
||||
break;
|
||||
case "青岛市级":
|
||||
districtName = "青岛市";
|
||||
distict = getDistict(districtName);
|
||||
lists.forEach(l->{
|
||||
l.put("district",distict);
|
||||
l.put("type",2);
|
||||
});
|
||||
break;
|
||||
case "莱西市用户":
|
||||
districtName = "莱西市";
|
||||
distict = getDistict(districtName);
|
||||
lists.forEach(l->{
|
||||
l.put("district",distict);
|
||||
String name = l.get("name").toString();
|
||||
if(name.contains("企业") || name.contains("集团") || name.contains("公司")){
|
||||
l.put("type",4);
|
||||
}else{
|
||||
l.put("type",3);
|
||||
}
|
||||
});
|
||||
break;
|
||||
case "黄岛区":
|
||||
districtName = "西海岸新区";
|
||||
distict = getDistict(districtName);
|
||||
lists.forEach(l->{
|
||||
l.put("district",distict);
|
||||
String name = l.get("name").toString();
|
||||
if(name.contains("企业") || name.contains("集团") || name.contains("公司")){
|
||||
l.put("type",4);
|
||||
}else{
|
||||
l.put("type",3);
|
||||
}
|
||||
});
|
||||
break;
|
||||
case "市直企业":
|
||||
distict = getDistict("青岛市");
|
||||
lists.forEach(l->{
|
||||
l.put("district",distict);
|
||||
l.put("type",4);
|
||||
});
|
||||
break;
|
||||
case "市直机关":
|
||||
distict = getDistict("青岛市");
|
||||
lists.forEach(l->{
|
||||
l.put("district",distict);
|
||||
l.put("type",2);
|
||||
});
|
||||
break;
|
||||
case "驻青单位":
|
||||
distict = getDistict("山东省");
|
||||
lists.forEach(l->{
|
||||
l.put("district",distict);
|
||||
l.put("type",1);
|
||||
});
|
||||
break;
|
||||
default:
|
||||
distict = getDistict(mName);
|
||||
lists.forEach(l->{
|
||||
l.put("district",distict);
|
||||
String name = l.get("name").toString();
|
||||
if(name.contains("企业") || name.contains("集团") || name.contains("公司")){
|
||||
l.put("type",4);
|
||||
}else{
|
||||
l.put("type",3);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
lists.forEach(list->{//如果有该ID和name,目前暂不处理,,否则插入
|
||||
SysDeptEntity dept = sysDeptDao.getById(Long.valueOf(list.get("id").toString()));
|
||||
|
||||
SysDeptEntity deptNew = new SysDeptEntity();
|
||||
deptNew.setName(list.get("name").toString());
|
||||
deptNew.setId(Long.valueOf(list.get("id").toString()));
|
||||
deptNew.setPid(Long.valueOf(list.get("pid").toString()));
|
||||
deptNew.setPids(list.get("pids").toString());
|
||||
deptNew.setDistrict(Long.valueOf(list.get("district").toString()));
|
||||
deptNew.setType(Integer.parseInt(list.get("type").toString()));
|
||||
if(dept == null){
|
||||
System.out.println("deptname->"+deptNew.getName());
|
||||
sysDeptDao.insert(deptNew);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
return new Result().ok("保存成功");
|
||||
}catch (Exception e){
|
||||
e.printStackTrace();
|
||||
return new Result().error("保存失败");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result getUserInfoFromJH(){
|
||||
List<Map> deptList = JhDeptsEnum.getAllToList();
|
||||
int size = deptList.size();
|
||||
|
||||
try {
|
||||
ExecutorService executorService = Executors.newSingleThreadExecutor();
|
||||
executorService.execute(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
for (int i = 1; i <= size; i++) {
|
||||
LdapContext ldapContext = jhlDAPTool.LDAP_connect(deptList.get(i - 1).get(String.valueOf(i)).toString());
|
||||
List<Map> maps = jhlDAPTool.readLdap(ldapContext);
|
||||
if (maps.size() > 0) {
|
||||
maps.forEach(m-> {
|
||||
//根据username判断
|
||||
if(m.get(("username")) != null){
|
||||
String userName = m.get("username").toString();
|
||||
SysUserEntity user = sysUserDao.getUserByName(userName);
|
||||
if(user == null){//用户表中没有该用户,插入
|
||||
SysUserEntity newUser = new SysUserEntity();
|
||||
newUser.setUsername(userName);
|
||||
newUser.setSuperAdmin(0);
|
||||
newUser.setGuid(m.get("guid") == null ? "":m.get("guid").toString());
|
||||
newUser.setId(Long.valueOf(m.get("id") == null ? "0":m.get("id").toString()));
|
||||
newUser.setRealName(m.get("real_name") == null ?"":m.get("real_name").toString());
|
||||
newUser.setEmail(m.get("email") == null ?"":m.get("email").toString());
|
||||
newUser.setMobile(m.get("mobile") == null ?"":m.get("mobile").toString());
|
||||
newUser.setStatus(1);//账号状态 1正常 0停用
|
||||
//给dept_id赋值
|
||||
String deptNames = m.get("distinguishedName") == null ? "":m.get("distinguishedName").toString();
|
||||
if(deptNames == null){
|
||||
newUser.setDeptId(0L);
|
||||
}else{
|
||||
String[] deptArray = deptNames.split(",");
|
||||
String dept,deptFather;
|
||||
dept = deptArray[1];
|
||||
deptFather = deptArray[2];
|
||||
long id = getDeptId(dept.substring(3,dept.length()),deptFather.substring(3,deptFather.length()));
|
||||
newUser.setDeptId(id);
|
||||
sysUserDao.insert(newUser);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
return new Result().ok("保存成功");
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return new Result().error("保存失败");
|
||||
}
|
||||
}
|
||||
|
||||
public SysRegionEntity getRegion(String name){
|
||||
QueryWrapper<SysRegionEntity> regionWrapper = new QueryWrapper<>();
|
||||
regionWrapper.eq("name",name);
|
||||
SysRegionEntity region = regionDao.selectOne(regionWrapper);
|
||||
return region;
|
||||
}
|
||||
public long getDeptId(String deptName,String fatherDeptName){
|
||||
QueryWrapper<SysDeptEntity> deptWrapper = new QueryWrapper<>();
|
||||
deptWrapper.eq("name",deptName);
|
||||
List<SysDeptEntity> deptList = sysDeptDao.selectList(deptWrapper);
|
||||
if(deptList.size() == 0){
|
||||
return 0;
|
||||
}else if(deptList.size() == 1){
|
||||
return deptList.get(0).getId();
|
||||
}else{//出现多个相同的deptname,根据他们的父级来确定
|
||||
AtomicLong newId = new AtomicLong();
|
||||
deptList.forEach(dept->{
|
||||
long fatherId = dept.getPid();//获取其中一个的父级ID
|
||||
SysDeptEntity fatherEntity = sysDeptDao.getById(fatherId);//根据父级ID查询管理部门
|
||||
if(fatherEntity != null && fatherEntity.getName().equals(fatherDeptName)){//如果该管理部门的名称等于传进来的父级名称,那么这条dept就是我们需要的
|
||||
if(fatherEntity.getId() == fatherId){//如果父级ID等于
|
||||
newId.set(dept.getId());
|
||||
}
|
||||
}
|
||||
});
|
||||
return newId.get();
|
||||
}
|
||||
}
|
||||
|
||||
public Long getDistict(String deptName){
|
||||
QueryWrapper<SysRegionEntity> regionWrapper = new QueryWrapper<>();
|
||||
regionWrapper.eq("name",deptName);
|
||||
SysRegionEntity entity = regionDao.selectOne(regionWrapper);
|
||||
if (entity == null) {
|
||||
return 0L;
|
||||
}else{
|
||||
return entity.getId();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -73,5 +73,18 @@
|
|||
WHERE
|
||||
`status` = 1
|
||||
</select>
|
||||
<insert id="batchSaveUser" parameterType="java.util.List">
|
||||
INSERT INTO user_bak (displayName,distinguishedName,userPrincipalName,telephoneNumber,objectGUID,sAMAccountName,primaryGroupID)
|
||||
values
|
||||
<foreach collection="list" item="item" separator="," >
|
||||
(
|
||||
#{item.displayName},#{item.distinguishedName},#{item.userPrincipalName},#{item.telephoneNumber},
|
||||
#{item.objectGUID},#{item.sAMAccountName},#{item.primaryGroupID}
|
||||
)
|
||||
</foreach>
|
||||
</insert>
|
||||
<select id="getUserByName" parameterType="java.lang.String" resultType="io.renren.modules.sys.entity.SysUserEntity">
|
||||
SELECT id,username FROM sys_user WHERE username = #{username} limit 1
|
||||
</select>
|
||||
|
||||
</mapper>
|
|
@ -0,0 +1,292 @@
|
|||
package io.renren.common.utils;
|
||||
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import javax.naming.Context;
|
||||
import javax.naming.NamingEnumeration;
|
||||
import javax.naming.NamingException;
|
||||
import javax.naming.directory.Attribute;
|
||||
import javax.naming.directory.SearchControls;
|
||||
import javax.naming.directory.SearchResult;
|
||||
import javax.naming.ldap.*;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* 通过该类完成金宏系统中 部门和用户名信息的提取
|
||||
*/
|
||||
@Component
|
||||
public class JhlDAPTool {
|
||||
private String URL = "ldap://15.72.158.50:389/";
|
||||
private String BASEDN = "DC=qd,DC=gov,DC=cn";//指定从哪里开始搜索,从上往下推
|
||||
private String username = "CN=智慧发改项目认证接入,OU=管理开发用户,DC=qd,DC=gov,DC=cn";//要登录的账号所在位置,从下往上推
|
||||
private String password = "QD@zhfg2019";
|
||||
private String FACTORY = "com.sun.jndi.ldap.LdapCtxFactory";
|
||||
|
||||
LdapContext ctx = null;
|
||||
Control[] connCtls = null;
|
||||
|
||||
//登录LDAP服务器
|
||||
public LdapContext LDAP_connect(String OU) {
|
||||
|
||||
//1. 设置初始LDAP上下文的属性,并初始化LDAP上下文
|
||||
Hashtable<String, String> env = new Hashtable<String, String>();
|
||||
env.put(Context.INITIAL_CONTEXT_FACTORY, FACTORY);
|
||||
if(StringUtils.isEmpty(OU)){
|
||||
env.put(Context.PROVIDER_URL, URL +BASEDN);//路径
|
||||
}else{
|
||||
env.put(Context.PROVIDER_URL, URL + "OU="+OU+","+BASEDN);//路径
|
||||
}
|
||||
env.put(Context.SECURITY_AUTHENTICATION, "simple");
|
||||
env.put(Context.SECURITY_PRINCIPAL, username); // 管理员
|
||||
env.put(Context.SECURITY_CREDENTIALS, password); // 管理员密码
|
||||
// **解决 乱码 的关键一句
|
||||
env.put("java.naming.ldap.attributes.binary","objectGUID");
|
||||
try {
|
||||
ctx = new InitialLdapContext(env, connCtls);
|
||||
System.out.println( "连接成功" );
|
||||
return ctx;
|
||||
} catch (javax.naming.AuthenticationException e) {
|
||||
System.out.println("连接失败:");
|
||||
e.printStackTrace();
|
||||
} catch (Exception e) {
|
||||
System.out.println("连接出错:"+e.getMessage());
|
||||
e.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private void closeContext(){
|
||||
if (ctx != null) {
|
||||
try {
|
||||
ctx.close();
|
||||
}
|
||||
catch (NamingException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据区名获取用户信息
|
||||
* @param
|
||||
* @param
|
||||
* @return
|
||||
*/
|
||||
public List<Map> readLdap(LdapContext ctx){//OU=即墨区,
|
||||
|
||||
List<Map> lm=new ArrayList<Map>(1000);
|
||||
byte[] cookie = null;
|
||||
|
||||
try {
|
||||
if(ctx!=null) {
|
||||
|
||||
//2. 设置查询的属性
|
||||
SearchControls searchControls = new SearchControls();//搜索控件
|
||||
searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE);//搜索范围,1只搜索指定命名对象的一个级别,这是缺省值,2以指定命名对象为根结点的整棵树
|
||||
//分页
|
||||
ctx.setRequestControls(new Control[]{new PagedResultsControl(2, Control.CRITICAL)});
|
||||
|
||||
do {
|
||||
NamingEnumeration<SearchResult> answer = ctx.search("", "sAMAccountType=805306368", searchControls);
|
||||
//NamingEnumeration<SearchResult> answer = ctx.search("", "objectCategory=CN=Person,CN=Schema,CN=Configuration,DC=gov,DC=cn", searchControls);
|
||||
while (answer.hasMore()) {
|
||||
SearchResult result = (SearchResult) answer.next();
|
||||
NamingEnumeration<? extends Attribute> attrs = result.getAttributes().getAll();
|
||||
//System.out.println("getNameInNamespace-》"+result.getNameInNamespace());//CN=李平先,OU=抬三,OU=即墨普东中心社区,OU=即墨中心社区,OU=即墨区,DC=qd,DC=gov,DC=cn
|
||||
Map<String,Object> user = new HashMap<>();
|
||||
while (attrs.hasMore()) {
|
||||
Attribute next = attrs.next();
|
||||
//System.out.println(next);
|
||||
|
||||
if ("displayName".equals(next.getID())) {
|
||||
user.put("real_name",next.get().toString());
|
||||
//user.setDisplayName(next.get().toString());
|
||||
}else if("sAMAccountName".equals(next.getID())){
|
||||
user.put("username",next.get().toString());
|
||||
//user.setSamaccountName(next.get().toString());
|
||||
}else if("userPrincipalName".equals(next.getID())){
|
||||
user.put("email",next.get().toString());
|
||||
//user.setUserPrincipalName(next.get().toString());
|
||||
}else if("telephoneNumber".equals(next.getID())){
|
||||
user.put("mobile",next.get().toString());
|
||||
//user.setTelephoneNumber(next.get().toString());
|
||||
}else if("distinguishedName".equals(next.getID())){
|
||||
//CN=葛琳,OU=城阳区疾病预防控制中心,OU=城阳区卫生健康局,OU=区属机关,OU=城阳区,DC=qd,DC=gov,DC=cn
|
||||
// String distinguishedName = next.get().toString();
|
||||
// String[] distinguishedNames = distinguishedName.split(",");
|
||||
// String deptName = distinguishedNames[1].split("=")[1];
|
||||
user.put("distinguishedName",next.get().toString());
|
||||
}else if("objectGUID".equals(next.getID())){
|
||||
String guidStr = next.getID().toString();
|
||||
user.put("id",SingleID.getSingleID(guidStr));
|
||||
String guid = guidStr.substring(1,guidStr.length()-1);
|
||||
user.put("guid",guid);
|
||||
|
||||
}
|
||||
}
|
||||
lm.add(user);
|
||||
|
||||
}
|
||||
cookie = parseControls(ctx.getResponseControls());
|
||||
ctx.setRequestControls(new Control[]{new PagedResultsControl(2, cookie, Control.CRITICAL)});
|
||||
} while (cookie != null && (cookie.length != 0));
|
||||
}
|
||||
|
||||
}catch (Exception e) {
|
||||
System.out.println("获取用户信息异常:");
|
||||
e.printStackTrace();
|
||||
}finally {
|
||||
closeContext();
|
||||
}
|
||||
System.out.println(lm.size());
|
||||
return lm;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取管理部门信息
|
||||
* @param ctx
|
||||
* @param filter
|
||||
* @return
|
||||
*/
|
||||
public List<Map<String,Object>> readLdap(LdapContext ctx,String filter){
|
||||
|
||||
List<Map<String,Object>> lm=new ArrayList<>(1000);
|
||||
byte[] cookie = null;
|
||||
|
||||
try {
|
||||
if(ctx!=null) {
|
||||
|
||||
//过滤条件
|
||||
//String filter = "(&(objectClass=*)(uid=*))";
|
||||
//String filter = "(&(userAccountControl=66048)(sAMAccountType=805306368))";
|
||||
//String[] attrPersonArray = {"sAMAccountName", "distinguishedName", "displayName"};
|
||||
//String[] attrPersonArray = { "uid", "userPassword", "displayName", "cn", "sn", "mail", "description","uidNumber","gidNumber" };
|
||||
|
||||
//2. 设置查询的属性
|
||||
SearchControls searchControls = new SearchControls();//搜索控件
|
||||
searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE);//搜索范围,1只搜索指定命名对象的一个级别,这是缺省值,2以指定命名对象为根结点的整棵树 SearchControls.SUBTREE_SCOPE
|
||||
//searchControls.setReturningAttributes(attrPersonArray);
|
||||
//分页
|
||||
ctx.setRequestControls(new Control[]{new PagedResultsControl(2, Control.CRITICAL)});
|
||||
|
||||
//IdentifierGenerator identifierGenerator=new DefaultIdentifierGenerator();
|
||||
do {
|
||||
//3.(1)要搜索的上下文或对象的名称;(2).过滤条件,可为null,默认搜索所有信息;(3).搜索控件,可为null,使用默认的搜索控件
|
||||
//objectCategory=CN=Person,CN=Schema,CN=Configuration,DC=gov,DC=cn
|
||||
//sAMAccountType=805306368
|
||||
|
||||
NamingEnumeration<SearchResult> answer = ctx.search("", filter, searchControls);
|
||||
//NamingEnumeration<SearchResult> answer = ctx.search("", "objectCategory=CN=Person,CN=Schema,CN=Configuration,DC=gov,DC=cn", searchControls);
|
||||
|
||||
//<SearchResult> answer = ctx.search("",filter.toString(),searchControls);
|
||||
while (answer.hasMore()) {
|
||||
SearchResult result = (SearchResult) answer.next();
|
||||
NamingEnumeration<? extends Attribute> attrs = result.getAttributes().getAll();
|
||||
//System.out.println(result.getName());//CN=李平先,OU=抬三,OU=即墨普东中心社区,OU=即墨中心社区
|
||||
//System.out.println(result.getClass());
|
||||
System.out.println("getNameInNamespace-》"+result.getNameInNamespace());//CN=李平先,OU=抬三,OU=即墨普东中心社区,OU=即墨中心社区,OU=即墨区,DC=qd,DC=gov,DC=cn
|
||||
Map<String,Object> dept = new HashMap<>();
|
||||
while (attrs.hasMore()) {
|
||||
Attribute next = attrs.next();
|
||||
//System.out.println(next);
|
||||
|
||||
if ("name".equals(next.getID())) {
|
||||
String name = next.get().toString();
|
||||
dept.put("name",name);
|
||||
//dept.put("id",SingleID.getSingleID(name));
|
||||
}else if("distinguishedName".equals(next.getID())){
|
||||
//OU=事业发展中心,OU=办公厅,OU=人大常委会,DC=qd,DC=gov,DC=cn
|
||||
dept.put("namespace",next.get());
|
||||
}else if("instanceType".equals(next.getID())){
|
||||
dept.put("instancetype",next.get());
|
||||
}
|
||||
else if("objectGUID".equals(next.getID())){
|
||||
//{49D369CC-9DD3-407D-B618-01B00496039B}
|
||||
byte[] GUID = (byte[])next.get();
|
||||
String guid = getGUID(GUID);
|
||||
String id = SingleID.getSingleID(guid);
|
||||
dept.put("id",String.valueOf(id));
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
dept.put("pid",0);
|
||||
dept.put("pids","");
|
||||
if(!dept.get("name").toString().contains("停用") && !dept.get("name").toString().contains("删除") && !dept.get("name").toString().contains("人员") && !dept.get("name").toString().contains("临时")){
|
||||
lm.add(dept);
|
||||
}
|
||||
//System.out.println("-----------------------------------------------");
|
||||
}
|
||||
cookie = parseControls(ctx.getResponseControls());
|
||||
ctx.setRequestControls(new Control[]{new PagedResultsControl(2, cookie, Control.CRITICAL)});
|
||||
} while (cookie != null && (cookie.length != 0));
|
||||
}
|
||||
|
||||
}catch (Exception e) {
|
||||
System.out.println("获取区域信息异常:");
|
||||
e.printStackTrace();
|
||||
}finally {
|
||||
closeContext();
|
||||
}
|
||||
System.out.println(lm.size());
|
||||
return lm;
|
||||
}
|
||||
|
||||
|
||||
//解决objectGUID乱码的具体方法
|
||||
private static String getGUID(byte[] GUID) {
|
||||
|
||||
String strGUID = "";
|
||||
String byteGUID = "";
|
||||
//Convert the GUID into string using the byte format
|
||||
for (int c=0;c<GUID.length;c++) {
|
||||
byteGUID = byteGUID + "\\" + AddLeadingZero((int)GUID[c] & 0xFF);
|
||||
}
|
||||
strGUID = "{";
|
||||
strGUID = strGUID + AddLeadingZero((int)GUID[3] & 0xFF);
|
||||
strGUID = strGUID + AddLeadingZero((int)GUID[2] & 0xFF);
|
||||
strGUID = strGUID + AddLeadingZero((int)GUID[1] & 0xFF);
|
||||
strGUID = strGUID + AddLeadingZero((int)GUID[0] & 0xFF);
|
||||
strGUID = strGUID + "-";
|
||||
strGUID = strGUID + AddLeadingZero((int)GUID[5] & 0xFF);
|
||||
strGUID = strGUID + AddLeadingZero((int)GUID[4] & 0xFF);
|
||||
strGUID = strGUID + "-";
|
||||
strGUID = strGUID + AddLeadingZero((int)GUID[7] & 0xFF);
|
||||
strGUID = strGUID + AddLeadingZero((int)GUID[6] & 0xFF);
|
||||
strGUID = strGUID + "-";
|
||||
strGUID = strGUID + AddLeadingZero((int)GUID[8] & 0xFF);
|
||||
strGUID = strGUID + AddLeadingZero((int)GUID[9] & 0xFF);
|
||||
strGUID = strGUID + "-";
|
||||
strGUID = strGUID + AddLeadingZero((int)GUID[10] & 0xFF);
|
||||
strGUID = strGUID + AddLeadingZero((int)GUID[11] & 0xFF);
|
||||
strGUID = strGUID + AddLeadingZero((int)GUID[12] & 0xFF);
|
||||
strGUID = strGUID + AddLeadingZero((int)GUID[13] & 0xFF);
|
||||
strGUID = strGUID + AddLeadingZero((int)GUID[14] & 0xFF);
|
||||
strGUID = strGUID + AddLeadingZero((int)GUID[15] & 0xFF);
|
||||
strGUID = strGUID + "}";
|
||||
|
||||
return strGUID;
|
||||
}
|
||||
static String AddLeadingZero(int k) {
|
||||
return (k <= 0xF) ? "0" + Integer.toHexString(k) : Integer
|
||||
.toHexString(k);
|
||||
}
|
||||
|
||||
//分页查询时下次查询要用的cookie
|
||||
private static byte[] parseControls(Control[] controls)
|
||||
throws NamingException {
|
||||
byte[] cookie = null;
|
||||
if (controls != null) {
|
||||
for (int i = 0; i < controls.length; i++) {
|
||||
if (controls[i] instanceof PagedResultsResponseControl) {
|
||||
PagedResultsResponseControl prrc = (PagedResultsResponseControl) controls[i];
|
||||
cookie = prrc.getCookie();
|
||||
System.out.println(">>Next Page \n");
|
||||
}
|
||||
}
|
||||
}
|
||||
return (cookie == null) ? new byte[0] : cookie;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
package io.renren.common.utils;
|
||||
|
||||
import java.math.BigInteger;
|
||||
import java.security.MessageDigest;
|
||||
|
||||
/**
|
||||
* 字符串根据MD5计算出定长的唯一数字,符合mysql bigint的取值范围
|
||||
*/
|
||||
public class SingleID {
|
||||
public static String getSingleID(String s) throws Exception{
|
||||
// 第一步,获取MessageDigest对象,参数为MD5字符串,表示这是一个MD5算法
|
||||
MessageDigest md5 = MessageDigest.getInstance("MD5");
|
||||
|
||||
md5.update(s.getBytes());
|
||||
|
||||
//计算MD5值
|
||||
byte[] bytes = md5.digest();
|
||||
byte[] newBytes = new byte[8];
|
||||
//因为转化的数字太长了,所以截取部分进行转化
|
||||
System.arraycopy(bytes,6,newBytes,0,8);
|
||||
BigInteger bigInt = new BigInteger(1, newBytes);
|
||||
String resultStr = bigInt.toString(10);
|
||||
return resultStr.substring(0,resultStr.length()-1);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue