package cn.newgxu.bbs.domain.item.impl;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import cn.newgxu.bbs.common.exception.BBSException;
import cn.newgxu.bbs.common.exception.BBSExceptionMessage;
import cn.newgxu.bbs.domain.item.ReturnBehavior;
import cn.newgxu.bbs.domain.market.Item;
import cn.newgxu.bbs.domain.market.ItemLine;
import cn.newgxu.bbs.domain.user.User;
import cn.newgxu.jpamodel.ObjectNotFoundException;
/**
*
* @author polly
* @since 4.0.0
* @version $Revision 1.1$
*/
public class HasReturnBehavior implements ReturnBehavior {
private static final Log log = LogFactory.getLog(HasReturnBehavior.class);
public void execute(ItemLine itemLine) throws BBSException {
if(!itemLine.getItem().isCanUse())
throw new BBSException("对不起,该物品现在不能使用。使用时间为"+itemLine.getItem().getExpand1());
Item newItem=null;
int okRate = 70;//成功的几率。放在前面,下面好控制,比如随机得到物品,是100%的
if (itemLine.getItem().getReturnId() == -1) {
/**
* 在这里判断一下,如果 typeId=3, retuenId=-1,work_method!=null
* 那么就是从 work_method 中获取物品的id集合,
* work_method为null时,就从全部物品中获取。
*
*/
if(itemLine.getItem().getExpand1()==null||itemLine.getItem().getExpand1().trim().length()==0){
newItem = Item.getRandomItem();
if (log.isDebugEnabled()) {
log.debug("得到随机物品:" + newItem);
}
}
else{
System.out.println("随机得到指定的物品,设置成功率为100====================");
okRate=100;
Object result=Item.getRandomItem(itemLine.getItem().getExpand1());
//如果返回的是一个 Integer 对象,那么就是用户西大币加上这个Integer值
if(result instanceof Integer){
System.out.println("随机得到西大币=====================");
User user=itemLine.getUser();
user.addMoney((Integer)result);
user.save();
}
else if(result instanceof Item){
newItem=(Item)result;
System.out.println("随机得到物品:"+newItem.getName()+"=====================");
}
else{
System.out.println("什么也没有");
}
}
} else {
try {
int pro=itemLine.getItem().getProbability();
if(pro==0)
okRate=100;
else
okRate=pro;
newItem = Item.get(itemLine.getItem().getReturnId());
if (log.isDebugEnabled()) {
log.debug("制造物品:" + newItem);
}
} catch (ObjectNotFoundException e) {
log.error(e);
log.error("严重错误:Item 没有找到! id="
+ itemLine.getItem().getReturnId());
log.error("严重错误:itemLine=" + itemLine);
return;
}
}
// 生产物品有几率失败,成功率初始值为70%
// 未来考虑和BB值挂钩
int rp = (int) (Math.random() * 100);
if (rp > okRate) {
throw new BBSException(BBSExceptionMessage.CREATE_ITEM_FAIL);
}
//只有在newItem存在的情况下才会保存
if(newItem!=null){
ItemLine itemLine2 = new ItemLine();
itemLine2.setItem(newItem);
// 对谁使用,物品就是谁的,而且是他制造的。
itemLine2.setUser(itemLine.getObject());
itemLine2.setMaker(itemLine.getObject());
itemLine2.save();
}
}
}