Die Website benötigt ein Funktionsmodul, um Freunde einzuladen. Der Vorgang ist wie folgt:
Das Benutzercenter generiert einen Einladungslink für jede Person (A), und nachdem der Eingeladene (B) auf die Registrierung geklickt hat, wird die ID von A als Tag nach dem Registrierungsfeld von B eingefügt.
Derzeit kann diese Methode die Liste der von jeder Person eingeladenen Freunde zählen, aber in Zukunft wird es folgende Probleme geben:
Wenn Eingeladener B zum ersten Mal eine Bestellung aufgibt, erhält A 10 % der Punkteprämie. Wenn es nicht die erste Bestellung ist, gibt es keine Belohnung
(Das denke ich auf meine dumme Art. Wann Jeder Benutzer gibt eine Bestellung auf. Er muss zunächst feststellen, ob es einen übergeordneten Benutzer A gibt. Wenn es keinen gibt, geben Sie direkt eine Bestellung auf. Wenn es einen übergeordneten Benutzer A gibt, muss er erneut beurteilen, ob er zum ersten Mal eine Bestellung aufgeben soll , und fügen Sie dann dem Vorgesetzten Punkte hinzu und geben Sie gleichzeitig eine Bestellung für Benutzer B)
Dann ist das Problem, dass meine dumme Methode die erste Bestellung für jeden Benutzer beurteilen muss. Ich halte das für zu umständlich und anfällig für Probleme. Ich frage mich, ob der Meister irgendwelche Optimierungsideen hat
我觉得可以这样搞:
好友关系:可以单独搞一个表,
好友关系表
,里面存两个字段uid
(用户ID),contact_uid
(关联好友ID)下单是否是首次并增加推荐好友积分操作:可以在用户相关表增加个是否下过单的字段(楼上也有提过),默认为0为没有下过单,每次下单都会先查询这个字段,如果是
1
则走正常下单逻辑;如果为0,表示从未下过单,然后执行你将要用到的逻辑,就是用户是否有推荐人,给推荐人增加积分等的处理不要这样做,会影响性能。
统计积分在每天凌晨统计。
可以提出一张表,这张表有id,B的id,C的id,以及字段buystate,buystate的值可以取1或者0,0代表不是第一次购买,1代表是第一次购买
直接加一个字段,是否下单过,默认为0,反正下单的时候会获取这个用户的信息,顺便判断一下是不是等于0就知道是不是首单了。积分方面,如果担心性能,可以考虑存到redis里,固定一个时间修改数据库。
我觉得思路没问题
有一点提一下,奖励积分应该要在订单完成后吧,而不是下单的时候。
在用户表加一个字段表示历史完结单次数就好了,后续如果需求改变为前N次返积分也很容易。而且通常下单或者完成订单的过程中本身就需要查询用户表,并不显得繁杂。