pom.xml
@@ -29,6 +29,7 @@ <fastjson.version>1.2.61</fastjson.version> <netty.version>4.1.33.Final</netty.version> <dom4j.version>1.6.1</dom4j.version> <m2e.apt.activation>jdt_apt</m2e.apt.activation> <okhttp.version>3.6.0</okhttp.version> <aliyun-oss.version>3.8.0</aliyun-oss.version> </properties> src/main/java/com/xcong/excoin/modules/coin/controller/OrderCoinController.java
@@ -18,7 +18,7 @@ import com.xcong.excoin.modules.coin.parameter.vo.MemberSelectSymbolsVo; import com.xcong.excoin.modules.coin.parameter.vo.OrderWalletCoinDealListVo; import com.xcong.excoin.modules.coin.parameter.vo.OrderWalletCoinDealVo; import com.xcong.excoin.modules.coin.parameter.vo.OrderWalletCoinVo; import com.xcong.excoin.modules.coin.parameter.vo.OrderWalletCoinListVo; import com.xcong.excoin.modules.coin.parameter.vo.TransactionPageOfWalletCoinVo; import com.xcong.excoin.modules.coin.service.OrderCoinService; @@ -75,7 +75,7 @@ * @return */ @ApiOperation(value = "获取委托单数据", notes = "获取委托单数据") @ApiResponses({@ApiResponse( code = 200, message = "success", response = OrderWalletCoinVo.class)}) @ApiResponses({@ApiResponse( code = 200, message = "success", response = OrderWalletCoinListVo.class)}) @ApiImplicitParams({ @ApiImplicitParam(name = "symbol", value = "币种", required = true, dataType = "String", paramType="query"), @ApiImplicitParam(name = "status", value = "状态 1:委托中2:撤单3:已成交", required = true, dataType = "int", paramType="query") src/main/java/com/xcong/excoin/modules/coin/dao/OrderCoinsDao.java
@@ -1,5 +1,7 @@ package com.xcong.excoin.modules.coin.dao; import java.util.List; import org.apache.ibatis.annotations.Param; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -9,7 +11,7 @@ long getOrderCountByToday(@Param("now")String now,@Param("tomorrow") String tomorrow); OrderCoinsEntity findCoinOrderListByMemberIdAndSysmbol(@Param("memberId")Long memberId,@Param("symbol")String symbol,@Param("status")int status); List<OrderCoinsEntity> findCoinOrderListByMemberIdAndSysmbol(@Param("memberId")Long memberId,@Param("symbol")String symbol,@Param("status")int status); OrderCoinsEntity findWalletCoinOrderByOrderNo(@Param("orderNo")String orderNo); } src/main/java/com/xcong/excoin/modules/coin/parameter/vo/OrderWalletCoinListVo.java
New file @@ -0,0 +1,16 @@ package com.xcong.excoin.modules.coin.parameter.vo; import java.util.List; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel(value = "OrderWalletCoinListVo", description = "委托单返回") public class OrderWalletCoinListVo { @ApiModelProperty(value = "委托单") private List<OrderWalletCoinVo> orderWalletCoinVo; } src/main/java/com/xcong/excoin/modules/coin/service/impl/OrderCoinServiceImpl.java
@@ -35,6 +35,7 @@ import com.xcong.excoin.modules.coin.parameter.vo.MemberSelectSymbolsVo; import com.xcong.excoin.modules.coin.parameter.vo.OrderWalletCoinDealListVo; import com.xcong.excoin.modules.coin.parameter.vo.OrderWalletCoinDealVo; import com.xcong.excoin.modules.coin.parameter.vo.OrderWalletCoinListVo; import com.xcong.excoin.modules.coin.parameter.vo.OrderWalletCoinVo; import com.xcong.excoin.modules.coin.parameter.vo.TransactionPageOfWalletCoinVo; import com.xcong.excoin.modules.coin.service.OrderCoinService; @@ -304,10 +305,18 @@ public Result getEntrustWalletCoinOrder(String symbol, Integer status) { //获取用户ID Long memberId = LoginUserUtils.getAppLoginUser().getId(); OrderWalletCoinListVo orderWalletCoinListVo = new OrderWalletCoinListVo(); OrderCoinsEntity orderCoin = orderCoinsDao.findCoinOrderListByMemberIdAndSysmbol(memberId, symbol, status); OrderWalletCoinVo entityToVo = OrderWalletCoinMapper.INSTANCE.entityToVo(orderCoin); return Result.ok(entityToVo); List<OrderWalletCoinVo> arrayList = new ArrayList<>(); List<OrderCoinsEntity> findCoinOrderListByMemberIdAndSysmbol = orderCoinsDao.findCoinOrderListByMemberIdAndSysmbol(memberId, symbol, status); if(CollUtil.isNotEmpty(findCoinOrderListByMemberIdAndSysmbol)) { for(OrderCoinsEntity orderCoinsEntity : findCoinOrderListByMemberIdAndSysmbol) { OrderWalletCoinVo entityToVo = OrderWalletCoinMapper.INSTANCE.entityToVo(orderCoinsEntity); arrayList.add(entityToVo); } } orderWalletCoinListVo.setOrderWalletCoinVo(arrayList); return Result.ok(arrayList); } @Override src/main/java/com/xcong/excoin/modules/home/controller/MemberQuickBuySaleController.java
@@ -5,9 +5,11 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import com.alibaba.druid.util.StringUtils; @@ -55,8 +57,6 @@ if (StringUtils.isEmpty(tradePasswordWeb)) { return Result.fail("请输入交易密码"); } // System.out.println("交易密码:"+MD5.GetMD5Code(tradePasswordWeb)+" tradePassword = // "+tradePassword); // 验证交易密码 if (!tradePassword.equals(SecureUtil.md5(tradePasswordWeb))) { return Result.fail("请输入正确的交易密码"); @@ -67,7 +67,7 @@ @ApiOperation(value = "commitPay", notes = "USDT充值支付确认") @RequestMapping(value = "/commitPay", method = RequestMethod.POST) public Result commitPay(@RequestBody MemberQuickBuySaleCommitDto memberQuickBuySaleCommitDto) { public Result commitPay(@RequestBody @Valid MemberQuickBuySaleCommitDto memberQuickBuySaleCommitDto) { return memberQuickBuySaleService.commitPay(memberQuickBuySaleCommitDto); } @@ -77,22 +77,27 @@ return memberQuickBuySaleService.selectById(id); } @ApiOperation(value = "selectAll", notes = "查询用户所有的买卖记录") @GetMapping(value = "/selectAll") public Result selectAll(@RequestParam(value = "type") String type) { return memberQuickBuySaleService.selectAll(type); } @ApiOperation(value = "cancel", notes = "充值撤销") @GetMapping(value = "/cancel/{id}") public Result cancel(@PathVariable(value = "id") Long id) { @GetMapping(value = "/cancel") public Result cancel(@RequestParam(value = "id") Long id) { return memberQuickBuySaleService.cancelRecharge(id); } @ApiOperation(value = "sell", notes = "USDT快速充值") @ApiOperation(value = "sell", notes = "USDT快速卖出") @RequestMapping(value = "/sell", method = RequestMethod.POST) public Result sell(MemberQuickBuySaleDto memberQuickBuySaleDto) { public Result sell(@RequestBody @Valid MemberQuickBuySaleDto memberQuickBuySaleDto) { // 获取当前登录用户 MemberEntity member = LoginUserUtils.getAppLoginUser(); if (MemberEntity.CERTIFY_STATUS_Y.equals(member.getCertifyStatus())) { return Result.fail("请先实名认证"); } String tradePasswordWeb = memberQuickBuySaleDto.getTradePassword(); // 验证支付密码 String tradePassword = member.getTradePassword(); src/main/java/com/xcong/excoin/modules/home/dto/MemberQuickBuySaleCommitDto.java
@@ -1,22 +1,28 @@ package com.xcong.excoin.modules.home.dto; import javax.validation.constraints.NotNull; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel(value = "确认快捷买入接收参数", description = "确认快捷买入接收参数") @ApiModel(value = "MemberQuickBuySaleCommitDto", description = "确认快捷买入接收参数") public class MemberQuickBuySaleCommitDto { @NotNull(message = "订单id不能为空") @ApiModelProperty(value = "主键",example = "1") private Long id; @NotNull(message = "付款方式不能为空") @ApiModelProperty(value = "付款方式 1-支付宝2-微信3-银行卡",example = "1") private int paymentType; @NotNull(message = "收款账号不能为空") @ApiModelProperty(value = "收款账号",example = "13000000000") private String paymentAccount; @NotNull(message = "收款人姓名不能为空") @ApiModelProperty(value = "收款人姓名",example = "张三") private String paymentName; } src/main/java/com/xcong/excoin/modules/home/mapper/MemberQuickBuySaleEntityMapper.java
@@ -1,12 +1,13 @@ package com.xcong.excoin.modules.home.mapper; import com.xcong.excoin.modules.home.entity.MemberQuickBuySaleEntity; import java.util.List; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; import com.xcong.excoin.modules.home.dto.MemberQuickBuySaleDto; import com.xcong.excoin.modules.home.entity.MemberQuickBuySaleEntity; import com.xcong.excoin.modules.home.vo.MemberQuickBuySaleVo; import com.xcong.excoin.modules.home.vo.MemberQuickBuySaleDetailVo; @Mapper @@ -14,8 +15,10 @@ public static final MemberQuickBuySaleEntityMapper INSTANCE = Mappers.getMapper(MemberQuickBuySaleEntityMapper.class); public abstract MemberQuickBuySaleVo entityToVo(MemberQuickBuySaleEntity memberQuickBuySaleEntity); public abstract MemberQuickBuySaleDetailVo entityToVo(MemberQuickBuySaleEntity memberQuickBuySaleEntity); public abstract MemberQuickBuySaleEntity dtoToEntity(MemberQuickBuySaleDto dto); public abstract List<MemberQuickBuySaleDetailVo> entityListToVoList(List<MemberQuickBuySaleEntity> memberQuickBuySaleEntityList); } src/main/java/com/xcong/excoin/modules/home/service/MemberQuickBuySaleService.java
@@ -15,6 +15,8 @@ public Result selectById(Long id); public Result selectAll(String type); public Result cancelRecharge(Long id); public Result sell(MemberEntity member,MemberQuickBuySaleDto memberQuickBuySaleDto); src/main/java/com/xcong/excoin/modules/home/service/impl/MemberQuickBuySaleServiceImpl.java
@@ -8,6 +8,7 @@ import org.springframework.stereotype.Service; import com.alibaba.druid.util.StringUtils; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -22,6 +23,7 @@ import com.xcong.excoin.modules.home.entity.MemberQuickBuySaleEntity; import com.xcong.excoin.modules.home.mapper.MemberQuickBuySaleEntityMapper; import com.xcong.excoin.modules.home.service.MemberQuickBuySaleService; import com.xcong.excoin.modules.home.vo.MemberQuickBuySaleDetailVo; import com.xcong.excoin.modules.home.vo.MemberQuickBuySaleVo; import com.xcong.excoin.modules.member.dao.MemberDao; import com.xcong.excoin.modules.member.dao.MemberWalletCoinDao; @@ -56,6 +58,7 @@ memberQuickBuySaleEntity.setMemberId(member.getId()); memberQuickBuySaleEntity.setAmountUsdt(memberQuickBuySaleDto.getAmountUsdt()); memberQuickBuySaleEntity.setAmountCny(memberQuickBuySaleDto.getAmountCny()); memberQuickBuySaleEntity.setUnitPrice(memberQuickBuySaleDto.getUnitPrice()); memberQuickBuySaleEntity.setCreateTime(new Date()); memberQuickBuySaleEntity.setOrderNo(chargeNo); memberQuickBuySaleEntity.setOrderType("B"); @@ -63,26 +66,10 @@ int ran = (int) (Math.random() * 10000000); memberQuickBuySaleEntity.setPaymentCode(ran + ""); // 收款信息 QueryWrapper<PlatformPaymentMethodEntity> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("status", "1"); List<PlatformPaymentMethodEntity> paymentMethodList = platformPaymentMethodDao.selectList(queryWrapper); // 随机一个 if (CollectionUtils.isEmpty(paymentMethodList)) { return Result.fail("收款方式为空"); } // int total = paymentMethodList.size(); // int index = (int) (Math.random() * total); // PlatformPaymentMethodEntity paymemtMethod = paymentMethodList.get(index); // memberQuickBuySaleEntity.setPaymentName(paymemtMethod.getName()); // memberQuickBuySaleEntity.setPaymentAccount(paymemtMethod.getAccount()); memberQuickBuySaleDao.insert(memberQuickBuySaleEntity); MemberQuickBuySaleVo memberQuickBuySaleVo = MemberQuickBuySaleEntityMapper.INSTANCE.entityToVo(memberQuickBuySaleEntity); MemberQuickBuySaleVo memberQuickBuySaleVo = new MemberQuickBuySaleVo(); memberQuickBuySaleVo.setId(memberQuickBuySaleEntity.getId()); // 返回前台付款方式 // memberQuickBuySaleVo.setPlatforPaymentMethodList(paymentMethodList); // memberQuickBuySaleEntity.setReceiveMethod(payMethodList.get(index)); // 返回前台付款方式 // memberChargeUsdt.setReceiveMethod(payMethodList.get(index)); return Result.ok(memberQuickBuySaleVo); } @@ -105,12 +92,35 @@ @Override public Result selectById(Long id) { MemberQuickBuySaleEntity memberQuickBuySaleEntity = memberQuickBuySaleDao.selectById(id); MemberQuickBuySaleVo memberQuickBuySaleVo = MemberQuickBuySaleEntityMapper.INSTANCE.entityToVo(memberQuickBuySaleEntity); MemberQuickBuySaleDetailVo memberQuickBuySaleDetailVo = MemberQuickBuySaleEntityMapper.INSTANCE.entityToVo(memberQuickBuySaleEntity); // 收款信息 QueryWrapper<PlatformPaymentMethodEntity> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("status", "1"); List<PlatformPaymentMethodEntity> paymentMethodList = platformPaymentMethodDao.selectList(queryWrapper); // 随机一个 if (CollectionUtils.isEmpty(paymentMethodList)) { return Result.fail("收款方式为空"); } memberQuickBuySaleDetailVo.setPlatforPaymentMethodList(paymentMethodList); long startTime = memberQuickBuySaleEntity.getCreateTime().getTime(); long nowTime = new Date().getTime(); long third = 30*60*1000; memberQuickBuySaleVo.setTimeLeft((third-nowTime+startTime)/1000); return Result.ok(memberQuickBuySaleVo); memberQuickBuySaleDetailVo.setTimeLeft((third-nowTime+startTime)/1000); return Result.ok(memberQuickBuySaleDetailVo); } @Override public Result selectAll(String type) { MemberEntity member = LoginUserUtils.getAppLoginUser(); QueryWrapper<MemberQuickBuySaleEntity> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("member_id", member.getId()); if(!StringUtils.isEmpty(type)) { queryWrapper.eq("order_type", type); } queryWrapper.orderByDesc("id"); List<MemberQuickBuySaleEntity> memberQuickBuySaleEntityList = memberQuickBuySaleDao.selectList(queryWrapper); List<MemberQuickBuySaleDetailVo> memberQuickBuySaleDetailVoList = MemberQuickBuySaleEntityMapper.INSTANCE.entityListToVoList(memberQuickBuySaleEntityList); return Result.ok(memberQuickBuySaleDetailVoList); } @Override @@ -130,7 +140,6 @@ if (extractUsdt.compareTo(walletCoin.getAvailableBalance())==1) { return Result.fail("您当前可用USDT额度不够"); } // 判断是否存在收款方式 List<MemberPaymentMethodEntity> payMentMethodList = memberPaymentMethodDao.selectByMemberId(member.getId()); @@ -171,11 +180,8 @@ public Result cancelRecharge(Long id) { // 获取当前登录用户 MemberEntity member = LoginUserUtils.getAppLoginUser(); if(member==null) { return Result.fail("登录用户已失效"); } MemberQuickBuySaleEntity memberQuickBuySaleEntity = memberQuickBuySaleDao.selectByIdAndMemberId(id,member.getId()); memberQuickBuySaleEntity.setOrderStatus(1); MemberQuickBuySaleEntity memberQuickBuySaleEntity = memberQuickBuySaleDao.selectByIdAndMemberId(member.getId(),id); memberQuickBuySaleEntity.setOrderStatus(MemberQuickBuySaleEntity.CHARGE_STATUS_CANCEL_USER); memberQuickBuySaleDao.updateById(memberQuickBuySaleEntity); // 判断是否存在足够余额 src/main/java/com/xcong/excoin/modules/home/vo/MemberQuickBuySaleDetailVo.java
New file @@ -0,0 +1,44 @@ package com.xcong.excoin.modules.home.vo; import java.math.BigDecimal; import java.util.Date; import java.util.List; import com.fasterxml.jackson.annotation.JsonFormat; import com.xcong.excoin.modules.platform.entity.PlatformPaymentMethodEntity; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel(value = "会员快捷买入卖出", description = "会员快捷买入卖出类") public class MemberQuickBuySaleDetailVo { @ApiModelProperty(value = "订单Id") private Long id; @ApiModelProperty(value = "用户id") private Long memberId; @ApiModelProperty(value = "金额(人民币)") private BigDecimal amountCny; @ApiModelProperty(value = "金额(USDT)") private BigDecimal amountUsdt; @ApiModelProperty(value = "付款方式 1-支付宝2-微信3-银行卡") private Integer paymentType; @ApiModelProperty(value = "支付码") private String paymentCode; @ApiModelProperty(value = "单价") private BigDecimal unitPrice; @ApiModelProperty(value = "订单状态 1-新建2-已付款3-已审核4-撤单5-系统取消") private int orderStatus; @ApiModelProperty(value = "订单编号") private String orderNo; @ApiModelProperty(value = "订单类型 B买入 S卖出") private String orderType; @ApiModelProperty(value = "剩余时间") private Long timeLeft; @ApiModelProperty(value = "下单时间") @JsonFormat(pattern = "MM-dd HH:mm:ss", timezone = "GMT+8") private Date createTime; @ApiModelProperty(value = "平台收款方式") private List<PlatformPaymentMethodEntity> platforPaymentMethodList; } src/main/java/com/xcong/excoin/modules/home/vo/MemberQuickBuySaleVo.java
@@ -1,6 +1,5 @@ package com.xcong.excoin.modules.home.vo; import java.math.BigDecimal; import java.util.List; import com.xcong.excoin.modules.platform.entity.PlatformPaymentMethodEntity; @@ -12,28 +11,8 @@ @ApiModel(value = "会员快捷买入卖出", description = "会员快捷买入卖出类") public class MemberQuickBuySaleVo { @ApiModelProperty(value = "用户Id") private Long memberId; @ApiModelProperty(value = "金额(人民币)") private BigDecimal amountCny; @ApiModelProperty(value = "金额(USDT)") private BigDecimal amountUsdt; @ApiModelProperty(value = "付款方式 1-支付宝2-微信3-银行卡") private int paymentType; @ApiModelProperty(value = "收款账号") private String paymentAccount; @ApiModelProperty(value = "收款人姓名") private String paymentName; @ApiModelProperty(value = "支付码") private String paymentCode; @ApiModelProperty(value = "单价") private BigDecimal unitPrice; @ApiModelProperty(value = "订单状态 1-新建2-已付款3-已审核4-撤单5-系统取消") private int orderStatus; @ApiModelProperty(value = "订单编号") private String orderNo; @ApiModelProperty(value = "订单类型 B买入 S卖出") private String orderType; @ApiModelProperty(value = "订单Id") private Long id; @ApiModelProperty(value = "剩余时间") private Long timeLeft; @ApiModelProperty(value = "平台收款方式") src/main/java/com/xcong/excoin/modules/member/controller/MemberController.java
@@ -1,15 +1,78 @@ package com.xcong.excoin.modules.member.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * 用户类 * * @author wzy * @date 2020-05-18 **/ @RestController @RequestMapping(value = "/api/member") public class MemberController { } package com.xcong.excoin.modules.member.controller; import javax.annotation.Resource; import javax.validation.Valid; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.xcong.excoin.common.response.Result; import com.xcong.excoin.modules.member.parameter.dto.MemberAuthenticationDto; import com.xcong.excoin.modules.member.parameter.dto.MemberForgetPwdDto; import com.xcong.excoin.modules.member.parameter.vo.MemberInfoVo; import com.xcong.excoin.modules.member.service.MemberService; 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; /** * 用户类 * * @author wzy * @date 2020-05-18 **/ @Slf4j @Api(value = "个人中心接口", tags = "个人中心接口") @RestController @RequestMapping(value = "/api/member") public class MemberController { @Resource MemberService memberService; /** * 获取我的信息 * @return */ @ApiOperation(value="获取我的信息", notes="获取我的信息") @ApiResponses({@ApiResponse( code = 200, message = "success", response = MemberInfoVo.class)}) @GetMapping(value = "/getMemberInfo") public Result getMemberInfo() { return memberService.getMemberInfo(); } /** * 忘记密码 * @param code 验证码 * @param password 新密码 * @param token 用户登录的token * @return */ @ApiOperation(value=" 忘记密码", notes=" 忘记密码") @RequestMapping(value="/memberForgetPwd") public Result memberForgetPwd(@RequestBody @Valid MemberForgetPwdDto memberForgetPwdDto) { return memberService.memberForgetPwd(memberForgetPwdDto); } /** * 实名认证 * @param token * @param memberAuthenVo * @param request * @return */ @ApiOperation(value="实名认证", notes="实名认证") @PostMapping(value="/memberAuthentication") public Result memberAuthentication(@RequestBody @Valid MemberAuthenticationDto memberAuthenticationDto) { return memberService.memberAuthentication(memberAuthenticationDto); } } src/main/java/com/xcong/excoin/modules/member/dao/MemberAuthenticationDao.java
New file @@ -0,0 +1,10 @@ package com.xcong.excoin.modules.member.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.xcong.excoin.modules.member.entity.MemberAuthenticationEntity; public interface MemberAuthenticationDao extends BaseMapper<MemberAuthenticationEntity> { int findMemberbyIdCardNoCount(String idCardNo); } src/main/java/com/xcong/excoin/modules/member/dao/MemberDao.java
@@ -1,15 +1,16 @@ package com.xcong.excoin.modules.member.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.xcong.excoin.modules.member.entity.MemberEntity; import org.apache.ibatis.annotations.Param; /** * @author wzy */ public interface MemberDao extends BaseMapper<MemberEntity> { public MemberEntity selectMemberInfoByAccount(@Param("account") String account); public MemberEntity selectMemberInfoByRefererId(@Param("refererId") String refererId); } package com.xcong.excoin.modules.member.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.xcong.excoin.modules.member.entity.MemberEntity; import org.apache.ibatis.annotations.Param; /** * @author wzy */ public interface MemberDao extends BaseMapper<MemberEntity> { public MemberEntity selectMemberInfoByAccount(@Param("account") String account); public MemberEntity selectMemberInfoByRefererId(@Param("refererId") String refererId); } src/main/java/com/xcong/excoin/modules/member/entity/MemberAuthenticationEntity.java
@@ -1,56 +1,65 @@ package com.xcong.excoin.modules.member.entity; import com.baomidou.mybatisplus.annotation.TableName; import com.xcong.excoin.common.system.base.BaseEntity; import lombok.Data; /** * 用户实名认证信息实体 * * @author wzy * @date 2020-05-18 **/ @Data @TableName("member_authentication") public class MemberAuthenticationEntity extends BaseEntity { /** * 用户ID */ private Long memberId; /** * 真实姓名 */ private String realName; /** * 姓 */ private String firstName; /** * 名 */ private String secondName; /** * 国家 */ private String nation; /** * 身份证正面 */ private String idcardImageFront; /** * 身份证背面 */ private String idcardImageBack; /** * 手持身份证 */ private String idcardImageInHand; } package com.xcong.excoin.modules.member.entity; import com.baomidou.mybatisplus.annotation.TableName; import com.xcong.excoin.common.system.base.BaseEntity; import lombok.Data; /** * 用户实名认证信息实体 * * @author wzy * @date 2020-05-18 **/ @Data @TableName("member_authentication") public class MemberAuthenticationEntity extends BaseEntity { /** * */ private static final long serialVersionUID = 1L; /** * 用户ID */ private Long memberId; /** * 真实姓名 */ private String realName; /** * 姓 */ private String firstName; /** * 名 */ private String secondName; /** * 国家 */ private String nation; /** * 身份证号 */ private String idcardNo; /** * 身份证正面 */ private String idcardImageFront; /** * 身份证背面 */ private String idcardImageBack; /** * 手持身份证 */ private String idcardImageInHand; } src/main/java/com/xcong/excoin/modules/member/parameter/dto/MemberAuthenticationDto.java
New file @@ -0,0 +1,45 @@ package com.xcong.excoin.modules.member.parameter.dto; import javax.validation.constraints.NotNull; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel(value = "MemberAuthenticationDto", description = "实名认证参数接收类") public class MemberAuthenticationDto { @NotNull(message = "姓不能为空") @ApiModelProperty(value = "姓", example = "姓") private String firstName; @NotNull(message = "名不能为空") @ApiModelProperty(value = "名", example = "名") private String secondName; @NotNull(message = "真实姓名不能为空") @ApiModelProperty(value = "真实姓名", example = "姓名") private String realName; @NotNull(message = "身份证卡号不能为空") @ApiModelProperty(value = "身份证卡号", example = "123456789") private String idCardNo; @NotNull(message = "身份证正面不能为空") @ApiModelProperty(value = "身份证正面", example = "身份证正面") private String idCardFront; @NotNull(message = "身份证反面不能为空") @ApiModelProperty(value = "身份证反面", example = "身份证反面") private String idCardReverse; @NotNull(message = "手持身份证不能为空") @ApiModelProperty(value = "手持身份证", example = "手持身份证") private String idCardImage; @NotNull(message = "国家不能为空") @ApiModelProperty(value = "国家", example = "国家") private String nation; } src/main/java/com/xcong/excoin/modules/member/parameter/dto/MemberForgetPwdDto.java
New file @@ -0,0 +1,31 @@ package com.xcong.excoin.modules.member.parameter.dto; import javax.validation.constraints.NotNull; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel(value = "MemberForgetPwdDto", description = "忘记密码参数接收类") public class MemberForgetPwdDto { @NotNull(message = "验证码不能为空") @ApiModelProperty(value = "验证码", example = "123456") private String code; @NotNull(message = "新密码不能为空") @ApiModelProperty(value = "新密码", example = "qq123456") private String password; @NotNull(message = "验证类型不能为空") @ApiModelProperty(value = "验证类型 1 手机号码 2 邮箱", example = "1") private int type; @ApiModelProperty(value = "电话号码", example = "13412341234") private String phone; @ApiModelProperty(value = "邮箱", example = "www.13412341234@123.com") private String email; } src/main/java/com/xcong/excoin/modules/member/parameter/vo/MemberInfoVo.java
New file @@ -0,0 +1,23 @@ package com.xcong.excoin.modules.member.parameter.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel(value = "MemberInfoVo", description = "个人信息") public class MemberInfoVo { /** * 手机号(包含国际手机号) */ @ApiModelProperty(value = "手机号(包含国际手机号)") private String phone; /** * 邀请码 */ @ApiModelProperty(value = "邀请码") private String inviteId; } src/main/java/com/xcong/excoin/modules/member/service/MemberService.java
@@ -1,16 +1,25 @@ package com.xcong.excoin.modules.member.service; import com.baomidou.mybatisplus.extension.service.IService; import com.xcong.excoin.common.response.Result; import com.xcong.excoin.common.system.dto.RegisterDto; import com.xcong.excoin.modules.member.entity.MemberEntity; import com.xcong.excoin.modules.test.entity.TestUserEntity; /** * @author wzy */ public interface MemberService extends IService<MemberEntity> { public Result register(RegisterDto registerDto); } package com.xcong.excoin.modules.member.service; import javax.validation.Valid; import com.baomidou.mybatisplus.extension.service.IService; import com.xcong.excoin.common.response.Result; import com.xcong.excoin.common.system.dto.RegisterDto; import com.xcong.excoin.modules.member.entity.MemberEntity; import com.xcong.excoin.modules.member.parameter.dto.MemberAuthenticationDto; import com.xcong.excoin.modules.member.parameter.dto.MemberForgetPwdDto; /** * @author wzy */ public interface MemberService extends IService<MemberEntity> { public Result register(RegisterDto registerDto); public Result getMemberInfo(); public Result memberAuthentication(@Valid MemberAuthenticationDto memberAuthenticationDto); public Result memberForgetPwd(@Valid MemberForgetPwdDto memberForgetPwdDto); } src/main/java/com/xcong/excoin/modules/member/service/impl/MemberServiceImpl.java
@@ -1,11 +1,13 @@ package com.xcong.excoin.modules.member.service.impl; import cn.hutool.core.codec.Base64; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.crypto.SecureUtil; import cn.hutool.crypto.asymmetric.Sign; import cn.hutool.crypto.asymmetric.SignAlgorithm; import cn.hutool.crypto.digest.MD5; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.xcong.excoin.common.LoginUserUtils; import com.xcong.excoin.common.contants.AppContants; import com.xcong.excoin.common.enumerates.CoinTypeEnum; import com.xcong.excoin.common.enumerates.SymbolEnum; @@ -13,13 +15,25 @@ import com.xcong.excoin.common.system.dto.RegisterDto; import com.xcong.excoin.modules.member.dao.*; import com.xcong.excoin.modules.member.entity.*; import com.xcong.excoin.modules.member.parameter.dto.MemberAuthenticationDto; import com.xcong.excoin.modules.member.parameter.dto.MemberForgetPwdDto; import com.xcong.excoin.modules.member.parameter.vo.MemberInfoVo; import com.xcong.excoin.modules.member.service.MemberService; import com.xcong.excoin.utils.MessageSourceUtils; import com.xcong.excoin.utils.RedisUtils; import com.xcong.excoin.utils.ShareCodeUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.annotation.Resource; import javax.validation.Valid; /** * @author wzy @@ -43,6 +57,12 @@ @Resource private MemberLevelRateDao memberLevelRateDao; @Resource MemberAuthenticationDao memberAuthenticationDao; @Autowired RedisUtils redisUtils; @Transactional() @Override @@ -135,9 +155,147 @@ levelRate.setSymbol(symbolEnum.getValue()); memberLevelRateDao.insert(levelRate); } return Result.ok("success"); } @Override public Result getMemberInfo() { //获取用户ID Long memberId = LoginUserUtils.getAppLoginUser().getId(); MemberEntity memberEntity = memberDao.selectById(memberId); MemberInfoVo memberInfoVo = new MemberInfoVo(); if (ObjectUtil.isNotEmpty(memberEntity)) { memberInfoVo.setPhone(memberEntity.getPhone()); memberInfoVo.setInviteId(memberEntity.getInviteId()); } return Result.ok(memberInfoVo); } @Override public Result memberForgetPwd(@Valid MemberForgetPwdDto memberForgetPwdDto) { int type = memberForgetPwdDto.getType(); String phone = memberForgetPwdDto.getPhone(); String email = memberForgetPwdDto.getEmail(); String code = memberForgetPwdDto.getCode(); String password = memberForgetPwdDto.getPassword(); Map<String, Object> hashMap = new HashMap<>(); if(type == 1) { hashMap.put("phone", phone); }else { hashMap.put("email", email); } List<MemberEntity> member = memberDao.selectByMap(hashMap); if (CollUtil.isEmpty(member)) { return Result.fail(MessageSourceUtils.getString("member_service_0047")); } boolean verificationCode = verificationCode(type, phone, code, email); if(verificationCode) { MemberEntity memberEntity = member.get(0); memberEntity.setPassword(SecureUtil.md5(password)); memberDao.updateById(memberEntity); }else { return Result.fail(MessageSourceUtils.getString("member_service_0045")); } if(type == 1) { redisUtils.del("SMS_" + phone); }else { redisUtils.del("EMAIL_" + email); } return Result.ok(MessageSourceUtils.getString("member_service_0048")); } /** * 验证输入的验证码 * @param type 验证类型1:电话2:邮箱 * @param phone * @param email * @param code 验证码 * @return */ private boolean verificationCode(Integer type,String phone,String code,String email) { boolean verificationCode = false; if(type == 1) { String smsCode = redisUtils.get("SMS_" + phone) + ""; if(code.equals(smsCode)) { verificationCode = true; } }else { String emailCode = redisUtils.get("EMAIL_" + email) + ""; if(code.equals(emailCode)) { verificationCode = true; } } return verificationCode; } @Override @Transactional public Result memberAuthentication(@Valid MemberAuthenticationDto memberAuthenticationDto) { //获取用户ID Long memberId = LoginUserUtils.getAppLoginUser().getId(); MemberEntity member = memberDao.selectById(memberId); if (ObjectUtil.isNotEmpty(member)) { MemberAuthenticationEntity memberAuthenticationEntity = new MemberAuthenticationEntity(); if (MemberEntity.CERTIFY_STATUS_Y == member.getCertifyStatus()) { return Result.fail(MessageSourceUtils.getString("member_service_0055")); } if (MemberEntity.CERTIFY_STATUS_ING == member.getCertifyStatus()) { return Result.fail(MessageSourceUtils.getString("member_service_0056")); } memberAuthenticationEntity.setMemberId(memberId); if (StrUtil.isBlank(memberAuthenticationDto.getNation())) { return Result.fail(MessageSourceUtils.getString("member_service_0057")); } memberAuthenticationEntity.setNation(memberAuthenticationDto.getNation()); if (StrUtil.isBlank(memberAuthenticationDto.getFirstName())) { return Result.fail(MessageSourceUtils.getString("member_service_0058")); } memberAuthenticationEntity.setFirstName(memberAuthenticationDto.getFirstName()); if (StrUtil.isBlank(memberAuthenticationDto.getSecondName())) { return Result.fail(MessageSourceUtils.getString("member_service_0059")); } memberAuthenticationEntity.setSecondName(memberAuthenticationDto.getSecondName()); String idCardNo = memberAuthenticationDto.getIdCardNo(); if (StrUtil.isBlank(idCardNo)) { return Result.fail(MessageSourceUtils.getString("member_service_0060")); } memberAuthenticationEntity.setIdcardNo(idCardNo); //同一个身份证号码不能重复实名认证 int count = memberAuthenticationDao.findMemberbyIdCardNoCount(idCardNo); if (count > 0) { return Result.fail(MessageSourceUtils.getString("member_service_0060")); } if (StrUtil.isBlank(memberAuthenticationDto.getIdCardFront()) || StrUtil.isBlank(memberAuthenticationDto.getIdCardReverse()) || StrUtil.isBlank(memberAuthenticationDto.getIdCardImage())) { return Result.fail(MessageSourceUtils.getString("member_service_0061")); } memberAuthenticationEntity.setIdcardImageFront(memberAuthenticationDto.getIdCardFront()); memberAuthenticationEntity.setIdcardImageBack(memberAuthenticationDto.getIdCardReverse()); memberAuthenticationEntity.setIdcardImageInHand(memberAuthenticationDto.getIdCardImage()); memberAuthenticationDao.insert(memberAuthenticationEntity); member.setCertifyStatus(MemberEntity.CERTIFY_STATUS_ING); member.setIdcardNo(idCardNo); memberDao.updateById(member); /** * TODO dingtalk Constant.excutor.execute(new Runnable() { @Override public void run() { DingTalkUtils.sendActionCard(4); } });*/ return Result.ok(MessageSourceUtils.getString("member_service_0024")); } return Result.fail(MessageSourceUtils.getString("member_service_0063")); } } src/main/java/com/xcong/excoin/modules/platform/entity/PlatformBannerEntity.java
New file @@ -0,0 +1,46 @@ package com.xcong.excoin.modules.platform.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; @Data @TableName("platform_banner") public class PlatformBannerEntity{ @TableId(value = "id",type = IdType.AUTO) private Long id; /** * 标题 */ private String name; /** * 图片链接 */ private String image_url; /** * 是否可跳转 1-是2-否 */ private String is_jump; /** * 跳转外部或内部 1-内2-外 */ private int is_inside; /** * 跳转链接 */ private String jump_url; /** * 显示端口 1-pc2-手机 */ private int show_port; /** * 联系方式 */ private String sort; private String is_top; } src/main/resources/mapper/member/MemberAuthenticationDao.xml
New file @@ -0,0 +1,9 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.xcong.excoin.modules.member.dao.MemberAuthenticationDao"> <select id="findMemberbyIdCardNoCount" resultType="int"> select count(*) from member_authentication where idcard_No = #{idCardNo} </select> </mapper> src/main/resources/mapper/member/MemberDao.xml
@@ -9,4 +9,5 @@ <select id="selectMemberInfoByRefererId" resultType="com.xcong.excoin.modules.member.entity.MemberEntity"> select * from member where invite_id=#{refererId} </select> </mapper>