|
@@ -3,7 +3,6 @@
|
|
|
namespace App\Services;
|
|
namespace App\Services;
|
|
|
|
|
|
|
|
use App\CommodityMaterialBoxModel;
|
|
use App\CommodityMaterialBoxModel;
|
|
|
-use App\Log;
|
|
|
|
|
use App\Station;
|
|
use App\Station;
|
|
|
use App\StationTask;
|
|
use App\StationTask;
|
|
|
use App\StationTaskMaterialBox;
|
|
use App\StationTaskMaterialBox;
|
|
@@ -128,12 +127,12 @@ class StorageService
|
|
|
DB::beginTransaction();
|
|
DB::beginTransaction();
|
|
|
try{
|
|
try{
|
|
|
//get flux
|
|
//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;
|
|
$ide = $task->materialBox->code;
|
|
|
DB::connection("oracle")->beginTransaction();
|
|
DB::connection("oracle")->beginTransaction();
|
|
|
try{
|
|
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();
|
|
DB::connection("oracle")->rollBack();
|
|
|
return false;
|
|
return false;
|
|
|
};
|
|
};
|
|
@@ -418,22 +417,21 @@ sql;
|
|
|
/**
|
|
/**
|
|
|
* 将任务在flux上架
|
|
* 将任务在flux上架
|
|
|
*
|
|
*
|
|
|
- * @param $asn
|
|
|
|
|
|
|
+ * @param \stdClass $task
|
|
|
* @param $ide
|
|
* @param $ide
|
|
|
- * @param $amount
|
|
|
|
|
* @return bool
|
|
* @return bool
|
|
|
* @throws \Throwable
|
|
* @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
|
|
$sql = <<<sql
|
|
|
SELECT * FROM inv_lot_loc_id WHERE lotnum = ? AND traceid = ? AND customerid= ? and sku = ? and qty = {$amount}
|
|
SELECT * FROM inv_lot_loc_id WHERE lotnum = ? AND traceid = ? AND customerid= ? and sku = ? and qty = {$amount}
|
|
|
sql;
|
|
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;//余量与入库不符
|
|
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 = DB::connection("oracle");
|
|
|
$db->delete(DB::raw("DELETE FROM inv_lot_loc_id WHERE lotnum = ? AND traceid = ? AND traceid != '*' AND qty = 0"),[
|
|
$db->delete(DB::raw("DELETE FROM inv_lot_loc_id WHERE lotnum = ? AND traceid = ? AND traceid != '*' AND qty = 0"),[
|
|
|
$inv->lotnum,$inv->traceid
|
|
$inv->lotnum,$inv->traceid
|
|
@@ -452,15 +450,15 @@ sql;
|
|
|
$sql = <<<sql
|
|
$sql = <<<sql
|
|
|
INSERT INTO ACT_TRANSACTION_LOG VALUES(?,'PA',?,?,?,?,'ASN',?,?,?,?,?,?,?,?,TO_DATE(?,'yyyy-mm-dd hh24:mi:ss'),?,
|
|
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,'*',?,?,?,?,?,?,?,
|
|
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;
|
|
sql;
|
|
|
list($trid,$max) = $this->getTrNumber();
|
|
list($trid,$max) = $this->getTrNumber();
|
|
|
$db->insert(DB::raw($sql),[
|
|
$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);
|
|
$this->setTrNumber($max);
|
|
|
$sql = <<<sql
|
|
$sql = <<<sql
|
|
@@ -472,28 +470,31 @@ sql;
|
|
|
$db->update(DB::raw($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
|
|
$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;
|
|
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(将缓存架料箱入库)
|
|
* put cache rack box to warehousing(将缓存架料箱入库)
|
|
|
*
|
|
*
|