Merge remote-tracking branch 'origin/master'

pull/1/head
liushaodong 5 years ago
commit e28b7e45d6
  1. 1
      blockchain-server/blockchain-server-otc/src/main/java/com/blockchain/server/otc/common/enums/OtcEnums.java
  2. 4
      blockchain-server/blockchain-server-otc/src/main/java/com/blockchain/server/otc/controller/MarketApplyController.java
  3. 7
      blockchain-server/blockchain-server-otc/src/main/java/com/blockchain/server/otc/mapper/MarketFreezeMapper.java
  4. 2
      blockchain-server/blockchain-server-otc/src/main/java/com/blockchain/server/otc/service/AdService.java
  5. 14
      blockchain-server/blockchain-server-otc/src/main/java/com/blockchain/server/otc/service/MarketApplyService.java
  6. 18
      blockchain-server/blockchain-server-otc/src/main/java/com/blockchain/server/otc/service/MarketFreezeService.java
  7. 7
      blockchain-server/blockchain-server-otc/src/main/java/com/blockchain/server/otc/service/MarketUserService.java
  8. 140
      blockchain-server/blockchain-server-otc/src/main/java/com/blockchain/server/otc/service/impl/MarketApplyServiceImpl.java
  9. 25
      blockchain-server/blockchain-server-otc/src/main/java/com/blockchain/server/otc/service/impl/MarketFreezeServiceImpl.java
  10. 16
      blockchain-server/blockchain-server-otc/src/main/java/com/blockchain/server/otc/service/impl/MarketUserServiceImpl.java
  11. 7
      blockchain-server/blockchain-server-otc/src/main/resources/mapper/MarketFreezeMapper.xml

@ -67,6 +67,7 @@ public enum OtcEnums {
MARKET_USER_NULL(8766, "您还不是商家,无法申请取消!", "You are not a marketer and cannot apply for cancellation!"),
CANCEL_MARKET_USER_STATUS_ERROR(8767, "当前商家状态无法取消!", "The current market status cannot be cancelled!"),
USER_IS_MRAKET(8768, "您已是商家,请勿重复操作!", "You are already a merchant, do not repeat the operation!"),
CANCEL_MARKET_AD_NO_NULL(8769, "操作失败,还有未完结广告!", "Operation failed, and there is an unfinished commercial!"),
;
@Getter

@ -31,7 +31,7 @@ public class MarketApplyController {
@PostMapping("/cancelApply")
public ResultDTO cancelApply(HttpServletRequest request) {
String userId = getUserId(request);
marketApplyService.applyMarket(userId, MarketApplyConstants.CANCEL);
marketApplyService.cancelMarket(userId);
return ResultDTO.requstSuccess();
}
@ -40,7 +40,7 @@ public class MarketApplyController {
@PostMapping("/marketApply")
public ResultDTO marketApply(HttpServletRequest request) {
String userId = getUserId(request);
marketApplyService.applyMarket(userId, MarketApplyConstants.MARKET);
marketApplyService.asMarket(userId);
return ResultDTO.requstSuccess();
}

@ -20,4 +20,11 @@ public interface MarketFreezeMapper extends Mapper<MarketFreeze> {
* @return
*/
MarketFreeze selectByUserId(@Param("userId") String userId);
/***
* 根据用户id删除
* @param userId
* @return
*/
int deleteByUserId(@Param("userId") String userId);
}

@ -39,7 +39,7 @@ public interface AdService {
* @param userId
* @param adId
*/
void setAdToDefault(String userId,String adId);
void setAdToDefault(String userId, String adId);
/***
* 查询交易大厅广告列表

@ -11,6 +11,20 @@ public interface MarketApplyService {
*/
void applyMarket(String userId, String applyType);
/**
* 提交成为市商申请后直接成为市商
*
* @param userId
*/
void asMarket(String userId);
/**
* 提交取消申请后取消市商身份
*
* @param userId
*/
void cancelMarket(String userId);
/***
* 根据用户id和申请类型查询
* @param userId

@ -2,6 +2,8 @@ package com.blockchain.server.otc.service;
import com.blockchain.server.otc.entity.MarketFreeze;
import java.math.BigDecimal;
public interface MarketFreezeService {
/***
@ -10,4 +12,20 @@ public interface MarketFreezeService {
* @return
*/
MarketFreeze getByUserId(String userId);
/***
* 新建用户保证金信息
* @param userId
* @param amount
* @param coinName
* @return
*/
int insertMarketFreeze(String userId, BigDecimal amount, String coinName);
/***
* 删除保证金记录
* @param userId
* @return
*/
int deleteMarketFreeze(String userId);
}

@ -30,4 +30,11 @@ public interface MarketUserService {
* @return
*/
int updateByPrimaryKeySelective(MarketUser marketUser);
/***
* 新建市商用户
* @param userId 用户id
* @return
*/
int insertMarketUser(String userId);
}

@ -1,25 +1,28 @@
package com.blockchain.server.otc.service.impl;
import com.blockchain.common.base.dto.ResultDTO;
import com.blockchain.server.otc.common.constant.AdConstants;
import com.blockchain.server.otc.common.constant.BillConstants;
import com.blockchain.server.otc.common.constant.MarketApplyConstants;
import com.blockchain.server.otc.common.constant.MarketUserConstants;
import com.blockchain.server.otc.common.enums.OtcEnums;
import com.blockchain.server.otc.common.exception.OtcException;
import com.blockchain.server.otc.dto.ad.ListUserAdDTO;
import com.blockchain.server.otc.entity.Ad;
import com.blockchain.server.otc.entity.MarketApply;
import com.blockchain.server.otc.entity.MarketFreeze;
import com.blockchain.server.otc.entity.MarketUser;
import com.blockchain.server.otc.feign.UserFeign;
import com.blockchain.server.otc.mapper.MarketApplyMapper;
import com.blockchain.server.otc.service.ConfigService;
import com.blockchain.server.otc.service.MarketApplyService;
import com.blockchain.server.otc.service.MarketFreezeService;
import com.blockchain.server.otc.service.MarketUserService;
import com.blockchain.server.otc.service.*;
import com.codingapi.tx.annotation.TxTransaction;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.UUID;
@Service
@ -34,8 +37,17 @@ public class MarketApplyServiceImpl implements MarketApplyService {
@Autowired
private ConfigService configService;
@Autowired
private WalletService walletService;
@Autowired
private BillService billService;
@Autowired
private AdService adService;
@Autowired
private UserFeign userFeign;
//保证金固定为CNY
private static final String UNIT_NAME = "CNY";
@Override
@Transactional
public void applyMarket(String userId, String applyType) {
@ -51,6 +63,89 @@ public class MarketApplyServiceImpl implements MarketApplyService {
insertMarketApply(userId, applyType);
}
@Override
@Transactional
@TxTransaction(isStart = true)
public void asMarket(String userId) {
//提交市商申请时,判断用户是否通过高级认证
checkUserHighAuth(userId, MarketUserConstants.MARKET);
//查询用户市商状态
MarketUser marketUser = marketUserService.getMarketUserByUserId(userId);
//市商用户存在
if (marketUser != null) {
//市商状态不等于未认证
if (!marketUser.getStatus().equals(MarketUserConstants.NOTMARKET)) {
throw new OtcException(OtcEnums.USER_IS_MRAKET);
}
//更新市商用户状态为市商
marketUser.setStatus(MarketUserConstants.MARKET);
marketUser.setModifyTime(new Date());
marketUserService.updateByPrimaryKeySelective(marketUser);
} else {//市商用户不存在
//新建市商
marketUserService.insertMarketUser(userId);
}
//新建市商申请
//市商申请id
String applyId = insertAgreeMarketApply(userId, MarketApplyConstants.MARKET);
//市商保证金代币
String coinName = configService.selectMarketFreezeCoin();
//市商保证金数量
BigDecimal amount = configService.selectMarketFreezeAmount();
//防止保证金代币和数量为空
if (coinName != null && amount.compareTo(BigDecimal.ZERO) > 0) {
//新建冻结记录
marketFreezeService.insertMarketFreeze(userId, amount, coinName);
//冻结余额
walletService.handleBalance(userId, applyId, coinName, UNIT_NAME, BigDecimal.ZERO, amount);
//增加余额变更记录
billService.insertBill(userId, applyId, BigDecimal.ZERO, amount, BillConstants.MARKET_USER, coinName);
}
}
@Override
@Transactional
@TxTransaction(isStart = true)
public void cancelMarket(String userId) {
//查询用户市商状态
MarketUser marketUser = marketUserService.getMarketUserByUserId(userId);
//市商用户为空
if (marketUser == null) {
throw new OtcException(OtcEnums.MARKET_USER_NULL);
}
//市商用户状态不等于市商
if (!marketUser.getStatus().equals(MarketUserConstants.MARKET)) {
throw new OtcException(OtcEnums.CANCEL_MARKET_USER_STATUS_ERROR);
}
//检查用户广告是否全部已完成或撤销
checkAdWhenCancel(userId);
//新建市商申请
String applyId = insertAgreeMarketApply(userId, MarketApplyConstants.CANCEL);
//更新
marketUser.setStatus(MarketUserConstants.NOTMARKET);
marketUser.setModifyTime(new Date());
marketUserService.updateByPrimaryKeySelective(marketUser);
//查询保证金记录
MarketFreeze marketFreeze = marketFreezeService.getByUserId(userId);
if (marketFreeze != null) {
//删除冻结记录
marketFreezeService.deleteMarketFreeze(userId);
//解冻资金
BigDecimal freeAmount = marketFreeze.getAmount();
BigDecimal freezeAmount = freeAmount.multiply(new BigDecimal("-1"));
//解冻的币种
String coinName = marketFreeze.getCoinName();
//解冻余额
walletService.handleBalance(userId, applyId, coinName, UNIT_NAME, freeAmount, freezeAmount);
//增加余额变更记录
billService.insertBill(userId, applyId, freeAmount, freezeAmount, BillConstants.CANCEL_MARKET_USER, coinName);
}
}
@Override
public MarketApply getByUserIdAndApplyTypeAndStatus(String userId, String applyType, String status) {
return marketApplyMapper.selectByUserIdAndApplyTypeAndStatus(userId, applyType, status);
@ -101,6 +196,43 @@ public class MarketApplyServiceImpl implements MarketApplyService {
}
}
/***
* 申请取消市商时检查广告是否全部已完成或撤销
* @param userId
*/
private void checkAdWhenCancel(String userId) {
//查询用户发布的广告列表
List<ListUserAdDTO> ads = adService.listUserAd(userId, null, null,
null, null, null, null);
//如果用户的广告列表有未完成或着未取消的广告,抛出异常
for (ListUserAdDTO ad : ads) {
if (!ad.getAdStatus().equals(AdConstants.CANCEL) || !ad.getAdStatus().equals(AdConstants.FINISH)) {
throw new OtcException(OtcEnums.CANCEL_MARKET_AD_NO_NULL);
}
}
}
/***
* 新建状态为'已同意'的申请记录
* @param userId
* @param applyType
* @return
*/
private String insertAgreeMarketApply(String userId, String applyType) {
MarketApply marketApply = new MarketApply();
Date now = new Date();
String applyId = UUID.randomUUID().toString();
marketApply.setId(applyId);
marketApply.setUserId(userId);
marketApply.setApplyType(applyType);
marketApply.setCreateTime(now);
marketApply.setModifyTime(now);
marketApply.setStatus(MarketApplyConstants.AGREE);
marketApplyMapper.insertSelective(marketApply);
return applyId;
}
/***
* 新增市商申请
* @param userId

@ -5,6 +5,11 @@ import com.blockchain.server.otc.mapper.MarketFreezeMapper;
import com.blockchain.server.otc.service.MarketFreezeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.Date;
import java.util.UUID;
@Service
public class MarketFreezeServiceImpl implements MarketFreezeService {
@ -16,4 +21,24 @@ public class MarketFreezeServiceImpl implements MarketFreezeService {
public MarketFreeze getByUserId(String userId) {
return marketFreezeMapper.selectByUserId(userId);
}
@Override
@Transactional
public int insertMarketFreeze(String userId, BigDecimal amount, String coinName) {
MarketFreeze marketFreeze = new MarketFreeze();
marketFreeze.setId(UUID.randomUUID().toString());
marketFreeze.setUserId(userId);
marketFreeze.setCoinName(coinName);
marketFreeze.setAmount(amount);
marketFreeze.setMarketApplyId(null);
marketFreeze.setCreateTime(new Date());
return marketFreezeMapper.insertSelective(marketFreeze);
}
@Override
@Transactional
public int deleteMarketFreeze(String userId) {
return marketFreezeMapper.deleteByUserId(userId);
}
}

@ -10,6 +10,9 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.UUID;
@Service
public class MarketUserServiceImpl implements MarketUserService {
@ -44,4 +47,17 @@ public class MarketUserServiceImpl implements MarketUserService {
public int updateByPrimaryKeySelective(MarketUser marketUser) {
return marketUserMapper.updateByPrimaryKeySelective(marketUser);
}
@Override
@Transactional
public int insertMarketUser(String userId) {
MarketUser marketUser = new MarketUser();
Date date = new Date();
marketUser.setId(UUID.randomUUID().toString());
marketUser.setUserId(userId);
marketUser.setStatus(MarketUserConstants.MARKET);
marketUser.setModifyTime(date);
marketUser.setCreateTime(date);
return marketUserMapper.insertSelective(marketUser);
}
}

@ -22,4 +22,11 @@
user_id = #{userId}
</select>
<delete id="deleteByUserId">
DELETE FROM
<include refid="table"/>
WHERE
user_id = #{userId}
</delete>
</mapper>
Loading…
Cancel
Save