package cn.newgxu.bbs.domain.market; import java.util.LinkedHashMap; import java.util.List; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.Table; import javax.persistence.Transient; import cn.newgxu.bbs.common.Pagination; import cn.newgxu.bbs.common.exception.BBSException; import cn.newgxu.bbs.domain.Topic; import cn.newgxu.bbs.domain.item.ConsumeBehaviorFactory; import cn.newgxu.bbs.domain.item.ObjectStateBehaviorFactory; import cn.newgxu.bbs.domain.item.ReturnBehaviorFactory; import cn.newgxu.bbs.domain.item.SelfStateBehaviorFactory; import cn.newgxu.bbs.domain.item.Useable; import cn.newgxu.bbs.domain.item.WorkBehaviorFactory; import cn.newgxu.bbs.domain.message.Message; import cn.newgxu.bbs.domain.user.User; import cn.newgxu.jpamodel.JPAEntity; import cn.newgxu.jpamodel.ObjectNotFoundException; /** * * @author polly * @since 4.0.0 * @version $Revision 1.1$ */ /** * @author polly * @version 0.0.1 * * TODO */ @Entity @Table(name = "item_line") public class ItemLine extends JPAEntity implements Useable { private static final long serialVersionUID = -3823171890330319996L; /** * 使用目标。 */ @Transient private User object; @Transient private Topic topic; @Transient private ItemWork work; @Id @Column(name = "id") // @GeneratedValue(strategy = GenerationType.SEQUENCE,generator="id_seq") // @SequenceGenerator(name="id_seq", sequenceName="seq_item_line") @GeneratedValue(strategy = GenerationType.IDENTITY) private long id = -1; @ManyToOne(cascade = { CascadeType.REFRESH }, fetch = FetchType.LAZY) @JoinColumn(name = "user_id") private User user; @ManyToOne(cascade = { CascadeType.REFRESH }, fetch = FetchType.LAZY) @JoinColumn(name = "item_id") private Item item; @Column(name = "maker_id") private int makerId; public long getId() { return id; } public void setId(int id) { this.id = id; } public Item getItem() { return item; } public void setItem(Item item) { this.item = item; } public int getMakerId() { return makerId; } public void setMakerId(int makerId) { this.makerId = makerId; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } // ------------------------------------------------ public static ItemLine get(long id) throws ObjectNotFoundException { return (ItemLine) getById(ItemLine.class, id); } @SuppressWarnings("unchecked") public static List<ItemLine> getItemLines(User user, Pagination p) { return (List<ItemLine>) Q( "from ItemLine i where user = ?1 order by i.id desc", P(1, user), p).getResultList(); } @SuppressWarnings("unchecked") public static List<ItemLine> getItemLinesByUser(User user, int item_id) { return (List<ItemLine>) Q( "from ItemLine i where user = ?1 and item.id=?2", P(1, user), P(2, item_id)).getResultList(); } public void setMaker(User maker) { if (maker.getId() < 1) { this.makerId = 0; } else { this.makerId = maker.getId(); } } public User getMaker() { if (this.makerId < 1) { return new User(); } return User.getCertainExist(this.makerId); } public User getObject() { return object; } public Topic getTopic() { return topic; } public ItemWork getWork() { return work; } public void use(User object) throws BBSException { this.object = object; this.work = new ItemWork(); //本身状态的改变 SelfStateBehaviorFactory.getInstance(getItem().getType()).change(this); //效果 ObjectStateBehaviorFactory.getInstance(getItem().getType()).change(this); //有返回物品 ReturnBehaviorFactory.getInstance(getItem().getType()).execute(this); //应用效果 WorkBehaviorFactory.getInstance(getItem().getWorkMethod()) .execute(this); //消耗性物品 ConsumeBehaviorFactory.getInstance(getItem().getType()).use(this); ItemUsedLog.log(this.getUser(), this.object, this.getItem(), this.work, 0); Item i=this.getItem(); if(i.getMessage()!=null&&i.getMessage().trim().length()>0){ if(i.getMessage_title()==null) i.setMessage_title("道具'"+i.getName()+"'使用通知"); Message.sendItemLineMessage(this); } } public void use(Topic topic) throws BBSException { this.topic = topic; this.work = new ItemWork(); // SelfStateBehaviorFactory.getInstance(getItem().getType()).change(this); // ObjectStateBehaviorFactory.getInstance(getItem().getType()).change(this); ReturnBehaviorFactory.getInstance(getItem().getType()).execute(this); WorkBehaviorFactory.getInstance(getItem().getWorkMethod()) .execute(this); ConsumeBehaviorFactory.getInstance(getItem().getType()).use(this); // ItemUsedLog.log(this.getUser(), this.object, this.getItem(), // this.work,0); } public static int getNumberOfItemLines(User user) { try { return ((Long) SQ( "select count(*) from ItemLine i where user = ?1", P(1, user))).intValue(); } catch (ObjectNotFoundException e) { return 0; } } public void changeOwner(User object, String wish) { log.debug("改变物品的拥有者!"); ItemLine newItemLine = new ItemLine(); newItemLine.setUser(object); newItemLine.setItem(this.getItem()); newItemLine.setMaker(this.getMaker()); newItemLine.save(); this.delete(); this.work = new ItemWork(); ItemUsedLog.log(this.getUser(), object, this.getItem(), this.work, 1); String str = this.getUser().getNick() + "网友成功送你" + this.getItem().getName() + "物品,详情请查看物流日记"; String strWish = this.getUser().getNick() + "网友送上的祝福: " + wish; // 参数说明 最后一个参数为接收人昵称 Message.sendMessage(wish == null ? "物流消息" : this.getUser().getNick() + "的祝福", wish == null ? str : strWish, 1, object, this .getUser(), object.getNick()); } // ------------------------------------------------ @SuppressWarnings("serial") @Override public String toString() { return "itemLine" + new LinkedHashMap<String, Object>() { { put("id", id); put("user", user); put("item", item); put("makerId", makerId); } }.toString(); } }