From 8aa47d90a9596c34def404a29b50eddc2dac756f Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Fri, 25 Feb 2022 13:19:47 +0800
Subject: [PATCH] 20222223

---
 src/main/resources/mapper/walletCoinOrder/ZhiYaRecordDao.xml                             |   28 ++++
 src/main/java/com/xcong/excoin/modules/coin/parameter/vo/UsdtToGusdVo.java               |    7 +
 src/main/java/com/xcong/excoin/modules/coin/service/impl/CoinServiceImpl.java            |   79 ++++++++++--
 src/main/java/com/xcong/excoin/modules/coin/parameter/vo/ZhiyaInfoVo.java                |    6 +
 src/main/java/com/xcong/excoin/modules/coin/dao/ZhiyaRewardDao.java                      |    7 +
 src/main/java/com/xcong/excoin/modules/coin/parameter/vo/ZhiyaRewardVo.java              |   30 +++++
 src/main/java/com/xcong/excoin/modules/coin/parameter/dto/ZhiyaRewardRecordsPageDto.java |   26 ++++
 src/main/java/com/xcong/excoin/modules/coin/service/CoinService.java                     |    5 
 src/main/java/com/xcong/excoin/modules/coin/dao/ZhiYaRecordDao.java                      |   11 +
 src/main/java/com/xcong/excoin/modules/coin/controller/CoinController.java               |   15 ++
 src/main/java/com/xcong/excoin/modules/coin/entity/ZhiyaRewardEntity.java                |   38 ++++++
 src/main/java/com/xcong/excoin/quartz/job/ZhiyarRewardJob.java                           |   33 +++++
 src/test/java/com/xcong/excoin/GuijiTest.java                                            |   42 +++++++
 src/main/java/com/xcong/excoin/modules/coin/parameter/dto/UsdtToGusdDto.java             |    4 
 14 files changed, 311 insertions(+), 20 deletions(-)

diff --git a/src/main/java/com/xcong/excoin/modules/coin/controller/CoinController.java b/src/main/java/com/xcong/excoin/modules/coin/controller/CoinController.java
index 94e5eb3..499787e 100644
--- a/src/main/java/com/xcong/excoin/modules/coin/controller/CoinController.java
+++ b/src/main/java/com/xcong/excoin/modules/coin/controller/CoinController.java
@@ -5,6 +5,7 @@
 import javax.annotation.Resource;
 import javax.validation.Valid;
 
+import com.xcong.excoin.common.annotations.SubmitRepeat;
 import com.xcong.excoin.modules.coin.parameter.dto.*;
 import com.xcong.excoin.modules.coin.parameter.vo.*;
 
@@ -206,6 +207,7 @@
 	 */
 	@ApiOperation(value="USDT兌換成GUSD", notes="USDT兌換成GUSD")
 	@PostMapping(value="/usdtToGusd")
+	@SubmitRepeat
 	public Result  usdtToGusd(@RequestBody @Valid UsdtToGusdDto usdtToGusdDto) {
 		BigDecimal balance = usdtToGusdDto.getBalance();
 		Integer type = usdtToGusdDto.getType();
@@ -228,6 +230,7 @@
 	 */
 	@ApiOperation(value="质押GUSD", notes="质押GUSD")
 	@PostMapping(value="/zhiYaGusd")
+	@SubmitRepeat
 	public Result  zhiYaGusd(@RequestBody @Valid ZhiYaGusdDto zhiYaGusdDto) {
 		BigDecimal balance = zhiYaGusdDto.getBalance();
 		return coinService.zhiYaGusd(balance);
@@ -249,11 +252,23 @@
 	 */
 	@ApiOperation(value="赎回GUSD", notes="赎回GUSD")
 	@PostMapping(value="/shuhuiGusd")
+	@SubmitRepeat
 	public Result  shuhuiGusd(@RequestBody @Valid ShuhuiGusdDto shuhuiGusdDto) {
 		BigDecimal balance = shuhuiGusdDto.getBalance();
 		Long id = shuhuiGusdDto.getId();
 		return coinService.shuhuiGusd(balance,id);
 	}
+
+	/**
+	 *  获取质押GUSD奖励记录
+	 * @return
+	 */
+	@ApiOperation(value="获取质押GUSD奖励记录", notes="获取质押GUSD奖励记录")
+	@ApiResponses({@ApiResponse( code = 200, message = "success", response = ZhiyaRewardVo.class)})
+	@PostMapping(value="/getZhiyaReward")
+	public Result  getZhiyaReward(@RequestBody @Valid ZhiyaRewardRecordsPageDto recordsPageDto) {
+		return coinService.getZhiyaReward(recordsPageDto);
+	}
 	
 
 }
diff --git a/src/main/java/com/xcong/excoin/modules/coin/dao/ZhiYaRecordDao.java b/src/main/java/com/xcong/excoin/modules/coin/dao/ZhiYaRecordDao.java
index 26dd1de..71da7f4 100644
--- a/src/main/java/com/xcong/excoin/modules/coin/dao/ZhiYaRecordDao.java
+++ b/src/main/java/com/xcong/excoin/modules/coin/dao/ZhiYaRecordDao.java
@@ -6,9 +6,12 @@
 import com.xcong.excoin.modules.coin.entity.OrderCoinsEntity;
 import com.xcong.excoin.modules.coin.entity.ZhiYaEntity;
 import com.xcong.excoin.modules.coin.entity.ZhiYaRecordEntity;
+import com.xcong.excoin.modules.coin.entity.ZhiyaRewardEntity;
 import com.xcong.excoin.modules.coin.parameter.vo.ZhiyaInfoVo;
+import com.xcong.excoin.modules.coin.parameter.vo.ZhiyaRewardVo;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.Date;
 import java.util.List;
 
 public interface ZhiYaRecordDao extends BaseMapper<ZhiYaRecordEntity> {
@@ -22,4 +25,12 @@
     List<ZhiyaInfoVo> selectByMemberId(@Param("memberId")Long memberId);
 
     IPage<ZhiyaInfoVo> selectByMemberIdInPage(Page<ZhiyaInfoVo> page, @Param("record") ZhiYaEntity zhiya);
+
+    IPage<ZhiyaRewardVo> selectZhiyaRewardByMemberIdInPage(Page<ZhiyaRewardVo> page, @Param("record") ZhiyaRewardEntity zhiyaRewardEntity);
+
+    List<ZhiYaRecordEntity> selectZhiYaRewardByStatueAndTime(@Param("orderStatus")int i, @Param("now")Date date);
+
+    Long selectTotalGusdByStatueAndTime(@Param("orderStatus")int i, @Param("now")Date date);
+
+//    void selectZhiYaRewardByStatueAndTime(@Param("orderStatus")int i, @Param("now")Date date);
 }
diff --git a/src/main/java/com/xcong/excoin/modules/coin/dao/ZhiyaRewardDao.java b/src/main/java/com/xcong/excoin/modules/coin/dao/ZhiyaRewardDao.java
new file mode 100644
index 0000000..0e972ca
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/coin/dao/ZhiyaRewardDao.java
@@ -0,0 +1,7 @@
+package com.xcong.excoin.modules.coin.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.xcong.excoin.modules.coin.entity.ZhiyaRewardEntity;
+
+public interface ZhiyaRewardDao extends BaseMapper<ZhiyaRewardEntity> {
+}
diff --git a/src/main/java/com/xcong/excoin/modules/coin/entity/ZhiyaRewardEntity.java b/src/main/java/com/xcong/excoin/modules/coin/entity/ZhiyaRewardEntity.java
new file mode 100644
index 0000000..ef3a7d9
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/coin/entity/ZhiyaRewardEntity.java
@@ -0,0 +1,38 @@
+package com.xcong.excoin.modules.coin.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.xcong.excoin.common.system.base.BaseEntity;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 质押记录表
+ */
+@Data
+@TableName("zhiya_reward")
+public class ZhiyaRewardEntity extends BaseEntity {
+    /**
+     *
+     */
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 会员ID
+     */
+    private Long memberId;
+
+    /**
+     * 质押ID
+     */
+    private Long recordId;
+    /**
+     * 质押编号
+     */
+    private String recordNo;
+    /**
+     * 奖励金额
+     */
+    private BigDecimal rewardAmout;
+
+}
diff --git a/src/main/java/com/xcong/excoin/modules/coin/parameter/dto/UsdtToGusdDto.java b/src/main/java/com/xcong/excoin/modules/coin/parameter/dto/UsdtToGusdDto.java
index 43efc70..d1270bc 100644
--- a/src/main/java/com/xcong/excoin/modules/coin/parameter/dto/UsdtToGusdDto.java
+++ b/src/main/java/com/xcong/excoin/modules/coin/parameter/dto/UsdtToGusdDto.java
@@ -15,8 +15,8 @@
     @ApiModelProperty(value = "划转金额", example = "100")
     private BigDecimal balance;
 
-    @NotNull(message = "转换类型 1:USDT转GUSD 2GUSD转USDT")
-    @ApiModelProperty(value = "币种", example = "1")
+    @NotNull(message = "转换类型不能为空")
+    @ApiModelProperty(value = "转换类型1:USDT转GUSD 2GUSD转USDT", example = "1")
     private Integer type;
 
 }
diff --git a/src/main/java/com/xcong/excoin/modules/coin/parameter/dto/ZhiyaRewardRecordsPageDto.java b/src/main/java/com/xcong/excoin/modules/coin/parameter/dto/ZhiyaRewardRecordsPageDto.java
new file mode 100644
index 0000000..65eddae
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/coin/parameter/dto/ZhiyaRewardRecordsPageDto.java
@@ -0,0 +1,26 @@
+package com.xcong.excoin.modules.coin.parameter.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+
+@Data
+@ApiModel(value = "ZhiyaRewardRecordsPageDto", description = "参数接受类")
+public class ZhiyaRewardRecordsPageDto {
+
+    @NotNull(message = "编号不能为空")
+    @ApiModelProperty(value = "编号", example = "1")
+    private String orderNo;
+
+    @NotNull
+    @Min(1)
+    @ApiModelProperty(value = "第几页", example = "1")
+    private int pageNum;
+
+    @NotNull
+    @ApiModelProperty(value = "每页数量", example = "10")
+    private int pageSize;
+}
diff --git a/src/main/java/com/xcong/excoin/modules/coin/parameter/vo/UsdtToGusdVo.java b/src/main/java/com/xcong/excoin/modules/coin/parameter/vo/UsdtToGusdVo.java
index 0d721e8..d854aaa 100644
--- a/src/main/java/com/xcong/excoin/modules/coin/parameter/vo/UsdtToGusdVo.java
+++ b/src/main/java/com/xcong/excoin/modules/coin/parameter/vo/UsdtToGusdVo.java
@@ -1,9 +1,12 @@
 package com.xcong.excoin.modules.coin.parameter.vo;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.math.BigDecimal;
+import java.util.Date;
 
 @Data
 @ApiModel(value = "UsdtToGusdVo", description = "返回参数类")
@@ -23,4 +26,8 @@
      * 状态【0:待审核 1:成功2:失败】
      */
     private int status;
+
+    @ApiModelProperty(value = "时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createTime;
 }
diff --git a/src/main/java/com/xcong/excoin/modules/coin/parameter/vo/ZhiyaInfoVo.java b/src/main/java/com/xcong/excoin/modules/coin/parameter/vo/ZhiyaInfoVo.java
index c10007a..63c3605 100644
--- a/src/main/java/com/xcong/excoin/modules/coin/parameter/vo/ZhiyaInfoVo.java
+++ b/src/main/java/com/xcong/excoin/modules/coin/parameter/vo/ZhiyaInfoVo.java
@@ -34,6 +34,12 @@
      */
     @ApiModelProperty(value = "数量")
     private BigDecimal zhiyaCnt;
+
+    /**
+     * 总数
+     */
+    @ApiModelProperty(value = "总数")
+    private BigDecimal rewardCnt;
     /**
      * 状态 1:生效中 2:已赎回
      */
diff --git a/src/main/java/com/xcong/excoin/modules/coin/parameter/vo/ZhiyaRewardVo.java b/src/main/java/com/xcong/excoin/modules/coin/parameter/vo/ZhiyaRewardVo.java
new file mode 100644
index 0000000..61f79be
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/coin/parameter/vo/ZhiyaRewardVo.java
@@ -0,0 +1,30 @@
+package com.xcong.excoin.modules.coin.parameter.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+@ApiModel(value = "ZhiyaRewardVo", description = "返回参数类")
+public class ZhiyaRewardVo {
+
+    /**
+     * 质押编号
+     */
+    @ApiModelProperty(value = "质押编号")
+    private String recordNo;
+    /**
+     * 奖励金额
+     */
+    @ApiModelProperty(value = "奖励金额")
+    private BigDecimal rewardAmout;
+
+    @ApiModelProperty(value = "时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createTime;
+
+}
diff --git a/src/main/java/com/xcong/excoin/modules/coin/service/CoinService.java b/src/main/java/com/xcong/excoin/modules/coin/service/CoinService.java
index c5e5e96..e506fb8 100644
--- a/src/main/java/com/xcong/excoin/modules/coin/service/CoinService.java
+++ b/src/main/java/com/xcong/excoin/modules/coin/service/CoinService.java
@@ -7,6 +7,7 @@
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.xcong.excoin.common.response.Result;
 import com.xcong.excoin.modules.coin.parameter.dto.RecordsPageDto;
+import com.xcong.excoin.modules.coin.parameter.dto.ZhiyaRewardRecordsPageDto;
 import com.xcong.excoin.modules.member.entity.MemberWalletCoinEntity;
 import org.apache.ibatis.annotations.Param;
 
@@ -53,4 +54,8 @@
 	Result getZhiyaRecords(RecordsPageDto recordsPageDto);
 
 	Result getusdtToGusdRecords(RecordsPageDto recordsPageDto);
+
+	void grantZhiyaAmount();
+
+	Result getZhiyaReward(ZhiyaRewardRecordsPageDto recordsPageDto);
 }
diff --git a/src/main/java/com/xcong/excoin/modules/coin/service/impl/CoinServiceImpl.java b/src/main/java/com/xcong/excoin/modules/coin/service/impl/CoinServiceImpl.java
index 54eed4f..fa81e53 100644
--- a/src/main/java/com/xcong/excoin/modules/coin/service/impl/CoinServiceImpl.java
+++ b/src/main/java/com/xcong/excoin/modules/coin/service/impl/CoinServiceImpl.java
@@ -9,8 +9,9 @@
 import cn.hutool.core.date.DateUtil;
 import com.xcong.excoin.modules.coin.dao.ZhiYaDao;
 import com.xcong.excoin.modules.coin.dao.ZhiYaRecordDao;
-import com.xcong.excoin.modules.coin.entity.ZhiYaEntity;
-import com.xcong.excoin.modules.coin.entity.ZhiYaRecordEntity;
+import com.xcong.excoin.modules.coin.dao.ZhiyaRewardDao;
+import com.xcong.excoin.modules.coin.entity.*;
+import com.xcong.excoin.modules.coin.parameter.dto.ZhiyaRewardRecordsPageDto;
 import com.xcong.excoin.modules.coin.parameter.vo.*;
 import com.xcong.excoin.modules.platform.entity.PlatformCnyUsdtExchangeEntity;
 import org.springframework.stereotype.Service;
@@ -24,8 +25,6 @@
 import com.xcong.excoin.common.enumerates.MemberWalletCoinEnum;
 import com.xcong.excoin.common.response.Result;
 import com.xcong.excoin.modules.coin.dao.MemberAccountMoneyChangeDao;
-import com.xcong.excoin.modules.coin.entity.MemberAccountMoneyChange;
-import com.xcong.excoin.modules.coin.entity.OrderCoinsDealEntity;
 import com.xcong.excoin.modules.coin.mapper.MemberAccountMoneyChangeMapper;
 import com.xcong.excoin.modules.coin.parameter.dto.RecordsPageDto;
 import com.xcong.excoin.modules.coin.service.CoinService;
@@ -61,6 +60,8 @@
     MemberWalletAgentDao memberWalletAgentDao;
     @Resource
     ZhiYaRecordDao zhiYaRecordDao;
+    @Resource
+    ZhiyaRewardDao zhiyaRewardDao;
     @Resource
     ZhiYaDao zhiYaDao;
     @Resource
@@ -612,6 +613,7 @@
     }
 
     @Override
+    @Transactional
     public Result usdtToGusd(BigDecimal balance,Integer type) {
         //获取用户ID
         Long memberId = LoginUserUtils.getAppLoginUser().getId();
@@ -722,6 +724,7 @@
     }
 
     @Override
+    @Transactional
     public Result zhiYaGusd(BigDecimal balance) {
         //获取用户ID
         Long memberId = LoginUserUtils.getAppLoginUser().getId();
@@ -751,8 +754,8 @@
             return Result.fail(MessageSourceUtils.getString("member_service_0096"));
         }
         //产生质押单,当前有的话,累加质押数量
-        ZhiYaRecordEntity zhiYaRecord = zhiYaRecordDao.selectByMemberIdAndOrderStatus(memberId,1);
-        if(ObjectUtil.isEmpty(zhiYaRecord)){
+//        ZhiYaRecordEntity zhiYaRecord = zhiYaRecordDao.selectByMemberIdAndOrderStatus(memberId,1);
+//        if(ObjectUtil.isEmpty(zhiYaRecord)){
             //产生一条质押记录
             ZhiYaRecordEntity zhiYaRecordEntity = new ZhiYaRecordEntity();
             zhiYaRecordEntity.setMemberId(memberId);
@@ -764,18 +767,19 @@
             Date newDate = DateUtil.offsetDay(date, 1);
             zhiYaRecordEntity.setEffectDate(newDate);
             zhiYaRecordDao.insert(zhiYaRecordEntity);
-        }else{
-            zhiYaRecord.setZhiyaCnt(zhiYaRecord.getZhiyaCnt().add(balance));
-            Date date = new Date();
-            Date newDate = DateUtil.offsetDay(date, 1);
-            zhiYaRecord.setEffectDate(newDate);
-            zhiYaRecordDao.updateById(zhiYaRecord);
-        }
+//        }else{
+//            zhiYaRecord.setZhiyaCnt(zhiYaRecord.getZhiyaCnt().add(balance));
+//            Date date = new Date();
+//            Date newDate = DateUtil.offsetDay(date, 1);
+//            zhiYaRecord.setEffectDate(newDate);
+//            zhiYaRecordDao.updateById(zhiYaRecord);
+//        }
 
         return Result.ok(MessageSourceUtils.getString("member_service_0024"));
     }
 
     @Override
+    @Transactional
     public Result shuhuiGusd(BigDecimal balance,Long id) {
         //获取用户ID
         Long memberId = LoginUserUtils.getAppLoginUser().getId();
@@ -794,10 +798,11 @@
         if(balance.compareTo(zhiyaCnt) > 0){
             return Result.fail(MessageSourceUtils.getString("zhiya_service_0004"));
         }
-        zhiYaRecordEntity.setZhiyaCnt(zhiyaCnt.subtract(balance));
-        if(zhiyaCnt.compareTo(balance) == 0){
-            zhiYaRecordEntity.setOrderStatus(2);
+//        zhiYaRecordEntity.setZhiyaCnt(zhiyaCnt.subtract(balance));
+        if(zhiyaCnt.compareTo(balance) != 0){
+            return Result.fail(MessageSourceUtils.getString("zhiya_service_0001"));
         }
+        zhiYaRecordEntity.setOrderStatus(2);
         zhiYaRecordDao.updateById(zhiYaRecordEntity);
         //赎回Gusd,质押数量进入可用余额,
         ZhiYaEntity zhiya = zhiYaDao.selectByMemberId(memberId);
@@ -856,6 +861,48 @@
         return Result.ok(lists);
     }
 
+    @Override
+    @Transactional
+    public void grantZhiyaAmount() {
+        //获取每日总奖励
+        BigDecimal gusdReward = new BigDecimal(redisUtils.getString("GUSDREWARD"));
+        //获取每日质押总数
+        Long totalGusd = zhiYaRecordDao.selectTotalGusdByStatueAndTime(1,new Date());
+        BigDecimal totalGusdBigDecimal = new BigDecimal(totalGusd);
+        if(totalGusdBigDecimal.compareTo(BigDecimal.ZERO) > 0){
+            //平均一个获取奖励数量
+            BigDecimal divide = gusdReward.divide(totalGusdBigDecimal,2, BigDecimal.ROUND_HALF_UP);
+            //获取今天之前满足发放奖励的全部质押单
+            //生效时间小于当前时间
+            //状态为生效中
+            List<ZhiYaRecordEntity> lists = zhiYaRecordDao.selectZhiYaRewardByStatueAndTime(1,new Date());
+            if(CollUtil.isNotEmpty(lists)){
+                for(ZhiYaRecordEntity zhiYaRecordEntity : lists){
+                    ZhiyaRewardEntity zhiyaRewardEntity = new ZhiyaRewardEntity();
+                    zhiyaRewardEntity.setRecordId(zhiYaRecordEntity.getId());
+                    zhiyaRewardEntity.setRecordNo(zhiYaRecordEntity.getOrderNo());
+                    zhiyaRewardEntity.setMemberId(zhiYaRecordEntity.getMemberId());
+                    zhiyaRewardEntity.setRewardAmout(divide.multiply(zhiYaRecordEntity.getZhiyaCnt()));
+                    zhiyaRewardDao.insert(zhiyaRewardEntity);
+                }
+            }
+        }
+    }
+
+    @Override
+    public Result getZhiyaReward(ZhiyaRewardRecordsPageDto recordsPageDto) {
+
+        //获取用户ID
+        Long memberId = LoginUserUtils.getAppLoginUser().getId();
+
+        Page<ZhiyaRewardVo> page = new Page<>(recordsPageDto.getPageNum(), recordsPageDto.getPageSize());
+        ZhiyaRewardEntity zhiyaRewardEntity = new ZhiyaRewardEntity();
+        zhiyaRewardEntity.setMemberId(memberId);
+        zhiyaRewardEntity.setRecordNo(recordsPageDto.getOrderNo());
+        IPage<ZhiyaRewardVo> lists = zhiYaRecordDao.selectZhiyaRewardByMemberIdInPage(page, zhiyaRewardEntity);
+        return Result.ok(lists);
+    }
+
     public String generateSimpleSerialno(String userId) {
         StringBuilder sb = new StringBuilder();
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
diff --git a/src/main/java/com/xcong/excoin/quartz/job/ZhiyarRewardJob.java b/src/main/java/com/xcong/excoin/quartz/job/ZhiyarRewardJob.java
new file mode 100644
index 0000000..e9c4a46
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/quartz/job/ZhiyarRewardJob.java
@@ -0,0 +1,33 @@
+package com.xcong.excoin.quartz.job;
+
+import com.xcong.excoin.modules.coin.service.CoinService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+
+/**
+ * 质押
+ */
+@Slf4j
+@Component
+public class ZhiyarRewardJob {
+
+
+    @Resource
+    private CoinService coinService;
+
+    /**
+     * 质押奖励计算
+     */
+    @Scheduled(cron = "0 0/1 * * * ? ")
+    public void updateDoingPrice() {
+        log.info("#质押奖励计算#");
+        try {
+            coinService.grantZhiyaAmount();
+        } catch (Exception e) {
+            log.error("#质押奖励计算错误#", e);
+        }
+    }
+}
diff --git a/src/main/resources/mapper/walletCoinOrder/ZhiYaRecordDao.xml b/src/main/resources/mapper/walletCoinOrder/ZhiYaRecordDao.xml
index 5c5b215..45c778d 100644
--- a/src/main/resources/mapper/walletCoinOrder/ZhiYaRecordDao.xml
+++ b/src/main/resources/mapper/walletCoinOrder/ZhiYaRecordDao.xml
@@ -20,15 +20,39 @@
 	</select>
 
 	<select id="selectByMemberIdInPage" resultType="com.xcong.excoin.modules.coin.parameter.vo.ZhiyaInfoVo">
-		select * from zhiya_record
+		select a.*,(SELECT ifnull(sum(b.reward_amout),0)  FROM zhiya_reward b where b.member_id = #{record.memberId} and b.record_no = a.order_no) rewardCnt from zhiya_record a
 		    <if test="record != null">
 				<where>
 					<if test="record.memberId != null" >
-						and member_id=#{record.memberId}
+						and a.member_id=#{record.memberId}
 					</if>
 				</where>
 			</if>
 		order by id desc
 	</select>
 
+	<select id="selectZhiyaRewardByMemberIdInPage" resultType="com.xcong.excoin.modules.coin.parameter.vo.ZhiyaRewardVo">
+		select * from zhiya_reward
+		<if test="record != null">
+			<where>
+				<if test="record.memberId != null" >
+					and member_id=#{record.memberId}
+				</if>
+				<if test="record.recordNo != null" >
+					and record_no=#{record.recordNo}
+				</if>
+			</where>
+		</if>
+		order by id desc
+	</select>
+
+	<select id="selectZhiYaRewardByStatueAndTime" resultType="com.xcong.excoin.modules.coin.entity.ZhiYaRecordEntity">
+		SELECT a.*  FROM zhiya_record a where a.order_status= #{orderStatus} and #{now} > a.effect_date
+	</select>
+
+
+	<select id="selectTotalGusdByStatueAndTime" resultType="long">
+		SELECT ifnull(sum(a.zhiya_cnt),0)  FROM zhiya_record a where a.order_status= #{orderStatus} and #{now} > a.effect_date
+	</select>
+
 </mapper>
diff --git a/src/test/java/com/xcong/excoin/GuijiTest.java b/src/test/java/com/xcong/excoin/GuijiTest.java
index 295adcf..bab0e7c 100644
--- a/src/test/java/com/xcong/excoin/GuijiTest.java
+++ b/src/test/java/com/xcong/excoin/GuijiTest.java
@@ -2,11 +2,18 @@
 
 import java.math.BigDecimal;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 import java.util.concurrent.ExecutionException;
 
 import javax.annotation.Resource;
 
+import com.xcong.excoin.modules.coin.dao.ZhiYaDao;
+import com.xcong.excoin.modules.coin.dao.ZhiYaRecordDao;
+import com.xcong.excoin.modules.coin.dao.ZhiyaRewardDao;
+import com.xcong.excoin.modules.coin.entity.ZhiYaRecordEntity;
+import com.xcong.excoin.modules.coin.entity.ZhiyaRewardEntity;
+import com.xcong.excoin.utils.RedisUtils;
 import org.junit.jupiter.api.Test;
 import org.springframework.boot.test.context.SpringBootTest;
 
@@ -40,6 +47,14 @@
     private MemberCoinAddressDao memberCoinAddressDao;
     @Resource
     private MemberWalletCoinDao memberWalletCoinDao;
+    @Resource
+    ZhiYaRecordDao zhiYaRecordDao;
+    @Resource
+    ZhiyaRewardDao zhiyaRewardDao;
+    @Resource
+    ZhiYaDao zhiYaDao;
+    @Resource
+    RedisUtils redisUtils;
 
     public void pool() throws ExecutionException, InterruptedException {
         //List<MemberCoinChargeEntity> list = memberCoinChargeDao.selectAllBySymbolAndTag(CoinTypeEnum.USDT.name(), "ERC20", 1);
@@ -117,6 +132,33 @@
 		}
     }
 
+    @Test
+    public void reward(){
+        //获取每日总奖励
+        BigDecimal gusdReward = new BigDecimal(redisUtils.getString("GUSDREWARD"));
+        //获取每日质押总数
+        Long totalGusd = zhiYaRecordDao.selectTotalGusdByStatueAndTime(1,new Date());
+        BigDecimal totalGusdBigDecimal = new BigDecimal(totalGusd);
+        if(totalGusdBigDecimal.compareTo(BigDecimal.ZERO) > 0){
+            //平均一个获取奖励数量
+            BigDecimal divide = gusdReward.divide(totalGusdBigDecimal);
+            //获取今天之前满足发放奖励的全部质押单
+            //生效时间小于当前时间
+            //状态为生效中
+            List<ZhiYaRecordEntity> lists = zhiYaRecordDao.selectZhiYaRewardByStatueAndTime(1,new Date());
+            if(CollUtil.isNotEmpty(lists)){
+                for(ZhiYaRecordEntity zhiYaRecordEntity : lists){
+                    ZhiyaRewardEntity zhiyaRewardEntity = new ZhiyaRewardEntity();
+                    zhiyaRewardEntity.setRecordId(zhiYaRecordEntity.getId());
+                    zhiyaRewardEntity.setRecordNo(zhiYaRecordEntity.getOrderNo());
+                    zhiyaRewardEntity.setMemberId(zhiYaRecordEntity.getMemberId());
+                    zhiyaRewardEntity.setRewardAmout(divide.multiply(zhiYaRecordEntity.getZhiyaCnt()));
+                    zhiyaRewardDao.insert(zhiyaRewardEntity);
+                }
+            }
+        }
+    }
+
 
     
 }

--
Gitblit v1.9.1