6
0
Fork 0
jiqu-library-server/app/Admin/Services/AdminOrderService.php

170 lines
5.5 KiB
PHP

<?php
namespace App\Admin\Services;
use App\Exceptions\BizException;
use App\Models\Order;
use App\Models\OrderLog;
use App\Models\OrderPackage;
use App\Models\OrderPackageProduct;
use App\Models\OrderProduct;
use App\Services\Kuaidi100Service;
use Illuminate\Support\Arr;
class AdminOrderService
{
/**
* 订单调整价格
*
* @return void
*/
public function adminReduceOrder(Order $order, int $reduceAmount)
{
if ($order->isPending()) {
$res = $order->where('updated_at', $order->updated_at)->update([
'reduced_amount' => $order->total_amount - $reduceAmount + $order->reduced_amount,
'total_amount' => $reduceAmount,
]);
if ($res === 0) {
throw new BizException('订单已发生改变');
}
OrderLog::create([
'order_id'=>$order->id,
'content'=> '调整订单支付价格为:¥'.bcdiv($reduceAmount, 100, 2),
]);
}
}
/**
* 后台支付订单
*
* @param Order $order
* @return void
*/
public function adminPay(Order $order)
{
if ($order->isPending()) {
//操作订单状态-需要调整为统一支付方法
$order->update([
'status' => Order::STATUS_PAID,
]);
OrderLog::create([
'order_id'=>$order->id,
'content'=> '改变订单状态为【已支付】',
]);
}
}
/**
* 添加后台备注
*
* @param Order $order
* @param string $remark
* @return void
*/
public function adminRemark(Order $order, string $remark)
{
//操作订单状态-需要调整为统一支付方法
$order->update([
'remark' => $remark,
]);
OrderLog::create([
'order_id'=>$order->id,
'content'=> '修改订单备注:'.$remark,
]);
}
/**
* 修改订单收货信息
*
* @param Order $order
* @param array $params
* @return void
*/
public function adminEditConsignee(Order $order, array $params)
{
$oldOrderConsignee = $order->consignee_name.','.$order->consignee_telephone.','.$order->consignee_zone.$order->consignee_address;
$order->update($params);
OrderLog::create([
'order_id'=>$order->id,
'content'=> '修改订单收货信息<br\>原收货信息:'.$oldOrderConsignee,
]);
}
/**
* 创建订单发货单
*
* @return void
*/
public function createPackage(Order $order, array $params)
{
//合并同样商品,并检验是否能发货
$packageProducts = [];
if (count($params['packages']) <= 0) {
throw new BizException('请选择发货商品');
}
foreach ($params['packages'] as $item) {
if ($item['quantity'] < 1) {
throw new BizException('发货数量不能小于1');
}
if (isset($packageProducts[$item['order_product_id']])) {
$packageProducts[$item['order_product_id']]['quantity'] += $item['quantity'];
} else {
$packageProducts[$item['order_product_id']] = [
'order_product_id'=> $item['order_product_id'],
'quantity' =>$item['quantity'],
];
}
}
foreach ($packageProducts as $product) {
$_orderProduct = OrderProduct::where('after_sale_state', '<>', 1)
->where('remain_quantity', '>=', $product['quantity'])
->find($product['order_product_id']);
if (is_null($_orderProduct)) {
throw new BizException('发货数量不能大于剩余数量');
}
$_orderProduct->decrement('remain_quantity', $product['quantity']);
}
//创建发货单数据
$package = new OrderPackage();
$package->order_id = $order->id;
$package->consignee_name = $order->consignee_name;
$package->consignee_telephone = $order->consignee_telephone;
$package->consignee_zone = $order->consignee_zone;
$package->consignee_address = $order->consignee_address;
$package->shipping_company = $params['shipping_company'];
$package->shipping_code = Arr::get(Kuaidi100Service::$codeArr, $package->shipping_company, '');
$package->shipping_number = $params['shipping_number'];
//保存发货单
$package->save();
//保存发货单商品
OrderPackageProduct::insert(array_map(function ($value) use ($package) {
return array_merge($value, [
'order_package_id' => $package->id,
'created_at' => $package->created_at,
'updated_at' => $package->created_at,
]);
}, $packageProducts));
if (config('settings.kuaidi100_is_use')) {
$kuaidi100Service = new Kuaidi100Service();
$kuaidi100Service->poll($package->shipping_number, $package->shipping_code, $package->consignee_telephone);
}
//更新订单状态
if (!OrderProduct::where('order_id', $order->id)->where('remain_quantity', '>', 0)->exists()) {
$order->update([
'shipping_state'=>Order::SHIPPING_STATE_PROCESSED,
]);
} elseif ($order->shipping_state == Order::SHIPPING_STATE_PENDING) {
$order->update([
'shipping_state'=>Order::SHIPPING_STATE_PROCESSING,
]);
}
}
}