208 lines
7.7 KiB
PHP
208 lines
7.7 KiB
PHP
<?php
|
|
/**
|
|
* ThinkShop商城系统 - 团队十年电商经验汇集巨献!
|
|
* =========================================================
|
|
* Copy right 2019-2029 成都云之牛科技有限公司, 保留所有权利。
|
|
* ----------------------------------------------
|
|
* 官方网址: https://www.cdcloudshop.com
|
|
* =========================================================
|
|
*/
|
|
|
|
namespace addon\giftcard\model;
|
|
|
|
use app\model\BaseModel;
|
|
use app\model\system\Cron;
|
|
use app\model\system\Stat;
|
|
|
|
/**
|
|
* 订单
|
|
*/
|
|
class Order extends BaseModel
|
|
{
|
|
// 订单待付款
|
|
const ORDER_CREATE = 0;
|
|
//已完成
|
|
const ORDER_PAY = 1;
|
|
//订单已取消
|
|
const ORDER_CANCEL = 2;
|
|
|
|
/**
|
|
* 获取订单详细列表
|
|
* @param array $condition
|
|
* @param int $page
|
|
* @param int $page_size
|
|
* @param string $order
|
|
* @param string $field
|
|
* @param string $alias
|
|
* @param array $join
|
|
* @param null $group
|
|
* @param null $limit
|
|
* @return array
|
|
*/
|
|
public function orderPagelist($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '', $field = '*', $alias = 'a', $join = [], $group = null, $limit = null)
|
|
{
|
|
$list = model("giftcard_order")->pageList($condition, $field, $order, $page, $page_size, $alias, $join, $group, $limit);
|
|
|
|
if ($list[ 'list' ]) {
|
|
foreach ($list[ 'list' ] as $key => $val) {
|
|
$goods_num_list = model('goods_giftcard')->getList([ [ 'giftcard_id', '=', $val[ 'card_id' ] ], [ 'site_id', '=', $val[ 'site_id' ] ] ], 'num');
|
|
if ($goods_num_list) {
|
|
$goods_arr = array_column($goods_num_list, 'num');
|
|
$goods_num = array_sum($goods_arr);
|
|
} else {
|
|
$goods_num = 0;
|
|
}
|
|
$list[ 'list' ][ $key ][ 'goods_num' ] = $goods_num;
|
|
}
|
|
}
|
|
return $this->success($list);
|
|
}
|
|
|
|
public function updateOrder($order_id, $site_id, $data)
|
|
{
|
|
$res = model('giftcard_order')->update($data, [ [ 'order_id', '=', $order_id ], [ 'site_id', '=', $site_id ] ]);
|
|
return $this->success($res);
|
|
}
|
|
|
|
public function getOrderInfo($order_id, $site_id, $field = '*', $alias = 'a', $join = [])
|
|
{
|
|
$res = model('giftcard_order')->getInfo([ [ 'order_id', '=', $order_id ], [ 'site_id', '=', $site_id ] ], $field, $alias, $join);
|
|
return $this->success($res);
|
|
}
|
|
|
|
public function getTradeNo($order_id, $site_id, $field = 'out_trade_no')
|
|
{
|
|
$res = model('giftcard_order')->getInfo([ [ 'order_id', '=', $order_id ], [ 'site_id', '=', $site_id ] ], $field);
|
|
return $this->success($res[ 'out_trade_no' ]);
|
|
}
|
|
|
|
/**
|
|
* 订单线上支付回调
|
|
* @param $data
|
|
* @return array
|
|
*/
|
|
public function orderOnlinePay($data)
|
|
{
|
|
$out_trade_no = $data[ "out_trade_no" ];
|
|
$order_info = model("giftcard_order")->getInfo([ [ 'out_trade_no', '=', $out_trade_no ] ]);
|
|
|
|
if ($order_info[ 'status' ] != self::ORDER_CREATE) {
|
|
return $this->success();
|
|
}
|
|
|
|
$order_model = new \app\model\order\Order();
|
|
$pay_type_list = $order_model->getPayType();
|
|
model('giftcard_order')->startTrans();
|
|
try {
|
|
//修改订单状态
|
|
$order_data = [
|
|
'status' => self::ORDER_PAY,
|
|
'pay_time' => time(),
|
|
'pay_type' => $data[ 'pay_type' ],
|
|
'pay_type_name' => $pay_type_list[ $data[ 'pay_type' ] ],
|
|
];
|
|
|
|
model("giftcard_order")->update($order_data, [ [ 'order_id', '=', $order_info[ 'order_id' ] ] ]);
|
|
$cron_model = new Cron();
|
|
$cron_model->deleteCron([ [ 'relate_id', '=', $order_info[ 'order_id' ] ] ]);
|
|
|
|
$arecord_list = [];
|
|
for ($i = 0; $i < $order_info[ 'num' ]; $i++) {
|
|
$arecord_list[ $i ][ 'giftcard_id' ] = $order_info[ 'card_id' ];
|
|
$arecord_list[ $i ][ 'elect_status' ] = 0;
|
|
$arecord_list[ $i ][ 'create_time' ] = time();
|
|
$arecord_list[ $i ][ 'number' ] = $this->createNumber(9, 'C', $i + 1);
|
|
$arecord_list[ $i ][ 'site_id' ] = $order_info[ 'site_id' ];
|
|
$arecord_list[ $i ][ 'use_member_id' ] = $order_info[ 'member_id' ];
|
|
$arecord_list[ $i ][ 'source_from' ] = 1;
|
|
$arecord_list[ $i ][ 'no' ] = rand(10000000, 99999999);
|
|
$id[ $i ] = model('giftcard_record')->add($arecord_list[ $i ]);
|
|
$this->addCardCronClose($id[ $i ], $order_info[ 'card_id' ]);//增加关闭礼品卡自动事件
|
|
}
|
|
|
|
//支付成功减库存 加销量
|
|
$card_stock_model = new CardStock();
|
|
$card_stock_model->decStock($order_info);
|
|
|
|
|
|
model('giftcard_order')->commit();
|
|
|
|
event('BlindboxGoodsOrderPay', $order_info);
|
|
$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 $order_id
|
|
*/
|
|
public function addCardCronClose($record_id, $card_id)
|
|
{
|
|
//计算订单自动关闭时间
|
|
$gift_model = new GiftCard();
|
|
$gift_result = $gift_model->getGiftCardInfo([ [ 'id', '=', $card_id ] ], 'time_type,youxiao_time,youxiao_day');
|
|
$gift_result = $gift_result[ "data" ];
|
|
$cron_model = new Cron();
|
|
if ($gift_result[ 'time_type' ] == 2) {
|
|
$execute_time = $gift_result[ 'youxiao_time' ];
|
|
$cron_model->addCron(1, 0, "电子礼品卡到期", "GiftCardClose", $execute_time, $record_id);
|
|
} else if ($gift_result[ 'time_type' ] == 3) {
|
|
$now_time = time();
|
|
$execute_time = $now_time + $gift_result[ 'youxiao_day' ] * 86400;
|
|
$cron_model->addCron(1, 0, "电子礼品卡到期", "GiftCardClose", $execute_time, $record_id);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 关闭礼品卡订单
|
|
* @param $order_id
|
|
* @return array|\multitype
|
|
*/
|
|
public function cronCloseOrder($order_id)
|
|
{
|
|
$order_info = model('giftcard_order')->getInfo([ [ 'order_id', '=', $order_id ] ], 'status,card_id,num');
|
|
if (!empty($order_info)) {
|
|
|
|
if ($order_info[ 'status' ] == 0) {
|
|
$res = model('giftcard_order')->update([ 'status' => 2 ], [ [ 'order_id', '=', $order_id ] ]);
|
|
// 还原库存
|
|
$card_stock_model = new CardStock();
|
|
$card_stock_model->incStock($order_info);
|
|
return $this->success($res);
|
|
} else {
|
|
return $this->error("", "该订单已支付或关闭");
|
|
}
|
|
} else {
|
|
return $this->error("", "该订单不存在");
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 生成电子卡编号
|
|
*
|
|
* @param array $site_id
|
|
*/
|
|
public function createNumber($length = 8, $prefix = '', $i = 1)
|
|
{
|
|
$last_data = model('giftcard_record')->getList([], 'id', 'id DESC', '', '', '', 1);
|
|
if (!empty($last_data)) {
|
|
$number = $last_data[ 0 ][ 'id' ] + $i;
|
|
} else {
|
|
$number = 1;
|
|
}
|
|
$length = $length - (int) strlen($prefix);
|
|
$number = sprintf("%0" . $length . "d", $number);
|
|
return $prefix . $number;
|
|
}
|
|
|
|
public function getGiftcardOrderSum($where = [], $field = '', $alias = 'a', $join = null)
|
|
{
|
|
$data = model('giftcard_order')->getSum($where, $field, $alias, $join);
|
|
return $this->success($data);
|
|
}
|
|
} |