jh-admin/addon/store/model/cashier/CashierOrderCommon.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);
}
}