521 行
23 KiB
PHP
可执行文件
521 行
23 KiB
PHP
可执行文件
<?php
|
|
|
|
namespace CashierApi\Controller;
|
|
//[1.8.50]
|
|
use Common\Business\Sell;
|
|
use Common\Business\SerialNumberGoods;
|
|
use Common\Model\RetailSellModel;
|
|
use Make\Model\MakeOrderModel;
|
|
|
|
class CustomerController extends BaseController
|
|
{
|
|
/**
|
|
* 售后订单列表
|
|
* @param $type 日期查询条件
|
|
* @param $order_type 2退款订单 3换货订单
|
|
* @param $status 状态 1申请售后 2售后完成 3待发货 4待商家收货 5待发货/待退款 6驳回 7取消退款换货 8待客户收货
|
|
* @param $order_genre 判断小程序订单 1普通订单 2拼团订单 3 秒杀订单
|
|
* @param $order_no 搜索查询条件
|
|
* @param $page 分页
|
|
* @param $limit 分页数量
|
|
*/
|
|
public function CustomerList()
|
|
{
|
|
$type = I('post.type');
|
|
$order_type = I("post.order_type");
|
|
$status = I("post.status");
|
|
$order_no = I('post.order_no');
|
|
$order_genre = I("post.order_genre");
|
|
$page = I('post.page');
|
|
$limit = I('post.limit');
|
|
$merchant_id = self::$merchant_id;
|
|
$store_id = self::$store_id;
|
|
$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;
|
|
$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;
|
|
}
|
|
}
|
|
// 时间 查询条件
|
|
switch ($type) {
|
|
case 1:
|
|
//今天
|
|
$start_time = strtotime(date('Y-m-d 0:0:0', time()));
|
|
$end_time = strtotime(date('Y-m-d 0:0:0', time())) + 86400;
|
|
$time_str = $start_time . ',' . $end_time;
|
|
$where['b.add_time'] = array('between', $time_str);
|
|
break;
|
|
case 2:
|
|
//昨天
|
|
$start_time = strtotime(date('Y-m-d 0:0:0', strtotime("-1day")));
|
|
$end_time = strtotime(date('Y-m-d 0:0:0', strtotime("-1day"))) + 86400;
|
|
$time_str = $start_time . ',' . $end_time;
|
|
$where["b.add_time"] = array('between', $time_str);
|
|
break;
|
|
case 3:
|
|
//本周
|
|
$start_time = strtotime(date('Y-m-d', (time() - ((date('w') == 0 ? 7 : date('w')) - 1) * 24 * 3600)));
|
|
$end_time = strtotime(date('Y-m-d', (time() + (7 - (date('w') == 0 ? 7 : date('w'))) * 24 * 3600))) + 86399;
|
|
$time_str = $start_time . ',' . $end_time;
|
|
$where["b.add_time"] = array('between', $time_str);
|
|
break;
|
|
case 4:
|
|
//其他
|
|
$start_time = strtotime(date('Y-m-d', (time() - ((date('w') == 0 ? 7 : date('w')) - 1) * 24 * 3600)));
|
|
$where["b.add_time"] = array('lt', $start_time);
|
|
break;
|
|
default:
|
|
$start_time = strtotime(date('Y-m-d 0:0:0', time()));
|
|
$end_time = strtotime(date('Y-m-d 0:0:0', time())) + 86400;
|
|
$time_str = $start_time . ',' . $end_time;
|
|
$where["b.add_time"] = array('between', $time_str);
|
|
break;
|
|
}
|
|
if (!empty($order_no)) {
|
|
$where['b.order_no'] = array('like', "%" . $order_no . "%");
|
|
if (!empty($where["b.add_time"])) {
|
|
unset($where["b.add_time"]);
|
|
}
|
|
}
|
|
switch ($order_genre) {
|
|
case 1:
|
|
//普通订单
|
|
$order_info = $BillModel->getOnlineOrder($where, $page, $limit);
|
|
break;
|
|
case 2:
|
|
//拼团订单
|
|
$order_info = $BillModel->getOnlineGroupOrder($where, $page, $limit);
|
|
break;
|
|
case 3:
|
|
//秒杀订单
|
|
$order_info = $BillModel->getOnlineSkillOrder($where, $page, $limit);
|
|
break;
|
|
case 4:
|
|
//售后订单
|
|
$order_info = $BillModel->getAdvanceOrder($where, $page, $limit);
|
|
}
|
|
$order_list = $order_info['data'];
|
|
$order_count = $order_info['count'];
|
|
if ($order_list) {
|
|
$SellModel = new RetailSellModel();
|
|
$BillReasonModel = D("RetailBillReason");
|
|
$fields = array(
|
|
"vip_discount",
|
|
"goods_id",
|
|
"goods_img_id",
|
|
"goods_name",
|
|
"num",
|
|
"price",
|
|
"vip_price",
|
|
"original_price",
|
|
"plus_vip_price",
|
|
"all_money",
|
|
"attribute_state",
|
|
"sku_json_info",
|
|
"pricing_method",
|
|
"vip_discount",
|
|
"integral_dis_money",
|
|
"integral_marketing",
|
|
"mem_integral",
|
|
"company",
|
|
'id',
|
|
'serial_number_state',
|
|
'sell_id',
|
|
'sku_id'
|
|
);
|
|
$SerialClass = new SerialNumberGoods();
|
|
foreach ($order_list as $key => &$val) {
|
|
$val['index'] = $key + 1;
|
|
if ($val['refund_status'] == 2) {
|
|
$val['finish_time'] = date("Y-m-d H:i:s", $val['finish_time']);
|
|
}
|
|
$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['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['notes'] = '';
|
|
if ($val['refund_status'] == 1 && $val['order_type'] == 2 && $val['status'] == 1) {
|
|
if ($val['order_type'] == 2) {
|
|
$val['notes'] = '退款申请(客户还未收到商品)';
|
|
}
|
|
} else if ($val['refund_status'] == 1) {
|
|
if ($val['order_type'] == 2) {
|
|
$val['notes'] = '退款申请(客户已收到商品)';
|
|
} else {
|
|
$val['notes'] = '换货申请(客户已收到商品)';
|
|
}
|
|
}
|
|
$reason = $BillReasonModel->getFind(array('bill_id' => $val['id']));
|
|
$reason['img_path'] = array();
|
|
if (!empty($reason['goods_img_id'])) {
|
|
$reason_img = explode(",", $reason['goods_img_id']);
|
|
foreach ($reason_img as $value) {
|
|
$reason['img_path'][] = D('ImageGallery')->getImagePath($value);
|
|
}
|
|
}
|
|
$val['reason'] = $reason;
|
|
$sellList = $SellModel->getSelect(array("bill_id" => $val['id']), $fields);
|
|
foreach ($sellList as &$v) {
|
|
if ($v['integral_marketing'] == 2) {
|
|
$v['price'] = floatval($v['price']) . '+' . $v['mem_integral'] . '积分';
|
|
$v['all_money'] = round($v['all_money'] + $v['integral_dis_money'], 2);
|
|
} else {
|
|
$v['price'] = floatval($v['price']);
|
|
$v['all_money'] = floatval($v['all_money']);
|
|
}
|
|
$v['original_price'] = floatval($v['original_price']);
|
|
$v['vip_price'] = floatval($v['vip_price']);
|
|
$v['plus_vip_price'] = floatval($v['plus_vip_price']);
|
|
$v['num'] = floatval($v['num']);
|
|
if ($v['attribute_state'] == 2) {
|
|
$v['sku_name'] = json_decode($v["sku_json_info"], true)['name'];
|
|
} else {
|
|
$v['sku_name'] = '';
|
|
}
|
|
$v['image'] = D('ImageGallery')->getImgPath(['id' => $v['goods_img_id']]);
|
|
//串号信息
|
|
if ($v['serial_number_state'] == 1) {
|
|
$sell_id = $SellModel->getFindField([
|
|
'sell_id'=>$v['sell_id']
|
|
],'id',true);
|
|
array_push($sell_id,$v['sell_id']);
|
|
$result = $SerialClass->sellSerialList([
|
|
'id' => ['in',$sell_id],
|
|
'type' => 2,
|
|
'files' => 'id,main_serial_number,auxiliary_serial_number_one,auxiliary_serial_number_two'
|
|
]);
|
|
$v['refund_serial_list'] = $result['data']['list'];
|
|
$result = $SerialClass->sellSerialList([
|
|
'id' => $v['id'],
|
|
'files' => 'id,main_serial_number,auxiliary_serial_number_one,auxiliary_serial_number_two'
|
|
]);
|
|
$v['retired_serial_list'] = $result['data']['list'] ? $result['data']['list'] : [];
|
|
}
|
|
}
|
|
//优惠金额
|
|
$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);
|
|
}
|
|
$val['sell_list'] = $sellList;
|
|
unset($sellList);
|
|
unset($reason);
|
|
}
|
|
}
|
|
switch ($order_type) {
|
|
case 2:
|
|
$refund_order_count = $BillModel->getBillCount($where);
|
|
$refund_money = $BillModel->getDiscountSum($where, "b.all_money");
|
|
$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);
|
|
$refund_money = $BillModel->getDiscountSum($where, "b.all_money");
|
|
$where['b.refund_status'] = 2;
|
|
$refund_money_actual = $BillModel->getDiscountSum($where, "b.all_money");
|
|
unset($where['b.refund_status']);
|
|
$where['b.order_type'] = 3;
|
|
$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 = $refund_money ? round($refund_money, 2) : 0;
|
|
$refund_money_actual = $refund_money_actual ? $refund_money_actual : 0;
|
|
$res['status'] = 1;
|
|
$res['msg'] = '查询成功';
|
|
$res['order_list'] = $order_list;
|
|
$res['order_count'] = $order_count; //订单数
|
|
$res['refund_order_count'] = $refund_order_count; //退款订单
|
|
$res['exchange_order_count'] = $exchange_order_count; //换货订单
|
|
$res['refund_money'] = $refund_money; //申请退款金额
|
|
$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);
|
|
}
|
|
|
|
|
|
//审核商品信息确认
|
|
public function examineSerialOperation()
|
|
{
|
|
$data = I('post.');
|
|
$data['merchant_id'] = self::$merchant_id;
|
|
$data['store_id'] = self::$store_id;
|
|
$data['type'] = 2;
|
|
$SellClass = new Sell();
|
|
$result = $SellClass->confirmSellGoods($data);
|
|
$this->ajaxReturn($result);
|
|
}
|
|
|
|
|
|
/**
|
|
*审核售后订单
|
|
* @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.");
|
|
$order_no = $data["order_no"];
|
|
$type = $data["type"];
|
|
$reason_id = $data["reason_id"];
|
|
$reason = $data["reason"];
|
|
$deliver_state = $data["deliver_state"];
|
|
$parameter = array(
|
|
'merchant_id' => self::$merchant_id,
|
|
'store_id' => self::$store_id,
|
|
'order_no' => $order_no,
|
|
'refund_status' => 1,
|
|
'type' => $type,
|
|
'reason_id' => $reason_id,
|
|
'reason' => $reason,
|
|
'deliver_state' => $deliver_state,
|
|
'goods_list'=>$data['goods_list'],
|
|
'platform_type'=>self::$merchant['platform_type']
|
|
);
|
|
if (C('IS_SET_REDIS')) {
|
|
$ApiRedis = new \Addons\Api\RedisController();
|
|
$redis_key = "customer_" . $parameter['order_no'];
|
|
if ($ApiRedis::$redis->exists($redis_key)) {
|
|
$res['status'] = 0;
|
|
$res['msg'] = "正在操作该订单,请勿重复操作";
|
|
$this->ajaxReturn($res);
|
|
}
|
|
$ApiRedis::$redis->setex($redis_key, 10, $parameter['order_no']);
|
|
}
|
|
$res = A("Api/Customer")->examineOperation($parameter);
|
|
if (C('IS_SET_REDIS')) {
|
|
$ApiRedis::$redis->delete($redis_key);
|
|
}
|
|
$this->ajaxReturn($res);
|
|
}
|
|
|
|
|
|
//出售商品记录
|
|
public function sellList()
|
|
{
|
|
$data = I('post.');
|
|
$SellClass = new Sell();
|
|
$result = $SellClass->sellList($data);
|
|
$this->ajaxReturn($result);
|
|
}
|
|
|
|
|
|
/**
|
|
* 商家收货
|
|
* order_no 订单号
|
|
* goods_list 商品信息
|
|
*/
|
|
public function ReceivingGoods()
|
|
{
|
|
$order_no = I("post.order_no");
|
|
$parameter = array(
|
|
'merchant_id' => self::$merchant_id,
|
|
'store_id' => self::$store_id,
|
|
'order_no' => $order_no,
|
|
'refund_status' => 4,
|
|
'goods_list'=>I('post.goods_list'),
|
|
'platform_type'=>self::$merchant['platform_type']
|
|
);
|
|
if (C('IS_SET_REDIS')) {
|
|
$ApiRedis = new \Addons\Api\RedisController();
|
|
$redis_key = "customer_" . $parameter['order_no'];
|
|
if ($ApiRedis::$redis->exists($redis_key)) {
|
|
$res['status'] = 0;
|
|
$res['msg'] = "正在操作该订单,请勿重复操作";
|
|
$this->ajaxReturn($res);
|
|
}
|
|
$ApiRedis::$redis->setex($redis_key, 10, $parameter['order_no']);
|
|
}
|
|
$res = A("Api/Customer")->BusinessReceiving($parameter);
|
|
if (C('IS_SET_REDIS')) {
|
|
$ApiRedis::$redis->delete($redis_key);
|
|
}
|
|
$this->ajaxReturn($res);
|
|
}
|
|
} |