diff --git a/src/main/java/com/example/demo/controller/ConsumeController.java b/src/main/java/com/example/demo/controller/ConsumeController.java index 2b288e5..05518b5 100644 --- a/src/main/java/com/example/demo/controller/ConsumeController.java +++ b/src/main/java/com/example/demo/controller/ConsumeController.java @@ -1,6 +1,6 @@ package com.example.demo.controller; -import com.example.demo.domain.vo.Consume; +import com.example.demo.domain.entity.UserGoldRecord; import com.example.demo.domain.vo.Gold; import com.example.demo.domain.vo.Page; import com.example.demo.domain.vo.Result; @@ -11,8 +11,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.ObjectUtils; import org.springframework.web.bind.annotation.*; -import java.util.List; - /** * @program: gold-java * @ClassName ConsumeController @@ -55,7 +53,7 @@ public class ConsumeController { if (ObjectUtils.isEmpty(page.getPageSize())) { return Result.error("页大小为空!"); } else { - return Result.success(consumeService.selectBy(page.getPageNum(), page.getPageSize(), page.getConsume())); + return Result.success(consumeService.selectBy(page.getPageNum(), page.getPageSize(), page.getConsumeUser())); } } @@ -67,11 +65,13 @@ public class ConsumeController { return Result.success(gold); } - @PostMapping("/selectUser") - public Result selectUser() { - Gold gold = consumeService.statsGold(); - return Result.success(gold); + //消耗金币统计 + @PostMapping("/add") + public Result add(@RequestBody UserGoldRecord userGoldRecord) { + consumeService.add(userGoldRecord); + return Result.success(); } + } diff --git a/src/main/java/com/example/demo/controller/UserController.java b/src/main/java/com/example/demo/controller/UserController.java new file mode 100644 index 0000000..8fea803 --- /dev/null +++ b/src/main/java/com/example/demo/controller/UserController.java @@ -0,0 +1,37 @@ +package com.example.demo.controller; + +import com.example.demo.domain.vo.Gold; +import com.example.demo.domain.vo.GoldUser; +import com.example.demo.domain.vo.Result; +import com.example.demo.service.ConsumeService; +import com.example.demo.service.UserService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +/** + * @program: gold-java + * @ClassName UserController + * @description: + * @author: Double + * @create: 2025−06-25 10:25 + * @Version 1.0 + **/ + +@RestController +@RequestMapping("/user") +@RequiredArgsConstructor +@Slf4j +@CrossOrigin +public class UserController { + + @Autowired + private UserService userService; + + @PostMapping("/selectUser") + public Result selectUser(@RequestBody GoldUser user) { + user = userService.selectUser(user.getJwcode().toString()); + return Result.success(user); + } +} diff --git a/src/main/java/com/example/demo/domain/vo/Consume.java b/src/main/java/com/example/demo/domain/vo/ConsumeUser.java similarity index 96% rename from src/main/java/com/example/demo/domain/vo/Consume.java rename to src/main/java/com/example/demo/domain/vo/ConsumeUser.java index 90c3a00..9b62405 100644 --- a/src/main/java/com/example/demo/domain/vo/Consume.java +++ b/src/main/java/com/example/demo/domain/vo/ConsumeUser.java @@ -20,7 +20,7 @@ import java.util.Date; @Data @NoArgsConstructor @AllArgsConstructor -public class Consume implements Serializable { +public class ConsumeUser implements Serializable { private static final long serialVersionUID = 1L; diff --git a/src/main/java/com/example/demo/domain/vo/GoldUser.java b/src/main/java/com/example/demo/domain/vo/GoldUser.java index d1892c1..474ca4b 100644 --- a/src/main/java/com/example/demo/domain/vo/GoldUser.java +++ b/src/main/java/com/example/demo/domain/vo/GoldUser.java @@ -1,9 +1,12 @@ package com.example.demo.domain.vo; +import com.fasterxml.jackson.annotation.JsonFormat; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; +import java.util.Date; + /** * @program: gold-java * @ClassName ConsumeUser @@ -21,6 +24,16 @@ public class GoldUser { private Integer jwcode; // 精网号 private String market; // 所属地区 private Integer NowSumGold; // 当前金币总数 + private Integer NowPermanentGold; // 当前永久金币 + private Integer NowFreeGold; // 当前免费金币 + private Integer NowTaskGold; // 当前任务金币 private Integer historySumGold; // 历史金币总数 - + private Integer historyPermanentGold; // 历史永久金币 + private Integer historyFreeGold; // 历史免费金币 + private Integer historyTaskGold; // 历史任务金币 + private Integer rechargeNum; // 充值次数 + private Integer consumeNum; // 消费次数 + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "Asia/Shanghai") + private Date firstRecharge; // 首充日期 + } diff --git a/src/main/java/com/example/demo/domain/vo/Page.java b/src/main/java/com/example/demo/domain/vo/Page.java index 1c539b0..bce0330 100644 --- a/src/main/java/com/example/demo/domain/vo/Page.java +++ b/src/main/java/com/example/demo/domain/vo/Page.java @@ -20,7 +20,7 @@ public class Page { private Integer pageNum; private Integer pageSize; private GoldDetail goldDetail; - private Consume consume; + private ConsumeUser consumeUser; private User user; } diff --git a/src/main/java/com/example/demo/mapper/ConsumeMapper.java b/src/main/java/com/example/demo/mapper/ConsumeMapper.java index 98402a0..f0d9d63 100644 --- a/src/main/java/com/example/demo/mapper/ConsumeMapper.java +++ b/src/main/java/com/example/demo/mapper/ConsumeMapper.java @@ -1,6 +1,6 @@ package com.example.demo.mapper; -import com.example.demo.domain.vo.Consume; +import com.example.demo.domain.vo.ConsumeUser; import org.apache.ibatis.annotations.Mapper; import java.util.List; @@ -17,7 +17,7 @@ import java.util.List; @Mapper public interface ConsumeMapper { - List selectAll(); + List selectAll(); - List selectBy(Consume consume); + List selectBy(ConsumeUser consumeUser); } diff --git a/src/main/java/com/example/demo/mapper/UserMapper.java b/src/main/java/com/example/demo/mapper/UserMapper.java new file mode 100644 index 0000000..b348ae8 --- /dev/null +++ b/src/main/java/com/example/demo/mapper/UserMapper.java @@ -0,0 +1,19 @@ +package com.example.demo.mapper; + +import com.example.demo.domain.vo.GoldUser; +import org.apache.ibatis.annotations.Mapper; + +/** + * @program: gold-java + * @ClassName UserMapper + * @description: + * @author: Double + * @create: 2025−06-25 10:40 + * @Version 1.0 + **/ + +@Mapper +public interface UserMapper { + + GoldUser selectUser(String jwcode); +} diff --git a/src/main/java/com/example/demo/service/ConsumeService.java b/src/main/java/com/example/demo/service/ConsumeService.java index 2b144b6..0323b8d 100644 --- a/src/main/java/com/example/demo/service/ConsumeService.java +++ b/src/main/java/com/example/demo/service/ConsumeService.java @@ -1,13 +1,11 @@ package com.example.demo.service; -import com.example.demo.domain.vo.Consume; +import com.example.demo.domain.entity.UserGoldRecord; +import com.example.demo.domain.vo.ConsumeUser; import com.example.demo.domain.vo.Gold; -import com.example.demo.domain.vo.GoldDetail; import com.github.pagehelper.PageInfo; -import java.util.List; - /** * @program: gold-java * @ClassName ConsumeService @@ -16,11 +14,14 @@ import java.util.List; * @create: 2025−06-23 13:58 * @Version 1.0 **/ + public interface ConsumeService { - PageInfo selectAll(Integer pageNum, Integer pageSize); + PageInfo selectAll(Integer pageNum, Integer pageSize); Gold statsGold(); - PageInfo selectBy(Integer pageNum, Integer pageSize, Consume consume); + PageInfo selectBy(Integer pageNum, Integer pageSize, ConsumeUser consumeUser); + + void add(UserGoldRecord userGoldRecord); } diff --git a/src/main/java/com/example/demo/service/UserService.java b/src/main/java/com/example/demo/service/UserService.java new file mode 100644 index 0000000..8b3c4c4 --- /dev/null +++ b/src/main/java/com/example/demo/service/UserService.java @@ -0,0 +1,17 @@ +package com.example.demo.service; + +import com.example.demo.domain.vo.GoldUser; + +/** + * @program: gold-java + * @ClassName UserService + * @description: + * @author: Double + * @create: 2025−06-25 10:30 + * @Version 1.0 + **/ + +public interface UserService { + + GoldUser selectUser(String jwcode); +} diff --git a/src/main/java/com/example/demo/serviceImpl/ConsumeServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/ConsumeServiceImpl.java index 8dc06fc..8c160a6 100644 --- a/src/main/java/com/example/demo/serviceImpl/ConsumeServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/ConsumeServiceImpl.java @@ -1,6 +1,7 @@ package com.example.demo.serviceImpl; -import com.example.demo.domain.vo.Consume; +import com.example.demo.domain.entity.UserGoldRecord; +import com.example.demo.domain.vo.ConsumeUser; import com.example.demo.domain.vo.Gold; import com.example.demo.mapper.ConsumeMapper; import com.example.demo.service.ConsumeService; @@ -9,7 +10,11 @@ import com.github.pagehelper.PageInfo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.List; +import java.util.Random; +import java.util.concurrent.atomic.AtomicInteger; /** * @program: gold-java @@ -28,17 +33,17 @@ public class ConsumeServiceImpl implements ConsumeService { //消耗明细 @Override - public PageInfo selectAll(Integer pageNum, Integer pageSize) { + public PageInfo selectAll(Integer pageNum, Integer pageSize) { PageHelper.startPage(pageNum, pageSize); - List consumes = consumeMapper.selectAll(); - return new PageInfo<>(consumes); + List consumeUsers = consumeMapper.selectAll(); + return new PageInfo<>(consumeUsers); } //消耗金币统计 @Override public Gold statsGold() { Gold gold = new Gold(); - List consumes = consumeMapper.selectAll(); + List consumeUsers = consumeMapper.selectAll(); // 初始化累加器 int permanentGoldSum = 0; @@ -46,18 +51,18 @@ public class ConsumeServiceImpl implements ConsumeService { int taskGoldSum = 0; // 遍历消费记录并累加金币 - for (Consume consume : consumes) { + for (ConsumeUser consumeUser : consumeUsers) { // 累加永久金币 - if (consume.getPermanentGold() != null) { - permanentGoldSum += consume.getPermanentGold(); + if (consumeUser.getPermanentGold() != null) { + permanentGoldSum += consumeUser.getPermanentGold(); } // 累加免费金币 - if (consume.getFreeGold() != null) { - freeGoldSum += consume.getFreeGold(); + if (consumeUser.getFreeGold() != null) { + freeGoldSum += consumeUser.getFreeGold(); } // 累加任务金币 - if (consume.getTaskGold() != null) { - taskGoldSum += consume.getTaskGold(); + if (consumeUser.getTaskGold() != null) { + taskGoldSum += consumeUser.getTaskGold(); } } @@ -71,9 +76,31 @@ public class ConsumeServiceImpl implements ConsumeService { //消耗明细筛选 @Override - public PageInfo selectBy(Integer pageNum, Integer pageSize, Consume consume) { + public PageInfo selectBy(Integer pageNum, Integer pageSize, ConsumeUser consumeUser) { PageHelper.startPage(pageNum, pageSize); - List consumes = consumeMapper.selectBy(consume); - return new PageInfo<>(consumes); + List consumeUsers = consumeMapper.selectBy(consumeUser); + return new PageInfo<>(consumeUsers); + } + + //新增消耗 + @Override + public void add(UserGoldRecord userGoldRecord) { + + // 获取当前时间戳部分 + String timestampPart = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS")); + + // 获取自增计数器部分(三位数,不足补零) + AtomicInteger atomicInteger = new AtomicInteger(0); + + int count = atomicInteger.getAndUpdate(c -> (c >= 999) ? 0 : c + 1); + String counterPart = String.format("%03d", count); + + // 生成随机数部分(四位数) + Random RANDOM = new Random(); + int randomNum = RANDOM.nextInt(9000) + 1000; + + //订单号生成 + userGoldRecord.setOrderCode(timestampPart + counterPart + randomNum); + } } diff --git a/src/main/java/com/example/demo/serviceImpl/UserServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/UserServiceImpl.java new file mode 100644 index 0000000..a0b4651 --- /dev/null +++ b/src/main/java/com/example/demo/serviceImpl/UserServiceImpl.java @@ -0,0 +1,31 @@ +package com.example.demo.serviceImpl; + +import com.example.demo.domain.vo.GoldUser; +import com.example.demo.mapper.ConsumeMapper; +import com.example.demo.mapper.UserMapper; +import com.example.demo.service.UserService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * @program: gold-java + * @ClassName UserServiceImpl + * @description: + * @author: Double + * @create: 2025−06-25 10:32 + * @Version 1.0 + **/ + + +@Service +public class UserServiceImpl implements UserService { + + @Autowired + private UserMapper userMapper; + + @Override + public GoldUser selectUser(String jwcode) { + GoldUser user = userMapper.selectUser(jwcode); + return user; + } +} diff --git a/src/main/resources/mapper/ConsumeMapper.xml b/src/main/resources/mapper/ConsumeMapper.xml index 3f286cc..d18e382 100644 --- a/src/main/resources/mapper/ConsumeMapper.xml +++ b/src/main/resources/mapper/ConsumeMapper.xml @@ -3,7 +3,7 @@ - SELECT u.name AS name, u.jwcode AS jwcode, u.market AS market, @@ -25,7 +25,7 @@ - SELECT u.name AS name, u.jwcode AS jwcode, u.market AS market, diff --git a/src/main/resources/mapper/UserMapper.xml b/src/main/resources/mapper/UserMapper.xml new file mode 100644 index 0000000..8a66507 --- /dev/null +++ b/src/main/resources/mapper/UserMapper.xml @@ -0,0 +1,25 @@ + + + + + + + \ No newline at end of file