最近几年,卷轴任务电商运营模式非常受欢迎,李铁牛在此文中对改任务模式做一个深度的拆解分析。
卷轴模式系统的由来是什么?卷轴模式系统开发欢迎和李铁牛程序员交流:15889726201
它基于领取初始名叫卷轴的任务开始,随着卷轴任务时间周期到期,就可以获得当前的任务奖励。同时参加这个任务的模式可以是免费领取,这个玩法被命名为卷轴任务。这里我用一句话来总结什么是卷轴模式系统,一种基于时间周期任务模块结合商城系统运营的平台。
关于卷轴模式任务的的名称定义
卷轴任务在最开始的时候,被命名为某某卷轴,例如1号卷轴,2号卷轴直到N号卷轴。后来的产品经理在电商运营平台里命名各有变化,通过设置不同的任务名称来定义不同的等级。例如在当前流行市面上知名的上工甄选平台里被命名为1号到8号的健康包任务,在惠利行电商平台里,卷轴任务被命名为1级到六级任务包。
卷轴任务的关键性字段包含
任务名称,积分基数,产出数量,兑换周期,持有数量,减产时间,赠送数量等参数组成。
以下是卷轴任务执行的核心源码
//判断是否兑换体验包
if($taskInfo->level == 0){
//查询体验包个数
$tyNum = sys_config(‘ty_num’);
$count = $this->count([‘uid’=>$uid,’level’=>0]);
if($tyNum <= $count){
throw new Exception(‘体验包最多兑换’.$tyNum.’次’);
}
$ccount = $this->count([‘uid’=>$uid,’level’=>0,’status’=>1]);
if($ccount)throw new Exception(‘超出持有上限’);
}
//积分是否足够
if($userInfo->fudou < bcmul($taskInfo[‘dh_num’],$num))throw new Exception(500056);
if($userInfo->gxz < bcmul($taskInfo[‘ylz’],$num))throw new Exception(‘燃料值不足’);
//判断持有是否达到上限
//获取当前已有的任务包 //type == 1 兑换 type == 2 赠送的
$count = $this->dao->getCount([‘uid’=>$uid,’task_id’=>$task_id,’status’=>1,’type’=>1,’sx’=>0]);
$count = bcadd($count,$num);
if($count > $taskInfo[‘limit’])throw new Exception(500058);
//兑换 1。扣除余额,2。存入数据,3。新增积分记录表
return $this->transaction(function()use($num,$userInfo,$taskInfo,$userservices){
//扣除积分
$res1 = $userservices->bcDec($userInfo[‘uid’],’fudou’,bcmul($taskInfo[‘dh_num’],$num),’uid’,5);
$userTask = app()->make(UserTaskServices::class);
//判断是不是体验包
if($taskInfo[‘level’] == 0){
$res5 = true;
$res6 = true;
}else{
$res5 = $userservices->bcDec($userInfo[‘uid’],’gxz’,bcmul($taskInfo[‘ylz’],$num),’uid’,5);
//加记录
$profferServices = app()->make(ProfferServices::class);
$res6 = $profferServices->addNotes($userInfo[‘uid’],7,bcmul($taskInfo[‘ylz’],$num),2);
}
$time = $taskInfo[‘yx_time’];
$lc = bcsub($taskInfo[‘output_num’],$taskInfo[‘dh_num’],2);
//判断用户第一次兑换包的时间
$ftDay = $this->getTaskTime($taskInfo[‘id’],$userInfo[‘uid’]);
$day = bcadd($taskInfo[‘day’],$ftDay);
for ($i = 1; $i <= $num; $i++) {
$res3 = $userTask->save([
‘uid’ => $userInfo[‘uid’],
‘task_id’ => $taskInfo[‘id’],
‘output_num’ => $taskInfo[‘output_num’],
‘end_time’ => strtotime(“+” . $time . ” day”),
‘day_end’ => strtotime(“+” . $day . ” day”),
‘day_num’ => bcdiv($taskInfo[‘output_num’], $day, 5),
‘day_lc’ => bcdiv($lc, $day, 5),
‘day’ => $day,
‘level’ => $taskInfo[‘level’],
‘dh_num’ => $taskInfo[‘dh_num’],
‘s_num’ => $taskInfo[‘output_num’],
‘lc’ => $lc,
‘hy’ => $taskInfo[‘activity’],
‘add_time’ => date(‘Y-m-d H:i:s’)
]);
}