|
@@ -1,24 +1,27 @@
|
|
|
package com.zanxiang.game.back.serve.service.impl;
|
|
|
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import com.github.sd4324530.jtuple.Tuple2;
|
|
|
import com.zanxiang.game.back.base.pojo.enums.OrderStatusEnum;
|
|
|
import com.zanxiang.game.back.serve.dao.mapper.GameTencentMiniGameBackLogMapper;
|
|
|
-import com.zanxiang.game.back.serve.pojo.entity.GameTencentMiniGameBackLog;
|
|
|
-import com.zanxiang.game.back.serve.pojo.entity.GameTencentMiniGameOrder;
|
|
|
-import com.zanxiang.game.back.serve.pojo.entity.GameTencentMiniGameRoleRegister;
|
|
|
-import com.zanxiang.game.back.serve.pojo.entity.GameTencentMiniGameUser;
|
|
|
+import com.zanxiang.game.back.serve.pojo.entity.*;
|
|
|
import com.zanxiang.game.back.serve.pojo.enums.ActionTypeEnum;
|
|
|
import com.zanxiang.game.back.serve.pojo.enums.BackStatusEnum;
|
|
|
import com.zanxiang.game.back.serve.pojo.enums.BackTypeEnum;
|
|
|
import com.zanxiang.game.back.serve.service.IGameTencentMiniGameBackLogService;
|
|
|
+import com.zanxiang.game.back.serve.service.IGameTencentMiniGameCallbackService;
|
|
|
+import com.zanxiang.game.back.serve.service.IGameTencentMiniGameUserService;
|
|
|
import com.zanxiang.module.util.DateUtil;
|
|
|
import com.zanxiang.module.util.JsonUtil;
|
|
|
+import com.zanxiang.module.util.URIUtil;
|
|
|
import lombok.AllArgsConstructor;
|
|
|
import lombok.Builder;
|
|
|
import lombok.Data;
|
|
|
import lombok.NoArgsConstructor;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.apache.logging.log4j.util.Strings;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.http.ResponseEntity;
|
|
|
import org.springframework.stereotype.Service;
|
|
@@ -35,6 +38,12 @@ public class GameTencentMiniGameBackLogServiceImpl extends ServiceImpl<GameTence
|
|
|
@Autowired
|
|
|
private RestTemplate restTemplate;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private IGameTencentMiniGameUserService gameTencentMiniGameUserService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IGameTencentMiniGameCallbackService gameTencentMiniGameCallbackService;
|
|
|
+
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public Tuple2<BackStatusEnum, String> userBack(GameTencentMiniGameUser userLog) {
|
|
@@ -142,7 +151,7 @@ public class GameTencentMiniGameBackLogServiceImpl extends ServiceImpl<GameTence
|
|
|
.build();
|
|
|
try {
|
|
|
log.error("腾讯小游戏回传参数:{}", JsonUtil.toString(request));
|
|
|
- ResponseEntity<Map> response = restTemplate.postForEntity("http://tracking.e.qq.com/conv", request, Map.class);
|
|
|
+ ResponseEntity<Map> response = restTemplate.postForEntity(this.getCallBackUrl(backLog), request, Map.class);
|
|
|
log.error("腾讯小游戏回传完成:{}", JsonUtil.toString(response.getBody()));
|
|
|
if (response.getStatusCode().is2xxSuccessful()) {
|
|
|
if (Objects.equals(response.getBody().get("code").toString(), "0")) {
|
|
@@ -156,6 +165,45 @@ public class GameTencentMiniGameBackLogServiceImpl extends ServiceImpl<GameTence
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ private String getCallBackUrl(GameTencentMiniGameBackLog backLog) {
|
|
|
+ GameTencentMiniGameUser user = gameTencentMiniGameUserService.getOne(new LambdaQueryWrapper<GameTencentMiniGameUser>()
|
|
|
+ .eq(GameTencentMiniGameUser::getGameId, backLog.getGameId())
|
|
|
+ .eq(GameTencentMiniGameUser::getWechatAppId, backLog.getWechatAppId())
|
|
|
+ .eq(GameTencentMiniGameUser::getWechatOpenid, backLog.getWechatOpenid())
|
|
|
+ .eq(GameTencentMiniGameUser::getAdAccountId, backLog.getAdAccountId())
|
|
|
+ .eq(GameTencentMiniGameUser::getBackType, BackTypeEnum.BACK_API.getBackType())
|
|
|
+ .orderByDesc(GameTencentMiniGameUser::getCreateTime)
|
|
|
+ .last("limit 1"));
|
|
|
+ String callBackUrl = Optional.ofNullable(user)
|
|
|
+ .map(GameTencentMiniGameUser::getCallBackUrl)
|
|
|
+ .orElse(null);
|
|
|
+ if (Strings.isNotBlank(callBackUrl)) {
|
|
|
+ return callBackUrl;
|
|
|
+ }
|
|
|
+ GameTencentMiniGameCallback tencentMiniGameCallback = gameTencentMiniGameCallbackService.getOne(
|
|
|
+ new LambdaQueryWrapper<GameTencentMiniGameCallback>()
|
|
|
+ .eq(GameTencentMiniGameCallback::getWechatOpenid, backLog.getWechatOpenid())
|
|
|
+ .and(qw -> qw.eq(GameTencentMiniGameCallback::getImpressionId, backLog.getClickId())
|
|
|
+ .or().eq(GameTencentMiniGameCallback::getRequestId, backLog.getClickId())
|
|
|
+ )
|
|
|
+ .orderByDesc(GameTencentMiniGameCallback::getClickTime)
|
|
|
+ .last("limit 1"));
|
|
|
+ String callBack = Optional.ofNullable(tencentMiniGameCallback)
|
|
|
+ .map(GameTencentMiniGameCallback::getCallback)
|
|
|
+ .orElse(null);
|
|
|
+ if (Strings.isBlank(callBack)) {
|
|
|
+ return "http://tracking.e.qq.com/conv";
|
|
|
+ }
|
|
|
+ callBackUrl = URIUtil.decodeURIComponent(callBack);
|
|
|
+ if (user != null) {
|
|
|
+ gameTencentMiniGameUserService.update(new LambdaUpdateWrapper<GameTencentMiniGameUser>()
|
|
|
+ .set(GameTencentMiniGameUser::getCallBackUrl, callBackUrl)
|
|
|
+ .eq(GameTencentMiniGameUser::getId, user.getId())
|
|
|
+ );
|
|
|
+ }
|
|
|
+ return callBackUrl;
|
|
|
+ }
|
|
|
+
|
|
|
@Data
|
|
|
@NoArgsConstructor
|
|
|
@AllArgsConstructor
|