| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- <?php
- /**
- * 商城分红
- */
- namespace jobs;
- use app\controller\v1\Shop;
- use app\model\ShopOrderBonusModel as ShopOrderBonus;
- use app\model\UserModel as User;
- use app\model\UserScoreModel as UserScore;
- use app\model\UserAuthLogModel as AuthLog;
- use think\facade\Db;
- class ShopBonusJob extends BaseJob
- {
- public function shopBonusJob ($userId, $order)
- {
- //生成分红订单
- Db::startTrans();
- try {
- $nowTime = date('Y-m-d H:i:s', time());
- $user = User::where(['id' => $userId])->findOrEmpty();
- if ($user->vip || $user->level) {
- $unlockTime = $nowTime;
- } else {
- $date = date_create($nowTime);
- date_add($date, date_interval_create_from_date_string("3 days"));
- $unlockTime = date_format($date, 'Y-m-d H:i:s');
- }
- $parent_user = User::where(['id' => $user->pid])->findOrEmpty();
- $indirect = User::where('id', $parent_user->pid)->findOrEmpty();
- $user_path_arr = explode(',', $user->path);
- array_pop($user_path_arr);
- array_pop($user_path_arr);
- $user_path_arr = array_reverse($user_path_arr);
- foreach ($order as $k => $v) {
- $bonus_setting = json_decode($v['rebate_tpl'], true);
- if (empty($bonus_setting)) {
- break;
- }
- $rebate_score = $v['total_rebate_score'];
- $bonus = ShopOrderBonus::create(
- ['uid' => $userId, 'pid' => $user->pid, 'path' => $user->path, 'order_id' => $v['order_id'], 'score' => $v['total_rebate_score'], 'bs' => 1, 'target_uid' => $userId, 'created_time' => $nowTime, 'unlock_time' => $unlockTime, 'estimate_unlock_time' => $unlockTime]
- );
- if ($parent_user->id) {
- $parent_fh = $v['total_rebate_score'] * ($bonus_setting['zt'] / 100); //返直属:20%
- ShopOrderBonus::create(
- ['uid' => $parent_user->id, 'pid' => $parent_user->pid, 'path' => $parent_user->path, 'order_id' => $v['order_id'], 'score' => $parent_fh, 'bs' => 2, 'weig_id' => $bonus->id, 'level' => 1, 'target_uid' => $userId, 'created_time' => $nowTime, 'unlock_time' => $unlockTime, 'estimate_unlock_time' => $unlockTime]
- );
- }
- if ($indirect->id) { //返间属:10%
- $indirect_fh = ($v['total_rebate_score']) * ($bonus_setting['js'] / 100);
- if ($indirect->vip) { //间属如果是vip,再返5%
- $indirect_fh += ($v['total_rebate_score']) * ($bonus_setting['td'] / 100);
- $rebate_score -= $rebate_score * ($bonus_setting['td'] / 100);
- //todo::5%内的5%
- $indirect_fh_pj = ($v['total_rebate_score']) * ($bonus_setting['td'] / 100);
- ShopOrderBonus::where(['id' => $bonus->id])->update(['score' => $rebate_score]);
- }
- $indirect_bonus = ShopOrderBonus::create(
- ['uid' => $indirect->id, 'pid' => $indirect->pid, 'path' => $indirect->path, 'order_id' => $v['order_id'], 'score' => $indirect_fh, 'bs' => 2, 'weig_id' => $bonus->id, 'level' => 2, 'target_uid' => $userId, 'created_time' => $nowTime, 'unlock_time' => $unlockTime, 'estimate_unlock_time' => $unlockTime]
- );
- }
- $level = 2;
- $pj = [];
- if ($indirect->vip) {
- foreach ($user_path_arr as $ks => $vs) {
- $puser = User::where(['id' => $vs])->findOrEmpty();
- if (!$puser['vip']) { //如上级不为金卡会员,返利截止
- break;
- } else if ($puser['vip']) {
- $level++;
- // $indirect_fh *= 0.05; //享由间属下级收益的5%
- // $rebate_score -= $indirect_fh;
- $indirect_fh_pj *= ($bonus_setting['td'] / 100);//享由间属下级5%的百分之5
- if ($level == 3) {
- ShopOrderBonus::where(['id' => $indirect_bonus->id, 'uid' => $indirect->id])->dec('score', $indirect_fh_pj)->update();
- }
- if ($indirect_fh_pj >= 0.0001) {
- // ShopOrderBonus::where(['id' => $bonus->id])->update(['score' => $rebate_score]);
- // ShopOrderBonus::create(
- // ['uid' => $puser->id, 'pid' => $puser->pid, 'path' => $puser->path, 'order_id' => $v['order_id'], 'score' => $indirect_fh, 'bs' => 2, 'weig_id' => $bonus->id, 'level' => $level, 'target_uid' => $userId, 'created_time' => $nowTime, 'unlock_time' => $unlockTime, 'estimate_unlock_time' => $unlockTime]
- // );
- $pj[] = ['uid' => $puser->id, 'pid' => $puser->pid, 'path' => $puser->path, 'order_id' => $v['order_id'], 'score' => $indirect_fh_pj, 'bs' => 2, 'weig_id' => $bonus->id, 'level' => $level, 'target_uid' => $userId, 'created_time' => $nowTime, 'unlock_time' => $unlockTime, 'estimate_unlock_time' => $unlockTime];
- }
- }
- }
- }
- if ($pj) {
- foreach ($pj as $kp => &$vp) {
- if ($kp + 1 < count($pj)) {
- $vp['score'] -= $pj[$kp + 1]['score'];
- }
- }
- (new ShopOrderBonus())->insertAll($pj);
- }
- $user = User::where(['id' => $userId])->findOrEmpty();
- User::where(['id' => $userId])->inc('score', $rebate_score)->update();
- UserScore::change(['before_score' => $user->score, 'score' => $rebate_score, 'type' => 2, 'uid' => $userId, 'state' => 1]);
- }
- Db::commit();
- return true;
- } catch (\Exception $e) {
- Db::rollback();
- echo $e->getMessage() . $e->getLine();
- return false;
- }
- }
- public function ShopBonusInviteQuickenJob ($userId)
- {
- //从用户下单日开始统计,邀新1位亲友完成实名认证缩短1天→邀新2位亲友完成实名认证缩短2天→邀新10位亲友完成实名认证立即领取(邀新数据不累积)
- Db::startTrans();
- try {
- $shopOrderBonus = new ShopOrderBonus();
- $nowTime = date('Y-m-d H:i:s', time());
- $data = $shopOrderBonus->where(['uid' => $userId, 'weig_id' => 0, 'bs' => 1, 'receive' => 0])->field('id,created_time,estimate_unlock_time,unlock_time,quicken_task')->where('unlock_time', '>', $nowTime)->select()->toArray();
- $weig_bonus = [];
- if (empty($data)) {
- return true;
- }
- foreach ($data as $k => &$v) {
- $inviteSum = AuthLog::where(['pid' => $userId])->where('auth_time', '>=', strtotime($v['created_time']))->count();
- $v['quicken_task'] = $inviteSum;
- if ($inviteSum >= 10) {
- $v['unlock_time'] = $nowTime;
- } else if ($inviteSum >= 2) {
- $v['unlock_time'] = dateDay($v['estimate_unlock_time'], '-2');
- } else if ($inviteSum >= 1) {
- $v['unlock_time'] = dateDay($v['estimate_unlock_time'], '-1');
- }
- $weig_bonus_arr = ShopOrderBonus::where(['weig_id' => $v['id'], 'bs' => 2])->field('id,unlock_time')->select()->toArray();
- foreach ($weig_bonus_arr as $wk => &$wv) {
- $wv['unlock_time'] = $v['unlock_time'];
- $weig_bonus[] = $wv;
- }
- }
- $shopOrderBonus->saveAll($data);
- $shopOrderBonus->saveAll($weig_bonus);
- Db::commit();
- return true;
- } catch (\Exception $e) {
- Db::rollback();
- return false;
- }
- }
- }
|