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.BusinessSystem;
|
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<ScanHistory> 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<ScanHistory> shList = new ArrayList<ScanHistory>();
|
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<ScanHistory> getScanHistoryByUid(int index, long uid) {
|
|
int start = index * Constant.PAGE_SIZE;
|
List<ScanHistory> 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<ScanHistoryAdmin> getTop(final long startTime, final long endTime, final int topSum) {
|
|
final Date start = new Date(startTime);
|
final Date end = new Date(endTime);
|
return (List<ScanHistoryAdmin>) scanHistoryDao.excute(new HibernateCallback<List<ScanHistoryAdmin>>() {
|
|
public List<ScanHistoryAdmin> 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<ScanHistoryAdmin> list = query.list();
|
return list;
|
}
|
});
|
|
}
|
|
@SuppressWarnings("unchecked")
|
public Map<String, Integer> getDataCountByDate(final int day) {
|
final Map<String, Integer> map = new HashMap<String, Integer>();
|
List<String> list = TimeUtil.getEmupDate(day);
|
for (String dataStr : list) {
|
map.put(dataStr, 0);
|
}
|
return (Map<String, Integer>) scanHistoryDao.excute(new HibernateCallback<Map<String, Integer>>() {
|
|
public Map<String, Integer> 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<Object[]> list = sqlQuery.list();
|
for (Object[] objArr : list) {
|
map.put(TimeUtil.getSimpleDate((Date) objArr[0]), ((BigInteger) objArr[1]).intValue());
|
}
|
return map;
|
}
|
});
|
}
|
|
@SuppressWarnings("unchecked")
|
public Map<String, Integer> getDataCountByDate(final int day, final String endtime) {
|
long stamp = TimeUtil.convertDateToTemp(endtime);
|
final Map<String, Integer> map = new HashMap<String, Integer>();
|
List<String> list = TimeUtil.getEmupDate(day, stamp);
|
for (String dataStr : list) {
|
map.put(dataStr, 0);
|
}
|
return (Map<String, Integer>) scanHistoryDao.excute(new HibernateCallback<Map<String, Integer>>() {
|
|
public Map<String, Integer> 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<Object[]> list = sqlQuery.list();
|
for (Object[] objArr : list) {
|
map.put(TimeUtil.getSimpleDate((Date) objArr[0]), ((BigInteger) objArr[1]).intValue());
|
}
|
return map;
|
}
|
});
|
}
|
|
@SuppressWarnings("unchecked")
|
public Map<String, Integer> 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<String> monthList = Utils.getDateMonthList(cmonth, endDate);
|
final Map<String, Integer> map = new HashMap<String, Integer>();
|
for (String monthStr : monthList) {
|
map.put(monthStr, 0);
|
}
|
return (Map<String, Integer>) scanHistoryDao.excute(new HibernateCallback<Map<String, Integer>>() {
|
|
public Map<String, Integer> 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<Object[]> 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<TaoBaoGoodsBriefExtra> getHotTaoBaoGoodsBriefExtras(final String key, final int pageIndex) {
|
final List<TaoBaoUnionConfig> config = taoBaoUnionConfigService
|
.getConfigByTypeCache(PidUser.TYPE_FANLI_ANDROID);
|
return (List<TaoBaoGoodsBriefExtra>) scanHistoryDao
|
.excute(new HibernateCallback<List<TaoBaoGoodsBriefExtra>>() {
|
|
public List<TaoBaoGoodsBriefExtra> 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<TaoBaoGoodsBrief> taoBaoGoodsBriefs = result.getTaoBaoGoodsBriefs();
|
List<TaoBaoGoodsBriefExtra> tbbeList = new ArrayList<TaoBaoGoodsBriefExtra>();
|
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 BusinessSystem 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 BusinessSystem 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;
|
}
|
});
|
}
|
|
}
|