416 lines
13 KiB
PHP
416 lines
13 KiB
PHP
<?php
|
|
|
|
/**
|
|
* SaaSMall商城系统 - 团队十年电商经验汇集巨献!
|
|
* =========================================================
|
|
* Copy right 2019-2029 上海牛之云网络科技有限公司, 保留所有权利。
|
|
* ----------------------------------------------
|
|
* 官方网址: https://www.gobuysaas.com
|
|
* =========================================================
|
|
*/
|
|
|
|
namespace addon\store\model\cashier;
|
|
|
|
|
|
use addon\memberrecharge\model\RechargeOrder;
|
|
use addon\store\model\member\MemberOnceCard;
|
|
use addon\store\model\stock\Stock;
|
|
use addon\store\model\store\Store;
|
|
use app\model\BaseModel;
|
|
use app\model\member\Member;
|
|
use app\model\member\MemberAccount;
|
|
use app\model\member\MemberLevelOrder;
|
|
use app\model\order\OrderCommon;
|
|
use app\model\order\OrderCreateTool;
|
|
use app\model\order\OrderGoods;
|
|
use app\model\site\Site;
|
|
use app\model\system\Pay;
|
|
use think\facade\Cache;
|
|
use think\facade\Log;
|
|
use think\facade\Queue;
|
|
|
|
/**
|
|
* 收银订单
|
|
*
|
|
* @author Administrator
|
|
*
|
|
*/
|
|
class CashierOrderCommon extends BaseModel
|
|
{
|
|
|
|
|
|
public $pay_type = array(
|
|
'cash' => '现金支付',
|
|
'own_wechatpay' => '个人微信',
|
|
'own_alipay' => '个人支付宝',
|
|
'own_pos' => '个人pos刷卡',
|
|
// 'MAKEUP' => '组合支付',
|
|
// 'BALANCE' => '余额支付',
|
|
'ONLINE_PAY' => '在线支付',
|
|
);
|
|
|
|
protected $order_type = [
|
|
'goods' => '消费',
|
|
// 'level' => '会员卡订单',
|
|
'card' => '售卡',
|
|
'recharge' => '充值',
|
|
];
|
|
|
|
public $status = [
|
|
'topay' => '待付款',
|
|
'complete' => '已完成',
|
|
'close' => '已关闭',
|
|
];
|
|
|
|
|
|
public $cashier_type = [
|
|
'online' => '线上',
|
|
'cashier' => '收银台'
|
|
];
|
|
|
|
public function getStatusList()
|
|
{
|
|
|
|
return $this->status;
|
|
}
|
|
|
|
/**
|
|
* 支付方式
|
|
* @return array
|
|
*/
|
|
public function getPayType()
|
|
{
|
|
$pay_type = $this->pay_type;
|
|
$onlinepay = event('PayType', []);
|
|
if (!empty($onlinepay)) {
|
|
foreach ($onlinepay as $k => $v) {
|
|
$pay_type[$v['pay_type']] = $v['pay_type_name'];
|
|
}
|
|
}
|
|
return $pay_type;
|
|
}
|
|
|
|
public function getOrderType()
|
|
{
|
|
return $this->order_type;
|
|
}
|
|
|
|
/**
|
|
*关闭订单
|
|
* @param $condition
|
|
* @return array
|
|
*/
|
|
public function orderClose($condition)
|
|
{
|
|
$list = model('store_cashier_order')->getList($condition);
|
|
if (empty($list))
|
|
return $this->error();
|
|
|
|
$item_data = array(
|
|
'status' => 'close',
|
|
);
|
|
$pay_model = new Pay();
|
|
model('store_cashier_order')->startTrans();
|
|
try {
|
|
$stock_model = new Stock();
|
|
foreach ($list as $k => $v) {
|
|
$item_order_id = $v['order_id'];
|
|
$item_out_trade_no = $v['out_trade_no'];
|
|
$pay_status = $v['pay_status'];
|
|
$item_condition = array(
|
|
['order_id', '=', $item_order_id]
|
|
);
|
|
$site_id = $v['site_id'];
|
|
$member_id = $v['member_id'];
|
|
$order_id = $v['order_id'];
|
|
$store_cashier_order_goods_condition = array(
|
|
['order_id', '=', $order_id]
|
|
);
|
|
$order_goods_list = model('store_cashier_order_goods')->getList($store_cashier_order_goods_condition);
|
|
foreach ($order_goods_list as $k => $v) {
|
|
$trade_type = $v['trade_type'];
|
|
if (empty($trade_type) && $pay_status == 0) {
|
|
|
|
$stock_model->incSaleStock($v);
|
|
}
|
|
}
|
|
if ($pay_status == 0) {
|
|
$offset_limit = [];
|
|
//关闭交易单号
|
|
$pay_model->deletePay($item_out_trade_no);
|
|
} else {
|
|
//单纯退优惠券
|
|
$offset_limit = ['coupon', 'hongbao'];
|
|
}
|
|
$order_offset_model = new CashierOrderOffset();
|
|
$discount_params = array(
|
|
'site_id' => $site_id,
|
|
'member_id' => $member_id,
|
|
'order_id' => $order_id,
|
|
'limit' => $offset_limit
|
|
);
|
|
$discount_result = $order_offset_model->orderOffsetRefund($discount_params);
|
|
if ($discount_result['code'] < 0) {
|
|
model('store_cashier_order')->rollback();
|
|
return $discount_result;
|
|
}
|
|
model('store_cashier_order')->update($item_data, $item_condition);
|
|
}
|
|
model('store_cashier_order')->commit();
|
|
return $this->success();
|
|
} catch ( \Exception $e ) {
|
|
model('store_cashier_order')->rollback();
|
|
return $this->error('', $e->getMessage() . $e->getFile() . $e->getLine());
|
|
}
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
* 删除订单
|
|
* @param $condition
|
|
*/
|
|
public function deleteOrder($condition)
|
|
{
|
|
$info = model('store_cashier_order')->getInfo($condition);
|
|
if (empty($info))
|
|
return $this->error([], '找不到订单');
|
|
|
|
$condition = array(
|
|
['site_id', '=', $info['site_id']],
|
|
['store_id', '=', $info['store_id']],
|
|
['order_id', '=', $info['order_id']],
|
|
);
|
|
$this->orderClose($condition);//先关闭订单
|
|
$res = model('store_cashier_order')->delete($condition);
|
|
$res = model('store_cashier_order_goods')->delete($condition);
|
|
return $this->success();
|
|
}
|
|
|
|
/**
|
|
* 获取订单信息
|
|
* @param $condition
|
|
* @param string $field
|
|
* @return array
|
|
*/
|
|
public function getOrderInfo($condition, $field = '*')
|
|
{
|
|
$info = model('store_cashier_order')->getInfo($condition, $field);
|
|
if (!empty($info)) {
|
|
$info = $this->dealWithOrderInfo($info);
|
|
}
|
|
return $this->success($info);
|
|
}
|
|
|
|
|
|
/**
|
|
* 获取订单列表
|
|
* @param array $condition
|
|
* @param string $field
|
|
* @param string $order
|
|
* @param string $limit
|
|
*/
|
|
public function getOrderList($condition = [], $field = '*', $order = '', $limit = null)
|
|
{
|
|
$list = model('store_cashier_order')->getList($condition, $field, $order, '', '', '', $limit);
|
|
foreach ($list as $key => $val) {
|
|
$list[$key] = $this->dealWithOrderInfo($val);
|
|
}
|
|
return $this->success($list);
|
|
}
|
|
|
|
/**
|
|
* 获取订单分页列表
|
|
* @param array $condition
|
|
* @param number $page
|
|
* @param string $page_size
|
|
* @param string $order
|
|
* @param string $field
|
|
*/
|
|
public function getOrderPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = 'create_time desc', $field = '*')
|
|
{
|
|
$list = model('store_cashier_order')->pageList($condition, $field, $order, $page, $page_size);
|
|
foreach ($list['list'] as $key => $val) {
|
|
$list['list'][$key] = $this->dealWithOrderInfo($val);
|
|
}
|
|
return $this->success($list);
|
|
}
|
|
|
|
/**
|
|
* 处理订单信息数据
|
|
* @param $info
|
|
*/
|
|
protected function dealWithOrderInfo($info)
|
|
{
|
|
static $pay_type_list = [];
|
|
static $order_type_list = [];
|
|
|
|
if (empty($pay_type_list)) $pay_type_list = $this->getPayType();
|
|
if (empty($order_type_list)) $order_type_list = $this->getOrderType();
|
|
|
|
if (isset($info['pay_type'])) {
|
|
$info['pay_type_name'] = $pay_type_list[$info['pay_type']] ?? '';
|
|
}
|
|
if (isset($info['order_type'])) {
|
|
$info['order_type_name'] = $order_type_list[$info['order_type']] ?? '';
|
|
}
|
|
if (!empty($info['status'])) {
|
|
$status_list = $this->getStatusList();
|
|
$info['status_name'] = $status_list[$info['status']];
|
|
}
|
|
if (!empty($info['pay_status'])) {
|
|
$info['pay_status_name'] = $info['pay_status'] == 1 ? '已支付' : '待支付';
|
|
}
|
|
return $info;
|
|
}
|
|
|
|
|
|
/**
|
|
* 部分订单的自动化操作(主要是实物)
|
|
* @param $params
|
|
*/
|
|
public function autoOrderAction($params)
|
|
{
|
|
$trade_type = $params['trade_type'] ?? '';
|
|
$site_id = $params['site_id'];
|
|
$member_id = $params['member_id'];
|
|
if (empty($trade_type)) {
|
|
$order_common_model = new OrderCommon();
|
|
$order_id = $params['order_id'];
|
|
//主动发货
|
|
$order_goods_id_array = $params['order_goods_id_array'] ?? [];
|
|
$order_goods_ids = implode(',', $order_goods_id_array);
|
|
$delivery_data = array(
|
|
'order_goods_ids' => $order_goods_ids,//商品id
|
|
'express_company_id' => 0,//物流公司
|
|
'site_address_id' => 0,//站点发货地址id 电子面单使用
|
|
'delivery_no' => '',//快递单号
|
|
'order_id' => $order_id,//订单id
|
|
'delivery_type' => 'not',//是否需要物流
|
|
'site_id' => $site_id,
|
|
'uid' => 0,
|
|
);
|
|
$delivery_result = $order_common_model->delivery($delivery_data);
|
|
|
|
if ($delivery_result['code'] < 0) {
|
|
return $delivery_result;
|
|
}
|
|
//主动收货
|
|
$take_delivery_data = array(
|
|
'order_id' => $order_id,
|
|
'site_id' => $site_id,
|
|
'member_id' => $member_id,
|
|
'is_auto' => true
|
|
);
|
|
$take_delivery_result = $order_common_model->takeDelivery($take_delivery_data);
|
|
if ($take_delivery_result['code'] < 0) {
|
|
return $take_delivery_result;
|
|
}
|
|
}
|
|
return $this->success();
|
|
}
|
|
|
|
/**
|
|
* 获取订单项列表
|
|
* @param array $condition
|
|
* @param string $field
|
|
* @param string $order
|
|
* @param null $limit
|
|
* @return array
|
|
*/
|
|
public function getOrderGoodsList($condition = [], $field = '*', $order = '', $limit = null)
|
|
{
|
|
$list = model('store_cashier_order_goods')->getList($condition, $field, $order, '', '', '', $limit);
|
|
return $this->success($list);
|
|
}
|
|
|
|
/**
|
|
* 处理订单商品图片
|
|
* @param $order_goods
|
|
* @param $order_type
|
|
*/
|
|
public function dealWithOrderGoodsImage($order_goods, $order_type)
|
|
{
|
|
foreach ($order_goods as $key => $val) {
|
|
switch ($order_type) {
|
|
case 'recharge':
|
|
$val['goods_image_is_thumb'] = false;
|
|
break;
|
|
case 'level':
|
|
$val['goods_image_is_thumb'] = false;
|
|
break;
|
|
default:
|
|
$val['goods_image_is_thumb'] = true;
|
|
}
|
|
$order_goods[$key] = $val;
|
|
}
|
|
return $order_goods;
|
|
}
|
|
|
|
/**
|
|
* 修改订单信息
|
|
* @param $data
|
|
* @param $where
|
|
* @return array
|
|
*/
|
|
public function updateOrder($data, $where)
|
|
{
|
|
$res = model('store_cashier_order')->update($data, $where);
|
|
return $this->success($res);
|
|
}
|
|
|
|
|
|
/**
|
|
* 订单详情
|
|
* @param $params
|
|
*/
|
|
public function getOrderDetail($params)
|
|
{
|
|
$order_id = $params['order_id'] ?? 0;
|
|
$site_id = $params['site_id'] ?? 0;
|
|
$member_id = $params['member_id'] ?? 0;
|
|
$order_condition = array(
|
|
['order_id', '=', $order_id],
|
|
);
|
|
if ($site_id > 0) {
|
|
$order_condition[] = ['site_id', '=', $site_id];
|
|
}
|
|
if ($member_id > 0) {
|
|
$order_condition[] = ['member_id', '=', $member_id];
|
|
}
|
|
$info = model('store_cashier_order')->getInfo($order_condition);
|
|
if (empty($info))
|
|
return $this->error([], '订单不存在!');
|
|
|
|
$info = $this->dealWithOrderInfo($info);
|
|
$order_goods_list = model('store_cashier_order_goods')->getList($order_condition);
|
|
if (empty($order_goods_list))
|
|
return $this->error([], '订单不存在!');
|
|
|
|
$info['order_goods'] = $order_goods_list;
|
|
return $this->success($info);
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
* 获取订单分页列表
|
|
* @param array $condition
|
|
* @param number $page
|
|
* @param string $page_size
|
|
* @param string $order
|
|
* @param string $field
|
|
*/
|
|
public function getOrderDetailPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = 'create_time desc', $field = '*')
|
|
{
|
|
$list = model('store_cashier_order')->pageList($condition, $field, $order, $page, $page_size);
|
|
foreach ($list['list'] as $key => $val) {
|
|
$order_item = $val;
|
|
$order_item = $this->dealWithOrderInfo($order_item);
|
|
$order_goods_list = model('store_cashier_order_goods')->getList([['order_id', '=', $order_item['order_id']]]);
|
|
$order_item['order_goods'] = $order_goods_list;
|
|
$list['list'][$key] = $order_item;
|
|
}
|
|
return $this->success($list);
|
|
}
|
|
} |