admin/addon/giftcard/model/Order.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);
}
}