package com.ycsoft.report.dao.keycon;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.springframework.stereotype.Component;
import com.ycsoft.beans.system.SDataRightType;
import com.ycsoft.commons.exception.ReportException;
import com.ycsoft.commons.helper.LoggerHelper;
import com.ycsoft.commons.helper.StringHelper;
import com.ycsoft.daos.core.JDBCException;
import com.ycsoft.report.bean.RepFileKeyValue;
import com.ycsoft.report.bean.RepKeyCon;
import com.ycsoft.report.bean.RepKeyLevel;
import com.ycsoft.report.bean.RepKeySystem;
import com.ycsoft.report.commons.ReportConstants;
import com.ycsoft.report.commons.SystemConfig;
import com.ycsoft.report.db.ConnContainer;
import com.ycsoft.report.query.key.Impl.QueryKeyValue;
import com.ycsoft.report.query.sql.AnalyseMemoryKey;
@Component
public class QueryKeyValueDao {
/**
* 页面组件获取初始化值
* @param countyid
* @param key
* @param fkey_value
* @param optr
* @param rep_role
* @param systemkeyvaluemap
* @return
* @throws JDBCException
* @throws ReportException
*/
public List<QueryKeyValue> fineList(String countyid, String key,String fkey_value) throws ReportException{
RepKeyCon keycon= SystemConfig.getConMap().get(key);
if(keycon==null) throw new ReportException(key+"is not config or is null");
if(keycon.getHtmlcode().equals(ReportConstants.htmlcode_datefield)&&StringHelper.isEmpty(keycon.getValuesql())){
//datefield组件类型的如果取值sql为空 返回空
return new ArrayList<QueryKeyValue>();
}else if( StringHelper.isNotEmpty(keycon.getFkey())&&
StringHelper.isEmpty(fkey_value)) {
// 非datefild组件类型key存在fkey,并传入的fkey_value is null 返回空;
return new ArrayList<QueryKeyValue>();
}
//当repkeycon父级为空且内存键不为空的情况下,从内存中取值
if(StringHelper.isNotEmpty(keycon.getMemorykey())&&StringHelper.isEmpty(keycon.getFkey())){
List<QueryKeyValue> list=AnalyseMemoryKey.getMemoryList(keycon.getMemorykey());
if(list!=null&&list.size()>0)
return list;
else
LoggerHelper.error(this.getClass(),"RepKeyCon_"+keycon.getKey()+".MemoryKey_"+ keycon.getMemorykey()+" is null or size=0.");
}
String sql=keycon.getValuesql();
if(StringHelper.isNotEmpty(fkey_value))
sql=sql.replaceAll(keycon.getFkey(), fkey_value==null?"":fkey_value);
sql=sql.replaceAll("#countyid#", countyid==null?"":countyid);
return findList(keycon.getDatabase(),sql);
}
/**
* 页面组件获取初始化值
* @param countyid
* @param key
* @param fkey_value
* @param optr
* @param rep_role
* @param systemkeyvaluemap
* @return
* @throws JDBCException
* @throws ReportException
*/
public List<QueryKeyValue> fineList(String countyid, String key,
String fkey_value,Integer rep_role,Map<String,String> systemkeyvaluemap,String datarightsql) throws JDBCException, ReportException{
RepKeyCon keycon= SystemConfig.getConMap().get(key);
if(keycon==null) throw new ReportException(key+"is not config or is null");
if(keycon.getHtmlcode().equals(ReportConstants.htmlcode_datefield)&&StringHelper.isEmpty(keycon.getValuesql())){
//datefield组件类型的如果取值sql为空 返回空
return new ArrayList<QueryKeyValue>();
}else if( StringHelper.isNotEmpty(keycon.getFkey())&&
StringHelper.isEmpty(fkey_value)) {
// 非datefild组件类型key存在fkey,并传入的fkey_value is null 返回空;
return new ArrayList<QueryKeyValue>();
}
if(rep_role==null) rep_role=4;
String sql="";
String database="";
if(keycon.getLevle()==-1||keycon.getLevle()>rep_role){
//当repkeycon父级为空且内存键不为空的情况下,从内存中取值
if(StringHelper.isNotEmpty(keycon.getMemorykey())&&StringHelper.isEmpty(keycon.getFkey())){
List<QueryKeyValue> list=AnalyseMemoryKey.getMemoryList(keycon.getMemorykey());
if(list!=null&&list.size()>0)
return list;
else
LoggerHelper.error(this.getClass(),"RepKeyCon_"+keycon.getKey()+".MemoryKey_"+ keycon.getMemorykey()+" is null or size=0.");
}
sql=keycon.getValuesql();
database=keycon.getDatabase();
//datarighttype系统定义的数据权限
if(StringHelper.isNotEmpty(datarightsql)){
sql=sql.replaceAll(ReportConstants.SESSION_REP_ROLE_DATA_KEY, datarightsql);
}else{
sql=sql.replaceAll(ReportConstants.SESSION_REP_ROLE_DATA_KEY, " 1=1 ");
}
}else{
RepKeyLevel keylevel=SystemConfig.getLevelMap().get(keycon.getKey());
//当repkeylevel中内存键和系统键不为空的情况下,从内存中取值
if(StringHelper.isNotEmpty(keylevel.getMemorykey())&&StringHelper.isNotEmpty(keylevel.getSystemkey())){
String id=systemkeyvaluemap.get(keylevel.getSystemkey());
String name=AnalyseMemoryKey.getMemoryIDtoName(keylevel.getMemorykey(), id);
if(name!=null){
QueryKeyValue vo=new QueryKeyValue();
vo.setId(id);
vo.setName(name);
List<QueryKeyValue> list=new ArrayList<QueryKeyValue>();
list.add(vo);
return list;
}else
LoggerHelper.error(this.getClass(),"RepKeyLevel_"+keycon.getKey()+".MemoryKey_"+ keylevel.getMemorykey()+".SystemKeyId="+id+" name is null.");
}
sql=SystemConfig.getLevelMap().get(keycon.getKey()).getValuesql();
}
if(keycon.getFkey()!=null && !keycon.getFkey().equals(""))
sql=sql.replaceAll(keycon.getFkey(), fkey_value==null?"":fkey_value);
sql=sql.replaceAll("#countyid#", countyid==null?"":countyid);
for(RepKeySystem system_key:SystemConfig.getSystemList()){
sql=sql.replaceAll(system_key.getKey(),systemkeyvaluemap.get(system_key.getKey()));
}
return findList(database,sql);
}
public List<QueryKeyValue> findList(String database,String sql) throws ReportException{
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
conn=ConnContainer.getConn(database);
stmt=conn.createStatement();
stmt.setFetchSize(100);
rs=stmt.executeQuery(sql);
LoggerHelper.debug(this.getClass(), "Query_Database:"+database);
LoggerHelper.debug(this.getClass(), sql);
List<QueryKeyValue> list=new ArrayList<QueryKeyValue>();
int index=rs.getMetaData().getColumnCount();
while(rs.next()){
QueryKeyValue vo=new QueryKeyValue();
if(index>=1)
vo.setId(rs.getString(1));
if(index>=2)
vo.setName(rs.getString(2));
if(index>=3)
vo.setPid(rs.getString(3));
list.add(vo);
}
return list;
} catch (SQLException e) {
throw new ReportException("Query_Database:"+database+e.getMessage(),e,sql);
}finally {
try {
if (rs != null)
rs.close();
} catch (Exception e) {
}
try {
if (stmt != null)
stmt.close();
} catch (Exception e) {
}
try {
if (conn != null)
conn.close();
} catch (Exception e) {
}
}
}
/**
* 保存文件组件提交的数据到数据库
* @param file_id
* @param list
* @param database
* @throws ReportException
*/
public void saveuploadqueryfile(String file_id,List<RepFileKeyValue> list,String database) throws ReportException{
Connection conn = null;
PreparedStatement ps=null;
if(list==null&&list.size()==0) return;
try {
conn=ConnContainer.getConn(database);
ps= conn.prepareStatement("insert into rep_filekey_value(file_id,code1,code2,code3,code4,code5,code6,code7,code8,code9,code10,code11,code12" +
",code13,code14,code15,code16,code17,code18,code19,code20)" +
" values(?,?,?,?,?,?,?,?,?,?,?,?,?" +
",?,?,?,?,?,?,?,?)");
for(RepFileKeyValue vo:list){
ps.setString(1,file_id);
ps.setString(2,vo.getCode1());
ps.setString(3,vo.getCode2());
ps.setString(4,vo.getCode3());
ps.setString(5,vo.getCode4());
ps.setString(6,vo.getCode5());
ps.setString(7,vo.getCode6());
ps.setString(8,vo.getCode7());
ps.setString(9,vo.getCode8());
ps.setString(10,vo.getCode9());
ps.setString(11,vo.getCode10());
ps.setString(12,vo.getCode11());
ps.setString(13,vo.getCode12());
ps.setString(14,vo.getCode13());
ps.setString(15,vo.getCode14());
ps.setString(16,vo.getCode15());
ps.setString(17,vo.getCode16());
ps.setString(18,vo.getCode17());
ps.setString(19,vo.getCode18());
ps.setString(20,vo.getCode19());
ps.setString(21,vo.getCode20());
ps.addBatch();
}
ps.executeBatch();
conn.commit();
} catch (SQLException e) {
throw new ReportException(e);
}finally {
try {
if (ps != null)
ps.close();
} catch (Exception e) {
}
try {
if (conn != null)
conn.close();
} catch (Exception e) {
}
}
}
}