Zhouzhendong 4 anni fa
parent
commit
7556303f7d

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

@@ -46,16 +46,16 @@ class StorageController extends Controller
             });
         })->first();
         //get flux
-        $asns = app("StorageService")->getFluxTask($asn,$barCode,$amount);
-        if (!$asns)$this->error("ASN不存在或上架数量与入库数量不符");
+        $tasks = app("StorageService")->getFluxTask($asn,$barCode,$amount);
+        if (!$tasks)$this->error("改单无上架任务或不存在");
         //此处嵌套三层事务 以最高层级为准
         DB::beginTransaction(); //总体事务 回滚WAS错误操作
         try{
             //库存记录
             if (!app("StorageService")->enterWarehouse($station->id, $box->id, $item->commodity_id ?? null, $amount, $box->material_box_model_id))$this->error("库存异常");
 
-            DB::connection("oracle")->transaction(function ()use($asns,$ide){ //单体嵌套事务 回滚FLUX失败任务
-                foreach ($asns as $asn)if (!app("StorageService")->fluxPA($asn,$ide,(int)$asn->fmqty)){
+            DB::connection("oracle")->transaction(function ()use($tasks,$ide){ //单体嵌套事务 回滚FLUX失败任务
+                foreach ($tasks as $task)if (!app("StorageService")->fluxPA($task,$ide)){
                     DB::connection("oracle")->rollBack();
                     $this->error("FLUX上架失败");
                 };

+ 2 - 4
app/Services/StationService.php

@@ -100,10 +100,8 @@ class StationService
      */
     public function getMirrorMappingLocation($mirrorLocation)
     {
-        $station = Station::query()->select("parent_id")->where("code",$mirrorLocation)->first();
-        if (!$station)return null;
-        return Station::query()->where("station_type_id",5)
-            ->where("id",$station->parent_id)->first();
+        if (!$mirrorLocation)return null;
+        return Station::query()->where("code","M-".$mirrorLocation)->first();
     }
 
 }

+ 36 - 35
app/Services/StorageService.php

@@ -3,7 +3,6 @@
 namespace App\Services;
 
 use App\CommodityMaterialBoxModel;
-use App\Log;
 use App\Station;
 use App\StationTask;
 use App\StationTaskMaterialBox;
@@ -128,12 +127,12 @@ class StorageService
             DB::beginTransaction();
             try{
                 //get flux
-                $asns = $this->getFluxTask($task->doc_code,$task->bar_code,$task->amount);
-                if (!$asns)return false;
+                $tasks = $this->getFluxTask($task->doc_code,$task->bar_code,$task->amount);
+                if (!$tasks)return false;
                 $ide = $task->materialBox->code;
                 DB::connection("oracle")->beginTransaction();
                 try{
-                    foreach ($asns as $asn)if (!$this->fluxPA($asn,$ide,(int)$asn->fmqty)){
+                    foreach ($tasks as $t)if (!$this->fluxPA($t,$ide)){
                         DB::connection("oracle")->rollBack();
                         return false;
                     };
@@ -418,22 +417,21 @@ sql;
     /**
      * 将任务在flux上架
      *
-     * @param $asn
+     * @param \stdClass $task
      * @param $ide
-     * @param $amount
      * @return bool
      * @throws \Throwable
      */
-    public function fluxPA($asn,$ide,$amount)
+    public function fluxPA($task,$ide):bool
     {
-        if (!$asn->taskid)return false;//ASN单无此入库信息,禁止上架
-
+        if (!$task->taskid)return false;//ASN单无此入库信息,禁止上架
+        $amount = (int)$task->fmqty;
         $sql = <<<sql
 SELECT * FROM inv_lot_loc_id  WHERE lotnum = ? AND traceid = ? AND customerid= ?  and sku = ? and qty = {$amount}
 sql;
-        $inv = DB::connection("oracle")->selectOne(DB::raw($sql),[$asn->fmlotnum,$asn->plantoid,$asn->customerid,$asn->sku]);
+        $inv = DB::connection("oracle")->selectOne(DB::raw($sql),[$task->fmlotnum,$task->fmid,$task->customerid,$task->sku]);
         if (!$inv)return false;//余量与入库不符
-        DB::connection("oracle")->transaction(function ()use($inv,$amount,$ide,$asn,&$who){
+        DB::connection("oracle")->transaction(function ()use($inv,$amount,$ide,$task,&$who){
             $db = DB::connection("oracle");
             $db->delete(DB::raw("DELETE FROM inv_lot_loc_id WHERE lotnum = ? AND traceid = ? AND traceid != '*'  AND qty = 0"),[
                 $inv->lotnum,$inv->traceid
@@ -452,15 +450,15 @@ sql;
             $sql = <<<sql
 INSERT INTO ACT_TRANSACTION_LOG VALUES(?,'PA',?,?,?,?,'ASN',?,?,?,?,?,?,?,?,TO_DATE(?,'yyyy-mm-dd hh24:mi:ss'),?,
 TO_DATE(?,'yyyy-mm-dd hh24:mi:ss'),?,0,0,0,0,TO_DATE(?,'yyyy-mm-dd hh24:mi:ss'),?,?,null,null,null,'*',?,?,?,?,?,?,?,
-?,?,?,?,?,'N',null,?,?,?,?,?,?,?,null,null)
+?,?,?,?,?,'N',null,?,?,?,?,null,null,null,?,null)
 sql;
             list($trid,$max) = $this->getTrNumber();
             $db->insert(DB::raw($sql),[
-                $trid,$asn->customerid,$asn->sku,
-                $asn->asnno,$asn->asnlineno,$inv->lotnum,$asn->fmlocation,$asn->plantoid,$asn->packid,$asn->uom,$amount,$amount,'99',date("Y-m-d H:i:s"),$who,
-                date("Y-m-d H:i:s"),$who,date("Y-m-d H:i:s"),$asn->customerid,$asn->sku,$ide,$who,$asn->packid,$asn->uom,$amount,$amount,$inv->lotnum,
-                '*','0','N','*',$asn->taskid_sequence,$asn->warehouseid,$asn->userdefine1,$asn->userdefine2,
-                $asn->userdefine3,$asn->userdefine4,$asn->userdefine5,'O'
+                $trid,$task->customerid,$task->sku,
+                $task->docno,$task->doclineno,$inv->lotnum,$task->fmlocation,$task->fmid,$task->fmpackid,$task->fmuom,$amount,$amount,'99',date("Y-m-d H:i:s"),$who,
+                date("Y-m-d H:i:s"),$who,date("Y-m-d H:i:s"),$task->customerid,$task->sku,$ide,$who,$task->fmpackid,$task->fmuom,$amount,$amount,$inv->lotnum,
+                '*','0','N','*',$task->taskid_sequence,$task->warehouseid,$task->userdefine1,$task->userdefine2,
+                $task->userdefine3,'O'
             ]);
             $this->setTrNumber($max);
             $sql = <<<sql
@@ -472,28 +470,31 @@ sql;
             $db->update(DB::raw($sql),[
                 $ide,'0',$trid,$who,date("Y-m-d H:i:s"),$who,date("Y-m-d H:i:s"),date("Y-m-d H:i:s"),$who,$asn->taskid,$asn->taskid_sequence
             ]);
+            $task->who = $who;
+            $this->checkAsn($task);
         });
-        if ($asn->expectedqty==$asn->receivedqty && $asn->linestatus=='40'){
-            $check = DB::connection("oracle")->selectOne(DB::raw("SELECT 1 FROM DOC_ASN_DETAILS WHERE ASNNO = ? AND LINESTATUS != '40'"),[$asn->asnno]);
-            if (!$check){
-                $logs = DB::connection("oracle")->select(DB::raw("SELECT SUM(FMQTY) qty,TRANSACTIONTYPE FROM ACT_TRANSACTION_LOG WHERE DOCNO = ? AND TRANSACTIONTYPE IN ('PA','IN') GROUP BY TRANSACTIONTYPE"),[$asn->asnno]);
-                $paQty = 0;
-                $inQty = 0;
-                foreach ($logs as $log){
-                    if ($log->transactiontype == 'IN')$inQty = $log->qty;
-                    else $paQty = $log->qty;
-                }
-                if ($paQty == $inQty){
-                    DB::connection("oracle")->update(DB::raw("UPDATE DOC_ASN_HEADER SET asnstatus = '99',edittime = TO_DATE(?,'yyyy-mm-dd hh24:mi:ss'),editwho = ? WHERE asnno = ?"),
-                        [date("Y-m-d H:i:s"),$who,$asn->asnno]);
-                    DB::connection("oracle")->update(DB::raw("UPDATE DOC_ASN_DETAILS SET linestatus = '99',edittime = TO_DATE(?,'yyyy-mm-dd hh24:mi:ss'),editwho = ? WHERE asnno = ?"),
-                        [date("Y-m-d H:i:s"),$who,$asn->asnno]);
-                }
-            }
-        }
         return true;
     }
 
+    private function checkAsn($task)
+    {
+        $sql = <<<SQL
+SELECT 1 FROM DOC_ASN_DETAILS WHERE ASNNO = ? AND LINESTATUS != '40'
+SQL;
+        $asn = DB::connection("oracle")->selectOne(DB::raw($sql),[$task->docno]);
+        if ($asn)return;
+
+        $sql = <<<SQL
+SELECT 1 FROM TSK_TASKLISTS WHERE TASKPROCESS != '99' AND TASKTYPE = 'PA' AND DOCNO = ?
+SQL;
+        $task = DB::connection("oracle")->selectOne(DB::raw($sql),[$task->docno]);
+        if ($task)return;
+
+        DB::connection("oracle")->update(DB::raw("UPDATE DOC_ASN_HEADER SET asnstatus = '99',edittime = TO_DATE(?,'yyyy-mm-dd hh24:mi:ss'),editwho = ? WHERE asnno = ?"),
+            [date("Y-m-d H:i:s"),$task->who,$task->docno]);
+        DB::connection("oracle")->update(DB::raw("UPDATE DOC_ASN_DETAILS SET linestatus = '99',edittime = TO_DATE(?,'yyyy-mm-dd hh24:mi:ss'),editwho = ? WHERE asnno = ?"),
+            [date("Y-m-d H:i:s"),$task->who,$task->docno]);
+    }
     /**
      * put cache rack box to warehousing(将缓存架料箱入库)
      *