Newer
Older
casic-metering / casic-metering-common / src / main / java / com / casic / missiles / utils / DictCodeUtils.java
wangpeng on 23 Feb 2023 3 KB 空字典不进行校验
package com.casic.missiles.utils;

import com.casic.missiles.annotation.DictCodeField;
import com.casic.missiles.core.application.service.AbstractDictService;
import com.casic.missiles.exception.BusinessException;
import org.apache.commons.lang3.StringUtils;

import java.lang.reflect.Field;
import java.util.Objects;

/**
 * 字典utils
 */
public class DictCodeUtils {
    /**
     * 字典code转换成名称
     */
    public static void convertDictCodeToName(Object object) throws Exception{
        Field[] fields = object.getClass().getDeclaredFields();
        for (Field field:fields)  {
            if (!field.isAccessible()) {
                field.setAccessible(true);
            }
            if (field.isAnnotationPresent(DictCodeField.class) && field.get(object) != null) {
                DictCodeField dictCodeField = field.getAnnotationsByType(DictCodeField.class)[0];
                if (StringUtils.isEmpty(dictCodeField.cacheName())) {
                    throw new BusinessException(500, "缓存名不能为空");
                }
                AbstractDictService dictService = SpringContextUtil.getBean(AbstractDictService.class);
                if(Objects.isNull(field.get(object)) || StringUtils.isEmpty(field.get(object).toString())){
                    continue;
                }
                String name = dictService.getDictNameByCode(dictCodeField.cacheName(), field.get(object).toString());
                if (StringUtils.isEmpty(name)) {
                    throw new BusinessException(500, dictCodeField.message());
                }
                String destFieldName = field.getName() + "Name";
                Field destField = object.getClass().getDeclaredField(destFieldName);
                if (destField == null) {
                    throw new BusinessException(500, "字典名称字段不存在");
                }
                if(!destField.isAccessible()) {
                    destField.setAccessible(true);
                }
                destField.set(object, name);
            }
        }
    }

    /**
     * 校验字典code是否合法
     * @param object
     * @return
     */
    public static boolean validDictCode(Object object) throws Exception{
        Field[] fields = object.getClass().getDeclaredFields();
        for (Field field:fields) {
            if (!field.isAccessible()) {
                field.setAccessible(true);
            }
            if (field.isAnnotationPresent(DictCodeField.class) && field.get(object) != null && !field.get(object).equals("")) {
                DictCodeField dictCodeField = field.getAnnotationsByType(DictCodeField.class)[0];
                // 判断字典code是否需要校验
                if(!dictCodeField.needValid()){
                    continue;
                }
                AbstractDictService dictService = SpringContextUtil.getBean(AbstractDictService.class);
                if (StringUtils.isEmpty(dictCodeField.cacheName())) {
                    throw new BusinessException(500, "缓存名不能为空");
                }
                String name = dictService.getDictNameByCode(dictCodeField.cacheName(), field.get(object).toString());
                if (StringUtils.isEmpty(name)) {
                    throw new BusinessException(500, dictCodeField.message());
                }
                dictCodeField.message();
            }
        }
        return true;
    }

}