admin/addon/giftcard/model/order/GiftCardOrderOperation.php

157 lines
5.5 KiB
PHP

<?php
namespace addon\giftcard\model\order;
use addon\giftcard\model\card\VirtualCard;
use addon\giftcard\model\giftcard\CardStat;
use app\model\BaseModel;
use app\model\member\MemberAccount;
use app\model\system\Pay;
use app\model\system\Stat;
class GiftCardOrderOperation extends BaseModel
{
/**
* 只涉及订单业务交互
* @param $params
*/
public function orderPay($params)
{
$out_trade_no = $params[ 'out_trade_no' ];
$order_model = new GiftCardOrder();
$order_condition = array (
[ 'out_trade_no', '=', $out_trade_no ]
);
$order_info = $order_model->getOrderInfo($order_condition)[ 'data' ] ?? [];
if (empty($order_info))
return $this->error();
$giftcard_id = $order_info[ 'giftcard_id' ];
$num = $order_info[ 'num' ];//礼品卡套数
$order_goods_model = new GiftCardOrderGoods();
$order_goods_list = $order_goods_model->getOrderGoodsList([ [ 'order_id', '=', $order_info[ 'order_id' ] ] ])[ 'data' ] ?? [];
$total_balance = 0;
foreach ($order_goods_list as $k => $v) {
$total_balance += $v[ 'total_balance' ];
}
//订单支付后生成礼品卡
$virtual_card_model = new VirtualCard();
$order_info[ 'source' ] = 'order';
$order_info[ 'goods_list' ] = $order_goods_list;
$order_info[ 'balance' ] = $total_balance;
$temp_num = 0;
model('giftcard_order')->startTrans();
try {
while ($temp_num < $num) {
$virtual_card_model->addCard($order_info);
$temp_num++;
}
$pay_type = $params[ 'pay_type' ];
//订单相关操作(业务复杂后会拆开步骤)
$pay_type_list = $order_model->getPayType();
$data = array (
'order_status' => 'complete',
'pay_status' => 1,
'pay_time' => time(),
'pay_type' => $pay_type,
'pay_type_name' => $pay_type_list[ $pay_type ]
);
model('giftcard_order')->update($data, $order_condition);
//可能是消费奖励
event('GiftCardOrderPay', $order_info);
//业务和支付的融合
$pay_money = new Pay();
$pay_info = $pay_money->getPayInfo($out_trade_no)[ 'data' ] ?? [];
if (!empty($pay_info)) {
$balance = $pay_info[ 'balance' ];
$balance_money = $pay_info[ 'balance_money' ];
$member_account_model = new MemberAccount();
if ($balance > 0) {
$use_res = $member_account_model->addMemberAccount($order_info[ 'site_id' ], $order_info[ 'member_id' ], 'balance', -$balance, 'order', $order_info[ 'order_id' ], '订单消费扣除');
if ($use_res[ 'code' ] != 0) {
model('giftcard_order')->rollback();
return $use_res;
}
}
if ($balance_money > 0) {
$use_res = $member_account_model->addMemberAccount($order_info[ 'site_id' ], $order_info[ 'member_id' ], 'balance_money', -$balance_money, 'order', $order_info[ 'order_id' ], '订单消费扣除');
if ($use_res[ 'code' ] != 0) {
model('giftcard_order')->rollback();
return $use_res;
}
}
}
model('giftcard_order')->commit();
//活动增加销量
( new CardStat() )->stat([ 'stat_type' => 'sale', 'giftcard_id' => $giftcard_id ]);
$stat_model = new Stat();
$stat_model->switchStat([ 'type' => 'gift_card_order', 'data' => [ 'order_id' => $order_info[ 'order_id' ], 'site_id' => $order_info[ 'site_id' ] ] ]);
return $this->success();
} catch (\Exception $e) {
model('giftcard_order')->rollback();
return $this->error('', $e->getMessage());
}
}
/**
* 删除礼品卡订单(伪删除)
* @param $condition
*/
public function delete($condition)
{
model('giftcard_order')->update([ 'is_delete' => 1 ], $condition);
return $this->success();
}
/**
* 订单关闭
* @param $params
* @return array
*/
public function close($params)
{
$order_id = $params[ 'order_id' ];
$site_id = $params[ 'site_id' ] ?? 0;
$close_cause = $params[ 'close_cause' ] ?? '';
$condition = array (
[ 'order_id', '=', $order_id ]
);
if ($site_id > 0) {
$condition[] = [ 'site_id', '=', $site_id ];
}
$order_model = new GiftCardOrder();
$info = $order_model->getOrderInfo($condition, 'order_status, out_trade_no, pay_status')[ 'data' ] ?? [];
if ($info[ 'order_status' ] == 'close')
return $this->error([], '订单已关闭');
$data = array (
'order_status' => 'close',
'close_time' => time(),
);
if (!empty($close_cause)) {
$data[ 'close_cause' ] = $close_cause;
}
//关闭支付单据(没支付的话)
if ($info[ 'pay_status' ] == 0) {
$pay_model = new Pay();
$pay_result = $pay_model->deletePay($info[ 'out_trade_no' ]);
if ($pay_result[ 'code' ] < 0) {
return $this->error();
}
}
model('giftcard_order')->update($data, $condition);
return $this->success();
}
}