|
|
@@ -0,0 +1,87 @@
|
|
|
+<?php
|
|
|
+
|
|
|
+namespace App\Http\Controllers;
|
|
|
+
|
|
|
+use App\Components\AsyncResponse;
|
|
|
+use Illuminate\Support\Facades\Auth;
|
|
|
+use Illuminate\Support\Facades\DB;
|
|
|
+
|
|
|
+class StorageController extends Controller
|
|
|
+{
|
|
|
+ use AsyncResponse;
|
|
|
+
|
|
|
+ public function putShelf()
|
|
|
+ {
|
|
|
+ $asn = \request("asn");
|
|
|
+ $ide = \request("ide");
|
|
|
+ $barCode = \request("barCode");
|
|
|
+ $amount = \request("amount");
|
|
|
+ if (!$asn || !$ide || !$barCode || !$amount)$this->error("信息不完整");
|
|
|
+ $sql = <<<sql
|
|
|
+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
|
|
|
+WHERE asnno = ? AND (ALTERNATE_SKU1 = ? OR ALTERNATE_SKU2 = ?)
|
|
|
+sql;
|
|
|
+ $asn = DB::connection("oracle")->selectOne(DB::raw($sql),[$asn,$barCode,$barCode]);
|
|
|
+ if (!$asn || $asn->receivedqty_each<$amount)$this->error("ASN不存在或数量异常");
|
|
|
+ $sql = <<<sql
|
|
|
+SELECT fmlotnum,fmlocation,toid FROM ACT_TRANSACTION_LOG WHERE transactiontype = 'IN' AND fmcustomerid = ? AND fmsku = ? AND docno = ? AND doclineno = ? AND doctype = 'ASN' AND pa_flag = 'Y'
|
|
|
+sql;
|
|
|
+ $act = DB::connection("oracle")->selectOne(DB::raw($sql),[$asn->customerid,$asn->sku,$asn->asnno,$asn->asnlineno]);
|
|
|
+ if (!$act)$this->error("没有入库记录");
|
|
|
+ $sql = <<<sql
|
|
|
+SELECT * FROM inv_lot_loc_id WHERE lotnum = ? AND traceid = ? AND customerid= ? and sku = ?
|
|
|
+sql;
|
|
|
+ $inv = DB::connection("oracle")->select(DB::raw($sql),[$act->fmlotnum,$act->toid,$asn->customerid,$asn->sku]);
|
|
|
+ if (!$inv)$this->error("余量与入库不符");
|
|
|
+ DB::transaction(function ()use($inv,$amount,$ide,$asn,$act){
|
|
|
+ $db = DB::connection("oracle");
|
|
|
+ $qty = $amount;
|
|
|
+ foreach ($inv as $in){
|
|
|
+ if ($qty==0)break;
|
|
|
+ if ($in->qty > $qty){
|
|
|
+ $db->update(DB::raw("update inv_lot_loc_id set qty = qty-?,qtymvout = qty-? where lotnum = ? and locationid = ? and traceid = ?"),[
|
|
|
+ $qty,$qty,$in->lotnum,$in->locationid,$in->traceid
|
|
|
+ ]);//TODO 遗留问题:对应生成分配库位上架数量未被变更
|
|
|
+ $in->qty = $in->qty-$qty;
|
|
|
+ $qty = 0;
|
|
|
+ }else{
|
|
|
+ $db->delete(DB::raw("DELETE FROM inv_lot_loc_id WHERE lotnum = ? and locationid = ? and traceid = ?"),[
|
|
|
+ $in->lotnum,$in->locationid,$in->traceid
|
|
|
+ ]);
|
|
|
+ $qty = $qty-$in->qty;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if ($qty!=0){
|
|
|
+ $db->rollBack();
|
|
|
+ $this->error("上架数量与入库数量不符");
|
|
|
+ }
|
|
|
+ $db->delete(DB::raw("DELETE FROM inv_lot_loc_id WHERE lotnum = ? AND traceid = ? AND traceid != '*'"),[
|
|
|
+ $inv[0]->lotnum,$inv[0]->traceid
|
|
|
+ ]);
|
|
|
+ $inv = $db->selectOne(DB::raw("SELECT * FROM inv_lot_loc_id WHERE lotnum = ? AND locationid = ? AND customerid = ? AND sku = ? AND traceid = '*' FOR UPDATE"),[
|
|
|
+ $inv[0]->lotnum,$ide,$inv[0]->customerid,$inv[0]->sku
|
|
|
+ ]);
|
|
|
+ $who = 'WAS'.(Auth::user() ? '-'.Auth::user()["name"] : '');
|
|
|
+ if ($inv)$db->update(DB::raw("UPDATE inv_lot_loc_id SET qty = qty+? WHERE lotnum = ? AND locationid = ? AND traceid = '*'"),[
|
|
|
+ (int)$amount,$inv[0]->lotnum,$ide
|
|
|
+ ]);
|
|
|
+ else $db->insert(DB::raw("INSERT INTO inv_lot_loc_id VALUES(?,?,'*',?,?,?,0,0,0,0,0,0,TO_DATE(?,'yyyy-mm-dd hh24:mi:ss'),?,TO_DATE(?,'yyyy-mm-dd hh24:mi:ss'),?,0,0,0,0,0,'*',0,null)"),[
|
|
|
+ $inv[0]->lotnum,$ide,$inv[0]->customerid,$inv[0]->sku,$amount,date("Y-m-d H:i:s"),$who,
|
|
|
+ date("Y-m-d H:i:s"),$who
|
|
|
+ ]);
|
|
|
+ $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)
|
|
|
+sql;
|
|
|
+ $db->insert(DB::raw($sql),[
|
|
|
+ 'WA'.date('ymdHis').substr(\request("asn"),-2).rand(0,9),$asn->customerid,$asn->sku,
|
|
|
+ $asn->asnno,$asn->asnlineno,$inv[0]->lotnum,$act->fmlocation,$act->toid,$asn->packid,$asn->uom,$amount,$amount,$act->status,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[0]->lotnum,
|
|
|
+ 'QC_TASKID',$act->qc_sequence,$act->qc_flag,'*',$act->pa_sequence,$act->warehouseid,$act->userdefine1,$act->userdefine2,
|
|
|
+ $act->userdefine3,$act->userdefine4,$act->userdefine5,$act->edisendflag
|
|
|
+ ]);
|
|
|
+ });
|
|
|
+ //成功后应去修改ASN状态及数量
|
|
|
+ }
|
|
|
+}
|