Commit 065d9adf authored by tangtuo's avatar tangtuo

转让记录接口编写

parent 19cc14a8
...@@ -3,8 +3,11 @@ package com.fzm.admin.controller; ...@@ -3,8 +3,11 @@ package com.fzm.admin.controller;
import com.fzm.common.annotation.Authentication; import com.fzm.common.annotation.Authentication;
import com.fzm.common.entity.Nft; import com.fzm.common.entity.Nft;
import com.fzm.common.entity.vo.NftListVo; import com.fzm.common.entity.vo.NftListVo;
import com.fzm.common.entity.vo.NftTransferRecordVo;
import com.fzm.common.model.ResponseModel; import com.fzm.common.model.ResponseModel;
import com.fzm.common.service.NftService; import com.fzm.common.service.NftService;
import com.fzm.common.service.NftTransferRecordService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
...@@ -12,6 +15,7 @@ import io.swagger.annotations.ApiParam; ...@@ -12,6 +15,7 @@ import io.swagger.annotations.ApiParam;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.List;
/** /**
* @author tangtuo * @author tangtuo
...@@ -26,6 +30,9 @@ public class NftController { ...@@ -26,6 +30,9 @@ public class NftController {
@Resource @Resource
private NftService nftService; private NftService nftService;
@Resource
private NftTransferRecordService nftTransferRecordService;
@GetMapping("/list") @GetMapping("/list")
@ApiOperation(value = "查询nft列表") @ApiOperation(value = "查询nft列表")
public ResponseModel<PageInfo<NftListVo>> list(@ApiParam(value = "页码", required = true) @RequestParam Integer pageNum, public ResponseModel<PageInfo<NftListVo>> list(@ApiParam(value = "页码", required = true) @RequestParam Integer pageNum,
...@@ -76,4 +83,18 @@ public class NftController { ...@@ -76,4 +83,18 @@ public class NftController {
public void download(@ApiParam(value = "nft主键") @PathVariable Integer id) { public void download(@ApiParam(value = "nft主键") @PathVariable Integer id) {
nftService.download(id); nftService.download(id);
} }
@GetMapping("/transfer/record/list")
public ResponseModel<PageInfo<NftTransferRecordVo>> getTransferRecordList(@ApiParam(value = "页码", required = true) @RequestParam Integer pageNum,
@ApiParam(value = "每页记录数", required = true) @RequestParam Integer pageSize,
@ApiParam("交易哈希") @RequestParam(required = false) String nftHash,
@ApiParam("转出人地址") @RequestParam(required = false) String fromAddress,
@ApiParam("接收人地址") @RequestParam(required = false) String toAddress,
@ApiParam("开始日期") @RequestParam(required = false) String startDate,
@ApiParam("截止日期") @RequestParam(required = false) String endDate) {
PageHelper.startPage(pageNum, pageSize);
List<NftTransferRecordVo> list = nftTransferRecordService.getTransferRecordList(nftHash, fromAddress, toAddress, startDate, endDate);
return ResponseModel.success(new PageInfo<>(list));
}
} }
package com.fzm.common.entity.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* @author tangtuo
* @date 2021/9/14 15:46
*/
@Data
public class NftTransferDetailVo {
@ApiModelProperty("主键")
private Integer id;
@ApiModelProperty("nft名称")
private String nftName;
@ApiModelProperty("封面")
private String cover;
@ApiModelProperty("nft类型")
private String category;
@ApiModelProperty("nft编号")
private String nftId;
@ApiModelProperty("id")
private String tradeId;
@ApiModelProperty("区块链高度")
private Long height;
@ApiModelProperty("创建日期")
private Date createDate;
@ApiModelProperty("转出人地址")
private String fromWallet;
@ApiModelProperty("转出人昵称")
private String fromNickname;
@ApiModelProperty("转出人头像")
private String fromAvatar;
@ApiModelProperty("转入人地址")
private String toWallet;
@ApiModelProperty("转入人昵称")
private String toNickname;
@ApiModelProperty("转入人头像")
private String toAvatar;
}
package com.fzm.common.entity.vo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* @author tangtuo
* @date 2021/9/14 10:56
*/
@Data
public class NftTransferRecordVo {
@TableId(type = IdType.AUTO)
private Integer id;
@ApiModelProperty("nft名称")
private String nftName;
@ApiModelProperty("nft哈希")
private String nftHash;
@ApiModelProperty("类型")
private String category;
@ApiModelProperty("转出人地址")
private String fromAddress;
@ApiModelProperty("转出人昵称")
private String formNickname;
@ApiModelProperty("接收人地址")
private String toAddress;
@ApiModelProperty("接收人昵称")
private String toNickname;
@ApiModelProperty("流水类型")
private String streamType = "转让";
@ApiModelProperty("交易结果")
private String tradeResult = "成功";
@ApiModelProperty("创建时间")
private Date createDate;
}
package com.fzm.common.mapper; package com.fzm.common.mapper;
import cn.hutool.core.date.DateTime;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.fzm.common.entity.AuthPerson; import com.fzm.common.entity.AuthPerson;
import com.fzm.common.entity.NftTransferRecord; import com.fzm.common.entity.NftTransferRecord;
import com.fzm.common.entity.vo.NftTransferDetailVo;
import com.fzm.common.entity.vo.NftTransferRecordVo;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/** /**
* @author tangtuo * @author tangtuo
...@@ -11,4 +17,11 @@ import org.apache.ibatis.annotations.Mapper; ...@@ -11,4 +17,11 @@ import org.apache.ibatis.annotations.Mapper;
*/ */
@Mapper @Mapper
public interface NftTransferRecordMapper extends BaseMapper<NftTransferRecord> { public interface NftTransferRecordMapper extends BaseMapper<NftTransferRecord> {
List<NftTransferRecordVo> getTransferRecordList(@Param("nftHash") String nftHash, @Param("fromAddress") String fromAddress, @Param("toAddress") String toAddress, @Param("start") DateTime start, @Param("end") DateTime end);
List<NftTransferDetailVo> list(@Param("wallet") String wallet, @Param("type") Integer type);
NftTransferDetailVo getDetail(@Param("id") Integer id);
} }
...@@ -3,6 +3,10 @@ package com.fzm.common.service; ...@@ -3,6 +3,10 @@ package com.fzm.common.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.fzm.common.entity.NftChainInfo; import com.fzm.common.entity.NftChainInfo;
import com.fzm.common.entity.NftTransferRecord; import com.fzm.common.entity.NftTransferRecord;
import com.fzm.common.entity.vo.NftTransferDetailVo;
import com.fzm.common.entity.vo.NftTransferRecordVo;
import java.util.List;
/** /**
* @author tangtuo * @author tangtuo
...@@ -10,4 +14,31 @@ import com.fzm.common.entity.NftTransferRecord; ...@@ -10,4 +14,31 @@ import com.fzm.common.entity.NftTransferRecord;
*/ */
public interface NftTransferRecordService extends IService<NftTransferRecord> { public interface NftTransferRecordService extends IService<NftTransferRecord> {
/**
* 查询转让记录列表
*
* @param nftHash
* @param fromAddress
* @param toAddress
* @param startDate
* @param endDate
* @return
*/
List<NftTransferRecordVo> getTransferRecordList(String nftHash, String fromAddress, String toAddress, String startDate, String endDate);
/**
* 查询我的转让记录
*
* @param type
* @return
*/
List<NftTransferDetailVo> list(Integer type);
/**
* 转让详情
*
* @param id
* @return
*/
NftTransferDetailVo getDetail(Integer id);
} }
...@@ -208,6 +208,7 @@ public class NftServiceImpl extends ServiceImpl<NftMapper, Nft> implements NftSe ...@@ -208,6 +208,7 @@ public class NftServiceImpl extends ServiceImpl<NftMapper, Nft> implements NftSe
transferNft.setId(nft.getId()); transferNft.setId(nft.getId());
updateById(transferNft); updateById(transferNft);
// 保存nft的转让记录 // 保存nft的转让记录
NftTransferRecord record = new NftTransferRecord(); NftTransferRecord record = new NftTransferRecord();
record.setNftId(nft.getId()). record.setNftId(nft.getId()).
setNftHash(nft.getNftHash()). setNftHash(nft.getNftHash()).
......
package com.fzm.common.service.impl; package com.fzm.common.service.impl;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fzm.common.entity.AuthPerson; import com.fzm.common.entity.AuthPerson;
import com.fzm.common.entity.NftTransferRecord; import com.fzm.common.entity.NftTransferRecord;
import com.fzm.common.entity.User;
import com.fzm.common.entity.vo.NftTransferDetailVo;
import com.fzm.common.entity.vo.NftTransferRecordVo;
import com.fzm.common.mapper.AuthPersonMapper; import com.fzm.common.mapper.AuthPersonMapper;
import com.fzm.common.mapper.NftTransferRecordMapper; import com.fzm.common.mapper.NftTransferRecordMapper;
import com.fzm.common.service.AuthPersonService; import com.fzm.common.service.AuthPersonService;
import com.fzm.common.service.NftTransferRecordService; import com.fzm.common.service.NftTransferRecordService;
import com.fzm.common.service.UserService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
/** /**
* @author tangtuo * @author tangtuo
* @date 2021/6/28 11:29 * @date 2021/6/28 11:29
*/ */
@Service @Service
public class NftTransferRecordServiceImpl extends ServiceImpl<NftTransferRecordMapper, NftTransferRecord> implements NftTransferRecordService { public class NftTransferRecordServiceImpl extends ServiceImpl<NftTransferRecordMapper, NftTransferRecord> implements NftTransferRecordService {
@Resource
private NftTransferRecordMapper nftTransferRecordMapper;
@Resource
private UserService userService;
@Override
public List<NftTransferRecordVo> getTransferRecordList(String nftHash, String fromAddress, String toAddress, String startDate, String endDate) {
DateTime start = null;
DateTime end = null;
if (StringUtils.isNotBlank(startDate)) {
start = DateUtil.parse(startDate + " 00:00:00", "yyyy-MM-dd HH:mm:ss");
}
if (StringUtils.isNotBlank(endDate)) {
end = DateUtil.parse(endDate + " 23:59:59", "yyyy-MM-dd HH:mm:ss");
}
return nftTransferRecordMapper.getTransferRecordList(nftHash, fromAddress, toAddress, start, end);
}
@Override
public List<NftTransferDetailVo> list(Integer type) {
User user = userService.getUserByToken();
return nftTransferRecordMapper.list(user.getWallet(), type);
}
@Override
public NftTransferDetailVo getDetail(Integer id) {
return nftTransferRecordMapper.getDetail(id);
}
} }
...@@ -199,23 +199,15 @@ public class OssUtil { ...@@ -199,23 +199,15 @@ public class OssUtil {
public static void main(String[] args) { public static void main(String[] args) {
String endpoint = "oss-cn-shanghai.aliyuncs.com"; String endpoint = "oss-cn-hangzhou.aliyuncs.com";
// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。 // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。
String accessKeyId = "LTAI5tAAXBCtnQ2ytwagazjt"; String accessKeyId = "LTAI5tHGn7cVJdEtihTFLSeB";
String accessKeySecret = "x0T6hyJvRFLtPjZYrNo5egEc4kShlU"; String accessKeySecret = "XYmfBSbLaZoblGXZwIXkbhfBD7a1eg";
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
String bucket2 = "joying-nft"; String bucket2 = "joying-nft";
ossClient.deleteObject("test-nft","20210913/ff8e541497d1482895be1f038bb0430e/微信图片_20210913144401.jpg");
}
if (ossClient.doesBucketExist(bucket2)) {
// 设置Bucket加密。
ServerSideEncryptionByDefault applyServerSideEncryptionByDefault = new ServerSideEncryptionByDefault(SSEAlgorithm.AES256);
ServerSideEncryptionConfiguration sseConfig = new ServerSideEncryptionConfiguration();
sseConfig.setApplyServerSideEncryptionByDefault(applyServerSideEncryptionByDefault);
SetBucketEncryptionRequest request = new SetBucketEncryptionRequest(bucket2, sseConfig);
ossClient.setBucketEncryption(request);
ossClient.shutdown();
}
}
} }
<?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.fzm.common.mapper.NftTransferRecordMapper">
<select id="getTransferRecordList" resultType="com.fzm.common.entity.vo.NftTransferRecordVo">
SELECT
a.id,
a.from_address,
a.to_address,
a.nft_hash,
a.create_date,
b.`name` AS nftName,
c.nickname AS fromNickName,
d.nickname AS toNickname,
e.category_name AS category
FROM
tb_nft_transfer_record a
LEFT JOIN tb_nft b ON a.nft_id = b.id
LEFT JOIN tb_user c ON a.from_address = c.wallet
LEFT JOIN tb_user d ON a.to_address = d.wallet
LEFT JOIN tb_category e ON b.category_id = e.id
<where>
1=1
<if test="nftHash != null and nftHash != ''">
and a.nft_hash = #{nftHash}
</if>
<if test="fromAddress != null and fromAddress != ''">
and a.from_address = #{fromAddress}
</if>
<if test="toAddress != null and toAddress != ''">
and a.to_address = #{toAddress}
</if>
<if test="start != null">
and a.create_date >= #{start}
</if>
<if test="end != null">
and a.create_date &lt;= #{end}
</if>
</where>
</select>
<select id="list" resultType="com.fzm.common.entity.vo.NftTransferDetailVo">
SELECT a.id,
a.nft_hash,
a.create_date,
b.cover,
b.`name` AS nftName,
e.category_name AS category
FROM tb_nft_transfer_record a
LEFT JOIN tb_nft b ON a.nft_id = b.id
LEFT JOIN tb_category e ON b.category_id = e.id
<where>
<if test="type == 0">
a.from_address = #{wallet} or a.to_address = #{wallet}
</if>
<if test="type == 1">
a.from_address = #{wallet}
</if>
<if test="type == 2">
a.to_address = #{wallet}
</if>
</where>
</select>
<select id="getDetail" resultType="com.fzm.common.entity.vo.NftTransferDetailVo">
SELECT a.nft_hash,
a.create_date,
a.transfer_hash AS tradeId,
b.cover,
b.`name` AS nftName,
b.cover,
b.nft_id,
c.nickname AS fromNickname,
c.avatar AS fromAvatar,
c.wallet AS fromWallet,
d.nickname AS toNickname,
d.avatar AS toAvatar,
d.wallet AS toWallet,
e.category_name AS category
FROM tb_nft_transfer_record a
LEFT JOIN tb_nft b ON a.nft_id = b.id
LEFT JOIN tb_user c ON a.from_address = c.wallet
LEFT JOIN tb_user d ON a.to_address = d.wallet
LEFT JOIN tb_category e ON b.category_id = e.id
where a.id = #{id}
</select>
</mapper>
\ No newline at end of file
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
(select count(0) from tb_nft n where u.wallet = n.publish_address and n.nft_hash != '') as publishCount (select count(0) from tb_nft n where u.wallet = n.publish_address and n.nft_hash != '') as publishCount
FROM tb_user u FROM tb_user u
<where> <where>
1=1
<if test="telephone != null and telephone != ''"> <if test="telephone != null and telephone != ''">
and u.telephone = #{telephone} and u.telephone = #{telephone}
</if> </if>
......
...@@ -207,5 +207,4 @@ public class NftController { ...@@ -207,5 +207,4 @@ public class NftController {
return ResponseModel.success(result); return ResponseModel.success(result);
} }
} }
package com.fzm.portal.controller;
import com.fzm.common.annotation.Authentication;
import com.fzm.common.entity.vo.NftTransferDetailVo;
import com.fzm.common.model.ResponseModel;
import com.fzm.common.service.NftTransferRecordService;
import com.fzm.common.utils.JwtUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
/**
* @author tangtuo
* @date 2021/9/14 15:43
*/
@Slf4j
@RestController
@Authentication
@RequestMapping(value = "/nft/transfer/record")
@Api(tags = "nft转让记录")
public class NftTransferRecordController {
@Resource
private NftTransferRecordService nftTransferRecordService;
@GetMapping("/list/{type}")
@ApiOperation(value = "查询我的nft流转记录")
public ResponseModel<List<NftTransferDetailVo>> list(@ApiParam("0-所有 1-转出 2-转入") @PathVariable Integer type) {
List<NftTransferDetailVo> list = nftTransferRecordService.list(type);
return ResponseModel.success(list);
}
@GetMapping("/detail/{id}")
@ApiOperation(value = "获取流转详情")
public ResponseModel<NftTransferDetailVo> getDetail(@PathVariable Integer id){
NftTransferDetailVo nftTransferDetailVo = nftTransferRecordService.getDetail(id);
return ResponseModel.success(nftTransferDetailVo);
}
}
package com.fzm.portal; package com.fzm.portal;
/** import lombok.SneakyThrows;
* @author tangtuo import org.apache.http.client.config.RequestConfig;
* @date 2021/8/5 14:21 import org.apache.http.client.methods.CloseableHttpResponse;
*/ import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import java.awt.*;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.StringSelection;
import java.awt.event.KeyEvent;
public class Test { public class Test {
private static final String USER_AGENT = "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50";
private static final int TIME_OUT = 60 * 1000;
private static RequestConfig requestConfig;
private static CloseableHttpClient httpClient;
static {
requestConfig = RequestConfig.custom()
.setConnectTimeout(TIME_OUT)
.setSocketTimeout(TIME_OUT)
.setConnectionRequestTimeout(TIME_OUT)
.build();
httpClient = HttpClients.custom().setDefaultRequestConfig(requestConfig).build();
}
@SneakyThrows
public static void main(String[] args) { public static void main(String[] args) {
String url = "https://chp.shadiao.app/api.php";
HttpGet httpGet = new HttpGet(url);
httpGet.setHeader("connection", "keep-alive");
httpGet.setHeader("user-agent", USER_AGENT);
Robot robot = new Robot();
robot.delay(3 * 1000); // 延迟3秒,用来打开窗口
Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard();
int count = 10;
int s = 0;
while (count > 0) {
CloseableHttpResponse httpResponse = httpClient.execute(httpGet);
if (null != httpResponse && httpResponse.getStatusLine().getStatusCode() == 200) {
String resJoson = EntityUtils.toString(httpResponse.getEntity(), "UTF-8");
clip.setContents(new StringSelection(resJoson), null);
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_CONTROL);
robot.delay(1 * 1000); // 1秒延迟
robot.keyPress(KeyEvent.VK_ENTER);
++s;
System.out.println("第" + s + "次,发送成功!");
}
httpResponse.close();
count--;
Thread.sleep(100);
}
httpClient.close();
} }
} }
\ No newline at end of file
...@@ -265,3 +265,5 @@ CREATE TABLE `tb_user` ( ...@@ -265,3 +265,5 @@ CREATE TABLE `tb_user` (
) ENGINE = InnoDB AUTO_INCREMENT = 47 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '门户用户表' ROW_FORMAT = Dynamic; ) ENGINE = InnoDB AUTO_INCREMENT = 47 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '门户用户表' ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1; SET FOREIGN_KEY_CHECKS = 1;
alter table tb_nft_transfer_record add column is_effective TINYINT(1) DEFAULT 1 comment '是否有效 0-否 1-是';
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment