文件
mashangyoujiu/Application/SmallProgramApi/Controller/OrderController.class.php

2863 行
137 KiB
PHP
可执行文件

此文件含有模棱两可的 Unicode 字符

此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。

<?php
namespace SmallProgramApi\Controller;
use Common\Business\BillOrder;
use Common\Model\BillOrderViewModel;
use Common\Model\RetailBillAdvanceModel;
use Common\Model\RetailBillGroupModel;
use Common\Model\RetailBillOnlineModel;
use Common\Model\RetailBillOrderModel;
use Common\Model\RetailDaOrderModel;
use Common\Model\RetailSellModel;
use Common\Model\RetailStoreModel;
use Common\Model\RetailUuOrderModel;
use LittleGift\Business\Order;
use Make\Model\MakeOrderModel;
use Common\Business\Plug;
use Blessing\Business\Index;
//[1.8.73]
class OrderController extends BaseController
{
/**
* 订单列表
*/
public function orderList()
{
$store_id = self::$store_id;
$uid = self::$uid;
$merchant_id = self::$merchant_id;
$type = I("post.type");//1:全部订单 2:待发货/自提 3:待收货 4:待评价
$page = I("post.page");
if (empty($uid) || empty($type) || empty($page)) {
$res['status'] = 0;
$res['msg'] = '缺少参数';
$this->ajaxReturn($res);
}
$BillOrderModel = D('RetailBillOrder');
$BillOnlineModel = D('RetailBillOnline');
$BillDiscountModel = D('RetailBillDiscount');
$map = array(
'b.' . $BillOrderModel::STORE_ID => $store_id,
'b.' . $BillOrderModel::UID => $uid,
'b.' . $BillOrderModel::MERCHANT_ID => $merchant_id,
'b.' . $BillOrderModel::TYPE => 1,
'b.' . $BillOrderModel::PAY_STATE => 1,
'b.' . $BillOrderModel::ORDER_TYPE => 1,
'b.' . $BillOrderModel::PAY_TYPE => array('in', '5,6,8'),
'b.' . $BillOrderModel::ADD_TIME => array('gt', time() - 86400 * 60),
'b.' . $BillOrderModel::REFUND_STATUS => 0,
'o.' . $BillOnlineModel::ORDER_GENRE => 1,
);
if ($type == 2) {
//自提或待发货订单
$map['o.' . $BillOnlineModel::STATUS] = 1;
} else if ($type == 3) {
//待收货
$map['o.' . $BillOnlineModel::PICKUP_TYPE] = 2;
$map['o.' . $BillOnlineModel::STATUS] = 2;
} else if ($type == 4) {
//待评价
$map['o.' . $BillOnlineModel::STATUS] = 3;
$map['o.' . $BillOnlineModel::EVAL_STATUS] = 0;
} else {
unset($map['b.' . $BillOrderModel::REFUND_STATUS]);
}
$limit = 15;
$fields = array(
'b.' . $BillOrderModel::ID,
'b.' . $BillOrderModel::ALL_MONEY,
'b.' . $BillOrderModel::ADD_TIME,
'b.' . $BillOrderModel::ORDER_NO,
'b.' . $BillOrderModel::REFUND_STATUS,
'b.' . $BillOrderModel::PAY_STATE,
'o.' . $BillOnlineModel::REMARK,
'o.' . $BillOnlineModel::STATUS,
'o.' . $BillOnlineModel::PICKUP_TYPE,
'o.' . $BillOnlineModel::REMIND_STATE,
'o.' . $BillOnlineModel::PICK_CODE,
'o.' . $BillOnlineModel::REFUND_TIME,
'o.' . $BillOnlineModel::CANCEL_TIME,
'o.' . $BillOnlineModel::EVAL_STATUS,
'o.' . $BillOnlineModel::DELIVERY_TYPE,
'o.' . $BillOnlineModel::DELIVERY_RECORD_ID,
'o.' . $BillOnlineModel::DELIVERY_FEE,
'd.' . $BillDiscountModel::COUPON_MONEY,
'd.' . $BillDiscountModel::VIP_DIS_MONEY,
);
$order_info = $BillOrderModel->getBillFind($map, $fields, 'b.' . $BillOrderModel::ADD_TIME . ' desc', $page . ',' . $limit);
if ($order_info) {
$orderList = array();
$UuOrderModel = D('RetailUuOrder');
$DaOrderModel = D('RetailDaOrder');
$SellModel = D('RetailSell');
foreach ($order_info as &$val) {
$val[$BillOnlineModel::PICK_CODE] = $val[$BillOnlineModel::PICK_CODE] ? $val[$BillOnlineModel::PICK_CODE] : '';
$val[$BillOrderModel::ADD_TIME] = date('Y-m-d H:i:s', $val[$BillOrderModel::ADD_TIME]);
if ($val[$BillOnlineModel::STATUS] == 1) {
//门店配送
if ($val[$BillOrderModel::REFUND_STATUS] == 0) {
//正常订单
$val['state'] = '待发货';
if ($val[$BillOnlineModel::PICKUP_TYPE] == 1) { // 自取
$val['state'] = '待自取';
}
} else if ($val[$BillOrderModel::REFUND_STATUS] == 1) {
$val['state'] = '待商家确认退款';
} else if ($val[$BillOrderModel::REFUND_STATUS] == 3) {
$val['state'] = '部分退款';
} else {
$val['state'] = '已退款';
}
} else if ($val[$BillOnlineModel::STATUS] == 2) {
$val['state'] = '待收货';
} else if ($val[$BillOnlineModel::STATUS] == 3) {
$val['state'] = '交易完成';
if ($val[$BillOrderModel::REFUND_STATUS] == 1) {
$val['state'] = '待商家确认退款';
} else if ($val[$BillOrderModel::REFUND_STATUS] == 2) {
$val['state'] = '已退款';
} else if ($val[$BillOrderModel::REFUND_STATUS] == 3) {
$val['state'] = '部分退款';
} else {
$val['state'] = '已完成';
}
}
//达达配送delivery_type
if ($val[$BillOnlineModel::DELIVERY_TYPE] == 2) {
$clerkInfo = $DaOrderModel->getFind(array($DaOrderModel::ID => $val[$BillOnlineModel::DELIVERY_RECORD_ID]));
$val['order_status'] = $clerkInfo[$DaOrderModel::ORDER_STATUS];
} else if ($val[$BillOnlineModel::DELIVERY_TYPE] == 3) {
//uu跑腿转成达达状态显示
$state_uu = $UuOrderModel->getFind(array($UuOrderModel::ID => $val[$BillOnlineModel::DELIVERY_RECORD_ID]), $UuOrderModel::STATE);
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;
}
$val[$BillOnlineModel::DELIVERY_TYPE] = 2;
}
$goods_info = $SellModel->getFind(array($SellModel::BILL_ID => $val[$BillOrderModel::ID]), '*', $SellModel::ALL_MONEY . ' desc');
$goodsItem = array();
$goodsItem['count'] = $SellModel->getCount(array($SellModel::BILL_ID => $val[$BillOrderModel::ID]));
$goodsItem['goods_id'] = $goods_info[$SellModel::GOODS_ID];
$goodsItem['img'] = $this->getGoodsImage($goods_info[$SellModel::GOODS_IMG_ID]);
$goodsItem['goods_name'] = $goods_info[$SellModel::GOODS_NAME];
$goodsItem['num'] = intval($goods_info[$SellModel::NUM]);
$goodsItem['price'] = $goods_info[$SellModel::PRICE];
if (!empty($goods_info[$SellModel::SKU_JSON_INFO])) {
$goodsItem[$SellModel::SKU_JSON_INFO] = $goods_info[$SellModel::SKU_JSON_INFO] ? json_decode($goods_info[$SellModel::SKU_JSON_INFO], true) : '';
}
$val['goods_info'] = $goodsItem;
$orderList[] = $val;
}
$res['status'] = 1;
$res['count'] = $limit;
$res['order_info'] = $orderList;
} else {
$res['status'] = 0;
$res['msg'] = '暂无订单';
}
$this->ajaxReturn($res);
}
/**
* 订单列表
*/
public function orderList_v1()
{
$store_id = self::$store_id;
$uid = self::$uid;
$merchant_id = self::$merchant_id;
$type = I("post.type");//1:全部订单 2:待发货/自提 3:待收货 4:待评价
$page = I("post.page");
if (empty($uid) || empty($type) || empty($page)) {
$res['status'] = 0;
$res['msg'] = '缺少参数';
$this->ajaxReturn($res);
}
$BillOrderModel = D('RetailBillOrder');
$BillOnlineModel = D('RetailBillOnline');
$BillDiscountModel = D('RetailBillDiscount');
$map = array(
'b.' . $BillOrderModel::STORE_ID => $store_id,
'b.' . $BillOrderModel::UID => $uid,
'b.' . $BillOrderModel::MERCHANT_ID => $merchant_id,
'b.' . $BillOrderModel::TYPE => 1,
'b.' . $BillOrderModel::PAY_STATE => 1,
'b.' . $BillOrderModel::ORDER_TYPE => 1,
'b.' . $BillOrderModel::PAY_TYPE => array('in', '5,6,8'),
'b.' . $BillOrderModel::ADD_TIME => array('gt', time() - 86400 * 60),
'b.' . $BillOrderModel::REFUND_STATUS => array('in', '0,1'),
'o.' . $BillOnlineModel::ORDER_GENRE => 1,
);
if ($type == 2) {
//自提或待发货订单
$map['o.' . $BillOnlineModel::STATUS] = 1;
} else if ($type == 3) {
//待收货
$map['o.' . $BillOnlineModel::PICKUP_TYPE] = 2;
$map['o.' . $BillOnlineModel::STATUS] = 2;
} else if ($type == 4) {
//待评价
$map['o.' . $BillOnlineModel::STATUS] = 3;
$map['o.' . $BillOnlineModel::EVAL_STATUS] = 0;
} else {
unset($map['b.' . $BillOrderModel::REFUND_STATUS]);
}
$limit = 15;
$fields = array(
'b.' . $BillOrderModel::ID,
'b.' . $BillOrderModel::ALL_MONEY,
'b.' . $BillOrderModel::ADD_TIME,
'b.' . $BillOrderModel::ORDER_NO,
'b.' . $BillOrderModel::REFUND_STATUS,
'b.' . $BillOrderModel::PAY_STATE,
'o.' . $BillOnlineModel::REMARK,
'o.' . $BillOnlineModel::STATUS,
'o.' . $BillOnlineModel::PICKUP_TYPE,
'o.' . $BillOnlineModel::REMIND_STATE,
'o.' . $BillOnlineModel::PICK_CODE,
'o.' . $BillOnlineModel::REFUND_TIME,
'o.' . $BillOnlineModel::CANCEL_TIME,
'o.' . $BillOnlineModel::EVAL_STATUS,
'o.' . $BillOnlineModel::DELIVERY_TYPE,
'o.' . $BillOnlineModel::DELIVERY_RECORD_ID,
'o.' . $BillOnlineModel::DELIVERY_FEE,
'd.' . $BillDiscountModel::COUPON_MONEY,
'd.' . $BillDiscountModel::VIP_DIS_MONEY,
);
$order_info = $BillOrderModel->getBillFind($map, $fields, 'b.' . $BillOrderModel::ADD_TIME . ' desc', $page . ',' . $limit);
if ($order_info) {
$orderList = array();
$UuOrderModel = D('RetailUuOrder');
$DaOrderModel = D('RetailDaOrder');
$SellModel = D('RetailSell');
foreach ($order_info as &$val) {
$val[$BillOnlineModel::PICK_CODE] = $val[$BillOnlineModel::PICK_CODE] ? $val[$BillOnlineModel::PICK_CODE] : '';
$val[$BillOrderModel::ADD_TIME] = date('Y-m-d H:i:s', $val[$BillOrderModel::ADD_TIME]);
if ($val[$BillOnlineModel::STATUS] == 1) {
//门店配送
if ($val[$BillOrderModel::REFUND_STATUS] == 0) {
//正常订单
$val['state'] = '待发货';
if ($val[$BillOnlineModel::PICKUP_TYPE] == 1) { // 自取
$val['state'] = '待自取';
}
} else if ($val[$BillOrderModel::REFUND_STATUS] == 1) {
$val['state'] = '已申请售后';
}
} else if ($val[$BillOnlineModel::STATUS] == 2) {
$val['state'] = '待收货';
} else if ($val[$BillOnlineModel::STATUS] == 3) {
$val['state'] = '交易完成';
if ($val[$BillOrderModel::REFUND_STATUS] == 1) {
$val['state'] = '已申请售后';
} else {
$val['state'] = '已完成';
}
}
//达达配送delivery_type
if ($val[$BillOnlineModel::DELIVERY_TYPE] == 2) {
$clerkInfo = $DaOrderModel->getFind(array($DaOrderModel::ID => $val[$BillOnlineModel::DELIVERY_RECORD_ID]));
$val['order_status'] = $clerkInfo[$DaOrderModel::ORDER_STATUS];
} else if ($val[$BillOnlineModel::DELIVERY_TYPE] == 3) {
//uu跑腿转成达达状态显示
$state_uu = $UuOrderModel->getFind(array($UuOrderModel::ID => $val[$BillOnlineModel::DELIVERY_RECORD_ID]), $UuOrderModel::STATE);
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;
}
$val[$BillOnlineModel::DELIVERY_TYPE] = 2;
}
$goods_info = $SellModel->getFind(array($SellModel::BILL_ID => $val[$BillOrderModel::ID]), '*', $SellModel::ALL_MONEY . ' desc');
$goodsItem = array();
$goodsItem['count'] = $SellModel->getCount(array($SellModel::BILL_ID => $val[$BillOrderModel::ID]));
$goodsItem['goods_id'] = $goods_info[$SellModel::GOODS_ID];
$goodsItem['img'] = $this->getGoodsImage($goods_info[$SellModel::GOODS_IMG_ID]);
$goodsItem['goods_name'] = $goods_info[$SellModel::GOODS_NAME];
$goodsItem['num'] = intval($goods_info[$SellModel::NUM]);
$goodsItem['price'] = $goods_info[$SellModel::PRICE];
if (!empty($goods_info[$SellModel::SKU_JSON_INFO])) {
$goodsItem[$SellModel::SKU_JSON_INFO] = $goods_info[$SellModel::SKU_JSON_INFO] ? json_decode($goods_info[$SellModel::SKU_JSON_INFO], true) : '';
}
$val['goods_info'] = $goodsItem;
$orderList[] = $val;
}
$res['status'] = 1;
$res['count'] = $limit;
$res['order_info'] = $orderList;
} else {
$res['status'] = 0;
$res['msg'] = '暂无订单';
}
$this->ajaxReturn($res);
}
/**
* 2020-4-1
* 2020-05-11
* 订单列表整合预售
*/
public function orderList_v2()
{
$uid = self::$uid;
$store_id = self::$store_id;
$merchant_id = self::$merchant_id;
$type = I("post.type");//1:全部订单 2:待发货/自提 3:待收货 4:待评价
$page = I("post.page");
if (empty($uid) || empty($type) || empty($page)) {
$res['status'] = 0;
$res['msg'] = '缺少参数';
$this->ajaxReturn($res);
}
$BillOrderModel = D('RetailBillOrder');
$BillOnlineModel = D('RetailBillOnline');
$BillDiscountModel = D('RetailBillDiscount');
$map = array(
'b.' . $BillOrderModel::STORE_ID => $store_id,
'b.' . $BillOrderModel::UID => $uid,
'b.' . $BillOrderModel::MERCHANT_ID => $merchant_id,
'b.' . $BillOrderModel::TYPE => 1,
'b.' . $BillOrderModel::PAY_STATE => array('in', '1,2'),
'b.' . $BillOrderModel::ORDER_TYPE => 1,
'b.' . $BillOrderModel::PAY_TYPE => array('in', '5,6,8'),
'b.' . $BillOrderModel::ADD_TIME => array('gt', time() - 86400 * 60),
'b.' . $BillOrderModel::REFUND_STATUS => array('in', '0,1'),
'o.' . $BillOnlineModel::ORDER_GENRE => array('in', '1,4'),
);
if ($type == 2) {
//自提或待发货订单
$map['o.' . $BillOnlineModel::STATUS] = 1;
} else if ($type == 3) {
//待收货
$map['o.' . $BillOnlineModel::PICKUP_TYPE] = 2;
$map['o.' . $BillOnlineModel::STATUS] = 2;
} else if ($type == 4) {
//待评价
$map['o.' . $BillOnlineModel::STATUS] = 3;
$map['o.' . $BillOnlineModel::EVAL_STATUS] = 0;
} else {
unset($map['b.' . $BillOrderModel::REFUND_STATUS]);
}
$limit = 10;
$fields = array(
'b.' . $BillOrderModel::ID,
'b.' . $BillOrderModel::ALL_MONEY,
'b.' . $BillOrderModel::ADD_TIME,
'b.' . $BillOrderModel::ORDER_NO,
'b.' . $BillOrderModel::REFUND_STATUS,
'b.' . $BillOrderModel::PAY_STATE,
'o.' . $BillOnlineModel::REMARK,
'o.' . $BillOnlineModel::STATUS,
'o.' . $BillOnlineModel::PICKUP_TYPE,
'o.' . $BillOnlineModel::REMIND_STATE,
'o.' . $BillOnlineModel::PICK_CODE,
'o.' . $BillOnlineModel::REFUND_TIME,
'o.' . $BillOnlineModel::CANCEL_TIME,
'o.' . $BillOnlineModel::EVAL_STATUS,
'o.' . $BillOnlineModel::DELIVERY_TYPE,
'o.' . $BillOnlineModel::DELIVERY_RECORD_ID,
'o.' . $BillOnlineModel::DELIVERY_FEE,
'o.order_genre',
'd.' . $BillDiscountModel::COUPON_MONEY,
'd.' . $BillDiscountModel::VIP_DIS_MONEY,
'd.use_integral',
'b.store_id',
);
$order_info = $BillOrderModel->getBillFind($map, $fields, 'b.' . $BillOrderModel::ADD_TIME . ' desc', $page . ',' . $limit);
if ($order_info) {
$orderList = array();
$UuOrderModel = D('RetailUuOrder');
$DaOrderModel = D('RetailDaOrder');
$SellModel = D('RetailSell');
foreach ($order_info as &$val) {
$val[$BillOnlineModel::PICK_CODE] = $val[$BillOnlineModel::PICK_CODE] ? $val[$BillOnlineModel::PICK_CODE] : '';
$val[$BillOrderModel::ADD_TIME] = date('Y-m-d H:i:s', $val[$BillOrderModel::ADD_TIME]);
switch ($val['order_genre']) {
case 4:
//预售订单
$advance_info = D("RetailBillAdvance")->bill_advance(array('bill_id' => $val['id']));
$val['tail_start_time'] = date('m月d日 H:i', $advance_info['tail_start_time']);
break;
}
if ($val[$BillOnlineModel::STATUS] == 1) {
//门店配送
if ($val[$BillOrderModel::REFUND_STATUS] == 0) {
//正常订单
$val['state'] = '待发货';
if ($val[$BillOnlineModel::PICKUP_TYPE] == 1) { // 自取
$val['state'] = '待自取';
}
} else if ($val[$BillOrderModel::REFUND_STATUS] == 1) {
$val['state'] = '已申请售后';
}
} else if ($val[$BillOnlineModel::STATUS] == 2) {
$val['state'] = '待收货';
} else if ($val[$BillOnlineModel::STATUS] == 3) {
$val['state'] = '交易完成';
if ($val[$BillOrderModel::REFUND_STATUS] == 1) {
$val['state'] = '已申请售后';
} else {
$val['state'] = '已完成';
}
} else if ($val[$BillOnlineModel::STATUS] == 0 && $val['order_genre'] == 4 && $val['pay_state'] == 2) {
if ($val['cancel_time'] > 0) {
$val['state'] = '已申请售后';
$val['tail_money_state'] = 0;
} else if ($advance_info['tail_end_time'] < time()) {
$val['state'] = '超出尾款支付时间';
$val['tail_money_state'] = 0;
} else if ($advance_info['tail_start_time'] > time()) {
$val['state'] = '未到尾款支付时间';
$val['tail_money_state'] = 0;
} else {
$val['state'] = '待付尾款';
$val['tail_money_state'] = 1;
}
}
//达达配送delivery_type
if ($val[$BillOnlineModel::DELIVERY_TYPE] == 2) {
$clerkInfo = $DaOrderModel->getFind(array($DaOrderModel::ID => $val[$BillOnlineModel::DELIVERY_RECORD_ID]));
$val['order_status'] = $clerkInfo[$DaOrderModel::ORDER_STATUS];
} else if ($val[$BillOnlineModel::DELIVERY_TYPE] == 3) {
//uu跑腿转成达达状态显示
$state_uu = $UuOrderModel->getFind(array($UuOrderModel::ID => $val[$BillOnlineModel::DELIVERY_RECORD_ID]), $UuOrderModel::STATE);
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;
}
$val[$BillOnlineModel::DELIVERY_TYPE] = 2;
}
$goods_info = $SellModel->getFind(array($SellModel::BILL_ID => $val[$BillOrderModel::ID]), '*', $SellModel::ALL_MONEY . ' desc');
$goodsItem = array();
$goodsItem['count'] = $SellModel->getCount(array($SellModel::BILL_ID => $val[$BillOrderModel::ID]));
$goodsItem['goods_id'] = $goods_info[$SellModel::GOODS_ID];
$goodsItem['img'] = $this->getGoodsImage($goods_info[$SellModel::GOODS_IMG_ID]);
$goodsItem['goods_name'] = $goods_info[$SellModel::GOODS_NAME];
$goodsItem['num'] = intval($goods_info[$SellModel::NUM]);
$goodsItem['price'] = $goods_info[$SellModel::PRICE];
if (!empty($goods_info[$SellModel::SKU_JSON_INFO])) {
$goodsItem[$SellModel::SKU_JSON_INFO] = $goods_info[$SellModel::SKU_JSON_INFO] ? json_decode($goods_info[$SellModel::SKU_JSON_INFO], true) : '';
}
$val['goods_info'] = $goodsItem;
$orderList[] = $val;
}
$res['status'] = 1;
$res['count'] = $limit;
$res['order_info'] = $orderList;
} else {
$res['status'] = 0;
$res['msg'] = '暂无订单';
}
$this->ajaxReturn($res);
}
/**
* 订单列表 不限制门店
* 2020-05-22
*/
public function orderList_v3()
{
$uid = self::$uid;
$merchant_id = self::$merchant_id;
$type = I("post.type");//-1 待付款 1:全部订单 2:待发货/自提 3:待收货 4:待评价
$page = I("post.page");
$order_genre = I("post.order_genre");//订单类型 1.普通订单 2.拼团订单 3.秒杀订单 4.预售订单
if (empty($uid) || empty($type) || empty($page)) {
$res['status'] = 0;
$res['msg'] = '缺少参数';
$this->ajaxReturn($res);
}
//获取该用户的待支付列表
$redis_key = 'retail_*_*_*_' . $uid . '_*';
$ApiRedis = new \Addons\Api\RedisController();
$wait_pay_list = $ApiRedis::$redis->mget($ApiRedis::$redis->keys($redis_key));
$billId = array();//存储在待支付列表里的订单ID
$waitPayTimeArr = array();//待支付订单的付款倒计时
if (!empty($wait_pay_list)) {
foreach ($wait_pay_list as $value) {
$data = json_decode($value, true);
if (!in_array($data['bill_id'], $billId)) {
$billId[] = $data['bill_id'];
$waitPayTimeArr[] = $data['expiration_time'];
}
}
}
$map = array(
'uid' => $uid,
'merchant_id' => $merchant_id,
'type' => 1,
'order_type' => 1,
'refund_status' => array('in', '0,1'),
'order_genre' => array('in', '1,2,3,4'),
);//查询条件
//订单类型 1.普通订单 2.拼团订单 3.秒杀订单 4.预售订单
if (!empty($order_genre)) {
$map['order_genre'] = $order_genre;
}
//订单状态
switch ($type) {
case '-1':
$map['id'] = array('in', $billId ? $billId : array(0));
//查询待支付订单
break;
case '1':
//全部订单
break;
case '2':
//自提或待发货订单
$map['status'] = 1;
$map['refund_status'] = 0;
break;
case '3':
//待收货
$map['pickup_type'] = ['in', '2,3'];
$map['status'] = 2;
$map['refund_status'] = 0;
break;
case '4':
//待评价
$map['status'] = 3;
$map['eval_status'] = 0;
$map['refund_status'] = 0;
break;
}
$limit = 10;
$fields = array(
'id',
'all_money',
'add_time',
'order_no',
'refund_status',
'pay_state',
'status',
'pickup_type',
'remind_state',
'pick_code',
'refund_time',
'cancel_time',
'eval_status',
'delivery_type',
'delivery_record_id',
'delivery_fee',
'order_genre',
'store_id',
'store_id',
);
$BillViewModel = new BillOrderViewModel();
$orderList = $BillViewModel->getSelect($map, $fields, 'id desc', $page . ',' . $limit);
if ($orderList) {
$UuOrderModel = new RetailUuOrderModel();//uu订单模型
$DaOrderModel = new RetailDaOrderModel();//达达订单模型
$SellModel = new RetailSellModel();//商品销售记录模型
$StoreModel = new RetailStoreModel();//门店表模型
$storeList = array();
$RetailBillAdvanceModel = new RetailBillAdvanceModel();
$BillGroupModel = new RetailBillGroupModel();
$plugClass = new Plug();
$data = array();
foreach ($orderList as &$val) {
$pick_code = $val['pick_code'] ? $val['pick_code'] : '';
$add_time = date('Y-m-d H:i:s', $val['add_time']);
$tail_start_time = '';
$group_desc_time = '';
$pay_desc_time = '';
$state_msg = '';
if ($val['order_genre'] == 4) {//预售订单
$advance_info = $RetailBillAdvanceModel->bill_advance(array('bill_id' => $val['id']));
$tail_start_time = date('m月d日 H:i', $advance_info['tail_start_time']);
}
//按钮 1开启 0关闭
$button = array(
'pick_code' => 0, //取货码按钮
'remind_send' => 0, //提醒发货按钮
'cancel_order' => 0,//(已支付)取消订单
'cancel_pay' => 0, //(未支付)取消订单
'see_rider' => 0, //查看骑手
'see_logistics' => 0,//查看物流
'receipt' => 0, //确认收货
'evaluate' => 0, //评价
'service' => 0, //售后
'pay_status' => 0, //支付
'tail_pay_status' => 0,//支付尾款
'extraction_code' => 0,//祝福语按钮
);
//判断这条订单所属门店,是否有权限
$storePlugStatusPost = [
'store_id' => $val['store_id'],
'identification_arr' => ['blessing'],//插件标识
];
$blessing = $plugClass->plugStoreStatus($storePlugStatusPost);
if ($blessing === true) {
//门店有权限,并开启插件,查询订单是否有祝福码
$extractionCode = new Index();
$extraction_code = $extractionCode->obtainExtractionCode($val['id']);//祝福码
//订单有祝福语,没过期
if ($extraction_code) {
$button['extraction_code'] = 1;
}
}
switch ($val['status']) {
case '0':
//未支付
if ($val['order_genre'] == 4 && $val['pay_state'] == 2) {
//预售已支付定金
if ($advance_info['tail_end_time'] < time()) {
$state_msg = '超出尾款支付时间';
} else if ($advance_info['tail_start_time'] > time()) {
$state_msg = '未到尾款支付时间';
} else {
$state_msg = '待付尾款';
$button['tail_pay_status'] = 1;
}
} else {
//把不在待支付订单列表中的订单改为不能支付
$state_msg = '待付款';
$index = array_search($val['id'], $billId);
if ($index === false) {
$button['pay_status'] = 0;
} else {
$button['pay_status'] = 1;
$pay_desc_time = $waitPayTimeArr[$index];
}
if ($button['pay_status'] == 1) {
$button['cancel_pay'] = 1;
} else {
$state_msg = '交易关闭';
}
}
break;
case '1':
//待发货、待自提
if ($val['refund_status'] == 0) {
//正常订单
if ($val['order_genre'] == 2) {
//拼团订单
$group = $BillGroupModel->getFind(array('bill_id' => $val['id']), 'state,end_time');
if ($group['state'] == 1) {
$state_msg = '拼团中';
$group_desc_time = $group['end_time'];
} else if ($group['state'] == 2) {
$state_msg = '拼团成功';
} else {
$state_msg = '拼团失败';
}
} else {
if ($val['pickup_type'] == 1) { // 自取
$state_msg = '待自取';
$button['pick_code'] = 1;
} else {
$state_msg = '待发货';
$button['remind_send'] = $val['remind_state'] == 1 ? 0 : 1;
}
if ($val['order_genre'] == 1 || $val['order_genre'] == 4) {
$button['cancel_order'] = 1;
}
}
} else if ($val['refund_status'] == 1) {
$state_msg = '已申请售后';
}
break;
case '2':
//待收货
$state_msg = '待收货';
$button['receipt'] = 1;
break;
case '3':
//已收货
$state_msg = '交易完成';
if ($val['refund_status'] == 1) {
$state_msg = '已申请售后';
} else {
if ($val['eval_status'] != 1) {
$state_msg = '待评价';
}
}
if ($val['eval_status'] != 1) {
$button['evaluate'] = 1;
}
if (($val['order_genre'] == 1 || $val['order_genre'] == 4) && ($val['refund_status'] == 0 || $val['refund_status'] == 1)) {
$button['service'] = 1;
}
break;
}
$order_status = 0;
if ($val['pickup_type'] != 1) {
switch ($val['delivery_type']) {
case '1':
//商家配送
break;
case '2':
//达达配送
$order_status = $DaOrderModel->getFindField(array('id' => $val['delivery_record_id']), 'order_status');
break;
case '3':
//uu跑腿
//转成达达状态显示
$state_uu = $UuOrderModel->getFindField(array('id' => $val['delivery_record_id']), 'state');
if ($state_uu == 1) {
$order_status = 1;
} else if ($state_uu == 3 || $state_uu == 4) {
$order_status = 2;
} else if ($state_uu == 5 || $state_uu == 6) {
$order_status = 3;
} else if ($state_uu == -1) {
$order_status = 5;
}
break;
case '4':
//快递发货
if ($val['refund_status'] == 0) {
$button['see_logistics'] = 1;
}
break;
case '5':
//码科配送
$MakeOrderModel = new MakeOrderModel();//码科订单模型
$status = $MakeOrderModel->getFindField(['id' => $val['delivery_record_id']], 'status');
switch ($status) {
case 'payed':
//待接单
$order_status = 1;
break;
case 'accepted':
//'待取件
$order_status = 2;
break;
case 'geted':
//待收件
$order_status = 3;
break;
case 'gotoed':
//待评价
$order_status = 4;
break;
case 'completed':
//订单已完成
$order_status = 4;
break;
case 'cancel':
//已取消
$order_status = 5;
break;
}
break;
}
}
switch ($order_status) {
case '1':
$state_msg = '骑手接单中';
break;
case '2':
$button['see_rider'] = 1;
$state_msg = '骑手取货中';
break;
case '3':
$button['see_rider'] = 1;
$state_msg = '骑手配送中';
break;
case '5':
$state_msg = '骑手接单中';
break;
}
$goods_info = $SellModel->getFind(array('bill_id' => $val['id']), '*', 'all_money desc');
$goodsItem = array(
'count' => $SellModel->getCount(array('bill_id' => $val['id'])),
'goods_id' => $goods_info['goods_id'],
'goods_img' => $this->getGoodsImage($goods_info['goods_img_id']),
'goods_name' => $goods_info['goods_name'],
'num' => intval($goods_info['num']),
'price' => $goods_info['price'],
);
if (!empty($goods_info['sku_json_info'])) {
$goodsItem['sku_name'] = $goods_info['sku_json_info'] ? json_decode($goods_info['sku_json_info'], true)['name'] : '';
}
//门店图片
if (!$storeList[$val['store_id']]) {
$store = $StoreModel->getFind(array('id' => $val['store_id']), 'storetag as store_name,shopimg_id');
$store['store_image'] = getImage($store['shopimg_id']);
$storeList[$val['store_id']] = $store;
}
$data[] = array(
'store_name' => $storeList[$val['store_id']]['store_name'],
'store_image' => $storeList[$val['store_id']]['store_image'],
'id' => $val['id'],
'store_id' => $val['store_id'],
'all_money' => $val['all_money'],
'order_genre' => $val['order_genre'],
'order_no' => $val['order_no'],
'add_time' => $add_time,
'state_msg' => $state_msg,
'pick_code' => $pick_code,
'tail_start_time' => $tail_start_time,
'group_desc_time' => $group_desc_time,
'pay_desc_time' => $pay_desc_time,
'goods_info' => $goodsItem,
'button' => $button,
);
}
$res['status'] = 1;
$res['msg'] = '获取成功';
$res['count'] = $limit;
$res['data'] = $data;
} else {
$res['status'] = 1;
$res['msg'] = '暂无订单';
$res['count'] = $limit;
$res['data'] = array();
}
$this->ajaxReturn($res);
}
/**
* 订单列表 线上线下结合
*/
public function orderList_v4()
{
$data = I('post.');
$BillOrderClass = new BillOrder();
$result = $BillOrderClass->orderList([
'merchant_id' => self::$merchant_id,
'uid' => self::$uid,
'vip_id' => self::$user['vid'],
'order_type' => $data['order_type'],
'order_status' => $data['order_status'],
'order_genre' => $data['order_genre'],
'page' => $data['page'],
]);
$this->ajaxReturn($result);
}
/**
* 确认收货
*/
public function confirmGoods()
{
if (IS_POST) {
$uid = self::$uid;
$id = I('post.order_id');
$BillModel = new RetailBillOrderModel();
$map = array(
$BillModel::ID => $id,
$BillModel::UID => $uid,
$BillModel::MERCHANT_ID => self::$merchant_id,
);
$order = $BillModel->getBillFind($map);
if (empty($order)) {
$res['status'] = 0;
$res['msg'] = '订单有误';
} else {
$OnlineModel = new RetailBillOnlineModel();
$data[$OnlineModel::STATUS] = 3;
$data[$OnlineModel::PICK_CODE] = "";
$save = $OnlineModel->updateOrder(array($OnlineModel::BILL_ID => $id), $data);
if ($save) {
$up = array(
$BillModel::FINISH_TIME => time()
);
$BillModel->updateOrder($map, $up);
$plugClass = new Plug();
//订单获取祝福码,判断该门店是否,有,并且开启
$storePlugStatusPost = [
'store_id' => $order['store_id'],
'identification_arr' => ['blessing'],
];
$storePlugStatus = $plugClass->plugStoreStatus($storePlugStatusPost);//获取状态
if ($storePlugStatus === true) {
//有权限,可以修改有效期
$index = new Index();
$index->validityTimeSave($id, 2);//修改有效期:$type == 1:首次扫码(id = 门店id),2:确认订单(id = 订单id)
}
$res['status'] = 1;
$res['msg'] = '确认成功';
} else {
$res['status'] = 0;
$res['msg'] = '确认失败';
}
}
} else {
$res['status'] = 0;
$res['msg'] = '网络错误';
}
$this->ajaxReturn($res);
}
/**
* 获取订单详情
*/
public function getOrderDetail_v1()
{
$order_no = I('post.order_no');
if (empty($order_no)) {
$res['status'] = 0;
$res['msg'] = '缺少参数';
$this->ajaxReturn($res);
}
$uid = self::$uid;
$merchant_id = self::$merchant_id;
$BillModel = D('RetailBillOrder');
$oMap = array(
$BillModel::ORDER_NO => strval($order_no),
$BillModel::UID => $uid,
$BillModel::MERCHANT_ID => $merchant_id,
$BillModel::PAY_STATE => array('in', '0,1'), //0待支付 1已支付
$BillModel::ORDER_TYPE => 1,//购买订单
$BillModel::TYPE => 1, //商城订单
);
$fields = array(
$BillModel::ID, //id
$BillModel::ALL_MONEY, //订单总金额
$BillModel::PAY_TYPE, //支付类型 1现金 2银行卡 3微信支付 4支付宝支付 5会员卡余额支付 6小程序商城微信支付 7其他支付方式 8组合支付
$BillModel::PAY_STATE, //0交易关闭 1已支付 2待支付
$BillModel::REFUND_STATUS,//主要判断商品退款 0正常买单 1申请退款 2退款成功 3部分退款成功 -1退款失败
$BillModel::VID, //会员id
$BillModel::ORDER_NO, //订单编号
$BillModel::UID, //小程序用户id
$BillModel::REFUND_MONEY,//总退款金额
$BillModel::ADD_TIME, //下单时间
$BillModel::FINISH_TIME,//订单完成时间
);
$order_info = $BillModel->getFind($oMap, $fields);
if (!empty($order_info)) {
$time = time();
if ($order_info['pay_state'] == 1) {
$StoreModel = D('RetailStore');
$refund_time_limit = self::$store[$StoreModel::REFUND_TIME_LIMIT];
$order_info['can_refund'] = 1;
$order_info['can_refund_time'] = ($time - $order_info[$BillModel::FINISH_TIME]) / 86400;
if (!empty($order_info[$BillModel::FINISH_TIME]) && ($time - $order_info[$BillModel::FINISH_TIME]) / 86400 > $refund_time_limit) {
$order_info['can_refund'] = 0;
}
} else {
$order_info['can_refund'] = 0;
}
$SellModel = D('RetailSell');
$sMap = array(
$SellModel::BILL_ID => $order_info[$BillModel::ID]
);
$sFields = array(
$SellModel::ID,
$SellModel::GOODS_ID,
$SellModel::GOODS_IMG_ID,
$SellModel::GOODS_NAME,
$SellModel::NUM,
$SellModel::PRICE,
$SellModel::ORIGINAL_PRICE,
$SellModel::VIP_PRICE,
$SellModel::PLUS_VIP_PRICE,
$SellModel::REFUND_NUM,
$SellModel::SKU_JSON_INFO,
$SellModel::WAIT_REFUND_NUM,
);
$sellGoods = $SellModel->getSelect($sMap, $sFields);
$can_refund_goods = array();
foreach ($sellGoods as &$sVal) {
$sVal['goods_count'] = 0;
$sVal['checked'] = false;
$sVal['goods_img'] = $this->getGoodsImage($sVal[$SellModel::GOODS_IMG_ID]);
$sVal['less_num'] = round($sVal[$SellModel::NUM] - $sVal[$SellModel::REFUND_NUM] - $sVal[$SellModel::WAIT_REFUND_NUM], 3);
if (!empty($sVal[$SellModel::SKU_JSON_INFO])) {
$sVal[$SellModel::SKU_JSON_INFO] = json_decode($sVal[$SellModel::SKU_JSON_INFO], true);
}
$sVal[$SellModel::PRICE] = floatval($sVal[$SellModel::PRICE]);
$sVal[$SellModel::ORIGINAL_PRICE] = floatval($sVal[$SellModel::ORIGINAL_PRICE]);
$sVal[$SellModel::VIP_PRICE] = floatval($sVal[$SellModel::VIP_PRICE]);
$sVal[$SellModel::PLUS_VIP_PRICE] = floatval($sVal[$SellModel::PLUS_VIP_PRICE]);
$sVal[$SellModel::NUM] = floatval($sVal[$SellModel::NUM]);
$sVal[$SellModel::REFUND_NUM] = floatval($sVal[$SellModel::REFUND_NUM]);
if ($sVal['less_num'] > 0 && $order_info['pay_state'] == 1) {
$can_refund_goods[] = $sVal;
}
}
$DiscountModel = D('RetailBillDiscount');
$OnlineModel = D('RetailBillOnline');
$refund_bill = array();
$wait_refund_bill = array();
$waitRefundGoods = array(); //正在申请退的款商品
$refundGoods = array(); //已经退款成功的商品
//已经支付完成
switch ($order_info['order_genre']) {
case '1':
//普通订单
if ($order_info['pay_state'] == 1) {
$wMap = array(
$BillModel::REFUND_NO => strval($order_info[$BillModel::ORDER_NO]),
$BillModel::REFUND_STATUS => 1,//正在申请退款
$BillModel::ORDER_TYPE => 2,//退款订单
$BillModel::TYPE => 1, //商城订单
);
$wFields = array(
$BillModel::ID,
$BillModel::ALL_MONEY,
$DiscountModel::USE_INTEGRAL,
$DiscountModel::GET_INTEGRAL,
$OnlineModel::DELIVERY_FEE,
);
$wait_refund_bill_order = $BillModel->getOrderLinkSelect($wMap, $wFields);//正在申请退款的订单
if (!empty($wait_refund_bill_order)) {
$wait_refund_bill_id = array();
$wait_refund_bill = array(
$BillModel::ALL_MONEY => 0,
$DiscountModel::USE_INTEGRAL => 0,
$DiscountModel::GET_INTEGRAL => 0,
$OnlineModel::DELIVERY_FEE => 0,
);
foreach ($wait_refund_bill_order as $wB) {
$wait_refund_bill_id[] = $wB[$BillModel::ID];
$wait_refund_bill[$BillModel::ALL_MONEY] += $wB[$BillModel::ALL_MONEY];
$wait_refund_bill[$DiscountModel::USE_INTEGRAL] += $wB[$DiscountModel::USE_INTEGRAL];
$wait_refund_bill[$DiscountModel::GET_INTEGRAL] += $wB[$DiscountModel::GET_INTEGRAL];
$wait_refund_bill[$OnlineModel::DELIVERY_FEE] += $wB[$OnlineModel::DELIVERY_FEE];
}
$waitRefundGoods = $SellModel->getSelect(array($SellModel::BILL_ID => array('in', $wait_refund_bill_id)));
foreach ($waitRefundGoods as &$wVal) {
$wVal['goods_img'] = $this->getGoodsImage($wVal[$SellModel::GOODS_IMG_ID]);
if (!empty($wVal[$SellModel::SKU_JSON_INFO])) {
$wVal[$SellModel::SKU_JSON_INFO] = json_decode($wVal[$SellModel::SKU_JSON_INFO], true);
}
$wVal[$SellModel::PRICE] = floatval($wVal[$SellModel::PRICE]);
$wVal[$SellModel::ORIGINAL_PRICE] = floatval($wVal[$SellModel::ORIGINAL_PRICE]);
$wVal[$SellModel::VIP_PRICE] = floatval($wVal[$SellModel::VIP_PRICE]);
$wVal[$SellModel::PLUS_VIP_PRICE] = floatval($wVal[$SellModel::PLUS_VIP_PRICE]);
$wVal[$SellModel::NUM] = floatval($wVal[$SellModel::NUM]);
$wVal[$SellModel::REFUND_NUM] = floatval($wVal[$SellModel::REFUND_NUM]);
}
}
$rMap = array(
$BillModel::REFUND_NO => strval($order_info[$BillModel::ORDER_NO]),
$BillModel::REFUND_STATUS => array('in', '2,3'),
$BillModel::ORDER_TYPE => 2,//退款订单
$BillModel::TYPE => 1, //商城订单
);
$refund_bill_order = $BillModel->getOrderLinkSelect($rMap, $wFields);//正在申请退款的订单
if (!empty($refund_bill_order)) {
$refund_bill_id = array();
$refund_bill = array(
$BillModel::ALL_MONEY => 0,
$DiscountModel::USE_INTEGRAL => 0,
$DiscountModel::GET_INTEGRAL => 0,
$OnlineModel::DELIVERY_FEE => 0,
);
foreach ($refund_bill_order as $rB) {
$refund_bill_id[] = $rB[$BillModel::ID];
$refund_bill[$BillModel::ALL_MONEY] += $rB[$BillModel::ALL_MONEY];
$refund_bill[$DiscountModel::USE_INTEGRAL] += $rB[$DiscountModel::USE_INTEGRAL];
$refund_bill[$DiscountModel::GET_INTEGRAL] += $rB[$DiscountModel::GET_INTEGRAL];
$refund_bill[$OnlineModel::DELIVERY_FEE] += $rB[$OnlineModel::DELIVERY_FEE];
}
$refundGoods = $SellModel->getSelect(array($SellModel::BILL_ID => array('in', $refund_bill_id)));
foreach ($refundGoods as &$rVal) {
$rVal['goods_img'] = $this->getGoodsImage($rVal[$SellModel::GOODS_IMG_ID]);
if (!empty($rVal[$SellModel::SKU_JSON_INFO])) {
$rVal[$SellModel::SKU_JSON_INFO] = json_decode($rVal[$SellModel::SKU_JSON_INFO], true);
}
$rVal[$SellModel::PRICE] = floatval($rVal[$SellModel::PRICE]);
$rVal[$SellModel::ORIGINAL_PRICE] = floatval($rVal[$SellModel::ORIGINAL_PRICE]);
$rVal[$SellModel::VIP_PRICE] = floatval($rVal[$SellModel::VIP_PRICE]);
$rVal[$SellModel::PLUS_VIP_PRICE] = floatval($rVal[$SellModel::PLUS_VIP_PRICE]);
$rVal[$SellModel::NUM] = floatval($rVal[$SellModel::NUM]);
$rVal[$SellModel::REFUND_NUM] = floatval($rVal[$SellModel::REFUND_NUM]);
}
}
}
break;
case '2':
//拼团订单
$order_info['act_state'] = D('RetailBillGroup')->getFindField(array('bill_id' => $order_info['id']), 'state');
break;
case '3':
//秒杀订单
$order_info['act_state'] = D('RetailBillSpike')->getFindField(array('bill_id' => $order_info['id']), 'state');
break;
case '4':
//预售订单
$order_info['advance_info'] = D("RetailBillAdvance")->bill_advance(array('bill_id' => $order_info['id']));
break;
}
$billDis = $DiscountModel->getFind(array($DiscountModel::BILL_ID => $order_info[$BillModel::ID]));
$billOnline = $OnlineModel->getFind(array($OnlineModel::BILL_ID => $order_info[$BillModel::ID]));
$order_info['wait_refund_order'] = $wait_refund_bill;
$order_info['refund_order'] = $refund_bill;
$order_info['all_money'] = floatval($order_info[$BillModel::ALL_MONEY]);
$order_info['refund_money'] = floatval($order_info[$BillModel::REFUND_MONEY]);
$order_info['less_money'] = round($order_info[$BillModel::ALL_MONEY] - $order_info[$BillModel::REFUND_MONEY], 2);
$order_info['delivery_fee'] = floatval($billOnline[$OnlineModel::DELIVERY_FEE]);
$order_info['sell_info'] = $sellGoods;//全部
$order_info['wait_refund_info'] = $waitRefundGoods;//售后中
$order_info['refund_info'] = $refundGoods;//售后完成
$order_info['can_refund_goods'] = $can_refund_goods;//售后完成
$order_info['add_time'] = date('Y-m-d H:i:s', $order_info[$BillModel::ADD_TIME]);
$order_info['finish_time'] = date('Y-m-d H:i:s', $order_info[$BillModel::FINISH_TIME]);
$order_info = array_merge($order_info, $billDis, $billOnline);
if ($order_info['pay_state'] == 1) {
if ($order_info[$OnlineModel::STATUS] == 1) {
//门店配送
if ($order_info[$BillModel::REFUND_STATUS] == 0) {
//正常订单
$order_info['state'] = '待发货';
if ($order_info[$OnlineModel::PICKUP_TYPE] == 1) { // 自取
$order_info['state'] = '待自取';
}
} else if ($order_info[$BillModel::REFUND_STATUS] == 1) {
$order_info['state'] = '待商家确认退款';
} else {
$order_info['state'] = '已完成';
}
} else if ($order_info[$OnlineModel::STATUS] == 2) {
$order_info['state'] = '待收货';
} else if ($order_info[$OnlineModel::STATUS] == 3) {
$order_info['state'] = '交易完成';
if ($order_info[$BillModel::REFUND_STATUS] == 1) {
$order_info['state'] = '待商家确认退款';
} else if ($order_info[$BillModel::REFUND_STATUS] == 2) {
$order_info['state'] = '已退款';
} else {
$order_info['state'] = '已完成';
}
}
$order_info['payList'] = getPayTypeList($order_info[$BillModel::PAY_TYPE], $order_info[$BillModel::ALL_MONEY], $order_info[$BillModel::ID]);
// 评价
if ($order_info[$OnlineModel::EVAL_STATUS] == 1) {
$EvaluateModel = D('RetailEvaluate');
$evaluateContent = $EvaluateModel->getFindField(array('order_id' => $order_info['id']), 'content');
$order_info['evaluateContent'] = $evaluateContent ? $evaluateContent : '未发表评价内容';
} else {
$order_info['evaluateContent'] = '未发表评价内容';
}
if ($order_info[$OnlineModel::PICKUP_TYPE] == 2) {
//获取配送信息
$delivery = $this->getDriver($order_info[$OnlineModel::DELIVERY_RECORD_ID], $order_info[$OnlineModel::DELIVERY_TYPE]);
$order_info['delivery_status'] = $delivery['delivery_status'];
$order_info['deliverInfo'] = $delivery;
}
} else {
$order_info['state'] = '待付款';
if ($order_info['pickup_type'] == 2) {
$order_info['deliverInfo'] = array(
'driver_name' => '商家配送',
'driver_mobile' => '',
'driver_type' => '商家配送'
);
}
}
if ($order_info['pickup_type'] == 3) {
$order_info['deliverInfo'] = array(
'driver_name' => '快递发货',
'driver_mobile' => '',
'driver_type' => '快递发货'
);
}
// 统计所有优惠
$order_info['dis_all_money'] = round($order_info[$DiscountModel::COUPON_MONEY] + $order_info[$DiscountModel::VIP_DIS_MONEY] + $order_info[$DiscountModel::VIP_LESS_MONEY], 2);
$res['status'] = 1;
$res['order_info'] = $order_info;
} else {
$res['status'] = 0;
$res['msg'] = '未找到该订单';
}
$this->ajaxReturn($res);
}
/**
* 整合预售订单获取订单详情
*/
public function getOrderDetail_v2()
{
$order_no = I('post.order_no');
if (empty($order_no)) {
$res['status'] = 0;
$res['msg'] = '缺少参数';
$this->ajaxReturn($res);
}
$uid = self::$uid;
$merchant_id = self::$merchant_id;
$BillModel = D('RetailBillOrder');
$oMap = array(
'b.' . $BillModel::ORDER_NO => strval($order_no),
'b.' . $BillModel::UID => $uid,
'b.' . $BillModel::MERCHANT_ID => $merchant_id,
'b.' . $BillModel::ORDER_TYPE => 1,//购买订单
'b.' . $BillModel::TYPE => 1, //商城订单
);
$fields = array(
'b.' . $BillModel::ID, //id
'b.' . $BillModel::ALL_MONEY, //订单总金额
'b.' . $BillModel::PAY_TYPE, //支付类型 1现金 2银行卡 3微信支付 4支付宝支付 5会员卡余额支付 6小程序商城微信支付 7其他支付方式 8组合支付
'b.' . $BillModel::PAY_STATE, //0交易关闭 1已支付 2待支付
'b.' . $BillModel::REFUND_STATUS,//主要判断商品退款 0正常买单 1申请退款 2退款成功 3部分退款成功 -1退款失败
'b.' . $BillModel::VID, //会员id
'b.' . $BillModel::ORDER_NO, //订单编号
'b.' . $BillModel::UID, //小程序用户id
'b.' . $BillModel::REFUND_MONEY,//总退款金额
'b.' . $BillModel::ADD_TIME, //下单时间
'b.' . $BillModel::FINISH_TIME,//订单完成时间
'o.order_genre', //订单类型
'b.store_id',
);
$order_info = $BillModel->getBillFind($oMap, $fields);
if (!empty($order_info)) {
$time = time();
if ($order_info['pay_state'] == 1) {
$StoreModel = D('RetailStore');
$refund_time_limit = self::$store[$StoreModel::REFUND_TIME_LIMIT];
$order_info['can_refund'] = 1;
$order_info['can_refund_time'] = ($time - $order_info[$BillModel::FINISH_TIME]) / 86400;
if (!empty($order_info[$BillModel::FINISH_TIME]) && ($time - $order_info[$BillModel::FINISH_TIME]) / 86400 > $refund_time_limit) {
$order_info['can_refund'] = 0;
}
} else {
$order_info['can_refund'] = 0;
}
$SellModel = D('RetailSell');
$sMap = array(
$SellModel::BILL_ID => $order_info[$BillModel::ID]
);
$sFields = array(
$SellModel::ID,
$SellModel::GOODS_ID,
$SellModel::GOODS_IMG_ID,
$SellModel::GOODS_NAME,
$SellModel::NUM,
$SellModel::PRICE,
$SellModel::ORIGINAL_PRICE,
$SellModel::VIP_PRICE,
$SellModel::PLUS_VIP_PRICE,
$SellModel::REFUND_NUM,
$SellModel::SKU_JSON_INFO,
$SellModel::WAIT_REFUND_NUM,
"integral_marketing",
"mem_integral",
"use_integral",
"integral_dis_money"
);
$sellGoods = $SellModel->getSelect($sMap, $sFields);
$can_refund_goods = array();
foreach ($sellGoods as &$sVal) {
$sVal['goods_count'] = 0;
$sVal['checked'] = false;
$sVal['goods_img'] = $this->getGoodsImage($sVal[$SellModel::GOODS_IMG_ID]);
$sVal['less_num'] = round($sVal[$SellModel::NUM] - $sVal[$SellModel::REFUND_NUM] - $sVal[$SellModel::WAIT_REFUND_NUM], 3);
if (!empty($sVal[$SellModel::SKU_JSON_INFO])) {
$sVal[$SellModel::SKU_JSON_INFO] = json_decode($sVal[$SellModel::SKU_JSON_INFO], true);
}
$sVal[$SellModel::PRICE] = floatval($sVal[$SellModel::PRICE]);
$sVal[$SellModel::ORIGINAL_PRICE] = floatval($sVal[$SellModel::ORIGINAL_PRICE]);
$sVal[$SellModel::VIP_PRICE] = floatval($sVal[$SellModel::VIP_PRICE]);
$sVal[$SellModel::PLUS_VIP_PRICE] = floatval($sVal[$SellModel::PLUS_VIP_PRICE]);
$sVal[$SellModel::NUM] = floatval($sVal[$SellModel::NUM]);
$sVal[$SellModel::REFUND_NUM] = floatval($sVal[$SellModel::REFUND_NUM]);
if ($sVal['less_num'] > 0 && $order_info['pay_state'] == 1) {
$can_refund_goods[] = $sVal;
}
}
$DiscountModel = D('RetailBillDiscount');
$OnlineModel = D('RetailBillOnline');
$refund_bill = array();
$wait_refund_bill = array();
$waitRefundGoods = array(); //正在申请退的款商品
$refundGoods = array(); //已经退款成功的商品
//已经支付完成
switch ($order_info['order_genre']) {
case '1':
//普通订单
if ($order_info['pay_state'] == 1) {
$wMap = array(
$BillModel::REFUND_NO => strval($order_info[$BillModel::ORDER_NO]),
$BillModel::REFUND_STATUS => 1,//正在申请退款
$BillModel::ORDER_TYPE => 2,//退款订单
$BillModel::TYPE => 1, //商城订单
);
$wFields = array(
$BillModel::ID,
$BillModel::ALL_MONEY,
$DiscountModel::USE_INTEGRAL,
$DiscountModel::GET_INTEGRAL,
$OnlineModel::DELIVERY_FEE,
);
$wait_refund_bill_order = $BillModel->getOrderLinkSelect($wMap, $wFields);//正在申请退款的订单
if (!empty($wait_refund_bill_order)) {
$wait_refund_bill_id = array();
$wait_refund_bill = array(
$BillModel::ALL_MONEY => 0,
$DiscountModel::USE_INTEGRAL => 0,
$DiscountModel::GET_INTEGRAL => 0,
$OnlineModel::DELIVERY_FEE => 0,
);
foreach ($wait_refund_bill_order as $wB) {
$wait_refund_bill_id[] = $wB[$BillModel::ID];
$wait_refund_bill[$BillModel::ALL_MONEY] += $wB[$BillModel::ALL_MONEY];
$wait_refund_bill[$DiscountModel::USE_INTEGRAL] += $wB[$DiscountModel::USE_INTEGRAL];
$wait_refund_bill[$DiscountModel::GET_INTEGRAL] += $wB[$DiscountModel::GET_INTEGRAL];
$wait_refund_bill[$OnlineModel::DELIVERY_FEE] += $wB[$OnlineModel::DELIVERY_FEE];
}
$waitRefundGoods = $SellModel->getSelect(array($SellModel::BILL_ID => array('in', $wait_refund_bill_id)));
foreach ($waitRefundGoods as &$wVal) {
$wVal['goods_img'] = $this->getGoodsImage($wVal[$SellModel::GOODS_IMG_ID]);
if (!empty($wVal[$SellModel::SKU_JSON_INFO])) {
$wVal[$SellModel::SKU_JSON_INFO] = json_decode($wVal[$SellModel::SKU_JSON_INFO], true);
}
$wVal[$SellModel::PRICE] = floatval($wVal[$SellModel::PRICE]);
$wVal[$SellModel::ORIGINAL_PRICE] = floatval($wVal[$SellModel::ORIGINAL_PRICE]);
$wVal[$SellModel::VIP_PRICE] = floatval($wVal[$SellModel::VIP_PRICE]);
$wVal[$SellModel::PLUS_VIP_PRICE] = floatval($wVal[$SellModel::PLUS_VIP_PRICE]);
$wVal[$SellModel::NUM] = floatval($wVal[$SellModel::NUM]);
$wVal[$SellModel::REFUND_NUM] = floatval($wVal[$SellModel::REFUND_NUM]);
}
}
$rMap = array(
$BillModel::REFUND_NO => strval($order_info[$BillModel::ORDER_NO]),
$BillModel::REFUND_STATUS => array('in', '2,3'),
$BillModel::ORDER_TYPE => 2,//退款订单
$BillModel::TYPE => 1, //商城订单
);
$refund_bill_order = $BillModel->getOrderLinkSelect($rMap, $wFields);//正在申请退款的订单
if (!empty($refund_bill_order)) {
$refund_bill_id = array();
$refund_bill = array(
$BillModel::ALL_MONEY => 0,
$DiscountModel::USE_INTEGRAL => 0,
$DiscountModel::GET_INTEGRAL => 0,
$OnlineModel::DELIVERY_FEE => 0,
);
foreach ($refund_bill_order as $rB) {
$refund_bill_id[] = $rB[$BillModel::ID];
$refund_bill[$BillModel::ALL_MONEY] += $rB[$BillModel::ALL_MONEY];
$refund_bill[$DiscountModel::USE_INTEGRAL] += $rB[$DiscountModel::USE_INTEGRAL];
$refund_bill[$DiscountModel::GET_INTEGRAL] += $rB[$DiscountModel::GET_INTEGRAL];
$refund_bill[$OnlineModel::DELIVERY_FEE] += $rB[$OnlineModel::DELIVERY_FEE];
}
$refundGoods = $SellModel->getSelect(array($SellModel::BILL_ID => array('in', $refund_bill_id)));
foreach ($refundGoods as &$rVal) {
$rVal['goods_img'] = $this->getGoodsImage($rVal[$SellModel::GOODS_IMG_ID]);
if (!empty($rVal[$SellModel::SKU_JSON_INFO])) {
$rVal[$SellModel::SKU_JSON_INFO] = json_decode($rVal[$SellModel::SKU_JSON_INFO], true);
}
$rVal[$SellModel::PRICE] = floatval($rVal[$SellModel::PRICE]);
$rVal[$SellModel::ORIGINAL_PRICE] = floatval($rVal[$SellModel::ORIGINAL_PRICE]);
$rVal[$SellModel::VIP_PRICE] = floatval($rVal[$SellModel::VIP_PRICE]);
$rVal[$SellModel::PLUS_VIP_PRICE] = floatval($rVal[$SellModel::PLUS_VIP_PRICE]);
$rVal[$SellModel::NUM] = floatval($rVal[$SellModel::NUM]);
$rVal[$SellModel::REFUND_NUM] = floatval($rVal[$SellModel::REFUND_NUM]);
}
}
}
break;
case '2':
//拼团订单
$order_info['act_state'] = D('RetailBillGroup')->getFindField(array('bill_id' => $order_info['id']), 'state');
break;
case '3':
//秒杀订单
$order_info['act_state'] = D('RetailBillSpike')->getFindField(array('bill_id' => $order_info['id']), 'state');
break;
case '4':
//预售订单
$order_info['advance_info'] = D("RetailBillAdvance")->bill_advance(array('bill_id' => $order_info['id']));
$order_info['advance_info']['tail_money'] = round($order_info['all_money'] - $order_info['advance_info']['all_earnest_price'], 2);
break;
}
$billDis = $DiscountModel->getFind(array($DiscountModel::BILL_ID => $order_info[$BillModel::ID]));
$billOnline = $OnlineModel->getFind(array($OnlineModel::BILL_ID => $order_info[$BillModel::ID]));
$order_info['wait_refund_order'] = $wait_refund_bill;
$order_info['refund_order'] = $refund_bill;
$order_info['all_money'] = floatval($order_info[$BillModel::ALL_MONEY]);
$order_info['refund_money'] = floatval($order_info[$BillModel::REFUND_MONEY]);
$order_info['less_money'] = round($order_info[$BillModel::ALL_MONEY] - $order_info[$BillModel::REFUND_MONEY], 2);
$order_info['delivery_fee'] = floatval($billOnline[$OnlineModel::DELIVERY_FEE]);
$order_info['sell_info'] = $sellGoods;//全部
$order_info['wait_refund_info'] = $waitRefundGoods;//售后中
$order_info['refund_info'] = $refundGoods;//售后完成
$order_info['can_refund_goods'] = $can_refund_goods;//售后完成
$order_info['add_time'] = date('Y-m-d H:i:s', $order_info[$BillModel::ADD_TIME]);
$order_info['finish_time'] = date('Y-m-d H:i:s', $order_info[$BillModel::FINISH_TIME]);
$order_info = array_merge($order_info, $billDis, $billOnline);
if ($order_info['pay_state'] == 1) {
if ($order_info[$OnlineModel::STATUS] == 1) {
//门店配送
if ($order_info[$BillModel::REFUND_STATUS] == 0) {
//正常订单
$order_info['state'] = '待发货';
if ($order_info[$OnlineModel::PICKUP_TYPE] == 1) { // 自取
$order_info['state'] = '待自取';
}
} else if ($order_info[$BillModel::REFUND_STATUS] == 1) {
$order_info['state'] = '待商家确认退款';
} else {
$order_info['state'] = '已完成';
}
} else if ($order_info[$OnlineModel::STATUS] == 2) {
$order_info['state'] = '待收货';
} else if ($order_info[$OnlineModel::STATUS] == 3) {
$order_info['state'] = '交易完成';
if ($order_info[$BillModel::REFUND_STATUS] == 1) {
$order_info['state'] = '待商家确认退款';
} else if ($order_info[$BillModel::REFUND_STATUS] == 2) {
$order_info['state'] = '已退款';
} else {
$order_info['state'] = '已完成';
}
}
$order_info['payList'] = getPayTypeList($order_info[$BillModel::PAY_TYPE], $order_info[$BillModel::ALL_MONEY], $order_info[$BillModel::ID]);
// 评价
if ($order_info[$OnlineModel::EVAL_STATUS] == 1) {
$EvaluateModel = D('RetailEvaluate');
$evaluateContent = $EvaluateModel->getFindField(array('order_id' => $order_info['id']), 'content');
$order_info['evaluateContent'] = $evaluateContent ? $evaluateContent : '未发表评价内容';
} else {
$order_info['evaluateContent'] = '未发表评价内容';
}
if ($order_info[$OnlineModel::PICKUP_TYPE] == 2) {
//获取配送信息
$delivery = $this->getDriver($order_info[$OnlineModel::DELIVERY_RECORD_ID], $order_info[$OnlineModel::DELIVERY_TYPE]);
$order_info['delivery_status'] = $delivery['delivery_status'];
$order_info['deliverInfo'] = $delivery;
}
} else if ($order_info[$OnlineModel::STATUS] == 0 && $order_info['order_genre'] == 4 && $order_info['pay_state'] == 2) {
if ($billOnline['cancel_time'] > 0) {
$order_info['state'] = '已申请售后';
$order_info['tail_money_state'] = 0;
} else if ($order_info['advance_info']['tail_end_time'] < time()) {
$order_info['state'] = '超出尾款支付时间';
$order_info['tail_money_state'] = 0;
} else if ($order_info['advance_info']['tail_start_time'] > time()) {
$order_info['state'] = '未到付尾款时间';
$order_info['tail_money_state'] = 0;
} else {
$order_info['state'] = '待付尾款';
$order_info['tail_money_state'] = 1;
}
} else {
$order_info['state'] = '待付款';
}
switch ($order_info['pickup_type']) {
case 2:
$order_info['deliverInfo'] = array(
'driver_name' => '商家配送',
'driver_mobile' => '',
'driver_type' => '商家配送'
);
break;
case 3:
$order_info['deliverInfo'] = array(
'driver_name' => '快递发货',
'driver_mobile' => '',
'driver_type' => '快递发货'
);
break;
}
// 统计所有优惠
$order_info['dis_all_money'] = round($order_info[$DiscountModel::COUPON_MONEY] + $order_info[$DiscountModel::VIP_DIS_MONEY] + $order_info[$DiscountModel::VIP_LESS_MONEY], 2);
switch ($order_info['order_genre']) {
case 4:
if ($order_info['advance_info']['state'] == 2 && $order_info['advance_info']['advance_type'] == 2) {
$trade_date = D("RetailPayOrder")->getFindField(array('id' => $order_info['advance_info']['tail_pay_order_id']), "trade_date");
$order_info['advance_info']['trade_date'] = date('Y-m-d H:i:s', $trade_date);
}
$order_info['advance_info']['tail_start_time'] = date('m月d日 H:i:s', $order_info['advance_info']['tail_start_time']);
$order_info['advance_info']['tail_end_time'] = date('m月d日 H:i:s', $order_info['advance_info']['tail_end_time']);
}
$res['status'] = 1;
$res['order_info'] = $order_info;
} else {
$res['status'] = 0;
$res['msg'] = '未找到该订单';
}
$this->ajaxReturn($res);
}
/**
* 整合所有商城商品订单的订单详情
*/
public function getOrderDetail_v3()
{
$order_no = I('post.order_no');
if (empty($order_no)) {
$res['status'] = 0;
$res['msg'] = '缺少参数';
$this->ajaxReturn($res);
}
$uid = self::$uid;
$merchant_id = self::$merchant_id;
$BillModel = new RetailBillOrderModel();
$oMap = array(
'b.' . $BillModel::ORDER_NO => strval($order_no),
'b.' . $BillModel::MERCHANT_ID => $merchant_id,
'b.' . $BillModel::ORDER_TYPE => 1,//购买订单
'b.' . $BillModel::TYPE => ['in', '1,2'], //商城订单
[] => [
['b.uid' => $uid],
['b.vid' => self::$user['vid']],
'_logic' => 'OR'
]
);
$fields = array(
'b.' . $BillModel::ID, //id
'b.' . $BillModel::ALL_MONEY, //订单总金额
'b.' . $BillModel::PAY_TYPE, //支付类型 1现金 2银行卡 3微信支付 4支付宝支付 5会员卡余额支付 6小程序商城微信支付 7其他支付方式 8组合支付
'b.' . $BillModel::PAY_STATE, //0交易关闭 1已支付 2待支付
'b.' . $BillModel::REFUND_STATUS,//主要判断商品退款 0正常买单 1申请退款 2退款成功 3部分退款成功 -1退款失败
'b.' . $BillModel::VID, //会员id
'b.' . $BillModel::ORDER_NO, //订单编号
'b.' . $BillModel::UID, //小程序用户id
'b.' . $BillModel::REFUND_MONEY,//总退款金额
'b.' . $BillModel::ADD_TIME, //下单时间
'b.' . $BillModel::FINISH_TIME,//订单完成时间
'o.order_genre', //订单类型
'b.store_id',
'b.type'
);
$order_info = $BillModel->getBillFind($oMap, $fields);
if (!empty($order_info)) {
//获取该用户的待支付列表
$redis_key = 'retail_*_*_*_' . $uid . '_*';
$ApiRedis = new \Addons\Api\RedisController();
$wait_pay_list = $ApiRedis::$redis->mget($ApiRedis::$redis->keys($redis_key));
$billId = array();//存储在待支付列表里的订单ID
$waitPayTimeArr = array();//待支付订单的付款倒计时
if (!empty($wait_pay_list)) {
foreach ($wait_pay_list as $value) {
$data = json_decode($value, true);
if (!in_array($data['bill_id'], $billId)) {
$billId[] = $data['bill_id'];
$waitPayTimeArr[] = $data['expiration_time'];
}
}
}
$time = time();
if ($order_info['pay_state'] == 1) {
$StoreModel = D('RetailStore');
$refund_time_limit = self::$store[$StoreModel::REFUND_TIME_LIMIT];
$order_info['can_refund'] = 1;
$order_info['can_refund_time'] = ($time - $order_info[$BillModel::FINISH_TIME]) / 86400;
if (!empty($order_info[$BillModel::FINISH_TIME]) && ($time - $order_info[$BillModel::FINISH_TIME]) / 86400 > $refund_time_limit) {
$order_info['can_refund'] = 0;
}
} else {
$order_info['can_refund'] = 0;
}
$SellModel = D('RetailSell');
$sMap = array(
$SellModel::BILL_ID => $order_info[$BillModel::ID]
);
$sFields = array(
$SellModel::ID,
$SellModel::GOODS_ID,
$SellModel::GOODS_IMG_ID,
$SellModel::GOODS_NAME,
$SellModel::NUM,
$SellModel::PRICE,
$SellModel::ORIGINAL_PRICE,
$SellModel::VIP_PRICE,
$SellModel::PLUS_VIP_PRICE,
$SellModel::REFUND_NUM,
$SellModel::SKU_JSON_INFO,
$SellModel::WAIT_REFUND_NUM,
"integral_marketing",
"mem_integral",
"use_integral",
"integral_dis_money",
"goods_gifts_id"
);
$sellGoods = $SellModel->getSelect($sMap, $sFields);
$can_refund_goods = array();
foreach ($sellGoods as &$sVal) {
$sVal['goods_count'] = 0;
$sVal['checked'] = false;
$sVal['goods_img'] = $this->getGoodsImage($sVal[$SellModel::GOODS_IMG_ID]);
$sVal['less_num'] = round($sVal[$SellModel::NUM] - $sVal[$SellModel::REFUND_NUM] - $sVal[$SellModel::WAIT_REFUND_NUM], 3);
if (!empty($sVal[$SellModel::SKU_JSON_INFO])) {
$sVal[$SellModel::SKU_JSON_INFO] = json_decode($sVal[$SellModel::SKU_JSON_INFO], true);
}
$sVal[$SellModel::PRICE] = floatval($sVal[$SellModel::PRICE]);
$sVal[$SellModel::ORIGINAL_PRICE] = floatval($sVal[$SellModel::ORIGINAL_PRICE]);
$sVal[$SellModel::VIP_PRICE] = floatval($sVal[$SellModel::VIP_PRICE]);
$sVal[$SellModel::PLUS_VIP_PRICE] = floatval($sVal[$SellModel::PLUS_VIP_PRICE]);
$sVal[$SellModel::NUM] = floatval($sVal[$SellModel::NUM]);
$sVal[$SellModel::REFUND_NUM] = floatval($sVal[$SellModel::REFUND_NUM]);
if ($sVal['less_num'] > 0 && $order_info['pay_state'] == 1) {
$can_refund_goods[] = $sVal;
}
}
$DiscountModel = D('RetailBillDiscount');
$OnlineModel = D('RetailBillOnline');
$refund_bill = array();
$wait_refund_bill = array();
$waitRefundGoods = array(); //正在申请退的款商品
$refundGoods = array(); //已经退款成功的商品
//已经支付完成
if ($order_info['type'] == 1) {
$order_info['type_name'] = '线上';
//线上订单
switch ($order_info['order_genre']) {
case '1':
//普通订单
if ($order_info['pay_state'] == 1) {
$wMap = array(
$BillModel::REFUND_NO => strval($order_info[$BillModel::ORDER_NO]),
$BillModel::REFUND_STATUS => 1,//正在申请退款
$BillModel::ORDER_TYPE => 2,//退款订单
$BillModel::TYPE => 1, //商城订单
);
$wFields = array(
$BillModel::ID,
$BillModel::ALL_MONEY,
$DiscountModel::USE_INTEGRAL,
$DiscountModel::GET_INTEGRAL,
$OnlineModel::DELIVERY_FEE,
);
$wait_refund_bill_order = $BillModel->getOrderLinkSelect($wMap, $wFields);//正在申请退款的订单
if (!empty($wait_refund_bill_order)) {
$wait_refund_bill_id = array();
$wait_refund_bill = array(
$BillModel::ALL_MONEY => 0,
$DiscountModel::USE_INTEGRAL => 0,
$DiscountModel::GET_INTEGRAL => 0,
$OnlineModel::DELIVERY_FEE => 0,
);
foreach ($wait_refund_bill_order as $wB) {
$wait_refund_bill_id[] = $wB[$BillModel::ID];
$wait_refund_bill[$BillModel::ALL_MONEY] += $wB[$BillModel::ALL_MONEY];
$wait_refund_bill[$DiscountModel::USE_INTEGRAL] += $wB[$DiscountModel::USE_INTEGRAL];
$wait_refund_bill[$DiscountModel::GET_INTEGRAL] += $wB[$DiscountModel::GET_INTEGRAL];
$wait_refund_bill[$OnlineModel::DELIVERY_FEE] += $wB[$OnlineModel::DELIVERY_FEE];
}
$waitRefundGoods = $SellModel->getSelect(array($SellModel::BILL_ID => array('in', $wait_refund_bill_id)));
foreach ($waitRefundGoods as &$wVal) {
$wVal['goods_img'] = $this->getGoodsImage($wVal[$SellModel::GOODS_IMG_ID]);
if (!empty($wVal[$SellModel::SKU_JSON_INFO])) {
$wVal[$SellModel::SKU_JSON_INFO] = json_decode($wVal[$SellModel::SKU_JSON_INFO], true);
}
$wVal[$SellModel::PRICE] = floatval($wVal[$SellModel::PRICE]);
$wVal[$SellModel::ORIGINAL_PRICE] = floatval($wVal[$SellModel::ORIGINAL_PRICE]);
$wVal[$SellModel::VIP_PRICE] = floatval($wVal[$SellModel::VIP_PRICE]);
$wVal[$SellModel::PLUS_VIP_PRICE] = floatval($wVal[$SellModel::PLUS_VIP_PRICE]);
$wVal[$SellModel::NUM] = floatval($wVal[$SellModel::NUM]);
$wVal[$SellModel::REFUND_NUM] = floatval($wVal[$SellModel::REFUND_NUM]);
}
}
$rMap = array(
$BillModel::REFUND_NO => strval($order_info[$BillModel::ORDER_NO]),
$BillModel::REFUND_STATUS => array('in', '2,3'),
$BillModel::ORDER_TYPE => 2,//退款订单
$BillModel::TYPE => 1, //商城订单
);
$refund_bill_order = $BillModel->getOrderLinkSelect($rMap, $wFields);//正在申请退款的订单
if (!empty($refund_bill_order)) {
$refund_bill_id = array();
$refund_bill = array(
$BillModel::ALL_MONEY => 0,
$DiscountModel::USE_INTEGRAL => 0,
$DiscountModel::GET_INTEGRAL => 0,
$OnlineModel::DELIVERY_FEE => 0,
);
foreach ($refund_bill_order as $rB) {
$refund_bill_id[] = $rB[$BillModel::ID];
$refund_bill[$BillModel::ALL_MONEY] += $rB[$BillModel::ALL_MONEY];
$refund_bill[$DiscountModel::USE_INTEGRAL] += $rB[$DiscountModel::USE_INTEGRAL];
$refund_bill[$DiscountModel::GET_INTEGRAL] += $rB[$DiscountModel::GET_INTEGRAL];
$refund_bill[$OnlineModel::DELIVERY_FEE] += $rB[$OnlineModel::DELIVERY_FEE];
}
$refundGoods = $SellModel->getSelect(array($SellModel::BILL_ID => array('in', $refund_bill_id)));
foreach ($refundGoods as &$rVal) {
$rVal['goods_img'] = $this->getGoodsImage($rVal[$SellModel::GOODS_IMG_ID]);
if (!empty($rVal[$SellModel::SKU_JSON_INFO])) {
$rVal[$SellModel::SKU_JSON_INFO] = json_decode($rVal[$SellModel::SKU_JSON_INFO], true);
}
$rVal[$SellModel::PRICE] = floatval($rVal[$SellModel::PRICE]);
$rVal[$SellModel::ORIGINAL_PRICE] = floatval($rVal[$SellModel::ORIGINAL_PRICE]);
$rVal[$SellModel::VIP_PRICE] = floatval($rVal[$SellModel::VIP_PRICE]);
$rVal[$SellModel::PLUS_VIP_PRICE] = floatval($rVal[$SellModel::PLUS_VIP_PRICE]);
$rVal[$SellModel::NUM] = floatval($rVal[$SellModel::NUM]);
$rVal[$SellModel::REFUND_NUM] = floatval($rVal[$SellModel::REFUND_NUM]);
}
}
}
break;
case '2':
//拼团订单
$order_info['act_state'] = D('RetailBillGroup')->getFindField(array('bill_id' => $order_info['id']), 'state');
break;
case '3':
//秒杀订单
$order_info['act_state'] = D('RetailBillSpike')->getFindField(array('bill_id' => $order_info['id']), 'state');
break;
case '4':
//预售订单
$order_info['advance_info'] = D("RetailBillAdvance")->bill_advance(array('bill_id' => $order_info['id']));
$order_info['advance_info']['tail_money'] = round($order_info['all_money'] - $order_info['advance_info']['all_earnest_price'], 2);
break;
}
$billOnline = $OnlineModel->getFind(array($OnlineModel::BILL_ID => $order_info[$BillModel::ID]));
$order_info['delivery_fee'] = floatval($billOnline[$OnlineModel::DELIVERY_FEE]);
} else {
$order_info['type_name'] = '线下';
}
$billDis = $DiscountModel->getFind(array($DiscountModel::BILL_ID => $order_info[$BillModel::ID]));
$order_info['wait_refund_order'] = $wait_refund_bill;
$order_info['refund_order'] = $refund_bill;
$order_info['all_money'] = floatval($order_info[$BillModel::ALL_MONEY]);
$order_info['refund_money'] = floatval($order_info[$BillModel::REFUND_MONEY]);
$order_info['less_money'] = round($order_info[$BillModel::ALL_MONEY] - $order_info[$BillModel::REFUND_MONEY], 2);
$order_info['sell_info'] = $sellGoods;//全部
$order_info['wait_refund_info'] = $waitRefundGoods;//售后中
$order_info['refund_info'] = $refundGoods;//售后完成
$order_info['can_refund_goods'] = $can_refund_goods;//售后完成
$order_info['add_time'] = date('Y-m-d H:i:s', $order_info[$BillModel::ADD_TIME]);
$order_info['finish_time'] = date('Y-m-d H:i:s', $order_info[$BillModel::FINISH_TIME]);
$order_info = array_merge($order_info, $billDis, $billOnline ? $billOnline : []);
$order_info['payList'] = getPayTypeList($order_info['pay_type'],$order_info['all_money'],$order_info['id']);
if ($order_info['type'] == 1) {
if ($order_info['pay_state'] == 1) {
if ($order_info[$OnlineModel::STATUS] == 1) {
//门店配送
if ($order_info[$BillModel::REFUND_STATUS] == 0) {
//正常订单
$order_info['state'] = '待发货';
if ($order_info[$OnlineModel::PICKUP_TYPE] == 1) { // 自取
$order_info['state'] = '待自取';
}
} else if ($order_info[$BillModel::REFUND_STATUS] == 1) {
$order_info['state'] = '待商家确认退款';
} else {
$order_info['state'] = '已完成';
}
} else if ($order_info[$OnlineModel::STATUS] == 2) {
$order_info['state'] = '待收货';
} else if ($order_info[$OnlineModel::STATUS] == 3) {
$order_info['state'] = '交易完成';
if ($order_info[$BillModel::REFUND_STATUS] == 1) {
$order_info['state'] = '待商家确认退款';
} else if ($order_info[$BillModel::REFUND_STATUS] == 2) {
$order_info['state'] = '已退款';
} else {
$order_info['state'] = '已完成';
}
}
$order_info['payList'] = getPayTypeList($order_info[$BillModel::PAY_TYPE], $order_info[$BillModel::ALL_MONEY], $order_info[$BillModel::ID]);
// 评价
if ($order_info[$OnlineModel::EVAL_STATUS] == 1) {
$EvaluateModel = D('RetailEvaluate');
$evaluateContent = $EvaluateModel->getFindField(array('order_id' => $order_info['id']), 'content');
$order_info['evaluateContent'] = $evaluateContent ? $evaluateContent : '未发表评价内容';
} else {
$order_info['evaluateContent'] = '未发表评价内容';
}
if ($order_info[$OnlineModel::PICKUP_TYPE] == 2) {
//获取配送信息
$delivery = $this->getDriver($order_info[$OnlineModel::DELIVERY_RECORD_ID], $order_info[$OnlineModel::DELIVERY_TYPE]);
$order_info['delivery_status'] = $delivery['delivery_status'];
$order_info['deliverInfo'] = $delivery;
}
} else if ($order_info[$OnlineModel::STATUS] == 0 && $order_info['order_genre'] == 4 && $order_info['pay_state'] == 2) {
if ($billOnline['cancel_time'] > 0) {
$order_info['state'] = '已申请售后';
$order_info['tail_money_state'] = 0;
} else if ($order_info['advance_info']['tail_end_time'] < time()) {
$order_info['state'] = '超出尾款支付时间';
$order_info['tail_money_state'] = 0;
} else if ($order_info['advance_info']['tail_start_time'] > time()) {
$order_info['state'] = '未到付尾款时间';
$order_info['tail_money_state'] = 0;
} else {
$order_info['state'] = '待付尾款';
$order_info['tail_money_state'] = 1;
}
} else {
$order_info['state'] = '待付款';
}
if ($order_info['pay_state'] == 0) {
if (!in_array($order_info['id'], $billId)) {
$order_info['pay_state'] = -1;
}
}
// switch ($order_info['pickup_type']) {
// case 2:
// $order_info['deliverInfo'] = array(
// 'driver_name' => '商家配送',
// 'driver_mobile' => '',
// 'driver_type' => '商家配送'
// );
// break;
// case 3:
// $order_info['deliverInfo'] = array(
// 'driver_name' => '快递发货',
// 'driver_mobile' => '',
// 'driver_type' => '快递发货'
// );
// break;
// }
switch ($order_info['order_genre']) {
case 4:
if ($order_info['advance_info']['state'] == 2 && $order_info['advance_info']['advance_type'] == 2) {
$trade_date = D("RetailPayOrder")->getFindField(array('id' => $order_info['advance_info']['tail_pay_order_id']), "trade_date");
$order_info['advance_info']['trade_date'] = date('Y-m-d H:i:s', $trade_date);
}
$order_info['advance_info']['tail_start_time'] = date('m月d日 H:i:s', $order_info['advance_info']['tail_start_time']);
$order_info['advance_info']['tail_end_time'] = date('m月d日 H:i:s', $order_info['advance_info']['tail_end_time']);
}
// 统计所有优惠
$order_info['dis_all_money'] = round($order_info[$DiscountModel::COUPON_MONEY] + $order_info[$DiscountModel::VIP_DIS_MONEY] + $order_info[$DiscountModel::VIP_LESS_MONEY], 2);
} else {
$order_info['state'] = '已完成';
// 统计所有优惠
$order_info['dis_all_money'] = round($billDis['coupon_money'] + $billDis['vip_dis_money'] + $billDis['cashier_dis_money'] + $billDis['small_changes_money'] + $billDis['cashier_manual_money'], 2);
}
$plugClass = new Plug();
//订单获取祝福码,判断该门店是否,有,并且开启
$storePlugStatusPost = [
'store_id' => $order_info['store_id'],
'identification_arr' => ['blessing'],
];
$storePlugStatus = $plugClass->plugStoreStatus($storePlugStatusPost);//获取状态
if ($storePlugStatus === true) {
//门店有权限,并开启插件,查询订单是否有祝福码
$extractionCode = new Index();
$order_info['extraction_code'] = $extractionCode->obtainExtractionCode($order_info['id']);//祝福码
} else {
//门店无权限,或没开启
$order_info['extraction_code'] = null;
}
$res['status'] = 1;
$res['order_info'] = $order_info;
} else {
$res['status'] = 0;
$res['msg'] = '未找到该订单';
}
$this->ajaxReturn($res);
}
/**
* 获取配送员信息
* @param $id 配送id
* @param $type 配送类型
* @return array|bool|mixed
*/
public function getDriver($id, $type)
{
if ($type == 1) {
// 门店自己配送
$driver = array(
'driver_name' => '商家配送',
'driver_mobile' => '',
'driver_type' => '商家配送'
);
return $driver;
} else if ($type == 2) {
//达达配送
$DaOrderModel = D('RetailDaOrder');
$fields = array(
$DaOrderModel::DM_NAME . ' as driver_name',
$DaOrderModel::DM_MOBILE . ' as driver_mobile',
$DaOrderModel::CLIENT_ID . ' as driver_order',
$DaOrderModel::ORDER_STATUS . ' as delivery_status'
);
$driver = $DaOrderModel->getFind(array($DaOrderModel::ID => $id, $DaOrderModel::ORDER_STATUS => array('EGT', 3)), $fields);
if ($driver) {
$driver['driver_type'] = '达达配送';
return $driver;
}
} else if ($type == 3) {
//uu跑腿
$UuOrderModel = D('RetailUuOrder');
$fields = array(
$UuOrderModel::DRIVER_NAME . ' as driver_name',
$UuOrderModel::DRIVER_MOBILE . ' as driver_mobile',
$UuOrderModel::ORDER_CODE . ' as driver_order',
$UuOrderModel::STATE . ' as delivery_status'
);
$driver = $UuOrderModel->getFind(array($UuOrderModel::ID => $id, $UuOrderModel::STATE => array('EGT', 3)), $fields);
if ($driver) {
if ($driver['delivery_status'] == 1) {
$driver['delivery_status'] = 1;
} else if ($driver['delivery_status'] == 3 || $driver['delivery_status'] == 4) {
$driver['delivery_status'] = 2;
} else if ($driver['delivery_status'] == 5 || $driver['delivery_status'] == 6) {
$driver['delivery_status'] = 3;
}
$driver['driver_type'] = 'UU跑腿';
return $driver;
}
} else if ($type == 6) {
$billOrder = (new \Common\Model\RetailBillOrderModel)->field('order_no')->where(['id' => $id])->find();
$delivery = (new \Common\Model\RetailMaiyatianDeliveryModel)->where(['order_id' => $billOrder['order_no']])->find();
if ($delivery) {
$driver = [
'delivery' => 6,
'driver_name' => $delivery['rider_name'],
'driver_mobile' => '',
'driver_type' => $driver['driver_type'],
'driver_order' => $delivery['logistic_no'],
];
if ($delivery['status'] === 'PENDING') {
$driver['delivery_status'] = 1;
} else if (in_array($delivery['status'], ['GRABBED', 'PICKUP', 'DELIVERING'])) {
$driver['delivery_status'] = 2;
} else if ($delivery['status'] === 'DONE') {
$driver['delivery_status'] = 3;
}
$driver['driver_type'] = \Common\Lib\MaiyatianEnum::getKey('delivery.logistic_tag', strtoupper($delivery['logistic_tag']))['value'];
return $driver;
}
}
return false;
}
/**
* 申请退款(取消订单)
*/
public function doRefund_v1()
{
$order_no = I('post.order_no');
$refund_list = I('post.refund_list'); //退款sell列表
$type = I('post.type'); //类型 1取消订单 2退款(订单已完成)
if (empty($order_no) || empty($type)) {
$result['status'] = 0;
$result['msg'] = '缺少参数';
$this->ajaxReturn($result);
}
$uid = self::$uid;
$merchant_id = self::$merchant_id;
$BillModel = D('RetailBillOrder');
$bMap = array(
$BillModel::ORDER_NO => strval($order_no),
$BillModel::MERCHANT_ID => $merchant_id,
$BillModel::UID => $uid,
$BillModel::TYPE => 1,
$BillModel::ORDER_TYPE => 1,
$BillModel::REFUND_STATUS => 0
);
if ($type == 2) {
//部分(全部)退款
if (empty($refund_list)) {
$result['status'] = 0;
$result['msg'] = '缺少参数';
$this->ajaxReturn($result);
}
$refund_list = htmlspecialchars_decode($refund_list);
$refund_list = json_decode($refund_list, true);
if (!is_array($refund_list) || count($refund_list) == 0) {
$result['status'] = 0;
$result['msg'] = '退款商品信息有误';
$this->ajaxReturn($result);
}
$bMap[$BillModel::REFUND_STATUS] = array('not in', '1,2');
} else if ($type != 1) {
$result['status'] = 0;
$result['msg'] = '参数值有误';
$this->ajaxReturn($result);
}
$billOrder = $BillModel->getFind($bMap);//原订单
if (empty($billOrder)) {
$result['status'] = 0;
$result['msg'] = '请求有误,请刷新重试';
$this->ajaxReturn($result);
}
if ($billOrder[$BillModel::UPGRADE_STATE] == 1) {
$result['status'] = 0;
$result['msg'] = '升级为PLUS会员的订单无法退款';
$this->ajaxReturn($result);
}
$store_id = $billOrder['store_id'];
// 判断是否为购买次卡
$CardOrder = D('RetailCardOrder');
$co_map = array(
$CardOrder::MERCHANT_ID => $billOrder[$BillModel::MERCHANT_ID],
$CardOrder::VIP_ID => $billOrder[$BillModel::VID],
$CardOrder::BILL_ID => $billOrder[$BillModel::ID],
);
$card_order = $CardOrder->getFind($co_map);
if (!empty($card_order)) {
$result['status'] = 0;
$result['msg'] = '该订单为购买次卡活动订单,无法退款';
$this->ajaxReturn($result);
}
// 判断是否送次卡
if (!empty($billOrder[$BillModel::VID])) {
$judge_refund = A('PayApi/Refund')->judgeRefund($billOrder);
if ($judge_refund['status'] == 0) {
$this->ajaxReturn($judge_refund);
}
}
$BillOnlineModel = D('RetailBillOnline');
$oMap = array(
$BillOnlineModel::BILL_ID => $billOrder[$BillModel::ID]
);
$billOnline = $BillOnlineModel->getFind($oMap);//查询线上订单表
$BillDisModel = D('RetailBillDiscount');
$BillOnlineModel = D('RetailBillOnline');
$SellModel = D('RetailSell');
if ($type == 1) {
if ($billOnline[$BillOnlineModel::STATUS] != 1) {
$result['status'] = 0;
$result['msg'] = '该订单已发货,不能取消';
$this->ajaxReturn($result);
}
$refundSellList = $SellModel->getSelect(array($SellModel::BILL_ID => $billOrder[$BillModel::ID]));
$new_discount = $BillDisModel->getFind(array($BillDisModel::BILL_ID => $billOrder[$BillModel::ID]));
$refundData = array(
'allMoney' => round($billOrder[$BillModel::ALL_MONEY] - $billOnline[$BillOnlineModel::DELIVERY_FEE], 2),
'refundSellList' => $refundSellList,
'new_discount' => $new_discount,
'status' => 1
);
} else {
if ($billOnline[$BillOnlineModel::STATUS] != 3) {
$result['status'] = 0;
$result['msg'] = '该订单未完成,不能进行部分退款';
$this->ajaxReturn($result);
}
$rMap = array(
$BillModel::REFUND_NO => strval($order_no),
$BillModel::MERCHANT_ID => $merchant_id,
$BillModel::UID => $uid,
$BillModel::TYPE => 1,
$BillModel::ORDER_TYPE => 2,//退款订单
$BillModel::REFUND_STATUS => 1,//正常正在等待退款的订单
$BillModel::PAY_STATE => 1,//正常正在等待退款的订单
);
$refundOrder = $BillModel->getFind($rMap);
if (!empty($refundOrder)) {
$result['status'] = 0;
$result['msg'] = '正在进行的退款订单完成之后才能发起退款操作';
$this->ajaxReturn($result);
}
$refundData = getRefundList($refund_list, $billOrder[$BillModel::ID]);
}
if ($refundData['status'] == 0) {
$this->ajaxReturn($refundData);
}
$allMoney = $refundData['allMoney'];//退款总金额
$refund_list = $refundData['refundSellList'];//退款列表
$new_discount = $refundData['new_discount'];//新优惠数据
$time = time();
$newBill = array(
$BillModel::ALL_MONEY => $allMoney,
$BillModel::PAY_STATE => 1,
$BillModel::REFUND_STATUS => 1,
$BillModel::TYPE => 1,
$BillModel::ORDER_TYPE => 2,
$BillModel::ADD_TIME => $time,
$BillModel::REFUND_NO => $billOrder[$BillModel::ORDER_NO],
$BillModel::REFUND_MONEY => $allMoney,
$BillModel::UID => $billOrder[$BillModel::UID],
$BillModel::VID => $billOrder[$BillModel::VID],
$BillModel::STORE_ID => $billOrder['store_id'],
$BillModel::MERCHANT_ID => $merchant_id,
);
$newBill = $BillModel->addBillOrder($newBill);
if ($newBill) {
$new_discount[$BillDisModel::BILL_ID] = $newBill[$BillModel::ID];
$add_dis = $BillDisModel->addOrder($new_discount);
$old_online = $BillOnlineModel->getFind(array($BillOnlineModel::BILL_ID => $billOrder[$BillModel::ID]));
if ($type == 1) {
$old_online[$BillOnlineModel::CANCEL_TIME]++;
$online_save[$BillOnlineModel::CANCEL_TIME] = $old_online[$BillOnlineModel::CANCEL_TIME];
} else {
$old_online[$BillOnlineModel::REFUND_TIME]++;
$online_save[$BillOnlineModel::REFUND_TIME] = $old_online[$BillOnlineModel::REFUND_TIME];
}
$old_online[$BillOnlineModel::BILL_ID] = $newBill[$BillModel::ID];
$old_online[$BillOnlineModel::DELIVERY_FEE] = 0;//先默认为不退换配送费
$add_online = $BillOnlineModel->addOrder($old_online);
if ($add_dis && $add_online) {
//可进行退换货操作
$success_array = array();
foreach ($refund_list as $key => $val) {
$newSell = $val;
unset($newSell[$SellModel::ID]);
$newSell[$SellModel::SELL_TYPE] = 2;//退款
$newSell[$SellModel::PAY_STATE] = 0;//未成功退款
$newSell[$SellModel::BILL_ID] = $newBill[$BillModel::ID];
$newSell[$SellModel::SELL_ID] = $val[$SellModel::ID];
$newSell[$SellModel::ADD_TIME] = time();
$add_sell = $SellModel->addOrder($newSell);
if ($add_sell) {
$newSell[$SellModel::ID] = $add_sell;
$success_array[] = $newSell;
$SellModel->toSetInc(array($SellModel::ID => $val[$SellModel::ID]), $SellModel::WAIT_REFUND_NUM, $val[$SellModel::NUM]);
}
}
if (count($success_array) == count($refund_list)) {
$result['status'] = 1;
$result['msg'] = '退款申请发起成功';
$data = array(
'refund_status' => 1,
'cancel_time' => 1,
'refund_time' => 1
);
$result['data'] = $data;
$result['state'] = '待商家确认退款';
$BillModel->updateOrder($bMap, array($BillModel::REFUND_STATUS => 1));//修改原订单状态
$BillOnlineModel->updateOrder($oMap, $online_save);
if ($type == 1) {
sendsockets($store_id, "有线上订单申请取消订单", 1);
//新版推送
$sockets = array(
'login_string' => '',
'username' => '',
'type' => 2,
'message' => "有线上订单申请取消订单",
);
sendSockets($store_id, $sockets, -1);
} else {
sendsockets($store_id, "有线上订单申请退款", 2);
//新版推送
$sockets = array(
'login_string' => '',
'username' => '',
'type' => 3,
'message' => "有线上订单申请退款",
);
sendSockets($store_id, $sockets, -1);
}
} else {
$BillModel->deleteOrder(array($BillModel::ID => $newBill[$BillModel::ID]));
$SellModel->deleteOrder(array($SellModel::BILL_ID => $newBill[$BillModel::ID]));
foreach ($success_array as $value) {
$SellModel->toSetDec(array($SellModel::ID => $value[$SellModel::BILL_ID]), $SellModel::WAIT_REFUND_NUM, $value[$SellModel::NUM]);
}
$result['status'] = 0;
$result['msg'] = '数据操作有误2';
}
} else {
$BillModel->deleteOrder(array($BillModel::ID => $newBill[$BillModel::ID]));
$result['status'] = 0;
$result['msg'] = '退款请求失败,请稍后重试';
}
} else {
$result['status'] = 0;
$result['msg'] = '退款请求失败,请稍后重试1';
}
$this->ajaxReturn($result);
}
/**获取满足售后条件的商品列表
* 2020/3/4
* @param order_no 订单号
*/
public function getRefundGoods()
{
$order_no = I('post.order_no');
if (empty($order_no)) {
$res['status'] = 0;
$res['msg'] = '缺少订单号';
$this->ajaxReturn($res);
}
$uid = self::$uid;
$merchant_id = self::$merchant_id;
$BillModel = D('RetailBillOrder');
$oMap = array(
$BillModel::ORDER_NO => strval($order_no),
$BillModel::UID => $uid,
$BillModel::MERCHANT_ID => $merchant_id,
$BillModel::PAY_STATE => 1, //已支付
$BillModel::ORDER_TYPE => 1,//购买订单
$BillModel::TYPE => 1, //商城订单
);
$order_info = $BillModel->getFind($oMap);
if (!empty($order_info)) {
$overtime = overtime(self::$store, $order_info, 1);
if ($overtime['status'] == 0) {
$this->ajaxReturn($overtime);
}
$SellModel = D('RetailSell');
$RetailGoodsModel = D("RetailGoods");
$sMap = array(
$SellModel::BILL_ID => $order_info[$BillModel::ID]
);
$sFields = array(
$SellModel::ID,
$SellModel::GOODS_ID,
$SellModel::GOODS_IMG_ID,
$SellModel::GOODS_NAME,
$SellModel::NUM,
$SellModel::PRICE,
$SellModel::ORIGINAL_PRICE,
$SellModel::VIP_PRICE,
$SellModel::PLUS_VIP_PRICE,
$SellModel::REFUND_NUM,
$SellModel::SKU_JSON_INFO,
$SellModel::WAIT_REFUND_NUM,
$SellModel::GOODS_GIFTS_ID,
);
$sellGoods = $SellModel->getSelect($sMap, $sFields);
$can_refund_goods = array();
foreach ($sellGoods as &$sVal) {
$goods = $RetailGoodsModel->getFind(array('id' => $sVal['goods_id']), "refund_state,exchange_state");
if ($goods['refund_state'] == 0 && $goods['exchange_state'] == 0) {
continue;
}
$sVal['less_num'] = round($sVal[$SellModel::NUM] - $sVal[$SellModel::REFUND_NUM] - $sVal[$SellModel::WAIT_REFUND_NUM], 3);
if ($sVal['less_num'] <= 0) {
continue;
}
$sVal['goods_count'] = 0;
$sVal['checked'] = false;
$sVal['goods_img'] = $this->getGoodsImage($sVal[$SellModel::GOODS_IMG_ID]);
if (!empty($sVal[$SellModel::SKU_JSON_INFO])) {
$sVal[$SellModel::SKU_JSON_INFO] = json_decode($sVal[$SellModel::SKU_JSON_INFO], true);
}
$sVal[$SellModel::PRICE] = floatval($sVal[$SellModel::PRICE]);
$sVal[$SellModel::ORIGINAL_PRICE] = floatval($sVal[$SellModel::ORIGINAL_PRICE]);
$sVal[$SellModel::VIP_PRICE] = floatval($sVal[$SellModel::VIP_PRICE]);
$sVal[$SellModel::PLUS_VIP_PRICE] = floatval($sVal[$SellModel::PLUS_VIP_PRICE]);
$sVal[$SellModel::NUM] = floatval($sVal[$SellModel::NUM]);
$sVal[$SellModel::REFUND_NUM] = floatval($sVal[$SellModel::REFUND_NUM]);
$can_refund_goods[] = $sVal;
}
$res['msg'] = '暂无可退款换货商品';
$res['status'] = 1;
$res['sell_list'] = $can_refund_goods;
} else {
$res['status'] = 0;
$res['msg'] = '未找到该支付订单';
}
$this->ajaxReturn($res);
}
/**
* 申请退款换货(取消订单) 2020/3/5
* @param order_no 订单号
* @param refund_list 退款sell列表
* @param apply_reason 申请退款换货原因
* @param type 类型 1取消订单 2退款(订单已完成) 3换货(订单已完成)
* @param user_address 换货的收货地址
* @param $user_name 姓名
* @param $user_phone 手机号
* @param $reason_img 图片id , 拼接
*/
public function doRefund_v2()
{
$parameter = array(
'order_no' => I('post.order_no'),
'refund_list' => I('post.refund_list'),
'type' => I('post.type'),
'apply_reason' => I('post.apply_reason'),
'reason_img' => I("post.reason_img"),
'user_address' => I("post.user_address"),
'user_name' => I("post.user_name"),
'user_phone' => I("post.user_phone"),
'store' => self::$store,
'merchant_id' => self::$merchant_id,
'uid' => self::$uid,
'user_type' => 1,
'platform_type' => self::$merchant['platform_type'] ? self::$merchant['platform_type'] : 1
);
$result = A("Api/Customer")->order_cancel($parameter);
$this->ajaxReturn($result);
}
/**
* 取消退款申请
*/
public function cancelRefund_v1()
{
$order_no = I('post.order_no');
if (empty($order_no)) {
$result['status'] = 0;
$result['msg'] = '缺少参数';
$this->ajaxReturn($result);
}
$uid = self::$uid;
$merchant_id = self::$merchant_id;
$BillModel = D('RetailBillOrder');
$bMap = array(
$BillModel::ORDER_NO => strval($order_no),
$BillModel::MERCHANT_ID => $merchant_id,
$BillModel::UID => $uid,
$BillModel::TYPE => 1,
$BillModel::ORDER_TYPE => 1,//退款订单
$BillModel::REFUND_STATUS => 1,//正常正在等待退款的订单
$BillModel::PAY_STATE => 1,//正常正在等待退款的订单
);
$billOrder = $BillModel->getFind($bMap);//原订单
if (empty($billOrder)) {
$result['status'] = 0;
$result['msg'] = '您的操作有误';
$this->ajaxReturn($result);
}
$store_id = $billOrder['store_id'];
$rMap = array(
$BillModel::REFUND_NO => strval($order_no),
$BillModel::STORE_ID => $store_id,
$BillModel::MERCHANT_ID => $merchant_id,
$BillModel::UID => $uid,
$BillModel::TYPE => 1,
$BillModel::ORDER_TYPE => 2,//退款订单
$BillModel::REFUND_STATUS => 1,//正常正在等待退款的订单
$BillModel::PAY_STATE => 1,//正常正在等待退款的订单
);
$refundOrder = $BillModel->getFind($rMap);
if (empty($refundOrder)) {
$result['status'] = 0;
$result['msg'] = '订单不存在';
$this->ajaxReturn($result);
}
/*修改退库记录状态*/
$updateRefund = $BillModel->updateOrder($rMap, array($BillModel::REFUND_STATUS => 0, $BillModel::PAY_STATE => 0));
if (!empty($updateRefund)) {
$SellModel = D('RetailSell');
$sMap = array(
$SellModel::BILL_ID => $refundOrder[$BillModel::ID],
$SellModel::SELL_TYPE => 2,//退款
);
$sellOrder = $SellModel->getSelect($sMap);//退款出售记录表
if (empty($sellOrder)) {
$result['status'] = 0;
$result['msg'] = '数据操作有误';
$this->ajaxReturn($result);
}
$success_array = array();
foreach ($sellOrder as $value) {
$map = array(
$SellModel::ID => $value[$SellModel::SELL_ID]
);
$updateSell = $SellModel->toSetDec($map, $SellModel::WAIT_REFUND_NUM, $value[$SellModel::NUM]);
if ($updateSell) {
$success_array[] = $value;
}
}
if (count($success_array) == count($sellOrder)) {
//修改原表状态
$data = array(
'cancel_time' => 1,
'refund_time' => 1
);
if ($billOrder[$BillModel::REFUND_MONEY] > 0) {
//有退款
$data['refund_status'] = 3;
$BillModel->updateOrder($bMap, array($BillModel::REFUND_STATUS => 3));
} else {
//无退款
$data['refund_status'] = 0;
$BillModel->updateOrder($bMap, array($BillModel::REFUND_STATUS => 0));
}
$result['data'] = $data;
$OnlineModel = D('RetailBillOnline');
$onlineOrder = $OnlineModel->getFind(array($OnlineModel::BILL_ID => $billOrder[$BillModel::ID]));
if ($onlineOrder[$OnlineModel::STATUS] == 1) {
sendsockets($store_id, "有线上订单撤销取消订单申请", 3);
//新版推送
$sockets = array(
'login_string' => '',
'username' => '',
'type' => 4,
'message' => "有线上订单撤销取消订单申请",
);
sendSockets($store_id, $sockets, -1);
if ($onlineOrder[$OnlineModel::PICKUP_TYPE] == 1) {
$result['state'] = '待自提';
} else {
$result['state'] = '待发货';
}
} else {
sendsockets($store_id, "有线上订单取消退款申请", 4);
//新版推送
$sockets = array(
'login_string' => '',
'username' => '',
'type' => 5,
'message' => "有线上订单取消退款申请",
);
sendSockets($store_id, $sockets, -1);
$result['state'] = '已完成';
}
$result['status'] = 1;
$result['msg'] = '操作成功';
} else {
foreach ($success_array as $val) {
$map = array(
$SellModel::ID => $val[$SellModel::SELL_ID]
);
$SellModel->toSetInc($map, $SellModel::WAIT_REFUND_NUM, $val[$SellModel::NUM]);
}
$BillModel->updateOrder($rMap, array($BillModel::REFUND_STATUS => 1, $BillModel::PAY_STATE => 1));
$result['status'] = 0;
$result['msg'] = '数据操作有误2';
}
} else {
$result['status'] = 0;
$result['msg'] = '取消失败,请稍后重试';
}
$this->ajaxReturn($result);
}
/**
* 用户评价
*/
public function addEvaluate_v1()
{
$order_no = I('post.order_no');
$content = I('post.content');
if (empty($order_no) || empty($content)) {
$result['status'] = 0;
$result['msg'] = '缺少参数';
$this->ajaxReturn($result);
}
$BillModel = D('RetailBillOrder');
$bMap = array(
'order_no' => strval($order_no),
'uid' => self::$uid
);
$billOrder = $BillModel->getFind($bMap);
if (empty($billOrder)) {
$result['status'] = 0;
$result['msg'] = '请求有误';
$this->ajaxReturn($result);
}
$store_id = $billOrder['store_id'];
$OnlineModel = D('RetailBillOnline');
$oMap = array(
$OnlineModel::BILL_ID => $billOrder[$BillModel::ID]
);
$onlineOrder = $OnlineModel->getFind($oMap);
if ($onlineOrder[$OnlineModel::EVAL_STATUS] == 1) {
$result['status'] = 0;
$result['msg'] = '您已经评论过了';
$this->ajaxReturn($result);
}
$EvaluateModel = D('RetailEvaluate');
$item = array(
$EvaluateModel::ORDER_ID => $billOrder[$BillModel::ID],
$EvaluateModel::CONTENT => $content,
$EvaluateModel::ADD_TIME => time(),
$EvaluateModel::STORE_ID => $store_id,
$EvaluateModel::MERCHANT_ID => self::$merchant_id,
$EvaluateModel::UID => self::$uid,
);
$add_evaluate = $EvaluateModel->addOrder($item);
if ($add_evaluate) {
$up = $OnlineModel->updateOrder($oMap, array($OnlineModel::EVAL_STATUS => 1));
if (!empty($up)) {
$result['status'] = 1;
$result['msg'] = '评论成功';
} else {
$result['status'] = 0;
$result['msg'] = '评论失败';
}
} else {
$result['status'] = 0;
$result['msg'] = '评论失败';
}
$this->ajaxReturn($result);
}
/**
* 用户提醒发货
* @param int $bill_id bill订单id
* @param int $type 类型 1.普通订单 2.拼团订单 3.秒杀订单
* @return array $res
*/
public function userRemind()
{
// 接收数据
$bill_id = I('post.bill_id');
// $type = I('post.type');
if (!$bill_id) {
$res = array('status' => 0, 'msg' => '参数缺失');
$this->ajaxReturn($res);
}
// 查询订单
$RBOModel = D('RetailBillOrder');
$map = array(
'b.' . $RBOModel::ID => $bill_id,
'b.' . $RBOModel::MERCHANT_ID => self::$merchant_id,
'b.' . $RBOModel::ORDER_TYPE => 1,
'b.' . $RBOModel::PAY_STATE => 1,
'b.' . $RBOModel::TYPE => 1,
'o.status' => 1,
'o.remind_state' => 0,
// 'o.order_genre' => $type,
);
$field = array('b.' . $RBOModel::ID, 'o.remind_state');
$order = $RBOModel->getBillFind($map, $field);
if (!$order) {
$res = array('status' => 0, 'msg' => '订单出现异常,请联系商家');
$this->ajaxReturn($res);
}
// 修改订单
$RBOnlineModel = D('RetailBillOnline');
$up = array(
$RBOnlineModel::REMIND_STATE => 1,
$RBOnlineModel::REMIND_TIME => time()
);
$save_result = $RBOnlineModel->updateOrder(array($RBOnlineModel::BILL_ID => $bill_id), $up);
if ($save_result) {
$res = array('status' => 1, 'msg' => '提醒成功');
} else {
$res = array('status' => 0, 'msg' => '提醒失败');
}
$this->ajaxReturn($res);
}
/**
* 用户确认收货
* @param int $bill_id bill订单id
* @param int $type 类型 1.普通订单 2.拼团订单 3.秒杀订单
* @return array $res
*/
public function userReceive()
{
// 接收数据
$bill_id = I('post.bill_id');
$type = I('post.type');
if (!$bill_id || !$type) {
$res = array('status' => 0, 'msg' => '参数缺失');
$this->ajaxReturn($res);
}
// 查询订单
$BillModel = new RetailBillOrderModel();
$map = array(
'b.id' => $bill_id,
'b.merchant_id' => self::$merchant_id,
'b.order_type' => 1,
'b.pay_state' => 1,
'b.type' => 1,
'o.order_genre' => $type
);
$field = array('b.id', 'o.order_genre');
$order = $BillModel->getBillFind($map, $field);
if (!$order) {
$res = array('status' => 0, 'msg' => '订单出现异常,请联系商家');
$this->ajaxReturn($res);
}
// 修改订单
$OnlineModel = new RetailBillOnlineModel();
$up = array(
'status' => 3,
'receiving_goods_time' => time(),
);
$save_result = $OnlineModel->updateOrder(array($OnlineModel::BILL_ID => $bill_id), $up);
if ($save_result) {
$BillModel->updateOrder(array('id' => $order['id']), array('finish_time' => time()));
$res = array('status' => 1, 'msg' => '交易成功');
} else {
$res = array('status' => 0, 'msg' => '收货出现异常,请联系商家');
}
$this->ajaxReturn($res);
}
/**
* 获取骑手信息
*/
public function rider()
{
$order_no = I('post.order_no');//订单编号
if (empty($order_no)) {
$result['status'] = 0;
$result['msg'] = "缺少参数";
$this->ajaxReturn($result);
}
$result = A('PayApi/Order')->getRider($order_no);
$this->ajaxReturn($result);
}
/**
* 获取待支付列表
*/
public function getWaitPayOrder()
{
$uid = self::$uid;
$store_id = self::$store_id;
$redis_key = 'retail_*_*_*_' . $uid . '_*';
$ApiRedis = new \Addons\Api\RedisController();
$wait_pay_list = $ApiRedis::$redis->mget($ApiRedis::$redis->keys($redis_key));
$billId = array();
$timeArr = array();
if (!empty($wait_pay_list)) {
foreach ($wait_pay_list as $value) {
$data = json_decode($value, true);
if (!in_array($data['bill_id'], $billId)) {
$billId[] = $data['bill_id'];
$timeArr[] = $data['expiration_time'];
}
}
}
$billOrder = array();
if (!empty($billId)) {
$BillModel = D('RetailBillOrder');
$OnlineModel = D('RetailBillOnline');
$SellModel = D('RetailSell');
foreach ($billId as $key => $val) {
$bMap = array(
$BillModel::STORE_ID => $store_id,
$BillModel::ID => $val,
$BillModel::PAY_STATE => 0,
);
$data = $BillModel->getFind($bMap);
if (!empty($data)) {
$sMap = array(
$SellModel::BILL_ID => $val
);
$oMap = array(
$OnlineModel::BILL_ID => $val
);
$data['order_genre'] = $OnlineModel->getFindField($oMap, $OnlineModel::ORDER_GENRE);
$data['add_time'] = date('Y-m-d H:i:s', $data['add_time']);
$data['expiration_time'] = date('Y-m-d H:i:s', strval(intval($timeArr[$key] - 2)));;
$data['time_desc'] = '';
$data['goods_info'] = $SellModel->getFind($sMap);
$data['goods_info']['goods_img'] = $this->getGoodsImage($data['goods_info']['goods_img_id']);
$billOrder[] = $data;
}
}
if (!empty($billOrder)) {
$res['status'] = 1;
$res['msg'] = '查询成功';
} else {
$res['status'] = 0;
$res['msg'] = '暂无记录';
}
} else {
$res['status'] = 0;
$res['msg'] = '暂无记录';
}
$res['data'] = $billOrder;
$this->ajaxReturn($res);
}
/**
* 获取待支付列表
*/
public function getWaitPayOrder_v1()
{
$uid = self::$uid;
$redis_key = 'retail_*_*_*_' . $uid . '_*';
$ApiRedis = new \Addons\Api\RedisController();
$wait_pay_list = $ApiRedis::$redis->mget($ApiRedis::$redis->keys($redis_key));
$billId = array();
$timeArr = array();
if (!empty($wait_pay_list)) {
foreach ($wait_pay_list as $value) {
$data = json_decode($value, true);
if (!in_array($data['bill_id'], $billId)) {
$billId[] = $data['bill_id'];
$timeArr[] = $data['expiration_time'];
}
}
}
$billOrder = array();
if (!empty($billId)) {
$BillModel = D('RetailBillOrder');
$OnlineModel = D('RetailBillOnline');
$SellModel = D('RetailSell');
foreach ($billId as $key => $val) {
$bMap = array(
$BillModel::ID => $val,
$BillModel::PAY_STATE => 0,
);
$data = $BillModel->getFind($bMap);
if (!empty($data)) {
$sMap = array(
$SellModel::BILL_ID => $val
);
$oMap = array(
$OnlineModel::BILL_ID => $val
);
$data['order_genre'] = $OnlineModel->getFindField($oMap, $OnlineModel::ORDER_GENRE);
$data['add_time'] = date('Y-m-d H:i:s', $data['add_time']);
$data['expiration_time'] = date('Y-m-d H:i:s', strval(intval($timeArr[$key] - 2)));;
$data['time_desc'] = '';
$data['goods_info'] = $SellModel->getFind($sMap);
$data['goods_info']['goods_img'] = getGoodsImage($data['goods_info']['goods_img_id'], $data['store_id']);
$billOrder[] = $data;
}
}
if (!empty($billOrder)) {
$res['status'] = 1;
$res['msg'] = '查询成功';
} else {
$res['status'] = 0;
$res['msg'] = '暂无记录';
}
} else {
$res['status'] = 0;
$res['msg'] = '暂无记录';
}
$res['data'] = $billOrder;
$this->ajaxReturn($res);
}
/**
* 取消订单 2020-4-13
*/
public function cancelPay()
{
$uid = self::$uid;
$order_no = I('post.order_no');
if (empty($order_no)) {
$res['status'] = 0;
$res['msg'] = '缺少参数';
$this->ajaxReturn($res);
}
$BillModel = D('RetailBillOrder');
$map = array(
'b.' . $BillModel::ORDER_NO => $order_no,
'b.' . $BillModel::UID => $uid,
);
$fields = [
'b.id',
'b.store_id',
'o.order_genre',
'd.coupon_id',
'd.coupon_type',
];
if (self::$merchant['platform_type'] == 2) {
$fields[] = 'b.third_order';
}
$bill_info = $BillModel->getBillFind($map, $fields);
if (empty($bill_info)) {
$res['status'] = 0;
$res['msg'] = '请求有误';
$this->ajaxReturn($res);
}
if (self::$merchant['platform_type'] == 2) {
//第三方平台
$ThirdClass = new Order();
$thirdResult = $ThirdClass->orderCancel([
'merchant_id' => self::$merchant_id,
'third_order' => $bill_info['third_order']
]);
if ($thirdResult['status'] == 0) {
$res['status'] = 0;
$res['msg'] = 'Q3 ERP平台订单取消失败' . $thirdResult['message'];
$this->ajaxReturn($res);
}
}
$store_id = $bill_info['store_id'];
$redis_key = 'retail_*_' . $uid . '_' . $bill_info['id'];
$ApiRedis = new \Addons\Api\RedisController();
$ApiRedis::$redis->delete($ApiRedis::$redis->keys($redis_key));
if (!empty($bill_info['coupon_id'])) {
$coupon_redis_key = 'retail_coupon_store_id_' . $store_id . '_uid_' . $uid . '_coupon_type_' . $bill_info['coupon_type'] . '_coupon_id_' . $bill_info['coupon_id'];
$ApiRedis::$redis->delete($coupon_redis_key);
}
$BillModel->updateOrder(['id' => $bill_info['id']], [
'pay_state' => 3
]);
$res['status'] = 1;
$res['msg'] = '取消成功';
$this->ajaxReturn($res);
}
/**
* 获取物流信息
*/
public function getOrderExpress()
{
$order_no = I('post.order_no');
$type = I('post.type');//判断是否是中奖订单 值为9999
if (empty($order_no)) {
$res['status'] = 0;
$res['msg'] = '缺少订单编号';
$this->ajaxReturn($res);
}
if ($type == 9999) {
//查询中奖记录表
$win_record = D('TurntableUse')->getOrderFind(['order_num' => $order_no]);
if (!$win_record) {
$res['status'] = 0;
$res['msg'] = '未查询到该订单或订单已取消发货';
$this->ajaxReturn($res);
}
$res = A('Api/Express')->getExpressInfo($win_record['id'], 2);
if ($res['status'] != 1) {
$res['status'] = 1;
$res['data']['data'] = array();
}
$res['data']['receiving_name'] = $win_record['username'];
$res['data']['receiving_phone'] = $win_record['phone'];
$res['data']['receiving_address'] = $win_record['address'];
$this->ajaxReturn($res);
}
$BillModel = D('RetailBillOrder');
$OnlineModel = D('RetailBillOnline');
$map = array(
'b.' . $BillModel::ORDER_NO => strval($order_no),
'b.' . $BillModel::TYPE => 1,
'b.' . $BillModel::UID => self::$uid,
'b.' . $BillModel::ORDER_TYPE => array('in', '1,3'),
'b.' . $BillModel::REFUND_STATUS => array('in', '0,2,5'),
'o.' . $OnlineModel::PICKUP_TYPE => array('in', '2,3'),
'o.' . $OnlineModel::DELIVERY_TYPE => 4,
'o.' . $OnlineModel::STATUS => array('neq', 1),
);
$bill_order = $BillModel->getOrderLinkFind($map);
if (empty($bill_order)) {
$res['status'] = 0;
$res['msg'] = '未查询到该订单或订单已取消发货';
$this->ajaxReturn($res);
}
$res = A('Api/Express')->getExpressInfo($bill_order[$BillModel::ID]);
if ($res['status'] != 1) {
$res['status'] = 1;
$res['data']['data'] = array();
}
$res['data']['receiving_name'] = $bill_order[$OnlineModel::USER_NAME];
$res['data']['receiving_phone'] = $bill_order[$OnlineModel::USER_PHONE];
$res['data']['receiving_address'] = $bill_order[$OnlineModel::USER_ADDRESS];
$this->ajaxReturn($res);
}
}