保留无费用明细的钉钉审批 #654
@ -33,7 +33,7 @@
|
||||
| 已接入待首次同步 | 店铺营销账户余额的京东账户读取 `js_data_middle_platform.dbo.jd_jzt_finance_records` 镜像 `jsm_jd_jzt_finance_records`;按 `id` 稳定断点、`updated_at` 重叠增量,页面不直连上游。 |
|
||||
| 本次接入 | 普通商品资料的工作平台采购价格接入 `jiansun.dbo.pm_priceAdjustment`(镜像 `js_pm_price_adjustment`):按 `skuCode` 关联 `jst_sku.sku_id`,取 `effectTime` 不晚于当前时间的最新 `purchasePrice`,并在页面和导出中标记“工作平台价格”;源表没有可靠更新时间,按 `Id` 稳定键追加,首次全量完成前只显示普通商品自身采购价。 |
|
||||
| 待有效凭据后首次同步 | 普通商品当前成本价、商品类型和更新时间继续读取 `operations_replica.rpt.jst_sku`;`rpt.fys_skuCostPriceUpdate` 是一 SKU 一行的旧快照,不能充当变价历史。完整成本价变更仍读取聚水潭经典开放平台“商品操作日志查询”接口 `worklog.query`,只镜像操作内容含“采购价”的记录到 `jushuitan_cost_price_history_rows`;经典接口必须在服务器私有配置中使用同一应用的 `JUSHUITAN_PARTNER_ID / JUSHUITAN_PARTNER_KEY / JUSHUITAN_TOKEN`,不得把新开放平台的 App Key / App Secret / Access Token 混用。页面在首次同步完成前明确显示待同步或失败,不把 0 条解释为真实无历史。 |
|
||||
| 本次接入 | 流程明细读取 `operations_replica/rpt.ding_Workflow + rpt.ding_WorkflowScheme` 的结构化审批主表、费用明细和付款明细,写入 `ding_process_detail_mirror` 与 `ding_process_payment_mirror`。禁止先把明细表和付款表铺平成 CSV 后逐行求和;付款明细必须按“对应序号”关联到代表明细行,但合计始终读取独立付款事实。首次全量先运行 `business-mirror:sync-ding-process-details --full --dry-run` 校验,再使用 `business-mirror:sync-ding-process-details --full` 发布;日常通过 `updateAt/createAt` 48 小时重叠增量同步。当前纳入日常报销、应付、线上代发、种菜、快递面单、固定资产、日常物品、样品、一次性采买、板材、工资、外贸费用和种菜充值等 14 个财务流程;发现新的明细流程编码时全量同步报错并保留上一版。 |
|
||||
| 本次接入 | 流程明细读取 `operations_replica/rpt.ding_Workflow + rpt.ding_WorkflowScheme` 的结构化审批主表、费用明细和付款明细,写入 `ding_process_detail_mirror` 与 `ding_process_payment_mirror`。禁止先把明细表和付款表铺平成 CSV 后逐行求和;付款明细必须按“对应序号”关联到代表明细行,但合计始终读取独立付款事实。每个纳入范围的源审批至少保留一条页面记录,没有费用金额的审批以空金额显示,不静默隐藏。首次全量先运行 `business-mirror:sync-ding-process-details --full --dry-run` 校验,再使用 `business-mirror:sync-ding-process-details --full` 发布;日常通过 `updateAt/createAt` 48 小时重叠增量同步。当前纳入日常报销、应付、线上代发、种菜、快递面单、固定资产、日常物品、样品、一次性采买、板材、工资、外贸费用和种菜充值等 14 个财务流程;发现新的明细流程编码时全量同步报错并保留上一版。 |
|
||||
|
||||
抖音月中校准可在上述导入命令追加 `--through=YYYY-MM-DD`,文件必须包含该月 1 日至截止日(含当天)的全部店铺和流水。系统仅替换这一日期范围,截止日之后继续读取原始账单镜像;省略参数仍表示完整月份。截止日期不得早于同月已校准范围。每天更新时重新导出月初至昨日的完整结果并核对笔数、收支总额,以覆盖迟到及修改记录,不能把单日增量当作月初至截止日的完整结果导入。
|
||||
|
||||
|
||||
@ -539,27 +539,21 @@ class DingProcessDetailMirrorSynchronizer
|
||||
|
||||
if ($workflowDetails === []) {
|
||||
$amount = $this->moneyFromFields($fields, (array) ($process['detail_amount_fields'] ?? []));
|
||||
if (($amount !== null && $amount !== 0) || $workflowPayments !== []) {
|
||||
$workflowDetails[] = $this->detailRecord(
|
||||
$workflow,
|
||||
$process,
|
||||
$scope,
|
||||
$now,
|
||||
1,
|
||||
$amount,
|
||||
$title,
|
||||
'',
|
||||
'',
|
||||
$originator,
|
||||
$documentType,
|
||||
$status,
|
||||
$businessMonth,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if ($workflowDetails === [] && $workflowPayments === []) {
|
||||
continue;
|
||||
$workflowDetails[] = $this->detailRecord(
|
||||
$workflow,
|
||||
$process,
|
||||
$scope,
|
||||
$now,
|
||||
1,
|
||||
$amount,
|
||||
$title,
|
||||
'',
|
||||
'',
|
||||
$originator,
|
||||
$documentType,
|
||||
$status,
|
||||
$businessMonth,
|
||||
);
|
||||
}
|
||||
|
||||
$this->attachPaymentsToDetails($workflowDetails, $workflowPayments);
|
||||
|
||||
@ -147,6 +147,31 @@ class DingProcessDetailMirrorSynchronizerTest extends TestCase
|
||||
->value('status'));
|
||||
}
|
||||
|
||||
public function test_empty_workflow_stays_visible_with_a_null_amount(): void
|
||||
{
|
||||
$this->query->workflows = [[
|
||||
'processInstanceId' => 'process-empty',
|
||||
'processCode' => 'PROC-ACF09A14-B094-46B1-A9E2-8BB1F4E1FDCF',
|
||||
'businessId' => '202610081714000311523',
|
||||
'title' => '陈芝豹提交的线上代发业务报销',
|
||||
'status' => 'RUNNING',
|
||||
'originatorUserId' => 'user-1',
|
||||
'joinAt' => '2026-10-08 17:15:33',
|
||||
'updateAt' => '2026-10-08 17:15:33',
|
||||
]];
|
||||
$this->query->scheme = [];
|
||||
|
||||
$result = $this->synchronizer->sync(true);
|
||||
|
||||
$this->assertSame(1, $result['workflows']);
|
||||
$this->assertSame(1, $result['details']);
|
||||
$this->assertSame(0, $result['payments']);
|
||||
$row = DB::connection('business_mirror')->table('ding_process_detail_mirror')->first();
|
||||
$this->assertNotNull($row);
|
||||
$this->assertNull($row->amount);
|
||||
$this->assertSame('审批中', $row->status);
|
||||
}
|
||||
|
||||
/** @return array<string,mixed> */
|
||||
private function daifaScheme(): array
|
||||
{
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user