Commit 3823264a authored by tangtuo's avatar tangtuo

委托上架接口编写

parent 6de80776
...@@ -42,11 +42,6 @@ ...@@ -42,11 +42,6 @@
<option name="url" value="http://maven.aliyun.com/nexus/content/groups/public/" /> <option name="url" value="http://maven.aliyun.com/nexus/content/groups/public/" />
</remote-repository> </remote-repository>
<remote-repository> <remote-repository>
<option name="id" value="maven-nexus-group" />
<option name="name" value="maven-nexus-group" />
<option name="url" value="http://146.56.197.85:12100/repository/maven-central/" />
</remote-repository>
<remote-repository>
<option name="id" value="fzm" /> <option name="id" value="fzm" />
<option name="name" value="fzm repositories" /> <option name="name" value="fzm repositories" />
<option name="url" value="http://maven.citydo.com.cn/repository/maven-public/" /> <option name="url" value="http://maven.citydo.com.cn/repository/maven-public/" />
......
package com.fzm.admin; package com.fzm.admin;
import com.fzm.common.config.WxPayConfig;
import com.spring4all.swagger.EnableSwagger2Doc; import com.spring4all.swagger.EnableSwagger2Doc;
import org.mybatis.spring.annotation.MapperScan; import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
......
...@@ -2,15 +2,21 @@ package com.fzm.admin.controller; ...@@ -2,15 +2,21 @@ package com.fzm.admin.controller;
import com.fzm.common.annotation.Authentication; import com.fzm.common.annotation.Authentication;
import com.fzm.common.entity.Banner; import com.fzm.common.entity.Banner;
import com.fzm.common.enums.ResultCode;
import com.fzm.common.exception.GlobalException;
import com.fzm.common.model.ResponseModel; import com.fzm.common.model.ResponseModel;
import com.fzm.common.service.BannerService; import com.fzm.common.service.BannerService;
import com.fzm.common.utils.ObsUtil;
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;
import org.springframework.validation.annotation.Validated; import org.apache.commons.lang3.StringUtils;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.io.IOException;
import java.util.List; import java.util.List;
/** /**
...@@ -26,15 +32,28 @@ public class BannerController { ...@@ -26,15 +32,28 @@ public class BannerController {
@Resource @Resource
private BannerService bannerService; private BannerService bannerService;
@Resource
private ObsUtil obsUtil;
@PostMapping("/create") @PostMapping("/create")
@ApiOperation("新建banner") @ApiOperation("新建banner")
public ResponseModel<Boolean> create(@Validated @RequestBody Banner banner) { public ResponseModel<Boolean> create(MultipartFile posterFile, String name, String jumpUrl, Integer sort) throws IOException {
if (posterFile == null || StringUtils.isAnyBlank(name, jumpUrl) || sort == null) {
throw GlobalException.newException(ResultCode.VALIDATE_FAILED);
}
String url = obsUtil.putObject(posterFile);
Banner banner = new Banner();
banner.setName(name);
banner.setJumpUrl(jumpUrl);
banner.setPoster(url);
banner.setSort(sort);
return ResponseModel.success(bannerService.save(banner)); return ResponseModel.success(bannerService.save(banner));
} }
@GetMapping("/page") @GetMapping("/page")
@ApiOperation("分页查询banner列表") @ApiOperation("分页查询banner列表")
public ResponseModel<PageInfo<Banner>> page() { public ResponseModel<PageInfo<Banner>> page(@RequestParam Integer pageNum, @RequestParam Integer pageSize) {
PageHelper.startPage(pageNum, pageSize);
List<Banner> list = bannerService.listAll(); List<Banner> list = bannerService.listAll();
return ResponseModel.success(new PageInfo<>(list)); return ResponseModel.success(new PageInfo<>(list));
} }
...@@ -47,7 +66,23 @@ public class BannerController { ...@@ -47,7 +66,23 @@ public class BannerController {
@PostMapping("/update") @PostMapping("/update")
@ApiOperation("修改banner") @ApiOperation("修改banner")
public ResponseModel<Boolean> update(@RequestBody Banner banner) { public ResponseModel<Boolean> update(MultipartFile posterFile, Integer id, String name, String jumpUrl, Integer sort) throws IOException {
if (id == null) {
throw GlobalException.newException(ResultCode.VALIDATE_FAILED);
}
Banner banner = new Banner();
if (posterFile != null) {
// 删除原有海报
String poster = bannerService.getById(id).getPoster();
obsUtil.delete(poster);
// 上传新海报
String posterUrl = obsUtil.putObject(posterFile);
banner.setPoster(posterUrl);
}
banner.setName(name);
banner.setJumpUrl(jumpUrl);
banner.setSort(sort);
banner.setId(id);
return ResponseModel.success(bannerService.updateById(banner)); return ResponseModel.success(bannerService.updateById(banner));
} }
......
...@@ -95,3 +95,10 @@ huaweiyun: ...@@ -95,3 +95,10 @@ huaweiyun:
app-secret: GI0oWEGRJuMKmPXJq2fCmuMpFPIITLmjeCQxo2tA app-secret: GI0oWEGRJuMKmPXJq2fCmuMpFPIITLmjeCQxo2tA
end-point: obs.cn-east-3.myhuaweicloud.com end-point: obs.cn-east-3.myhuaweicloud.com
bucket: filmchain-file bucket: filmchain-file
wx-pay:
app-id: wxbdddd81913c795e9
mch-id: 1604477044
api-v3-key: D864DA53FEF8ACD41519064967DC10D2
mch-serial-num: 72A62544B0A08A214FAEC780108692EDC6E7D5FA
private-key-path: apiclient_key.pem
\ No newline at end of file
...@@ -96,3 +96,10 @@ huaweiyun: ...@@ -96,3 +96,10 @@ huaweiyun:
app-secret: GI0oWEGRJuMKmPXJq2fCmuMpFPIITLmjeCQxo2tA app-secret: GI0oWEGRJuMKmPXJq2fCmuMpFPIITLmjeCQxo2tA
end-point: obs.cn-east-3.myhuaweicloud.com end-point: obs.cn-east-3.myhuaweicloud.com
bucket: filmchain-file bucket: filmchain-file
wx-pay:
app-id: wxbdddd81913c795e9
mch-id: 1604477044
api-v3-key: D864DA53FEF8ACD41519064967DC10D2
mch-serial-num: 72A62544B0A08A214FAEC780108692EDC6E7D5FA
private-key-path: apiclient_key.pem
\ No newline at end of file
...@@ -96,3 +96,10 @@ huaweiyun: ...@@ -96,3 +96,10 @@ huaweiyun:
app-secret: GI0oWEGRJuMKmPXJq2fCmuMpFPIITLmjeCQxo2tA app-secret: GI0oWEGRJuMKmPXJq2fCmuMpFPIITLmjeCQxo2tA
end-point: obs.cn-east-3.myhuaweicloud.com end-point: obs.cn-east-3.myhuaweicloud.com
bucket: filmchain-file bucket: filmchain-file
wx-pay:
app-id: wxbdddd81913c795e9
mch-id: 1604477044
api-v3-key: D864DA53FEF8ACD41519064967DC10D2
mch-serial-num: 72A62544B0A08A214FAEC780108692EDC6E7D5FA
private-key-path: apiclient_key.pem
\ No newline at end of file
...@@ -96,3 +96,10 @@ huaweiyun: ...@@ -96,3 +96,10 @@ huaweiyun:
app-secret: GI0oWEGRJuMKmPXJq2fCmuMpFPIITLmjeCQxo2tA app-secret: GI0oWEGRJuMKmPXJq2fCmuMpFPIITLmjeCQxo2tA
end-point: obs.cn-east-3.myhuaweicloud.com end-point: obs.cn-east-3.myhuaweicloud.com
bucket: filmchain-file bucket: filmchain-file
wx-pay:
app-id: wxbdddd81913c795e9
mch-id: 1604477044
api-v3-key: D864DA53FEF8ACD41519064967DC10D2
mch-serial-num: 72A62544B0A08A214FAEC780108692EDC6E7D5FA
private-key-path: apiclient_key.pem
\ No newline at end of file
...@@ -106,7 +106,11 @@ ...@@ -106,7 +106,11 @@
<artifactId>esdk-obs-java</artifactId> <artifactId>esdk-obs-java</artifactId>
<version>3.20.6.1</version> <version>3.20.6.1</version>
</dependency> </dependency>
<dependency>
<groupId>com.github.wechatpay-apiv3</groupId>
<artifactId>wechatpay-apache-httpclient</artifactId>
<version>0.4.0</version>
</dependency>
</dependencies> </dependencies>
<properties> <properties>
......
package com.fzm.common.config;
import com.fzm.common.enums.ResultCode;
import com.fzm.common.exception.GlobalException;
import com.fzm.common.properties.WxPayProperties;
import com.wechat.pay.contrib.apache.httpclient.WechatPayHttpClientBuilder;
import com.wechat.pay.contrib.apache.httpclient.auth.PrivateKeySigner;
import com.wechat.pay.contrib.apache.httpclient.auth.Verifier;
import com.wechat.pay.contrib.apache.httpclient.auth.WechatPay2Credentials;
import com.wechat.pay.contrib.apache.httpclient.auth.WechatPay2Validator;
import com.wechat.pay.contrib.apache.httpclient.cert.CertificatesManager;
import com.wechat.pay.contrib.apache.httpclient.exception.HttpCodeException;
import com.wechat.pay.contrib.apache.httpclient.exception.NotFoundException;
import com.wechat.pay.contrib.apache.httpclient.util.PemUtil;
import org.apache.http.impl.client.CloseableHttpClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import javax.annotation.Resource;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.security.GeneralSecurityException;
import java.security.PrivateKey;
/**
* @author tangtuo
* @date 2022/1/12 16:30
*/
@Configuration
public class WxPayConfig {
@Resource
private WxPayProperties wxPayProperties;
private PrivateKey getPrivateKey() {
// 加载商户私钥(privateKey:私钥字符串地址)
try {
ClassPathResource resource = new ClassPathResource(wxPayProperties.getPrivateKeyPath());
return PemUtil.loadPrivateKey(resource.getInputStream());
} catch (IOException e) {
throw GlobalException.newException(ResultCode.FAILED, "微信支付私钥加载失败 : " + e.getMessage());
}
}
@Bean
public CloseableHttpClient client() throws NotFoundException, HttpCodeException, GeneralSecurityException, IOException {
// 获取证书管理器实例
CertificatesManager certificatesManager = CertificatesManager.getInstance();
// 向证书管理器增加需要自动更新平台证书的商户信息
PrivateKey merchantPrivateKey = getPrivateKey();
String mchId = wxPayProperties.getMchId();
String apiV3Key = wxPayProperties.getApiV3Key();
String mchSerialNum = wxPayProperties.getMchSerialNum();
certificatesManager.putMerchant(mchId, new WechatPay2Credentials(mchId,
new PrivateKeySigner(mchSerialNum, merchantPrivateKey)), apiV3Key.getBytes(StandardCharsets.UTF_8));
// 从证书管理器中获取verifier
Verifier verifier = certificatesManager.getVerifier(mchId);
WechatPayHttpClientBuilder builder = WechatPayHttpClientBuilder.create()
.withMerchant(mchId, mchSerialNum, merchantPrivateKey)
.withValidator(new WechatPay2Validator(verifier));
// ... 接下来,你仍然可以通过builder设置各种参数,来配置你的HttpClient
// 通过WechatPayHttpClientBuilder构造的HttpClient,会自动的处理签名和验签,并进行证书自动更新
return builder.build();
}
}
...@@ -23,7 +23,10 @@ public class Banner { ...@@ -23,7 +23,10 @@ public class Banner {
private String name; private String name;
@ApiModelProperty("详情信息") @ApiModelProperty("详情信息")
private String desc; private String jumpUrl;
@ApiModelProperty("海报地址")
private String poster;
@ApiModelProperty("排序") @ApiModelProperty("排序")
private Integer sort; private Integer sort;
......
package com.fzm.common.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fzm.common.valid.InsertGroup;
import com.fzm.common.valid.UpdateGroup;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.Date;
/**
* @author tangtuo
* @date 2022/1/11 17:05
*/
@Data
@TableName("tb_entrust_shelf")
public class EntrustShelf {
@NotNull(message = "id不能为空", groups = UpdateGroup.class)
@TableId(type = IdType.AUTO)
private Integer id;
@ApiModelProperty("用户id")
private Integer userId;
@NotBlank(message = "nft哈希不能为空", groups = InsertGroup.class)
@ApiModelProperty("nft哈希")
private String nftHash;
@NotBlank(message = "姓名不能为空", groups = InsertGroup.class)
@ApiModelProperty("姓名")
private String name;
@NotBlank(message = "电话号码不能为空", groups = InsertGroup.class)
@ApiModelProperty("电话号码")
private String telephone;
@NotBlank(message = "微信号不能为空", groups = InsertGroup.class)
@ApiModelProperty("微信号")
private String wechatNum;
@ApiModelProperty("0-委托中 1-已取消")
private Integer status;
private Date createDate;
private Date updateDate;
}
...@@ -90,6 +90,9 @@ public class Nft extends BaseEntity { ...@@ -90,6 +90,9 @@ public class Nft extends BaseEntity {
@ApiModelProperty("0-下架 1-上架") @ApiModelProperty("0-下架 1-上架")
private Integer status; private Integer status;
@ApiModelProperty("是否已委托上架 0-否 1-是")
private Integer isEntrust;
@ApiModelProperty("是否是纪念版nft 0-否 1-是") @ApiModelProperty("是否是纪念版nft 0-否 1-是")
private Integer isCommemorate; private Integer isCommemorate;
......
...@@ -89,7 +89,6 @@ public class CopyrightDTO { ...@@ -89,7 +89,6 @@ public class CopyrightDTO {
@ApiModelProperty(value = "权力取得方式") @ApiModelProperty(value = "权力取得方式")
private String authorityAcquireMode; private String authorityAcquireMode;
@NotBlank(message = "权力取得证明材料不能为空")
@ApiModelProperty(value = "权力取得证明材料") @ApiModelProperty(value = "权力取得证明材料")
private String authorityAcquireProve; private String authorityAcquireProve;
......
package com.fzm.common.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.fzm.common.entity.AuthPerson;
import com.fzm.common.entity.EntrustShelf;
import org.apache.ibatis.annotations.Mapper;
/**
* @author tangtuo
* @date 2021/6/28 11:25
*/
@Mapper
public interface EntrustShelfMapper extends BaseMapper<EntrustShelf> {
}
package com.fzm.common.properties;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* @author tangtuo
* @date 2022/1/12 16:14
*/
@Data
@Component
@ConfigurationProperties(prefix = "wx-pay")
public class WxPayProperties {
@ApiModelProperty("微信公众号appId")
private String appId;
@ApiModelProperty("商户号")
private String mchId;
@ApiModelProperty("api v3秘钥")
private String apiV3Key;
@ApiModelProperty("商户api证书序列号")
private String mchSerialNum;
@ApiModelProperty("商户私钥文件路径")
private String privateKeyPath;
}
package com.fzm.common.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.fzm.common.entity.AuthPerson;
import com.fzm.common.entity.EntrustShelf;
/**
* @author tangtuo
* @date 2021/6/28 11:28
*/
public interface EntrustShelfService extends IService<EntrustShelf> {
/**
* 提交委托上架申请
*
* @param entrustShelf
* @return
*/
Boolean submit(EntrustShelf entrustShelf);
/**
* 取消委托上架申请
*
* @param id
* @return
*/
Boolean cancel(Integer id);
}
...@@ -4,7 +4,6 @@ import com.baomidou.mybatisplus.extension.service.IService; ...@@ -4,7 +4,6 @@ import com.baomidou.mybatisplus.extension.service.IService;
import com.fzm.common.entity.Nft; import com.fzm.common.entity.Nft;
import com.fzm.common.entity.NftDto; import com.fzm.common.entity.NftDto;
import com.fzm.common.entity.vo.CollectionNftVo; import com.fzm.common.entity.vo.CollectionNftVo;
import com.fzm.common.entity.vo.NftCertificateVo;
import com.fzm.common.entity.vo.NftListVo; import com.fzm.common.entity.vo.NftListVo;
import com.fzm.common.entity.vo.NftVo; import com.fzm.common.entity.vo.NftVo;
import com.fzm.common.params.NftTransferParam; import com.fzm.common.params.NftTransferParam;
...@@ -169,4 +168,12 @@ public interface NftService extends IService<Nft> { ...@@ -169,4 +168,12 @@ public interface NftService extends IService<Nft> {
* @return * @return
*/ */
NftVo getDetail(String nftHash) throws ExecutionException, InterruptedException; NftVo getDetail(String nftHash) throws ExecutionException, InterruptedException;
/**
* 修改当前nfthash的是否已委托的状态
*
* @param nftHash
* @param isEntrust
*/
void updateEntrust(String nftHash, Integer isEntrust);
} }
package com.fzm.common.service;
/**
* @author tangtuo
* @date 2022/1/13 10:13
*/
public interface WxPayService {
}
package com.fzm.common.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fzm.common.constant.SystemConstant;
import com.fzm.common.entity.EntrustShelf;
import com.fzm.common.enums.ResultCode;
import com.fzm.common.exception.GlobalException;
import com.fzm.common.mapper.EntrustShelfMapper;
import com.fzm.common.service.EntrustShelfService;
import com.fzm.common.service.NftService;
import com.fzm.common.utils.JwtUtil;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
/**
* @author tangtuo
* @date 2021/7/5 15:09
*/
@Service
@Transactional(rollbackFor = RuntimeException.class)
public class EntrustShelfServiceImpl extends ServiceImpl<EntrustShelfMapper, EntrustShelf> implements EntrustShelfService {
@Resource
private HttpServletRequest request;
@Resource
private NftService nftService;
@Override
public Boolean submit(EntrustShelf entrustShelf) {
// 修改当前nft的是否已申请的状态为是
nftService.updateEntrust(entrustShelf.getNftHash(), SystemConstant.BOOLEAN_DATA_TRUE);
String authorization = request.getHeader("Authorization");
Integer userId = JwtUtil.getUserIdFromToken(authorization);
entrustShelf.setUserId(userId);
try {
return this.save(entrustShelf);
} catch (DuplicateKeyException e) {
throw GlobalException.newException(ResultCode.FAILED, "此nft已提交过上架申请,请勿重复提交");
}
}
@Override
public Boolean cancel(Integer id) {
EntrustShelf entrustShelf = this.getById(id);
if (entrustShelf == null) {
throw GlobalException.newException(ResultCode.SELECT_FAILED);
}
// 已取消
if (entrustShelf.getStatus().equals(SystemConstant.BOOLEAN_DATA_TRUE)) {
throw GlobalException.newException(ResultCode.FAILED, "当前申请已取消");
}
// 修改当前nft的是否已申请的状态为否
nftService.updateEntrust(entrustShelf.getNftHash(), SystemConstant.BOOLEAN_DATA_FALSE);
entrustShelf.setStatus(SystemConstant.BOOLEAN_DATA_TRUE);
return this.updateById(entrustShelf);
}
}
...@@ -191,7 +191,7 @@ public class NftServiceImpl extends ServiceImpl<NftMapper, Nft> implements NftSe ...@@ -191,7 +191,7 @@ public class NftServiceImpl extends ServiceImpl<NftMapper, Nft> implements NftSe
String tokenInfo = paraChainClient.evmGetTokenInfo(abi, contractAddr, nft.getTokenId(), user.getWallet()); String tokenInfo = paraChainClient.evmGetTokenInfo(abi, contractAddr, nft.getTokenId(), user.getWallet());
log.info("tokenInfo:{}", tokenInfo); log.info("tokenInfo:{}", tokenInfo);
// 转让nft // 转让nft
String hash = paraChainClient.evmTransfer(abi, contractAddr, EvmTokenEnum.ERC1155, 0L, String hash = paraChainClient.evmTransfer(abi, contractAddr, EvmTokenEnum.ERC1155, 1000000L,
param.getReceiveWallet(), nft.getTokenId(), param.getCount(), tokenInfo, user.getWallet(), null, true); param.getReceiveWallet(), nft.getTokenId(), param.getCount(), tokenInfo, user.getWallet(), null, true);
if (StringUtils.isBlank(hash)) { if (StringUtils.isBlank(hash)) {
throw GlobalException.newException(ResultCode.TRANSFER_ERROR, "nft转让失败"); throw GlobalException.newException(ResultCode.TRANSFER_ERROR, "nft转让失败");
...@@ -260,6 +260,15 @@ public class NftServiceImpl extends ServiceImpl<NftMapper, Nft> implements NftSe ...@@ -260,6 +260,15 @@ public class NftServiceImpl extends ServiceImpl<NftMapper, Nft> implements NftSe
return new NftVo(nft, copyrightVo); return new NftVo(nft, copyrightVo);
} }
@Override
public void updateEntrust(String nftHash, Integer isEntrust) {
Nft nft = new Nft();
nft.setIsEntrust(isEntrust);
QueryWrapper<Nft> wrapper = new QueryWrapper<>();
wrapper.eq("nft_hash", nftHash);
this.update(nft, wrapper);
}
private String getCodeType(String type) { private String getCodeType(String type) {
switch (type) { switch (type) {
case "sms": case "sms":
......
package com.fzm.common.service.impl;
import com.fzm.common.properties.WxPayProperties;
import com.fzm.common.service.WxPayService;
import org.apache.http.impl.client.CloseableHttpClient;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
/**
* @author tangtuo
* @date 2022/1/13 10:13
*/
@Service
@Transactional(rollbackFor = RuntimeException.class)
public class WxPayServiceImpl implements WxPayService {
// @Resource
// private CloseableHttpClient httpClient;
//
// @Resource
// private WxPayProperties wxPayProperties;
}
...@@ -7,6 +7,7 @@ import com.fzm.common.properties.ObsProperties; ...@@ -7,6 +7,7 @@ import com.fzm.common.properties.ObsProperties;
import com.obs.services.ObsClient; import com.obs.services.ObsClient;
import com.obs.services.model.DeleteObjectResult; import com.obs.services.model.DeleteObjectResult;
import com.obs.services.model.ObsObject; import com.obs.services.model.ObsObject;
import com.obs.services.model.PutObjectResult;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
...@@ -108,15 +109,15 @@ public class ObsUtil { ...@@ -108,15 +109,15 @@ public class ObsUtil {
String bucketName = "filmchain-file"; String bucketName = "filmchain-file";
// 创建ObsClient实例 // 创建ObsClient实例
ObsClient obsClient = new ObsClient(ak, sk, endPoint); ObsClient obsClient = new ObsClient(ak, sk, endPoint);
String url = "https://filmchain-file.obs.cn-east-3.myhuaweicloud.com/8792bab6a7fe4bb58e64b2c4f54ab220/kubernetes(k8s)课程.pdf"; // String url = "https://filmchain-file.obs.cn-east-3.myhuaweicloud.com/8792bab6a7fe4bb58e64b2c4f54ab220/kubernetes(k8s)课程.pdf";
String objectName = url.substring(String.format("https://%s.%s/", bucketName, endPoint).length()); // String objectName = url.substring(String.format("https://%s.%s/", bucketName, endPoint).length());
System.out.println(objectName); // System.out.println(objectName);
DeleteObjectResult deleteObjectResult = obsClient.deleteObject(bucketName, objectName); // DeleteObjectResult deleteObjectResult = obsClient.deleteObject(bucketName, objectName);
System.out.println(deleteObjectResult); // System.out.println(deleteObjectResult);
// String objectName = IdUtil.simpleUUID().concat("/").concat("kubernetes(k8s)课程.pdf"); String objectName = IdUtil.simpleUUID().concat("/").concat("kubernetes(k8s)课程.pdf");
// PutObjectResult putObjectResult = obsClient.putObject(bucketName, objectName, new File("D:\\资料\\k8s\\课程笔记\\kubernetes(k8s)课程.pdf")); PutObjectResult putObjectResult = obsClient.putObject(bucketName, objectName, new File("D:\\资料\\k8s\\课程笔记\\kubernetes(k8s)课程.pdf"));
// System.out.println(putObjectResult); System.out.println(putObjectResult);
// System.out.println(String.format("https://%s.%s/%s", bucketName, endPoint, objectName)); System.out.println(String.format("https://%s.%s/%s", bucketName, endPoint, objectName));
} }
......
...@@ -91,10 +91,6 @@ public class SmsUtil { ...@@ -91,10 +91,6 @@ public class SmsUtil {
* @return * @return
*/ */
public Boolean validateCode(String codetype, String mobile, String code, String type) { public Boolean validateCode(String codetype, String mobile, String code, String type) {
// todo 删除
if ("1234".equals(code)) {
return true;
}
String timestamp = getTimestamp(); String timestamp = getTimestamp();
HashMap<String, Object> paramMap = new HashMap<>(); HashMap<String, Object> paramMap = new HashMap<>();
paramMap.put("t", type); paramMap.put("t", type);
......
package com.fzm.common.valid;
/**
* @author tangtuo
* @date 2022/1/17 14:44
*/
public interface InsertGroup {
}
package com.fzm.common.valid;
import javax.validation.Payload;
/**
* @author tangtuo
* @date 2021/11/29 16:13
*/
public interface UpdateGroup extends Payload {
}
-----BEGIN PRIVATE KEY-----
MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDCwTnXfToW1zn/
9RuT/++d8l1VeUorxPtQt62IaliqMztUEiehQ2dOtadPzvUu9VSadaEWwfhMsowo
sIUaOij/6qfZcm4V9PgziNS33n7WGPFAhhiIHujb6VvQDirKdAKX9DqH9DoSg0bw
cSK1OdWPsRC5nhHPgDJvKzibVJeV/e36lI7ZdvB93yCChB9XFoCVhwHHteZY+sLX
4RSLBzCK4z/YOiytaYkYK4YZ7QjGyCcCLNXaMa9aBEfrUKAJOePBvrPl5ieNhPyY
3pPdAarqKoUaSQ74B6I9zmwNZiuJc22K70/sb6iEzPRgdiV63iDzwDp8nJm/vMZq
xAigr0L5AgMBAAECggEBAIK0CSyst2KC2UMFbZe7CUY4VRk7CGMtlPiL/ONzc8Pu
FCAM+xnIUbnKQdpW68ezEC+FSDIsxYY7wcLBDOMYK1HtWu6dVHJZ8IUtjI1FvlvT
a33BQQ+BpweHqn2MNH2gs+jlGK8LYjnwbpiJZSC5CrGfxLi98/gNckuXdysP75fS
IiHnWFX2AZ3jrp+yL7dT1hkPqjZjdHespU9WRKGxSfRYFnsbPdpGYv4+RGRTTlf/
fAw4n30jGc8Ua1zsGhIjlZp/x4SBnArHO+rupPH2kYDmVNJVZOqaIIJMZOprRDUz
fUEIguAwJLqU2OVTsM8FEr6nV2UEbPg/A91XTqIRKbECgYEA7jNKHv+oYs3kbwGo
GkgPwHnkDQbUkrfNAG1kdPTyqMCrINfeOvoDMjbcjbMlI/Gv3TaO98Ou6JTKkiav
VAIg4HY0cU6fQUB4PcK9UW69ztDk7O3z4KjVE8xYMegdTb++d85QPDLHC+I2qB55
o9Ux/sq+0DM8kLVkJm8UISSV0d0CgYEA0U7VjLTruNuwYAhXvIb+bjiNx52duqIN
GGO/zBJwoo3s1biWy3Uho6db12bqnVsSD2UXebjJblPyZr94cAaTbIEzxLd1Fl0k
RIBtN4IQLWzEUwRK8PlDr2/PM+s7CIrFttsL0JsT9uBtAsMdcYa4VB/U/8s/WQzK
ddRbg5MsOc0CgYEA17/dAvbNrbCPl3wIpsVefxfoV2Q4ZivUou5ybvzuTas1VSox
P3n0KydF3ZLFsSjYAaXJGOFFK6SZVodzhsPmw2hNV9O+q3uZbVdV4sxLX2gV8gQV
QQeq96O+vnVfFWz3N8zHH79eSoU6vEveIWaZQg6hhjLiSLADZkx2Dw70JIECgYEA
tWAiL68rwWImYeF43fcBDdRWEA+mee8pd+QgdR/ZmRNxkvZFPgO/ZciGDo+xaTBc
4xhQEnutmbyHBsCPBky8fb8sdCAiB4IpBm9ftUUw7ZweOG403sKyA5nZLP1/h3Rx
xnXktB1eXIW4ETexEQqUOtnmws6Gk41A+IBP2SG0plUCgYBn6abQwTpR1Ima5ZcJ
tRokADWeTUL3TGKEpHDw6ywxsmaEUACh9dhb/rEsvMitE7em2Dg1eyqialFMD50a
zw9dZrrb6bCcV5U4wfT8x+iQXWYXYPJbRx+5SFYOSZkKUrHVsgdLX+dDXsg88yuM
UtSQ5NpWkCE1oULt9EfRAF1HyQ==
-----END PRIVATE KEY-----
This diff is collapsed.
This diff is collapsed.
package com.fzm.portal.controller;
import com.fzm.common.annotation.Authentication;
import com.fzm.common.entity.EntrustShelf;
import com.fzm.common.model.ResponseModel;
import com.fzm.common.service.EntrustShelfService;
import com.fzm.common.valid.InsertGroup;
import com.fzm.common.valid.UpdateGroup;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.validation.Valid;
/**
* @author tangtuo
* @date 2022/1/11 17:19
*/
@Authentication
@RestController
@RequestMapping("/entrust/shelf")
@Api(tags = "委托上架")
public class EntrustShelfController {
@Resource
private EntrustShelfService entrustShelfService;
@PostMapping("/submit")
@ApiOperation(value = "提交委托上架申请")
public ResponseModel<Boolean> submit(@RequestBody @Validated(value = InsertGroup.class) EntrustShelf entrustShelf) {
return ResponseModel.success(entrustShelfService.submit(entrustShelf));
}
@GetMapping("/detail/{id}")
@ApiOperation(value = "根据id查询委托详情")
public ResponseModel<EntrustShelf> getById(@PathVariable Integer id) {
return ResponseModel.success(entrustShelfService.getById(id));
}
@PostMapping("/update")
@ApiOperation(value = "修改委托上架信息")
public ResponseModel<Boolean> updateById(@RequestBody @Validated(value = UpdateGroup.class) EntrustShelf entrustShelf) {
return ResponseModel.success(entrustShelfService.updateById(entrustShelf));
}
@PostMapping("/cancel")
@ApiOperation("取消委托申请")
public ResponseModel<Boolean> cancel(@RequestParam Integer id) {
return ResponseModel.success(entrustShelfService.cancel(id));
}
}
...@@ -182,4 +182,5 @@ public class NftController { ...@@ -182,4 +182,5 @@ public class NftController {
List<CollectionNftVo> list = nftService.listCopyright(userId); List<CollectionNftVo> list = nftService.listCopyright(userId);
return ResponseModel.success(list); return ResponseModel.success(list);
} }
} }
package com.fzm.portal.controller;
import com.fzm.common.annotation.Authentication;
import com.fzm.common.model.ResponseModel;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author tangtuo
* @date 2022/1/13 9:55
*/
@Authentication
@Api(tags = "微信支付")
@RestController
@RequestMapping("/wx-pay")
public class WxPayController {
@PostMapping("/pay/h5")
@ApiOperation(value = "发起h5支付")
public ResponseModel<String> payH5() {
return ResponseModel.success();
}
}
...@@ -93,3 +93,10 @@ huaweiyun: ...@@ -93,3 +93,10 @@ huaweiyun:
app-secret: GI0oWEGRJuMKmPXJq2fCmuMpFPIITLmjeCQxo2tA app-secret: GI0oWEGRJuMKmPXJq2fCmuMpFPIITLmjeCQxo2tA
end-point: obs.cn-east-3.myhuaweicloud.com end-point: obs.cn-east-3.myhuaweicloud.com
bucket: filmchain-file bucket: filmchain-file
wx-pay:
app-id: wxbdddd81913c795e9
mch-id: 1604477044
api-v3-key: D864DA53FEF8ACD41519064967DC10D2
mch-serial-num: 72A62544B0A08A214FAEC780108692EDC6E7D5FA
private-key-path: apiclient_key.pem
\ No newline at end of file
...@@ -105,3 +105,10 @@ huaweiyun: ...@@ -105,3 +105,10 @@ huaweiyun:
app-secret: GI0oWEGRJuMKmPXJq2fCmuMpFPIITLmjeCQxo2tA app-secret: GI0oWEGRJuMKmPXJq2fCmuMpFPIITLmjeCQxo2tA
end-point: obs.cn-east-3.myhuaweicloud.com end-point: obs.cn-east-3.myhuaweicloud.com
bucket: filmchain-file bucket: filmchain-file
wx-pay:
app-id: wxbdddd81913c795e9
mch-id: 1604477044
api-v3-key: D864DA53FEF8ACD41519064967DC10D2
mch-serial-num: 72A62544B0A08A214FAEC780108692EDC6E7D5FA
private-key-path: apiclient_key.pem
\ No newline at end of file
...@@ -106,3 +106,10 @@ huaweiyun: ...@@ -106,3 +106,10 @@ huaweiyun:
app-secret: GI0oWEGRJuMKmPXJq2fCmuMpFPIITLmjeCQxo2tA app-secret: GI0oWEGRJuMKmPXJq2fCmuMpFPIITLmjeCQxo2tA
end-point: obs.cn-east-3.myhuaweicloud.com end-point: obs.cn-east-3.myhuaweicloud.com
bucket: filmchain-file bucket: filmchain-file
wx-pay:
app-id: wxbdddd81913c795e9
mch-id: 1604477044
api-v3-key: D864DA53FEF8ACD41519064967DC10D2
mch-serial-num: 72A62544B0A08A214FAEC780108692EDC6E7D5FA
private-key-path: apiclient_key.pem
...@@ -94,3 +94,10 @@ huaweiyun: ...@@ -94,3 +94,10 @@ huaweiyun:
app-secret: GI0oWEGRJuMKmPXJq2fCmuMpFPIITLmjeCQxo2tA app-secret: GI0oWEGRJuMKmPXJq2fCmuMpFPIITLmjeCQxo2tA
end-point: obs.cn-east-3.myhuaweicloud.com end-point: obs.cn-east-3.myhuaweicloud.com
bucket: filmchain-file bucket: filmchain-file
wx-pay:
app-id: wxbdddd81913c795e9
mch-id: 1604477044
api-v3-key: D864DA53FEF8ACD41519064967DC10D2
mch-serial-num: 72A62544B0A08A214FAEC780108692EDC6E7D5FA
private-key-path: apiclient_key.pem
\ No newline at end of file
package com.fzm.portal; package com.fzm.portal;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
import javax.annotation.Resource;
/** /**
* @author tangtuo * @author tangtuo
* @date 2021/12/23 14:41 * @date 2021/12/23 14:41
...@@ -14,12 +11,5 @@ import javax.annotation.Resource; ...@@ -14,12 +11,5 @@ import javax.annotation.Resource;
@SpringBootTest @SpringBootTest
public class RabbitTestDemo { public class RabbitTestDemo {
/* @Resource
private RabbitTemplate rabbitTemplate;
@Test
void test1() {
rabbitTemplate.convertAndSend("copyright.direct", "copyright.apply", 123);
log.info("发送消息-------,{}", 123);
}*/
} }
package com.fzm.portal;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.fzm.common.properties.WxPayProperties;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.util.EntityUtils;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import javax.annotation.Resource;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
/**
* @author tangtuo
* @date 2022/1/13 15:30
*/
@SpringBootTest
public class WxPayTest {
@Resource
private CloseableHttpClient httpClient;
@Resource
private WxPayProperties wxPayProperties;
@Test
public void testH5Pay() throws IOException {
String url = "https://api.mch.weixin.qq.com/v3/pay/transactions/jsapi";
HttpPost httpPost = new HttpPost(url);
httpPost.addHeader("Accept", "application/json");
httpPost.addHeader("Content-type","application/json; charset=utf-8");
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectMapper objectMapper = new ObjectMapper();
ObjectNode rootNode = objectMapper.createObjectNode();
rootNode.put("mchid",wxPayProperties.getMchId())
.put("appid", wxPayProperties.getAppId())
.put("description", "Image形象店-深圳腾大-QQ公仔")
.put("notify_url", "http://www.baidu.com")
.put("out_trade_no", "nft-123");
rootNode.putObject("amount")
.put("total", 1);
rootNode.putObject("payer")
.put("openid", "oRG0ZxPPF0fbH1KCmMV5goJ69W8I");
String json = objectMapper.writeValueAsString(rootNode);
System.out.println("json = " + json);
objectMapper.writeValue(bos, rootNode);
httpPost.setEntity(new StringEntity(bos.toString("UTF-8"), "UTF-8"));
CloseableHttpResponse response = httpClient.execute(httpPost);
String bodyAsString = EntityUtils.toString(response.getEntity());
System.out.println(bodyAsString);
}
}
This diff is collapsed.
This diff is collapsed.
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -571,3 +571,8 @@ UPDATE `tb_opus_category` SET `value` = '模型作品' WHERE `id` = 15; ...@@ -571,3 +571,8 @@ UPDATE `tb_opus_category` SET `value` = '模型作品' WHERE `id` = 15;
UPDATE `tb_opus_category` SET `value` = '录音制品' WHERE `id` = 16; UPDATE `tb_opus_category` SET `value` = '录音制品' WHERE `id` = 16;
UPDATE `tb_opus_category` SET `value` = '录像制品' WHERE `id` = 17; UPDATE `tb_opus_category` SET `value` = '录像制品' WHERE `id` = 17;
UPDATE `tb_opus_category` SET `value` = '其他作品' WHERE `id` = 18; UPDATE `tb_opus_category` SET `value` = '其他作品' WHERE `id` = 18;
alter table tb_copyright_apply modify column evidence_date datetime DEFAULT NULL COMMENT '存证时间';
-- v2.1.0
CREATE UNIQUE INDEX idx_nfthash ON tb_entrust_shelf ( nft_hash );
alter table tb_nft add column is_entrust tinyint(1) not null default 0 comment '是否已委托上架 0-否 1-是' after status;
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