礼包优化

back_recharge
lvxinran 2021-04-21 14:03:40 +08:00
parent c48ad44e27
commit 96163db7b5
9 changed files with 263 additions and 58 deletions

View File

@ -32,6 +32,7 @@ import com.ljsd.jieling.logic.player.PlayerLogic;
import com.ljsd.jieling.logic.store.newRechargeInfo.NewRechargeInfo;
import com.ljsd.jieling.logic.store.newRechargeInfo.RechargeType;
import com.ljsd.jieling.logic.store.newRechargeInfo.bean.*;
import com.ljsd.jieling.logic.store.newRechargeInfo.rechargeHandler.RechargeHandler;
import com.ljsd.jieling.network.server.ProtocolsManager;
import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.thrift.idl.Result;
@ -60,36 +61,29 @@ public class BuyGoodsNewLogic {
/**
*
*/
public static boolean refreshWelfareState(User user){
public static boolean refreshWelfareState(User user) throws Exception {
boolean needChange = false;
List<AbstractWelfareBag> pAddList = new ArrayList<>();
List<Integer> garbageList = new ArrayList<>();
NewRechargeInfo info = user.getPlayerInfoManager().getNewRechargeInfo();
for(Map.Entry<Integer,SRechargeCommodityNewConfig> entry : SRechargeCommodityNewConfig.configMap.entrySet()){
Map<Integer, PerpetualWelfareBag> perpetualWelfareBagMap = info.getPerpetualMap();
Map<Integer, TimeLimitWelfareBag> timeLimitWelfareBagMap = info.getTimeLimitMap();
Map<Integer, ReceiveWelfareBag> receiveWelfareBagMap = info.getReceiveMap();
Map<Integer, PushWelfareBag> pushWelfareBagMap = info.getPushMap();
if(perpetualWelfareBagMap.containsKey(entry.getKey())){
if(refreshUnitWF(perpetualWelfareBagMap.get(entry.getKey()),garbageList,user) && !needChange){
needChange = true;
}
}else if(timeLimitWelfareBagMap.containsKey(entry.getKey())){
if(refreshUnitWF(timeLimitWelfareBagMap.get(entry.getKey()),garbageList,user) && !needChange){
needChange = true;
}
}else if(receiveWelfareBagMap.containsKey(entry.getKey())){
if(refreshUnitWF(receiveWelfareBagMap.get(entry.getKey()),garbageList,user) && !needChange){
needChange = true;
}
}else if(pushWelfareBagMap.containsKey(entry.getKey())){
if(refreshUnitWF(pushWelfareBagMap.get(entry.getKey()),garbageList,user) && !needChange){
needChange = true;
}
}else if(info.getGarbage().contains(entry.getKey())){
if(info.getGarbage().contains(entry.getKey())){
continue;
}
//获取处理类
RechargeHandler rechargeHandler = getRechargeHandler(entry.getValue().getOtype());
//判断对应的Map是否已经有了信息
if(rechargeHandler.rechargeIsInBag(user,entry.getKey())){
boolean refreshStatus = rechargeHandler.refreshStatus(user,entry.getKey());
if(!needChange) {
needChange = refreshStatus;
}
}else{
AbstractWelfareBag bag = initUnitWF(user,entry.getValue());
//没有的话新初始化信息
AbstractWelfareBag bag = rechargeHandler.initUnitWF(user, entry.getValue());
pAddList.add(bag);
if(refreshUnitWF(bag,garbageList,user) && !needChange){
needChange = true;
@ -98,15 +92,19 @@ public class BuyGoodsNewLogic {
}
//添加新增礼包
for(AbstractWelfareBag bag : pAddList){
if(bag.getType() == RechargeType.perpetual.getType()){
info.addPerpetual((PerpetualWelfareBag) bag);
}else if(bag.getType() == RechargeType.timeLimit.getType()){
info.addTimeLimit((TimeLimitWelfareBag) bag);
}else if(bag.getType() == RechargeType.receive.getType()){
info.addReceive((ReceiveWelfareBag)bag);
}else if(bag.getType() == RechargeType.push.getType()){
info.addPush((PushWelfareBag)bag);
}
int type = bag.getType();
RechargeHandler rechargeHandler = getRechargeHandler(type);
rechargeHandler.addNew(user,bag);
// if(bag.getType() == RechargeType.perpetual.getType()){
// info.addPerpetual((PerpetualWelfareBag) bag);
// }else if(bag.getType() == RechargeType.timeLimit.getType()){
// info.addTimeLimit((TimeLimitWelfareBag) bag);
// }else if(bag.getType() == RechargeType.receive.getType()){
// info.addReceive((ReceiveWelfareBag)bag);
// }else if(bag.getType() == RechargeType.push.getType()){
// info.addPush((PushWelfareBag)bag);
// }
}
if(garbageList.size()>0){
//添加新垃圾礼包
@ -581,4 +579,9 @@ public class BuyGoodsNewLogic {
}
}
}
public static RechargeHandler getRechargeHandler(int type){
return RechargeType.getHandler(type);
}
}

View File

@ -1,14 +1,17 @@
package com.ljsd.jieling.logic.store.newRechargeInfo;
import com.ljsd.common.mogodb.MongoBase;
import com.ljsd.jieling.logic.store.newRechargeInfo.bean.PerpetualWelfareBag;
import com.ljsd.jieling.logic.store.newRechargeInfo.bean.PushWelfareBag;
import com.ljsd.jieling.logic.store.newRechargeInfo.bean.ReceiveWelfareBag;
import com.ljsd.jieling.logic.store.newRechargeInfo.bean.TimeLimitWelfareBag;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class NewRechargeInfo {
public class NewRechargeInfo extends MongoBase {
private double rr;//累计充值
@ -19,11 +22,11 @@ public class NewRechargeInfo {
private long firstTime;//首冲时间
private int isDayFirst;
private Map<Integer,PerpetualWelfareBag> perpetualMap;//永久礼包
private Map<Integer,TimeLimitWelfareBag> timeLimitMap;//限时刷新礼包
private Map<Integer,ReceiveWelfareBag> receiveMap;//限时刷新礼包
private Map<Integer,PushWelfareBag> pushMap;//推送礼包
private List<Integer> garbage;//废弃礼包
private Map<Integer,PerpetualWelfareBag> perpetualMap = new HashMap<>();//永久礼包
private Map<Integer,TimeLimitWelfareBag> timeLimitMap = new HashMap<>();//限时刷新礼包
private Map<Integer,ReceiveWelfareBag> receiveMap = new HashMap<>();//限时刷新礼包
private Map<Integer,PushWelfareBag> pushMap = new HashMap<>();//推送礼包
private List<Integer> garbage = new ArrayList<>();//废弃礼包
public double getRr() {
return rr;
@ -31,6 +34,8 @@ public class NewRechargeInfo {
public void setRr(double rr) {
this.rr = rr;
updateString("rr",rr);
}
public double getMonthRr() {
@ -39,6 +44,8 @@ public class NewRechargeInfo {
public void setMonthRr(double monthRr) {
this.monthRr = monthRr;
updateString("monthRr",monthRr);
}
public double getsMonthRr() {
@ -47,6 +54,7 @@ public class NewRechargeInfo {
public void setsMonthRr(double sMonthRr) {
this.sMonthRr = sMonthRr;
updateString("sMonthRr",sMonthRr);
}
public boolean getIsFirst() {
@ -55,6 +63,7 @@ public class NewRechargeInfo {
public void setIsFirst(boolean isFirst) {
this.isFirst = isFirst;
updateString("isFirst",isFirst);
}
public long getFirstTime() {
@ -63,6 +72,7 @@ public class NewRechargeInfo {
public void setFirstTime(long firstTime) {
this.firstTime = firstTime;
updateString("firstTime",firstTime);
}
public int getIsDayFirst() {
@ -71,54 +81,42 @@ public class NewRechargeInfo {
public void setIsDayFirst(int isDayFirst) {
this.isDayFirst = isDayFirst;
updateString("isDayFirst",isDayFirst);
}
public Map<Integer, PerpetualWelfareBag> getPerpetualMap() {
return perpetualMap;
}
public void setPerpetualMap(Map<Integer, PerpetualWelfareBag> perpetualMap) {
this.perpetualMap = perpetualMap;
}
public Map<Integer, TimeLimitWelfareBag> getTimeLimitMap() {
return timeLimitMap;
}
public void setTimeLimitMap(Map<Integer, TimeLimitWelfareBag> timeLimitMap) {
this.timeLimitMap = timeLimitMap;
}
public Map<Integer, ReceiveWelfareBag> getReceiveMap() {
return receiveMap;
}
public void setReceiveMap(Map<Integer, ReceiveWelfareBag> receiveMap) {
this.receiveMap = receiveMap;
}
public Map<Integer, PushWelfareBag> getPushMap() {
return pushMap;
}
public void setPushMap(Map<Integer, PushWelfareBag> pushMap) {
this.pushMap = pushMap;
}
public List<Integer> getGarbage() {
return garbage;
}
public void setGarbage(List<Integer> garbage) {
this.garbage = garbage;
}
public void addPerpetual(PerpetualWelfareBag bag){
perpetualMap.put(bag.getModId(),bag);
updateString("perpetualMap",perpetualMap);
}
public void addTimeLimit(TimeLimitWelfareBag bag){
timeLimitMap.put(bag.getModId(),bag);
updateString("timeLimitMap",timeLimitMap);
}
public void removeTimeLimit(TimeLimitWelfareBag bag){
@ -127,13 +125,16 @@ public class NewRechargeInfo {
public void addReceive(ReceiveWelfareBag bag){
receiveMap.put(bag.getModId(),bag);
updateString("receiveMap",receiveMap);
}
public void addPush(PushWelfareBag bag){
pushMap.put(bag.getModId(),bag);
updateString("pushMap",pushMap);
}
public void addGarbage(List<Integer> list){
garbage.addAll(list);
updateString("garbage",garbage);
}
}

View File

@ -1,19 +1,43 @@
package com.ljsd.jieling.logic.store.newRechargeInfo;
import com.ljsd.jieling.logic.store.newRechargeInfo.rechargeHandler.*;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
public enum RechargeType {
perpetual(1),
timeLimit(2),
receive(3),
push(4),
perpetual(1,new PerpetualHandler()),
timeLimit(2,new TimeLimitHandler()),
receive(3,new ReceiveHandler()),
push(4,new PushHandler()),
;
private int type;
RechargeType(int type){
private RechargeHandler rechargeHandler;
RechargeType(int type, RechargeHandler rechargeHandler){
this.type = type;
this.rechargeHandler = rechargeHandler;
}
private static Map<Integer,RechargeType> rankMap;
static {
rankMap = new HashMap<>();
RechargeType[] values = RechargeType.values();
Arrays.stream(values).forEach(n->rankMap.put(n.getType(),n));
}
public int getType() {
return type;
}
public RechargeHandler getRechargeHandler() {
return rechargeHandler;
}
public static RechargeHandler getHandler(int type){
return rankMap.get(type).getRechargeHandler();
}
}

View File

@ -0,0 +1,35 @@
package com.ljsd.jieling.logic.store.newRechargeInfo.rechargeHandler;
import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.logic.store.BuyGoodsNewLogic;
import com.ljsd.jieling.logic.store.newRechargeInfo.bean.AbstractWelfareBag;
import config.SRechargeCommodityNewConfig;
import java.util.Map;
/**
* @author lvxinran
* @date 2021/4/20
* @discribe
*/
public abstract class AbstractRechargeHandler implements RechargeHandler {
@Override
public boolean refreshStatus(User user,int rechargeId){
Map<Integer, ? extends AbstractWelfareBag> rechargeMap = getRechargeMap(user);
return BuyGoodsNewLogic.refreshUnitWF(rechargeMap.get(rechargeId), user.getPlayerInfoManager().getNewRechargeInfo().getGarbage(), user);
}
@Override
public abstract Map<Integer, ? extends AbstractWelfareBag> getRechargeMap(User user);
@Override
public boolean rechargeIsInBag(User user, int rechargeId) {
return getRechargeMap(user).containsKey(rechargeId);
}
@Override
public abstract AbstractWelfareBag initUnitWF(User user, SRechargeCommodityNewConfig config) throws Exception;
}

View File

@ -0,0 +1,32 @@
package com.ljsd.jieling.logic.store.newRechargeInfo.rechargeHandler;
import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.logic.store.newRechargeInfo.bean.AbstractWelfareBag;
import com.ljsd.jieling.logic.store.newRechargeInfo.bean.PerpetualWelfareBag;
import config.SRechargeCommodityNewConfig;
import java.util.Map;
/**
* @author lvxinran
* @date 2021/4/20
* @discribe
*/
public class PerpetualHandler extends AbstractRechargeHandler{
@Override
public Map<Integer, ? extends AbstractWelfareBag> getRechargeMap(User user) {
return user.getPlayerInfoManager().getNewRechargeInfo().getPerpetualMap();
}
@Override
public AbstractWelfareBag initUnitWF(User user, SRechargeCommodityNewConfig config) throws Exception {
return new PerpetualWelfareBag(user,config);
}
@Override
public void addNew(User user, AbstractWelfareBag bag) {
user.getPlayerInfoManager().getNewRechargeInfo().addPerpetual((PerpetualWelfareBag) bag);
}
}

View File

@ -0,0 +1,30 @@
package com.ljsd.jieling.logic.store.newRechargeInfo.rechargeHandler;
import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.logic.store.newRechargeInfo.bean.AbstractWelfareBag;
import com.ljsd.jieling.logic.store.newRechargeInfo.bean.PushWelfareBag;
import config.SRechargeCommodityNewConfig;
import java.util.Map;
/**
* @author lvxinran
* @date 2021/4/20
* @discribe
*/
public class PushHandler extends AbstractRechargeHandler {
@Override
public Map<Integer, ? extends AbstractWelfareBag> getRechargeMap(User user) {
return user.getPlayerInfoManager().getNewRechargeInfo().getPushMap();
}
@Override
public AbstractWelfareBag initUnitWF(User user, SRechargeCommodityNewConfig config) {
return new PushWelfareBag(config);
}
@Override
public void addNew(User user, AbstractWelfareBag bag) {
user.getPlayerInfoManager().getNewRechargeInfo().addPush((PushWelfareBag) bag);
}
}

View File

@ -0,0 +1,30 @@
package com.ljsd.jieling.logic.store.newRechargeInfo.rechargeHandler;
import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.logic.store.newRechargeInfo.bean.AbstractWelfareBag;
import com.ljsd.jieling.logic.store.newRechargeInfo.bean.ReceiveWelfareBag;
import config.SRechargeCommodityNewConfig;
import java.util.Map;
/**
* @author lvxinran
* @date 2021/4/20
* @discribe
*/
public class ReceiveHandler extends AbstractRechargeHandler {
@Override
public Map<Integer, ? extends AbstractWelfareBag> getRechargeMap(User user) {
return user.getPlayerInfoManager().getNewRechargeInfo().getReceiveMap();
}
@Override
public AbstractWelfareBag initUnitWF(User user, SRechargeCommodityNewConfig config)throws Exception {
return new ReceiveWelfareBag(user,config);
}
@Override
public void addNew(User user, AbstractWelfareBag bag) {
user.getPlayerInfoManager().getNewRechargeInfo().addReceive((ReceiveWelfareBag) bag);
}
}

View File

@ -0,0 +1,20 @@
package com.ljsd.jieling.logic.store.newRechargeInfo.rechargeHandler;
import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.logic.store.newRechargeInfo.bean.AbstractWelfareBag;
import config.SRechargeCommodityNewConfig;
import java.util.Map;
public interface RechargeHandler {
boolean refreshStatus(User user,int rechargeId);
Map<Integer,? extends AbstractWelfareBag> getRechargeMap(User user);
boolean rechargeIsInBag(User user,int rechargeId);
void addNew(User user,AbstractWelfareBag bag);
AbstractWelfareBag initUnitWF(User user, SRechargeCommodityNewConfig config) throws Exception;
}

View File

@ -0,0 +1,30 @@
package com.ljsd.jieling.logic.store.newRechargeInfo.rechargeHandler;
import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.logic.store.newRechargeInfo.bean.AbstractWelfareBag;
import com.ljsd.jieling.logic.store.newRechargeInfo.bean.TimeLimitWelfareBag;
import config.SRechargeCommodityNewConfig;
import java.util.Map;
/**
* @author lvxinran
* @date 2021/4/20
* @discribe
*/
public class TimeLimitHandler extends AbstractRechargeHandler{
@Override
public Map<Integer, ? extends AbstractWelfareBag> getRechargeMap(User user) {
return user.getPlayerInfoManager().getNewRechargeInfo().getTimeLimitMap();
}
@Override
public AbstractWelfareBag initUnitWF(User user, SRechargeCommodityNewConfig config) throws Exception {
return new TimeLimitWelfareBag(user,config);
}
@Override
public void addNew(User user, AbstractWelfareBag bag) {
user.getPlayerInfoManager().getNewRechargeInfo().addTimeLimit((TimeLimitWelfareBag) bag);
}
}