Просмотр исходного кода

Merge branch 'zzd' of ssh://was.baoshi56.com:10022/var/git/bswas

LD 4 лет назад
Родитель
Сommit
7f3dade47a

+ 71 - 16
app/Http/Controllers/StorageController.php

@@ -5,6 +5,7 @@ namespace App\Http\Controllers;
 use App\Components\AsyncResponse;
 use App\MaterialBox;
 use App\Services\LogService;
+use App\ValueStore;
 use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\DB;
 
@@ -17,7 +18,7 @@ class StorageController extends Controller
         $asn = \request("asn");
         $ide = \request("ide");
         $barCode = \request("barCode");
-        $amount = \request("amount");
+        $amount = (int)\request("amount");
         //check info
         if (!$asn || !$ide || !$barCode || !$amount)$this->error("信息不完整");
         $fromLocation = 'HAIB1-03-03';//app("MaterialBoxService")->getBoxLocation($ide);
@@ -30,12 +31,41 @@ class StorageController extends Controller
 SELECT * FROM DOC_ASN_DETAILS LEFT JOIN BAS_SKU ON DOC_ASN_DETAILS.CUSTOMERID = BAS_SKU.CUSTOMERID AND DOC_ASN_DETAILS.SKU = BAS_SKU.SKU
 LEFT JOIN TSK_TASKLISTS ON DOC_ASN_DETAILS.ASNNO = TSK_TASKLISTS.DOCNO AND DOC_ASN_DETAILS.ASNLINENO = TSK_TASKLISTS.DOCLINENO
 WHERE ASNNO = ? AND (ALTERNATE_SKU1 = ? OR ALTERNATE_SKU2 = ? OR ALTERNATE_SKU3 = ?) AND RECEIVEDQTY >= ?
-  AND TASKPROCESS = '00' AND TASKTYPE = 'PA' AND FMQTY = ?
+  AND TASKPROCESS = '00' AND TASKTYPE = 'PA'
 sql;
-        $asn = DB::connection("oracle")->selectOne(DB::raw($sql),[$asn,$barCode,$barCode,$barCode,$amount,(int)$amount]);
-        if (!$asn)$this->error("ASN不存在或上架数量与入库数量不符");
+        $asns = DB::connection("oracle")->select(DB::raw($sql),[$asn,$barCode,$barCode,$barCode,$amount]);
+        if (!$asns)$this->error("ASN不存在或上架数量与入库数量不符");
+        $nums = [];
+        $result = null;
+        foreach ($asns as $index=>$asn){
+            if ((int)$asn->fmqty == $amount){$result=$index;break;}
+            $nums[] = (int)$asn->fmqty;
+        }
+        //flux上架
+        if ($result!==null)$this->fluxPA($asns[$result],$ide,$amount);
+        else{
+            $result = $this->twoSum($nums,$amount);
+            if (!$result)$this->error("无法匹配入库记录,检查您的上架数量");
+            DB::connection("oracle")->transaction(function ()use($result,$asns,$ide){
+                foreach ($result as $index){
+                    $this->fluxPA($asns[$index],$ide,(int)$asns[$index]->fmqty);
+                }
+            });
+        }
+        $this->success("OK");
+        //呼叫海柔进行物理上架,无论是否成功 皆视为已上架,失败逻辑另行处理
+        $result = app("ForeignHaiRoboticsService")->putWareHousing($fromLocation,'',$box->id);
+        LogService::log(__CLASS__,$result ? "缓存架上架任务下达成功" : "缓存架上架任务下达失败",json_encode(request()->input()));
+        if ($result){
+            app("CacheShelfService")->_stationCacheLightOn($fromLocation,$ide); //亮灯
+            $this->success();
+        }else $this->error("上架失败,请联系管理员处理");
+    }
 
+    public function fluxPA($asn,$ide,$amount)
+    {
         if (!$asn->taskid)$this->error("ASN单无此入库信息,禁止上架");
+
         $sql = <<<sql
 SELECT * FROM inv_lot_loc_id  WHERE lotnum = ? AND traceid = ? AND customerid= ?  and sku = ?
 sql;
@@ -59,7 +89,7 @@ sql;
                     $qty = $qty-$in->qty;
                 }
             }
-            $db->delete(DB::raw("DELETE FROM inv_lot_loc_id WHERE lotnum = ? AND traceid = ? AND traceid != '*'"),[
+            $db->delete(DB::raw("DELETE FROM inv_lot_loc_id WHERE lotnum = ? AND traceid = ? AND traceid != '*'  AND qty = 0"),[
                 $inv[0]->lotnum,$inv[0]->traceid
             ]);
             $invHistory = $db->selectOne(DB::raw("SELECT * FROM inv_lot_loc_id WHERE lotnum = ? AND locationid = ? AND customerid = ? AND sku = ? AND traceid = '*' FOR UPDATE"),[
@@ -78,7 +108,7 @@ INSERT INTO ACT_TRANSACTION_LOG VALUES(?,'PA',?,?,?,?,'ASN',?,?,?,?,?,?,?,?,TO_D
 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)
 sql;
-            $trid = 'W'.date('ymd').substr(\request("asn"),-2).rand(0,9);
+            $trid = $this->getTrNumber();
             $db->insert(DB::raw($sql),[
                 $trid,$asn->customerid,$asn->sku,
                 $asn->asnno,$asn->asnlineno,$inv[0]->lotnum,$asn->fmlocation,$asn->plantoid,$asn->packid,$asn->uom,$amount,$amount,'99',date("Y-m-d H:i:s"),$who,
@@ -86,6 +116,7 @@ sql;
                 '*','0','N','*',$asn->taskid_sequence,$asn->warehouseid,$asn->userdefine1,$asn->userdefine2,
                 $asn->userdefine3,$asn->userdefine4,$asn->userdefine5,'O'
             ]);
+            $this->setTrNumber();
             $sql = <<<sql
 update TSK_TASKLISTS set TASKPROCESS = '99',REASONCODE = 'OK',PLANTOLOCATION = ?,PLANLOGICALTOSEQUENCE = ?,
 CREATE_TRANSACTIONID = ?,OPENWHO = ?,OPENTIME = TO_DATE(?,'yyyy-mm-dd hh24:mi:ss'),
@@ -97,9 +128,9 @@ sql;
             ]);
         });
         //成功后应去修改ASN状态及数量 暂时不知上架后ASN应为状态
-/*        $sql = <<<sql
-UPDATE doc_asn_details SET linestatus = ?,edittime = TO_DATE(?,'yyyy-mm-dd hh24:mi:ss'),editwho = ? WHERE asnno = ? AND asnlineno = ?
-sql;*/
+        /*        $sql = <<<sql
+        UPDATE doc_asn_details SET linestatus = ?,edittime = TO_DATE(?,'yyyy-mm-dd hh24:mi:ss'),editwho = ? WHERE asnno = ? AND asnlineno = ?
+        sql;*/
         //if ($asn->expectedqty>$asn->receivedqty && $asn->linestatus!='30')DB::connection("oracle")->update(DB::raw($sql),['30',date("Y-m-d H:i:s"),$who,$asn->asnno,$asn->asnlineno]);
         if ($asn->expectedqty==$asn->receivedqty && $asn->linestatus=='40'){
             //DB::connection("oracle")->update(DB::raw($sql),['40',date("Y-m-d H:i:s"),$who,$asn->asnno,$asn->asnlineno]);
@@ -120,12 +151,36 @@ sql;*/
                 }
             }
         }
-        //呼叫海柔进行物理上架,无论是否成功 皆视为已上架,失败逻辑另行处理
-        $result = app("ForeignHaiRoboticsService")->putWareHousing($fromLocation,'',$box->id);
-        LogService::log(__CLASS__,$result ? "缓存架上架任务下达成功" : "缓存架上架任务下达失败",json_encode(request()->input()));
-        if ($result){
-            app("CacheShelfService")->_stationCacheLightOn($fromLocation,$ide); //亮灯
-            $this->success();
-        }else $this->error("上架失败,请联系管理员处理");
+    }
+
+    /**
+     * @param Integer[] $nums
+     * @param Integer $target
+     * @return Integer[]|null
+     */
+    function twoSum($nums, $target) {
+        $map=[];
+        for($i=0;$i<count($nums);$i++){
+            $complement=$target-$nums[$i];
+            if(array_key_exists($complement,$map)){
+                return [$map[$complement],$i];
+            }
+            $map[$nums[$i]]=$i;
+        }
+        return null;
+    }
+
+    function getTrNumber()
+    {
+        $val = ValueStore::query()->select("value")->where("name","flux_tr_number")->first();
+        if (!$val)$val = ValueStore::query()->create(["name"=>"flux_tr_number","value"=>'0']);
+        $max = $val->value+1;
+        $number = sprintf("%09d", $max);
+        return 'W'.$number;
+    }
+
+    function setTrNumber()
+    {
+        ValueStore::query()->select("value")->where("name","flux_tr_number")->update(["value"=>DB::raw("flux_tr_number+1")]);
     }
 }

+ 2 - 2
app/Services/ForeignHaiRoboticsService.php

@@ -467,8 +467,8 @@ class ForeignHaiRoboticsService
             'status' => "待处理",
             'station_id' => $station->id,
         ]);
-        $collection = new \Illuminate\Database\Eloquent\Collection();
-        $collection->append(StationTaskMaterialBox::query()->create([
+        $collection = new Collection();
+        $collection->add(StationTaskMaterialBox::query()->create([
             'station_id' => $station->id,
             'material_box_id'=>$boxId,
             'status'=>"待处理",

+ 11 - 2
app/Services/WaybillService.php

@@ -120,6 +120,17 @@ class WaybillService
 //            $this->searchWay($waybills,$param['wms_bill_number'],'waybills.wms_bill_number');
 //            unset($param['wms_bill_number']);
 //        }
+
+        if ($param["mileage"] ?? false){
+            $param["mileage"] = explode("-",$param["mileage"]);
+            $waybills->whereBetween("mileage",[(int)$param["mileage"][0] ?? 0,(int)$param["mileage"][1]] ?? 0);
+            unset($param["mileage"]);
+        }
+        if ($param["carrier_weight_other"] ?? false){
+            $param["carrier_weight_other"] = explode("-",$param["carrier_weight_other"]);
+            $waybills->whereBetween("carrier_weight_other",[(int)$param["carrier_weight_other"][0] ?? 0,(int)$param["carrier_weight_other"][1]] ?? 0);
+            unset($param["carrier_weight_other"]);
+        }
         $columnQueryRules=[
             'waybill_number' => ['batch' => ''],
             'carrier_bill' => ['batch' => ''],
@@ -136,8 +147,6 @@ class WaybillService
             'uriType' => ['alias' => 'type'],
             'id' => ['multi' => ','],
             'logistic_id' => ['multi' => ','],
-            'mileage' => ['like' => ''],
-            'carrier_weight_other' => ['like' => ''],
         ];
         $waybills = app(QueryService::class)->query($param,$waybills,$columnQueryRules,"waybills");
         return $waybills;