package cn.newgxu.bbs.service.impl; import java.util.Date; import java.util.LinkedList; import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import cn.newgxu.bbs.common.Constants; import cn.newgxu.bbs.common.exception.BBSException; import cn.newgxu.bbs.common.exception.BBSExceptionMessage; import cn.newgxu.bbs.common.util.Util; import cn.newgxu.bbs.domain.StoreItem; import cn.newgxu.bbs.domain.market.FreeMarketBusinessLog; import cn.newgxu.bbs.domain.market.FreeMarketItem; import cn.newgxu.bbs.domain.market.Item; import cn.newgxu.bbs.domain.market.ItemLine; import cn.newgxu.bbs.domain.market.ItemType; import cn.newgxu.bbs.domain.market.ItemUsedLog; import cn.newgxu.bbs.domain.message.Message; import cn.newgxu.bbs.domain.user.User; import cn.newgxu.bbs.service.MarketService; import cn.newgxu.bbs.web.model.admin.ItemManageModel; import cn.newgxu.bbs.web.model.market.FreeMarketItemBuyDoModel; import cn.newgxu.bbs.web.model.market.FreeModel; import cn.newgxu.bbs.web.model.market.ItemSellDoModel; import cn.newgxu.bbs.web.model.market.OfficialBuyDoModel; import cn.newgxu.bbs.web.model.market.OfficialModel; import cn.newgxu.bbs.web.model.market.OperateItemLogModel; import cn.newgxu.jpamodel.ObjectNotFoundException; /** * * @author polly * @since 4.0.0 * @version $Revision 1.1$ */ public class MarketServiceImpl implements MarketService { private static final Log log = LogFactory.getLog(MarketServiceImpl.class); public void getStoreItems(OfficialModel model) { model.getPagination().setRecordSize(StoreItem.getNumberOfStoreItems()); model.setItems(StoreItem.getStoreItems(model.getPagination())); if (log.isDebugEnabled()) { log.debug(StoreItem.getStoreItems(model.getPagination())); } } public void officialBuyDo(OfficialBuyDoModel model) throws BBSException { StoreItem si; try { si = StoreItem.get(model.getId()); } catch (ObjectNotFoundException e) { throw new BBSException(BBSExceptionMessage.PARAMETER_ERROR); } si.sell(model.getNumber()); payForStoreItem(model.getUser(), model.getNumber(), si.getUnitPrice()); for (int i = 0; i < model.getNumber(); i++) { ItemLine itemLine = new ItemLine(); itemLine.setUser(model.getUser()); itemLine.setItem(si.getItem()); itemLine.save(); } } private void payForStoreItem(User user, int number, int unitPrice) throws BBSException { // int total = (int) ((double) (number * unitPrice) * user.getAgio()); int total = (int) ((double) (number * unitPrice)); user.payFor(total); } public void itemSellDo(ItemSellDoModel model) throws BBSException { if (log.isDebugEnabled()) { log.debug("itemLine id=" + model.getId()); } try { model.getUser().sellItem(ItemLine.get(model.getId()), model.getPrice()); } catch (ObjectNotFoundException e) { throw new BBSException(BBSExceptionMessage.PARAMETER_ERROR); } } public void freeMarket(FreeModel model) { model.setCategory(Item.getItems()); // 查看自己卖的所有物品 if (model.isViewMyItems()) { model.setItems(FreeMarketItem.getItemsByUser(model.getUser(), model .getPagination())); model.getPagination().setRecordSize( FreeMarketItem.getNumberOfItemsByUser(model.getUser())); } // 查看所有人卖的物品 else { // 查看所有物品 if (model.getCategoryId() == 0) { model.setItems(FreeMarketItem.getItems(model.getPagination())); model.getPagination().setRecordSize( FreeMarketItem.getNumberOfItems()); } // 查看指定物品 else { try { Item item = Item.get(model.getCategoryId()); model.setItems(FreeMarketItem.getItemsByItem(item, model .getPagination())); model.getPagination().setRecordSize( FreeMarketItem.getNumberOfItemsByItem(item)); } catch (ObjectNotFoundException e) { if (log.isDebugEnabled()) { log.error(e); log .error("严重错误!请检查" + "MarketServiceProxy.freeMarket(FreeModel model)"); } model.setItems(new LinkedList<FreeMarketItem>()); } } } } public void freeMarketItemBuyDo(FreeMarketItemBuyDoModel model) throws BBSException { FreeMarketItem freeMarketItem = null; try { freeMarketItem = FreeMarketItem.get(model.getId()); } catch (ObjectNotFoundException e) { throw new BBSException(BBSExceptionMessage.PARAMETER_ERROR); } int price = freeMarketItem.getUnitPrice(); int tax = Util.reckonTax(price, Constants.FREE_MARKET_BUSINESS_TAX); int income = Util.reckonAfterTax(price, Constants.FREE_MARKET_BUSINESS_TAX); User buyer = model.getUser(); buyer.payFor(price); User seller = freeMarketItem.getUser(); seller.addMoney(income); ItemLine itemLine = new ItemLine(); itemLine.setItem(freeMarketItem.getItem()); itemLine.setMakerId(freeMarketItem.getMakerId()); itemLine.setUser(buyer); if (log.isDebugEnabled()) { log.debug("售价:" + price); log.debug("税后:" + income); log.debug("税金:" + tax); } seller.update(); String str = buyer.getNick() + "购买了你挂在的" + itemLine.getItem().getName() + ",你获得了" + income + "西大币"; // 发送消息 // 最后一个修改为买家的nick 2012-05-15 Message.sendMessage("物品出售信息", str, 1, seller, buyer, seller.getNick()); log.debug(seller); buyer.update(); log.debug(buyer); itemLine.save(); log.debug(itemLine); freeMarketItem.delete(); log.debug(freeMarketItem); FreeMarketBusinessLog.log(seller, buyer, itemLine.getItem(), price, income, tax); } public void cleanFreeMarketItem() { Date currentTime = new Date(); List<FreeMarketItem> overdueItems = FreeMarketItem .getOverdueItems(currentTime); for (FreeMarketItem freeMarketItem : overdueItems) { ItemLine itemLine = new ItemLine(); itemLine.setItem(freeMarketItem.getItem()); itemLine.setMakerId(freeMarketItem.getMakerId()); itemLine.setUser(freeMarketItem.getUser()); itemLine.save(); freeMarketItem.delete(); } if (log.isDebugEnabled()) { log.debug("清理过期商品... 当前时刻:" + currentTime); log.debug("共有过期商品:" + overdueItems.size() + " 件!"); log.debug("过期商品列表:" + overdueItems); } } public void createItem(ItemManageModel model) throws ObjectNotFoundException { Item item = new Item(); item.setName(model.getName()); item.setType(ItemType.get(model.getItem_type_id())); item.setEffect(model.getEffect()); item.setObjectBadboy(model.getObjectBadboy()); item.setObjectExp(model.getObjectExp()); item.setObjectPower(model.getObjectPower()); item.setProbability(model.getProbability()); item.setReturnId(model.getReturnId()); item.setSelfMoney(model.getSelfMoney()); item.setSelfPower(model.getSelfPower()); item.setMessage(model.getMessage()); item.setMessage_title(model.getMessage_title()); item.save(); StoreItem storeItem = new StoreItem(); storeItem.setItem(item); storeItem.setNumber(0); storeItem.setUnitPrice(0); storeItem.save(); } public void getItemTypes(ItemManageModel model) { model.setItemTypes(ItemType.getItemTypes()); } public void getItems(ItemManageModel model) { model.setItems(Item.getItems()); } public void editItem(ItemManageModel model) throws ObjectNotFoundException { Item item = Item.get(model.getId()); item.setName(model.getName()); item.setType(ItemType.get(model.getItem_type_id())); item.setEffect(model.getEffect()); item.setObjectBadboy(model.getObjectBadboy()); item.setObjectExp(model.getObjectExp()); item.setObjectPower(model.getObjectPower()); item.setProbability(model.getProbability()); item.setReturnId(model.getReturnId()); item.setSelfMoney(model.getSelfMoney()); item.setSelfPower(model.getSelfPower()); item.setMessage(model.getMessage()); item.setMessage_title(model.getMessage_title()); item.update(); } public void getItem(ItemManageModel model) throws ObjectNotFoundException { Item item = Item.get(model.getId()); model.setEffect(item.getEffect()); model.setName(item.getName()); model.setItem_type_id(item.getType().getId()); model.setObjectBadboy(item.getObjectBadboy()); model.setObjectExp(item.getObjectExp()); model.setObjectPower(item.getObjectPower()); model.setSelfMoney(item.getSelfMoney()); model.setSelfPower(item.getSelfPower()); } public void editStoreItem(ItemManageModel model) throws ObjectNotFoundException { StoreItem storeItem = StoreItem.get(model.getId()); storeItem.setNumber(model.getNumber()); storeItem.setUnitPrice(model.getUnitPrice()); storeItem.save(); } /* * 物品操作记录 */ public void operateItemLog(OperateItemLogModel model) throws BBSException { User user = model.getUser(); switch (model.getTypeId()) { case 0: model .setLogs(ItemUsedLog.getByType(user, 0, model .getPagination())); break; case 1: model .setLogs(ItemUsedLog.getByType(user, 1, model .getPagination())); break; case 2: model .setLogs(ItemUsedLog.getByType(user, 2, model .getPagination())); break; default: throw new BBSException("操作类型错误!"); } } }