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.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.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 implements ActivityService { private final LmkFileService lmkFileService; private final MyActivityService activityService; private final ActivityReportMapper activityReportMapper; private final COSUtil cOSUtil; @Override public Result add(ActivityForm form) { Activity entity = ActivityForm.getEntityByForm(form, null); //默认新增活动为 entity.setStatus(ActivityStatusEnum.NOT_STARTED.getType()); //默认不为推荐 entity.setRecommend(false); //默认未发布 entity.setPublish(false); baseMapper.insert(entity); return Result.ok("添加成功"); } @Override public Result update(ActivityForm form) { 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); baseMapper.updateById(entity); return Result.ok("修改成功"); } @Override public Result remove(List 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 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 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 entities = baseMapper.selectList(null); List vos = entities.stream() .map(entity -> ActivityVO.getVoByEntity(entity, null)) .collect(Collectors.toList()); List 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("该活动无法下架,已存在报名人员"); } } 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 page = PageUtil.getPage(query, MemberVO.class); baseMapper.getMembers(page, query); return Result.ok().data(page.getRecords()).total(page.getTotal()); } }