From be6f79a634727b59c6a40e3fffa989b5de1b0ec7 Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Wed, 24 Nov 2021 16:54:01 +0800
Subject: [PATCH] Merge branch 'fish' of http://120.27.238.55:7000/r/exchange into fish

---
 src/main/java/com/xcong/excoin/modules/fish/dao/CannonAccountMoneyChangeDao.java      |    7 
 src/main/java/com/xcong/excoin/modules/fish/dao/MemberAccountGoldDao.java             |   17 +
 src/main/java/com/xcong/excoin/modules/fish/dto/CannonExchangeDto.java                |   17 +
 src/main/resources/mapper/fish/MemberAccountGoldDao.xml                               |   35 ++
 src/main/resources/mapper/fish/CannonSettingDao.xml                                   |   17 +
 src/main/java/com/xcong/excoin/modules/fish/controller/MemberCannonController.java    |   95 ++++++
 src/main/java/com/xcong/excoin/modules/fish/dto/GoldExchangeDto.java                  |   18 +
 src/main/resources/mapper/fish/CannonGameRecordDao.xml                                |    6 
 src/main/java/com/xcong/excoin/modules/fish/dao/CannonSettingDao.java                 |   20 +
 src/main/java/com/xcong/excoin/modules/fish/service/impl/MemberCannonServiceImpl.java |  263 +++++++++++++++++
 src/main/java/com/xcong/excoin/modules/fish/dto/GetCannonsDto.java                    |   23 +
 src/main/java/com/xcong/excoin/modules/fish/vo/OwnCannonVo.java                       |   26 +
 src/main/java/com/xcong/excoin/modules/fish/dto/FishingDto.java                       |   21 +
 src/main/java/com/xcong/excoin/modules/fish/entity/CannonAccountMoneyChange.java      |   30 ++
 src/main/java/com/xcong/excoin/modules/fish/dto/CoinGoldExchangeDto.java              |   22 +
 src/main/java/com/xcong/excoin/modules/fish/entity/CannonOwnRecord.java               |   27 +
 src/main/java/com/xcong/excoin/modules/fish/vo/GoldAccountVo.java                     |   20 +
 src/main/java/com/xcong/excoin/modules/fish/entity/MemberAccountGold.java             |   24 +
 src/main/java/com/xcong/excoin/modules/fish/entity/CannonGameRecord.java              |   29 +
 src/main/java/com/xcong/excoin/modules/fish/entity/CannonExchangeRatio.java           |   20 +
 src/main/java/com/xcong/excoin/modules/fish/vo/CannonSettingVo.java                   |   24 +
 src/main/java/com/xcong/excoin/modules/fish/dao/CannonGameRecordDao.java              |    7 
 src/main/java/com/xcong/excoin/modules/fish/service/MemberCannonService.java          |   28 +
 src/main/java/com/xcong/excoin/modules/fish/entity/CannonSetting.java                 |   25 +
 src/main/java/com/xcong/excoin/modules/fish/dao/CannonOwnRecordDao.java               |   17 +
 src/main/resources/mapper/fish/CannonOwnRecordDao.xml                                 |   20 +
 src/main/resources/mapper/fish/CannonAccountMoneyChangeDao.xml                        |    6 
 27 files changed, 864 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/xcong/excoin/modules/fish/controller/MemberCannonController.java b/src/main/java/com/xcong/excoin/modules/fish/controller/MemberCannonController.java
new file mode 100644
index 0000000..eb2af90
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/fish/controller/MemberCannonController.java
@@ -0,0 +1,95 @@
+package com.xcong.excoin.modules.fish.controller;
+
+import com.xcong.excoin.common.response.Result;
+import com.xcong.excoin.modules.coin.parameter.vo.MemberWalletAgentInfoVo;
+import com.xcong.excoin.modules.coin.parameter.vo.OrderWalletCoinDealVo;
+import com.xcong.excoin.modules.fish.dto.*;
+import com.xcong.excoin.modules.fish.service.MemberCannonService;
+import com.xcong.excoin.modules.fish.vo.CannonSettingVo;
+import com.xcong.excoin.modules.fish.vo.GoldAccountVo;
+import com.xcong.excoin.modules.fish.vo.OwnCannonVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.annotations.ApiResponses;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+
+@Slf4j
+@Api(value = "MemberCannonController", tags = "炮台接口类")
+@RestController
+@RequestMapping(value = "/api/account")
+public class MemberCannonController {
+
+    @Resource
+    private MemberCannonService memberCannonService;
+
+    /**
+     * 获取金币账户
+     */
+    @ApiOperation(value="获取金币账户", notes="获取金币账户")
+    @ApiResponses({@ApiResponse( code = 200, message = "success", response = GoldAccountVo.class)})
+    @GetMapping(value="/getGoldAccount")
+    public Result getGoldAccount() {
+        return memberCannonService.getGoldAccount();
+    }
+
+    /**
+     * 代币金币互转
+     */
+    @ApiOperation(value = "代币金币互转")
+    @PostMapping(value = "/coinGoldExchange")
+    public Result coinGoldExchange(@RequestBody CoinGoldExchangeDto coinGoldExchangeDto) {
+        return memberCannonService.coinGoldExchange(coinGoldExchangeDto);
+    }
+
+    /**
+     * USDT购买金币
+     */
+//    @ApiOperation(value = "USDT购买金币")
+//    @PostMapping(value = "/goldExchange")
+//    public Result goldExchange(@RequestBody GoldExchangeDto goldExchangeDto) {
+//        return memberCannonService.goldExchange(goldExchangeDto);
+//    }
+
+    /**
+     * 获取大炮列表
+     */
+    @ApiOperation(value = "获取大炮列表")
+    @ApiResponses({@ApiResponse( code = 200, message = "success", response = CannonSettingVo.class)})
+    @PostMapping(value = "/getCannons")
+    public Result getCannons(@RequestBody GetCannonsDto getCannonsDto) {
+        return memberCannonService.getCannons(getCannonsDto);
+    }
+
+    /**
+     *兑换大炮
+     */
+    @ApiOperation(value = "兑换大炮")
+    @PostMapping(value = "/cannonExchange")
+    public Result cannonExchange(@RequestBody CannonExchangeDto cannonExchangeDto) {
+        return memberCannonService.cannonExchange(cannonExchangeDto);
+    }
+
+    /**
+     * 获取用户拥有的炮台
+     */
+    @ApiOperation(value="获取用户拥有的炮台", notes="获取用户拥有的炮台")
+    @ApiResponses({@ApiResponse( code = 200, message = "success", response = OwnCannonVo.class)})
+    @GetMapping(value="/getOwnCannon")
+    public Result getOwnCannon() {
+        return memberCannonService.getOwnCannon();
+    }
+
+    /**
+     * 捕鱼
+     */
+    @ApiOperation(value = "捕鱼")
+    @PostMapping(value = "/fishing")
+    public Result fishing(@RequestBody FishingDto fishingDto) {
+        return memberCannonService.fishing(fishingDto);
+    }
+
+}
diff --git a/src/main/java/com/xcong/excoin/modules/fish/dao/CannonAccountMoneyChangeDao.java b/src/main/java/com/xcong/excoin/modules/fish/dao/CannonAccountMoneyChangeDao.java
new file mode 100644
index 0000000..2aa5da3
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/fish/dao/CannonAccountMoneyChangeDao.java
@@ -0,0 +1,7 @@
+package com.xcong.excoin.modules.fish.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.xcong.excoin.modules.fish.entity.CannonAccountMoneyChange;
+
+public interface CannonAccountMoneyChangeDao extends BaseMapper<CannonAccountMoneyChange> {
+}
diff --git a/src/main/java/com/xcong/excoin/modules/fish/dao/CannonGameRecordDao.java b/src/main/java/com/xcong/excoin/modules/fish/dao/CannonGameRecordDao.java
new file mode 100644
index 0000000..f4a8735
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/fish/dao/CannonGameRecordDao.java
@@ -0,0 +1,7 @@
+package com.xcong.excoin.modules.fish.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.xcong.excoin.modules.fish.entity.CannonGameRecord;
+
+public interface CannonGameRecordDao extends BaseMapper<CannonGameRecord> {
+}
diff --git a/src/main/java/com/xcong/excoin/modules/fish/dao/CannonOwnRecordDao.java b/src/main/java/com/xcong/excoin/modules/fish/dao/CannonOwnRecordDao.java
new file mode 100644
index 0000000..722e17b
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/fish/dao/CannonOwnRecordDao.java
@@ -0,0 +1,17 @@
+package com.xcong.excoin.modules.fish.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.xcong.excoin.modules.fish.entity.CannonOwnRecord;
+import com.xcong.excoin.modules.fish.vo.OwnCannonVo;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface CannonOwnRecordDao extends BaseMapper<CannonOwnRecord> {
+
+    List<CannonOwnRecord> selectCannonOwnRecordsByMemberIdAndCannonCode(@Param("memberId")Long memberId, @Param("code")String code);
+
+    List<OwnCannonVo> selectCannonOwnRecordsByMemberId(@Param("memberId")Long memberId);
+
+    List<CannonOwnRecord> selectCannonOwnRecordsByIdAndMemberId(@Param("id")Long cannonOwnId, @Param("memberId")Long memberId);
+}
diff --git a/src/main/java/com/xcong/excoin/modules/fish/dao/CannonSettingDao.java b/src/main/java/com/xcong/excoin/modules/fish/dao/CannonSettingDao.java
new file mode 100644
index 0000000..14894b6
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/fish/dao/CannonSettingDao.java
@@ -0,0 +1,20 @@
+package com.xcong.excoin.modules.fish.dao;
+
+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.fish.entity.CannonExchangeRatio;
+import com.xcong.excoin.modules.fish.entity.CannonSetting;
+import com.xcong.excoin.modules.fish.vo.CannonSettingVo;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface CannonSettingDao extends BaseMapper<CannonSetting> {
+
+    List<CannonExchangeRatio> selectCannonExchangeRatio();
+
+    IPage<CannonSettingVo> findCannonSettingInPage(Page<CannonSettingVo> page, @Param("cannonSetting")CannonSetting cannonSetting);
+
+    CannonSetting selectCannonSettingByCannonCode(@Param("cannonCode")String cannonCode);
+}
diff --git a/src/main/java/com/xcong/excoin/modules/fish/dao/MemberAccountGoldDao.java b/src/main/java/com/xcong/excoin/modules/fish/dao/MemberAccountGoldDao.java
new file mode 100644
index 0000000..5bc26ca
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/fish/dao/MemberAccountGoldDao.java
@@ -0,0 +1,17 @@
+package com.xcong.excoin.modules.fish.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.xcong.excoin.modules.fish.entity.MemberAccountGold;
+import com.xcong.excoin.modules.fish.vo.GoldAccountVo;
+import org.apache.ibatis.annotations.Param;
+
+import java.math.BigDecimal;
+
+public interface MemberAccountGoldDao extends BaseMapper<MemberAccountGold> {
+
+    MemberAccountGold selectAccountGoldByMemberId(@Param("memberId")Long memberId);
+
+    int updateTotalBalanceAndAvailableBalance(@Param("id") Long id, @Param("availableBalance") BigDecimal availableBalance, @Param("totalBalance") BigDecimal totalBalance, @Param("frozenBalance") BigDecimal frozenBalance);
+
+    GoldAccountVo selectAccountGoldVoByMemberId(Long memberId);
+}
diff --git a/src/main/java/com/xcong/excoin/modules/fish/dto/CannonExchangeDto.java b/src/main/java/com/xcong/excoin/modules/fish/dto/CannonExchangeDto.java
new file mode 100644
index 0000000..b24fe4c
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/fish/dto/CannonExchangeDto.java
@@ -0,0 +1,17 @@
+package com.xcong.excoin.modules.fish.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+@Data
+@ApiModel(value = "CannonExchangeDto", description = "参数类")
+public class CannonExchangeDto {
+
+    @NotNull(message = "ID不能为空")
+    @ApiModelProperty(value = "兑换炮台ID", example = "1")
+    private Long cannonId;
+
+}
diff --git a/src/main/java/com/xcong/excoin/modules/fish/dto/CoinGoldExchangeDto.java b/src/main/java/com/xcong/excoin/modules/fish/dto/CoinGoldExchangeDto.java
new file mode 100644
index 0000000..8404623
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/fish/dto/CoinGoldExchangeDto.java
@@ -0,0 +1,22 @@
+package com.xcong.excoin.modules.fish.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+
+@Data
+@ApiModel(value = "CoinGoldExchangeDto", description = "参数类")
+public class CoinGoldExchangeDto {
+
+    @NotNull(message = "兑换金额不能为空")
+    @ApiModelProperty(value = "兑换金额", example = "100")
+    private BigDecimal balance;
+
+    @NotNull(message = "类型不能为空")
+    @ApiModelProperty(value = "类型", example = "1:金币兑换代币 2:代币兑换金币")
+    private Integer type;
+
+}
diff --git a/src/main/java/com/xcong/excoin/modules/fish/dto/FishingDto.java b/src/main/java/com/xcong/excoin/modules/fish/dto/FishingDto.java
new file mode 100644
index 0000000..23e9d52
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/fish/dto/FishingDto.java
@@ -0,0 +1,21 @@
+package com.xcong.excoin.modules.fish.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+@Data
+@ApiModel(value = "FishingDto", description = "参数类")
+public class FishingDto {
+
+
+    @NotNull(message = "炮塔不能为空")
+    @ApiModelProperty(value = "炮塔ID", example = "100")
+    private Long cannonOwnId;
+
+    @ApiModelProperty(value = "获得金币", example = "100")
+    private Integer goldWin;
+
+}
diff --git a/src/main/java/com/xcong/excoin/modules/fish/dto/GetCannonsDto.java b/src/main/java/com/xcong/excoin/modules/fish/dto/GetCannonsDto.java
new file mode 100644
index 0000000..3f0db2f
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/fish/dto/GetCannonsDto.java
@@ -0,0 +1,23 @@
+package com.xcong.excoin.modules.fish.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+
+@Data
+@ApiModel(value = "GetCannonsDto", description = "参数类")
+public class GetCannonsDto {
+
+    @NotNull
+    @Min(1)
+    @ApiModelProperty(value = "第几页", example = "1")
+    private int pageNum;
+
+    @NotNull
+    @ApiModelProperty(value = "每页数量", example = "10")
+    private int pageSize;
+
+}
diff --git a/src/main/java/com/xcong/excoin/modules/fish/dto/GoldExchangeDto.java b/src/main/java/com/xcong/excoin/modules/fish/dto/GoldExchangeDto.java
new file mode 100644
index 0000000..f1821d5
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/fish/dto/GoldExchangeDto.java
@@ -0,0 +1,18 @@
+package com.xcong.excoin.modules.fish.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+
+@Data
+@ApiModel(value = "GoldExchangeDto", description = "参数类")
+public class GoldExchangeDto {
+
+    @NotNull(message = "兑换金额不能为空")
+    @ApiModelProperty(value = "兑换金额", example = "100")
+    private BigDecimal balance;
+
+}
diff --git a/src/main/java/com/xcong/excoin/modules/fish/entity/CannonAccountMoneyChange.java b/src/main/java/com/xcong/excoin/modules/fish/entity/CannonAccountMoneyChange.java
new file mode 100644
index 0000000..e770697
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/fish/entity/CannonAccountMoneyChange.java
@@ -0,0 +1,30 @@
+package com.xcong.excoin.modules.fish.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.xcong.excoin.common.system.base.BaseEntity;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 用户的账户资金转换充值提现操作记录表
+ */
+@Data
+@TableName("cannon_account_money_change")
+public class CannonAccountMoneyChange extends BaseEntity {
+
+    private Long memberId;
+    //金额
+    private BigDecimal amount;
+    //1:USDT购买炮台 2:金币兑换1代币 3:1代币兑换金币
+    private Integer type;
+    //内容
+    private String content;
+    //变更金额
+    private BigDecimal changeBalance;
+    //变更前
+    private BigDecimal changeBefore;
+    //变更后
+    private BigDecimal changeAfter;
+
+}
diff --git a/src/main/java/com/xcong/excoin/modules/fish/entity/CannonExchangeRatio.java b/src/main/java/com/xcong/excoin/modules/fish/entity/CannonExchangeRatio.java
new file mode 100644
index 0000000..8923de7
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/fish/entity/CannonExchangeRatio.java
@@ -0,0 +1,20 @@
+package com.xcong.excoin.modules.fish.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 兑换比例设置
+ */
+@Data
+@TableName("cannon_exchange_ratio")
+public class CannonExchangeRatio {
+    private Long id;
+    //金币兑换代币比例
+    private BigDecimal goldRatio;
+    //代币兑换金币比例
+    private BigDecimal coinRatio;
+
+}
diff --git a/src/main/java/com/xcong/excoin/modules/fish/entity/CannonGameRecord.java b/src/main/java/com/xcong/excoin/modules/fish/entity/CannonGameRecord.java
new file mode 100644
index 0000000..1e00477
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/fish/entity/CannonGameRecord.java
@@ -0,0 +1,29 @@
+package com.xcong.excoin.modules.fish.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.xcong.excoin.common.system.base.BaseEntity;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 游戏记录
+ */
+@Data
+@TableName("cannon_game_record")
+public class CannonGameRecord extends BaseEntity {
+
+    private Long memberId;
+    //用户拥有炮台记录ID
+    private Long cannonOwnId;
+    //炮台名称
+    private String cannonName;
+    //炮台编码
+    private String cannonCode;
+    //消耗金币
+    private BigDecimal goldConsume;
+    //获得金币
+    private BigDecimal goldReward;
+
+
+}
diff --git a/src/main/java/com/xcong/excoin/modules/fish/entity/CannonOwnRecord.java b/src/main/java/com/xcong/excoin/modules/fish/entity/CannonOwnRecord.java
new file mode 100644
index 0000000..28f5c20
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/fish/entity/CannonOwnRecord.java
@@ -0,0 +1,27 @@
+package com.xcong.excoin.modules.fish.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.xcong.excoin.common.system.base.BaseEntity;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 用户拥有炮台
+ */
+@Data
+@TableName("cannon_own_record")
+public class CannonOwnRecord extends BaseEntity {
+
+    private Long memberId;
+    //炮台UUID
+    private String cannonUuid;
+    //炮台名称
+    private String cannonName;
+    //炮台编码
+    private String cannonCode;
+    //炮台兑换价格
+    private BigDecimal cannonPrice;
+    //1:主动购买 2:系统赠送
+    private Integer type;
+}
diff --git a/src/main/java/com/xcong/excoin/modules/fish/entity/CannonSetting.java b/src/main/java/com/xcong/excoin/modules/fish/entity/CannonSetting.java
new file mode 100644
index 0000000..07461e4
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/fish/entity/CannonSetting.java
@@ -0,0 +1,25 @@
+package com.xcong.excoin.modules.fish.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 炮台设置表
+ */
+@Data
+@TableName("cannon_setting")
+public class CannonSetting {
+
+    private Long id;
+    //炮台名称
+    private String name;
+    //炮台编码
+    private String code;
+    //兑换价格
+    private BigDecimal exchangePrice;
+    //消耗金币
+    private BigDecimal goldConsume;
+
+}
diff --git a/src/main/java/com/xcong/excoin/modules/fish/entity/MemberAccountGold.java b/src/main/java/com/xcong/excoin/modules/fish/entity/MemberAccountGold.java
new file mode 100644
index 0000000..fa69f69
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/fish/entity/MemberAccountGold.java
@@ -0,0 +1,24 @@
+package com.xcong.excoin.modules.fish.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.xcong.excoin.common.system.base.BaseEntity;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 用戶金币賬戶信息表
+ */
+@Data
+@TableName("member_account_gold")
+public class MemberAccountGold extends BaseEntity {
+
+    private Long memberId;
+    //金币可用余额
+    private BigDecimal availableBalance;
+    //金币总金额
+    private BigDecimal totalBalance;
+    //金币冻结余额
+    private BigDecimal frozenBalance;
+
+}
diff --git a/src/main/java/com/xcong/excoin/modules/fish/service/MemberCannonService.java b/src/main/java/com/xcong/excoin/modules/fish/service/MemberCannonService.java
new file mode 100644
index 0000000..207a488
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/fish/service/MemberCannonService.java
@@ -0,0 +1,28 @@
+package com.xcong.excoin.modules.fish.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.xcong.excoin.common.response.Result;
+import com.xcong.excoin.modules.fish.dto.*;
+import com.xcong.excoin.modules.fish.entity.CannonOwnRecord;
+import org.apache.ibatis.annotations.Param;
+
+import java.math.BigDecimal;
+
+public interface MemberCannonService extends IService<CannonOwnRecord> {
+
+    Result coinGoldExchange(CoinGoldExchangeDto coinGoldExchangeDto);
+
+    void updateTotalBalanceAndAvailableBalance(@Param("id") Long id, @Param("availableBalance") BigDecimal availableBalance, @Param("totalBalance")BigDecimal totalBalance, @Param("frozenBalance")BigDecimal frozenBalance);
+
+    Result getCannons(GetCannonsDto getCannonsDto);
+
+    Result cannonExchange(CannonExchangeDto cannonExchangeDto);
+
+    Result goldExchange(GoldExchangeDto goldExchangeDto);
+
+    Result getGoldAccount();
+
+    Result getOwnCannon();
+
+    Result fishing(FishingDto fishingDto);
+}
diff --git a/src/main/java/com/xcong/excoin/modules/fish/service/impl/MemberCannonServiceImpl.java b/src/main/java/com/xcong/excoin/modules/fish/service/impl/MemberCannonServiceImpl.java
new file mode 100644
index 0000000..ea0460d
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/fish/service/impl/MemberCannonServiceImpl.java
@@ -0,0 +1,263 @@
+package com.xcong.excoin.modules.fish.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.lang.UUID;
+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 com.xcong.excoin.common.LoginUserUtils;
+import com.xcong.excoin.common.enumerates.CoinTypeEnum;
+import com.xcong.excoin.common.response.Result;
+import com.xcong.excoin.modules.coin.service.CoinService;
+import com.xcong.excoin.modules.fish.dao.CannonAccountMoneyChangeDao;
+import com.xcong.excoin.modules.fish.dao.CannonOwnRecordDao;
+import com.xcong.excoin.modules.fish.dao.CannonSettingDao;
+import com.xcong.excoin.modules.fish.dao.MemberAccountGoldDao;
+import com.xcong.excoin.modules.fish.dto.*;
+import com.xcong.excoin.modules.fish.entity.*;
+import com.xcong.excoin.modules.fish.service.MemberCannonService;
+import com.xcong.excoin.modules.fish.vo.CannonSettingVo;
+import com.xcong.excoin.modules.fish.vo.GoldAccountVo;
+import com.xcong.excoin.modules.fish.vo.OwnCannonVo;
+import com.xcong.excoin.modules.member.dao.MemberWalletCoinDao;
+import com.xcong.excoin.modules.member.entity.MemberWalletCoinEntity;
+import com.xcong.excoin.utils.RedisUtils;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.util.List;
+
+@Service
+public class MemberCannonServiceImpl extends ServiceImpl<CannonOwnRecordDao, CannonOwnRecord> implements MemberCannonService {
+
+    @Resource
+    CannonSettingDao cannonSettingDao;
+    @Resource
+    MemberAccountGoldDao memberAccountGoldDao;
+    @Resource
+    CannonAccountMoneyChangeDao cannonAccountMoneyChangeDao;
+    @Resource
+    MemberWalletCoinDao memberWalletCoinDao;
+    @Resource
+    CannonOwnRecordDao cannonOwnRecordDao;
+    @Resource
+    RedisUtils redisUtils;
+    @Resource
+    private CoinService coinService;
+    @Resource
+    private MemberCannonService memberCannonService;
+
+    @Override
+    public Result coinGoldExchange(CoinGoldExchangeDto coinGoldExchangeDto) {
+        BigDecimal balance = coinGoldExchangeDto.getBalance();
+        if (balance.compareTo(BigDecimal.ZERO) <= 0) {
+            return Result.fail("兑换金额不能小于或等于0");
+        }
+        Long memberId = LoginUserUtils.getAppLoginUser().getId();
+        //获取兑换比例
+        List<CannonExchangeRatio> cannonExchangeRatios = cannonSettingDao.selectCannonExchangeRatio();
+        if(CollUtil.isEmpty(cannonExchangeRatios)){
+            return Result.fail("系统繁忙请稍候重试");
+        }
+        CannonExchangeRatio cannonExchangeRatio = cannonExchangeRatios.get(0);
+        Integer type = coinGoldExchangeDto.getType();
+        //1:金币兑换1代币 2:1代币兑换金币
+        if(type == 1){
+            MemberAccountGold memberAccountGold = memberAccountGoldDao.selectAccountGoldByMemberId(memberId);
+            MemberWalletCoinEntity memberWalletCoinEntity = memberWalletCoinDao.selectWalletCoinBymIdAndCode(memberId, CoinTypeEnum.XCT.name());
+            if(balance.compareTo(memberAccountGold.getAvailableBalance()) > 0){
+                return Result.fail("金币不足");
+            }
+            BigDecimal coinRatio = cannonExchangeRatio.getCoinRatio();
+            BigDecimal divide = balance.divide(coinRatio).setScale(8,BigDecimal.ROUND_DOWN);
+            //金币账户减少
+            memberCannonService.updateTotalBalanceAndAvailableBalance(memberAccountGold.getId(),balance.negate(),balance.negate(),null);
+            //代币账户增加
+            coinService.updateWalletBalance(memberWalletCoinEntity.getId(),divide,divide,null);
+
+            CannonAccountMoneyChange cannonAccountMoneyChange = new CannonAccountMoneyChange();
+            cannonAccountMoneyChange.setMemberId(memberId);
+            cannonAccountMoneyChange.setAmount(balance.negate());
+            cannonAccountMoneyChange.setType(2);
+            cannonAccountMoneyChange.setContent("金币兑换");
+            cannonAccountMoneyChange.setChangeBalance(balance);
+            cannonAccountMoneyChange.setChangeBefore(memberAccountGold.getAvailableBalance());
+            cannonAccountMoneyChange.setChangeAfter(memberAccountGold.getAvailableBalance().subtract(balance));
+            cannonAccountMoneyChangeDao.insert(cannonAccountMoneyChange);
+        }else if(type == 2){
+            MemberAccountGold memberAccountGold = memberAccountGoldDao.selectAccountGoldByMemberId(memberId);
+            MemberWalletCoinEntity memberWalletCoinEntity = memberWalletCoinDao.selectWalletCoinBymIdAndCode(memberId, CoinTypeEnum.XCT.name());
+            if(balance.compareTo(memberWalletCoinEntity.getAvailableBalance()) > 0){
+                return Result.fail("代币不足");
+            }
+            BigDecimal coinRatio = cannonExchangeRatio.getCoinRatio();
+            BigDecimal multiply = balance.multiply(coinRatio);
+            //金币账户增加
+            memberCannonService.updateTotalBalanceAndAvailableBalance(memberAccountGold.getId(),multiply,multiply,null);
+            //代币账户减少
+            coinService.updateWalletBalance(memberWalletCoinEntity.getId(),balance.negate(),balance.negate(),null);
+
+            CannonAccountMoneyChange cannonAccountMoneyChange = new CannonAccountMoneyChange();
+            cannonAccountMoneyChange.setMemberId(memberId);
+            cannonAccountMoneyChange.setAmount(balance);
+            cannonAccountMoneyChange.setType(3);
+            cannonAccountMoneyChange.setContent("兑换金币");
+            cannonAccountMoneyChange.setChangeBalance(balance);
+            cannonAccountMoneyChange.setChangeBefore(memberWalletCoinEntity.getAvailableBalance());
+            cannonAccountMoneyChange.setChangeAfter(memberWalletCoinEntity.getAvailableBalance().add(balance));
+            cannonAccountMoneyChangeDao.insert(cannonAccountMoneyChange);
+        }
+        return Result.ok("兑换成功");
+    }
+
+    @Override
+    public void updateTotalBalanceAndAvailableBalance(Long id, BigDecimal availableBalance,  BigDecimal totalBalance,BigDecimal frozenBalance) {
+        if(id==null){
+            return;
+        }
+        // 这里需要加锁 保证同一个时间只有一个线程操作一个钱包
+        String key = "UPDATE_MEMBER_GOLD_"+id;
+        while (true){
+            boolean b = redisUtils.setNotExist(key, 1, 2);
+            if(b){
+                //System.out.println("我拿到了锁");
+                // 拿到了锁才能扣
+                memberAccountGoldDao.updateTotalBalanceAndAvailableBalance(id,availableBalance,totalBalance,frozenBalance);
+                // 扣完释放锁
+                redisUtils.del(key);
+                break;
+            }else {
+
+            }
+        }
+    }
+
+    @Override
+    public Result getCannons(GetCannonsDto getCannonsDto) {
+        Long memberId = LoginUserUtils.getAppLoginUser().getId();
+        Page<CannonSettingVo> page = new Page<>(getCannonsDto.getPageNum(), getCannonsDto.getPageSize());
+        CannonSetting cannonSetting = new CannonSetting();
+        IPage<CannonSettingVo> list = cannonSettingDao.findCannonSettingInPage(page, cannonSetting);
+        return Result.ok(list);
+    }
+
+    @Override
+    public Result cannonExchange(CannonExchangeDto cannonExchangeDto) {
+        Long memberId = LoginUserUtils.getAppLoginUser().getId();
+        Long cannonId = cannonExchangeDto.getCannonId();
+        CannonSetting cannonSetting = cannonSettingDao.selectById(cannonId);
+        BigDecimal exchangePrice = cannonSetting.getExchangePrice();
+        if(ObjectUtil.isEmpty(cannonSetting)){
+            return Result.fail("炮塔不存在");
+        }
+        List<CannonOwnRecord> cannonOwnRecords = cannonOwnRecordDao.selectCannonOwnRecordsByMemberIdAndCannonCode(memberId,cannonSetting.getCode());
+        if(CollUtil.isNotEmpty(cannonOwnRecords)){
+            return Result.fail("炮塔已拥有");
+        }
+        //获取用户的USDT账户,可用余额总金额减少
+        MemberWalletCoinEntity memberWalletCoinEntity = memberWalletCoinDao.selectWalletCoinBymIdAndCode(memberId, CoinTypeEnum.USDT.name());
+        if(exchangePrice.compareTo(memberWalletCoinEntity.getAvailableBalance()) > 0){
+            return Result.fail("可用余额不足");
+        }
+        coinService.updateWalletBalance(memberWalletCoinEntity.getId(),exchangePrice.negate(),exchangePrice.negate(),null);
+        //增加一条拥有记录【cannon_own_record】
+        CannonOwnRecord cannonOwnRecord = new CannonOwnRecord();
+        cannonOwnRecord.setMemberId(memberId);
+        cannonOwnRecord.setCannonUuid(UUID.randomUUID().toString());
+        cannonOwnRecord.setCannonCode(cannonSetting.getCode());
+        cannonOwnRecord.setCannonName(cannonSetting.getName());
+        cannonOwnRecord.setCannonPrice(cannonSetting.getExchangePrice());
+        cannonOwnRecord.setType(1);
+        cannonOwnRecordDao.insert(cannonOwnRecord);
+        //增加一条买卖记录
+        CannonAccountMoneyChange cannonAccountMoneyChange = new CannonAccountMoneyChange();
+        cannonAccountMoneyChange.setMemberId(memberId);
+        cannonAccountMoneyChange.setAmount(exchangePrice);
+        cannonAccountMoneyChange.setType(1);
+        cannonAccountMoneyChange.setContent("购买炮塔");
+        cannonAccountMoneyChange.setChangeBalance(exchangePrice);
+        cannonAccountMoneyChange.setChangeBefore(memberWalletCoinEntity.getAvailableBalance());
+        cannonAccountMoneyChange.setChangeAfter(memberWalletCoinEntity.getAvailableBalance().subtract(exchangePrice));
+        cannonAccountMoneyChangeDao.insert(cannonAccountMoneyChange);
+        return Result.ok("购买成功");
+    }
+
+    @Override
+    public Result goldExchange(GoldExchangeDto goldExchangeDto) {
+        Long memberId = LoginUserUtils.getAppLoginUser().getId();
+        BigDecimal balance = goldExchangeDto.getBalance();
+        if (balance.compareTo(BigDecimal.ZERO) <= 0) {
+            return Result.fail("兑换金额不能小于或等于0");
+        }
+        //获取兑换比例
+        List<CannonExchangeRatio> cannonExchangeRatios = cannonSettingDao.selectCannonExchangeRatio();
+        if(CollUtil.isEmpty(cannonExchangeRatios)){
+            return Result.fail("系统繁忙请稍候重试");
+        }
+        CannonExchangeRatio cannonExchangeRatio = cannonExchangeRatios.get(0);
+        //金币账户增加
+        MemberAccountGold memberAccountGold = memberAccountGoldDao.selectAccountGoldByMemberId(memberId);
+        BigDecimal goldRatio = cannonExchangeRatio.getGoldRatio();
+        BigDecimal multiply = balance.multiply(goldRatio);
+        memberCannonService.updateTotalBalanceAndAvailableBalance(memberAccountGold.getId(),multiply,multiply,null);
+        //获取用户的USDT账户,可用余额总金额减少
+        MemberWalletCoinEntity memberWalletCoinEntity = memberWalletCoinDao.selectWalletCoinBymIdAndCode(memberId, CoinTypeEnum.USDT.name());
+        if(balance.compareTo(memberWalletCoinEntity.getAvailableBalance()) > 0){
+            return Result.fail("可用余额不足");
+        }
+        coinService.updateWalletBalance(memberWalletCoinEntity.getId(),balance.negate(),balance.negate(),null);
+        return Result.ok("兑换成功");
+    }
+
+    @Override
+    public Result getGoldAccount() {
+        Long memberId = LoginUserUtils.getAppLoginUser().getId();
+        MemberAccountGold memberAccountGold = memberAccountGoldDao.selectAccountGoldByMemberId(memberId);
+        if(ObjectUtil.isEmpty(memberAccountGold)){
+            MemberAccountGold memberAccountGoldNew = new MemberAccountGold();
+            memberAccountGoldNew.setMemberId(memberId);
+            memberAccountGoldNew.setTotalBalance(BigDecimal.ZERO);
+            memberAccountGoldNew.setAvailableBalance(BigDecimal.ZERO);
+            memberAccountGoldNew.setFrozenBalance(BigDecimal.ZERO);
+            memberAccountGoldDao.insert(memberAccountGoldNew);
+        }
+        GoldAccountVo goldAccountVo = memberAccountGoldDao.selectAccountGoldVoByMemberId(memberId);
+        return Result.ok(goldAccountVo);
+    }
+
+    @Override
+    public Result getOwnCannon() {
+        Long memberId = LoginUserUtils.getAppLoginUser().getId();
+        List<OwnCannonVo> cannonOwnRecords = cannonOwnRecordDao.selectCannonOwnRecordsByMemberId(memberId);
+        return Result.ok(cannonOwnRecords);
+    }
+
+    @Override
+    public Result fishing(FishingDto fishingDto) {
+        Long memberId = LoginUserUtils.getAppLoginUser().getId();
+        Integer goldWin = fishingDto.getGoldWin() == null?0:fishingDto.getGoldWin();
+        if(goldWin < 0){
+            return Result.fail("请求异常,请刷新页面");
+        }
+        Long cannonOwnId = fishingDto.getCannonOwnId();
+        List<CannonOwnRecord> cannonOwnRecords = cannonOwnRecordDao.selectCannonOwnRecordsByIdAndMemberId(cannonOwnId,memberId);
+        if(CollUtil.isEmpty(cannonOwnRecords)){
+            Result.fail("请求异常,请刷新页面");
+        }
+        //消耗金币 = 每发炮弹的消耗 - 获得金币;
+        CannonOwnRecord cannonOwnRecord = cannonOwnRecords.get(0);
+        CannonSetting cannonSetting = cannonSettingDao.selectCannonSettingByCannonCode(cannonOwnRecord.getCannonCode());
+        BigDecimal goldConsume = cannonSetting.getGoldConsume().subtract(new BigDecimal(goldWin)).setScale(0,BigDecimal.ROUND_DOWN);
+        MemberAccountGold memberAccountGold = memberAccountGoldDao.selectAccountGoldByMemberId(memberId);
+        memberCannonService.updateTotalBalanceAndAvailableBalance(memberAccountGold.getId(),goldConsume.negate(),goldConsume.negate(),null);
+        return Result.ok("success");
+    }
+
+    public static void main(String[] args) {
+        System.out.println(UUID.randomUUID().toString());
+    }
+
+
+}
diff --git a/src/main/java/com/xcong/excoin/modules/fish/vo/CannonSettingVo.java b/src/main/java/com/xcong/excoin/modules/fish/vo/CannonSettingVo.java
new file mode 100644
index 0000000..aba8c44
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/fish/vo/CannonSettingVo.java
@@ -0,0 +1,24 @@
+package com.xcong.excoin.modules.fish.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+@ApiModel(value = "CannonSettingVo", description = "炮台列表")
+public class CannonSettingVo {
+
+    private Long id;
+
+    @ApiModelProperty(value = "炮台名称")//炮台名称
+    private String name;
+    @ApiModelProperty(value = "炮台编码")//炮台编码
+    private String code;
+    @ApiModelProperty(value = "兑换价格")//兑换价格
+    private BigDecimal exchangePrice;
+    @ApiModelProperty(value = "每发炮弹消耗金币数")//消耗金币
+    private BigDecimal goldConsume;
+
+}
diff --git a/src/main/java/com/xcong/excoin/modules/fish/vo/GoldAccountVo.java b/src/main/java/com/xcong/excoin/modules/fish/vo/GoldAccountVo.java
new file mode 100644
index 0000000..81ebf0d
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/fish/vo/GoldAccountVo.java
@@ -0,0 +1,20 @@
+package com.xcong.excoin.modules.fish.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+@ApiModel(value = "GoldAccountVo", description = "金币账户")
+public class GoldAccountVo {
+
+    private Long memberId;
+    @ApiModelProperty(value = "金币可用余额")//金币可用余额
+    private BigDecimal availableBalance;
+    @ApiModelProperty(value = "金币总金额")//金币总金额
+    private BigDecimal totalBalance;
+    @ApiModelProperty(value = "金币冻结余额")//金币冻结余额
+    private BigDecimal frozenBalance;
+}
diff --git a/src/main/java/com/xcong/excoin/modules/fish/vo/OwnCannonVo.java b/src/main/java/com/xcong/excoin/modules/fish/vo/OwnCannonVo.java
new file mode 100644
index 0000000..6dc2329
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/fish/vo/OwnCannonVo.java
@@ -0,0 +1,26 @@
+package com.xcong.excoin.modules.fish.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+@Data
+@ApiModel(value = "OwnCannonVo", description = "金币账户")
+public class OwnCannonVo {
+
+    private Long id;
+    private Long memberId;
+    @ApiModelProperty(value = "炮台UUID")//炮台UUID
+    private String cannonUuid;
+    @ApiModelProperty(value = "炮台名称")//炮台名称
+    private String cannonName;
+    @ApiModelProperty(value = "炮台编码")//炮台编码
+    private String cannonCode;
+    @ApiModelProperty(value = "炮台兑换价格")//炮台兑换价格
+    private BigDecimal cannonPrice;
+    @ApiModelProperty(value = "每发炮弹消耗金币数")//消耗金币
+    private BigDecimal goldConsume;
+    @ApiModelProperty(value = "1:主动购买 2:系统赠送")//1:主动购买 2:系统赠送
+    private Integer type;
+}
diff --git a/src/main/resources/mapper/fish/CannonAccountMoneyChangeDao.xml b/src/main/resources/mapper/fish/CannonAccountMoneyChangeDao.xml
new file mode 100644
index 0000000..e7deeda
--- /dev/null
+++ b/src/main/resources/mapper/fish/CannonAccountMoneyChangeDao.xml
@@ -0,0 +1,6 @@
+<?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.fish.dao.CannonAccountMoneyChangeDao">
+
+
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/fish/CannonGameRecordDao.xml b/src/main/resources/mapper/fish/CannonGameRecordDao.xml
new file mode 100644
index 0000000..441d380
--- /dev/null
+++ b/src/main/resources/mapper/fish/CannonGameRecordDao.xml
@@ -0,0 +1,6 @@
+<?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.fish.dao.CannonGameRecordDao">
+
+
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/fish/CannonOwnRecordDao.xml b/src/main/resources/mapper/fish/CannonOwnRecordDao.xml
new file mode 100644
index 0000000..ba3b187
--- /dev/null
+++ b/src/main/resources/mapper/fish/CannonOwnRecordDao.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.fish.dao.CannonOwnRecordDao">
+
+    <select id="selectCannonOwnRecordsByMemberIdAndCannonCode" resultType="com.xcong.excoin.modules.fish.entity.CannonOwnRecord">
+        select a.* from cannon_own_record a where a.member_id = #{memberId} and a.cannon_code = #{code}
+    </select>
+
+    <select id="selectCannonOwnRecordsByMemberId" resultType="com.xcong.excoin.modules.fish.vo.OwnCannonVo">
+        select a.*,b.gold_consume goldConsume
+        from cannon_own_record a
+        left join cannon_setting b on a.cannon_code = b.code
+        where a.member_id = #{memberId}
+    </select>
+
+    <select id="selectCannonOwnRecordsByIdAndMemberId" resultType="com.xcong.excoin.modules.fish.entity.CannonOwnRecord">
+        select a.* from cannon_own_record a where a.member_id = #{memberId} and a.id = #{id}
+    </select>
+
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/fish/CannonSettingDao.xml b/src/main/resources/mapper/fish/CannonSettingDao.xml
new file mode 100644
index 0000000..0bdfba0
--- /dev/null
+++ b/src/main/resources/mapper/fish/CannonSettingDao.xml
@@ -0,0 +1,17 @@
+<?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.fish.dao.CannonSettingDao">
+
+    <select id="selectCannonExchangeRatio" resultType="com.xcong.excoin.modules.fish.entity.CannonExchangeRatio">
+        select a.* from cannon_exchange_ratio a
+    </select>
+
+    <select id="findCannonSettingInPage" resultType="com.xcong.excoin.modules.fish.vo.CannonSettingVo">
+        select a.* from cannon_setting a order by id asc
+    </select>
+
+    <select id="selectCannonSettingByCannonCode" resultType="com.xcong.excoin.modules.fish.entity.CannonSetting">
+        select a.* from cannon_setting a where a.code = #{cannonCode}
+    </select>
+
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/fish/MemberAccountGoldDao.xml b/src/main/resources/mapper/fish/MemberAccountGoldDao.xml
new file mode 100644
index 0000000..bf8057b
--- /dev/null
+++ b/src/main/resources/mapper/fish/MemberAccountGoldDao.xml
@@ -0,0 +1,35 @@
+<?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.fish.dao.MemberAccountGoldDao">
+
+    <select id="selectAccountGoldByMemberId" resultType="com.xcong.excoin.modules.fish.entity.MemberAccountGold">
+        select a.* from member_account_gold a where a.member_id = #{memberId}
+    </select>
+
+    <update id="updateTotalBalanceAndAvailableBalance" parameterType="map">
+        update member_account_gold
+        <set>
+            <if test="availableBalance != null">
+                available_balance = (
+                case when  IFNULL(available_balance, 0) + #{available_balance}>0 then  IFNULL(available_balance, 0) + #{availableBalance} else 0 end
+                ),
+            </if>
+            <if test="totalBalance != null">
+                total_balance = (
+                case when  IFNULL(total_balance, 0) + #{totalBalance}>0 then  IFNULL(total_balance, 0) + #{totalBalance} else 0 end
+                ),
+            </if>
+            <if test="frozenBalance != null">
+                frozen_balance = (
+                case when  IFNULL(frozen_balance, 0) + #{frozenBalance}>0 then  IFNULL(frozen_balance, 0) + #{frozenBalance} else 0 end
+                ),
+            </if>
+        </set>
+        where id=#{id}
+    </update>
+
+    <select id="selectAccountGoldVoByMemberId" resultType="com.xcong.excoin.modules.fish.vo.GoldAccountVo">
+        select a.* from member_account_gold a where a.member_id = #{memberId}
+    </select>
+
+</mapper>
\ No newline at end of file

--
Gitblit v1.9.1