From 3db31b658f955d8bf1759459212787a99945054d Mon Sep 17 00:00:00 2001 From: Helius <wangdoubleone@gmail.com> Date: Wed, 17 Jun 2020 10:46:45 +0800 Subject: [PATCH] modify --- src/main/java/com/xcong/excoin/modules/member/mapper/MemberAuthenticationMapper.java | 11 src/main/resources/mapper/modules/MemberQuickBuySaleMapper.xml | 57 + src/main/java/com/xcong/excoin/modules/member/entity/MemberAccountMoneyChangeEntity.java | 52 + src/main/resources/mapper/modules/contract/ContractHoldOrderDao.xml | 20 src/main/resources/templates/febs/views/modules/member/chargeUsdt.html | 193 +++ src/main/java/com/xcong/excoin/modules/member/mapper/MemberWalletCoinMapper.java | 12 src/main/java/com/xcong/excoin/modules/member/entity/MemberCoinWithdrawEntity.java | 70 + src/main/java/com/xcong/excoin/modules/member/mapper/MemberCoinWithdrawMapper.java | 16 src/main/java/com/xcong/excoin/FebsShiroApplication.java | 1 src/main/java/com/xcong/excoin/modules/member/mapper/MemberAccountMoneyChangeMapper.java | 8 src/main/java/com/xcong/excoin/modules/member/vo/MemberCoinWithdrawVo.java | 59 + src/main/java/com/xcong/excoin/modules/member/entity/MemberAuthenticationEntity.java | 58 + src/main/java/com/xcong/excoin/modules/member/entity/MemberEntity.java | 9 src/main/java/com/xcong/excoin/modules/trademanage/service/ContractHoldOrderService.java | 15 src/main/java/com/xcong/excoin/modules/member/entity/MemberCoinAddressEntity.java | 56 + src/main/java/com/xcong/excoin/modules/member/controller/ViewController.java | 65 + src/main/java/com/xcong/excoin/modules/member/service/impl/MemberServiceImpl.java | 408 +++++++ src/main/java/com/xcong/excoin/modules/member/mapper/MemberCoinChargeMapper.java | 16 src/main/java/com/xcong/excoin/modules/trademanage/controller/ContractHoldOrderController.java | 38 src/main/resources/templates/febs/views/modules/member/extractUsdt.html | 197 +++ src/main/resources/templates/febs/views/modules/member/memberDetail.html | 130 ++ src/main/java/com/xcong/excoin/modules/member/entity/MemberWalletCoinEntity.java | 62 + src/main/java/com/xcong/excoin/modules/member/dto/MemberDetailConfirmDto.java | 13 src/main/java/com/xcong/excoin/modules/member/mapper/MemberMapper.java | 1 src/main/resources/templates/febs/views/modules/member/member.html | 119 - src/main/java/com/xcong/excoin/modules/member/vo/MemberQuickBuySaleVo.java | 64 + src/main/resources/mapper/modules/MemberCoinChargeMapper.xml | 20 src/main/resources/templates/febs/views/modules/member/applyCoin.html | 129 ++ src/main/java/com/xcong/excoin/modules/member/vo/MemberCoinChargeVo.java | 62 + src/main/resources/mapper/modules/MemberWalletCoinMapper.xml | 10 src/main/java/com/xcong/excoin/modules/member/controller/MemberController.java | 127 ++ src/main/resources/mapper/modules/MemberCoinWithdrawMapper.xml | 25 src/main/java/com/xcong/excoin/modules/member/entity/MemberQuickBuySaleEntity.java | 96 + src/main/java/com/xcong/excoin/modules/member/mapper/MemberQuickBuySaleMapper.java | 20 src/main/java/com/xcong/excoin/modules/member/vo/MemberQuickSaleVo.java | 73 + src/main/java/com/xcong/excoin/modules/trademanage/entity/ContractHoldOrderEntity.java | 150 ++ src/main/java/com/xcong/excoin/modules/trademanage/service/impl/ContractHoldOrderServiceImpl.java | 28 src/main/resources/templates/febs/views/modules/member/withdrawCoin.html | 192 +++ src/main/resources/templates/febs/views/modules/trademanage/contractHoldOrder.html | 105 ++ src/main/java/com/xcong/excoin/modules/member/entity/MemberCoinChargeEntity.java | 65 + src/main/java/com/xcong/excoin/modules/member/service/IMemberService.java | 38 src/main/resources/mapper/modules/MemberAuthenticationMapper.xml | 9 src/main/java/com/xcong/excoin/modules/trademanage/mapper/ContractHoldOrderEntityMapper.java | 22 src/main/java/com/xcong/excoin/modules/member/vo/MemberAuthenticationVo.java | 63 + src/main/java/com/xcong/excoin/modules/member/mapper/MemberCoinAddressMapper.java | 8 src/main/java/com/xcong/excoin/modules/trademanage/controller/ViewController.java | 24 src/main/resources/mapper/modules/MemberCoinAddressMapper.xml | 20 47 files changed, 2,928 insertions(+), 108 deletions(-) diff --git a/src/main/java/com/xcong/excoin/FebsShiroApplication.java b/src/main/java/com/xcong/excoin/FebsShiroApplication.java index 46bea12..1c7efb1 100644 --- a/src/main/java/com/xcong/excoin/FebsShiroApplication.java +++ b/src/main/java/com/xcong/excoin/FebsShiroApplication.java @@ -22,5 +22,4 @@ .web(WebApplicationType.SERVLET) .run(args); } - } diff --git a/src/main/java/com/xcong/excoin/modules/member/controller/MemberController.java b/src/main/java/com/xcong/excoin/modules/member/controller/MemberController.java index d0002ee..4707454 100644 --- a/src/main/java/com/xcong/excoin/modules/member/controller/MemberController.java +++ b/src/main/java/com/xcong/excoin/modules/member/controller/MemberController.java @@ -1,18 +1,30 @@ package com.xcong.excoin.modules.member.controller; +import com.xcong.excoin.common.annotation.ControllerEndpoint; import com.xcong.excoin.common.controller.BaseController; import com.xcong.excoin.common.entity.FebsResponse; import com.xcong.excoin.common.entity.QueryRequest; +import com.xcong.excoin.modules.member.dto.MemberDetailConfirmDto; +import com.xcong.excoin.modules.member.entity.MemberCoinChargeEntity; +import com.xcong.excoin.modules.member.entity.MemberCoinWithdrawEntity; import com.xcong.excoin.modules.member.entity.MemberEntity; +import com.xcong.excoin.modules.member.entity.MemberQuickBuySaleEntity; import com.xcong.excoin.modules.member.service.IMemberService; +import com.xcong.excoin.system.entity.User; + import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.Map; + +import javax.validation.Valid; +import javax.validation.constraints.NotNull; /** * @author wzy @@ -32,4 +44,119 @@ Map<String, Object> data = getDataTable(memberService.findMemberListInPage(member, request)); return new FebsResponse().success().data(data); } + + /** + * 实名认证---确认 + * @return + */ + @PostMapping("memberDetailConfirm") + @ControllerEndpoint(operation = "实名认证---确认", exceptionMessage = "认证失败") + public FebsResponse memberDetailConfirm(@Valid MemberDetailConfirmDto memberDetailConfirmDto) { + return memberService.memberDetailConfirm(memberDetailConfirmDto); + } + + /** + * 会员USDT充值---列表 + */ + @GetMapping("memberChargeUsdt") + public FebsResponse memberChargeUsdt(MemberQuickBuySaleEntity memberQuickBuySaleEntity, QueryRequest request) { + Map<String, Object> data = getDataTable(memberService.findmemberQuickBuySaleListInPage(memberQuickBuySaleEntity, request)); + return new FebsResponse().success().data(data); + } + + /** + * 会员USDT充值---确认 + * @return + */ + @GetMapping("memberChargeUsdtConfirm/{id}") + @ControllerEndpoint(operation = "会员USDT充值---确认", exceptionMessage = "划转失败") + public FebsResponse memberChargeUsdtConfirm(@NotNull(message = "{required}") @PathVariable Long id) { + return memberService.memberChargeUsdtConfirm(id); + } + + /** + * 会员USDT充值---取消 + * @return + */ + @GetMapping("memberChargeUsdtCancel/{id}") + @ControllerEndpoint(operation = "会员USDT充值---取消", exceptionMessage = "取消失败") + public FebsResponse memberChargeUsdtCancel(@NotNull(message = "{required}") @PathVariable Long id) { + return memberService.memberChargeUsdtCancel(id); + } + + /** + * 会员USDT提现---列表 + */ + @GetMapping("memberExtractUsdt") + public FebsResponse memberExtractUsdt(MemberQuickBuySaleEntity memberQuickBuySaleEntity, QueryRequest request) { + Map<String, Object> data = getDataTable(memberService.findmemberQuickSaleListInPage(memberQuickBuySaleEntity, request)); + return new FebsResponse().success().data(data); + } + + /** + * 会员USDT提现---确认 + * @return + */ + @GetMapping("memberExtractUsdtConfirm/{id}") + @ControllerEndpoint(operation = "会员USDT提现---确认", exceptionMessage = "划转失败") + public FebsResponse memberExtractUsdtConfirm(@NotNull(message = "{required}") @PathVariable Long id) { + return memberService.memberExtractUsdtConfirm(id); + } + + /** + * 会员USDT提现---取消 + * @return + */ + @GetMapping("memberExtractUsdtCancel/{id}") + @ControllerEndpoint(operation = "会员USDT提现---取消", exceptionMessage = "取消失败") + public FebsResponse memberExtractUsdtCancel(@NotNull(message = "{required}") @PathVariable Long id) { + return memberService.memberExtractUsdtCancel(id); + } + + /** + * 充币记录---列表 + */ + @GetMapping("memberApplyCoin") + public FebsResponse memberApplyCoin(MemberCoinChargeEntity memberCoinChargeEntity, QueryRequest request) { + Map<String, Object> data = getDataTable(memberService.findMemberApplyCoinListInPage(memberCoinChargeEntity, request)); + return new FebsResponse().success().data(data); + } + + /** + * 提币记录---列表 + */ + @GetMapping("memberWithdrawCoin") + public FebsResponse memberWithdrawCoin(MemberCoinWithdrawEntity memberCoinWithdrawEntity, QueryRequest request) { + String isInside = memberCoinWithdrawEntity.getIsInside(); + if(!"".equals(isInside) && isInside != null) { + if("1".equals(isInside)) { + memberCoinWithdrawEntity.setIsInside("Y"); + }else { + memberCoinWithdrawEntity.setIsInside("N"); + } + } + Map<String, Object> data = getDataTable(memberService.findmemberWithdrawCoinListInPage(memberCoinWithdrawEntity, request)); + return new FebsResponse().success().data(data); + } + + /** + * 提币记录---确认 + * @return + */ + @GetMapping("memberWithdrawCoinConfirm/{id}") + @ControllerEndpoint(operation = "提币记录---确认", exceptionMessage = "划转失败") + public FebsResponse memberWithdrawCoinConfirm(@NotNull(message = "{required}") @PathVariable Long id) { + return memberService.memberWithdrawCoinConfirm(id); + } + + /** + * 提币记录---取消 + * @return + */ + @GetMapping("memberWithdrawCoinCancel/{id}") + @ControllerEndpoint(operation = "提币记录---取消", exceptionMessage = "取消失败") + public FebsResponse memberWithdrawCoinCancel(@NotNull(message = "{required}") @PathVariable Long id) { + return memberService.memberWithdrawCoinCancel(id); + } + } diff --git a/src/main/java/com/xcong/excoin/modules/member/controller/ViewController.java b/src/main/java/com/xcong/excoin/modules/member/controller/ViewController.java index c7e9b55..692e346 100644 --- a/src/main/java/com/xcong/excoin/modules/member/controller/ViewController.java +++ b/src/main/java/com/xcong/excoin/modules/member/controller/ViewController.java @@ -1,10 +1,18 @@ package com.xcong.excoin.modules.member.controller; +import com.xcong.excoin.common.controller.BaseController; import com.xcong.excoin.common.entity.FebsConstant; import com.xcong.excoin.common.utils.FebsUtil; +import com.xcong.excoin.modules.member.service.IMemberService; +import com.xcong.excoin.modules.member.vo.MemberAuthenticationVo; + +import lombok.RequiredArgsConstructor; + import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; /** @@ -13,11 +21,64 @@ **/ @Controller("memberView") @RequestMapping(FebsConstant.VIEW_PREFIX + "modules/member") -public class ViewController { - +@RequiredArgsConstructor +public class ViewController extends BaseController{ + + private final IMemberService memberService; + @GetMapping("member") @RequiresPermissions("member:view") public String member() { return FebsUtil.view("modules/member/member"); } + + @GetMapping("memberDetail/{id}") + @RequiresPermissions("member:update") + public String memberDetail(@PathVariable long id, Model model) { + MemberAuthenticationVo data = memberService.selectMemberAuthenticationById(id); + model.addAttribute("member", data); + return FebsUtil.view("modules/member/memberDetail"); + } + + /** + * 会员充值USDT记录 + * @return + */ + @GetMapping("chargeUsdt") + @RequiresPermissions("chargeUsdt:view") + public String chargeUsdt() { + return FebsUtil.view("modules/member/chargeUsdt"); + } + + /** + * 会员USDT提现记录 + * @return + */ + @GetMapping("extractUsdt") + @RequiresPermissions("extractUsdt:view") + public String extractUsdt() { + return FebsUtil.view("modules/member/extractUsdt"); + } + + /** + * 充币记录 + * @return + */ + @GetMapping("applyCoin") + @RequiresPermissions("applyCoins:view") + public String applyCoin() { + return FebsUtil.view("modules/member/applyCoin"); + } + + /** + * 提币记录 + * @return + */ + @GetMapping("withdrawCoin") + @RequiresPermissions("withdrawCoins:view") + public String withdrawCoin() { + return FebsUtil.view("modules/member/withdrawCoin"); + } + + } diff --git a/src/main/java/com/xcong/excoin/modules/member/dto/MemberDetailConfirmDto.java b/src/main/java/com/xcong/excoin/modules/member/dto/MemberDetailConfirmDto.java new file mode 100644 index 0000000..a6b52b5 --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/member/dto/MemberDetailConfirmDto.java @@ -0,0 +1,13 @@ +package com.xcong.excoin.modules.member.dto; + +import javax.validation.constraints.NotNull; + +import lombok.Data; + +@Data +public class MemberDetailConfirmDto { + + @NotNull(message = "ID不能为空") + private Long id; + +} diff --git a/src/main/java/com/xcong/excoin/modules/member/entity/MemberAccountMoneyChangeEntity.java b/src/main/java/com/xcong/excoin/modules/member/entity/MemberAccountMoneyChangeEntity.java new file mode 100644 index 0000000..8fc79fd --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/member/entity/MemberAccountMoneyChangeEntity.java @@ -0,0 +1,52 @@ +package com.xcong.excoin.modules.member.entity; + +import java.math.BigDecimal; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.xcong.excoin.common.entity.BaseEntity; + +import lombok.Data; + +@Data +@TableName("member_account_money_change") +public class MemberAccountMoneyChangeEntity extends BaseEntity { +private static final long serialVersionUID = 1L; + + /** + * 类型【1:币币资产2:合约资产3:代理资产】 + */ + public static final Integer TYPE_WALLET_COIN = 1; + public static final Integer TYPE_WALLET_CONTRACT = 2; + public static final Integer TYPE_WALLET_AGENT = 3; + /** + * 状态【0:待审核 1:成功2:失败】 + */ + public static final Integer STATUS_WAIT_INTEGER = 0; + public static final Integer STATUS_SUCCESS_INTEGER = 1; + public static final Integer STATUS_FAIL_INTEGER = 2; + + private Long memberId; + + /** + * 币种 + */ + private String symbol; + + /** + * 金额 + */ + private BigDecimal amount; + /** + * 记录内容 + */ + private String content; + /** + * 类型【1:币币资产2:合约资产3:代理资产】 + */ + private int type; + /** + * 状态【0:待审核 1:成功2:失败】 + */ + private int status; + +} diff --git a/src/main/java/com/xcong/excoin/modules/member/entity/MemberAuthenticationEntity.java b/src/main/java/com/xcong/excoin/modules/member/entity/MemberAuthenticationEntity.java new file mode 100644 index 0000000..636ee54 --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/member/entity/MemberAuthenticationEntity.java @@ -0,0 +1,58 @@ +package com.xcong.excoin.modules.member.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.xcong.excoin.common.entity.BaseEntity; +import lombok.Data; + +@Data +@TableName("member_authentication") +public class MemberAuthenticationEntity extends BaseEntity{ + /** + * + */ + private static final long serialVersionUID = 1L; + /** + * 用户ID + */ + private Long memberId; + + /** + * 真实姓名 + */ + private String realName; + + /** + * 姓 + */ + private String firstName; + + /** + * 名 + */ + private String secondName; + + /** + * 国家 + */ + private String nation; + /** + * 身份证号 + */ + private String idcardNo; + + /** + * 身份证正面 + */ + private String idcardImageFront; + + /** + * 身份证背面 + */ + private String idcardImageBack; + + /** + * 手持身份证 + */ + private String idcardImageInHand; + +} diff --git a/src/main/java/com/xcong/excoin/modules/member/entity/MemberCoinAddressEntity.java b/src/main/java/com/xcong/excoin/modules/member/entity/MemberCoinAddressEntity.java new file mode 100644 index 0000000..fcd7b42 --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/member/entity/MemberCoinAddressEntity.java @@ -0,0 +1,56 @@ +package com.xcong.excoin.modules.member.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.xcong.excoin.common.entity.BaseEntity; + +import lombok.Data; + +/** + * 会员币地址 + * @author Administrator + * + */ +@Data +@TableName("member_coin_address") +public class MemberCoinAddressEntity extends BaseEntity { + /** + * + */ + private static final long serialVersionUID = 1L; + /** + * 会员ID + */ + private Long memberId; + /** + * 地址 + */ + private String address; + /** + * 私钥 + */ + private String privateKey; + /** + * 币种 + */ + private String symbol; + /** + * 是否是本平台地址1:是 0:否 + */ + private String isBiyict; + public static final String IS_BIYICT_YES = "1"; + public static final String IS_BIYICT_NO = "0"; + /** + * + */ + private String label; + /** + * + */ + private String tag; + /** + * 币种ID + */ + private Long symbolscoinId; + + +} diff --git a/src/main/java/com/xcong/excoin/modules/member/entity/MemberCoinChargeEntity.java b/src/main/java/com/xcong/excoin/modules/member/entity/MemberCoinChargeEntity.java new file mode 100644 index 0000000..8e72ecc --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/member/entity/MemberCoinChargeEntity.java @@ -0,0 +1,65 @@ +package com.xcong.excoin.modules.member.entity; + +import java.math.BigDecimal; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.xcong.excoin.common.entity.BaseEntity; + +import lombok.Data; + +/** + * 会员充币表 + * + * @author wzy + * @date 2020-05-12 + **/ +@Data +@TableName("member_coin_charge") +public class MemberCoinChargeEntity extends BaseEntity{ + /** + * + */ + private static final long serialVersionUID = 1L; + /** + * 会员ID + */ + private Long memberId; + /** + * 凭证 + */ + private Long certificate; + /** + * 充值金额 + */ + private BigDecimal amount; + /** + * 上次更新时钱包金额 + */ + private BigDecimal lastAmount; + /** + * 状态 + */ + private int status; + /** + * 币种 + */ + private String symbol; + /** + * 地址 + */ + private String address; + private String tag; + private String hash; + /** + * 订单编号 + */ + private String orderCode; + + /** + * 查询条件:第一查询条件 + */ + @TableField(exist = false) + private String account; + +} diff --git a/src/main/java/com/xcong/excoin/modules/member/entity/MemberCoinWithdrawEntity.java b/src/main/java/com/xcong/excoin/modules/member/entity/MemberCoinWithdrawEntity.java new file mode 100644 index 0000000..d45e2dd --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/member/entity/MemberCoinWithdrawEntity.java @@ -0,0 +1,70 @@ +package com.xcong.excoin.modules.member.entity; + +import java.math.BigDecimal; +import java.util.Date; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.xcong.excoin.common.entity.BaseEntity; + +import lombok.Data; + +/** + * 会员提币表 + * + * @author wzy + * @date 2020-05-12 + **/ +@Data +@TableName("member_coin_withdraw") +public class MemberCoinWithdrawEntity extends BaseEntity{ + /** + * + */ + private static final long serialVersionUID = 1L; + /** + * 会员ID + */ + private Long memberId; + /** + * 地址 + */ + private String address; + /** + * 提币数量 + */ + private BigDecimal amount; + /** + * 手续费 + */ + private BigDecimal feeAmount; + /** + * 币种 + */ + private String symbol; + /** + * 状态 + */ + private int status; + //等待审核 + public static final int IS_STATUS_ING = 1; + //同意 + public static final int IS_STATUS_Y = 2; + //拒绝 + public static final int IS_STATUS_N = 3; + private String label; + private String tag; + + /** + * 是否内部转账 Y-是N-不是 + */ + private String isInside; + + /** + * 查询条件:第一查询条件 + */ + @TableField(exist = false) + private String account; + + +} diff --git a/src/main/java/com/xcong/excoin/modules/member/entity/MemberEntity.java b/src/main/java/com/xcong/excoin/modules/member/entity/MemberEntity.java index c259a34..4afca0c 100644 --- a/src/main/java/com/xcong/excoin/modules/member/entity/MemberEntity.java +++ b/src/main/java/com/xcong/excoin/modules/member/entity/MemberEntity.java @@ -19,6 +19,11 @@ public class MemberEntity extends BaseEntity { /** + * + */ + private static final long serialVersionUID = 1L; + + /** * 账号状态 - 禁用 */ public static final Integer ACCOUNT_STATUS_DISABLED = 0; @@ -46,7 +51,7 @@ /** * 实名认证 审核通过 */ - public static final Integer CERTIFY_STATUS_Y = 1; + public static final Integer CERTIFY_STATUS_Y = 2; /** * 实名认证 审核不通过 */ @@ -54,7 +59,7 @@ /** * 实名认证 审核中 */ - public static final Integer CERTIFY_STATUS_ING = 2; + public static final Integer CERTIFY_STATUS_ING = 1; /** * 实名认证 未提交 */ diff --git a/src/main/java/com/xcong/excoin/modules/member/entity/MemberQuickBuySaleEntity.java b/src/main/java/com/xcong/excoin/modules/member/entity/MemberQuickBuySaleEntity.java new file mode 100644 index 0000000..282af9c --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/member/entity/MemberQuickBuySaleEntity.java @@ -0,0 +1,96 @@ +package com.xcong.excoin.modules.member.entity; + +import java.math.BigDecimal; +import java.util.Date; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.xcong.excoin.common.entity.BaseEntity; + +import lombok.Data; + +@Data +@TableName("member_quick_buy_sale") +public class MemberQuickBuySaleEntity extends BaseEntity{/** + * + */ + private static final long serialVersionUID = 1L; + + /** + * 订单状态 买入 1-新建 卖出 1-待付款 + */ + public static final Integer CHARGE_STATUS_CREATE = 1; + + /** + * 订单状态 2-已付款 + */ + public static final Integer CHARGE_STATUS_PAID = 2; + + /** + * 订单状态 3-已审核 + */ + public static final Integer CHARGE_STATUS_CHECKED = 3; + + /** + * 订单状态 4-撤单 + */ + public static final Integer CHARGE_STATUS_CANCEL_USER = 4; + + /** + * 订单状态 5-系统取消 + */ + public static final Integer CHARGE_STATUS_CANCEL_SYSTEM = 5; + + /** + * 用户Id + */ + private Long memberId; + /** + * 金额(人民币) + */ + private BigDecimal amountCny; + /** + * 金额(USDT) + */ + private BigDecimal amountUsdt; + /** + * 付款方式 1-支付宝2-微信3-银行卡 + */ + private Integer paymentType; + /** + * 收款账号 + */ + private String paymentAccount; + /** + * 收款人姓名 + */ + private String paymentName; + /** + * 支付码 + */ + private String paymentCode; + /** + * 单价 + */ + private BigDecimal unitPrice; + /** + * 订单状态 1-新建2-已付款3-已审核4-撤单5-系统取消 + */ + private int orderStatus; + /** + * 订单编号 + */ + private String orderNo; + /** + * 订单类型 B买入 S卖出 + */ + private String orderType; + + /** + * 查询条件:第一查询条件 + */ + @TableField(exist = false) + private String account; + +} diff --git a/src/main/java/com/xcong/excoin/modules/member/entity/MemberWalletCoinEntity.java b/src/main/java/com/xcong/excoin/modules/member/entity/MemberWalletCoinEntity.java new file mode 100644 index 0000000..9869bc3 --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/member/entity/MemberWalletCoinEntity.java @@ -0,0 +1,62 @@ +package com.xcong.excoin.modules.member.entity; + +import java.math.BigDecimal; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.xcong.excoin.common.entity.BaseEntity; + +import lombok.Data; + +@Data +@TableName("member_wallet_coin") +public class MemberWalletCoinEntity extends BaseEntity{ + + + private static final long serialVersionUID = 1L; + + /** + * 用户Id + */ + private Long memberId; + + /** + * 可用余额 + */ + private BigDecimal availableBalance; + + /** + * 总金额 + */ + private BigDecimal totalBalance; + + /** + * 冻结金额 + */ + private BigDecimal frozenBalance; + + /** + * 借入资产金额 + */ + private BigDecimal borrowedFund; + + /** + * 钱包标识 + */ + private String walletCode; + + /** + * 钱包地址 + */ + private String walletAddress; + + /** + * 上次余额 + */ + private BigDecimal earlyBalance; + + /** + * 区块编号 + */ + private int blockNumber; + +} diff --git a/src/main/java/com/xcong/excoin/modules/member/mapper/MemberAccountMoneyChangeMapper.java b/src/main/java/com/xcong/excoin/modules/member/mapper/MemberAccountMoneyChangeMapper.java new file mode 100644 index 0000000..0e429d8 --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/member/mapper/MemberAccountMoneyChangeMapper.java @@ -0,0 +1,8 @@ +package com.xcong.excoin.modules.member.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.xcong.excoin.modules.member.entity.MemberAccountMoneyChangeEntity; + +public interface MemberAccountMoneyChangeMapper extends BaseMapper<MemberAccountMoneyChangeEntity> { + +} diff --git a/src/main/java/com/xcong/excoin/modules/member/mapper/MemberAuthenticationMapper.java b/src/main/java/com/xcong/excoin/modules/member/mapper/MemberAuthenticationMapper.java new file mode 100644 index 0000000..b026898 --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/member/mapper/MemberAuthenticationMapper.java @@ -0,0 +1,11 @@ +package com.xcong.excoin.modules.member.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.xcong.excoin.modules.member.entity.MemberAuthenticationEntity; +import com.xcong.excoin.modules.member.vo.MemberAuthenticationVo; + +public interface MemberAuthenticationMapper extends BaseMapper<MemberAuthenticationEntity> { + + MemberAuthenticationVo findMemberAuthenticationByMemberId(long id); + +} diff --git a/src/main/java/com/xcong/excoin/modules/member/mapper/MemberCoinAddressMapper.java b/src/main/java/com/xcong/excoin/modules/member/mapper/MemberCoinAddressMapper.java new file mode 100644 index 0000000..b295ea4 --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/member/mapper/MemberCoinAddressMapper.java @@ -0,0 +1,8 @@ +package com.xcong.excoin.modules.member.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.xcong.excoin.modules.member.entity.MemberCoinAddressEntity; + +public interface MemberCoinAddressMapper extends BaseMapper<MemberCoinAddressEntity> { + +} diff --git a/src/main/java/com/xcong/excoin/modules/member/mapper/MemberCoinChargeMapper.java b/src/main/java/com/xcong/excoin/modules/member/mapper/MemberCoinChargeMapper.java new file mode 100644 index 0000000..5595658 --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/member/mapper/MemberCoinChargeMapper.java @@ -0,0 +1,16 @@ +package com.xcong.excoin.modules.member.mapper; + +import org.apache.ibatis.annotations.Param; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.xcong.excoin.modules.member.entity.MemberCoinChargeEntity; +import com.xcong.excoin.modules.member.vo.MemberCoinChargeVo; + +public interface MemberCoinChargeMapper extends BaseMapper<MemberCoinChargeEntity> { + + IPage<MemberCoinChargeVo> findMemberApplyCoinListInPage(Page<MemberCoinChargeEntity> page, + @Param("record")MemberCoinChargeEntity memberCoinChargeEntity); + +} diff --git a/src/main/java/com/xcong/excoin/modules/member/mapper/MemberCoinWithdrawMapper.java b/src/main/java/com/xcong/excoin/modules/member/mapper/MemberCoinWithdrawMapper.java new file mode 100644 index 0000000..f9e4afc --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/member/mapper/MemberCoinWithdrawMapper.java @@ -0,0 +1,16 @@ +package com.xcong.excoin.modules.member.mapper; + +import org.apache.ibatis.annotations.Param; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.xcong.excoin.modules.member.entity.MemberCoinWithdrawEntity; +import com.xcong.excoin.modules.member.vo.MemberCoinWithdrawVo; + +public interface MemberCoinWithdrawMapper extends BaseMapper<MemberCoinWithdrawEntity> { + + IPage<MemberCoinWithdrawVo> findmemberWithdrawCoinListInPage(Page<MemberCoinWithdrawEntity> page, + @Param("record")MemberCoinWithdrawEntity memberCoinWithdrawEntity); + +} diff --git a/src/main/java/com/xcong/excoin/modules/member/mapper/MemberMapper.java b/src/main/java/com/xcong/excoin/modules/member/mapper/MemberMapper.java index 788d97b..2780518 100644 --- a/src/main/java/com/xcong/excoin/modules/member/mapper/MemberMapper.java +++ b/src/main/java/com/xcong/excoin/modules/member/mapper/MemberMapper.java @@ -13,4 +13,5 @@ public interface MemberMapper extends BaseMapper<MemberEntity> { IPage<MemberEntity> selectMemberListInPage(Page<MemberEntity> page, @Param("record") MemberEntity memberEntity); + } diff --git a/src/main/java/com/xcong/excoin/modules/member/mapper/MemberQuickBuySaleMapper.java b/src/main/java/com/xcong/excoin/modules/member/mapper/MemberQuickBuySaleMapper.java new file mode 100644 index 0000000..7e13f2b --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/member/mapper/MemberQuickBuySaleMapper.java @@ -0,0 +1,20 @@ +package com.xcong.excoin.modules.member.mapper; + +import org.apache.ibatis.annotations.Param; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.xcong.excoin.modules.member.entity.MemberQuickBuySaleEntity; +import com.xcong.excoin.modules.member.vo.MemberQuickBuySaleVo; +import com.xcong.excoin.modules.member.vo.MemberQuickSaleVo; + +public interface MemberQuickBuySaleMapper extends BaseMapper<MemberQuickBuySaleEntity> { + + IPage<MemberQuickBuySaleVo> findmemberQuickBuySaleListInPage(Page<MemberQuickBuySaleEntity> page, + @Param("record")MemberQuickBuySaleEntity memberQuickBuySaleEntity); + + IPage<MemberQuickSaleVo> findmemberQuickSaleListInPage(Page<MemberQuickBuySaleEntity> page, + @Param("record")MemberQuickBuySaleEntity memberQuickBuySaleEntity); + +} diff --git a/src/main/java/com/xcong/excoin/modules/member/mapper/MemberWalletCoinMapper.java b/src/main/java/com/xcong/excoin/modules/member/mapper/MemberWalletCoinMapper.java new file mode 100644 index 0000000..1c61502 --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/member/mapper/MemberWalletCoinMapper.java @@ -0,0 +1,12 @@ +package com.xcong.excoin.modules.member.mapper; + +import org.apache.ibatis.annotations.Param; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.xcong.excoin.modules.member.entity.MemberWalletCoinEntity; + +public interface MemberWalletCoinMapper extends BaseMapper<MemberWalletCoinEntity> { + + MemberWalletCoinEntity findWalletCoinByMemberIdAndWalletCode(@Param("memberId")Long memberId, @Param("walletCode")String walletCode); + +} diff --git a/src/main/java/com/xcong/excoin/modules/member/service/IMemberService.java b/src/main/java/com/xcong/excoin/modules/member/service/IMemberService.java index 4b0a602..f4a9c95 100644 --- a/src/main/java/com/xcong/excoin/modules/member/service/IMemberService.java +++ b/src/main/java/com/xcong/excoin/modules/member/service/IMemberService.java @@ -1,9 +1,22 @@ package com.xcong.excoin.modules.member.service; +import javax.validation.Valid; +import javax.validation.constraints.NotNull; + import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; +import com.xcong.excoin.common.entity.FebsResponse; import com.xcong.excoin.common.entity.QueryRequest; +import com.xcong.excoin.modules.member.dto.MemberDetailConfirmDto; +import com.xcong.excoin.modules.member.entity.MemberCoinChargeEntity; +import com.xcong.excoin.modules.member.entity.MemberCoinWithdrawEntity; import com.xcong.excoin.modules.member.entity.MemberEntity; +import com.xcong.excoin.modules.member.entity.MemberQuickBuySaleEntity; +import com.xcong.excoin.modules.member.vo.MemberAuthenticationVo; +import com.xcong.excoin.modules.member.vo.MemberCoinChargeVo; +import com.xcong.excoin.modules.member.vo.MemberCoinWithdrawVo; +import com.xcong.excoin.modules.member.vo.MemberQuickBuySaleVo; +import com.xcong.excoin.modules.member.vo.MemberQuickSaleVo; /** * @author helius @@ -11,4 +24,29 @@ public interface IMemberService extends IService<MemberEntity> { IPage<MemberEntity> findMemberListInPage(MemberEntity memberEntity, QueryRequest request); + + IPage<MemberQuickBuySaleVo> findmemberQuickBuySaleListInPage(MemberQuickBuySaleEntity memberQuickBuySaleEntity, QueryRequest request); + + FebsResponse memberChargeUsdtConfirm(@NotNull(message = "{required}") Long id); + + FebsResponse memberChargeUsdtCancel(@NotNull(message = "{required}") Long id); + + IPage<MemberQuickSaleVo> findmemberQuickSaleListInPage(MemberQuickBuySaleEntity memberQuickBuySaleEntity, QueryRequest request); + + FebsResponse memberExtractUsdtCancel(@NotNull(message = "{required}") Long id); + + FebsResponse memberExtractUsdtConfirm(@NotNull(message = "{required}") Long id); + + IPage<MemberCoinChargeVo> findMemberApplyCoinListInPage(MemberCoinChargeEntity memberCoinChargeEntity, QueryRequest request); + + IPage<MemberCoinWithdrawVo> findmemberWithdrawCoinListInPage(MemberCoinWithdrawEntity memberCoinWithdrawEntity, QueryRequest request); + + FebsResponse memberWithdrawCoinConfirm(@NotNull(message = "{required}") Long id); + + FebsResponse memberWithdrawCoinCancel(@NotNull(message = "{required}") Long id); + + MemberAuthenticationVo selectMemberAuthenticationById(@NotNull(message = "{required}") long id); + + FebsResponse memberDetailConfirm(@Valid MemberDetailConfirmDto memberDetailConfirmDto); + } diff --git a/src/main/java/com/xcong/excoin/modules/member/service/impl/MemberServiceImpl.java b/src/main/java/com/xcong/excoin/modules/member/service/impl/MemberServiceImpl.java index 332c400..867a793 100644 --- a/src/main/java/com/xcong/excoin/modules/member/service/impl/MemberServiceImpl.java +++ b/src/main/java/com/xcong/excoin/modules/member/service/impl/MemberServiceImpl.java @@ -1,27 +1,431 @@ package com.xcong.excoin.modules.member.service.impl; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.xcong.excoin.common.entity.FebsResponse; import com.xcong.excoin.common.entity.QueryRequest; +import com.xcong.excoin.modules.member.dto.MemberDetailConfirmDto; +import com.xcong.excoin.modules.member.entity.MemberAccountMoneyChangeEntity; +import com.xcong.excoin.modules.member.entity.MemberCoinAddressEntity; +import com.xcong.excoin.modules.member.entity.MemberCoinChargeEntity; +import com.xcong.excoin.modules.member.entity.MemberCoinWithdrawEntity; import com.xcong.excoin.modules.member.entity.MemberEntity; +import com.xcong.excoin.modules.member.entity.MemberQuickBuySaleEntity; +import com.xcong.excoin.modules.member.entity.MemberWalletCoinEntity; +import com.xcong.excoin.modules.member.mapper.MemberAccountMoneyChangeMapper; +import com.xcong.excoin.modules.member.mapper.MemberAuthenticationMapper; +import com.xcong.excoin.modules.member.mapper.MemberCoinAddressMapper; +import com.xcong.excoin.modules.member.mapper.MemberCoinChargeMapper; +import com.xcong.excoin.modules.member.mapper.MemberCoinWithdrawMapper; import com.xcong.excoin.modules.member.mapper.MemberMapper; +import com.xcong.excoin.modules.member.mapper.MemberQuickBuySaleMapper; +import com.xcong.excoin.modules.member.mapper.MemberWalletCoinMapper; import com.xcong.excoin.modules.member.service.IMemberService; -import org.springframework.stereotype.Service; +import com.xcong.excoin.modules.member.vo.MemberAuthenticationVo; +import com.xcong.excoin.modules.member.vo.MemberCoinChargeVo; +import com.xcong.excoin.modules.member.vo.MemberCoinWithdrawVo; +import com.xcong.excoin.modules.member.vo.MemberQuickBuySaleVo; +import com.xcong.excoin.modules.member.vo.MemberQuickSaleVo; +import lombok.RequiredArgsConstructor; +import java.math.BigDecimal; +import java.util.Date; +import java.util.HashMap; +import java.util.List; import java.util.Map; + +import javax.validation.Valid; +import javax.validation.constraints.NotNull; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; /** * @author wzy * @date 2020-06-10 **/ @Service +@RequiredArgsConstructor public class MemberServiceImpl extends ServiceImpl<MemberMapper, MemberEntity> implements IMemberService { - + + private final MemberMapper memberMapper; + + private final MemberQuickBuySaleMapper memberQuickBuySaleMapper; + + private final MemberWalletCoinMapper memberWalletCoinMapper; + + private final MemberAccountMoneyChangeMapper memberAccountMoneyChangeMapper; + + private final MemberCoinChargeMapper memberCoinChargeMapper; + + private final MemberCoinWithdrawMapper memberCoinWithdrawMapper; + + private final MemberCoinAddressMapper memberCoinAddressMapper; + + private final MemberAuthenticationMapper memberAuthenticationMapper; + @Override public IPage<MemberEntity> findMemberListInPage(MemberEntity memberEntity, QueryRequest request) { Page<MemberEntity> page = new Page<>(request.getPageNum(), request.getPageSize()); return this.baseMapper.selectMemberListInPage(page, memberEntity); } + + @Override + public IPage<MemberQuickBuySaleVo> findmemberQuickBuySaleListInPage( + MemberQuickBuySaleEntity memberQuickBuySaleEntity, QueryRequest request) { + Page<MemberQuickBuySaleEntity> page = new Page<>(request.getPageNum(), request.getPageSize()); + IPage<MemberQuickBuySaleVo> findmemberQuickBuySaleListInPage = memberQuickBuySaleMapper.findmemberQuickBuySaleListInPage(page, memberQuickBuySaleEntity); + return findmemberQuickBuySaleListInPage; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public FebsResponse memberChargeUsdtConfirm(Long id) { + + MemberQuickBuySaleEntity memberQuickBuySaleEntity = memberQuickBuySaleMapper.selectById(id); + + if(!MemberQuickBuySaleEntity.CHARGE_STATUS_PAID.equals(memberQuickBuySaleEntity.getOrderStatus())) { + return new FebsResponse().message("只允许已付款状态操作"); + } + + Long memberId = memberQuickBuySaleEntity.getMemberId(); + BigDecimal amountUsdt = memberQuickBuySaleEntity.getAmountUsdt(); + String walletCode = "USDT"; + + MemberEntity selectById = this.baseMapper.selectById(memberId); + if(ObjectUtils.isEmpty(selectById)) { + return new FebsResponse().message("用户已不存在"); + } + //获取币币钱包 + MemberWalletCoinEntity memberWalletCoinEntity = memberWalletCoinMapper.findWalletCoinByMemberIdAndWalletCode(memberId,walletCode); + BigDecimal availableBalance = memberWalletCoinEntity.getAvailableBalance(); + BigDecimal totalBalance = memberWalletCoinEntity.getTotalBalance(); + memberWalletCoinEntity.setAvailableBalance(availableBalance.add(amountUsdt)); + memberWalletCoinEntity.setTotalBalance(totalBalance.add(amountUsdt)); + // 更新 + memberWalletCoinMapper.updateById(memberWalletCoinEntity); + // 更新状态 + memberQuickBuySaleEntity.setOrderStatus(MemberQuickBuySaleEntity.CHARGE_STATUS_CHECKED); + memberQuickBuySaleMapper.updateById(memberQuickBuySaleEntity); + + //添加币币资金划转历史记录 + MemberAccountMoneyChangeEntity memberAccountMoneyChangeEntity = new MemberAccountMoneyChangeEntity(); + memberAccountMoneyChangeEntity.setContent("OTC转入"); + memberAccountMoneyChangeEntity.setMemberId(memberId); + memberAccountMoneyChangeEntity.setAmount(amountUsdt); + memberAccountMoneyChangeEntity.setStatus(MemberAccountMoneyChangeEntity.STATUS_SUCCESS_INTEGER); + memberAccountMoneyChangeEntity.setSymbol("USDT"); + memberAccountMoneyChangeEntity.setType(MemberAccountMoneyChangeEntity.TYPE_WALLET_COIN); + memberAccountMoneyChangeEntity.setCreateBy(selectById.getCreateBy()); + memberAccountMoneyChangeEntity.setCreateTime(new Date()); + memberAccountMoneyChangeEntity.setUpdateBy(selectById.getCreateBy()); + memberAccountMoneyChangeEntity.setUpdateTime(new Date()); + + memberAccountMoneyChangeMapper.insert(memberAccountMoneyChangeEntity); + /** + * todo + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm"); + String chargeTime = format.format(memberQuickBuySaleEntity.getChargeTime()); // 将当前时间袼式化为指定的格式 + String usdt = memberQuickBuySaleEntity.getAmountUsdt()+"USDT"; + //发送短信提醒 + String smsContent = "【Excoin】尊敬的用户您好!您于"+chargeTime+"充值"+usdt+"已成功到账,请您及时查收!订单号为:"+memberChargeUsdt.getOrderCode()+"。"; + SmsUtils.hxSmsSend(member.getPhone(), smsContent); + + */ + return new FebsResponse().success(); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public FebsResponse memberChargeUsdtCancel(@NotNull(message = "{required}") Long id) { + + MemberQuickBuySaleEntity memberQuickBuySaleEntity = memberQuickBuySaleMapper.selectById(id); + + if(MemberQuickBuySaleEntity.CHARGE_STATUS_CHECKED.equals(memberQuickBuySaleEntity.getOrderStatus()) + || MemberQuickBuySaleEntity.CHARGE_STATUS_CANCEL_USER.equals(memberQuickBuySaleEntity.getOrderStatus()) + || MemberQuickBuySaleEntity.CHARGE_STATUS_CANCEL_SYSTEM.equals(memberQuickBuySaleEntity.getOrderStatus())) { + return new FebsResponse().message("不允许系统撤单操作"); + } + + memberQuickBuySaleEntity.setOrderStatus(MemberQuickBuySaleEntity.CHARGE_STATUS_CANCEL_SYSTEM); + memberQuickBuySaleMapper.updateById(memberQuickBuySaleEntity); + return new FebsResponse().success(); + + } + + @Override + public IPage<MemberQuickSaleVo> findmemberQuickSaleListInPage(MemberQuickBuySaleEntity memberQuickBuySaleEntity, + QueryRequest request) { + Page<MemberQuickBuySaleEntity> page = new Page<>(request.getPageNum(), request.getPageSize()); + IPage<MemberQuickSaleVo> findmemberQuickBuySaleListInPage = memberQuickBuySaleMapper.findmemberQuickSaleListInPage(page, memberQuickBuySaleEntity); + return findmemberQuickBuySaleListInPage; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public FebsResponse memberExtractUsdtCancel(@NotNull(message = "{required}") Long id) { + MemberQuickBuySaleEntity memberQuickBuySaleEntity = memberQuickBuySaleMapper.selectById(id); + + if(!MemberQuickBuySaleEntity.CHARGE_STATUS_CREATE.equals(memberQuickBuySaleEntity.getOrderStatus())) { + return new FebsResponse().message("只允许待付款状态操作"); + } + + Long memberId = memberQuickBuySaleEntity.getMemberId(); + BigDecimal amountUsdt = memberQuickBuySaleEntity.getAmountUsdt(); + String walletCode = "USDT"; + + MemberEntity selectById = this.baseMapper.selectById(memberId); + if(ObjectUtils.isEmpty(selectById)) { + return new FebsResponse().message("用户已不存在"); + } + //获取币币钱包 + MemberWalletCoinEntity memberWalletCoinEntity = memberWalletCoinMapper.findWalletCoinByMemberIdAndWalletCode(memberId,walletCode); + BigDecimal frozenBalance = memberWalletCoinEntity.getFrozenBalance(); + BigDecimal availableBalance = memberWalletCoinEntity.getAvailableBalance(); + BigDecimal totalBalance = memberWalletCoinEntity.getTotalBalance(); + memberWalletCoinEntity.setFrozenBalance(frozenBalance.subtract(amountUsdt)); + memberWalletCoinEntity.setAvailableBalance(availableBalance.add(amountUsdt)); + memberWalletCoinEntity.setTotalBalance(totalBalance.add(amountUsdt)); + // 更新 + memberWalletCoinMapper.updateById(memberWalletCoinEntity); + // 更新状态 + memberQuickBuySaleEntity.setOrderStatus(MemberQuickBuySaleEntity.CHARGE_STATUS_CANCEL_SYSTEM); + memberQuickBuySaleMapper.updateById(memberQuickBuySaleEntity); + + /** + * todo + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm"); + String chargeTime = format.format(memberQuickBuySaleEntity.getChargeTime()); // 将当前时间袼式化为指定的格式 + String usdt = memberQuickBuySaleEntity.getAmountUsdt()+"USDT"; + //发送短信提醒 + String smsContent = "【Excoin】尊敬的用户您好!您于"+chargeTime+"充值"+usdt+"已成功到账,请您及时查收!订单号为:"+memberChargeUsdt.getOrderCode()+"。"; + SmsUtils.hxSmsSend(member.getPhone(), smsContent); + + */ + return new FebsResponse().success(); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public FebsResponse memberExtractUsdtConfirm(@NotNull(message = "{required}") Long id) { + + MemberQuickBuySaleEntity memberQuickBuySaleEntity = memberQuickBuySaleMapper.selectById(id); + + if(!MemberQuickBuySaleEntity.CHARGE_STATUS_CREATE.equals(memberQuickBuySaleEntity.getOrderStatus())) { + return new FebsResponse().message("只允许待付款状态操作"); + } + + Long memberId = memberQuickBuySaleEntity.getMemberId(); + BigDecimal amountUsdt = memberQuickBuySaleEntity.getAmountUsdt(); + String walletCode = "USDT"; + + MemberEntity selectById = this.baseMapper.selectById(memberId); + if(ObjectUtils.isEmpty(selectById)) { + return new FebsResponse().message("用户已不存在"); + } + + //获取币币钱包 + MemberWalletCoinEntity memberWalletCoinEntity = memberWalletCoinMapper.findWalletCoinByMemberIdAndWalletCode(memberId,walletCode); + BigDecimal frozenBalance = memberWalletCoinEntity.getFrozenBalance(); + memberWalletCoinEntity.setFrozenBalance(frozenBalance.subtract(amountUsdt)); + memberWalletCoinMapper.updateById(memberWalletCoinEntity); + + memberQuickBuySaleEntity.setOrderStatus(MemberQuickBuySaleEntity.CHARGE_STATUS_PAID); + memberQuickBuySaleMapper.updateById(memberQuickBuySaleEntity); + + //添加币币资金划转历史记录 + MemberAccountMoneyChangeEntity memberAccountMoneyChangeEntity = new MemberAccountMoneyChangeEntity(); + memberAccountMoneyChangeEntity.setContent("提现"); + memberAccountMoneyChangeEntity.setMemberId(memberId); + memberAccountMoneyChangeEntity.setAmount(amountUsdt); + memberAccountMoneyChangeEntity.setStatus(MemberAccountMoneyChangeEntity.STATUS_SUCCESS_INTEGER); + memberAccountMoneyChangeEntity.setSymbol(walletCode); + memberAccountMoneyChangeEntity.setType(MemberAccountMoneyChangeEntity.TYPE_WALLET_COIN); + memberAccountMoneyChangeEntity.setCreateBy(selectById.getCreateBy()); + memberAccountMoneyChangeEntity.setCreateTime(new Date()); + memberAccountMoneyChangeEntity.setUpdateBy(selectById.getCreateBy()); + memberAccountMoneyChangeEntity.setUpdateTime(new Date()); + memberAccountMoneyChangeMapper.insert(memberAccountMoneyChangeEntity); + + /** + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm"); + String chargeTime = format.format(memberQuickBuySaleEntity.getUpdateTime()); // 将当前时间袼式化为指定的格式 + String usdt = amountUsdt+"USDT"; + //发送短信提醒 + String smsContent = "【Excoin】尊敬的用户您好!您于"+chargeTime+"提现"+usdt+"已成功到账,请您及时查收!订单号为:"+memberQuickBuySaleEntity.getOrderCode()+"。"; + SmsUtils.hxSmsSend(selectById.getPhone(), smsContent); + * + */ + + return new FebsResponse().success(); + } + + @Override + public IPage<MemberCoinChargeVo> findMemberApplyCoinListInPage(MemberCoinChargeEntity memberCoinChargeEntity, + QueryRequest request) { + Page<MemberCoinChargeEntity> page = new Page<>(request.getPageNum(), request.getPageSize()); + IPage<MemberCoinChargeVo> findmemberQuickBuySaleListInPage = memberCoinChargeMapper.findMemberApplyCoinListInPage(page, memberCoinChargeEntity); + return findmemberQuickBuySaleListInPage; + } + + @Override + public IPage<MemberCoinWithdrawVo> findmemberWithdrawCoinListInPage( + MemberCoinWithdrawEntity memberCoinWithdrawEntity, QueryRequest request) { + Page<MemberCoinWithdrawEntity> page = new Page<>(request.getPageNum(), request.getPageSize()); + IPage<MemberCoinWithdrawVo> findmemberQuickBuySaleListInPage = memberCoinWithdrawMapper.findmemberWithdrawCoinListInPage(page, memberCoinWithdrawEntity); + return findmemberQuickBuySaleListInPage; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public FebsResponse memberWithdrawCoinConfirm(@NotNull(message = "{required}") Long id) { + + MemberCoinWithdrawEntity selectById = memberCoinWithdrawMapper.selectById(id); + Long memberId = selectById.getMemberId(); + String symbol = selectById.getSymbol(); + String address = selectById.getAddress(); + int status = selectById.getStatus(); + if(status != 1) { + return new FebsResponse().fail().message("只有等待审核的状态才能确认!"); + } + + // 查询币币钱包 + MemberWalletCoinEntity walletCoin = memberWalletCoinMapper.findWalletCoinByMemberIdAndWalletCode(memberId, symbol); + + BigDecimal total = walletCoin.getTotalBalance().subtract(selectById.getAmount()).subtract(selectById.getFeeAmount()); + walletCoin.setTotalBalance(total); + BigDecimal frozen = walletCoin.getFrozenBalance().subtract(selectById.getAmount()).subtract(selectById.getFeeAmount()); + walletCoin.setFrozenBalance(frozen); + + memberWalletCoinMapper.updateById(walletCoin); + + if ("Y".equals(selectById.getIsInside())) { + Map<String, Object> columnMap = new HashMap<>(); + columnMap.put("symbol", symbol); + columnMap.put("address", address); + // 如果是内部转账 则需要将币加到内部地址 + List<MemberCoinAddressEntity> selectByMap = memberCoinAddressMapper.selectByMap(columnMap); + if(selectByMap == null || selectByMap.isEmpty()) { + return new FebsResponse().fail().message("地址有误,请拒绝!"); + } + Long aimMemberId = selectByMap.get(0).getMemberId(); + MemberWalletCoinEntity aimWalletCoin = memberWalletCoinMapper.findWalletCoinByMemberIdAndWalletCode(aimMemberId, symbol); + + BigDecimal addTotal = aimWalletCoin.getTotalBalance().add(selectById.getAmount()); + BigDecimal addAvailable = aimWalletCoin.getAvailableBalance().add(selectById.getAmount()); + aimWalletCoin.setTotalBalance(addTotal); + aimWalletCoin.setAvailableBalance(addAvailable); + + memberWalletCoinMapper.updateById(aimWalletCoin); + + MemberAccountMoneyChangeEntity memberAccountMoneyChangeEntity = new MemberAccountMoneyChangeEntity(); + memberAccountMoneyChangeEntity.setContent("收款"); + memberAccountMoneyChangeEntity.setMemberId(aimMemberId); + memberAccountMoneyChangeEntity.setAmount(selectById.getAmount()); + memberAccountMoneyChangeEntity.setStatus(MemberAccountMoneyChangeEntity.STATUS_SUCCESS_INTEGER); + memberAccountMoneyChangeEntity.setSymbol(selectById.getSymbol()); + memberAccountMoneyChangeEntity.setType(MemberAccountMoneyChangeEntity.TYPE_WALLET_COIN); + memberAccountMoneyChangeEntity.setCreateBy(selectById.getCreateBy()); + memberAccountMoneyChangeEntity.setCreateTime(new Date()); + memberAccountMoneyChangeEntity.setUpdateBy(selectById.getCreateBy()); + memberAccountMoneyChangeEntity.setUpdateTime(new Date()); + memberAccountMoneyChangeMapper.insert(memberAccountMoneyChangeEntity); + } + + MemberAccountMoneyChangeEntity memberAccountMoneyChangeEntity = new MemberAccountMoneyChangeEntity(); + memberAccountMoneyChangeEntity.setContent("提币"); + memberAccountMoneyChangeEntity.setMemberId(memberId); + memberAccountMoneyChangeEntity.setAmount(selectById.getAmount()); + memberAccountMoneyChangeEntity.setStatus(MemberAccountMoneyChangeEntity.STATUS_SUCCESS_INTEGER); + memberAccountMoneyChangeEntity.setSymbol(selectById.getSymbol()); + memberAccountMoneyChangeEntity.setType(MemberAccountMoneyChangeEntity.TYPE_WALLET_COIN); + memberAccountMoneyChangeEntity.setCreateBy(selectById.getCreateBy()); + memberAccountMoneyChangeEntity.setCreateTime(new Date()); + memberAccountMoneyChangeEntity.setUpdateBy(selectById.getCreateBy()); + memberAccountMoneyChangeEntity.setUpdateTime(new Date()); + memberAccountMoneyChangeMapper.insert(memberAccountMoneyChangeEntity); + + selectById.setStatus(MemberCoinWithdrawEntity.IS_STATUS_Y); + memberCoinWithdrawMapper.updateById(selectById); + /** + //短信提醒 + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm"); + String chargeTime = format.format(new Date()); // 将当前时间袼式化为指定的格式 + String usdt = selectById.getAmount()+"USDT"; + * 发送短信提醒 todo + String smsContent = "【Excoin】尊敬的用户您好!您于"+chargeTime+"提现"+usdt+"已成功到账,请您及时查收!"; + SmsUtils.hxSmsSend(member.getPhone(), smsContent); + */ + return new FebsResponse().success(); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public FebsResponse memberWithdrawCoinCancel(@NotNull(message = "{required}") Long id) { + + MemberCoinWithdrawEntity selectById = memberCoinWithdrawMapper.selectById(id); + Long memberId = selectById.getMemberId(); + String symbol = selectById.getSymbol(); + int status = selectById.getStatus(); + if(status != 1) { + return new FebsResponse().fail().message("只有等待审核的状态才能拒绝!"); + } + // 查询币币钱包 + MemberWalletCoinEntity walletCoin = memberWalletCoinMapper.findWalletCoinByMemberIdAndWalletCode(memberId, symbol); + + BigDecimal available = walletCoin.getAvailableBalance().add(selectById.getAmount()).add(selectById.getFeeAmount()); + walletCoin.setAvailableBalance(available); + BigDecimal frozen = walletCoin.getFrozenBalance().subtract(selectById.getAmount()).subtract(selectById.getFeeAmount()); + walletCoin.setFrozenBalance(frozen); + + memberWalletCoinMapper.updateById(walletCoin); + + // 提币退款记录 + MemberAccountMoneyChangeEntity memberAccountMoneyChangeEntity = new MemberAccountMoneyChangeEntity(); + memberAccountMoneyChangeEntity.setContent("提币"); + memberAccountMoneyChangeEntity.setMemberId(memberId); + memberAccountMoneyChangeEntity.setAmount(selectById.getAmount()); + memberAccountMoneyChangeEntity.setStatus(MemberAccountMoneyChangeEntity.STATUS_FAIL_INTEGER); + memberAccountMoneyChangeEntity.setSymbol(selectById.getSymbol()); + memberAccountMoneyChangeEntity.setType(MemberAccountMoneyChangeEntity.TYPE_WALLET_COIN); + memberAccountMoneyChangeEntity.setCreateBy(selectById.getCreateBy()); + memberAccountMoneyChangeEntity.setCreateTime(new Date()); + memberAccountMoneyChangeEntity.setUpdateBy(selectById.getCreateBy()); + memberAccountMoneyChangeEntity.setUpdateTime(new Date()); + memberAccountMoneyChangeMapper.insert(memberAccountMoneyChangeEntity); + + selectById.setStatus(MemberCoinWithdrawEntity.IS_STATUS_N); + memberCoinWithdrawMapper.updateById(selectById); + return new FebsResponse().success(); + } + + @Override + public MemberAuthenticationVo selectMemberAuthenticationById(long id) { + MemberAuthenticationVo memberAuthenticationEntity = memberAuthenticationMapper.findMemberAuthenticationByMemberId(id); + String firstName = memberAuthenticationEntity.getFirstName(); + String secondName = memberAuthenticationEntity.getSecondName(); + memberAuthenticationEntity.setRealName(firstName+"-"+secondName); + return memberAuthenticationEntity; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public FebsResponse memberDetailConfirm(@Valid MemberDetailConfirmDto memberDetailConfirmDto) { + Long id = memberDetailConfirmDto.getId(); + MemberEntity selectById = memberMapper.selectById(id); + Integer certifyStatus = selectById.getCertifyStatus(); + if(!MemberEntity.CERTIFY_STATUS_ING.equals(certifyStatus)) { + return new FebsResponse().fail().message("只有【待审核】状态才能提交!"); + } + + MemberAuthenticationVo memberAuthenticationEntity = memberAuthenticationMapper.findMemberAuthenticationByMemberId(id); + selectById.setCertifyStatus(MemberEntity.CERTIFY_STATUS_Y); + selectById.setIdcardNo(memberAuthenticationEntity.getIdcardNo()); + + memberMapper.updateById(selectById); + return new FebsResponse().success(); + } + } diff --git a/src/main/java/com/xcong/excoin/modules/member/vo/MemberAuthenticationVo.java b/src/main/java/com/xcong/excoin/modules/member/vo/MemberAuthenticationVo.java new file mode 100644 index 0000000..1c55868 --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/member/vo/MemberAuthenticationVo.java @@ -0,0 +1,63 @@ +package com.xcong.excoin.modules.member.vo; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; + +import lombok.Data; + +@Data +public class MemberAuthenticationVo { + + @TableId(value = "id",type = IdType.AUTO) + private Long id; + + /** + * 实名认证状态 0-审核未通过 1-审核通过 2-等待审核 + */ + private Integer certifyStatus; + + /** + * 用户ID + */ + private Long memberId; + + /** + * 真实姓名 + */ + private String realName; + + /** + * 姓 + */ + private String firstName; + + /** + * 名 + */ + private String secondName; + + /** + * 国家 + */ + private String nation; + /** + * 身份证号 + */ + private String idcardNo; + + /** + * 身份证正面 + */ + private String idcardImageFront; + + /** + * 身份证背面 + */ + private String idcardImageBack; + + /** + * 手持身份证 + */ + private String idcardImageInHand; + +} diff --git a/src/main/java/com/xcong/excoin/modules/member/vo/MemberCoinChargeVo.java b/src/main/java/com/xcong/excoin/modules/member/vo/MemberCoinChargeVo.java new file mode 100644 index 0000000..f1b5993 --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/member/vo/MemberCoinChargeVo.java @@ -0,0 +1,62 @@ +package com.xcong.excoin.modules.member.vo; + +import java.math.BigDecimal; +import java.util.Date; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.annotation.JsonFormat; + +import lombok.Data; + +@Data +public class MemberCoinChargeVo { + @TableId(value = "id",type = IdType.AUTO) + private Long id; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date createTime; + /** + * 手机号(包含国际手机号) + */ + private String phone; + + /** + * 邮箱 + */ + private String email; + /** + * 会员ID + */ + private Long memberId; + /** + * 凭证 + */ + private Long certificate; + /** + * 充值金额 + */ + private BigDecimal amount; + /** + * 上次更新时钱包金额 + */ + private BigDecimal lastAmount; + /** + * 状态 + */ + private int status; + /** + * 币种 + */ + private String symbol; + /** + * 地址 + */ + private String address; + private String tag; + private String hash; + /** + * 订单编号 + */ + private String orderCode; + +} diff --git a/src/main/java/com/xcong/excoin/modules/member/vo/MemberCoinWithdrawVo.java b/src/main/java/com/xcong/excoin/modules/member/vo/MemberCoinWithdrawVo.java new file mode 100644 index 0000000..1ddfa0b --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/member/vo/MemberCoinWithdrawVo.java @@ -0,0 +1,59 @@ +package com.xcong.excoin.modules.member.vo; + +import java.math.BigDecimal; +import java.util.Date; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.annotation.JsonFormat; + +import lombok.Data; + +@Data +public class MemberCoinWithdrawVo { + + @TableId(value = "id",type = IdType.AUTO) + private Long id; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date createTime; + /** + * 手机号(包含国际手机号) + */ + private String phone; + /** + * 邮箱 + */ + private String email; + /** + * 会员ID + */ + private Long memberId; + /** + * 地址 + */ + private String address; + /** + * 提币数量 + */ + private BigDecimal amount; + /** + * 手续费 + */ + private BigDecimal feeAmount; + /** + * 币种 + */ + private String symbol; + /** + * 状态 + */ + private int status; + private String label; + private String tag; + + /** + * 是否内部转账 Y-是N-不是 + */ + private String isInside; + +} diff --git a/src/main/java/com/xcong/excoin/modules/member/vo/MemberQuickBuySaleVo.java b/src/main/java/com/xcong/excoin/modules/member/vo/MemberQuickBuySaleVo.java new file mode 100644 index 0000000..2df927f --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/member/vo/MemberQuickBuySaleVo.java @@ -0,0 +1,64 @@ +package com.xcong.excoin.modules.member.vo; + +import java.math.BigDecimal; +import java.util.Date; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.annotation.JsonFormat; + +import lombok.Data; + +@Data +public class MemberQuickBuySaleVo { + @TableId(value = "id",type = IdType.AUTO) + private Long id; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date createTime; + /** + * 手机号(包含国际手机号) + */ + private String phone; + + /** + * 邮箱 + */ + private String email; + /** + * 用户Id + */ + private Long memberId; + /** + * 金额(人民币) + */ + private BigDecimal amountCny; + /** + * 金额(USDT) + */ + private BigDecimal amountUsdt; + /** + * 付款方式 1-支付宝2-微信3-银行卡 + */ + private Integer paymentType; + /** + * 收款账号 + */ + private String paymentAccount; + /** + * 收款人姓名 + */ + private String paymentName; + /** + * 单价 + */ + private BigDecimal unitPrice; + /** + * 订单状态 1-新建2-已付款3-已审核4-撤单5-系统取消 + */ + private int orderStatus; + /** + * 订单编号 + */ + private String orderNo; + +} diff --git a/src/main/java/com/xcong/excoin/modules/member/vo/MemberQuickSaleVo.java b/src/main/java/com/xcong/excoin/modules/member/vo/MemberQuickSaleVo.java new file mode 100644 index 0000000..dd6933e --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/member/vo/MemberQuickSaleVo.java @@ -0,0 +1,73 @@ +package com.xcong.excoin.modules.member.vo; + +import java.math.BigDecimal; +import java.util.Date; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.annotation.JsonFormat; + +import lombok.Data; + +@Data +public class MemberQuickSaleVo { + + @TableId(value = "id",type = IdType.AUTO) + private Long id; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date createTime; + /** + * 手机号(包含国际手机号) + */ + private String phone; + + /** + * 邮箱 + */ + private String email; + /** + * 用户Id + */ + private Long memberId; + /** + * 单价 + */ + private BigDecimal unitPrice; + /** + * 金额(人民币) + */ + private BigDecimal amountCny; + /** + * 金额(USDT) + */ + private BigDecimal amountUsdt; + /** + * 订单状态 1-待审核2-已付款3-已审核4-撤单5-系统取消 + */ + private int orderStatus; + /** + * 收款姓名 + */ + private String name; + /** + * 收款账号 + */ + private String account; + /** + * 收款二维码 + */ + private String paymentQrcode; + /** + * 银行 + */ + private String bank; + /** + * 付款方式 1-支付宝2-微信3-银行卡 + */ + private Integer paymentType; + /** + * 订单编号 + */ + private String orderNo; + +} diff --git a/src/main/java/com/xcong/excoin/modules/trademanage/controller/ContractHoldOrderController.java b/src/main/java/com/xcong/excoin/modules/trademanage/controller/ContractHoldOrderController.java new file mode 100644 index 0000000..36b5e95 --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/trademanage/controller/ContractHoldOrderController.java @@ -0,0 +1,38 @@ +package com.xcong.excoin.modules.trademanage.controller; + +import java.util.Map; + +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.xcong.excoin.common.controller.BaseController; +import com.xcong.excoin.common.entity.FebsResponse; +import com.xcong.excoin.common.entity.QueryRequest; +import com.xcong.excoin.modules.trademanage.entity.ContractHoldOrderEntity; +import com.xcong.excoin.modules.trademanage.service.ContractHoldOrderService; + +import lombok.RequiredArgsConstructor; + +/** + * 当前持仓订单列表 + */ +@Validated +@RestController +@RequiredArgsConstructor +@RequestMapping(value = "/contractHoldOrder") +public class ContractHoldOrderController extends BaseController{ + + private final ContractHoldOrderService contractHoldOrderService; + + @GetMapping("getList") + public FebsResponse getList(ContractHoldOrderEntity contractHoldOrderEntity, QueryRequest request) { + IPage<ContractHoldOrderEntity> findMemberListInPage = contractHoldOrderService.findContractHoldOrderListInPage(contractHoldOrderEntity, request); + Map<String, Object> data = getDataTable(findMemberListInPage); + return new FebsResponse().success().data(data); + } + + +} diff --git a/src/main/java/com/xcong/excoin/modules/trademanage/controller/ViewController.java b/src/main/java/com/xcong/excoin/modules/trademanage/controller/ViewController.java new file mode 100644 index 0000000..4cb3ab6 --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/trademanage/controller/ViewController.java @@ -0,0 +1,24 @@ +package com.xcong.excoin.modules.trademanage.controller; + +import com.xcong.excoin.common.entity.FebsConstant; +import com.xcong.excoin.common.utils.FebsUtil; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; + +/** + * @author wzy + * @date 2020-06-10 + **/ +@Controller("contractHoldOrderView") +@RequestMapping(FebsConstant.VIEW_PREFIX + "modules/trademanage") +public class ViewController { + + @GetMapping("contractHoldOrder") + @RequiresPermissions("contractHoldOrder:view") + public String contractHoldOrder() { + return FebsUtil.view("modules/trademanage/contractHoldOrder"); + } + +} diff --git a/src/main/java/com/xcong/excoin/modules/trademanage/entity/ContractHoldOrderEntity.java b/src/main/java/com/xcong/excoin/modules/trademanage/entity/ContractHoldOrderEntity.java new file mode 100644 index 0000000..4257bd7 --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/trademanage/entity/ContractHoldOrderEntity.java @@ -0,0 +1,150 @@ +package com.xcong.excoin.modules.trademanage.entity; + +import java.math.BigDecimal; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.xcong.excoin.common.entity.BaseEntity; + +import lombok.Data; + +/** + * 合约持仓订单表 + * + * @author wzy + * @date 2020-05-27 + **/ +@Data +@TableName("contract_hold_order") +public class ContractHoldOrderEntity extends BaseEntity { + + /** + * 是否可平仓 1-是 + */ + public static final int ORDER_CAN_CLOSING_Y = 1; + /** + * 是否可平仓 0-否 + */ + public static final int ORDER_CAN_CLOSING_N = 0; + + /** + * 开多 + */ + public static final int OPENING_TYPE_MORE = 1; + + /** + * 开空 + */ + public static final int OPENING_TYPE_LESS = 2; + + /** + * 交易类型 市价 + */ + public static final int TRADE_TYPE_MARK = 1; + + /** + * 交易类型 限价 + */ + public static final int TRADE_TYPE_LIMIT = 2; + + /** + * 会员Id + */ + private Long memberId; + + /** + * 订单编号 + */ + private String orderNo; + + /** + * 仓位类型 1-逐仓 2-全仓 + */ + private int positionType; + + /** + * 交易类型 1-市价 2-限价 + */ + private int tradeType; + + /** + * 币种 + */ + private String symbol; + + /** + * 手数 + */ + private int symbolCnt; + + /** + * 可平张数(仅全仓模式) + */ + private int symbolCntSale; + + /** + * 币种规格 + */ + private BigDecimal symbolSku; + + /** + * 开仓价 + */ + private BigDecimal openingPrice; + + /** + * 开仓类型 1-开多 2-开空 + */ + private int openingType; + + /** + * 开仓手续费 + */ + private BigDecimal openingFeeAmount; + + /** + * 保证金 + */ + private BigDecimal bondAmount; + + /** + * 杠杆倍率 + */ + private int leverRatio; + + /** + * 市场价 + */ + private BigDecimal markPrice; + + /** + * 止损价 + */ + private BigDecimal stopLossPrice; + + /** + * 止盈价 + */ + private BigDecimal stopProfitPrice; + + /** + * 预付款金额 + */ + private BigDecimal prePaymentAmount; + + /** + * 预估强平价 + */ + private BigDecimal forceClosingPrice; + + private int operateNo; + + /** + * 是否可平仓 0-否 1-是 + */ + private int isCanClosing; + + /** + * 批次号 队列平仓时使用,避免重复 + */ + public String batchNo; +} diff --git a/src/main/java/com/xcong/excoin/modules/trademanage/mapper/ContractHoldOrderEntityMapper.java b/src/main/java/com/xcong/excoin/modules/trademanage/mapper/ContractHoldOrderEntityMapper.java new file mode 100644 index 0000000..9dcfc86 --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/trademanage/mapper/ContractHoldOrderEntityMapper.java @@ -0,0 +1,22 @@ +package com.xcong.excoin.modules.trademanage.mapper; + +import org.apache.ibatis.annotations.Param; +import org.mapstruct.Mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.xcong.excoin.modules.trademanage.entity.ContractHoldOrderEntity; + +/** + * @author wzy + * @date 2020-05-31 + **/ +@Mapper +public interface ContractHoldOrderEntityMapper extends BaseMapper<ContractHoldOrderEntity> { + + IPage<ContractHoldOrderEntity> selectContractHoldOrderListInPage(Page<ContractHoldOrderEntity> page, + @Param("contractHoldOrderEntity") ContractHoldOrderEntity contractHoldOrderEntity); + + long countContractHoldOrderSql(@Param("contractHoldOrderEntity") ContractHoldOrderEntity contractHoldOrderEntity); +} diff --git a/src/main/java/com/xcong/excoin/modules/trademanage/service/ContractHoldOrderService.java b/src/main/java/com/xcong/excoin/modules/trademanage/service/ContractHoldOrderService.java new file mode 100644 index 0000000..f09ab25 --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/trademanage/service/ContractHoldOrderService.java @@ -0,0 +1,15 @@ +package com.xcong.excoin.modules.trademanage.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.IService; +import com.xcong.excoin.common.entity.QueryRequest; +import com.xcong.excoin.modules.trademanage.entity.ContractHoldOrderEntity; + +/** + * @author helius + */ +public interface ContractHoldOrderService extends IService<ContractHoldOrderEntity> { + + IPage<ContractHoldOrderEntity> findContractHoldOrderListInPage(ContractHoldOrderEntity contractHoldOrderEntity, QueryRequest request); + +} diff --git a/src/main/java/com/xcong/excoin/modules/trademanage/service/impl/ContractHoldOrderServiceImpl.java b/src/main/java/com/xcong/excoin/modules/trademanage/service/impl/ContractHoldOrderServiceImpl.java new file mode 100644 index 0000000..87c55ad --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/trademanage/service/impl/ContractHoldOrderServiceImpl.java @@ -0,0 +1,28 @@ +package com.xcong.excoin.modules.trademanage.service.impl; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.xcong.excoin.common.entity.QueryRequest; +import com.xcong.excoin.modules.trademanage.entity.ContractHoldOrderEntity; +import com.xcong.excoin.modules.trademanage.mapper.ContractHoldOrderEntityMapper; +import com.xcong.excoin.modules.trademanage.service.ContractHoldOrderService; + +@Service +public class ContractHoldOrderServiceImpl extends ServiceImpl<ContractHoldOrderEntityMapper, ContractHoldOrderEntity> implements ContractHoldOrderService{ + + @Resource + ContractHoldOrderEntityMapper contractHoldOrderEntityMapper; + + @Override + public IPage<ContractHoldOrderEntity> findContractHoldOrderListInPage( + ContractHoldOrderEntity contractHoldOrderEntity, QueryRequest request) { + Page<ContractHoldOrderEntity> page = new Page<>(request.getPageNum(), request.getPageSize()); + return this.baseMapper.selectContractHoldOrderListInPage(page, contractHoldOrderEntity); + } + +} diff --git a/src/main/resources/mapper/modules/MemberAuthenticationMapper.xml b/src/main/resources/mapper/modules/MemberAuthenticationMapper.xml new file mode 100644 index 0000000..42445ab --- /dev/null +++ b/src/main/resources/mapper/modules/MemberAuthenticationMapper.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.xcong.excoin.modules.member.mapper.MemberAuthenticationMapper"> + + <select id="findMemberAuthenticationByMemberId" resultType="com.xcong.excoin.modules.member.vo.MemberAuthenticationVo"> + select * from member a LEFT JOIN member_authentication m on m.member_id = a.id where a.id = #{id} + </select> + +</mapper> \ No newline at end of file diff --git a/src/main/resources/mapper/modules/MemberCoinAddressMapper.xml b/src/main/resources/mapper/modules/MemberCoinAddressMapper.xml new file mode 100644 index 0000000..45e595e --- /dev/null +++ b/src/main/resources/mapper/modules/MemberCoinAddressMapper.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.xcong.excoin.modules.member.mapper.MemberCoinAddressMapper"> + + <select id="findMemberApplyCoinListInPage" resultType="com.xcong.excoin.modules.member.vo.MemberCoinChargeVo"> + select * from member_coin_charge s left join member m on m.id = s.member_id + <where> + <if test="record != null" > + <if test="record.account!=null and record.account!=''"> + and (m.phone = #{record.account} or m.email = #{record.account} or s.member_id=#{record.account}) + </if> + <if test="record.address!=null and record.address!=''"> + and s.address=#{record.address} + </if> + </if> + </where> + order by s.create_time desc + </select> + +</mapper> \ No newline at end of file diff --git a/src/main/resources/mapper/modules/MemberCoinChargeMapper.xml b/src/main/resources/mapper/modules/MemberCoinChargeMapper.xml new file mode 100644 index 0000000..c57cc3f --- /dev/null +++ b/src/main/resources/mapper/modules/MemberCoinChargeMapper.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.xcong.excoin.modules.member.mapper.MemberCoinChargeMapper"> + + <select id="findMemberApplyCoinListInPage" resultType="com.xcong.excoin.modules.member.vo.MemberCoinChargeVo"> + select * from member_coin_charge s left join member m on m.id = s.member_id + <where> + <if test="record != null" > + <if test="record.account!=null and record.account!=''"> + and (m.phone = #{record.account} or m.email = #{record.account} or s.member_id=#{record.account}) + </if> + <if test="record.address!=null and record.address!=''"> + and s.address=#{record.address} + </if> + </if> + </where> + order by s.create_time desc + </select> + +</mapper> \ No newline at end of file diff --git a/src/main/resources/mapper/modules/MemberCoinWithdrawMapper.xml b/src/main/resources/mapper/modules/MemberCoinWithdrawMapper.xml new file mode 100644 index 0000000..2616c75 --- /dev/null +++ b/src/main/resources/mapper/modules/MemberCoinWithdrawMapper.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.xcong.excoin.modules.member.mapper.MemberCoinWithdrawMapper"> + + <select id="findmemberWithdrawCoinListInPage" resultType="com.xcong.excoin.modules.member.vo.MemberCoinWithdrawVo"> + SELECT + * + FROM + member_coin_withdraw s left join member m on m.id = s.member_id + <where> + <if test="record != null" > + <if test="record.account!=null and record.account!=''"> + and (m.phone = #{record.account} or m.email = #{record.account} or s.member_id=#{record.account}) + </if> + <if test="record.isInside!=null and record.isInside!=''"> + and s.is_inside= #{record.isInside} + </if> + <if test="record.status!=null and record.status!='' and record.status!='0'"> + and s.status= #{record.status} + </if> + </if> + </where> + </select> + +</mapper> \ No newline at end of file diff --git a/src/main/resources/mapper/modules/MemberQuickBuySaleMapper.xml b/src/main/resources/mapper/modules/MemberQuickBuySaleMapper.xml new file mode 100644 index 0000000..1e6caa7 --- /dev/null +++ b/src/main/resources/mapper/modules/MemberQuickBuySaleMapper.xml @@ -0,0 +1,57 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.xcong.excoin.modules.member.mapper.MemberQuickBuySaleMapper"> + + + <select id="findmemberQuickBuySaleListInPage" resultType="com.xcong.excoin.modules.member.vo.MemberQuickBuySaleVo"> + select * from member_quick_buy_sale s left join member m on m.id = s.member_id + <where> + s.order_type = 'B' + <if test="record != null" > + <if test="record.account!=null and record.account!=''"> + and (m.phone = #{record.account} or m.email = #{record.account} or s.member_id=#{record.account}) + </if> + <if test="record.orderStatus!=null and record.orderStatus!= 0" > + and s.order_status = #{record.orderStatus} + </if> + </if> + </where> + order by s.create_time desc + </select> + + <select id="findmemberQuickSaleListInPage" resultType="com.xcong.excoin.modules.member.vo.MemberQuickSaleVo"> + SELECT + s.id, + s.create_time createTime, + a.phone, + a.email, + s.member_id memberId, + s.unit_price unitPrice, + s.amount_cny amountCny, + s.amount_usdt amountUsdt, + s.order_status orderStatus, + m.name, + m.account, + m.payment_qrcode paymentQrcode, + m.bank, + m.payment_type paymentType, + s.order_no orderNo + FROM + member_quick_buy_sale s + LEFT JOIN member_payment_method m ON m.id = s.member_id + LEFT JOIN member a ON a.id = s.member_id + <where> + s.order_type = 'S' + <if test="record != null" > + <if test="record.account!=null and record.account!=''"> + and (a.phone = #{record.account} or a.email = #{record.account} or s.member_id=#{record.account}) + </if> + <if test="record.orderStatus!=null and record.orderStatus!= 0" > + and s.order_status = #{record.orderStatus} + </if> + </if> + </where> + order by s.create_time desc + </select> + +</mapper> \ No newline at end of file diff --git a/src/main/resources/mapper/modules/MemberWalletCoinMapper.xml b/src/main/resources/mapper/modules/MemberWalletCoinMapper.xml new file mode 100644 index 0000000..5980ed9 --- /dev/null +++ b/src/main/resources/mapper/modules/MemberWalletCoinMapper.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.xcong.excoin.modules.member.mapper.MemberWalletCoinMapper"> + + + <select id="findWalletCoinByMemberIdAndWalletCode" resultType="com.xcong.excoin.modules.member.entity.MemberWalletCoinEntity"> + select * from member_wallet_coin where member_id = #{memberId} and wallet_code = #{walletCode} + </select> + +</mapper> \ No newline at end of file diff --git a/src/main/resources/mapper/modules/contract/ContractHoldOrderDao.xml b/src/main/resources/mapper/modules/contract/ContractHoldOrderDao.xml new file mode 100644 index 0000000..e9797fe --- /dev/null +++ b/src/main/resources/mapper/modules/contract/ContractHoldOrderDao.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper + namespace="com.xcong.excoin.modules.trademanage.mapper.ContractHoldOrderEntityMapper"> + <sql id="countContractHoldOrderSql"> + SELECT + COUNT(1) + FROM + contract_hold_order + </sql> + + <sql id="findContractHoldOrderSql"> + SELECT a.* FROM contract_hold_order a + </sql> + + <select id="selectContractHoldOrderListInPage" + parameterType="contractHoldOrderEntity" resultType="contractHoldOrderEntity"> + <include refid="findContractHoldOrderSql" /> + </select> +</mapper> \ No newline at end of file diff --git a/src/main/resources/templates/febs/views/modules/member/applyCoin.html b/src/main/resources/templates/febs/views/modules/member/applyCoin.html new file mode 100644 index 0000000..a66aa37 --- /dev/null +++ b/src/main/resources/templates/febs/views/modules/member/applyCoin.html @@ -0,0 +1,129 @@ +<div class="layui-fluid layui-anim febs-anim" id="febs-user" lay-title="充币审核管理"> + <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-md10"> + <div class="layui-form-item"> + <div class="layui-inline"> + <div class="layui-input-inline"> + <input type="text" placeholder="手机号/邮箱/邀请码" name="account" autocomplete="off" class="layui-input"> + </div> + </div> + <div class="layui-inline"> + <div class="layui-input-inline"> + <input type="text" placeholder="充币地址" name="address" 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-blue-plain table-action" id="query"> + <i class="layui-icon"></i> + </div> + <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-green-plain table-action" id="reset"> + <i class="layui-icon"></i> + </div> + </div> + </div> + </form> + <table lay-filter="userTable" lay-data="{id: 'userTable'}"></table> + </div> + </div> + </div> + </div> +</div> +<!-- 表格字段状态格式化 start --> +<script type="text/html" id="status"> + {{# + var status = { + 1: {title: '已到账' , color: 'green'}, + 0: {title: '已到账' }, + 2: {title: '已到账' }, + 3: {title: '已到账' }, + 4: {title: '已到账' } + }[d.status]; + }} + <span class="layui-badge febs-tag-{{status.color}}">{{ status.title }}</span> +</script> + +<!-- 表格字段状态格式化 start --> + +<!-- 表格操作栏 end --> +<script data-th-inline="none" type="text/javascript"> + // 引入组件并初始化 + layui.use(['dropdown', 'jquery', 'laydate', 'form', 'table', 'febs', 'treeSelect'], function () { + var $ = layui.jquery, + laydate = layui.laydate, + febs = layui.febs, + form = layui.form, + table = layui.table, + treeSelect = layui.treeSelect, + dropdown = layui.dropdown, + $view = $('#febs-user'), + $query = $view.find('#query'), + $reset = $view.find('#reset'), + $searchForm = $view.find('form'), + sortObject = {field: 'createTime', type: null}, + tableIns; + + form.render(); + + // 表格初始化 + initTable(); + + // 下拉框选择器 + treeSelect.render({ + elem: $view.find('#dept'), + type: 'get', + data: ctx + 'dept/select/tree', + placeholder: '请选择', + search: false + }); + + // 查询按钮 + $query.on('click', function () { + var params = $.extend(getQueryParams(), {field: sortObject.field, order: sortObject.type}); + tableIns.reload({where: params, page: {curr: 1}}); + }); + + // 刷新按钮 + $reset.on('click', function () { + $searchForm[0].reset(); + treeSelect.revokeNode('dept'); + sortObject.type = 'null'; + tableIns.reload({where: getQueryParams(), page: {curr: 1}, initSort: sortObject}); + }); + + function initTable() { + tableIns = febs.table.init({ + elem: $view.find('table'), + id: 'userTable', + url: ctx + 'member/memberApplyCoin', + cols: [[ + {field: 'phone', title: '手机号码', minWidth: 120,align:'left'}, + {field: 'email', title: '邮箱', minWidth: 200,align:'left'}, + {field: 'memberId', title: '邀请码UID', minWidth: 100,align:'center'}, + {field: 'symbol', title: '币种', minWidth: 60,align:'center'}, + {field: 'tag', title: 'USDT类型', minWidth: 60,align:'center'}, + {field: 'amount', title: '充币数量', minWidth: 100,align:'center'}, + {field: 'lastAmount', title: '本次余额', minWidth: 100,align:'center'}, + {field: 'address', title: '平台钱包地址', minWidth: 280,align:'center'}, + {field: 'createTime', title: '创建时间', minWidth: 200,align:'center'}, + {title: '状态', templet: '#status', minWidth: 100,align:'center'} + ]] + }); + } + + // 获取查询参数 + function getQueryParams() { + return { + account: $searchForm.find('input[name="account"]').val().trim(), + address: $searchForm.find('input[name="address"]').val().trim(), + }; + } + + }) +</script> \ No newline at end of file diff --git a/src/main/resources/templates/febs/views/modules/member/chargeUsdt.html b/src/main/resources/templates/febs/views/modules/member/chargeUsdt.html new file mode 100644 index 0000000..c73732b --- /dev/null +++ b/src/main/resources/templates/febs/views/modules/member/chargeUsdt.html @@ -0,0 +1,193 @@ +<div class="layui-fluid layui-anim febs-anim" id="febs-user" lay-title="会员充值USDT"> + <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-md10"> + <div class="layui-form-item"> + <div class="layui-inline"> + <div class="layui-input-inline"> + <input type="text" placeholder="手机号/邮箱/邀请码" name="account" autocomplete="off" class="layui-input"> + </div> + </div> + <div class="layui-inline"> + <label class="layui-form-label layui-form-label-sm">订单状态</label> + <div class="layui-input-inline"> + <select name="orderStatus"> + <option value="0"></option> + <option value="1">新建</option> + <option value="2">已付款</option> + <option value="3">已审核</option> + <option value="4">撤单</option> + <option value="5">系统取消</option> + </select> + </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-blue-plain table-action" id="query"> + <i class="layui-icon"></i> + </div> + <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-green-plain table-action" id="reset"> + <i class="layui-icon"></i> + </div> + <div class="layui-btn layui-btn-sm layui-btn-primary table-action action-more" + shiro:hasAnyPermissions="user:add,user:update,user:password:reset,user:export"> + <i class="layui-icon"></i> + </div> + </div> + </div> + </form> + <table lay-filter="userTable" lay-data="{id: 'userTable'}"></table> + </div> + </div> + </div> + </div> +</div> +<!-- 表格字段状态格式化 start --> +<script type="text/html" id="order-Status"> + {{# + var orderStatus = { + 1: {title: '新建' , color: 'gray'}, + 2: {title: '已付款' , color: 'red'}, + 3: {title: '已审核' , color: 'green'}, + 4: {title: '撤单' , color: 'gray'}, + 5: {title: '系统取消' , color: 'blue'} + }[d.orderStatus]; + }} + <span class="layui-badge febs-tag-{{orderStatus.color}}">{{ orderStatus.title }}</span> +</script> +<script type="text/html" id="payment-Type"> + {{# + var paymentType = { + null: {title: '无' }, + 1: {title: '支付宝' }, + 2: {title: '微信'}, + 3: {title: '银行卡' } + }[d.paymentType]; + }} + <span >{{ paymentType.title }}</span> +</script> + +<!-- 表格字段状态格式化 start --> + +<!-- 表格操作栏 start --> +<script type="text/html" id="user-option"> + <span shiro:lacksPermission="user:view,user:update,user:delete"> + <span class="layui-badge-dot febs-bg-orange"></span> 无权限 + </span> + <a lay-event="confirm" shiro:hasPermission="user:delete">确认</a> + <i class="layui-icon febs-edit-area febs-blue"></i> + <a lay-event="cancel" shiro:hasPermission="user:delete">系统撤单</a> +</script> +<!-- 表格操作栏 end --> +<script data-th-inline="none" type="text/javascript"> + // 引入组件并初始化 + layui.use(['dropdown', 'jquery', 'laydate', 'form', 'table', 'febs', 'treeSelect'], function () { + var $ = layui.jquery, + laydate = layui.laydate, + febs = layui.febs, + form = layui.form, + table = layui.table, + treeSelect = layui.treeSelect, + dropdown = layui.dropdown, + $view = $('#febs-user'), + $query = $view.find('#query'), + $reset = $view.find('#reset'), + $searchForm = $view.find('form'), + sortObject = {field: 'createTime', type: null}, + tableIns; + + form.render(); + + // 表格初始化 + initTable(); + + // 下拉框选择器 + treeSelect.render({ + elem: $view.find('#dept'), + type: 'get', + data: ctx + 'dept/select/tree', + placeholder: '请选择', + search: false + }); + + // 初始化表格操作栏各个按钮功能 + table.on('tool(userTable)', function (obj) { + var data = obj.data, + layEvent = obj.event; + if (layEvent === 'confirm') { + febs.modal.confirm('询问', '您是否确认收款,确认拨币USDT到该会员吗?', function () { + confirmUsers(data.id); + }); + } + if (layEvent === 'cancel') { + febs.modal.confirm('系统撤单', '您是否后台撤销该记录吗?', function () { + cancelUsers(data.id); + }); + } + }); + + function confirmUsers(id) { + febs.get(ctx + 'member/memberChargeUsdtConfirm/' + id, null, function () { + febs.alert.success('划转成功'); + $query.click(); + }); + } + function cancelUsers(id) { + febs.get(ctx + 'member/memberChargeUsdtCancel/' + id, null, function () { + febs.alert.success('设置为系统取消'); + $query.click(); + }); + } + + // 查询按钮 + $query.on('click', function () { + var params = $.extend(getQueryParams(), {field: sortObject.field, order: sortObject.type}); + tableIns.reload({where: params, page: {curr: 1}}); + }); + + // 刷新按钮 + $reset.on('click', function () { + $searchForm[0].reset(); + treeSelect.revokeNode('dept'); + sortObject.type = 'null'; + tableIns.reload({where: getQueryParams(), page: {curr: 1}, initSort: sortObject}); + }); + + function initTable() { + tableIns = febs.table.init({ + elem: $view.find('table'), + id: 'userTable', + url: ctx + 'member/memberChargeUsdt', + cols: [[ + {field: 'phone', title: '手机号码', minWidth: 120,align:'left'}, + {field: 'email', title: '邮箱', minWidth: 200,align:'left'}, + {field: 'memberId', title: '邀请码UID', minWidth: 100,align:'center'}, + {field: 'amountCny', title: '人民币金额', minWidth: 120,align:'center'}, + {field: 'amountUsdt', title: 'USDT金额', minWidth: 120,align:'center'}, + {field: 'unitPrice', title: '单价', minWidth: 80,align:'center'}, + {field: 'createTime', title: '充值时间', minWidth: 180,align:'center'}, + {title: '付款状态', templet: '#order-Status', minWidth: 100,align:'center'}, + {field: 'orderNo', title: '订单编号', minWidth: 150,align:'center'}, + {field: 'paymentName', title: '收款人', minWidth: 150,align:'center'}, + {field: 'paymentAccount', title: '收款账号', minWidth: 150,align:'center'}, + {title: '收款方式', templet: '#payment-Type', minWidth: 100,align:'center'}, + {title: '操作', toolbar: '#user-option', minWidth: 150, fixed : 'right'} + ]] + }); + } + + // 获取查询参数 + function getQueryParams() { + return { + account: $searchForm.find('input[name="account"]').val().trim(), + orderStatus: $searchForm.find("select[name='orderStatus']").val(), + }; + } + + }) +</script> \ No newline at end of file diff --git a/src/main/resources/templates/febs/views/modules/member/extractUsdt.html b/src/main/resources/templates/febs/views/modules/member/extractUsdt.html new file mode 100644 index 0000000..ae18824 --- /dev/null +++ b/src/main/resources/templates/febs/views/modules/member/extractUsdt.html @@ -0,0 +1,197 @@ +<div class="layui-fluid layui-anim febs-anim" id="febs-user" lay-title="会员USDT提现"> + <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-md10"> + <div class="layui-form-item"> + <div class="layui-inline"> + <div class="layui-input-inline"> + <input type="text" placeholder="手机号/邮箱/邀请码" name="account" autocomplete="off" class="layui-input"> + </div> + </div> + <div class="layui-inline"> + <label class="layui-form-label layui-form-label-sm">订单状态</label> + <div class="layui-input-inline"> + <select name="orderStatus"> + <option value="0"></option> + <option value="1">待审核</option> + <option value="2">已付款</option> + <option value="3">已审核</option> + <option value="4">撤单</option> + <option value="5">系统取消</option> + </select> + </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-blue-plain table-action" id="query"> + <i class="layui-icon"></i> + </div> + <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-green-plain table-action" id="reset"> + <i class="layui-icon"></i> + </div> + <div class="layui-btn layui-btn-sm layui-btn-primary table-action action-more" + shiro:hasAnyPermissions="user:add,user:update,user:password:reset,user:export"> + <i class="layui-icon"></i> + </div> + </div> + </div> + </form> + <table lay-filter="userTable" lay-data="{id: 'userTable'}"></table> + </div> + </div> + </div> + </div> +</div> +<!-- 表格字段状态格式化 start --> +<script type="text/html" id="order-Status"> + {{# + var orderStatus = { + 1: {title: '待审核' , color: 'gray'}, + 2: {title: '已付款' , color: 'red'}, + 3: {title: '已审核' , color: 'green'}, + 4: {title: '撤单' , color: 'gray'}, + 5: {title: '系统取消' , color: 'blue'} + }[d.orderStatus]; + }} + <span class="layui-badge febs-tag-{{orderStatus.color}}">{{ orderStatus.title }}</span> +</script> +<script type="text/html" id="payment-Type"> + {{# + var paymentType = { + null: {title: '无' }, + 1: {title: '支付宝' }, + 2: {title: '微信'}, + 3: {title: '银行卡' } + }[d.paymentType]; + }} + <span >{{ paymentType.title }}</span> +</script> + +<!-- 表格字段状态格式化 start --> + +<!-- 表格操作栏 start --> +<script type="text/html" id="user-option"> + <span shiro:lacksPermission="user:view,user:update,user:delete"> + <span class="layui-badge-dot febs-bg-orange"></span> 无权限 + </span> + <a lay-event="confirm" shiro:hasPermission="user:delete">付款</a> + <i class="layui-icon febs-edit-area febs-blue"></i> + <a lay-event="cancel" shiro:hasPermission="user:delete">拒绝</a> +</script> +<!-- 表格操作栏 end --> +<script data-th-inline="none" type="text/javascript"> + // 引入组件并初始化 + layui.use(['dropdown', 'jquery', 'laydate', 'form', 'table', 'febs', 'treeSelect'], function () { + var $ = layui.jquery, + laydate = layui.laydate, + febs = layui.febs, + form = layui.form, + table = layui.table, + treeSelect = layui.treeSelect, + dropdown = layui.dropdown, + $view = $('#febs-user'), + $query = $view.find('#query'), + $reset = $view.find('#reset'), + $searchForm = $view.find('form'), + sortObject = {field: 'createTime', type: null}, + tableIns; + + form.render(); + + // 表格初始化 + initTable(); + + // 下拉框选择器 + treeSelect.render({ + elem: $view.find('#dept'), + type: 'get', + data: ctx + 'dept/select/tree', + placeholder: '请选择', + search: false + }); + + // 初始化表格操作栏各个按钮功能 + table.on('tool(userTable)', function (obj) { + var data = obj.data, + layEvent = obj.event; + if (layEvent === 'confirm') { + febs.modal.confirm('询问', '您是否确认已付款到该会员?', function () { + confirmUsers(data.id); + }); + } + if (layEvent === 'cancel') { + febs.modal.confirm('询问', '您是否确认拒绝?', function () { + cancelUsers(data.id); + }); + } + }); + + function confirmUsers(id) { + febs.get(ctx + 'member/memberExtractUsdtConfirm/' + id, null, function () { + febs.alert.success('划转成功'); + $query.click(); + }); + } + + function cancelUsers(id) { + febs.get(ctx + 'member/memberExtractUsdtCancel/' + id, null, function () { + febs.alert.success('设置为系统取消'); + $query.click(); + }); + } + + // 查询按钮 + $query.on('click', function () { + var params = $.extend(getQueryParams(), {field: sortObject.field, order: sortObject.type}); + tableIns.reload({where: params, page: {curr: 1}}); + }); + + // 刷新按钮 + $reset.on('click', function () { + $searchForm[0].reset(); + treeSelect.revokeNode('dept'); + sortObject.type = 'null'; + tableIns.reload({where: getQueryParams(), page: {curr: 1}, initSort: sortObject}); + }); + + function initTable() { + tableIns = febs.table.init({ + elem: $view.find('table'), + id: 'userTable', + url: ctx + 'member/memberExtractUsdt', + cols: [[ + {field: 'phone', title: '手机号码', minWidth: 120,align:'left'}, + {field: 'email', title: '邮箱', minWidth: 200,align:'left'}, + {field: 'memberId', title: '邀请码UID', minWidth: 100,align:'center'}, + {field: 'amountCny', title: '人民币金额', minWidth: 120,align:'center'}, + {field: 'amountUsdt', title: 'USDT金额', minWidth: 120,align:'center'}, + {field: 'unitPrice', title: '单价', minWidth: 80,align:'center'}, + {field: 'createTime', title: '提现时间', minWidth: 180,align:'center'}, + {title: '提现状态', templet: '#order-Status', minWidth: 100,align:'center'}, + {field: 'orderNo', title: '订单编号', minWidth: 150,align:'center'}, + {field: 'paymentQrcode', title: '支付码', minWidth: 120,align:'center'}, + {field: 'name', title: '收款人', minWidth: 150,align:'center'}, + {field: 'account', title: '收款账号', minWidth: 150,align:'center'}, + {title: '收款方式', templet: '#payment-Type', minWidth: 100,align:'center'}, + {field: 'paymentAccount', title: '二维码', minWidth: 150,align:'center'}, + {field: 'bank', title: '所属银行', minWidth: 150,align:'center'}, + {title: '操作', toolbar: '#user-option', minWidth: 150, fixed : 'right'} + ]] + }); + } + + // 获取查询参数 + function getQueryParams() { + return { + account: $searchForm.find('input[name="account"]').val().trim(), + orderStatus: $searchForm.find("select[name='orderStatus']").val(), + }; + } + + }) +</script> \ No newline at end of file diff --git a/src/main/resources/templates/febs/views/modules/member/member.html b/src/main/resources/templates/febs/views/modules/member/member.html index e987cae..f197168 100644 --- a/src/main/resources/templates/febs/views/modules/member/member.html +++ b/src/main/resources/templates/febs/views/modules/member/member.html @@ -77,9 +77,9 @@ {{# var certifyStatus = { 0: {title: '未通过', color: 'red'}, - 1: {title: '审核中', color: 'blue'}, + 1: {title: '待审核', color: 'blue'}, 2: {title: '审核通过', color: 'green'}, - 3: {title: '未实名', color: 'cyan'} + 3: {title: '未实名'} }[d.certifyStatus]; }} <span class="layui-badge febs-tag-{{certifyStatus.color}}">{{ certifyStatus.title }}</span> @@ -87,11 +87,11 @@ <script type="text/html" id="account-type"> {{# var accountType = { - 2: {title: '正常账号'}, - 1: {title: '测试账号'} + 2: {title: '正常账号' , color: 'green'}, + 1: {title: '测试账号' , color: 'red'} }[d.accountType]; }} - <span>{{ accountType.title }}</span> + <span class="layui-badge febs-tag-{{accountType.color}}">{{ accountType.title }}</span> </script> <script type="text/html" id="account-status"> {{# @@ -109,11 +109,8 @@ <span shiro:lacksPermission="user:view,user:update,user:delete"> <span class="layui-badge-dot febs-bg-orange"></span> 无权限 </span> - <a lay-event="detail" shiro:hasPermission="user:view"><i - class="layui-icon febs-edit-area febs-green"></i></a> <a lay-event="edit" shiro:hasPermission="user:update"><i - class="layui-icon febs-edit-area febs-blue"></i></a> - <a lay-event="del" shiro:hasPermission="user:delete"><i class="layui-icon febs-edit-area febs-red"></i></a> + class="layui-icon febs-edit-area febs-blue"></i></a> </script> <!-- 表格操作栏 end --> <script data-th-inline="none" type="text/javascript"> @@ -148,76 +145,6 @@ }); // 新增下拉组件 - dropdown.render({ - elem: $view.find('.action-more'), - click: function (name, elem, event) { - var checkStatus = table.checkStatus('userTable'); - if (name === 'add') { - febs.modal.open('新增用户', 'system/user/add', { - btn: ['提交', '重置'], - area: $(window).width() <= 750 ? '95%' : '50%', - offset: '30px', - yes: function (index, layero) { - $('#user-add').find('#submit').trigger('click'); - }, - btn2: function () { - $('#user-add').find('#reset').trigger('click'); - return false; - } - }); - } - if (name === 'delete') { - if (!checkStatus.data.length) { - febs.alert.warn('请选择需要删除的用户'); - } else { - febs.modal.confirm('删除用户', '确定删除该用户?', function () { - var userIds = []; - layui.each(checkStatus.data, function (key, item) { - userIds.push(item.userId) - }); - deleteUsers(userIds.join(',')); - }); - } - } - if (name === 'reset') { - if (!checkStatus.data.length) { - febs.alert.warn('请选择需要重置密码的用户'); - } else { - var usernames = []; - layui.each(checkStatus.data, function (key, item) { - usernames.push(item.username) - }); - febs.post(ctx + 'user/password/reset/' + usernames.join(','), null, function () { - febs.alert.success('所选用户密码已重置为1234qwer'); - }); - } - } - if (name === 'export') { - var params = $.extend(getQueryParams(), {field: sortObject.field, order: sortObject.type}); - params.pageSize = $view.find(".layui-laypage-limits option:selected").val(); - params.pageNum = $view.find(".layui-laypage-em").next().html(); - febs.download(ctx + 'user/excel', params, '用户信息表.xlsx'); - } - }, - options: [{ - name: 'add', - title: '新增用户', - perms: 'user:add' - }, { - name: 'delete', - title: '删除用户', - perms: 'user:delete' - }, { - name: 'reset', - title: '密码重置', - perms: 'user:password:reset' - }, { - name: 'export', - title: '导出Excel', - perms: 'user:export' - }] - }); - // 下拉框选择器 treeSelect.render({ elem: $view.find('#dept'), @@ -231,20 +158,10 @@ table.on('tool(userTable)', function (obj) { var data = obj.data, layEvent = obj.event; - if (layEvent === 'detail') { - febs.modal.view('用户信息', 'system/user/detail/' + data.username, { - area: $(window).width() <= 750 ? '95%' : '660px' - }); - } - if (layEvent === 'del') { - febs.modal.confirm('删除用户', '确定删除该用户?', function () { - deleteUsers(data.userId); - }); - } + if (layEvent === 'edit') { - febs.modal.open('修改用户', 'system/user/update/' + data.username, { - area: $(window).width() <= 750 ? '90%' : '50%', - offset: '30px', + febs.modal.open('身份认证', 'modules/member/memberDetail/' + data.id, { + area: $(window).width() <= 1000 ? '100%' : '50%', btn: ['提交', '取消'], yes: function (index, layero) { $('#user-update').find('#submit').trigger('click'); @@ -255,6 +172,7 @@ }); } }); + // 查询按钮 $query.on('click', function () { @@ -278,15 +196,14 @@ id: 'userTable', url: ctx + 'member/getList', cols: [[ - {type: 'checkbox'}, - {field: 'phone', title: '手机号', minWidth: 165}, - {field: 'email', title: '邮箱', minWidth: 200}, - {field: 'inviteId', title: '邀请码'}, - {field: 'refererId', title: '上级邀请码'}, - {title: '账号类型', templet: '#account-type'}, - {title: '账号状态', templet: '#account-status'}, - {title: '审核状态', templet: '#certify-status'}, - {field: 'createTime', title: '注册时间', minWidth: 180}, + {field: 'phone', title: '手机号', minWidth: 100,align:'left'}, + {field: 'email', title: '邮箱', minWidth: 200,align:'left'}, + {field: 'inviteId', title: '邀请码UID', minWidth: 80,align:'center'}, + {field: 'refererId', title: '上级邀请码UID', minWidth: 80,align:'center'}, + {title: '账号类型', templet: '#account-type', minWidth: 80,align:'center'}, + {title: '账号状态', templet: '#account-status', minWidth: 50,align:'center'}, + {title: '审核状态', templet: '#certify-status', minWidth: 80,align:'center'}, + {field: 'createTime', title: '注册时间', minWidth: 180,align:'center'}, {title: '操作', toolbar: '#user-option', minWidth: 140, fixed : 'right'} ]] }); diff --git a/src/main/resources/templates/febs/views/modules/member/memberDetail.html b/src/main/resources/templates/febs/views/modules/member/memberDetail.html new file mode 100644 index 0000000..f9ca522 --- /dev/null +++ b/src/main/resources/templates/febs/views/modules/member/memberDetail.html @@ -0,0 +1,130 @@ +<style> + #user-update { + padding: 20px 25px 25px 0; + } + + #user-update .layui-treeSelect .ztree li a, .ztree li span { + margin: 0 0 2px 3px !important; + } + #user-update #data-permission-tree-block { + border: 1px solid #eee; + border-radius: 2px; + padding: 3px 0; + } + #user-add .layui-treeSelect .ztree li span.button.switch { + top: 1px; + left: 3px; + } + +</style> +<div class="layui-fluid" id="user-update"> + <form class="layui-form" action="" lay-filter="user-update-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" data-th-value="${member.id}"> + </div> + </div> + <div class="layui-form-item"> + <label class="layui-form-label febs-form-item-require">真实姓名:</label> + <div class="layui-input-block"> + <input type="text" name="realName" minlength="4" maxlength="10" data-th-id="${member.realName}" + lay-verify="range|realName" autocomplete="off" class="layui-input" readonly> + </div> + </div> + <div class="layui-form-item"> + <label class="layui-form-label febs-form-item-require">姓:</label> + <div class="layui-input-block"> + <input type="text" name="firstName" minlength="4" maxlength="10" data-th-id="${member.firstName}" + lay-verify="range|firstName" autocomplete="off" class="layui-input" readonly> + </div> + </div> + <div class="layui-form-item"> + <label class="layui-form-label febs-form-item-require">名:</label> + <div class="layui-input-block"> + <input type="text" name="secondName" minlength="4" maxlength="10" data-th-id="${member.secondName}" + lay-verify="range|secondName" autocomplete="off" class="layui-input" readonly> + </div> + </div> + <div class="layui-form-item"> + <label class="layui-form-label febs-form-item-require">国家:</label> + <div class="layui-input-block"> + <input type="text" name="nation" minlength="4" maxlength="10" data-th-id="${member.nation}" + lay-verify="range|nation" autocomplete="off" class="layui-input" readonly> + </div> + </div> + <div class="layui-form-item"> + <label class="layui-form-label febs-form-item-require">身份证号:</label> + <div class="layui-input-block"> + <input type="text" name="idcardNo" minlength="4" maxlength="10" data-th-id="${member.idcardNo}" + lay-verify="range|idcardNo" autocomplete="off" class="layui-input" readonly> + </div> + </div> + <div class="layui-form-item"> + <label class="layui-form-label febs-form-item-require">身份证正面:</label> + <div class="layui-input-block"> + <img alt="头像" title="点我更换头像" data-th-src="${member.idcardImageFront}"> + </div> + </div> + <div class="layui-form-item"> + <label class="layui-form-label febs-form-item-require">身份证背面:</label> + <div class="layui-input-block"> + <img alt="头像" title="点我更换头像" data-th-src="${member.idcardImageBack}"> + </div> + </div> + <div class="layui-form-item"> + <label class="layui-form-label febs-form-item-require">手持身份证:</label> + <div class="layui-input-block"> + <img alt="头像" title="点我更换头像" data-th-src="${member.idcardImageInHand}"> + </div> + </div> + <div class="layui-form-item febs-hide"> + <button class="layui-btn" lay-submit="" lay-filter="user-update-form-submit" id="submit"></button> + </div> + </form> +</div> + +<script data-th-inline="javascript"> + layui.use(['febs', 'form', 'formSelects', 'validate', 'treeSelect', 'eleTree'], function () { + var $ = layui.$, + febs = layui.febs, + layer = layui.layer, + formSelects = layui.formSelects, + treeSelect = layui.treeSelect, + form = layui.form, + eleTree = layui.eleTree, + member = [[${member}]], + $view = $('#user-update'), + validate = layui.validate, + _deptTree; + + form.render(); + + initUserValue(); + + formSelects.render(); + + function initUserValue() { + form.val("user-update-form", { + "id": member.id, + "realName": member.realName, + "firstName": member.firstName, + "secondName": member.secondName, + "nation": member.nation, + "idcardNo": member.idcardNo, + "idcardImageFront": member.idcardImageFront, + "idcardImageBack": member.idcardImageBack, + "idcardImageInHand": member.idcardImageInHand + }); + } + + form.on('submit(user-update-form-submit)', function (data) { + febs.post(ctx + 'member/memberDetailConfirm', data.field, function () { + layer.closeAll(); + febs.alert.success('认证成功'); + $('#febs-user').find('#query').click(); + }); + return false; + }); + }); +</script> \ No newline at end of file diff --git a/src/main/resources/templates/febs/views/modules/member/withdrawCoin.html b/src/main/resources/templates/febs/views/modules/member/withdrawCoin.html new file mode 100644 index 0000000..041579e --- /dev/null +++ b/src/main/resources/templates/febs/views/modules/member/withdrawCoin.html @@ -0,0 +1,192 @@ +<div class="layui-fluid layui-anim febs-anim" id="febs-user" lay-title="提币审核管理"> + <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-md10"> + <div class="layui-form-item"> + <div class="layui-inline"> + <div class="layui-input-inline"> + <input type="text" placeholder="手机号/邮箱/邀请码" name="account" autocomplete="off" class="layui-input"> + </div> + </div> + <div class="layui-inline"> + <label class="layui-form-label layui-form-label-sm">状态</label> + <div class="layui-input-inline"> + <select name="statusOption"> + <option value="0"></option> + <option value="1">等待审核</option> + <option value="2">同意</option> + <option value="3">拒绝</option> + </select> + </div> + </div> + <div class="layui-inline"> + <label class="layui-form-label layui-form-label-sm">内部转账</label> + <div class="layui-input-inline"> + <select name="isInsideOption"> + <option value=""></option> + <option value="1">是</option> + <option value="0">否</option> + </select> + </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-blue-plain table-action" id="query"> + <i class="layui-icon"></i> + </div> + <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-green-plain table-action" id="reset"> + <i class="layui-icon"></i> + </div> + </div> + </div> + </form> + <table lay-filter="userTable" lay-data="{id: 'userTable'}"></table> + </div> + </div> + </div> + </div> +</div> +<!-- 表格字段状态格式化 start --> +<script type="text/html" id="isInside-table"> + {{# + var isInside = { + Y: {title: '是' , color: 'red'}, + N: {title: '否' , color: 'green'}, + }[d.isInside]; + }} + <span class="layui-badge febs-tag-{{isInside.color}}">{{ isInside.title }}</span> +</script> +<script type="text/html" id="status-table"> + {{# + var status = { + 1: {title: '等待审核' , color: 'blue'}, + 2: {title: '同意', color: 'green'}, + 3: {title: '拒绝' , color: 'red'} + }[d.status]; + }} + <span class="layui-badge febs-tag-{{status.color}}">{{ status.title }}</span> +</script> + +<!-- 表格字段状态格式化 start --> + +<!-- 表格操作栏 start --> +<script type="text/html" id="user-option"> + <span shiro:lacksPermission="user:view,user:update,user:delete"> + <span class="layui-badge-dot febs-bg-orange"></span> 无权限 + </span> + <a lay-event="confirm" shiro:hasPermission="user:delete">确认</a> + <i class="layui-icon febs-edit-area febs-blue"></i> + <a lay-event="cancel" shiro:hasPermission="user:delete">拒绝</a> +</script> +<!-- 表格操作栏 end --> +<script data-th-inline="none" type="text/javascript"> + // 引入组件并初始化 + layui.use(['dropdown', 'jquery', 'laydate', 'form', 'table', 'febs', 'treeSelect'], function () { + var $ = layui.jquery, + laydate = layui.laydate, + febs = layui.febs, + form = layui.form, + table = layui.table, + treeSelect = layui.treeSelect, + dropdown = layui.dropdown, + $view = $('#febs-user'), + $query = $view.find('#query'), + $reset = $view.find('#reset'), + $searchForm = $view.find('form'), + sortObject = {field: 'createTime', type: null}, + tableIns; + + form.render(); + + // 表格初始化 + initTable(); + + // 下拉框选择器 + treeSelect.render({ + elem: $view.find('#dept'), + type: 'get', + data: ctx + 'dept/select/tree', + placeholder: '请选择', + search: false + }); + + // 初始化表格操作栏各个按钮功能 + table.on('tool(userTable)', function (obj) { + var data = obj.data, + layEvent = obj.event; + if (layEvent === 'confirm') { + febs.modal.confirm('确认', '您是否要进行确认提币操作?', function () { + confirmUsers(data.id); + }); + } + if (layEvent === 'cancel') { + febs.modal.confirm('系统取消', '您是否要进行取消操作?', function () { + cancelUsers(data.id); + }); + } + }); + + function confirmUsers(id) { + febs.get(ctx + 'member/memberWithdrawCoinConfirm/' + id, null, function () { + febs.alert.success('提币成功'); + $query.click(); + }); + } + function cancelUsers(id) { + febs.get(ctx + 'member/memberWithdrawCoinCancel/' + id, null, function () { + febs.alert.success('取消成功'); + $query.click(); + }); + } + + // 查询按钮 + $query.on('click', function () { + var params = $.extend(getQueryParams(), {field: sortObject.field, order: sortObject.type}); + tableIns.reload({where: params, page: {curr: 1}}); + }); + + // 刷新按钮 + $reset.on('click', function () { + $searchForm[0].reset(); + treeSelect.revokeNode('dept'); + sortObject.type = 'null'; + tableIns.reload({where: getQueryParams(), page: {curr: 1}, initSort: sortObject}); + }); + + function initTable() { + tableIns = febs.table.init({ + elem: $view.find('table'), + id: 'userTable', + url: ctx + 'member/memberWithdrawCoin', + cols: [[ + {field: 'phone', title: '手机号码', minWidth: 120,align:'left'}, + {field: 'email', title: '邮箱', minWidth: 200,align:'left'}, + {field: 'memberId', title: '邀请码UID', minWidth: 100,align:'center'}, + {field: 'symbol', title: '币种', minWidth: 100,align:'center'}, + {field: 'amount', title: '提币数量', minWidth: 120,align:'center'}, + {field: 'address', title: '提币地址', minWidth: 300,align:'center'}, + {field: 'feeAmount', title: '提币手续费', minWidth: 100,align:'center'}, + {field: 'createTime', title: '提币时间', minWidth: 180,align:'center'}, + {title: '内部转账', templet: '#isInside-table', minWidth: 100,align:'center'}, + {title: '状态', templet: '#status-table', minWidth: 100,align:'center'}, + {title: '操作', toolbar: '#user-option', minWidth: 150, fixed : 'right'} + ]] + }); + } + + // 获取查询参数 + function getQueryParams() { + return { + account: $searchForm.find('input[name="account"]').val().trim(), + status: $searchForm.find("select[name='statusOption']").val(), + isInside: $searchForm.find("select[name='isInsideOption']").val() + }; + } + + }) +</script> \ No newline at end of file diff --git a/src/main/resources/templates/febs/views/modules/trademanage/contractHoldOrder.html b/src/main/resources/templates/febs/views/modules/trademanage/contractHoldOrder.html new file mode 100644 index 0000000..151cf48 --- /dev/null +++ b/src/main/resources/templates/febs/views/modules/trademanage/contractHoldOrder.html @@ -0,0 +1,105 @@ +<div class="layui-fluid layui-anim febs-anim" id="febs-user" lay-title="当前持仓"> + <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-md10"> + <div class="layui-form-item"> + <div class="layui-inline"> + <label class="layui-form-label layui-form-label-sm">用户名</label> + <div class="layui-input-inline"> + <input type="text" name="username" 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-blue-plain table-action" id="query"> + <i class="layui-icon"></i> + </div> + <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-green-plain table-action" id="reset"> + <i class="layui-icon"></i> + </div> + <div class="layui-btn layui-btn-sm layui-btn-primary table-action action-more" + shiro:hasAnyPermissions="user:add,user:update,user:password:reset,user:export"> + <i class="layui-icon"></i> + </div> + </div> + </div> + </form> + <table lay-filter="contractHoldOrderTable" lay-data="{id: 'contractHoldOrderTable'}"></table> + </div> + </div> + </div> + </div> +</div> +<script type="text/html" id="user-option"> + <span shiro:lacksPermission="user:view,user:update,user:delete"> + <span class="layui-badge-dot febs-bg-orange"></span> 无权限 + </span> + <a lay-event="detail" shiro:hasPermission="user:view"><i + class="layui-icon febs-edit-area febs-green"></i></a> + <a lay-event="edit" shiro:hasPermission="user:update"><i + class="layui-icon febs-edit-area febs-blue"></i></a> + <a lay-event="del" shiro:hasPermission="user:delete"><i class="layui-icon febs-edit-area febs-red"></i></a> +</script> +<script data-th-inline="none" type="text/javascript"> + layui.use(['dropdown', 'jquery', 'laydate', 'form', 'table', 'febs', 'treeSelect'], function () { + var $ = layui.jquery, + laydate = layui.laydate, + febs = layui.febs, + form = layui.form, + table = layui.table, + treeSelect = layui.treeSelect, + dropdown = layui.dropdown, + $view = $('#febs-user'), + $query = $view.find('#query'), + $reset = $view.find('#reset'), + $searchForm = $view.find('form'), + sortObject = {field: 'createTime', type: null}, + tableIns, + createTimeFrom, + createTimeTo; + + form.render(); + + initTable(); + + function initTable() { + tableIns = febs.table.init({ + elem: $view.find('table'), + id: 'contractHoldOrderTable', + url: ctx + 'contractHoldOrder/getList', + cols: [[ + {type: 'checkbox'}, + {field: 'memberId', title: 'uId', minWidth: 100}, + {field: 'memberId', title: '用户账号', minWidth: 100}, + {field: 'symbol', title: '币种', minWidth: 100}, + {field: 'tradeType', title: '建仓类型', minWidth: 100}, + {field: 'openingPrice', title: '建仓价格', minWidth: 100}, + {field: 'symbolCnt', title: '建仓张数', minWidth: 100} + ]] + }); + } + + /* function getQueryParams() { + var createTime = $searchForm.find('input[name="createTime"]').val(); + if (createTime) { + createTimeFrom = createTime.split(' - ')[0]; + createTimeTo = createTime.split(' - ')[1]; + } + return { + createTimeFrom: createTimeFrom, + createTimeTo: createTimeTo, + username: $searchForm.find('input[name="username"]').val().trim(), + status: $searchForm.find("select[name='status']").val(), + sex: $searchForm.find("select[name='sex']").val(), + mobile: $searchForm.find("input[name='mobile']").val().trim(), + deptId: $searchForm.find("input[name='dept']").val().trim(), + invalidate_ie_cache: new Date() + }; + } */ + }) +</script> \ No newline at end of file -- Gitblit v1.9.1