美文网首页
需要研究的

需要研究的

作者: 盗生一 | 来源:发表于2020-12-08 11:37 被阅读0次
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;
    }

}

相关文章

网友评论

      本文标题:需要研究的

      本文链接:https://www.haomeiwen.com/subject/lgufgktx.html