'/index.php/Retail/Customer/export', 'wifi' => '/index.php/Retail/Customer/print_option', 'show' => '/index.php/Retail/Customer/order_info', 'examine' => '/index.php/Retail/Customer/examine', 'delivery_option' => '/index.php/Retail/Customer/delivery_agree', ); $authArr = checkFunction($arr); $this->assign('authArr', $authArr); $PlugClass = new Plug(); $plugResult = $PlugClass->PlugPermissions([ 'merchant_id' => $this->merchant_id, 'identification_arr' => [ 'make' ] ]); if (!empty($plugResult['data']['plug']['make'])) { $this->assign('make', true); } else { $this->assign('make', false); } $this->display(); } /** * 线下退款 */ public function line_index() { $this->display(); } /** *售后订单列表 * $time 时间 * $order_no 订单号 * vip_phone 会员手机号 * order_type 2退款订单 3换货订单 * user_type 1会员 2普通用户 * $order_genre 1普通订单 2拼团订单 3秒杀订单 * $status 1待审核 2 已完成 3待用户发货 4待商家收货 5待发货/退款 6驳回 7撤销申请8配送中 */ public function OrderList() { $merchant_id = session("ls_userinfo")['merchantid']; $store_id = session("storeid"); $data = I("post."); $time = $data['time']; $order_no = $data['order_no']; $order_genre = $data['order_genre']; $vip_phone = $data['vip_phone']; $order_type = $data['order_type']; $status = $data['status']; $page = $data['page']; $limit = $data['limit']; $where = array( 'b.merchant_id' => $merchant_id, 'b.store_id' => $store_id, 'b.order_type' => array('in', '2,3'), 'b.type' => 1, 'b.pay_state' => array('neq', 0), 'o.order_genre' => array('in', '1,2,3,4') ); if (!empty($order_type)) { $where['b.order_type'] = $order_type; } if (!empty($order_genre)) { $where['o.order_genre'] = $order_genre; } if (!empty($status)) { switch ($status) { case 1: //待审核 $where['b.refund_status'] = 1; $where['o.status'] = array('in', '1,3'); break; case 2: //已完成 $where['b.refund_status'] = 2; break; case 3: //待用户发货 $where['b.refund_status'] = 3; $where['o.status'] = array('in', '1,3'); break; case 4: //待商家收货 $where['b.refund_status'] = 4; $where['o.status'] = array('in', '1,3'); break; case 5: //待发货/退款 $where['b.refund_status'] = 5; $where['o.status'] = array('in', '1,3'); break; case 6: //驳回 $where['b.refund_status'] = 6; $where['o.status'] = array('in', '1,3'); break; case 7: //撤销申请 $where['b.refund_status'] = 7; $where['o.status'] = array('in', '1,3'); break; case 8: //配送中 $where['b.refund_status'] = 5; $where['o.status'] = 2; break; default: $where['b.refund_status'] = 1; break; } } if (!empty($time)) { $start_time = strtotime($time[0]); $end_time = strtotime($time[1]); $where['b.add_time'] = array('between', array($start_time, $end_time)); } if (!empty($order_genre)) { $where['o.order_genre'] = $order_genre; } if (!empty($vip_phone)) { $retailVip = D('RetailVip'); $vip = $retailVip->getFind(array($retailVip::MOBILE_PHONE . '|' . $retailVip::CARD_NUM . '|' . $retailVip::CARD_KEY => array('like', '%' . $vip_phone . '%'), $retailVip::MERCHANT_ID => $merchant_id, $retailVip::STATUS => 1)); if (!$vip) { $res['status'] = 1; $res['msg'] = '查询成功'; $res['order_list'] = array(); $res['customer_order_count'] = 0; //订单数 $res['refund_order_count'] = 0; //退款订单 $res['exchange_order_count'] = 0; //换货订单 $res['refund_money'] = 0; //退款金额 $this->ajaxReturn($res); } else { $where["b.vid"] = $vip[$retailVip::ID]; } } if (!empty($order_no)) { $where['b.order_no|b.refund_no'] = array('like', "%" . trim($order_no) . "%"); } $order_list = M('retail_bill_order as b') ->join('ls_retail_bill_online as o on b.id=o.bill_id') ->join('ls_retail_bill_discount as d on b.id=d.bill_id') ->join('ls_retail_vip as v on b.vid=v.id', 'LEFT') ->page($page, $limit) ->field('b.*,o.*,o.user_name,o.status,o.delivery_fee,v.mobile_phone as vip_phone,v.name as vip_name') ->where($where) ->order('b.id desc') ->select(); if ($order_list) { $customer_order_count = M('retail_bill_order as b') ->join('ls_retail_bill_online as o on b.id=o.bill_id') ->join('ls_retail_bill_discount as d on b.id=d.bill_id') ->join('ls_retail_vip as v on b.vid=v.id', 'LEFT') ->where($where) ->count(); foreach ($order_list as $key => &$val) { $val['index'] = $key + 1; $val['add_time'] = date("Y-m-d H:i:s", $val['add_time']); if (!empty($val['vid'])) { $val['identity'] = "会员"; } else { $val['identity'] = "散客"; } if ($val['order_type'] == 2) { $val['order_name'] = "退款"; } else if ($val['order_type'] == 3) { $val['order_name'] = "换货"; } switch ($val['order_type']) { case 2: $val['order_type_name'] = "退款订单"; break; case 3: $val['order_type_name'] = "换货订单"; break; } switch ($val['order_genre']) { case 1: $val['order_genre_name'] = "普通订单"; break; case 2: $val['order_genre_name'] = "拼团订单"; break; case 3: $val['order_genre_name'] = "秒杀订单"; break; case 4: $val['order_genre_name'] = "预售订单"; break; } switch ($val['refund_status']) { case 1: $val['status_name'] = "待审核"; break; case 2: if ($val['order_type'] == 2) { $val['status_name'] = "已退款"; } else if ($val['order_type'] == 3) { $val['status_name'] = "已换货"; } break; case 3: $val['status_name'] = "待客户发货"; break; case 4: $val['status_name'] = "待商家收货"; break; case 5: if ($val['order_type'] == 2) { $val['status_name'] = "待退款"; } else if ($val['order_type'] == 3) { switch ($val['status']) { case 1: $val['status_name'] = "待商家发货"; break; case 2: $val['status_name'] = "商家已发货"; break; case 3: $val['status_name'] = "客户已收货"; break; } if ($val['status'] == 1 || $val['status'] == 2) { switch ($val['delivery_type']) { case 1: if ($val['status'] == 1) { $val['order_status'] = 0; } break; case 2: $DaOrderModel = D('RetailDaOrder'); $clerkinfo = $DaOrderModel->getOrderFind(array("order_no" => strval($val["order_no"]), $DaOrderModel::ID => $val["delivery_record_id"]), '*', 'id desc'); $val['order_status'] = $clerkinfo["order_status"]; break; case 3: //Uu配送转成达达订单状态显示 $uuOrderModel = D('RetailUuOrder'); $state_uu = $uuOrderModel->getOrderFindField(array("origin_id" => $val["id"], "id" => $val["delivery_record_id"]), "state", 'id desc'); if ($state_uu == 1) { $val['order_status'] = 1; //待接单 } else if ($state_uu == 3 || $state_uu == 4) { $val['order_status'] = 2; //待取货 } else if ($state_uu == 5 || $state_uu == 6) { $val['order_status'] = 3; //配送中 } else { $val['order_status'] = 4; //已收货 } break; case 5: //码科配送 $MakeOrderModel = new MakeOrderModel(); $status = $MakeOrderModel->getOrderFindField(['bill_id' => $val['id']], "status", "id desc"); switch ($status) { case 'payed': //待接单 $val['order_status'] = 1; break; case 'accepted': //'待取件 $val['order_status'] = 2; break; case 'geted': //待收件 $val['order_status'] = 3; break; case 'gotoed': //待评价 $val['order_status'] = 4; break; case 'completed': //订单已完成 $val['order_status'] = 4; break; case 'cancel': //已取消 $val['order_status'] = 5; break; } break; } } } break; case 6: $val['status_name'] = "驳回请求"; break; case 7: $val['status_name'] = "客户撤销申请"; break; } //优惠金额 $val['discount_amount'] = round($val["coupon_money"] + $val["vip_dis_money"] + $val['vip_less_money'], 2); //积分抵扣 $val['integral_dis_money'] = floatval($val['integral_dis_money']); if ($val['order_type'] == 2 && ($val['refund_status'] != 2 || $val['refund_status'] == 6)) { $val['all_money'] = round($val['all_money'] + $val['delivery_fee'], 2); } } } $res['status'] = 1; $res['msg'] = '查询成功'; $res['order_list'] = $order_list; $res['customer_order_count'] = $customer_order_count ? $customer_order_count : 0; //订单数 $this->ajaxReturn($res); } /** * 售后金额统计 */ public function OrderTotal() { $merchant_id = session("ls_userinfo")['merchantid']; $store_id = session("storeid"); $data = I("post."); $time = $data['time']; $order_no = $data['order_no']; $order_genre = $data['order_genre']; $vip_phone = $data['vip_phone']; $order_type = $data['order_type']; $status = $data['status']; $BillModel = D("RetailBillOrder"); $where = array( 'b.merchant_id' => $merchant_id, 'b.store_id' => $store_id, 'b.order_type' => array('in', '2,3'), 'b.type' => 1, 'b.pay_state' => array('neq', 0), 'o.order_genre' => array('in', '1,2,3,4') ); if (!empty($order_type)) { $where['b.order_type'] = $order_type; } if (!empty($order_genre)) { $where['o.order_genre'] = $order_genre; } if (!empty($status)) { switch ($status) { case 1: //待审核 $where['b.refund_status'] = 1; $where['o.status'] = array('in', '1,3'); break; case 2: //已完成 $where['b.refund_status'] = 2; break; case 3: //待用户发货 $where['b.refund_status'] = 3; $where['o.status'] = array('in', '1,3'); break; case 4: //待商家收货 $where['b.refund_status'] = 4; $where['o.status'] = array('in', '1,3'); break; case 5: //待发货/退款 $where['b.refund_status'] = 5; $where['o.status'] = array('in', '1,3'); break; case 6: //驳回 $where['b.refund_status'] = 6; $where['o.status'] = array('in', '1,3'); break; case 7: //撤销申请 $where['b.refund_status'] = 7; $where['o.status'] = array('in', '1,3'); break; case 8: //配送中 $where['b.refund_status'] = 5; $where['o.status'] = 2; break; default: $where['b.refund_status'] = 1; break; } } if (!empty($time)) { $start_time = strtotime($time[0]); $end_time = strtotime($time[1]); $where['b.add_time'] = array('between', array($start_time, $end_time)); } if (!empty($order_no)) { $where['b.order_no'] = array('like', "%" . $order_no . "%"); } if (!empty($order_genre)) { $where['o.order_genre'] = $order_genre; } if (!empty($vip_phone)) { $retailVip = D('RetailVip'); $vip = $retailVip->getFind(array($retailVip::MOBILE_PHONE . '|' . $retailVip::CARD_NUM . '|' . $retailVip::CARD_KEY => array('like', '%' . $vip_phone . '%'), $retailVip::MERCHANT_ID => $merchant_id, $retailVip::STATUS => 1)); if (!$vip) { $res['status'] = 1; $res['msg'] = '查询成功'; $res['order_list'] = array(); $res['customer_order_count'] = 0; //订单数 $res['refund_order_count'] = 0; //退款订单 $res['exchange_order_count'] = 0; //换货订单 $res['refund_money'] = 0; //退款金额 $this->ajaxReturn($res); } else { $where["b.vid"] = $vip[$retailVip::ID]; } } switch ($order_type) { case 2: $refund_order_count = $BillModel->getBillCount($where); if ($status == 2 || empty($status)) { $where['b.refund_status'] = 2; $refund_money_actual = $BillModel->getDiscountSum($where, "b.all_money"); } break; case 3: $exchange_order_count = $BillModel->getBillCount($where); break; default: $where['b.order_type'] = 2; $refund_order_count = $BillModel->getBillCount($where); if ($status == 2 || empty($status)) { $where['b.refund_status'] = 2; $refund_money_actual = $BillModel->getDiscountSum($where, "b.all_money"); } $where['b.order_type'] = 3; unset($where['b.refund_status']); $exchange_order_count = $BillModel->getBillCount($where); break; } $refund_order_count = $refund_order_count ? $refund_order_count : 0; $exchange_order_count = $exchange_order_count ? $exchange_order_count : 0; $refund_money_actual = $refund_money_actual ? $refund_money_actual : 0; $res['refund_order_count'] = $refund_order_count; //退款订单 $res['exchange_order_count'] = $exchange_order_count; //换货订单 $res['refund_money_actual'] = $refund_money_actual; //已退金额 $this->ajaxReturn($res); } /** * 获取售后订单详情 */ public function order_info() { $bill_id = I("post.id"); $data = array( "bill_id" => $bill_id ); $res = A("Api/Customer")->order_info($data); $this->ajaxReturn($res); } /** * 审核操作 * 审核售后订单 * @param order_no 订单号 * @param type 1同意退款 2拒绝 * @param reason_id 申请原因id * @param reason 驳回原因 * @param deliver_state 0不需要客户退货 1需要客户退货 * goods_list 商品信息 */ public function examine() { $data = I("post."); $data['platform_type'] = $this->role_info['platform_type']; $data['merchant_id'] = $this->merchant_id; $data['store_id'] = $this->store_id; $data['refund_status'] = 1; if (C('IS_SET_REDIS')) { $ApiRedis = new \Addons\Api\RedisController(); $redis_key = "customer_" . $data['order_no']; if ($ApiRedis::$redis->exists($redis_key)) { $res['status'] = 0; $res['msg'] = "正在操作该订单,请勿重复操作"; $this->ajaxReturn($res); } $ApiRedis::$redis->setex($redis_key, 10, $data['order_no']); } $res = A("Api/Customer")->examineOperation($data); if (C('IS_SET_REDIS')) { $ApiRedis::$redis->delete($redis_key); } $this->ajaxReturn($res); } /** * 商家收货 * order_no 订单号 */ public function ReceivingGoods() { $data = I('post.'); $data['platform_type'] = $this->role_info['platform_type']; $data['merchant_id'] = $this->merchant_id; $data['store_id'] = $this->store_id; $data['refund_status'] = 4; if (C('IS_SET_REDIS')) { $ApiRedis = new \Addons\Api\RedisController(); $redis_key = "customer_" . $data['order_no']; if ($ApiRedis::$redis->exists($redis_key)) { $res['status'] = 0; $res['msg'] = "正在操作该订单,请勿重复操作"; $this->ajaxReturn($res); } $ApiRedis::$redis->setex($redis_key, 10, $data['order_no']); } $res = A("Api/Customer")->BusinessReceiving($data); if (C('IS_SET_REDIS')) { $ApiRedis::$redis->delete($redis_key); } $this->ajaxReturn($res); } /** * 线上订单退款 * order_no 订单号 * @param $user_type //1.收银员 2.店长 3.后台 * @param $return_delivery_fee // 是否退还配送费 1是 2否 */ public function refund_agree() { $merchant_id = session("ls_userinfo")["merchantid"]; $store_id = session("storeid"); $order_no = I('post.order_no'); $return_delivery_fee = I('post.return_delivery_fee') == 1 ? 1 : 2; //是否退还配送费 1是 2否 if (empty($order_no) || empty($return_delivery_fee)) { $result['status'] = 0; $result['msg'] = '缺少参数'; $this->ajaxReturn($result); } $data = array( 'store_id' => $store_id, 'merchant_id' => $merchant_id, 'order_no' => $order_no, 'user_type' => 3, 'return_delivery_fee' => $return_delivery_fee, 'platform_type'=>$this->role_info['platform_type'] ); if (C('IS_SET_REDIS')) { $ApiRedis = new \Addons\Api\RedisController(); $redis_key = "customer_" . $data['order_no']; if ($ApiRedis::$redis->exists($redis_key)) { $res['status'] = 0; $res['msg'] = "正在操作该订单,请勿重复操作"; $this->ajaxReturn($res); } $ApiRedis::$redis->setex($redis_key, 10, $data['order_no']); } // 退款 $res = A('PayApi/Refund')->onlineOrderRefund_v2($data); if (C('IS_SET_REDIS')) { $ApiRedis::$redis->delete($redis_key); } $this->ajaxReturn($res); } /* * 获取UU配送费 */ public function getUuDeliveryPrice() { $StoreModel = D('RetailStore'); $merchant_id = session("ls_userinfo")['merchantid']; $store_id = session("storeid"); $store = $StoreModel->getFind(array("id" => $store_id)); $data = array( 'order_no' => I("post.order_no"), 'merchant_id' => $merchant_id, 'store_id' => $store_id, 'store' => $store ); $res = A("Api/Delivery")->getUuDeliveryPrice($data); $this->ajaxReturn($res); } /* * 获取码科配送费 */ public function getMakeDeliveryPrice() { $data = array( 'order_no' => I("post.order_no"), 'merchant_id' => $this->merchant_id, 'store_id' => $this->store_id, ); $MakeClass = new Make(); $result = $MakeClass->getDeliveryPrice($data); $result['Tips'] = '配送距离' . $result['data']['distance'] . 'km,配送费' . $result['data']['total_price'] . '元'; $this->ajaxReturn($result); } //出售商品记录 public function sellList() { $data = I('post.'); $SellClass = new Sell(); $result = $SellClass->sellList($data); $this->ajaxReturn($result); } //串号商品查询 public function searchSerial() { $data = I('post.'); $data['user_type'] = 4; $data['merchant_id'] = $this->merchant_id; $data['store_id'] = $this->store_id; $SerialClass = new SerialNumberGoods(); $result = $SerialClass->searchWarehouseSerial($data); $this->ajaxReturn($result); } //配送前确认商品信息confirmDistributionGoods public function confirmDistributionGoods() { $data = I('post.'); $data['merchant_id'] = $this->merchant_id; $data['store_id'] = $this->store_id; $data['type'] = 1; $SellClass = new Sell(); $result = $SellClass->confirmSellGoods($data); $this->ajaxReturn($result); } /** * 配送 * type 配送类型 1商家配送 2达达配送 3UU配送 4快递发货 5码科配送 6麦芽田配送 * order_no 订单号 * option_type 1收银端 2后台操作 * uu_phone 收银员手机号或者门店手机号 * special_type 特殊处理类型,是否需要保温箱 1需要 0不需要 * note 备注 * total_price 码科配送费 */ public function delivery_agree() { $StoreModel = D('RetailStore'); $store = $StoreModel->getFind(array("id" => $this->store_id)); $operation_id = session("jurisdiction_user")['id']; $data = array( 'option_type' => 2, 'operation_id' => $operation_id, 'merchant_id' => $this->merchant_id, 'store_id' => $this->store_id, 'store' => $store, 'order_no' => I("post.order_no"), 'type' => I("post.delivery_type"), 'uu_phone' => $store['phone'], 'special_type' => 0, 'note' => "", 'total_price' => I('post.total_price'), // 是否发布到骑手端(仅门店配送可用) 'sync_to_rider' => I('post.sync_to_rider', 0), 'platform_type'=>$this->role_info['platform_type']?$this->role_info['platform_type']:1 ); if (C("IS_SET_REDIS")) { $ApiRedis = new \Addons\Api\RedisController(); $redis_key = "customer_" . $data['order_no']; if ($ApiRedis::$redis->exists($redis_key)) { $res['status'] = 0; $res['msg'] = "正在操作该订单,请勿重复操作"; $this->ajaxReturn($res); } $ApiRedis::$redis->setex($redis_key, 10, $data['order_no']); } $res = A("Api/Delivery")->deliveryOrder($data); if (C('IS_SET_REDIS')) { $ApiRedis::$redis->delete($redis_key); } $this->ajaxReturn($res); } /** * 取消配送 * order_no 订单号 * reason //UU取消配送原因 * reason_id //达达取消配送原因id */ public function delivery_cancel() { $data = array( "order_no" => I("post.order_no"), "reason" => I("post.reason"), "reason_id" => I("post.reason_id"), "merchant_id" => session("ls_userinfo")['merchantid'], "store_id" => session("storeid"), ); if (C("IS_SET_REDIS")) { $ApiRedis = new \Addons\Api\RedisController(); $redis_key = "customer_" . $data['order_no']; if ($ApiRedis::$redis->exists($redis_key)) { $res['status'] = 0; $res['msg'] = "正在操作该订单,请勿重复操作"; $this->ajaxReturn($res); } $ApiRedis::$redis->setex($redis_key, 10, $data['order_no']); } $res = A("Api/Delivery")->cancelDelivery($data); if (C('IS_SET_REDIS')) { $ApiRedis::$redis->delete($redis_key); } $this->ajaxReturn($res); } /** * 获取骑手信息 */ public function getRiderInfo() { $merchant_id = session("ls_userinfo")['merchantid']; $store_id = session("storeid"); $order_no = I('post.order_no');//订单编号 if (empty($order_no) || empty($store_id) || empty($merchant_id)) { $result['status'] = 0; $result['msg'] = "缺少参数"; $this->ajaxReturn($result); } $result = A('PayApi/Order')->getRider($order_no); $this->ajaxReturn($result); } /** * 获取达达配送取消订单原因 */ public function getCancelDeliveryReason() { $reason = M('retail_da_reason')->select(); if ($reason) { $res['status'] = 1; $res['msg'] = '获取成功'; $res['reason'] = $reason; } else { $res['status'] = 0; $res['msg'] = '暂无数据'; $res['reason'] = array(); } $this->ajaxReturn($res); } /** * wifi打印 */ public function print_option() { $bill_id = I('post.bill_id'); $data = A('PayApi/Printer')->linePrinting_v1($this->store_id, $bill_id, true); $this->ajaxReturn($data); } /** * 导出 */ public function export() { $data = I("get."); $time = $data['time']; $order_no = $data['order_no']; $order_genre = $data['order_genre']; $vip_phone = $data['vip_phone']; $order_type = $data['order_type']; $status = $data['status']; $where = array( 'b.merchant_id' => $this->merchant_id, 'b.store_id' => $this->store_id, 'b.order_type' => array('in', '2,3'), 'b.type' => 1, 'b.pay_state' => array('neq', 0), 'o.order_genre' => array('in', '1,2,3,4') ); if (!empty($order_type)) { $where['b.order_type'] = $order_type; } if (!empty($order_genre)) { $where['o.order_genre'] = $order_genre; } if (!empty($status)) { switch ($status) { case 1: //待审核 $where['b.refund_status'] = 1; $where['o.status'] = array('in', '1,3'); break; case 2: //已完成 $where['b.refund_status'] = 2; $where['o.status'] = array('in', '2,3'); break; case 3: //待用户发货 $where['b.refund_status'] = 3; $where['o.status'] = array('in', '1,3'); break; case 4: //待商家收货 $where['b.refund_status'] = 4; $where['o.status'] = array('in', '1,3'); break; case 5: //待发货/退款 $where['b.refund_status'] = 5; $where['o.status'] = array('in', '1,3'); break; case 6: //驳回 $where['b.refund_status'] = 6; $where['o.status'] = array('in', '1,3'); break; case 7: //撤销申请 $where['b.refund_status'] = 7; $where['o.status'] = array('in', '1,3'); break; case 8: //配送中 $where['b.refund_status'] = 5; $where['o.status'] = 2; break; default: $where['b.refund_status'] = 1; break; } } if (!empty($time)) { if(!is_array($time)){ $time = explode(',',$time); } $start_time = strtotime($time[0]); $end_time = strtotime($time[1]); $where['b.add_time'] = array('between', array($start_time, $end_time)); } if (!empty($order_no)) { $where['b.order_no'] = array('like', "%" . $order_no . "%"); } if (!empty($order_genre)) { $where['o.order_genre'] = $order_genre; } if (!empty($vip_phone)) { $retailVip = new RetailVipModel(); $vMap = [ 'mobile_phone|cardnum|card_key' => ['like', '%' . $vip_phone . '%'], 'merchantid' => $this->merchant_id, 'status' => 1, ]; $vip = $retailVip->getFind($vMap); if (!$vip) { $res['status'] = 1; $res['msg'] = '查询成功'; $res['order_list'] = array(); $res['customer_order_count'] = 0; //订单数 $res['refund_order_count'] = 0; //退款订单 $res['exchange_order_count'] = 0; //换货订单 $res['refund_money'] = 0; //退款金额 $this->ajaxReturn($res); } else { $where["b.vid"] = $vip[$retailVip::ID]; } } $order_list = M('retail_bill_order as b') ->join('ls_retail_bill_online as o on b.id=o.bill_id') ->join('ls_retail_bill_discount as d on b.id=d.bill_id') ->join('ls_retail_vip as v on b.vid=v.id', 'LEFT') ->field('b.*,o.*,o.user_name,o.status,v.mobile_phone as vip_phone,v.name as vip_name') ->where($where) ->order('b.id desc') ->select(); if ($order_list) { foreach ($order_list as $key => &$val) { $val['index'] = $key + 1; $val['add_time'] = date("Y-m-d H:i:s", $val['add_time']); if (!empty($val['vid'])) { $val['identity'] = "会员"; } else { $val['identity'] = "散客"; } if ($val['order_type'] == 2) { $val['order_name'] = "退款"; } else if ($val['order_type'] == 3) { $val['order_name'] = "换货"; } switch ($val['order_type']) { case 2: $val['order_type_name'] = "退款订单"; break; case 3: $val['order_type_name'] = "换货订单"; break; } switch ($val['order_genre']) { case 1: $val['order_genre_name'] = "普通订单"; break; case 2: $val['order_genre_name'] = "拼团订单"; break; case 3: $val['order_genre_name'] = "秒杀订单"; break; } switch ($val['refund_status']) { case 1: $val['status_name'] = "待审核"; break; case 2: if ($val['order_type'] == 2) { $val['status_name'] = "已退款"; } else if ($val['order_type'] == 3) { $val['status_name'] = "已换货"; } break; case 3: $val['status_name'] = "待客户发货"; break; case 4: $val['status_name'] = "待商家收货"; break; case 5: if ($val['order_type'] == 2) { $val['status_name'] = "待退款"; } else if ($val['order_type'] == 3) { switch ($val['status']) { case 1: $val['status_name'] = "待商家发货"; break; case 2: $val['status_name'] = "商家已发货"; break; case 3: $val['status_name'] = "客户已收货"; break; } if ($val['status'] == 1 || $val['status'] == 2) { switch ($val['delivery_type']) { case 1: if ($val['status'] == 1) { $val['order_status'] = 0; } break; case 2: $DaOrderModel = D('RetailDaOrder'); $clerkinfo = $DaOrderModel->getOrderFind(array("order_no" => strval($val["order_no"]), $DaOrderModel::ID => $val["delivery_record_id"]), '*', 'id desc'); $val['order_status'] = $clerkinfo["order_status"]; break; case 3: //Uu配送转成达达订单状态显示 $uuOrderModel = D('RetailUuOrder'); $state_uu = $uuOrderModel->getOrderFindField(array("origin_id" => $val["id"], "id" => $val["delivery_record_id"]), "state", 'id desc'); if ($state_uu == 1) { $val['order_status'] = 1; //待接单 } else if ($state_uu == 3 || $state_uu == 4) { $val['order_status'] = 2; //待取货 } else if ($state_uu == 5 || $state_uu == 6) { $val['order_status'] = 3; //配送中 } else { $val['order_status'] = 4; //已收货 } break; } } } break; case 6: $val['status_name'] = "驳回请求"; break; case 7: $val['status_name'] = "客户撤销申请"; break; } //优惠金额 $val['discount_amount'] = round($val["coupon_money"] + $val["vip_dis_money"] + $val['vip_less_money'], 2); //积分抵扣 $val['integral_dis_money'] = floatval($val['integral_dis_money']); } } $headArr = array( array('index', '序号'), array('order_no', '单号'), array('vip_phone', '会员手机号'), array('all_money', '金额'), array('add_time', '申请时间'), array('user_name', '联系人'), array('user_phone', '联系人手机号'), array('user_address', '地址'), array('order_genre_name', '来源'), array('order_type_name', '订单类型'), array('status_name', '状态') ); $name = "售后订单"; $str = $name . '导出时间' . date('Y-m-d H:i:s', time()); getExcel($name, $headArr, $order_list, $str); } /******************************线下售后订单列表****开始****************************************/ /** * 获取线下售后订单列表 */ public function getLineOrderList() { $data = I("post."); $data['merchant_id'] = $this->merchant_id; $data['store_id'] = $this->store_id; $BillOrder = new BillOrder(); $this->ajaxReturn($BillOrder->getLineRefundOrderList($data)); } /** * 获取线下售后订单数据统计 */ public function getLineOrderSumData() { $data = I("post."); $data['merchant_id'] = $this->merchant_id; $data['store_id'] = $this->store_id; $BillOrder = new BillOrder(); $this->ajaxReturn($BillOrder->getLineRefundOrderSumData($data)); } /** * 导出线下售后订单列表 */ public function exportLineOrder() { $data = I("get."); $data['merchant_id'] = $this->merchant_id; $data['store_id'] = $this->store_id; $data['is_export'] = 1; $BillOrder = new BillOrder(); $result = $BillOrder->getLineRefundOrderList($data); $headArr = array( array('index', '序号'), array('order_no', '退款单号'), array('refund_no', '购买单号'), array('all_money', '金额'), array('pay_type_name', '支付类型'), array('refund_money', '已退金额'), array('wait_refund_money', '待退金额'), array('add_time', '申请时间'), array('status_name', '状态'), array('identity', '客户'), array('vip_phone', '会员手机号'), array('vip_name', '会员姓名'), array('vip_nickname', '会员昵称'), ); $name = "线下退款订单"; $str = $name . '共' . $result['data']['count'] . '条数据,导出时间' . date('Y-m-d H:i:s', time()); getExcel($name, $headArr, $result['data']['list'], $str); } /** * 线下退款失败订单继续退款 */ public function lineOrderRefund() { $data = I("post."); $data['merchant_id'] = $this->merchant_id; $data['store_id'] = $this->store_id; $BillOrder = new BillOrder(); $this->ajaxReturn($BillOrder->failOrderRefund($data)); } /******************************线下售后订单列表****结束****************************************/ //串号修改 public function serialModify() { $data = I('post.'); $data['user_type'] = 4; $data['operator_type'] = 1; $data['merchant_id'] = $this->merchant_id; $data['store_id'] = $this->store_id; $data['operator_id'] = session("jurisdiction_user")['id']; $SerialClass = new SerialNumberGoods(); $result = $SerialClass->serialModify($data); $this->ajaxReturn($result); } //串号修改记录 public function serialModifyRecord() { $data = I('post.'); $SerialClass = new SerialNumberGoods(); $result = $SerialClass->serialModifyRecord($data); $this->ajaxReturn($result); } /** * 骑手配送发货 */ public function riderDelivery() { $data = I('post.'); $order_id = $data['order_id']; $delivery_fee = $data['delivery_fee']; $estimated_time = $data['estimated_time']; $delivery_distance = $data['delivery_distance']; $remark = $data['remark']; if (empty($order_id)) { $this->ajaxReturn(['code' => 0, 'msg' => '订单ID不能为空']); } // 获取订单信息 $orderModel = M('retail_order'); $order = $orderModel->where(['id' => $order_id, 'merchant_id' => $this->merchant_id])->find(); if (!$order) { $this->ajaxReturn(['code' => 0, 'msg' => '订单不存在']); } if ($order['order_status'] != 2) { $this->ajaxReturn(['code' => 0, 'msg' => '订单状态不正确,无法发货']); } // 准备发货数据 $expressData = [ 'order_id' => $order_id, 'logistics_type' => 7, // 骑手配送 'logistics_name' => '骑手配送', 'logistics_no' => 'RIDER' . date('YmdHis') . rand(1000, 9999), 'delivery_fee' => $delivery_fee, 'estimated_time' => $estimated_time, 'delivery_distance' => $delivery_distance, 'remark' => $remark, 'merchant_id' => $this->merchant_id, 'store_id' => $this->store_id, 'operator_id' => session("jurisdiction_user")['id'] ]; // 调用Api/Express的toSendGoods方法处理发货 $apiExpress = A('Api/Express'); $result = $apiExpress->toSendGoods($expressData); if ($result['code'] == 1) { // 发货成功,同步到骑手端 $this->syncToRiderSystem($order, $expressData); $this->ajaxReturn(['code' => 1, 'msg' => '骑手配送发货成功']); } else { $this->ajaxReturn(['code' => 0, 'msg' => $result['msg'] ?: '发货失败']); } } /** * 同步订单到骑手系统 */ private function syncToRiderSystem($order, $expressData) { // 获取骑手配置 $riderConfigModel = M('rider_config'); $config = $riderConfigModel->where(['merchant_id' => $this->merchant_id])->find(); if (!$config || !$config['auto_sync_orders']) { return; // 未开启自动同步 } // 准备同步数据 $syncData = [ 'order_id' => $order['id'], 'order_no' => $order['order_no'], 'customer_name' => $order['consignee'], 'customer_phone' => $order['mobile'], 'customer_address' => $order['address'], 'delivery_fee' => $expressData['delivery_fee'], 'estimated_time' => $expressData['estimated_time'], 'delivery_distance' => $expressData['delivery_distance'], 'remark' => $expressData['remark'], 'merchant_id' => $this->merchant_id, 'store_id' => $this->store_id, 'status' => 1, // 待接单 'create_time' => time(), 'update_time' => time() ]; // 插入到骑手订单表 $riderOrderModel = M('rider_orders'); $riderOrderModel->add($syncData); } }