| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632 |
- <?php
- /**
- * 红包订单
- */
- namespace jobs;
- use app\common\model\CouponAreaModel;
- use app\common\model\CouponPlanLogModel;
- use app\common\model\CouponPlanModel;
- use app\common\model\UserModel;
- use app\controller\v1\Shop;
- use app\model\ShopOrderBonusModel as ShopOrderBonus;
- use app\model\UserModel as User;
- use app\model\UserScoreModel as UserScore;
- use think\facade\Db;
- class CouponPlanJob extends BaseJob
- {
- //area_id 区id $last_planid 这个区 这个轮 最后一个期的plan_id type = 1代表同一期,type = 2,代表爆仓之后开启新的一轮
- public function couponAddNewPlan ($area_id, $last_planid, $type){
- sr_log('$area_id:'.$area_id.',$last_planid:'.$last_planid.',type:'.$type);
- // return true;
- $m_plan = new CouponPlanModel();
- $m_area = new CouponAreaModel();
- $mplanlog = new CouponPlanLogModel();
- $muser = new UserModel();
- Db::startTrans();
- try {
- $plan_info = $m_plan->where('id', $last_planid)->find();
- if (!$plan_info){
- sr_throw('错误');
- }
- $is_fl = false;
- if (in_array($plan_info['area_id'], [17, 18])){
- $is_fl = true;
- }
- if ($type == 1) {
- // 上一期计划状态改为 待发放
- $m_plan->where('id', $last_planid)->save(['state' => 1]);
- // 当期所有订单改为待结算
- $mplanlog->where('plan_id', $last_planid)->save(['state' => 1]);
- }
- if ($type == 2) {
- // 爆仓这一期全部返给用户
- $row = $m_plan->where('id', $last_planid)->find();
- $list = $mplanlog->where('plan_id', $last_planid)->where('state', 0)->select()->toArray();
- foreach ($list as $key=>$val){
- $user_de = $val['buy_num'];
- if ($is_fl){
- edit_user_scoreaway(4, $val['uid'], $user_de, $last_planid);
- }else{
- edit_user_score(4, $val['uid'], $user_de, $last_planid);
- }
- // 修改日志状态
- $mplanlog->where('id', $val['id'])->save(['state'=>5]);
- }
- // 上一期找到 百分之七十返给用户
- $last_plan = $m_plan->where('area_id', $area_id)->where('lun_num', $row['lun_num'])->where('qi_num', $row['qi_num']-1)->find();
- $has_last = false;
- if ($last_plan){
- $last_plan->save(['state'=>4]);
- $has_last = true;
- // 百分之七十返给用户
- $list = $mplanlog->where('plan_id', $last_plan['id'])->where('state', 1)->select()->toArray();
- foreach ($list as $key=>$val){
- $user_de = number_format($val['buy_num']*0.7, 0, '.', '');
- if ($is_fl){
- edit_user_scoreaway(5, $val['uid'], $user_de, $last_plan['id']);
- }else{
- edit_user_score(3, $val['uid'], $user_de, $last_plan['id']);
- }
- // 修改日志状态
- $mplanlog->where('id', $val['id'])->save(['state'=>3]);
- $userlock_de = number_format($val['buy_num']*0.3, 0, '.', '');
- // $muser->where('id', $val['uid'])->inc('lock_score', $userlock_de)->update();
- edit_user_lock_score(1, $val['uid'], $userlock_de);
- }
- }
- // 上上期找到 百分之七十返给用户
- $sencond_plan = $m_plan->where('area_id', $row['area_id'])->where('lun_num', $row['lun_num'])->where('qi_num', $row['qi_num']-2)->find();
- $has_second = false;
- if ($sencond_plan){
- $sencond_plan->save(['state'=>4]);
- $has_second = true;
- $list = $mplanlog->where('plan_id', $sencond_plan['id'])->where('state', 1)->select()->toArray();
- foreach ($list as $key=>$val){
- $user_de = number_format($val['buy_num']*0.7, 0, '.', '');
- if ($is_fl){
- edit_user_scoreaway(5, $val['uid'], $user_de, $sencond_plan['id']);
- }else{
- edit_user_score(3, $val['uid'], $user_de, $sencond_plan['id']);
- }
- // 修改日志状态
- $mplanlog->where('id', $val['id'])->save(['state'=>3]);
- $userlock_de = number_format($val['buy_num']*0.3, 0, '.', '');
- // $muser->where('id', $val['uid'])->inc('lock_score', $userlock_de)->update();
- edit_user_lock_score(1, $val['uid'], $userlock_de);
- }
- }
- // 激励奖
- // $total = $m_plan->where('lun_num', $row['lun_num'])->where('area_id', $row['area_id'])->where('state', 'in', [1,2])->sum('target_num');
- //
- // $jili_total = ($total*env('coupon.COUPON_JILI_SCALE', 0)/100);
- //// sr_log('总共分'.$jili_total);
- // $user_list = $mplanlog->where('plan_id', $last_planid)->field('uid')->group('uid')->select();
- //// sr_log('分用户'. json_encode($user_list));
- // $arr = array();
- // if (count($user_list) > 0 && $jili_total > 0){
- // foreach ($user_list as $key=>$val){
- // // 当前这个人买的份额
- // $user_buysum = $mplanlog->where('plan_id', $last_planid)->where('uid', $val['uid'])->sum('buy_num');
- // $money = number_format($user_buysum/$row['cur_num']*$jili_total, 4, '.', '');
- // edit_user_score(7, $val['uid'], $money, $last_planid);
- //// sr_log($val['uid'].'分积分:'.$money);
- //// $val['money'] = $money;
- //// $val['buy_money'] = $user_buysum;
- //// array_push($arr, $val);
- // }
- // }
- }
- // 添加新计划
- $areainfo = $m_area->where('id', $area_id)->find();
- $plan = $m_plan->where('id', $last_planid)->find();
- $cur_num = intval(($areainfo['add_scale'] / 100 + 1) * $plan['target_num']);
- // 获取10的整数
- $cur_num = $cur_num - $cur_num % 10;
- // 如果是爆仓开启新一轮 初始金额是 设置的初始金额
- if ($type==2){
- $cur_num = $areainfo['begin_num'];
- // 获取10的整数
- $cur_num = $cur_num - $cur_num % 10;
- }
- $most_arr = ['13'=>500,'14'=>500,'15'=>100,'16'=>100,'17'=>500,'18'=>500];
- $m_plan->insert([
- 'area_id' => $area_id,
- 'target_num' => $cur_num,
- // 'create_time' => sr_getcurtime(time()-864000),
- 'create_time' => sr_getcurtime(time()),
- 'buy_least' => 10,
- // 'buy_most' => isset($most_arr[$area_id])?$most_arr[$area_id]:100000,
- 'buy_most' => isset($most_arr[$area_id])?$most_arr[$area_id]:500,
- 'lun_num' => ($type == 2 ? $plan['lun_num'] + 1 : $plan['lun_num']),
- 'qi_num' => ($type == 2 ? 1 : $plan['qi_num'] + 1),
- 'less_num'=>$cur_num
- ]);
- Db::commit();
- } catch (\Exception $e) {
- Db::rollback();
- // sr_log($e->getMessage());
- return false;
- }
- return true;
- }
- // 发放
- public function couponPlanFafang($plan_id){
- Db::startTrans();
- try {
- $modellog = new CouponPlanLogModel();
- $modelplan = new CouponPlanModel();
- // $modelarea = new CouponAreaModel();
- $muser = new UserModel();
- $plan_info = $modelplan->where('id', $plan_id)->find();
- // $area_info = $modelarea->where('id', $plan_info['area_id']);
- $is_fl = false;
- if (in_array($plan_info['area_id'], [17, 18])){
- $is_fl = true;
- }
- if ($plan_info['state'] != 1){
- return true;
- }
- $modelplan->where('id', $plan_id)->save(['state'=>2]);
- $list = $modellog->where('plan_id', $plan_id)->where('state', 1)->select()->toArray();
- $scale = env('COUPON.FAFANG_SCALE', '0');
- foreach ($list as $key=>$val){
- // edit_user_score(, number_format());
- $user_de = number_format($val['buy_num']*(1+$scale/100), 2, '.', '');
- if ($is_fl){
- // 福利区 发放到余额 然后扣除锁定积分
- $fee_money = $user_de-$val['buy_num'];
- // sr_log('$fee_money:'.$fee_money);
- // sr_log('buy_num:'.$val['buy_num']);
- // sr_log('uid'.$val['uid']);
- // edit_user_scoreaway(6, $val['uid'], $val['buy_num'], $plan_id);
- // edit_user_scoreaway(3, $val['uid'], $fee_money, $plan_id);
- edit_user_scoreaway(6, $val['uid'], ($val['buy_num']-$fee_money), $plan_id);
- edit_user_money(12, $val['uid'], $fee_money, $plan_id);
- }else{
- edit_user_money(15, $val['uid'], $user_de, $plan_id);
- // edit_user_score(2, $val['uid'], $user_de, $plan_id);
- }
- // 修改日志状态
- $modellog->where('id', $val['id'])->save(['state'=>2]);
- // 平级收益 后面挪到了 动态收益里面去了
- // $userinfo = $muser->where('id', $val['uid'])->field('score, id,pid,is_auth,level')->find();
- // $piduserinfo = $muser->where('id', $userinfo['pid'])->field('score, id,pid,is_auth,level')->find();
- // // 平级收益
- // if ($piduserinfo && $userinfo['level'] > 0){
- // if ($userinfo['level'] == $piduserinfo['level']){
- // $money = $user_de - $val['buy_num'];
- // $pj_score = number_format($money * env('coupon.COUPON_PINGJI_SCALE', 0)/100, 4, '.', '');
- // if ($pj_score > 0){
- // edit_user_score(10, $piduserinfo['id'],$pj_score);
- // }
- // }
- // }
- }
- // // 末尾奖
- // $mowei_total = ($plan_info['target_num']*env('coupon.COUPON_MOWEI_SCALE', 0)/100);
- // $mowei_list = $modellog->where('plan_id', $plan_id)->field('uid,id')->order('id desc')->group('uid')->select();
- // $every_moweimoney = 0;
- // if (count($mowei_list) > 30){
- // $every_moweimoney = number_format($mowei_total/30, 4, '.', '');
- // }else{
- // $every_moweimoney = number_format($mowei_total/count($mowei_list), 4, '.', '');
- // }
- //
- // if (count($mowei_list)>0 && $mowei_total > 0){
- // $arr = [];
- // $count = count($mowei_list);
- // for ($i=0;$i<30;$i++){
- // if ($count > $i){
- // edit_user_score(8, $mowei_list[$i]['uid'], $every_moweimoney, $plan_id);
- // }
- // }
- // }
- Db::commit();
- } catch (\Exception $e) {
- Db::rollback();
- sr_log($e->getMessage());
- return false;
- }
- return true;
- }
- // 动态奖励 用户的path|购买的金额|用户的uid
- public function couponPlanDynamic($path, $money, $uid){
- Db::startTrans();
- try {
- // $uid = '7523508';
- // $output->writeln('time_start:'.sr_getcurtime(time()));
- // $path = '7493267,7494922,7494925';
- // $path = Db::name('user')->where('id', $uid)->value('path');
- if (empty($path)){
- return 22;
- }
- // 众筹买了 2000
- // $total = 2000;
- $arr = explode(',', $path);
- $settings = Db::name('level_setting')->order('id asc')->field('level,dynamic_scale')->select()->toArray();
- $setting_arr = array();
- foreach ($settings as $key=>$val){
- $setting_arr[$val['level']] = $val['dynamic_scale'];
- // $has_getbobi[$key] = false;
- }
- // $output->writeln('setting_arr:'.json_encode($setting_arr));
- $users = Db::name('user')->where('id','in' ,$arr)->field('id,level')->order('id desc')->select()->toArray();
- // $output->writeln('users:'.json_encode($users));
- // $output->writeln('users_count:'.count($users));
- // 分钱的数组 ['uid'=>'money']
- $get_money_arr = array();
- $cur_bobi = 0;
- $cur_maxlevel = 0;
- foreach ($users as $key=>$val){
- if ($key == 0){
- if ($val['level']>0){
- $bobi = $setting_arr[$val['level']];
- $get_money_arr[$val['id']] = $bobi;
- $cur_maxlevel = $val['level'];
- $cur_bobi += $bobi;
- }
- }else{
- if ($val['level'] > $users[$key-1]['level']){
- if ($val['level'] > $cur_maxlevel){
- $bobi = $setting_arr[$val['level']] - $cur_bobi;
- if ($bobi > 0){
- $get_money_arr[$val['id']] = $bobi;
- $cur_bobi += $bobi;
- }
- }
- } else{
- }
- }
- }
- // $output->writeln('get_money:'.json_encode($get_money_arr));
- // 计算前面相同等级收益
- foreach ($users as $key=>$val){
- if ($key != 0){
- if ($val['level'] == $users[$key-1]['level']){
- if (isset($get_money_arr[$users[$key-1]['id']])){
- if ($get_money_arr[$users[$key-1]['id']] > 0){
- $last_bobi = $get_money_arr[$users[$key-1]['id']];
- $get_money_arr[$val['id']] = $last_bobi * 0.1;
- }
- }
- }
- }
- }
- $de_arr = array();
- foreach ($get_money_arr as $key=>$val){
- $get_money_arr[$key] = number_format($money*$val/100, 4, '.', '');
- }
- // $output->writeln('level_arr:'.json_encode($get_money_arr));
- foreach ($get_money_arr as $key=>$val){
- edit_user_score(11, $key, $val, 0, $uid);
- }
- if (strpos($path, '7493433') !== false){
- $de_money = number_format($money*0.5/100, 4, '.', '');
- edit_user_score(11, 7493433, $de_money, 0, $uid);
- }
- if (strpos($path, '7493436') !== false){
- $de_money = number_format($money*0.5/100, 4, '.', '');
- edit_user_score(11, 7493436, $de_money, 0, $uid);
- }
- if (strpos($path, '7605171') !== false){
- $de_money = number_format($money*0.3/100, 4, '.', '');
- edit_user_score(11, 7605171, $de_money, 0, $uid);
- }
- Db::commit();
- }catch (\Exception $e){
- Db::rollback();
- return false;
- }
- return true;
- // 老的动态收益
- // Db::startTrans();
- // try {
- // // 众筹买了 30000
- // $total = $money;
- // $arr = explode(',', $path);
- // $users = Db::name('user')->where('id','in' ,$arr)->field('id,level')->order('id desc')->select()->toArray();
- // $levesCount = array(0,0,0,0,0,0,0);
- // $i = 0;
- // foreach ($users as $key=>$val){
- //
- // if ($val['level'] > 0){
- // $level_setting = Db::name('level_setting')->where('level', $val['level'])->find();
- //// return $level_setting;
- //
- // // 如果没有拿多少
- // $level_total = $level_setting['dynamic_scale']*$total/100;
- //
- // if ($i > 0){
- // // 当前这个人是平级
- // if ($val['level'] == $users[$i-1]['level']){
- //
- // $money = number_format($users[$i-1]['money'] * 0.1, 4, '.', '');
- // $users[$i]['money'] = $money;
- // edit_user_score(11, $val['id'], $money, 0, $uid);
- //
- // }elseif ($val['level'] > $users[$i-1]['level']){
- //
- // // 当前这个人是升级
- // if ($levesCount[$val['level']] > 0){
- //
- // // 找到当前这个人的收益
- // $cur = null;
- // $has = true;
- // foreach ($users as $k1 => $v1){
- // if (isset($v1['money'])){
- // if ($v1['level'] <= $val['level']) {
- // if ($v1['level'] == $val['level']){
- // $cur = $v1;
- // }
- // }else{
- // $has = false;
- // }
- // }
- // }
- //
- // // 如果之前有当前星的人数
- // if ($has){
- // $money = number_format($cur['money'] * 0.1, 4, '.', '');
- // $users[$i]['money'] = $money;
- // edit_user_score(11, $val['id'], $money, 0, $uid);
- // }else{
- //// if (isset($cur['money'])){
- //// $money = number_format($cur['money'] * 0.1, 4, '.', '');
- //// $users[$i]['money'] = $money;
- //// edit_user_score(11, $val['id'], $money);
- //// }
- // $users[$i]['money'] = 0;
- // edit_user_score(11, $val['id'], 0, 0, $uid);
- // }
- // }else{
- // if ($users[$i-1]['level'] > 0){
- //
- // $cur = null;
- // $has = true;
- // foreach ($users as $k1 => $v1){
- // if (isset($v1['money'])){
- // if ($cur){
- // if ($cur['level'] < $v1['level']){
- // $cur = $v1;
- // }
- // }else{
- // $cur = $v1;
- // }
- // }
- // }
- //
- // // 下一级大于0级
- //
- // if ($cur['level'] > $users[$i-1]['level']){
- // $last_level_stting = Db::name('level_setting')->where('level', $cur['level'])->find();
- // $money = number_format($total * ($level_setting['dynamic_scale']-$last_level_stting['dynamic_scale'])/100, 4, '.', '');
- // $users[$i]['money'] = $money;
- // edit_user_score(11, $val['id'], $money, 0, $uid);
- // }else{
- // $last_level_stting = Db::name('level_setting')->where('level', $users[$i-1]['level'])->find();
- // $money = number_format($total * ($level_setting['dynamic_scale']-$last_level_stting['dynamic_scale'])/100, 4, '.', '');
- // $users[$i]['money'] = $money;
- // edit_user_score(11, $val['id'], $money, 0, $uid);
- // }
- //
- // }else{
- //
- // $cur = null;
- // $has = true;
- //
- // foreach ($users as $k1 => $v1){
- // if (isset($v1['money'])){
- // if ($v1['money'] > 0){
- // if ($v1['level'] <= $val['level']){
- // if ($cur){
- // if ($v1['level'] >= $cur['level']){
- // $cur = $v1;
- // }
- // }else{
- // $cur = $v1;
- // }
- // }else{
- // $has = false;
- // }
- // }
- // }
- // }
- //
- // if (isset($cur['money'])){
- // if ($cur['level']==$val['level']){
- // // 平级
- // $money = number_format($cur['money']*0.1,4, '.', '');
- // $users[$i]['money'] = $money;
- // edit_user_score(11, $val['id'], $money, 0, $uid);
- // }else{
- //
- // if ($has){
- //
- // // 小一级
- // $last_level_stting = Db::name('level_setting')->where('level', $cur['level'])->find();
- // $money = number_format($total * ($level_setting['dynamic_scale']-$last_level_stting['dynamic_scale'])/100, 4, '.', '');
- // $users[$i]['money'] = $money;
- // edit_user_score(11, $val['id'], $money, 0, $uid);
- // } else{
- //
- //// $money = number_format($cur['money'] * 0.1, 4, '.', '');
- // $users[$i]['money'] = 0;
- // edit_user_score(11, $val['id'], $money, 0, $uid);
- // }
- // }
- // }else{
- // if ($val['level'] > 0){
- //
- // $money = $users[$i]['money'] = $level_total;
- // edit_user_score(11, $val['id'], $money, 0, $uid);
- // }
- //// if ($val['id'] == 7493351){
- //// $users[$i]['money'] = 0;
- //// }
- //// $users[$i]['money'] = 0;
- //// edit_user_score(11, $val['id'], $money);
- // }
- //
- // }
- // }
- // }elseif ($val['level'] < $users[$i-1]['level']){
- //
- // if ($levesCount[$val['level']]>0){
- //
- // // 找到当前这个等级最后一个人的收益
- // $cur = $users[1];
- // $has = true;
- // foreach ($users as $k1 => $v1){
- // if (isset($v1['money'])){
- // if ($v1['level'] <= $val['level']){
- // if ($v1['level'] == $val['level']){
- // $cur = $v1;
- // }
- // }else{
- // $has=false;
- // }
- //
- // }
- // }
- //
- //
- // if ($has){
- // $money = number_format($cur['money'] * 0.1, 4, '.', '');
- // $users[$i]['money'] = $money;
- // edit_user_score(11, $val['id'], $money, 0, $uid);
- // }else{
- //
- // if ($val['level'] > 0){
- // $money = number_format($cur['money'] * 0.1, 4, '.', '');
- // $users[$i]['money'] = $money;
- // edit_user_score(11, $val['id'], $money, 0, $uid);
- // }
- // }
- // }else{
- // $has = true;
- // foreach ($users as $k1 => $v1){
- // if (isset($v1['money'])){
- // if ($v1['level'] >= $val['level']){
- // $cur = $v1;
- // }else{
- // $has=false;
- // }
- //
- // }
- // }
- //
- // if ($has){
- // // 当前这个人是降级
- // $money = number_format($level_total * pow(0.1, $levesCount[$val['level']]), 4, '.', '');
- // $users[$i]['money'] = $money;
- // edit_user_score(11, $val['id'], $money, 0, $uid);
- // }else{
- // if ($val['level'] > 0){
- // if (isset($cur['money'])){
- // $money = $cur['money'] * 0.1;
- // $users[$i]['money'] = $money;
- // edit_user_score(11, $val['id'], $money, 0, $uid);
- // }
- // }
- //
- // }
- // }
- //
- // }
- //
- // }else{
- //
- // // 第一个
- // $users[$i]['money'] = $level_total;
- // edit_user_score(11, $val['id'], $level_total, 0, $uid);
- // }
- // // 这个等级有多少人
- // ++$levesCount[$val['level']];
- // }else{
- // $users[$i]['money'] = 0;
- // }
- // ++$i;
- //
- // }
- //
- // Db::commit();
- // } catch (\Exception $e) {
- // Db::rollback();
- //
- // return false;
- // }
- //
- // return true;
- }
- }
|