|
@@ -2,16 +2,13 @@
|
|
|
|
|
|
|
|
namespace App\Module\Mex\AdminControllers;
|
|
namespace App\Module\Mex\AdminControllers;
|
|
|
|
|
|
|
|
-use App\Module\Mex\Services\MexAdminService;
|
|
|
|
|
-use App\Module\Mex\Logic\MexAdminLogic;
|
|
|
|
|
|
|
+use App\Module\Mex\Forms\InjectItemForm;
|
|
|
|
|
+use App\Module\Mex\Forms\RecycleItemForm;
|
|
|
|
|
+use App\Module\Mex\Forms\InitializeWarehouseForm;
|
|
|
use Spatie\RouteAttributes\Attributes\Get;
|
|
use Spatie\RouteAttributes\Attributes\Get;
|
|
|
-use Spatie\RouteAttributes\Attributes\Post;
|
|
|
|
|
use UCore\DcatAdmin\AdminController;
|
|
use UCore\DcatAdmin\AdminController;
|
|
|
-use Dcat\Admin\Form;
|
|
|
|
|
use Dcat\Admin\Layout\Content;
|
|
use Dcat\Admin\Layout\Content;
|
|
|
use Dcat\Admin\Widgets\Card;
|
|
use Dcat\Admin\Widgets\Card;
|
|
|
-use Dcat\Admin\Admin;
|
|
|
|
|
-use Illuminate\Http\Request;
|
|
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* 农贸市场管理员工具
|
|
* 农贸市场管理员工具
|
|
@@ -50,7 +47,7 @@ class MexAdminToolController extends AdminController
|
|
|
return $content
|
|
return $content
|
|
|
->title('物品注入')
|
|
->title('物品注入')
|
|
|
->description('向市场注入物品,增加供应量')
|
|
->description('向市场注入物品,增加供应量')
|
|
|
- ->body($this->buildInjectForm());
|
|
|
|
|
|
|
+ ->body(new Card(new InjectItemForm()));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -62,7 +59,7 @@ class MexAdminToolController extends AdminController
|
|
|
return $content
|
|
return $content
|
|
|
->title('物品回收')
|
|
->title('物品回收')
|
|
|
->description('从市场回收物品,减少供应量')
|
|
->description('从市场回收物品,减少供应量')
|
|
|
- ->body($this->buildRecycleForm());
|
|
|
|
|
|
|
+ ->body(new Card(new RecycleItemForm()));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -74,122 +71,14 @@ class MexAdminToolController extends AdminController
|
|
|
return $content
|
|
return $content
|
|
|
->title('初始化库存')
|
|
->title('初始化库存')
|
|
|
->description('为所有已定价的商品创建库存记录')
|
|
->description('为所有已定价的商品创建库存记录')
|
|
|
- ->body($this->buildInitializeForm());
|
|
|
|
|
|
|
+ ->body(new Card(new InitializeWarehouseForm()));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- /**
|
|
|
|
|
- * 处理物品注入
|
|
|
|
|
- */
|
|
|
|
|
- #[Post('mex-admin-tools/inject', name: 'dcat.admin.mex-admin-tools.inject.store')]
|
|
|
|
|
- public function storeInject(Request $request)
|
|
|
|
|
- {
|
|
|
|
|
- $request->validate([
|
|
|
|
|
- 'item_id' => 'required|integer|min:1',
|
|
|
|
|
- 'quantity' => 'required|integer|min:1',
|
|
|
|
|
- 'price' => 'required|numeric|min:0',
|
|
|
|
|
- 'remark' => 'nullable|string|max:255',
|
|
|
|
|
- ], [
|
|
|
|
|
- 'item_id.required' => '商品ID不能为空',
|
|
|
|
|
- 'item_id.integer' => '商品ID必须是整数',
|
|
|
|
|
- 'item_id.min' => '商品ID必须大于0',
|
|
|
|
|
- 'quantity.required' => '数量不能为空',
|
|
|
|
|
- 'quantity.integer' => '数量必须是整数',
|
|
|
|
|
- 'quantity.min' => '数量必须大于0',
|
|
|
|
|
- 'price.required' => '价格不能为空',
|
|
|
|
|
- 'price.numeric' => '价格必须是数字',
|
|
|
|
|
- 'price.min' => '价格不能为负数',
|
|
|
|
|
- 'remark.max' => '备注不能超过255个字符',
|
|
|
|
|
- ]);
|
|
|
|
|
|
|
|
|
|
- try {
|
|
|
|
|
- $result = MexAdminService::injectItem(
|
|
|
|
|
- adminUserId: Admin::user()->id,
|
|
|
|
|
- itemId: $request->item_id,
|
|
|
|
|
- quantity: $request->quantity,
|
|
|
|
|
- price: $request->price,
|
|
|
|
|
- remark: $request->remark ?? '后台管理员注入'
|
|
|
|
|
- );
|
|
|
|
|
|
|
|
|
|
- if ($result['success']) {
|
|
|
|
|
- admin_success('注入成功!', '操作ID: ' . $result['operation_id'] . ', 成交ID: ' . $result['transaction_id']);
|
|
|
|
|
- return redirect()->route('dcat.admin.mex-admin-tools.inject');
|
|
|
|
|
- } else {
|
|
|
|
|
- admin_error('注入失败', $result['message']);
|
|
|
|
|
- return back()->withInput();
|
|
|
|
|
- }
|
|
|
|
|
- } catch (\Exception $e) {
|
|
|
|
|
- admin_error('注入失败', $e->getMessage());
|
|
|
|
|
- return back()->withInput();
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
|
|
|
|
|
- /**
|
|
|
|
|
- * 处理物品回收
|
|
|
|
|
- */
|
|
|
|
|
- #[Post('mex-admin-tools/recycle', name: 'dcat.admin.mex-admin-tools.recycle.store')]
|
|
|
|
|
- public function storeRecycle(Request $request)
|
|
|
|
|
- {
|
|
|
|
|
- $request->validate([
|
|
|
|
|
- 'item_id' => 'required|integer|min:1',
|
|
|
|
|
- 'quantity' => 'required|integer|min:1',
|
|
|
|
|
- 'price' => 'required|numeric|min:0',
|
|
|
|
|
- 'remark' => 'nullable|string|max:255',
|
|
|
|
|
- ], [
|
|
|
|
|
- 'item_id.required' => '商品ID不能为空',
|
|
|
|
|
- 'item_id.integer' => '商品ID必须是整数',
|
|
|
|
|
- 'item_id.min' => '商品ID必须大于0',
|
|
|
|
|
- 'quantity.required' => '数量不能为空',
|
|
|
|
|
- 'quantity.integer' => '数量必须是整数',
|
|
|
|
|
- 'quantity.min' => '数量必须大于0',
|
|
|
|
|
- 'price.required' => '价格不能为空',
|
|
|
|
|
- 'price.numeric' => '价格必须是数字',
|
|
|
|
|
- 'price.min' => '价格不能为负数',
|
|
|
|
|
- 'remark.max' => '备注不能超过255个字符',
|
|
|
|
|
- ]);
|
|
|
|
|
|
|
|
|
|
- try {
|
|
|
|
|
- $result = MexAdminService::recycleItem(
|
|
|
|
|
- adminUserId: Admin::user()->id,
|
|
|
|
|
- itemId: $request->item_id,
|
|
|
|
|
- quantity: $request->quantity,
|
|
|
|
|
- price: $request->price,
|
|
|
|
|
- remark: $request->remark ?? '后台管理员回收'
|
|
|
|
|
- );
|
|
|
|
|
|
|
|
|
|
- if ($result['success']) {
|
|
|
|
|
- admin_success('回收成功!', '操作ID: ' . $result['operation_id'] . ', 成交ID: ' . $result['transaction_id']);
|
|
|
|
|
- return redirect()->route('dcat.admin.mex-admin-tools.recycle');
|
|
|
|
|
- } else {
|
|
|
|
|
- admin_error('回收失败', $result['message']);
|
|
|
|
|
- return back()->withInput();
|
|
|
|
|
- }
|
|
|
|
|
- } catch (\Exception $e) {
|
|
|
|
|
- admin_error('回收失败', $e->getMessage());
|
|
|
|
|
- return back()->withInput();
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- /**
|
|
|
|
|
- * 处理初始化库存请求
|
|
|
|
|
- */
|
|
|
|
|
- #[Post('mex-admin-tools/initialize', name: 'dcat.admin.mex-admin-tools.initialize.store')]
|
|
|
|
|
- public function storeInitialize(Request $request)
|
|
|
|
|
- {
|
|
|
|
|
- try {
|
|
|
|
|
- $result = MexAdminLogic::initializeWarehouse(Admin::user()->id);
|
|
|
|
|
-
|
|
|
|
|
- if ($result['success']) {
|
|
|
|
|
- admin_success('初始化成功!', $result['message'] . ',共初始化了 ' . $result['initialized_count'] . ' 个商品的库存记录。');
|
|
|
|
|
- return redirect()->route('dcat.admin.mex-admin-tools.initialize');
|
|
|
|
|
- } else {
|
|
|
|
|
- admin_error('初始化失败', $result['message']);
|
|
|
|
|
- return back()->withInput();
|
|
|
|
|
- }
|
|
|
|
|
- } catch (\Exception $e) {
|
|
|
|
|
- admin_error('初始化失败', $e->getMessage());
|
|
|
|
|
- return back()->withInput();
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* 构建工具页面
|
|
* 构建工具页面
|
|
@@ -254,119 +143,7 @@ class MexAdminToolController extends AdminController
|
|
|
return $card;
|
|
return $card;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- /**
|
|
|
|
|
- * 构建注入表单
|
|
|
|
|
- */
|
|
|
|
|
- private function buildInjectForm()
|
|
|
|
|
- {
|
|
|
|
|
- $form = new Form();
|
|
|
|
|
-
|
|
|
|
|
- $form->action(route('dcat.admin.mex-admin-tools.inject.store'));
|
|
|
|
|
-
|
|
|
|
|
- $form->number('item_id', '商品ID')
|
|
|
|
|
- ->required()
|
|
|
|
|
- ->min(1)
|
|
|
|
|
- ->help('请输入要注入的商品ID');
|
|
|
|
|
-
|
|
|
|
|
- $form->number('quantity', '注入数量')
|
|
|
|
|
- ->required()
|
|
|
|
|
- ->min(1)
|
|
|
|
|
- ->help('请输入要注入的数量');
|
|
|
|
|
-
|
|
|
|
|
- $form->decimal('price', '注入价格')
|
|
|
|
|
- ->required()
|
|
|
|
|
- ->help('请输入注入价格(每个商品的价格)');
|
|
|
|
|
-
|
|
|
|
|
- $form->textarea('remark', '操作备注')
|
|
|
|
|
- ->rows(3)
|
|
|
|
|
- ->help('可选,记录本次操作的原因或说明');
|
|
|
|
|
-
|
|
|
|
|
- $form->html('<div class="alert alert-warning">
|
|
|
|
|
- <h6><i class="fa fa-exclamation-triangle"></i> 注意事项</h6>
|
|
|
|
|
- <ul class="mb-0">
|
|
|
|
|
- <li>注入操作相当于系统向仓库"卖出"物品</li>
|
|
|
|
|
- <li>会增加仓库的库存数量</li>
|
|
|
|
|
- <li>系统会获得相应的资金收入</li>
|
|
|
|
|
- <li>操作不可撤销,请谨慎操作</li>
|
|
|
|
|
- </ul>
|
|
|
|
|
- </div>');
|
|
|
|
|
-
|
|
|
|
|
- return $form;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- /**
|
|
|
|
|
- * 构建回收表单
|
|
|
|
|
- */
|
|
|
|
|
- private function buildRecycleForm()
|
|
|
|
|
- {
|
|
|
|
|
- $form = new Form();
|
|
|
|
|
|
|
|
|
|
- $form->action(route('dcat.admin.mex-admin-tools.recycle.store'));
|
|
|
|
|
-
|
|
|
|
|
- $form->number('item_id', '商品ID')
|
|
|
|
|
- ->required()
|
|
|
|
|
- ->min(1)
|
|
|
|
|
- ->help('请输入要回收的商品ID');
|
|
|
|
|
-
|
|
|
|
|
- $form->number('quantity', '回收数量')
|
|
|
|
|
- ->required()
|
|
|
|
|
- ->min(1)
|
|
|
|
|
- ->help('请输入要回收的数量');
|
|
|
|
|
-
|
|
|
|
|
- $form->decimal('price', '回收价格')
|
|
|
|
|
- ->required()
|
|
|
|
|
- ->help('请输入回收价格(每个商品的价格)');
|
|
|
|
|
-
|
|
|
|
|
- $form->textarea('remark', '操作备注')
|
|
|
|
|
- ->rows(3)
|
|
|
|
|
- ->help('可选,记录本次操作的原因或说明');
|
|
|
|
|
|
|
|
|
|
- $form->html('<div class="alert alert-warning">
|
|
|
|
|
- <h6><i class="fa fa-exclamation-triangle"></i> 注意事项</h6>
|
|
|
|
|
- <ul class="mb-0">
|
|
|
|
|
- <li>回收操作相当于系统从仓库"买入"物品</li>
|
|
|
|
|
- <li>会减少仓库的库存数量</li>
|
|
|
|
|
- <li>系统会支出相应的资金</li>
|
|
|
|
|
- <li>回收数量不能超过当前库存</li>
|
|
|
|
|
- <li>操作不可撤销,请谨慎操作</li>
|
|
|
|
|
- </ul>
|
|
|
|
|
- </div>');
|
|
|
|
|
|
|
|
|
|
- return $form;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- /**
|
|
|
|
|
- * 构建初始化库存表单
|
|
|
|
|
- */
|
|
|
|
|
- private function buildInitializeForm()
|
|
|
|
|
- {
|
|
|
|
|
- $form = new Form();
|
|
|
|
|
-
|
|
|
|
|
- $form->action(route('dcat.admin.mex-admin-tools.initialize.store'));
|
|
|
|
|
-
|
|
|
|
|
- $form->html('<div class="alert alert-info">
|
|
|
|
|
- <h6><i class="fa fa-info-circle"></i> 初始化说明</h6>
|
|
|
|
|
- <ul class="mb-0">
|
|
|
|
|
- <li>此操作将为所有已启用定价的商品创建库存记录</li>
|
|
|
|
|
- <li>初始库存数量为0,可通过注入操作增加库存</li>
|
|
|
|
|
- <li>只有当库存表为空时才能执行初始化</li>
|
|
|
|
|
- <li>初始化后可以正常进行注入、回收和用户交易</li>
|
|
|
|
|
- </ul>
|
|
|
|
|
- </div>');
|
|
|
|
|
-
|
|
|
|
|
- $form->html('<div class="alert alert-warning">
|
|
|
|
|
- <h6><i class="fa fa-exclamation-triangle"></i> 注意事项</h6>
|
|
|
|
|
- <ul class="mb-0">
|
|
|
|
|
- <li>初始化操作只能在库存表为空时执行</li>
|
|
|
|
|
- <li>如果已有库存记录,将无法执行初始化</li>
|
|
|
|
|
- <li>初始化完成后,所有已定价商品的库存都为0</li>
|
|
|
|
|
- <li>操作不可撤销,请确认后再执行</li>
|
|
|
|
|
- </ul>
|
|
|
|
|
- </div>');
|
|
|
|
|
-
|
|
|
|
|
- // 添加一个隐藏字段,确保表单可以提交
|
|
|
|
|
- $form->hidden('action')->value('initialize');
|
|
|
|
|
-
|
|
|
|
|
- return $form;
|
|
|
|
|
- }
|
|
|
|
|
}
|
|
}
|