'现金支付', 'own_wechatpay' => '个人微信', 'own_alipay' => '个人支付宝', 'own_pos' => '个人pos刷卡', // 'MAKEUP' => '组合支付', // 'BALANCE' => '余额支付', 'ONLINE_PAY' => '在线支付', ); protected $order_type = [ 'goods' => '消费', // 'level' => '会员卡订单', 'card' => '售卡', 'recharge' => '充值', ]; public $status = [ 'topay' => '待付款', 'complete' => '已完成', 'close' => '已关闭', ]; public $cashier_type = [ 'online' => '线上', 'cashier' => '收银台' ]; public function getStatusList() { return $this->status; } /** * 支付方式 * @return array */ public function getPayType() { $pay_type = $this->pay_type; $onlinepay = event('PayType', []); if (!empty($onlinepay)) { foreach ($onlinepay as $k => $v) { $pay_type[$v['pay_type']] = $v['pay_type_name']; } } return $pay_type; } public function getOrderType() { return $this->order_type; } /** *关闭订单 * @param $condition * @return array */ public function orderClose($condition) { $list = model('store_cashier_order')->getList($condition); if (empty($list)) return $this->error(); $item_data = array( 'status' => 'close', ); $pay_model = new Pay(); model('store_cashier_order')->startTrans(); try { $stock_model = new Stock(); foreach ($list as $k => $v) { $item_order_id = $v['order_id']; $item_out_trade_no = $v['out_trade_no']; $pay_status = $v['pay_status']; $item_condition = array( ['order_id', '=', $item_order_id] ); $site_id = $v['site_id']; $member_id = $v['member_id']; $order_id = $v['order_id']; $store_cashier_order_goods_condition = array( ['order_id', '=', $order_id] ); $order_goods_list = model('store_cashier_order_goods')->getList($store_cashier_order_goods_condition); foreach ($order_goods_list as $k => $v) { $trade_type = $v['trade_type']; if (empty($trade_type) && $pay_status == 0) { $stock_model->incSaleStock($v); } } if ($pay_status == 0) { $offset_limit = []; //关闭交易单号 $pay_model->deletePay($item_out_trade_no); } else { //单纯退优惠券 $offset_limit = ['coupon', 'hongbao']; } $order_offset_model = new CashierOrderOffset(); $discount_params = array( 'site_id' => $site_id, 'member_id' => $member_id, 'order_id' => $order_id, 'limit' => $offset_limit ); $discount_result = $order_offset_model->orderOffsetRefund($discount_params); if ($discount_result['code'] < 0) { model('store_cashier_order')->rollback(); return $discount_result; } model('store_cashier_order')->update($item_data, $item_condition); } model('store_cashier_order')->commit(); return $this->success(); } catch ( \Exception $e ) { model('store_cashier_order')->rollback(); return $this->error('', $e->getMessage() . $e->getFile() . $e->getLine()); } } /** * 删除订单 * @param $condition */ public function deleteOrder($condition) { $info = model('store_cashier_order')->getInfo($condition); if (empty($info)) return $this->error([], '找不到订单'); $condition = array( ['site_id', '=', $info['site_id']], ['store_id', '=', $info['store_id']], ['order_id', '=', $info['order_id']], ); $this->orderClose($condition);//先关闭订单 $res = model('store_cashier_order')->delete($condition); $res = model('store_cashier_order_goods')->delete($condition); return $this->success(); } /** * 获取订单信息 * @param $condition * @param string $field * @return array */ public function getOrderInfo($condition, $field = '*') { $info = model('store_cashier_order')->getInfo($condition, $field); if (!empty($info)) { $info = $this->dealWithOrderInfo($info); } return $this->success($info); } /** * 获取订单列表 * @param array $condition * @param string $field * @param string $order * @param string $limit */ public function getOrderList($condition = [], $field = '*', $order = '', $limit = null) { $list = model('store_cashier_order')->getList($condition, $field, $order, '', '', '', $limit); foreach ($list as $key => $val) { $list[$key] = $this->dealWithOrderInfo($val); } return $this->success($list); } /** * 获取订单分页列表 * @param array $condition * @param number $page * @param string $page_size * @param string $order * @param string $field */ public function getOrderPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = 'create_time desc', $field = '*') { $list = model('store_cashier_order')->pageList($condition, $field, $order, $page, $page_size); foreach ($list['list'] as $key => $val) { $list['list'][$key] = $this->dealWithOrderInfo($val); } return $this->success($list); } /** * 处理订单信息数据 * @param $info */ protected function dealWithOrderInfo($info) { static $pay_type_list = []; static $order_type_list = []; if (empty($pay_type_list)) $pay_type_list = $this->getPayType(); if (empty($order_type_list)) $order_type_list = $this->getOrderType(); if (isset($info['pay_type'])) { $info['pay_type_name'] = $pay_type_list[$info['pay_type']] ?? ''; } if (isset($info['order_type'])) { $info['order_type_name'] = $order_type_list[$info['order_type']] ?? ''; } if (!empty($info['status'])) { $status_list = $this->getStatusList(); $info['status_name'] = $status_list[$info['status']]; } if (!empty($info['pay_status'])) { $info['pay_status_name'] = $info['pay_status'] == 1 ? '已支付' : '待支付'; } return $info; } /** * 部分订单的自动化操作(主要是实物) * @param $params */ public function autoOrderAction($params) { $trade_type = $params['trade_type'] ?? ''; $site_id = $params['site_id']; $member_id = $params['member_id']; if (empty($trade_type)) { $order_common_model = new OrderCommon(); $order_id = $params['order_id']; //主动发货 $order_goods_id_array = $params['order_goods_id_array'] ?? []; $order_goods_ids = implode(',', $order_goods_id_array); $delivery_data = array( 'order_goods_ids' => $order_goods_ids,//商品id 'express_company_id' => 0,//物流公司 'site_address_id' => 0,//站点发货地址id 电子面单使用 'delivery_no' => '',//快递单号 'order_id' => $order_id,//订单id 'delivery_type' => 'not',//是否需要物流 'site_id' => $site_id, 'uid' => 0, ); $delivery_result = $order_common_model->delivery($delivery_data); if ($delivery_result['code'] < 0) { return $delivery_result; } //主动收货 $take_delivery_data = array( 'order_id' => $order_id, 'site_id' => $site_id, 'member_id' => $member_id, 'is_auto' => true ); $take_delivery_result = $order_common_model->takeDelivery($take_delivery_data); if ($take_delivery_result['code'] < 0) { return $take_delivery_result; } } return $this->success(); } /** * 获取订单项列表 * @param array $condition * @param string $field * @param string $order * @param null $limit * @return array */ public function getOrderGoodsList($condition = [], $field = '*', $order = '', $limit = null) { $list = model('store_cashier_order_goods')->getList($condition, $field, $order, '', '', '', $limit); return $this->success($list); } /** * 处理订单商品图片 * @param $order_goods * @param $order_type */ public function dealWithOrderGoodsImage($order_goods, $order_type) { foreach ($order_goods as $key => $val) { switch ($order_type) { case 'recharge': $val['goods_image_is_thumb'] = false; break; case 'level': $val['goods_image_is_thumb'] = false; break; default: $val['goods_image_is_thumb'] = true; } $order_goods[$key] = $val; } return $order_goods; } /** * 修改订单信息 * @param $data * @param $where * @return array */ public function updateOrder($data, $where) { $res = model('store_cashier_order')->update($data, $where); return $this->success($res); } /** * 订单详情 * @param $params */ public function getOrderDetail($params) { $order_id = $params['order_id'] ?? 0; $site_id = $params['site_id'] ?? 0; $member_id = $params['member_id'] ?? 0; $order_condition = array( ['order_id', '=', $order_id], ); if ($site_id > 0) { $order_condition[] = ['site_id', '=', $site_id]; } if ($member_id > 0) { $order_condition[] = ['member_id', '=', $member_id]; } $info = model('store_cashier_order')->getInfo($order_condition); if (empty($info)) return $this->error([], '订单不存在!'); $info = $this->dealWithOrderInfo($info); $order_goods_list = model('store_cashier_order_goods')->getList($order_condition); if (empty($order_goods_list)) return $this->error([], '订单不存在!'); $info['order_goods'] = $order_goods_list; return $this->success($info); } /** * 获取订单分页列表 * @param array $condition * @param number $page * @param string $page_size * @param string $order * @param string $field */ public function getOrderDetailPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = 'create_time desc', $field = '*') { $list = model('store_cashier_order')->pageList($condition, $field, $order, $page, $page_size); foreach ($list['list'] as $key => $val) { $order_item = $val; $order_item = $this->dealWithOrderInfo($order_item); $order_goods_list = model('store_cashier_order_goods')->getList([['order_id', '=', $order_item['order_id']]]); $order_item['order_goods'] = $order_goods_list; $list['list'][$key] = $order_item; } return $this->success($list); } }