Magento2 you have not canceled the item
在magento2 中取消订单失败的原因,找到异常日志记录

我在Magento 2.3.3版上操作步骤如下:
- 创建没有优惠券的购物车价格规则(没有尝试使用优惠券,但我认为结果会相同)。
- 以访客用户身份创建订单。
- 下订单后,向第2步中使用的用户数据注册帐户。
- 转到管理面板执行此命令。
- 尝试取消它。
其中的主要问题。当我们以访客用户方式下订单时,updateCustomerRuleUsages不会执行,也不会在salesrule_customer表中创建新记录。
当我们创建用户并尝试取消订购方法时,updateCustomerRuleUsages将执行并尝试从表中获取行,Row无法检索。
解决办法:
在这个代码文件Magento\SalesRule\Model\Coupon\UpdateCouponUsages::updateCustomerRuleUsages()
将下面代码:
private function updateCustomerRuleUsages(bool $increment, int $ruleId, int $customerId): void
{
/** @var \Magento\SalesRule\Model\Rule\Customer $ruleCustomer */
$ruleCustomer = $this->ruleCustomerFactory->create();
$ruleCustomer->loadByCustomerRule($customerId, $ruleId);
if ($ruleCustomer->getId()) {
if ($increment || $ruleCustomer->getTimesUsed() > 0) {
$ruleCustomer->setTimesUsed($ruleCustomer->getTimesUsed() + ($increment ? 1 : -1));
}
} elseif ($increment) {
$ruleCustomer->setCustomerId($customerId)->setRuleId($ruleId)->setTimesUsed(1);
}
$ruleCustomer->save();
}
修改为:
private function updateCustomerRuleUsages(bool $increment, int $ruleId, int $customerId)
{
/** @var \Magento\SalesRule\Model\Rule\Customer $ruleCustomer */
$ruleCustomer = $this->ruleCustomerFactory->create();
$ruleCustomer->loadByCustomerRule($customerId, $ruleId);
if ($ruleCustomer->getId()) {
if ($increment || $ruleCustomer->getTimesUsed() > 0) {
$ruleCustomer->setTimesUsed($ruleCustomer->getTimesUsed() + ($increment ? 1 : -1));
$ruleCustomer->save(); //ADD SAVE METHOD WITHIN THE CONDITION
}
} elseif ($increment) {
$ruleCustomer->setCustomerId($customerId)->setRuleId($ruleId)->setTimesUsed(1);
$ruleCustomer->save(); //ADD SAVE METHOD WITHIN THE CONDITION
}
//$ruleCustomer->save(); //REMOVE SAVE METHOD
}
参考解决办法:
- https://github.com/magento/magento2/issues/27918
- https://github.com/magento/magento2/issues/16779
- https://gitmemory.com/issue/magento/magento2/19230/531768458