Files
xk-doctor-wx/utils/imageTransferQuote.js

63 lines
2.0 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* 识图传方报价:请求侧增量组装
* 首次全量 drugs;同味数下只传 quote_token + drugs_patch(改了的下标),省流量
*/
/**
* 比较两味报价药品是否等价(用于算 patch)
* @param {Record<string, any>|null|undefined} a
* @param {Record<string, any>|null|undefined} b
*/
export function isSameQuoteDrug(a, b) {
if (!a || !b) return false
return (
Number(a.drug_id || 0) === Number(b.drug_id || 0) &&
Number(a.number || 0) === Number(b.number || 0) &&
Number(a.price || 0) === Number(b.price || 0) &&
String(a.name || '') === String(b.name || '') &&
Number(a.way_id || 0) === Number(b.way_id || 0)
)
}
/**
* 组装增量报价入参
* @param {{
* scalars: Record<string, any>,
* drugs: Array<Record<string, any>>,
* quoteToken?: string,
* lastQuoteDrugs?: Array<Record<string, any>>|null
* }} opts
* @returns {{ payload: Record<string, any>, nextLastDrugs: Array<Record<string, any>> }}
*/
export function buildIncrementalQuotePayload(opts) {
const scalars = opts.scalars || {}
const drugs = Array.isArray(opts.drugs) ? opts.drugs : []
const quoteToken = String(opts.quoteToken || '').trim()
const prev = Array.isArray(opts.lastQuoteDrugs) ? opts.lastQuoteDrugs : null
const payload = Object.assign({}, scalars)
if (quoteToken) {
payload.quote_token = quoteToken
}
// 无 token、味数变化、或上次快照缺失 → 全量
if (!quoteToken || !prev || prev.length !== drugs.length) {
payload.drugs = drugs
return { payload, nextLastDrugs: drugs }
}
const patches = []
for (let i = 0; i < drugs.length; i++) {
if (!isSameQuoteDrug(prev[i], drugs[i])) {
patches.push({ index: i, drug: drugs[i] })
}
}
if (patches.length === 0) {
// 只改了地址/剂数/煎法,不带 drugs
return { payload, nextLastDrugs: prev }
}
if (patches.length >= drugs.length) {
payload.drugs = drugs
} else {
payload.drugs_patch = patches
}
return { payload, nextLastDrugs: drugs }
}