溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何搭建微信小程序活動(dòng)管理系統(tǒng)

發(fā)布時(shí)間:2021-09-14 14:18:03 來源:億速云 閱讀:160 作者:柒染 欄目:編程語言

這篇文章將為大家詳細(xì)講解有關(guān)如何搭建微信小程序活動(dòng)管理系統(tǒng),文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。

1.玩家進(jìn)入到小程序,篩選查看適合參與的活動(dòng),選擇活動(dòng)報(bào)名,系統(tǒng)根據(jù)報(bào)名用戶的"信譽(yù)值"自動(dòng)判斷報(bào)名成功與否, 游戲結(jié)束后可對(duì)參與同期游戲的玩家進(jìn)行評(píng)價(jià),評(píng)價(jià)好壞決定玩家的信譽(yù)值.

2.商戶創(chuàng)建游戲活動(dòng)提交審核,審核通過后等待玩家報(bào)名,發(fā)起游戲.

3.管理員審核商戶提交的游戲活動(dòng),管理商戶帳號(hào)

開發(fā)環(huán)境:

  1. jdk 8

  2. intellij idea

  3. tomcat 8.5.40

  4. mysql 5.7

  5. 微信開發(fā)者工具

后端所用技術(shù):

  1. springboot2.1

  2. quartz

  3. thymeleaf

  4. alibaba 連接池

  5. swagger

  6. mybatis

難點(diǎn)思路

  1. 不同角色登錄顯示不同的菜單頁面

自定義底部導(dǎo)航欄,不同身份顯示不同的tabbar,登錄后根據(jù)設(shè)置的角色類型顯示不同的導(dǎo)航欄

  1. 活動(dòng)狀態(tài)與報(bào)名狀態(tài)關(guān)聯(lián)

添加定時(shí)任務(wù),根據(jù)設(shè)置的活動(dòng)時(shí)間判斷改變活動(dòng)狀態(tài)的同時(shí),查詢綁定該活動(dòng)的報(bào)名記錄,修改相應(yīng)的狀態(tài)

  1. 信譽(yù)值篩選

設(shè)定初始信譽(yù)值,根據(jù)評(píng)價(jià)好壞修改信譽(yù)值,報(bào)名人數(shù)超過活動(dòng)人數(shù),篩選信譽(yù)值高的玩家開始游戲,信譽(yù)值低的玩家自動(dòng)出局

項(xiàng)目截圖

  • 首頁 如何搭建微信小程序活動(dòng)管理系統(tǒng)

  • 玩家-活動(dòng)列表 如何搭建微信小程序活動(dòng)管理系統(tǒng)

  • 玩家-我的活動(dòng) 如何搭建微信小程序活動(dòng)管理系統(tǒng)

  • 玩家-活動(dòng)詳情 如何搭建微信小程序活動(dòng)管理系統(tǒng)

  • 玩家-評(píng)價(jià) 如何搭建微信小程序活動(dòng)管理系統(tǒng)

  • 玩家-個(gè)人中心 如何搭建微信小程序活動(dòng)管理系統(tǒng)

  • 店家-創(chuàng)建活動(dòng) 如何搭建微信小程序活動(dòng)管理系統(tǒng)

  • 店家-活動(dòng)管理 如何搭建微信小程序活動(dòng)管理系統(tǒng)

  • 店家-個(gè)人中心 如何搭建微信小程序活動(dòng)管理系統(tǒng)

  • 管理員-活動(dòng)審核 如何搭建微信小程序活動(dòng)管理系統(tǒng)

  • 管理員-帳號(hào)管理 如何搭建微信小程序活動(dòng)管理系統(tǒng)

  • 管理員-創(chuàng)建店鋪 如何搭建微信小程序活動(dòng)管理系統(tǒng)

  • swagger接口 如何搭建微信小程序活動(dòng)管理系統(tǒng)

數(shù)據(jù)庫配置

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

核心業(yè)務(wù)代碼

  1. 活動(dòng)模塊

@ApiOperation(value = "新增活動(dòng)",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);   			 		//活動(dòng)待審核
    activity.setCityId(store.getCityId()); 		//獲取店鋪所在城市
    activity.setAddress(store.getAddress()); 	//獲取店鋪所在地址
    activity.setBoosId(activityReq.getBoosId());
    return toAjax(activityService.insertActivity(activity));
}

@ApiOperation(value = "審核活動(dòng)",response = AjaxResult.class)
@PostMapping( "/audit")
public AjaxResult audit(ActivityAuditReq req)
{
    Activity activity=new Activity();
    activity.setId(req.getId());
    activity.setStatus(req.getStatus()); //設(shè)置審核狀態(tài)
    return toAjax(activityService.updateActivity(activity));
}
  1. 活動(dòng)報(bào)名模塊

@ApiOperation(value = "活動(dòng)報(bào)名",response = AjaxResult.class)
@PostMapping( "/sign")
public AjaxResult sign(SignUpReq signUpReq)
{
    Activity activity= activityService.selectActivityById(signUpReq.getActivityId());
    if(activity==null){
        return AjaxResult.error("活動(dòng)不存在");
    }else if(!activity.getStatus().equals(0)){ //活動(dòng)未開始才能報(bào)名--不需要判斷時(shí)間,時(shí)間能控制活動(dòng)狀態(tài)
        return AjaxResult.error("活動(dòng)狀態(tài)不正常");
    }
    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("該活動(dòng)您已經(jīng)報(bào)名,請(qǐng)忽重復(fù)報(bào)名");
    }
    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 = "取消報(bào)名",response = AjaxResult.class)
@PostMapping( "/cancelSign")
public AjaxResult cancelSign(SignUpReq signUpReq)
{
    Activity activity= activityService.selectActivityById(signUpReq.getActivityId());
    if(activity==null){
        return AjaxResult.error("活動(dòng)不存在");
    }
    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("該活動(dòng)您未報(bào)名,取消失敗");
    }
    SignUp signUp=list.get(0);
    signUp.setStatus(3);
    signUpService.updateSignUpByAId(signUp);
    activity.setsNum(activity.getsNum()-1);
    return toAjax(activityService.updateActivity(activity));
}
  1. 活動(dòng)結(jié)束后用戶信譽(yù)值計(jì)算

//根據(jù)活動(dòng)參與玩家對(duì)彼此評(píng)價(jià)做出信譽(yù)值計(jì)算
@ApiOperation(value = "活動(dòng)結(jié)束-玩家評(píng)論",response = ActivityVo.class)
@PostMapping( "/playComment")
public AjaxResult playComment(CommentReq req)
{
    try{
        GameUser gameUser=gameUserService.selectGameUserById(req.getUserId());
        if(gameUser==null){
            return  AjaxResult.error("評(píng)論失敗,評(píng)論人信息不存在");
        }
        gameUser=gameUserService.selectGameUserById(req.getCommentId());
        if(gameUser==null){
            return  AjaxResult.error("評(píng)論失敗,被評(píng)論人信息不存在");
        }
        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("評(píng)論失敗,已經(jīng)評(píng)論過,請(qǐng)忽重復(fù)評(píng)論");
        }
        BeanUtils.copyProperties(req,activityComment);
        activityComment.setCalculate(1); //設(shè)置成沒有計(jì)算過
        activityCommentService.insertActivityComment(activityComment);//添加評(píng)論記錄

        //扣分規(guī)則:一個(gè)玩家在一局游戲里被>=1玩家負(fù)面評(píng)價(jià),就會(huì)扣分,遲到扣5分,缺席扣10分,不遵守游戲規(guī)則扣2分 整體印象 10分
        //如果評(píng)論次數(shù)壞印象大于1次,累積計(jì)算評(píng)論值

        int reputationValue=gameUser.getReputation(); 	//原來的信譽(yù)值
        //遲到扣除5分
        if(req.getBelate()==1){
            reputationValue=reputationValue-5;
        }else{
            reputationValue=reputationValue+5;
        }

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

        //不遵守游戲規(guī)則扣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);		//最終更新被評(píng)論人的信譽(yù)值
        gameUserService.updateGameUser(gameUser);		//更新數(shù)據(jù)
        return  AjaxResult.success("評(píng)價(jià)成功");
    }catch (Exception e){
        e.printStackTrace();
        return  AjaxResult.error("評(píng)價(jià)失敗,系統(tǒng)異常");
    }
}
  1. 活動(dòng)開始與結(jié)束任務(wù)調(diào)度 ,同時(shí)篩選出信譽(yù)值高者用戶入局活動(dòng)中

public void activityTask() {
List<Activity> list = activityService.getListByNoEnd();
if (list.size() > 0) {
    for (Activity activity : list) {
        String startTime = activity.getStartTime();//開始時(shí)間
        String endTime = activity.getEndTime();     //結(jié)束時(shí)間
        if (activity.getStatus() == 0) {            //未開始的活動(dòng)
            if (DateUtils.isGreater(startTime) && !DateUtils.isGreater(endTime)) {
                //報(bào)名人數(shù)大于活動(dòng)人數(shù),則活動(dòng)正常開始
                if(activity.getsNum()>=activity.getpNum()){
                    activity.setStatus(1);//設(shè)置已經(jīng)開始
                    activityService.updateActivity(activity);
                    //篩選出信譽(yù)值較高的玩家
                    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); //設(shè)置活動(dòng)中,信譽(yù)值低者出局
                            signUp.setRemark("活動(dòng)報(bào)名成功");
                        }else{
                            signUp.setStatus(3);//出局
                            signUp.setRemark("信譽(yù)值低于其他報(bào)名玩家,出局");
                            //todo  可發(fā)送消息推送
                        }
                        signUpService.updateSignUp(signUp);
                    }
                }else{
                    activity.setStatus(2);//設(shè)置2已經(jīng)結(jié)束
                    activity.setRemark("活動(dòng)報(bào)名人數(shù)未滿足活動(dòng)人數(shù)要求,自動(dòng)結(jié)束活動(dòng)");
                    activityService.updateActivity(activity);
                    //更新當(dāng)前活動(dòng)的報(bào)名狀態(tài)為已結(jié)束
                    SignUp signUp=new SignUp();
                    signUp.setActivityId(activity.getId());
                    signUp.setStatus(3);//報(bào)名狀態(tài) 0未開始,1活動(dòng)中 2已結(jié)束 3報(bào)名失敗
                    signUp.setRemark("活動(dòng)報(bào)名人數(shù)未滿足活動(dòng)人數(shù)要求,自動(dòng)結(jié)束活動(dòng)");
                    signUpService.updateSignUpByAId(signUp);
                }
            }
        } else if (activity.getStatus() == 1) {//已經(jīng)開始的活動(dòng)
            if (DateUtils.isGreater(endTime)) {
                activity.setStatus(2);//設(shè)置已經(jīng)結(jié)束
                activityService.updateActivity(activity);

                SignUp signUp=new SignUp();
                signUp.setActivityId(activity.getId());
                signUp.setStatus(2);//報(bào)名狀態(tài)2已結(jié)束
                signUp.setRemark("活動(dòng)時(shí)間已過,結(jié)束活動(dòng)");
                signUpService.updateStatusByAcIng(signUp);
             }
          }
        }
    }
}

關(guān)于如何搭建微信小程序活動(dòng)管理系統(tǒng)就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI