|
|
@@ -3,10 +3,7 @@ package com.qnfhq.modules.c2c.service.impl;
|
|
|
import cn.dev33.satoken.stp.StpUtil;
|
|
|
import cn.hutool.core.convert.Convert;
|
|
|
import cn.hutool.core.map.MapUtil;
|
|
|
-import cn.hutool.json.JSONArray;
|
|
|
-import com.alibaba.fastjson.JSON;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
-import com.baomidou.mybatisplus.core.conditions.query.Query;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
import com.qnfhq.common.constant.Constant;
|
|
|
@@ -14,7 +11,6 @@ import com.qnfhq.common.exception.ErrorCode;
|
|
|
import com.qnfhq.common.page.PageData;
|
|
|
import com.qnfhq.common.redis.RedisUtils;
|
|
|
import com.qnfhq.common.service.impl.BaseServiceImpl;
|
|
|
-import com.qnfhq.common.service.impl.CrudServiceImpl;
|
|
|
import com.qnfhq.common.utils.MessageUtils;
|
|
|
import com.qnfhq.common.utils.Result;
|
|
|
import com.qnfhq.modules.c2c.dao.C2cAdDao;
|
|
|
@@ -29,6 +25,7 @@ import com.qnfhq.modules.user.entity.AppAssetEntity;
|
|
|
import com.qnfhq.modules.user.enums.AssetEnum;
|
|
|
import com.qnfhq.modules.user.service.AppAssetService;
|
|
|
import com.qnfhq.utils.OrderUtils;
|
|
|
+import io.swagger.v3.oas.models.security.SecurityScheme;
|
|
|
import jakarta.annotation.Resource;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
@@ -193,15 +190,15 @@ public class C2cAdServiceImpl extends BaseServiceImpl<C2cAdDao, C2cAdEntity> imp
|
|
|
String adHKey = getAdHKey(c2cAdId);
|
|
|
redisUtils.delete(adHKey);
|
|
|
|
|
|
- //2 按价格排序,用于浏览广告
|
|
|
- String zsetKey = getViewAdKey(direction, legalCoin, symbol);
|
|
|
- redisUtils.removeZset(zsetKey, c2cAdId.toString());
|
|
|
-
|
|
|
- //3 按支付方式、按最小数量排序,用于快捷交易 c2c_ad_payId_buy_cnyusdt
|
|
|
- String[] paywayAr = payway.split(",");
|
|
|
- for (String paywayId : paywayAr) {
|
|
|
- redisUtils.removeZset(getQuickAdKey(zsetKey, paywayId), c2cAdId.toString());
|
|
|
- }
|
|
|
+// //2 按价格排序,用于浏览广告
|
|
|
+// String zsetKey = getViewAdKey(direction, legalCoin, symbol);
|
|
|
+// redisUtils.removeZset(zsetKey, c2cAdId.toString());
|
|
|
+//
|
|
|
+// //3 按支付方式、按最小数量排序,用于快捷交易 c2c_ad_payId_buy_cnyusdt
|
|
|
+// String[] paywayAr = payway.split(",");
|
|
|
+// for (String paywayId : paywayAr) {
|
|
|
+// redisUtils.removeZset(getQuickAdKey(zsetKey, paywayId), c2cAdId.toString());
|
|
|
+// }
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@@ -234,14 +231,14 @@ public class C2cAdServiceImpl extends BaseServiceImpl<C2cAdDao, C2cAdEntity> imp
|
|
|
redisUtils.hMSet(adHKey, adMap, randomHour*3600L);
|
|
|
|
|
|
//2 按价格排序,用于浏览广告
|
|
|
- String zsetKey = getViewAdKey(c2cAd.getDirection(), c2cAd.getLegalCoin(), c2cAd.getSymbol());
|
|
|
- redisUtils.addZSet(zsetKey, c2cAd.getId().toString(), c2cAd.getPrice().doubleValue(), c2cAd.getDirection());
|
|
|
+// String zsetKey = getViewAdKey(c2cAd.getDirection(), c2cAd.getLegalCoin(), c2cAd.getSymbol());
|
|
|
+// redisUtils.addZSet(zsetKey, c2cAd.getId().toString(), c2cAd.getPrice().doubleValue(), c2cAd.getDirection());
|
|
|
|
|
|
//3 按支付方式、按最小数量排序,用于快捷交易
|
|
|
- String[] paywayAr = payway.split(",");
|
|
|
- for (String paywayId : paywayAr) {
|
|
|
- redisUtils.addZSet(getQuickAdKey(zsetKey, paywayId), c2cAd.getId().toString(), c2cAd.getMinAmount().doubleValue(), c2cAd.getDirection());
|
|
|
- }
|
|
|
+// String[] paywayAr = payway.split(",");
|
|
|
+// for (String paywayId : paywayAr) {
|
|
|
+// redisUtils.addZSet(getQuickAdKey(zsetKey, paywayId), c2cAd.getId().toString(), c2cAd.getMinAmount().doubleValue(), c2cAd.getDirection());
|
|
|
+// }
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -272,17 +269,17 @@ public class C2cAdServiceImpl extends BaseServiceImpl<C2cAdDao, C2cAdEntity> imp
|
|
|
|
|
|
/**
|
|
|
* 快捷交易查询
|
|
|
+ * 优先匹配“新手友好”商家
|
|
|
* @param tranDTO
|
|
|
* @return
|
|
|
*/
|
|
|
@Override
|
|
|
public Result queryTranAd(C2cAdTranDTO tranDTO) {
|
|
|
Result result = new Result();
|
|
|
- long loginId = StpUtil.getLoginIdAsLong();
|
|
|
String tranSymbol = tranDTO.getSymbol().toLowerCase();
|
|
|
String tranLegalCoin = tranDTO.getLegalCoin().toUpperCase();
|
|
|
Integer tranDirection = tranDTO.getDirection();
|
|
|
- //所有支付方式
|
|
|
+ //支付方式
|
|
|
List<C2cPayWayEntity> paywayList = c2cPayWayService.selectListByLegalCoin(tranLegalCoin);
|
|
|
if(CollectionUtils.isEmpty(paywayList)) {
|
|
|
return result.error(MessageUtils.message("c2c.ad.current.payway.empty"));//当前法币未设置支付方式
|
|
|
@@ -292,37 +289,48 @@ public class C2cAdServiceImpl extends BaseServiceImpl<C2cAdDao, C2cAdEntity> imp
|
|
|
if(Objects.isNull(tLegalCoin)) {
|
|
|
return result.error(MessageUtils.message("c2c.ad.legalCoin.notset"));//当前法币未设置
|
|
|
}
|
|
|
+ //买入法币金额,卖出是数币
|
|
|
BigDecimal maxAmount = BigDecimal.ZERO;
|
|
|
if (tranDTO.getDirection().intValue() == DirectionEnum.BUY.getCode().intValue()) {
|
|
|
- maxAmount = tranDTO.getAmount();//法币cny的金额
|
|
|
+ maxAmount = tranDTO.getAmount();
|
|
|
} else {
|
|
|
- //卖出是usdt币的数量
|
|
|
maxAmount = tranDTO.getAmount().multiply(tLegalCoin.getExchangeRate());
|
|
|
}
|
|
|
|
|
|
|
|
|
- boolean flag = true;
|
|
|
- //1从redis取数
|
|
|
+ Integer direction = 0;
|
|
|
+ if (tranDTO.getDirection().intValue() == DirectionEnum.BUY.getCode().intValue()) {
|
|
|
+ direction = DirectionEnum.SELL.getCode();
|
|
|
+ } else {
|
|
|
+ direction = DirectionEnum.BUY.getCode();
|
|
|
+ }
|
|
|
+ //先查新手友好的商行
|
|
|
+ List<C2cAdEntity> queryAdList = selectC2cAdTranList(tranSymbol,direction,tranLegalCoin,maxAmount,1);
|
|
|
+ setPaywayList(paywayList, queryAdList,tranDirection);
|
|
|
+
|
|
|
+ int total = 0;
|
|
|
for(C2cPayWayEntity payway : paywayList) {
|
|
|
- String zsetKey = getViewAdKey(tranDirection, tranLegalCoin, tranSymbol);
|
|
|
- String zQuickKey = getQuickAdKey(zsetKey,payway.getId().toString());
|
|
|
-
|
|
|
- ArrayList<Object> adidList = null;
|
|
|
- //配置 最小买入金额
|
|
|
- adidList = redisUtils.getRangeByScore(zQuickKey, 10.0, maxAmount.doubleValue());
|
|
|
- if (adidList != null) {
|
|
|
- List<C2cAdEntity> adList = new ArrayList<>();
|
|
|
- for (Object adId : adidList) {
|
|
|
- Long adIdLong = Long.valueOf((String)adId);
|
|
|
- C2cAdEntity ad = selectAdFromRedis(adIdLong);
|
|
|
- if(ad == null) {
|
|
|
- ad = selectById(adIdLong);
|
|
|
- if(ad==null) {
|
|
|
- redisUtils.removeZset(zQuickKey, adIdLong.toString());
|
|
|
- }
|
|
|
- delSetAdCache(ad);
|
|
|
- }
|
|
|
- if (ad!=null && ad.getMaxAmount().compareTo(maxAmount) != -1) {
|
|
|
+ if(payway.getAdList()!=null) {
|
|
|
+ total += payway.getAdList().size();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if(total<3) {
|
|
|
+ //查其他的商行
|
|
|
+ queryAdList = selectC2cAdTranList(tranSymbol,direction,tranLegalCoin,maxAmount,0);
|
|
|
+ setPaywayList(paywayList, queryAdList,tranDirection);
|
|
|
+ }
|
|
|
+
|
|
|
+ return result.ok(paywayList);
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<C2cPayWayEntity> setPaywayList(List<C2cPayWayEntity> paywayList,List<C2cAdEntity> queryAdList,Integer direction) {
|
|
|
+ if (!CollectionUtils.isEmpty(queryAdList)) {
|
|
|
+ for(C2cPayWayEntity payway : paywayList) {
|
|
|
+ List<C2cAdEntity> adList = payway.getAdList()==null ? new ArrayList<>() : payway.getAdList();
|
|
|
+ for(C2cAdEntity ad : queryAdList) {
|
|
|
+ String[] payIds = ad.getPayway().split(",");
|
|
|
+ if(Arrays.asList(payIds).contains(payway.getId().toString())) {
|
|
|
adList.add(ad);
|
|
|
if (adList.size() > 2) {
|
|
|
break;
|
|
|
@@ -330,47 +338,17 @@ public class C2cAdServiceImpl extends BaseServiceImpl<C2cAdDao, C2cAdEntity> imp
|
|
|
}
|
|
|
}
|
|
|
if(adList.size()>0) {
|
|
|
- flag = false;
|
|
|
- sortAdList(adList,tranDTO.getDirection());
|
|
|
+ sortAdList(adList,direction);
|
|
|
payway.setAdList(adList);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- if(flag) {
|
|
|
- //2从数据库查询
|
|
|
- Integer direction = 0;
|
|
|
- if (tranDTO.getDirection().intValue() == DirectionEnum.BUY.getCode().intValue()) {
|
|
|
- direction = DirectionEnum.SELL.getCode();
|
|
|
- } else {
|
|
|
- direction = DirectionEnum.BUY.getCode();
|
|
|
- }
|
|
|
- List<C2cAdEntity> queryAdList = selectC2cAdTranList(tranSymbol,direction,tranLegalCoin,maxAmount);
|
|
|
- if (!CollectionUtils.isEmpty(queryAdList)) {
|
|
|
- for(C2cPayWayEntity payway : paywayList) {
|
|
|
- List<C2cAdEntity> adList = new ArrayList<>();
|
|
|
- for(C2cAdEntity ad : queryAdList) {
|
|
|
- String[] payIds = ad.getPayway().split(",");
|
|
|
- if(Arrays.asList(payIds).contains(payway.getId().toString())
|
|
|
- && ad.getUserId().longValue()!=loginId) {
|
|
|
- adList.add(ad);
|
|
|
- if (adList.size() > 2) {
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- if(adList.size()>0) {
|
|
|
- sortAdList(adList,tranDTO.getDirection());
|
|
|
- payway.setAdList(adList);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- return result.ok(paywayList);
|
|
|
+ return paywayList;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 查询快捷交易广告
|
|
|
+ *
|
|
|
* @param symbol
|
|
|
* @param direction
|
|
|
* @param legalCoin
|
|
|
@@ -378,15 +356,15 @@ public class C2cAdServiceImpl extends BaseServiceImpl<C2cAdDao, C2cAdEntity> imp
|
|
|
* @return
|
|
|
*/
|
|
|
private List<C2cAdEntity> selectC2cAdTranList(String symbol,Integer direction,
|
|
|
- String legalCoin,BigDecimal tranAmount) {
|
|
|
+ String legalCoin,BigDecimal tranAmount,Integer tag) {
|
|
|
return baseDao.selectList(new LambdaQueryWrapper<C2cAdEntity>()
|
|
|
- .eq(C2cAdEntity::getDirection,direction)
|
|
|
- .eq(C2cAdEntity::getLegalCoin,legalCoin)
|
|
|
- .eq(C2cAdEntity::getSymbol,symbol)
|
|
|
+ .ne(C2cAdEntity::getUserId, StpUtil.getLoginIdAsLong())
|
|
|
+ .eq(Objects.nonNull(direction),C2cAdEntity::getDirection, direction)
|
|
|
+ .eq(StrUtil.isNotBlank(legalCoin),C2cAdEntity::getLegalCoin, legalCoin)
|
|
|
+ .eq(StrUtil.isNotBlank(symbol),C2cAdEntity::getSymbol, symbol)
|
|
|
.eq(C2cAdEntity::getStatus,AdStatusEnum.PASS.getCode())
|
|
|
- .ge(C2cAdEntity::getMaxAmount,tranAmount)
|
|
|
- .le(C2cAdEntity::getMinAmount,tranAmount)
|
|
|
- .last(" limit 50")
|
|
|
+ .eq(Objects.nonNull(tag),C2cAdEntity::getTag,tag)
|
|
|
+ .last(" limit 100")
|
|
|
);
|
|
|
}
|
|
|
|
|
|
@@ -417,6 +395,8 @@ public class C2cAdServiceImpl extends BaseServiceImpl<C2cAdDao, C2cAdEntity> imp
|
|
|
BigDecimal amount = viewDTO.getAmount();
|
|
|
//设置支付方式
|
|
|
String payway = viewDTO.getPayway();
|
|
|
+ //标签
|
|
|
+ Integer tag = viewDTO.getTag();
|
|
|
|
|
|
Map<String, Object> params = new HashMap<>();
|
|
|
//买入\卖出广告
|
|
|
@@ -430,36 +410,11 @@ public class C2cAdServiceImpl extends BaseServiceImpl<C2cAdDao, C2cAdEntity> imp
|
|
|
direction = DirectionEnum.BUY.getCode();
|
|
|
params.put("direction", DirectionEnum.BUY.getCode());
|
|
|
}
|
|
|
- Integer pageNum = Convert.toInt(viewDTO.getPageNum(), 1);
|
|
|
- Integer pageSize = Convert.toInt(viewDTO.getPageSize(), 10);
|
|
|
- params.put(Constant.PAGE,pageNum.toString());
|
|
|
- params.put(Constant.LIMIT,pageSize.toString());
|
|
|
+ params.put(Constant.PAGE,viewDTO.getPageNum());
|
|
|
+ params.put(Constant.LIMIT,viewDTO.getPageSize());
|
|
|
String inputSymbol = viewDTO.getSymbol().toLowerCase();
|
|
|
String inputLegalCoin = viewDTO.getLegalCoin().toUpperCase();
|
|
|
|
|
|
- //1从redis查询
|
|
|
- if(amount == null && StrUtil.isEmpty(payway)) {
|
|
|
- long start = (pageNum - 1) * pageSize;
|
|
|
- long end = pageNum * pageSize-1;
|
|
|
- String zsetKey = getViewAdKey(direction, inputLegalCoin, inputSymbol);
|
|
|
- ArrayList<Object> adList = redisUtils.getRange(zsetKey, type, start, end);
|
|
|
- if (adList != null) {
|
|
|
- for(Object adId : adList) {
|
|
|
- Long adIdLong = Long.valueOf((String)adId);
|
|
|
- C2cAdEntity ad = selectAdFromRedis(adIdLong);
|
|
|
- if(ad == null) {
|
|
|
- ad = selectById(adIdLong);
|
|
|
- delSetAdCache(ad);
|
|
|
- }
|
|
|
- if(ad!=null && ad.getUserId().longValue()!=StpUtil.getLoginIdAsLong()) {
|
|
|
- resList.add(ad);
|
|
|
- }
|
|
|
- }
|
|
|
- PageData<C2cAdEntity> data = new PageData<C2cAdEntity>(resList,resList.size());
|
|
|
- return result.ok(data);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
//2 查数据库
|
|
|
List paywayList = new ArrayList();
|
|
|
if (StrUtil.isNotEmpty(payway)) {
|
|
|
@@ -471,6 +426,7 @@ public class C2cAdServiceImpl extends BaseServiceImpl<C2cAdDao, C2cAdEntity> imp
|
|
|
.eq(StrUtil.isNotBlank(inputLegalCoin),C2cAdEntity::getLegalCoin, inputLegalCoin)
|
|
|
.eq(StrUtil.isNotBlank(inputSymbol),C2cAdEntity::getSymbol, inputSymbol)
|
|
|
.eq(C2cAdEntity::getStatus,AdStatusEnum.PASS.getCode())
|
|
|
+ .eq(Objects.nonNull(tag) && tag != -1,C2cAdEntity::getTag,tag)
|
|
|
.le(Objects.nonNull(amount),C2cAdEntity::getMinAmount,amount)
|
|
|
.ge(Objects.nonNull(amount),C2cAdEntity::getMaxAmount,amount);
|
|
|
if(paywayList.size()>0) {
|
|
|
@@ -478,7 +434,7 @@ public class C2cAdServiceImpl extends BaseServiceImpl<C2cAdDao, C2cAdEntity> imp
|
|
|
wrapper.and(qw -> createQw(qw, finalPaywayList));
|
|
|
}
|
|
|
|
|
|
-
|
|
|
+ // 按价格排序
|
|
|
IPage<C2cAdEntity> page = baseDao.selectPage(
|
|
|
getPage(params, "price", "asc".equals(type) ? true : false),
|
|
|
wrapper
|