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 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()); entity.setStoreId(UserContext.getCurrentUser().getStoreId()); 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.getFormByManager(entity.getId()); }else { activityAuditRecordForm = ActivityAuditRecordForm.getFormByBuyer(entity.getId()); } activityAuditRecordService.addOrUpdateAuditActivity(activityAuditRecordForm); } @Override public Result remove(List ids) { //判断活动id是否已经存在报名人员 for(String id : ids){ if (isPublishActivity(id)){ return Result.error("存在活动已发布删除前请下架该活动!"); } 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 Boolean isPublishActivity(String id){ Activity activity = baseMapper.selectById(id); return activity.getPublish(); } //删除活动同时删除活动的相关信息 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 (isPublishActivity(id)){ return Result.error("该活动已发布删除前请下架该活动!"); } if(haveApplicationMembers(id)){ return Result.error("该活动已有报名人员,无法删除!"); } //删除,同时判断该对象的封面是否存在 ,存在则在云服务器删除 delActivityAndInformation(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 getMyApplyActivityPage(ActivityQuery query){ //传入当前请求用户的id String storeId = UserContext.getCurrentUser().getStoreId(); if (storeId == null){ query.setMemberId(UserContext.getCurrentUserId()); }else { query.setStoreId(storeId); } //更具用户id获得活动 IPage page = PageUtil.getPage(query, ActivityVO.class); baseMapper.storeGetPage(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("该活动无法下架,已存在报名人员"); } 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 page = PageUtil.getPage(query, MemberVO.class); baseMapper.getMembers(page, query); return Result.ok().data(page.getRecords()).total(page.getTotal()); } }