From 5b818c73e70ef4618681fd103ca593020431eeef Mon Sep 17 00:00:00 2001
From: KKSU <15274802129@163.com>
Date: Tue, 21 Nov 2023 18:02:25 +0800
Subject: [PATCH] 匹配
---
src/main/java/cc/mrbird/febs/mall/dto/ApiOrderBuyInfoDto.java | 14
src/main/java/cc/mrbird/febs/mall/vo/ApiOrderBuyInfoVo.java | 22 +
src/main/resources/templates/febs/views/modules/news/productSellList.html | 19
src/main/java/cc/mrbird/febs/mall/mapper/MallProductBuyRecordMapper.java | 14
src/main/java/cc/mrbird/febs/mall/mapper/MallProductSellRecordMapper.java | 7
src/main/resources/mapper/modules/MallProductSellRecordMapper.xml | 22 +
src/main/java/cc/mrbird/febs/mall/service/IMallNewsInfoService.java | 10
src/main/java/cc/mrbird/febs/mall/mapper/MallProductNftMapper.java | 6
src/main/java/cc/mrbird/febs/mall/entity/MallProductSell.java | 5
src/main/java/cc/mrbird/febs/mall/mapper/MallProductSellMapper.java | 9
src/main/java/cc/mrbird/febs/mall/controller/AdminNewsInfoController.java | 21 +
src/main/java/cc/mrbird/febs/mall/entity/MallProductBuy.java | 7
src/main/java/cc/mrbird/febs/mall/vo/ApiOrderSellRecordInfoVo.java | 29 +
src/main/resources/templates/febs/views/modules/news/productSellPick.html | 154 +++++++++
src/main/java/cc/mrbird/febs/mall/vo/ApiOrderListVo.java | 26 +
src/main/java/cc/mrbird/febs/mall/entity/MallProductBuyRecord.java | 23 +
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallProductServiceImpl.java | 79 ++++
src/main/java/cc/mrbird/febs/mall/vo/AdminMallProductSellPickVo.java | 13
src/main/java/cc/mrbird/febs/mall/service/IApiMallProductService.java | 10
src/main/java/cc/mrbird/febs/mall/controller/ApiMallProductController.java | 37 ++
src/main/resources/mapper/modules/MallProductBuyMapper.xml | 52 +-
src/main/java/cc/mrbird/febs/mall/vo/ApiOrderBuyRecordInfoVo.java | 29 +
src/main/resources/mapper/modules/MallProductNftMapper.xml | 62 +++
src/main/java/cc/mrbird/febs/mall/dto/AdminPickSellRecordDtoDto.java | 11
src/main/resources/mapper/modules/MallProductBuyRecordMapper.xml | 22 +
src/main/java/cc/mrbird/febs/mall/service/impl/MallNewsInfoServiceImpl.java | 86 ++++
src/main/java/cc/mrbird/febs/mall/dto/ApiOrderSellInfoDto.java | 15
src/main/resources/mapper/modules/MallProductSellMapper.xml | 19 +
src/main/java/cc/mrbird/febs/mall/dto/ApiOrderListDto.java | 25 +
src/main/java/cc/mrbird/febs/mall/mapper/MallProductBuyMapper.java | 8
src/main/java/cc/mrbird/febs/mall/vo/ApiOrderSellInfoVo.java | 22 +
src/main/java/cc/mrbird/febs/mall/controller/ViewNewsController.java | 15
src/main/resources/templates/febs/views/modules/news/productBuyList.html | 33 +
33 files changed, 843 insertions(+), 83 deletions(-)
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/AdminNewsInfoController.java b/src/main/java/cc/mrbird/febs/mall/controller/AdminNewsInfoController.java
index a766cc9..a2aa5e6 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/AdminNewsInfoController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/AdminNewsInfoController.java
@@ -6,11 +6,13 @@
import cc.mrbird.febs.common.entity.QueryRequest;
import cc.mrbird.febs.common.enumerates.ProductEnum;
import cc.mrbird.febs.mall.dto.AdminMallProductNftDto;
+import cc.mrbird.febs.mall.dto.AdminPickSellRecordDtoDto;
import cc.mrbird.febs.mall.dto.MallNewsInfoDto;
import cc.mrbird.febs.mall.entity.*;
import cc.mrbird.febs.mall.mapper.MallProductNftMapper;
import cc.mrbird.febs.mall.service.IMallNewsInfoService;
import cc.mrbird.febs.mall.vo.AdminMallProductNftVo;
+import cc.mrbird.febs.mall.vo.AdminMallProductSellPickVo;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
@@ -107,6 +109,25 @@
}
/**
+ * 用户NFT提现-匹配提现用户列表
+ * @return
+ */
+ @GetMapping(value = "findSellList")
+ public FebsResponse findSellList() {
+ List<AdminMallProductSellPickVo> categories = mallNewsInfoService.findSellList();
+ return new FebsResponse().success().data(categories);
+ }
+
+ /**
+ * 用户NFT提现-手动分配
+ */
+ @PostMapping("pickSellRecord")
+ @ControllerEndpoint(operation = "用户NFT提现-手动分配", exceptionMessage = "操作失败")
+ public FebsResponse pickSellRecord(@Valid AdminPickSellRecordDtoDto pickSellRecordDto) {
+ return mallNewsInfoService.pickSellRecord(pickSellRecordDto);
+ }
+
+ /**
* 新闻中心-列表
* @param mallNewsInfo
* @param request
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallProductController.java b/src/main/java/cc/mrbird/febs/mall/controller/ApiMallProductController.java
index 2c9a301..e17c388 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallProductController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/ApiMallProductController.java
@@ -2,11 +2,10 @@
import cc.mrbird.febs.common.entity.FebsResponse;
import cc.mrbird.febs.mall.dto.*;
-import cc.mrbird.febs.mall.entity.MallNewsInfo;
-import cc.mrbird.febs.mall.service.IApiMallNewsService;
import cc.mrbird.febs.mall.service.IApiMallProductService;
-import cc.mrbird.febs.mall.vo.NewsListVo;
-import cc.mrbird.febs.mall.vo.OrderListVo;
+import cc.mrbird.febs.mall.vo.ApiOrderBuyInfoVo;
+import cc.mrbird.febs.mall.vo.ApiOrderSellInfoVo;
+import cc.mrbird.febs.mall.vo.ApiOrderListVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
@@ -32,16 +31,46 @@
public FebsResponse productNFTList() {
return new FebsResponse().success().data(iApiMallProductService.productNFTList());
}
+
@ApiOperation(value = "预约", notes = "预约")
@PostMapping(value = "/createNFT")
public FebsResponse createNFT(@RequestBody @Valid ApiCreateNFTDto createNFTDto) {
return iApiMallProductService.createNFT(createNFTDto);
}
+
+ @ApiOperation(value = "订单管理-列表", notes = "订单管理-列表")
+ @ApiResponses({
+ @ApiResponse(code = 200, message = "success", response = ApiOrderListVo.class)
+ })
+ @PostMapping(value = "/orderList")
+ public FebsResponse orderList(@RequestBody @Valid ApiOrderListDto apiOrderListDto) {
+ return iApiMallProductService.orderList(apiOrderListDto);
+ }
+
+ @ApiOperation(value = "订单管理-查看提现详情", notes = "订单管理-查看提现详情")
+ @ApiResponses({
+ @ApiResponse(code = 200, message = "success", response = ApiOrderSellInfoVo.class)
+ })
+ @PostMapping(value = "/orderSell")
+ public FebsResponse orderSell(@RequestBody @Valid ApiOrderSellInfoDto apiOrderSellInfoDto) {
+ return iApiMallProductService.orderSell(apiOrderSellInfoDto);
+ }
+
+ @ApiOperation(value = "订单管理-查看预约详情", notes = "订单管理-查看预约详情")
+ @ApiResponses({
+ @ApiResponse(code = 200, message = "success", response = ApiOrderBuyInfoVo.class)
+ })
+ @PostMapping(value = "/orderBuy")
+ public FebsResponse orderBuy(@RequestBody @Valid ApiOrderBuyInfoDto apiOrderBuyInfoDto) {
+ return iApiMallProductService.orderBuy(apiOrderBuyInfoDto);
+ }
+
@ApiOperation(value = "FCM提现", notes = "FCM提现")
@PostMapping(value = "/outFcm")
public FebsResponse outFcm(@RequestBody @Valid ApiOutFcmDto outFcmDto) {
return iApiMallProductService.outFcm(outFcmDto);
}
+
@ApiOperation(value = "NFT提现", notes = "NFT提现")
@PostMapping(value = "/outNFT")
public FebsResponse outNFT(@RequestBody @Valid ApiOutNFTDto outNFTDto) {
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ViewNewsController.java b/src/main/java/cc/mrbird/febs/mall/controller/ViewNewsController.java
index c16302a..12dc11c 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/ViewNewsController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/ViewNewsController.java
@@ -4,7 +4,9 @@
import cc.mrbird.febs.common.utils.FebsUtil;
import cc.mrbird.febs.mall.entity.MallNewsCategory;
import cc.mrbird.febs.mall.entity.MallNewsInfo;
+import cc.mrbird.febs.mall.entity.MallProductBuy;
import cc.mrbird.febs.mall.entity.MallProductNft;
+import cc.mrbird.febs.mall.mapper.MallProductBuyMapper;
import cc.mrbird.febs.mall.mapper.MallProductNftMapper;
import cc.mrbird.febs.mall.service.IMallNewsInfoService;
import lombok.RequiredArgsConstructor;
@@ -26,6 +28,7 @@
private final IMallNewsInfoService mallNewsInfoService;
private final MallProductNftMapper mallProductNftMapper;
+ private final MallProductBuyMapper mallProductBuyMapper;
/**
* NFT预约产品
@@ -76,6 +79,18 @@
}
/**
+ * 用户NFT提现-手动分配
+ * @return
+ */
+ @GetMapping("productSellPick/{id}")
+ @RequiresPermissions("productSellPick:update")
+ public String productSellPick(@PathVariable long id, Model model) {
+ MallProductBuy mallProductBuy = mallProductBuyMapper.selectById(id);
+ model.addAttribute("mallProductBuy", mallProductBuy);
+ return FebsUtil.view("modules/news/productSellPick");
+ }
+
+ /**
* 新闻中心-列表
* @return
*/
diff --git a/src/main/java/cc/mrbird/febs/mall/dto/AdminPickSellRecordDtoDto.java b/src/main/java/cc/mrbird/febs/mall/dto/AdminPickSellRecordDtoDto.java
new file mode 100644
index 0000000..f9e7c6c
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/dto/AdminPickSellRecordDtoDto.java
@@ -0,0 +1,11 @@
+package cc.mrbird.febs.mall.dto;
+
+import lombok.Data;
+
+@Data
+public class AdminPickSellRecordDtoDto {
+
+ private Long productSellId;
+ private Long id;
+ private String pickNftCnt;
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/dto/ApiOrderBuyInfoDto.java b/src/main/java/cc/mrbird/febs/mall/dto/ApiOrderBuyInfoDto.java
new file mode 100644
index 0000000..acab120
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/dto/ApiOrderBuyInfoDto.java
@@ -0,0 +1,14 @@
+package cc.mrbird.febs.mall.dto;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+@Data
+@ApiModel(value = "ApiOrderBuyInfoDto", description = "参数接收类")
+public class ApiOrderBuyInfoDto {
+
+ @NotNull(message = "类型参数不能为空")
+ private Long id;
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/dto/ApiOrderListDto.java b/src/main/java/cc/mrbird/febs/mall/dto/ApiOrderListDto.java
new file mode 100644
index 0000000..c30fef9
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/dto/ApiOrderListDto.java
@@ -0,0 +1,25 @@
+package cc.mrbird.febs.mall.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+@Data
+@ApiModel(value = "ApiOrderListDto", description = "参数接收类")
+public class ApiOrderListDto {
+
+ @ApiModelProperty(value = "一页数量", example = "10")
+ private Integer pageSize;
+
+ @ApiModelProperty(value = "第几页", example = "1")
+ private Integer pageNum;
+
+ @ApiModelProperty(hidden = true)
+ private Long memberId;
+
+ @NotNull(message = "类型参数不能为空")
+ @ApiModelProperty(value = "类型:1:提现(卖单), 2:预约(买单)", example = "1")
+ private Integer orderType;
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/dto/ApiOrderSellInfoDto.java b/src/main/java/cc/mrbird/febs/mall/dto/ApiOrderSellInfoDto.java
new file mode 100644
index 0000000..206fd8c
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/dto/ApiOrderSellInfoDto.java
@@ -0,0 +1,15 @@
+package cc.mrbird.febs.mall.dto;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+@Data
+@ApiModel(value = "ApiOrderSellInfoDto", description = "参数接收类")
+public class ApiOrderSellInfoDto {
+
+ @NotNull(message = "类型参数不能为空")
+ private Long id;
+
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/entity/MallProductBuy.java b/src/main/java/cc/mrbird/febs/mall/entity/MallProductBuy.java
index 1123f40..e8ae233 100644
--- a/src/main/java/cc/mrbird/febs/mall/entity/MallProductBuy.java
+++ b/src/main/java/cc/mrbird/febs/mall/entity/MallProductBuy.java
@@ -1,6 +1,7 @@
package cc.mrbird.febs.mall.entity;
import cc.mrbird.febs.common.entity.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@@ -13,12 +14,16 @@
public class MallProductBuy extends BaseEntity {
private Long memberId;//
+ private String orderNo;
private Long sellId;//出售ID
- private Long productNftId;//预约NFT编码
+ private Long productNftId;//预约NFTID
private int state;//预约状态 0:失败 1:进行中 2:超时 3:已完成
private int mateState;//匹配状态0:失败 1:匹配中 2:待支付 3:已支付 4:对方已确认 5:已完成
private BigDecimal nftTotal;//nft预约额度
private BigDecimal nftAva;//nft分配额度
private Date orderTime;//匹配时间
private Date payTime;//支付时间
+
+ @TableField(exist = false)
+ private String accountLogin;
}
diff --git a/src/main/java/cc/mrbird/febs/mall/entity/MallProductBuyRecord.java b/src/main/java/cc/mrbird/febs/mall/entity/MallProductBuyRecord.java
new file mode 100644
index 0000000..7a20e4e
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/entity/MallProductBuyRecord.java
@@ -0,0 +1,23 @@
+package cc.mrbird.febs.mall.entity;
+
+import cc.mrbird.febs.common.entity.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+@TableName("mall_product_buy_record")
+public class MallProductBuyRecord extends BaseEntity {
+
+ private Long memberId;//
+ private Long buyId;//
+ private Long sellRecordId;//
+ private BigDecimal pickNftCnt;//分配额度、支付金额
+ private Integer state;//匹配状态0:失败 1:匹配中 2:待支付 3:已支付 4:对方已确认 5:已完成
+ private Date orderTime;//匹配时间
+ private Date payTime;//支付时间
+ private String nftImg;//支付凭证
+ private Integer type;//支付类型 1:微信 2:支付宝 3:银行转账 4:USDT转账
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/entity/MallProductSell.java b/src/main/java/cc/mrbird/febs/mall/entity/MallProductSell.java
index f37423b..af043e4 100644
--- a/src/main/java/cc/mrbird/febs/mall/entity/MallProductSell.java
+++ b/src/main/java/cc/mrbird/febs/mall/entity/MallProductSell.java
@@ -1,6 +1,7 @@
package cc.mrbird.febs.mall.entity;
import cc.mrbird.febs.common.entity.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@@ -11,10 +12,14 @@
public class MallProductSell extends BaseEntity {
private Long memberId;//
+ private String orderNo;
private BigDecimal nftTotal;//动态NFT总数
private BigDecimal nftCnt;//实际提现数量
private BigDecimal nftCntAva;//剩余数量
private BigDecimal nftFee;//NFT手续费
private BigDecimal fcmFee;//代币手续费
private Integer state;//预约状态 0:失败 1:进行中 2:超时 3:已完成
+
+ @TableField(exist = false)
+ private String accountLogin;
}
diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/MallProductBuyMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/MallProductBuyMapper.java
index 3212291..857b95d 100644
--- a/src/main/java/cc/mrbird/febs/mall/mapper/MallProductBuyMapper.java
+++ b/src/main/java/cc/mrbird/febs/mall/mapper/MallProductBuyMapper.java
@@ -1,7 +1,11 @@
package cc.mrbird.febs.mall.mapper;
+import cc.mrbird.febs.mall.dto.ApiOrderListDto;
import cc.mrbird.febs.mall.entity.MallProductBuy;
+import cc.mrbird.febs.mall.vo.ApiOrderBuyInfoVo;
+import cc.mrbird.febs.mall.vo.ApiOrderListVo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Param;
public interface MallProductBuyMapper extends BaseMapper<MallProductBuy> {
@@ -9,4 +13,8 @@
@Param("productNFTId")Long productNFTId,
@Param("state")Integer state,
@Param("mateState")Integer mateState);
+
+ IPage<ApiOrderListVo> selectListInPage(IPage<ApiOrderListVo> page, @Param("record")ApiOrderListDto apiOrderListDto);
+
+ ApiOrderBuyInfoVo selectBuyById(@Param("id")Long productBuyId);
}
diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/MallProductBuyRecordMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/MallProductBuyRecordMapper.java
new file mode 100644
index 0000000..9f01524
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/mapper/MallProductBuyRecordMapper.java
@@ -0,0 +1,14 @@
+package cc.mrbird.febs.mall.mapper;
+
+import cc.mrbird.febs.mall.entity.MallProductBuyRecord;
+import cc.mrbird.febs.mall.vo.ApiOrderBuyRecordInfoVo;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface MallProductBuyRecordMapper extends BaseMapper<MallProductBuyRecord> {
+
+ List<ApiOrderBuyRecordInfoVo> selectByBuyId(@Param("productBuyId")Long productBuyId);
+
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/MallProductNftMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/MallProductNftMapper.java
index d2142ae..4e64adc 100644
--- a/src/main/java/cc/mrbird/febs/mall/mapper/MallProductNftMapper.java
+++ b/src/main/java/cc/mrbird/febs/mall/mapper/MallProductNftMapper.java
@@ -3,10 +3,7 @@
import cc.mrbird.febs.mall.entity.MallProductBuy;
import cc.mrbird.febs.mall.entity.MallProductNft;
import cc.mrbird.febs.mall.entity.MallProductSell;
-import cc.mrbird.febs.mall.vo.AdminMallProductBuyVo;
-import cc.mrbird.febs.mall.vo.AdminMallProductNftVo;
-import cc.mrbird.febs.mall.vo.AdminMallProductSellVo;
-import cc.mrbird.febs.mall.vo.ApiMallProductNftVo;
+import cc.mrbird.febs.mall.vo.*;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -24,4 +21,5 @@
IPage<AdminMallProductSellVo> getSellList(Page<AdminMallProductSellVo> page, @Param("record")MallProductSell mallProductSell);
+ List<AdminMallProductSellPickVo> selectProductSellByState(@Param("state")int value);
}
diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/MallProductSellMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/MallProductSellMapper.java
index 09541dd..89f3f32 100644
--- a/src/main/java/cc/mrbird/febs/mall/mapper/MallProductSellMapper.java
+++ b/src/main/java/cc/mrbird/febs/mall/mapper/MallProductSellMapper.java
@@ -1,7 +1,16 @@
package cc.mrbird.febs.mall.mapper;
+import cc.mrbird.febs.mall.dto.ApiOrderListDto;
import cc.mrbird.febs.mall.entity.MallProductSell;
+import cc.mrbird.febs.mall.vo.ApiOrderListVo;
+import cc.mrbird.febs.mall.vo.ApiOrderSellInfoVo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.ibatis.annotations.Param;
public interface MallProductSellMapper extends BaseMapper<MallProductSell> {
+
+ IPage<ApiOrderListVo> selectListInPage(IPage<ApiOrderListVo> page, @Param("record")ApiOrderListDto apiOrderListDto);
+
+ ApiOrderSellInfoVo selectSellInfoById(@Param("id")Long productSellId);
}
diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/MallProductSellRecordMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/MallProductSellRecordMapper.java
index 8cb5822..ed0f200 100644
--- a/src/main/java/cc/mrbird/febs/mall/mapper/MallProductSellRecordMapper.java
+++ b/src/main/java/cc/mrbird/febs/mall/mapper/MallProductSellRecordMapper.java
@@ -1,7 +1,14 @@
package cc.mrbird.febs.mall.mapper;
import cc.mrbird.febs.mall.entity.MallProductSellRecord;
+import cc.mrbird.febs.mall.vo.ApiOrderSellRecordInfoVo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
public interface MallProductSellRecordMapper extends BaseMapper<MallProductSellRecord> {
+
+ List<ApiOrderSellRecordInfoVo> selectBySellId(@Param("productSellId")Long productSellId);
+
}
diff --git a/src/main/java/cc/mrbird/febs/mall/service/IApiMallProductService.java b/src/main/java/cc/mrbird/febs/mall/service/IApiMallProductService.java
index 8388b5e..2c7897e 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/IApiMallProductService.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/IApiMallProductService.java
@@ -1,9 +1,7 @@
package cc.mrbird.febs.mall.service;
import cc.mrbird.febs.common.entity.FebsResponse;
-import cc.mrbird.febs.mall.dto.ApiCreateNFTDto;
-import cc.mrbird.febs.mall.dto.ApiOutFcmDto;
-import cc.mrbird.febs.mall.dto.ApiOutNFTDto;
+import cc.mrbird.febs.mall.dto.*;
import cc.mrbird.febs.mall.entity.MallNewsCategory;
import cc.mrbird.febs.mall.entity.MallProductNft;
import cc.mrbird.febs.mall.vo.ApiMallProductNftVo;
@@ -19,4 +17,10 @@
FebsResponse outFcm(ApiOutFcmDto outFcmDto);
FebsResponse outNFT(ApiOutNFTDto outNFTDto);
+
+ FebsResponse orderList(ApiOrderListDto apiOrderListDto);
+
+ FebsResponse orderSell(ApiOrderSellInfoDto apiOrderSellInfoDto);
+
+ FebsResponse orderBuy(ApiOrderBuyInfoDto apiOrderBuyInfoDto);
}
diff --git a/src/main/java/cc/mrbird/febs/mall/service/IMallNewsInfoService.java b/src/main/java/cc/mrbird/febs/mall/service/IMallNewsInfoService.java
index 762d896..695f658 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/IMallNewsInfoService.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/IMallNewsInfoService.java
@@ -3,12 +3,10 @@
import cc.mrbird.febs.common.entity.FebsResponse;
import cc.mrbird.febs.common.entity.QueryRequest;
import cc.mrbird.febs.mall.dto.AdminMallProductNftDto;
+import cc.mrbird.febs.mall.dto.AdminPickSellRecordDtoDto;
import cc.mrbird.febs.mall.dto.MallNewsInfoDto;
import cc.mrbird.febs.mall.entity.*;
-import cc.mrbird.febs.mall.vo.AdminMallNewsInfoVo;
-import cc.mrbird.febs.mall.vo.AdminMallProductBuyVo;
-import cc.mrbird.febs.mall.vo.AdminMallProductNftVo;
-import cc.mrbird.febs.mall.vo.AdminMallProductSellVo;
+import cc.mrbird.febs.mall.vo.*;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
@@ -47,4 +45,8 @@
IPage<AdminMallProductBuyVo> getBuyList(MallProductBuy mallProductBuy, QueryRequest request);
IPage<AdminMallProductSellVo> getSellList(MallProductSell mallProductSell, QueryRequest request);
+
+ List<AdminMallProductSellPickVo> findSellList();
+
+ FebsResponse pickSellRecord(AdminPickSellRecordDtoDto pickSellRecordDto);
}
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallProductServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallProductServiceImpl.java
index c2750fd..bc49198 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallProductServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallProductServiceImpl.java
@@ -8,17 +8,18 @@
import cc.mrbird.febs.common.exception.FebsException;
import cc.mrbird.febs.common.utils.LoginUserUtil;
import cc.mrbird.febs.common.utils.MallUtils;
-import cc.mrbird.febs.mall.dto.ApiCreateNFTDto;
-import cc.mrbird.febs.mall.dto.ApiOutFcmDto;
-import cc.mrbird.febs.mall.dto.ApiOutNFTDto;
+import cc.mrbird.febs.mall.dto.*;
import cc.mrbird.febs.mall.entity.*;
import cc.mrbird.febs.mall.mapper.*;
import cc.mrbird.febs.mall.service.IApiMallProductService;
import cc.mrbird.febs.mall.service.IMallMoneyFlowService;
-import cc.mrbird.febs.mall.vo.ApiMallProductNftVo;
+import cc.mrbird.febs.mall.vo.*;
import cc.mrbird.febs.rabbit.producter.AgentProducer;
+import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.crypto.SecureUtil;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@@ -26,6 +27,7 @@
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
+import java.util.ArrayList;
import java.util.List;
@Slf4j
@@ -41,6 +43,7 @@
private final AgentProducer agentProducer;
private final MallProductSellMapper mallProductSellMapper;
private final MallProductSellRecordMapper mallProductSellRecordMapper;
+ private final MallProductBuyRecordMapper mallProductBuyRecordMapper;
@Override
public List<ApiMallProductNftVo> productNFTList() {
@@ -81,8 +84,11 @@
|| priceToken.compareTo(mallMemberAmount.getTokenAva()) > 0){
throw new FebsException("余额不足");
}
+
+ String orderNo = MallUtils.getOrderNum("YY");
mallProductBuy = new MallProductBuy();
mallProductBuy.setMemberId(memberId);
+ mallProductBuy.setOrderNo(orderNo);
mallProductBuy.setProductNftId(mallProductNft.getId());
mallProductBuy.setState(ProductEnum.PRODUCT_BUY_ON_GOING.getValue());
mallProductBuy.setMateState(ProductEnum.PRODUCT_MATE_STATE_ON_GOING.getValue());
@@ -93,8 +99,6 @@
mallMemberAmount.setTokenAva(mallMemberAmount.getTokenAva().subtract(priceToken));
mallMemberAmount.setTokenFrozen(mallMemberAmount.getTokenFrozen().add(priceToken));
mallMemberAmountMapper.updateTokenAvaAndTokenFrozenById(mallMemberAmount);
-
- String orderNo = MallUtils.getOrderNum("YY");
iMallMoneyFlowService.addMoneyFlow(
memberId,
priceToken.negate(),
@@ -227,8 +231,10 @@
BigDecimal fcmPrice = ObjectUtil.isEmpty(fcmPriceDic) ? new BigDecimal(2) : new BigDecimal(fcmPriceDic.getValue());
BigDecimal fcmFeeCnt = nftFee.divide(fcmPrice, 2, BigDecimal.ROUND_DOWN);
+ String orderNo = MallUtils.getOrderNum("NFT");
MallProductSell mallProductSell = new MallProductSell();
mallProductSell.setMemberId(memberId);
+ mallProductSell.setOrderNo(orderNo);
mallProductSell.setNftTotal(nftCnt);
mallProductSell.setNftCnt(nftCntAva);
mallProductSell.setNftCntAva(nftCntAva);
@@ -242,7 +248,6 @@
mallMemberAmount.setFrozenNft(mallMemberAmount.getFrozenNft().add(nftCntAva));
mallMemberAmountMapper.updateFrozenNftById(mallMemberAmount);
- String orderNo = MallUtils.getOrderNum("NFT");
iMallMoneyFlowService.addMoneyFlow(
memberId,
nftCnt.negate(),
@@ -263,4 +268,64 @@
agentProducer.sendFcmNFTExchangeMsg(fcmFeeCnt.toString());
return new FebsResponse().success();
}
+
+ @Override
+ public FebsResponse orderList(ApiOrderListDto apiOrderListDto) {
+ Long memberId = LoginUserUtil.getLoginUser().getId();
+ List<ApiOrderListVo> objects = new ArrayList<>();
+ Integer orderType = apiOrderListDto.getOrderType();
+ apiOrderListDto.setMemberId(memberId);
+ //买单
+ if(2 == orderType){
+ IPage<ApiOrderListVo> page = new Page<>(apiOrderListDto.getPageNum(), apiOrderListDto.getPageSize());
+ IPage<ApiOrderListVo> apiOrderListVoIPageBuy = mallProductBuyMapper.selectListInPage(page, apiOrderListDto);
+ if(CollUtil.isNotEmpty(apiOrderListVoIPageBuy.getRecords())){
+ for(ApiOrderListVo apiOrderListVo : apiOrderListVoIPageBuy.getRecords()){
+ objects.add(apiOrderListVo);
+ }
+ }
+ }
+ //卖单
+ if(1 == orderType){
+ IPage<ApiOrderListVo> page = new Page<>(apiOrderListDto.getPageNum(), apiOrderListDto.getPageSize());
+ IPage<ApiOrderListVo> apiOrderListVoIPageSell = mallProductSellMapper.selectListInPage(page, apiOrderListDto);
+ if(CollUtil.isNotEmpty(apiOrderListVoIPageSell.getRecords())){
+ for(ApiOrderListVo apiOrderListVo : apiOrderListVoIPageSell.getRecords()){
+ objects.add(apiOrderListVo);
+ }
+ }
+ }
+
+ return new FebsResponse().success().data(objects);
+ }
+
+ @Override
+ public FebsResponse orderSell(ApiOrderSellInfoDto apiOrderSellInfoDto) {
+ Long productSellId = apiOrderSellInfoDto.getId();
+ Long memberId = LoginUserUtil.getLoginUser().getId();
+ ApiOrderSellInfoVo apiOrderSellInfoVo = mallProductSellMapper.selectSellInfoById(productSellId);
+ if(ObjectUtil.isEmpty(apiOrderSellInfoVo)){
+ throw new FebsException("记录不存在");
+ }
+ List<ApiOrderSellRecordInfoVo> apiOrderSellRecordInfoVos = mallProductSellRecordMapper.selectBySellId(productSellId);
+ if(CollUtil.isNotEmpty(apiOrderSellRecordInfoVos)){
+ apiOrderSellInfoVo.setApiOrderSellRecordInfoVos(apiOrderSellRecordInfoVos);
+ }
+ return new FebsResponse().success().data(apiOrderSellInfoVo);
+ }
+
+ @Override
+ public FebsResponse orderBuy(ApiOrderBuyInfoDto apiOrderBuyInfoDto) {
+ Long productBuyId = apiOrderBuyInfoDto.getId();
+ Long memberId = LoginUserUtil.getLoginUser().getId();
+ ApiOrderBuyInfoVo apiOrderBuyInfoVo = mallProductBuyMapper.selectBuyById(productBuyId);
+ if(ObjectUtil.isEmpty(apiOrderBuyInfoVo)){
+ throw new FebsException("记录不存在");
+ }
+ List<ApiOrderBuyRecordInfoVo> apiOrderBuyRecordInfoVos = mallProductBuyRecordMapper.selectByBuyId(productBuyId);
+ if(CollUtil.isNotEmpty(apiOrderBuyRecordInfoVos)){
+ apiOrderBuyInfoVo.setApiOrderBuyRecordInfoVos(apiOrderBuyRecordInfoVos);
+ }
+ return new FebsResponse().success().data(apiOrderBuyInfoVo);
+ }
}
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/MallNewsInfoServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/MallNewsInfoServiceImpl.java
index 1a68d76..d2aff70 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/MallNewsInfoServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/MallNewsInfoServiceImpl.java
@@ -2,19 +2,18 @@
import cc.mrbird.febs.common.entity.FebsResponse;
import cc.mrbird.febs.common.entity.QueryRequest;
+import cc.mrbird.febs.common.enumerates.ProductEnum;
import cc.mrbird.febs.mall.conversion.MallProductNftConversion;
import cc.mrbird.febs.mall.dto.AdminMallProductNftDto;
+import cc.mrbird.febs.mall.dto.AdminPickSellRecordDtoDto;
import cc.mrbird.febs.mall.dto.MallNewsInfoDto;
import cc.mrbird.febs.mall.entity.*;
-import cc.mrbird.febs.mall.mapper.MallNewsCategoryMapper;
-import cc.mrbird.febs.mall.mapper.MallNewsInfoMapper;
-import cc.mrbird.febs.mall.mapper.MallProductNftMapper;
+import cc.mrbird.febs.mall.mapper.*;
import cc.mrbird.febs.mall.service.IMallNewsInfoService;
-import cc.mrbird.febs.mall.vo.AdminMallNewsInfoVo;
-import cc.mrbird.febs.mall.vo.AdminMallProductBuyVo;
-import cc.mrbird.febs.mall.vo.AdminMallProductNftVo;
-import cc.mrbird.febs.mall.vo.AdminMallProductSellVo;
+import cc.mrbird.febs.mall.vo.*;
import cn.hutool.core.bean.BeanUtil;
+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.baomidou.mybatisplus.core.metadata.IPage;
@@ -24,6 +23,7 @@
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
+import java.math.BigDecimal;
import java.util.List;
/**
@@ -37,6 +37,10 @@
private final MallNewsCategoryMapper mallNewsCategoryMapper;
private final MallProductNftMapper mallProductNftMapper;
+ private final MallProductBuyMapper mallProductBuyMapper;
+ private final MallProductSellMapper mallProductSellMapper;
+ private final MallProductSellRecordMapper mallProductSellRecordMapper;
+ private final MallProductBuyRecordMapper mallProductBuyRecordMapper;
@Override
public IPage<AdminMallNewsInfoVo> getNewInfoList(MallNewsInfo mallNewsInfo, QueryRequest request) {
@@ -199,4 +203,72 @@
IPage<AdminMallProductSellVo> adminMallProductSellVoIPage = mallProductNftMapper.getSellList(page, mallProductSell);
return adminMallProductSellVoIPage;
}
+
+ @Override
+ public List<AdminMallProductSellPickVo> findSellList() {
+ List<AdminMallProductSellPickVo> list = mallProductNftMapper.selectProductSellByState(ProductEnum.PRODUCT_SELL_ON_GOING.getValue());
+ return list;
+ }
+
+ @Override
+ public FebsResponse pickSellRecord(AdminPickSellRecordDtoDto pickSellRecordDto) {
+ /**
+ * 买单条件是否满足
+ * 卖单条件是否满足
+ * 生成卖单子记录
+ * 生成买单子记录
+ * 更新卖单状态
+ * 更新买单状态
+ */
+ Long productBuyId = pickSellRecordDto.getId();
+ Long productSellId = pickSellRecordDto.getProductSellId();
+ BigDecimal pickNftCnt = new BigDecimal(pickSellRecordDto.getPickNftCnt());
+ //买单
+ MallProductBuy mallProductBuy = mallProductBuyMapper.selectById(productBuyId);
+ int state = mallProductBuy.getState();
+ if(ProductEnum.PRODUCT_BUY_ON_GOING.getValue() != state){
+ return new FebsResponse().fail().message("预约状态不是进行中");
+ }
+ BigDecimal nftAva = mallProductBuy.getNftAva();
+ if(BigDecimal.ZERO.compareTo(pickNftCnt) >= 0){
+ return new FebsResponse().fail().message("本次金额不能小于等于零");
+ }
+ if(nftAva.compareTo(pickNftCnt) < 0){
+ return new FebsResponse().fail().message("可分配不足");
+ }
+ //卖单
+ MallProductSell mallProductSell = mallProductSellMapper.selectById(productSellId);
+ BigDecimal nftCntAva = mallProductSell.getNftCntAva();
+ if(ProductEnum.PRODUCT_SELL_ON_GOING.getValue() != mallProductSell.getState()){
+ return new FebsResponse().fail().message("预约状态不是进行中");
+ }
+ if(nftCntAva.compareTo(pickNftCnt) < 0){
+ return new FebsResponse().fail().message("匹配提现剩余不足");
+ }
+ DateTime orderTime = DateUtil.date();
+ //生成卖单子记录
+ MallProductSellRecord mallProductSellRecord = new MallProductSellRecord();
+ mallProductSellRecord.setSellId(mallProductSell.getId());
+ mallProductSellRecord.setMemberId(mallProductBuy.getMemberId());
+ mallProductSellRecord.setOrderTime(orderTime);
+ mallProductSellRecord.setNftCnt(pickNftCnt);
+ mallProductSellRecord.setState(ProductEnum.PRODUCT_MATE_STATE_WAIT_PAY.getValue());
+ mallProductSellRecordMapper.insert(mallProductSellRecord);
+ //生成买单子记录
+ MallProductBuyRecord mallProductBuyRecord = new MallProductBuyRecord();
+ mallProductBuyRecord.setBuyId(mallProductBuy.getId());
+ mallProductBuyRecord.setMemberId(mallProductSell.getMemberId());
+ mallProductBuyRecord.setSellRecordId(mallProductSellRecord.getId());
+ mallProductBuyRecord.setPickNftCnt(pickNftCnt);
+ mallProductBuyRecord.setState(ProductEnum.PRODUCT_MATE_STATE_WAIT_PAY.getValue());
+ mallProductBuyRecord.setOrderTime(orderTime);
+ mallProductBuyRecordMapper.insert(mallProductBuyRecord);
+ //更新卖单
+ mallProductSell.setNftCntAva(mallProductSell.getNftCntAva().subtract(pickNftCnt));
+ mallProductSellMapper.updateById(mallProductSell);
+ //更新买单
+ mallProductBuy.setNftAva(mallProductBuy.getNftAva().subtract(pickNftCnt));
+ mallProductBuyMapper.updateById(mallProductBuy);
+ return new FebsResponse().success();
+ }
}
diff --git a/src/main/java/cc/mrbird/febs/mall/vo/AdminMallProductSellPickVo.java b/src/main/java/cc/mrbird/febs/mall/vo/AdminMallProductSellPickVo.java
new file mode 100644
index 0000000..d3cd9d4
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/vo/AdminMallProductSellPickVo.java
@@ -0,0 +1,13 @@
+package cc.mrbird.febs.mall.vo;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "AdminMallProductSellPickVo", description = "信息返回类")
+public class AdminMallProductSellPickVo {
+
+
+ private Long id;//编码
+ private String name;//编码
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/vo/ApiOrderBuyInfoVo.java b/src/main/java/cc/mrbird/febs/mall/vo/ApiOrderBuyInfoVo.java
new file mode 100644
index 0000000..75f3c43
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/vo/ApiOrderBuyInfoVo.java
@@ -0,0 +1,22 @@
+package cc.mrbird.febs.mall.vo;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+@Data
+@ApiModel(value = "ApiOrderBuyInfoVo", description = "信息返回类")
+public class ApiOrderBuyInfoVo {
+ private Long id;
+ private String orderNo;
+ private int state;//预约状态 0:失败 1:进行中 2:超时 3:已完成
+ private int mateState;//匹配状态0:失败 1:匹配中 2:待支付 3:已支付 4:对方已确认 5:已完成
+ private BigDecimal nftTotal;//nft预约额度
+ private BigDecimal nftAva;//nft分配额度
+ private Date orderTime;//匹配时间
+ private Date payTime;//支付时间
+ private List<ApiOrderBuyRecordInfoVo> apiOrderBuyRecordInfoVos;
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/vo/ApiOrderBuyRecordInfoVo.java b/src/main/java/cc/mrbird/febs/mall/vo/ApiOrderBuyRecordInfoVo.java
new file mode 100644
index 0000000..b32d899
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/vo/ApiOrderBuyRecordInfoVo.java
@@ -0,0 +1,29 @@
+package cc.mrbird.febs.mall.vo;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+@ApiModel(value = "ApiOrderBuyRecordInfoVo", description = "信息返回类")
+public class ApiOrderBuyRecordInfoVo {
+ private Long id;//
+ private String accountLogin;//
+ private BigDecimal pickNftCnt;//分配额度、支付金额
+ private Integer state;//匹配状态0:失败 1:匹配中 2:待支付 3:已支付 4:对方已确认 5:已完成
+ private Date orderTime;//匹配时间
+ private Date payTime;//支付时间
+ private String nftImg;//支付凭证
+ private Integer type;//支付类型 1:微信 2:支付宝 3:银行转账 4:USDT转账
+
+ private String wxQrcode;//微信收款码
+ private String aliQrcode;//支付宝收款码
+ private String bankName;//真实姓名
+ private String bankNo;//银行卡号
+ private String bank;//开户行
+ private String phone;//手机号
+ private String usdtTongdao;//USDT通道类型: TRC20 BEP20
+ private String usdtAddress;//USDT地址
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/vo/ApiOrderListVo.java b/src/main/java/cc/mrbird/febs/mall/vo/ApiOrderListVo.java
new file mode 100644
index 0000000..e68bd81
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/vo/ApiOrderListVo.java
@@ -0,0 +1,26 @@
+package cc.mrbird.febs.mall.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+@ApiModel(value = "ApiOrderListVo", description = "信息返回类")
+public class ApiOrderListVo {
+
+ @ApiModelProperty(value = "ID")
+ private Long id;
+ @ApiModelProperty(value = "状态 0:失败 1:进行中 2:超时 3:已完成")
+ private Integer state;
+ @ApiModelProperty(value = "订单编号")
+ private String orderNo;
+ @ApiModelProperty(value = "类型:1:提现(卖单), 2:预约(买单)")
+ private String type;
+ @ApiModelProperty(value = "数量")
+ private BigDecimal nftTotal;
+ @ApiModelProperty(value = "时间")
+ private Date createdTime;
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/vo/ApiOrderSellInfoVo.java b/src/main/java/cc/mrbird/febs/mall/vo/ApiOrderSellInfoVo.java
new file mode 100644
index 0000000..a76190d
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/vo/ApiOrderSellInfoVo.java
@@ -0,0 +1,22 @@
+package cc.mrbird.febs.mall.vo;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+@Data
+@ApiModel(value = "ApiOrderSellInfoVo", description = "信息返回类")
+public class ApiOrderSellInfoVo {
+ private Long id;
+ private String orderNo;
+ private BigDecimal nftTotal;//动态NFT总数
+ private BigDecimal nftCnt;//实际提现数量
+ private BigDecimal nftCntAva;//剩余数量
+ private BigDecimal nftFee;//NFT手续费
+ private BigDecimal fcmFee;//代币手续费
+ private Integer state;//预约状态 0:失败 1:进行中 2:超时 3:已完成
+ private List<ApiOrderSellRecordInfoVo> apiOrderSellRecordInfoVos;
+
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/vo/ApiOrderSellRecordInfoVo.java b/src/main/java/cc/mrbird/febs/mall/vo/ApiOrderSellRecordInfoVo.java
new file mode 100644
index 0000000..389d211
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/vo/ApiOrderSellRecordInfoVo.java
@@ -0,0 +1,29 @@
+package cc.mrbird.febs.mall.vo;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+@ApiModel(value = "ApiOrderSellRecordInfoVo", description = "信息返回类")
+public class ApiOrderSellRecordInfoVo {
+ private Long id;
+ private String accountLogin;//
+ private Date orderTime;//匹配时间
+ private Date payTime;//支付时间
+ private BigDecimal nftCnt;//支付数量
+ private String nftImg;//支付凭证
+ private Integer type;//支付类型 1:微信 2:支付宝 3:银行转账 4:USDT转账
+ private Integer state;//匹配状态0:失败 1:匹配中 2:待支付 3:已支付 4:对方已确认 5:已完成
+
+ private String wxQrcode;//微信收款码
+ private String aliQrcode;//支付宝收款码
+ private String bankName;//真实姓名
+ private String bankNo;//银行卡号
+ private String bank;//开户行
+ private String phone;//手机号
+ private String usdtTongdao;//USDT通道类型: TRC20 BEP20
+ private String usdtAddress;//USDT地址
+}
diff --git a/src/main/resources/mapper/modules/MallProductBuyMapper.xml b/src/main/resources/mapper/modules/MallProductBuyMapper.xml
index 25a8ecf..1b8f410 100644
--- a/src/main/resources/mapper/modules/MallProductBuyMapper.xml
+++ b/src/main/resources/mapper/modules/MallProductBuyMapper.xml
@@ -1,37 +1,33 @@
<?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="cc.mrbird.febs.mall.mapper.MallProductNftMapper">
+<mapper namespace="cc.mrbird.febs.mall.mapper.MallProductBuyMapper">
- <select id="getProductNFTList" resultType="cc.mrbird.febs.mall.vo.AdminMallProductNftVo">
- SELECT
- a.*
- FROM mall_product_nft a
+ <select id="selectMemberIdAndNFTIdAndStateAndMateState" resultType="cc.mrbird.febs.mall.entity.MallProductBuy">
+ select * from mall_product_buy
+ <where>
+ member_id = #{memberId}
+ and product_nft_id = #{productNFTId}
+ <if test="state != null">
+ and state = #{state}
+ </if>
+ <if test="mateState != null">
+ and mate_state = #{mateState}
+ </if>
+ </where>
+ </select>
+
+ <select id="selectListInPage" resultType="cc.mrbird.febs.mall.vo.ApiOrderListVo">
+ select a.id,a.order_no,a.CREATED_TIME,a.nft_total,a.state,2 as type
+ from mall_product_buy a
+ where a.state = 1
+ and a.member_id = #{record.memberId}
order by a.CREATED_TIME desc
</select>
- <select id="selectByState" resultType="cc.mrbird.febs.mall.vo.ApiMallProductNftVo">
- SELECT
- a.*
- FROM mall_product_nft a
- where a.state = #{state}
- </select>
-
- <select id="getBuyList" resultType="cc.mrbird.febs.mall.vo.AdminMallProductBuyVo">
- SELECT
- a.*,
- b.account_login
- FROM mall_product_buy a
- left join mall_member b on a.member_id = b.id
- order by a.CREATED_TIME desc
- </select>
-
- <select id="getSellList" resultType="cc.mrbird.febs.mall.vo.AdminMallProductSellVo">
- SELECT
- a.*,
- b.account_login
- FROM mall_product_sell a
- left join mall_member b on a.member_id = b.id
- order by a.CREATED_TIME desc
+ <select id="selectBuyById" resultType="cc.mrbird.febs.mall.vo.ApiOrderBuyInfoVo">
+ select a.*
+ from mall_product_buy a
+ where a.id = #{id}
</select>
</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/modules/MallProductBuyRecordMapper.xml b/src/main/resources/mapper/modules/MallProductBuyRecordMapper.xml
new file mode 100644
index 0000000..155ce35
--- /dev/null
+++ b/src/main/resources/mapper/modules/MallProductBuyRecordMapper.xml
@@ -0,0 +1,22 @@
+<?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="cc.mrbird.febs.mall.mapper.MallProductBuyRecordMapper">
+
+ <select id="selectByBuyId" resultType="cc.mrbird.febs.mall.vo.ApiOrderBuyRecordInfoVo">
+ select a.*,
+ b.account_login,
+ c.wx_qrcode,
+ c.ali_qrcode,
+ c.bank_name,
+ c.phone,
+ c.bank,
+ c.bank_no,
+ c.usdt_tongdao,
+ c.usdt_address
+ from mall_product_buy_record a
+ left join mall_member b on a.member_id = b.id
+ left join mall_member_payment c on a.member_id = c.member_id
+ where a.buy_id = #{productBuyId}
+ </select>
+
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/modules/MallProductNftMapper.xml b/src/main/resources/mapper/modules/MallProductNftMapper.xml
index 7a702a3..eb5ddcd 100644
--- a/src/main/resources/mapper/modules/MallProductNftMapper.xml
+++ b/src/main/resources/mapper/modules/MallProductNftMapper.xml
@@ -1,19 +1,61 @@
<?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="cc.mrbird.febs.mall.mapper.MallProductBuyMapper">
+<mapper namespace="cc.mrbird.febs.mall.mapper.MallProductNftMapper">
- <select id="selectMemberIdAndNFTIdAndStateAndMateState" resultType="cc.mrbird.febs.mall.entity.MallProductBuy">
- select * from mall_product_buy
+ <select id="getProductNFTList" resultType="cc.mrbird.febs.mall.vo.AdminMallProductNftVo">
+ SELECT
+ a.*
+ FROM mall_product_nft a
+ order by a.CREATED_TIME desc
+ </select>
+
+ <select id="selectByState" resultType="cc.mrbird.febs.mall.vo.ApiMallProductNftVo">
+ SELECT
+ a.*
+ FROM mall_product_nft a
+ where a.state = #{state}
+ </select>
+
+ <select id="getBuyList" resultType="cc.mrbird.febs.mall.vo.AdminMallProductBuyVo">
+ SELECT
+ a.*,
+ b.account_login
+ FROM mall_product_buy a
+ left join mall_member b on a.member_id = b.id
<where>
- member_id = #{memberId}
- and product_nft_id = #{productNFTId}
- <if test="state != null">
- and state = #{state}
- </if>
- <if test="mateState != null">
- and mate_state = #{mateState}
+ <if test="record != null" >
+ <if test="record.accountLogin!=null and record.accountLogin!=''">
+ and b.account_login like concat('%', #{record.accountLogin},'%')
+ </if>
</if>
</where>
+ order by a.CREATED_TIME desc
+ </select>
+
+ <select id="getSellList" resultType="cc.mrbird.febs.mall.vo.AdminMallProductSellVo">
+ SELECT
+ a.*,
+ b.account_login
+ FROM mall_product_sell a
+ left join mall_member b on a.member_id = b.id
+ <where>
+ <if test="record != null" >
+ <if test="record.accountLogin!=null and record.accountLogin!=''">
+ and b.account_login like concat('%', #{record.accountLogin},'%')
+ </if>
+ </if>
+ </where>
+ order by a.CREATED_TIME desc
+ </select>
+
+ <select id="selectProductSellByState" resultType="cc.mrbird.febs.mall.vo.AdminMallProductSellPickVo">
+ SELECT
+ a.id id,
+ CONCAT(b.account_login,'-总数:',a.nft_cnt,'-剩余:',a.nft_cnt_ava) name
+ FROM mall_product_sell a
+ left join mall_member b on a.member_id = b.id
+ where a.state = #{state}
+ and a.nft_cnt_ava > 0
</select>
</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/modules/MallProductSellMapper.xml b/src/main/resources/mapper/modules/MallProductSellMapper.xml
new file mode 100644
index 0000000..51ebf42
--- /dev/null
+++ b/src/main/resources/mapper/modules/MallProductSellMapper.xml
@@ -0,0 +1,19 @@
+<?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="cc.mrbird.febs.mall.mapper.MallProductSellMapper">
+
+ <select id="selectListInPage" resultType="cc.mrbird.febs.mall.vo.ApiOrderListVo">
+ select a.id,a.order_no,a.CREATED_TIME,a.nft_total,a.state,1 as type
+ from mall_product_sell a
+ where a.state = 1
+ and a.member_id = #{record.memberId}
+ order by a.CREATED_TIME desc
+ </select>
+
+ <select id="selectSellInfoById" resultType="cc.mrbird.febs.mall.vo.ApiOrderSellInfoVo">
+ select a.*
+ from mall_product_sell a
+ where a.id = #{id}
+ </select>
+
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/modules/MallProductSellRecordMapper.xml b/src/main/resources/mapper/modules/MallProductSellRecordMapper.xml
new file mode 100644
index 0000000..02cfb1f
--- /dev/null
+++ b/src/main/resources/mapper/modules/MallProductSellRecordMapper.xml
@@ -0,0 +1,22 @@
+<?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="cc.mrbird.febs.mall.mapper.MallProductSellRecordMapper">
+
+ <select id="selectBySellId" resultType="cc.mrbird.febs.mall.vo.ApiOrderSellRecordInfoVo">
+ select a.*,
+ b.account_login,
+ c.wx_qrcode,
+ c.ali_qrcode,
+ c.bank_name,
+ c.phone,
+ c.bank,
+ c.bank_no,
+ c.usdt_tongdao,
+ c.usdt_address
+ from mall_product_sell_record a
+ left join mall_member b on a.member_id = b.id
+ left join mall_member_payment c on a.member_id = c.member_id
+ where a.sell_id = #{productSellId}
+ </select>
+
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/templates/febs/views/modules/news/productBuyList.html b/src/main/resources/templates/febs/views/modules/news/productBuyList.html
index 8001b1f..b124c77 100644
--- a/src/main/resources/templates/febs/views/modules/news/productBuyList.html
+++ b/src/main/resources/templates/febs/views/modules/news/productBuyList.html
@@ -5,10 +5,21 @@
<div class="layui-card-body febs-table-full">
<form class="layui-form layui-table-form" lay-filter="user-table-form">
<div class="layui-row">
- <div class="layui-col-md2 layui-col-sm12 layui-col-xs12 table-action-area">
- <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-green-plain table-action" id="add">
- 新增
+
+ <div class="layui-col-md10">
+ <div class="layui-form-item">
+ <div class="layui-inline">
+ <label class="layui-form-label">登录账户:</label>
+ <div class="layui-input-inline">
+ <input type="text" placeholder="登录账户" name="accountLogin" autocomplete="off" class="layui-input">
+ </div>
+ </div>
</div>
+ </div>
+ <div class="layui-col-md2 layui-col-sm12 layui-col-xs12 table-action-area">
+<!-- <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-green-plain table-action" id="add">-->
+<!-- 新增-->
+<!-- </div>-->
<div class="layui-btn layui-btn-sm layui-btn-primary febs-button-blue-plain table-action" id="query">
<i class="layui-icon"></i>
</div>
@@ -93,11 +104,11 @@
table.on('tool(buyTable)', function (obj) {
var data = obj.data,
layEvent = obj.event;
- if (layEvent === 'productNFTUpdate') {
- febs.modal.open('编辑', 'modules/news/productNFTUpdate/' + data.id, {
+ if (layEvent === 'productSellPick') {
+ febs.modal.open('编辑', 'modules/news/productSellPick/' + data.id, {
btn: ['提交', '取消'],
yes: function (index, layero) {
- $('#nftInfo-update').find('#submit').trigger('click');
+ $('#product-sell-pick').find('#submit').trigger('click');
},
btn2: function () {
layer.closeAll();
@@ -151,17 +162,16 @@
cols: [[
{field: 'accountLogin', title: '登录账户', minWidth: 120,align:'center'},
{field: 'nftTotal', title: '预约额度', minWidth: 120,align:'center'},
- {field: 'nftAva', title: '已分配', minWidth: 120,align:'center'},
+ {field: 'nftAva', title: '可分配', minWidth: 120,align:'center'},
{field: 'orderTime', title: '匹配时间', minWidth: 120,align:'center'},
{templet: '#isBuyState', title: '预约状态', minWidth: 120,align:'center'},
{templet: '#isBuyMateState', title: '匹配状态', minWidth: 120,align:'center'},
{title: '操作',
templet: function (d) {
- if(d.state == 1){
- return ''
+ if(d.mateState == 1){
+ return '<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="productSellPick" shiro:hasPermission="user:update">手动匹配</button>'
}else{
- return '<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="productNFTUpdate" shiro:hasPermission="user:update">编辑</button>'
- +'<button class="layui-btn layui-btn-danger layui-btn-xs" lay-event="delNFT" shiro:hasPermission="user:update">删除</button>'
+ return ''
}
},minWidth: 300,align:'center'}
]]
@@ -171,6 +181,7 @@
// 获取查询参数
function getQueryParams() {
return {
+ accountLogin: $searchForm.find('input[name="accountLogin"]').val().trim(),
};
}
diff --git a/src/main/resources/templates/febs/views/modules/news/productSellList.html b/src/main/resources/templates/febs/views/modules/news/productSellList.html
index e3ad58d..efeedd2 100644
--- a/src/main/resources/templates/febs/views/modules/news/productSellList.html
+++ b/src/main/resources/templates/febs/views/modules/news/productSellList.html
@@ -1,14 +1,24 @@
-<div class="layui-fluid layui-anim febs-anim" id="febs-product-sell" lay-title="NFT提现记录">
+<div class="layui-fluid layui-anim febs-anim" id="febs-product-sell" lay-title="用户NFT提现">
<div class="layui-row febs-container">
<div class="layui-col-md12">
<div class="layui-card">
<div class="layui-card-body febs-table-full">
<form class="layui-form layui-table-form" lay-filter="user-table-form">
<div class="layui-row">
- <div class="layui-col-md2 layui-col-sm12 layui-col-xs12 table-action-area">
- <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-green-plain table-action" id="add">
- 新增
+ <div class="layui-col-md10">
+ <div class="layui-form-item">
+ <div class="layui-inline">
+ <label class="layui-form-label">登录账户:</label>
+ <div class="layui-input-inline">
+ <input type="text" placeholder="登录账户" name="accountLogin" autocomplete="off" class="layui-input">
+ </div>
+ </div>
</div>
+ </div>
+ <div class="layui-col-md2 layui-col-sm12 layui-col-xs12 table-action-area">
+<!-- <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-green-plain table-action" id="add">-->
+<!-- 新增-->
+<!-- </div>-->
<div class="layui-btn layui-btn-sm layui-btn-primary febs-button-blue-plain table-action" id="query">
<i class="layui-icon"></i>
</div>
@@ -156,6 +166,7 @@
// 获取查询参数
function getQueryParams() {
return {
+ accountLogin: $searchForm.find('input[name="accountLogin"]').val().trim(),
};
}
})
diff --git a/src/main/resources/templates/febs/views/modules/news/productSellPick.html b/src/main/resources/templates/febs/views/modules/news/productSellPick.html
new file mode 100644
index 0000000..80be54c
--- /dev/null
+++ b/src/main/resources/templates/febs/views/modules/news/productSellPick.html
@@ -0,0 +1,154 @@
+<style>
+ #product-sell-pick {
+ padding: 20px 25px 25px 0;
+ }
+
+ #product-sell-pick .layui-treeSelect .ztree li a, .ztree li span {
+ margin: 0 0 2px 3px !important;
+ }
+ #product-sell-pick #data-permission-tree-block {
+ border: 1px solid #eee;
+ border-radius: 2px;
+ padding: 3px 0;
+ }
+ #product-sell-pick .layui-treeSelect .ztree li span.button.switch {
+ top: 1px;
+ left: 3px;
+ }
+ #product-sell-pick img{
+ max-width:100px
+ }
+
+</style>
+<div class="layui-fluid" id="product-sell-pick">
+ <form class="layui-form" action="" lay-filter="product-sell-pick-form">
+ <div class="layui-form-item febs-hide">
+ <label class="layui-form-label febs-form-item-require">id:</label>
+ <div class="layui-input-block">
+ <input type="text" name="id">
+ </div>
+ </div>
+ <div class="layui-row layui-col-space10 layui-form-item">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">预约额度:</label>
+ <div class="layui-input-block">
+ <input type="text" name="nftTotal" lay-verify="required" placeholder="" autocomplete="off" class="layui-input" readonly>
+ </div>
+ </div>
+ </div>
+ <div class="layui-row layui-col-space10 layui-form-item">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">可分配:</label>
+ <div class="layui-input-block">
+ <input type="text" name="nftAva" lay-verify="required" placeholder="" autocomplete="off" class="layui-input" readonly>
+ </div>
+ </div>
+ </div>
+
+ <blockquote class="layui-elem-quote blue-border">匹配设置</blockquote>
+ <div class="layui-row layui-col-space10 layui-form-item">
+ <div class="layui-form-item sell-pick-list">
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">匹配提现:</label>
+ <div class="layui-input-block">
+ <div id="sell-pick-list"></div>
+ </div>
+ </div>
+ </div>
+ <div class="layui-col-lg6">
+ <label class="layui-form-label febs-form-item-require">本次金额:</label>
+ <div class="layui-input-block">
+ <input type="text" name="pickNftCnt" lay-verify="required" placeholder="" autocomplete="off" class="layui-input">
+ </div>
+ </div>
+ </div>
+ <div class="layui-form-item febs-hide">
+ <button class="layui-btn" lay-submit="" lay-filter="product-sell-pick-form-submit" id="submit"></button>
+ </div>
+ </form>
+</div>
+
+<script data-th-inline="javascript">
+ layui.use(['febs', 'form', 'formSelects', 'validate', 'treeSelect', 'eleTree','layedit', 'laydate', 'upload', 'xmSelect'], function () {
+ var $ = layui.$,
+ febs = layui.febs,
+ layer = layui.layer,
+ upload = layui.upload,
+ formSelects = layui.formSelects,
+ form = layui.form,
+ laydate = layui.laydate,
+ layedit = layui.layedit,
+ mallProductBuy = [[${mallProductBuy}]],
+ $view = $('#product-sell-pick'),
+ validate = layui.validate;
+
+ var sellPick = xmSelect.render({
+ el: '#sell-pick-list',
+ filterable: true,//设置搜索框
+ filterMethod: function(val, item, index, prop){
+ if(val == item.value){//把value相同的搜索出来
+ return true;
+ }
+ if(item.name.indexOf(val) != -1){//名称中包含的搜索出来
+ return true;
+ }
+ return false;//不知道的就不管了
+ },
+ language: 'zn',
+ prop : {
+ value : 'id',
+ children : 'child'
+ },
+ iconfont: {
+ parent: 'hidden',
+ },
+ radio: true,//单选
+ clickClose: true,
+ tree: {
+ show: true,
+ //非严格模式
+ strict: false,
+ },
+ data: []
+ })
+
+ febs.get(ctx + 'admin/news/findSellList', null, function(res) {
+ sellPick.update({
+ data : res.data,
+ autoRow: true,
+ });
+ })
+ initPickValue();
+ form.render();
+ laydate.render({
+ elem: '#febs-form-group-date'
+ });
+
+ formSelects.render();
+ form.on('submit(product-sell-pick-form-submit)', function (data) {
+ let sellPickList = sellPick.getValue();
+ if (sellPickList.length > 0) {
+ var sellPickId = null;
+ layui.each(sellPickList, function (key, item) {
+ sellPickId = item.id
+ });
+ data.field.productSellId = sellPickId;
+ }
+ febs.post(ctx + 'admin/news/pickSellRecord', data.field, function () {
+ layer.closeAll();
+ febs.alert.success('操作成功');
+ $('#febs-product-buy').find('#reset').click();
+ });
+ return false;
+ });
+
+
+ function initPickValue() {
+ form.val("product-sell-pick-form", {
+ "id": mallProductBuy.id,
+ "nftTotal": mallProductBuy.nftTotal,
+ "nftAva": mallProductBuy.nftAva,
+ });
+ }
+ });
+</script>
\ No newline at end of file
--
Gitblit v1.9.1