Magento 2如何更改订单,发票,贷项通知单和货件的增量ID

一些商家希望自定义订单号或发票号,以使其与Magento 2默认情况下的产品号不同。他们可能希望数字包含更多信息,或者他们可能具有不应更改的现有格式。也许这些数字需要从上一个网站留下的地方中提取(或者看起来还不够漂亮)。这些数字每个都有一个增量ID,并且用于创建它们的值存储在数据库中,并且无法通过admin进行配置,因此我们将需要一些SQL来进行自定义。无需再费周折…

我们可以分别调整订单,发票,贷项通知单和装运的增量ID的以下属性:

  • 前缀
  • 后缀
  • 步骤
  • 起始值
  • 填充

前缀,后缀,起始值和步骤存储在数据库中,而填充长度在代码中设置。在更改它们之前,让我们看看如何将它们全部用于生成增量ID:

在Magento 2中,确定增量ID的方法在中Magento\SalesSequence\Model\Sequence
该模式设置为:一个字符串,再加上一个9位数字(用0填充),再加上另一个字符串。
getCurrentValue()方法根据以下模式返回新的增量ID:前缀,加上方法的返回值calculateCurrentValue(),加上后缀。在calculateCurrentValue()返回主号:

return ($this->lastIncrementId - $this->meta->getActiveProfile()->getStartValue()) * $this->meta->getActiveProfile()->getStep() + $this->meta->getActiveProfile()->getStartValue();

为了演示起见,我们将使用订单的增量ID,因此数据库中表$this->lastIncrementIdsequence_value列中的最后一个值sequence_order_1也是。(如果使用的是发票增量ID,$this->lastIncrementId将来自sequence_invoice_1表格。)1表格名称中的名称是第一个商店视图的商店ID。如果您有另一个商店视图,则可以使用该sequence_order_n表(这n是您的商店ID)。
因此,从最后calculateCurrentValue()减去,乘以,然后加。结果将添加到前缀和后缀之间。 我们可以将整个方法表示为一个数学公式:start_valuesequence_valuestepstart_value

increment_idprefix+((sequence_value– – start_value)* stepstart_value){填充到X数字} +suffix

sequence_value从1开始,并且在创建新订单(或发票等)时始终增加1。
最初,start_value和和step分别为1和prefixsuffix未定义。
如果将这些值插入公式,则可以预测初始订单增量ID:

increment_id''+((11)* 11){填充到9位数字} + ''
增量ID =((1-1)* 1 +1){填充到9位数字}
增量ID = 1 {填充到9位数字}
增量ID = 000000001

(这与sales_order.increment_id数据库中显示的一阶增量ID一致:000000001。)

前缀/后缀

前缀和后缀很简单。它们分别在增量ID号之前和后面附加存储在sales_sequence_profile.prefix&中的值sales_sequence_profile.suffix。更改前缀是延长增量ID或使其以0开头的简单方法。后缀可用于添加0,以使数字每次看起来增加10或100(例如)。另外,我们可以使用这些值来设置增量ID的样式或使其专有,因此在这种情况下,我们只需添加一个前缀“ CL-”,并使用“ -M2”作为后缀。
(当我们创建下一个顺序,sequence_order_1.sequence_value从1增加到2,但start_valuestep仍然各自是1)

将其插入我们的公式中:

increment_idprefix+((sequence_value– – start_value)* stepstart_value){填充到X数字} + suffix
增量ID ='CL-'+((2-1)* 1 +1){填充到9位数字} +'-M2'
增量ID ='CL -'+ 2 {填充为9位数字)+'
-M2'增量ID ='CL-000000002-M2'

(当我们创建此订单时,最后一行sales_order.increment_id应与我们的计算一致。)

步骤存储在中sales_sequence_profile.step。默认情况下为1,并且不得小于1。
我们可以使用它在每次创建新订单(或“逐步增加”)时将订单增量ID号增加一定数量。例如,因为step默认情况下为1 ,所以我们的最后一个增量ID号从000000001 “递增” 到000000002。但是,当我们更改步长时,增量ID在遵循新模式之前将“洗牌”一次。
为了演示,我们将步长设置为100。(创建下一个订单时,sequence_order_1.sequence_value从2增加到3,但start_value仍然为1。)

插入:

increment_idprefix+((sequence_value– – start_value)* stepstart_value){填充到X数字} + suffix
增量ID ='CL-'+((3-1)* 100 +1){填充到9位数字} +'-M2'
增量ID ='CL -'+ 201 {填充为9位数字)+'
-M2'增量ID ='CL-000000201-M2'

如您所见,增量ID号没有从上一个值(000000002)“增加” 100 。这是因为它在第一个更改时会改组。但是,下一个增量ID应该遵循新的模式。(下一个顺序sequence_value从3增加到4。)

增量ID ='CL-'+((4 – 1)* 100 +1){填充至9位数字} +'-M2'
增量ID ='CL-'+ 301 {填充至9位数字} +'-M2'
增量ID ='CL-000000301-M2'

这次,增量ID号如我们希望的那样(从000000201000000301)从上一个值“增加”了100个。

起始值

起始值存储在中sales_sequence_profile.start_value。默认情况下,它是1,并且不能小于0。(此外,它不应同时大于last sequence_value和小于step,因为这会使增量ID号为负。)
起始值的命名有点不直观,例如它会减少step乘以的数量,然后加回到增量ID号上。例如,因为start_value默认情况下为1 ,所以我们的最后两个增量ID号(000000201000000301)实际上将1加到step值的倍数(即100)上。
当我们更改起始值时,增量ID将“移动”一次,然后再次遵循该模式。为了演示,我们将使用3的起始值。(当我们创建下一个订单时,sequence_order_1.sequence_value从4增加到5,step仍然是100。)

当我们插入它时:

increment_idprefix+((sequence_value– – start_value)* stepstart_value){填充到X数字} + suffix
增量ID ='CL-'+((5 – 3)* 100 + 3){填充到9位数字} +'-M2'
增量ID ='CL -'+ 203 {填充至9位数字)+'
-M2'增量ID ='CL-000000203-M2'

如您所见,step乘以的数量减少了,增加到增量ID号末尾的数量增加了(而不是从000000301000000401的“步进” ,而是“转移”到000000203)。

下一个增量ID应该照常“增加”。(下一个顺序sequence_value从5增加到6。)

增量ID ='CL-'+((6 – 3)* 100 + 3){填充至9位数字} +'-M2'
增量ID ='CL-'+ 303 {填充至9位数字} +'-M2'
增量ID ='CL-000000303-M2'

这次,增量ID号按预期“增加”,并且将起始值3添加到末尾。
(如果此更改似乎是设置增量ID的一种不寻常的方法,请不必担心。其目的只是演示如何start_value影响模式。)

最小增量ID号

如果我们要设置一个“起始”数字,以使其看起来增量ID最初大于1,然后从那里开始递增计数(例如,为您的第一张银行支票编号1000),则实际上不会使用该start_value属性。(但是,由于它具有该名称,因此在本节中解决该问题似乎很有帮助。)
要为增量ID设置一个最小数字,我们需要在中添加一个值sequence_order_1.sequence_value
为了演示,让我们添加一个sequence_value1006,把stepstart_value回1(当我们创建一个订单,sequence_order_1.sequence_value增加1006至1007年,并stepstart_value现在另1)。

根据公式:

increment_idprefix+((sequence_value– – start_value)* stepstart_value){填充到X数字} + suffix
增量ID ='CL-'+(((1007 – 1)* 1 + 1){填充到9位数字)+'-M2'
增量ID ='CL -'+ 1007 {填充为9位数字)+'
-M2'增量ID ='CL-000001007-M2'

现在,好像一阶增量ID是1000,我们从那里开始“上一步”。

注意:这些sequence_order表都有一个AUTO_INCREMENT值,因此,只有在插入的sequence_value值高于上一个方法的情况下,以上方法才有效。如果尝试以这种方式缩短订单ID失败,则应检查AUTO_INCREMENT相关序列表的值:

SHOW CREATE TABLE sequence_order_1;

如果AUTO_INCREMENT返回的查询中的值大于sequence_value您想要更改的数字,则需要运行如下查询:

ALTER TABLE sequence_order_1 AUTO_INCREMENT = 1006;

增量ID号的填充长度在代码库中确定,并且不受任何数据库属性的影响。
在中\Magento\SalesSequence\Model\Sequence,该getCurrentValue()方法使用格式化字符串打印功能来设置增量ID号的模式:

return sprintf(
    $this->pattern,
    $this->meta->getActiveProfile()->getPrefix(),
    $this->calculateCurrentValue(),
    $this->meta->getActiveProfile()->getSuffix()
);

“ $ this-> pattern”来自常量DEFAULT_PATTERN,其最初为:%s%'.09d%s
增量ID号由中间部分确定:%'.09d。在'.0设定“0”作为填充字符和集的数字来显示为下面的值,在这种情况下是多少9。该d表现为[签字]十进制数。这意味着默认情况下,增量ID号将是带有9位数字的带符号十进制,并以0填充。为了演示,我们将填充长度设置为6。(创建下一个订单时,sequence_order_1.sequence_value从1007增加到1008,而start_valuestep仍然为1。)

使用我们的公式:

increment_idprefix+((sequence_value– – start_value)* stepstart_value){填充到X数字} + suffix
增量ID ='CL-'+(((1008 – 1)* 1 + 1){填充到6位数字)+'-M2'
增量ID ='CL -'+ 1008 {填充为6位数字)+'
-M2'增量ID ='CL-001008-M2'

如您所见,增量ID号现在只有6位数字,而不是9位数字。

实现它

在数据库中,该sales_sequence_profile表列出对于每个实体类型(增量ID图案orderinvoicecreditmemo,和shipment在每个商店视图)。我们需要对存储视图1(位于第5-8行)进行更改。(这些行分别设置了4种实体类型。)为了演示起见,我们将使用订单增量ID,因此将更改sales_sequence_profilemeta_id = 5)的第5行。

下面是sales_sequence_profile看起来像默认情况下:

以下是将每个属性设置为示例中使用的值的SQL查询(以及代码行)。(由于我们使用了订单的增量ID,因此meta_id以下每个查询中的都设置为5,但是您也可以使用6、7或8分别更改发票,Creditmemos和出货量的增量ID。)

前缀

UPDATE `sales_sequence_profile` SET `prefix` = 'CL-' WHERE `meta_id` = 5;

后缀

UPDATE `sales_sequence_profile` SET `suffix` = '-M2' WHERE `meta_id` = 5;

步骤

UPDATE `sales_sequence_profile` SET `step` = 100 WHERE `meta_id` = 5;

起始值

UPDATE `sales_sequence_profile` SET `start_value` = 3 WHERE `meta_id` = 5;

最小值

INSERT INTO `sequence_order_1` (`sequence_value`) VALUES ('1000');

填充

在第19行的/vendor/magento/module-sales-sequence/Model/Sequence.php中DEFAULT_PATTERN设置常量。 我们可以通过创建以下内容在自定义模块中对其进行更改:
etc/di.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <type name="Magento\Framework\DB\Sequence\SequenceInterface">
        <arguments>
            <argument name="pattern" xsi:type="string">%s%'.06d%s</argument>
        </arguments>
    </type>
</config>

结论

现在,您可以完全控制自己的增量ID。尽管当您调整某些值时它们有时似乎会发生意外变化,但公式应有助于您预测模式:

increment_idprefix+((sequence_value– – start_value)* stepstart_value){填充到X数字} +suffix


相关文章

0 0 投票数
文章评分
订阅评论
提醒
0 评论
内联反馈
查看所有评论