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); } }