一种支付签约数据的水平切分扩容与迁移方法与流程

文档序号:26914185发布日期:2021-10-09 15:45阅读:52来源:国知局
1.本发明涉及支付系统领域,尤其涉及一种支付签约数据的水平切分扩容与迁移方法。
背景技术
::2.协议支付是指经付款人同意,收款人委托代收机构按照约定的频率、额度等条件,从付款人开户机构扣划付款人账户资金给收款人,且付款人开户机构不再与付款人逐笔进行交易确认的支付业务。协议支付业务适用于收款人固定,付款频率或者额度等条件事先约定且相对固定的特定场景。付款人开户机构应当事先或者在为付款人办理首笔协议支付业务时取得付款人的授权。授权应当明确收款人名称、付款用途、付款账号、付款周期或者条件、授权期限等数据。因此开户机构应该在首笔协议支付交易开展前,办理完成客户授权、签约流程,并完整保存支付签约数据。3.由于单个付款人账户可授权给多个商户进行扣款,因此单个付款账户可能存在多条支付签约数据,所以在业务逐渐发展过程中,势必会逐渐积累大量支付签约数据,因此海量支付签约数据的存储与访问成为系统设计与使用的瓶颈问题。对于海量数据处理,我们可以通过某种特定的条件,将存放在同一个数据库中的数据进行切分,分散存放到多个数据库(主机)上面,以达到分散单台设备负载的效果。4.数据的切分根据其切分规则的类型,可以分为两种切分模式。一种是按照不同的业务对应的表来切分到不同的数据库(主机)之上,这种切分可以称之为数据的垂直(纵向)切分;另外一种则是根据表中的数据的逻辑关系,将同一个表中的数据按照某种条件拆分到多台数据库(主机)上面,这种切分称之为数据的水平(横向)切分。垂直切分相对简单,但垂直切分后,单节点数据库保存的支付签约数据逐渐积累,将影响单表查询、写入性能。支付签约数据通过水平切分,按照卡号hash或其它字段的切分规则,将支付签约数据分散保存在多个节点数据库中。既通过水平切分方式,将支付签约数据保存于分布式数据库中,以此满足海量支付签约数据的高效存储、高并发访问的要求。5.当事先设计的分布式数据库节点数不足以满足业务发展,单机节点积累了大量数据时,就需要对保存支付签约数据的分布式数据库进行扩容和数据迁移。通过分布式数据库扩容和迁移,可将支付签约数据迁移至更多数据节点,减少单节点的数据量,提高单机节点数据库的写入、查询并发能力。6.现有扩容与迁移方案,主要存在以下问题:1、现有方案大多以数据库半同步机制进行数据迁移,例如使用mysql半同步功能,将a库中的数据同步至a1,然后再将查询a库的逻辑修改为查询a1库。由于数据库半同步功能存在主库、备库的同步延时性问题,所以在7*24小时对外服务的查询逻辑,由查询a库切换到查询a1库的过程中,会出现查询失败的报错。7.2、在迁移和扩容的过程中,如果出现异常,现有的扩容与迁移方案没有快速回退的能力。在7*24小时对外提供服务的应用中,所有程序改动、数据扩容、数据迁移等重大变更,都需确保具有快速回退的能力。现有方案无法使系统在分钟级别快速回退至迁移、扩容之前的状态。8.3、现有的方案,在扩容和迁移过程中,会使用数据库锁机制,锁定部分数据,导致被锁定的这部分数据,无法对外提供服务,造成服务部分中断。技术实现要素:9.本发明提供了一种支付签约数据的水平切分扩容与迁移方法,拟解决
背景技术
:中提到的数据库之间的切换会造成数据查询失败的报错、数据库的扩容和迁移方没有快速回退能力、数据库扩容迁移过程,会锁定部分数据,导致该部分数据无法提供对外服务,造成服务部分中断的技术问题。10.一种支付签约数据的水平切分扩容与迁移方法,包括以下步骤:步骤1:扩容与迁移前,支付签约服务通过数据库中间件访问多个旧数据库;旧数据库中间件根据分库规则将支付签约数据均匀的写入所有的旧数据库;支付签约服务提供签约数据查询功能,查询功能通过中间件中设置的分库规则作为入参,准确定位至旧数据库执行查询;步骤2:建立多个新数据库,并在新数据库中间件中配置访问规则,访问规则基于分库规则读、写支付签约的所有新数据库;步骤3:增加是否写新数据库开关配置项,包括不写入新数据库配置和将增量签约数据写入新数据库的配置;步骤4:增加签约数据查询开关配置项,包括查询旧数据库的配置和查询新数据库的配置;步骤5:增加是否写旧数据库的配置项,包括写旧数据库的配置和不再写旧数据库的配置;步骤6:将是否写新数据开关配置项修改为将增量签约数据写入新数据库的配置;此时支付签约服务根据分库规则将增量签约数据写入旧数据库,再根据访问规则将增量签约数据写入所有的新数据库中,最后返回本笔支付签约申请成功;步骤7:根据分库规则查询所有旧数据库中的数据,再根据访问规则将所有存量数据写入新数据库中;步骤8:数据检查阶段,新增一个独立的数据迁移检核服务,查询新数据库、旧数据库,并进行数据对比、检核,核对旧数据库中的数据与新数据库中的数据是否一致,若一致则执行步骤9;步骤9:将签约数据查询开关配置项修改为查询新数据库的配置,根据访问规则查询所有的新数据库,并且不在查询老数据库;检测线上交易是否存在异常,若存在异常或投诉,则将签约数据查询开关配置项修改为查询旧数据库的配置进行快速回退;若无异常或投诉,则执行步骤10;步骤10:将是否写旧数据库的配置项修改为不再写旧数据库的配置,此时线上增量签约数据,将只根据访问规则写入新数据库;步骤11:支付签约服务通过数据库中间件访问所有的新数据库,数据库中间件根据访问规则将支付签约数据均匀的写入新数据库中,支付签约服务同时提供签约数据的查询功能,查询功能通过中间件的访问规则准确定位至新数据库中执行查询,完成扩容和迁移。11.优选的,所述中间件根据签约的卡号字段作为分库规则;优选的,所述中间件根据签约的卡号字段作为访问规则;进一步的,所述步骤7包括以下步骤:步骤7.1:增加存量数据迁移服务,该服务用于配置数据迁移起始时间、数据迁移截止时间、单次数据查询的时间范围;所述单次查询的时间范围为分钟;步骤7.2:根据配置的数据迁移起始时间、数据迁移截止时间、单次数据查询的时间范围以及分库规则,查询旧数据库中的历史数据,单次查询的数据放入列表a中;步骤7.3:循环遍历列表a,根据中间件的访问规则,将列表a中的数据分批提交插入到新数据库中;步骤7.4:根据单次查询的时间范围递增查询时间段,进行下一次循环查询,并将查询到的数据再次放入到列表a中,再次执行批量插入逻辑,将列表a中的数据插入至新数据库,重复以上循环,直至迁移完数据迁移起始时间到数据迁移截止时间范围内的所有数据。12.进一步的,所述步骤8包括以下步骤:步骤8.1:增加数据迁移检核服务配置明细对比开关、笔数对比开关、对比开始时间、对比结束时间;步骤8.2:明细对比开关开启,数据迁移检核服务根据分库规则、对比开始时间、对比结束时间以及mysql分页查询参数,循环查询旧数据库中的数据库,获得列表b;步骤8.3:遍历列表b中的数据,根据访问规则查询新数据库,判断新数据库是否存在对应卡号的数据,若不存在,则报错,对比失败;若存在,则继续下一条数据对比继续步骤8.2的循环查询,直至分页查询结束,核对成功;步骤8.4:笔数对比开关开启,数据迁移检核服务根据分库规则、对比起始时间、对比结束时间查询旧数据库中明细笔数,获取笔数值a;根据访问规则、对比起始时间、对比结束时间查询新数据库中明细笔数,获取笔数值b;对比笔数值a和笔数值b是否相等,若不相等则报错;若相等则核对成功;步骤8.5:修改对比起始时间和对比结束时间的值,重启数据迁移检核服务,重复步骤8.2至8.4步骤,抽查其他时间段的数据进行核对;进一步的,若配置的对比开始时间等于数据迁移起始时间,且对比结束时间等于数据迁移截止时间,则步骤8.2至步骤8.4为全量核对;如果迁移时间端与核检时间段不相等,则为抽查核对。13.进一步的,扩容与迁移的数据量大于预设阈值时,则步骤8.2至步骤8.4为抽查核对;若扩容与迁移的数据量小于或等于预设阈值时,则步骤8.2至步骤8.4为全量核对。14.与现有技术相比本发明的有益效果是:1.本发明通过设置是否写新数据库开关配置项、签约数据查询开关配置项、是否写旧数据库开关配置项,使得在分布式数据库扩容和迁移过程中可以确保应用服务7*24小时对外服务,不会锁定迁移中的数据,可确保迁移过程中的旧数据库仍可对外提供访问。若扩容或迁移后存在故障,可通过修改是否写新数据开关配置项、签约数据查询开关配置项、是否写旧数据库开关配置项进行快速回退。15.2.通过步骤6中的双写新旧数据库,既增量签约交易先写旧数据库,再写新数据库,最后进行历史数据迁移,以此确保增量签约数据、历史签约数据都已写入新数据库中。当签约数据查询逻辑切换为查询新数据库时,新数据库中签约数据完整。以此解决通过数据库半同步复制迁移方案的主、备数据库之间的延时问题。16.3.建立独立的存量数据迁移服务,单次循环查询数据量可根据时间范围进行灵活配置;单次查询获取的数据,使用批量提交插入语句,提高数据迁移效率。创建独立的“数据迁移检核服务”,检核粒度支持新老数据库的指定时间范围内明细对比、指定时间范围内笔数对比等检核方式,确保迁移前、迁移后数据一致性。17.4.成本低廉,本实施方案简单,操作便捷,仅需修改现有应用程序针对签约数据的读写逻辑,并新增存量数据迁移功能,即可完成扩容和迁移。不需要专业dba介入进行主数据库、半同步备用数据库的多次相互切换操作。18.5.无主库、备库数据延时问题:双写新老数据库方案,既增量签约交易先写老数据库,再写新数据库,最后进行历史数据迁移。以此确保增量签约数据、历史签约数据都已写入新数据库中。当签约数据查询逻辑切换为查询新数据库时,新数据库中的签约数据完整。以此解决通过数据库半同步复制迁移方案的主、备数据库之间的延时问题。19.6.迁移速度高:在存量数据迁移阶段,建立独立的“存量数据迁移服务”,单次循环查询老数据库的数量可根据时间范围进行灵活配置;单次查询获取的数据,使用批量提交插入sql语句写入新数据库,提高数据迁移效率。附图说明20.图1为本发明的扩容与迁移前查旧数据库写旧数据库的架构示意图。21.图2为本发明的增量支付签约数据双写至新、旧数据库,查旧数据库的架构示意图。22.图3为本发明存量数据迁移架构示意图。23.图4为本发明保持双写新、旧数据库,查询切换,修改为查新数据库的架构示意图。24.图5为本发明扩容与迁移后的架构示意图。具体实施方式25.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。26.参见附图1到附图5所示,一种支付签约数据的水平切分扩容与迁移方法,包括以下步骤:步骤1:扩容与迁移前,支付签约服务通过数据库中间件访问多个旧数据库;旧数据库中间件根据签约卡号字段作为分库规则,将支付签约数据均匀的写入所有的旧数据库;支付签约服务提供签约数据查询功能,查询功能通过中间件中设置的分库规则根据卡号作为入参,准确定位至旧数据库执行查询;步骤2:建立多个新数据库,并在新数据库中间件中配置访问规则,访问规则根据签约卡号字段作为分库规则,读、写支付签约的所有新数据库;步骤3:增加是否写新数据库开关配置项,包括不写入新数据库配置和将增量签约数据写入新数据库的配置;步骤4:增加签约数据查询开关配置项,包括查询旧数据库的配置和查询新数据库的配置;步骤5:增加是否写旧数据库的配置项,包括写旧数据库的配置和不再写旧数据库的配置;步骤6:将是否写新数据开关配置项修改为将增量签约数据写入新数据库的配置;此时支付签约服务根据分库规则将增量签约数据写入旧数据库,再根据访问规则将增量签约数据写入所有的新数据库中,最后返回本笔支付签约申请成功;因此增量的支付签约数据,将同步写入扩容前、扩容后的新数据库和旧数据库中。27.步骤7:根据分库规则查询所有旧数据库中的数据,再根据访问规则将所有存量数据写入新数据库中;所述步骤7包括以下步骤:步骤7.1:增加存量数据迁移服务,该服务用于配置数据迁移起始时间、数据迁移截止时间、单次数据查询的时间范围;所述单次查询的时间范围为分钟;步骤7.2:根据配置的数据迁移起始时间、数据迁移截止时间、单次数据查询的时间范围以及分库规则,查询旧数据库中的历史数据,单次查询的数据放入列表a中;步骤7.3:循环遍历列表a,根据中间件的访问规则,将列表a中的数据分批提交插入到新数据库中;步骤7.4:根据单次查询的时间范围递增查询时间段,进行下一次循环查询,并将查询到的数据再次放入到列表a中,再次执行批量插入逻辑,将列表a中的数据插入至新数据库,重复以上循环,直至迁移完数据迁移起始时间到数据迁移截止时间范围内的所有数据。28.步骤8:数据检查阶段,新增一个独立的数据迁移检核服务,查询新数据库、旧数据库,并进行数据对比、检核,核对旧数据库中的数据与新数据库中的数据是否一致,若一致则执行步骤9;所述步骤8包括以下步骤:步骤8.1:增加数据迁移检核服务配置明细对比开关、笔数对比开关、对比开始时间、对比结束时间;步骤8.2:明细对比开关开启,数据迁移检核服务根据分库规则、对比开始时间、对比结束时间以及mysql分页查询参数,循环查询旧数据库中的数据库,获得列表b;步骤8.3:遍历列表b中的数据,根据访问规则查询新数据库,判断新数据库是否存在对应卡号的数据,若不存在,则报错,对比失败;若存在,则继续下一条数据对比继续步骤8.2的循环查询,直至分页查询结束,核对成功;步骤8.4:笔数对比开关开启,数据迁移检核服务根据分库规则、对比起始时间、对比结束时间查询旧数据库中明细笔数,获取笔数值a;根据访问规则、对比起始时间、对比结束时间查询新数据库中明细笔数,获取笔数值b;对比笔数值a和笔数值b是否相等,若不相等则报错;若相等则核对成功;步骤8.5:修改对比起始时间和对比结束时间的值,重启数据迁移检核服务,重复步骤8.2至8.4步骤,抽查其他时间段的数据进行核对。29.步骤8.6:若配置的对比开始时间等于数据迁移起始时间,且对比结束时间等于数据迁移截止时间,则步骤8.2至步骤8.4为全量核对;如果迁移时间段与核检时间段不相等,则为抽查核对。30.若扩容与迁移的数据量大于预设阈值时,则步骤8.2至步骤8.4为抽查核对;若扩容与迁移的数据量小于或等于预设阈值时,则步骤8.2至步骤8.4为全量核对。31.步骤9:将签约数据查询开关配置项修改为查询新数据库的配置,根据访问规则查询所有的新数据库,并且不再查询老数据库;检测线上交易是否存在异常,若存在异常或投诉,则将签约数据查询开关配置项修改为查询旧数据库的配置进行快速回退;若无异常或投诉,则执行步骤10;步骤10:将是否写旧数据库的配置项修改为不再写旧数据库配置,此时线上增量签约数据,将只根据访问规则写入新数据库;步骤11:支付签约服务通过数据库中间件访问所有的新数据库,数据库中间件根据访问规则将支付签约数据均匀的写入新数据库中,支付签约服务同时提供签约数据的查询功能,查询功能通过中间件的访问规则准确定位至新数据库中执行查询,完成扩容和迁移。32.参见附图1到5所示,下面对本发明的一种支付签约数据的水平切分扩容与迁移方法作详细说明,包括以下步骤:对应上述步骤1:扩容与迁移前,支付签约服务通过数据库中间件mycat访问支付签约数据库db1、db2,数据库中间件mycat根据签约卡号字段作为分库规则rule_1,将支付签约数据均匀的写入db1、db2;支付签约服务提供签约数据的查询功能,查询功能通过中间件mycat的分库规则rule_1,根据卡号作为入参,准确定位至数据库db1或数据库db2执行查询;对应上述步骤2:新建数据库new_db1、new_db2、new_db3、new_db4,并在中间件mycat中配置访问规则rule_2,规则rule_2根据签约卡号字段作为分库规则,读、写支付签约新数据库new_db1、new_db2、new_db3、new_db4。33.对应上述步骤3:设置是否写新数据库的开关配置项iswritenewdb:初始值设置为0,当iswritenewdb为0时,表示不写新数据库:new_db1、new_db2、new_db3、new_db4;当iswritenewdb修改为1时,表示将根据规则rule_2将增量签约数据写入新数据库。34.对应上述步骤4:设置签约数据查询的开关配置项queryflag:初始值设置为0,当queryflag为0时,表示根据rule_1查询老数据库:db1、db2;当queryflag修改为1时,表示将根据rule_2查询新数据库:new_db1、new_db2、new_db3、new_db4。35.对应上述步骤5:设置是否写老数据库的开关配置项iswriteolddb:初始值设置为0,当iswriteolddb为0时,表示根据rule_1写老数据库:db1、db2;当iswriteolddb修改为1时,表示将不需要再写入老数据库:db1、db2。36.对应上述步骤6:增量签约数据双写阶段,将iswritenewdb配置修改为1,此时支付签约服务根据rule_1先将增量签约数据写入老数据库(db1、db2)后,再根据rule_2将此签约数据写入新数据库new_db1、new_db2、new_db3、new_db4中,最后返回本笔支付签约申请成功。因此增量的支付签约数据,将同步写入扩容前、扩容后的新老数据库中。37.对应上述步骤7:存量数据迁移阶段,新增一个独立的存量数据迁移服务,此服务根据rule_1查询老数据库db1、db2中的存量数据,再根据rule_2,将存量数据写入新数据库new_db1、new_db2、new_db3、new_db4中。38.对应上述步骤7.1:增加存量数据迁移服务,此服务支持配置:数据迁移起始时间begin_time、数据迁移截止时间end_time、单次数据查询的时间范围time_frame。其中time_frame的时间范围为分钟。例如begin_time配置为2021‑05‑2417:00:01,end_time配置为2021‑05‑2417:30:00,time_frame配置为10,表示迁移2021‑05‑2417:00:01至2021‑05‑2417:30:00的数据,每次查询10分钟的数据进行迁移,共循环3次查询即可完成全部迁移。3次查询时间段分别为:2021‑05‑2417:00:01至2021‑05‑2417:10:00;2021‑05‑2417:10:01至2021‑05‑2417:20:00;2021‑05‑2417:20:01至2021‑05‑2417:30:00。39.对应上述步骤7.2:根据数据迁移起始时间begin_time、数据迁移截止时间end_time、单次数据查询的时间范围time_frame、以及规则rule_1,进行循环查询db1、db2中的历史数据,单次查询的数据放入列表list_1中;对应上述步骤7.3:循环遍历list_1,根据mycat分库规则rule_2,将list_1中的数据分批提交插入到新数据库new_db1、new_db2、new_db3、new_db4中。单次提交的插入新数据库中的笔数为5000笔,既将5000笔数据逐个循环组装为mycat所支持的批量插入的语句模式:insertintotable(xxx)values(value1),(value2)。list_1遍历完成后,本次查询所获取的list_1列表中的数据均已插入至新数据库中。所述单次提交插入新数据库的笔数为可配置项,即可以通过配置设置单次提交插入新数据库的笔数;例如:如果list_1列表中明细笔数为30000笔,单次提交笔数配置为5000笔,将5000笔sql语句一次性提交至mysql执行插入,共循环6次即可完成list_1中的数据插入至新数据库中。循环完成则清空list_1,进行下一步;对应上述步骤7.4:根据time_frame递增查询时间段,进行下一次循环查询,并将查询到的数据再次放入list_1中,再次执行批量插入逻辑,将list_1中的数据插入至新数据库。重复以上循环,直到迁移完begin_time至end_time时间范围内的所有数据。40.对应上述步骤8:数据检查阶段,新增一个独立的“数据迁移检核服务”,此服务根据rule_1查询老数据库db1、db2中的数据,再根据rule_2查询新数据库new_db1、new_db2、new_db3、new_db4中的数据,进行核对。若核对一致,则进行步骤8。41.对应上述步骤8.1:新增数据迁移检核服务,此服务需配置明细对比开关details_check_flag、笔数对比开关count_check_flag、对比开始时间begin_check_time、对比结束时间end_check_time等配置。其中frame_details_check配置为1,表示需进行明细对比,frame_details_check配置为0,表示不需进行明细对比;count_check_flag配置为1,表示需进行笔数对比,count_check_flag配置为0,表示不需进行笔数对比。42.对应上述步骤8.2:配置details_check_flag为1,数据迁移检核服务根据rule_1、起始时间begin_check_time、end_check_time、以及limit、offset等mysql分页查询参数,循环查询老数据库db1、db2中的数据(单页查询5000笔,笔数可配置),获取到列表list_2。43.对应上述步骤8.3、遍历list_2中的数据,根据卡号、rule_2规则查询新数据库,判断新数据库是否存在此条数据。若不存在,则报错,对比失败;如果存在,则继续下一条数据对比;继续8.2步骤的循环查询,直到分页查询结束,核对成功。44.对应上述步骤8.4:配置count_check_flag为1,数据迁移检核服务根据分库规则rule_1、对比起始时间begin_check_time、对比结束时间end_check_time查询老数据库中明细笔数,获取笔数值total_count_1;根据分库规则rule_2、对比起始时间begin_check_time、对比结束时间end_check_time查询新数据库中明细笔数,获取笔数值total_count_2;对比total_count_1、total_count_2是否相等,若不相等,则报错;若相等,则核对成功。45.对应上述步骤8.5:修改begin_check_time、end_check_time的值,重启数据迁移检核服务,重复8.2至8.4核对步骤,即可抽查其它时间段的数据进行核对。46.对应上述步骤8.6:如果配置对比开始时间begin_check_time等于数据迁移起始时间begin_time,且对比结束时间end_check_time等于数据迁移截止时间end_time,则以上8.2至8.4步骤为全量核对;如果迁移时间段、与检核时间段不相等,则为抽查核对。47.若扩容与迁移的数据量大于预设阈值时,则步骤8.2至步骤8.4为抽查核对;若扩容与迁移的数据量小于或等于预设阈值时,则步骤8.2至步骤8.4为全量核对。48.对应上述步骤9:查询新数据库阶段,将签约数据查询开关配置项queryflag配置修改为1,表示查询支付签约时,将根据rule_2查询新数据库new_db1、new_db2、new_db3、new_db4。不再查询老数据库db1、db2。观察线上交易是否存在异常,若存在异常、或投诉,则修改queryflag配置修改为0进行快速回退;若无异常、无投诉,则进行步骤10。49.对应上述步骤10:不再写老数据库阶段,将iswriteolddb配置修改为1,表示不需要再写入老数据库db1、db2。此时线上增量签约数据,将只根据rule_2写入新数据库new_db1、new_db2、new_db3、new_db4中。50.对应上述步骤11:扩容与迁移后,支付签约服务通过数据库中间件mycat访问支付签约数据库new_db1、new_db2、new_db3、new_db4,数据库中间件mycat根据规则rule_2将支付签约数据均匀的写入new_db1、new_db2、new_db3、new_db4;支付签约服务同时提供签约数据的查询功能,查询功能也通过mycat规则rule_2,根据卡号作为入参,准确定位至数据库new_db1、new_db2、new_db3、new_db4执行查询。此时扩容和迁移完成。51.对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化囊括在本发明内。52.此外,应当理解,虽然本说明书按照实施方式加以描述,但并非每个实施方式仅包含一个独立的技术方案,说明书的这种叙述方式仅仅是为清楚起见,本领域技术人员应当将说明书作为一个整体,各实施例中的技术方案也可以经适当组合,形成本领域技术人员可以理解的其他实施方式。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1