From 5ee80b98b9b1b2e44aa4d9600ef68f6bc1629927 Mon Sep 17 00:00:00 2001 From: xiaoyong931011 <15274802129@163.com> Date: Mon, 10 May 2021 18:56:27 +0800 Subject: [PATCH] 20210510 云顶 --- src/main/java/com/xcong/excoin/modules/yunding/entity/YdProductEntity.java | 8 src/main/java/com/xcong/excoin/modules/yunding/vo/YdBasicSettingVo.java | 29 + src/main/java/com/xcong/excoin/modules/yunding/dao/YdBasicSettingDao.java | 7 src/main/java/com/xcong/excoin/modules/yunding/controller/YunDingController.java | 88 +++++ src/main/java/com/xcong/excoin/modules/yunding/vo/YdProductVo.java | 128 ++++++++ src/main/resources/mapper/yunding/YdProductDao.xml | 21 + src/main/java/com/xcong/excoin/modules/yunding/entity/YdBasicSettingEntity.java | 37 ++ src/main/java/com/xcong/excoin/modules/yunding/dao/YdOrderDao.java | 8 src/main/java/com/xcong/excoin/configurations/security/WebSecurityConfig.java | 3 src/main/java/com/xcong/excoin/modules/yunding/service/YunDingService.java | 17 + src/main/java/com/xcong/excoin/modules/yunding/vo/YdOrderVo.java | 100 ++++++ src/main/resources/mapper/yunding/YdOrderDao.xml | 17 + src/main/java/com/xcong/excoin/modules/yunding/vo/OrderAllInfoVo.java | 26 + src/main/java/com/xcong/excoin/modules/yunding/dto/YdProductListDto.java | 26 + src/main/java/com/xcong/excoin/modules/yunding/entity/YdOrderEntity.java | 28 + src/main/java/com/xcong/excoin/modules/yunding/dto/YdOrderListDto.java | 26 + src/main/java/com/xcong/excoin/modules/yunding/dao/YdProductDao.java | 9 src/main/java/com/xcong/excoin/modules/yunding/dto/PayProductDto.java | 26 + src/main/resources/mapper/yunding/YdBasicSettingDao.xml | 7 src/main/java/com/xcong/excoin/modules/yunding/service/Impl/YunDingServiceImpl.java | 286 +++++++++++++++++++ 20 files changed, 892 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/xcong/excoin/configurations/security/WebSecurityConfig.java b/src/main/java/com/xcong/excoin/configurations/security/WebSecurityConfig.java index c79d04b..8f8d054 100644 --- a/src/main/java/com/xcong/excoin/configurations/security/WebSecurityConfig.java +++ b/src/main/java/com/xcong/excoin/configurations/security/WebSecurityConfig.java @@ -58,6 +58,9 @@ .antMatchers("/api/trader/beTraderStatusCondition").permitAll() .antMatchers("/api/activity/getActivityMain").permitAll() .antMatchers("/api/helpCenter/**").permitAll() + .antMatchers("/api/yd/findAllInfo").permitAll() + .antMatchers("/api/yd/getProductList").permitAll() + .antMatchers("/api/yd/findProductInfo").permitAll() .anyRequest().authenticated() .and().apply(securityConfiguereAdapter()); } diff --git a/src/main/java/com/xcong/excoin/modules/yunding/controller/YunDingController.java b/src/main/java/com/xcong/excoin/modules/yunding/controller/YunDingController.java index ffa347e..9c5568f 100644 --- a/src/main/java/com/xcong/excoin/modules/yunding/controller/YunDingController.java +++ b/src/main/java/com/xcong/excoin/modules/yunding/controller/YunDingController.java @@ -1,11 +1,17 @@ package com.xcong.excoin.modules.yunding.controller; -import com.xcong.excoin.modules.activity.service.ActivityService; +import com.xcong.excoin.common.response.Result; +import com.xcong.excoin.modules.yunding.dto.PayProductDto; +import com.xcong.excoin.modules.yunding.dto.YdOrderListDto; +import com.xcong.excoin.modules.yunding.dto.YdProductListDto; import com.xcong.excoin.modules.yunding.service.YunDingService; -import io.swagger.annotations.Api; +import com.xcong.excoin.modules.yunding.vo.OrderAllInfoVo; +import com.xcong.excoin.modules.yunding.vo.YdOrderVo; +import com.xcong.excoin.modules.yunding.vo.YdProductVo; +import io.swagger.annotations.*; import lombok.extern.slf4j.Slf4j; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; @@ -18,5 +24,79 @@ @Resource YunDingService yunDingService; + /** + * 全网数据 + */ + @ApiOperation(value = "全网数据") + @GetMapping(value = "/findAllInfo") + public Result findAllInfo() { + return yunDingService.findAllInfo(); + } + + /** + * 算力产品列表 + */ + @ApiOperation(value = "产品列表") + @ApiResponses({ + @ApiResponse(code = 0, message = "success", response = YdProductVo.class) + }) + @PostMapping(value = "/getProductList") + public Result getProductList(@RequestBody @Validated YdProductListDto ydProductListDto) { + return yunDingService.getProductList(ydProductListDto); + } + + /** + * 获取算力产品详情 + */ + @ApiOperation(value = "获取产品详情") + @GetMapping(value = "/findProductInfo") + public Result findProductInfoById(@ApiParam(name = "id", value = "产品ID", required = true, example = "1") + @RequestParam(value = "id") Long id) { + return yunDingService.findProductInfoById(id); + } + + /** + * 获取USDT余额 + */ + @ApiOperation(value = "获取USDT余额") + @GetMapping(value = "/getBalance") + public Result getBalance() { + return yunDingService.getBalance(); + } + + /** + * 支付 + */ + @ApiOperation(value = "购买,点击支付") + @PostMapping(value = "/payProduct") + public Result payProduct(@RequestBody @Validated PayProductDto payProductDto) { + return yunDingService.payProduct(payProductDto); + } + + /** + * 订单列表 + */ + @ApiOperation(value = "订单列表") + @ApiResponses({ + @ApiResponse(code = 0, message = "success", response = YdOrderVo.class) + }) + @PostMapping(value = "/getOrderList") + public Result getOrderList(@RequestBody @Validated YdOrderListDto ydOrderListDto) { + return yunDingService.getOrderList(ydOrderListDto); + } + + /** + *订单头部数据 + */ + @ApiOperation(value = "订单头部数据") + @ApiResponses({ + @ApiResponse(code = 0, message = "success", response = OrderAllInfoVo.class) + }) + @GetMapping(value = "/findOrderAllInfo") + public Result findOrderAllInfo() { + return yunDingService.findOrderAllInfo(); + } + + } diff --git a/src/main/java/com/xcong/excoin/modules/yunding/dao/YdBasicSettingDao.java b/src/main/java/com/xcong/excoin/modules/yunding/dao/YdBasicSettingDao.java new file mode 100644 index 0000000..5278de5 --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/yunding/dao/YdBasicSettingDao.java @@ -0,0 +1,7 @@ +package com.xcong.excoin.modules.yunding.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.xcong.excoin.modules.yunding.entity.YdBasicSettingEntity; + +public interface YdBasicSettingDao extends BaseMapper<YdBasicSettingEntity> { +} diff --git a/src/main/java/com/xcong/excoin/modules/yunding/dao/YdOrderDao.java b/src/main/java/com/xcong/excoin/modules/yunding/dao/YdOrderDao.java index 09d74c8..1ed46d4 100644 --- a/src/main/java/com/xcong/excoin/modules/yunding/dao/YdOrderDao.java +++ b/src/main/java/com/xcong/excoin/modules/yunding/dao/YdOrderDao.java @@ -1,7 +1,15 @@ package com.xcong.excoin.modules.yunding.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.xcong.excoin.modules.yunding.dto.YdOrderListDto; import com.xcong.excoin.modules.yunding.entity.YdOrderEntity; +import com.xcong.excoin.modules.yunding.vo.YdOrderVo; +import org.apache.ibatis.annotations.Param; public interface YdOrderDao extends BaseMapper<YdOrderEntity> { + + IPage<YdOrderVo> getOrderList(Page<YdOrderVo> page, @Param("record") YdOrderEntity ydOrderEntity); + } diff --git a/src/main/java/com/xcong/excoin/modules/yunding/dao/YdProductDao.java b/src/main/java/com/xcong/excoin/modules/yunding/dao/YdProductDao.java index 6bd625b..22d5529 100644 --- a/src/main/java/com/xcong/excoin/modules/yunding/dao/YdProductDao.java +++ b/src/main/java/com/xcong/excoin/modules/yunding/dao/YdProductDao.java @@ -1,7 +1,16 @@ package com.xcong.excoin.modules.yunding.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.xcong.excoin.modules.yunding.dto.YdProductListDto; import com.xcong.excoin.modules.yunding.entity.YdProductEntity; +import com.xcong.excoin.modules.yunding.vo.YdProductVo; +import org.apache.ibatis.annotations.Param; public interface YdProductDao extends BaseMapper<YdProductEntity> { + + IPage<YdProductVo> getProductList(Page<YdProductVo> page, @Param("record") YdProductListDto ydProductListDto); + + YdProductVo findProductInfoById(@Param("id")Long id); } diff --git a/src/main/java/com/xcong/excoin/modules/yunding/dto/PayProductDto.java b/src/main/java/com/xcong/excoin/modules/yunding/dto/PayProductDto.java new file mode 100644 index 0000000..28b7e00 --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/yunding/dto/PayProductDto.java @@ -0,0 +1,26 @@ +package com.xcong.excoin.modules.yunding.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.math.BigDecimal; + +@Data +@ApiModel(value = "PayProductDto", description = "支付入参类") +public class PayProductDto { + + + @NotNull + @ApiModelProperty(value = "产品ID", example = "2") + private Long id; + + /** + * 购买数量 + */ + @NotNull + @ApiModelProperty(value = "购买数量", example = "2") + private BigDecimal quantity; + +} diff --git a/src/main/java/com/xcong/excoin/modules/yunding/dto/YdOrderListDto.java b/src/main/java/com/xcong/excoin/modules/yunding/dto/YdOrderListDto.java new file mode 100644 index 0000000..7a931d9 --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/yunding/dto/YdOrderListDto.java @@ -0,0 +1,26 @@ +package com.xcong.excoin.modules.yunding.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 = "YdOrderListDto", description = "订单列表入参类") +public class YdOrderListDto { + + @NotNull + @Min(1) + @ApiModelProperty(value = "第几页", example = "1") + private int pageNum; + + @NotNull + @ApiModelProperty(value = "每页数量", example = "10") + private int pageSize; + + @ApiModelProperty(value = "订单状态1:待生效 2:生效中 3:已终止", example = "2") + private Integer state; + +} diff --git a/src/main/java/com/xcong/excoin/modules/yunding/dto/YdProductListDto.java b/src/main/java/com/xcong/excoin/modules/yunding/dto/YdProductListDto.java new file mode 100644 index 0000000..178eb61 --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/yunding/dto/YdProductListDto.java @@ -0,0 +1,26 @@ +package com.xcong.excoin.modules.yunding.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 = "YdProductListDto", description = "产品列表入参类") +public class YdProductListDto { + + @NotNull + @Min(1) + @ApiModelProperty(value = "第几页", example = "1") + private int pageNum; + + @NotNull + @ApiModelProperty(value = "每页数量", example = "10") + private int pageSize; + + @ApiModelProperty(value = "产品类型1:期货 2:现货", example = "2") + private Integer typeCoin; + +} diff --git a/src/main/java/com/xcong/excoin/modules/yunding/entity/YdBasicSettingEntity.java b/src/main/java/com/xcong/excoin/modules/yunding/entity/YdBasicSettingEntity.java new file mode 100644 index 0000000..12fac7c --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/yunding/entity/YdBasicSettingEntity.java @@ -0,0 +1,37 @@ +package com.xcong.excoin.modules.yunding.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.math.BigDecimal; + +//yd_basic_setting基础参数设置表 +@Data +@TableName("yd_basic_setting") +public class YdBasicSettingEntity { + private static final long serialVersionUID = 1L; + + @TableId(value = "id",type = IdType.AUTO) + private Long id; + + //合伙人收益比例 + private BigDecimal partnerRatio; + + //当前每T预计产生收益 + private BigDecimal prifitT; + + //全网算力 + private BigDecimal allPower; + + //日平均收益 + private BigDecimal profitDay; + + //矿机模式 + private String powerModel; + + //24小时爆块 + private BigDecimal explosiveBlock; + +} diff --git a/src/main/java/com/xcong/excoin/modules/yunding/entity/YdOrderEntity.java b/src/main/java/com/xcong/excoin/modules/yunding/entity/YdOrderEntity.java index ab1eda4..c99efc0 100644 --- a/src/main/java/com/xcong/excoin/modules/yunding/entity/YdOrderEntity.java +++ b/src/main/java/com/xcong/excoin/modules/yunding/entity/YdOrderEntity.java @@ -16,6 +16,12 @@ private static final long serialVersionUID = 1L; /** + * 会员ID + */ + + private Long memberId; + + /** * 产品ID */ @@ -26,6 +32,19 @@ */ private Integer quantity; + /** + * 返利状态 1:待返利 2:已返利 + */ + + private Integer returnState; + + public static final int RETURN_STATE_READY = 1; + public static final int RETURN_STATE_DONE = 2; + /** + * 返利类型 1:USDT 2:XCH + */ + + private Integer returnType; /** * 总金额 @@ -50,6 +69,15 @@ */ private Integer state; + public static final int ORDER_STATE_READY = 1; + public static final int ORDER_STATE_WORK = 2; + public static final int ORDER_STATE_END = 3; + + /** + * 购买日期 + */ + + private Date buyTime; /** * 生效日期 diff --git a/src/main/java/com/xcong/excoin/modules/yunding/entity/YdProductEntity.java b/src/main/java/com/xcong/excoin/modules/yunding/entity/YdProductEntity.java index 078e396..f20dc36 100644 --- a/src/main/java/com/xcong/excoin/modules/yunding/entity/YdProductEntity.java +++ b/src/main/java/com/xcong/excoin/modules/yunding/entity/YdProductEntity.java @@ -90,10 +90,16 @@ private Integer type; /** - * 1:期货 2:现货 + * 产品类型1:期货 2:现货 */ private Integer typeCoin; + /** + * 优惠 1:免除电费 + */ + + private Integer favourable; + } diff --git a/src/main/java/com/xcong/excoin/modules/yunding/service/Impl/YunDingServiceImpl.java b/src/main/java/com/xcong/excoin/modules/yunding/service/Impl/YunDingServiceImpl.java index 1427ad6..1836528 100644 --- a/src/main/java/com/xcong/excoin/modules/yunding/service/Impl/YunDingServiceImpl.java +++ b/src/main/java/com/xcong/excoin/modules/yunding/service/Impl/YunDingServiceImpl.java @@ -1,14 +1,300 @@ package com.xcong.excoin.modules.yunding.service.Impl; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.xcong.excoin.common.LoginUserUtils; +import com.xcong.excoin.common.response.Result; +import com.xcong.excoin.modules.member.dao.MemberWalletCoinDao; +import com.xcong.excoin.modules.member.entity.MemberEntity; +import com.xcong.excoin.modules.member.entity.MemberWalletCoinEntity; +import com.xcong.excoin.modules.yunding.dao.YdBasicSettingDao; import com.xcong.excoin.modules.yunding.dao.YdOrderDao; +import com.xcong.excoin.modules.yunding.dao.YdProductDao; +import com.xcong.excoin.modules.yunding.dto.PayProductDto; +import com.xcong.excoin.modules.yunding.dto.YdOrderListDto; +import com.xcong.excoin.modules.yunding.dto.YdProductListDto; +import com.xcong.excoin.modules.yunding.entity.YdBasicSettingEntity; import com.xcong.excoin.modules.yunding.entity.YdOrderEntity; +import com.xcong.excoin.modules.yunding.entity.YdProductEntity; import com.xcong.excoin.modules.yunding.service.YunDingService; +import com.xcong.excoin.modules.yunding.vo.OrderAllInfoVo; +import com.xcong.excoin.modules.yunding.vo.YdBasicSettingVo; +import com.xcong.excoin.modules.yunding.vo.YdOrderVo; +import com.xcong.excoin.modules.yunding.vo.YdProductVo; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.text.DecimalFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; @Slf4j @Service public class YunDingServiceImpl extends ServiceImpl<YdOrderDao, YdOrderEntity> implements YunDingService { + @Resource + private YdProductDao ydProductDao; + @Resource + private YdBasicSettingDao ydBasicSettingDao; + @Resource + private YdOrderDao ydOrderDao; + @Resource + private MemberWalletCoinDao memberWalletCoinDao; + + @Override + public Result findAllInfo() { + log.info("全网数据"); + YdBasicSettingVo ydBasicSettingVo = new YdBasicSettingVo(); + Wrapper<YdBasicSettingEntity> queryWrapper = new QueryWrapper<>(); + List<YdBasicSettingEntity> ydBasicSettingEntities = ydBasicSettingDao.selectList(queryWrapper); + if(CollUtil.isNotEmpty(ydBasicSettingEntities)){ + // 不足四位小数补0 + DecimalFormat decimalFormat = new DecimalFormat("0.0000#"); + YdBasicSettingEntity ydBasicSettingEntity = ydBasicSettingEntities.get(0); + ydBasicSettingVo.setAllPower(ydBasicSettingEntity.getAllPower() == null ? decimalFormat.format(BigDecimal.ZERO) : decimalFormat.format(ydBasicSettingEntity.getAllPower())); + ydBasicSettingVo.setProfitDay(ydBasicSettingEntity.getProfitDay() == null ?decimalFormat.format(BigDecimal.ZERO) : decimalFormat.format(ydBasicSettingEntity.getProfitDay())); + ydBasicSettingVo.setPowerModel(ydBasicSettingEntity.getPowerModel() == null ? "" : ydBasicSettingEntity.getPowerModel()); + ydBasicSettingVo.setExplosiveBlock(ydBasicSettingEntity.getExplosiveBlock() == null ?decimalFormat.format(BigDecimal.ZERO) : decimalFormat.format(ydBasicSettingEntity.getExplosiveBlock())); + } + return Result.ok(ydBasicSettingVo); + } + + @Override + public Result getProductList(YdProductListDto ydProductListDto) { + log.info("获取产品列表"); + Integer typeCoin = ydProductListDto.getTypeCoin(); + //默认查询现货的产品 + if(ObjectUtil.isEmpty(typeCoin)){ + typeCoin = 2; + } + //MemberEntity memberEntity = LoginUserUtils.getAppLoginUser(); + Page<YdProductVo> page = new Page<>(ydProductListDto.getPageNum(), ydProductListDto.getPageSize()); + IPage<YdProductVo> list = ydProductDao.getProductList(page, ydProductListDto); + return Result.ok(list); + } + + @Override + public Result findProductInfoById(Long id) { + log.info("获取产品详情"); + YdProductVo ydProductVo = ydProductDao.findProductInfoById(id); + if (ObjectUtil.isEmpty(ydProductVo)) { + return Result.fail("产品不存在!"); + } + //预计收益 + Wrapper<YdBasicSettingEntity> queryWrapper = new QueryWrapper<>(); + List<YdBasicSettingEntity> ydBasicSettingEntities = ydBasicSettingDao.selectList(queryWrapper); + if(CollUtil.isNotEmpty(ydBasicSettingEntities)){ + BigDecimal prifitT = ydBasicSettingEntities.get(0).getPrifitT(); + if(ObjectUtil.isNotEmpty(prifitT)){ + ydProductVo.setProfitT(prifitT); + } + } + /** + *产出规则 + */ + Date date = DateUtil.date(); + ydProductVo.setNowTime(date); + //上架天数 + Integer shelvesDays = ydProductVo.getShelvesDays(); + Date workTime = DateUtil.offsetDay(date, shelvesDays); + ydProductVo.setWorkTime(workTime); + //服务周期 + Integer proCycle = ydProductVo.getProCycle(); + Date endTime = DateUtil.offsetDay(workTime, proCycle); + ydProductVo.setEndTime(endTime); + return Result.ok(ydProductVo); + } + + @Override + public Result getBalance() { + log.info("获取可用USDT"); + MemberEntity memberEntity = LoginUserUtils.getAppLoginUser(); + Long memberId = memberEntity.getId(); +// Long memberId = 28L; + MemberWalletCoinEntity memberWalletCoinEntity = memberWalletCoinDao.selectWalletCoinBymIdAndCode(memberId, "USDT"); + BigDecimal availableBalance = memberWalletCoinEntity.getAvailableBalance(); + return Result.ok(availableBalance); + } + + @Override + @Transactional + public Result payProduct(PayProductDto payProductDto) { + log.info("购买,点击支付"); + /** + * 获取购买数量和当前价格,计算出支付总数 + * 去加减币币账户余额,减少产品的剩余数目 + * 成功后 + * 生成订单记录 + * 生成返利记录 + */ + MemberEntity memberEntity = LoginUserUtils.getAppLoginUser(); + Long memberId = memberEntity.getId(); +// Long memberId = 28L; + BigDecimal quantity = payProductDto.getQuantity(); + if(ObjectUtil.isEmpty(quantity)){ + return Result.fail("请输入购买数量"); + } + if(quantity.compareTo(BigDecimal.ZERO) <= 0){ + return Result.fail("请输入正确的购买数量"); + } + Long id = payProductDto.getId(); + YdProductEntity ydProductEntity = ydProductDao.selectById(id); + if(ObjectUtil.isEmpty(ydProductEntity)){ + return Result.fail("请重新选择产品"); + } + BigDecimal salePrice = ydProductEntity.getSalePrice(); + //剩余产品数量 + BigDecimal surplusT = ydProductEntity.getSurplusT(); + if(quantity.compareTo(surplusT) > 0){ + return Result.fail("当前产品数量不足,请联系客服"); + } + //支付总数 + BigDecimal multiplyUsdt = quantity.multiply(salePrice); + if(multiplyUsdt.compareTo(BigDecimal.ZERO) <= 0){ + return Result.fail("支付失败"); + } + //去加减币币账户余额,减少产品的剩余数目 + boolean flag = updateWalletCoin(memberId, multiplyUsdt,id,quantity); + if(flag == false){ + return Result.fail("支付失败"); + } + //生成订单 + YdOrderEntity ydOrderEntity = new YdOrderEntity(); + ydOrderEntity.setMemberId(memberId); + ydOrderEntity.setProductId(id); + ydOrderEntity.setQuantity(Integer.parseInt(quantity.toString())); + ydOrderEntity.setAmount(multiplyUsdt); + ydOrderEntity.setTotalProfit(BigDecimal.ZERO); + ydOrderEntity.setTodayProfit(BigDecimal.ZERO); + ydOrderEntity.setState(YdOrderEntity.ORDER_STATE_READY); + Date date = DateUtil.date(); + ydOrderEntity.setBuyTime(date); + //上架天数 + Integer shelvesDays = ydProductEntity.getShelvesDays(); + Date workTime = DateUtil.offsetDay(date, shelvesDays); + ydOrderEntity.setWorkTime(workTime); + //服务周期 + Integer proCycle = ydProductEntity.getProCycle(); + Date endTime = DateUtil.offsetDay(workTime, proCycle); + ydOrderEntity.setEndTime(endTime); + ydOrderEntity.setReturnState(YdOrderEntity.RETURN_STATE_READY); + ydOrderDao.insert(ydOrderEntity); + return Result.ok("支付成功"); + } + + @Override + public Result getOrderList(YdOrderListDto ydOrderListDto) { + + log.info("获取订单列表"); + Integer state = ydOrderListDto.getState(); + //默认查询待生效 + if(ObjectUtil.isEmpty(state)){ + state = 1; + } + MemberEntity memberEntity = LoginUserUtils.getAppLoginUser(); + Long memberId = memberEntity.getId(); + //Long memberId = 28L; + Page<YdOrderVo> page = new Page<>(ydOrderListDto.getPageNum(), ydOrderListDto.getPageSize()); + YdOrderEntity ydOrderEntity = new YdOrderEntity(); + ydOrderEntity.setMemberId(memberId); + ydOrderEntity.setState(state); + IPage<YdOrderVo> list = ydOrderDao.getOrderList(page, ydOrderEntity); + return Result.ok(list); + } + + @Override + public Result findOrderAllInfo() { + + log.info("订单头部数据"); + + MemberEntity memberEntity = LoginUserUtils.getAppLoginUser(); + Long memberId = memberEntity.getId(); +// Long memberId = 28L; + OrderAllInfoVo orderAllInfoVo = new OrderAllInfoVo(); + DecimalFormat decimalFormat = new DecimalFormat("0.0000#"); + //历史总收益 + BigDecimal totalProfitAll = BigDecimal.ZERO; + QueryWrapper<YdOrderEntity> objectQueryWrapper = new QueryWrapper<>(); + objectQueryWrapper.eq("member_id",memberId); + List<YdOrderEntity> ydOrderEntities = ydOrderDao.selectList(objectQueryWrapper); + if(CollUtil.isNotEmpty(ydOrderEntities)){ + for(YdOrderEntity order : ydOrderEntities){ + BigDecimal totalProfit = order.getTotalProfit(); + totalProfitAll = totalProfitAll.add(totalProfit); + } + } + orderAllInfoVo.setAllProfit(decimalFormat.format(totalProfitAll)); + //当前已生效算力 + int powerNow = 0; + QueryWrapper<YdOrderEntity> powerNowQuery = new QueryWrapper<>(); + powerNowQuery.eq("member_id",memberId); + powerNowQuery.eq("state",YdOrderEntity.ORDER_STATE_WORK); + List<YdOrderEntity> PowerNowQuery = ydOrderDao.selectList(powerNowQuery); + if(CollUtil.isNotEmpty(PowerNowQuery)){ + for(YdOrderEntity order : PowerNowQuery){ + int quantity = order.getQuantity(); + powerNow = powerNow + quantity; + } + } + orderAllInfoVo.setPowerNow(powerNow); + //当前待生效算力 + int powerReady = 0; + QueryWrapper<YdOrderEntity> powerReradyQuery = new QueryWrapper<>(); + powerReradyQuery.eq("member_id",memberId); + powerReradyQuery.eq("state",YdOrderEntity.ORDER_STATE_READY); + List<YdOrderEntity> PowerReradyQuery = ydOrderDao.selectList(powerNowQuery); + if(CollUtil.isNotEmpty(PowerReradyQuery)){ + for(YdOrderEntity order : PowerReradyQuery){ + int quantity = order.getQuantity(); + powerReady = powerReady + quantity; + } + } + orderAllInfoVo.setPowerReady(powerReady); + return Result.ok(orderAllInfoVo); + } + + /** + * 去加减币币账户余额,减少产品的剩余数目 + * @param memberId + * @param multiplyUsdt + * @param productId + * @param quantity + * @return + */ + public synchronized boolean updateWalletCoin(Long memberId,BigDecimal multiplyUsdt,Long productId,BigDecimal quantity){ + MemberWalletCoinEntity memberWalletCoinEntity = memberWalletCoinDao.selectWalletCoinBymIdAndCode(memberId, "USDT"); + BigDecimal availableBalance = memberWalletCoinEntity.getAvailableBalance(); + BigDecimal totalBalance = memberWalletCoinEntity.getTotalBalance(); + BigDecimal availableSubtract = availableBalance.subtract(multiplyUsdt); + BigDecimal totalSubtract = totalBalance.subtract(multiplyUsdt); + boolean flag = false; + if(availableSubtract.compareTo(BigDecimal.ZERO) >= 0){ + //更新余额 + memberWalletCoinEntity.setAvailableBalance(availableSubtract); + memberWalletCoinEntity.setTotalBalance(totalSubtract); + memberWalletCoinDao.updateById(memberWalletCoinEntity); + //减少产品的剩余数量 + YdProductEntity ydProductEntity = ydProductDao.selectById(productId); + BigDecimal surplusT = ydProductEntity.getSurplusT(); + BigDecimal subtract = surplusT.subtract(quantity); + ydProductEntity.setSurplusT(subtract); + ydProductDao.updateById(ydProductEntity); + flag = true; + } + return flag; + } + } diff --git a/src/main/java/com/xcong/excoin/modules/yunding/service/YunDingService.java b/src/main/java/com/xcong/excoin/modules/yunding/service/YunDingService.java index f832ac4..3c7391a 100644 --- a/src/main/java/com/xcong/excoin/modules/yunding/service/YunDingService.java +++ b/src/main/java/com/xcong/excoin/modules/yunding/service/YunDingService.java @@ -1,8 +1,25 @@ package com.xcong.excoin.modules.yunding.service; import com.baomidou.mybatisplus.extension.service.IService; +import com.xcong.excoin.common.response.Result; +import com.xcong.excoin.modules.yunding.dto.PayProductDto; +import com.xcong.excoin.modules.yunding.dto.YdOrderListDto; +import com.xcong.excoin.modules.yunding.dto.YdProductListDto; import com.xcong.excoin.modules.yunding.entity.YdOrderEntity; public interface YunDingService extends IService<YdOrderEntity> { + Result findAllInfo(); + + Result getProductList(YdProductListDto ydProductListDto); + + Result findProductInfoById(Long id); + + Result getBalance(); + + Result payProduct(PayProductDto payProductDto); + + Result getOrderList(YdOrderListDto ydOrderListDto); + + Result findOrderAllInfo(); } diff --git a/src/main/java/com/xcong/excoin/modules/yunding/vo/OrderAllInfoVo.java b/src/main/java/com/xcong/excoin/modules/yunding/vo/OrderAllInfoVo.java new file mode 100644 index 0000000..eec1263 --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/yunding/vo/OrderAllInfoVo.java @@ -0,0 +1,26 @@ +package com.xcong.excoin.modules.yunding.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +@ApiModel(value = "OrderAllInfoVo", description = "产品详情") +public class OrderAllInfoVo { + + //昨日收益 + @ApiModelProperty("昨日收益") + private String lastdayProfit; + + //当前拥有算力 + @ApiModelProperty("当前拥有算力") + private int powerNow; + //当前待生效拥有算力 + @ApiModelProperty("当前待生效拥有算力") + private int powerReady; + + //历史总受益 + @ApiModelProperty("历史总受益") + private String allProfit; + +} diff --git a/src/main/java/com/xcong/excoin/modules/yunding/vo/YdBasicSettingVo.java b/src/main/java/com/xcong/excoin/modules/yunding/vo/YdBasicSettingVo.java new file mode 100644 index 0000000..328594c --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/yunding/vo/YdBasicSettingVo.java @@ -0,0 +1,29 @@ +package com.xcong.excoin.modules.yunding.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; + +@Data +@ApiModel(value = "YdBasicSettingVo", description = "产品详情") +public class YdBasicSettingVo { + + //全网算力 + @ApiModelProperty("全网算力") + private String allPower; + + //日平均收益 + @ApiModelProperty("日平均收益") + private String profitDay; + + //矿机模式 + @ApiModelProperty("矿机模式") + private String powerModel; + + //24小时爆块 + @ApiModelProperty("24小时爆块") + private String explosiveBlock; + +} diff --git a/src/main/java/com/xcong/excoin/modules/yunding/vo/YdOrderVo.java b/src/main/java/com/xcong/excoin/modules/yunding/vo/YdOrderVo.java new file mode 100644 index 0000000..fc22349 --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/yunding/vo/YdOrderVo.java @@ -0,0 +1,100 @@ +package com.xcong.excoin.modules.yunding.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 = "YdOrderVo", description = "订单详情") +public class YdOrderVo { + + + @ApiModelProperty("订单ID") + private Long id; + + /** + * 产品ID + */ + + @ApiModelProperty("产品ID") + private Long productId; + + /** + * 购买数量 + */ + + @ApiModelProperty("购买数量") + private Integer quantity; + + /** + * 总金额 + */ + + @ApiModelProperty("总金额") + private BigDecimal amount; + + /** + * 累计收益 + */ + + @ApiModelProperty("累计收益") + private BigDecimal totalProfit; + + /** + * 今日收益 + */ + + @ApiModelProperty("今日收益") + private BigDecimal todayProfit; + + /** + * 1:待生效 2:生效中 3:已终止 + */ + + @ApiModelProperty("1:待生效 2:生效中 3:已终止") + private Integer state; + + /** + * 购买日期 + */ + + @ApiModelProperty("购买日期") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private Date buyTime; + + /** + * 生效日期 + */ + + @ApiModelProperty("生效日期") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private Date workTime; + + /** + * 终止日期 + */ + + @ApiModelProperty("终止日期") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private Date endTime; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + /** + * 产品售价 + */ + @ApiModelProperty("产品售价") + private BigDecimal salePrice; + /** + * 1:期货 2:现货 + */ + @ApiModelProperty("产品类型 1:期货 2:现货") + private Integer typeCoin; +} diff --git a/src/main/java/com/xcong/excoin/modules/yunding/vo/YdProductVo.java b/src/main/java/com/xcong/excoin/modules/yunding/vo/YdProductVo.java new file mode 100644 index 0000000..427b509 --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/yunding/vo/YdProductVo.java @@ -0,0 +1,128 @@ +package com.xcong.excoin.modules.yunding.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 = "YdProductVo", description = "产品详情") +public class YdProductVo { + + @ApiModelProperty("产品ID") + private Long id; + + /** + * 名称 + */ + @ApiModelProperty("名称") + private String name; + + /** + * 编码 + */ + @ApiModelProperty("编码") + private String code; + + /** + * 预计产出 + */ + @ApiModelProperty("预计产出") + private BigDecimal profitT; + + /** + * 产品总数 + */ + @ApiModelProperty("产品总数") + private BigDecimal totalT; + + /** + * 剩余产品数量 + */ + @ApiModelProperty("剩余产品数量") + private BigDecimal surplusT; + + /** + * 产品售价 + */ + @ApiModelProperty("产品售价") + private BigDecimal salePrice; + + /** + * 服务周期 + */ + @ApiModelProperty("服务周期") + private Integer proCycle; + + /** + * 管理费 + */ + @ApiModelProperty("管理费") + private BigDecimal manageExpense; + + /** + * 上架天数 + */ + @ApiModelProperty("上架天数") + private Integer shelvesDays; + + /** + * 单位 + */ + @ApiModelProperty("单位") + private String proUnit; + + /** + * 产品币种 + */ + @ApiModelProperty("产品币种") + private String coin; + + /** + * 限购 + */ + @ApiModelProperty("限购") + private Integer limitedNum; + + /** + * 1:体验 2:正式 + */ + @ApiModelProperty("1:体验 2:正式") + private Integer type; + + /** + * 1:期货 2:现货 + */ + @ApiModelProperty("产品类型 1:期货 2:现货") + private Integer typeCoin; + + /** + * 优惠 1:免除电费 + */ + @ApiModelProperty("优惠 1:免除电费") + private Integer favourable; + + /** + * 当前日期 + */ + @ApiModelProperty("当前日期") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private Date nowTime; + + /** + * 生效日期 + */ + @ApiModelProperty("生效日期") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private Date workTime; + + /** + * 终止日期 + */ + @ApiModelProperty("终止日期") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private Date endTime; +} diff --git a/src/main/resources/mapper/yunding/YdBasicSettingDao.xml b/src/main/resources/mapper/yunding/YdBasicSettingDao.xml new file mode 100644 index 0000000..e4b83ea --- /dev/null +++ b/src/main/resources/mapper/yunding/YdBasicSettingDao.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + +<mapper namespace="com.xcong.excoin.modules.yunding.dao.YdBasicSettingDao"> + +</mapper> \ No newline at end of file diff --git a/src/main/resources/mapper/yunding/YdOrderDao.xml b/src/main/resources/mapper/yunding/YdOrderDao.xml index acc7a49..e633040 100644 --- a/src/main/resources/mapper/yunding/YdOrderDao.xml +++ b/src/main/resources/mapper/yunding/YdOrderDao.xml @@ -4,4 +4,21 @@ <mapper namespace="com.xcong.excoin.modules.yunding.dao.YdOrderDao"> + <select id="getOrderList" resultType="com.xcong.excoin.modules.yunding.vo.YdOrderVo"> + SELECT + * + FROM + yd_order a + left join yd_product b on b.id = a.product_id + <if test="record != null"> + <where> + and a.member_id = #{record.memberId} + <if test="record.state != null" > + and a.state=#{record.state} + </if> + </where> + </if> + ORDER BY a.create_time DESC + </select> + </mapper> \ No newline at end of file diff --git a/src/main/resources/mapper/yunding/YdProductDao.xml b/src/main/resources/mapper/yunding/YdProductDao.xml index 18158de..68fd1aa 100644 --- a/src/main/resources/mapper/yunding/YdProductDao.xml +++ b/src/main/resources/mapper/yunding/YdProductDao.xml @@ -4,4 +4,25 @@ <mapper namespace="com.xcong.excoin.modules.yunding.dao.YdProductDao"> + <select id="getProductList" resultType="com.xcong.excoin.modules.yunding.vo.YdProductVo"> + select + * + from yd_product + <if test="record != null"> + <where> + <if test="record.typeCoin != null" > + and type_coin=#{record.typeCoin} + </if> + </where> + </if> + order by type,id asc + </select> + + <select id="findProductInfoById" resultType="com.xcong.excoin.modules.yunding.vo.YdProductVo"> + select + * + from yd_product + where id = #{id} + </select> + </mapper> \ No newline at end of file -- Gitblit v1.9.1