登陆特讯网[简洁版]与好友互动、家族乐斗、最炫魔法花园、武林精武帮战、最牛游戏赢活动豪礼!
注册>>>
同一枚勋章可以买两次:原系统的防重是
「先查有没有记录,再插入」,而 wap_medal 的键只有 id,
(uid, shop) 上没有唯一约束。两个并发请求都查不到记录、都扣钱、都插入 ——
花两份钱买一枚徽章。
现在插入本身带条件(WHERE NOT EXISTS),只有第一个能成功。
扣钱与发勋章顺序反了:原代码先扣钱、再写勋章记录,中间失败等于
钱没了、勋章也没有。现在两者在同一个事务里,先扣钱,
扣不动就不产生记录。
过期勋章被当成「已拥有」:原判断只看记录是否存在,
不看是否过期。徽章早已消失的会员会被提示「你已经有了这个勋章」,
永远买不回来。现在只有有效期内的勋章才阻止重复购买。
没标价的勋章会被白送:价格为 0 或负数时原代码照常发放。
现在会被直接拒绝 —— 没标价说明这行数据没配好,不是免费。
有效期在 C# 里拼接:原代码用字符串拼出日期表达式。
现在用固定的映射在 SQL 里生成,异常的单位值不会进入语句。