打手接单价格自定义配置系统开发
电竞打手接单业务中,不同打手、游戏品类、服务类型、时段的定价差异很大。很多早期方案写死单价,或者只支持固定几种套餐,打手无法自主调价,平台也不能统一管控价格上限,高峰期溢价、节假日调价、段位差异化加价都很难落地,经常出现价格混乱、客诉和结算金额不一致。本文讲解一套可由平台管控、打手自定义、多维度叠加计价的价格配置系统开发方案。
后端采用SpringBoot + MyBatis-Plus开发,Redis缓存价格配置,减少下单时数据库查询压力;MySQL存储价格模板、加价规则、价格修改记录;前端分为打手端价格配置页、后台价格审核管控面板。计价逻辑独立封装为价格组件,供下单接口统一调用,和订单、结算模块解耦。
系统支持双层定价管控:平台统一设置基础价格区间、最高限价、最低限价;打手在平台限定范围内,自主配置自己的服务单价、规格价格、时段溢价。超出限价范围的价格配置提交后无法生效,需要提交审核,由平台管理员复核。同时支持按游戏、服务类型(按小时、按局、包段)分开配置。
价格数据分为基础规格价、附加加价规则两块。基础规格绑定打手ID、游戏编码、服务类型;加价规则支持时段加价、节假日加价、高段位溢价、指定需求附加费,多条规则可以叠加计算。所有价格修改都会留存记录,记录修改前后金额、操作人,方便对账和纠纷溯源。
下面是价格配置实体与计价类型枚举Java代码示例:
@Data @TableName("t_player_price_config") public class PlayerPriceConfig { private Long id; private Long playerId; private String gameCode; // 计价类型:1按小时 2按局 3包段 private Integer priceType; private BigDecimal basePrice; // 平台设置最高限价 private BigDecimal maxLimitPrice; private BigDecimal minLimitPrice; // 0待审核 1生效 2驳回 private Integer configStatus; private LocalDateTime createTime; private LocalDateTime auditTime; } public enum PriceTypeEnum { BY_HOUR(1, "按小时计价"), BY_ROUND(2, "按局计价"), BY_PACKAGE(3, "包段计价"); private Integer code; private String desc; PriceTypeEnum(Integer code, String desc){ this.code = code; this.desc = desc; } // getter省略 }加价规则表独立存储,一条规则绑定价格配置ID,支持设置生效时间段、上浮比例或者固定金额。例如晚上19点到23点上浮20%,周末上浮15%。计算的时候先取出基础价,再遍历所有命中条件的加价规则叠加,最终算出订单展示价格。
价格计算工具类核心逻辑如下:
@Service public class PriceCalcService { /** * 价格叠加计算 * @param basePrice 基础价 * @param addRuleList 命中加价规则 * @return 最终价格 */ public BigDecimal calcFinalPrice(BigDecimal basePrice, List<PriceAddRule> addRuleList) { BigDecimal finalPrice = basePrice; for (PriceAddRule rule : addRuleList) { if (rule.getAddType() == 1) { // 比例加价 BigDecimal rate = rule.getAddRate().divide(new BigDecimal("100"), 4, RoundingMode.HALF_UP); finalPrice = finalPrice.multiply(BigDecimal.ONE.add(rate)); } else { // 固定金额加价 finalPrice = finalPrice.add(rule.getAddAmount()); } } // 保留两位小数 return finalPrice.setScale(2, RoundingMode.HALF_UP); } }价格生效管控流程:打手提交价格配置 → 系统自动校验是否在平台限价区间内,在区间内直接自动生效;超出区间则进入待审核队列,管理员审核通过之后才对外展示。审核驳回时填写驳回原因,同步消息通知打手。生效的价格配置写入Redis缓存,key为打手+游戏+服务类型,下单读取价格优先读缓存;价格变更时主动删除或者更新缓存,保证价格及时刷新。
权限上做隔离:打手只能修改自己的价格配置,不能修改平台限价;管理员可以统一修改全局游戏限价、查看全部价格配置记录,也可以直接强制停用某条价格配置,该打手对应的服务立即恢复使用平台默认底价。
下单环节增加价格快照机制。用户下单成功的时候,把当时计算出来的价格、基础价、命中的加价规则,全部存入订单快照表。后续打手修改价格、调整加价规则,不会影响已经生成的旧订单,避免结算时价格和下单展示不一致。这是减少价格纠纷最关键的设计。
风控规则和价格模块联动,系统监控异常调价行为:短时间频繁大幅度涨价、大量打手同步调高价格,后台触发预警。针对恶意哄抬价格的账号,平台可以限制其自定义价格权限,只能使用平台默认价格。
落地优化方面,缓存设置合理过期时间,防止缓存和数据库长期不一致;价格计算统一使用BigDecimal,禁止double浮点运算,避免金额精度丢失;加价规则支持开关,不需要溢价的时候直接关闭,不用删除配置。
这套价格配置系统的核心思路是平台限价兜底、打手自主配置、规则叠加计价、下单价格快照。既给到打手灵活定价的空间,又不会失去平台管控能力。后续可以扩展促销折扣、会员价、阶梯优惠等能力,在现有计价组件基础上新增计算分支即可。