| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- <?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状态及数量
- }
- }
|