| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269 |
- <?php
- /**
- * 重庆赤晓店信息科技有限公司
- * https://www.chixiaodian.com
- * Copyright (c) 2023 赤店商城 All rights reserved.
- */
- namespace app\plugins\food\models\client;
- use app\models\Option;
- use app\models\User;
- use app\plugins\food\models\FoodGoods;
- use app\plugins\food\models\FoodOrder;
- use app\plugins\food\models\FoodOrderDetail;
- use app\utils\Alipay\Alipay;
- use app\utils\Alipay\AlipayProfit;
- use app\utils\CloudPrint;
- use app\utils\OrderNo;
- use app\utils\Wechat\WechatNewPay;
- use app\utils\Wechat\WechatPay;
- use yii\base\BaseObject;
- use yii\base\Model;
- use yii\helpers\Json;
- use app\models\Store;
- class OrderForm extends Model
- {
- public $store_id;
- public $user_id;
- public $goods_list;
- public $table_num;
- public $order_id;
- public $pay_type;
- public function rules()
- {
- return [
- [['order_id', 'pay_type'], 'integer'],
- [['table_num'], 'string'],
- [['goods_list', 'table_num'], 'required'],
- ['goods_list', function ($attr, $params) {
- $data = Json::decode($this->goods_list);
- if (!$data) {
- $this->addError($attr, "{$attr}数据格式错误。");
- }
- $this->goods_list = $data;
- }],
- ['goods_list', function ($attr, $params) {
- foreach ($this->goods_list as $i => $goods) {
- if (!is_array($goods)) {
- $this->addError($attr, "{$goods}必须是一个数组。");
- return;
- }
- if (empty($goods['id'])) {
- $this->addError($attr, "{$goods}['id']不能为空。");
- return;
- }
- if (!is_array($goods['attr'])) {
- $this->addError($attr, "{$goods}['attr']必须是一个数组。");
- return;
- }
- if (empty($goods['num'])) {
- $this->addError($attr, "{$goods}['num']不能为空。");
- return;
- }
- }
- }],
- ];
- }
- public function submit() {
- if (!$this->validate()) {
- return [
- 'code' => 1,
- 'msg' => $this->getErrorSummary(false)[0]
- ];
- }
- $food_times = FoodOrderDetail::find()->where(['order_id' => $this->order_id])->groupBy('times')->select('times')->asArray()->all();
- $food_times = array_column($food_times, 'times');
- $user = get_user();
- // order_id存在说明已存在订单,执行加菜操作
- if (!empty($this->order_id)) {
- $food_order = FoodOrder::findOne(['store_id' => $this->store_id, 'id' => $this->order_id, 'is_pay' => FoodOrder::IS_PAY_FALSE]);
- if (!$food_order) {
- return [
- 'code' => 1,
- 'msg' => '订单异常'
- ];
- }
- $times = max($food_times);
- foreach ($this->goods_list as $key => $value) {
- $food_goods = FoodGoods::findOne(['id' => $value['id'], ['status' => FoodGoods::STATUS_NORMAL]]);
- if (!$food_goods) {
- unset($this->goods_list[$key]);
- continue;
- }
- $food_detail = new FoodOrderDetail();
- $food_detail->order_id = $this->order_id;
- $food_detail->goods_id = $value['id'];
- $food_detail->goods_name = $food_goods->name;
- $food_detail->num = $value['num'];
- $food_detail->total_price = $food_goods->price * $value['num'];
- $food_detail->created_at = time();
- $food_detail->times = $times + 1;
- $food_detail->attr = Json::encode($value['attr']);
- $food_detail->pic = $value['pic'];
- if (!$food_detail->save()) {
- return [
- 'code' => 1,
- 'msg' => 'goods_id: '. $value['id']. '-' .$food_detail->errors[0]
- ];
- } else {
- $food_order = FoodOrder::findOne($this->order_id);
- $food_order->pay_price += $food_goods->price * $value['num'];
- $food_order->total_price += $food_goods->price * $value['num'];
- $food_order->save();
- }
- }
- } else {
- $food_order = new FoodOrder();
- $food_order->store_id = $this->store_id;
- $food_order->user_id = $this->user_id;
- $food_order->order_no = OrderNo::getOrderNo(OrderNo::ORDER_ALIPAY_FOOD);
- $pay_price = 0;
- foreach ($this->goods_list as $key => $goods) {
- $food_goods = FoodGoods::findOne(['id' => $goods['id'], ['status' => FoodGoods::STATUS_NORMAL]]);
- if (!$food_goods) {
- unset($this->goods_list[$key]);
- continue;
- }
- $pay_price += floatval($food_goods->price * $goods['num']);
- }
- $total_price = $pay_price;
- $food_order->total_price = $total_price;
- $food_order->pay_price = $pay_price;
- $food_order->name = $user->nickname;
- $food_order->mobile = $user->binding;
- $food_order->remark = '';
- $food_order->is_pay = FoodOrder::IS_PAY_FALSE;
- $food_order->created_at = time();
- $food_order->table_num = $this->table_num;
- // 添加分销关系
- $share_setting = Option::get('share_basic_setting', $this->store_id);
- $share_setting = $share_setting ? Json::decode($share_setting['value']) : [];
- if (isset($share_setting['rebate']) && $share_setting['rebate']['value'] > 0) {
- // 一级
- $food_order->parent_id = $user->id;
- if ($user->parent_id) {
- // 二级
- $food_order->parent_id_1 = $user->parent_id;
- $user_final = User::findOne($user->parent_id);
- if ($user_final->parent_id) {
- // 三级
- $food_order->parent_id_2 = $user_final->parent_id;
- }
- }
- } else {
- if ($user->parent_id) {
- $food_order->parent_id = $user->parent_id;
- // 二级
- $user_second = User::findOne($user->parent_id);
- if ($user_second->parent_id) {
- $food_order->parent_id_1 = $user_second->parent_id;
- $user_final = User::findOne($user_second->parent_id);
- if ($user_final->parent_id) {
- // 三级
- $food_order->parent_id_2 = $user_final->parent_id;
- }
- }
- }
- }
- if (!$food_order->save()) {
- return [
- 'code' => 1,
- 'msg' => $food_order->errors[0]
- ];
- } else {
- $this->order_id = $food_order->id;
- foreach ($this->goods_list as $key => $value) {
- $food_goods = FoodGoods::findOne(['id' => $value['id'], ['status' => FoodGoods::STATUS_NORMAL]]);
- if (!$food_goods) {
- unset($this->goods_list[$key]);
- continue;
- }
- $food_detail = new FoodOrderDetail();
- $food_detail->order_id = $food_order->id;
- $food_detail->goods_id = $value['id'];
- $food_detail->goods_name = $food_goods->name;
- $food_detail->num = $value['num'];
- $food_detail->total_price = floatval($food_goods->price * $value['num']);
- $food_detail->created_at = time();
- $food_detail->times = 1;
- $food_detail->attr = Json::encode($value['attr']);
- $food_detail->pic = $value['pic'];
- if (!$food_detail->save()) {
- return [
- 'code' => 1,
- 'msg' => 'goods_id: '. $value['id']. '-' .$food_detail->errors[0]
- ];
- }
- }
- }
- }
- return [
- 'code' => 0,
- 'msg' => 'success',
- 'data' => $this->order_id
- ];
- }
- /**
- * @return array|\Yansongda\Supports\Collection
- */
- public function pay() {
- $goods_list = FoodOrderDetail::find()->where(['order_id' => $this->order_id])->asArray()->all();
- $goods_names = '';
- foreach ($goods_list as $goods) {
- $goods_names .= $goods['goods_name'] . ';';
- }
- $goods_names = mb_substr($goods_names, 0, 32, 'utf-8');
- $order = FoodOrder::findOne($this->order_id);
- // 供应链系统下单时是否使用平台商户号,1使用,0未使用
- if (\Yii::$app->prod_is_dandianpu() && !Store::hasIncoming($order->store_id)) {
- $order->is_use_platform_mch = 1;
- $order->save();
- }
- if ($this->pay_type == 1) {
- if (\Yii::$app->prod_is_dandianpu() && !Store::hasIncoming($order->store_id) && self_mini() === false) {
- $result = WechatPay::orderUnify($order,OrderNo::ORDER_MALL, $goods_names);
- } else {
- if (is_profit_pay()) {
- $result = WechatNewPay::orderUnify($order,OrderNo::ORDER_MALL, $goods_names);
- } else {
- $result = WechatPay::orderUnify($order,OrderNo::ORDER_MALL, $goods_names);
- }
- }
-
- if (isset($result['code']) && $result['code'] == 1) {
- return $result;
- }
- return [
- 'code' => 0,
- 'msg' => 'success',
- 'data' => (object)$result['data'],
- 'res' => $result['res'],
- 'body' => $goods_names
- ];
- } else {
- if (is_profit_pay('ali')) {
- $result = AlipayProfit::mini($order, $goods_names, get_user(), '', '', true);
- } else {
- $result = Alipay::mini($order, $goods_names, get_user());
- }
- if (isset($result['code']) && $result['code'] == 1) {
- return $result;
- }
- return [
- 'code' => 0,
- 'msg' => 'success',
- 'data' => $result['data']['trade_no'],
- 'body' => $goods_names
- ];
- }
- }
- }
|