package com.yeshi.fanli.goods.service.impl.recommend;
|
|
import java.io.Serializable;
|
import java.util.List;
|
import java.util.Random;
|
import java.util.Set;
|
|
import javax.annotation.Resource;
|
|
import org.fanli.facade.goods.entity.recommend.DynamicRecommend;
|
import org.fanli.facade.goods.entity.recommend.RecommendDetails;
|
import org.fanli.facade.goods.entity.recommend.RecommendLike;
|
import org.fanli.facade.goods.service.recommend.DynamicRecommendService;
|
import org.fanli.facade.goods.service.recommend.RecommendDetailsService;
|
import org.fanli.facade.goods.service.recommend.RecommendLikeService;
|
import org.fanli.facade.user.service.account.UserInfoService;
|
import org.hibernate.HibernateException;
|
import org.hibernate.Query;
|
import org.hibernate.SQLQuery;
|
import org.hibernate.Session;
|
import org.springframework.orm.hibernate4.HibernateCallback;
|
import com.alibaba.dubbo.config.annotation.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
import org.yeshi.utils.NumberUtil;
|
import org.yeshi.utils.StringUtil;
|
|
import com.yeshi.fanli.base.Constant;
|
import com.yeshi.fanli.base.EhcacheUtil;
|
import com.yeshi.fanli.base.entity.user.UserInfo;
|
import com.yeshi.fanli.goods.dao.recommend.DynamicRecommendDao;
|
|
import net.sf.ehcache.Cache;
|
import net.sf.ehcache.Element;
|
|
@Service(version = "1.0.0")
|
public class DynamicRecommendServiceImpl implements DynamicRecommendService {
|
|
@Resource
|
private DynamicRecommendDao dao;
|
|
@Resource
|
private RecommendDetailsService recommendDetailsService;
|
|
@Resource
|
private UserInfoService userInfoService;
|
|
@Resource
|
private RecommendLikeService recommendLikeService;
|
|
@Transactional(rollbackFor=Exception.class)
|
public long makePublic(DynamicRecommend dynamicRecommend) {
|
long id = (Long) dao.save(dynamicRecommend);
|
RecommendDetails rd = new RecommendDetails();
|
rd.setBadCount(0);
|
rd.setGoodCount(0);
|
rd.setDynamicRecommend(dynamicRecommend);
|
long rdid = recommendDetailsService.save(rd);
|
if(id > 0 && rdid > 0){
|
String md5 = StringUtil.Md5(Constant.MYDYNAMIC+dynamicRecommend.getUserInfo().getId());
|
EhcacheUtil.removeCache(md5);
|
}
|
return id;
|
}
|
|
public List<DynamicRecommend> getDynamicRecommendList(long uid,int page) {
|
int start = (page -1) * Constant.PAGE_SIZE;
|
List<DynamicRecommend> list = dao.list("from DynamicRecommend dr order by dr.id desc ", start, Constant.PAGE_SIZE, new Serializable[]{});
|
if(list.size() >0 && uid >0){
|
for (DynamicRecommend dynamicRecommend : list) {
|
Set<RecommendLike> likers = dynamicRecommend.getLikers();
|
if(likers.contains(new RecommendLike(new UserInfo(uid), dynamicRecommend))){
|
dynamicRecommend.setIslike(true);
|
}
|
}
|
}
|
|
return list;
|
}
|
|
public int getCount() {
|
int count = (int) dao.getCount("select count(*) from DynamicRecommend ");
|
return count;
|
}
|
|
public List<DynamicRecommend> getMyDynamicRecommendList(long uid, int page) {
|
|
String md5 = StringUtil.Md5(Constant.MYDYNAMIC+uid);
|
Cache cache = null;
|
cache = EhcacheUtil.getCache(md5);
|
String key = StringUtil.Md5(uid+"&"+page);
|
if(cache!=null){
|
Element element = cache.getQuiet(key);
|
return (List<DynamicRecommend>) element.getValue();
|
}
|
|
int start = (page -1) * Constant.PAGE_SIZE;
|
List<DynamicRecommend> list = dao.list("from DynamicRecommend dr where dr.userInfo.id = ? order by dr.id desc", start, Constant.PAGE_SIZE, new Serializable[]{uid});
|
if(list.size() >0 && uid >0){
|
for (DynamicRecommend dynamicRecommend : list) {
|
Set<RecommendLike> likers = dynamicRecommend.getLikers();
|
if(likers.contains(new RecommendLike(new UserInfo(uid), dynamicRecommend))){
|
dynamicRecommend.setIslike(true);
|
}
|
}
|
}
|
cache = EhcacheUtil.addCahae(EhcacheUtil.getMyPubCacheConfig(md5));
|
cache.putQuiet(new Element(key, list));
|
return list;
|
}
|
|
public int getCount(long uid) {
|
int count = (int) dao.getCount("select count(*) from DynamicRecommend dr where dr.userInfo.id = ? ",new Serializable[]{uid});
|
return count;
|
}
|
|
public DynamicRecommend getDynamicRecommend(long drid,long uid) {
|
List<DynamicRecommend> list = dao.list("from DynamicRecommend dr where dr.id = ?", new Serializable[]{drid});
|
if(list.size()>0){
|
DynamicRecommend dynamicRecommend = list.get(0);
|
Set<RecommendLike> likers = dynamicRecommend.getLikers();
|
if(likers.contains(new RecommendLike(new UserInfo(uid), dynamicRecommend))){
|
dynamicRecommend.setIslike(true);
|
}
|
return dynamicRecommend;
|
}
|
return null;
|
}
|
|
@Transactional(rollbackFor=Exception.class)
|
public void replyUp(final long drid) {
|
dao.excute(new HibernateCallback() {
|
public Object doInHibernate(Session session)
|
throws HibernateException {
|
SQLQuery query = session.createSQLQuery("update yeshi_ec_dynamic_recommend set replyCount=replyCount+1 where id=?");
|
query.setParameter(0, drid);
|
query.executeUpdate();
|
return null;
|
}
|
});
|
}
|
@Transactional(rollbackFor=Exception.class)
|
public void delete(final long id) {
|
DynamicRecommend find = dao.find(DynamicRecommend.class, id);
|
if(find != null){
|
recommendDetailsService.deleteByDr(id);
|
long uid = find.getUserInfo().getId();
|
String md5 = StringUtil.Md5(Constant.MYDYNAMIC+uid);
|
EhcacheUtil.removeCache(md5);
|
}
|
}
|
|
@Transactional(rollbackFor=Exception.class)
|
public void addlike(final long drid, long uid) {
|
DynamicRecommend find = dao.find(DynamicRecommend.class, drid);
|
if(find == null){
|
return;
|
}
|
Set<RecommendLike> likers = find.getLikers();
|
if(likers.contains(new RecommendLike(new UserInfo(uid), find))){
|
return;
|
}
|
RecommendLike newlike=new RecommendLike();
|
newlike.setCreatetime(System.currentTimeMillis());
|
newlike.setDynamicRecommend(find);
|
newlike.setUserInfo(new UserInfo(uid));
|
recommendLikeService.save(newlike);
|
likers.add(newlike);
|
dao.update(find);
|
dao.excute(new HibernateCallback() {
|
public Object doInHibernate(Session session)
|
throws HibernateException {
|
session.createSQLQuery("update yeshi_ec_dynamic_recommend set likeCount=likeCount+1 where id=?")
|
.setParameter(0, drid).executeUpdate();
|
return null;
|
}
|
});
|
}
|
|
@Transactional(rollbackFor=Exception.class)
|
public void removelike(final long drid, final long uid) {
|
dao.excute(new HibernateCallback() {
|
public Object doInHibernate(Session session)
|
throws HibernateException {
|
Query query = session.createQuery("delete RecommendLike rl where rl.dynamicRecommend.id = ? and rl.userInfo.id = ?");
|
query.setParameter(0, drid);
|
query.setParameter(1, uid);
|
int i = query.executeUpdate();
|
if(i<=0){
|
return null;
|
}
|
session.createSQLQuery("update yeshi_ec_dynamic_recommend set likeCount=likeCount-1 where id=?")
|
.setParameter(0, drid).executeUpdate();
|
session.flush();
|
return null;
|
}
|
});
|
}
|
|
public List<DynamicRecommend> getMyLikeRecommends(final long uid, int page) {
|
|
int start =(page-1)*Constant.PAGE_SIZE;
|
List<DynamicRecommend> list = dao.list("select dr from DynamicRecommend dr join dr.likers ls where ls.userInfo.id = ? order by ls.id desc ", start, Constant.PAGE_SIZE,new Serializable[]{uid});
|
for (DynamicRecommend dynamicRecommend : list) {
|
dynamicRecommend.setIslike(true);
|
}
|
return list;
|
}
|
|
public List<DynamicRecommend> getDynamicRecommendList(String key,int type, int page) {
|
|
int start = (page -1 ) * Constant.PAGE_SIZE;
|
String wheretype = "";
|
if(type==0){ //全部
|
wheretype=" order by dr.id desc";
|
}else if(type ==1){ //用户发布
|
wheretype="and dr.type=0 order by dr.id desc";
|
}else{ //后台发布
|
wheretype="and dr.type=1 order by dr.id desc";
|
}
|
|
if(NumberUtil.isNumeric(key)){
|
long lk = Long.parseLong(key);
|
String hql = "from DynamicRecommend dr where (dr.userInfo.id = ? or dr.userInfo.nickName like ? or dr.reason like ? ) ";
|
return dao.list(hql+wheretype, start, Constant.PAGE_SIZE, new Serializable[]{lk,"%"+key+"%","%"+key+"%"});
|
}
|
|
String hql="from DynamicRecommend dr where (dr.userInfo.nickName like ? or dr.reason like ? ) ";
|
|
return dao.list(hql+wheretype, start, Constant.PAGE_SIZE, new Serializable[]{"%"+key+"%","%"+key+"%"});
|
}
|
|
public int getCount(String key,int type) {
|
|
String wheretype = "";
|
if(type==0){ //全部
|
wheretype="";
|
}else if(type ==1){ //用户发布
|
wheretype="and dr.type=0 ";
|
}else{ //后台发布
|
wheretype="and dr.type=1 ";
|
}
|
|
if(NumberUtil.isNumeric(key)){
|
long lk = Long.parseLong(key);
|
String hql = "select count(*) from DynamicRecommend dr where (dr.userInfo.id = ? or dr.userInfo.nickName like ? or dr.reason like ?) ";
|
return (int) dao.getCount(hql+wheretype, new Serializable[]{lk,"%"+key+"%","%"+key+"%"});
|
}
|
|
String hql="select count(*) from DynamicRecommend dr where (dr.userInfo.nickName like ? or dr.reason like ?) ";
|
|
return (int) dao.getCount(hql+wheretype, new Serializable[]{"%"+key+"%","%"+key+"%"});
|
|
}
|
|
@Transactional
|
public void updateLikeCount() {
|
final long time = System.currentTimeMillis()-144000;
|
dao.excute(new HibernateCallback() {
|
public Object doInHibernate(Session session)
|
throws HibernateException {
|
int count =new Random().nextInt(15)+5;
|
SQLQuery sqlQuery = session.createSQLQuery("update yeshi_ec_dynamic_recommend dr set dr.likeCount=dr.likeCount+"+count+" where dr.likeCount < 5 and dr.createtime < ? ");
|
sqlQuery.setParameter(0,time);
|
sqlQuery.executeUpdate();
|
return null;
|
}
|
});
|
}
|
|
}
|