| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208 |
- <?php
- /**
- * Niushop商城系统 - 团队十年电商经验汇集巨献!
- * =========================================================
- * Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
- * ----------------------------------------------
- * 官方网址: https://www.niushop.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);
- }
- }
|