wuxw
2022-05-10 b2b5bdf6f42597e582da96aa56707e1f68d3936e
java110-core/src/main/java/com/java110/core/factory/CommunitySettingFactory.java
@@ -5,8 +5,10 @@
import com.java110.utils.cache.BaseCache;
import com.java110.utils.factory.ApplicationContextFactory;
import com.java110.utils.util.SerializeUtil;
import com.java110.utils.util.StringUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.java110.core.log.LoggerFactory;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import redis.clients.jedis.Jedis;
import java.util.List;
@@ -15,6 +17,9 @@
    //日志
    private static Logger logger = LoggerFactory.getLogger(CommunitySettingFactory.class);
    public static final String KEY_FEE_SCALE = "SCALE";
    public static final int DEFAULE_FEE_SCALE = 2;
    /**
@@ -48,6 +53,37 @@
        return communitySettingDto.getSettingValue();
    }
    /**
     * 查询设置值
     *
     * @param communityId
     * @param key
     * @return
     */
    public static String getRemark(String communityId, String key) {
        Jedis redis = null;
        CommunitySettingDto communitySettingDto = null;
        try {
            redis = getJedis();
            Object object = SerializeUtil.unserialize(redis.get((communityId + "_" + key + "_community_setting").getBytes()));
            if (object == null) {//这里存在并发问题,但是 等于查询了多次 然后多次写缓存,作者认为 这种应该比加全局锁效率高些
                communitySettingDto = getCommunitySettingFromDb(communityId, key, redis);
            } else {
                communitySettingDto = (CommunitySettingDto) object;
            }
        } finally {
            if (redis != null) {
                redis.close();
            }
        }
        if (communitySettingDto == null) {
            return null;
        }
        return communitySettingDto.getRemark();
    }
    public static CommunitySettingDto getCommunitySettingFromDb(String communityId, String key) {
        Jedis redis = null;
        try {
@@ -58,13 +94,15 @@
                redis.close();
            }
        }
    }
    private static CommunitySettingDto getCommunitySettingFromDb(String communityId, String key, Jedis redis) {
        ICommunitySettingInnerServiceSMO communitySettingInnerServiceSMOImpl
                = ApplicationContextFactory.getBean(ICommunitySettingInnerServiceSMO.class.getName(), ICommunitySettingInnerServiceSMO.class);
        ICommunitySettingInnerServiceSMO communitySettingInnerServiceSMOImpl = null;
        try {
            communitySettingInnerServiceSMOImpl = ApplicationContextFactory.getBean(ICommunitySettingInnerServiceSMO.class.getName(), ICommunitySettingInnerServiceSMO.class);
        } catch (NoSuchBeanDefinitionException e) {
            communitySettingInnerServiceSMOImpl = ApplicationContextFactory.getBean("communitySettingInnerServiceSMOImpl", ICommunitySettingInnerServiceSMO.class);
        }
        CommunitySettingDto communitySettingDto = new CommunitySettingDto();
        communitySettingDto.setCommunityId(communityId);
        communitySettingDto.setSettingKey(key);
@@ -75,6 +113,23 @@
        redis.set((communityId + "_" + key + "_community_setting").getBytes(), SerializeUtil.serialize(communitySettingDtos.get(0)));
        return communitySettingDtos.get(0);
    }
    /**
     * 手工保存数据
     *
     * @param communitySettingDto
     */
    public static void saveCommunitySetting(CommunitySettingDto communitySettingDto) {
        Jedis redis = null;
        try {
            redis = getJedis();
            redis.set((communitySettingDto.getCommunityId() + "_" + communitySettingDto.getSettingKey() + "_community_setting").getBytes(), SerializeUtil.serialize(communitySettingDto));
        } finally {
            if (redis != null) {
                redis.close();
            }
        }
    }
    /**
@@ -107,4 +162,37 @@
        return communitySettingDto;
    }
    /**
     * 查询小数点 位数
     *
     * @param communityId
     * @return
     */
    public static int getFeeScale(String communityId) {
        String scale = getValue(communityId, KEY_FEE_SCALE);
        if (StringUtil.isEmpty(scale)) {
            //防止每次都需要 查询数据库 增加 压力,这里像缓存中写入默认值
            CommunitySettingDto communitySettingDto = new CommunitySettingDto();
            communitySettingDto.setCommunityId(communityId);
            communitySettingDto.setSettingKey(KEY_FEE_SCALE);
            communitySettingDto.setSettingName("小数点位数");
            communitySettingDto.setCsId("-1");
            communitySettingDto.setSettingValue(DEFAULE_FEE_SCALE + "");
            communitySettingDto.setSettingType(CommunitySettingDto.SETTING_TYPE_FEE);
            communitySettingDto.setRemark("费用计算小数点位数,0至4整数");
            saveCommunitySetting(communitySettingDto);
            return DEFAULE_FEE_SCALE;
        }
        if (!StringUtil.isInteger(scale)) {
            return DEFAULE_FEE_SCALE;
        }
        int scaleInt = Integer.parseInt(scale);
        if (scaleInt > 4 || scaleInt < 0) {
            return DEFAULE_FEE_SCALE;
        }
        return scaleInt;
    }
}