620 行
25 KiB
PHP
可执行文件
620 行
25 KiB
PHP
可执行文件
<?php
|
||
|
||
namespace Common\Business;
|
||
|
||
use Blessing\Business\Index;
|
||
use Common\Model\BillOrderViewModel;
|
||
use Common\Model\RetailBillAdvanceModel;
|
||
use Common\Model\RetailBillGroupModel;
|
||
use Common\Model\RetailBillOrderModel;
|
||
use Common\Model\RetailDaOrderModel;
|
||
use Common\Model\RetailSellModel;
|
||
use Common\Model\RetailStoreModel;
|
||
use Common\Model\RetailUuOrderModel;
|
||
use Make\Model\MakeOrderModel;
|
||
|
||
//[1.8.89]
|
||
|
||
/**
|
||
* 订单类
|
||
* Class BillOrder
|
||
* [
|
||
* 线上线下订单列表(线上线下结合)
|
||
* 依据订单id查询订单信息(bill_order,retail_bill_discount) basisIdGetInfo
|
||
* 配送或者获取配送价格前的订单状态验证 orderStateVerify
|
||
* ]
|
||
* @package Common\Business
|
||
*/
|
||
class BillOrder
|
||
{
|
||
/**
|
||
* 线上线下订单列表(线上线下结合)
|
||
* @param $param
|
||
* [
|
||
* merchant_id
|
||
* uid 小程序用户id
|
||
* vip_id 会员id
|
||
* order_type 1:购买订单 2:售后
|
||
* order_status 订单状态 -1 待付款 1:全部订单 2:待发货/自提 3:待收货 4:待评价
|
||
* order_genre 订单类型 1.普通订单 2.拼团订单 3.秒杀订单 4.预售订单
|
||
* page 分页
|
||
* ]
|
||
* @return mixed
|
||
*/
|
||
public function orderList($param)
|
||
{
|
||
//验证参数
|
||
$verifyResult = $this->orderListVerify($param);
|
||
if ($verifyResult['status'] != 1) {
|
||
return $verifyResult;
|
||
}
|
||
//获取该用户的待支付订单id集合与倒计时
|
||
if ($param['order_status'] == '-1') {
|
||
$stayResult = $this->stayPaymentOrder($param);
|
||
$param['billId'] = $stayResult['data']['billId'];
|
||
$param['waitPayTimeArr'] = $stayResult['data']['waitPayTimeArr'];
|
||
}
|
||
$where = $this->orderListTerm($param); //查询条件
|
||
$fields = [
|
||
'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',
|
||
'order_type',
|
||
'refund_no',
|
||
'type'
|
||
];
|
||
$page = $param['page'] ? $param['page'] : 1;
|
||
$OrderModel = new BillOrderViewModel();
|
||
$list = $OrderModel->getSelect($where, $fields, 'id desc', $page . ',10');
|
||
if (!empty($list)) {
|
||
$data = [
|
||
'list' => $list,
|
||
'billId' => $param['billId'] ? $param['billId'] : [],
|
||
'waitPayTimeArr' => $param['waitPayTimeArr'] ? $param['waitPayTimeArr'] : []
|
||
];
|
||
$list = $this->orderListHandle($data);
|
||
}
|
||
return callBack(statusCode()['success'], '查询成功', $list);
|
||
}
|
||
|
||
|
||
/**
|
||
* 线上线下订单列表字段转换
|
||
* @param $param
|
||
* @return mixed
|
||
*/
|
||
public function orderListHandle($param)
|
||
{
|
||
$list = $param['list']; //列表
|
||
$billId = $param['billId'];
|
||
$waitPayTimeArr = $param['waitPayTimeArr'];
|
||
$UuOrderModel = new RetailUuOrderModel();//uu订单模型
|
||
$DaOrderModel = new RetailDaOrderModel();//达达订单模型
|
||
$SellModel = new RetailSellModel();//商品销售记录模型
|
||
$StoreModel = new RetailStoreModel();//门店表模型
|
||
$storeList = array();
|
||
$RetailBillAdvanceModel = new RetailBillAdvanceModel();
|
||
$BillGroupModel = new RetailBillGroupModel();
|
||
$plugClass = new Plug();
|
||
$ImageClass = new Image();
|
||
$data = array();
|
||
//购买订单
|
||
$fields = [
|
||
'goods_id',
|
||
'goods_img_id',
|
||
'goods_name',
|
||
'price',
|
||
'sell_number',
|
||
'all_money'
|
||
];
|
||
foreach ($list as $val) {
|
||
$add_time = date('Y-m-d H:i:s', $val['add_time']);
|
||
if ($val['type'] == 1 && $val['order_type'] == 1) {
|
||
//商城购买订单
|
||
$pick_code = $val['pick_code'] ? $val['pick_code'] : '';
|
||
$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,//祝福语按钮
|
||
);
|
||
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;
|
||
}
|
||
}
|
||
if ($val['order_type'] == 1) {
|
||
//判断这条订单所属门店,是否有权限
|
||
$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;
|
||
}
|
||
}
|
||
}
|
||
$goods_list = $SellModel->getSelect(['bill_id' => $val['id']], $fields);
|
||
foreach ($goods_list as &$v) {
|
||
$v['goods_img'] = $ImageClass->getGoodsImageUrl(['img_id' => $v['goods_img_id'], 'store_id' => $val['store_id']]);
|
||
}
|
||
$val['goods_sell_species'] = count($goods_list);
|
||
//门店信息
|
||
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;
|
||
}
|
||
if (in_array($val['order_type'], ['2', '3'])) {
|
||
//售后订单
|
||
if (($val['refund_status'] != 2 || $val['refund_status'] == 6) && $val['order_type'] == 2) {
|
||
$val['all_money'] = round($val['all_money'] + $val['delivery_fee'], 2);
|
||
} else {
|
||
$val['all_money'] = floatval($val['all_money']);
|
||
}
|
||
}
|
||
switch ($val['type']) {
|
||
case 1:
|
||
$type_name = '线上';
|
||
break;
|
||
case 2:
|
||
$type_name = '线下';
|
||
break;
|
||
}
|
||
$data[] = array(
|
||
'type_name' => $type_name,
|
||
'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'] ? $val['order_genre'] : 0,
|
||
'order_no' => $val['order_no'],
|
||
'refund_no' => $val['refund_no'] ? $val['refund_no'] : '',
|
||
'add_time' => $add_time,
|
||
'state_msg' => $state_msg,
|
||
'pick_code' => $pick_code ? $pick_code : '',
|
||
'tail_start_time' => $tail_start_time ? $tail_start_time : '',
|
||
'group_desc_time' => $group_desc_time ? $group_desc_time : '',
|
||
'pay_desc_time' => $pay_desc_time ? $pay_desc_time : '',
|
||
'goods_info' => $goods_list,
|
||
'button' => $button ? $button : [],
|
||
'order_type' => $val['order_type'],
|
||
'status' => $val['status'],
|
||
'refund_status' => $val['refund_status']
|
||
);
|
||
}
|
||
return $data;
|
||
}
|
||
|
||
|
||
/**
|
||
* 线上线下订单列表的查询条件
|
||
* @param $param
|
||
* [
|
||
* merchant_id
|
||
* uid 小程序用户id
|
||
* vip_id 会员id
|
||
* order_type 1:购买订单 2:售后
|
||
* order_status 订单状态 -1 待付款 1:全部订单 2:待发货/自提 3:待收货 4:待评价
|
||
* order_genre 订单类型 1.线上普通订单 2.拼团订单 3.秒杀订单 4.预售订单
|
||
* billId 用户的待支付订单id集合
|
||
*
|
||
* ]
|
||
* @return mixed
|
||
*/
|
||
public function orderListTerm($param)
|
||
{
|
||
$where = [
|
||
'merchant_id' => $param['merchant_id'],
|
||
];
|
||
switch ($param['order_type']) {
|
||
case 1:
|
||
//购买
|
||
$where['order_type'] = 1;
|
||
$where['refund_status'] = ['in', '0,1'];
|
||
if ($param['order_status'] != 1 || !empty($param['order_genre'])) {
|
||
$where['type'] = 1;
|
||
//订单状态
|
||
switch ($param['order_status']) {
|
||
case '-1':
|
||
$where['id'] = array('in', $param['billId'] ? $param['billId'] : [0]);
|
||
//查询待支付订单
|
||
break;
|
||
case '2':
|
||
//自提或待发货订单
|
||
$where['status'] = 1;
|
||
$where['refund_status'] = 0;
|
||
break;
|
||
case '3':
|
||
//待收货
|
||
$where['pickup_type'] = ['in', '2,3'];
|
||
$where['status'] = 2;
|
||
$where['refund_status'] = 0;
|
||
break;
|
||
case '4':
|
||
//待评价
|
||
$where['status'] = 3;
|
||
$where['eval_status'] = 0;
|
||
$where['refund_status'] = 0;
|
||
break;
|
||
}
|
||
if (!empty($param['order_genre'])) {
|
||
$where['order_genre'] = $param['order_genre'];
|
||
}
|
||
}
|
||
break;
|
||
case 2:
|
||
//售后
|
||
$where['order_type'] = ['in', '2,3'];
|
||
break;
|
||
}
|
||
if (!empty($param['vip_id'])) {
|
||
$where[] = [
|
||
['uid' => $param['uid']],
|
||
['vid' => $param['vip_id']],
|
||
'_logic' => 'OR'
|
||
];
|
||
} else {
|
||
$where['uid'] = $param['uid'];
|
||
}
|
||
return $where;
|
||
}
|
||
|
||
|
||
/**
|
||
* 获取该用户的待支付订单集合与倒计时
|
||
* @param $param
|
||
* [
|
||
* uid 小程序用户id
|
||
* ]
|
||
* @return array
|
||
*/
|
||
public function stayPaymentOrder($param)
|
||
{
|
||
$redis_key = 'retail_*_*_*_' . $param['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'];
|
||
}
|
||
}
|
||
}
|
||
return callBack(statusCode()['success'], '获取成功', [
|
||
'billId' => $billId,
|
||
'waitPayTimeArr' => $waitPayTimeArr
|
||
]);
|
||
}
|
||
|
||
|
||
/**
|
||
* 线上线下订单列表的参数验证
|
||
* @param $param
|
||
* [
|
||
* merchant_id
|
||
* uid 小程序用户id
|
||
* vip_id 会员id
|
||
* order_type 1:购买订单 2:退款订单 3换货订单
|
||
* order_status 订单状态 -1 待付款 1:全部订单 2:待发货/自提 3:待收货 4:待评价
|
||
* order_genre 订单类型 1.普通订单 2.拼团订单 3.秒杀订单 4.预售订单
|
||
* page 分页
|
||
* ]
|
||
* @return mixed
|
||
*/
|
||
public function orderListVerify($param)
|
||
{
|
||
if (empty($param['merchant_id']) || empty($param['uid']) || empty($param['order_type'])) {
|
||
return callBack(statusCode()['error'], '缺少唯一标识');
|
||
}
|
||
if (empty($param['order_status']) && $param['order_type'] == 1) {
|
||
return callBack(statusCode()['error'], '缺少唯一标识');
|
||
}
|
||
return callBack(statusCode()['success'], '验证成功');
|
||
}
|
||
|
||
|
||
/**
|
||
* 依据订单id查询订单信息
|
||
* @param $id 订单id
|
||
* @return mixed
|
||
*/
|
||
public function basisIdGetInfo($id)
|
||
{
|
||
try {
|
||
$BillOrderModel = new RetailBillOrderModel();
|
||
$info = $BillOrderModel->getCashierOrder([
|
||
'b.id' => $id
|
||
], "b.*,d.coupon_type,d.coupon_id");
|
||
if (!empty($info)) {
|
||
return callBack(statusCode()['success'], "查询成功", $info);
|
||
} else {
|
||
return callBack(statusCode()['error'], "未找到该流水订单");
|
||
}
|
||
} catch (\Exception $e) {
|
||
return callBack(statusCode()['error'], "未找到该流水订单");
|
||
}
|
||
}
|
||
|
||
|
||
/**
|
||
* 配送或者获取价格的订单状态验证
|
||
* @param $param
|
||
* [
|
||
* platform_type 商户平台类型 1默认系统 2微礼平台
|
||
* order_no 订单号
|
||
* store_id
|
||
* ]
|
||
* @return mixed
|
||
*/
|
||
public function orderStateVerify($param)
|
||
{
|
||
$platform_type = $param['platform_type'] ? $param['platform_type'] : 1;
|
||
try {
|
||
$fields = [
|
||
'b.id',
|
||
'b.refund_status',
|
||
'b.order_no',
|
||
'b.all_money',
|
||
'b.order_type',
|
||
'b.uid',
|
||
'b.add_time',
|
||
'b.refund_no',
|
||
'b.merchant_id',
|
||
'b.third_order',
|
||
'o.status',
|
||
'o.order_genre',
|
||
'o.user_address',
|
||
'o.user_name',
|
||
'o.user_phone',
|
||
'o.pickup_type',
|
||
'o.cancel_delivery_status',
|
||
'o.delivery_record_id',
|
||
'o.form_id',
|
||
'o.remark',
|
||
];
|
||
if ($platform_type == 2) {
|
||
//第三方平台
|
||
$fields[] = 'b.third_order';
|
||
}
|
||
$BillOrderModel = new RetailBillOrderModel();
|
||
$order = $BillOrderModel->getOrderLinkFind([
|
||
'b.order_no' => strval($param['order_no']),
|
||
'b.store_id' => $param['store_id'],
|
||
'b.pay_state' => 1,//支付成功
|
||
'b.type' => 1,//商城订单
|
||
'b.order_type' => ['in', '1,3'],
|
||
], $fields); //订单信息
|
||
} catch (\Exception $e) {
|
||
return callBack(statusCode()['error'], "查询失败");
|
||
}
|
||
if (empty($order)) {
|
||
return callBack(statusCode()['error'], "未找到该订单");
|
||
}
|
||
if ($order['refund_status'] == 1) {
|
||
return callBack(statusCode()['error'], "该订单存在退款申请,请先处理");
|
||
}
|
||
switch ($order['status']) {
|
||
case 2:
|
||
return callBack(statusCode()['error'], "订单已在配送,请勿重复操作");
|
||
break;
|
||
case 3:
|
||
return callBack(statusCode()['error'], "订单已收货,请刷新页面查看");
|
||
break;
|
||
}
|
||
if ($order['order_genre'] == 2) {
|
||
//拼团订单
|
||
$BillGroupModel = new RetailBillGroupModel();
|
||
$state = $BillGroupModel->getFindField([
|
||
'bill_id' => $order['id']
|
||
], 'state');
|
||
if ($state != 2) {
|
||
return callBack(statusCode()['error'], "该订单未拼团成功,不能进行配送");
|
||
}
|
||
}
|
||
return callBack(statusCode()['success'], "验证成功", ['order_info' => $order]);
|
||
}
|
||
} |