admin
2019-02-19 9192375a211cff2f91d1f65f932f97612d8dbcdb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
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;
            }
        });
    }
    
 
}