æç« ç®å½
- ââä¸ãå ³æ³¨æéæ±åæââ
- ââ1. å ³æ³¨ææµç¨å¾ââ
- ââ2. å ³æ³¨ææµç¨ç®è¿°ââ
- ââ3. 表ç»æ设计ââ
- ââäºãå ³æ³¨ææºç åæââ
- ââ2.1. å端ââ
- ââ2.2. å端ââ
- ââä¸ãè´¦å·1å ³æ³¨å®æââ
- ââ3.1. å ³æ³¨åæ°æ®è®°å½ââ
- ââ3.2. è´¦å·1å ³æ³¨è´¦å·2ââ
- ââ3.3. è´¦å·1å ³æ³¨åæ°æ®ååââ
- ââåã. è´¦å·2å ³æ³¨å®æââ
- ââ4.1. è´¦å·2å ³æ³¨è´¦å·1ââ
- ââ4.2. å ³æ³¨åæ°æ®ååââ
- ââ4.3. redisåå¨æ°æ®ç»æââ
ä¸ãå ³æ³¨æéæ±åæ
1. å ³æ³¨ææµç¨å¾
2. å ³æ³¨ææµç¨ç®è¿°
- 1.çè§é¢é¡µé¢ç¹å»å ³æ³¨
- 2.å端æºå¸¦ç¨æ·IDåçè§é¢åå¸è ID请æ±å端
- 3.åæ°æ ¡éªç¨æ·IDåçè§é¢åå¸è IDæ¯å¦ä¸ºç©º
- 3.1. 为空ï¼ç´æ¥è¿åå端æ示è¯
- 3.2.ä¸ä¸ºç©ºï¼æµç¨ç»§ç»
- 4.æºå¸¦ç¨æ·IDæ¥è¯¢æ°æ®åº
- 5.æºå¸¦çè§é¢åå¸è IDæ¥è¯¢æ°æ®åº
- 6.åIDå¤æ
- 6.1. 为空ï¼ç´æ¥è¿åå端æ示è¯
- 6.2.ä¸ä¸ºç©ºï¼æµç¨ç»§ç»
- 7.å¤æ对æ¹æ¯å¦å ³æ³¨æ
- 7.1. æªå ³æ³¨æï¼äºä¸ºæåå ³ç³»ç¶æä½0
- 7.2. å·²å ³æ³¨æï¼äºä¸ºæåå ³ç³»ç¶æä½1
- 7.2.1.æ´æ°å主ä¸æçç²ä¸å ³ç³»ç¶æ为1
- 7.2.2.ä¿åè½åº
- 8.ä¿åæåå主çç²ä¸å ³ç³»
- 9.æçå ³æ³¨æ»æ°+1
- 10.å主çç²ä¸æ»æ°
- 11.æåå主çå ³èå ³ç³»=1
- 12.è¿åååº
3. 表ç»æ设计
CREATE TABLE `fans` (
`id` varchar(24) NOT NULL,
`vloger_id` varchar(24) NOT NULL COMMENT 'ä½å®¶ç¨æ·id',
`fan_id` varchar(24) NOT NULL COMMENT 'ç²ä¸ç¨æ·id',
`is_fan_friend_of_mine` int(1) NOT NULL COMMENT 'ç²ä¸æ¯å¦æ¯vlogerçæåï¼å¦ææ为æåï¼åæ¬è¡¨çåæ¹æ¤å段é½éè¦è®¾ç½®ä¸º1ï¼å¦ææä¸äººåå
³ï¼å两边é½éè¦è®¾ç½®ä¸º0',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `writer_id` (`vloger_id`,`fan_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='ç²ä¸è¡¨\n\n';
äºãå ³æ³¨ææºç åæ
çè§é¢é¡µé¢å ³æ³¨åï¼ä¸ªäººä¸å¿å ³æ³¨ç¶æåæ¥ä¿®æ¹
2.1. å端
followMe() {
var me = this;
var myUserInfo = getApp().getUserInfoSession();
if (myUserInfo == null) {
uni.showToast({
duration: 3000,
title: "请ç»å½~",
icon: "none"
});
uni.navigateTo({
url: "../loginRegist/loginRegist",
animationType: "slide-in-bottom",
success() {
me.loginWords = "请ç»å½"
}
});
return;
}
var vlogerId = me.userPageId;
var userId = getApp().getUserInfoSession().id;
var serverUrl = app.globalData.serverUrl;
uni.request({
method: "POST",
header: {
headerUserId: userId,
headerUserToken: app.getUserSessionToken()
},
url: serverUrl + "/fans/follow?myId=" + userId + "&vlogerId=" + vlogerId,
success(result) {
if (result.data.status == 200) {
me.isFollow = true;
uni.setStorageSync("justFollowVlogerId", vlogerId);
// å·æ°å½å页çç²ä¸æ°
var pendingInfo = me.pageUserInfo;
me.pageUserInfo.myFansCounts = pendingInfo.myFansCounts + 1;
} else {
uni.showToast({
title: result.data.msg,
icon: "none",
duration: 3000
});
}
}
});
},
2.2. å端
controller
("follow")
public GraceJSONResult follow(@RequestParam String myId,
@RequestParam String vlogerId) {
// å¤æ两个idä¸è½ä¸ºç©º
if (StringUtils.isBlank(myId) || StringUtils.isBlank(vlogerId)) {
return GraceJSONResult.errorCustom(ResponseStatusEnum.SYSTEM_ERROR);
}
// å¤æå½åç¨æ·ï¼èªå·±ä¸è½å
³æ³¨èªå·±
if (myId.equalsIgnoreCase(vlogerId)) {
return GraceJSONResult.errorCustom(ResponseStatusEnum.SYSTEM_RESPONSE_NO_INFO);
}
// å¤æ两个id对åºçç¨æ·æ¯å¦åå¨
Users vloger = userService.getUser(vlogerId);
Users myInfo = userService.getUser(myId);
// fixme: 两个ç¨æ·idçæ°æ®åºæ¥è¯¢åçå¤æï¼æ¯åå¼å¥½ï¼è¿æ¯å并å¤æ好ï¼
if (myInfo == null || vloger == null) {
return GraceJSONResult.errorCustom(ResponseStatusEnum.SYSTEM_RESPONSE_NO_INFO);
}
// ä¿åç²ä¸å
³ç³»å°æ°æ®åº
fansService.doFollow(myId, vlogerId);
// å主çç²ä¸+1ï¼æçå
³æ³¨+1
//æçå
³æ³¨æ»æ°
redis.increment(REDIS_MY_FOLLOWS_COUNTS + ":" + myId, 1);
// å主çç²ä¸æ»æ°
redis.increment(REDIS_MY_FANS_COUNTS + ":" + vlogerId, 1);
// æåå主çå
³èå
³ç³»ï¼ä¾èµredisï¼ä¸è¦åå¨æ°æ®åºï¼é¿å
dbçæ§è½ç¶é¢
redis.set(REDIS_FANS_AND_VLOGGER_RELATIONSHIP + ":" + myId + ":" + vlogerId, "1");
return GraceJSONResult.ok();
}
(String myId, String vlogerId) {
String fid = sid.nextShort();
Fans fans = new Fans();
fans.setId(fid);
fans.setFanId(myId);
fans.setVlogerId(vlogerId);
// å¤æ对æ¹æ¯å¦å
³æ³¨æï¼å¦æå
³æ³¨æï¼é£ä¹åæ¹é½è¦äºä¸ºæåå
³ç³»
//TODO è¿éçåæ°æ³¨æ å¤æ对æ¹æ¯å¦å
³æ³¨æï¼å¦æå
³æ³¨æï¼é£ä¹åæ¹é½è¦äºä¸ºæåå
³ç³»
Fans vloger = queryFansRelationship(vlogerId, myId);
if (vloger != null) {
fans.setIsFanFriendOfMine(YesOrNo.YES.type);
// ç²ä¸æ¯å¦æ¯vlogerçæåï¼å¦ææ为æåï¼åæ¬è¡¨çåæ¹æ¤å段é½éè¦è®¾ç½®ä¸º1ï¼å¦ææä¸äººåå
³ï¼å两边é½éè¦è®¾ç½®ä¸º0
vloger.setIsFanFriendOfMine(YesOrNo.YES.type);
fansMapper.updateByPrimaryKeySelective(vloger);
} else {
//ç²ä¸æ¯å¦æ¯vlogerçæåï¼å¦ææ为æåï¼åæ¬è¡¨çåæ¹æ¤å段é½éè¦è®¾ç½®ä¸º1ï¼å¦ææä¸äººåå
³ï¼å两边é½éè¦è®¾ç½®ä¸º0
fans.setIsFanFriendOfMine(YesOrNo.NO.type);
}
fansMapper.insert(fans);
// ç³»ç»æ¶æ¯ï¼å
³æ³¨
msgService.createMsg(myId, vlogerId, MessageEnum.FOLLOW_YOU.type, null);
}
(String fanId, String vlogerId) {
Example example = new Example(Fans.class);
Example.Criteria criteria = example.createCriteria();
criteria.andEqualTo("vlogerId", vlogerId);
criteria.andEqualTo("fanId", fanId);
List list = fansMapper.selectByExample(example);
Fans fan = null;
if (list != null && list.size() > 0 && !list.isEmpty()) {
fan = (Fans) list.get(0);
}
return fan;
}
ä¸ãè´¦å·1å ³æ³¨å®æ
3.1. å ³æ³¨åæ°æ®è®°å½
æ¾äºä¸ªæ²¡æå ³æ³¨çè´¦å·è¿è¡æµè¯
è´¦å·ï¼å°¾å·~5217
æµç§°ï¼ææ³½ä¹æº
å ³æ³¨æ»éï¼2
ç²ä¸æ°ï¼1
è´¦å·ï¼å°¾å·~0009
æµç§°ï¼å°ç¾å¥³
å ³æ³¨æ»éï¼0
ç²ä¸æ°ï¼1
2个账å·å ³ç³»~äºäººææ å ³æ³¨
3.2. è´¦å·1å ³æ³¨è´¦å·2
- 使ç¨âå°¾å·ä¸º5217âè´¦å·ç»å½
æ¥çé¦é¡µç±å°¾å·ä¸º0009çå°ç¾å¥³è´¦å·åå¸çè§é¢
ç¹å»å ³æ³¨
3.3. è´¦å·1å ³æ³¨åæ°æ®åå
å°¾å·~5217å ³æ³¨ å°¾å·~0009çè´¦æ·åï¼æ°æ®åå
å°¾å·~5217æ°æ®åå
å ³æ³¨æ»éï¼ç±2åæäº3
ç²ä¸æ°ï¼1
å°¾å·~0009æ°æ®åå
å ³æ³¨æ»éï¼æ²¡å è¿æ¯ 0
ç²ä¸æ°ï¼ç±1åæäº2
表æ°æ®ååï¼
ç¨æ·è¡¨
å°¾å·~0009 userid=21100598TZ9XG6RP
å°¾å·~5217 userid=220620BZ2DH0KP94
ç²ä¸è¡¨
æ°å¢ä¸æ¡æ°æ®ï¼è§é¢å主ï¼21100598TZ9XG6RPï¼ç²ä¸ä¸ææï¼220620BZ2DH0KP94ï¼
2206279H48HX0T54 21100598TZ9XG6RP 220620BZ2DH0KP94 0
åã. è´¦å·2å ³æ³¨å®æ
4.1. è´¦å·2å ³æ³¨è´¦å·1
使ç¨å°¾å·~0009è´¦æ·ç»å½
å»é¦é¡µ~è§é¢å表ä¸ï¼æ¥çæ¯å¦å ³æ³¨çç¶æ为-æªå ³æ³¨
ç¹å»å ³æ³¨
å ³æ³¨ç¶æ为-å·²å ³æ³¨
4.2. å ³æ³¨åæ°æ®åå
å°¾å·~0009å ³æ³¨ å°¾å·~5217çè´¦æ·åï¼æ°æ®åå
å°¾å·~5217æ°æ®åå
å ³æ³¨æ»éï¼3
ç²ä¸æ°ï¼ç±1åæäº2
å°¾å·~0009æ°æ®åå
å ³æ³¨æ»éï¼ç± åæäº1
ç²ä¸æ°ï¼è¿æ¯2
表æ°æ®ååï¼
ç¨æ·è¡¨
å°¾å·~0009 userid=21100598TZ9XG6RP
å°¾å·~5217 userid=220620BZ2DH0KP94
ç²ä¸è¡¨
æ°å¢ä¸æ¡æ°æ®ï¼
æï¼220620BZ2DH0KP94ï¼çç²ä¸ä¸æå°¾å·0009ï¼21100598TZ9XG6RPï¼
è§é¢å主ï¼21100598TZ9XG6RPï¼ç²ä¸ä¸ææï¼220620BZ2DH0KP94ï¼
并ä¸æ们çå ³ç³»æ´æ°ä¸ºæåå ³ç³»ï¼ç¶æé½ä¸º0
2206279P5FYBZYNC 220620BZ2DH0KP94 21100598TZ9XG6RP 1
2206279H48HX0T54 21100598TZ9XG6RP 220620BZ2DH0KP94 1
4.3. redisåå¨æ°æ®ç»æ