Files
hyperf_service/app/Service/Admin/Order/RefundService.php
2025-04-01 14:20:03 +08:00

112 lines
3.1 KiB
PHP

<?php
/**
* This service file is part of item.
*
* @author ctexthuang
* @contact ctexthuang@qq.com
*/
declare(strict_types=1);
namespace App\Service\Admin\Order;
use App\Constants\Common\OrderCode;
use App\Constants\Common\RefundCode;
use App\Exception\ErrException;
use App\Model\Order;
use App\Service\Admin\BaseService;
use App\Service\Amqp\Refund\FullRefundOrderService;
use App\Service\Amqp\Refund\PartialRefundOrderService;
use App\Service\ServiceTrait\Common\OrderChangeStatusTrait;
use Exception;
use Hyperf\Amqp\Producer;
use Hyperf\Di\Annotation\Inject;
use Psr\Container\ContainerExceptionInterface;
use Psr\Container\NotFoundExceptionInterface;
class RefundService extends BaseService
{
/**
* @return array
* @throws ContainerExceptionInterface
* @throws NotFoundExceptionInterface
*/
public function handle(): array
{
try {
$orderId = (int)$this->request->input('order_id');
$service = new FullRefundOrderService();
$service->orderId = $orderId;
$service->reason = $this->request->input('reason','');
$service->type = RefundCode::FULL_GOOD_REFUND;
$service->adminId = $this->adminId;
$service->handle();
return $this->return->success();
}catch (Exception $e) {
throw new ErrException($e->getMessage());
}
}
/**
* @return array
* @throws ContainerExceptionInterface
* @throws NotFoundExceptionInterface
*/
public function refundPartial(): array
{
try {
$orderId = (int)$this->request->input('order_id');
$orderGoodIds = $this->request->input('order_good_ids');
if (empty($orderGoodIds)) throw new ErrException('请选择商品再退款');
$service = new PartialRefundOrderService();
$service->orderId = $orderId;
$service->reason = $this->request->input('reason','');
$service->orderGoodIds = $orderGoodIds;
$service->type = RefundCode::PARTIAL_GOOD_REFUND;
$service->adminId = $this->adminId;
$service->handle();
return $this->return->success();
}catch (Exception $e) {
throw new ErrException($e->getMessage());
}
}
use OrderChangeStatusTrait;
/**
* @var Order
*/
#[Inject]
protected Order $orderModel;
/**
* @return array
*/
public function refundBatch(): array
{
$kitchenId = $this->request->input('kitchen_id');
$cycleId = (int)$this->request->input('cycle_id');
$reason = $this->request->input('reason');
$orderIds = $this->orderModel
->where('kitchen_id', $kitchenId)
->where('cycle_id', $cycleId)
->where('status', OrderCode::FINISH)
->pluck('id')
->toArray();
if (empty($orderIds)) throw new ErrException('暂无数据');
foreach ($orderIds as $orderId) {
$this->joinRefundQueue($orderId,RefundCode::FULL_GOOD_REFUND,$reason,$this->adminId);
}
return $this->return->success();
}
}