From fa7f54ce5d1429df802bbdac50897f269fa12ae6 Mon Sep 17 00:00:00 2001 From: nili Date: Thu, 18 Apr 2024 11:48:53 +0800 Subject: [PATCH] =?UTF-8?q?=E7=99=BD=E5=90=8D=E5=8D=95=E5=92=8C=E5=88=B7?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=90=8E=E5=8F=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../game/dao/bean/MatrixMockSchedule.java | 21 +++++ .../game/dao/bean/MatrixWhiteDevice.java | 16 ++++ .../dao/mapper/MatrixMockScheduleMapper.java | 13 +++ .../dao/mapper/MatrixWhiteDeviceMapper.java | 23 +++++ .../group/game/service/AdminService.java | 91 +++++++++++++++++-- .../game/service/bo/AddMockScheduleReq.java | 8 ++ .../game/web/rest/matrix/AdminController.java | 43 ++++++++- 7 files changed, 205 insertions(+), 10 deletions(-) create mode 100644 game-dao/src/main/java/awesome/group/game/dao/bean/MatrixMockSchedule.java create mode 100644 game-dao/src/main/java/awesome/group/game/dao/bean/MatrixWhiteDevice.java create mode 100644 game-dao/src/main/java/awesome/group/game/dao/mapper/MatrixMockScheduleMapper.java create mode 100644 game-dao/src/main/java/awesome/group/game/dao/mapper/MatrixWhiteDeviceMapper.java create mode 100644 game-service/src/main/java/awesome/group/game/service/bo/AddMockScheduleReq.java diff --git a/game-dao/src/main/java/awesome/group/game/dao/bean/MatrixMockSchedule.java b/game-dao/src/main/java/awesome/group/game/dao/bean/MatrixMockSchedule.java new file mode 100644 index 0000000..d9d88a9 --- /dev/null +++ b/game-dao/src/main/java/awesome/group/game/dao/bean/MatrixMockSchedule.java @@ -0,0 +1,21 @@ +package awesome.group.game.dao.bean; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; + +import java.sql.Timestamp; + +@Data +public class MatrixMockSchedule { + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + private Integer appId; + private String channel; + private Integer incomeYuan; + private Long mockIncome;//ecpm累计,分 + private Integer status; + private Timestamp scheduleTime; + private Timestamp createdAt; + private Timestamp updatedAt; +} diff --git a/game-dao/src/main/java/awesome/group/game/dao/bean/MatrixWhiteDevice.java b/game-dao/src/main/java/awesome/group/game/dao/bean/MatrixWhiteDevice.java new file mode 100644 index 0000000..99e5b95 --- /dev/null +++ b/game-dao/src/main/java/awesome/group/game/dao/bean/MatrixWhiteDevice.java @@ -0,0 +1,16 @@ +package awesome.group.game.dao.bean; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; + +import java.sql.Timestamp; + +@Data +public class MatrixWhiteDevice { + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + private String deviceId; + private String channel; + private Timestamp createdAt; +} diff --git a/game-dao/src/main/java/awesome/group/game/dao/mapper/MatrixMockScheduleMapper.java b/game-dao/src/main/java/awesome/group/game/dao/mapper/MatrixMockScheduleMapper.java new file mode 100644 index 0000000..287b77f --- /dev/null +++ b/game-dao/src/main/java/awesome/group/game/dao/mapper/MatrixMockScheduleMapper.java @@ -0,0 +1,13 @@ +package awesome.group.game.dao.mapper; + +import awesome.group.game.dao.bean.MatrixMockSchedule; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Update; + +public interface MatrixMockScheduleMapper extends BaseMapper { + @Update("update matrix_mock_schedule set status=#{status} where id = #{id}") + int updateStatus(int status, int id); + + @Update("update matrix_mock_schedule set mock_income = mock_income + #{incrMockIncome} where id = #{id}") + int updateMockIncome(long incrMockIncome, int id); +} diff --git a/game-dao/src/main/java/awesome/group/game/dao/mapper/MatrixWhiteDeviceMapper.java b/game-dao/src/main/java/awesome/group/game/dao/mapper/MatrixWhiteDeviceMapper.java new file mode 100644 index 0000000..4555878 --- /dev/null +++ b/game-dao/src/main/java/awesome/group/game/dao/mapper/MatrixWhiteDeviceMapper.java @@ -0,0 +1,23 @@ +package awesome.group.game.dao.mapper; + +import awesome.group.game.dao.bean.MatrixWhiteDevice; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Delete; +import org.apache.ibatis.annotations.Insert; +import org.apache.ibatis.annotations.Select; + +import java.util.List; + +public interface MatrixWhiteDeviceMapper extends BaseMapper { + @Insert("insert ignore into matrix_white_device (device_id, channel) values (#{deviceId}, #{channel})") + void insertWhiteList(String deviceId, String channel); + + @Select("select device_id from matrix_white_device") + List whiteList(); + + @Select("select count(*) from matrix_white_device where device_id = #{deviceId}") + Integer queryWhitelist(String deviceId); + + @Delete("delete from matrix_white_device where device_id = #{deviceId}") + int deleteByDeviceId(String deviceId); +} diff --git a/game-service/src/main/java/awesome/group/game/service/AdminService.java b/game-service/src/main/java/awesome/group/game/service/AdminService.java index 32905ed..c7e3340 100644 --- a/game-service/src/main/java/awesome/group/game/service/AdminService.java +++ b/game-service/src/main/java/awesome/group/game/service/AdminService.java @@ -1,13 +1,7 @@ package awesome.group.game.service; -import awesome.group.game.dao.bean.MatrixAdmin; -import awesome.group.game.dao.bean.MatrixAdvAggregation; -import awesome.group.game.dao.bean.MatrixAdvRecord; -import awesome.group.game.dao.bean.MatrixApp; -import awesome.group.game.dao.mapper.MatrixAdminMapper; -import awesome.group.game.dao.mapper.MatrixAdvAggregationMapper; -import awesome.group.game.dao.mapper.MatrixAdvRecordMapper; -import awesome.group.game.dao.mapper.MatrixAppMapper; +import awesome.group.game.dao.bean.*; +import awesome.group.game.dao.mapper.*; import awesome.group.game.service.bo.*; import awesome.group.game.service.common.exception.PaganiException; import awesome.group.game.service.common.exception.PaganiExceptionCode; @@ -23,6 +17,7 @@ import com.google.common.base.Joiner; import org.apache.commons.lang.RandomStringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; @@ -56,6 +51,16 @@ public class AdminService { @Autowired private AggregationService aggregationService; + @Autowired + private MatrixWhiteDeviceMapper whiteDeviceMapper; + + @Autowired + private MatrixMockScheduleMapper mockScheduleMapper; + + @Lazy + @Autowired + private AdminService adminService; + public static final int SUPER_ADMIN = 1;//超级管理员 public static final int NORMAL_ADMIN = 2;//普通管理员 public static final int OTHER = 3;//普通账号 @@ -226,6 +231,76 @@ public class AdminService { } } + @Async + public void mockData(MatrixMockSchedule schedule) { + mockScheduleMapper.updateStatus(1, schedule.getId()); + String channel = schedule.getChannel(); + int yuan = schedule.getIncomeYuan(); + List mockDevice = advRecordMapper.getWhiteDevice(channel); + if (CollectionUtils.isEmpty(mockDevice)) { + return; + } + long income = 0; + long target = yuan * 100L * 1000; + while (income < target) { + try { + Thread.sleep(ThreadLocalRandom.current().nextInt(10_000, 20_000)); + } catch (Exception e) { + L.trace("mockData", "error:" + e.getMessage(), e); + } + MatrixAdvRecord record = mockDevice.get(ThreadLocalRandom.current().nextInt(0, mockDevice.size())); + long ecpm = ThreadLocalRandom.current().nextInt(500_00, 1500_00); + record.setId(null); + record.setEcpm(ecpm); + record.setAppId(schedule.getAppId()); + record.setPlatform(2); + record.setAdvType(3); + + income += ecpm; + advRecordMapper.insert(record); + mockScheduleMapper.updateMockIncome(ecpm, schedule.getId()); + } + mockScheduleMapper.updateStatus(2, schedule.getId()); + } + + @Scheduled(cron = "0 * * * * ?") + public void mockSchedule() { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(); + queryWrapper.le(MatrixMockSchedule::getScheduleTime, new Timestamp(System.currentTimeMillis())); + queryWrapper.eq(MatrixMockSchedule::getStatus, 0); + List res = mockScheduleMapper.selectList(queryWrapper); + res.forEach(adminService::mockData); + } + + + public void addWhiteList(String deviceId, String channel) { + if (whiteDeviceMapper.queryWhitelist(deviceId) > 0) { + return; + } + whiteDeviceMapper.insertWhiteList(deviceId, channel); + } + + public void deleteWhiteList(String deviceId) { + whiteDeviceMapper.deleteByDeviceId(deviceId); + } + + public List whiteDeviceList() { + return whiteDeviceMapper.selectList(null); + } + + public List mockScheduleList() { + return mockScheduleMapper.selectList(null); + } + + public void addMockSchedule(AddMockScheduleReq bo) { + MatrixMockSchedule schedule = new MatrixMockSchedule(); + schedule.setAppId(bo.appId); + schedule.setScheduleTime(new Timestamp(bo.scheduleTime)); + schedule.setChannel(bo.channel); + schedule.setIncomeYuan(bo.incomeYuan); + mockScheduleMapper.insert(schedule); + } + public OverviewBo incomeOverview(int adminId, String code) { if (StringUtils.hasText(code)) { MatrixApp app = appMapper.queryByCode(code); diff --git a/game-service/src/main/java/awesome/group/game/service/bo/AddMockScheduleReq.java b/game-service/src/main/java/awesome/group/game/service/bo/AddMockScheduleReq.java new file mode 100644 index 0000000..f9c8d1c --- /dev/null +++ b/game-service/src/main/java/awesome/group/game/service/bo/AddMockScheduleReq.java @@ -0,0 +1,8 @@ +package awesome.group.game.service.bo; + +public class AddMockScheduleReq { + public Integer appId; + public String channel; + public Integer incomeYuan; + public long scheduleTime;//毫秒 +} diff --git a/game-web/src/main/java/awesome/group/game/web/rest/matrix/AdminController.java b/game-web/src/main/java/awesome/group/game/web/rest/matrix/AdminController.java index 2258ebe..c16c474 100644 --- a/game-web/src/main/java/awesome/group/game/web/rest/matrix/AdminController.java +++ b/game-web/src/main/java/awesome/group/game/web/rest/matrix/AdminController.java @@ -1,13 +1,16 @@ package awesome.group.game.web.rest.matrix; -import awesome.group.game.web.RequestContext; -import awesome.group.game.web.aop.RestApi; import awesome.group.game.dao.bean.MatrixAdmin; import awesome.group.game.dao.bean.MatrixApp; +import awesome.group.game.dao.bean.MatrixMockSchedule; +import awesome.group.game.dao.bean.MatrixWhiteDevice; import awesome.group.game.service.AdminService; +import awesome.group.game.service.MatrixService; import awesome.group.game.service.bo.*; import awesome.group.game.service.common.response.R; import awesome.group.game.service.util.JwtUtils; +import awesome.group.game.web.RequestContext; +import awesome.group.game.web.aop.RestApi; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; import jakarta.servlet.http.Cookie; @@ -23,6 +26,9 @@ public class AdminController { @Resource private AdminService adminService; + @Resource + private MatrixService matrixService; + @PostMapping("/login") @RestApi public R adminLogin(@RequestParam String name, @RequestParam String pwd) { @@ -99,4 +105,37 @@ public class AdminController { adminService.mockData(appCode, incomeYuan, channel); return new R<>(R.CODE_SUCCESS, "ok", null); } + + @PostMapping("/addWhiteList") + @RestApi + public R addWhiteList(@RequestParam String deviceId, @RequestParam String channel){ + adminService.addWhiteList(deviceId, channel); + return new R<>(R.CODE_SUCCESS, "ok", null); + } + + @PostMapping("/deleteWhiteList") + @RestApi + public R deleteWhiteList(@RequestParam String deviceId) { + adminService.deleteWhiteList(deviceId); + return new R<>(R.CODE_SUCCESS, "ok", null); + } + + @GetMapping("/whiteList") + @RestApi + public R> whiteList() { + return new R<>(R.CODE_SUCCESS, "ok", adminService.whiteDeviceList()); + } + + @GetMapping("/scheduleList") + @RestApi + public R> scheduleList() { + return new R<>(R.CODE_SUCCESS, "ok", adminService.mockScheduleList()); + } + + @PostMapping("/addSchedule") + @RestApi + public R addSchedule(@RequestBody AddMockScheduleReq bo) { + adminService.addMockSchedule(bo); + return new R<>(R.CODE_SUCCESS, "ok", null); + } }