Browse Source

行业产品审核

master
李可松 4 years ago
parent
commit
0273648f71
  1. 7
      MySQL_change.sql
  2. 84
      app/AdminAgent/Controllers/IndustryOrderController.php
  3. 28
      app/AdminSupplier/Controllers/IndustryOrderController.php
  4. 88
      app/AdminSupplier/Extensions/Grid/IndustryOrderAudit.php
  5. 100
      app/Http/Controllers/Api/TestController.php

7
MySQL_change.sql

@ -386,3 +386,10 @@ ALTER TABLE `guides`
# 21:06 ‎2021/‎10/‎25
ALTER TABLE `orders`
CHANGE COLUMN `price` `price` DECIMAL(20,2) NOT NULL COMMENT '订单总价(单价*数量)' AFTER `num`;
# 10:31 ‎2021/‎10/‎26
ALTER TABLE `industry_orders`
ADD COLUMN `audit_status` TINYINT NOT NULL DEFAULT 0 COMMENT '审核状态,-1拒绝,0待审核,1通过' AFTER `info`,
ADD COLUMN `audit_opinion` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '审核不通过原因' AFTER `audit_status`;

84
app/AdminAgent/Controllers/IndustryOrderController.php

@ -7,9 +7,12 @@ use App\Common\OrderStatus;
use App\Common\PayType;
use App\Models\AdminSetting;
use Dcat\Admin\Admin;
use Dcat\Admin\Form;
use Dcat\Admin\Grid;
use Dcat\Admin\Show;
use Dcat\Admin\Http\Controllers\AdminController;
use Dcat\Admin\Widgets\Alert;
use Dcat\Admin\Widgets\Modal;
use Dcat\Admin\Widgets\Table;
use EasyWeChat\Factory;
use EasyWeChat\Kernel\Http\StreamResponse;
@ -61,12 +64,31 @@ class IndustryOrderController extends AdminController
})->xl();
$grid->column('title')->limit(15);
$grid->column('picture')->image('', 80, 80);
$grid->column('pay_type')->using(PayType::array());
$grid->column('status')
->using(OrderStatus::array())
->if(fn() => $this->status == OrderStatus::UNPAID)
->display(fn() => '<a class="btn btn-sm btn-primary" href="' . admin_url('industry_order/list', $this->id) . '">付款</a>')
->if(fn() => $this->status == OrderStatus::PAY_EARNEST)
->display(fn() => '<a class="btn btn-sm btn-primary" href="' . admin_url('industry_order/list', $this->id) . '">付尾款</a>');
->display(fn() => '<a class="btn btn-sm btn-primary" href="' . admin_url('industry_order/list', $this->id) . '">付尾款</a>')
->if(fn() => $this->audit_status == -1)
->then(function ($column) {
$column->display('')
->append(function () {
return Modal::make()
->lg()
->title('审核信息')
->body($this->audit_opinion)
->button('<button class="btn btn-sm btn-info">被拒绝</button>');
})
->append(function () {
return ' <a class="btn btn-sm btn-warning" href="' . admin_url('industry_order/list', [$this->id, 'edit']) . '">编辑</a>';
});
})
->if(fn() => $this->audit_status == 0)
->then(function ($column) {
$column->display('待审核')->label();
});
$grid->column('paid_at');
$grid->column('verify_qrcode', '核销二维码')
->if(fn() => $this->verify_code)
@ -225,4 +247,64 @@ JS
'trade_type' => 'NATIVE', // 请对应换成你的支付方式对应的值类型
]);
}
protected function form()
{
return Form::make(new IndustryOrder(), function (Form $form) {
if ($form->model()->agent_id != Admin::user()->id) {
Admin::exit('数据不存在');
}
if ($form->model()->audit_status != -1) {
return redirect(admin_url('industry_order/list'))->send();
}
$form->display('id');
$form->number('num');
$form->number('name');
$form->mobile('mobile');
//载入信息收集表单数据
if (!empty($form->model()->info)) {
$form->html(Alert::make(null, '客户信息收集表单')->warning())->width(12);
$fields = $form->model()->info;
foreach ($fields as $v) {
if (!isset($v['type'], $v['field'], $v['value'])) {
continue;
}
if ($v['type'] == 'radio' || $v['type'] == 'checkbox') {
$form->{$v['type']}('info.' . $v['field'])
->options(array_combine($v['options'], $v['options']))
->required((bool)$v['required'])
->customFormat(fn() => $v['value']);
} else if ($v['type'] == 'image') {
$form->multipleImage('info.' . $v['field'])
->uniqueName()->saveFullUrl()
->required((bool)$v['required'])
->customFormat(fn() => $v['value']);
} else {
$form->{$v['type']}('info.' . $v['field'])
->required((bool)$v['required'])
->customFormat(fn() => $v['value']);
}
}
}
})->saving(function (Form $form) {
//信息收集表处理,保留字段类型等信息,便于后台显示
$order_info = $form->info ?? [];
if (!empty($order_info)) {
$fields = array_column($form->model()->info, null, 'field');
foreach ($fields as &$field) {
if ($field['required'] && !isset($order_info[$field['field']])) { //判断是否必填
return $form->response()->error($field['field'] . '不能为空');
}
$field['value'] = $order_info[$field['field']] ?? '';
}
$form->info = $fields;
}
$form->hidden(['audit_status']);
$form->audit_status = 0;
});
}
}

28
app/AdminSupplier/Controllers/IndustryOrderController.php

@ -2,9 +2,11 @@
namespace App\AdminSupplier\Controllers;
use App\AdminSupplier\Extensions\Grid\IndustryOrderAudit;
use App\AdminSupplier\Extensions\Grid\IndustryOrderStatus;
use App\AdminSupplier\Repositories\IndustryOrder;
use App\Common\OrderStatus;
use App\Common\PayType;
use Dcat\Admin\Admin;
use Dcat\Admin\Form;
use Dcat\Admin\Grid;
@ -58,10 +60,28 @@ class IndustryOrderController extends AdminController
$grid->column('industry_product_id', '产品ID');
$grid->column('title')->limit(15);
$grid->column('picture')->image('', 60, 60);
$grid->column('status')
->using(OrderStatus::array())
->if(fn() => $this->status == OrderStatus::OFFLINE_UNPAID)
->action(new IndustryOrderStatus);
$grid->column('pay_type')->using(PayType::array());
$grid->column('订单状态')
//待审核
->if(fn() => $this->audit_status == 0)
->then(function ($column) {
$column->append((new IndustryOrderAudit(null, 1))->setKey($this->id))->append('&nbsp;');
$column->append((new IndustryOrderAudit(null, 2))->setKey($this->id));
})
//审核拒绝
->if(fn() => $this->audit_status == -1)
->then(function ($column) {
$column->append('已拒绝')->label();
})
//审核通过
->if(fn() => $this->audit_status == 1)
->then(function ($column) {
if ($this->status == OrderStatus::OFFLINE_UNPAID) {
$column->action(new IndustryOrderStatus);
} else {
$column->append(OrderStatus::array()[$this->status]);
}
});
$grid->column('paid_at');
// $grid->column('timeout');
$grid->column('created_at');

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

@ -0,0 +1,88 @@
<?php
namespace App\AdminSupplier\Extensions\Grid;
use App\Common\OrderStatus;
use App\Models\IndustryOrder;
use App\Models\IndustryProduct;
use Dcat\Admin\Grid\RowAction;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
/**
* 供应商审核
* Class AuditSupplier
* @package App\Admin\Extensions\Grid
*/
class IndustryOrderAudit extends RowAction
{
private $action;
public function __construct($title = null, $action = 1)
{
parent::__construct($title);
$this->action = $action; //$action:1=通过;2=拒绝
$this->title = $action == 1 ? '通过' : '拒绝';
}
protected function html()
{
$class = $this->action == 1 ? 'btn btn-sm btn-success' : 'btn btn-sm btn-danger';
$this->appendHtmlAttribute('class', $class);
$this->defaultHtmlAttribute('href', 'javascript:;');
return "<a {$this->formatHtmlAttributes()}>{$this->title}</a>";
}
protected function actionScript()
{
if ($this->action == 2) {
return <<<JS
function (data, target, action) {
data.audit_opinion = prompt('请输入拒绝理由');
if (!data.audit_opinion) {
return false;
}
}
JS;
}
return parent::actionScript();
}
public function handle(Request $request)
{
$id = $this->getKey();
$status = $request->action == 1 ? 1 : -1;
try {
$order = IndustryOrder::where('audit_status', 0)->find($id);
if (!$order) {
throw new \Exception('订单不存在或已经审核过了');
}
if (!is_null($request->audit_opinion)) {
$order->audit_opinion = $request->audit_opinion;
}
$order->audit_status = $status;
$order->save();
return $this->response()->success('操作成功')->refresh();
} catch (\Exception $e) {
return $this->response()->error($e->getMessage())->refresh();
}
}
public function confirm()
{
if ($this->action == 1) {
return ['确定要设置为已通过吗?', ''];
}
}
public function parameters()
{
return [
'action' => $this->action,
];
}
}

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

@ -2,7 +2,15 @@
namespace App\Http\Controllers\Api;
use App\Common\StatementType;
use App\Models\Agent;
use App\Models\Guide;
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\DB;
@ -15,9 +23,99 @@ class TestController
{
public function index()
{
dd(Supplier::class);
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

Loading…
Cancel
Save