文件
mashangyoujiu/Application/CashierApi/Controller/CustomerController.class.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);
}
}