文件
mashangyoujiu/Application/Retail/Controller/CustomerController.class.php

1220 行
47 KiB
PHP
可执行文件

<?php
namespace Retail\Controller;
use Common\Business\Plug;
use Common\Business\Sell;
use Common\Business\SerialNumberGoods;
use Common\Model\RetailPayOrderModel;
use Common\Model\RetailVipModel;
use Common\Order\BillOrder;
use Make\Business\Make;
use Make\Model\MakeOrderModel;
//[1.8.50]
/**
* 售后订单管理
* Class CustomerController
* @package Retail\Controller
*/
class CustomerController extends BaseController
{
public function index()
{
$arr = array(
'export' => '/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);
}
}