package com.yeshi.fanli.service.impl.config; import java.io.Serializable; import java.util.ArrayList; import java.util.Date; import java.util.List; import javax.annotation.Resource; import org.apache.commons.beanutils.PropertyUtils; import org.hibernate.HibernateException; import org.hibernate.Query; import org.hibernate.Session; import org.springframework.cache.annotation.Cacheable; import org.springframework.orm.hibernate4.HibernateCallback; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.yeshi.fanli.dao.config.SystemClientParamsDao; import com.yeshi.fanli.dao.config.SystemHelpListDao; import com.yeshi.fanli.dao.config.SystemSecondProblemDao; import com.yeshi.fanli.dao.mybatis.SystemClientParamsMapper; import com.yeshi.fanli.entity.admin.SystemClientParamsAdmin; import com.yeshi.fanli.entity.system.CustomerContent; import com.yeshi.fanli.entity.system.CustomerName; import com.yeshi.fanli.entity.system.System; import com.yeshi.fanli.entity.system.SystemClientParams; import com.yeshi.fanli.service.inter.config.SystemClientParamsService; import com.yeshi.fanli.service.inter.config.SystemService; import com.yeshi.fanli.util.Constant; import com.yeshi.fanli.util.StringUtil; @Service public class SystemClientParamsServiceImpl implements SystemClientParamsService { @Resource private SystemClientParamsDao systemClientParamsDao; @Resource private SystemClientParamsMapper systemClientParamsMapper; @Resource private SystemHelpListDao systemHelpListDao; @Resource private SystemService systemService; @Resource private SystemSecondProblemDao systemSecondProblemDao; @Cacheable(value = "clientParamCache", key = "#id") public List getSystemClientParamsBySystemId(long id) { return systemClientParamsDao.list("from SystemClientParams scp where scp.system.id=?", new Serializable[] { id }); } public List getAdminList(System system, String key) { List list; List adminList = new ArrayList(); if (system == null) { list = systemClientParamsDao.list("from SystemClientParams scp where scp.name like ? ", new Serializable[] { "%" + key + "%" }); } else { list = systemClientParamsDao.list( "from SystemClientParams scp where scp.system.id = ? and scp.name like ? ", new Serializable[] { system.getId(), "%" + key + "%" }); StringBuffer hqlb = new StringBuffer("from SystemClientParams scp "); int ii = 0; if (list.size() > 0) { for (SystemClientParams scp : list) { if (ii == 0) { hqlb.append(" where ( scp.name = '" + scp.getName() + "' and scp.key = '" + scp.getKey() + "' and scp.value = '" + scp.getValue() + "' ) "); } else { hqlb.append(" or ( scp.name = '" + scp.getName() + "' and scp.key = '" + scp.getKey() + "' and scp.value = '" + scp.getValue() + "' ) "); } ii++; } list = systemClientParamsDao.list(hqlb.toString()); } } SystemClientParamsAdmin scpa = null; for (SystemClientParams scp : list) { scpa = new SystemClientParamsAdmin(scp); if (adminList.contains(scpa)) { int indexof = adminList.indexOf(scpa); SystemClientParamsAdmin systemClientParamsAdmin = adminList.get(indexof); systemClientParamsAdmin.getSystemList().add(scp.getSystem()); } else { scpa.getSystemList().add(scp.getSystem()); adminList.add(scpa); } } return adminList; } @Transactional public void addSystemClientParamsList(SystemClientParams scp, List list) throws Exception { SystemClientParams nscp = null; for (System system : list) { nscp = new SystemClientParams(); nscp.setKey(scp.getKey()); nscp.setName(scp.getName()); nscp.setValue(scp.getValue()); nscp.setSystem(system); nscp.setUpdatetime(java.lang.System.currentTimeMillis()); systemClientParamsDao.create(nscp); } } @Transactional public void deleteSystemClientParams(final SystemClientParams scp, final System system) { systemClientParamsDao.excute(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException { Query query = session.createQuery( "delete from SystemClientParams scp where scp.name = ? and scp.key =? and scp.value = ? and scp.system.id = ?"); query.setParameter(0, scp.getName()); query.setParameter(1, scp.getKey()); query.setParameter(2, scp.getValue()); query.setParameter(3, system.getId()); return query.executeUpdate(); } }); } public void addSystemClientParams(SystemClientParams scp, System system) { scp.setSystem(system); systemClientParamsDao.create(scp); } @Transactional public void deleteSystemClientParams(final SystemClientParams scp) { systemClientParamsDao.excute(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException { Query query = session.createQuery( "delete from SystemClientParams scp where scp.name=? and scp.key = ? and scp.value = ? "); query.setParameter(0, scp.getName()); query.setParameter(1, scp.getKey()); query.setParameter(2, scp.getValue()); return query.executeUpdate(); } }); } public SystemClientParamsAdmin getSystemClientParamsAdmin(final SystemClientParams scp) { return (SystemClientParamsAdmin) systemClientParamsDao.excute(new HibernateCallback() { public SystemClientParamsAdmin doInHibernate(Session session) throws HibernateException { Query query = session .createQuery("from SystemClientParams s where s.key = ?"); query.setParameter(0, scp.getKey()); List list = query.list(); SystemClientParamsAdmin scpa = new SystemClientParamsAdmin(scp); for (SystemClientParams fscp : list) { System system = fscp.getSystem(); if (scpa.getSystemList().contains(system)) { continue; } scpa.getSystemList().add(fscp.getSystem()); scpa.setSystemClientParams(fscp); } return scpa; } }); } @Transactional public void update(final SystemClientParams oscp, final SystemClientParams nscp) { systemClientParamsDao.excute(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException { Query query = session.createQuery( "update SystemClientParams s set s.name=? , s.key=? , s.value=? where s.name=? and s.key = ? "); query.setParameter(0, nscp.getName()); query.setParameter(1, nscp.getKey()); query.setParameter(2, nscp.getValue()); query.setParameter(3, oscp.getName()); query.setParameter(4, oscp.getKey()); return query.executeUpdate(); } }); } @Override public SystemClientParams getSystemClientParamsBySystemAndKey(System system, String key) { List list = systemClientParamsDao.list( "from SystemClientParams scp where scp.system.id=? and scp.key=?", new Serializable[] { system.getId(), key }); if (list == null || list.size() == 0) return null; else return list.get(0); } @Override public Integer getCount(int type) { return systemClientParamsMapper.getCount(type); } @Override public List customerNameList(int page, String key, int type) { int start = page * Constant.PAGE_SIZE; return systemHelpListDao.list( "from CustomerName cn where cn.type = ? and cn.name like ? order by cn.createTime asc", start, Constant.PAGE_SIZE, new Serializable[] {type, "%"+key+"%"}); } @Override public void deleteHelp(long id) { systemHelpListDao.excute(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException { Query query = session.createQuery("delete from CustomerName cn where cn.id = ?"); query.setParameter(0, id); query.executeUpdate(); return null; } }); } @Override public CustomerName getHelpCenter(int type) { return systemClientParamsMapper.getHelpCenter(type); } @Override public Integer getProblemCount(long id) { return systemClientParamsMapper.getProblemCount(id); } @Override public List getSecondProblemList(int index, String key, long id) { int start = index * Constant.PAGE_SIZE; return systemSecondProblemDao.list( "from CustomerContent cc where cc.cnId = ? and cc.title like ? order by cc.createTime asc", start, Constant.PAGE_SIZE, new Serializable[] {id, "%"+key+"%"}); } @Override public void deleteSecondProblem(long id) { systemSecondProblemDao.excute(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException { Query query = session.createQuery("delete from CustomerContent cc where cc.id = ?"); query.setParameter(0, id); query.executeUpdate(); return null; } }); } @Override public CustomerContent getCustomerContent(long id) { return systemSecondProblemDao.find(CustomerContent.class, id); } @Override public void updateAnswerDetail(CustomerContent customerContent) { CustomerContent find = systemSecondProblemDao.find(CustomerContent.class, customerContent.getId()); if(find == null ){ return; } find.setTitle(customerContent.getTitle()); find.setContent(customerContent.getContent()); systemSecondProblemDao.update(find); } @Override public void addFirstMenu(CustomerName customerName, int type) { customerName.setName(customerName.getName()); customerName.setCreateTime(new Date()); customerName.setType(type); systemHelpListDao.save(customerName); } @Override public void addSecondMenu(CustomerContent customerContent, long cnId) { customerContent.setCnId(cnId); customerContent.setTitle(customerContent.getTitle()); customerContent.setContent(customerContent.getContent()); customerContent.setCreateTime(new Date()); systemSecondProblemDao.save(customerContent); } @Override public List contactCustomerService(String title) { return systemClientParamsMapper.contactCustomerService(title); } @Override public List listQuery(int start, int count, String key, Long systemId) { List list = null; if (systemId == null) { if (StringUtil.isNullOrEmpty(key)) { list = systemClientParamsDao.list("from SystemClientParams scp", start, count, null); } else { list = systemClientParamsDao.list("from SystemClientParams scp where (scp.name like ? or scp.key like ?) ", start, count, new Serializable[] { "%" + key + "%" ,"%" + key + "%"}); } } else { if (StringUtil.isNullOrEmpty(key)) { list = systemClientParamsDao.list("from SystemClientParams scp where scp.system.id = ? ", start, count, new Serializable[] {systemId}); } else { list = systemClientParamsDao.list( "from SystemClientParams scp where scp.system.id = ? and (scp.name like ? or scp.key like ?)", start, count, new Serializable[] {systemId, "%" + key + "%" ,"%" + key + "%"}); } } return list; } @Override public long countQuery(String key, Long systemId) { if (systemId == null) { if (StringUtil.isNullOrEmpty(key)) { return systemClientParamsDao.getCount(" select count(id) from SystemClientParams scp"); } else { return systemClientParamsDao.getCount(" select count(id) from SystemClientParams scp where (scp.name like ? or scp.key like ?) ", new Serializable[] { "%" + key + "%" ,"%" + key + "%"}); } } else { if (StringUtil.isNullOrEmpty(key)) { return systemClientParamsDao.getCount(" select count(id) from SystemClientParams scp where scp.system.id = ? ", new Serializable[] {systemId}); } else { return systemClientParamsDao.getCount( " select count(id) from SystemClientParams scp where scp.system.id = ? and (scp.name like ? or scp.key like ?)", new Serializable[] {systemId, "%" + key + "%" ,"%" + key + "%"}); } } } @Transactional @Override public void saveAdd(SystemClientParams scp, List listId) throws Exception { if (listId == null || listId.size() == 0) { return; } SystemClientParams nscp = null; for (Long systemId : listId) { System system = new System(systemId); nscp = new SystemClientParams(); nscp.setKey(scp.getKey()); nscp.setName(scp.getName()); nscp.setValue(scp.getValue()); nscp.setSystem(system); nscp.setUpdatetime(java.lang.System.currentTimeMillis()); systemClientParamsDao.create(nscp); } } @Override public void update(SystemClientParams systemClientParams) { systemClientParamsDao.update(systemClientParams); } @Override public List getById(long id) { return systemClientParamsDao.list("from SystemClientParams scp where scp.id=?", new Serializable[] { id }); } @Transactional @Override public void deleteBatchByPrimaryKey(List ids) { for (Long id: ids) { systemClientParamsDao.excute(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException { Query query = session.createQuery("delete from SystemClientParams scp where scp.id= ?"); query.setParameter(0, id); return query.executeUpdate(); } }); } } }