方法总结
(一)部门公共方法
1.根据部门的id查询所有的上级
/**
* 使用递归拼接该部门的所有上级部门以及当前部门
* @param id
* @return
*/
public String getAllPid(String id){
StringBuffer sb = new StringBuffer();
getPid(id,sb);
String substring = sb.toString().substring(0, sb.length()-1);
return substring;
}
public void getPid(String id,StringBuffer sb){
Depart depart = get(id);
sb.append(id);
sb.append(",");
if (depart==null){
ExceptionUtils.throwProjectException("id为["+id+"]的数据在部门档案,不存在");
}
if(depart.getPid()!=null && !"0".equals(depart.getPid())){
getPid(depart.getPid(),sb);
}
}
2.查询部门下的所有子id
/**
* 通过id获取所有下级部门的部门id (包括父级可以使用)
*/
public List<String> getidById(String id) {
Depart depart = new Depart();
depart.setPid(id);
List<Depart> departs = dao.autoQuery(depart);
List<String> list = Lists.newArrayList();
if (!CollectionUtils.isEmpty(departs)) {
list = departs.stream().map(Depart::getId).collect(Collectors.toList());
}
list.add(id);
return list;
}
3. 输入上级id,查询包含当前id及其所有下级科目的id,逗号拼接
public String getUpDepartIds(String id) {
List<String> tempList = new ArrayList<String>();
// 将父id先存入集合
tempList.add(id);
// 递归查找所有子部门id
tempList = getChild(id, tempList);
String departIds = StringUtils.strip(tempList.toString(), "[]").replace(" ", "");
return departIds;
}
/*递归查询子部门id的方法*/
public List<String> getChild(String id, List<String> a) {
//根据当前部门id查询所有子部门的id
List<String> list = dataDepartDao.getSonDeptIdByParentId(id);//自己的去数据库查询方法
for (int i = 0; i < list.size(); i++) {
a.add(list.get(i));
getChild((String) list.get(i), a);//递归查询
}
return a;
}
(二)预算科目档案
1. 输入上级id,查询包含当前id及其所有下级科目的id,逗号拼接
public String getUpDepartIds(String id) {
List<String> tempList = new ArrayList<String>();
// 将父id先存入集合
//tempList.add(id);
// 递归查找所有子部门id
tempList = getChild(id, tempList);
String ids = "";
if(tempList.size() > 0){
ids = "(";
for (String str : tempList) {
ids = ids+"'"+str+"',";
}
ids = ids.substring(0,ids.length()-1)+")";
}
return ids;
}
/*递归查询子部门id的方法*/
public List<String> getChild(String id, List<String> a) {
//根据当前部门id查询所有子部门的id
List<String> list = dao.getSonDeptIdByParentId(id);//自己的去数据库查询方法
for (int i = 0; i < list.size(); i++) {
a.add(list.get(i));
getChild((String) list.get(i), a);//递归查询
}
return a;
}
2.
(三)redis工具类
1.redis的实例化
/**
* 构造函数,创建对象时进行初始化
*
* @return redis.clients.jedis.Jedis
* @description TODO
* @author QiJie
* @date 2020/10/29 19:16
*/
public static Jedis initRedisUtil(String ip, String passWord) {
//连接本地的 Redis 服务
Jedis jedis = new Jedis(ip);
// 如果 Redis 服务设置来密码,需要下面这行,没有就不需要
if (StringUtils.isNotEmpty(passWord)) {
jedis.auth(passWord);
}
if (jedis != null) {
//查看服务是否运行
System.out.println("服务正在运行: " + jedis.ping());
}
return jedis;
}
2.根据key获取hash的全部值
/**
* 根据key获取hash的全部值
*
* @param dictName 字典名称 字典名称前面拼接一个 dict:
* @param ip redis的ip地址
* @param passWord redis密码 没有密码传 ”“ 空字符串或者空值
* @return java.util.Map<java.lang.String, java.lang.String>
* @throws
* @description TODO
* @author QiJie
* @date 2020/10/29 19:22
*/
public static Map<String, String> getKeyAndValue(String dictName, String ip, String passWord) {
//链接redis
Jedis jedis = initRedisUtil(ip, passWord);
// 获取存储的数据并输出
Map<String, String> dictMap = jedis.hgetAll(dictName);
return dictMap;
}
(四)字符串工具类
1.检验空值或者空字符串或者多个空格组成的字符串
/**
* 检验时候是空值或者空字符串或者多个空格组成的字符串
*
* @param object 对象实体
*/
public static Boolean isEmpty(Object object) {
if (object == null || object.toString().isEmpty()) {
return true;
} else {
return false;
}
}
2.多个空字符的检验信息拼接
备注:每个单据空值检验的时候使用,将所有空值的信息拼接到一快
/**
* 检验时候是空值或者空字符串或者多个空格组成的字符串
*
* @param sb Stringbuffer
* @param object 对象实体
* @param message 报错信息
*/
public static void notEmpty(StringBuffer sb, Object object, String message) {
if (object == null || object.toString().isEmpty()) {
sb.append(message);
sb.append(",");
}
}
(五)反射工具类
1.初始化
备注:下面的所有方法都会用到
/**
* 根据反射类 得到Object
*
* @param className
* @return java.lang.Object
* @throws
* @description TODO
* @author QiJie
* @date 2020/11/30 19:09
*/
public static Object getObject(String className) throws ClassNotFoundException, IllegalAccessException, InstantiationException {
Class<?> tClass = Class.forName(className);
Object obj = tClass.newInstance();
return obj;
}
2.根据对应的单据类型得到对应的实体对象下的全部单据字段集合
/**
* 根据对应的单据类型得到对应的实体对象下的全部单据字段集合
* 单据类型是在字典中定义的 key :单据类型 value :service层的路径
* 字典: dict_batch_type
*
* @param billType 参数是单据类型,单据类型是在字典中定义的 key :单据类型 value :service层的路径
* @return 返回值:java.util.List<java.lang.String>
* @throws
* @description TODO
* @author QiJie
* @date 2020/10/29 14:42
*/
public static Map<String, Object> getEntityAllFiled(String billType) {
if (StringUtils.isEmpty(billType)) {
ExceptionUtils.throwProjectException("单据类型不能为空!");
}
//定义全局存储实体类中的字段
List<String> filedList = new ArrayList<>();
//根据单据类型 通过字典转 获取对应的反射service
String tService = DictUtils.getName("dict_batch_type", billType);
//将tService更换为entity
String tClassString = tService.replace(".service.", ".entity.").replace("Service", "");
//定义最终返回的集合
Map<String, Object> classAll = new HashMap<>();
//转为实体对象
try {
Class<?> tClass = Class.forName(tClassString);
Object obj = tClass.newInstance();
Field[] fs1 = tClass.getDeclaredFields();
for (Field field : fs1) {