PersionPinYinBuffer.java 2.35 KB
package com.bsth.data.pinyin;

import com.bsth.data.BasicData;
import com.bsth.entity.Personnel;
import com.bsth.entity.sys.CompanyAuthority;
import com.github.stuxuhai.jpinyin.PinyinException;
import com.github.stuxuhai.jpinyin.PinyinFormat;
import com.github.stuxuhai.jpinyin.PinyinHelper;
import com.google.common.collect.ArrayListMultimap;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

/**
 * 人员拼音数据映射缓存
 * Created by panzhao on 2017/7/19.
 */
@Component
public class PersionPinYinBuffer {

    static ArrayListMultimap<String, PersionPinYin> listMultimap = ArrayListMultimap.create();
    static List<PersionPinYin> all = new ArrayList<>();

    Logger log = LoggerFactory.getLogger(this.getClass());


    public void refresh(){
        ArrayListMultimap<String, PersionPinYin> listMultimapCopy = ArrayListMultimap.create();
        List<PersionPinYin> allCopy = new ArrayList<>();
        PersionPinYin ppy;

        Collection<Personnel> list = BasicData.perMap.values();
        for(Personnel p : list){
            ppy = new PersionPinYin();
            ppy.setCompanyId(p.getCompanyCode());
            ppy.setFgsCompanyId(p.getBrancheCompanyCode());
            ppy.setName(p.getPersonnelName());
            ppy.setWorkId(p.getJobCode());
            try {
                ppy.setFullChars(PinyinHelper.convertToPinyinString(ppy.getName(), "" , PinyinFormat.WITHOUT_TONE));
                ppy.setCamelChars(PinyinHelper.getShortPinyin(ppy.getName()));
            }catch (PinyinException pye){
                log.error("拼音转换出现异常," + ppy.getName(), pye);
                continue;
            }

            listMultimapCopy.put(ppy.getCompanyId() + "_" + ppy.getFgsCompanyId(), ppy);
            allCopy.add(ppy);
        }

        if(allCopy.size() > 0){
            all = allCopy;
            listMultimap = listMultimapCopy;
        }
    }

    public List<PersionPinYin> getAll(){
        return all;
    }

    public List<PersionPinYin> getAll(List<CompanyAuthority> auths){
        List<PersionPinYin> rs = new ArrayList<>();
        for(CompanyAuthority ca : auths){
            rs.addAll(listMultimap.get(ca.getCompanyCode() + "_" + ca.getSubCompanyCode()));
        }
        return rs;
    }
}