All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.cehome.task.service.DatabaseConfigService Maven / Gradle / Ivy

There is a newer version: 2.0.5
Show newest version
package com.cehome.task.service;

import com.cehome.task.dao.TimeTaskCacheDao;
import com.cehome.task.domain.TimeTaskCache;
import jsharp.sql.SessionFactory;
import jsharp.util.DataValue;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.*;

public class DatabaseConfigService implements ConfigService,InitializingBean {

    @Autowired
    TimeTaskCacheDao timeTaskCacheDao;
    SessionFactory sessionFactory;
    private static String EXPIRE="( expire is null or expire>now())";

    //private String sqlDateAdd;
    private String sqlDateAddNow;
    private String sqlReplace;
    private String sqlReplaceKeys;

    public DatabaseConfigService(boolean mysql){
        if(mysql){
            //sqlDateAdd="date_add(expire, interval ? second)";
            sqlDateAddNow="date_add(now(), interval ? second)";
            sqlReplace="replace";
            sqlReplaceKeys="";
        }else{

            //sqlDateAdd="dateadd( 'second' ,?, expire)";
            sqlDateAddNow="dateadd('second',?,now())";
            sqlReplace="MERGE";
            sqlReplaceKeys=" key(main_key, sub_key) ";
        }
    }

    @Override
    public boolean hset(String key, String field, String value) {
        String sql=sqlReplace+" into "+timeTaskCacheDao.getTableName()+" (main_key, sub_key,value,create_time,update_time,expire) "+ sqlReplaceKeys+" values(?,?,?,now(),now(),null)";
        sessionFactory.updateBySQL(sql,key,field,value);
        return true;
    }

    @Override
    public boolean hdel(String key, String... fields) {
        StringBuilder sb=new StringBuilder();
        for(String f:fields){
            if(sb.length()>0){
                sb.append(',');
            }
            sb.append("'"+f+"'");

        }

        String sql="delete from "+timeTaskCacheDao.getTableName()+" where main_key=? and sub_key in ("+sb+")";
        return  sessionFactory.updateBySQL(sql,key)>0;

    }

    @Override
    public boolean hexists(String key, String field) {
        String sql="select count(*) from "+timeTaskCacheDao.getTableName()+" where main_key=? and sub_key=? and "+EXPIRE;
        DataValue dataValue= timeTaskCacheDao.queryValue(sql,key,field);
        return dataValue!=null && dataValue.getInt(0)>0;
    }

    @Override
    public boolean expire(String key, int seconds) {
        String sql="update "+timeTaskCacheDao.getTableName()+" set expire="+sqlDateAddNow+"  where  main_key=? and "+EXPIRE;
        return sessionFactory.updateBySQL(sql,seconds,key)>1;

    }

    @Override
    public Map hgetAll(String key) {
        List list=timeTaskCacheDao.queryList("main_key=? and "+EXPIRE,key);
        Map result=new HashMap<>();
        for(TimeTaskCache timeTaskCache:list){
            result.put(timeTaskCache.getSubKey(),timeTaskCache.getValue());
        }
        return result;


    }

    @Override
    public String hget(String key, String field) {
        String sql="select value from "+timeTaskCacheDao.getTableName()+" where main_key=? and sub_key=? and "+EXPIRE;
        DataValue dataValue= timeTaskCacheDao.queryValue(sql,key,field);
        if(dataValue==null) return null;
        return  dataValue.getStr();

    }



    @Override
    public boolean sadd(String key, String member) {
        String sql=sqlReplace+"  into "+timeTaskCacheDao.getTableName()+" (main_key, sub_key,value,create_time,update_time,expire)"+sqlReplaceKeys+" values(?,?,'',now(),now(),null)";
        sessionFactory.updateBySQL(sql,key,member);
        return true;
    }

    @Override
    public boolean srem(String key, String... members) {
        StringBuilder sb=new StringBuilder();
        for(String f:members){
            if(sb.length()>0){
                sb.append(',');
            }
            sb.append(f);

        }

        String sql="delete from "+timeTaskCacheDao.getTableName()+" where main_key=?  value in ("+sb+")";
        return  sessionFactory.updateBySQL(sql,key)>0;
    }

    @Override
    public Set smembers(String key) {
        List list=timeTaskCacheDao.queryList("main_key=? and "+EXPIRE,key);
        Set set=new HashSet<>();
        for(TimeTaskCache timeTaskCache:list){
            set.add(timeTaskCache.getSubKey());
        }
        return set;
    }

    @Override
    public boolean simpleLock(String key, int timeout) {
        if(timeout<=0) throw new RuntimeException("timeout must >0");
        TimeTaskCache timeTaskCache= timeTaskCacheDao.queryOne("select now() update_time, expire,version from "+ timeTaskCacheDao.getTableName()
                +" where main_key=?",key);
        if(timeTaskCache==null){
            String sql="insert into "+timeTaskCacheDao.getTableName()+"(main_key, sub_key,value,expire,create_time,update_time) values(?,?,?,"+sqlDateAddNow+",now(),now())";
            try {
                sessionFactory.updateBySQL(sql,key,"0","1",timeout);
                return true;
            }catch (Exception e){
                return false;
            }


        }else{
            if(timeTaskCache.getUpdateTime().before(timeTaskCache.getExpire())){
                return false;
            }
            long version=timeTaskCache.getVersion();
            String sql="update "+timeTaskCacheDao.getTableName()+" set version=version+1, expire= "+sqlDateAddNow +
                    " where  main_key=? and version=? ";
            return sessionFactory.updateBySQL(sql,timeout,key,version)>0;
        }

    }

    @Override
    public boolean simpleUnlock(String key) {
        String sql="update "+timeTaskCacheDao.getTableName()+" set expire="+sqlDateAddNow+" where  main_key=? " ;
        return sessionFactory.updateBySQL(sql,-1,key)>0;
        // timeTaskCacheDao.deleteByWhere("main_key=?",key);
       // return true;
    }

    @Override
    public long getTime() {
       Date date=(Date) sessionFactory.queryValue("select now()").getValue();
       return date.getTime();

    }

    @Override
    public void afterPropertiesSet() throws Exception {
        sessionFactory=timeTaskCacheDao.getSessionFactory();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy