初始化项目:添加后端代码、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);
}
}
@@ -0,0 +1,19 @@
<?php
namespace app\api\model\order;
use think\Model;
use think\Db;
class RefundApply extends Model
{
// 表名
protected $name = 'order_refund_apply';
// 自动写入时间戳字段
protected $autoWriteTimestamp = 'integer';
// 定义时间戳字段名
protected $createTime = 'createtime';
protected $updateTime = false;
protected $deleteTime = false;
}
+24
View File
@@ -0,0 +1,24 @@
<?php
namespace app\api\model\order;
use think\Model;
use think\Db;
class RefundLog extends Model
{
// 表名
protected $name = 'order_refund_log';
// 自动写入时间戳字段
protected $autoWriteTimestamp = 'integer';
// 定义时间戳字段名
protected $createTime = 'createtime';
protected $updateTime = false;
protected $deleteTime = false;
public function item()
{
return $this->belongsTo('app\common\model\order\Item', 'order_item_id', 'id', [], 'LEFT')->setEagerlyType(0);
}
}
+53
View File
@@ -0,0 +1,53 @@
<?php
namespace app\api\model\order;
use think\Model;
use think\Db;
use app\common\model\order\Status as StatusModel;
class Service extends Model
{
// 申请退款
public static function operRefund($params)
{
$user = User::info();
extract($params);
$order = self::canAftersale()->where('user_id', $user->id)->where('id', $id)->find();
// 获取要操作的 订单 item
$order_item = self::getItem($order, $order_item_id);
if (!in_array($order_item->refund_status, [
OrderItem::REFUND_STATUS_REFUSE,
OrderItem::REFUND_STATUS_NOREFUND,
])) {
throw new \app\common\exception\Exception('当前订单已在申请退款状态');
}
$order = Db::transaction(function () use ($order, $order_item, $user) {
$order_item->aftersale_status = OrderItem::AFTERSALE_STATUS_AFTERING; // 申请售后
$order_item->refund_status = OrderItem::REFUND_STATUS_ING; // 申请退款
$order_item->save();
OrderAction::operAdd($order, $order_item, $user, 'user', '用户申请退款');
return $order;
});
return $order;
}
/**
* 获取退款原因
* @return string[]
*/
public function getRefundReason(){
return [
1=>'不想要了',
2=>'商家服务原因',
3=>'商品质量问题',
4=>'其他'
];
}
}