Browse Source

供应商订单列表增加核销

master
李可松 4 years ago
parent
commit
510d566fdf
  1. 7
      app/AdminSupplier/Controllers/OrderController.php
  2. 5
      app/AdminSupplier/Extensions/Grid/IndustryOrderAudit.php
  3. 60
      app/AdminSupplier/Extensions/Grid/VerificationOrder.php
  4. 98
      app/Http/Controllers/Api/TestController.php

7
app/AdminSupplier/Controllers/OrderController.php

@ -2,6 +2,7 @@
namespace App\AdminSupplier\Controllers; namespace App\AdminSupplier\Controllers;
use App\AdminSupplier\Extensions\Grid\VerificationOrder;
use App\AdminSupplier\Repositories\Order; use App\AdminSupplier\Repositories\Order;
use App\Common\OrderStatus; use App\Common\OrderStatus;
use App\Common\PayType; use App\Common\PayType;
@ -63,7 +64,11 @@ class OrderController extends AdminController
}, $info); }, $info);
return Table::make([], $info); return Table::make([], $info);
})->xl(); })->xl();
$grid->column('status', '订单状态')->using(OrderStatus::array());
$grid->column('status', '订单状态')
->if(fn() => in_array($this->status, [OrderStatus::PAID, OrderStatus::PAID_RETAINAGE, OrderStatus::OFFLINE_PAID, OrderStatus::REFUSED_REFUND]))
->action(new VerificationOrder())
->else()
->using(OrderStatus::array());
$grid->column('pay_type')->using(PayType::array()); $grid->column('pay_type')->using(PayType::array());
$grid->column('price'); $grid->column('price');
$grid->column('paid_money'); $grid->column('paid_money');

5
app/AdminSupplier/Extensions/Grid/IndustryOrderAudit.php

@ -2,15 +2,12 @@
namespace App\AdminSupplier\Extensions\Grid; namespace App\AdminSupplier\Extensions\Grid;
use App\Common\OrderStatus;
use App\Models\IndustryOrder; use App\Models\IndustryOrder;
use App\Models\IndustryProduct;
use Dcat\Admin\Grid\RowAction; use Dcat\Admin\Grid\RowAction;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
/** /**
* 供应商审核
* 行业订单审核
* Class AuditSupplier * Class AuditSupplier
* @package App\Admin\Extensions\Grid * @package App\Admin\Extensions\Grid
*/ */

60
app/AdminSupplier/Extensions/Grid/VerificationOrder.php

@ -0,0 +1,60 @@
<?php
namespace App\AdminSupplier\Extensions\Grid;
use App\Common\OrderStatus;
use App\Common\PayType;
use App\Http\Controllers\Api\VerificationController;
use App\Models\IndustryOrder;
use App\Models\Order;
use Dcat\Admin\Grid\RowAction;
use Illuminate\Http\Request;
/**
* 订单核销
* Class AuditSupplier
* @package App\Admin\Extensions\Grid
*/
class VerificationOrder extends RowAction
{
protected $title = '核销';
protected function html()
{
$class = 'btn btn-sm btn-success';
$this->appendHtmlAttribute('class', $class);
$this->defaultHtmlAttribute('href', 'javascript:;');
return "<a {$this->formatHtmlAttributes()}>{$this->title}</a>";
}
public function handle(Request $request)
{
$id = $this->getKey();
try {
$order = Order::whereIn('status', [OrderStatus::PAID, OrderStatus::PAID_RETAINAGE, OrderStatus::OFFLINE_PAID, OrderStatus::REFUSED_REFUND])
->find($id);
if (!$order) {
throw new \Exception('订单不存在或已经核销过了');
}
$order->status = OrderStatus::SUCCESS;
if ($order->save()) {
//分账
//线下订单不分账
if ($order->pay_type != PayType::OFFLINE) {
(new VerificationController)->fund($order);
}
}
return $this->response()->success('操作成功')->refresh();
} catch (\Exception $e) {
return $this->response()->error($e->getMessage())->refresh();
}
}
public function confirm()
{
return ['确定要核销该订单吗?', ''];
}
}

98
app/Http/Controllers/Api/TestController.php

@ -2,15 +2,7 @@
namespace App\Http\Controllers\Api; namespace App\Http\Controllers\Api;
use App\Common\StatementType;
use App\Models\Agent;
use App\Models\Guide;
use App\Models\Order; use App\Models\Order;
use App\Models\OrderProductItem;
use App\Models\Supplier;
use App\Service\WithdrawalService;
use App\Traits\DemandTraits;
use App\Traits\StatementTraits;
use Illuminate\Support\Facades\Cache; use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
@ -26,96 +18,6 @@ class TestController
dd($this->fund(Order::find(221))); dd($this->fund(Order::find(221)));
} }
public function fund($order)
{
$service = new WithdrawalService();
DB::beginTransaction();
try {
//最后批量插入
$statementCreate = [];
$cost = 0;
//如果有地接价格 分帐给地接
if ($order->guide_price > 0) {
$guidePrice = $order->guide_price;
$cost = bcadd($cost, $order->guide_price, 6);
//成本价 加上地接价格
$statementCreate[] = $service->createByOrder(
$order->guide_price,
StatementType::ORDER,
$order->guide->id,
DemandTraits::$col[2],
$order->id,
StatementTraits::$type[0]
);
//抽成
$guide = Guide::query()->where('id', $order->guide->id)->lockForUpdate()->first();
$guide->balance = bcadd($guide->balance, $guidePrice, 6);
$guide->save();
}
//分账给供应商
$orderItem = OrderProductItem::query()
->where('order_id', $order->id)
->with('supplier')
->select('*')
->selectRaw('sum(price) as sum_price,sum(single_deposit * num) as sum_persons')
->groupBy('supplier_id')
->get();
foreach ($orderItem as $v) {
$cost = bcadd($cost, $v->sum_price, 6);
$supplierPrice = $v->sum_price;
$statementCreate[] = $service->createByOrder(
$v->sum_price,
StatementType::ORDER,
$v->supplier_id,
DemandTraits::$col[1],
$order->id,
StatementTraits::$type[0]
);
$supplier = Supplier::query()->where('id', $v->supplier_id)->lockForUpdate()->first();
//处理交易金
if ($v->sum_persons > 0) {
//计算交易金
$deposit = $v->sum_persons;
//流水
//扣
$supplier->trade_balance = bcsub($supplier->trade_balance,$deposit,6);
}
$supplier->balance = bcadd($supplier->balance, $supplierPrice, 6);
$supplier->save();
}
//分账给代理商
//成本价 加上地接价格
$agentPrice = bcsub($order->price, $cost, 2);
$statementCreate[] = $service->createByOrder(
$agentPrice,
StatementType::ORDER,
$order->agent_id,
DemandTraits::$col[0],
$order->id,
StatementTraits::$type[0]
);
$agent = Agent::query()->where('id', $order->agent->id)->lockForUpdate()->first();
$agent->balance = bcadd($agent->balance, $agentPrice, 6);
$agent->save();
if (!empty($statementCreate)) {
$order->statement()->createMany($statementCreate);
}
DB::commit();
} catch (\Exception $e) {
DB::rollBack();
return $this->error($e->getMessage());
}
}
/** /**
* 模拟登录 * 模拟登录
* @param $user_id * @param $user_id

Loading…
Cancel
Save