From 4fe1740285612508139075b2df37c7d8c2dd112c Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Tue, 08 Nov 2022 14:11:47 +0800
Subject: [PATCH] 20221021

---
 src/main/java/cc/mrbird/febs/dapp/controller/ViewWalletCoinController.java    |   29 ++
 src/main/java/cc/mrbird/febs/dapp/mapper/DappWalletCoinDao.java               |   28 ++
 src/main/java/cc/mrbird/febs/dapp/service/impl/AdminOperationServiceImpl.java |  118 +++++++++
 src/main/java/cc/mrbird/febs/dapp/entity/MemberCoinWithdrawEntity.java        |   66 +++++
 src/main/java/cc/mrbird/febs/dapp/mapper/MemberCoinWithdrawDao.java           |   15 +
 src/main/java/cc/mrbird/febs/dapp/controller/AdminWalletCoinController.java   |   64 ++++
 src/main/java/cc/mrbird/febs/dapp/service/AdminOperationService.java          |   19 +
 src/main/java/cc/mrbird/febs/dapp/vo/AdminMemberCoinWithdrawVo.java           |   59 ++++
 src/main/resources/templates/febs/views/walletCoin/transferInsideList.html    |  186 ++++++++++++++
 src/main/resources/mapper/dapp/MemberCoinWithdrawMapper.xml                   |   40 +++
 src/main/resources/mapper/dapp/DappWalletCoinDao.xml                          |  113 ++++++++
 11 files changed, 737 insertions(+), 0 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/dapp/controller/AdminWalletCoinController.java b/src/main/java/cc/mrbird/febs/dapp/controller/AdminWalletCoinController.java
new file mode 100644
index 0000000..c9c05bb
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/dapp/controller/AdminWalletCoinController.java
@@ -0,0 +1,64 @@
+package cc.mrbird.febs.dapp.controller;
+
+import cc.mrbird.febs.common.annotation.ControllerEndpoint;
+import cc.mrbird.febs.common.controller.BaseController;
+import cc.mrbird.febs.common.entity.FebsResponse;
+import cc.mrbird.febs.common.entity.QueryRequest;
+import cc.mrbird.febs.common.utils.FebsUtil;
+import cc.mrbird.febs.dapp.entity.MemberCoinWithdrawEntity;
+import cc.mrbird.febs.dapp.mapper.DataDictionaryCustomMapper;
+import cc.mrbird.febs.dapp.service.AdminOperationService;
+import cc.mrbird.febs.system.entity.User;
+import cc.mrbird.febs.system.service.IUserService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.constraints.NotNull;
+import java.util.Map;
+
+@Slf4j
+@Validated
+@RestController
+@RequiredArgsConstructor
+@RequestMapping(value = "/admin/walletCoin")
+public class AdminWalletCoinController extends BaseController {
+
+    private final DataDictionaryCustomMapper dataDictionaryCustomMapper;
+    private final AdminOperationService adminOperationService;
+    private final IUserService userService;
+
+    /**
+     * IGT获取提现转账列表
+     */
+    @GetMapping("findWithdrawInPage")
+    public FebsResponse findWithdrawInPage(MemberCoinWithdrawEntity memberCoinWithdrawEntity, QueryRequest request) {
+//        User user = super.getCurrentUser();
+        User currentUser = FebsUtil.getCurrentUser();
+        if (currentUser.getDeptId() == null) {
+            memberCoinWithdrawEntity.setCurrentUser(currentUser.getUserId());
+        }
+        Map<String, Object> data = getDataTable(adminOperationService.findMemberWithdrawCoinAllOneInPage(memberCoinWithdrawEntity, request));
+        return new FebsResponse().success().data(data);
+    }
+
+    /**
+     * IGT获取提现转账列表-同意
+     */
+    @GetMapping("agreeWithdraw/{id}")
+    @ControllerEndpoint(operation = "IGT获取提现转账列表-同意", exceptionMessage = "操作失败")
+    public FebsResponse agreeWithdraw(@NotNull(message = "{required}") @PathVariable Long id) {
+        return adminOperationService.agreeWithdraw(id);
+    }
+
+    /**
+     * IGT获取提现转账列表-拒绝
+     */
+    @GetMapping("disagreeWithdraw/{id}")
+    @ControllerEndpoint(operation = "IGT获取提现转账列表-拒绝", exceptionMessage = "操作失败")
+    public FebsResponse disagreeWithdraw(@NotNull(message = "{required}") @PathVariable Long id) {
+        return adminOperationService.disagreeWithdraw(id);
+    }
+
+}
diff --git a/src/main/java/cc/mrbird/febs/dapp/controller/ViewWalletCoinController.java b/src/main/java/cc/mrbird/febs/dapp/controller/ViewWalletCoinController.java
new file mode 100644
index 0000000..521f4bd
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/dapp/controller/ViewWalletCoinController.java
@@ -0,0 +1,29 @@
+package cc.mrbird.febs.dapp.controller;
+
+import cc.mrbird.febs.common.entity.FebsConstant;
+import cc.mrbird.febs.common.utils.FebsUtil;
+import cc.mrbird.febs.dapp.mapper.DataDictionaryCustomMapper;
+import lombok.RequiredArgsConstructor;
+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;
+
+@Controller("walletCoinView")
+@RequestMapping(FebsConstant.VIEW_PREFIX + "walletCoinView")
+@RequiredArgsConstructor
+public class ViewWalletCoinController {
+
+    private final DataDictionaryCustomMapper dataDictionaryCustomMapper;
+
+    /**
+     * 提现转账-列表
+     * @return
+     */
+    @GetMapping("transferInsideList")
+    @RequiresPermissions("transferInsideList:view")
+    public String newsInfoList() {
+        return FebsUtil.view("walletCoin/transferInsideList");
+    }
+
+}
diff --git a/src/main/java/cc/mrbird/febs/dapp/entity/MemberCoinWithdrawEntity.java b/src/main/java/cc/mrbird/febs/dapp/entity/MemberCoinWithdrawEntity.java
new file mode 100644
index 0000000..b96e243
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/dapp/entity/MemberCoinWithdrawEntity.java
@@ -0,0 +1,66 @@
+package cc.mrbird.febs.dapp.entity;
+
+import cc.mrbird.febs.common.entity.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 会员提币表
+ */
+@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;
+    /**
+     * 状态 1进行中 2同意 3拒绝
+     */
+    private int status;
+    public static final int STATUS_DOING = 1;
+    public static final int STATUS_YES = 2;
+    public static final int STATUS_NO = 3;
+    /**
+     * 是否内部转账 Y-是N-不是
+     */
+    private String isInside;
+    public static final String ISINSIDE_YES = "Y";
+    public static final String ISINSIDE_NO = "N";
+
+    private String label;
+
+    private String tag;
+
+    /**
+     * 后台操作用户的标识
+     */
+    @TableField(exist = false)
+    private String description;
+    
+    
+
+}
diff --git a/src/main/java/cc/mrbird/febs/dapp/mapper/DappWalletCoinDao.java b/src/main/java/cc/mrbird/febs/dapp/mapper/DappWalletCoinDao.java
index 2e5dc89..6ed07d4 100644
--- a/src/main/java/cc/mrbird/febs/dapp/mapper/DappWalletCoinDao.java
+++ b/src/main/java/cc/mrbird/febs/dapp/mapper/DappWalletCoinDao.java
@@ -1,10 +1,14 @@
 package cc.mrbird.febs.dapp.mapper;
 
+import cc.mrbird.febs.dapp.entity.DappMemberEntity;
 import cc.mrbird.febs.dapp.entity.DappWalletCoinEntity;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.apache.ibatis.annotations.Param;
+
+import java.math.BigDecimal;
+import java.util.List;
 
 public interface DappWalletCoinDao extends BaseMapper<DappWalletCoinEntity> {
 
@@ -13,4 +17,28 @@
     IPage<DappWalletCoinEntity> selectInPage(@Param("record") DappWalletCoinEntity walletCoin, Page<DappWalletCoinEntity> page);
 
     int updateWithLock(@Param("record") DappWalletCoinEntity dappWalletCoinEntity);
+
+    Integer addAvailableAndDelFrozenById(@Param("id") Long id, @Param("balance") BigDecimal balance);
+
+    Integer addFrozenAndDelAvailableById(@Param("id") Long id, @Param("balance")  BigDecimal amount);
+
+    Integer delTotalAndDelFrozenById(@Param("id") Long id, @Param("balance")  BigDecimal amount);
+
+    Integer addTotalAndaddAvailableById(@Param("id") Long id, @Param("balance")  BigDecimal amount);
+
+    Integer delAvailableDelTotalById(@Param("id") Long id, @Param("balance")  BigDecimal amount);
+
+    DappWalletCoinEntity selectWalletCoinBymIdAndCode(@Param("memberId") Long memberId, @Param("walletCode") String walletCode);
+
+    int updateFrozenBalance(@Param("memberId") Long memberId, @Param("id") Long id, @Param("amount") BigDecimal amount);
+
+    int subFrozenBalance(@Param("memberId") Long memberId, @Param("id") Long id, @Param("amount") BigDecimal amount);
+
+    int updateBlockBalance(@Param("id") Long id, @Param("availableAmount") BigDecimal availableAmount, @Param("earlyAmount") BigDecimal earlyAmount, @Param("blockNumber") Integer blockNumber);
+
+    int reduceFrozenBalance(@Param("id") Long id, @Param("amount") BigDecimal amount);
+
+    List<DappMemberEntity> selectTotalAmount();
+
+    void addTotalAndaddAvailableByMemberId(@Param("memberId")Long id, @Param("balance")BigDecimal multiply);
 }
diff --git a/src/main/java/cc/mrbird/febs/dapp/mapper/MemberCoinWithdrawDao.java b/src/main/java/cc/mrbird/febs/dapp/mapper/MemberCoinWithdrawDao.java
new file mode 100644
index 0000000..02e4119
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/dapp/mapper/MemberCoinWithdrawDao.java
@@ -0,0 +1,15 @@
+package cc.mrbird.febs.dapp.mapper;
+
+import cc.mrbird.febs.dapp.entity.MemberCoinWithdrawEntity;
+import cc.mrbird.febs.dapp.vo.AdminMemberCoinWithdrawVo;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.apache.ibatis.annotations.Param;
+
+public interface MemberCoinWithdrawDao extends BaseMapper<MemberCoinWithdrawEntity> {
+
+    IPage<AdminMemberCoinWithdrawVo> findMemberWithdrawCoinInPage(Page<MemberCoinWithdrawEntity> page, @Param("record")MemberCoinWithdrawEntity memberCoinWithdrawEntity);
+
+    Integer selectByMemberIdAndCreateTime(@Param("memberId")Long memberIdOut, @Param("createTime")String createTime, @Param("type")String type);
+}
diff --git a/src/main/java/cc/mrbird/febs/dapp/service/AdminOperationService.java b/src/main/java/cc/mrbird/febs/dapp/service/AdminOperationService.java
new file mode 100644
index 0000000..8d23dc5
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/dapp/service/AdminOperationService.java
@@ -0,0 +1,19 @@
+package cc.mrbird.febs.dapp.service;
+
+import cc.mrbird.febs.common.entity.FebsResponse;
+import cc.mrbird.febs.common.entity.QueryRequest;
+import cc.mrbird.febs.dapp.entity.DappMemberEntity;
+import cc.mrbird.febs.dapp.entity.MemberCoinWithdrawEntity;
+import cc.mrbird.febs.dapp.vo.AdminMemberCoinWithdrawVo;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+public interface AdminOperationService extends IService<DappMemberEntity> {
+
+    IPage<AdminMemberCoinWithdrawVo> findMemberWithdrawCoinAllOneInPage(MemberCoinWithdrawEntity memberCoinWithdrawEntity, QueryRequest request);
+
+    FebsResponse agreeWithdraw(Long id);
+
+    FebsResponse disagreeWithdraw(Long id);
+
+}
diff --git a/src/main/java/cc/mrbird/febs/dapp/service/impl/AdminOperationServiceImpl.java b/src/main/java/cc/mrbird/febs/dapp/service/impl/AdminOperationServiceImpl.java
new file mode 100644
index 0000000..13bf4f4
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/dapp/service/impl/AdminOperationServiceImpl.java
@@ -0,0 +1,118 @@
+package cc.mrbird.febs.dapp.service.impl;
+
+import cc.mrbird.febs.common.entity.FebsResponse;
+import cc.mrbird.febs.common.entity.QueryRequest;
+import cc.mrbird.febs.common.exception.FebsException;
+import cc.mrbird.febs.dapp.entity.DappAccountMoneyChangeEntity;
+import cc.mrbird.febs.dapp.entity.DappMemberEntity;
+import cc.mrbird.febs.dapp.entity.DappWalletCoinEntity;
+import cc.mrbird.febs.dapp.entity.MemberCoinWithdrawEntity;
+import cc.mrbird.febs.dapp.mapper.DappAccountMoneyChangeDao;
+import cc.mrbird.febs.dapp.mapper.DappMemberDao;
+import cc.mrbird.febs.dapp.mapper.DappWalletCoinDao;
+import cc.mrbird.febs.dapp.mapper.MemberCoinWithdrawDao;
+import cc.mrbird.febs.dapp.service.AdminOperationService;
+import cc.mrbird.febs.dapp.vo.AdminMemberCoinWithdrawVo;
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+
+@Service
+@RequiredArgsConstructor
+public class AdminOperationServiceImpl extends ServiceImpl<DappMemberDao, DappMemberEntity> implements AdminOperationService {
+
+    private final MemberCoinWithdrawDao memberCoinWithdrawDao;
+    private final DappWalletCoinDao dappWalletCoinDao;
+    private final DappMemberDao dappMemberDao;
+    private final DappAccountMoneyChangeDao dappAccountMoneyChangeDao;
+
+    @Override
+    public IPage<AdminMemberCoinWithdrawVo> findMemberWithdrawCoinAllOneInPage(MemberCoinWithdrawEntity memberCoinWithdrawEntity, QueryRequest request) {
+        Page<MemberCoinWithdrawEntity> page = new Page<>(request.getPageNum(), request.getPageSize());
+        IPage<AdminMemberCoinWithdrawVo> adminMemberCoinWithdrawVoIPage = memberCoinWithdrawDao.findMemberWithdrawCoinInPage(page, memberCoinWithdrawEntity);
+        return adminMemberCoinWithdrawVoIPage;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public FebsResponse agreeWithdraw(Long id) {
+        MemberCoinWithdrawEntity memberCoinWithdrawEntity = memberCoinWithdrawDao.selectById(id);
+        if(ObjectUtil.isEmpty(memberCoinWithdrawEntity)){
+            throw new FebsException("刷新页面重试");
+        }
+        memberCoinWithdrawEntity.setStatus(MemberCoinWithdrawEntity.STATUS_YES);
+        memberCoinWithdrawDao.updateById(memberCoinWithdrawEntity);
+        //转出账户,总额减少,冻结减少
+        BigDecimal amount = memberCoinWithdrawEntity.getAmount().setScale(4,BigDecimal.ROUND_DOWN);
+        Long memberIdOut = memberCoinWithdrawEntity.getMemberId();
+        DappWalletCoinEntity dappWalletCoinEntityOut = dappWalletCoinDao.selectByMemberId(memberIdOut);
+        dappWalletCoinDao.delTotalAndDelFrozenById(dappWalletCoinEntityOut.getId(),amount);
+
+        String isInside = memberCoinWithdrawEntity.getIsInside();
+        String content = "";
+        Integer type = 0;
+        if(MemberCoinWithdrawEntity.ISINSIDE_NO.equals(isInside)){
+            content = "提现";
+            type = 2;
+        }else{
+            content = "转账";
+            type = 4;
+        }
+        //转出账户生成一条账户资金变化记录
+        DappAccountMoneyChangeEntity dappAccountMoneyChangeEntityOut = new DappAccountMoneyChangeEntity(memberIdOut,
+                dappWalletCoinEntityOut.getTotalAmount().setScale(4,BigDecimal.ROUND_DOWN),
+                amount.negate(),
+                dappWalletCoinEntityOut.getTotalAmount().setScale(4,BigDecimal.ROUND_DOWN).subtract(amount),
+                content,
+                type);
+        dappAccountMoneyChangeDao.insert(dappAccountMoneyChangeEntityOut);
+
+        //转入账户,总额增加,余额增加
+        //转账
+//        if(MemberCoinWithdrawEntity.ISINSIDE_YES.equals(isInside)){
+//            String addressIn = memberCoinWithdrawEntity.getAddress();
+//            DappMemberEntity dappMemberEntityIn = dappMemberDao.selectMemberInfoByInviteId(addressIn);
+//            if(ObjectUtil.isEmpty(dappMemberEntityIn)){
+//                throw new FebsException("系统异常,联系开发人员");
+//            }
+//            DappWalletCoinEntity dappWalletCoinEntityIn = dappWalletCoinDao.selectByMemberId(dappMemberEntityIn.getId());
+//            Integer countIn = dappWalletCoinDao.addTotalAndaddAvailableById(dappWalletCoinEntityIn.getId(), memberCoinWithdrawEntity.getAmount());
+//            if(1 != countIn){
+//                throw new FebsException("系统异常,联系开发人员");
+//            }
+//            //生成流水记录
+//            DappAccountMoneyChangeEntity dappAccountMoneyChangeEntityIn = new DappAccountMoneyChangeEntity(dappMemberEntityIn.getId(),
+//                    dappWalletCoinEntityIn.getTotalAmount().setScale(4,BigDecimal.ROUND_DOWN),
+//                    amount,
+//                    dappWalletCoinEntityIn.getTotalAmount().setScale(4,BigDecimal.ROUND_DOWN).add(amount),
+//                    "转账",
+//                    4);
+//            dappAccountMoneyChangeDao.insert(dappAccountMoneyChangeEntityIn);
+//        }
+        return new FebsResponse().success();
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public FebsResponse disagreeWithdraw(Long id) {
+        MemberCoinWithdrawEntity memberCoinWithdrawEntity = memberCoinWithdrawDao.selectById(id);
+        if(ObjectUtil.isEmpty(memberCoinWithdrawEntity)){
+            throw new FebsException("刷新页面重试");
+        }
+        memberCoinWithdrawEntity.setStatus(MemberCoinWithdrawEntity.STATUS_NO);
+        memberCoinWithdrawDao.updateById(memberCoinWithdrawEntity);
+
+        DappWalletCoinEntity dappWalletCoinEntity = dappWalletCoinDao.selectByMemberId(memberCoinWithdrawEntity.getMemberId());
+        Integer count = dappWalletCoinDao.addFrozenAndDelAvailableById(dappWalletCoinEntity.getId(),memberCoinWithdrawEntity.getAmount());
+        if(1 != count){
+            throw new FebsException("系统异常,联系开发人员");
+        }
+        return new FebsResponse().success();
+    }
+}
diff --git a/src/main/java/cc/mrbird/febs/dapp/vo/AdminMemberCoinWithdrawVo.java b/src/main/java/cc/mrbird/febs/dapp/vo/AdminMemberCoinWithdrawVo.java
new file mode 100644
index 0000000..f287fcd
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/dapp/vo/AdminMemberCoinWithdrawVo.java
@@ -0,0 +1,59 @@
+package cc.mrbird.febs.dapp.vo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+public class AdminMemberCoinWithdrawVo {
+	
+	@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 username;
+	/**
+	 * 地址
+	 */
+	private String address;
+	/**
+	 * 提币数量
+	 */
+	private BigDecimal amount;
+	/**
+	 * 到账金额
+	 */
+	private BigDecimal realAmount;
+	/**
+	 * 手续费
+	 */
+	private BigDecimal feeAmount;
+	/**
+	 * 币种
+	 */
+	private String symbol;
+	/**
+	 * 状态
+	 */
+	private int status;
+	private String label;
+	private String tag;
+	
+	/**
+	 * 是否内部转账 Y-是N-不是
+	 */
+	private String isInside;
+
+	/**
+	 * 收款方
+	 */
+	private String usernameIn;
+	
+}
diff --git a/src/main/resources/mapper/dapp/DappWalletCoinDao.xml b/src/main/resources/mapper/dapp/DappWalletCoinDao.xml
index 757027e..5e7fbeb 100644
--- a/src/main/resources/mapper/dapp/DappWalletCoinDao.xml
+++ b/src/main/resources/mapper/dapp/DappWalletCoinDao.xml
@@ -27,4 +27,117 @@
                 version=version+1
         where id=#{record.id} and version=#{record.version}
     </update>
+
+    <update id="addAvailableAndDelFrozenById">
+        update dapp_wallet_coin
+        set
+            available_amount = available_amount + #{balance},
+            frozen_amount = frozen_amount - #{balance}
+        where
+            id = #{id}
+          and frozen_amount - #{balance} <![CDATA[ >= ]]> 0
+    </update>
+
+    <update id="addFrozenAndDelAvailableById">
+        update dapp_wallet_coin
+        set
+            available_amount = available_amount - #{balance},
+            frozen_amount = frozen_amount + #{balance}
+        where
+            id = #{id}
+          and available_amount - #{balance} <![CDATA[ >= ]]> 0
+    </update>
+
+    <update id="delTotalAndDelFrozenById">
+        update dapp_wallet_coin
+        set
+            total_amount = total_amount - #{balance},
+            frozen_amount = frozen_amount - #{balance}
+        where
+            id = #{id}
+          and total_amount - #{balance} <![CDATA[ >= ]]> 0
+          and frozen_amount - #{balance} <![CDATA[ >= ]]> 0
+    </update>
+
+    <update id="addTotalAndaddAvailableById">
+        update dapp_wallet_coin
+        set
+            total_amount = total_amount + #{balance},
+            available_amount = available_amount + #{balance}
+        where
+            id = #{id}
+    </update>
+
+    <update id="delAvailableDelTotalById">
+        update dapp_wallet_coin
+        set
+            total_amount = total_amount - #{balance},
+            available_amount = available_amount - #{balance}
+        where
+            id = #{id}
+          and total_amount - #{balance} <![CDATA[ >= ]]> 0
+    </update>
+
+
+    <select id="selectWalletCoinBymIdAndCode" resultType="cc.mrbird.febs.dapp.entity.DappWalletCoinEntity">
+        select * from dapp_wallet_coin where member_id = #{memberId} and wallet_code = #{walletCode}
+    </select>
+
+    <update id="updateFrozenBalance" parameterType="map">
+        UPDATE dapp_wallet_coin
+        SET available_amount = available_amount - #{amount},
+            frozen_amount = frozen_amount + #{amount}
+        WHERE
+            id = #{id}
+          AND member_id = #{memberId}
+    </update>
+
+    <update id="subFrozenBalance" parameterType="map">
+        UPDATE dapp_wallet_coin
+        SET available_amount = available_amount + #{amount},
+            frozen_amount = frozen_amount - #{amount}
+        WHERE
+            id = #{id}
+          AND member_id = #{memberId}
+    </update>
+
+
+    <update id="updateBlockBalance">
+        update dapp_wallet_coin
+        set
+            available_amount = IFNULL(available_amount, 0) + #{availableAmount},
+            total_amount = IFNULL(total_amount, 0) + #{availableAmount},
+            early_amount = IFNULL(early_amount, 0) + #{earlyAmount},
+            block_number  = IFNULL(block_number, 0) + #{blockNumber}
+        where id=#{id}
+    </update>
+
+    <update id="reduceFrozenBalance">
+        update dapp_wallet_coin
+        set frozen_amount = frozen_amount - #{amount},
+            total_amount = total_amount - #{amount}
+        where id=#{id}
+    </update>
+
+    <select id="selectTotalAmount" resultType="cc.mrbird.febs.dapp.entity.DappMemberEntity">
+        select
+            b.id,
+            b.invite_id,
+            b.referer_id,
+            b.identity,
+            b.referer_ids
+        from
+            dapp_wallet_coin a
+                inner join dapp_member b on a.member_id = b.id
+        where a.total_amount <![CDATA[ >= ]]> 51
+    </select>
+
+    <update id="addTotalAndaddAvailableByMemberId">
+        update dapp_wallet_coin
+        set
+            total_amount = total_amount + #{balance},
+            available_amount = available_amount + #{balance}
+        where
+            member_id = #{memberId}
+    </update>
 </mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/dapp/MemberCoinWithdrawMapper.xml b/src/main/resources/mapper/dapp/MemberCoinWithdrawMapper.xml
new file mode 100644
index 0000000..859a9dc
--- /dev/null
+++ b/src/main/resources/mapper/dapp/MemberCoinWithdrawMapper.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cc.mrbird.febs.dapp.mapper.MemberCoinWithdrawDao">
+
+    <select id="findMemberWithdrawCoinInPage" resultType="cc.mrbird.febs.dapp.vo.AdminMemberCoinWithdrawVo">
+        SELECT
+        s.*
+        FROM
+        member_coin_withdraw s
+        left join dapp_member m on m.id = s.member_id
+        <where>
+            <if test="record != null" >
+                <if test="record.currentUser != null">
+                    and m.referer_id = (select invite_id from dapp_user_member_relate where user_id=#{record.currentUser})
+                </if>
+                <if test="record.isInside!=null and record.isInside!=''">
+                    and s.is_inside= #{record.isInside}
+                </if>
+                <if test="record.address!=null and record.address!=''">
+                    and s.address= #{record.address}
+                </if>
+                <if test="record.status!=null and record.status!=''">
+                    and s.status= #{record.status}
+                </if>
+            </if>
+        </where>
+        order by s.create_time desc
+    </select>
+
+    <select id="selectByMemberIdAndCreateTime" resultType="java.lang.Integer">
+        SELECT
+        count (a.id)
+        FROM
+        member_coin_withdraw a
+        where a.member_id = #{memberId}
+            and date_format(a.create_time, '%Y-%m-%d') = #{createTime}
+            and a.is_inside = #{type}
+    </select>
+
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/templates/febs/views/walletCoin/transferInsideList.html b/src/main/resources/templates/febs/views/walletCoin/transferInsideList.html
new file mode 100644
index 0000000..256cbd3
--- /dev/null
+++ b/src/main/resources/templates/febs/views/walletCoin/transferInsideList.html
@@ -0,0 +1,186 @@
+<div class="layui-fluid layui-anim febs-anim" id="febs-member-withDraw" 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">-->
+<!--                                            <select name="isInsideOption">-->
+<!--                                                <option value=""></option>-->
+<!--                                                <option value="Y">内部转账</option>-->
+<!--                                                <option value="N">提现</option>-->
+<!--                                            </select>-->
+<!--                                        </div>-->
+<!--                                    </div>-->
+
+                                    <div class="layui-inline">
+                                        <label class="layui-form-label layui-form-label-sm">地址</label>
+                                        <div class="layui-input-inline">
+                                            <input type="text" name="address" 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>
+                            </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">&#xe848;</i>
+                                </div>
+                                <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-green-plain table-action" id="reset">
+                                    <i class="layui-icon">&#xe79b;</i>
+                                </div>
+                            </div>
+                        </div>
+                    </form>
+                    <table lay-filter="withdrawTable" lay-data="{id: 'withdrawTable'}"></table>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+<style>
+    .layui-table-cell {
+        height: auto !important;
+    }
+</style>
+<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,
+            dropdown = layui.dropdown,
+            $view = $('#febs-member-withDraw'),
+            $query = $view.find('#query'),
+            $reset = $view.find('#reset'),
+            $searchForm = $view.find('form'),
+            sortObject = {field: 'createTime', type: null},
+            tableIns;
+
+        form.render();
+
+        initTable();
+
+        table.on('tool(withdrawTable)', function (obj) {
+            var data = obj.data,
+                layEvent = obj.event;
+            if (layEvent === 'agree') {
+                febs.modal.confirm('同意', '是否同意操作?', function () {
+                    agree(data.id);
+                });
+            }
+            if (layEvent === 'disagree') {
+                febs.modal.confirm('拒绝', '是否拒绝操作?', function () {
+                    disagree(data.id);
+                });
+            }
+        });
+
+        function agree(id) {
+            febs.get(ctx + 'admin/walletCoin/agreeWithdraw/' + id, null, function () {
+                febs.alert.success('操作成功');
+                $query.click();
+            });
+        }
+        function disagree(id) {
+            febs.get(ctx + 'admin/walletCoin/disagreeWithdraw/' + 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();
+            tableIns.reload({where: getQueryParams(), page: {curr: 1}});
+        });
+
+        function initTable() {
+            tableIns = febs.table.init({
+                elem: $view.find('table'),
+                id: 'withdrawTable',
+                url: ctx + 'admin/walletCoin/findWithdrawInPage',
+                totalRow: true,
+                cols: [[
+                    {field: 'address', title: '提币地址',
+                        templet: function (d) {
+                            if (d.isInside === 'Y') {
+                                return ''
+                            } else if (d.isInside === 'N') {
+                                return '<span>'+d.address+'</span>'
+                            }else{
+                                return ''
+                            }
+                        }, minWidth: 300, align: 'center'},
+                    {field: 'isInside', title: '类型',
+                        templet: function (d) {
+                            if (d.isInside === 'Y') {
+                                return '<span>内部转账</span>'
+                            } else if (d.isInside === 'N') {
+                                return '<span>提现</span>'
+                            }else{
+                                return
+                            }
+                        }, minWidth: 100, align: 'center'},
+                    {field: 'symbol', title: '币种', minWidth: 100, align: 'center'},
+                    {field: 'amount', title: '提币数量', minWidth: 120, align: 'center', totalRow: true},
+                    {field: 'feeAmount', title: '手续费', minWidth: 120, align: 'center', totalRow: true},
+                    // {field: 'realAmount', title: '到账数量', minWidth: 120, align: 'center', totalRow: true},
+                    {field: 'status', title: '状态',
+                        templet: function (d) {
+                            if (d.status === 1) {
+                                return '<span>进行中</span>'
+                            } else if (d.status === 2) {
+                                return '<span>同意</span>'
+                            }else if (d.status === 3) {
+                                return '<span>拒绝</span>'
+                            }else{
+                                return ''
+                            }
+                        }, minWidth: 120, align: 'center', totalRow: true},
+                    {field: 'createTime', title: '提币时间', minWidth: 180, align: 'center'},
+                    {title: '操作',
+                        templet: function (d) {
+                            if(d.status === 1){
+                                return '<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="agree" shiro:hasPermission="user:update">同意</button>'
+                                    +'<button class="layui-btn layui-btn-danger layui-btn-xs layui-btn-danger" lay-event="disagree" shiro:hasPermission="user:update">拒绝</button>'
+                            }else{
+                                return ''
+                            }
+
+
+                        },minWidth: 120,align:'center'}
+                ]]
+            });
+        }
+
+        function getQueryParams() {
+            return {
+                status: $searchForm.find("select[name='statusOption']").val(),
+                address: $searchForm.find('input[name="address"]').val().trim(),
+                // isInside: $searchForm.find("select[name='isInsideOption']").val()
+            };
+        }
+
+    })
+</script>

--
Gitblit v1.9.1