Quellcode durchsuchen

无需校验库存占用

Zhouzhendong vor 4 Jahren
Ursprung
Commit
b3ff3aaff6

+ 1 - 1
app/Http/Controllers/StorageController.php

@@ -337,7 +337,7 @@ sql;
             })->orWhereHas("materialBox",function ($query)use($box){
                 /** @var Builder $query */
                 $query->where("code",$box);
-            })->lockForUpdate()->first();
+            })->lockForUpdate()->get();
             $station = Station::query()->where("code",$location)->first();
             $box = MaterialBox::query()->where("code",$box)->first();
             if (!$station || !$box)$this->error("库位或料箱未在WAS记录");

+ 3 - 3
app/Http/Controllers/TestController.php

@@ -149,9 +149,9 @@ class TestController extends Controller
     }
     public function test()
     {
-        $a = 1;
-        $b = 1;
-        dd(!!$a|!!$b);
+        $task = DB::connection("oracle")->selectOne(DB::raw("select * from TSK_TASKLISTS where taskid = 'TS32556054' and TASKID_SEQUENCE = 3"));
+        $ide = "IDE0000655";
+        dd(app("StorageService")->fluxPA($task,$ide));
     }
     public function orderCreateBill()
     {

+ 10 - 46
app/Services/StorageService.php

@@ -329,49 +329,11 @@ sql;
             DB::connection("oracle")->update(DB::raw("UPDATE TSK_TASKLISTS SET FMQTY = ?,FMQTY_EACH = ?,PLANTOQTY=?,PLANTOQTY_EACH=? WHERE TASKID = ? AND TASKID_SEQUENCE = ?"),[
                 $amount,$amount,$amount,$amount,$task->taskid,$task->taskid_sequence
             ]);
-            /*$invs = DB::connection("oracle")->select(DB::raw("SELECT * FROM INV_LOT_LOC_ID WHERE LOTNUM = ? AND LOCATIONID IN (?,?) AND TRACEID = ?"),[
-                $task->fmlotnum,$task->fmlocation,$task->plantolocation,$task->fmid
-            ]);
-            foreach ($invs as $inv){
-                if ($inv->locationid==$task->fmlocation){
-                    $columns = '';
-                    $values = '';
-                    DB::connection("oracle")->update(DB::raw("UPDATE inv_lot_loc_id SET qty = qty-?,qtymvout = qtymvout-? WHERE lotnum = ? AND locationid = ? AND traceid = ?"),[
-                        $amount,$amount,$inv->lotnum,$inv->locationid,$inv->traceid
-                    ]);
-                    foreach ($inv as $key=>$val){
-                        if (Str::upper($key)=='TRACEID') $val = "WAS".$task->fmid;
-                        if (Str::upper($key)=='QTY' || Str::upper($key)=='QTYMVOUT') $val = $amount;
-                        $columns .= $key.",";
-                        $values .= $this->valFormat($val) .",";
-                    }
-                    $columns = mb_substr($columns,0,-1);
-                    $values = mb_substr($values,0,-1);
-                    DB::connection("oracle")->insert(DB::raw("INSERT INTO inv_lot_loc_id({$columns}) VALUES({$values})"));
-                }
-                if ($inv->locationid==$task->plantolocation){
-                    $columns = '';
-                    $values = '';
-                    DB::connection("oracle")->update(DB::raw("UPDATE inv_lot_loc_id SET QTYPA = QTYPA-? WHERE lotnum = ? AND locationid = ? AND traceid = ?"),[
-                        $amount,$inv->lotnum,$inv->locationid,$inv->traceid
-                    ]);
-                    foreach ($inv as $key=>$val){
-                        if (Str::upper($key)=='TRACEID') $val = "WAS".$task->fmid;
-                        if (Str::upper($key)=='QTYPA') $val = $amount;
-                        $columns .= $key.",";
-                        $values .= $this->valFormat($val) .",";
-                    }
-                    $columns = mb_substr($columns,0,-1);
-                    $values = mb_substr($values,0,-1);
-                    DB::connection("oracle")->insert(DB::raw("INSERT INTO inv_lot_loc_id({$columns}) VALUES({$values})"));
-                }
-            }*/
             DB::connection("oracle")->commit();
         }catch(\Exception $e) {
             DB::connection("oracle")->rollBack();
             throw new \Exception("拆分任务失败:".$e->getMessage());
         }
-        //return DB::connection("oracle")->selectOne(DB::raw("SELECT * FROM TSK_TASKLISTS WHERE TASKID = ? AND TASKID_SEQUENCE = ?"),[$task->taskid,$seq]);
         return $task;
     }
 
@@ -416,22 +378,21 @@ sql;
         if (!$task->taskid)return false;//ASN单无此入库信息,禁止上架
         $amount = (int)$task->fmqty;
         $db = DB::connection("oracle");
-        $db->transaction(function ()use($db,$amount,$ide,$task,&$who){
+        $db->beginTransaction();
+        try {
             $sql = <<<sql
 SELECT * FROM inv_lot_loc_id  WHERE lotnum = ? AND traceid = ? AND locationid = ? AND customerid= ?  and sku = ? and qtypa >= {$amount} FOR UPDATE
 sql;
-            $inv = $db->selectOne(DB::raw($sql),[$task->plantolotnum,$task->plantoid,$task->plantolocation,$task->customerid,$task->sku]);
+            $inv = $db->selectOne(DB::raw($sql),[$task->fmlotnum,$task->fmid,$task->fmlocation,$task->customerid,$task->sku]);
             if (!$inv)return false;//余量与入库不符
 
             $inv1 = $db->update(DB::raw("UPDATE inv_lot_loc_id SET qty = qty - ? WHERE LOTNUM = ? AND LOCATIONID = ? AND TRACEID = ? AND traceid != '*'"),[
                 $amount,$task->fmlotnum,$task->fmlocation,$task->fmid
             ]);
-            $sql = "UPDATE inv_lot_loc_id SET qty = qtypa - ?";
-            if ($inv->qtypa==$amount)$sql .= ",LOCATIONID = '{$ide}'";
-            $inv2 = $db->update(DB::raw($sql." WHERE LOTNUM = ? AND LOCATIONID = ? AND TRACEID = ? AND traceid != '*'"),[
+            $db->update(DB::raw("UPDATE inv_lot_loc_id SET qtypa = qtypa - ? WHERE LOTNUM = ? AND LOCATIONID = ? AND TRACEID = ? AND traceid != '*'"),[
                 $amount,$task->plantolotnum,$task->plantolocation,$task->plantoid
             ]);
-            if ($inv1!=1 || $inv2!=1){
+            if ($inv1!=1){
                 $db->rollBack();
                 return false;//库存余量错误
             }
@@ -471,9 +432,12 @@ sql;
             ]);
             $task->who = $who;
             $this->checkAsn($task);
+            $db->commit();
             return true;
-        });
-        return true;
+        }catch (\Exception $e){
+            $db->rollBack();
+            return false;
+        }
     }
 
     private function checkAsn($task)