package com.yami.trading.huobi.data.internal;
|
|
|
import com.yami.trading.bean.data.domain.Realtime;
|
import com.yami.trading.bean.item.domain.Item;
|
import com.yami.trading.common.exception.BusinessException;
|
import com.yami.trading.common.exception.YamiShopBindException;
|
import com.yami.trading.common.util.Arith;
|
import com.yami.trading.huobi.data.AdjustmentValueCache;
|
import com.yami.trading.huobi.data.model.AdjustmentValue;
|
import com.yami.trading.service.data.DataService;
|
import com.yami.trading.service.item.ItemService;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Qualifier;
|
import org.springframework.stereotype.Component;
|
|
import java.math.BigDecimal;
|
import java.math.RoundingMode;
|
|
@Component
|
public class AdjustmentValueServiceImpl implements AdjustmentValueService {
|
|
@Autowired
|
@Qualifier("dataService")
|
private DataService dataService;
|
@Autowired
|
private ItemService itemService;
|
|
public void adjust(String symbol, BigDecimal value, double second) {
|
if (value.compareTo(BigDecimal.ZERO) == 0) {
|
return;
|
}
|
|
Realtime realtime = dataService.realtime(symbol).get(0);
|
BigDecimal new_price = realtime.getClose();
|
BigDecimal plus = value.abs();
|
// if (plus.divide(new_price, 2, RoundingMode.HALF_UP).compareTo(new BigDecimal("0.1")) > 0) {
|
// throw new YamiShopBindException("调整偏差过大,超过10%");
|
// }
|
|
if (second <= 0) {
|
/**
|
* 即时生效
|
*/
|
|
BigDecimal currentValue = AdjustmentValueCache.getCurrentValue().get(symbol);
|
|
if (currentValue == null) {
|
AdjustmentValueCache.getCurrentValue().put(symbol, value);
|
} else {
|
AdjustmentValueCache.getCurrentValue().put(symbol, currentValue.add(value));
|
}
|
// 马上扣除价格,避免因为数据没有拉取导致加不正确
|
realtime.setClose(realtime.getClose().add(value));
|
/*
|
* 持久化缓存
|
*/
|
Item item = this.itemService.findBySymbol(symbol);
|
if (item.getAdjustmentValue().compareTo(AdjustmentValueCache.getCurrentValue().get(symbol)) != 0) {
|
item.setAdjustmentValue(AdjustmentValueCache.getCurrentValue().get(symbol));
|
itemService.saveOrUpdate(item);
|
}
|
|
} else {
|
AdjustmentValue adjustmentValue = new AdjustmentValue();
|
adjustmentValue.setSymbol(symbol);
|
adjustmentValue.setValue(value);
|
adjustmentValue.setSecond(second);
|
AdjustmentValueCache.getDelayValue().put(symbol, adjustmentValue);
|
}
|
}
|
|
@Override
|
public BigDecimal getCurrentValue(String symbol) {
|
return AdjustmentValueCache.getCurrentValue().get(symbol);
|
}
|
|
@Override
|
public AdjustmentValue getDelayValue(String symbol) {
|
return AdjustmentValueCache.getDelayValue().get(symbol);
|
}
|
|
public void setDataService(DataService dataService) {
|
this.dataService = dataService;
|
}
|
|
public void setItemService(ItemService itemService) {
|
this.itemService = itemService;
|
}
|
|
}
|