/**
* SSubSystemDao.java 2010/09/07
*/
package com.ycsoft.business.dao.system;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.stereotype.Component;
import com.ycsoft.beans.base.OptrBase;
import com.ycsoft.beans.system.SItemvalue;
import com.ycsoft.beans.system.SSysChange;
import com.ycsoft.beans.system.SSysChangeContent;
import com.ycsoft.commons.constants.SysChangeType;
import com.ycsoft.commons.helper.DateHelper;
import com.ycsoft.commons.helper.StringHelper;
import com.ycsoft.daos.abstracts.BaseEntityDao;
import com.ycsoft.daos.core.JDBCException;
import com.ycsoft.daos.core.Pager;
/**
* SSysChangeDao -> S_SYS_CHANGE table's operator
*/
@Component
public class SSysChangeDao extends BaseEntityDao<SSysChange> {
/**
* default empty constructor
*/
public SSysChangeDao() {}
public List<SItemvalue> queryChangeId(SysChangeType changeType, String idDesc) throws Exception{
String sql = "select t.key item_value, t.key_desc|| ' - ' || t.key as item_name from s_sys_change t " +
" where t.change_type=? and T.KEY_DESC like '%" + idDesc + "%' order by t.create_time desc";
List<SItemvalue> list = createQuery(SItemvalue.class,sql, changeType.toString()).list();
List<SItemvalue> result = new ArrayList<SItemvalue>();
Map<String, SItemvalue> map = new HashMap<String, SItemvalue>();
for(SItemvalue value:list){
String key = value.getItem_value();
if(!map.containsKey(key)){
map.put(key, value);
}
}
result.addAll(map.values());
return result;
}
/**
* 角色变更的时候,插入异动时候重新查询下操作员的姓名,防止内存的数据未更新.
* @param roleId
* @return
* @throws Exception
*/
public List<OptrBase> getOptrRole(String role_id) throws Exception{
String cond=" ";
String sql="select optr.optr_name,t1.* from s_optr_role t1,s_optr optr where t1.optr_id = optr.optr_id ";
if(StringHelper.isNotEmpty(role_id)){
cond = " and t1.role_id = '"+role_id+"'";
}
sql = sql +cond;
return createQuery(OptrBase.class, sql).list();
}
/**
*
*/
@Override
public int[] save(SSysChange...entitys) throws JDBCException {
if(entitys==null||entitys.length==0)
return null;
String sql=" insert into s_sys_change_content(change_id,idx,content) values(?,?,?)";
for(SSysChange o:entitys){
if(o.getChange_id()==null||o.getChange_id().trim().equals("")){
o.setChange_id(this.findSequence().toString());
}
int index=o.getContent().length()/2000;
for (int i = 0; i <= index; i++) {
if (i == index){
this.executeUpdate(sql, o.getChange_id(),i,o.getContent().substring(i*2000));
}else{
this.executeUpdate(sql, o.getChange_id(),i,o.getContent().substring(i*2000,(i+1)*2000));
}
}
}
return super.save(entitys);
}
/**
*
* @param endDate
* @param beginDate
* @param changeType
* @param id
* @param start
* @param limit
* @return
* @throws Exception
*/
public Pager<SSysChange> queryChangeInfo(Date beginDate, Date endDate, SysChangeType changeType, String id, Integer start, Integer limit) throws Exception{
//要求结束日期的也要查到
if(endDate !=null){
endDate = DateHelper.addDate(endDate, 1);
}
List<Object> params = new ArrayList<Object>();
String sql = "select t.* from S_SYS_CHANGE t where t.change_type = ? ";
params.add(changeType.toString());
if(StringHelper.isNotEmpty(id)){
sql += " and t.key = ? ";
params.add(id);
}
if(null == beginDate && null!=endDate){//结束时间为空
sql += " and t.create_time < ? ";
params.add(endDate);
}else if(null != beginDate && null==endDate){//开始时间为空
sql += " and t.create_time > ? ";
params.add(beginDate);
}else if(null != beginDate && null!=endDate){//两者都不为空
sql += " and t.create_time between ? and ? ";
params.add(beginDate);
params.add(endDate);
}
sql += "order by t.create_time desc ";
Pager<SSysChange> page= createQuery(sql,params.toArray() ).setLimit(limit).setStart(start).page();
StringBuilder buffer=new StringBuilder();
for(SSysChange o: page.getRecords()){
sql="select * from S_SYS_CHANGE_CONTENT where change_id=? order by idx";
List<SSysChangeContent> contentDetail = this.createQuery(SSysChangeContent.class, sql, o.getChange_id()).list();
for(SSysChangeContent con: contentDetail){
buffer.append(con.getContent());
}
o.setContent(buffer.toString());
buffer.delete(0, buffer.length());
}
return page;
}
}