You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
781 lines
30 KiB
781 lines
30 KiB
<?php |
|
/** |
|
* Created by PhpStorm. |
|
* User: Administrator |
|
* Date: 2017/8/14 |
|
* Time: 17:46 |
|
*/ |
|
|
|
namespace app\behaviors; |
|
|
|
use app\models\MchPlugin; |
|
use app\models\MchSetting; |
|
use app\utils\PinterOrder; |
|
use app\models\Goods; |
|
use app\models\Level; |
|
use app\models\Mch; |
|
use app\models\MchAccountLog; |
|
use app\models\MiaoshaGoods; |
|
use app\models\MsGoods; |
|
use app\models\MsOrder; |
|
use app\models\MsOrderRefund; |
|
use app\models\Order; |
|
use app\models\OrderDetail; |
|
use app\models\OrderRefund; |
|
use app\models\OrderShare; |
|
use app\models\PtOrder; |
|
use app\models\PtOrderRefund; |
|
use app\models\Register; |
|
use app\models\Setting; |
|
use app\models\Store; |
|
use app\models\User; |
|
use app\models\UserShareMoney; |
|
use yii\db\Query; |
|
use yii\web\Controller; |
|
|
|
/** |
|
* 检查订单过期未付款、超时自动确认收货、分销佣金发放等 |
|
* @property \app\models\Store $store; |
|
* @property \app\models\Setting $share_setting; |
|
* |
|
*/ |
|
class OrderBehavior extends BaseBehavior |
|
{ |
|
protected $only_routes = [ |
|
'mch/order/*', |
|
'mch/share/*', |
|
'mch/miaosha/*', |
|
'api/order/*', |
|
'api/share/*', |
|
'api/miaosha/*', |
|
'mch/store/index', |
|
'mch/user/*', |
|
'api/user/*' |
|
]; |
|
|
|
public $store_id; |
|
public $store; |
|
public $share_setting; |
|
|
|
public function beforeAction($e) |
|
{ |
|
\Yii::warning('----ORDER BEHAVIOR----'); |
|
$order_behavior_running = 'order_behavior_running'; |
|
if (\Yii::$app->cache->get($order_behavior_running)) { |
|
return true; |
|
} |
|
\Yii::$app->cache->set($order_behavior_running, true, 60); |
|
|
|
$this->store_id = isset(\Yii::$app->controller->store) ? \Yii::$app->controller->store->id : 0; |
|
if (!$this->store_id) { |
|
\Yii::$app->cache->delete($order_behavior_running); |
|
return true; |
|
} |
|
$this->store = Store::findOne($this->store_id); |
|
$this->share_setting = Setting::findOne(['store_id' => $this->store_id]); |
|
|
|
$time = time(); |
|
if ($this->store->over_day > 0) { |
|
$over_day = $time - ($this->store->over_day * 3600); |
|
// 用户积分恢复 |
|
$npOrder = Order::find()->where([ |
|
'is_pay' => 0, 'store_id' => $this->store_id, 'is_cancel' => 0, 'is_delete' => 0, |
|
])->andWhere(['<=', 'addtime', $over_day])->andWhere(['!=', 'pay_type', 2])->all(); |
|
foreach ($npOrder as $key => $value) { |
|
$integral = json_decode($value['integral'])->forehead_integral; |
|
$user = User::findOne(['id' => $value['user_id']]); |
|
$user->integral += $integral ? $integral : 0; |
|
if ($integral) { |
|
$register = new Register(); |
|
$register->store_id = $this->store->id; |
|
$register->user_id = $user->id; |
|
$register->register_time = '..'; |
|
$register->addtime = time(); |
|
$register->continuation = 0; |
|
$register->type = 6; |
|
$register->integral = $integral; |
|
$register->order_id = $value['id']; |
|
$register->save(); |
|
} |
|
$user->save(); |
|
//库存恢复 |
|
$order_detail_list = OrderDetail::find()->where(['order_id' => $value['id'], 'is_delete' => 0])->all(); |
|
foreach ($order_detail_list as $order_detail) { |
|
$goods = Goods::findOne($order_detail->goods_id); |
|
$attr_id_list = []; |
|
foreach (json_decode($order_detail->attr) as $item) { |
|
array_push($attr_id_list, $item->attr_id); |
|
} |
|
|
|
$goods->numAdd($attr_id_list, $order_detail->num); |
|
} |
|
//订单超过设置的未支付时间,自动取消 |
|
$value->is_cancel = 1; |
|
$value->save(); |
|
} |
|
// $count_p = Order::updateAll( |
|
// [ |
|
// 'is_cancel' => 1, |
|
// ], |
|
// 'is_pay=0 and is_cancel=0 and addtime<=:addtime and store_id=:store_id', |
|
// [':addtime' => $over_day, ':store_id' => $this->store_id] |
|
// ); |
|
} |
|
$delivery_time = $time - ($this->store->delivery_time * 86400); |
|
$sale_time = $time - ($this->store->after_sale_time * 86400); |
|
//订单超过设置的确认收货时间,自动确认收货 商城 |
|
/* |
|
$count = Order::updateAll([ |
|
'is_confirm' => 1, 'confirm_time' => time()], |
|
'is_delete=0 and is_send=1 and send_time <= :send_time and store_id=:store_id and is_confirm=0', |
|
[':send_time' => $delivery_time, ':store_id' => $this->store_id]); |
|
*/ |
|
$order_confirm = Order::find()->where([ |
|
'is_delete' => 0, 'is_send' => 1, 'store_id' => $this->store_id, 'is_confirm' => 0, |
|
])->andWhere(['<=', 'send_time', $delivery_time])->all(); |
|
|
|
foreach ($order_confirm as $k => $v) { |
|
Order::updateAll(['is_confirm' => 1, 'confirm_time' => time()], ['id' => $v->id]); |
|
$printer_order = new PinterOrder($this->store_id, $v->id, 'confirm', 0); |
|
$res = $printer_order->print_order(); |
|
if ($v->pay_type == 2) { |
|
$v->is_pay = 1; |
|
$v->save(); |
|
} |
|
} |
|
|
|
//订单超过设置的确认收货时间,自动确认收货 秒杀 |
|
$order_confirm = MsOrder::find()->where([ |
|
'is_delete' => 0, 'is_send' => 1, 'store_id' => $this->store_id, 'is_confirm' => 0, |
|
])->andWhere(['<=', 'send_time', $delivery_time])->all(); |
|
|
|
foreach ($order_confirm as $k => $v) { |
|
MsOrder::updateAll(['is_confirm' => 1, 'confirm_time' => time()], ['id' => $v['id']]); |
|
$printer_order = new PinterOrder($this->store_id, $v['id'], 'confirm', 1); |
|
$res = $printer_order->print_order(); |
|
if ($v->pay_type == 2) { |
|
$v->is_pay = 1; |
|
$v->save(); |
|
} |
|
} |
|
|
|
//超过设置的售后时间且没有在售后的订单--商城 |
|
$order_list = Order::find()->alias('o') |
|
->where([ |
|
'and', |
|
['o.is_delete' => 0, 'o.is_send' => 1, 'o.is_confirm' => 1, 'o.store_id' => $this->store_id, 'o.is_sale' => 0], |
|
['<=', 'o.confirm_time', $sale_time], |
|
]) |
|
->leftJoin(OrderRefund::tableName() . ' r', "r.order_id = o.id and r.is_delete = 0") |
|
->select(['o.*'])->groupBy('o.id') |
|
->andWhere([ |
|
'or', |
|
'isnull(r.id)', |
|
['r.type' => 2], |
|
['in', 'r.status', [2, 3]] |
|
]) |
|
->offset(0)->limit(20)->asArray()->all(); |
|
foreach ($order_list as $index => $value) { |
|
Order::updateAll(['is_sale' => 1], ['id' => $value['id']]); |
|
$this->share_money($value['id']); |
|
$this->give_integral($value['id']); |
|
} |
|
|
|
//超过设置的售后时间且没有在售后的订单--秒杀 |
|
$order_list = MsOrder::find()->alias('o') |
|
->where([ |
|
'and', |
|
['o.is_delete' => 0, 'o.is_send' => 1, 'o.is_confirm' => 1, 'o.store_id' => $this->store_id, 'o.is_sale' => 0, 'is_sum' => 1], |
|
['<=', 'o.confirm_time', $sale_time], |
|
]) |
|
->leftJoin(MsOrderRefund::tableName() . ' r', "r.order_id = o.id and r.is_delete = 0") |
|
->select(['o.*'])->groupBy('o.id') |
|
->andWhere([ |
|
'or', |
|
'isnull(r.id)', |
|
['r.type' => 2], |
|
['in', 'r.status', [2, 3]] |
|
]) |
|
->offset(0)->limit(20)->asArray()->all(); |
|
foreach ($order_list as $index => $value) { |
|
MsOrder::updateAll(['is_sale' => 1], ['id' => $value['id']]); |
|
$this->share_money_ms($value['id']); |
|
$this->give_integral_ms($value['id']); |
|
} |
|
|
|
//超过设置的售后时间且没有在售后的订单--拼团 |
|
$order_list = PtOrder::find()->alias('o') |
|
->where([ |
|
'and', |
|
['o.is_delete' => 0, 'o.is_send' => 1, 'o.is_confirm' => 1, 'o.store_id' => $this->store_id, 'o.is_price' => 0], |
|
['<=', 'o.confirm_time', $sale_time], |
|
]) |
|
->leftJoin(PtOrderRefund::tableName() . ' r', "r.order_id = o.id and r.is_delete = 0") |
|
->select(['o.*'])->groupBy('o.id') |
|
->andWhere([ |
|
'or', |
|
'isnull(r.id)', |
|
['r.type' => 2], |
|
['in', 'r.status', [2, 3]] |
|
]) |
|
->offset(0)->limit(20)->asArray()->all(); |
|
foreach ($order_list as $index => $value) { |
|
PtOrder::updateAll(['is_price' => 1], ['id' => $value['id']]); |
|
$this->share_money_1($value['id']); |
|
} |
|
|
|
//入驻商户订单金额转到商户余额,请在判断售后的方法之后调用 |
|
$this->transferToMch($e); |
|
|
|
//查出所有有订单的会员 |
|
$userIds = Order::find()->alias('o')->select(['o.user_id']) |
|
->where(['o.is_delete' => 0, 'o.store_id' => $this->store_id, 'o.is_confirm' => 1, 'o.is_send' => 1]) |
|
->andWhere(['<=', 'o.confirm_time', $sale_time]) |
|
->leftJoin(['r' => OrderRefund::tableName()], 'r.order_id=o.id and r.is_delete = 0') |
|
->andWhere([ |
|
'or', |
|
'isnull(r.id)', |
|
['r.type' => 2], |
|
['in', 'r.status', [2, 3]] |
|
]) |
|
->groupBy('o.user_id'); |
|
|
|
//查如上会员的总消费金额 |
|
$userWithMoney = (new Query)->from(['uids' => $userIds])->select([ |
|
'uids.*', |
|
'order_money' => Order::find() |
|
->where(['store_id' => $this->store_id, 'is_delete' => 0]) |
|
->andWhere('user_id = uids.user_id') |
|
->andWhere(['is_pay' => 1, 'is_confirm' => 1, 'is_send' => 1]) |
|
->andWhere(['<=', 'confirm_time', $sale_time]) |
|
->select(['sum(pay_price)']), |
|
]); |
|
|
|
//查如上会员的当前等级金额 |
|
$userList = User::find() |
|
->alias('u') |
|
->select(['u.*', 'uids.order_money']) |
|
->innerJoin(['uids' => $userWithMoney], 'uids.user_id = u.id') |
|
->andWhere('uids.order_money is not null') |
|
->all(); |
|
|
|
//查会员等级 |
|
$levelList = Level::find() |
|
->where(['store_id' => $this->store_id, 'is_delete' => 0, 'status' => 1]) |
|
->orderBy(['money' => SORT_DESC, 'id' => SORT_DESC]) |
|
->asArray()->all(); |
|
|
|
//调整会员等级 |
|
foreach ($userList as $user) { |
|
foreach ($levelList as $level) { |
|
if ($user->order_money >= $level['money']) { |
|
if ($user->level < $level['level']) { |
|
$user->level = $level['level']; |
|
$user->save(); |
|
} |
|
break; |
|
} |
|
} |
|
} |
|
\Yii::$app->cache->delete($order_behavior_running); |
|
|
|
$this->checkMsNoPayOrderTimeout($e); //处理未在规定时间内付款的秒杀订单 |
|
} |
|
|
|
/** |
|
* @param $parent_id |
|
* @param $money |
|
* @return array |
|
* |
|
*/ |
|
private function money($parent_id, $money) |
|
{ |
|
if ($parent_id == 0) { |
|
return ['code' => 1, 'parent_id' => 0]; |
|
} |
|
$parent = User::findOne(['id' => $parent_id]); |
|
if (!$parent) { |
|
return ['code' => 1, 'parent_id' => 0]; |
|
} |
|
$parent->total_price += $money; |
|
$parent->price += $money; |
|
if ($parent->save()) { |
|
return [ |
|
'code' => 0, |
|
'parent_id' => $parent->parent_id, |
|
]; |
|
} else { |
|
return [ |
|
'code' => 1, |
|
'parent_id' => 0, |
|
]; |
|
} |
|
} |
|
|
|
/** |
|
* @param $parent_id |
|
* @param $percent |
|
* @param $price |
|
* @return array |
|
* 已废弃 |
|
*/ |
|
public static function shareMoney($parent_id, $percent, $price) |
|
{ |
|
if ($parent_id == 0) { |
|
return ['code' => 1, 'parent_id' => 0]; |
|
} |
|
$parent = User::findOne(['id' => $parent_id]); |
|
if (!$parent) { |
|
return ['code' => 1, 'parent_id' => 0]; |
|
} |
|
$parent->total_price += ($price * $percent / 100); |
|
$parent->price += ($price * $percent / 100); |
|
|
|
if ($parent->save()) { |
|
return [ |
|
'code' => 0, |
|
'parent_id' => $parent->parent_id, |
|
]; |
|
} else { |
|
return [ |
|
'code' => 1, |
|
'parent_id' => 0, |
|
]; |
|
} |
|
} |
|
|
|
/** |
|
* @param $id |
|
* 佣金发放 |
|
*/ |
|
private function share_money($id) |
|
{ |
|
$order = Order::findOne($id); |
|
if ($order->mch_id > 0) { |
|
$mchPlugin = MchPlugin::findOne(['mch_id' => $order->mch_id, 'store_id' => $this->store_id]); |
|
if(!$mchPlugin || $mchPlugin->is_share == 0){ |
|
return ; |
|
} |
|
$mchSetting = MchSetting::findOne(['mch_id' => $order->mch_id, 'store_id' => $this->store_id]); |
|
if (!$mchSetting || $mchSetting->is_share == 0) { |
|
return; |
|
} |
|
} |
|
if ($this->share_setting->level == 0) { |
|
return; |
|
} |
|
if ($order->is_price != 0) { |
|
return; |
|
} |
|
//分销商自购返利 |
|
$order->share_price = 0; |
|
if ($order->rebate > 0) { |
|
$user = User::findOne(['id' => $order->user_id]); |
|
$user->total_price += doubleval($order->rebate); |
|
$user->price += doubleval($order->rebate); |
|
$user->save(); |
|
$order->is_price = 1; |
|
$order->share_price += doubleval($order->rebate); |
|
UserShareMoney::set($order->rebate, $user->id, $order->id, 0, 4, $order->store_id, 0); |
|
} |
|
//仅自购 |
|
if ($this->share_setting->level == 4) { |
|
$order->save(); |
|
return; |
|
} |
|
//一级佣金发放 |
|
if ($this->share_setting->level >= 1) { |
|
$user_1 = User::findOne($order->parent_id); |
|
if (!$user_1) { |
|
$order->save(); |
|
return; |
|
} |
|
$user_1->total_price += $order->first_price; |
|
$user_1->price += $order->first_price; |
|
$user_1->save(); |
|
UserShareMoney::set($order->first_price, $user_1->id, $order->id, 0, 1, $this->store_id, 0); |
|
$order->is_price = 1; |
|
$order->share_price += doubleval($order->first_price); |
|
} |
|
//二级佣金发放 |
|
if ($this->share_setting->level >= 2) { |
|
$user_2 = User::findOne($order->parent_id_1); |
|
if (!$user_2) { |
|
if ($user_1->parent_id != 0 && $order->parent_id_1 == 0) { |
|
$res = self::money($user_1->parent_id, $order->second_price); |
|
UserShareMoney::set($order->second_price, $user_1->parent_id, $order->id, 0, 2, $this->store_id, 0); |
|
if ($res['parent_id'] != 0 && $this->share_setting->level == 3) { |
|
$res = self::money($res['parent_id'], $order->third_price); |
|
UserShareMoney::set($order->third_price, $res['parent_id'], $order->id, 0, 3, $this->store_id, 0); |
|
} |
|
} |
|
$order->save(); |
|
return; |
|
} |
|
$user_2->total_price += $order->second_price; |
|
$user_2->price += $order->second_price; |
|
$user_2->save(); |
|
UserShareMoney::set($order->second_price, $user_2->id, $order->id, 0, 2, $this->store_id, 0); |
|
$order->share_price += doubleval($order->second_price); |
|
} |
|
//三级佣金发放 |
|
if ($this->share_setting->level >= 3) { |
|
$user_3 = User::findOne($order->parent_id_2); |
|
if (!$user_3) { |
|
if ($user_2->parent_id != 0 && $order->parent_id_2 == 0) { |
|
self::money($user_2->parent_id, $order->third_price); |
|
UserShareMoney::set($order->third_price, $user_2->parent_id, $order->id, 0, 3, $this->store_id, 0); |
|
} |
|
$order->save(); |
|
return; |
|
} |
|
$user_3->total_price += $order->third_price; |
|
$user_3->price += $order->third_price; |
|
$user_3->save(); |
|
UserShareMoney::set($order->third_price, $user_3->id, $order->id, 0, 3, $this->store_id, 0); |
|
$order->share_price += doubleval($order->third_price); |
|
} |
|
$order->save(); |
|
return; |
|
} |
|
|
|
/** |
|
* 佣金发放 秒杀 |
|
*/ |
|
public function share_money_ms($id) |
|
{ |
|
$order = MsOrder::findOne($id); |
|
if ($this->share_setting->level == 0) { |
|
return false; |
|
} |
|
if ($order->is_price != 0) { |
|
return false; |
|
} |
|
if ($order->rebate > 0) { |
|
$user = User::findOne(['id' => $order->user_id]); |
|
$user->total_price += doubleval($order->rebate); |
|
$user->price += doubleval($order->rebate); |
|
$user->save(); |
|
$order->is_price = 1; |
|
UserShareMoney::set($order->rebate, $user->id, $order->id, 0, 4, $order->store_id, 1); |
|
} |
|
//仅自购 |
|
if ($this->share_setting->level == 4) { |
|
return false; |
|
} |
|
//一级佣金发放 |
|
if ($this->share_setting->level >= 1) { |
|
$user_1 = User::findOne($order->parent_id); |
|
if (!$user_1) { |
|
$order->save(); |
|
return false; |
|
} |
|
$user_1->total_price += doubleval($order->first_price); |
|
$user_1->price += doubleval($order->first_price); |
|
$user_1->save(); |
|
UserShareMoney::set($order->first_price, $user_1->id, $order->id, 0, 1, $this->store_id, 1); |
|
$order->is_price = 1; |
|
$order->save(); |
|
} |
|
//二级佣金发放 |
|
if ($this->share_setting->level >= 2) { |
|
$user_2 = User::findOne($order->parent_id_1); |
|
if (!$user_2) { |
|
return false; |
|
} |
|
$user_2->total_price += doubleval($order->second_price); |
|
$user_2->price += doubleval($order->second_price); |
|
$user_2->save(); |
|
UserShareMoney::set($order->second_price, $user_2->id, $order->id, 0, 2, $this->store_id, 1); |
|
} |
|
//三级佣金发放 |
|
if ($this->share_setting->level >= 3) { |
|
$user_3 = User::findOne($order->parent_id_2); |
|
if (!$user_3) { |
|
return false; |
|
} |
|
$user_3->total_price += doubleval($order->third_price); |
|
$user_3->price += doubleval($order->third_price); |
|
$user_3->save(); |
|
UserShareMoney::set($order->third_price, $user_3->id, $order->id, 0, 3, $this->store_id, 1); |
|
} |
|
return true; |
|
} |
|
|
|
/** |
|
* @param $order_id |
|
* @param int $type |
|
* @return bool |
|
* 佣金发放 拼团 |
|
*/ |
|
public function share_money_1($order_id, $type = 0) |
|
{ |
|
if ($this->share_setting->level == 0) { |
|
return false; |
|
} |
|
$order_share = OrderShare::findOne(['store_id' => $this->store_id, 'type' => $type, 'order_id' => $order_id]); |
|
if ($order_share->rebate > 0) { |
|
$user = User::findOne(['id' => $order_share->user_id]); |
|
$user->total_price += doubleval($order_share->rebate); |
|
$user->price += doubleval($order_share->rebate); |
|
$user->save(); |
|
UserShareMoney::set($order_share->rebate, $user->id, $order_share->order_id, 0, 4, $this->store_id, 2); |
|
} |
|
//仅自购 |
|
if ($this->share_setting->level == 4) { |
|
return false; |
|
} |
|
//一级佣金发放 |
|
if ($this->share_setting->level >= 1) { |
|
$user_1 = User::findOne($order_share->parent_id_1); |
|
if (!$user_1) { |
|
return false; |
|
} |
|
$user_1->total_price += doubleval($order_share->first_price); |
|
$user_1->price += doubleval($order_share->first_price); |
|
$user_1->save(); |
|
UserShareMoney::set($order_share->first_price, $user_1->id, $order_id, 0, 1, $this->store_id, 2); |
|
$order_share->save(); |
|
} |
|
//二级佣金发放 |
|
if ($this->share_setting->level >= 2) { |
|
$user_2 = User::findOne($order_share->parent_id_2); |
|
if (!$user_2) { |
|
return false; |
|
} |
|
$user_2->total_price += doubleval($order_share->second_price); |
|
$user_2->price += doubleval($order_share->second_price); |
|
$user_2->save(); |
|
UserShareMoney::set($order_share->second_price, $user_2->id, $order_id, 0, 2, $this->store_id, 2); |
|
} |
|
//三级佣金发放 |
|
if ($this->share_setting->level >= 3) { |
|
$user_3 = User::findOne($order_share->parent_id_3); |
|
if (!$user_3) { |
|
return false; |
|
} |
|
$user_3->total_price += doubleval($order_share->third_price); |
|
$user_3->price += doubleval($order_share->third_price); |
|
$user_3->save(); |
|
UserShareMoney::set($order_share->third_price, $user_3->id, $order_id, 0, 3, $this->store_id, 2); |
|
} |
|
return true; |
|
} |
|
|
|
/** |
|
* 积分发放 --商城 |
|
*/ |
|
private function give_integral($id) |
|
{ |
|
$give = Order::findOne($id); |
|
if ($give['give_integral'] != 0) { |
|
return; |
|
} |
|
$integral = OrderDetail::find() |
|
->andWhere(['order_id' => $give['id'], 'is_delete' => 0]) |
|
->select([ |
|
'sum(integral)', |
|
])->scalar(); |
|
|
|
$giveUser = User::findOne(['id' => $give['user_id']]); |
|
$giveUser->integral += $integral; |
|
$giveUser->total_integral += $integral; |
|
$giveUser->save(); |
|
$give->give_integral = 1; |
|
$give->save(); |
|
$register = new Register(); |
|
$register->store_id = $this->store->id; |
|
$register->user_id = $giveUser->id; |
|
$register->register_time = '..'; |
|
$register->addtime = time(); |
|
$register->continuation = 0; |
|
$register->type = 7; |
|
$register->integral = $integral; |
|
$register->order_id = $give->id; |
|
$register->save(); |
|
} |
|
|
|
/** |
|
* 积分发放 --秒杀 |
|
*/ |
|
private function give_integral_ms($id) |
|
{ |
|
$give = MsOrder::findOne($id); |
|
if ($give['give_integral'] != 0) { |
|
return; |
|
} |
|
$integral = $give['integral_amount']; |
|
|
|
$giveUser = User::findOne(['id' => $give['user_id']]); |
|
$giveUser->integral += $integral; |
|
$giveUser->total_integral += $integral; |
|
$giveUser->save(); |
|
$give->give_integral = 1; |
|
$give->save(); |
|
$register = new Register(); |
|
$register->store_id = $this->store->id; |
|
$register->user_id = $giveUser->id; |
|
$register->register_time = '..'; |
|
$register->addtime = time(); |
|
$register->continuation = 0; |
|
$register->type = 8; |
|
$register->integral = $integral; |
|
$register->order_id = $give->id; |
|
$register->save(); |
|
} |
|
|
|
/** |
|
* 处理未在规定时间内付款的秒杀订单 |
|
* @param ActionEvent $event |
|
* @return bool |
|
*/ |
|
private function checkMsNoPayOrderTimeout($event) |
|
{ |
|
$order_max = 100; //每次最多处理的个数,防止运行太久 |
|
$cache_key = 'pt_no_pay_order_timeout_checker'; |
|
if (\Yii::$app->cache->get($cache_key)) { |
|
return true; |
|
} |
|
|
|
\Yii::$app->cache->set($cache_key, true, 10); |
|
/** @var Store $store */ |
|
$store = isset($event->action->controller->store) ? $event->action->controller->store : null; |
|
if (!$store) { |
|
\Yii::$app->cache->set($cache_key, false); |
|
return true; |
|
} |
|
|
|
/** @var MsOrder[] $order_list */ |
|
$order_list = MsOrder::find()->where([ |
|
'AND', |
|
[ |
|
'is_pay' => 0, |
|
'is_cancel' => 0, |
|
'store_id' => $store->id, |
|
'is_delete' => 0, |
|
], |
|
['<=', 'limit_time', time()], |
|
['!=', 'pay_type', 2], |
|
])->limit($order_max)->all(); |
|
foreach ($order_list as $order) { |
|
$order->is_cancel = 1; |
|
$order->save(false); |
|
if ($order->save(false)) { |
|
//秒杀订单所属秒杀时间段库存恢复 |
|
$miaosha_goods = MiaoshaGoods::findOne([ |
|
'goods_id' => $order->goods_id, |
|
'start_time' => intval(date('H', $order->addtime)), |
|
'open_date' => date('Y-m-d', $order->addtime), |
|
'is_delete' => 0 |
|
]); |
|
$attr_id_list = []; |
|
foreach (json_decode($order->attr) as $item) { |
|
array_push($attr_id_list, $item->attr_id); |
|
} |
|
|
|
$miaosha_goods->numAdd($attr_id_list, $order->num); |
|
//秒杀商品总库存恢复 |
|
$goods = MsGoods::findOne($order->goods_id); |
|
$attr_id_list = []; |
|
foreach (json_decode($order->attr) as $item) { |
|
array_push($attr_id_list, $item->attr_id); |
|
} |
|
|
|
$goods->numAdd($attr_id_list, $order->num); |
|
|
|
$integral = json_decode($order->integral)->forehead_integral; |
|
if ($integral) { |
|
$user = User::findOne(['id' => $order->user_id]); |
|
$user->integral += $integral ? $integral : 0; |
|
$user->save(); |
|
$register = new Register(); |
|
$register->store_id = $this->store->id; |
|
$register->user_id = $user->id; |
|
$register->register_time = '..'; |
|
$register->addtime = time(); |
|
$register->continuation = 0; |
|
$register->type = 13; |
|
$register->integral = $integral; |
|
$register->order_id = $order->id; |
|
$register->save(); |
|
} |
|
} |
|
} |
|
|
|
\Yii::$app->cache->set($cache_key, false); |
|
return true; |
|
} |
|
|
|
/** |
|
* 入驻商户订单金额转到商户余额 |
|
* @param \yii\base\ActionEvent $e |
|
*/ |
|
private function transferToMch($e) |
|
{ |
|
try { |
|
if (!isset($e->action->controller->store)) { |
|
return; |
|
} |
|
\Yii::warning('---lu---'); |
|
/** @var Order[] $order_list */ |
|
$order_list = Order::find()->where([ |
|
'AND', |
|
['is_pay' => 1], |
|
['pay_type' => [1, 3]], |
|
['is_sale' => 1], |
|
['is_transfer' => 0], |
|
['!=', 'mch_id', 0], |
|
])->limit(50) |
|
->all(); |
|
foreach ($order_list as $order) { |
|
$mch = Mch::findOne($order->mch_id); |
|
if (!$mch) { |
|
continue; |
|
} |
|
|
|
$accountMoney = floatval($mch->account_money) + floatval($order->pay_price * (1 - floatval($mch->transfer_rate) / 1000)) - $order->share_price; |
|
$mch->account_money = $accountMoney; |
|
$mch->save(); |
|
$order->is_transfer = 1; |
|
if (!$order->save()) { |
|
\Yii::warning($order->errors); |
|
} |
|
|
|
$log = new MchAccountLog(); |
|
$log->store_id = $order->store_id; |
|
$log->mch_id = $mch->id; |
|
$log->type = 1; |
|
$log->price = $accountMoney; |
|
$log->desc = '订单(' . $order->order_no . ')结算'; |
|
$log->addtime = time(); |
|
if (!$log->save()) { |
|
\Yii::warning($log->errors); |
|
} |
|
} |
|
} catch (\Exception $e) { |
|
} |
|
} |
|
|
|
// private function setMiaoshaSellNum($miaosha_goods_id, $attr_id_list, $num) |
|
// { |
|
// $miaosha_goods = MiaoshaGoods::findOne($miaosha_goods_id); |
|
// if (!$miaosha_goods) |
|
// return false; |
|
// sort($attr_id_list); |
|
// $attr_data = json_decode($miaosha_goods->attr, true); |
|
// foreach ($attr_data as $i => $attr_row) { |
|
// $_tmp_attr_id_list = []; |
|
// foreach ($attr_row['attr_list'] as $attr) { |
|
// $_tmp_attr_id_list[] = intval($attr['attr_id']); |
|
// } |
|
// sort($_tmp_attr_id_list); |
|
// if ($_tmp_attr_id_list == $attr_id_list) { |
|
// $attr_data[$i]['sell_num'] = intval($attr_data[$i]['sell_num']) + intval($num); |
|
// break; |
|
// } |
|
// } |
|
// $miaosha_goods->attr = json_encode($attr_data, JSON_UNESCAPED_UNICODE); |
|
// $res = $miaosha_goods->save(); |
|
// return $res; |
|
// } |
|
}
|
|
|