buyer-api/src/main/java/cn/lili/controller/lmk/ActivityReportController.java
New file @@ -0,0 +1,43 @@ package cn.lili.controller.lmk; import cn.lili.base.Result; import cn.lili.common.security.context.UserContext; import cn.lili.modules.lmk.domain.form.ActivityReportForm; import cn.lili.modules.lmk.service.ActivityService; import cn.lili.modules.lmk.service.MyActivityService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @Validated @RequiredArgsConstructor @Api(value = "小程序端活动管理", tags = "小程序端活动管理") @RestController @RequestMapping("/buyer/lmk/activityReport") public class ActivityReportController { private final ActivityService activityService; private final MyActivityService myActivityService; @GetMapping() @ApiOperation(value = "活动列表", notes = "活动列表") public Result getAllActivity(){ return activityService.all(); } @PostMapping() @ApiOperation(value = "报名活动", notes = "活动报名") public Result activityReport(@RequestBody ActivityReportForm activityReportForm){ return myActivityService.activityReport(activityReportForm); } @GetMapping("/getDetail/{activityId}") @ApiOperation(value = "活动详情", notes = "活动详情") public Result getActivityDetail(@PathVariable String activityId){ return myActivityService.detailByUsr(activityId); } } buyer-api/src/main/java/cn/lili/controller/lmk/MyActivityController.java
@@ -1,6 +1,7 @@ package cn.lili.controller.lmk; import cn.lili.base.Result; import cn.lili.common.security.context.UserContext; import cn.lili.modules.lmk.domain.query.ActivityReportQuery; import cn.lili.modules.lmk.domain.query.MyActivityQuery; import cn.lili.modules.lmk.service.ActivityService; @@ -21,15 +22,13 @@ @GetMapping("/getMyActivityList") @ApiOperation(value = "获得我的活动列表", notes = "获得我的活动列表") public Result getMyActivityList(MyActivityQuery query){ return myActivityService.getMyActivityList(query); } @PutMapping("/cancelActivity") @ApiOperation(value = "获得我的活动列表", notes = "获得我的活动列表") public Result cancelActivity(@RequestBody ActivityReportQuery query){ return myActivityService.cancelActivity(query); @PutMapping("/activityCancel/{activityId}") @ApiOperation(value = "取消活动", notes = "取消活动") public Result activityCancel(@PathVariable String activityId){ return myActivityService.activityCancel(activityId); } } framework/src/main/java/cn/lili/modules/lmk/domain/entity/ActivityReport.java
New file @@ -0,0 +1,21 @@ package cn.lili.modules.lmk.domain.entity; import cn.lili.mybatis.BaseEntity; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; @Data @TableName("lmk_activity_report") public class ActivityReport extends BaseEntity { private static final long serialVersionUID = 1L; @TableField("activity_id") private String activityId; @TableField("user_id") private String userId; @TableField("cancel") private Boolean cancel; } framework/src/main/java/cn/lili/modules/lmk/domain/form/ActivityReportForm.java
New file @@ -0,0 +1,34 @@ package cn.lili.modules.lmk.domain.form; import cn.lili.base.AbsForm; import cn.lili.modules.lmk.domain.entity.Activity; import cn.lili.modules.lmk.domain.entity.ActivityReport; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import org.springframework.beans.BeanUtils; import org.springframework.lang.NonNull; import javax.validation.constraints.NotBlank; @Data @ApiModel(value = "报名活动表单", description = "报名活动表单") public class ActivityReportForm extends AbsForm { /** 活动id */ @ApiModelProperty(value = "活动id") @NotBlank private String activityId; /** 是否取消报名 */ @ApiModelProperty(value = "取消那报名") private Boolean cancel; public static ActivityReport getEntityByForm(@NonNull ActivityReportForm form, ActivityReport entity) { if(entity == null) { entity = new ActivityReport(); } BeanUtils.copyProperties(form, entity); return entity; } } framework/src/main/java/cn/lili/modules/lmk/domain/query/MyActivityQuery.java
@@ -16,7 +16,5 @@ /** 是否取消*/ private Boolean cancel; @NotBlank private String id; } framework/src/main/java/cn/lili/modules/lmk/domain/vo/ActivityReportVO.java
@@ -1,8 +1,12 @@ package cn.lili.modules.lmk.domain.vo; import cn.lili.base.AbsVo; import cn.lili.modules.lmk.domain.entity.Activity; import cn.lili.modules.lmk.domain.entity.ActivityReport; import io.swagger.annotations.ApiModel; import lombok.Data; import org.springframework.beans.BeanUtils; import org.springframework.lang.NonNull; @Data @ApiModel(value = "ActivityReport中间表响应数据", description = "响应数据") @@ -12,4 +16,14 @@ /** 用户id*/ private String userId; private Boolean cancel; public static ActivityReportVO getVoByEntity(@NonNull ActivityReport entity, ActivityReportVO vo) { if(vo == null) { vo = new ActivityReportVO(); } BeanUtils.copyProperties(entity, vo); return vo; } } framework/src/main/java/cn/lili/modules/lmk/domain/vo/ActivityVO.java
@@ -85,6 +85,8 @@ /** 报名人员集合*/ private List<MemberVO> members; private Boolean isReport; public static ActivityVO getVoByEntity(@NonNull Activity entity, ActivityVO vo) { if(vo == null) { vo = new ActivityVO(); framework/src/main/java/cn/lili/modules/lmk/mapper/ActivityMapper.java
@@ -1,7 +1,6 @@ package cn.lili.modules.lmk.mapper; import cn.lili.modules.lmk.domain.entity.Activity; import cn.lili.modules.lmk.domain.entity.CustomerBlack; import cn.lili.modules.lmk.domain.query.*; import cn.lili.modules.lmk.domain.vo.ActivityReportVO; import cn.lili.modules.lmk.domain.vo.ActivityVO; @@ -39,11 +38,7 @@ IPage getMembers(IPage page, @Param("query") ActivityMembersQuery query); List<MyActivityVo> getMyActivityList(@Param("query")MyActivityQuery query); int cancelActivity(String id); ActivityReportVO getActivityReport(@Param("query")ActivityReportQuery query); List<MyActivityVo> getMyActivityList(@Param("query")MyActivityQuery query,@Param("userId") String userId); /** * 批量更新活动 @@ -51,4 +46,8 @@ * @return 受影响的行数 */ int batchUpdateActivities(@Param("list") List<Activity> activityList); } framework/src/main/java/cn/lili/modules/lmk/mapper/ActivityReportMapper.java
New file @@ -0,0 +1,23 @@ package cn.lili.modules.lmk.mapper; import cn.lili.modules.lmk.domain.entity.ActivityReport; import cn.lili.modules.lmk.domain.query.ActivityReportQuery; import cn.lili.modules.lmk.domain.vo.ActivityReportVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; /** * 报名中间表接口 */ @Mapper public interface ActivityReportMapper extends BaseMapper<ActivityReport> { /** * 获得中间表的信息 * @param activityId 活动id * @param userId 用戶id * @return */ ActivityReportVO getActivityReport(@Param("activityId") String activityId, @Param("userId") String userId); } framework/src/main/java/cn/lili/modules/lmk/service/ActivityService.java
@@ -3,6 +3,7 @@ import cn.lili.base.Result; import cn.lili.modules.lmk.domain.entity.Activity; import cn.lili.modules.lmk.domain.form.ActivityForm; import cn.lili.modules.lmk.domain.form.ActivityReportForm; import cn.lili.modules.lmk.domain.query.ActivityMembersQuery; import cn.lili.modules.lmk.domain.query.ActivityQuery; import cn.lili.modules.lmk.domain.query.MyActivityQuery; @@ -73,4 +74,5 @@ Result activityMembersPage(ActivityMembersQuery query); } framework/src/main/java/cn/lili/modules/lmk/service/MyActivityService.java
@@ -2,12 +2,25 @@ import cn.lili.base.Result; import cn.lili.modules.lmk.domain.entity.Activity; 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 com.baomidou.mybatisplus.extension.service.IService; public interface MyActivityService extends IService<Activity> { public Result getMyActivityList(MyActivityQuery query); public Result cancelActivity(ActivityReportQuery query); public Result activityCancel(String activityId); Result activityReport(ActivityReportForm activityReportForm); /** * 获得报名中间表对象更具活动id ,(用户id)来自user上下文 * @param activityId 活动id * @return 未查到 返回 null */ ActivityReportVO userReport(String activityId); Result detailByUsr(String activityId); } framework/src/main/java/cn/lili/modules/lmk/service/impl/ActivityServiceImpl.java
@@ -3,22 +3,22 @@ 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.entity.CustomerBlack; import cn.lili.modules.lmk.domain.entity.CustomerTagRef; import cn.lili.modules.lmk.domain.entity.ActivityReport; import cn.lili.modules.lmk.domain.form.ActivityForm; import cn.lili.modules.lmk.domain.form.CustomerTagRefForm; import cn.lili.modules.lmk.domain.form.ActivityReportForm; import cn.lili.modules.lmk.domain.query.ActivityMembersQuery; import cn.lili.modules.lmk.domain.query.ActivityQuery; import cn.lili.modules.lmk.domain.vo.ActivityReportVO; import cn.lili.modules.lmk.domain.vo.ActivityVO; import cn.lili.modules.lmk.domain.vo.CustomerBlackVO; import cn.lili.modules.lmk.mapper.ActivityMapper; import cn.lili.modules.lmk.mapper.CustomerBlackMapper; 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.modules.member.service.MemberService; import cn.lili.utils.PageUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import io.micrometer.core.instrument.util.StringUtils; import lombok.RequiredArgsConstructor; @@ -34,10 +34,11 @@ @RequiredArgsConstructor public class ActivityServiceImpl extends ServiceImpl<ActivityMapper, Activity> implements ActivityService { private final ActivityMapper activityMapper; private final LmkFileService lmkFileService; private final MyActivityService activityService; private final ActivityReportMapper activityReportMapper; @Override public Result add(ActivityForm form) { @@ -72,10 +73,6 @@ return Result.ok("修改成功"); } public void updateByList(List<Activity> vo){ } @Override public Result remove(List<String> ids) { baseMapper.deleteBatchIds(ids); @@ -84,12 +81,19 @@ @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("删除成功"); } @@ -114,13 +118,15 @@ return Result.ok().data(vo); } @Override public Result all() { List<Activity> entities = baseMapper.selectList(null); List<ActivityVO> vos = entities.stream() .map(entity -> ActivityVO.getVoByEntity(entity, null)) .collect(Collectors.toList()); return Result.ok().data(vos); List<ActivityVO> reportActivityVo =vos.stream().filter(item -> ActivityStatusEnum.REPORT.getType().equals(item.getStatus())).collect(Collectors.toList()); return Result.ok().data(reportActivityVo); } @Override @@ -160,4 +166,6 @@ baseMapper.getMembers(page, query); return Result.ok().data(page.getRecords()).total(page.getTotal()); } } framework/src/main/java/cn/lili/modules/lmk/service/impl/MyActivityServiceImpl.java
@@ -1,18 +1,26 @@ package cn.lili.modules.lmk.service.impl; import cn.lili.base.Result; 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.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.service.LmkFileService; import cn.lili.modules.lmk.mapper.ActivityReportMapper; import cn.lili.modules.lmk.service.MyActivityService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 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.List; @@ -21,44 +29,108 @@ @RequiredArgsConstructor public class MyActivityServiceImpl extends ServiceImpl<ActivityMapper, Activity> implements MyActivityService { private final ActivityMapper activityMapper; private final LmkFileService lmkFileService; private final ActivityReportMapper activityReportMapper; @Override public Result getMyActivityList(MyActivityQuery query) { List<MyActivityVo> myActivityList = activityMapper.getMyActivityList(query); String userId = UserContext.getCurrentUserId(); List<MyActivityVo> myActivityList = activityMapper.getMyActivityList(query,userId); for (MyActivityVo vo : myActivityList) { System.out.println(vo); if (!"文字".equals(vo.getCoverType())){ // String url = lmkFileService.getPreviewUrl(vo.getCover()); // vo.setUrl(url); } } return Result.ok().data(myActivityList); } @Override public Result cancelActivity(ActivityReportQuery query) { public Result activityCancel(String activityId) { // TODO 判断是否在报名时间内 在的话可以取消报名, (若有报名费需要退款) ActivityReportVO vo = activityMapper.getActivityReport(query); //获得中间表信息 ActivityReportVO vo = userReport(activityId); Activity activity = activityMapper.selectById(vo.getActivityId()); Activity activity = activityMapper.selectById(activityId); Date date = new Date(); if(!date.before(activity.getReportStartTime()) && !date.after(activity.getReportEndTime())){ int affectedRows = activityMapper.cancelActivity(vo.getId()); if (affectedRows > 0) { boolean rowsAffected = new LambdaUpdateChainWrapper<ActivityReport>(activityReportMapper) .eq(ActivityReport::getId, vo.getId()) // WHERE id = ? .set(ActivityReport::getCancel, true) // SET cancel = true .update(); // 执行更新 if (rowsAffected) { return Result.ok("活动取消成功"); } else { // 可选:记录警告日志 throw new RuntimeException("活动不存在或已取消"); return Result.error("活动不存在或已取消"); } }else { throw new RuntimeException("活动已不在报名时间内无法取消"); 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()); } @Override public Result detailByUsr(String activityId) { ActivityVO vo = baseMapper.getById(activityId); Assert.notNull(vo, "记录不存在"); ActivityReportVO reportVO = userReport(activityId); //则当前用户未报名 if (reportVO == null){ vo.setIsReport(false); }else { //已取消则可以报名 if (reportVO.getCancel()){ vo.setIsReport(false); }else { vo.setIsReport(true); } } return Result.ok().data(vo); } } framework/src/main/resources/mapper/lmk/ActivityMapper.xml
@@ -32,10 +32,6 @@ <result column="activity_report_id" property="activityReportId"/> </resultMap> <resultMap id="ActivityReportMap" type="cn.lili.modules.lmk.domain.vo.ActivityReportVO"> <result column="activity_id" property="activityId"/> <result column="user_id" property="userId"/> </resultMap> <select id="getMyActivityList" resultMap="MyActivityResultMap"> @@ -55,7 +51,7 @@ LEFT JOIN lmk_activity LA ON LAR.activity_id = LA.id where LA.delete_flag = 0 AND LAR.delete_flag = 0 AND LAR.user_id = #{query.id} AND LAR.user_id = #{userId} AND LAR.cancel = #{query.cancel} <if test="query.status == null or query.status == ''"> AND LA.status != '已结束' @@ -148,19 +144,6 @@ WHERE LAR.activity_id = #{query.id} </select> <update id="cancelActivity" > UPDATE lmk_activity_report LAR SET LAR.cancel = true where LAR.id = #{id} </update> <select id="getActivityReport" resultMap="ActivityReportMap"> SELECT LAR.* FROM lmk_activity_report LAR WHERE LAR.user_id = #{query.userId} and LAR.activity_id = #{query.activityId} </select> <update id="batchUpdateActivities"> UPDATE lmk_activity <trim prefix="SET" suffixOverrides=","> @@ -175,4 +158,5 @@ #{item.id} </foreach> </update> </mapper> framework/src/main/resources/mapper/lmk/ActivityReportMapper.xml
New file @@ -0,0 +1,23 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="cn.lili.modules.lmk.mapper.ActivityReportMapper"> <resultMap id="ActivityReportMap" type="cn.lili.modules.lmk.domain.vo.ActivityReportVO"> <result column="activity_id" property="activityId"/> <result column="user_id" property="userId"/> </resultMap> <update id="cancelActivity" > UPDATE lmk_activity_report LAR SET LAR.cancel = true where LAR.id = #{id} </update> <select id="getActivityReport" resultType="cn.lili.modules.lmk.domain.vo.ActivityReportVO"> SELECT LAR.* FROM lmk_activity_report LAR WHERE LAR.user_id = #{userId} and LAR.activity_id = #{activityId} AND LAR.delete_flag = 0 </select> </mapper> lmk-job/src/main/java/cn/lili/job/ActivityJob.java
@@ -43,16 +43,17 @@ .list(); Date now = new Date(); // 获取当前时间 for (Activity activity : activeActivities) { if (isInProgress(now, activity)) { activity.setStatus(ActivityStatusEnum.IN_PROGRESS.getType()); } else if (isRecruiting(now, activity)) { activity.setStatus(ActivityStatusEnum.REPORT.getType()); } else if (now.before(activity.getReportStartTime())) { } else if (now.before(activity.getReportStartTime())) { //在报名时间之前 activity.setStatus(ActivityStatusEnum.NOT_STARTED.getType()); } else { }else if(now.after(activity.getReportEndTime()) && now.before(activity.getStartTime())){ //可能出现 在报名结束时间后, 活动开始之前的情况 activity.setStatus(ActivityStatusEnum.NOT_STARTED.getType()); } else { activity.setStatus(ActivityStatusEnum.ENDED.getType()); } } @@ -62,11 +63,12 @@ XxlJobHelper.log("执行完成:活动状态改变"); } //活动开始时间之后,结束时间之前 在活动期间 private boolean isInProgress(Date now, Activity activity) { return !now.before(activity.getStartTime()) && !now.after(activity.getEndTime()); } //在报名期间 private boolean isRecruiting(Date now, Activity activity) { return !now.before(activity.getReportStartTime()) && !now.after(activity.getReportEndTime()); }