Commit aade92c2 authored by luhongguang's avatar luhongguang

update:tcc更新

parent 12d5051c
......@@ -119,7 +119,7 @@ class Tcc2Service
$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) {
if ($sku["online_status"] == PindanGoodsSku::ONLINE_STATUS_ONLINE) {
//条件加上乐观锁
$rowCount = PindanGoodsSku::save([
"inventory_lock" => $sku["inventory_lock"] + $num,
......@@ -164,10 +164,14 @@ class Tcc2Service
return self::TCC_RESULT_FAIL;
}
$isPindan = false;
foreach ($goodsInfoList as $item) {
if (empty($item["goods_sku_id"]) || empty($item["num"])) {
return self::TCC_RESULT_FAIL;
}
if (!empty($item["marketing_id"]) && !empty($item["marketing_type"]) && $item["marketing_type"] == Marketing::MARKETING_TYPE_PINDAN) {
$isPindan = true;
}
}
$tccInfo = self::getTccRecord($tid);
......@@ -185,6 +189,22 @@ class Tcc2Service
return self::TCC_RESULT_FAIL;
}
if ($isPindan) {
return self::pindanGoodsConfirm($tid, $goodsInfoList);
} else {
return self::generalGoodsConfirm($tid, $goodsInfoList);
}
}
/**
* 普通商品库存 confirm
* @param $tid
* @param $goodsInfoList
* @return bool
* @throws GoodsException
*/
private static function generalGoodsConfirm($tid, $goodsInfoList)
{
if (!empty($goodsInfoList)) {
GoodsSku::beginTransaction();
foreach ($goodsInfoList as $item) {
......@@ -220,6 +240,50 @@ class Tcc2Service
return self::TCC_RESULT_SUCCESS;
}
/**
* 拼单商品库存 confirm
* @param $tid
* @param $goodsInfoList
* @return bool
* @throws GoodsException
*/
private static function pindanGoodsConfirm($tid, $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", "total_amount_order", "inventory_lock", "online_status"]);
if (!empty($sku["inventory_lock"]) && $sku["online_status"] == PindanGoodsSku::ONLINE_STATUS_ONLINE) {
//条件加上乐观锁
$rowCount = PindanGoodsSku::save([
"inventory_lock" => $sku["inventory_lock"] - $num,
"total_amount_order" => $sku["total_amount_order"] + $num,
], ["goods_sku_id" => $goodsSkuId, "inventory_lock[>=]" => $num]);
if ($rowCount <= 0) {
PindanGoodsSku::rollback();
throw new GoodsException(["cus" => 31]);
}
} else {
PindanGoodsSku::rollback();
return self::TCC_RESULT_FAIL;
}
}
Tcc::save(["status" => Tcc::STATUS_C1_SUCCESS,], ["tid" => $tid]);
if (!PindanGoodsSku::commit()) {
PindanGoodsSku::rollback();
return self::TCC_RESULT_FAIL;
}
}
return self::TCC_RESULT_SUCCESS;
}
/**
* 下单 商品tcc cancel
* @param $keys
......@@ -234,10 +298,14 @@ class Tcc2Service
return self::TCC_RESULT_FAIL;
}
$isPindan = false;
foreach ($goodsInfoList as $item) {
if (empty($item["goods_sku_id"]) || empty($item["num"])) {
return self::TCC_RESULT_FAIL;
}
if (!empty($item["marketing_id"]) && !empty($item["marketing_type"]) && $item["marketing_type"] == Marketing::MARKETING_TYPE_PINDAN) {
$isPindan = true;
}
}
$tccInfo = self::getTccRecord($tid);
......@@ -257,6 +325,23 @@ class Tcc2Service
return self::TCC_RESULT_SUCCESS;
}
if ($isPindan) {
return self::pindanGoodsCancel($tid, $tccInfo, $goodsInfoList);
} else {
return self::generalGoodsCancel($tid, $tccInfo, $goodsInfoList);
}
}
/**
* 普通商品库存 cancel
* @param $tid
* @param $tccInfo
* @param $goodsInfoList
* @return bool
* @throws GoodsException
*/
public static function generalGoodsCancel($tid, $tccInfo, $goodsInfoList)
{
if (!empty($goodsInfoList)) {
GoodsSku::beginTransaction();
foreach ($goodsInfoList as $item) {
......@@ -301,6 +386,60 @@ class Tcc2Service
return self::TCC_RESULT_SUCCESS;
}
/**
* 拼单商品库存 cancel
* @param $tid
* @param $tccInfo
* @param $goodsInfoList
* @return bool
* @throws GoodsException
*/
public static function pindanGoodsCancel($tid, $tccInfo, $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", "total_amount_order", "online_status"]);
//T时候执行C2,条件加上乐观锁
if ($tccInfo["status"] == Tcc::STATUS_T_SUCCESS) {
$rowCount = PindanGoodsSku::save([
"inventory_lock" => $sku["inventory_lock"] - $num,
"inventory_rest" => $sku["inventory_rest"] + $num,
], ["goods_sku_id" => $goodsSkuId, "inventory_lock[>=]" => $num]);
if ($rowCount <= 0) {
PindanGoodsSku::rollback();
throw new GoodsException(["cus" => 31]);
}
}
//T时候执行C2,条件加上乐观锁
if ($tccInfo["status"] == Tcc::STATUS_C1_SUCCESS) {
$rowCount = PindanGoodsSku::save([
"total_amount_order" => $sku["total_amount_order"] - $num,
"inventory_rest" => $sku["inventory_rest"] + $num,
], ["goods_sku_id" => $goodsSkuId, "total_amount_order[>=]" => $num]);
if ($rowCount <= 0) {
PindanGoodsSku::rollback();
throw new GoodsException(["cus" => 32]);
}
}
}
Tcc::save(["status" => Tcc::STATUS_C2_SUCCESS,], ["tid" => $tid]);
if (!PindanGoodsSku::commit()) {
PindanGoodsSku::rollback();
return self::TCC_RESULT_FAIL;
}
}
return self::TCC_RESULT_SUCCESS;
}
/**
* 取消订单,直接回退库存
* @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