[关闭]
@qiao39gs 2025-08-07T07:26:31.000000Z 字数 1718 阅读 1

需求规格说明:GRPCONTNO 与保单数据的关联与分配

1. 业务目标

将来自两个不同数据源(a.csvb.csv)的数据进行关联,核心目标是将团体合同号(grpcontno)准确地分配给符合条件的保单记录。由于资源(grpcontnobatchno)的唯一性限制,需要根据一套优先级规则来进行分配,并最终生成一份包含所有保单记录(无论是否成功分配)的完整报告。

2. 输入数据源

整个流程从两个 CSV 文件开始:

  1. 文件一:a.csv (团体合同信息)

    • 角色: 提供 grpcontno 及关联匹配所需的主数据。
    • 关键字段: grpcontno, riskcode, transdate, managecom, agentcom, agentcode, finmoney
    • 原始顺序: 文件中 grpcontno 的出现顺序具有业务意义,将作为分配时的优先依据。
  2. 文件二:b.csv (保单批次信息)

    • 角色: 基础数据,包含需要被分配 grpcontno 的所有保单记录。
    • 关键字段: 保单号, batchno, syndate, valdate, riskcode, managecom, agentcom, agentcode, chnltype, salechnl, subchnl, polmoney
    • 原始顺序: 文件的行序是处理的基准顺序,必须严格遵守。

3. 核心处理逻辑

处理过程需严格按照以下步骤和规则执行:

  1. 数据关联 (Left Merge)

    • b.csv 的所有记录为基础(左表),与 a.csv(右表)进行左连接匹配。
    • 关联条件 (必须同时满足):
      • b.riskcode = a.riskcode
      • b.polmoney = a.finmoney
      • b.managecom = a.managecom
      • b.agentcom = a.agentcom
      • b.agentcode = a.agentcode
      • b.syndate = a.transdate
    • 此步骤会生成一个“候选匹配集”,其中 b.csv 的某一行可能会因匹配到 a.csv 的多行而出现重复。
  2. 分配与去重 (核心算法)

    • 处理顺序: 严格按照 b.csv 的原始行顺序进行遍历和决策。
    • 唯一性约束 (全局资源消耗):
      • 一个 grpcontno 在整个流程中只能被成功分配一次。
      • 一个 batchno 在整个流程中也只能被成功分配一次。
    • 分配规则 (First-Come, First-Served):
      a. 从 b.csv 的第一行对应的候选匹配开始。
      b. 查看其能匹配到的所有 grpcontno(这些 grpcontno 的相对顺序由它们在 a.csv 中的原始顺序决定)。
      c. 按顺序检查这些 grpcontno,选择第一个尚未被使用grpcontno
      d. 一旦找到一个可用的 grpcontno,并且当前行的 batchno尚未被使用,则视为一次成功分配
      e. 立即将这个 grpcontno 和这个 batchno 标记为“已使用”。
      f. 该行处理完毕,继续按 b.csv 的原始顺序处理下一行。
      g. 如果一行匹配的所有 grpcontno 都已被占用,或者该行的 batchno 已被占用,则该行的所有候选匹配都作废,无法成功分配。

4. 输出结果要求

  1. 输出文件: 生成一个名为 result_ordered.csv 的单一 CSV 文件。
  2. 文件编码: UTF-8-SIG,以确保在 Excel 中打开时中文不会乱码。
  3. 内容: 文件必须包含 b.csv 的所有原始记录,并根据分配结果呈现为两种状态:

    • 成功匹配的行:
      • 包含原始 b.csv 的所有字段。
      • 成功分配到的 grpcontno 被填入 grpcontno 列。
      • 备注 列为空。
    • 未成功匹配的行:
      • 包含原始 b.csv 的所有字段。
      • grpcontno 列为空 (NaN)。
      • 备注 列的值必须为 "无可用grpcontno"
  4. 字段顺序: 输出的 CSV 文件列顺序必须严格按照以下规定排列:

    1. 保单号, 备注, grpcontno, riskcode, transdate, managecom, agentcom, agentcode, finmoney, batchno, syndate, valdate, chnltype, salechnl, subchnl, polmoney
    • 注:transdatefinmoney 来自 a.csv,其余字段主要来自 b.csv。如果某行未成功匹配,则 transdatefinmoney 列也为空。
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注