package com.yeshi.fanli.service.impl.user; import java.io.Serializable; import java.math.BigDecimal; import java.math.BigInteger; import java.util.ArrayList; import java.util.Calendar; 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.cache.annotation.Cacheable; import org.springframework.orm.hibernate4.HibernateCallback; import org.springframework.stereotype.Service; import com.yeshi.fanli.dao.user.ScanHistoryDao; import com.yeshi.fanli.entity.admin.ScanHistoryAdmin; import com.yeshi.fanli.entity.system.System; import com.yeshi.fanli.entity.taobao.PidUser; import com.yeshi.fanli.entity.taobao.ScanHistory; import com.yeshi.fanli.entity.taobao.SearchFilter; import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief; import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBriefExtra; import com.yeshi.fanli.entity.taobao.TaoBaoSearchResult; import com.yeshi.fanli.entity.taobao.TaoBaoUnionConfig; import com.yeshi.fanli.service.inter.hongbao.HongBaoManageService; import com.yeshi.fanli.service.inter.taobao.TaoBaoUnionConfigService; import com.yeshi.fanli.service.inter.user.ScanHistoryService; import com.yeshi.fanli.util.Constant; import com.yeshi.fanli.util.TimeUtil; import com.yeshi.fanli.util.Utils; import com.yeshi.fanli.util.taobao.TaoBaoUtil; @Service public class ScanHistoryServiceImpl implements ScanHistoryService { @Resource private ScanHistoryDao scanHistoryDao; @Resource private HongBaoManageService hongBaoManageService; @Resource private TaoBaoUnionConfigService taoBaoUnionConfigService; public void addScanHistory(ScanHistory scanHistory) { scanHistoryDao.create(scanHistory); } public List getScanHistory(long systemid, String device, int page, int count, long uid) { List list = scanHistoryDao.list( "select sh , MAX(sh.id) as maxid from ScanHistory sh where ((sh.system.id=? and sh.device=?) or (sh.uid = ?)) and sh.state=0 GROUP BY sh.auctionId order by maxid desc ", (page - 1) * count, count, new Serializable[] { systemid, device, uid }); List shList = new ArrayList(); for (int i = 0; i < list.size(); i++) { shList.add((ScanHistory) ((Object[]) list.get(i))[0]); } return shList; } public long getScanHistoryCount(long systemid, String device, long uid) { return scanHistoryDao.getCountSQL( "select count(b.a) from (select sh.auctionId a from yeshi_ec_scanhistory sh where ((sh.systemid=? and sh.device=?) or sh.uid = ? ) and sh.state=0 GROUP BY sh.auctionId) b ", new Serializable[] { systemid, device, uid }); } public List getScanHistoryByUid(int index, long uid) { int start = index * Constant.PAGE_SIZE; List list = scanHistoryDao.list("from ScanHistory sh where sh.uid=? order by sh.id desc ", start, Constant.PAGE_SIZE, new Serializable[] { uid }); return list; } public int getCountByUid(long uid) { Long lcount = scanHistoryDao.getCount("select count(sh.uid) from ScanHistory sh where sh.uid=?", new Serializable[] { uid }); return lcount.intValue(); } public long getScanHistory(long startTime, long endTime) { Date start = new Date(startTime); Date end = new Date(endTime); return scanHistoryDao.getCount( "select count(sh.id) from ScanHistory sh where sh.createtime >= ? and sh.createtime < ? ", new Serializable[] { start, end }); } @SuppressWarnings("unchecked") public List getTop(final long startTime, final long endTime, final int topSum) { final Date start = new Date(startTime); final Date end = new Date(endTime); return (List) scanHistoryDao.excute(new HibernateCallback>() { public List doInHibernate(Session session) throws HibernateException { Query query = session.createQuery( "SELECT sh.title,count(sh.id) as counts from ScanHistory sh where sh.createtime >= ? and sh.createtime < ? GROUP BY sh.auctionId ORDER BY counts desc"); query.setParameter(0, start); query.setParameter(1, end); query.setFirstResult(0); query.setMaxResults(topSum); List list = query.list(); return list; } }); } @SuppressWarnings("unchecked") public Map getDataCountByDate(final int day) { final Map map = new HashMap(); List list = TimeUtil.getEmupDate(day); for (String dataStr : list) { map.put(dataStr, 0); } return (Map) scanHistoryDao.excute(new HibernateCallback>() { public Map doInHibernate(Session session) throws HibernateException { SQLQuery sqlQuery = session.createSQLQuery( "SELECT createtime,COUNT(*) FROM yeshi_ec_scanhistory WHERE DATE_SUB(CURDATE(), INTERVAL ? DAY) <= DATE(createtime) GROUP BY createtime"); sqlQuery.setParameter(0, day); List list = sqlQuery.list(); for (Object[] objArr : list) { map.put(TimeUtil.getSimpleDate((Date) objArr[0]), ((BigInteger) objArr[1]).intValue()); } return map; } }); } @SuppressWarnings("unchecked") public Map getDataCountByDate(final int day, final String endtime) { long stamp = TimeUtil.convertDateToTemp(endtime); final Map map = new HashMap(); List list = TimeUtil.getEmupDate(day, stamp); for (String dataStr : list) { map.put(dataStr, 0); } return (Map) scanHistoryDao.excute(new HibernateCallback>() { public Map doInHibernate(Session session) throws HibernateException { SQLQuery sqlQuery = session.createSQLQuery( "SELECT createtime,COUNT(*) FROM yeshi_ec_scanhistory WHERE DATE_SUB(?, INTERVAL ? DAY) <= DATE(createtime) AND DATE(createtime) <= ? GROUP BY createtime"); sqlQuery.setParameter(0, endtime); sqlQuery.setParameter(1, day); sqlQuery.setParameter(2, endtime); List list = sqlQuery.list(); for (Object[] objArr : list) { map.put(TimeUtil.getSimpleDate((Date) objArr[0]), ((BigInteger) objArr[1]).intValue()); } return map; } }); } @SuppressWarnings("unchecked") public Map getDataCountByMonth(final int cmonth, final Date endDate) { // SELECT *,DATE_FORMAT(createtime,'%Y-%m') months FROM // yeshi_ec_scanhistory WHERE createtime BETWEEN DATE_SUB(NOW(),INTERVAL // 6 MONTH) AND NOW() GROUP BY months; List monthList = Utils.getDateMonthList(cmonth, endDate); final Map map = new HashMap(); for (String monthStr : monthList) { map.put(monthStr, 0); } return (Map) scanHistoryDao.excute(new HibernateCallback>() { public Map doInHibernate(Session session) throws HibernateException { Calendar calendar = Calendar.getInstance(); calendar.setTime(endDate); calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH) + 1); calendar.set(Calendar.DAY_OF_MONTH, 1); String curTime = TimeUtil.getSimpleDate(calendar.getTime()); SQLQuery sqlQuery = session.createSQLQuery( "SELECT DATE_FORMAT(createtime,'%Y-%m') months,count(*) FROM yeshi_ec_scanhistory WHERE createtime >= DATE_SUB(?,INTERVAL ? MONTH) AND createtime < ? GROUP BY months"); sqlQuery.setParameter(0, curTime); sqlQuery.setParameter(1, cmonth); sqlQuery.setParameter(2, curTime); List list = sqlQuery.list(); for (Object[] objArr : list) { map.put((String) objArr[0], ((BigInteger) objArr[1]).intValue()); } return map; } }); } @Cacheable(value="crgCache") @SuppressWarnings("unchecked") public List getHotTaoBaoGoodsBriefExtras(final String key, final int pageIndex) { final List config = taoBaoUnionConfigService .getConfigByTypeCache(PidUser.TYPE_FANLI_ANDROID); return (List) scanHistoryDao .excute(new HibernateCallback>() { public List doInHibernate(Session session) throws HibernateException { SearchFilter filter = new SearchFilter(); filter.setKey(key); filter.setPage(pageIndex); filter.setSort(TaoBaoUtil.SORT_SALE_HIGH_TO_LOW); filter.setType(0); TaoBaoSearchResult result = TaoBaoUtil.search2(filter, config.get(0)); List taoBaoGoodsBriefs = result.getTaoBaoGoodsBriefs(); List tbbeList = new ArrayList(); TaoBaoGoodsBriefExtra taoBaoGoodsBriefExtra; BigDecimal rate = hongBaoManageService.getFanLiRate(); for (TaoBaoGoodsBrief taoBaoGoodsBrief : taoBaoGoodsBriefs) { taoBaoGoodsBriefExtra = TaoBaoUtil.getTaoBaoGoodsBriefExtra(taoBaoGoodsBrief, rate.toString(), ""); tbbeList.add(taoBaoGoodsBriefExtra); } return tbbeList; } }); } public void deleteScanHistory(final String device, final System sys, final long uid) { scanHistoryDao.excute(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException { try { session.getTransaction().begin(); Query query = session.createQuery( "update ScanHistory sh set sh.state=1 where ((sh.device = ? and sh.system.id = ? ) or sh.uid = ? ) "); query.setParameter(0, device); query.setParameter(1, sys.getId()); query.setParameter(2, uid); query.executeUpdate(); session.getTransaction().commit(); } catch (Exception e) { e.printStackTrace(); session.getTransaction().rollback(); } return null; } }); } public void deleteScanHistory(final String device, final System sys, final long auctionId, final long uid) { scanHistoryDao.excute(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException { try { session.getTransaction().begin(); Query query = session.createQuery( "update ScanHistory sh set sh.state=1 where ((sh.device = ? and sh.system.id = ? ) or sh.uid = ? ) and sh.auctionId = ? "); query.setParameter(0, device); query.setParameter(1, sys.getId()); query.setParameter(2, uid); query.setParameter(3, auctionId); query.executeUpdate(); session.getTransaction().commit(); } catch (Exception e) { e.printStackTrace(); session.getTransaction().rollback(); } return null; } }); } }