Magento2 you have not canceled the item

在magento2 中取消订单失败的原因,找到异常日志记录

异常日志

我在Magento 2.3.3版上操作步骤如下:

  1. 创建没有优惠券的购物车价格规则(没有尝试使用优惠券,但我认为结果会相同)。
  2. 以访客用户身份创建订单。
  3. 下订单后,向第2步中使用的用户数据注册帐户。
  4. 转到管理面板执行此命令。
  5. 尝试取消它。

其中的主要问题。当我们以访客用户方式下订单时,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