From 9739e12c89e42a2b445801fea0ad958c5f08281c Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Tue, 18 May 2021 18:32:51 +0800
Subject: [PATCH] add entrustOrder and marketBusiness

---
 src/main/java/com/xcong/excoin/modules/otc/dto/EntrustOrderAddDto.java                     |   38 ++
 src/main/resources/mapper/otc/OtcEntrustOrderDao.xml                                       |   45 ++
 src/main/java/com/xcong/excoin/quartz/job/BlockCoinUpdateJob.java                          |    2 
 src/main/java/com/xcong/excoin/modules/otc/dao/OtcEntrustOrderDao.java                     |   19 +
 src/main/java/com/xcong/excoin/modules/otc/controller/OtcMarketBussinessController.java    |   80 ++++
 src/main/resources/mapper/otc/OtcMarketBussinessMapper.xml                                 |    6 
 src/main/resources/mapper/otc/OtcOrderDao.xml                                              |    9 
 src/main/java/com/xcong/excoin/configurations/security/TokenFilter.java                    |    2 
 src/main/java/com/xcong/excoin/modules/otc/service/impl/OtcOrderAppealServiceImpl.java     |    4 
 src/main/java/com/xcong/excoin/modules/otc/dao/OtcOrderAppealDao.java                      |    2 
 src/main/java/com/xcong/excoin/modules/otc/dao/OtcOrderDao.java                            |   12 
 src/main/java/com/xcong/excoin/modules/otc/service/OtcMarketBussinessService.java          |    8 
 src/main/java/com/xcong/excoin/modules/otc/dao/OtcMarketBussinessDao.java                  |   10 
 src/main/java/com/xcong/excoin/modules/otc/dto/MbAddDto.java                               |   21 +
 src/main/java/com/xcong/excoin/modules/otc/dto/EntrustOrderListDto.java                    |   27 +
 src/main/java/com/xcong/excoin/modules/otc/controller/OtcEntrustOrderController.java       |  109 ++++++
 src/main/java/com/xcong/excoin/modules/otc/service/impl/OtcOrderServiceImpl.java           |    4 
 src/main/java/com/xcong/excoin/modules/otc/service/impl/OtcEntrustOrderServiceImpl.java    |  194 ++++++++++
 src/main/resources/mapper/otc/OtcOrderAppealDao.xml                                        |    2 
 src/main/java/com/xcong/excoin/modules/otc/mapper/OtcMarketBussinessMapper.java            |   14 
 src/main/java/com/xcong/excoin/common/aop/ExceptionCatchAspect.java                        |    4 
 src/main/java/com/xcong/excoin/modules/otc/service/impl/OtcMarketBussinessServiceImpl.java |   77 ++++
 src/main/java/com/xcong/excoin/modules/otc/vo/EntrustOrderDetailVo.java                    |   70 +++
 src/main/java/com/xcong/excoin/modules/otc/service/OtcEntrustOrderService.java             |   20 +
 /dev/null                                                                                  |    5 
 src/main/java/com/xcong/excoin/modules/otc/entity/OtcMarketBussiness.java                  |    3 
 src/main/java/com/xcong/excoin/modules/otc/vo/EntrustListVo.java                           |   60 +++
 src/main/java/com/xcong/excoin/modules/otc/mapper/OtcEntrustOrderMapper.java               |   39 ++
 src/main/java/com/xcong/excoin/modules/otc/vo/MarketBussinessInfoVo.java                   |   51 ++
 src/main/java/com/xcong/excoin/common/system/controller/LoginController.java               |   10 
 src/main/java/com/xcong/excoin/modules/otc/entity/OtcEntrustOrder.java                     |   28 +
 src/main/java/com/xcong/excoin/modules/otc/vo/EntrustListInfoVo.java                       |   60 +++
 32 files changed, 1,010 insertions(+), 25 deletions(-)

diff --git a/src/main/java/com/xcong/excoin/common/aop/ExceptionCatchAspect.java b/src/main/java/com/xcong/excoin/common/aop/ExceptionCatchAspect.java
index 1aaa265..3ce3ed5 100644
--- a/src/main/java/com/xcong/excoin/common/aop/ExceptionCatchAspect.java
+++ b/src/main/java/com/xcong/excoin/common/aop/ExceptionCatchAspect.java
@@ -60,6 +60,10 @@
             throw ex;
         }
 
+        if (profiles.equals("dev")) {
+            throw ex;
+        }
+
         SysExceptionDetailEntity exceptionData = new SysExceptionDetailEntity();
         String exStr = printStackTraceToString(ex);
         ThreadPoolUtils.EXECUTOR.execute(new Runnable(){
diff --git a/src/main/java/com/xcong/excoin/common/system/controller/LoginController.java b/src/main/java/com/xcong/excoin/common/system/controller/LoginController.java
index 6645b6d..a2071b1 100644
--- a/src/main/java/com/xcong/excoin/common/system/controller/LoginController.java
+++ b/src/main/java/com/xcong/excoin/common/system/controller/LoginController.java
@@ -127,12 +127,12 @@
             authInfo.put("user", memberInfoVo);
         }
 
-        BigDecimal total = coinService.getAllWalletAmount(memberEntity.getId());
-        if (total.compareTo(AppContants.BASE_MIN_AMOUNT) > 0) {
-            authInfo.put("baseUrl", AppContants.BASE_URL_L2);
-        } else {
+//        BigDecimal total = coinService.getAllWalletAmount(memberEntity.getId());
+//        if (total.compareTo(AppContants.BASE_MIN_AMOUNT) > 0) {
+//            authInfo.put("baseUrl", AppContants.BASE_URL_L2);
+//        } else {
             authInfo.put("baseUrl", AppContants.BASE_URL_L1);
-        }
+//        }
         return Result.ok("success", authInfo);
     }
 
diff --git a/src/main/java/com/xcong/excoin/configurations/security/TokenFilter.java b/src/main/java/com/xcong/excoin/configurations/security/TokenFilter.java
index 362eb8b..b1ba378 100644
--- a/src/main/java/com/xcong/excoin/configurations/security/TokenFilter.java
+++ b/src/main/java/com/xcong/excoin/configurations/security/TokenFilter.java
@@ -12,6 +12,7 @@
 import com.xcong.excoin.common.system.bean.LoginUserBean;
 import com.xcong.excoin.configurations.properties.ApplicationProperties;
 import com.xcong.excoin.configurations.properties.SecurityProperties;
+import com.xcong.excoin.modules.member.dao.MemberDao;
 import com.xcong.excoin.modules.member.entity.MemberEntity;
 import com.xcong.excoin.utils.RedisUtils;
 import com.xcong.excoin.utils.SpringContextHolder;
@@ -28,6 +29,7 @@
 import javax.servlet.ServletResponse;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import javax.swing.*;
 import java.io.IOException;
 import java.util.ArrayList;
 
diff --git a/src/main/java/com/xcong/excoin/modules/otc/controller/OtcEntrustOrderController.java b/src/main/java/com/xcong/excoin/modules/otc/controller/OtcEntrustOrderController.java
new file mode 100644
index 0000000..ba1d3eb
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/otc/controller/OtcEntrustOrderController.java
@@ -0,0 +1,109 @@
+package com.xcong.excoin.modules.otc.controller;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.xcong.excoin.common.LoginUserUtils;
+import com.xcong.excoin.common.response.Result;
+import com.xcong.excoin.modules.member.entity.MemberEntity;
+import com.xcong.excoin.modules.otc.dto.EntrustOrderAddDto;
+import com.xcong.excoin.modules.otc.dto.EntrustOrderListDto;
+import com.xcong.excoin.modules.otc.entity.OtcEntrustOrder;
+import com.xcong.excoin.modules.otc.service.OtcEntrustOrderService;
+import com.xcong.excoin.modules.otc.vo.EntrustListInfoVo;
+import com.xcong.excoin.modules.otc.vo.EntrustListVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.annotations.ApiResponses;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.web3j.abi.datatypes.Int;
+
+import javax.validation.Valid;
+
+@Slf4j
+@RestController
+@RequiredArgsConstructor
+@RequestMapping(value = "/api/otcOrder")
+@Validated
+@Api(value = "OtcEntrustOrderController", tags = "otc委托订单接口类")
+public class OtcEntrustOrderController {
+
+    private final OtcEntrustOrderService otcEntrustOrderService;
+
+    @ApiOperation(value = "添加otc委托单", notes = "添加otc委托单")
+    @PostMapping(value = "/addEntrustOrder")
+    public Result addEntrustOrder(@RequestBody EntrustOrderAddDto addDto) {
+        otcEntrustOrderService.add(addDto);
+        return Result.ok("添加成功");
+    }
+
+    @ApiOperation(value = "编辑otc委托单", notes = "编辑otc委托单")
+    @PostMapping(value = "/modifyEntrustOrder")
+    public Result modifyEntrustOrder(@RequestBody EntrustOrderAddDto modifyDto) {
+        otcEntrustOrderService.modify(modifyDto);
+        return Result.ok("编辑成功");
+    }
+
+    @ApiOperation(value = "获取otc委托单列表", notes = "获取otc委托单列表")
+    @ApiResponses({
+            @ApiResponse(code = 200, message = "success", response = EntrustListVo.class)
+    })
+    @PostMapping(value = "/findEntrustOrderList")
+    public Result findEntrustOrderList(@RequestBody EntrustOrderListDto orderListDto) {
+        IPage<EntrustListVo> result = this.otcEntrustOrderService.findEntrustListInPage(orderListDto);
+        return Result.ok(result.getRecords());
+    }
+
+    @ApiOperation(value = "获取我的委托单列表", notes = "获取我的委托单列表")
+    @ApiResponses({
+            @ApiResponse(code = 200, message = "success", response = EntrustListInfoVo.class)
+    })
+    @GetMapping(value = "/findOwnEntrustOrderList")
+    public Result findOwnEntrustOrderList() {
+        return Result.ok(otcEntrustOrderService.findOwnEntrustOrder());
+    }
+
+    @ApiOperation(value = "获取我的委托单详情")
+    @GetMapping(value = "/findOwnOrderDetail/{id}")
+    public Result findOwnOrderDetail(@PathVariable("id") Long id) {
+        return otcEntrustOrderService.findEntrustOrderDetail(id);
+    }
+
+    @ApiOperation(value = "上/下线接口")
+    @PostMapping(value = "/upOrDownList/{id}")
+    public Result upOrDownList(@PathVariable("id") Long id) {
+        MemberEntity member = LoginUserUtils.getAppLoginUser();
+        OtcEntrustOrder otcEntrustOrder = this.otcEntrustOrderService.getById(id);
+        if (otcEntrustOrder == null) {
+            return Result.fail("数据不存在");
+        }
+
+        if (!member.getId().equals(otcEntrustOrder.getMemberId())) {
+            return Result.fail("数据错误");
+        }
+
+        Integer status = otcEntrustOrder.getStatus();
+        otcEntrustOrder = new OtcEntrustOrder();
+        otcEntrustOrder.setId(id);
+        if (status.equals(OtcEntrustOrder.LINE_DOWN)) {
+            otcEntrustOrder.setStatus(OtcEntrustOrder.LINE_UP);
+        } else {
+            otcEntrustOrder.setStatus(OtcEntrustOrder.LINE_DOWN);
+        }
+
+        this.otcEntrustOrderService.updateById(otcEntrustOrder);
+        return Result.ok("修改成功");
+    }
+
+    @ApiOperation(value = "撤销委托单")
+    @PostMapping(value = "/cancelOrder/{id}")
+    public Result cancelOrder(@PathVariable("id") Long id) {
+        this.otcEntrustOrderService.cancelEntrustOrder(id);
+        return Result.ok("撤销成功");
+    }
+
+}
diff --git a/src/main/java/com/xcong/excoin/modules/otc/controller/OtcMarketBussinessController.java b/src/main/java/com/xcong/excoin/modules/otc/controller/OtcMarketBussinessController.java
new file mode 100644
index 0000000..b4a41ea
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/otc/controller/OtcMarketBussinessController.java
@@ -0,0 +1,80 @@
+package com.xcong.excoin.modules.otc.controller;
+
+import com.xcong.excoin.common.LoginUserUtils;
+import com.xcong.excoin.common.response.Result;
+import com.xcong.excoin.modules.member.entity.MemberEntity;
+import com.xcong.excoin.modules.otc.dto.MbAddDto;
+import com.xcong.excoin.modules.otc.entity.OtcMarketBussiness;
+import com.xcong.excoin.modules.otc.mapper.OtcMarketBussinessMapper;
+import com.xcong.excoin.modules.otc.service.OtcEntrustOrderService;
+import com.xcong.excoin.modules.otc.service.OtcMarketBussinessService;
+import com.xcong.excoin.modules.otc.vo.MarketBussinessInfoVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.annotations.ApiResponses;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.math.BigDecimal;
+
+@Slf4j
+@Validated
+@RestController
+@RequiredArgsConstructor
+@RequestMapping(value = "/api/marketBussiness")
+@Api(value = "OtcMarketBussinessController", tags = "otc市商接口类")
+public class OtcMarketBussinessController {
+
+    private final OtcMarketBussinessService otcMarketBussinessService;
+    private final OtcEntrustOrderService otcEntrustOrderService;
+
+
+    @ApiOperation(value = "applyMarketBussiness", notes = "申请市商接口")
+    @PostMapping(value = "/applyMaketBussiness")
+    public Result applyMarketBussiness(@RequestBody MbAddDto mbAddDto) {
+        otcMarketBussinessService.add(mbAddDto);
+        return Result.ok("申请成功, 等待审核");
+    }
+
+    @ApiOperation(value = "modifyMarketBussiness", notes = "修改个人信息")
+    @PostMapping(value = "/modifyMarketBussiness")
+    public Result modifyMarketBussiness(@RequestBody MbAddDto mbAddDto) {
+        if (mbAddDto.getId() == null) {
+            return Result.fail("id不能为空");
+        }
+
+        OtcMarketBussiness mb = otcMarketBussinessService.getById(mbAddDto.getId());
+        if (mb == null) {
+            return Result.fail("市商不存在");
+        }
+
+        if (!mb.getStatus().equals(OtcMarketBussiness.CHECK_PASS)) {
+            return Result.fail("暂不能修改信息");
+        }
+
+        OtcMarketBussiness otcMb = new OtcMarketBussiness();
+        otcMb.setId(mbAddDto.getId());
+        otcMb.setNikename(mbAddDto.getNickname());
+        otcMarketBussinessService.updateById(otcMb);
+        return Result.ok("修改成功");
+    }
+
+    @ApiOperation(value = "findMarketBussinessStatus", notes = "获取市商申请状态接口")
+    @GetMapping(value = "/findMarketBussinessStatus")
+    public Result findMarketBussinessStatus() {
+        return Result.ok("获取成功", otcMarketBussinessService.findMbStatus());
+    }
+
+    @ApiOperation(value = "findMbInfo", notes = "获取市商信息")
+    @ApiResponses({
+            @ApiResponse(code = 200, message = "获取成功", response = MarketBussinessInfoVo.class)
+    })
+    @GetMapping(value = "/findMbInfo/{id}")
+    public Result findMbInfo(@PathVariable("id") Long id) {
+        return this.otcMarketBussinessService.findMbInfo(id);
+    }
+
+}
diff --git a/src/main/java/com/xcong/excoin/modules/otc/dao/OtcEntrustOrderDao.java b/src/main/java/com/xcong/excoin/modules/otc/dao/OtcEntrustOrderDao.java
new file mode 100644
index 0000000..098b20d
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/otc/dao/OtcEntrustOrderDao.java
@@ -0,0 +1,19 @@
+package com.xcong.excoin.modules.otc.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.otc.dto.EntrustOrderListDto;
+import com.xcong.excoin.modules.otc.entity.OtcEntrustOrder;
+import com.xcong.excoin.modules.otc.vo.EntrustListVo;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface OtcEntrustOrderDao extends BaseMapper<OtcEntrustOrder> {
+
+    IPage<EntrustListVo> selectEntrustListInPage(@Param("record") EntrustOrderListDto dto, Page<EntrustListVo> page);
+
+    List<OtcEntrustOrder> selectEntrustOrderByOrderType(@Param("record") OtcEntrustOrder otcEntrustOrder);
+}
diff --git a/src/main/java/com/xcong/excoin/modules/otc/dao/OtcEntrustOrderMapper.java b/src/main/java/com/xcong/excoin/modules/otc/dao/OtcEntrustOrderMapper.java
deleted file mode 100644
index 3c14bf3..0000000
--- a/src/main/java/com/xcong/excoin/modules/otc/dao/OtcEntrustOrderMapper.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package com.xcong.excoin.modules.otc.dao;
-
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.xcong.excoin.modules.otc.entity.OtcEntrustOrder;
-
-public interface OtcEntrustOrderMapper extends BaseMapper<OtcEntrustOrder> {
-}
diff --git a/src/main/java/com/xcong/excoin/modules/otc/dao/OtcMarketBussinessDao.java b/src/main/java/com/xcong/excoin/modules/otc/dao/OtcMarketBussinessDao.java
new file mode 100644
index 0000000..910ab68
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/otc/dao/OtcMarketBussinessDao.java
@@ -0,0 +1,10 @@
+package com.xcong.excoin.modules.otc.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.xcong.excoin.modules.otc.entity.OtcMarketBussiness;
+import org.apache.ibatis.annotations.Param;
+
+public interface OtcMarketBussinessDao extends BaseMapper<OtcMarketBussiness> {
+
+    OtcMarketBussiness selectMarketBussinessByMemberId(@Param("memberId") Long memberId);
+}
diff --git a/src/main/java/com/xcong/excoin/modules/otc/dao/OtcMarketBussinessMapper.java b/src/main/java/com/xcong/excoin/modules/otc/dao/OtcMarketBussinessMapper.java
deleted file mode 100644
index 6e4b733..0000000
--- a/src/main/java/com/xcong/excoin/modules/otc/dao/OtcMarketBussinessMapper.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package com.xcong.excoin.modules.otc.dao;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.xcong.excoin.modules.otc.entity.OtcMarketBussiness;
-
-public interface OtcMarketBussinessMapper extends BaseMapper<OtcMarketBussiness> {
-}
diff --git a/src/main/java/com/xcong/excoin/modules/otc/dao/OtcOrderAppealMapper.java b/src/main/java/com/xcong/excoin/modules/otc/dao/OtcOrderAppealDao.java
similarity index 68%
rename from src/main/java/com/xcong/excoin/modules/otc/dao/OtcOrderAppealMapper.java
rename to src/main/java/com/xcong/excoin/modules/otc/dao/OtcOrderAppealDao.java
index 3a7cd2b..6cdf87b 100644
--- a/src/main/java/com/xcong/excoin/modules/otc/dao/OtcOrderAppealMapper.java
+++ b/src/main/java/com/xcong/excoin/modules/otc/dao/OtcOrderAppealDao.java
@@ -3,5 +3,5 @@
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.xcong.excoin.modules.otc.entity.OtcOrderAppeal;
 
-public interface OtcOrderAppealMapper extends BaseMapper<OtcOrderAppeal> {
+public interface OtcOrderAppealDao extends BaseMapper<OtcOrderAppeal> {
 }
diff --git a/src/main/java/com/xcong/excoin/modules/otc/dao/OtcOrderDao.java b/src/main/java/com/xcong/excoin/modules/otc/dao/OtcOrderDao.java
new file mode 100644
index 0000000..6cc2b1f
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/otc/dao/OtcOrderDao.java
@@ -0,0 +1,12 @@
+package com.xcong.excoin.modules.otc.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.xcong.excoin.modules.otc.entity.OtcOrder;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface OtcOrderDao extends BaseMapper<OtcOrder> {
+
+    List<OtcOrder> selectOrderListUnFinish(@Param("memberId") Long memberId, @Param("entrustOrderId") Long entrustOrderId);
+}
diff --git a/src/main/java/com/xcong/excoin/modules/otc/dao/OtcOrderMapper.java b/src/main/java/com/xcong/excoin/modules/otc/dao/OtcOrderMapper.java
deleted file mode 100644
index b872a0e..0000000
--- a/src/main/java/com/xcong/excoin/modules/otc/dao/OtcOrderMapper.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package com.xcong.excoin.modules.otc.dao;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.xcong.excoin.modules.otc.entity.OtcOrder;
-
-public interface OtcOrderMapper extends BaseMapper<OtcOrder> {
-}
diff --git a/src/main/java/com/xcong/excoin/modules/otc/dto/EntrustOrderAddDto.java b/src/main/java/com/xcong/excoin/modules/otc/dto/EntrustOrderAddDto.java
new file mode 100644
index 0000000..8f0700b
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/otc/dto/EntrustOrderAddDto.java
@@ -0,0 +1,38 @@
+package com.xcong.excoin.modules.otc.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import java.math.BigDecimal;
+
+
+@Data
+@ApiModel(value = "EntrustOrderAddDto", description = "添加委托单接口参数接收类")
+public class EntrustOrderAddDto {
+
+    @ApiModelProperty(value = "id-编辑时传")
+    private Long id;
+
+    @NotBlank(message = "单价不能为空")
+    @ApiModelProperty(value = "单价", example = "1")
+    private BigDecimal unitPrice;
+
+    @NotBlank(message = "数量不能为空")
+    @ApiModelProperty(value = "数量", example = "1")
+    private BigDecimal amount;
+
+    @ApiModelProperty(value = "总额", example = "1")
+    private BigDecimal totalAmount;
+
+    @ApiModelProperty(value = "限额 - 最大值", example = "2")
+    private BigDecimal max;
+
+    @ApiModelProperty(value = "限额 - 最小值", example = "1")
+    private BigDecimal min;
+
+    @NotBlank(message = "委托单类型不能为空")
+    @ApiModelProperty(value = "类型", example = "B/买-S/卖 编辑不传")
+    private String type;
+}
diff --git a/src/main/java/com/xcong/excoin/modules/otc/dto/EntrustOrderListDto.java b/src/main/java/com/xcong/excoin/modules/otc/dto/EntrustOrderListDto.java
new file mode 100644
index 0000000..0201df3
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/otc/dto/EntrustOrderListDto.java
@@ -0,0 +1,27 @@
+package com.xcong.excoin.modules.otc.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+@Data
+@ApiModel(value = "EntrustOrderListDto", description = "委托单列表接口参数接收类")
+public class EntrustOrderListDto {
+
+    @NotNull
+    @Min(1)
+    @ApiModelProperty(value = "第几页", example = "1")
+    private Integer pageNum;
+
+    @NotNull
+    @ApiModelProperty(value = "每页数量", example = "10")
+    private Integer pageSize;
+
+    @NotBlank
+    @ApiModelProperty(value = "类型", example = "B-买 S-卖")
+    private String type;
+}
diff --git a/src/main/java/com/xcong/excoin/modules/otc/dto/MbAddDto.java b/src/main/java/com/xcong/excoin/modules/otc/dto/MbAddDto.java
new file mode 100644
index 0000000..1963888
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/otc/dto/MbAddDto.java
@@ -0,0 +1,21 @@
+package com.xcong.excoin.modules.otc.dto;
+
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+@Data
+@ApiModel(value = "MbAddDto", description = "申请市商接口参数接收类")
+public class MbAddDto {
+
+    @ApiModelProperty(value = "id - 编辑时传")
+    private Long id;
+
+    @NotBlank(message = "昵称不能为空")
+    @ApiModelProperty(value = "昵称", example = "123")
+    private String nickname;
+
+}
diff --git a/src/main/java/com/xcong/excoin/modules/otc/entity/OtcEntrustOrder.java b/src/main/java/com/xcong/excoin/modules/otc/entity/OtcEntrustOrder.java
index 60c6c40..40da240 100644
--- a/src/main/java/com/xcong/excoin/modules/otc/entity/OtcEntrustOrder.java
+++ b/src/main/java/com/xcong/excoin/modules/otc/entity/OtcEntrustOrder.java
@@ -15,6 +15,11 @@
     private Long mbId;
 
     /**
+     * 委托单号
+     */
+    private String entrustOrderNo;
+
+    /**
      * 单价
      */
     private BigDecimal unitPrice;
@@ -40,12 +45,29 @@
     private BigDecimal limitMaxAmount;
 
     /**
-     * 委托单类型 B-买S-卖
+     * 委托总金额
      */
-    private String orderType;
+    private BigDecimal totalAmount;
 
     /**
-     * 1-上线 2-下线
+     * 委托单类型 B-买 S-卖
+     */
+    private String orderType;
+    public static final String ORDER_TYPE_B = "B";
+    public static final String ORDER_TYPE_S = "S";
+
+    /**
+     * 1-上线 2-下线 3-撤销
      */
     private Integer status;
+    public static final Integer LINE_UP = 1;
+    public static final Integer LINE_DOWN = 2;
+    public static final Integer LINE_CANCEL = 3;
+
+    /**
+     * 是否市商 1-是 2-否
+     */
+    private Integer isMb;
+    public static final Integer IS_MB_Y = 1;
+    public static final Integer IS_MB_N = 2;
 }
diff --git a/src/main/java/com/xcong/excoin/modules/otc/entity/OtcMarketBussiness.java b/src/main/java/com/xcong/excoin/modules/otc/entity/OtcMarketBussiness.java
index 31e2b9b..26f627a 100644
--- a/src/main/java/com/xcong/excoin/modules/otc/entity/OtcMarketBussiness.java
+++ b/src/main/java/com/xcong/excoin/modules/otc/entity/OtcMarketBussiness.java
@@ -20,6 +20,9 @@
      * 1-待审核2-审核通过3-审核拒绝
      */
     private Integer status;
+    public static final Integer CHECK_WAIT = 1;
+    public static final Integer CHECK_PASS = 2;
+    public static final Integer CHECK_REFUSE = 3;
 
     private Integer buyCnt;
 
diff --git a/src/main/java/com/xcong/excoin/modules/otc/mapper/OtcEntrustOrderMapper.java b/src/main/java/com/xcong/excoin/modules/otc/mapper/OtcEntrustOrderMapper.java
new file mode 100644
index 0000000..2fc5f42
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/otc/mapper/OtcEntrustOrderMapper.java
@@ -0,0 +1,39 @@
+package com.xcong.excoin.modules.otc.mapper;
+
+
+import com.xcong.excoin.modules.otc.dto.EntrustOrderAddDto;
+import com.xcong.excoin.modules.otc.entity.OtcEntrustOrder;
+import com.xcong.excoin.modules.otc.vo.EntrustListInfoVo;
+import com.xcong.excoin.modules.otc.vo.EntrustOrderDetailVo;
+import org.mapstruct.Mapper;
+import org.mapstruct.Mapping;
+import org.mapstruct.factory.Mappers;
+
+import java.util.List;
+
+@Mapper
+public abstract class OtcEntrustOrderMapper {
+    public static OtcEntrustOrderMapper INSTANCE = Mappers.getMapper(OtcEntrustOrderMapper.class);
+
+    @Mapping(target = "coinAmount", source = "amount")
+    @Mapping(target = "limitMinAmount", source = "min")
+    @Mapping(target = "limitMaxAmount", source = "max")
+    @Mapping(target = "orderType", source = "type")
+    public abstract OtcEntrustOrder entrustOrderDtoToEntity(EntrustOrderAddDto entrustOrderAddDto);
+
+
+    @Mapping(target = "min", source = "limitMinAmount")
+    @Mapping(target = "max", source = "limitMaxAmount")
+    @Mapping(target = "amount", source = "coinAmount")
+    @Mapping(target = "remainAmount", source = "remainCoinAmount")
+    public abstract EntrustListInfoVo entityToListInfoVo(OtcEntrustOrder otcEntrustOrder);
+
+    public abstract List<EntrustListInfoVo> entrustToListInfoVoList(List<OtcEntrustOrder> list);
+
+    @Mapping(target = "min", source = "limitMinAmount")
+    @Mapping(target = "max", source = "limitMaxAmount")
+    @Mapping(target = "amount", source = "coinAmount")
+    @Mapping(target = "remainAmount", source = "remainCoinAmount")
+    @Mapping(target = "orderNo", source = "entrustOrderNo")
+    public abstract EntrustOrderDetailVo entityToOrderDetail(OtcEntrustOrder order);
+}
diff --git a/src/main/java/com/xcong/excoin/modules/otc/mapper/OtcMarketBussinessMapper.java b/src/main/java/com/xcong/excoin/modules/otc/mapper/OtcMarketBussinessMapper.java
new file mode 100644
index 0000000..7d12167
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/otc/mapper/OtcMarketBussinessMapper.java
@@ -0,0 +1,14 @@
+package com.xcong.excoin.modules.otc.mapper;
+
+
+import com.xcong.excoin.modules.otc.entity.OtcMarketBussiness;
+import com.xcong.excoin.modules.otc.vo.MarketBussinessInfoVo;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+@Mapper
+public abstract class OtcMarketBussinessMapper {
+    public static OtcMarketBussinessMapper INSTANCE = Mappers.getMapper(OtcMarketBussinessMapper.class);
+
+    public abstract MarketBussinessInfoVo entityToVo(OtcMarketBussiness otcMarketBussiness);
+}
diff --git a/src/main/java/com/xcong/excoin/modules/otc/service/OtcEntrustOrderService.java b/src/main/java/com/xcong/excoin/modules/otc/service/OtcEntrustOrderService.java
index 6df6fb4..9176d3b 100644
--- a/src/main/java/com/xcong/excoin/modules/otc/service/OtcEntrustOrderService.java
+++ b/src/main/java/com/xcong/excoin/modules/otc/service/OtcEntrustOrderService.java
@@ -1,7 +1,27 @@
 package com.xcong.excoin.modules.otc.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.xcong.excoin.common.response.Result;
+import com.xcong.excoin.modules.otc.dto.EntrustOrderAddDto;
+import com.xcong.excoin.modules.otc.dto.EntrustOrderListDto;
 import com.xcong.excoin.modules.otc.entity.OtcEntrustOrder;
+import com.xcong.excoin.modules.otc.vo.EntrustListInfoVo;
+import com.xcong.excoin.modules.otc.vo.EntrustListVo;
+
+import java.util.List;
 
 public interface OtcEntrustOrderService extends IService<OtcEntrustOrder> {
+
+    void add(EntrustOrderAddDto addDto);
+
+    void modify(EntrustOrderAddDto modifyDto);
+
+    IPage<EntrustListVo> findEntrustListInPage(EntrustOrderListDto dto);
+
+    List<EntrustListInfoVo> findOwnEntrustOrder();
+
+    void cancelEntrustOrder(Long id);
+
+    Result findEntrustOrderDetail(Long id);
 }
diff --git a/src/main/java/com/xcong/excoin/modules/otc/service/OtcMarketBussinessService.java b/src/main/java/com/xcong/excoin/modules/otc/service/OtcMarketBussinessService.java
index e72f3eb..cc5cce2 100644
--- a/src/main/java/com/xcong/excoin/modules/otc/service/OtcMarketBussinessService.java
+++ b/src/main/java/com/xcong/excoin/modules/otc/service/OtcMarketBussinessService.java
@@ -1,7 +1,15 @@
 package com.xcong.excoin.modules.otc.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.xcong.excoin.common.response.Result;
+import com.xcong.excoin.modules.otc.dto.MbAddDto;
 import com.xcong.excoin.modules.otc.entity.OtcMarketBussiness;
 
 public interface OtcMarketBussinessService extends IService<OtcMarketBussiness> {
+
+    void add(MbAddDto mbAddDto);
+
+    Integer findMbStatus();
+
+    Result findMbInfo(Long id);
 }
diff --git a/src/main/java/com/xcong/excoin/modules/otc/service/impl/OtcEntrustOrderServiceImpl.java b/src/main/java/com/xcong/excoin/modules/otc/service/impl/OtcEntrustOrderServiceImpl.java
index 292ead7..9557361 100644
--- a/src/main/java/com/xcong/excoin/modules/otc/service/impl/OtcEntrustOrderServiceImpl.java
+++ b/src/main/java/com/xcong/excoin/modules/otc/service/impl/OtcEntrustOrderServiceImpl.java
@@ -1,14 +1,204 @@
 package com.xcong.excoin.modules.otc.service.impl;
 
 
+import cn.hutool.core.collection.CollUtil;
+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.exception.GlobalException;
+import com.xcong.excoin.common.response.Result;
+import com.xcong.excoin.common.system.service.CommonService;
+import com.xcong.excoin.modules.member.dao.MemberAuthenticationDao;
+import com.xcong.excoin.modules.member.dao.MemberDao;
+import com.xcong.excoin.modules.member.dao.MemberPaymentMethodDao;
+import com.xcong.excoin.modules.member.dao.MemberWalletCoinDao;
+import com.xcong.excoin.modules.member.entity.MemberEntity;
+import com.xcong.excoin.modules.member.entity.MemberPaymentMethodEntity;
+import com.xcong.excoin.modules.member.entity.MemberWalletCoinEntity;
+import com.xcong.excoin.modules.otc.dao.OtcMarketBussinessDao;
+import com.xcong.excoin.modules.otc.dao.OtcOrderDao;
+import com.xcong.excoin.modules.otc.dto.EntrustOrderAddDto;
+import com.xcong.excoin.modules.otc.dto.EntrustOrderListDto;
 import com.xcong.excoin.modules.otc.entity.OtcEntrustOrder;
-import com.xcong.excoin.modules.otc.dao.OtcEntrustOrderMapper;
+import com.xcong.excoin.modules.otc.dao.OtcEntrustOrderDao;
+import com.xcong.excoin.modules.otc.entity.OtcMarketBussiness;
+import com.xcong.excoin.modules.otc.entity.OtcOrder;
+import com.xcong.excoin.modules.otc.mapper.OtcEntrustOrderMapper;
 import com.xcong.excoin.modules.otc.service.OtcEntrustOrderService;
+import com.xcong.excoin.modules.otc.vo.EntrustListInfoVo;
+import com.xcong.excoin.modules.otc.vo.EntrustListVo;
+import com.xcong.excoin.modules.otc.vo.EntrustOrderDetailVo;
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+import java.util.List;
 
 @Service
 @RequiredArgsConstructor
-public class OtcEntrustOrderServiceImpl extends ServiceImpl<OtcEntrustOrderMapper, OtcEntrustOrder> implements OtcEntrustOrderService {
+public class OtcEntrustOrderServiceImpl extends ServiceImpl<OtcEntrustOrderDao, OtcEntrustOrder> implements OtcEntrustOrderService {
+
+    private final OtcMarketBussinessDao otcMarketBussinessDao;
+    private final MemberDao memberDao;
+    private final MemberPaymentMethodDao memberPaymentMethodDao;
+    private final MemberWalletCoinDao memberWalletCoinDao;
+    private final OtcOrderDao otcOrderDao;
+    private final CommonService commonService;
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void add(EntrustOrderAddDto addDto) {
+        MemberEntity member = LoginUserUtils.getAppLoginUser();
+        OtcEntrustOrder otcEntrustOrder = OtcEntrustOrderMapper.INSTANCE.entrustOrderDtoToEntity(addDto);
+        otcEntrustOrder.setMemberId(member.getId());
+
+        member = memberDao.selectById(member.getId());
+        if (!MemberEntity.CERTIFY_STATUS_Y.equals(member.getCertifyStatus())) {
+            throw new GlobalException("未实名认证");
+        }
+
+        List<MemberPaymentMethodEntity> payments = memberPaymentMethodDao.selectByMemberId(member.getId());
+        if (CollUtil.isEmpty(payments)) {
+            throw new GlobalException("未绑定收款方式");
+        }
+
+        BigDecimal totalAmount = addDto.getUnitPrice().multiply(addDto.getAmount());
+        otcEntrustOrder.setTotalAmount(totalAmount);
+        if (OtcEntrustOrder.ORDER_TYPE_S.equals(addDto.getType())) {
+            MemberWalletCoinEntity coinWallet = memberWalletCoinDao.selectWalletCoinBymIdAndCode(member.getId(), "USDT");
+            if(coinWallet.getAvailableBalance().compareTo(totalAmount) < 0) {
+                throw new GlobalException("可用金额不足");
+            }
+
+            memberWalletCoinDao.updateFrozenBalance(member.getId(), coinWallet.getId(), totalAmount);
+        }
+
+        OtcMarketBussiness mb = otcMarketBussinessDao.selectMarketBussinessByMemberId(member.getId());
+        if (mb == null) {
+            otcEntrustOrder.setIsMb(OtcEntrustOrder.IS_MB_N);
+        } else {
+            otcEntrustOrder.setMbId(mb.getId());
+            otcEntrustOrder.setIsMb(OtcEntrustOrder.IS_MB_Y);
+        }
+
+        otcEntrustOrder.setRemainCoinAmount(addDto.getAmount());
+        otcEntrustOrder.setStatus(OtcEntrustOrder.LINE_UP);
+        otcEntrustOrder.setEntrustOrderNo(commonService.generateOrderNo(member.getId()));
+        otcEntrustOrder.setId(null);
+        this.baseMapper.insert(otcEntrustOrder);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void modify(EntrustOrderAddDto modifyDto) {
+        MemberEntity member = LoginUserUtils.getAppLoginUser();
+        OtcEntrustOrder otcEntrustOrder = OtcEntrustOrderMapper.INSTANCE.entrustOrderDtoToEntity(modifyDto);
+        otcEntrustOrder.setMemberId(member.getId());
+
+        otcEntrustOrder.setRemainCoinAmount(modifyDto.getAmount());
+        otcEntrustOrder.setStatus(OtcEntrustOrder.LINE_UP);
+
+        List<OtcOrder> orders = otcOrderDao.selectOrderListUnFinish(member.getId(), otcEntrustOrder.getId());
+        if (CollUtil.isNotEmpty(orders)) {
+            throw new GlobalException("存在未完成的订单, 无法编辑");
+        }
+
+        OtcEntrustOrder prevEntity = this.baseMapper.selectById(modifyDto.getId());
+        if (prevEntity == null) {
+            throw new GlobalException("参数错误");
+        }
+
+        if (!prevEntity.getOrderType().equals(modifyDto.getType())) {
+            throw new GlobalException("类型错误");
+        }
+
+        OtcMarketBussiness mb = otcMarketBussinessDao.selectMarketBussinessByMemberId(member.getId());
+        if (mb == null) {
+            otcEntrustOrder.setIsMb(OtcEntrustOrder.IS_MB_N);
+        } else {
+            otcEntrustOrder.setMbId(mb.getId());
+            otcEntrustOrder.setIsMb(OtcEntrustOrder.IS_MB_Y);
+        }
+
+        BigDecimal totalAmount = modifyDto.getUnitPrice().multiply(modifyDto.getAmount());
+        otcEntrustOrder.setTotalAmount(totalAmount);
+        if (OtcEntrustOrder.ORDER_TYPE_S.equals(modifyDto.getType())) {
+            MemberWalletCoinEntity coinWallet = memberWalletCoinDao.selectWalletCoinBymIdAndCode(member.getId(), "USDT");
+            coinWallet.setAvailableBalance(coinWallet.getAvailableBalance().add(coinWallet.getFrozenBalance()));
+            if(coinWallet.getAvailableBalance().compareTo(totalAmount) < 0) {
+                throw new GlobalException("可用金额不足");
+            }
+
+            coinWallet.setAvailableBalance(coinWallet.getAvailableBalance().subtract(totalAmount));
+            coinWallet.setFrozenBalance(totalAmount);
+            memberWalletCoinDao.updateById(coinWallet);
+        }
+
+        this.baseMapper.updateById(otcEntrustOrder);
+    }
+
+    @Override
+    public IPage<EntrustListVo> findEntrustListInPage(EntrustOrderListDto dto) {
+        Page<EntrustListVo> page = new Page<>(dto.getPageNum(), dto.getPageSize());
+        return this.baseMapper.selectEntrustListInPage(dto, page);
+    }
+
+    @Override
+    public List<EntrustListInfoVo> findOwnEntrustOrder() {
+        MemberEntity member = LoginUserUtils.getAppLoginUser();
+
+        OtcEntrustOrder query = new OtcEntrustOrder();
+        query.setStatus(3);
+        query.setMemberId(member.getId());
+        List<OtcEntrustOrder> otcEntrustOrders = this.baseMapper.selectEntrustOrderByOrderType(query);
+        return OtcEntrustOrderMapper.INSTANCE.entrustToListInfoVoList(otcEntrustOrders);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void cancelEntrustOrder(Long id) {
+        MemberEntity member = LoginUserUtils.getAppLoginUser();
+        OtcEntrustOrder otcEntrustOrder = this.baseMapper.selectById(id);
+        if (otcEntrustOrder == null) {
+            throw new GlobalException("参数错误");
+        }
+
+        if (OtcEntrustOrder.LINE_CANCEL.equals(otcEntrustOrder.getStatus())) {
+            throw new GlobalException("请勿重复撤销");
+        }
+
+        List<OtcOrder> orders = otcOrderDao.selectOrderListUnFinish(member.getId(), otcEntrustOrder.getId());
+        if (CollUtil.isNotEmpty(orders)) {
+            throw new GlobalException("存在未完成的订单, 无法撤销");
+        }
+
+        if (OtcEntrustOrder.ORDER_TYPE_S.equals(otcEntrustOrder.getOrderType())) {
+            MemberWalletCoinEntity wallet = memberWalletCoinDao.selectWalletCoinBymIdAndCode(member.getId(), "USDT");
+            memberWalletCoinDao.subFrozenBalance(member.getId(), wallet.getId(), wallet.getFrozenBalance());
+        }
+
+        otcEntrustOrder = new OtcEntrustOrder();
+        otcEntrustOrder.setId(id);
+        otcEntrustOrder.setStatus(OtcEntrustOrder.LINE_CANCEL);
+        this.baseMapper.updateById(otcEntrustOrder);
+    }
+
+    @Override
+    public Result findEntrustOrderDetail(Long id) {
+        MemberEntity member = LoginUserUtils.getAppLoginUser();
+
+        OtcEntrustOrder otcEntrustOrder = this.baseMapper.selectById(id);
+        if (otcEntrustOrder == null) {
+            return Result.fail("参数错误");
+        }
+
+        if (!member.getId().equals(otcEntrustOrder.getMemberId())) {
+            return Result.fail("请求有误");
+        }
+
+        EntrustOrderDetailVo detail = OtcEntrustOrderMapper.INSTANCE.entityToOrderDetail(otcEntrustOrder);
+        return Result.ok(detail);
+    }
 }
diff --git a/src/main/java/com/xcong/excoin/modules/otc/service/impl/OtcMarketBussinessServiceImpl.java b/src/main/java/com/xcong/excoin/modules/otc/service/impl/OtcMarketBussinessServiceImpl.java
index 20d147b..ceb5fc2 100644
--- a/src/main/java/com/xcong/excoin/modules/otc/service/impl/OtcMarketBussinessServiceImpl.java
+++ b/src/main/java/com/xcong/excoin/modules/otc/service/impl/OtcMarketBussinessServiceImpl.java
@@ -1,13 +1,86 @@
 package com.xcong.excoin.modules.otc.service.impl;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.xcong.excoin.common.LoginUserUtils;
+import com.xcong.excoin.common.exception.GlobalException;
+import com.xcong.excoin.common.response.Result;
+import com.xcong.excoin.modules.member.entity.MemberEntity;
+import com.xcong.excoin.modules.otc.dao.OtcEntrustOrderDao;
+import com.xcong.excoin.modules.otc.dao.OtcMarketBussinessDao;
+import com.xcong.excoin.modules.otc.dto.MbAddDto;
+import com.xcong.excoin.modules.otc.entity.OtcEntrustOrder;
 import com.xcong.excoin.modules.otc.entity.OtcMarketBussiness;
-import com.xcong.excoin.modules.otc.dao.OtcMarketBussinessMapper;
+import com.xcong.excoin.modules.otc.mapper.OtcEntrustOrderMapper;
+import com.xcong.excoin.modules.otc.mapper.OtcMarketBussinessMapper;
 import com.xcong.excoin.modules.otc.service.OtcMarketBussinessService;
+import com.xcong.excoin.modules.otc.vo.EntrustListInfoVo;
+import com.xcong.excoin.modules.otc.vo.MarketBussinessInfoVo;
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
+import java.util.List;
+
 @Service
 @RequiredArgsConstructor
-public class OtcMarketBussinessServiceImpl extends ServiceImpl<OtcMarketBussinessMapper, OtcMarketBussiness> implements OtcMarketBussinessService {
+public class OtcMarketBussinessServiceImpl extends ServiceImpl<OtcMarketBussinessDao, OtcMarketBussiness> implements OtcMarketBussinessService {
+
+    private final OtcEntrustOrderDao otcEntrustOrderDao;
+
+    @Override
+    public void add(MbAddDto mbAddDto) {
+        MemberEntity member = LoginUserUtils.getAppLoginUser();
+
+        OtcMarketBussiness mb = this.baseMapper.selectMarketBussinessByMemberId(member.getId());
+        if (mb != null) {
+            throw new GlobalException("该用户已经是市商或正在审核");
+        }
+
+        OtcMarketBussiness otcMb = new OtcMarketBussiness();
+        otcMb.setNikename(mbAddDto.getNickname());
+        otcMb.setMemberId(member.getId());
+        otcMb.setAvgCoinTime(0);
+        otcMb.setAvgPayTime(0);
+        otcMb.setTotalOrderCnt(0);
+        otcMb.setBuyCnt(0);
+        otcMb.setFinishRatio(BigDecimal.ZERO);
+        otcMb.setStatus(OtcMarketBussiness.CHECK_WAIT);
+
+        this.baseMapper.insert(otcMb);
+    }
+
+    @Override
+    public Integer findMbStatus() {
+        MemberEntity member = LoginUserUtils.getAppLoginUser();
+
+        OtcMarketBussiness mb = this.baseMapper.selectMarketBussinessByMemberId(member.getId());
+        if (mb == null) {
+            return 0;
+        }
+        return mb.getStatus();
+    }
+
+    @Override
+    public Result findMbInfo(Long id) {
+        OtcMarketBussiness mb = this.baseMapper.selectById(id);
+        if (mb == null) {
+            return Result.fail("未找到对应信息");
+        }
+
+        MarketBussinessInfoVo mbVo = OtcMarketBussinessMapper.INSTANCE.entityToVo(mb);
+
+        OtcEntrustOrder query = new OtcEntrustOrder();
+        query.setMemberId(mb.getMemberId());
+        query.setOrderType(OtcEntrustOrder.ORDER_TYPE_B);
+        query.setStatus(OtcEntrustOrder.LINE_UP);
+        List<OtcEntrustOrder> buysEntity = otcEntrustOrderDao.selectEntrustOrderByOrderType(query);
+        List<EntrustListInfoVo> buys = OtcEntrustOrderMapper.INSTANCE.entrustToListInfoVoList(buysEntity);
+
+        query.setOrderType(OtcEntrustOrder.ORDER_TYPE_S);
+        List<OtcEntrustOrder> salesEntity = otcEntrustOrderDao.selectEntrustOrderByOrderType(query);
+        List<EntrustListInfoVo> sales = OtcEntrustOrderMapper.INSTANCE.entrustToListInfoVoList(salesEntity);
+        mbVo.setBuys(buys);
+        mbVo.setSales(sales);
+        return Result.ok(mbVo);
+    }
 }
diff --git a/src/main/java/com/xcong/excoin/modules/otc/service/impl/OtcOrderAppealServiceImpl.java b/src/main/java/com/xcong/excoin/modules/otc/service/impl/OtcOrderAppealServiceImpl.java
index a042e2f..539ae48 100644
--- a/src/main/java/com/xcong/excoin/modules/otc/service/impl/OtcOrderAppealServiceImpl.java
+++ b/src/main/java/com/xcong/excoin/modules/otc/service/impl/OtcOrderAppealServiceImpl.java
@@ -2,12 +2,12 @@
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.xcong.excoin.modules.otc.entity.OtcOrderAppeal;
-import com.xcong.excoin.modules.otc.dao.OtcOrderAppealMapper;
+import com.xcong.excoin.modules.otc.dao.OtcOrderAppealDao;
 import com.xcong.excoin.modules.otc.service.OtcOrderAppealService;
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
 
 @Service
 @RequiredArgsConstructor
-public class OtcOrderAppealServiceImpl extends ServiceImpl<OtcOrderAppealMapper, OtcOrderAppeal> implements OtcOrderAppealService {
+public class OtcOrderAppealServiceImpl extends ServiceImpl<OtcOrderAppealDao, OtcOrderAppeal> implements OtcOrderAppealService {
 }
diff --git a/src/main/java/com/xcong/excoin/modules/otc/service/impl/OtcOrderServiceImpl.java b/src/main/java/com/xcong/excoin/modules/otc/service/impl/OtcOrderServiceImpl.java
index ce27473..94640c5 100644
--- a/src/main/java/com/xcong/excoin/modules/otc/service/impl/OtcOrderServiceImpl.java
+++ b/src/main/java/com/xcong/excoin/modules/otc/service/impl/OtcOrderServiceImpl.java
@@ -2,12 +2,12 @@
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.xcong.excoin.modules.otc.entity.OtcOrder;
-import com.xcong.excoin.modules.otc.dao.OtcOrderMapper;
+import com.xcong.excoin.modules.otc.dao.OtcOrderDao;
 import com.xcong.excoin.modules.otc.service.OtcOrderService;
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
 
 @Service
 @RequiredArgsConstructor
-public class OtcOrderServiceImpl extends ServiceImpl<OtcOrderMapper, OtcOrder> implements OtcOrderService {
+public class OtcOrderServiceImpl extends ServiceImpl<OtcOrderDao, OtcOrder> implements OtcOrderService {
 }
diff --git a/src/main/java/com/xcong/excoin/modules/otc/vo/EntrustListInfoVo.java b/src/main/java/com/xcong/excoin/modules/otc/vo/EntrustListInfoVo.java
new file mode 100644
index 0000000..a0e7396
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/otc/vo/EntrustListInfoVo.java
@@ -0,0 +1,60 @@
+package com.xcong.excoin.modules.otc.vo;
+
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+@ApiModel(value = "EntrustListInfoVo", description = "委托单列表返回参数类")
+public class EntrustListInfoVo {
+
+    @ApiModelProperty(value= "委托单ID")
+    private Long id;
+
+    @ApiModelProperty(value = "单价")
+    private BigDecimal unitPrice;
+
+    @ApiModelProperty(value = "限额 最小值")
+    private BigDecimal min;
+
+    @ApiModelProperty(value = "限额 最大值")
+    private BigDecimal max;
+
+    @ApiModelProperty(value = "数量")
+    private BigDecimal amount;
+
+    @ApiModelProperty(value = "剩余数量")
+    private BigDecimal remainAmount;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+
+    @ApiModelProperty(value = "上/下线 1-上线 2-下线")
+    private Integer status;
+
+    public BigDecimal getUnitPrice() {
+        return unitPrice.setScale(2, BigDecimal.ROUND_DOWN);
+    }
+
+    public BigDecimal getMin() {
+        return min.setScale(2, BigDecimal.ROUND_DOWN);
+    }
+
+    public BigDecimal getMax() {
+        return max.setScale(2, BigDecimal.ROUND_DOWN);
+    }
+
+    public BigDecimal getAmount() {
+        return amount.setScale(2, BigDecimal.ROUND_DOWN);
+    }
+
+    public BigDecimal getRemainAmount() {
+        return remainAmount.setScale(2, BigDecimal.ROUND_DOWN);
+    }
+}
diff --git a/src/main/java/com/xcong/excoin/modules/otc/vo/EntrustListVo.java b/src/main/java/com/xcong/excoin/modules/otc/vo/EntrustListVo.java
new file mode 100644
index 0000000..c2f5bce
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/otc/vo/EntrustListVo.java
@@ -0,0 +1,60 @@
+package com.xcong.excoin.modules.otc.vo;
+
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+@ApiModel(value = "EntrustListVo", description = "委托单列表接口返回参数类")
+public class EntrustListVo {
+
+    @ApiModelProperty(value = "订单ID")
+    private Long id;
+
+    @ApiModelProperty(value = "市商ID")
+    private Long mbId;
+
+    @ApiModelProperty(value = "单价")
+    private BigDecimal unitPrice;
+
+    @ApiModelProperty(value = "市商昵称")
+    private String nickname;
+
+    @ApiModelProperty(value = "数量")
+    private BigDecimal amount;
+
+    @ApiModelProperty(value = "限额 最小值")
+    private BigDecimal min;
+
+    @ApiModelProperty(value = "限额 最大值")
+    private BigDecimal max;
+
+    @ApiModelProperty(value = "订单数量")
+    private Integer orderCnt;
+
+    @ApiModelProperty(value = "完成率")
+    private BigDecimal finishRatio;
+
+    public BigDecimal getUnitPrice() {
+        return unitPrice.setScale(2, BigDecimal.ROUND_DOWN);
+    }
+
+    public BigDecimal getAmount() {
+        return amount.setScale(2, BigDecimal.ROUND_DOWN);
+    }
+
+    public BigDecimal getMin() {
+        return min.setScale(2, BigDecimal.ROUND_DOWN);
+    }
+
+    public BigDecimal getMax() {
+        return max.setScale(2, BigDecimal.ROUND_DOWN);
+    }
+
+    public BigDecimal getFinishRatio() {
+        return finishRatio.multiply(BigDecimal.valueOf(100)).setScale(2, BigDecimal.ROUND_DOWN);
+    }
+}
diff --git a/src/main/java/com/xcong/excoin/modules/otc/vo/EntrustOrderDetailVo.java b/src/main/java/com/xcong/excoin/modules/otc/vo/EntrustOrderDetailVo.java
new file mode 100644
index 0000000..a32025f
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/otc/vo/EntrustOrderDetailVo.java
@@ -0,0 +1,70 @@
+package com.xcong.excoin.modules.otc.vo;
+
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+@ApiModel(value = "EntrustOrderDetailVo", description = "获取委托单详情接口返回参数类")
+public class EntrustOrderDetailVo {
+
+    @ApiModelProperty(value = "委托单号")
+    private String orderNo;
+
+    @ApiModelProperty(value = "单价")
+    private BigDecimal unitPrice;
+
+    @ApiModelProperty(value = "委托数量")
+    private BigDecimal amount;
+
+    @ApiModelProperty(value = "剩余数量")
+    private BigDecimal remainAmount;
+
+    @ApiModelProperty(value = "委托金额")
+    private BigDecimal totalAmount;
+
+    @ApiModelProperty(value = "限额 下限")
+    private BigDecimal min;
+
+    @ApiModelProperty(value = "限额 上限")
+    private BigDecimal max;
+
+    @ApiModelProperty(value = "类型 B-购买 S-出售")
+    private String orderType;
+
+    @ApiModelProperty(value = "上/下线 1-上线 2-下线")
+    private Integer status;
+
+    @ApiModelProperty(value = "创建时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createTime;
+
+    public BigDecimal getUnitPrice() {
+        return unitPrice.setScale(2, BigDecimal.ROUND_DOWN);
+    }
+
+    public BigDecimal getAmount() {
+        return amount.setScale(2, BigDecimal.ROUND_DOWN);
+    }
+
+    public BigDecimal getRemainAmount() {
+        return remainAmount.setScale(2, BigDecimal.ROUND_DOWN);
+    }
+
+    public BigDecimal getTotalAmount() {
+        return totalAmount.setScale(2, BigDecimal.ROUND_DOWN);
+    }
+
+    public BigDecimal getMin() {
+        return min.setScale(2, BigDecimal.ROUND_DOWN);
+    }
+
+    public BigDecimal getMax() {
+        return max.setScale(2, BigDecimal.ROUND_DOWN);
+    }
+}
diff --git a/src/main/java/com/xcong/excoin/modules/otc/vo/MarketBussinessInfoVo.java b/src/main/java/com/xcong/excoin/modules/otc/vo/MarketBussinessInfoVo.java
new file mode 100644
index 0000000..a85e25e
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/otc/vo/MarketBussinessInfoVo.java
@@ -0,0 +1,51 @@
+package com.xcong.excoin.modules.otc.vo;
+
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+@Data
+@ApiModel(value = "MarketBussinessInfoVo", description = "获取市商信息接口返回参数类")
+public class MarketBussinessInfoVo {
+
+    @ApiModelProperty(value = "id")
+    private Long id;
+
+    @ApiModelProperty(value = "会员ID")
+    private Long memberId;
+
+    @ApiModelProperty(value = "昵称")
+    private String nikename;
+
+    @ApiModelProperty(value = "审核状态", example = "1-待审核2-审核通过3-审核拒绝")
+    private Integer status;
+
+    @ApiModelProperty(value = "服务人数")
+    private Integer buyCnt;
+
+    @ApiModelProperty(value = "总单数")
+    private Integer totalOrderCnt;
+
+    @ApiModelProperty(value = "完成率")
+    private BigDecimal finishRatio;
+
+    @ApiModelProperty(value = "平均付款时间")
+    private Integer avgPayTime;
+
+    @ApiModelProperty(value = "平均放币时间")
+    private Integer avgCoinTime;
+
+    @ApiModelProperty(value = "卖单")
+    private List<EntrustListInfoVo> sales;
+
+    @ApiModelProperty(value = "买单")
+    private List<EntrustListInfoVo> buys;
+
+    public BigDecimal getFinishRatio() {
+        return finishRatio.multiply(BigDecimal.valueOf(100)).setScale(2, BigDecimal.ROUND_DOWN);
+    }
+}
diff --git a/src/main/java/com/xcong/excoin/quartz/job/BlockCoinUpdateJob.java b/src/main/java/com/xcong/excoin/quartz/job/BlockCoinUpdateJob.java
index d421ba1..cc3bd12 100644
--- a/src/main/java/com/xcong/excoin/quartz/job/BlockCoinUpdateJob.java
+++ b/src/main/java/com/xcong/excoin/quartz/job/BlockCoinUpdateJob.java
@@ -22,7 +22,7 @@
  **/
 @Slf4j
 @Component
-//@ConditionalOnProperty(prefix = "app", name = "block-job", havingValue = "true")
+@ConditionalOnProperty(prefix = "app", name = "block-job", havingValue = "true")
 public class BlockCoinUpdateJob {
 
     @Resource
diff --git a/src/main/resources/mapper/otc/OtcEntrustOrderDao.xml b/src/main/resources/mapper/otc/OtcEntrustOrderDao.xml
new file mode 100644
index 0000000..6686dce
--- /dev/null
+++ b/src/main/resources/mapper/otc/OtcEntrustOrderDao.xml
@@ -0,0 +1,45 @@
+<?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.otc.dao.OtcEntrustOrderDao">
+
+    <select id="selectEntrustListInPage" resultType="com.xcong.excoin.modules.otc.vo.EntrustListVo">
+        select
+            a.id,
+            b.id mbId
+            ,b.nikename nickname
+            ,a.unit_price unitPrice
+            ,a.remain_coin_amount amount
+            ,a.limit_min_amount min
+            ,a.limit_max_amount max
+            ,b.total_order_cnt orderCnt
+            ,b.finish_ratio finishRatio
+        from otc_entrust_order a
+        left join otc_market_bussiness b on a.mb_id=b.id
+        <where>
+            a.status=1
+            <if test="record != null">
+                <if test="record.type != null and record.type!=''">
+                    and order_type = #{record.type}
+                </if>
+            </if>
+        </where>
+    </select>
+
+    <select id="selectEntrustOrderByOrderType" resultType="com.xcong.excoin.modules.otc.entity.OtcEntrustOrder">
+        select * from otc_entrust_order
+        <where>
+            <if test="record.orderType != null and record.orderType != ''" >
+               and order_type = #{record.orderType}
+            </if>
+            <if test="record.memberId != null">
+                and member_id = #{record.memberId}
+            </if>
+            <if test="record.status != null and record.status == 3">
+                and status != #{record.status}
+            </if>
+            <if test="record.status != null and record.status != 3">
+                and status == #{record.status}
+            </if>
+        </where>
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/otc/OtcEntrustOrderMapper.xml b/src/main/resources/mapper/otc/OtcEntrustOrderMapper.xml
deleted file mode 100644
index 964c9ec..0000000
--- a/src/main/resources/mapper/otc/OtcEntrustOrderMapper.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?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.otc.dao.OtcEntrustOrderMapper">
-
-</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/otc/OtcMarketBussinessMapper.xml b/src/main/resources/mapper/otc/OtcMarketBussinessMapper.xml
index 9b06956..b9d4ecb 100644
--- a/src/main/resources/mapper/otc/OtcMarketBussinessMapper.xml
+++ b/src/main/resources/mapper/otc/OtcMarketBussinessMapper.xml
@@ -1,5 +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.otc.dao.OtcMarketBussinessMapper">
+<mapper namespace="com.xcong.excoin.modules.otc.dao.OtcMarketBussinessDao">
 
+
+    <select id="selectMarketBussinessByMemberId" resultType="com.xcong.excoin.modules.otc.entity.OtcMarketBussiness">
+        select * from otc_market_bussiness where member_id=#{memberId}
+    </select>
 </mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/otc/OtcOrderAppealMapper.xml b/src/main/resources/mapper/otc/OtcOrderAppealDao.xml
similarity index 94%
rename from src/main/resources/mapper/otc/OtcOrderAppealMapper.xml
rename to src/main/resources/mapper/otc/OtcOrderAppealDao.xml
index 2d8d14f..ae34539 100644
--- a/src/main/resources/mapper/otc/OtcOrderAppealMapper.xml
+++ b/src/main/resources/mapper/otc/OtcOrderAppealDao.xml
@@ -1,5 +1,5 @@
 <?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.otc.dao.OtcOrderAppealMapper">
+<mapper namespace="com.xcong.excoin.modules.otc.dao.OtcOrderAppealDao">
 
 </mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/otc/OtcOrderDao.xml b/src/main/resources/mapper/otc/OtcOrderDao.xml
new file mode 100644
index 0000000..a41a946
--- /dev/null
+++ b/src/main/resources/mapper/otc/OtcOrderDao.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.otc.dao.OtcOrderDao">
+
+    <select id="selectOrderListUnFinish" resultType="com.xcong.excoin.modules.otc.entity.OtcOrder">
+        select * from otc_order
+        where status not in (2,4) and member_id=#{memberId} and entrust_order_id=#{entrustOrderId}
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/otc/OtcOrderMapper.xml b/src/main/resources/mapper/otc/OtcOrderMapper.xml
deleted file mode 100644
index afac93a..0000000
--- a/src/main/resources/mapper/otc/OtcOrderMapper.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?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.otc.dao.OtcOrderMapper">
-
-</mapper>
\ No newline at end of file

--
Gitblit v1.9.1