Java tutorial
/* * Project: guahao-portal-biz-core * * File Created at 2012-5-17 * * Copyright 2012 Greenline.com Corporation Limited. * All rights reserved. * * This software is the confidential and proprietary information of * Greenline Company. ("Confidential Information"). You shall not * disclose such Confidential Information and shall use it only in * accordance with the terms of the license agreement you entered into * with Greenline.com. */ package com.greenline.guahao.biz.manager.cache.hrs; import java.util.Iterator; import java.util.List; import org.apache.commons.lang.StringUtils; import org.springframework.dao.DataAccessException; import org.springframework.data.redis.core.BoundHashOperations; import org.springframework.data.redis.core.BulkMapper; import org.springframework.data.redis.core.RedisOperations; import org.springframework.data.redis.core.SessionCallback; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.core.query.SortQuery; import org.springframework.data.redis.core.query.SortQueryBuilder; import org.springframework.data.redis.support.collections.DefaultRedisList; import org.springframework.data.redis.support.collections.RedisList; import com.greenline.guahao.biz.manager.cache.CacheBase; import com.greenline.guahao.biz.manager.hrs.dataobject.ClinicTypeDO; import com.greenline.guahao.biz.manager.hrs.dataobject.HospitalDO; import com.greenline.guahao.biz.manager.hrs.dataobject.HospitalLevelDO; import com.greenline.guahao.biz.manager.hrs.dataobject.HospitalRuleDO; /** * @Type HospitalCacheManager * @Desc ? * <ul> * <li>hosp:levels ---id--json</li> * <li>hosp:{id}----?json</li> * </ul> * @author weirui.shenwr * @date 2012-5-17 * @Version V1.0 */ public class HospitalCacheManager extends CacheBase { /** * KEY? */ public static final String HOSPITAL = "hosp:"; public static final String HOSPITAL_LEVEL = HOSPITAL + "levels"; /** * key? */ public static final String CLINIC_TYPE = HOSPITAL + "ctype:"; public static final String HOSPITAL_RULE = "hospRule:"; /** * @param template */ public HospitalCacheManager(StringRedisTemplate template) { super(template); } /** * hospital KEY * * @param id * @return */ public String hospitalKey(String id) { return HOSPITAL + id; } public String hospitalRuleKey(String id) { return HOSPITAL_RULE + id; } public String hospPlatKey(String id) { return HOSPITAL + id + ":plat"; } public BoundHashOperations<String, String, String> hospPlat(String id) { BoundHashOperations<String, String, String> ops = template.boundHashOps(hospPlatKey(id)); return ops; } /** * * * @param parentId * @return */ private RedisList<String> hospitallevels() { return new DefaultRedisList<String>(HOSPITAL_LEVEL, template); } /** * * * @param list */ public void setHospLevels(final List<HospitalLevelDO> list) { if (list == null || list.isEmpty()) { return; } final RedisList<String> leveList = hospitallevels(); leveList.clear(); leveList.getOperations().execute(new SessionCallback<Object>() { @SuppressWarnings({ "unchecked", "rawtypes" }) public Object execute(RedisOperations operations) throws DataAccessException { operations.watch(leveList.getKey()); operations.multi(); for (HospitalLevelDO obj : list) { leveList.add(jackjson.writeString(obj)); } operations.exec(); return null; } }); // setExpire(leveList); } // ================================================================================// /** * key * * @param hospitalId * @return */ public String clinicTypesKey(String hospitalId) { return "hid:" + hospitalId + ":cTypes"; } /** * ?? * * @param hospitalId * @return */ private RedisList<String> clinicTypes(String hospitalId) { return new DefaultRedisList<String>(clinicTypesKey(hospitalId), template); } /** * ? * * @param hospitalId * @param list */ public void setClinicTypes(String hospitalId, final List<ClinicTypeDO> list) { if (StringUtils.isEmpty(hospitalId) || list == null || list.isEmpty()) { return; } final RedisList<String> clinicTypes = clinicTypes(hospitalId); clinicTypes.clear(); clinicTypes.getOperations().execute(new SessionCallback<Object>() { @SuppressWarnings({ "unchecked", "rawtypes" }) public Object execute(RedisOperations operations) throws DataAccessException { operations.watch(clinicTypes.getKey()); operations.multi(); for (ClinicTypeDO obj : list) { clinicTypes.add(obj.getId()); } operations.exec(); return null; } }); for (ClinicTypeDO obj : list) { setClinicType(obj.getId(), obj); } setExpire(clinicTypes); } /** * ? * * @param id * @param clinicType */ private void setClinicType(String id, ClinicTypeDO clinicType) { if (StringUtils.isEmpty(id) || clinicType == null) { return; } String json = jackjson.writeString(clinicType); setExpire(clinicTypeKey(clinicType.getId()), json); } /** * key * * @param id * @return */ private String clinicTypeKey(String id) { return CLINIC_TYPE + id; } /** * ?? * * @return */ public List<ClinicTypeDO> listClinicTypes(String hospitalId) { if (StringUtils.isEmpty(hospitalId)) { return null; } String key = clinicTypesKey(hospitalId); return listClinicTypeByKey(key); } /** * ?? * * @param key * @return */ private List<ClinicTypeDO> listClinicTypeByKey(String key) { SortQuery<String> query = SortQueryBuilder.sort(key).noSort().get(CLINIC_TYPE + "*").build(); BulkMapper<ClinicTypeDO, String> hm = new BulkMapper<ClinicTypeDO, String>() { @Override public ClinicTypeDO mapBulk(List<String> bulk) { Iterator<String> iterator = bulk.iterator(); ClinicTypeDO c = jackjson.read(iterator.next(), ClinicTypeDO.class); return c; } }; return cleanExpireData(key, template.sort(query, hm)); } // ================================================================================// /** * ? * * @return */ public List<HospitalLevelDO> listHospLevels() { SortQuery<String> query = SortQueryBuilder.sort(HOSPITAL_LEVEL).noSort().get("#").build(); BulkMapper<HospitalLevelDO, String> hm = new BulkMapper<HospitalLevelDO, String>() { @Override public HospitalLevelDO mapBulk(List<String> bulk) { Iterator<String> iterator = bulk.iterator(); return jackjson.read(iterator.next(), HospitalLevelDO.class); } }; return template.sort(query, hm); } /** * DO * * @param hosp */ public void setHospital(String id, HospitalDO hosp) { if (StringUtils.isEmpty(id) || hosp == null) { return; } String json = jackjson.writeString(hosp); String key = hospitalKey(hosp.getId()); setExpire(key, json); } /** * ?DO * * @param id * @return */ public HospitalDO getHospital(String id) { return jackjson.read(template.opsForValue().get(hospitalKey(id)), HospitalDO.class); } /** * ?DO * * @param id uuid * @return */ public HospitalRuleDO getHospitalRule(String id) { return jackjson.read(template.opsForValue().get(hospitalRuleKey(id)), HospitalRuleDO.class); } /** * * * @param id uuid * @param hospRuleDo */ public void setHospitalRule(String id, HospitalRuleDO hospRuleDo) { if (StringUtils.isEmpty(id) || hospRuleDo == null) { return; } String json = jackjson.writeString(hospRuleDo); String key = hospitalRuleKey(hospRuleDo.getHospitaluuid()); setExpire(key, json); } }