zxl
7 天以前 9bb304e85d71431d8c16a7baed0dd16da30fb579
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
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
package cn.lili.modules.lmk.service.impl;
 
import cn.lili.base.Result;
import cn.lili.common.enums.ActivityCoverTypeEnum;
import cn.lili.common.enums.ActivityStatusEnum;
import cn.lili.common.security.context.UserContext;
import cn.lili.modules.lmk.domain.entity.Activity;
import cn.lili.modules.lmk.domain.form.ActivityAuditRecordForm;
import cn.lili.modules.lmk.domain.form.ActivityForm;
import cn.lili.modules.lmk.domain.query.ActivityAuditRecordQuery;
import cn.lili.modules.lmk.domain.query.ActivityMembersQuery;
import cn.lili.modules.lmk.domain.query.ActivityQuery;
import cn.lili.modules.lmk.domain.vo.ActivityAuditRecordVO;
import cn.lili.modules.lmk.domain.vo.ActivityVO;
import cn.lili.modules.lmk.mapper.ActivityMapper;
import cn.lili.modules.lmk.service.ActivityAuditRecordService;
import cn.lili.modules.lmk.service.ActivityService;
import cn.lili.modules.lmk.service.LmkFileService;
import cn.lili.modules.member.entity.vo.MemberVO;
import cn.lili.utils.COSUtil;
import cn.lili.utils.PageUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import io.micrometer.core.instrument.util.StringUtils;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.Assert;
import org.springframework.web.multipart.MultipartFile;
 
import java.util.List;
import java.util.stream.Collectors;
 
@Service
@RequiredArgsConstructor
public class ActivityServiceImpl extends ServiceImpl<ActivityMapper, Activity> implements ActivityService {
 
    private final LmkFileService lmkFileService;
 
    private final COSUtil cOSUtil;
 
    private final ActivityAuditRecordService activityAuditRecordService;
 
 
    @Override
    public Result add(ActivityForm form,Boolean isManager) {
 
        Activity entity = ActivityForm.getEntityByForm(form, null);
 
        //默认新增活动为
        entity.setStatus(ActivityStatusEnum.NOT_STARTED.getType());
        //默认不为推荐
        entity.setRecommend(false);
        //默认未发布
        entity.setPublish(false);
        //设置申请人id
        entity.setMemberId(UserContext.getCurrentUserId());
        baseMapper.insert(entity);
        mangerSaveOrUpdate(isManager,entity);
        return Result.ok("添加成功");
    }
 
    @Override
    public Result update(ActivityForm form,Boolean isManager) {
 
        Activity entity = baseMapper.selectById(form.getId());
        //判断修改前的封面类型是否为文本,文本不需要删除文件
        if (!ActivityCoverTypeEnum.TEXT.getType().equals(entity.getCoverType())){
            //判断路径是否改变
            if (!form.getCover().equals(entity.getCover())) {
                //删除云服务器中旧的图片
                lmkFileService.deleteObject(entity.getCover());
            }
 
        }
        // 为空抛IllegalArgumentException,做全局异常处理
        Assert.notNull(entity, "记录不存在");
        BeanUtils.copyProperties(form, entity);
 
        mangerSaveOrUpdate(isManager,entity);
        baseMapper.updateById(entity);
 
        return Result.ok("修改成功");
    }
    public void mangerSaveOrUpdate(Boolean isManager,Activity entity){
        ActivityAuditRecordForm activityAuditRecordForm;
        //添加审核记录
        if (isManager){
            //直接通过
            activityAuditRecordForm = ActivityAuditRecordForm.getEntityByManagerBuildForm(entity.getId());
        }else {
            activityAuditRecordForm = ActivityAuditRecordForm.getEntityByBuyerBuildForm(entity.getId());
        }
        activityAuditRecordService.addOrUpdateAuditActivity(activityAuditRecordForm);
    }
    @Override
    public Result remove(List<String> ids) {
        baseMapper.deleteBatchIds(ids);
        return Result.ok("删除成功");
    }
 
    @Override
    public Result removeById(String id) {
        //先判断活动是否有报名人员
        ActivityMembersQuery activityMembersQuery = new ActivityMembersQuery();
        activityMembersQuery.setId(id);
        if((long)activityMembersPage(activityMembersQuery).get("total") > 0){
            return Result.error("该活动无法下架,已存在报名人员");
        }
        //删除,同时判断该对象的封面是否存在 ,存在则在云服务器删除
        ActivityVO vo = baseMapper.getById(id);
        if (StringUtils.isNotEmpty(vo.getCover())){
            lmkFileService.deleteObject(vo.getCover());
        }
        baseMapper.deleteById(id);
        //删除审核记录
        activityAuditRecordService.delActivityAuditById(id);
 
        return Result.ok("删除成功");
    }
 
    @Override
    public Result page(ActivityQuery query) {
        IPage<ActivityVO> page = PageUtil.getPage(query, ActivityVO.class);
 
        baseMapper.getPage(page, query);
        for (ActivityVO vo : page.getRecords()) {
            if (!ActivityCoverTypeEnum.TEXT.getType().equals(vo.getCoverType())){
                vo.setUrl(cOSUtil.getPreviewUrl(vo.getCover()));
            }
        }
        return Result.ok().data(page.getRecords()).total(page.getTotal());
    }
 
    @Override
    public Result getMyApplyActivityPage(ActivityQuery query){
        System.out.println(query);
 
        //传入当前请求用户的id
        query.setMemberId(UserContext.getCurrentUserId());
        //更具用户id获得活动
        IPage<ActivityVO> page = PageUtil.getPage(query, ActivityVO.class);
        baseMapper.getPage(page, query);
        for (ActivityVO vo : page.getRecords()) {
            if (!ActivityCoverTypeEnum.TEXT.getType().equals(vo.getCoverType())){
                vo.setUrl(cOSUtil.getPreviewUrl(vo.getCover()));
            }
        }
        return Result.ok().data(page.getRecords()).total(page.getTotal());
    }
 
    @Override
    public Result detail(String id) {
        ActivityVO vo = baseMapper.getById(id);
        Assert.notNull(vo, "记录不存在");
        return Result.ok().data(vo);
    }
    @Override
    public Result getCanReportPage(ActivityQuery query){
        //查询到的结果已经审核且发布
        IPage<ActivityVO> page = PageUtil.getPage(query, ActivityVO.class);
        //已发布的活动
        baseMapper.getCanReportPage(page, query);
 
        for(ActivityVO activityVO : page.getRecords()){
            activityVO.setUrl(cOSUtil.getPreviewUrl(activityVO.getCover()));
        }
 
        return Result.ok().data(page.getRecords()).total(page.getTotal());
    }
 
    @Override
    public Result all() {
 
        List<Activity> entities = baseMapper.selectList(null);
        List<ActivityVO> vos = entities.stream()
                .map(entity -> ActivityVO.getVoByEntity(entity, null))
                .collect(Collectors.toList());
        List<ActivityVO> reportActivityVo =vos.stream().filter(item -> ActivityStatusEnum.REPORT.getType().equals(item.getStatus())).collect(Collectors.toList());
        return Result.ok().data(reportActivityVo);
    }
 
    @Override
    public Result uploadObject(MultipartFile file) {
        return lmkFileService.uploadObject(file);
    }
 
    @Override
    public String getPreviewUrl(String fileKey) {
        return lmkFileService.getPreviewUrl(fileKey);
    }
 
    @Override
    public Result deleteObject(String fileKey) {
        return lmkFileService.deleteObject(fileKey);
    }
 
    @Override
    public Result activityChangeStatus(ActivityForm form) {
        Activity entity = baseMapper.selectById(form.getId());
        entity.setPublish(form.getPublish());
        if (!form.getPublish()){
            //下架判断是否有人员报名,有报名的话禁止提醒无法下架
            ActivityMembersQuery activityMembersQuery = new ActivityMembersQuery();
            activityMembersQuery.setId(form.getId());
            if((long)activityMembersPage(activityMembersQuery).get("total") > 0){
                return Result.error("该活动无法下架,已存在报名人员");
            }
            return Result.ok();
        }else {
            //判断该活动是否审核通过
           if(activityAuditRecordService.getActivityActivityIsAudit(form.getId())){
               baseMapper.updateById(entity);
               return Result.ok();
           }else {
               return Result.error("活动未通过审核");
           }
 
 
 
        }
 
 
 
    }
 
    @Override
    public Result activityChangeRecommend(ActivityForm form) {
        Activity entity = baseMapper.selectById(form.getId());
        entity.setRecommend(form.getRecommend());
        baseMapper.updateById(entity);
        return Result.ok();
    }
 
    @Override
    public Result activityMembersPage(ActivityMembersQuery query) {
        IPage<MemberVO> page = PageUtil.getPage(query, MemberVO.class);
        baseMapper.getMembers(page, query);
        return Result.ok().data(page.getRecords()).total(page.getTotal());
    }
 
 
}