package org.hsweb.web.service.impl.module; import org.hsweb.web.bean.common.QueryParam; import org.hsweb.web.bean.po.module.ModuleMeta; import org.hsweb.web.bean.po.module.ModuleMeta.Property; import org.hsweb.web.dao.module.ModuleMetaMapper; import org.hsweb.web.service.impl.AbstractServiceImpl; import org.hsweb.web.service.module.ModuleMetaService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import java.util.List; import java.util.function.Function; import static org.hsweb.web.bean.po.module.ModuleMeta.Property.*; /** * Created by zhouhao on 16-5-10. */ @Service("moduleMetaService") public class ModuleMetaServiceImpl extends AbstractServiceImpl<ModuleMeta, String> implements ModuleMetaService { public static final String CACHE_NAME = "module.meta"; @Autowired private ModuleMetaMapper moduleMetaMapper; @Override protected ModuleMetaMapper getMapper() { return moduleMetaMapper; } @Override @CacheEvict(value = CACHE_NAME, allEntries = true) public int update(ModuleMeta data) { return super.update(data); } @Override @CacheEvict(value = CACHE_NAME, allEntries = true) public String insert(ModuleMeta data) { return super.insert(data); } @Override @CacheEvict(value = CACHE_NAME, allEntries = true) public int delete(String s) { return super.delete(s); } static final Function<String, String> roleIdValueMapper = (value) -> "," + value + ","; protected QueryParam createSelectByKeyAndRoleIdParam(String key, List<String> roleIds) { // (id = ? or key = ? or module_id = ? ) and (role_id like ? or .....) and (role_id is null or role_id ='') return createQuery() //(id = ? or key = ? or module_id = ? ) .nest(id, key).or(Property.key, key).or(moduleId, key).end() //and ((role_id like ? or .....) or (role_id is null or role_id ='')) //遍历roleId,使用 like %% 并将值转为 ,value, 格式进行查询 //如果有条件,应该写sql函数,将数据库中的值转为结果集和参数进行对比 .nest() .nest().each(roleId, roleIds, query -> query::$like$, roleIdValueMapper).end() .orNest().isNull(roleId).or().isEmpty(roleId).end() .end() .getParam(); } @Override @Cacheable(value = CACHE_NAME, key = "'list.key:'+#key+'-roleId:'+#roleId.hashCode()") public List<ModuleMeta> selectByKeyAndRoleId(String key, List<String> roleId) { return this.select(createSelectByKeyAndRoleIdParam(key, roleId)); } @Override @Cacheable(value = CACHE_NAME, key = "'single.key:'+#key+'-roleId:'+#roleId.hashCode()") public ModuleMeta selectSingleByKeyAndRoleId(String key, List<String> roleId) { return this.selectSingle(createSelectByKeyAndRoleIdParam(key, roleId)); } @Override @Cacheable(value = CACHE_NAME, key = "'single.key:'+#key+'-roleId:'+#roleId.hashCode()+'.md5'") public String selectMD5SingleByKeyAndRoleId(String key, List<String> roleId) { ModuleMeta meta = this.selectSingle(createSelectByKeyAndRoleIdParam(key, roleId)); assertNotNull(meta, "数据不存在"); return meta.getMd5(); } }