如何搭建微信小程序活动管理系统

这篇文章将为大家详细讲解有关如何搭建微信小程序活动管理系统,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

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. 不同角色登录显示不同的菜单页面

自定义底部导航栏,不同身份显示不同的tabbar,登录后根据设置的角色类型显示不同的导航栏

  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);
             }
          }
        }
    }
}

关于如何搭建微信小程序活动管理系统就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。