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.common.utils.StringUtils; import cn.lili.modules.lmk.domain.entity.Activity; import cn.lili.modules.lmk.domain.entity.ActivityReport; import cn.lili.modules.lmk.domain.entity.MyCollect; import cn.lili.modules.lmk.domain.form.ActivityReportForm; import cn.lili.modules.lmk.domain.query.ActivityReportQuery; import cn.lili.modules.lmk.domain.query.MyActivityQuery; import cn.lili.modules.lmk.domain.vo.ActivityReportVO; import cn.lili.modules.lmk.domain.vo.ActivityVO; import cn.lili.modules.lmk.domain.vo.MyActivityVo; import cn.lili.modules.lmk.mapper.ActivityMapper; import cn.lili.modules.lmk.mapper.ActivityReportMapper; import cn.lili.modules.lmk.mapper.MyCollectMapper; import cn.lili.modules.lmk.service.MyActivityService; import cn.lili.utils.COSUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.xkzhangsan.time.utils.StringUtil; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.util.Assert; import java.util.Date; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.stream.Collectors; @Service @RequiredArgsConstructor public class MyActivityServiceImpl extends ServiceImpl implements MyActivityService { private final ActivityMapper activityMapper; private final ActivityReportMapper activityReportMapper; private final COSUtil cOSUtil; private final MyCollectMapper myCollectMapper; @Override public Result getMyActivityList(MyActivityQuery query) { String userId = UserContext.getCurrentUserId(); List myActivityList = activityMapper.getMyActivityList(query,userId); for (MyActivityVo myActivityVo : myActivityList){ if (!ActivityCoverTypeEnum.TEXT.getType().equals(myActivityVo.getCoverType())){ myActivityVo.setUrl(cOSUtil.getPreviewUrl(myActivityVo.getCover())); } } return Result.ok().data(myActivityList); } @Override public Result activityCancel(String activityId) { // TODO 判断是否在报名时间内 在的话可以取消报名, (若有报名费需要退款) //获得中间表信息 ActivityReportVO vo = userReport(activityId); Activity activity = activityMapper.selectById(activityId); Date date = new Date(); if(!date.before(activity.getReportStartTime()) && !date.after(activity.getReportEndTime())){ boolean rowsAffected = new LambdaUpdateChainWrapper(activityReportMapper) .eq(ActivityReport::getId, vo.getId()) // WHERE id = ? .set(ActivityReport::getCancel, true) // SET cancel = true .update(); // 执行更新 if (rowsAffected) { return Result.ok("活动取消成功"); } else { // 可选:记录警告日志 return Result.error("活动不存在或已取消"); } }else { return Result.error("活动已不在报名时间内无法取消"); } } @Override public Result activityReport(ActivityReportForm reportActivityForm) { //判断用户是否已经报名该活动 ActivityReportVO reportVO = userReport(reportActivityForm.getActivityId()); if (reportVO != null) { //判断是否已取消过该活动 if (reportVO.getCancel()){ //重新报名 ActivityReport entity = ActivityReportForm.getEntityByForm(reportActivityForm, null); entity.setId(reportVO.getId()); entity.setUserId(UserContext.getCurrentUserId()); entity.setCancel(false); activityReportMapper.updateById(entity); return Result.ok("成功"); }else { return Result.error("该活动已报名"); } } ActivityReport entity = ActivityReportForm.getEntityByForm(reportActivityForm, null); entity.setUserId(UserContext.getCurrentUserId()); activityReportMapper.insert(entity); return Result.ok("成功"); } /** * 获得中间表信息通过activityId,userId * @param activityId 活动id * @return */ @Override public ActivityReportVO userReport(String activityId){ if (UserContext.getCurrentUserId() == null || UserContext.getCurrentUserId().isEmpty()){ throw new RuntimeException("用户登录状态异常"); } return activityReportMapper.getActivityReport(activityId,UserContext.getCurrentUserId()); } /**获得活动详情 并 活动账号报名活动情况,收藏情况 * * @param activityId * @return */ @Override public Result detailByUsr(String activityId) { //查询活动详情 ActivityVO vo = baseMapper.getById(activityId); Assert.notNull(vo, "记录不存在"); //查询报名情况 ActivityReportVO reportVO = userReport(activityId); //查询用户收藏情况 MyCollect myCollect = new LambdaQueryChainWrapper<>(myCollectMapper) .eq(MyCollect::getRefId,activityId) .eq(MyCollect::getUserId,UserContext.getCurrentUserId()) .eq(MyCollect::getDeleteFlag,false) .one(); vo.setIsCollect(myCollect != null); if (!ActivityCoverTypeEnum.TEXT.getType().equals(vo.getCoverType())){ vo.setUrl(cOSUtil.getPreviewUrl(vo.getCover())); } //则当前用户未报名 if (reportVO == null){ vo.setIsReport(false); }else { //已取消则可以报名 if (reportVO.getCancel()){ vo.setIsReport(false); }else { vo.setIsReport(true); } } return Result.ok().data(vo); } }