mitao
2025-02-21 31573d6180d15ef65ed0df9c2732495f40b12663
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
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
package com.panzhihua.service_community.service.impl;
 
import static java.util.Objects.isNull;
import static java.util.Objects.nonNull;
 
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
 
import javax.annotation.Resource;
 
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.time.DateUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
 
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.panzhihua.common.model.vos.R;
import com.panzhihua.common.model.vos.community.ComActActEvaluateVO;
import com.panzhihua.common.model.vos.community.MyActivityEvaluateVO;
import com.panzhihua.service_community.dao.ComActActEvaluateDAO;
import com.panzhihua.service_community.dao.ComActActRegistDAO;
import com.panzhihua.service_community.dao.ComActActSignDAO;
import com.panzhihua.service_community.dao.ComActActivityDAO;
import com.panzhihua.service_community.model.dos.ComActActEvaluateDO;
import com.panzhihua.service_community.model.dos.ComActActRegistDO;
import com.panzhihua.service_community.model.dos.ComActActSignDO;
import com.panzhihua.service_community.model.dos.ComActActivityDO;
import com.panzhihua.service_community.service.ComActActEvaluateService;
 
import lombok.extern.slf4j.Slf4j;
 
/**
 * title: ComActActEvaluateServiceImpl  社区》活动》活动评价表服务实现类
 * projectName 成都呐喊信息技术有限公司-智慧社区项目
 * description: 社区》活动》活动评价表服务实现类
 *
 * @author txb
 * @date 2021/8/24 10:21
 */
@Slf4j
@Service
public class ComActActEvaluateServiceImpl extends ServiceImpl<ComActActEvaluateDAO, ComActActEvaluateDO> implements ComActActEvaluateService {
 
    @Resource
    private ComActActivityDAO comActActivityDAO;
    @Resource
    private ComActActSignDAO comActActSignDAO;
    @Resource
    private ComActActRegistDAO comActActRegistDAO;
    /**
     * 社区活动评价
     *
     * @param comActActEvaluateVO 社区评价VO
     * @return 评价结果
     */
    @Override
    public R activityEvaluate(ComActActEvaluateVO comActActEvaluateVO) {
        Long activityId = comActActEvaluateVO.getActivityId();
        Long userId = comActActEvaluateVO.getUserId();
        if (isNull(activityId)) {
            return R.fail("参数有误");
        }
        ComActActivityDO comActActivityDO = comActActivityDAO.selectById(activityId);
        if (isNull(comActActivityDO)) {
            return R.fail("活动不存在");
        }
        ComActActSignDO comActActSignDO = comActActSignDAO
                .selectOne(new QueryWrapper<ComActActSignDO>().lambda().eq(ComActActSignDO::getActivityId, activityId)
                        .eq(ComActActSignDO::getUserId, userId).eq(ComActActSignDO::getStatus, 1));
        if (isNull(comActActSignDO)) {
            return R.fail("活动未报名");
        }
        Date beginAt = comActActivityDO.getBeginAt();
        Date nowDate = new Date();
        Integer isQrCode = comActActivityDO.getIsQrCode();
        if (nonNull(isQrCode) && isQrCode.equals(1)) {
            //需要签到类型
            int registCount = comActActRegistDAO.selectCount(new QueryWrapper<ComActActRegistDO>()
                    .lambda().eq(ComActActRegistDO::getUserId, userId).eq(ComActActRegistDO::getActivityId, activityId));
            int evaluateCount = this.baseMapper.selectCount(new QueryWrapper<ComActActEvaluateDO>().lambda()
                    .eq(ComActActEvaluateDO::getUserId, userId).eq(ComActActEvaluateDO::getActivityId, activityId));
            if (registCount <= evaluateCount) {
                //未签到,不能评价
                return R.fail("未签到,不能评价");
            }
        } else {
            if (nowDate.before(beginAt)) {
                return R.fail("活动还未开始,暂不支持评价");
            }
        }
        ComActActEvaluateDO comActActEvaluateDO = new ComActActEvaluateDO();
        BeanUtils.copyProperties(comActActEvaluateVO, comActActEvaluateDO);
        comActActEvaluateDO.setSignIdentity(comActActSignDO.getSignIdentity());
        int result = this.baseMapper.insert(comActActEvaluateDO);
        if (result < 0) {
            return R.fail("评论失败,请重试");
        }
        return R.ok();
    }
 
    /**
     * 定时任务针对活动结束后7天还未评价的用户默认好评
     */
    @Override
    public R timedTaskActivityDefaultPraise() {
        //获取还未默认好评的活动
        List<ComActActivityDO> comActActivityDOS = comActActivityDAO.selectList(new QueryWrapper<ComActActivityDO>().lambda()
                .eq(ComActActivityDO::getStatus, 5)
                .eq(ComActActivityDO::getIsDefaultPraise, 0)
                .le(ComActActivityDO::getEndAt, DateUtils.addDays(new Date(), -7)));
        //获取报名记录
        if (!ObjectUtils.isEmpty(comActActivityDOS)) {
            List<Long> activityIds = comActActivityDOS.stream().map(ComActActivityDO::getId).collect(Collectors.toList());
            List<ComActActSignDO> comActActSignDOS = comActActSignDAO.selectNeedEvaluateSignRecords(activityIds);
            //批量插入好评
            if (!ObjectUtils.isEmpty(comActActSignDOS)) {
                List<ComActActEvaluateDO> comActActEvaluateDOList = comActActSignDOS.stream().map(comActActSignDO -> {
                    ComActActEvaluateDO comActActEvaluateDO = new ComActActEvaluateDO();
                    comActActEvaluateDO.setActivityId(comActActSignDO.getActivityId());
                    comActActEvaluateDO.setSignIdentity(comActActSignDO.getSignIdentity());
                    comActActEvaluateDO.setUserId(comActActSignDO.getUserId());
                    comActActEvaluateDO.setCreateAt(new Date());
                    comActActEvaluateDO.setStarLevel(5);
                    comActActEvaluateDO.setEvaluateContent("系统默认好评!");
                    return comActActEvaluateDO;
                }).collect(Collectors.toList());
                boolean result = this.saveBatch(comActActEvaluateDOList);
                if (!result) {
                    return R.fail("批量插入评价失败");
                }
                ComActActivityDO comActActivityDO = new ComActActivityDO();
                comActActivityDO.setIsDefaultPraise(1);
                int updateResult = comActActivityDAO.update(comActActivityDO, new UpdateWrapper<ComActActivityDO>()
                        .lambda().in(ComActActivityDO::getId, activityIds));
                if (updateResult < 0) {
                    return R.fail("修改是否已默认评价状态失败");
                }
            }
        }
        return R.ok();
    }
 
    /**
     * 用户评价列表
     *
     * @param userId 用户id
     * @return 当前用户对所有活动的评价列表
     */
    @Override
    public R listEvaluate(Long userId) {
        List<ComActActEvaluateDO> comActActEvaluateDOList = this.baseMapper.selectList(new QueryWrapper<ComActActEvaluateDO>()
                .lambda().eq(ComActActEvaluateDO::getUserId, userId));
        List<ComActActEvaluateVO> comActActEvaluateVOS = new ArrayList<>();
        if (!ObjectUtils.isEmpty(comActActEvaluateDOList)) {
            comActActEvaluateDOList.forEach(comActActEvaluateDO -> {
                ComActActEvaluateVO comActActEvaluateVO = new ComActActEvaluateVO();
                BeanUtils.copyProperties(comActActEvaluateDO, comActActEvaluateVO);
                comActActEvaluateVOS.add(comActActEvaluateVO);
            });
        }
        return R.ok(comActActEvaluateVOS);
    }
 
    /**
     * 我的评价
     * @param userId
     * @param activityId
     * @return
     */
    @Override
    public R listMyActivityEvaluate(Long userId, Long activityId) {
        ComActActivityDO comActActivityDO = comActActivityDAO.selectById(activityId);
        if (isNull(comActActivityDO)) {
            return R.fail("活动不存在");
        }
        List<ComActActEvaluateVO> comActActEvaluateVOS = this.baseMapper.selectEvaluateList(activityId, userId);
        int regCount = comActActRegistDAO.selectCount(new QueryWrapper<ComActActRegistDO>()
                .lambda().eq(ComActActRegistDO::getActivityId, activityId).eq(ComActActRegistDO::getUserId, userId));
 
        MyActivityEvaluateVO evaluateVO = new MyActivityEvaluateVO();
        evaluateVO.setMyEvaluateList(comActActEvaluateVOS);
        boolean needDisplay = regCount > comActActEvaluateVOS.size() &&
                new Date().before(DateUtils.addDays(comActActivityDO.getEndAt(), 3));
        evaluateVO.setIsDisplay(needDisplay ? 1 : 0);
        return R.ok(evaluateVO);
    }
}