order auto complete
parent
22155ec344
commit
e52f42d0b6
|
|
@ -66,14 +66,14 @@ class DeskController extends AdminController
|
||||||
$show->field('store_id')->as(fn() => data_get($this->store, 'name'));
|
$show->field('store_id')->as(fn() => data_get($this->store, 'name'));
|
||||||
$show->field('name');
|
$show->field('name');
|
||||||
$show->field('status')->bool();
|
$show->field('status')->bool();
|
||||||
$show->field('wxcode');
|
$show->field('wxcode')->image('', 100, 100);
|
||||||
$show->field('remarks');
|
$show->field('remarks');
|
||||||
|
|
||||||
$model = $show->model();
|
$model = $show->model();
|
||||||
$category_id = data_get($model->extra, 'category_id');
|
$category_id = data_get($model->extra, 'category_id');
|
||||||
if ($category_id) {
|
if (!is_null($category_id)) {
|
||||||
$category = ProductCategory::find($category_id);
|
$name = $category_id ? ProductCategory::where('id', $category_id)->value('name') : '顶级';
|
||||||
$show->field('category_id')->as(fn() => $category ? $category->name : $category_id);
|
$show->field('category_id')->as($name);
|
||||||
}
|
}
|
||||||
|
|
||||||
$show->disableEditButton();
|
$show->disableEditButton();
|
||||||
|
|
|
||||||
|
|
@ -53,8 +53,8 @@ class ProductController extends AdminController
|
||||||
$grid->column('store.title', '店铺');
|
$grid->column('store.title', '店铺');
|
||||||
$grid->column('productSku.category.name', '分类');
|
$grid->column('productSku.category.name', '分类');
|
||||||
$grid->column('productSku.name', '名称');
|
$grid->column('productSku.name', '名称');
|
||||||
$grid->column('productSku.sell_price', '销售价')->display(fn ($value) => bcdiv($value, 100, 2));
|
|
||||||
$grid->column('productSku.specs', '规格')->label();
|
$grid->column('productSku.specs', '规格')->label();
|
||||||
|
$grid->column('productSku.sell_price', '销售价')->display(fn ($value) => bcdiv($value, 100, 2));
|
||||||
$grid->column('productSku.cost_price', '成本价')->display(fn ($value) => bcdiv($value, 100, 2));
|
$grid->column('productSku.cost_price', '成本价')->display(fn ($value) => bcdiv($value, 100, 2));
|
||||||
$grid->column('profit', '毛利')->display(function () {
|
$grid->column('profit', '毛利')->display(function () {
|
||||||
$sell_price = data_get($this->productSku, 'sell_price');
|
$sell_price = data_get($this->productSku, 'sell_price');
|
||||||
|
|
|
||||||
|
|
@ -40,7 +40,10 @@ class OrderReduce extends Form implements LazyRenderable
|
||||||
$orderId = $this->payload['id'] ?? 0;
|
$orderId = $this->payload['id'] ?? 0;
|
||||||
$order = Order::findOrFail($orderId);
|
$order = Order::findOrFail($orderId);
|
||||||
$reduceAmount = $input['reduce_amount']??0;
|
$reduceAmount = $input['reduce_amount']??0;
|
||||||
//获取调整价格;
|
if ($reduceAmount < 0) {
|
||||||
|
throw new BizException('价格不能小于0');
|
||||||
|
}
|
||||||
|
// 获取调整价格;
|
||||||
if ($reduceAmount > $order->total_amount) {
|
if ($reduceAmount > $order->total_amount) {
|
||||||
throw new BizException('订单价格无法上浮');
|
throw new BizException('订单价格无法上浮');
|
||||||
}
|
}
|
||||||
|
|
@ -49,7 +52,7 @@ class OrderReduce extends Form implements LazyRenderable
|
||||||
}
|
}
|
||||||
$orderService = new OrderService();
|
$orderService = new OrderService();
|
||||||
|
|
||||||
$reduced = $order->total_amount-$reduceAmount;
|
$reduced = $order->total_amount - $reduceAmount;
|
||||||
//判断是否在当前操作人调价权限范围内
|
//判断是否在当前操作人调价权限范围内
|
||||||
$adminUser = Admin::user();
|
$adminUser = Admin::user();
|
||||||
if (! $adminUser->isAdministrator() && ! $adminUser->inReduceRange($reduced)) {
|
if (! $adminUser->isAdministrator() && ! $adminUser->inReduceRange($reduced)) {
|
||||||
|
|
|
||||||
|
|
@ -174,11 +174,19 @@ class OrderPackageService
|
||||||
*/
|
*/
|
||||||
public function createAll(Order $order, $params = [])
|
public function createAll(Order $order, $params = [])
|
||||||
{
|
{
|
||||||
$shipping_company = data_get($params, 'shipping_company');
|
$shipping_company = data_get($params, 'shipping_company', '自提');
|
||||||
$shipping_number = data_get($params, 'shipping_number');
|
$shipping_number = data_get($params, 'shipping_number', '0');
|
||||||
$products = [];
|
$products = $order->products->map(function ($item) {
|
||||||
foreach($order->products as $item) {
|
return [
|
||||||
|
'order_product_id' => $item->id,
|
||||||
|
'quantity' => $item->quantity
|
||||||
|
];
|
||||||
|
});
|
||||||
|
|
||||||
}
|
return $this->createPackage($order, [
|
||||||
|
'shipping_company' => $shipping_company,
|
||||||
|
'shipping_number' => $shipping_number,
|
||||||
|
'packages' => $products,
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,49 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Listeners;
|
||||||
|
|
||||||
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||||
|
use Illuminate\Queue\InteractsWithQueue;
|
||||||
|
use App\Models\Store\{Desk, ProductSku};
|
||||||
|
use App\Models\Order;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 自动完成订单
|
||||||
|
*
|
||||||
|
* 发货: 自提发货, 修改门店商品库存, 添加库存记录(提货)
|
||||||
|
* 收货
|
||||||
|
*/
|
||||||
|
class OrderAutoComplete
|
||||||
|
{
|
||||||
|
public function handle($event)
|
||||||
|
{
|
||||||
|
$order = $event->order;
|
||||||
|
// 门店, 桌号订单
|
||||||
|
if ($order->source_type === Desk::class && $store = $order->store) {
|
||||||
|
$order = Order::find($order->id);
|
||||||
|
$package = (new \App\Admin\Services\OrderPackageService())->createAll($order);
|
||||||
|
|
||||||
|
// 添加门店库存记录
|
||||||
|
foreach($package->orderProducts as $item) {
|
||||||
|
$sku = ProductSku::where('store_id', $store->id)->where('product_sku_id', $item->sku_id)->first();
|
||||||
|
if ($sku) {
|
||||||
|
$amount = $item->pivot->quantity;
|
||||||
|
$balance = $sku->amount - $amount;
|
||||||
|
$store->stockLogs()->create([
|
||||||
|
'amount' => 0 - $amount,
|
||||||
|
'product_sku_id' => $item->sku_id,
|
||||||
|
'remarks' => '桌号订自动提货',
|
||||||
|
'balance' => $balance,
|
||||||
|
'source_id' => $order->id,
|
||||||
|
'source_type' => $order->getMorphClass(),
|
||||||
|
'tag_id' => 3
|
||||||
|
]);
|
||||||
|
|
||||||
|
$sku->update(['amount' => $balance]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
(new \App\Services\OrderService())->confirm($order);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -6,6 +6,7 @@ use Illuminate\Contracts\Queue\ShouldQueue;
|
||||||
use Illuminate\Queue\InteractsWithQueue;
|
use Illuminate\Queue\InteractsWithQueue;
|
||||||
use App\Exceptions\BizException;
|
use App\Exceptions\BizException;
|
||||||
use App\Services\OrderService;
|
use App\Services\OrderService;
|
||||||
|
use App\Models\Store\Desk;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 打印订单小票
|
* 打印订单小票
|
||||||
|
|
|
||||||
|
|
@ -30,6 +30,10 @@ class Store extends Model
|
||||||
$model->stockLogs()->delete();
|
$model->stockLogs()->delete();
|
||||||
// 管理员记录
|
// 管理员记录
|
||||||
$model->administrators()->detach();
|
$model->administrators()->detach();
|
||||||
|
// 桌号记录
|
||||||
|
$model->desks()->delete();
|
||||||
|
// 设备记录
|
||||||
|
$model->devices()->delete();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,7 @@ class EventServiceProvider extends ServiceProvider
|
||||||
\App\Listeners\OrderPackage::class,
|
\App\Listeners\OrderPackage::class,
|
||||||
\App\Listeners\OrderDistribute::class,
|
\App\Listeners\OrderDistribute::class,
|
||||||
\App\Listeners\OrderPrint::class,
|
\App\Listeners\OrderPrint::class,
|
||||||
|
\App\Listeners\OrderAutoComplete::class,
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -444,7 +444,7 @@ class OrderService
|
||||||
'weight' => $sku->weight,
|
'weight' => $sku->weight,
|
||||||
'sell_price' => $sku->sell_price,
|
'sell_price' => $sku->sell_price,
|
||||||
'vip_price' => $sku->vip_price,
|
'vip_price' => $sku->vip_price,
|
||||||
'sales_value' => $sku->sales_value,
|
'sales_value' => $product['total_sales_value'],
|
||||||
'market_price' => $sku->cost_price,
|
'market_price' => $sku->cost_price,
|
||||||
'cost_price' => $sku->cost_price,
|
'cost_price' => $sku->cost_price,
|
||||||
'quantity' => $qty,
|
'quantity' => $qty,
|
||||||
|
|
@ -1363,6 +1363,7 @@ class OrderService
|
||||||
* 打印订单小票
|
* 打印订单小票
|
||||||
*
|
*
|
||||||
* @param Order $order 订单
|
* @param Order $order 订单
|
||||||
|
* @return array 打印结果 [{code: 0(成功), msg: ''}, ...]
|
||||||
* @throws BizException
|
* @throws BizException
|
||||||
*/
|
*/
|
||||||
public function print(Order $order)
|
public function print(Order $order)
|
||||||
|
|
@ -1378,43 +1379,53 @@ class OrderService
|
||||||
if (!$desk) {
|
if (!$desk) {
|
||||||
throw new BizException('未找到桌号');
|
throw new BizException('未找到桌号');
|
||||||
}
|
}
|
||||||
|
|
||||||
$devices = $store->devices()->where('status', 1)->get();
|
$devices = $store->devices()->where('status', 1)->get();
|
||||||
|
if ($devices->count() == 0) {
|
||||||
|
throw new BizException('门店未找到可用的设备');
|
||||||
|
}
|
||||||
|
|
||||||
$templateId = data_get($store->extra, 'order_desk_print_template');
|
$templateId = data_get($store->extra, 'order_desk_print_template');
|
||||||
if ($devices->count() > 0 && $templateId) {
|
if (!$templateId) {
|
||||||
$service = PrintService::make();
|
throw new BizException('门店未配置打印模板');
|
||||||
$products = [];
|
|
||||||
foreach($order->products as $item) {
|
|
||||||
array_push($products, [
|
|
||||||
'name' => $item->name,
|
|
||||||
'price' => round($item->sell_price / 100, 2, PHP_ROUND_HALF_DOWN),
|
|
||||||
'amount' => $item->quantity,
|
|
||||||
'money' => round($item->total_amount / 100, 2, PHP_ROUND_HALF_DOWN),
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
$data = [
|
|
||||||
'name' => $store->title,
|
|
||||||
'sn' => $order->sn,
|
|
||||||
'time' => $order->created_at->format('Y-m-d H:i:s'),
|
|
||||||
'desk' => $desk->name,
|
|
||||||
'products' => $products,
|
|
||||||
'total' => round($order->total_amount, 2, PHP_ROUND_HALF_DOWN),
|
|
||||||
'remarks' => $order->note ?: '',
|
|
||||||
];
|
|
||||||
foreach($devices as $item) {
|
|
||||||
$result = $service->template($item->device_no, $templateId, $data);
|
|
||||||
$status = data_get($result, 'code') == 0 ? DeviceRecord::STATUS_SUCCESS : DeviceRecord::STATUS_FAIL;
|
|
||||||
// 添加打印的日志记录
|
|
||||||
$item->records()->create([
|
|
||||||
'data' => $data,
|
|
||||||
'device_id' => $item->id,
|
|
||||||
'result' => $result,
|
|
||||||
'resource_id' => $order->id,
|
|
||||||
'resource_type' => $order->getMorphClass(),
|
|
||||||
'status' => $status,
|
|
||||||
'store_id' => $store->id
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
$service = PrintService::make();
|
||||||
|
$products = [];
|
||||||
|
foreach($order->products as $item) {
|
||||||
|
array_push($products, [
|
||||||
|
'name' => $item->name,
|
||||||
|
'price' => round($item->sell_price / 100, 2, PHP_ROUND_HALF_DOWN),
|
||||||
|
'amount' => $item->quantity,
|
||||||
|
'money' => round($item->total_amount / 100, 2, PHP_ROUND_HALF_DOWN),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
$data = [
|
||||||
|
'name' => $store->title,
|
||||||
|
'sn' => $order->sn,
|
||||||
|
'time' => $order->created_at->format('Y-m-d H:i:s'),
|
||||||
|
'desk' => $desk->name,
|
||||||
|
'products' => $products,
|
||||||
|
'total' => round($order->total_amount / 100, 2, PHP_ROUND_HALF_DOWN),
|
||||||
|
'remarks' => $order->note ?: '',
|
||||||
|
];
|
||||||
|
|
||||||
|
$results = [];
|
||||||
|
foreach($devices as $item) {
|
||||||
|
$result = $service->template($item->device_no, $templateId, $data);
|
||||||
|
$status = data_get($result, 'code') == 0 ? DeviceRecord::STATUS_SUCCESS : DeviceRecord::STATUS_FAIL;
|
||||||
|
array_push($results, $result);
|
||||||
|
// 添加打印的日志记录
|
||||||
|
$item->records()->create([
|
||||||
|
'data' => $data,
|
||||||
|
'device_id' => $item->id,
|
||||||
|
'result' => $result,
|
||||||
|
'resource_id' => $order->id,
|
||||||
|
'resource_type' => $order->getMorphClass(),
|
||||||
|
'status' => $status,
|
||||||
|
'store_id' => $store->id
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $results;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue