why преди 4 години
родител
ревизия
cfd6ba777e

+ 29 - 0
src/main/java/com/td/boss/game/comcnttosnb/controller/ComCntToSnbController.java

@@ -0,0 +1,29 @@
+package com.td.boss.game.comcnttosnb.controller;
+
+import com.td.boss.common.controller.CommonController;
+import com.td.boss.common.pojo.Result;
+import com.td.boss.game.comcnttosnb.pojo.ComCntToSnb;
+import com.td.boss.game.comcnttosnb.service.ComCntToSnbService;
+import com.td.boss.game.comcnttosnb.vo.ComCntToSnbVo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/game/comCntToSnb/")
+public class ComCntToSnbController extends CommonController<ComCntToSnbVo, ComCntToSnb, Integer> {
+    @Autowired
+    private ComCntToSnbService comCntToSnbService;
+
+    @GetMapping("get")
+    public Result<ComCntToSnbVo> get(@RequestParam(value = "userId") String userId) {
+        return Result.of(comCntToSnbService.findByUserId(userId));
+    }
+
+    @GetMapping("receive")
+    public Result<String> receive(@RequestParam(value = "userId") String userId) {
+        return comCntToSnbService.receiveByUserId(userId);
+    }
+}

+ 55 - 0
src/main/java/com/td/boss/game/comcnttosnb/pojo/ComCntToSnb.java

@@ -0,0 +1,55 @@
+package com.td.boss.game.comcnttosnb.pojo;
+
+import lombok.Data;
+
+import javax.persistence.*;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * cnt转snb
+ *
+ * @author why
+ * @date 2022/03/05
+ */
+@Data
+@Entity
+@Table(name = "com_cnt_to_snb")
+public class ComCntToSnb implements Serializable {
+    @Id
+    @GeneratedValue(strategy= GenerationType.IDENTITY)
+    private Integer id;
+    /**
+     * 用户id
+     */
+    private String userId;
+    /**
+     * 需要返还的总数
+     */
+    private BigDecimal totalQuantity;
+    /**
+     * 已领取数量
+     */
+    private BigDecimal receivedQuantity;
+    /**
+     * 单位数量(每天可领取量)
+     */
+    private BigDecimal unitQuantity;
+    /**
+     * 领取总天数
+     */
+    private Integer totalDay;
+    /**
+     * 已领取天数
+     */
+    private Integer receivedDay;
+    /**
+     * 开始时间
+     */
+    private Date beginTime;
+    /**
+     * 状态(0=不可领取,1=可以领取)
+     */
+    private Integer status;
+}

+ 14 - 0
src/main/java/com/td/boss/game/comcnttosnb/repository/ComCntToSnbRespository.java

@@ -0,0 +1,14 @@
+package com.td.boss.game.comcnttosnb.repository;
+
+import com.td.boss.common.repository.CommonRepository;
+import com.td.boss.game.comcnttosnb.pojo.ComCntToSnb;
+import org.springframework.stereotype.Repository;
+
+import java.util.Optional;
+
+@Repository
+public interface ComCntToSnbRespository extends CommonRepository<ComCntToSnb, Integer> {
+
+    Optional<ComCntToSnb> findByUserId(String userId);
+
+}

+ 29 - 0
src/main/java/com/td/boss/game/comcnttosnb/service/ComCntToSnbService.java

@@ -0,0 +1,29 @@
+package com.td.boss.game.comcnttosnb.service;
+
+import com.td.boss.common.pojo.Result;
+import com.td.boss.common.service.CommonService;
+import com.td.boss.game.comcnttosnb.pojo.ComCntToSnb;
+import com.td.boss.game.comcnttosnb.vo.ComCntToSnbVo;
+
+/**
+ * Cnt转Snb服务实现
+ *
+ * @author why
+ * @date 2022/03/05
+ */
+public interface ComCntToSnbService extends CommonService<ComCntToSnbVo, ComCntToSnb, Integer> {
+    /**
+     * 通过userid查看snb领取情况
+     *
+     * @param userId 用户id
+     * @return {@link ComCntToSnbVo}
+     */
+    ComCntToSnbVo findByUserId(String userId);
+
+    /**
+     * 通过userid领取snb
+     *
+     * @param userId 用户id
+     */
+    Result<String> receiveByUserId(String userId);
+}

+ 70 - 0
src/main/java/com/td/boss/game/comcnttosnb/service/ComCntToSnbServiceImpl.java

@@ -0,0 +1,70 @@
+package com.td.boss.game.comcnttosnb.service;
+
+import cn.hutool.core.convert.Convert;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.NumberUtil;
+import com.td.boss.common.pojo.Result;
+import com.td.boss.common.service.CommonServiceImpl;
+import com.td.boss.game.comcnttosnb.pojo.ComCntToSnb;
+import com.td.boss.game.comcnttosnb.repository.ComCntToSnbRespository;
+import com.td.boss.game.comcnttosnb.vo.ComCntToSnbVo;
+import com.td.boss.game.comusers.service.ComUsersService;
+import com.td.boss.util.CopyUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+
+@Service
+public class ComCntToSnbServiceImpl extends CommonServiceImpl<ComCntToSnbVo, ComCntToSnb, Integer> implements ComCntToSnbService {
+    @Autowired
+    private ComCntToSnbRespository comCntToSnbRespository;
+    @Autowired
+    private ComUsersService comUsersService;
+
+    /**
+     * 通过userid查看snb领取情况
+     *
+     * @param userId 用户id
+     * @return {@link ComCntToSnbVo}
+     */
+    @Override
+    public ComCntToSnbVo findByUserId(String userId) {
+        ComCntToSnb comCntToSnb = comCntToSnbRespository.findByUserId(userId).orElse(null);
+        return comCntToSnb == null ? null : CopyUtil.copy(comCntToSnb, ComCntToSnbVo.class);
+    }
+
+    /**
+     * 通过userid领取snb
+     *
+     * @param userId 用户id
+     */
+    @Override
+    public Result<String> receiveByUserId(String userId) {
+        ComCntToSnb comCntToSnb = comCntToSnbRespository.findByUserId(userId).orElse(null);
+        if (comCntToSnb == null || comCntToSnb.getStatus().equals(0)) {
+            return Result.of(null, false, "非法领取");
+        }
+        if (comCntToSnb.getReceivedDay() >= comCntToSnb.getTotalDay()) {
+            return Result.of(null, false, "已全部领取完毕");
+        }
+        // 计算可领天数. 服务器时间 - 开始时间
+        Integer day = Convert.toInt(DateUtil.betweenDay(comCntToSnb.getBeginTime(), new Date(), true));
+        if (day - comCntToSnb.getReceivedDay() <= 0) {
+            return Result.of(null, false, "领取失败,今日已领取");
+        }
+        DateUtil.offsetDay(comCntToSnb.getBeginTime(), comCntToSnb.getReceivedDay());
+        // 本次领取量
+        comCntToSnb.setReceivedQuantity(
+                NumberUtil.add(
+                        comCntToSnb.getReceivedQuantity(),
+                        NumberUtil.mul(comCntToSnb.getUnitQuantity(), day)
+                ));
+        // 本次领取天数
+        comCntToSnb.setReceivedDay(comCntToSnb.getReceivedDay() + day);
+        comCntToSnbRespository.save(comCntToSnb);
+        //TODO 更新comUsers
+        //TODO 插入comSnbTran
+        return Result.of(null, false, "领取成功");
+    }
+}

+ 52 - 0
src/main/java/com/td/boss/game/comcnttosnb/vo/ComCntToSnbVo.java

@@ -0,0 +1,52 @@
+package com.td.boss.game.comcnttosnb.vo;
+
+import lombok.Data;
+
+import javax.persistence.*;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * cnt转snb
+ *
+ * @author why
+ * @date 2022/03/05
+ */
+@Data
+public class ComCntToSnbVo implements Serializable {
+
+    private Integer id;
+    /**
+     * 用户id
+     */
+    private String userId;
+    /**
+     * 需要返还的总数
+     */
+    private BigDecimal totalQuantity;
+    /**
+     * 已领取数量
+     */
+    private BigDecimal receivedQuantity;
+    /**
+     * 单位数量(每天可领取量)
+     */
+    private BigDecimal unitQuantity;
+    /**
+     * 领取总天数
+     */
+    private Integer totalDay;
+    /**
+     * 已领取天数
+     */
+    private Integer receivedDay;
+    /**
+     * 开始时间
+     */
+    private Date beginTime;
+    /**
+     * 状态(0=不可领取,1=可以领取)
+     */
+    private Integer status;
+}

+ 34 - 0
src/test/java/com/td/boss/ComPlayerDisasterLogTests.java

@@ -1,7 +1,11 @@
 package com.td.boss;
 
+import cn.hutool.core.convert.Convert;
 import cn.hutool.core.date.DateField;
 import cn.hutool.core.date.DateUtil;
+import cn.hutool.json.JSONUtil;
+import com.td.boss.common.pojo.Result;
+import com.td.boss.game.comcnttosnb.service.ComCntToSnbService;
 import com.td.boss.game.complayerland.pojo.ComPlayerDisasterLog;
 import com.td.boss.game.complayerland.service.ComPlayerDisasterProtectedService;
 import com.td.boss.game.complayerland.service.ComPlayerDisasterLogService;
@@ -24,6 +28,8 @@ class ComPlayerDisasterLogTests {
     private ComPlayerDisasterLogService comPlayerDisasterLogService;
     @Autowired
     private ComPlayerDisasterProtectedService comPlayerDisasterProtectedService;
+    @Autowired
+    private ComCntToSnbService comCntToSnbService;
 
     private String userId = "1002";
 
@@ -72,4 +78,32 @@ class ComPlayerDisasterLogTests {
             comPlayerDisasterLogService.ComPlayerDisasterDayTask(disasterLog);
         }
     }
+
+    /**
+     * 获取userid snb领取情况,如果不在特定的列表,data为null
+     */
+    @Test
+    void getCntToSnb() {
+        // 情况一,在名单中
+        String json = JSONUtil.toJsonStr(Result.of(comCntToSnbService.findByUserId("1002")));
+        System.out.println(json);
+        // 情况二,不在名单中
+        String json2 = JSONUtil.toJsonStr(Result.of(comCntToSnbService.findByUserId("1000")));
+        System.out.println(json2);
+    }
+
+    /**
+     * userid领取snb
+     */
+    @Test
+    void receiveCntToSnb() {
+        Date begin = DateUtil.parse("2022-03-01");
+        Date end = DateUtil.parse("2022-03-05");
+
+        Integer day = Convert.toInt(DateUtil.betweenDay(begin, end, true));
+        System.out.println(DateUtil.format(begin, "yyyy-MM-dd") + " 至 " + DateUtil.format(end, "yyyy-MM-dd") + "相差:" + day + "天");
+
+//        String json = JSONUtil.toJsonStr(comCntToSnbService.receiveByUserId("1002"));
+//        System.out.println(json);
+    }
 }