|
@@ -11,11 +11,13 @@ import com.zanxiang.game.back.base.rpc.ITtMiniGameBackRpc;
|
|
|
import com.zanxiang.game.module.base.pojo.enums.AccountTypeEnum;
|
|
|
import com.zanxiang.game.module.base.pojo.enums.GameCategoryEnum;
|
|
|
import com.zanxiang.game.module.mybatis.entity.*;
|
|
|
+import com.zanxiang.game.module.sdk.constant.RedisKeyConstant;
|
|
|
import com.zanxiang.game.module.sdk.enums.CallBackTypeEnum;
|
|
|
import com.zanxiang.game.module.sdk.pojo.dto.PlatformOrderDTO;
|
|
|
import com.zanxiang.game.module.sdk.pojo.param.CallBackControlParam;
|
|
|
import com.zanxiang.game.module.sdk.pojo.param.UserData;
|
|
|
import com.zanxiang.game.module.sdk.service.*;
|
|
|
+import com.zanxiang.module.redis.service.IDistributedLockComponent;
|
|
|
import com.zanxiang.module.util.JsonUtil;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.dubbo.config.annotation.DubboReference;
|
|
@@ -26,6 +28,7 @@ import org.springframework.stereotype.Service;
|
|
|
import java.time.LocalDateTime;
|
|
|
import java.util.Map;
|
|
|
import java.util.Objects;
|
|
|
+import java.util.concurrent.TimeUnit;
|
|
|
|
|
|
/**
|
|
|
* @author : lingfeng
|
|
@@ -66,17 +69,38 @@ public class CallBackServiceImpl implements ICallBackService {
|
|
|
@Autowired
|
|
|
private IGameBackLogService gameBackLogService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private IDistributedLockComponent distributedLockComponent;
|
|
|
+
|
|
|
@Override
|
|
|
public boolean callBackJudge(CallBackControlParam param, UserData userData) {
|
|
|
log.error("事件回传判断, param : {}, userData : {}", JsonUtil.toString(param), JsonUtil.toString(userData));
|
|
|
//事件类型枚举
|
|
|
CallBackTypeEnum callBackTypeEnum = param.getCallBackTypeEnum();
|
|
|
+ //登录(老账号登录)
|
|
|
+ if (Objects.equals(callBackTypeEnum, CallBackTypeEnum.CALL_BACK_LOGIN_IN)) {
|
|
|
+ log.error("事件回传判断, 账号登录不回传, param : {}, userData : {}", JsonUtil.toString(param), JsonUtil.toString(userData));
|
|
|
+ return Boolean.FALSE;
|
|
|
+ }
|
|
|
+ //线程锁
|
|
|
+ String lockKey = RedisKeyConstant.CALL_BACK_JUDGE_LOCK + callBackTypeEnum.getValue() + "_" + userData.getUserId();
|
|
|
+ if (Objects.equals(callBackTypeEnum, CallBackTypeEnum.CALL_BACK_ACTIVATE)) {
|
|
|
+ lockKey = lockKey + "_" + param.getRoleId();
|
|
|
+ }
|
|
|
+ if (Objects.equals(callBackTypeEnum, CallBackTypeEnum.CALL_BACK_PAY_ORDER)) {
|
|
|
+ lockKey = lockKey + "_" + param.getOrderId();
|
|
|
+ }
|
|
|
+ //上锁
|
|
|
+ if (!distributedLockComponent.doLock(lockKey, 0L, 1L, TimeUnit.MINUTES)) {
|
|
|
+ log.error("重复请求触发线程锁, 直接返回false, lockKey : {}", lockKey);
|
|
|
+ return Boolean.FALSE;
|
|
|
+ }
|
|
|
//查询玩家
|
|
|
User user = userService.getById(userData.getUserId());
|
|
|
//不存在渠道
|
|
|
Agent agent = agentService.getById(user.getAgentId());
|
|
|
if (agent == null) {
|
|
|
- log.error("事件回传判断, 渠道信息不存在, param : {}, userData : {}", JsonUtil.toString(param), JsonUtil.toString(userData));
|
|
|
+ log.error("事件回传判断, 渠道信息不存在, 直接返回false, param : {}, userData : {}", JsonUtil.toString(param), JsonUtil.toString(userData));
|
|
|
return Boolean.FALSE;
|
|
|
}
|
|
|
try {
|
|
@@ -94,11 +118,6 @@ public class CallBackServiceImpl implements ICallBackService {
|
|
|
TtAppRoleRegisterBackQueryRpcDTO transform = this.transform(user.getId(), agent, param.getRoleId());
|
|
|
return ttAppBackRpc.roleRegisterBackQuery(transform).getData();
|
|
|
}
|
|
|
- //登录(老账号登录)
|
|
|
- if (Objects.equals(callBackTypeEnum, CallBackTypeEnum.CALL_BACK_LOGIN_IN)) {
|
|
|
- log.error("事件回传判断, 账号登录不回传, param : {}, userData : {}", JsonUtil.toString(param), JsonUtil.toString(userData));
|
|
|
- return Boolean.FALSE;
|
|
|
- }
|
|
|
//支付
|
|
|
if (Objects.equals(callBackTypeEnum, CallBackTypeEnum.CALL_BACK_PAY_ORDER)) {
|
|
|
if (Strings.isBlank(param.getRoleId())) {
|