|
|
@@ -538,13 +538,12 @@ sql;
|
|
|
return $arr;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
/**
|
|
|
* @param array $info
|
|
|
- * @return bool
|
|
|
+ * @return bool|int
|
|
|
* fulx 手持收货
|
|
|
*/
|
|
|
- public function fluxHandIn(array $info): bool
|
|
|
+ public function fluxHandIn(array $info)
|
|
|
{
|
|
|
$lotatt = array_filter($info, function ($key) {
|
|
|
return strpos($key, 'lotatt') === 0;
|
|
|
@@ -563,29 +562,34 @@ sql;
|
|
|
$db = DB::connection("oracle");
|
|
|
$db->beginTransaction();
|
|
|
try {
|
|
|
-// return DB::connection("oracle")->transaction(function () use ($info, $invlotatt, $who, $time) {
|
|
|
- //flux 批次号
|
|
|
+ $asnHeader = OracleDOCASNHeader::query()->where('asnno', $info['asnno'])->first();
|
|
|
+ $asnDetail = OracleDOCASNDetail::query()->where('asnno', $info['asnno'])
|
|
|
+ ->where('asnlineno', $info['asnlineno'])->where('sku', $info['sku'])->first();
|
|
|
+ // 1:flux 获取批次号
|
|
|
$lotNum = $this->getOrCreateLotNum($info, $invlotatt, $who, $time);
|
|
|
if (!$lotNum){$db->rollBack();return false;}
|
|
|
|
|
|
- //flux 创建入库事务
|
|
|
- $actTransactionLog = $this->setFluxActTransactionLog($info, $lotNum, $who, $time);
|
|
|
+ // 2:flux 判断当前入库是否超收
|
|
|
+ $res=$this->judgeOverCharge($info,$asnDetail);
|
|
|
+ if (!$res) return 1; //超收
|
|
|
+
|
|
|
+ // 3:flux 创建状态为创建的入库事务
|
|
|
+ $actTransactionLog = $this->setFluxActTransactionLog($info, $lotNum, $who, $time,$asnHeader,$asnDetail);
|
|
|
if (count($actTransactionLog) == 0){$db->rollBack();return false;}
|
|
|
- //flux 创建上架任务
|
|
|
- $res=$this->setFluxTskTaskListPA($info, $invlotatt, $actTransactionLog, $who, $time);
|
|
|
- if (!$res){$db->rollBack();return false;}
|
|
|
- //flux 完善库存余量
|
|
|
+
|
|
|
+ // 4:flux 新增一条上架任务记录
|
|
|
+ $this->setFluxTskTaskListPA($info, $invlotatt, $actTransactionLog, $who, $time);
|
|
|
+
|
|
|
+ // 5:flux 完善库存余量 入库完成修改库存余量
|
|
|
$this->updateFluxInv($info, $lotNum, $who, $time, $actTransactionLog);
|
|
|
- //flux 更新asn_detail 和 asn_header 状态
|
|
|
+
|
|
|
+ // 6: flux 更新 asn_detail 和 asn_header 状态
|
|
|
$result=$this->updateFluxAsn($info, $invlotatt, $time, $who);
|
|
|
- if ($result){
|
|
|
- $db->commit();
|
|
|
- return true;
|
|
|
- }else{
|
|
|
- $db->rollBack();
|
|
|
- return false;
|
|
|
- }
|
|
|
-// });
|
|
|
+ if (!$result){$db->rollBack();return false;}
|
|
|
+ // 7:入库完成 -> 事务状态改为完成
|
|
|
+ // $this->updateActTransactionLogStatus($actTransactionLog,$time);
|
|
|
+ $db->commit();
|
|
|
+ return true;
|
|
|
} catch (\Exception $e) {
|
|
|
$db->rollBack();
|
|
|
return false;
|
|
|
@@ -593,6 +597,34 @@ sql;
|
|
|
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * @param array $actTransactionLog
|
|
|
+ * @param $time
|
|
|
+ * 更改事务表状态
|
|
|
+ */
|
|
|
+// public function updateActTransactionLogStatus(array $actTransactionLog,$time)
|
|
|
+// {
|
|
|
+// $db = DB::connection("oracle");
|
|
|
+// $db->update(DB::raw("UPDATE ACT_TRANSACTION_LOG SET status = '99',edittime = TO_DATE(?,'yyyy-mm-dd hh24:mi:ss') WHERE transactionid = ?"),
|
|
|
+// [$time, $actTransactionLog['trid']]);
|
|
|
+//
|
|
|
+// }
|
|
|
+ /**
|
|
|
+ * @param array $info
|
|
|
+ * @param $asnDetail
|
|
|
+ * @return bool
|
|
|
+ * 判断是否超收
|
|
|
+ */
|
|
|
+ public function judgeOverCharge(array $info,$asnDetail): bool
|
|
|
+ {
|
|
|
+ //添加超收判断
|
|
|
+ $actTransactionLogQty = OracleActTransactionLog::query()->where('docno', $info['asnno'])
|
|
|
+ ->where('status','99')->where('transactiontype','IN')//事务状态,类型限定
|
|
|
+ ->where('doclineno', $info['asnlineno'])->where('fmsku', $info['sku'])->count('fmqty');
|
|
|
+ if ((int)($info['amount'] + $actTransactionLogQty) > (int)$asnDetail['expectedqty']) return false;
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* @param array $info
|
|
|
* @param array $invlotatt
|
|
|
@@ -670,7 +702,6 @@ sql;
|
|
|
public function updateFluxInv(array $info, $lotNum, $who, $time, array $actTransactionLog)
|
|
|
{
|
|
|
$db = DB::connection("oracle");
|
|
|
-// $db->transaction(function () use ($db, $info, $lotNum, $actTransactionLog, $who, $time) {
|
|
|
//更新 inv_lot 批次 库存表
|
|
|
$invLot = $db->selectOne(DB::raw("SELECT * FROM INV_LOT WHERE lotnum = ? AND customerid = ? AND sku = ? FOR UPDATE"), [
|
|
|
$lotNum, $info['customerid'], $info['sku']
|
|
|
@@ -722,7 +753,6 @@ sql;
|
|
|
$lotNum, $actTransactionLog['location'], $actTransactionLog['trackid'], $actTransactionLog['customerid'], $actTransactionLog['sku'], (int)$info['amount'], (int)$info['amount'], $time, $who, $time, $who,
|
|
|
]);
|
|
|
}
|
|
|
-// });
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -731,19 +761,17 @@ sql;
|
|
|
* @param $actTransactionLog
|
|
|
* @param $who
|
|
|
* @param $time
|
|
|
- * @return bool
|
|
|
* 生成上架任务
|
|
|
*/
|
|
|
- public function setFluxTskTaskListPA(array $info, array $invlotatt, $actTransactionLog, $who, $time): bool
|
|
|
+ public function setFluxTskTaskListPA(array $info, array $invlotatt, $actTransactionLog, $who, $time)
|
|
|
{
|
|
|
$db = DB::connection("oracle");
|
|
|
-// $db->transaction(function () use ($db, $info, $invlotatt, $actTransactionLog, $who, $time) {
|
|
|
$sql = <<<sql
|
|
|
INSERT INTO TSK_TASKLISTS VALUES(?,'1','PA',?,?,'ASN',?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,null,null,?,?,?,?,?,?,?,?,null,null,null,null,
|
|
|
0,0,0,0,null,?,null,null,null,?,TO_DATE(?,'yyyy-mm-dd hh24:mi:ss'),null,null,?,TO_DATE(?,'yyyy-mm-dd hh24:mi:ss'),?,TO_DATE(?,'yyyy-mm-dd hh24:mi:ss'),'N',null,null,
|
|
|
?,?,?,'N',null,?,'*',null,null,null,'N',null,null)
|
|
|
sql;
|
|
|
- return $db->insert(DB::raw($sql), [
|
|
|
+ $db->insert(DB::raw($sql), [
|
|
|
$actTransactionLog['tsid'], $actTransactionLog['customerid'], $actTransactionLog['sku'], $actTransactionLog['docno'], $actTransactionLog['doclineno'],
|
|
|
$actTransactionLog['lotNum'], $actTransactionLog['packid'], 'EA', $info['amount'], $info['amount'], $actTransactionLog['location'], $actTransactionLog['location'],
|
|
|
$actTransactionLog['trackid'], $actTransactionLog['lotNum'], $actTransactionLog['packid'], 'EA', $info['amount'], $info['amount'],
|
|
|
@@ -751,7 +779,6 @@ sql;
|
|
|
$invlotatt['lotatt05'], $invlotatt['lotatt06'], $invlotatt['lotatt07'], $invlotatt['lotatt08'], $actTransactionLog['trid'], $who, $time, null, null, null, null,
|
|
|
$actTransactionLog['userdefine1'], $actTransactionLog['userdefine2'], $actTransactionLog['userdefine3'], $actTransactionLog['warehouseid']
|
|
|
]);
|
|
|
-// });
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -759,24 +786,16 @@ sql;
|
|
|
* @param $lotNum
|
|
|
* @param $who
|
|
|
* @param $time
|
|
|
+ * @param $asnHeader
|
|
|
+ * @param $asnDetail
|
|
|
* @return array
|
|
|
* 创建入库事务
|
|
|
*/
|
|
|
- public function setFluxActTransactionLog(array $info, $lotNum, $who, $time): array
|
|
|
+ public function setFluxActTransactionLog(array $info, $lotNum, $who, $time,$asnHeader,$asnDetail): array
|
|
|
{
|
|
|
$db = DB::connection("oracle");
|
|
|
-// return $db->transaction(function () use ($db, $info, $lotNum, $time, $who) {
|
|
|
if ($info['trackNumber']) $trackNumber = $info['trackNumber'];
|
|
|
else $trackNumber = substr(md5($time), 0, 30);
|
|
|
- $asnHeader = OracleDOCASNHeader::query()->where('asnno', $info['asnno'])->first();
|
|
|
- $asnDetail = OracleDOCASNDetail::query()->where('asnno', $info['asnno'])
|
|
|
- ->where('asnlineno', $info['asnlineno'])->where('sku', $info['sku'])->first();
|
|
|
- //添加超收判断
|
|
|
- $actTransactionLogQty = OracleActTransactionLog::query()->where('docno', $info['asnno'])
|
|
|
- ->where('status','99')->where('transactiontype','IN')//事务状态,类型限定
|
|
|
- ->where('doclineno', $info['asnlineno'])->where('fmsku', $info['sku'])->count('fmqty');
|
|
|
- if ((int)($info['amount'] + $actTransactionLogQty) > (int)$asnDetail['expectedqty']) return [];
|
|
|
-
|
|
|
$sql = <<<sql
|
|
|
INSERT INTO ACT_TRANSACTION_LOG VALUES(?,'IN',?,?,?,?,'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,?,?,?,?,?,?,?,?,
|
|
|
@@ -799,7 +818,6 @@ sql;
|
|
|
'userdefine3' => $asnHeader->userdefine3, 'trackid' => $trackNumber
|
|
|
];
|
|
|
return $actTransactionLog;
|
|
|
-// });
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -820,7 +838,6 @@ sql;
|
|
|
|
|
|
$db = DB::connection("oracle");
|
|
|
list($num, $max) = $this->getLtNum();
|
|
|
-// return $db->transaction(function () use ($db, $info, $invlotatt, $num, $who, $time) {
|
|
|
$sql = <<<sql
|
|
|
INSERT INTO INV_LOT_ATT VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,TO_DATE(?,'yyyy-mm-dd hh24:mi:ss'),?,
|
|
|
TO_DATE(?,'yyyy-mm-dd hh24:mi:ss'),?,TO_DATE(?,'yyyy-mm-dd hh24:mi:ss'),?)
|
|
|
@@ -831,8 +848,6 @@ sql;
|
|
|
]);
|
|
|
$this->setLtNum();
|
|
|
return $num;
|
|
|
-// });
|
|
|
-
|
|
|
}
|
|
|
|
|
|
/**
|