admin
2019-07-30 573c491b4a1ba60e12a5678a01c1546c0077c1ee
fanli/src/main/java/com/yeshi/fanli/service/impl/user/HistorySearchServiceImpl.java
@@ -1,159 +1,29 @@
package com.yeshi.fanli.service.impl.user;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.springframework.orm.hibernate4.HibernateCallback;
import org.springframework.stereotype.Service;
import com.yeshi.fanli.dao.user.HistorySearchDao;
import com.yeshi.fanli.entity.admin.HistorySearchAdmin;
import com.yeshi.fanli.dao.mybatis.HistorySearchMapper;
import com.yeshi.fanli.entity.bus.search.HistorySearch;
import com.yeshi.fanli.service.inter.user.HistorySearchService;
import com.yeshi.fanli.util.TimeUtil;
import com.yeshi.fanli.util.Utils;
@Service
public class HistorySearchServiceImpl implements HistorySearchService {
   @Resource
   private HistorySearchDao historySearchDao;
   private HistorySearchMapper historySearchMapper;
   public void addHistorySearch(String searchKey, String bid) {
      searchKey = searchKey != null && searchKey.length() > 64 ? searchKey.substring(0, 64) : searchKey;
      HistorySearch historySearch = new HistorySearch();
      historySearch.setName(searchKey);
      historySearch.setBusinessId(bid);
      historySearch.setCreatetime(new Date());
      historySearch.setState(0);
      historySearchDao.create(historySearch);
   }
   public List<HistorySearch> getHistorySearch(String bid) {
      List list = historySearchDao.list("select hs,MAX(hs.id) as maxid from HistorySearch hs where hs.state=0 and hs.businessId=? GROUP BY hs.name order by maxid desc ",0,10,new String[]{bid});
      List<HistorySearch> hlist= new ArrayList<HistorySearch>();
      for(int i = 0 ; i <list.size() ;i++ ){
         hlist.add((HistorySearch)((Object[])list.get(i))[0]);
      }
      return hlist;
   }
   public int clearHistorySearch(final String bid) {
      return (Integer) historySearchDao.excute(new HibernateCallback() {
         public Object doInHibernate(Session session)
               throws HibernateException {
            int count;
            try {
               session.getTransaction().begin();
               Query query = session.createQuery("update HistorySearch hs set hs.state=1 where businessId=?");
               query.setString(0, bid);
               count = query.executeUpdate();
               session.getTransaction().commit();
               return count;
            } catch (Exception e) {
               e.printStackTrace();
               session.getTransaction().rollback();
            }
            return 0;
         }
      });
   }
   @SuppressWarnings("unchecked")
   public Map<String, Integer> getSearchTotalByDate(int days, Date date) {
      final Map<String, Integer> map =new HashMap<String, Integer>();
      long timestampms = date.getTime();
      final List<String> list = TimeUtil.getEmupDate(days,timestampms);
      for (String dataStr : list) {
         map.put(dataStr, 0);
      }
      return (Map<String, Integer>) historySearchDao.excute(new HibernateCallback<Map<String, Integer>>() {
         public Map<String, Integer> doInHibernate(Session session)
               throws HibernateException {
            StringBuffer sb = new StringBuffer();
            int ii=0;
            for (String day : list) {
               if(ii==0){
                  sb.append("SELECT '"+day+"' AS t,IFNULL(SUM(a.s),0) FROM yeshi_ec_history_search_day a WHERE a.c<= '"+day+"' ");
               }else{
                  sb.append("UNION ALL SELECT '"+day+"' AS t,IFNULL(SUM(a.s),0) FROM yeshi_ec_history_search_day a WHERE a.c<= '"+day+"' ");
               }
               ii++;
            }
            SQLQuery sqlQuery = session.createSQLQuery(sb.toString());
            List<Object[]> list = sqlQuery.list();
            for (Object[] objArr : list) {
                  map.put(String.valueOf(objArr[0]),((BigDecimal)objArr[1]).intValue());
            }
            return map;
         }
      });
   }
   @SuppressWarnings("unchecked")
   public Map<String, Integer> getSearchTotalByMonth(int months, Date date) {
       final List<String> monthList = Utils.getDateMonthList(months,date);
       final Map<String, Integer> map =new HashMap<String, Integer>();
       for (String monthStr : monthList) {
          map.put(monthStr, 0);
      }
       return (Map<String, Integer>) historySearchDao.excute(new HibernateCallback<Map<String, Integer>>() {
            public Map<String, Integer> doInHibernate(Session session)
                  throws HibernateException {
               StringBuffer sb = new StringBuffer();
               int ii=0;
               for (String month : monthList) {
                  if(ii==0){
                     sb.append("SELECT '"+month+"' AS t,IFNULL(SUM(a.s),0) FROM yeshi_ec_history_search_month a WHERE a.months<= '"+month+"' ");
                  }else{
                     sb.append("UNION ALL SELECT '"+month+"' AS t,IFNULL(SUM(a.s),0) FROM yeshi_ec_history_search_month a WHERE a.months<= '"+month+"' ");
                  }
                  ii++;
               }
               SQLQuery sqlQuery = session.createSQLQuery(sb.toString());
               List<Object[]> list = sqlQuery.list();
               for (Object[] objArr : list) {
                     map.put((String) objArr[0],((BigDecimal)objArr[1]).intValue());
               }
               return map;
            }
         });
   }
   @SuppressWarnings("unchecked")
   public List<HistorySearchAdmin> getSearchRankByDate(final int days, final Date date) {
   return   (List<HistorySearchAdmin>) historySearchDao.excute(new HibernateCallback<List<HistorySearchAdmin>>() {
         public List<HistorySearchAdmin> doInHibernate(Session session)
               throws HibernateException {
            SQLQuery query = session.createSQLQuery("SELECT `name`,COUNT(`name`) `sum` FROM yeshi_ec_history_search WHERE createtime >= DATE_SUB(?,INTERVAL ? DAY) AND createtime < ? GROUP BY `name` ORDER BY `sum` DESC LIMIT 0,20");
            query.setParameter(0, date);
            query.setParameter(1, days);
            query.setParameter(2, date);
            List<HistorySearchAdmin> list = query.list();
            return list;
         }
      });
      historySearchMapper.insertSelective(historySearch);
   }
}