package com.gxhj.safecommunity.perception.utils;
import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
import com.gxhj.commontools.utils.CollectionUtils;
import com.gxhj.commontools.utils.StringUtils;
import com.gxhj.core.annotation.FieldAttachFile;
import com.gxhj.core.base.service.ICommonService;
import com.gxhj.safecommunity.perception.constant.PerceptionConst;
import com.gxhj.safecommunity.person.entity.PersonInfo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.validation.ConstraintViolation;
import javax.validation.ConstraintViolationException;
import java.lang.reflect.Field;
import java.util.*;
import java.util.stream.Collectors;
public class PerceptionUtil {
private static final Logger log = LoggerFactory.getLogger(PerceptionUtil.class);
/**
* 获取异常信息中的提示
*
* @param ex 异常信息
* @auth ZJP
*/
public static String getExceptionMessage(Exception ex) {
String message = "";
// 验证未通过,则显示错误信息
if (ex instanceof ConstraintViolationException) {
List<String> msgList = ((ConstraintViolationException) ex).getConstraintViolations()
.stream()
.map(ConstraintViolation::getMessage)
.collect(Collectors.toList());
message = StringUtils.appendStrList(msgList, ";");
} else {
message = ex.getMessage();
}
return message;
}
/**
* 给对象中所有照片字段的值拼接Base64
*
* @param <T> 数据
* @auth ZJP
*/
public static <T> void photoFieldAppendBase64(T t) {
// 获取当前对象及父类对象中所有字段
// Field[] fields = t.getClass().getDeclaredFields();
List<Field> fields = new ArrayList<>(Arrays.asList(t.getClass().getDeclaredFields()));
if(t.getClass().getSuperclass() != null) {
fields.addAll(new ArrayList<>(Arrays.asList(t.getClass().getSuperclass().getDeclaredFields())));
}
for (Field field : fields) {
if (field.getAnnotation(FieldAttachFile.class) == null)
continue;
// private字段时,需要设置为true,才可以访问和设置对象
field.setAccessible(true);
try {
Object value = field.get(t);
// 当图片值不为空,并且长度大于60时,则认为是base64的值,并拼接base64的标识
if (StringUtils.isNotEmpty(value) && value.toString().length() > 60) {
field.set(t, PerceptionConst.Base64Start + value.toString());
}
} catch (Exception e) {
log.error("该数据字段值获取/赋值失败,字段:" + field.getName() + ", 数据:" + t.toString());
}
field.setAccessible(false);
}
}
/**
* 查询info对象,并转换成map
*
* @param service 查询的service
* @param idsKey ids的查询字段
* @param ids 查询条件,如:id的集合
* @param key map的key对应字段
* @param value map的value对应字段
* @auth ZJP
*/
public static <T, V extends T> Map<?, ?> getInfoMapByids(ICommonService<V, T> service, SFunction<T, ?> idsKey, List<String> ids, SFunction<T, ?> key, SFunction<T, ?> value) {
if (CollectionUtils.isEmpty(ids))
return new HashMap<>();
return service.lambdaQuery().in(idsKey, ids).isNotNull(value).list().stream().collect(Collectors.toMap(key, value));
}
/**
* 将list中的info对象,转换成List单个字段,并去重
*
* @param list info对象list
* @param idsKey 转换的数据字段
* @auth ZJP
*/
public static <T> List<?> listInfoFormatList(List<T> list, SFunction<T, ?> idsKey) {
return list.stream().map(idsKey).distinct().collect(Collectors.toList());
}
/**
* 创建人员信息
*
* @param idcard 身份证号
* @param name 姓名
* @param contactNumber 联系电话
* @param licensePlate 车牌号
* @auth ZJP
*/
public static PersonInfo createPersonInfo(String idcard, String name, String contactNumber, String licensePlate) {
PersonInfo personInfo = new PersonInfo();
personInfo.setName(name);
personInfo.setIdcard(idcard);
personInfo.setContactNumber(contactNumber);
personInfo.setLicensePlates(licensePlate);
return personInfo;
}
}
网友评论