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
package cn.lili.modules.lmk.service.impl;
 
import cn.lili.base.Result;
import cn.lili.common.enums.ActivityStatusEnum;
import cn.lili.modules.lmk.domain.entity.Activity;
import cn.lili.modules.lmk.domain.form.ActivityForm;
import cn.lili.modules.lmk.domain.query.ActivityMembersQuery;
import cn.lili.modules.lmk.domain.query.ActivityQuery;
import cn.lili.modules.lmk.domain.vo.ActivityVO;
import cn.lili.modules.lmk.mapper.ActivityMapper;
import cn.lili.modules.lmk.mapper.ActivityReportMapper;
import cn.lili.modules.lmk.service.ActivityService;
import cn.lili.modules.lmk.service.LmkFileService;
import cn.lili.modules.lmk.service.MyActivityService;
import cn.lili.modules.member.entity.vo.MemberVO;
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 MyActivityService activityService;
 
    private final ActivityReportMapper activityReportMapper;
 
    @Override
    public Result add(ActivityForm form) {
        Activity entity = ActivityForm.getEntityByForm(form, null);
        //默认新增活动为
        entity.setStatus(ActivityStatusEnum.NOT_STARTED.getType());
        //默认不为推荐
        entity.setRecommend(false);
 
        baseMapper.insert(entity);
        return Result.ok("添加成功");
    }
 
    @Override
    public Result update(ActivityForm form) {
 
        Activity entity = baseMapper.selectById(form.getId());
        //判断修改前的封面类型是否为文本,文本不需要删除文件
        if (!"文字".equals(entity.getCoverType())){
            //判断路径是否改变
            if (!form.getCover().equals(entity.getCover())) {
                //删除云服务器中旧的图片
                lmkFileService.deleteObject(entity.getCover());
            }
 
        }
        // 为空抛IllegalArgumentException,做全局异常处理
        Assert.notNull(entity, "记录不存在");
        BeanUtils.copyProperties(form, entity);
 
        baseMapper.updateById(entity);
        return Result.ok("修改成功");
    }
 
    @Override
    public Result remove(List<String> ids) {
        baseMapper.deleteBatchIds(ids);
        return Result.ok("删除成功");
    }
 
    @Override
    public Result removeById(String id) {
        //TODO 先判断活动是否有报名人员
        //有的话不可删除 联中间表查询
 
 
 
 
        //删除,同时判断该对象的封面是否存在 ,存在则在云服务器删除
        ActivityVO vo = baseMapper.getById(id);
        if (StringUtils.isNotEmpty(vo.getCover())){
            lmkFileService.deleteObject(vo.getCover());
        }
        baseMapper.deleteById(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 (!"文字".equals(vo.getCoverType())){
                String url = lmkFileService.getPreviewUrl(vo.getCover());
                vo.setUrl(url);
            }
        }
        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);
        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.setStatus(form.getStatus());
        baseMapper.updateById(entity);
        return Result.ok();
    }
 
    @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());
    }
 
 
}