From 256df2df4de5e21d7250587939c63c572fbb85e0 Mon Sep 17 00:00:00 2001 From: nili Date: Sun, 19 May 2024 23:15:56 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E6=8A=A5v3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../group/game/dao/bean/MatrixAdvRecord.java | 2 + .../group/game/dao/bean/MatrixUser.java | 3 + .../game/dao/mapper/MatrixUserMapper.java | 3 + .../service/bo/matrix/AppNormalConfig.java | 16 +++++ .../game/service/citrus/AdvRecordService.java | 67 +++++++++++++++++++ .../group/game/service/util/DateUtil.java | 4 ++ .../game/web/rest/citrus/UserController.java | 14 ++++ 7 files changed, 109 insertions(+) create mode 100644 game-service/src/main/java/awesome/group/game/service/citrus/AdvRecordService.java diff --git a/game-dao/src/main/java/awesome/group/game/dao/bean/MatrixAdvRecord.java b/game-dao/src/main/java/awesome/group/game/dao/bean/MatrixAdvRecord.java index 523570b..4003b09 100644 --- a/game-dao/src/main/java/awesome/group/game/dao/bean/MatrixAdvRecord.java +++ b/game-dao/src/main/java/awesome/group/game/dao/bean/MatrixAdvRecord.java @@ -16,6 +16,8 @@ public class MatrixAdvRecord { private Integer platform;//1穿山甲,2腾讯,3百度联盟,4 Mintegral,5 快手,6游可赢,7 Sigmob,8 Admob private Integer advType;//1横幅,2插页,3激励视频 private Long ecpm;//单位:分 + private Long ecpmReal; + private Integer userId; private String deviceBrand; private String deviceName; private String ip; diff --git a/game-dao/src/main/java/awesome/group/game/dao/bean/MatrixUser.java b/game-dao/src/main/java/awesome/group/game/dao/bean/MatrixUser.java index 50f3bff..d75ff76 100644 --- a/game-dao/src/main/java/awesome/group/game/dao/bean/MatrixUser.java +++ b/game-dao/src/main/java/awesome/group/game/dao/bean/MatrixUser.java @@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import lombok.Data; +import java.sql.Timestamp; + @Data public class MatrixUser { @TableId(value = "id", type = IdType.AUTO) @@ -19,4 +21,5 @@ public class MatrixUser { private String inviteCode; private Integer upUid; private Long income;//分,累计收益 + private Timestamp createdAt; } diff --git a/game-dao/src/main/java/awesome/group/game/dao/mapper/MatrixUserMapper.java b/game-dao/src/main/java/awesome/group/game/dao/mapper/MatrixUserMapper.java index 2de2521..e39fdda 100644 --- a/game-dao/src/main/java/awesome/group/game/dao/mapper/MatrixUserMapper.java +++ b/game-dao/src/main/java/awesome/group/game/dao/mapper/MatrixUserMapper.java @@ -16,6 +16,9 @@ public interface MatrixUserMapper extends BaseMapper { @Update("update matrix_user set money = money + #{cent} where id = #{userId}") int incMoney(int userId, int cent); + @Update("update matrix_user set income = income + #{ecpmReal} where id = #{userId}") + int incIncome(int userId, long ecpmReal); + @Update("update matrix_user set ali_pay_account = #{aliPayAccount}, name = #{name} where id = #{userId}") int updateAliPayAccount(int userId, String aliPayAccount, String name); } diff --git a/game-service/src/main/java/awesome/group/game/service/bo/matrix/AppNormalConfig.java b/game-service/src/main/java/awesome/group/game/service/bo/matrix/AppNormalConfig.java index feeedde..6f4b3df 100644 --- a/game-service/src/main/java/awesome/group/game/service/bo/matrix/AppNormalConfig.java +++ b/game-service/src/main/java/awesome/group/game/service/bo/matrix/AppNormalConfig.java @@ -1,9 +1,12 @@ package awesome.group.game.service.bo.matrix; import awesome.group.game.dao.bean.MatrixApp; +import awesome.group.game.dao.bean.MatrixUser; import awesome.group.game.service.bo.citrus.AppCashConfig; +import awesome.group.game.service.util.DateUtil; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; +import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; import java.util.List; @@ -31,4 +34,17 @@ public class AppNormalConfig extends AppCashConfig { public Integer day; public Integer rate; } + + public Integer getRate(MatrixUser u) { + if (CollectionUtils.isEmpty(dayRates)) { + return defaultRate; + } + long day = DateUtil.dayCntBetween(u.getCreatedAt().getTime(), System.currentTimeMillis()); + for (DayRate dayRate : dayRates) { + if (day <= dayRate.day) { + return dayRate.rate; + } + } + return defaultRate; + } } diff --git a/game-service/src/main/java/awesome/group/game/service/citrus/AdvRecordService.java b/game-service/src/main/java/awesome/group/game/service/citrus/AdvRecordService.java new file mode 100644 index 0000000..b428740 --- /dev/null +++ b/game-service/src/main/java/awesome/group/game/service/citrus/AdvRecordService.java @@ -0,0 +1,67 @@ +package awesome.group.game.service.citrus; + +import awesome.group.game.dao.bean.MatrixAdvRecord; +import awesome.group.game.dao.bean.MatrixApp; +import awesome.group.game.dao.bean.MatrixUser; +import awesome.group.game.dao.mapper.MatrixAdvRecordMapper; +import awesome.group.game.dao.mapper.MatrixAppMapper; +import awesome.group.game.dao.mapper.MatrixUserMapper; +import awesome.group.game.service.bo.MatrixAdvRecordEditBo; +import awesome.group.game.service.bo.matrix.AppNormalConfig; +import awesome.group.game.service.common.exception.PaganiException; +import awesome.group.game.service.common.exception.PaganiExceptionCode; +import awesome.group.game.service.common.log.L; +import awesome.group.game.service.util.EncryptUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.Assert; +import org.springframework.util.StringUtils; + +@Service +public class AdvRecordService { + @Autowired + private MatrixAdvRecordMapper mapper; + + @Autowired + private MatrixAppMapper appMapper; + + @Autowired + private MatrixUserMapper userMapper; + + public long saveRecordV3(Integer uid, MatrixAdvRecordEditBo bo, String ip) { + Assert.isTrue(StringUtils.hasText(bo.appCode) && StringUtils.hasText(bo.sign), "非法请求"); + MatrixApp app = appMapper.queryByCode(bo.appCode); + Assert.isTrue(app != null, "非法请求"); + String secret = app.getSecret(); + String str = bo.getSignStr(secret); + if (!bo.sign.equalsIgnoreCase(EncryptUtil.sha1(str))) { + L.trace("signError", "sign:" + bo.sign + ",str:" + str + ",secret:" + secret); + throw new PaganiException(PaganiExceptionCode.GENERAL_ERROR, "非法请求"); + } + + long ecpm = bo.advType > 1000 ? 0 : bo.ecpm; + AppNormalConfig config = new AppNormalConfig(app); + MatrixUser u = userMapper.selectById(uid); + Assert.isTrue(u.getAppId().equals(app.getId()), "非法请求"); + long ecpmReal = ecpm * config.getRate(u) / 100; + ecpmReal = Math.min(config.maxIncomeEachVideo * 1000L, ecpmReal); + + MatrixAdvRecord record = new MatrixAdvRecord(); + record.setDeviceId(bo.deviceId); + record.setAppId(u.getAppId()); + record.setPlatform(bo.platform); + record.setAdvType(bo.advType); + record.setEcpm(ecpm); + record.setEcpmReal(ecpmReal); + record.setUserId(uid); + record.setDeviceBrand(bo.deviceBrand); + record.setDeviceName(bo.deviceName); + record.setIp(ip); + record.setAdvId(bo.advId); + + mapper.insert(record); + userMapper.incIncome(uid, ecpmReal); + return ecpmReal; + } + +} diff --git a/game-service/src/main/java/awesome/group/game/service/util/DateUtil.java b/game-service/src/main/java/awesome/group/game/service/util/DateUtil.java index f5fd8fd..acb2ac2 100644 --- a/game-service/src/main/java/awesome/group/game/service/util/DateUtil.java +++ b/game-service/src/main/java/awesome/group/game/service/util/DateUtil.java @@ -119,4 +119,8 @@ public class DateUtil { return (int) (localDate2.toEpochDay() - localDate1.toEpochDay()); } + public static long dayCntBetween(long timestamp1, long timestamp2) { + return 1 + (timestamp2 - timestamp1) / 86400_000; + } + } diff --git a/game-web/src/main/java/awesome/group/game/web/rest/citrus/UserController.java b/game-web/src/main/java/awesome/group/game/web/rest/citrus/UserController.java index 4f28310..daa536c 100644 --- a/game-web/src/main/java/awesome/group/game/web/rest/citrus/UserController.java +++ b/game-web/src/main/java/awesome/group/game/web/rest/citrus/UserController.java @@ -1,7 +1,9 @@ package awesome.group.game.web.rest.citrus; +import awesome.group.game.service.bo.MatrixAdvRecordEditBo; import awesome.group.game.service.bo.citrus.CashRecord; import awesome.group.game.service.bo.citrus.UserBo; +import awesome.group.game.service.citrus.AdvRecordService; import awesome.group.game.service.citrus.UserService; import awesome.group.game.service.common.response.R; import awesome.group.game.web.RequestContext; @@ -18,6 +20,11 @@ public class UserController { @Autowired private UserService userService; + @Autowired + private AdvRecordService advRecordService; + + + @GetMapping("/current") @RestApi public R currentUser() { @@ -43,4 +50,11 @@ public class UserController { userService.applyMoney(RequestContext.getCitrusUid(), money); return new R<>(null); } + + @PostMapping("/saveAdvRecordV3") + @RestApi + public R saveAdvRecordV3(@RequestBody MatrixAdvRecordEditBo bo) { + Long res = advRecordService.saveRecordV3(RequestContext.getCitrusUid(), bo, RequestContext.getIpAddr(RequestContext.getRequest())); + return new R<>(res); + } }