From d59ed960e5de1f48125ce4864399b9addc512c44 Mon Sep 17 00:00:00 2001 From: nili Date: Thu, 4 Apr 2024 12:47:06 +0800 Subject: [PATCH] =?UTF-8?q?saveAdvRecordV2=E5=8A=A0=E7=AD=BE=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../group/game/dao/bean/MatrixApp.java | 1 + .../dao/mapper/MatrixAdvRecordMapper.java | 5 ++-- .../group/game/service/MatrixService.java | 23 +++++++++++++-- .../service/bo/MatrixAdvRecordEditBo.java | 29 +++++++++++++++++++ .../game/web/controller/MatrixController.java | 7 +++++ 5 files changed, 60 insertions(+), 5 deletions(-) diff --git a/game-dao/src/main/java/awesome/group/game/dao/bean/MatrixApp.java b/game-dao/src/main/java/awesome/group/game/dao/bean/MatrixApp.java index 18b94be..8196df1 100644 --- a/game-dao/src/main/java/awesome/group/game/dao/bean/MatrixApp.java +++ b/game-dao/src/main/java/awesome/group/game/dao/bean/MatrixApp.java @@ -13,4 +13,5 @@ public class MatrixApp { private String url; private Long income;//分 private String channel; + private String secret; } diff --git a/game-dao/src/main/java/awesome/group/game/dao/mapper/MatrixAdvRecordMapper.java b/game-dao/src/main/java/awesome/group/game/dao/mapper/MatrixAdvRecordMapper.java index e9ff57f..1a66b27 100644 --- a/game-dao/src/main/java/awesome/group/game/dao/mapper/MatrixAdvRecordMapper.java +++ b/game-dao/src/main/java/awesome/group/game/dao/mapper/MatrixAdvRecordMapper.java @@ -1,14 +1,15 @@ package awesome.group.game.dao.mapper; import awesome.group.game.dao.bean.MatrixAdvRecord; +import awesome.group.game.dao.bean.MatrixApp; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Select; public interface MatrixAdvRecordMapper extends BaseMapper { - @Select("select id from matrix_app where code = #{code}") - Integer queryAppId(String code); + @Select("select * from matrix_app where code = #{code}") + MatrixApp queryApp(String code); @Select("select count(*) from matrix_white_device where channel = #{channel} and device_id = #{deviceId}") Integer queryWhitelist(String channel, String deviceId); diff --git a/game-service/src/main/java/awesome/group/game/service/MatrixService.java b/game-service/src/main/java/awesome/group/game/service/MatrixService.java index 984a84b..4e24446 100644 --- a/game-service/src/main/java/awesome/group/game/service/MatrixService.java +++ b/game-service/src/main/java/awesome/group/game/service/MatrixService.java @@ -5,6 +5,7 @@ import awesome.group.game.dao.bean.MatrixApp; import awesome.group.game.dao.mapper.MatrixAdvRecordMapper; import awesome.group.game.dao.mapper.MatrixAppMapper; import awesome.group.game.service.bo.MatrixAdvRecordEditBo; +import awesome.group.game.service.util.EncryptUtil; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; import org.springframework.util.Assert; @@ -21,13 +22,13 @@ public class MatrixService { public void saveRecord(MatrixAdvRecordEditBo bo, String ip) { Assert.isTrue(StringUtils.hasText(bo.appCode), "appCode不能为空"); - Integer appId = mapper.queryAppId(bo.appCode); - if (appId == null) { + MatrixApp app = mapper.queryApp(bo.appCode); + if (app == null) { return;//非法请求,直接忽略 } MatrixAdvRecord record = new MatrixAdvRecord(); record.setDeviceId(bo.deviceId); - record.setAppId(appId); + record.setAppId(app.getId()); record.setPlatform(bo.platform); record.setAdvType(bo.advType); record.setEcpm(bo.advType > 1000 ? 0 : bo.ecpm); @@ -38,6 +39,22 @@ public class MatrixService { mapper.insert(record); } + public void saveRecordV2(MatrixAdvRecordEditBo bo, String ip) { + if (!StringUtils.hasText(bo.appCode) || !StringUtils.hasText(bo.sign)) { + return; + } + MatrixApp app = mapper.queryApp(bo.appCode); + if (app == null) { + return; + } + String secret = app.getSecret(); + String str = bo.getSignStr(secret); + if (!bo.sign.equalsIgnoreCase(EncryptUtil.sha1(str))) { + return; + } + saveRecord(bo, ip); + } + public boolean whiteList(String deviceId, String appCode) { MatrixApp app = appMapper.queryByCode(appCode); if (app == null) { diff --git a/game-service/src/main/java/awesome/group/game/service/bo/MatrixAdvRecordEditBo.java b/game-service/src/main/java/awesome/group/game/service/bo/MatrixAdvRecordEditBo.java index abda3c7..389001e 100644 --- a/game-service/src/main/java/awesome/group/game/service/bo/MatrixAdvRecordEditBo.java +++ b/game-service/src/main/java/awesome/group/game/service/bo/MatrixAdvRecordEditBo.java @@ -1,5 +1,9 @@ package awesome.group.game.service.bo; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + public class MatrixAdvRecordEditBo { public String deviceId; public String appCode; @@ -11,6 +15,31 @@ public class MatrixAdvRecordEditBo { public String ip; public Integer advId; + public String sign; + public MatrixAdvRecordEditBo() { } + + public String getSignStr(String secret) { + Map map = new HashMap<>(); + map.put("deviceId", deviceId); + map.put("appCode", appCode); + map.put("platform", platform); + map.put("advType", advType); + map.put("ecpm", ecpm); + map.put("deviceBrand", deviceBrand); + map.put("deviceName", deviceName); + map.put("advId", advId); + List keys = map.keySet().stream().sorted().toList(); + for (String k : keys) { + if (map.get(k) == null) { + continue; + } + sign += k + "=" + map.get(k) + "&"; + } + + // 不同批次 key 会变化 + sign += "secret=" + secret; + return sign; + } } diff --git a/game-web/src/main/java/awesome/group/game/web/controller/MatrixController.java b/game-web/src/main/java/awesome/group/game/web/controller/MatrixController.java index ea1fabf..be956cd 100644 --- a/game-web/src/main/java/awesome/group/game/web/controller/MatrixController.java +++ b/game-web/src/main/java/awesome/group/game/web/controller/MatrixController.java @@ -21,6 +21,13 @@ public class MatrixController { return new R<>(R.CODE_SUCCESS, "ok", null); } + @PostMapping("/saveAdvRecordV2") + @RestApi + public R saveAdvRecordV2(@RequestBody MatrixAdvRecordEditBo bo) { + matrixService.saveRecordV2(bo, RequestContext.getIpAddr(RequestContext.getRequest())); + return new R<>(R.CODE_SUCCESS, "ok", null); + } + @GetMapping("/whiteList") @RestApi public R whiteList(@RequestParam String deviceId, @RequestParam String appCode){