Files
smartmate/backend/shared/contracts/creditstore/pricing.go
Losita 7b04b073ce Version: 0.9.81.dev.260506
后端:
1. Credit 价格规则补齐利润率与实际计费单价语义:新增 `profit_rate_bps` 与 `charge_*_price_micros` 展示字段,下沉共享价格推导 helper,tokenstore rpc/client/proto/model/default rule 全链路同步,LLM usage 扣费统一改按加价后的 charge 单价换算。
2. task-class 更新链路修正全量覆盖与归属校验:`runtime/conv` 保留 item id,DAO 更新前显式校验 task-class 与 item 归属,改用显式字段 map 落库 nil/空切片/零值,避免 `RowsAffected=0` 误判越权,同时补齐任务项可编辑字段更新。
3. GormCache task-class 失效补空 user_id 保护:更新语句缺少模型上下文时直接跳过失效,避免缓存插件因空指针影响主事务。

前端:
4. 课表中心补齐任务类编辑能力:新增 `updateTaskClass` API,创建弹窗支持编辑态回填与 item id 提交,日程页支持先拉详情再编辑并在保存后刷新任务类详情与列表。
5. 计划广场详情补点赞交互与奖励提示:详情页新增点赞/取消点赞按钮、奖励反馈文案与计数展示,论坛类型补 `reward_hint`,评论区与帖子作者头像统一接入兜底头像工具。
6. 品牌与展示细节收口:侧边栏与 favicon 切到项目 logo,首页标题改为 `SmartMate`,主面板缩放上限微调,论坛列表头像显示与整体品牌观感同步统一。
2026-05-06 21:53:17 +08:00

58 lines
2.1 KiB
Go
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.
package creditstore
const (
// ProfitRateScaleBPS 表示利润率的基点精度10000 = 100%。
ProfitRateScaleBPS = int64(10_000)
)
// ChargePriceMicrosSet 表示在“原始 CNY 成本 + 利润率”之后得到的实际计费单价。
type ChargePriceMicrosSet struct {
InputChargePriceMicros int64
OutputChargePriceMicros int64
CachedChargePriceMicros int64
ReasoningChargePriceMicros int64
}
// DeriveChargePriceMicrosSet 负责把一条价格规则里的原始 CNY 成本推导成实际计费用单价。
//
// 职责边界:
// 1. 这里只处理“原始成本 + 利润率”的价格推导,不负责 token 数量聚合与 credit 折算。
// 2. cached/reasoning 仍复用现有兜底语义:未配置时分别退回 input/output 单价。
// 3. 若利润率配置为负且绝对值过大导致结果 <= 0则统一按 0 处理,避免落出负价格。
func DeriveChargePriceMicrosSet(inputPriceMicros, outputPriceMicros, cachedPriceMicros, reasoningPriceMicros, profitRateBps int64) ChargePriceMicrosSet {
if cachedPriceMicros <= 0 {
cachedPriceMicros = inputPriceMicros
}
if reasoningPriceMicros <= 0 {
reasoningPriceMicros = outputPriceMicros
}
return ChargePriceMicrosSet{
InputChargePriceMicros: ApplyProfitRateToPriceMicros(inputPriceMicros, profitRateBps),
OutputChargePriceMicros: ApplyProfitRateToPriceMicros(outputPriceMicros, profitRateBps),
CachedChargePriceMicros: ApplyProfitRateToPriceMicros(cachedPriceMicros, profitRateBps),
ReasoningChargePriceMicros: ApplyProfitRateToPriceMicros(reasoningPriceMicros, profitRateBps),
}
}
// ApplyProfitRateToPriceMicros 负责把“成本单价”按利润率转换成“实际计费单价”。
func ApplyProfitRateToPriceMicros(priceMicros int64, profitRateBps int64) int64 {
if priceMicros <= 0 {
return 0
}
scaledRate := ProfitRateScaleBPS + profitRateBps
if scaledRate <= 0 {
return 0
}
return ceilDivInt64(priceMicros*scaledRate, ProfitRateScaleBPS)
}
func ceilDivInt64(numerator int64, denominator int64) int64 {
if numerator <= 0 || denominator <= 0 {
return 0
}
return (numerator + denominator - 1) / denominator
}