error("信息不完整"); $sql = <<selectOne(DB::raw($sql),[$asn,$barCode,$barCode]); if (!$asn || $asn->receivedqty_each<$amount)$this->error("ASN不存在或数量异常"); $sql = <<selectOne(DB::raw($sql),[$asn->customerid,$asn->sku,$asn->asnno,$asn->asnlineno]); if (!$act)$this->error("没有入库记录"); $sql = <<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 = <<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状态及数量 } }