|
|
@@ -23,12 +23,14 @@ class MaterialBoxService
|
|
|
*
|
|
|
* @param MaterialBoxModel|\stdClass $model
|
|
|
* @param array $blacklist
|
|
|
+ * @param int $multi
|
|
|
*
|
|
|
- * @return MaterialBox|null
|
|
|
+ * @return MaterialBox|null|array
|
|
|
*/
|
|
|
- public function getAnEmptyBox(MaterialBoxModel $model,array $blacklist = []):?MaterialBox
|
|
|
+ public function getAnEmptyBox(MaterialBoxModel $model,array $blacklist = [], int $multi = 1)
|
|
|
{
|
|
|
$id = 0;
|
|
|
+ $tarBoxes = [];
|
|
|
while (true){
|
|
|
//检测WAS
|
|
|
$boxes = MaterialBox::query()->select('id',"code")
|
|
|
@@ -60,9 +62,14 @@ SELECT LOCATIONID FROM (SELECT LOCATIONID FROM (SELECT LOCATIONID,SUM(QTY+QTYPA)
|
|
|
LOCATIONID HAVING (COUNT(*)>={$model->maximum_kind})
|
|
|
sql;
|
|
|
foreach (DB::connection("oracle")->select(DB::raw($sql)) as $item)unset($ides[$item->locationid]);
|
|
|
- if ($ides)return current($ides);
|
|
|
+ foreach ($ides as $box){
|
|
|
+ $tarBoxes[] = $box;
|
|
|
+ $multi--;
|
|
|
+ if (!$multi)break 2;
|
|
|
+ }
|
|
|
}
|
|
|
- return null;
|
|
|
+ $len = count($tarBoxes);
|
|
|
+ return $len==1 ? $tarBoxes[0] : ($len==0 ? null : $tarBoxes);
|
|
|
}
|
|
|
|
|
|
public function checkHaiQ(array $boxCodes)
|
|
|
@@ -85,17 +92,28 @@ sql;
|
|
|
*
|
|
|
* @param integer|null $ownerId
|
|
|
* @param array $blacklist
|
|
|
+ * @param int $multi
|
|
|
*
|
|
|
- * @return MaterialBox|null
|
|
|
+ * @return MaterialBox|null|array
|
|
|
*/
|
|
|
- public function getAnEmptyBoxSortedByOwner(?int $ownerId=null, array $blacklist=[]):?MaterialBox
|
|
|
+ public function getAnEmptyBoxSortedByOwner(?int $ownerId=null, array $blacklist=[], int $multi = 1)
|
|
|
{
|
|
|
$models = app("MaterialBoxModelService")->getModelSortedByOwner($ownerId);
|
|
|
+ $tarBoxes = [];
|
|
|
foreach ($models as $model){
|
|
|
- $box = $this->getAnEmptyBox($model,$blacklist);
|
|
|
- if ($box)return $box;
|
|
|
+ $box = $this->getAnEmptyBox($model,$blacklist,$multi);
|
|
|
+ if (!$box)continue;
|
|
|
+ if (is_array($box)){
|
|
|
+ $tarBoxes = array_merge($tarBoxes,$box);
|
|
|
+ $multi -= count($box);
|
|
|
+ }else{
|
|
|
+ $tarBoxes[] = $box;
|
|
|
+ $multi--;
|
|
|
+ }
|
|
|
+ if (!$multi)break;
|
|
|
}
|
|
|
- return null;
|
|
|
+ $len = count($tarBoxes);
|
|
|
+ return $len==1 ? $tarBoxes[0] : ($len==0 ? null : $tarBoxes);
|
|
|
}
|
|
|
|
|
|
/**
|