LeafCoupenHelpOpenHandler.java
5.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
package com.zhaoonline.coupen.handler;
import com.zhaoonline.coupen.bean.CommonCoupenEntity;
import com.zhaoonline.coupen.bean.CommonCoupenSeed;
import com.zhaoonline.coupen.bean.LeafCoupenEntity;
import com.zhaoonline.coupen.bean.OwnerUser;
import com.zhaoonline.coupen.cache.RandomCache;
import com.zhaoonline.coupen.dispatcher.CoupenDispatchHandler;
import com.zhaoonline.coupen.dispatcher.UserCoupenMappingHandler;
import com.zhaoonline.coupen.lifecycle.LifeCycle;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.ObjectUtils;
import java.util.List;
/**
* Created by ZhaoOnline<br/>
* User: yangyoupeng<br/>
* Date: 2016/12/16<br/>
* Time: 13:57<br/>
* Description:该类主要服务于用户投资币。适用于即拆即用的帮拆红包。由于帮拆的好友,一个帮拆好友可以帮三个好友拆。
*/
public class LeafCoupenHelpOpenHandler {
private CoupenDispatchHandler coupenDispatcher = null;
private UserCoupenMappingHandler userCoupenMappingHandler= null;
private ActivityHandler activityHandler =null;
private LifeCycle lifeCycle = new LifeCycle();
private RandomCache<String,RandomCache<String,LeafCoupenEntity>> coupen2LeafCoupenCache=new RandomCache<String,RandomCache<String,LeafCoupenEntity>>();
@Autowired
public LeafCoupenHelpOpenHandler(CoupenDispatchHandler coupenDispatcher, UserCoupenMappingHandler userCoupenMappingHandler){
this.coupenDispatcher = coupenDispatcher;
this.userCoupenMappingHandler = userCoupenMappingHandler;
activityHandler = new ActivityHandler(coupenDispatcher,userCoupenMappingHandler);
lifeCycle.markStart();
}
/**
* 要对好友的帮拆次数进行判断
* @param coupenEntity
* @param helper 帮拆好友的信息.
* @return
*/
public CommonCoupenEntity processRequest(CommonCoupenEntity coupenEntity, OwnerUser helper){
CommonCoupenSeed seed = coupenEntity.getSeed();
if(ObjectUtils.isEmpty(seed)){
return null;
}
warmCache(coupenEntity);
//帮拆的朋友,自己获得一个红包。
CommonCoupenEntity coupenOftheHelper=activityHandler.processRequest(seed.getActivity(),helper);
//根据coupenEntity实体获取该coupen对应的叶子CoupenEntity
RandomCache<String,LeafCoupenEntity> leafCouppenEntityCache=coupen2LeafCoupenCache.getCache(coupenEntity.getCoupenID());
if(ObjectUtils.isEmpty(leafCouppenEntityCache)){
getOrcacheLeafCounpens(coupenEntity, leafCouppenEntityCache);
}
//分配一个叶子CoupenEntity
CommonCoupenEntity mappedCoupenEntity = dispacthOneLeafCoupen(coupenEntity, leafCouppenEntityCache);
if(!ObjectUtils.isEmpty(mappedCoupenEntity)){
//记录帮拆信息。。。
boolean helpOpenResult=this.userCoupenMappingHandler.recordHelpOpen(mappedCoupenEntity,helper);
}
return coupenOftheHelper;
}
private boolean warmCache(CommonCoupenEntity coupenEntity) {
//如果标记了,不需要进行缓存重置
if(lifeCycle.checkNeedReload()){
activityHandler.getLifeCycle().markNeedReload();
coupen2LeafCoupenCache.clear();
}
return true;
}
private void getOrcacheLeafCounpens(CommonCoupenEntity coupenEntity, RandomCache<String, LeafCoupenEntity> leafCouppenEntityCache) {
List<CommonCoupenEntity> leafCoupens= coupenDispatcher.dispacthCoupenEntityUsingCoupen(coupenEntity);
for(CommonCoupenEntity counpen:leafCoupens){
LeafCoupenEntity leafCoupenEntity = new LeafCoupenEntity();
leafCoupenEntity.setCoupenID(counpen.getCoupenID());
leafCoupenEntity.setParentCoupen(coupenEntity);
leafCoupenEntity.setAmount(counpen.getAmount());
leafCoupenEntity.setOwnerUser(counpen.getOwnerUser());
leafCoupenEntity.setSeed(counpen.getSeed());
leafCoupenEntity.setDistributeDate(counpen.getDistributeDate());
leafCouppenEntityCache.put(leafCoupenEntity.getCoupenID(),leafCoupenEntity);
}
}
private CommonCoupenEntity dispacthOneLeafCoupen(CommonCoupenEntity coupenEntity, RandomCache<String, LeafCoupenEntity> leafCouppenEntityCache) {
OwnerUser owner = coupenEntity.getOwnerUser();
LeafCoupenEntity unmappedLeafCoupenEntity=null;
CommonCoupenEntity mappedCoupenEntity=null;
while(ObjectUtils.isEmpty(unmappedLeafCoupenEntity)){
unmappedLeafCoupenEntity=randomGetCoupenFromCache(leafCouppenEntityCache);
if(ObjectUtils.isEmpty(unmappedLeafCoupenEntity)){
leafCouppenEntityCache.remove(coupenEntity.getCoupenID());
break;
}
//若是该Coupen已经被领取了。直接删除缓存,然后直接返回
if(!ObjectUtils.isEmpty(unmappedLeafCoupenEntity.getOwnerUser())){
leafCouppenEntityCache.remove(unmappedLeafCoupenEntity.getCoupenID());
break;
}
//这一步主要是将coupen和用户进行关系映射
mappedCoupenEntity=userCoupenMappingHandler.mappingCoupen2User(unmappedLeafCoupenEntity,owner);
//都需要将已经处理过的entity从缓存中删除
leafCouppenEntityCache.remove(unmappedLeafCoupenEntity.getCoupenID());
}
return mappedCoupenEntity;
}
private LeafCoupenEntity randomGetCoupenFromCache(RandomCache<String,LeafCoupenEntity> coupenCacheOfSeed){
//随机获取一个红包ID
String coupenEntityID=coupenCacheOfSeed.randomKey();
LeafCoupenEntity coupenEntity=coupenCacheOfSeed.getCache(coupenEntityID);
return coupenEntity;
}
}