zxl
7 天以前 ff1ab6f2c6f9cb480e6dbe712eb25b2701279d67
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
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
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) {
        //判断活动id是否已经存在报名人员
        for(String id : ids){
            if(haveApplicationMembers(id)){
                return Result.error("该活动无法删除,已存在报名人员");
            }
        }
        //未经过return则删除
        for (String id : ids){
            delActivityAndInformation(id);
        }
 
        return Result.ok("删除成功");
    }
    //判断活动是否存在报名人员
    public Boolean haveApplicationMembers(String id){
        ActivityMembersQuery activityMembersQuery = new ActivityMembersQuery();
        activityMembersQuery.setId(id);
        return (long) activityMembersPage(activityMembersQuery).get("total") > 0;
    }
    //删除活动同时删除活动的相关信息
    public void delActivityAndInformation(String id){
        ActivityVO vo = baseMapper.getById(id);
        if (StringUtils.isNotEmpty(vo.getCover())){
            lmkFileService.deleteObject(vo.getCover());
        }
        baseMapper.deleteById(id);
        //删除审核记录
        activityAuditRecordService.delActivityAuditById(id);
    }
    @Override
    public Result removeById(String id) {
        //先判断活动是否有报名人员
 
        if(haveApplicationMembers(id)){
            return Result.error("该活动无法删除,已存在报名人员");
        }
        //删除,同时判断该对象的封面是否存在 ,存在则在云服务器删除
        delActivityAndInformation(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());
    }
 
 
}