package com.ruoyi.common.utils;

import com.ruoyi.project.business.domain.TpAreaParaSelectItem;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class Tools {
    /**
     *
     * @param date1
     * @param date2
     * @return  false 不相等 true 相等
     */
    public  static Boolean compareUpdateDt(Date date1, Date date2){
        if(date1 != null  && date2 != null){
            return date1.compareTo(date2) != 0;
        }
        if((date1 == null && date2 != null) ||  (date1 != null && date2 == null)){
            return true;
        }
        return false;
    }

    /**
     * 泛型List转List对象
     * 比JSON.parseArray(JSON.toJSONString(),T.class)
     * 快40倍
     *
     * @param obj 转换参数
     * @param cla 实体类
     * @param <T> 泛型
     * @return
     */
    public static <T> List<T> toList(Object obj, Class<T> cla) {
        List<T> list = new ArrayList<T>();
        //判断参数是否为List类型
        if (obj instanceof List<?>) {
            for (Object o : (List<?>) obj) {
                //将父类对象强制转换为子类对象
                list.add(cla.cast(o));
            }
            return list;
        }
        return null;
    }

    /**
     * list按指定长度分割
     *
     * @param targetList 目标list
     * @param groupSize  分割长度
     * @return 【请填写功能名称】
     */
    public static <T> List<List<T>> splitList(List<T> targetList, int groupSize) {
        int length = targetList.size();
        // 计算可以分成多少组
        int num = (length + groupSize - 1) / groupSize;
        List<List<T>> newList = new ArrayList<>(num);
        for (int i = 0; i < num; i++) {
            // 开始位置
            int fromIndex = i * groupSize;
            // 结束位置
            int toIndex = (i + 1) * groupSize < length ? (i + 1) * groupSize : length;

            // 创建子列表的副本*(解决subArrayList无法转为arrayListbug)
            List<T> subLists = new ArrayList<>(targetList.subList(fromIndex, toIndex));
            ArrayList<T> subArrayLists = new ArrayList<>(subLists);

            newList.add(subArrayLists);
        }
        return newList;
    }

    //数字转换为字母（获取版本号）
    public static String numberToLetter(int number) {
        StringBuilder sb = new StringBuilder();
        int length = number/26 + 1; //获取版本位数(最高就给 2位)
        String res= "";
        //设置尾数
        int digit = number % 26; // 获取最低位的数字
        char letter = (char) ('A' + digit - 1); // 将数字转换为对应的字母
        sb.insert(0, letter); // 将字母插入到结果字符串的开头
        if(length > 1){
           //设置首位
            char letterF = (char) ('A' + length - 2); // 将数字转换为对应的字母
            sb.insert(0, letterF); // 将字母插入到结果字符串的开头
        }
        return sb.toString();
    }

}
