初始化项目:添加后端代码、ThinkPHP框架、前端资源

This commit is contained in:
amb
2026-09-03 12:42:39 +08:00
commit 482bece22e
3726 changed files with 416708 additions and 0 deletions
+182
View File
@@ -0,0 +1,182 @@
<?php
namespace app\api\model\order;
use think\Model;
use think\Db;
use app\common\model\order\Status as StatusModel;
class Order extends Model
{
/**
* 获取订单列表
* @param $userId
* @param $params
* @return array
*/
public function getList($userId,$params = []){
$where = [];
$where['deleted'] = 0;
// 组织用户维度查询条件
$userCondition = function ($query) use ($userId) {
$orderTableName = (new \app\admin\model\order\Order())->getQuery()->getTable();
$query->where(function ($q) use ($userId) {
// 原始用户订单查询
$q->where('user_id', $userId);
});
if(\app\admin\library\project\App::isInstall('channels')){
$userInfo = user_info();
if($userInfo && $userInfo['mobile']){
$userMobile = $userInfo['mobile'];
$channelTable = (new \app\api\model\app\channels\Order())->getQuery()->getTable();
$query->whereOr(function ($q) use ($userId, $orderTableName, $channelTable,$userMobile) {
// 第三方平台订单关联查询(需要传入mobile)
$q->whereExists(function ($subQuery) use ($orderTableName, $channelTable, $userMobile) {
$subQuery->table($channelTable)
->where($channelTable . '.order_id=' . $orderTableName . '.order_no')
->where($channelTable . '.mobile', $userMobile);
})->where($orderTableName . '.user_id', 0);
});
}
}
};
// 应用用户维度条件
$where[] = $userCondition;
// 其他过滤条件(状态/搜索等)
if($params['status']){
$statusFilter = StatusModel::statusGetFilter($params['status']);
if(!empty($statusFilter)){
$where = array_merge($where,$statusFilter);
}
}
$itemName = "";
if($params['search']){
if($params['search_field'] == 'order_no'){
$where['order_no'] = ['like',"%{$params['search']}%"];
}else{
$itemName = $params['search'];
}
}
$rows = self::where($where);
// 保留商品名称查询条件
if(!empty($itemName)){
$rows = $rows->whereExists(function ($query) use ($itemName) {
$itemTableName = (new \app\admin\model\order\Item())->getQuery()->getTable();
$orderTableName = (new \app\admin\model\order\Order())->getQuery()->getTable();
$query->table($itemTableName)
->where($itemTableName . '.order_no=' . $orderTableName . '.order_no')
->where('item_name', 'like', "%{$itemName}%");
});
}
$list = $rows
->with(['item'])
->limit($params['limit'])->page($params['page'])
->order('createtime','desc')
->select();
$data = [];
$statusModel = new StatusModel();
if(!empty($list)){
foreach ($list as $index => $item){
$item->visible(['controll','createtime','real_price','real_pay_price','evaluate','status','order_type','order_no','item','pay_type','is_virtual_pay']);
$data[$index] = $item->toArray();
$isVirtualPay = !empty($data[$index]['is_virtual_pay']);
$data[$index]['is_virtual_pay'] = $isVirtualPay ? 1 : 0;
if ($isVirtualPay) {
$data[$index] = \app\common\library\pay\VirtualPayService::convertPriceFields($data[$index], ['real_price', 'real_pay_price']);
}
if(!empty($item['item'])){
foreach ($item['item'] as $key => $option){
$data[$index]['item'][$key] = $this->limitItemField($data[$index]['item'][$key]);
if ($isVirtualPay && isset($data[$index]['item'][$key]['snapshoot']['price'])) {
$data[$index]['item'][$key]['snapshoot'] = \app\common\library\pay\VirtualPayService::convertPriceFields($data[$index]['item'][$key]['snapshoot'], ['price']);
}
}
}
$data[$index]['controll'] = $statusModel->getOrderControllStatus($data[$index]);
}
}
return $data;
}
/**
* 解析商品中的字段
* @param $snapshoot
* @return array
*/
public function limitItemField($item){
$item['snapshoot'] = $this->limitSnapshootField($item['snapshoot'] );
return [
'snapshoot'=>$item['snapshoot'],
'item_id'=>$item['item_id'],
'createtime'=>$item['createtime'],
'count'=>$item['count'],
'id'=>$item['id']
];
}
/**
* 解析快照中的字段
* @param $snapshoot
* @return array
*/
public function limitSnapshootField($snapshoot){
if(!$snapshoot){
return $snapshoot;
}
if(!is_array($snapshoot)){
$snapshoot = json_decode($snapshoot,true);
}
$data = [
'id'=>$snapshoot['id'],
'cover'=>$snapshoot['cover'],
'type'=>$snapshoot['type'],
'name'=>$snapshoot['name'],
'price'=>$snapshoot['price']
];
if(isset($snapshoot['id'])){
$data['id'] = $snapshoot['id'];
}
if(isset($snapshoot['updatetime'])){
$data['updatetime'] = $snapshoot['updatetime'];
}
if(isset($snapshoot['views'])){
$data['views'] = $snapshoot['views'];
}
return $data;
}
public function item()
{
return $this->hasMany('app\common\model\order\Item', 'order_no', 'order_no');
}
public function channelsorder()
{
return $this->belongsTo('app\api\model\app\channels\Order', 'order_no', 'order_id', [], 'left')->setEagerlyType(0);
}
}