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.
256 lines
9.7 KiB
256 lines
9.7 KiB
<?php |
|
/** |
|
* Created by PhpStorm. |
|
* User: Administrator |
|
* Date: 2017/9/15 |
|
* Time: 14:17 |
|
*/ |
|
|
|
namespace app\modules\mch\models; |
|
|
|
use app\models\Goods; |
|
use app\models\Model; |
|
use app\models\MsGoods; |
|
use app\models\MsOrder; |
|
use app\models\Order; |
|
use app\models\OrderDetail; |
|
use app\models\Setting; |
|
use app\models\User; |
|
use app\modules\api\models\ShareMoneyForm; |
|
|
|
class OrderPriceForm extends MchModel |
|
{ |
|
public $store_id; |
|
public $order_id; |
|
public $price; |
|
public $type; |
|
public $order_type; |
|
public $update_express; |
|
|
|
public function rules() |
|
{ |
|
return [ |
|
[['order_id', 'type'], 'number'], |
|
[['type'], 'in', 'range' => [1, 2]], |
|
[['order_type'], 'string'], |
|
[['price', 'update_express'], 'default', 'value' => 0], |
|
[['price', 'update_express'], 'number', 'min' => 0, 'max' => 999999], |
|
]; |
|
} |
|
|
|
public function attributeLabels() |
|
{ |
|
return [ |
|
'price' => '修改的价格', |
|
'update_express' => '修改的价格', |
|
]; |
|
} |
|
|
|
public function update() |
|
{ |
|
if (!$this->validate()) { |
|
return $this->errorResponse; |
|
} |
|
if ($this->order_type == 'ms') { |
|
$order = MsOrder::findOne(['id' => $this->order_id, 'is_delete' => 0, 'is_pay' => 0]); |
|
} else { |
|
$order = Order::findOne([ |
|
'id' => $this->order_id, |
|
'is_delete' => 0, |
|
'is_pay' => 0, |
|
'mch_id' => 0,]); |
|
} |
|
if (!$order) { |
|
return [ |
|
'code' => 0, |
|
'msg' => '网络异常' |
|
]; |
|
} |
|
$money = doubleval($order->pay_price); |
|
$total = doubleval($order->total_price); |
|
$express = doubleval($order->express_price); |
|
if ($order->before_update_price) { |
|
} else { |
|
$order->before_update_price = $money; |
|
} |
|
if ($order->before_update_express) { |
|
} else { |
|
$order->before_update_express = $express; |
|
} |
|
if ($this->price == 0 && $this->update_express == 0) { |
|
return [ |
|
'code' => 1, |
|
'msg' => '请填写修改金额' |
|
]; |
|
} |
|
if ($this->type == 1) { |
|
$express_1 = $this->update_express + $express; |
|
$order->pay_price = round($money + $this->price + $this->update_express, 2); |
|
$order->total_price = round($total + $this->price + $this->update_express, 2); |
|
} else { |
|
if ($express < $this->update_express) { |
|
return [ |
|
'code' => 1, |
|
'msg' => '优惠的运费不能超过原来的运费' |
|
]; |
|
} |
|
if ($money - $express - $this->price < 0.01) { |
|
return [ |
|
'code' => 1, |
|
'msg' => '修改后的商品价格不能小于0.01' |
|
]; |
|
} |
|
$express_1 = $express - $this->update_express; |
|
$order->pay_price = round($money - $this->price - $this->update_express, 2); |
|
$order->total_price = round($total - $this->price - $this->update_express, 2); |
|
} |
|
$order->express_price = $express_1; |
|
if ($order->pay_price < 0.01) { |
|
$order->pay_price = 0.01; |
|
return [ |
|
'code' => 1, |
|
'msg' => '修改后的价格不能小于0.01' |
|
]; |
|
} |
|
if ($order->save()) { |
|
$order_detail_list = OrderDetail::findAll(['order_id' => $order->id, 'is_delete' => 0]); |
|
$goods_total_price = 0.00; |
|
$goods_total_pay_price = $order->pay_price - $express_1; |
|
foreach ($order_detail_list as $goods) { |
|
$goods_total_price += $goods->total_price; |
|
} |
|
foreach ($order_detail_list as $goods) { |
|
$goods->total_price = doubleval(sprintf('%.2f', $goods_total_pay_price * $goods->total_price / $goods_total_price)); |
|
$goods->save(); |
|
} |
|
$this->setReturnData($order); |
|
return [ |
|
'code' => 0, |
|
'msg' => '成功' |
|
]; |
|
} else { |
|
return [ |
|
'code' => 1, |
|
'msg' => '网络异常' |
|
]; |
|
} |
|
} |
|
|
|
/** |
|
* 设置佣金 |
|
*/ |
|
private function setReturnData($order) |
|
{ |
|
$form = new ShareMoneyForm(); |
|
$form->order = $order; |
|
if ($this->order_type == 'ms') { |
|
$form->order_type = 1; |
|
} else { |
|
$form->order_type = 0; |
|
} |
|
return $form->setData(); |
|
} |
|
|
|
/** |
|
* 设置佣金 |
|
*/ |
|
private function setReturnData_1($order) |
|
{ |
|
$setting = Setting::findOne(['store_id' => $order->store_id]); |
|
if (!$setting || $setting->level == 0) { |
|
return; |
|
} |
|
$user = User::findOne($order->user_id);//订单本人 |
|
if (!$user) { |
|
return; |
|
} |
|
$order->parent_id = $user->parent_id; |
|
$parent = User::findOne($user->parent_id);//上级 |
|
if ($parent->parent_id) { |
|
$order->parent_id_1 = $parent->parent_id; |
|
$parent_1 = User::findOne($parent->parent_id);//上上级 |
|
if ($parent_1->parent_id) { |
|
$order->parent_id_2 = $parent_1->parent_id; |
|
} else { |
|
$order->parent_id_2 = -1; |
|
} |
|
} else { |
|
$order->parent_id_1 = -1; |
|
$order->parent_id_2 = -1; |
|
} |
|
$order_total = doubleval($order->total_price - $order->express_price); |
|
$pay_price = doubleval($order->pay_price - $order->express_price); |
|
|
|
if ($this->order_type == 'ms') { |
|
$goods = MsGoods::findOne(['id' => $order->goods_id, 'store_id' => $this->store_id]); |
|
$new_list = []; |
|
$new_list['total_price'] = $pay_price; |
|
$new_list['individual_share'] = $goods->individual_share; |
|
$new_list['share_commission_first'] = $goods->share_commission_first; |
|
$new_list['share_commission_second'] = $goods->share_commission_second; |
|
$new_list['share_commission_third'] = $goods->share_commission_third; |
|
$new_list['rebate'] = $goods->rebate; |
|
$new_list['num'] = $order->num; |
|
$order_detail_list[] = $new_list; |
|
} else { |
|
$order_detail_list = OrderDetail::find()->alias('od')->leftJoin(['g' => Goods::tableName()], 'od.goods_id=g.id') |
|
->where(['od.is_delete' => 0, 'od.order_id' => $order->id]) |
|
->asArray() |
|
->select(['od.*', 'g.*']) |
|
->all(); |
|
} |
|
$share_commission_money_first = 0;//一级分销总佣金 |
|
$share_commission_money_second = 0;//二级分销总佣金 |
|
$share_commission_money_third = 0;//三级分销总佣金 |
|
$rebate = 0;//三级分销总佣金 |
|
foreach ($order_detail_list as $item) { |
|
$item_price = doubleval($item['total_price']); |
|
if ($item['individual_share'] == 1) { |
|
$rate_first = doubleval($item['share_commission_first']); |
|
$rate_second = doubleval($item['share_commission_second']); |
|
$rate_third = doubleval($item['share_commission_third']); |
|
$rate_rebate = doubleval($item['rebate']); |
|
if ($item['share_type'] == 1) { |
|
$share_commission_money_first += $rate_first * $item['num']; |
|
$share_commission_money_second += $rate_second * $item['num']; |
|
$share_commission_money_third += $rate_third * $item['num']; |
|
$rebate += $rate_rebate * $item['num']; |
|
} else { |
|
$share_commission_money_first += $item_price * $rate_first / 100; |
|
$share_commission_money_second += $item_price * $rate_second / 100; |
|
$share_commission_money_third += $item_price * $rate_third / 100; |
|
$rebate += $item_price * $rate_rebate / 100; |
|
} |
|
} else { |
|
$rate_first = doubleval($setting->first); |
|
$rate_second = doubleval($setting->second); |
|
$rate_third = doubleval($setting->third); |
|
$rate_rebate = doubleval($setting->rebate); |
|
if ($setting->price_type == 1) { |
|
$share_commission_money_first += $rate_first * $item['num']; |
|
$share_commission_money_second += $rate_second * $item['num']; |
|
$share_commission_money_third += $rate_third * $item['num']; |
|
$rebate += $rate_rebate * $item['num']; |
|
} else { |
|
$share_commission_money_first += $item_price * $rate_first / 100; |
|
$share_commission_money_second += $item_price * $rate_second / 100; |
|
$share_commission_money_third += $item_price * $rate_third / 100; |
|
$rebate += $item_price * $rate_rebate / 100; |
|
} |
|
} |
|
} |
|
if ($user->is_distributor == 0) { |
|
$rebate = 0; |
|
} |
|
if ($setting->is_rebate == 0) { |
|
$rebate = 0; |
|
} |
|
|
|
|
|
$order->first_price = $share_commission_money_first < 0.01 ? 0 : $share_commission_money_first; |
|
$order->second_price = $share_commission_money_second < 0.01 ? 0 : $share_commission_money_second; |
|
$order->third_price = $share_commission_money_third < 0.01 ? 0 : $share_commission_money_third; |
|
$order->rebate = $rebate < 0.01 ? 0 : $rebate; |
|
$order->save(); |
|
} |
|
}
|
|
|