This repository has been archived on 2024-07-11. You can view files and clone it, but cannot push or open issues or pull requests.
yoshop/source/application/common/service/Order.php
2020-04-25 22:20:29 +08:00

91 lines
2.5 KiB
PHP

<?php
namespace app\common\service;
use app\common\enum\OrderType as OrderTypeEnum;
/**
* 订单服务类
* Class Order
* @package app\common\service
*/
class Order
{
/**
* 订单模型类
* @var array
*/
private static $orderModelClass = [
OrderTypeEnum::MASTER => 'app\common\model\Order',
OrderTypeEnum::SHARING => 'app\common\model\sharing\Order'
];
/**
* 生成订单号
* @return string
*/
public static function createOrderNo()
{
return date('Ymd') . substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8);
}
/**
* 整理订单列表 (根据order_type获取不同类型的订单记录)
* @param \think\Collection|\think\Paginator $data 数据源
* @param string $orderIndex 订单记录的索引
* @param array $with 关联查询
* @return mixed
*/
public static function getOrderList($data, $orderIndex = 'order', $with = [])
{
// 整理订单id
$orderIds = [];
foreach ($data as &$item) {
$orderIds[$item['order_type']['value']][] = $item['order_id'];
}
// 获取订单列表
$orderList = [];
foreach ($orderIds as $orderType => $values) {
$model = self::model($orderType);
$orderList[$orderType] = $model->getListByIds($values, $with);
}
// 格式化到数据源
foreach ($data as $key => &$item) {
if (!isset($orderList[$item['order_type']['value']][$item['order_id']])) {
// todo: 兼容错误数据
$item->delete();
unset($data[$key]);
continue;
}
$item[$orderIndex] = $orderList[$item['order_type']['value']][$item['order_id']];
}
return $data;
}
/**
* 获取订单详情 (根据order_type获取不同类型的订单详情)
* @param $orderId
* @param int $orderType
* @return mixed
*/
public static function getOrderDetail($orderId, $orderType = OrderTypeEnum::MASTER)
{
$model = self::model($orderType);
return $model::detail($orderId);
}
/**
* 根据订单类型获取对应的订单模型类
* @param int $orderType
* @return mixed
*/
public static function model($orderType = OrderTypeEnum::MASTER)
{
static $models = [];
if (!isset($models[$orderType])) {
$models[$orderType] = new self::$orderModelClass[$orderType];
}
return $models[$orderType];
}
}