📄 stockbean.java
字号:
package sessions;
import entities.Holding;
import entities.Trade;
import entities.TradeType;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
@Stateless
public class StockBean implements StockLocal {
@PersistenceContext
private EntityManager em;
public StockBean() {
}
public void persist(Object object) {
em.persist(object);
}
public void addTrade(Trade trade) {
Trade tradeMg = em.merge(trade);
if(tradeMg != null)
trade = tradeMg;
persist(trade);
Query query = em.createQuery("select h from Holding h where h.stock = :stock");
query.setParameter("stock", trade.getStock());
Holding holding = null;
try{
holding = (Holding) query.getSingleResult();
} catch(NoResultException e){
holding = new Holding();
holding.setStock(trade.getStock());
}
handleTrade(holding, trade);
persist(holding);
}
private void handleTrade(Holding holding, Trade trade) {
if(trade.getType().equals(TradeType.BUY)){
long newShareNum = holding.getShareNum() + trade.getShareNum();
double total = holding.getAverageCost()*holding.getShareNum() + trade.getShareNum()*trade.getPrice();
double newCost = total / newShareNum;
holding.setAverageCost(newCost);
holding.setShareNum(newShareNum);
} else if (trade.getType().equals(TradeType.SELL)) {
long newShareNum = holding.getShareNum() - trade.getShareNum();
double total = holding.getAverageCost()*holding.getShareNum() - trade.getShareNum()*trade.getPrice();
double newCost = total / newShareNum;
holding.setAverageCost(newCost);
holding.setShareNum(newShareNum);
} else {
throw new UnsupportedOperationException("Not yet implemented");
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -