package com.yeshi.fanli.goods.service.impl.recommend;
|
|
import java.io.Serializable;
|
import java.util.ArrayList;
|
import java.util.List;
|
import java.util.Set;
|
|
import javax.annotation.Resource;
|
|
import org.fanli.facade.goods.entity.recommend.RecommendDetails;
|
import org.fanli.facade.goods.entity.recommend.RecommendReply;
|
import org.fanli.facade.goods.service.recommend.RecommendDetailsService;
|
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 com.yeshi.fanli.base.entity.user.UserInfo;
|
import com.yeshi.fanli.goods.dao.recommend.RecommendDetailsDao;
|
|
@Service(version = "1.0.0")
|
public class RecommendDetailsServiceImpl implements RecommendDetailsService {
|
|
@Resource
|
private RecommendDetailsDao dao;
|
|
@Resource
|
private UserInfoService userInfoService;
|
|
|
public RecommendDetails getRecommendDetails(final long drid, final long uid) {
|
final RecommendDetails rd = getRecommendDetails(drid);
|
if(rd==null){
|
return null;
|
}
|
return (RecommendDetails) dao
|
.excute(new HibernateCallback<RecommendDetails>() {
|
|
public RecommendDetails doInHibernate(Session session)
|
throws HibernateException {
|
// Query query3 = session.createQuery("from RecommendDetails rd where rd.dynamicRecommend.id = ? ");
|
// query3.setParameter(0, drid);
|
// List<RecommendDetails> list3 = query3.list();
|
// if(list3.size() == 0){
|
// return null;
|
// }
|
// RecommendDetails rd = list3.get(0);
|
Query query = session
|
.createQuery("from RecommendReply rr where rr.recommendDetails.dynamicRecommend.id = ? order by rr.zanCount desc ");
|
query.setParameter(0, drid);
|
query.setFirstResult(0);
|
query.setMaxResults(3);
|
List<RecommendReply> list = new ArrayList<RecommendReply>();
|
list = query.list();
|
if (uid > 0) {
|
for (RecommendReply recommendReply : list) {
|
Set<UserInfo> zanUserInfos = recommendReply
|
.getZanUserInfos();
|
boolean contains = zanUserInfos
|
.contains(new UserInfo(uid));
|
recommendReply.setZan(contains);
|
}
|
}
|
rd.setRecommendReplys(list);
|
if (uid > 0) {
|
Query query2 = session
|
.createSQLQuery("select dv.did from yeshi_ec_recommend_details_voteuid dv where dv.did = ? and dv.uid = ? ");
|
query2.setParameter(0, rd.getId());
|
query2.setParameter(1, uid);
|
query2.setFirstResult(0);
|
query2.setMaxResults(1);
|
List list2 = query2.list();
|
if (list2.size() > 0) {
|
rd.setVote(true);
|
}
|
}
|
return rd;
|
}
|
});
|
}
|
|
public long save(RecommendDetails rd) {
|
long id = (Long) dao.save(rd);
|
return id;
|
}
|
|
public RecommendDetails getRecommendDetails(long drid) {
|
List<RecommendDetails> list = dao.list("from RecommendDetails rd where rd.dynamicRecommend.id = ? ", new Serializable[]{drid});
|
if(list.size()>0){
|
return list.get(0);
|
}
|
return null;
|
}
|
|
@Transactional(rollbackFor=Exception.class)
|
public int vote(long drid, long uid, final int type) {
|
final RecommendDetails recommendDetails = getRecommendDetails(drid);
|
if(recommendDetails==null){
|
return 1;
|
}
|
final UserInfo userInfo = userInfoService.getUserById(uid);
|
if(userInfo==null){
|
return 2;
|
}
|
dao.excute(new HibernateCallback() {
|
public Object doInHibernate(Session session)
|
throws HibernateException {
|
SQLQuery sqlQuery = session.createSQLQuery("insert into yeshi_ec_recommend_details_voteuid (did,uid) values(?,?)");
|
sqlQuery.setParameter(0, recommendDetails.getId());
|
sqlQuery.setParameter(1, userInfo.getId());
|
sqlQuery.executeUpdate();
|
SQLQuery query=null;
|
if(type==0){
|
query = session.createSQLQuery("update yeshi_ec_recommend_details set goodCount=goodCount+1 where id=?");
|
}else{
|
query = session.createSQLQuery("update yeshi_ec_recommend_details set badCount=badCount+1 where id=?");
|
}
|
query.setParameter(0, recommendDetails.getId());
|
query.executeUpdate();
|
return null;
|
}
|
});
|
return 0;
|
}
|
@Transactional
|
public void deleteByDr(final long drid) {
|
dao.excute(new HibernateCallback() {
|
public Object doInHibernate(Session session)
|
throws HibernateException {
|
Query query = session.createQuery("from RecommendDetails rd where rd.dynamicRecommend.id = ?");
|
query.setParameter(0, drid);
|
List<RecommendDetails> list = query.list();
|
if(list.size() > 0){
|
RecommendDetails recommendDetails = list.get(0);
|
session.delete(recommendDetails);
|
session.flush();
|
}
|
return null;
|
}
|
});
|
}
|
|
|
}
|