Commit 1ef06216 authored by luhongguang's avatar luhongguang

update:商品tcc优化

parent 8917c141
......@@ -26,13 +26,10 @@ class Tcc2Service
return self::TCC_RESULT_FAIL;
}
$goodsSkuIds = $numList = [];
foreach ($goodsInfoList as $item) {
if (empty($item["goods_sku_id"]) || empty($item["num"])) {
return self::TCC_RESULT_FAIL;
}
$goodsSkuIds[] = $item["goods_sku_id"];
$numList[$item["goods_sku_id"]] = $item["num"];
}
$tccInfo = self::getTccRecord($tid);
......@@ -46,19 +43,14 @@ class Tcc2Service
return self::TCC_RESULT_SUCCESS;
}
$skus = GoodsSku::getRecords(["goods_sku_id" => $goodsSkuIds]
, ["goods_sku_id", "inventory_rest", "inventory_lock", "online_status"]);
if (!empty($skus)) {
if (!empty($goodsInfoList)) {
GoodsSku::beginTransaction();
foreach ($skus as $sku) {
$goodsSkuId = $sku["goods_sku_id"];
foreach ($goodsInfoList as $item) {
$goodsSkuId = $item["goods_sku_id"];
$num = $item["num"];
$sku = GoodsSku::getRecord(["goods_sku_id" => $goodsSkuId]
, ["goods_sku_id", "inventory_rest", "inventory_lock", "online_status"]);
if ($sku["online_status"] == GoodsSku::ONLINE_STATUS_ONLINE) {
if (empty($numList[$goodsSkuId])) {
return self::TCC_RESULT_FAIL;
}
$num = $numList[$goodsSkuId];
//条件加上乐观锁
$rowCount = GoodsSku::save([
"inventory_lock" => $sku["inventory_lock"] + $num,
......@@ -92,7 +84,8 @@ class Tcc2Service
* 下单 商品tcc confirm
* @param $keys
* @param $tid
* @return int
* @return bool
* @throws GoodsException
*/
public static function placeAnOrderConfirm($keys, $tid)
{
......@@ -101,13 +94,10 @@ class Tcc2Service
return self::TCC_RESULT_FAIL;
}
$goodsSkuIds = $numList = [];
foreach ($goodsInfoList as $item) {
if (empty($item["goods_sku_id"]) || empty($item["num"])) {
return self::TCC_RESULT_FAIL;
}
$goodsSkuIds[] = $item["goods_sku_id"];
$numList[$item["goods_sku_id"]] = $item["num"];
}
$tccInfo = self::getTccRecord($tid);
......@@ -125,17 +115,15 @@ class Tcc2Service
return self::TCC_RESULT_FAIL;
}
$skus = GoodsSku::getRecords(["goods_sku_id" => $goodsSkuIds]
, ["goods_sku_id", "total_amount_order", "inventory_lock", "online_status"]);
if (!empty($skus)) {
if (!empty($goodsInfoList)) {
GoodsSku::beginTransaction();
foreach ($skus as $sku) {
$goodsSkuId = $sku["goods_sku_id"];
foreach ($goodsInfoList as $item) {
$goodsSkuId = $item["goods_sku_id"];
$num = $item["num"];
$sku = GoodsSku::getRecord(["goods_sku_id" => $goodsSkuId]
, ["goods_sku_id", "inventory_rest", "total_amount_order", "inventory_lock", "online_status"]);
if (!empty($sku["inventory_lock"]) && $sku["online_status"] == GoodsSku::ONLINE_STATUS_ONLINE) {
if (empty($numList[$goodsSkuId])) {
return self::TCC_RESULT_FAIL;
}
$num = $numList[$goodsSkuId];
//条件加上乐观锁
$rowCount = GoodsSku::save([
......@@ -176,13 +164,10 @@ class Tcc2Service
return self::TCC_RESULT_FAIL;
}
$goodsSkuIds = $numList = [];
foreach ($goodsInfoList as $item) {
if (empty($item["goods_sku_id"]) || empty($item["num"])) {
return self::TCC_RESULT_FAIL;
}
$goodsSkuIds[] = $item["goods_sku_id"];
$numList[$item["goods_sku_id"]] = $item["num"];
}
$tccInfo = self::getTccRecord($tid);
......@@ -202,16 +187,13 @@ class Tcc2Service
return self::TCC_RESULT_SUCCESS;
}
$skus = GoodsSku::getRecords(["goods_sku_id" => $goodsSkuIds]
, ["goods_sku_id", "inventory_rest", "inventory_lock", "total_amount_order", "online_status"]);
if (!empty($skus)) {
if (!empty($goodsInfoList)) {
GoodsSku::beginTransaction();
foreach ($skus as $sku) {
$goodsSkuId = $sku["goods_sku_id"];
if (empty($numList[$goodsSkuId])) {
return self::TCC_RESULT_FAIL;
}
$num = $numList[$goodsSkuId];
foreach ($goodsInfoList as $item) {
$goodsSkuId = $item["goods_sku_id"];
$num = $item["num"];
$sku = GoodsSku::getRecord(["goods_sku_id" => $goodsSkuId]
, ["goods_sku_id", "inventory_rest", "inventory_lock", "total_amount_order", "online_status"]);
//T时候执行C2,条件加上乐观锁
if ($tccInfo["status"] == Tcc::STATUS_T_SUCCESS) {
......@@ -224,6 +206,7 @@ class Tcc2Service
throw new GoodsException(["cus" => 31]);
}
}
//T时候执行C2,条件加上乐观锁
if ($tccInfo["status"] == Tcc::STATUS_C1_SUCCESS) {
$rowCount = GoodsSku::save([
......
......@@ -9,7 +9,7 @@ use App\Models\goods\mysql\GoodsSku;
use App\Services\goods\GoodsService;
use Api\PhpUtils\Log\DaemonLog;
class Goods implements DaemonServiceInterface
{
public function run()
{
sleep(2);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment