| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- <?php
- namespace App\Services;
- use App\CommodityMaterialBoxModel;
- use App\StationTask;
- use App\StationTaskMaterialBox;
- use App\TaskTransaction;
- use App\Traits\ServiceAppAop;
- use App\Storage;
- use Illuminate\Support\Collection;
- use Illuminate\Support\Facades\DB;
- class StorageService
- {
- use ServiceAppAop;
- protected $modelClass=Storage::class;
- /**
- * 填充缓存架
- *
- * @param \Illuminate\Database\Eloquent\Collection $stations
- */
- public function paddingCacheShelf($stations)
- {
- $collection = new Collection();
- $stationCollection = new Collection();
- $blacklist = [];
- foreach ($stations as $station){
- $box = app("MaterialBoxService")->getAnEmptyBox($blacklist);
- if (!$box)continue;
- $task = StationTask::query()->create([
- 'status' => "待处理",
- 'station_id' => $station->id,
- ]);
- $collection->add(StationTaskMaterialBox::query()->create([
- 'station_id' => $station->id,
- 'material_box_id'=>$box->id,
- 'status'=>"待处理",
- 'type' => '取',
- 'station_task_id' => $task->id,
- ]));
- $stationCollection->add($station->code);
- $blacklist[] = $box->id;
- }
- app("ForeignHaiRoboticsService")->fetchGroup_multiLocation($stationCollection,$collection,'','立架出至缓存架');
- }
- /**
- * 释放库位占用
- *
- * @param StationTaskMaterialBox|\stdClass $stationTaskMaterialBox
- */
- public function releaseOccupation($stationTaskMaterialBox)
- {
- if ($stationTaskMaterialBox->station->station_type_id != 5)return;
- $storage = Storage::query()->where("material_box_id",$stationTaskMaterialBox->material_box_id)->first();
- if (!$storage)return;
- $update = [];
- if ($storage->status == 1)$update["status"] = 0;
- if ($storage->station_id)$update["station_id"] = null;
- if ($update)$storage->update($update);
- }
- /**
- * 检查临时事务标记处理一些特殊情况
- *
- * @param StationTaskMaterialBox|\stdClass $stationTaskMaterialBox
- */
- public function checkMark($stationTaskMaterialBox)
- {
- $task = TaskTransaction::query()->where("material_box_id",$stationTaskMaterialBox->material_box_id)
- ->where("status",0)->first();
- if (!$task)return;
- //蓝灯闪烁
- if ($task->type == '入库' && $task->mark == 1)app("CacheShelfService")->stationLightUp($stationTaskMaterialBox->station->code,null,'2','2');
- }
- /**
- * 入库
- *
- * @param integer $stationId
- * @param integer $boxId
- * @param integer $commodityId
- * @param integer $amount
- * @param integer $modelId
- */
- public function enterWarehouse($stationId, $boxId, $commodityId, $amount, $modelId)
- {
- DB::beginTransaction();
- try{
- $storage = Storage::query()->where("material_box_id",$boxId)->lockForUpdate()->first();
- $obj = [
- "station_id" => $stationId,
- "material_box_id" => $boxId,
- "commodity_id" => $commodityId,
- "amount" => $amount,
- "status" => 1,
- ];
- if ($storage){
- $obj["amount"] = DB::raw("amount+{$amount}");
- $storage->update($obj);
- $amount = (int)$storage->amount + (int)$amount;
- } else Storage::query()->create($obj);
- if ($commodityId){
- //维护料箱最大上限 用于半箱补货
- $model = CommodityMaterialBoxModel::query()->select("maximum")->where("commodity_id",$commodityId)
- ->where("material_box_model_id",$modelId)->first();
- if (!$model)CommodityMaterialBoxModel::query()->create(["commodity_id"=>$commodityId,"material_box_model_id"=>$modelId,"maximum"=>$amount]);
- if ($model && $model->maximum < $amount)$model->update(["maximum"=>$amount]);
- }
- DB::commit();
- }catch(\Exception $e){
- DB::rollBack();
- }
- }
- }
|