mirror of
https://gitee.com/hzchunfen/erp.git
synced 2025-12-01 06:30:49 +00:00
鲜花2.0-库存扣减部分逻辑调整+保质期告警
This commit is contained in:
parent
fa41ac4047
commit
f9220ef396
@ -1,288 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Goods;
|
||||
|
||||
use App\Events\BatchStockUpdateEvent;
|
||||
use App\Events\StockUpdateEvent;
|
||||
use App\Exports\GoodsSkusExport;
|
||||
use App\Exports\WeekDataExport;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Enum\ExcelKeyEnum;
|
||||
use App\Http\Requests\GoodsRequest;
|
||||
use App\Http\Requests\GoodsSkuRequest;
|
||||
use App\Imports\InventoryImport;
|
||||
use App\Imports\LossImport;
|
||||
use App\Imports\NewSetImport;
|
||||
use App\Imports\PurchaseImport;
|
||||
use App\Models\BusinessOrderItem;
|
||||
use App\Models\CombinationGood;
|
||||
use App\Models\DailySalesReport;
|
||||
use App\Models\DeveloperConfig;
|
||||
use App\Models\Goods;
|
||||
use App\Models\Log;
|
||||
use App\Models\Log as LogModel;
|
||||
use App\Models\LossRecords;
|
||||
use App\Models\PurchaseRecords;
|
||||
use App\Services\DeveloperConfig\DeveloperConfigService;
|
||||
use App\Services\GoodSku\GoodSkuService;
|
||||
use App\Utils\ArrayUtils;
|
||||
use App\Utils\DateTimeUtils;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Models\GoodsSku;
|
||||
use App\Http\Resources\GoodsSkuResource;
|
||||
use App\Imports\GoodsSkusImport;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Illuminate\Validation\Rule;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
use Maatwebsite\Excel\Facades\Excel;
|
||||
use App\Models\DailyStockRecord;
|
||||
use App\Models\Shop;
|
||||
|
||||
class WareHouseSkusController extends Controller
|
||||
{
|
||||
public function __construct(Request $request)
|
||||
{
|
||||
$this->log = new LogModel([
|
||||
'module' => 'goods',
|
||||
'action' => $request->getMethod(),
|
||||
'target_type' => 'goods_sku',
|
||||
]);
|
||||
}
|
||||
|
||||
public function index(Request $request)
|
||||
{
|
||||
$fields = implode(',', [
|
||||
'shop_id',
|
||||
'external_sku_id',
|
||||
'SUM(goods_number) - SUM(already_cancel_number) as number',
|
||||
]);
|
||||
$orderRestTime = DeveloperConfig::query()
|
||||
->where('key', DeveloperConfig::$ORDER_RESET_TIME)
|
||||
->value('value');
|
||||
if (is_null($orderRestTime)) {
|
||||
$orderRestTime = date('Y-m-d 07:00:00');
|
||||
}
|
||||
$businessOrderItems = BusinessOrderItem::query()
|
||||
->select(DB::raw($fields))
|
||||
->with([
|
||||
'shop:id,name',
|
||||
'goodsSku:id,external_sku_id'
|
||||
])
|
||||
->where('created_at', '>', $orderRestTime)
|
||||
->where('external_sku_id', '<>', '')
|
||||
->groupBy(['shop_id', 'external_sku_id'])
|
||||
->orderByDesc('number')
|
||||
->get()
|
||||
->toArray();
|
||||
$ids = $externals = [];
|
||||
foreach ($businessOrderItems as $businessOrderItem) {
|
||||
if (is_null($businessOrderItem['goods_sku'])) {
|
||||
continue;
|
||||
}
|
||||
$id = $businessOrderItem['goods_sku']['id'];
|
||||
if (isset($ids[$id])) {
|
||||
$ids[$id] += (int)$businessOrderItem['number'];
|
||||
} else {
|
||||
$ids[$id] = (int)$businessOrderItem['number'];
|
||||
}
|
||||
|
||||
$externals[$businessOrderItem['external_sku_id']][] = $businessOrderItem;
|
||||
}
|
||||
arsort($ids);
|
||||
|
||||
$builder = GoodsSku::query();
|
||||
$this->preparQueryGoodsSkus($request, $builder);
|
||||
$day = DateTimeUtils::getToday();
|
||||
$goodsSkus = (clone $builder)->filter()
|
||||
->where('is_combination', 0)
|
||||
->orderByDesc('stock')
|
||||
->pluck('stock', 'id')
|
||||
->toArray();
|
||||
$finalIds = [];
|
||||
foreach ($ids as $id => $number) {
|
||||
if (isset($goodsSkus[$id])) {
|
||||
$finalIds[] = $id;
|
||||
unset($goodsSkus[$id]);
|
||||
}
|
||||
}
|
||||
$finalIds = array_merge($finalIds, array_keys($goodsSkus));
|
||||
$idField = implode(',', $finalIds);
|
||||
|
||||
$goodsSkus = (clone $builder)->with(['goods' => function ($query) {
|
||||
$query->with(['type:id,name', 'brand:id,name']);
|
||||
}])
|
||||
->with(['daily' => function ($query) use ($day) {
|
||||
$query->where('day', $day);
|
||||
}])
|
||||
->whereIn('id', $finalIds)
|
||||
->orderByRaw("FIELD(id, {$idField})")
|
||||
->paginate($request->get('per_page'));
|
||||
$rolesName = $request->user()->getRoleNames()->toArray();
|
||||
foreach ($goodsSkus as &$sku) {
|
||||
$lastInventoryTime = $sku['daily']['inventory_time'] ?: date('Y-m-d 07:00:00');
|
||||
if (isset($externals[$sku['external_sku_id']])) {
|
||||
$sku['order_detail'] = $externals[$sku['external_sku_id']];
|
||||
$sku['order_goods_num'] = array_sum(array_column($externals[$sku['external_sku_id']], 'number'));
|
||||
} else {
|
||||
$sku['order_detail'] = [];
|
||||
$sku['order_goods_num'] = 0;
|
||||
}
|
||||
$sku['order_goods_num'] -= $sku['daily']['reissue_num'];
|
||||
$sku['inventory_time'] = $lastInventoryTime;
|
||||
if ('销售' === $rolesName[0]) {
|
||||
$sku['cost'] = 0;
|
||||
}
|
||||
}
|
||||
return GoodsSkuResource::collection($goodsSkus);
|
||||
}
|
||||
|
||||
/**
|
||||
* 采购单后台批量存储
|
||||
* @param Request $request
|
||||
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\Routing\ResponseFactory|\Illuminate\Http\Response|void
|
||||
*/
|
||||
public function purchaseBatchStore(Request $request)
|
||||
{
|
||||
$validator = Validator::make($request->all(), [
|
||||
'purchaseOrders' => 'required|array',
|
||||
'purchaseOrders.*.external_sku_id' => 'required|string',
|
||||
'purchaseOrders.*.num' => 'required|integer']);
|
||||
//参数校验
|
||||
if ($validator->fails()) {
|
||||
$this->setValidatorFailResponse($validator->getMessageBag()->getMessages());
|
||||
return response($this->res, $this->res['httpCode']);
|
||||
}
|
||||
$purchaseOrders = $request->input('purchaseOrders') ?? [];
|
||||
$externalSkuIds = collect($purchaseOrders)->pluck("external_sku_id")->toArray();
|
||||
$goodsSku = GoodsSku::query()->whereIn('external_sku_id', $externalSkuIds)->get();
|
||||
if ($goodsSku->pluck("external_sku_id")->diff($externalSkuIds)->isNotEmpty()) {
|
||||
$content = implode(',', $goodsSku->pluck("external_sku_id")->diff($externalSkuIds)->toArray());
|
||||
$content .= "以上sku编码数据库中不存在";
|
||||
return response($content, $this->res['httpCode']);
|
||||
}
|
||||
$goodsSkuMap = $goodsSku->pluck(null, 'external_sku_id')->toArray();
|
||||
$updateIds = [];
|
||||
$expireDay = DeveloperConfigService::getDefaultExpireDay();
|
||||
//开始保存数据
|
||||
foreach ($purchaseOrders as $v) {
|
||||
$goodsSkuItem = $goodsSkuMap[$v['external_sku_id']];
|
||||
//保存記錄
|
||||
$purchaseRecords = new PurchaseRecords();
|
||||
$purchaseRecords->sku_id = $goodsSkuItem['id'] ?? 0;
|
||||
$purchaseRecords->external_sku_id = $v['external_sku_id'];
|
||||
$purchaseRecords->num = $v['num'];
|
||||
$purchaseRecords->cost = $v['cost'];
|
||||
$purchaseRecords->buyer_name = $v['buyer_name'] ?? '';
|
||||
$purchaseRecords->supplier_name = $v['supplier_name'] ?? '';
|
||||
$purchaseRecords->supplier_id = $v['supplier_id'] ?? 0;
|
||||
$purchaseRecords->expire_time = Carbon::now()->addDays($expireDay)->toDateTimeString();
|
||||
$purchaseRecords->save();
|
||||
|
||||
$updateIds = GoodSkuService::computeSkuStock($goodsSkuItem,$v);
|
||||
|
||||
}
|
||||
//如果是組合商品会触发重算逻辑
|
||||
event(new BatchStockUpdateEvent($updateIds));
|
||||
return response($this->res, $this->res['httpCode']);
|
||||
}
|
||||
|
||||
/**
|
||||
* 报损单后台批量存储
|
||||
* @param Request $request
|
||||
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\Routing\ResponseFactory|\Illuminate\Http\Response|void
|
||||
*/
|
||||
public function purchaseImport(Request $request)
|
||||
{
|
||||
if (!$request->hasFile(ExcelKeyEnum::PURCHASE_KEY)) {
|
||||
$this->res = [
|
||||
'httpCode' => 404,
|
||||
'errorCode' => 404404,
|
||||
'errorMessage' => 'not found purchase file',
|
||||
];
|
||||
}
|
||||
try {
|
||||
$import = new PurchaseImport();
|
||||
$path = $request->file(ExcelKeyEnum::PURCHASE_KEY);
|
||||
Excel::import($import, $path);
|
||||
$this->addLog(0, 'import', ExcelKeyEnum::PURCHASE_KEY);
|
||||
} catch (ValidationException $exception) {
|
||||
$this->setValidatorFailResponse($exception->validator->getMessageBag()->getMessages());
|
||||
}
|
||||
|
||||
return response($this->res, $this->res['httpCode']);
|
||||
}
|
||||
|
||||
|
||||
public function lossBatchStore(Request $request){
|
||||
$validator = Validator::make($request->all(), [
|
||||
'lossOrders' => 'required|array',
|
||||
'lossOrders.*.external_sku_id' => 'required|string',
|
||||
'lossOrders.*.num' => 'required|integer',
|
||||
'lossOrders.*.reason' => 'sometimes|string',
|
||||
'lossOrders.*.buyer_name' => 'sometimes|string',//采购商
|
||||
]);
|
||||
//参数校验
|
||||
if ($validator->fails()) {
|
||||
$this->setValidatorFailResponse($validator->getMessageBag()->getMessages());
|
||||
return response($this->res, $this->res['httpCode']);
|
||||
}
|
||||
$lossOrders = $request->input('lossOrders') ?? [];
|
||||
$externalSkuIds = collect($lossOrders)->pluck("external_sku_id")->toArray();
|
||||
$goodsSku = GoodsSku::query()->whereIn('external_sku_id', $externalSkuIds)->get();
|
||||
if ($goodsSku->pluck("external_sku_id")->diff($externalSkuIds)->isNotEmpty()) {
|
||||
$content = implode(',', $goodsSku->pluck("external_sku_id")->diff($externalSkuIds)->toArray());
|
||||
$content .= "以上sku编码数据库中不存在";
|
||||
return response($content, $this->res['httpCode']);
|
||||
}
|
||||
$goodsSkuMap = $goodsSku->pluck(null,'external_sku_id')->toArray();
|
||||
$updateIds = [];
|
||||
//开始保存数据
|
||||
foreach ($lossOrders as $v) {
|
||||
$goodsSkuItem = $goodsSkuMap[$v['external_sku_id']];
|
||||
//保存記錄
|
||||
$lossRecords = new LossRecords();
|
||||
$lossRecords->sku_id = $goodsSkuItem['id'] ?? 0;
|
||||
$lossRecords->external_sku_id = $v['external_sku_id'];
|
||||
$lossRecords->num = $v['num'];
|
||||
$lossRecords->cost = $v['cost'];
|
||||
$lossRecords->buyer_name = $v['buyer_name'] ?? '';
|
||||
$lossRecords->reason = $v['reason'] ?? '';
|
||||
$lossRecords->save();
|
||||
|
||||
$updateIds = GoodSkuService::computeSkuStock($goodsSkuItem,['num'=>0-$v['num'],"cost"=>$v['cost']]);
|
||||
|
||||
}
|
||||
|
||||
event(new BatchStockUpdateEvent($updateIds));
|
||||
return response($this->res, $this->res['httpCode']);
|
||||
}
|
||||
/**
|
||||
* 报损单单后台批量导入
|
||||
* @param Request $request
|
||||
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\Routing\ResponseFactory|\Illuminate\Http\Response|void
|
||||
*/
|
||||
public function lossImport(Request $request)
|
||||
{
|
||||
if (!$request->hasFile(ExcelKeyEnum::LOSS_KEY)) {
|
||||
$this->res = [
|
||||
'httpCode' => 404,
|
||||
'errorCode' => 404404,
|
||||
'errorMessage' => 'not found loss file',
|
||||
];
|
||||
}
|
||||
try {
|
||||
$import = new LossImport();
|
||||
$path = $request->file(ExcelKeyEnum::LOSS_KEY);
|
||||
Excel::import($import, $path);
|
||||
$this->addLog(0, 'import', ExcelKeyEnum::LOSS_KEY);
|
||||
} catch (ValidationException $exception) {
|
||||
$this->setValidatorFailResponse($exception->validator->getMessageBag()->getMessages());
|
||||
}
|
||||
|
||||
return response($this->res, $this->res['httpCode']);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
103
app/Http/Controllers/Supplier/DailyStockRecordController.php
Normal file
103
app/Http/Controllers/Supplier/DailyStockRecordController.php
Normal file
@ -0,0 +1,103 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Supplier;
|
||||
|
||||
use App\Events\BatchStockUpdateEvent;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Enum\ExcelKeyEnum;
|
||||
use App\Imports\InventoryImport;
|
||||
use App\Imports\LossImport;
|
||||
use App\Models\DailyStockRecord;
|
||||
use App\Models\GoodsSku;
|
||||
use App\Models\Log as LogModel;
|
||||
use App\Services\GoodSku\GoodSkuService;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
use Maatwebsite\Excel\Facades\Excel;
|
||||
|
||||
class DailyStockRecordController extends Controller
|
||||
{
|
||||
public function __construct(Request $request)
|
||||
{
|
||||
$this->log = new LogModel([
|
||||
'module' => 'supplier',
|
||||
'action' => $request->getMethod(),
|
||||
'target_type' => 'dailyStockRecord',
|
||||
]);
|
||||
}
|
||||
|
||||
public function index(Request $request)
|
||||
{
|
||||
$build = DailyStockRecord::query()->filter()->with("goodsSku:id,title");
|
||||
if (!empty($request->title)) {
|
||||
$build->whereHas('goodsSku', function ($query) use ($request) {
|
||||
$query->where('title', 'like', '%' . $request->title . '%');
|
||||
});
|
||||
}
|
||||
if (!empty($request->get('external_sku_id'))) {
|
||||
$build->whereHas('goodsSku', function ($query) use ($request) {
|
||||
$query->where('external_sku_id', '=', $request->external_sku_id);
|
||||
});
|
||||
}
|
||||
$dailyStockRecord = $build->paginate($request->get('per_page'));
|
||||
return JsonResource::collection($dailyStockRecord);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\Routing\ResponseFactory|\Illuminate\Http\Response
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
$validator = Validator::make($request->all(), [
|
||||
'external_sku_id' => 'required|string',
|
||||
'inventory' => 'required|integer',
|
||||
]);
|
||||
if ($validator->fails()) {
|
||||
//校验失败返回异常
|
||||
$this->setValidatorFailResponse($validator->getMessageBag()->getMessages());
|
||||
return response($this->res, $this->res['httpCode']);
|
||||
}
|
||||
$goodsSku = GoodsSku::query()->with("combinationGoods")->where('external_sku_id', "=", $request->external_sku_id)->first();
|
||||
if (empty($goodsSku)) {
|
||||
$this->res = [
|
||||
'httpCode' => 200,
|
||||
'message' => '查询不到sku信息',
|
||||
'errorCode' => "ERP001",
|
||||
'errorMessage' => '查询不到sku信息',
|
||||
];
|
||||
return response($this->res, $this->res['httpCode']);
|
||||
}
|
||||
|
||||
//同一批量逻辑操作
|
||||
$goodSkuService = new GoodSkuService();
|
||||
$goodSkuService->inventory([$goodsSku]);
|
||||
return response($this->res, $this->res['httpCode']);
|
||||
}
|
||||
|
||||
|
||||
public function inventoryImport(Request $request)
|
||||
{
|
||||
if (!$request->hasFile('inventoryFile')) {
|
||||
$this->res = [
|
||||
'httpCode' => 404,
|
||||
'errorCode' => 404404,
|
||||
'errorMessage' => 'not found inventory file',
|
||||
];
|
||||
}
|
||||
try {
|
||||
$import = new InventoryImport();
|
||||
$path = $request->file('inventoryFile');
|
||||
Excel::import($import, $path);
|
||||
$this->addLog(0, 'import', 'inventory');
|
||||
} catch (ValidationException $exception) {
|
||||
$this->setValidatorFailResponse($exception->validator->getMessageBag()->getMessages());
|
||||
}
|
||||
|
||||
return response($this->res, $this->res['httpCode']);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
189
app/Http/Controllers/Supplier/LossRecordController.php
Normal file
189
app/Http/Controllers/Supplier/LossRecordController.php
Normal file
@ -0,0 +1,189 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Supplier;
|
||||
|
||||
use App\Events\BatchStockUpdateEvent;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Enum\ExcelKeyEnum;
|
||||
use App\Imports\LossImport;
|
||||
use App\Models\DailyStockRecord;
|
||||
use App\Models\GoodsSku;
|
||||
use App\Models\Log;
|
||||
use App\Models\Log as LogModel;
|
||||
use App\Models\LossRecords;
|
||||
use App\Models\Suppliers;
|
||||
use App\Services\GoodSku\GoodSkuService;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
use Maatwebsite\Excel\Facades\Excel;
|
||||
|
||||
class LossRecordController extends Controller
|
||||
{
|
||||
|
||||
public function index(Request $request)
|
||||
{
|
||||
$builder = LossRecords::query()->filter()->with("goodsSku:title,external_sku_id");
|
||||
if (!empty($request->start_time) && !empty($request->end_time)) {
|
||||
$builder->whereBetween('created_at', [$request->start_time, $request->end_time]);
|
||||
}
|
||||
if (!empty($request->title)) {
|
||||
$builder->whereHas('goodsSku', function ($query) use ($request) {
|
||||
$query->where('title', 'like', '%' . $request->title . '%');
|
||||
});
|
||||
}
|
||||
$dailyStockRecord = $builder->paginate($request->get('per_page'));
|
||||
return JsonResource::collection($dailyStockRecord);
|
||||
}
|
||||
|
||||
public function store(Request $request)
|
||||
{
|
||||
//获取所有参数
|
||||
$allParams = $request->all();
|
||||
//进行校验验证
|
||||
$validator = Validator::make($allParams, [
|
||||
'external_sku_id' => 'required|string',
|
||||
'num' => 'required|integer',
|
||||
'reason' => 'sometimes|string',
|
||||
'buyer_name' => 'sometimes|string'
|
||||
]);
|
||||
if ($validator->fails()) {
|
||||
//校验失败返回异常
|
||||
$this->setValidatorFailResponse($validator->getMessageBag()->getMessages());
|
||||
return response($this->res, $this->res['httpCode']);
|
||||
}
|
||||
$goodsSku = GoodsSku::query()->where('external_sku_id', "=", $request->external_sku_id)->first();
|
||||
if (!empty($goodsSku)) {
|
||||
//保存記錄
|
||||
$lossRecords = new LossRecords();
|
||||
$lossRecords->sku_id = $goodsSku->id;
|
||||
$lossRecords->external_sku_id = $allParams['external_sku_id'];
|
||||
$lossRecords->num = $allParams['num'];
|
||||
$lossRecords->cost = $allParams['cost'];
|
||||
$lossRecords->buyer_name = $allParams['buyer_name'] ?? '';
|
||||
$lossRecords->reason = $allParams['reason'] ?? '';
|
||||
$lossRecords->save();
|
||||
$updateIds = GoodSkuService::computeSkuStock($goodsSku->toArray(), ['num' => 0 - $allParams['num'], "cost" => $allParams['cost']]);
|
||||
event(new BatchStockUpdateEvent($updateIds));
|
||||
} else {
|
||||
$this->res = [
|
||||
'httpCode' => 200,
|
||||
'message' => '查询不到sku信息',
|
||||
'errorCode' => "ERP001",
|
||||
'errorMessage' => '查询不到sku信息',
|
||||
];
|
||||
}
|
||||
|
||||
return response($this->res, $this->res['httpCode']);
|
||||
}
|
||||
|
||||
|
||||
public function update($id, Request $request)
|
||||
{
|
||||
//获取所有参数
|
||||
$allParams = $request->all();
|
||||
//进行校验验证
|
||||
$validator = Validator::make($allParams, [
|
||||
'reason' => 'sometimes|string',
|
||||
'buyer_name' => 'sometimes|string'
|
||||
]);
|
||||
if ($validator->fails()) {
|
||||
//校验失败返回异常
|
||||
$this->setValidatorFailResponse($validator->getMessageBag()->getMessages());
|
||||
return response($this->res, $this->res['httpCode']);
|
||||
}
|
||||
$goodsSku = GoodsSku::query()->where('id', "=", $id)->get();
|
||||
if (!empty($goodsSku)) {
|
||||
//更新記錄
|
||||
$lossRecords = new LossRecords();
|
||||
$lossRecords->buyer_name = $allParams['buyer_name'] ?? '';
|
||||
$lossRecords->reason = $allParams['reason'] ?? '';
|
||||
$lossRecords->save();
|
||||
|
||||
} else {
|
||||
$this->res = [
|
||||
'httpCode' => 200,
|
||||
'message' => '查询不到sku信息',
|
||||
'errorCode' => "ERP001",
|
||||
'errorMessage' => '查询不到sku信息',
|
||||
];
|
||||
}
|
||||
|
||||
return response($this->res, $this->res['httpCode']);
|
||||
}
|
||||
|
||||
public function lossBatchStore(Request $request){
|
||||
$validator = Validator::make($request->all(), [
|
||||
'lossOrders' => 'required|array',
|
||||
'lossOrders.*.external_sku_id' => 'required|string',
|
||||
'lossOrders.*.num' => 'required|integer',
|
||||
'lossOrders.*.reason' => 'sometimes|string',
|
||||
'lossOrders.*.buyer_name' => 'sometimes|string',//采购商
|
||||
]);
|
||||
//参数校验
|
||||
if ($validator->fails()) {
|
||||
$this->setValidatorFailResponse($validator->getMessageBag()->getMessages());
|
||||
return response($this->res, $this->res['httpCode']);
|
||||
}
|
||||
$lossOrders = $request->input('lossOrders') ?? [];
|
||||
$externalSkuIds = collect($lossOrders)->pluck("external_sku_id")->toArray();
|
||||
$goodsSku = GoodsSku::query()->whereIn('external_sku_id', $externalSkuIds)->get();
|
||||
if ($goodsSku->pluck("external_sku_id")->diff($externalSkuIds)->isNotEmpty()) {
|
||||
$content = implode(',', $goodsSku->pluck("external_sku_id")->diff($externalSkuIds)->toArray());
|
||||
$content .= "以上sku编码数据库中不存在";
|
||||
return response($content, $this->res['httpCode']);
|
||||
}
|
||||
$goodsSkuMap = $goodsSku->pluck(null,'external_sku_id')->toArray();
|
||||
$updateIds = [];
|
||||
//开始保存数据
|
||||
foreach ($lossOrders as $v) {
|
||||
$goodsSkuItem = $goodsSkuMap[$v['external_sku_id']];
|
||||
//保存記錄
|
||||
$lossRecords = new LossRecords();
|
||||
$lossRecords->sku_id = $goodsSkuItem['id'] ?? 0;
|
||||
$lossRecords->external_sku_id = $v['external_sku_id'];
|
||||
$lossRecords->num = $v['num'];
|
||||
$lossRecords->cost = $v['cost'];
|
||||
$lossRecords->buyer_name = $v['buyer_name'] ?? '';
|
||||
$lossRecords->reason = $v['reason'] ?? '';
|
||||
$lossRecords->save();
|
||||
|
||||
$updateIds = GoodSkuService::computeSkuStock($goodsSkuItem,['num'=>0-$v['num'],"cost"=>$v['cost']]);
|
||||
|
||||
}
|
||||
|
||||
event(new BatchStockUpdateEvent($updateIds));
|
||||
return response($this->res, $this->res['httpCode']);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 报损单单后台批量导入
|
||||
* @param Request $request
|
||||
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\Routing\ResponseFactory|\Illuminate\Http\Response|void
|
||||
*/
|
||||
public function lossImport(Request $request)
|
||||
{
|
||||
if (!$request->hasFile(ExcelKeyEnum::LOSS_KEY)) {
|
||||
$this->res = [
|
||||
'httpCode' => 404,
|
||||
'errorCode' => 404404,
|
||||
'errorMessage' => 'not found loss file',
|
||||
];
|
||||
}
|
||||
try {
|
||||
$import = new LossImport();
|
||||
$path = $request->file(ExcelKeyEnum::LOSS_KEY);
|
||||
Excel::import($import, $path);
|
||||
$this->addLog(0, 'import', ExcelKeyEnum::LOSS_KEY);
|
||||
} catch (ValidationException $exception) {
|
||||
$this->setValidatorFailResponse($exception->validator->getMessageBag()->getMessages());
|
||||
}
|
||||
|
||||
return response($this->res, $this->res['httpCode']);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
206
app/Http/Controllers/Supplier/PurchaseRecordController.php
Normal file
206
app/Http/Controllers/Supplier/PurchaseRecordController.php
Normal file
@ -0,0 +1,206 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Supplier;
|
||||
|
||||
use App\Events\BatchStockUpdateEvent;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Enum\ExcelKeyEnum;
|
||||
use App\Http\Resources\GoodsSkuResource;
|
||||
use App\Http\Resources\RolesResource;
|
||||
use App\Imports\PurchaseImport;
|
||||
use App\Models\GoodsSku;
|
||||
use App\Models\Log;
|
||||
use App\Models\Log as LogModel;
|
||||
use App\Models\LossRecords;
|
||||
use App\Models\PurchaseRecords;
|
||||
use App\Models\Suppliers;
|
||||
use App\Services\DeveloperConfig\DeveloperConfigService;
|
||||
use App\Services\GoodSku\GoodSkuService;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
use Maatwebsite\Excel\Facades\Excel;
|
||||
|
||||
class PurchaseRecordController extends Controller
|
||||
{
|
||||
|
||||
public function index(Request $request)
|
||||
{
|
||||
$builder = PurchaseRecords::query()->filter()->with("goodsSku:id,title,external_sku_id");
|
||||
if (!empty($request->start_time) && !empty($request->end_time)) {
|
||||
$builder->whereBetween('created_at', [$request->start_time, $request->end_time]);
|
||||
}
|
||||
if (!empty($request->title)) {
|
||||
$builder->whereHas('goodsSku', function ($query) use ($request) {
|
||||
$query->where('title', 'like', '%' . $request->title . '%');
|
||||
});
|
||||
}
|
||||
$dailyStockRecord = $builder->paginate($request->get('per_page'));
|
||||
return JsonResource::collection($dailyStockRecord);
|
||||
}
|
||||
|
||||
public function store(Request $request)
|
||||
{
|
||||
//获取所有参数
|
||||
$allParams = $request->all();
|
||||
//进行校验验证
|
||||
$validator = Validator::make($allParams, [
|
||||
'external_sku_id' => 'required|string',
|
||||
'num' => 'required|integer',
|
||||
]);
|
||||
if ($validator->fails()) {
|
||||
//校验失败返回异常
|
||||
$this->setValidatorFailResponse($validator->getMessageBag()->getMessages());
|
||||
return response($this->res, $this->res['httpCode']);
|
||||
}
|
||||
$goodsSku = GoodsSku::query()->where('external_sku_id', "=", $request->external_sku_id)->first();
|
||||
if (!empty($goodsSku)) {
|
||||
$expireDay = DeveloperConfigService::getDefaultExpireDay();
|
||||
//保存記錄
|
||||
$purchaseRecords = new PurchaseRecords();
|
||||
$purchaseRecords->sku_id = $goodsSku->id ?? 0;
|
||||
$purchaseRecords->external_sku_id = $allParams['external_sku_id'];
|
||||
$purchaseRecords->num = $allParams['num'];
|
||||
$purchaseRecords->cost = $allParams['cost'];
|
||||
$purchaseRecords->buyer_name = $allParams['buyer_name'] ?? '';
|
||||
$purchaseRecords->supplier_name = $allParams['supplier_name'] ?? '';
|
||||
$purchaseRecords->supplier_id = $allParams['supplier_id'] ?? 0;
|
||||
$purchaseRecords->expire_time = $allParams['expire_time'] ?? Carbon::now()->addDays($expireDay)->toDateTimeString();
|
||||
$purchaseRecords->save();
|
||||
|
||||
$updateIds = GoodSkuService::computeSkuStock($goodsSku->toArray(), $allParams);
|
||||
event(new BatchStockUpdateEvent($updateIds));
|
||||
} else {
|
||||
$this->res = [
|
||||
'httpCode' => 200,
|
||||
'message' => '查询不到sku信息',
|
||||
'errorCode' => "ERP001",
|
||||
'errorMessage' => '查询不到sku信息',
|
||||
];
|
||||
}
|
||||
|
||||
return response($this->res, $this->res['httpCode']);
|
||||
}
|
||||
|
||||
|
||||
public function update($id, Request $request)
|
||||
{
|
||||
//获取所有参数
|
||||
$allParams = $request->all();
|
||||
//进行校验验证
|
||||
$validator = Validator::make($allParams, [
|
||||
'buyer_name' => 'sometimes|string',
|
||||
'supplier_name' => 'sometimes|string',
|
||||
"expire_time" => 'sometimes|string'
|
||||
]);
|
||||
if ($validator->fails()) {
|
||||
//校验失败返回异常
|
||||
$this->setValidatorFailResponse($validator->getMessageBag()->getMessages());
|
||||
return response($this->res, $this->res['httpCode']);
|
||||
}
|
||||
$goodsSku = GoodsSku::query()->where('id', "=", $id)->get();
|
||||
if (!empty($goodsSku)) {
|
||||
//可以修改的記錄
|
||||
$purchaseRecords = new PurchaseRecords();
|
||||
$purchaseRecords->buyer_name = $allParams['buyer_name'] ?? '';
|
||||
$purchaseRecords->supplier_name = $allParams['supplier_name'] ?? '';
|
||||
$purchaseRecords->supplier_id = $allParams['supplier_id'] ?? 0;
|
||||
if (!empty($allParams['expire_time'])) {
|
||||
$purchaseRecords->expire_time = $allParams['expire_time'];
|
||||
}
|
||||
|
||||
$purchaseRecords->save();
|
||||
|
||||
} else {
|
||||
$this->res = [
|
||||
'httpCode' => 200,
|
||||
'message' => '查询不到sku信息',
|
||||
'errorCode' => "ERP001",
|
||||
'errorMessage' => '查询不到sku信息',
|
||||
];
|
||||
}
|
||||
|
||||
return response($this->res, $this->res['httpCode']);
|
||||
}
|
||||
|
||||
/**
|
||||
* 采购单后台批量存储
|
||||
* @param Request $request
|
||||
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\Routing\ResponseFactory|\Illuminate\Http\Response|void
|
||||
*/
|
||||
public function purchaseBatchStore(Request $request)
|
||||
{
|
||||
$validator = Validator::make($request->all(), [
|
||||
'purchaseOrders' => 'required|array',
|
||||
'purchaseOrders.*.external_sku_id' => 'required|string',
|
||||
'purchaseOrders.*.num' => 'required|integer']);
|
||||
//参数校验
|
||||
if ($validator->fails()) {
|
||||
$this->setValidatorFailResponse($validator->getMessageBag()->getMessages());
|
||||
return response($this->res, $this->res['httpCode']);
|
||||
}
|
||||
$purchaseOrders = $request->input('purchaseOrders') ?? [];
|
||||
$externalSkuIds = collect($purchaseOrders)->pluck("external_sku_id")->toArray();
|
||||
$goodsSku = GoodsSku::query()->whereIn('external_sku_id', $externalSkuIds)->get();
|
||||
if ($goodsSku->pluck("external_sku_id")->diff($externalSkuIds)->isNotEmpty()) {
|
||||
$content = implode(',', $goodsSku->pluck("external_sku_id")->diff($externalSkuIds)->toArray());
|
||||
$content .= "以上sku编码数据库中不存在";
|
||||
return response($content, $this->res['httpCode']);
|
||||
}
|
||||
$goodsSkuMap = $goodsSku->pluck(null, 'external_sku_id')->toArray();
|
||||
$updateIds = [];
|
||||
$expireDay = DeveloperConfigService::getDefaultExpireDay();
|
||||
//开始保存数据
|
||||
foreach ($purchaseOrders as $v) {
|
||||
$goodsSkuItem = $goodsSkuMap[$v['external_sku_id']];
|
||||
//保存記錄
|
||||
$purchaseRecords = new PurchaseRecords();
|
||||
$purchaseRecords->sku_id = $goodsSkuItem['id'] ?? 0;
|
||||
$purchaseRecords->external_sku_id = $v['external_sku_id'];
|
||||
$purchaseRecords->num = $v['num'];
|
||||
$purchaseRecords->cost = $v['cost'];
|
||||
$purchaseRecords->buyer_name = $v['buyer_name'] ?? '';
|
||||
$purchaseRecords->supplier_name = $v['supplier_name'] ?? '';
|
||||
$purchaseRecords->supplier_id = $v['supplier_id'] ?? 0;
|
||||
$purchaseRecords->expire_time = Carbon::now()->addDays($expireDay)->toDateTimeString();
|
||||
$purchaseRecords->save();
|
||||
|
||||
$updateIds = GoodSkuService::computeSkuStock($goodsSkuItem, $v);
|
||||
|
||||
}
|
||||
//如果是組合商品会触发重算逻辑
|
||||
event(new BatchStockUpdateEvent($updateIds));
|
||||
return response($this->res, $this->res['httpCode']);
|
||||
}
|
||||
|
||||
/**
|
||||
* 报损单后台批量存储
|
||||
* @param Request $request
|
||||
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\Routing\ResponseFactory|\Illuminate\Http\Response|void
|
||||
*/
|
||||
public function purchaseImport(Request $request)
|
||||
{
|
||||
if (!$request->hasFile(ExcelKeyEnum::PURCHASE_KEY)) {
|
||||
$this->res = [
|
||||
'httpCode' => 404,
|
||||
'errorCode' => 404404,
|
||||
'errorMessage' => 'not found purchase file',
|
||||
];
|
||||
}
|
||||
try {
|
||||
$import = new PurchaseImport();
|
||||
$path = $request->file(ExcelKeyEnum::PURCHASE_KEY);
|
||||
Excel::import($import, $path);
|
||||
$this->addLog(0, 'import', ExcelKeyEnum::PURCHASE_KEY);
|
||||
} catch (ValidationException $exception) {
|
||||
$this->setValidatorFailResponse($exception->validator->getMessageBag()->getMessages());
|
||||
}
|
||||
|
||||
return response($this->res, $this->res['httpCode']);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@ -40,7 +40,7 @@ class PurchaseImport implements ToArray, SkipsEmptyRows
|
||||
->toArray();
|
||||
$hasGoodsSkus = ArrayUtils::index($hasGoodsSkus, 'external_sku_id');
|
||||
$expireDay = DeveloperConfigService::getDefaultExpireDay();
|
||||
//excel字段排序 編碼 商品名稱 导购數量 成本价 采购人名称 供应商名称
|
||||
//excel字段排序 編碼 商品名稱 导购數量 成本价 采购人名称 供应商名称 保质期
|
||||
foreach ($collection as $row) {
|
||||
if (!isset($hasGoodsSkus[$row[0]])) {
|
||||
continue;
|
||||
@ -55,12 +55,12 @@ class PurchaseImport implements ToArray, SkipsEmptyRows
|
||||
$purchaseRecords->cost = $row[3];
|
||||
$purchaseRecords->buyer_name = $row[4] ?? '';
|
||||
$purchaseRecords->supplier_name = $row[5] ?? '';
|
||||
$purchaseRecords->expire_time = Carbon::now()->addDays($expireDay)->toDateTimeString();
|
||||
$purchaseRecords->expire_time = $row[6] ?? Carbon::now()->addDays($expireDay)->toDateTimeString();
|
||||
$purchaseRecords->save();
|
||||
|
||||
$updateIds = GoodSkuService::computeSkuStock($goodsSkuItem,["num"=>$row[2],'cost'=>$row[3]]);
|
||||
$updateIds = GoodSkuService::computeSkuStock($goodsSkuItem, ["num" => $row[2], 'cost' => $row[3]]);
|
||||
}
|
||||
Log::info("采购导入内容:",$collection);
|
||||
Log::info("采购导入内容:", $collection);
|
||||
// 批量更新
|
||||
event(new BatchStockUpdateEvent($updateIds));
|
||||
}
|
||||
|
||||
@ -2,9 +2,23 @@
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use App\Models\traits\Filter;
|
||||
|
||||
class DailyStockRecord extends Model
|
||||
{
|
||||
use Filter;
|
||||
|
||||
protected $hidden = ['created_at', 'updated_at'];
|
||||
|
||||
protected $guarded = [];
|
||||
|
||||
public $fieldSearchable = [
|
||||
'day',
|
||||
];
|
||||
|
||||
public function goodsSku()
|
||||
{
|
||||
return $this->belongsTo(GoodsSku::class, 'sku_id', 'id');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -2,10 +2,22 @@
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use App\Models\traits\Filter;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class LossRecords extends Model
|
||||
{
|
||||
//
|
||||
|
||||
use Filter;
|
||||
|
||||
protected $table = 'loss_records';
|
||||
protected $guarded = [];
|
||||
public $fieldSearchable = [
|
||||
'external_sku_id',
|
||||
];
|
||||
|
||||
public function goodsSku()
|
||||
{
|
||||
return $this->belongsTo(GoodsSku::class, 'external_sku_id', 'external_sku_id');
|
||||
}
|
||||
}
|
||||
|
||||
@ -2,11 +2,22 @@
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use App\Models\traits\Filter;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class PurchaseRecords extends Model
|
||||
{
|
||||
//
|
||||
protected $table = 'purchase_records';
|
||||
|
||||
use Filter;
|
||||
|
||||
protected $table = 'purchase_records';
|
||||
protected $guarded = [];
|
||||
public $fieldSearchable = [
|
||||
'external_sku_id',
|
||||
];
|
||||
|
||||
public function goodsSku()
|
||||
{
|
||||
return $this->belongsTo(GoodsSku::class, 'external_sku_id', 'external_sku_id');
|
||||
}
|
||||
}
|
||||
|
||||
@ -7,23 +7,29 @@ use App\Models\CombinationGood;
|
||||
use App\Models\DailyStockRecord;
|
||||
use App\Models\GoodsSku;
|
||||
use App\Utils\DateTimeUtils;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
|
||||
class GoodSkuService
|
||||
{
|
||||
|
||||
public function inventory(array $requestSkus)
|
||||
public function inventory(array $skusWithCombinationGoods,$skuInventoryMapKeyByExternalSkuId)
|
||||
{
|
||||
$requestSkusMap = collect($requestSkus)->pluck(null, 'external_sku_id')->toArray();
|
||||
$externalSkuIds = collect($requestSkus)->pluck('external_sku_id')->toArray();
|
||||
$skus = GoodsSku::query()
|
||||
->whereIn('external_sku_id', $externalSkuIds)
|
||||
->get(['id', 'external_sku_id'])
|
||||
->toArray();
|
||||
//传进来的sku可能包含组合商品 所以这里需要事先计算好数据
|
||||
$inventoryKeyBySkuIdMap = [];
|
||||
foreach($skusWithCombinationGoods as $sku){
|
||||
if(!empty($sku['is_combination'])){
|
||||
foreach ($sku['combination_goods'] as $combinationGoods){
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
$skus=[];
|
||||
|
||||
$today = DateTimeUtils::getToday();
|
||||
$dateTime = date('Y-m-d H:i:s');
|
||||
$updateIds = [];
|
||||
foreach ($skus as $sku) {
|
||||
if (!in_array($sku['external_sku_id'], $externalSkuIds)) {
|
||||
if (!in_array($sku['external_sku_id'], $sku)) {
|
||||
continue;
|
||||
}
|
||||
// 更新
|
||||
@ -31,7 +37,7 @@ class GoodSkuService
|
||||
'sku_id' => $sku['id'],
|
||||
'day' => $today,
|
||||
]);
|
||||
$record->inventory = $requestSkusMap[$sku['external_sku_id']]['inventory'];
|
||||
$record->inventory = $skuInventoryMapKeyByExternalSkuId[$sku['external_sku_id']]['inventory'];
|
||||
$record->inventory_time = $dateTime;
|
||||
$record->save();
|
||||
//查询sku当前未发货的数量 目前数据看着有问题暂不操作
|
||||
@ -49,26 +55,34 @@ class GoodSkuService
|
||||
public static function computeSkuStock(array $goodsSkuItem, array $v): array
|
||||
{
|
||||
$updateIds = [];
|
||||
Log::info("库存更新前完整商品信息", $goodsSkuItem);
|
||||
Log::info("库存更新前完整请求信息", $v);
|
||||
$updateParams = [];
|
||||
if (empty($goodsSkuItem['is_combination'])) {
|
||||
GoodsSku::query()->where('external_sku_id', $goodsSkuItem['external_sku_id'])->update([
|
||||
$updateParam = [
|
||||
'stock' => $goodsSkuItem['stock'] + $v['num'],
|
||||
'sale_stock' => $goodsSkuItem['sale_stock'] + $v['num'],
|
||||
'cost' => number_format(($goodsSkuItem['stock'] * $goodsSkuItem['cost'] + $v['cost'] * $v['num'])
|
||||
/ ($goodsSkuItem['stock'] + $v['num']), 2),
|
||||
]);
|
||||
];
|
||||
GoodsSku::query()->where('external_sku_id', $goodsSkuItem['external_sku_id'])->update($updateParams);
|
||||
$updateIds[] = $goodsSkuItem['id'];
|
||||
$updateParams[] = $updateParam;
|
||||
} else {
|
||||
//组合商品 这里需要重新获取 减少更新丢失概率 后续考虑库存管理用redis
|
||||
//组合商品 这里需要重新获取 减少更新丢失概率
|
||||
$combinationGood = CombinationGood::query()->with('goodsSkuItem:id,stock,sale_stock')
|
||||
->where('goods_sku_id', $goodsSkuItem['id'])->get();
|
||||
foreach ($combinationGood as $item) {
|
||||
GoodsSku::query()->where('id', $item['goodsSkuItem']['id'])->update([
|
||||
$updateParam = [
|
||||
'stock' => $item['goodsSkuItem']['stock'] + $v['num'] * $item['item_num'],
|
||||
'sale_stock' => $item['goodsSkuItem']['sale_stock'] + $v['num'] * $item['item_num'],
|
||||
]);
|
||||
];
|
||||
GoodsSku::query()->where('id', $item['goodsSkuItem']['id'])->update($updateParam);
|
||||
$updateIds[] = $item['goodsSkuItem']['id'];
|
||||
$updateParams[] = $updateParam;
|
||||
}
|
||||
}
|
||||
Log::info("本次请求更新参数", $updateParams);
|
||||
return $updateIds;
|
||||
}
|
||||
|
||||
|
||||
@ -477,13 +477,13 @@ return [
|
||||
'name' => '销售数据列表',
|
||||
'parent_id' => 180,
|
||||
],
|
||||
'SUPPLIER_MANAGE' => [
|
||||
'SUPPLIER' => [
|
||||
'id' => 19,
|
||||
'name' => '供应链管理',
|
||||
'parent_id' => 0,
|
||||
'show' => 1,
|
||||
],
|
||||
'SUPPLIER' => [
|
||||
'SUPPLIER_MANAGE' => [
|
||||
'id' => 190,
|
||||
'name' => '供应商管理',
|
||||
'parent_id' => 19,
|
||||
@ -525,35 +525,77 @@ return [
|
||||
'name' => '更新',
|
||||
'parent_id' => 191
|
||||
],
|
||||
'WARE_HOUSE' => [
|
||||
'PURCHASE_RECORD' => [
|
||||
'id' => 192,
|
||||
'name' => '仓库管理',
|
||||
'name' => '采购记录',
|
||||
'parent_id' => 19,
|
||||
'show' => 1,
|
||||
],
|
||||
'goods.ware_house.index' => [
|
||||
'purchase_record.index' => [
|
||||
'id' => 1921,
|
||||
'name' => '仓库管理首页',
|
||||
'name' => '采购单首页',
|
||||
'parent_id' => 192
|
||||
],
|
||||
'goods.ware_house.purchase_batch_store' => [
|
||||
'purchase_record.update' => [
|
||||
'id' => 1922,
|
||||
'name' => '导购单批量保存',
|
||||
'name' => '采购单更新',
|
||||
'parent_id' => 192
|
||||
],
|
||||
'goods.ware_house.loss_batch_store' => [
|
||||
'purchase_record.store' => [
|
||||
'id' => 1923,
|
||||
'name' => '报损单批量保存',
|
||||
'name' => '采购单新增',
|
||||
'parent_id' => 192
|
||||
],
|
||||
'goods.ware_house.purchase_import' => [
|
||||
'purchase_record.purchase_import' => [
|
||||
'id' => 1924,
|
||||
'name' => '导购单批量导入',
|
||||
'parent_id' => 192
|
||||
],
|
||||
'goods.ware_house.loss_import' => [
|
||||
'id' => 1925,
|
||||
'LOSS_RECORD' => [
|
||||
'id' => 193,
|
||||
'name' => '报损记录',
|
||||
'parent_id' => 19,
|
||||
'show' => 1,
|
||||
],
|
||||
'loss_record.index' => [
|
||||
'id' => 1931,
|
||||
'name' => '报损单首页',
|
||||
'parent_id' => 193
|
||||
],
|
||||
'loss_record.update' => [
|
||||
'id' => 1932,
|
||||
'name' => '报损单更新',
|
||||
'parent_id' => 193
|
||||
],
|
||||
'loss_record.store' => [
|
||||
'id' => 1933,
|
||||
'name' => '报损单新增',
|
||||
'parent_id' => 193
|
||||
],
|
||||
'loss_record.purchase_import' => [
|
||||
'id' => 1934,
|
||||
'name' => '报损单批量导入',
|
||||
'parent_id' => 192
|
||||
'parent_id' => 193
|
||||
],
|
||||
'DAILY_STOCK_RECORD' => [
|
||||
'id' => 194,
|
||||
'name' => '盘点记录',
|
||||
'parent_id' => 19,
|
||||
'show' => 1,
|
||||
],
|
||||
'daily_stock_record.index' => [
|
||||
'id' => 1941,
|
||||
'name' => '盘点记录首页',
|
||||
'parent_id' => 194
|
||||
],
|
||||
'daily_stock_record.store' => [
|
||||
'id' => 1942,
|
||||
'name' => '盘点记录新增',
|
||||
'parent_id' => 193
|
||||
],
|
||||
'daily_stock_record.purchase_import' => [
|
||||
'id' => 1943,
|
||||
'name' => '盘点记录批量导入',
|
||||
'parent_id' => 193
|
||||
],
|
||||
];
|
||||
|
||||
@ -12,7 +12,9 @@ use App\Http\Controllers\Group\GroupsController;
|
||||
use App\Http\Controllers\Business\BusinessOrderController;
|
||||
use App\Http\Controllers\Goods\GoodsSkuLocationController;
|
||||
use App\Http\Controllers\Goods\GoodsCombinationController;
|
||||
use App\Http\Controllers\Goods\WareHouseSkusController;
|
||||
use App\Http\Controllers\Supplier\DailyStockRecordController;
|
||||
use App\Http\Controllers\Supplier\LossRecordController;
|
||||
use App\Http\Controllers\Supplier\PurchaseRecordController;
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
@ -77,11 +79,12 @@ Route::middleware(['auth:api', 'check.permissions'])->group(function () {
|
||||
Route::resource('supplier', 'Supplier\SuppliersController', ['only' => ['index', 'update', 'store','destroy']]);
|
||||
//站内信
|
||||
Route::resource('website_message', 'Message\WebsiteMessageController', ['only' => ['index', 'update']]);
|
||||
//仓库管理 采购和报损
|
||||
Route::get('goods/ware_house/index', [WareHouseSkusController::class, 'index'])->name('goods.ware_house.index');
|
||||
Route::post('goods/ware_house/purchase_batch_store', [WareHouseSkusController::class, 'purchaseBatchStore'])->name('goods.ware_house.purchase_batch_store');
|
||||
Route::post('goods/ware_house/loss_batch_store', [WareHouseSkusController::class, 'lossBatchStore'])->name('goods.ware_house.loss_batch_store');
|
||||
|
||||
//仓库管理-采购单
|
||||
Route::resource('supplier/purchase_record', 'Supplier\PurchaseRecordController',['only' => ['index', 'store','update']]);
|
||||
//报损单
|
||||
Route::resource('supplier/loss_record', 'Supplier\LossRecordController',['only' => ['index', 'store','update']]);
|
||||
//仓库管理-盘点
|
||||
Route::resource('supplier/daily_stock_record', 'Supplier\DailyStockRecordController',['only' => ['index', 'store']]);
|
||||
});
|
||||
Route::get('stock/goods_skus', [GoodsSkusController::class, 'stockNum'])->middleware('auth:api');
|
||||
Route::get('goods/filter/{title}', [GoodsCombinationController::class, 'goodsSkus'])->middleware('auth:api');
|
||||
@ -121,7 +124,10 @@ Route::post('upload', [UploadController::class, 'store'])->name('upload.file');
|
||||
Route::get('goodsSkusList', [GoodsSkusController::class, 'goodsSkusList'])->name('goods_sku.list_for_goods_sku');
|
||||
|
||||
// 采购导入
|
||||
Route::post('goods/ware_house/purchase_import', [WareHouseSkusController::class, 'purchaseImport'])->name('goods.ware_house.purchase_import');
|
||||
Route::post('supplier/purchase_record/purchase_import', [PurchaseRecordController::class, 'purchaseImport'])->name('supplier.purchase_record.purchase_import');
|
||||
|
||||
// 上新导入
|
||||
Route::post('goods/ware_house/loss_import', [WareHouseSkusController::class, 'lossImport'])->name('goods.ware_house.loss_import');
|
||||
//报损导入
|
||||
Route::post('supplier/loss_record/loss_import', [LossRecordController::class, 'lossImport'])->name('supplier.loss_record.loss_import');
|
||||
|
||||
//新版盘点导入
|
||||
Route::post('supplier/daily_stock_record/inventory_import', [DailyStockRecordController::class, 'inventoryImport'])->name('supplier.daily_stock_record.inventory_import');
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user