| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286 |
- <?php
- /**
- * 重庆赤晓店信息科技有限公司
- * https://www.chixiaodian.com
- * Copyright (c) 2023 赤店商城 All rights reserved.
- */
- namespace app\modules\client\models\v1\order;
- use app\models\AccountLog;
- use app\models\common\CommonOrder;
- use app\models\Goods;
- use app\models\GoodsBook;
- use app\models\Order;
- use app\models\OrderDetail;
- use app\models\OrderUnion;
- use app\models\SaaSLeaguePriceLog;
- use app\models\SaasUser;
- use app\models\User;
- use app\models\VerifyCardLog;
- use app\models\VerifyCardSale;
- use app\modules\client\models\OrderComplete;
- use app\modules\client\models\v1\LoginForm;
- use app\modules\client\models\v1\ShareMoneyForm;
- use app\modules\common\models\NotifyForm;
- use app\utils\Alipay\Alipay;
- use app\utils\Alipay\AlipayProfit;
- use app\utils\CloudPrint;
- use app\utils\OrderNo;
- use app\utils\Share\BonusPool;
- use app\utils\Wechat\WechatNewPay;
- use app\utils\Wechat\WechatPay;
- use app\utils\yunst\src\OrderYunst;
- use ByteDance\ByteDance;
- use yii\base\Model;
- use yii\helpers\Json;
- use app\utils\Delivery\Delivery;
- use app\models\Store;
- use app\utils\Adapay\Adapay;
- use app\utils\Adapay\AdapayV2;
- use app\utils\Allinpay\Allinpay;
- use app\models\UserPayMonth;
- use app\modules\admin\models\UserAuditForm;
- /**
- * @property User $user
- * @property Order $order
- */
- class OrderPayDataForm extends Model
- {
- public $store_id;
- public $order_id;
- public $order_id_list;
- public $pay_type;
- public $user;
- public $form_id;
- public $parent_user_id;
- public $condition;
- public $pay_offline;
- public $_from;
- public $is_combine;
- public $session_key;
-
- public $ali_requireOrder;
- public $ali_sourceId;
- /** @var Wechat $wechat */
- private $wechat;
- private $wechatPay;
- private $order;
- const PAY_FROM_APP = 'app';
- const PAY_FROM_MINI = 'mini';
- const PAY_FROM_H5 = 'h5';
- const PAY_FROM_OFFICIAL = 'official';
- const PAY_FROM_YUNST = 'yunst';
- public function rules()
- {
- return [
- [['pay_type', '_from'], 'required'],
- [['_from'], 'in', 'range' => ['app', 'mini', 'h5', 'official', 'yunst']],
- [['pay_type'], 'in', 'range' => [
- -1, 1, 2, 3, 4, 5,
- Order::PAY_TYPE_OFFLINE,
- Order::PAY_TYPE_MONTH,
- Order::PAY_TYPE_ADAPAY_WX, Order::PAY_TYPE_ADAPAY_ALIPAY, Order::PAY_TYPE_ADAPAY_QUICKPAY_FRONTPAY,
- Order::PAY_TYPE_HUIFU_V2_JSPAY_WX,
- Order::PAY_TYPE_WX_B2B,
- Order::PAY_TYPE_ALLINPAY_WX, Order::PAY_TYPE_ALLINPAY_ALIPAY,
- Order::PAY_TYPE_YUNST_WECHAT_PAY
- ]], // 'WECHAT_PAY', 'HUODAO_PAY', 'BALANCE_PAY' 'ALIPAY',
- [['form_id', 'order_id_list', '_from'], 'string'],
- ['is_combine', 'default', 'value' => 0],
- [['parent_user_id', 'condition', 'order_id', 'is_combine'], 'integer'],
- [['ali_requireOrder', 'ali_sourceId', 'pay_offline'], 'safe'],
- [['session_key'], 'safe'],
- ];
- }
- public function search()
- {
- if($this->pay_type == -1){
- $this->pay_type = Order::PAY_TYPE_BALANCE_PAID;
- }
- $this->wechatPay = \Yii::$app->controller->wechatPay;
- if (!$this->validate()) {
- return [
- 'code' => 1,
- 'msg' => $this->getErrorSummary(false)[0],
- ];
- }
- $this->user->money = doubleval($this->user->money);
- if ($this->order_id_list) {
- $order_id_list = json_decode($this->order_id_list, true);
- if (is_array($order_id_list) && count($order_id_list) == 1) {
- $this->order_id = $order_id_list[0];
- $this->order_id_list = '';
- }
- }
- $t = \Yii::$app->db->beginTransaction();
- try {
- User::find()->where('id = ' . $this->user->id . ' for update')->one();
- if ($this->order_id) { //单个订单付款
- $this->order = Order::findOne([
- // 'store_id' => $this->store_id,
- 'id' => $this->order_id,
- ]);
- //感觉$this->pay_type == 2条件可以不用加 因为货到付款支付时候不走这个方法 走meetOrderPay()
- if (intval($this->order->is_pay) || (intval($this->order->pay_type) === 2 && $this->pay_type == 2)) {
- $t->rollBack();
- return [
- 'code' => 1,
- 'msg' => '订单已支付',
- ];
- }
- if($this->order->integral_price > 0){
- if($this->order->integral_price > $this->user->integral){
- $t->rollBack();
- return [
- 'code' => 1,
- 'msg' => '积分不足,请重新下单',
- ];
- }
- }
- // 供应链系统下单时是否使用平台商户号,1使用,0未使用
- if (\Yii::$app->prod_is_dandianpu() &&
- !is_h5() &&
- (
- (
- !Store::hasIncoming($this->order->store_id) && $this->pay_type == 1)
- || ($this->pay_type == 1 && $this->_from == self::PAY_FROM_APP)
- ) &&
- self_mini() === false
- ) {
- $is_use_platform_mch = 1;
- if ($this->is_combine) {
- if ($this->user->money >= $this->order->pay_price) {
- $this->pay_type = 3;
- $is_use_platform_mch = 0;
- }
- }
- $this->order->is_use_platform_mch = $is_use_platform_mch;
- $this->order->save();
- }
- if ($this->order->pay_price == 0) {
- // 这里要判断订单之前是不是货到付款的订单 如果是货到付款的订单
- if($this->order->pay_type == 2 && $this->order->trade_status == Order::ORDER_FLOW_SEND){
- $this->order->is_pay = 1;
- // 如果是货到付款已发货 用户选择支付的话 订单修改为确认收货
- $this->order->trade_status = Order::ORDER_FLOW_CONFIRM;
- $this->order->confirm_time = time();
- $this->order->save();
- return [
- 'code' => 0,
- 'msg' => '支付成功'
- ];
- }else{
- $this->order->pay_time = time();
- $this->order->is_pay = 1;
- if($this->order->order_type == 7){
- $this->order->pay_type = 7; //积分兑换
- }else{
- $this->order->pay_type = 3;
- }
- $this->order->trade_status = Order::ORDER_FLOW_NO_SEND;
- $this->order->save();
- }
- if ($this->order->verify_card_id > 0) {
- VerifyCardSale::updateAll(['status' => 1], ['id' => $this->order->verify_card_id]);
- $verifylog = new VerifyCardLog();
- $verifylog->store_id = $this->order->store_id;
- $verifylog->sale_id = $this->order->verify_card_id;
- $verifylog->shop_id = 0;
- $verifylog->use_time = time();
- $verifylog->user_id = get_user_id();
- $verifylog->type = VerifyCardLog::WRITE_TYPE_EXCHANGE;
- $verifylog->describe = '使用卡券礼品卡兑换商品';
- $verifylog->save();
- }
- $this->setReturnData($this->order);
- $t->commit();
- // 支付完成后,相关操作
- (new NotifyForm())->videoGoodsShare($this->order);
- $form = new OrderComplete();
- $form->order_id = $this->order->id;
- $form->order_type = 0;
- $form->store_id = $this->order->store_id;
- $form->notify();
- return [
- 'code' => 0,
- 'msg' => '支付成功'
- ];
- }
- if (!$this->order) {
- $t->rollBack();
- return [
- 'code' => 1,
- 'msg' => '订单不存在',
- ];
- }
- if ($this->order->is_delete == 1 || $this->order->trade_status == Order::ORDER_FLOW_CANCEL) {
- $t->rollBack();
- return [
- 'code' => 1,
- 'msg' => '订单已取消',
- ];
- }
- if ($this->order->is_pay == 1 || ($this->order->trade_status > -1 && $this->order->pay_type != 2)) {
- $t->rollBack();
- return [
- 'code' => 1,
- 'msg' => '订单状态异常',
- ];
- }
- try {
- $this->checkGoodsConfine($this->order);
- } catch (\Exception $e) {
- $t->rollBack();
- return [
- 'code' => 1,
- 'msg' => $e->getMessage()
- ];
- }
-
- // 存储parent_id
- // if ($this->user && $this->user->parent_user_id) {
- // CommonOrder::saveParentId($this->user->parent_user_id);
- // }
-
- $goods_names = '';
- $goods_list = OrderDetail::find()->alias('od')->leftJoin(['g' => Goods::tableName()],
- 'g.id=od.goods_id')->where(['od.order_id' => $this->order->id, 'od.is_delete' => 0,
- ])->select('g.name,g.verify_card_id')->asArray()->all();
- foreach ($goods_list as $goods) {
- $goods_names .= $goods['name'] . ';';
- }
- $goods_names = mb_substr($goods_names, 0, 32, 'utf-8');
- // 去除非utf8字符
- if (function_exists('iconv')) {
- // 使用iconv函数去除非UTF-8字符
- $goods_names = iconv('UTF-8', 'UTF-8//IGNORE', $goods_names);
- } else {
- // 如果iconv不可用,则使用正则表达式尝试去除非UTF-8字符
- $goods_names = preg_replace('/[^\x{0000}-\x{FFFF}]/u', '', $goods_names);
- }
-
- $this->setReturnData($this->order);
-
- $this->order->order_union_id = 0;
- if (!$this->order->save()) {
- $t->rollBack();
- return [
- 'code' => 1,
- 'msg' => '订单保存失败'
- ];
- }
-
- // 余额抵扣支付
- $balance_price = 0;
- if ($this->pay_type == 2) {
- $this->is_combine = 0;
- }
- if ($this->is_combine) {
- if ($this->user->money >= $this->order->pay_price) {
- $this->pay_type = 3;
- } else {
- $balance_price = $this->user->money;
- $this->order->combine_money = $this->user->money;
- $this->order->is_combine_pay = Order::IS_COMBINE_PAY;
- $this->order->save();
- }
- } else {
- $this->order->combine_money = 0;
- $this->order->is_combine_pay = Order::NOT_COMBINE_PAY;
- $this->order->save();
- }
-
- if ($this->pay_type == 1 || $this->pay_type == 4 || $this->pay_type == 5 || in_array($this->pay_type, [Order::PAY_TYPE_WX_B2B, Order::PAY_TYPE_ADAPAY_WX, Order::PAY_TYPE_ADAPAY_ALIPAY, Order::PAY_TYPE_ADAPAY_QUICKPAY_FRONTPAY, Order::PAY_TYPE_HUIFU_V2_JSPAY_WX]) || in_array($this->pay_type, [Order::PAY_TYPE_ALLINPAY_WX, Order::PAY_TYPE_ALLINPAY_ALIPAY]) || $this->pay_type == Order::PAY_TYPE_YUNST_WECHAT_PAY) {
- if ($this->order->pay_price == 0) {
- $this->order->is_pay = 1;
- $this->order->pay_type = 1;
- if ($this->pay_type == 4) {
- $this->order->pay_type = 4;
- }
-
- $this->order->pay_time = time();
- if (!$this->order->save()) {
- $t->rollBack();
- return [
- 'code' => 1,
- 'msg' => '支付失败'
- ];
- }
- // 支付完成后,相关操作
- (new NotifyForm())->videoGoodsShare($this->order);
- $form = new OrderComplete();
- $form->order_id = $this->order->id;
- $form->order_type = 0;
- $form->store_id = $this->order->store_id;
- $form->notify();
- $t->commit();
- return [
- 'code' => 0,
- 'msg' => '0元支付'
- ];
- }
- //供应链系统h5支付以及公众号支付 只能使用供应链平台配置的商户信息 不能自己配置 所以给这加is_use_platform_mch 让商城自己提现
- if (\Yii::$app->prod_is_dandianpu() && ((is_h5() || $this->_from == self::PAY_FROM_OFFICIAL) &&
- (
- ((!Store::hasIncoming($this->order->store_id, 'wechat', is_h5())) && $this->pay_type == Order::PAY_TYPE_WECHAT) ||
- ((!Store::hasIncoming($this->order->store_id, 'alipay', is_h5())) && $this->pay_type == Order::PAY_TYPE_ALI)
- ))
- ) {
- $this->order->is_use_platform_mch = 1;
- $this->order->save();
- }
- // if ($this->order->store_id == 74 && in_array($this->pay_type, [1])){
- // $this->pay_type = Order::PAY_TYPE_HUIFU_V2_JSPAY_WX;
- // }
- if ($this->pay_type == 1) {
- // \Yii::error($this->_from);
- if ($this->_from == self::PAY_FROM_APP) {
- if (\Yii::$app->prod_is_dandianpu() && self_mini() === false) {
- $result = WechatPay::orderUnify($this->order,OrderNo::ORDER_MALL, $goods_names, 0, true, $balance_price);
- } else {
- if (is_profit_pay()) {
- $result = WechatNewPay::orderUnify($this->order,OrderNo::ORDER_MALL, $goods_names, 0, true, $balance_price);
- } else {
- $result = WechatPay::orderUnify($this->order,OrderNo::ORDER_MALL, $goods_names, 0, true, $balance_price);
- }
- }
- } else if ($this->_from == self::PAY_FROM_H5) {
- if (\Yii::$app->prod_is_dandianpu() && !Store::hasIncoming($this->order->store_id) && self_mini() === false) {
- $result = WechatPay::orderUnify($this->order,OrderNo::ORDER_MALL, $goods_names, 0, false, $balance_price, true);
- } else {
- if (is_profit_pay()) {
- $result = WechatNewPay::orderUnify($this->order,OrderNo::ORDER_MALL, $goods_names, 0, false, $balance_price, true);
- } else {
- $result = WechatPay::orderUnify($this->order,OrderNo::ORDER_MALL, $goods_names, 0, false, $balance_price, true);
- }
- }
- } else if ($this->_from == self::PAY_FROM_OFFICIAL) {
- $self_mini = intval(\app\models\Option::get('self_mini', get_store_id(), 'store', 0)['value']);
- if (\Yii::$app->prod_is_dandianpu() && !Store::hasIncoming($this->order->store_id) && !$self_mini) {
- $result = WechatPay::orderUnify($this->order,OrderNo::ORDER_MALL, $goods_names, 0, false, $balance_price, false, true);
- } else {
- if (is_profit_pay()) {
- $result = WechatNewPay::orderUnify($this->order,OrderNo::ORDER_MALL, $goods_names, 0, false, $balance_price, false, true);
- } else {
- $result = WechatPay::orderUnify($this->order,OrderNo::ORDER_MALL, $goods_names, 0, false, $balance_price, false, true);
- }
- }
- } else {
- if (\Yii::$app->prod_is_dandianpu() && !Store::hasIncoming($this->order->store_id) && self_mini() === false) {
- $result = WechatPay::orderUnify($this->order,OrderNo::ORDER_MALL, $goods_names, 0, false, $balance_price);
- } else {
- if (is_profit_pay() && Store::hasIncoming($this->order->store_id)) {
- $result = WechatNewPay::orderUnify($this->order,OrderNo::ORDER_MALL, $goods_names, 0, false, $balance_price);
- } else {
- $result = WechatPay::orderUnify($this->order,OrderNo::ORDER_MALL, $goods_names, 0, false, $balance_price);
- }
- if (\app\modules\admin\models\WastoreForm::$test && get_mini_id() == 88) {
- $result = WechatPay::orderUnify($this->order,OrderNo::ORDER_MALL, $goods_names, 0, false, $balance_price);
- }
- }
- }
- if (isset($result['code']) && $result['code'] == 1) {
- if ($this->_from == self::PAY_FROM_OFFICIAL) {
- $result['wechat_platform_open_id'] = get_user()->wechat_platform_open_id;
- $result['h5_auth_link'] = LoginForm::getAuthLink();
- }
- return $result;
- }
- CloudPrint::doPrint($this->order->id, 0, $this->order->store_id);
- $t->commit();
- \app\modules\admin\models\WastoreForm::afterOrderPrepay($this->order, $result['res']);
- return [
- 'code' => 0,
- 'msg' => 'success',
- 'data' => (object)$result['data'],
- 'res' => $result['res'],
- 'body' => $goods_names
- ];
- }
- if ($this->pay_type == Order::PAY_TYPE_WX_B2B) {
- // \Yii::error($this->_from);
- $result = UserAuditForm::pay($this->session_key, $this->order, OrderNo::ORDER_MALL, $goods_names, $balance_price);
- CloudPrint::doPrint($this->order->id, 0, $this->order->store_id);
- $t->commit();
- // \app\modules\admin\models\WastoreForm::afterOrderPrepay($this->order, $result['res']);
- return $result;
- }
- if ($this->pay_type == Order::PAY_TYPE_YUNST_WECHAT_PAY) {
- // if (!Store::hasIncoming($this->order->store_id, 'yunst')) {
- // return [
- // 'code' => 1,
- // 'msg' => '商家未配置通联支付'
- // ];
- // }
- //是非独立部署 进件流程//通联支付 start
- $store = Store::findOne(['id' => $this->order->store_id]);
- $OrderYunst = new OrderYunst();
- $result2 = $OrderYunst->payYunst($this->order->store_id, $this->order->order_no, $store->cusid, $this->order->pay_price * 100);
- if ($result2['subCode'] == 'SUCCESS') {
- $payInfo = json_decode($result2['data']['payinfo'], true);
- if (!empty($payInfo)) {
- if (is_array($payInfo)) {
- return [
- 'code' => 0,
- 'data' => $payInfo,
- 'msg' => 'success',
- 'res' => $payInfo
- ];
- }
- return [
- 'code' => 1,
- 'msg' => $result2['data']['errmsg']
- ];
- }
- return [
- 'code' => 1,
- 'msg' => $result2['subMsg']
- ];
- }
- return $result2;
- //通联支付 end
- }
- if (in_array($this->pay_type, [Order::PAY_TYPE_ALLINPAY_WX, Order::PAY_TYPE_ALLINPAY_ALIPAY])) {
- $is_official = $this->_from == self::PAY_FROM_OFFICIAL;
- $result = Allinpay::pay($this->pay_type, $this->order,OrderNo::ORDER_MALL, $goods_names, 0, false, $balance_price, is_h5(), $is_official);
- $t->commit();
- return $result;
- }
- if (in_array($this->pay_type, [Order::PAY_TYPE_ADAPAY_WX, Order::PAY_TYPE_ADAPAY_ALIPAY])) {
- $is_official = $this->_from == self::PAY_FROM_OFFICIAL;
- $result = Adapay::create($this->pay_type, $this->order,OrderNo::ORDER_MALL, $goods_names, 0, false, $balance_price, false, $is_official);
- $t->commit();
- return $result;
- }
-
- if (in_array($this->pay_type, [Order::PAY_TYPE_ADAPAY_QUICKPAY_FRONTPAY, Order::PAY_TYPE_HUIFU_V2_JSPAY_WX])) {
- $is_official = $this->_from == self::PAY_FROM_OFFICIAL;
- $result = AdapayV2::create($this->pay_type, $this->order,OrderNo::ORDER_MALL, $goods_names, 0, false, $balance_price, false, $is_official);
- $t->commit();
- return $result;
- }
-
- if ($this->pay_type == 4) {
- if ($this->_from == self::PAY_FROM_MINI) {
- if (\Yii::$app->prod_is_dandianpu() && !Store::hasIncoming($this->order->store_id) && self_mini() === false) {
- $result = Alipay::mini($this->order, $goods_names, $this->user, '', '', 0, $balance_price, $this);
- } else {
- if (is_profit_pay('ali')) {
- $result = AlipayProfit::mini($this->order, $goods_names, $this->user, '', '', false, 0, $balance_price, $this);
- } else {
- $result = Alipay::mini($this->order, $goods_names, $this->user, '', '', 0, $balance_price, $this);
- }
- }
- if (isset($result['code']) && $result['code'] == 1) {
- return $result;
- }
- $t->commit();
- return [
- 'code' => 0,
- 'msg' => 'success',
- 'data' => $result['data']['trade_no'],
- 'body' => $goods_names
- ];
- } else if ($this->_from == self::PAY_FROM_H5) {
- if (\Yii::$app->prod_is_dandianpu() && !Store::hasIncoming($this->order->store_id, 'alipay', is_h5())) {
- $result = Alipay::wap($this->order,$goods_names);
- } else {
- if (is_profit_pay()) {
- $result = AlipayProfit::wap($this->order, $goods_names);
- } else {
- $result = Alipay::wap($this->order, $goods_names);
- }
- }
- $t->commit();
- if($result['code']){
- return $result;
- }
- return [
- 'code' => 0,
- 'msg' => 'success',
- 'data' => $result['data'],
- 'body' => $goods_names
- ];
- } else {
- if (is_profit_pay('ali')) {
- $result = AlipayProfit::app($this->order, $goods_names, $this->user, '', $balance_price);
- } else {
- $result = Alipay::app($this->order, $goods_names, $this->user, '', $balance_price);
- }
- if (isset($result['code']) && $result['code'] == 1) {
- $t->commit();
- return $result;
- }
- $t->commit();
- return [
- 'code' => 0,
- 'msg' => 'success',
- 'data' => $result['data'],
- 'body' => $goods_names
- ];
- }
- }
-
- // 抖音小程序
- if ($this->pay_type == 5) {
- $result = ByteDance::pay($this->order, '', $goods_names, 0 , $balance_price);
- if (isset($result['code']) && $result['code'] == 1) {
- return $result;
- }
- $t->commit();
- return [
- 'code' => 0,
- 'msg' => 'success',
- 'data' => $result['data'],
- ];
- }
- }
- //货到付款和余额支付数据处理
- if ($this->pay_type == 2 || $this->pay_type == 3) {
- $order = $this->order;
- // 中间页选择货到付款,需要存入支付类型
- if ($this->pay_type == 2) {
- $order->is_pay = 0;
- $order->pay_type = 2;
- $order->save();
- }
- //余额支付 用户余额变动
- if ($this->pay_type == 3) {
- $user_id = $order->user_id;
- //判断好友代付
- if ((int)get_user_id() !== (int)$order->user_id) {
- $user = User::findOne(['binding' => get_user()->binding, 'is_delete' => 0, 'store_id' => $order->store_id]);//查询当前商城的用户id
- $user_id = $user->id;
- if (empty($user)) {
- $store = Store::findOne($order->store_id);
- return [
- 'code' => 1,
- 'msg' => '支付失败,用户在商城:' . $store->name . '未注册用户。',
- ];
- }
- }
- $user = User::findOne(['id' => $user_id]);
- if ($user->money < $order->pay_price) {
- $t->rollBack();
- return [
- 'code' => 1,
- 'msg' => '支付失败,余额不足',
- ];
- }
- // $user->money -= floatval($order->pay_price);
- $res = AccountLog::saveLog($user->id, floatval($order->pay_price), AccountLog::TYPE_BALANCE, AccountLog::LOG_TYPE_EXPEND, 1, $order->id, "商城余额支付,订单号为:{$order->order_no}。");
- if (!$res) {
- $t->rollBack();
- return [
- 'code' => 1,
- 'msg' => '支付失败'
- ];
- }
- $order->is_pay = 1;
- $order->pay_type = 3;
- $order->trade_status = Order::ORDER_FLOW_NO_SEND;
- $order->pay_time = time();
- $order->is_combine_pay = 0;
- $order->combine_money = 0;
- if ($order->user_id != $user->id) {
- $order->pay_user_id = $user->id;
- }
- if (!$order->save()) {
- $t->rollBack();
- return [
- 'code' => 1,
- 'msg' => '支付失败'
- ];
- }
- }
- // 同城配送订单下单
- // if ($order->is_delivery == 1) {
- // $detail_goods = OrderDetail::find()->where(['order_id' => $order->id])->select('goods_name as name, pic, num, total_price as price')->asArray()->all();
- // Delivery::addOrder($detail_goods, $order->order_no);
- // }
- // 支付完成后,相关操作
- (new NotifyForm())->videoGoodsShare($order);
- $form = new OrderComplete();
- $form->order_id = $order->id;
- $form->order_type = 0;
- $form->store_id = $order->store_id;
- $form->notify();
- CloudPrint::doPrint($this->order->id, 0, $this->order->store_id);
- $t->commit();
- return [
- 'code' => 0,
- 'msg' => '支付成功',
- 'data' => ''
- ];
- }
- if($this->pay_type == Order::PAY_TYPE_OFFLINE){
- $order = $this->order;
- $order->is_pay = 0;
- $order->pay_type = Order::PAY_TYPE_OFFLINE;
- $order->save();
-
- if(is_string($this->pay_offline)){
- $this->pay_offline = json_decode($this->pay_offline, true);
- }
- $payOffline = \app\models\OrderPayOffline::addPay(get_store_id(), get_user_id(), $this->order->id, $this->pay_offline['type'], $this->pay_offline['desc'], $this->pay_offline['pic_list']);
- if($payOffline['code'] != 0){
- $t->rollBack();
- return $payOffline;
- }
- $t->commit();
- return [
- 'code' => 0,
- 'msg' => '操作成功,请等待审核',
- 'data' => ''
- ];
-
- }
- if($this->pay_type == Order::PAY_TYPE_MONTH){
- $order = $this->order;
- $order->is_pay = 1;
- $order->pay_type = Order::PAY_TYPE_MONTH;
- $order->trade_status = Order::ORDER_FLOW_NO_SEND;
- $order->pay_time = time();
- $order->save();
- $payMonth = UserPayMonth::addPay(get_user_id(), $order);
- if($payMonth['code']){
- $t->rollBack();
- return $payMonth;
- }
- // 支付完成后,相关操作
- (new NotifyForm())->videoGoodsShare($order);
- $form = new OrderComplete();
- $form->order_id = $order->id;
- $form->order_type = 0;
- $form->store_id = $order->store_id;
- $form->notify();
- CloudPrint::doPrint($this->order->id, 0, $this->order->store_id);
- $t->commit();
- return [
- 'code' => 0,
- 'msg' => '支付成功',
- 'data' => $payMonth,
- ];
-
- }
- } elseif ($this->order_id_list) { //多个订单合并付款
- $order_id_list = json_decode($this->order_id_list, true);
- if (!$order_id_list) {
- $order_id_list = explode(',', $this->order_id_list);
- }
- if (!$order_id_list) {
- $t->rollBack();
- return [
- 'code' => 1,
- 'msg' => '数据错误:订单格式不正确。',
- ];
- }
- $order_list = [];
- $total_pay_price = 0;
-
- foreach ($order_id_list as $order_id) {
- $order = Order::findOne([
- 'store_id' => $this->store_id,
- 'id' => $order_id,
- 'is_delete' => 0,
- ]);
- if (!$order) {
- $t->rollBack();
- return [
- 'code' => 1,
- 'msg' => '订单不存在',
- ];
- }
- if ($order->is_pay == 1) {
- $t->rollBack();
- return [
- 'code' => 1,
- 'msg' => '存在已付款的订单,订单合并支付失败,请到我的订单重新支付。',
- ];
- }
- try {
- $this->checkGoodsConfine($order);
- } catch (\Exception $e) {
- $t->rollBack();
- return [
- 'code' =>1,
- 'msg' => $e->getMessage()
- ];
- }
- $order_list[] = $order;
- $total_pay_price += doubleval($order->pay_price);
-
- $this->setReturnData($order);
- }
-
- // 余额抵扣支付
- $balance_price = 0;
- if ($this->is_combine) {
- // todo 合并订单支付 不能使用混合支付
- if($this->user->money < $total_pay_price){
- $t->rollBack();
- return ['code'=>1,'msg' => '余额不足'];
- }
- $this->pay_type = 3;
- // if ($this->user->money >= $total_pay_price) {
- // $this->pay_type = 3;
- // } else {
- // $balance_price = $this->user->money;
- // $this->order->combine_money = $this->user->money;
- // $this->order->is_combine_pay = Order::IS_COMBINE_PAY;
- // $this->order->save();
- // }
- } else {
- foreach($order_id_list as $order_id){
- $order = Order::findOne([
- 'store_id' => $this->store_id,
- 'id' => $order_id,
- 'is_delete' => 0,
- ]);
- $order->combine_money = 0;
- $order->is_combine_pay = Order::NOT_COMBINE_PAY;
- $order->save();
- }
- }
-
- // 微信支付
- if ($this->pay_type == 1) {
- // \Yii::error($this->_from);
- if ($this->_from == self::PAY_FROM_APP) {
- if (\Yii::$app->prod_is_dandianpu() && !Store::hasIncoming(get_store_id()) && self_mini() === false) {
- $result = WechatPay::orderUnify($order_list,OrderNo::ORDER_UNION, null, $total_pay_price, false, $balance_price);
- } else {
- if (is_profit_pay()) {
- $result = WechatNewPay::orderUnify($order_list,OrderNo::ORDER_UNION, null, $total_pay_price, false, $balance_price);
- } else {
- $result = WechatPay::orderUnify($order_list,OrderNo::ORDER_UNION, null, $total_pay_price, false, $balance_price);
- }
- }
- } else if ($this->_from == self::PAY_FROM_H5) {
- if (\Yii::$app->prod_is_dandianpu() && !Store::hasIncoming(get_store_id()) && self_mini() === false) {
- $result = WechatPay::orderUnify($order_list,OrderNo::ORDER_UNION, null, $total_pay_price, false, $balance_price, true);
- } else {
- if (is_profit_pay()) {
- $result = WechatNewPay::orderUnify($order_list,OrderNo::ORDER_UNION, null, $total_pay_price, false, $balance_price, true);
- } else {
- $result = WechatPay::orderUnify($order_list,OrderNo::ORDER_UNION, null, $total_pay_price, false, $balance_price, true);
- }
- }
- } else if ($this->_from == self::PAY_FROM_OFFICIAL) {
- $self_mini = intval(\app\models\Option::get('self_mini', get_store_id(), 'store', 0)['value']);
-
- if (\Yii::$app->prod_is_dandianpu() && !Store::hasIncoming(get_store_id()) && !$self_mini) {
- $result = WechatPay::orderUnify($order_list,OrderNo::ORDER_UNION, null, $total_pay_price, false, $balance_price, false, true);
- } else {
- if (is_profit_pay()) {
- $result = WechatNewPay::orderUnify($order_list,OrderNo::ORDER_UNION, null, $total_pay_price, false, $balance_price, false, true);
- } else {
- $result = WechatPay::orderUnify($order_list,OrderNo::ORDER_UNION, null, $total_pay_price, false, $balance_price, false, true);
- }
- }
- } else {
- if (\Yii::$app->prod_is_dandianpu() && !Store::hasIncoming(get_store_id()) && self_mini() === false) {
- $result = WechatPay::orderUnify($order_list,OrderNo::ORDER_UNION, null, $total_pay_price, false, $balance_price);
- } else {
- if (is_profit_pay() && Store::hasIncoming(get_store_id())) {
- $result = WechatNewPay::orderUnify($order_list,OrderNo::ORDER_UNION, null, $total_pay_price, false, $balance_price);
- } else {
- $result = WechatPay::orderUnify($order_list,OrderNo::ORDER_UNION, null, $total_pay_price, false, $balance_price);
- }
- }
- }
- if (isset($result['code']) && $result['code'] == 1) {
- $t->rollBack();
- return $result;
- }
- CloudPrint::doPrint($this->order->id, 0, $this->order->store_id);
- $t->commit();
- return [
- 'code' => 0,
- 'msg' => 'success',
- 'data' => (object)$result['data'],
- 'res' => $result['res'],
- 'body' => $result['body'],
- ];
- }
-
- if ($this->pay_type == 4) {
- if ($this->_from == self::PAY_FROM_MINI) {
- if (\Yii::$app->prod_is_dandianpu() && !Store::hasIncoming(get_store_id()) && self_mini() === false) {
- $result = Alipay::mini($order_list, '', $this->user, '', OrderNo::ORDER_UNION, $total_pay_price, $balance_price, $this);
- } else {
- if (is_profit_pay('ali')) {
- $result = AlipayProfit::mini($order_list, '', $this->user, '', OrderNo::ORDER_UNION, false, $total_pay_price, $balance_price, $this);
- } else {
- $result = Alipay::mini($order_list, '', $this->user, '', OrderNo::ORDER_UNION, $total_pay_price, $balance_price, $this);
- }
- }
- if (isset($result['code']) && $result['code'] == 1) {
- return $result;
- }
- $t->commit();
- return [
- 'code' => 0,
- 'msg' => 'success',
- 'data' => $result['data']['trade_no'],
- 'body' => '订单合并支付'
- ];
- } else if ($this->_from == self::PAY_FROM_H5) {
- if (\Yii::$app->prod_is_dandianpu() && !Store::hasIncoming(get_store_id()) && self_mini() === false) {
- $result = Alipay::wap($order_list,'','',OrderNo::ORDER_UNION,$total_pay_price,$balance_price, $this);
- } else {
- if (is_profit_pay()) {
- $result = AlipayProfit::wap($order_list, '','',OrderNo::ORDER_UNION,$total_pay_price,$balance_price, $this);
- } else {
- $result = Alipay::wap($order_list, '','',OrderNo::ORDER_UNION,$total_pay_price,$balance_price, $this);
- }
- }
- $t->commit();
- return [
- 'code' => 0,
- 'msg' => 'success',
- 'data' => $result['data'],
- 'body' => '订单合并支付'
- ];
- } else {
- if (is_profit_pay('ali')) {
- $result = AlipayProfit::app($this->order, '', $this->user,OrderNo::ORDER_UNION,$total_pay_price,$this->user, $balance_price);
- } else {
- $result = Alipay::app($this->order, '', $this->user,OrderNo::ORDER_UNION,$total_pay_price, $balance_price);
- }
- if (isset($result['code']) && $result['code'] == 1) {
- $t->commit();
- return $result;
- }
- $t->commit();
- return [
- 'code' => 0,
- 'msg' => 'success',
- 'data' => $result['data'],
- 'body' => '订单合并支付'
- ];
- }
- // if (is_profit_pay('ali')) {
- // $result = AlipayProfit::mini($this->order, '', $this->user, '', OrderNo::ORDER_UNION, false, $total_pay_price, $balance_price);
- // } else {
- // $result = Alipay::mini($this->order, '', $this->user, '', OrderNo::ORDER_UNION, $total_pay_price, $balance_price);
- // }
- // if (isset($result['code']) && $result['code'] == 1) {
- // return $result;
- // }
- // $t->commit();
- // return [
- // 'code' => 0,
- // 'msg' => 'success',
- // 'data' => $result['data']['trade_no'],
- // ];
- }
-
-
- // 抖音
- if ($this->pay_type == 5) {
- $result = ByteDance::pay($this->order, OrderNo::ORDER_UNION, '', $total_pay_price , $balance_price);
- if (isset($result['code']) && $result['code'] == 1) {
- return $result;
- }
- $t->commit();
- return [
- 'code' => 0,
- 'msg' => 'success',
- 'data' => $result['data']['trade_no'],
- ];
- }
-
- //货到付款和余额支付数据处理
- if ($this->pay_type == 2 || $this->pay_type == 3) {
- //余额支付 用户余额变动
- if ($this->pay_type == 3) {
- if ($this->user->money < $total_pay_price) {
- $t->rollBack();
- return [
- 'code' => 1,
- 'msg' => '支付失败,余额不足',
- ];
- }
- $this->user->money = $this->user->money - $total_pay_price;
- if (!$this->user->save()) {
- $t->rollBack();
- return [
- 'code' => 1,
- 'msg' => '支付失败'
- ];
- } else {
- AccountLog::saveLog($this->user->id, floatval($total_pay_price), AccountLog::TYPE_BALANCE, AccountLog::LOG_TYPE_EXPEND, 1, 0, '合并订单支付');
- }
- foreach ($order_list as $order) {
- $order->is_pay = 1;
- $order->pay_type = 3;
- $order->pay_time = time();
- // 合并订单支付后修改订单状态为未发货
- $order->trade_status = Order::ORDER_FLOW_NO_SEND;
- $order->save();
- }
- }
- foreach ($order_list as $order) {
- (new NotifyForm())->videoGoodsShare($order);
- // 支付完成后,相关操作
- $form = new OrderComplete();
- $form->order_id = $order->id;
- $form->order_type = 0;
- $form->store_id = get_store_id();
- $form->notify();
- }
- CloudPrint::doPrint($this->order->id, 0, $this->order->store_id);
- //查询订单信息
- //var_dump($is_on);
- $t->commit();
- return [
- 'code' => 0,
- 'msg' => '订单提交成功'
- ];
- }
- }
- } catch (\Throwable $e) {
- \Yii::error($e);
- $t->rollBack();
- return [
- 'code' => 1,
- 'msg' => $e->getMessage(),
- 'data' => $e->getTrace(),
- ];
- }
- }
- public function meetOrderPay()
- {
- $this->wechatPay = \Yii::$app->controller->wechatPay;
- if (!$this->validate()) {
- return [
- 'code' => 1,
- 'msg' => $this->getErrorSummary(false)[0],
- ];
- }
- if(empty($this->order_id)){
- return ['code'=>1,'msg'=>'订单ID错误'];
- }
- $this->order = Order::find()->where(['id'=>$this->order_id,'pay_type'=>2])->one();
- if(!$this->order){
- return ['code' => 1, 'msg' => '订单不存在'];
- }
- if($this->order->is_pay == Order::IS_PAY_TRUE){
- return ['code' => 1, 'msg' => '订单已支付,请勿重复支付'];
- }
- $goods_names = '';
- $goods_list = OrderDetail::find()->alias('od')->leftJoin(['g' => Goods::tableName()],
- 'g.id=od.goods_id')->where(['od.order_id' => $this->order->id, 'od.is_delete' => 0,
- ])->select('g.name,g.verify_card_id')->asArray()->all();
- foreach ($goods_list as $goods) {
- $goods_names .= $goods['name'] . ';';
- }
- $goods_names = mb_substr($goods_names, 0, 32, 'utf-8');
- // 不会存在余额混合支付
- $balance_price = 0;
- $t = \Yii::$app->db->beginTransaction();
- // 微信支付
- if($this->pay_type == 1){
- if ($this->_from == self::PAY_FROM_APP) {
- if (is_profit_pay()) {
- $result = WechatNewPay::orderUnify($this->order,OrderNo::ORDER_MALL, $goods_names, 0, true, $balance_price);
- } else {
- $result = WechatPay::orderUnify($this->order,OrderNo::ORDER_MALL, $goods_names, 0, true, $balance_price);
- }
- } else if ($this->_from == self::PAY_FROM_H5) {
- if (is_profit_pay()) {
- $result = WechatNewPay::orderUnify($this->order,OrderNo::ORDER_MALL, $goods_names, 0, false, $balance_price, true);
- } else {
- $result = WechatPay::orderUnify($this->order,OrderNo::ORDER_MALL, $goods_names, 0, false, $balance_price, true);
- }
- } else if ($this->_from == self::PAY_FROM_OFFICIAL) {
- if (is_profit_pay()) {
- $result = WechatNewPay::orderUnify($this->order,OrderNo::ORDER_MALL, $goods_names, 0, false, $balance_price, false, true);
- } else {
- $result = WechatPay::orderUnify($this->order,OrderNo::ORDER_MALL, $goods_names, 0, false, $balance_price, false, true);
- }
- } else {
- if (is_profit_pay()) {
- $result = WechatNewPay::orderUnify($this->order,OrderNo::ORDER_MALL, $goods_names, 0, false, $balance_price);
- } else {
- $result = WechatPay::orderUnify($this->order,OrderNo::ORDER_MALL, $goods_names, 0, false, $balance_price);
- }
- }
- if (isset($result['code']) && $result['code'] == 1) {
- if ($this->_from == self::PAY_FROM_OFFICIAL) {
- $result['wechat_platform_open_id'] = get_user()->wechat_platform_open_id;
- $result['h5_auth_link'] = LoginForm::getAuthLink();
- }
- return $result;
- }
- CloudPrint::doPrint($this->order->id, 0, $this->order->store_id);
- $t->commit();
- return [
- 'code' => 0,
- 'msg' => 'success',
- 'data' => (object)$result['data'],
- 'res' => $result['res'],
- 'body' => $goods_names
- ];
- }
- // 支付宝支付
- if($this->pay_type == 4){
- if ($this->_from == self::PAY_FROM_MINI) {
- if (is_profit_pay('ali')) {
- $result = AlipayProfit::mini($this->order, $goods_names, $this->user, '', '', false, 0, $balance_price);
- } else {
- $result = Alipay::mini($this->order, $goods_names, $this->user, '', '', 0, $balance_price);
- }
- if (isset($result['code']) && $result['code'] == 1) {
- return $result;
- }
- $t->commit();
- return [
- 'code' => 0,
- 'msg' => 'success',
- 'data' => $result['data']['trade_no'],
- 'body' => $goods_names
- ];
- } else {
- if (is_profit_pay('ali')) {
- $result = AlipayProfit::app($this->order, $goods_names, $this->user, $balance_price);
- } else {
- $result = Alipay::app($this->order, $goods_names, $this->user, $balance_price);
- }
- if (isset($result['code']) && $result['code'] == 1) {
- $t->commit();
- return $result;
- }
- $t->commit();
- return [
- 'code' => 0,
- 'msg' => 'success',
- 'data' => $result['data'],
- 'body' => $goods_names
- ];
- }
- }
- return ['code' => 1,'msg' => '货到付款支付错误'];
- }
- /**
- * 设置佣金
- * @param Order $order
- * @return mixed
- */
- public function setReturnData($order)
- {
- $form = new ShareMoneyForm();
- $form->order = $order;
- $form->order_type = 0;
- //处理联盟券 用户减少
- if($order->take_price > 0){
- $user = User::findOne($order->user_id);
- $saas_user = SaasUser::findOne(['mobile' => $user->binding]);
- if($saas_user){
- $take_price = $order->take_price;
- $before = $saas_user->league_price;
- $saas_user->updateCounters(['league_price' => -floatval($take_price)]);
- \app\models\SaaSLeaguePriceLog::setLeaguePriceLog(
- $order->store_id,
- $saas_user->id,
- $take_price,
- $before,
- \app\models\SaaSLeaguePriceLog::TYPE_DEDUCTION,
- \app\models\SaaSLeaguePriceLog::TAKE_TYPE,
- \app\models\SaaSLeaguePriceLog::ROLE_USER,
- $order->id
- );
- }
- }
- return $form->setData();
- }
- /**
- * @param Order $order
- * @throws \Exception
- */
- private function checkGoodsConfine($order)
- {
- foreach ($order->detail as $detail) {
- /* @var Goods $goods*/
- /* @var OrderDetail $detail*/
- $goods = $detail->goods;
- if ($goods->confine_count && $goods->confine_count > 0) {
- $user = User::findOne($order->user_id);
- $goodsNum = Goods::getBuyNum($user, $goods->id);
- if ($goodsNum) {
- } else {
- $goodsNum = 0;
- }
- $goodsTotalNum = intval($goodsNum + $detail->num);
- if ($goodsTotalNum > $goods->confine_count) {
- throw new \Exception('商品:' . $goods->name . ' 超出购买数量', 1);
- }
- }
- //起订数量
- if (($goods['order_min_count'] && $goods['order_min_count'] > 0)) {
- if ($detail->num < $goods['order_min_count']) {
- throw new \Exception('商品:' . $goods->name . ' 起订数量' . $goods['order_min_count'], 1);
- }
- }
- if (in_array($order->order_type, [1, 2])) {
- $res = $this->bookCheckGoodsNum($goods, $detail, $order);
- if ($res['code'] > 0) {
- throw new \Exception($res['msg'], 1);
- }
- }
- }
- }
- /**
- * @param Goods $goods
- * @param OrderDetail $detail
- * @param Order $order
- */
- private function bookCheckGoodsNum($goods, $detail, $order)
- {
- // 判断时间
- if (time() - $order->created_at > 15 * 60) {
- return [
- 'code' => 1,
- 'msg' => '订单已过支付时间,将自动取消'
- ];
- }
- $attr = Json::decode($detail->attr);
- // 酒店预约
- if ($order->order_type == 1) {
- // $date_book = GoodsBook::findOne(['goods_id' => $goods->id])->date_book;
- // $date_book = Json::decode($date_book);
- // if (!$date_book) {
- // return [
- // 'code' => 1,
- // 'msg' => '数据异常'
- // ];
- // }
- // $data_config = array_combine(array_column($date_book, 'date'), array_column($date_book, 'num'));
- // foreach ($attr as $value) {
- // if (isset($data_config[$value['date']])) {
- // if ($data_config[$value['date']] < $detail->num) {
- // return [
- // 'code' => 1,
- // 'msg' => '选中日期' . $value['date'] . '内暂无房源'
- // ];
- // }
- // } else {
- // return [
- // 'code' => 1,
- // 'msg' => '未找到预约时间下相关商品数据'
- // ];
- // }
- // }
- }
- // 服务预约
- if ($order->order_type == 2) {
- $service_book = GoodsBook::findOne(['goods_id' => $goods->id])->service_book;
- $service_book = Json::decode($service_book);
- if (!$service_book) {
- return [
- 'code' => 1,
- 'msg' => '数据异常'
- ];
- }
- $date_data = $this->getDateByInterval(7);
- $count = 0;
- $new_arr = [
- 'data' => []
- ];
- $order = Order::find()->alias('o')
- ->leftJoin(['od' => OrderDetail::tableName()], 'o.id = od.order_id')
- ->where(['o.trade_status' => [0, 2, 3], 'o.is_delete' => 0, 'o.order_type' => 2, 'goods_id' => $goods['id']])
- ->andWhere(['>', 'o.created_at', strtotime(date("Y-m-d"))])
- ->select('od.attr, od.num')->asArray()->all();
- foreach ($date_data as $index => $datum) {
- $new_arr['data'][$index]['date'] = $datum;
- $new_arr['data'][$index]['time'] = $service_book['data'][0]['time'];
- }
- if (!$new_arr) {
- return [
- 'code' => 1,
- 'msg' => '数据异常'
- ];
- }
- $service_book = $new_arr['data'];
- $service_book_date = array_column($service_book, NULL, 'date');
- $service_book_time = $service_book_date[$attr['date']]['time'];
- $num = 0;
- $is = false;
- foreach ($order as $item) {
- $item['attr'] = json_decode($item['attr'], true);
- if ($item['attr']['date'] === $attr['date']) {
- if ($attr['time'] == $item['attr']['time']) {
- $num += $item['num'];
- }
- }
- }
- foreach ($service_book_time as $m) {
- foreach ($m['times'] as $n) {
- $is = true;
- if ($n['time'] == $attr['time']) {
- if (($detail->num + $num) > $n['num']) {
- return [
- 'code' => 1,
- 'msg' => $n['time'] . '时间段内暂不可预约'
- ];
- }
- }
- }
- }
- if ($is === false) {
- return [
- 'code' => 1,
- 'msg' => '未找到预约时间下相关商品数据'
- ];
- }
- }
- return [
- 'code' => 0,
- 'msg' => 'success'
- ];
- }
- public function getDateByInterval(int $num) :array
- {
- //var_dump($st, $et);die;
- $returnData = [];
- $i = 0;
- do {
- $temp = date('Y-m-d', strtotime('+' . $i . ' day', strtotime(date('Y-m-d'))));
- $returnData[] = $temp;
- $i++;
- } while ($i < $num);
- return $returnData;
- }
- }
|