Commit 12d5051c authored by luhongguang's avatar luhongguang

update:tcc try

parent bf78699f
......@@ -4,6 +4,7 @@ namespace App\Services\tcc;
use App\Exception\custom\GoodsException;
use App\Models\goods\mysql\GoodsSku;
use App\Models\goods\mysql\PindanGoodsSku;
use App\Models\goods\mysql\Tcc;
use App\Models\marketing\mysql\Marketing;
......@@ -47,6 +48,23 @@ class Tcc2Service
return self::TCC_RESULT_SUCCESS;
}
if ($isPindan) {
return self::pindanGoodsTry($tid, $keys, $goodsInfoList);
} else {
return self::generalGoodsTry($tid, $keys, $goodsInfoList);
}
}
/**
* 普通商品库存 try
* @param $tid
* @param $keys
* @param $goodsInfoList
* @return bool
* @throws GoodsException
*/
private static function generalGoodsTry($tid, $keys, $goodsInfoList)
{
if (!empty($goodsInfoList)) {
GoodsSku::beginTransaction();
foreach ($goodsInfoList as $item) {
......@@ -84,11 +102,54 @@ class Tcc2Service
return self::TCC_RESULT_SUCCESS;
}
private static function generalGoodsTry()
/**
* 拼单商品库存 try
* @param $tid
* @param $keys
* @param $goodsInfoList
* @return bool
* @throws GoodsException
*/
private static function pindanGoodsTry($tid, $keys, $goodsInfoList)
{
if (!empty($goodsInfoList)) {
PindanGoodsSku::beginTransaction();
foreach ($goodsInfoList as $item) {
$goodsSkuId = $item["goods_sku_id"];
$num = $item["num"];
$sku = PindanGoodsSku::getRecord(["goods_sku_id" => $goodsSkuId]
, ["goods_sku_id", "inventory_rest", "inventory_lock", "online_status"]);
if ($sku["online_status"] == GoodsSku::ONLINE_STATUS_ONLINE) {
//条件加上乐观锁
$rowCount = PindanGoodsSku::save([
"inventory_lock" => $sku["inventory_lock"] + $num,
"inventory_rest" => $sku["inventory_rest"] - $num,
], ["goods_sku_id" => $goodsSkuId, "inventory_rest[>=]" => $num]);
if ($rowCount <= 0) {
PindanGoodsSku::rollback();
throw new GoodsException(["cus" => 24]);
}
} else {
PindanGoodsSku::rollback();
return self::TCC_RESULT_FAIL;
}
}
Tcc::save([
"tid" => $tid,
"goods_data" => $keys,
"status" => Tcc::STATUS_T_SUCCESS,
]);
if (!PindanGoodsSku::commit()) {
PindanGoodsSku::rollback();
return self::TCC_RESULT_FAIL;
}
}
return self::TCC_RESULT_SUCCESS;
}
/**
* 下单 商品tcc confirm
* @param $keys
......
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