店主订单操作接口

pull/1/head
limu 1 year ago
parent da9bbc4c54
commit bf95dd00de
  1. 173
      app/api/controller/StoreKeeper.php
  2. 70
      app/store/model/Order.php
  3. 33
      app/store/model/OrderRefund.php

@ -13,6 +13,9 @@ declare (strict_types=1);
namespace app\api\controller;
use app\api\service\User as UserService;
use app\store\model\Express as ExpressModel;
use app\store\model\store\shop\Clerk as ClerkModel;
use app\store\service\order\Delivery as DeliveryService;
use cores\exception\BaseException;
use think\App;
use think\response\Json;
@ -21,6 +24,8 @@ use think\db\exception\DataNotFoundException;
use think\db\exception\DbException;
use think\db\exception\ModelNotFoundException;
use app\store\model\Goods as GoodsModel;
use app\store\model\Order as OrderModel;
use app\store\model\OrderRefund as OrderRefundModel;
/**
* 店主管理
@ -165,5 +170,173 @@ class StoreKeeper extends Controller
return $this->renderSuccess('删除成功');
}
//订单相关
/**
* 订单列表
* @param string $dataType
* @return Json
*/
public function orderList(string $dataType): Json
{
$params = $this->request->param();
$params['searchType'] = 'all';
// 订单列表
if (!empty($params['dataType']) && $params['dataType'] == 'refund') {
$model = new OrderRefundModel;
$list = $model->getList($params);
return $this->renderSuccess(compact('list'));
} else {
$model = new OrderModel;
$list = $model->getList($params);
return $this->renderSuccess(compact('dataType', 'list'));
}
}
/**
* 获取全部记录
* @return Json
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function expressAll(): Json
{
$model = new ExpressModel;
$list = $model->getAll($this->request->param());
return $this->renderSuccess(compact('list'));
}
/**
* 修改订单价格
* @param int $orderId
* @return Json
*/
public function updatePrice(int $orderId): Json
{
// 订单详情
$model = OrderModel::detail($orderId);
if ($model->updatePrice($this->postForm())) {
return $this->renderSuccess('操作成功');
}
return $this->renderError($model->getError() ?: '操作失败');
}
/**
* 修改订单地址
* @param int $orderId
* @return Json
*/
public function updateAddress(int $orderId): Json
{
// 订单详情
$model = OrderModel::detail($orderId);
if ($model->updateAddress($this->postForm())) {
return $this->renderSuccess('操作成功');
}
return $this->renderError($model->getError() ?: '操作失败');
}
/**
* 审核:用户取消订单
* @param $orderId
* @return Json
*/
public function confirmCancel($orderId): Json
{
// 订单详情
$model = OrderModel::detail($orderId);
if ($model->confirmCancel($this->postForm())) {
return $this->renderSuccess('操作成功');
}
return $this->renderError($model->getError() ?: '操作失败');
}
/**
* 删除订单记录
* @param int $orderId
* @return Json
*/
public function oderDelete(int $orderId): Json
{
// 订单详情
$model = OrderModel::detail($orderId);
// 确认核销
if ($model->setDelete()) {
return $this->renderSuccess('删除成功');
}
return $this->renderError($model->getError() ?: '操作失败');
}
/**
* 门店自提核销
* @param int $orderId
* @return Json
*/
public function extract(int $orderId): Json
{
// 订单详情
$model = OrderModel::detail($orderId);
if ($model->extractEvent($this->postForm())) {
return $this->renderSuccess('核销成功');
}
return $this->renderError($model->getError() ?: '核销失败');
}
public function clerkAll(): Json
{
// 店员列表
$model = new ClerkModel;
$list = $model->getAll($this->request->param());
return $this->renderSuccess(compact('list'));
}
/**
* 确认发货 (手动录入)
* @param int $orderId 订单ID
* @return Json
*/
public function delivery(int $orderId): Json
{
$service = new DeliveryService;
if ($service->delivery($orderId, $this->postForm())) {
return $this->renderSuccess('发货成功');
}
return $this->renderError($service->getError() ?: '发货失败');
}
/**
* 商家审核
* @param int $orderRefundId
* @return Json
*/
public function audit(int $orderRefundId): Json
{
// 售后单详情
$model = OrderRefundModel::detail($orderRefundId);
// 确认审核
if ($model->audit($this->postForm())) {
return $this->renderSuccess('操作成功');
}
return $this->renderError($model->getError() ?: '操作失败');
}
/**
* 确认收货并退款
* @param int $orderRefundId
* @return Json
*/
public function receipt(int $orderRefundId): Json
{
// 售后单详情
$model = OrderRefundModel::detail($orderRefundId);
// 确认收货并退款
if ($model->receipt($this->postForm())) {
return $this->renderSuccess('操作成功');
}
return $this->renderError($model->getError() ?: '操作失败');
}
}

@ -61,19 +61,33 @@ class Order extends OrderModel
{
// 检索查询条件
$filter = $this->getQueryFilter($param);
$filterOr = [];
if (!empty($param['searchValue']) && $param['searchType'] == 'all') {
$filterOr = [
['order.order_no', 'like', "%{$param['searchValue']}%"],
['user.nick_name', 'like', "%{$param['searchValue']}%"],
['address.name', 'like', "%{$param['searchValue']}%"],
['address.phone', 'like', "%{$param['searchValue']}%"],
];
}
// 设置订单类型条件
$dataTypeFilter = $this->getFilterDataType($param['dataType']);
// 获取数据列表
return $this->with(['goods.image', 'user.avatar', 'address'])
$query = $this->with(['goods.image', 'user.avatar', 'address'])
->alias('order')
->field('order.*')
->leftJoin('user', 'user.user_id = order.user_id')
->leftJoin('order_address address', 'address.order_id = order.order_id')
->where($dataTypeFilter)
->where($filter)
->where('order.is_delete', '=', 0)
->order(['order.create_time' => 'desc'])
->where('order.is_delete', '=', 0);
if (!empty($filterOr)) {
$query = $query->whereOr($filterOr);
}
$list = $query->order(['order.create_time' => 'desc'])
->paginate(10);
return $list;
}
/**
@ -122,14 +136,16 @@ class Order extends OrderModel
$filter = [];
// 关键词
if (!empty($params['searchValue'])) {
$searchWhere = [
10 => ['order.order_no', 'like', "%{$params['searchValue']}%"],
20 => ['user.nick_name', 'like', "%{$params['searchValue']}%"],
30 => ['order.user_id', '=', (int)$params['searchValue']],
40 => ['address.name', 'like', "%{$params['searchValue']}%"],
50 => ['address.phone', 'like', "%{$params['searchValue']}%"],
];
array_key_exists($params['searchType'], $searchWhere) && $filter[] = $searchWhere[$params['searchType']];
if ($params['searchType'] != 'all') {
$searchWhere = [
10 => ['order.order_no', 'like', "%{$params['searchValue']}%"],
20 => ['user.nick_name', 'like', "%{$params['searchValue']}%"],
30 => ['order.user_id', '=', (int)$params['searchValue']],
40 => ['address.name', 'like', "%{$params['searchValue']}%"],
50 => ['address.phone', 'like', "%{$params['searchValue']}%"],
];
array_key_exists($params['searchType'], $searchWhere) && $filter[] = $searchWhere[$params['searchType']];
}
}
// 起止时间
if (!empty($params['betweenTime'])) {
@ -221,6 +237,35 @@ class Order extends OrderModel
]) !== false;
}
/**
* 修改收货地址
* @param array $data
* @return bool
*/
public function updateAddress(array $data): bool
{
if ($this['pay_status'] != PayStatusEnum::SUCCESS
|| $this['delivery_status'] == DeliveryStatusEnum::DELIVERED || $this['delivery_type'] != 10) {
$this->error = "订单号[{$this['order_no']}]不满足修改条件!";
return false;
}
if (empty($data['region']) || empty($data['name']) || empty($data['phone'])) {
$this->error = "请补全地址信息!";
return false;
}
$update = [
'name' => $data['name'],
'phone' => $data['phone'],
'province_id' => $data['region'][0]['value'],
'city_id' => $data['region'][1]['value'],
'region_id' => $data['region'][2]['value'],
'detail' => $data['detail'],
];
return (bool)OrderAddress::where(['order_id' => $this['order_id']])->update($update);
}
/**
* 修改商家备注
* @param array $data
@ -276,7 +321,8 @@ class Order extends OrderModel
}
// 更新订单状态
return $this->save([
'order_status' => $data['status'] ? OrderStatusEnum::CANCELLED : OrderStatusEnum::NORMAL
'order_status' => $data['status'] ? OrderStatusEnum::CANCELLED : OrderStatusEnum::NORMAL,
'remark' => $data['remark'] ?? '',
]);
});
}

@ -36,13 +36,25 @@ class OrderRefund extends OrderRefundModel
{
// 检索查询条件
$filter = $this->getFilter($param);
$filterOr = [];
if (!empty($param['searchValue']) && $param['searchType'] == 'all') {
$filterOr = [
['order.order_no', 'like', "%{$param['searchValue']}%"],
['user.nick_name', 'like', "%{$param['searchValue']}%"],
['order.user_id', '=', (int)$param['searchValue']]
];
}
// 获取列表数据
$list = $this->alias('refund')
$query = $this->alias('refund')
->field('refund.*, order.order_no')
->join('order', 'order.order_id = refund.order_id')
->join('user', 'user.user_id = order.user_id')
->where($filter)
->order(['refund.create_time' => 'desc', 'refund.' . $this->getPk()])
->where($filter);
if(!empty($filterOr)){
$query = $query->whereOr($filterOr);
}
$list = $query->order(['refund.create_time' => 'desc', 'refund.' . $this->getPk()])
->paginate(10);
// 加载关联订单数据
return static::preload($list, ['orderGoods.image', 'orderData', 'user.avatar']);
@ -79,12 +91,15 @@ class OrderRefund extends OrderRefundModel
$filter = [];
// 关键词
if (!empty($params['searchValue'])) {
$searchWhere = [
10 => ['order.order_no', 'like', "%{$params['searchValue']}%"],
20 => ['user.nick_name', 'like', "%{$params['searchValue']}%"],
30 => ['order.user_id', '=', (int)$params['searchValue']]
];
array_key_exists($params['searchType'], $searchWhere) && $filter[] = $searchWhere[$params['searchType']];
if ($params['searchType'] != 'all') {
$searchWhere = [
10 => ['order.order_no', 'like', "%{$params['searchValue']}%"],
20 => ['user.nick_name', 'like', "%{$params['searchValue']}%"],
30 => ['order.user_id', '=', (int)$params['searchValue']]
];
array_key_exists($params['searchType'], $searchWhere) && $filter[] = $searchWhere[$params['searchType']];
}
}
// 起止时间
if (!empty($params['betweenTime'])) {

Loading…
Cancel
Save