package project.data.internal;
|
|
import kernel.exception.BusinessException;
|
import kernel.util.Arith;
|
import project.data.AdjustmentValue;
|
import project.data.AdjustmentValueCache;
|
import project.data.AdjustmentValueService;
|
import project.data.DataService;
|
import project.data.model.Realtime;
|
import project.item.ItemService;
|
import project.item.model.Item;
|
|
public class AdjustmentValueServiceImpl implements AdjustmentValueService {
|
|
private DataService dataService;
|
|
private ItemService itemService;
|
|
public void adjust(String symbol, double value, double second) {
|
if (value == 0.0D) {
|
return;
|
}
|
|
Realtime realtime = dataService.realtime(symbol).get(0);
|
double new_price = realtime.getClose();
|
double plus = Math.abs(value);
|
if (Arith.div(plus, new_price) > 0.1D) {
|
throw new BusinessException("调整偏差过大,超过10%");
|
}
|
|
if (second <= 0) {
|
/**
|
* 即时生效
|
*/
|
|
Double currentValue = AdjustmentValueCache.getCurrentValue().get(symbol);
|
|
if (currentValue == null) {
|
AdjustmentValueCache.getCurrentValue().put(symbol, value);
|
} else {
|
AdjustmentValueCache.getCurrentValue().put(symbol, Arith.add(currentValue, value));
|
}
|
/*
|
* 持久化缓存
|
*/
|
Item item = this.itemService.cacheBySymbol(symbol, false);
|
if (item.getAdjustment_value() != AdjustmentValueCache.getCurrentValue().get(symbol)) {
|
item.setAdjustment_value(AdjustmentValueCache.getCurrentValue().get(symbol));
|
itemService.update(item);
|
}
|
|
} else {
|
AdjustmentValue adjustmentValue = new AdjustmentValue();
|
adjustmentValue.setSymbol(symbol);
|
adjustmentValue.setValue(value);
|
adjustmentValue.setSecond(second);
|
AdjustmentValueCache.getDelayValue().put(symbol, adjustmentValue);
|
}
|
}
|
|
@Override
|
public Double 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;
|
}
|
}
|