0
点赞
收藏
分享

微信扫一扫

微信小程序活动管理系统

悲催博士僧 2021-09-26 阅读 78

项目介绍

1.玩家角色:

2.商户角色:

3.管理员角色:

开发环境:

  1. jdk 8
  2. intellij idea
  3. tomcat 8.5.40
  4. mysql 5.7
  5. 微信开发者工具

后端所用技术:

  1. springboot2.1
  2. quartz
  3. thymeleaf
  4. alibaba 连接池
  5. swagger
  6. mybatis

难点思路

  1. 不同角色登录显示不同的菜单页面
  1. 活动状态与报名状态关联
  1. 信誉值筛选

项目截图

  • 首页


  • 玩家-活动列表


  • 玩家-我的活动


  • 玩家-活动详情


  • 玩家-评价


  • 玩家-个人中心


  • 店家-创建活动


  • 店家-活动管理


  • 店家-个人中心


  • 管理员-活动审核


  • 管理员-帐号管理


  • 管理员-创建店铺


  • swagger接口


数据库配置

spring:
    datasource:
        type: com.alibaba.druid.pool.DruidDataSource
        driverClassName: com.mysql.cj.jdbc.Driver
        druid:
            url: jdbc:mysql://localhost:3306/board_game?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
            username: root
            password: root123

模版配置

spring:
  thymeleaf:
    mode: HTML
    encoding: utf-8
 

核心业务代码

  1. 活动模块
@ApiOperation(value = "新增活动",response = AjaxResult.class)
@PostMapping("/add")
public AjaxResult addSave(ActivityAddReq activityReq)
{
    Store store=storeService.selectStoreByUserId(activityReq.getBoosId());//查询店铺id
    if(store==null){
        return AjaxResult.error("店铺不存在");
    }
    Activity activity=new Activity();
    BeanUtils.copyProperties(activityReq,activity);
    activity.setStatus(-1);                     //活动待审核
    activity.setCityId(store.getCityId());      //获取店铺所在城市
    activity.setAddress(store.getAddress());    //获取店铺所在地址
    activity.setBoosId(activityReq.getBoosId());
    return toAjax(activityService.insertActivity(activity));
}

@ApiOperation(value = "审核活动",response = AjaxResult.class)
@PostMapping( "/audit")
public AjaxResult audit(ActivityAuditReq req)
{
    Activity activity=new Activity();
    activity.setId(req.getId());
    activity.setStatus(req.getStatus()); //设置审核状态
    return toAjax(activityService.updateActivity(activity));
}
  1. 活动报名模块
@ApiOperation(value = "活动报名",response = AjaxResult.class)
@PostMapping( "/sign")
public AjaxResult sign(SignUpReq signUpReq)
{
    Activity activity= activityService.selectActivityById(signUpReq.getActivityId());
    if(activity==null){
        return AjaxResult.error("活动不存在");
    }else if(!activity.getStatus().equals(0)){ //活动未开始才能报名--不需要判断时间,时间能控制活动状态
        return AjaxResult.error("活动状态不正常");
    }
    SignUp search=new SignUp();
    search.setUserId(signUpReq.getUserId());
    search.setActivityId(signUpReq.getActivityId());
    List<SignUp> list=signUpService.selectSignUpList(search);
    if(list.size()>0){
        return AjaxResult.error("该活动您已经报名,请忽重复报名");
    }
    SignUp signUp=new SignUp();
    BeanUtils.copyProperties(signUpReq,signUp);
    signUp.setAddTime(DateUtils.getTime());
    signUp.setStatus(0);
    signUpService.insertSignUp(signUp);
    activity.setsNum(activity.getsNum()+1);
    return toAjax(activityService.updateActivity(activity));
}

@ApiOperation(value = "取消报名",response = AjaxResult.class)
@PostMapping( "/cancelSign")
public AjaxResult cancelSign(SignUpReq signUpReq)
{
    Activity activity= activityService.selectActivityById(signUpReq.getActivityId());
    if(activity==null){
        return AjaxResult.error("活动不存在");
    }
    SignUp search=new SignUp();
    search.setUserId(signUpReq.getUserId());
    search.setActivityId(signUpReq.getActivityId());
    List<SignUp> list=signUpService.selectSignUpList(search);
    if(list.size()==0){
        return AjaxResult.error("该活动您未报名,取消失败");
    }
    SignUp signUp=list.get(0);
    signUp.setStatus(3);
    signUpService.updateSignUpByAId(signUp);
    activity.setsNum(activity.getsNum()-1);
    return toAjax(activityService.updateActivity(activity));
}
  1. 活动结束后用户信誉值计算
//根据活动参与玩家对彼此评价做出信誉值计算
@ApiOperation(value = "活动结束-玩家评论",response = ActivityVo.class)
@PostMapping( "/playComment")
public AjaxResult playComment(CommentReq req)
{
    try{
        GameUser gameUser=gameUserService.selectGameUserById(req.getUserId());
        if(gameUser==null){
            return  AjaxResult.error("评论失败,评论人信息不存在");
        }
        gameUser=gameUserService.selectGameUserById(req.getCommentId());
        if(gameUser==null){
            return  AjaxResult.error("评论失败,被评论人信息不存在");
        }
        ActivityComment activityComment=new ActivityComment();
        activityComment.setUserId(req.getUserId());
        activityComment.setActivityId(req.getActivityId());
        activityComment.setCommentId(req.getCommentId());
        List<ActivityComment> list=activityCommentService.selectActivityCommentList(activityComment);
        if(list.size()>0){
            return  AjaxResult.error("评论失败,已经评论过,请忽重复评论");
        }
        BeanUtils.copyProperties(req,activityComment);
        activityComment.setCalculate(1); //设置成没有计算过
        activityCommentService.insertActivityComment(activityComment);//添加评论记录

        //扣分规则:一个玩家在一局游戏里被>=1玩家负面评价,就会扣分,迟到扣5分,缺席扣10分,不遵守游戏规则扣2分 整体印象 10分
        //如果评论次数坏印象大于1次,累积计算评论值

        int reputationValue=gameUser.getReputation();   //原来的信誉值
        //迟到扣除5分
        if(req.getBelate()==1){
            reputationValue=reputationValue-5;
        }else{
            reputationValue=reputationValue+5;
        }

        //缺席扣除10分
        if(req.getAbsent()==1){
            reputationValue=reputationValue-10;
        }else{
            reputationValue=reputationValue+10;
        }

        //不遵守游戏规则扣2分
        if(req.getAbsent()==1){
            reputationValue=reputationValue-2;
        }else{
            reputationValue=reputationValue+2;
        }
        //整体印象 1分
        if(req.getAbsent()==1){
            reputationValue=reputationValue-1;
        }else{
            reputationValue=reputationValue+1;
        }
        gameUser.setReputation(reputationValue);        //最终更新被评论人的信誉值
        gameUserService.updateGameUser(gameUser);       //更新数据
        return  AjaxResult.success("评价成功");
    }catch (Exception e){
        e.printStackTrace();
        return  AjaxResult.error("评价失败,系统异常");
    }
}
  1. 活动开始与结束任务调度 ,同时筛选出信誉值高者用户入局活动中
public void activityTask() {
List<Activity> list = activityService.getListByNoEnd();
if (list.size() > 0) {
    for (Activity activity : list) {
        String startTime = activity.getStartTime();//开始时间
        String endTime = activity.getEndTime();     //结束时间
        if (activity.getStatus() == 0) {            //未开始的活动
            if (DateUtils.isGreater(startTime) && !DateUtils.isGreater(endTime)) {
                //报名人数大于活动人数,则活动正常开始
                if(activity.getsNum()>=activity.getpNum()){
                    activity.setStatus(1);//设置已经开始
                    activityService.updateActivity(activity);
                    //筛选出信誉值较高的玩家
                    List<SignUp> signUps=signUpService.getSignUpListByAId(activity.getId());
                    for(int i=0;i<signUps.size();i++){
                        SignUp signUp=signUps.get(i);
                        if(i<activity.getpNum()){
                            signUp.setStatus(1); //设置活动中,信誉值低者出局
                            signUp.setRemark("活动报名成功");
                        }else{
                            signUp.setStatus(3);//出局
                            signUp.setRemark("信誉值低于其他报名玩家,出局");
                            //todo  可发送消息推送
                        }
                        signUpService.updateSignUp(signUp);
                    }
                }else{
                    activity.setStatus(2);//设置2已经结束
                    activity.setRemark("活动报名人数未满足活动人数要求,自动结束活动");
                    activityService.updateActivity(activity);
                    //更新当前活动的报名状态为已结束
                    SignUp signUp=new SignUp();
                    signUp.setActivityId(activity.getId());
                    signUp.setStatus(3);//报名状态 0未开始,1活动中 2已结束 3报名失败
                    signUp.setRemark("活动报名人数未满足活动人数要求,自动结束活动");
                    signUpService.updateSignUpByAId(signUp);
                }
            }
        } else if (activity.getStatus() == 1) {//已经开始的活动
            if (DateUtils.isGreater(endTime)) {
                activity.setStatus(2);//设置已经结束
                activityService.updateActivity(activity);

                SignUp signUp=new SignUp();
                signUp.setActivityId(activity.getId());
                signUp.setStatus(2);//报名状态2已结束
                signUp.setRemark("活动时间已过,结束活动");
                signUpService.updateStatusByAcIng(signUp);
             }
          }
        }
    }
}

项目后续

其他ssh,ssm版本后续迭代更新,持续关注

举报

相关推荐

0 条评论