Browse Source

公共询价单实体及Dao层方法

hejq 8 years ago
parent
commit
8da96fd25a

+ 35 - 0
src/main/java/com/uas/platform/b2b/dao/PublicInquiryDao.java

@@ -0,0 +1,35 @@
+package com.uas.platform.b2b.dao;
+
+import com.uas.platform.b2b.model.PublicInquiry;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * 公共询价
+ *
+ * Created by hejq on 2018-01-06.
+ */
+@Repository
+public interface PublicInquiryDao extends JpaSpecificationExecutor<PublicInquiry>, JpaRepository<PublicInquiry, Long> {
+
+    /**
+     * 通过来源id和应用来源查询单据
+     *
+     * @param id 公共询价的主表id
+     * @param sourcerapp 应用来源
+     * @return
+     */
+    PublicInquiry findBySourceIdAndSourceApp(Long id, String sourcerapp);
+
+    /**
+     * 通过企业UU和询价单号查询询价信息
+     *
+     * @param enuu 企业UU号
+     * @param code 询价编号
+     * @return
+     */
+    List<PublicInquiry> findByEnUUAndCode(Long enuu, String code);
+}

+ 16 - 0
src/main/java/com/uas/platform/b2b/dao/PublicInquiryInfoDao.java

@@ -0,0 +1,16 @@
+package com.uas.platform.b2b.dao;
+
+import com.uas.platform.b2b.model.PublicInquiryInfo;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.stereotype.Repository;
+
+/**
+ * 公共询价
+ *
+ * Created by hejq on 2018-01-06.
+ */
+@Repository
+public interface PublicInquiryInfoDao extends JpaSpecificationExecutor<PublicInquiryInfo>, JpaRepository<PublicInquiryInfo, Long> {
+
+}

+ 49 - 0
src/main/java/com/uas/platform/b2b/dao/PublicInquiryItemDao.java

@@ -0,0 +1,49 @@
+package com.uas.platform.b2b.dao;
+
+import com.uas.platform.b2b.model.PublicInquiryItem;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
+import org.springframework.stereotype.Repository;
+
+import javax.transaction.Transactional;
+import java.util.Set;
+
+
+/**
+ *  公共询价明细
+ *
+ * Created by hejq on 2018-01-06.
+ */
+@Repository
+public interface PublicInquiryItemDao extends JpaRepository<PublicInquiryItem, Long>, JpaSpecificationExecutor<PublicInquiryItem> {
+
+    /**
+     * 通过供应商UU号和来源id查询单据明细
+     *
+     * @param uu 供应商UU号
+     * @param id 来源id
+     * @return
+     */
+    PublicInquiryItem findByVendUUAndSourceId(Long uu, Long id);
+
+    /**
+     * 根据传回的id更新下载状态
+     *
+     * @param ids 询价明细idList
+     */
+    @Modifying
+    @Transactional
+    @Query("update PublicInquiryItem i set i.backStatus = 351 where i.id in (:ids)")
+    void updateBackStatus(@Param("ids") Set<Long> ids);
+
+    /**
+     * 按询价单明细ID更新采纳结果
+     *
+     */
+    @Modifying(clearAutomatically = true)
+    @Query("update PurchaseInquiryItem p set p.agreed = :agreed, p.decideStatus = :decideStatus where p.id = :id")
+    void updateDecideStatusByID(@Param("agreed")Short agreed, @Param("decideStatus") Short decideStatus, @Param("id") Long id);
+}

+ 39 - 0
src/main/java/com/uas/platform/b2b/dao/PublicInquiryItemInfoDao.java

@@ -0,0 +1,39 @@
+package com.uas.platform.b2b.dao;
+
+import com.uas.platform.b2b.model.PublicInquiryItemInfo;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ *  公共询价明细Dao
+ *
+ * Created by hejq on 2018-01-06.
+ */
+@Repository
+public interface PublicInquiryItemInfoDao extends JpaRepository<PublicInquiryItemInfo, Long>, JpaSpecificationExecutor<PublicInquiryItemInfo> {
+
+    /**
+     * 按卖家企业ID和询价主记录ID查找
+     *
+     * @param vendUU 卖家的企业UU号
+     * @param inquiryId 询价单主表id
+     * @return
+     */
+    @Query("from PublicInquiryItemInfo d where d.vendUU = :vendUU and d.inquiry.id = :inquiryId")
+    List<PublicInquiryItemInfo> findByVendUUAndInquiry(@Param("vendUU") Long vendUU, @Param("inquiryId") Long inquiryId);
+
+    /**
+     * 按买家企业ID和明细传报价状态查找询价明细
+     *
+     * @param enUU 客户UU号
+     * @param backStatus 下载状态:202未下载;203已下载;351下载中
+     * @return
+     */
+    @Query("from PublicInquiryItemInfo d where d.inquiry.enUU = :enUU and d.backStatus = :backStatus and nvl(d.sourceApp, ' ') <> 'B2B'")
+    List<PublicInquiryItemInfo> findByEnUUAndBackStatus(@Param("enUU") Long enUU, @Param("backStatus") short backStatus);
+}

+ 15 - 0
src/main/java/com/uas/platform/b2b/dao/PublicInquiryReplyDao.java

@@ -0,0 +1,15 @@
+package com.uas.platform.b2b.dao;
+
+import com.uas.platform.b2b.model.PublicInquiryReply;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.stereotype.Repository;
+
+/**
+ * 公共询价报价信息
+ *
+ * Created by hejq on 2018-01-06.
+ */
+@Repository
+public interface PublicInquiryReplyDao extends JpaRepository<PublicInquiryReply, Long>, JpaSpecificationExecutor<PublicInquiryReply> {
+}

+ 361 - 0
src/main/java/com/uas/platform/b2b/model/PublicInquiry.java

@@ -0,0 +1,361 @@
+package com.uas.platform.b2b.model;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import org.codehaus.jackson.annotate.JsonIgnore;
+
+import javax.persistence.*;
+import java.io.Serializable;
+import java.util.Date;
+import java.util.Set;
+
+/**
+ * 公共询价单主表
+ *    <pre>
+ *        这里是公共询价转成报价后存的数据信息,与以前的采购询价分开
+ *    </pre>
+ * @author hejq 2018-01-06
+ */
+@Table(name = "public$inquiry")
+@Entity
+public class PublicInquiry implements Serializable {
+
+	/**
+	 * 序列
+	 */
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * id
+	 */
+	@Id
+	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "public$inquiry_gen")
+	@SequenceGenerator(name = "public$inquiry_gen", sequenceName = "public$inquiry_seq", allocationSize = 1)
+	@Column(name = "in_id")
+	private Long id;
+
+	/**
+	 * 询价单所属企业UU
+	 */
+	@Column(name = "in_enuu")
+	private Long enUU;
+
+	/**
+	 * 询价单所属用户UU
+	 */
+	@Column(name = "in_recorderuu")
+	private Long recorderUU;
+
+	/**
+	 * 询价企业
+	 */
+	@OneToOne(cascade = { CascadeType.MERGE, CascadeType.REFRESH })
+	@JoinColumn(name = "in_enuu", insertable = false, updatable = false)
+	private EnterpriseInfo enterprise;
+
+	/**
+	 * 流水号
+	 */
+	@Column(name = "in_code")
+	private String code;
+
+	/**
+	 * 单据归属日期
+	 */
+	@Column(name = "in_date")
+	private Date date;
+
+	/**
+	 * 录入人
+	 */
+	@Column(name = "in_recorder")
+	private String recorder;
+
+	/**
+	 * 审核人
+	 */
+	@Column(name = "in_auditor")
+	private String auditor;
+
+	/**
+	 * 报价截止日期
+	 */
+	@Column(name = "in_enddate")
+	private Date endDate;
+
+	/**
+	 * 备注
+	 */
+	@Column(name = "in_remark")
+	private String remark;
+
+	/**
+	 * 环保要求
+	 */
+	@Column(name = "in_environment")
+	private String environment;
+
+	/**
+	 * 价格类型
+	 */
+	@Column(name = "in_pricetype")
+	private String priceType;
+
+	/**
+	 * 询价明细
+	 */
+	@OneToMany(mappedBy = "inquiry", cascade = { CascadeType.REFRESH, CascadeType.PERSIST, CascadeType.REMOVE,
+			CascadeType.MERGE }, fetch = FetchType.EAGER)
+	@OrderBy("number")
+	private Set<PublicInquiryItem> inquiryItems;
+
+	/**
+	 * 来源系统单据ID
+	 */
+	@Column(name = "in_sourceid")
+	private Long sourceId;
+
+	/**
+	 * 附件
+	 */
+	@OneToMany(fetch = FetchType.EAGER, cascade = {CascadeType.ALL})
+	@JoinTable(name = "publicinquiry$attach", joinColumns = @JoinColumn(name = "in_id", referencedColumnName = "in_id"), inverseJoinColumns = @JoinColumn(name="at_id", referencedColumnName = "at_id"))
+	private Set<Attach> attachs;
+
+	/**
+	 * 客户已提交
+	 */
+	@Column(name = "in_checked")
+	private Short check;
+
+	/**
+	 * 是否过期
+	 */
+	@Column(name = "in_overdue", insertable = false, updatable = false)
+	private Short overdue;
+
+	/**
+	 * 是否公开<br>
+	 * 1、 公共<br>
+	 * 0、 不用开
+	 */
+	@Column(name = "in_isopen")
+	private Short isOpen;
+
+	/**
+	 * 应用来源,主要是为了平台公共询价做处理
+	 */
+	@Column(name = "in_sourceapp")
+	private String sourceApp;
+
+	/**
+	 * 收货地址
+	 */
+	@Column(name = "in_ship")
+	private String ship;
+
+	/**
+	 * 是否开票<br>
+	 * 1. 是<br>
+	 * 0. 否
+	 */
+	@Column(name = "in_invoice")
+	private Short invoice;
+
+	/**
+	 * 询价类型
+	 */
+	@Column(name = "in_inquirytype")
+	private String inquirytype;
+
+	/**
+	 * 询价种类(公共或其他)
+	 */
+	@Column(name = "in_kind")
+	private String kind;
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public String getCode() {
+		return code;
+	}
+
+	public String getPriceType() {
+		return priceType;
+	}
+
+	public void setPriceType(String priceType) {
+		this.priceType = priceType;
+	}
+
+	public void setCode(String code) {
+		this.code = code;
+	}
+
+	public Date getDate() {
+		return date;
+	}
+
+	public void setDate(Date date) {
+		this.date = date;
+	}
+
+	public String getRecorder() {
+		return recorder;
+	}
+
+	public void setRecorder(String recorder) {
+		this.recorder = recorder;
+	}
+
+	public String getAuditor() {
+		return auditor;
+	}
+
+	public void setAuditor(String auditor) {
+		this.auditor = auditor;
+	}
+
+	public Date getEndDate() {
+		return endDate;
+	}
+
+	public void setEndDate(Date endDate) {
+		this.endDate = endDate;
+	}
+
+	public String getRemark() {
+		return remark;
+	}
+
+	public void setRemark(String remark) {
+		this.remark = remark;
+	}
+
+	public Long getEnUU() {
+		return enUU;
+	}
+
+	public void setEnUU(Long enUU) {
+		this.enUU = enUU;
+	}
+
+	public EnterpriseInfo getEnterprise() {
+		return enterprise;
+	}
+
+	public void setEnterprise(EnterpriseInfo enterprise) {
+		this.enterprise = enterprise;
+	}
+
+	public Long getRecorderUU() {
+		return recorderUU;
+	}
+
+	public void setRecorderUU(Long recorderUU) {
+		this.recorderUU = recorderUU;
+	}
+
+	public Long getSourceId() {
+		return sourceId;
+	}
+
+	public void setSourceId(Long sourceId) {
+		this.sourceId = sourceId;
+	}
+
+	@JsonIgnore
+	@JSONField(serialize = false)
+	public Set<PublicInquiryItem> getInquiryItems() {
+		return inquiryItems;
+	}
+
+	public void setInquiryItems(Set<PublicInquiryItem> inquiryItems) {
+		this.inquiryItems = inquiryItems;
+	}
+
+	public Set<Attach> getAttachs() {
+		return attachs;
+	}
+
+	public void setAttachs(Set<Attach> attachs) {
+		this.attachs = attachs;
+	}
+
+	public String getEnvironment() {
+		return environment;
+	}
+
+	public void setEnvironment(String environment) {
+		this.environment = environment;
+	}
+
+	public Short getCheck() {
+		return check;
+	}
+
+	public void setCheck(Short check) {
+		this.check = check;
+	}
+
+	public Short getOverdue() {
+		return overdue;
+	}
+
+	public void setOverdue(Short overdue) {
+		this.overdue = overdue;
+	}
+
+	public Short getIsOpen() {
+		return isOpen;
+	}
+
+	public void setIsOpen(Short isOpen) {
+		this.isOpen = isOpen;
+	}
+
+	public String getSourceApp() {
+		return sourceApp;
+	}
+
+	public void setSourceApp(String sourceApp) {
+		this.sourceApp = sourceApp;
+	}
+
+	public String getShip() {
+		return ship;
+	}
+
+	public void setShip(String ship) {
+		this.ship = ship;
+	}
+
+	public Short getInvoice() {
+		return invoice;
+	}
+
+	public void setInvoice(Short invoice) {
+		this.invoice = invoice;
+	}
+
+	public String getInquirytype() {
+		return inquirytype;
+	}
+
+	public void setInquirytype(String inquirytype) {
+		this.inquirytype = inquirytype;
+	}
+
+	public String getKind() {
+		return kind;
+	}
+
+	public void setKind(String kind) {
+		this.kind = kind;
+	}
+}

+ 359 - 0
src/main/java/com/uas/platform/b2b/model/PublicInquiryInfo.java

@@ -0,0 +1,359 @@
+package com.uas.platform.b2b.model;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import org.codehaus.jackson.annotate.JsonIgnore;
+
+import javax.persistence.*;
+import java.io.Serializable;
+import java.util.Date;
+import java.util.Set;
+
+/**
+ * 公共询价单主表
+ *    <pre>
+ *        这里是公共询价转成报价后存的数据信息,与以前的采购询价分开
+ *    </pre>
+ * @author hejq 2018-01-06
+ */
+@Table(name = "v$public$inquiry")
+@Entity
+public class PublicInquiryInfo implements Serializable {
+
+	/**
+	 * 序列
+	 */
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * id
+	 */
+	@Id
+	@Column(name = "in_id")
+	private Long id;
+
+	/**
+	 * 询价单所属企业UU
+	 */
+	@Column(name = "in_enuu")
+	private Long enUU;
+
+	/**
+	 * 询价单所属用户UU
+	 */
+	@Column(name = "in_recorderuu")
+	private Long recorderUU;
+
+	/**
+	 * 询价企业
+	 */
+	@OneToOne(cascade = { CascadeType.MERGE, CascadeType.REFRESH })
+	@JoinColumn(name = "in_enuu", insertable = false, updatable = false)
+	private EnterpriseInfo enterprise;
+
+	/**
+	 * 流水号
+	 */
+	@Column(name = "in_code")
+	private String code;
+
+	/**
+	 * 单据归属日期
+	 */
+	@Column(name = "in_date")
+	private Date date;
+
+	/**
+	 * 录入人
+	 */
+	@Column(name = "in_recorder")
+	private String recorder;
+
+	/**
+	 * 审核人
+	 */
+	@Column(name = "in_auditor")
+	private String auditor;
+
+	/**
+	 * 报价截止日期
+	 */
+	@Column(name = "in_enddate")
+	private Date endDate;
+
+	/**
+	 * 备注
+	 */
+	@Column(name = "in_remark")
+	private String remark;
+
+	/**
+	 * 环保要求
+	 */
+	@Column(name = "in_environment")
+	private String environment;
+
+	/**
+	 * 价格类型
+	 */
+	@Column(name = "in_pricetype")
+	private String priceType;
+
+	/**
+	 * 询价明细
+	 */
+	@OneToMany(mappedBy = "inquiry", cascade = { CascadeType.REFRESH, CascadeType.PERSIST, CascadeType.REMOVE,
+			CascadeType.MERGE }, fetch = FetchType.EAGER)
+	@OrderBy("number")
+	private Set<PublicInquiryItemInfo> inquiryItems;
+
+	/**
+	 * 来源系统单据ID
+	 */
+	@Column(name = "in_sourceid")
+	private Long sourceId;
+
+	/**
+	 * 附件
+	 */
+	@OneToMany(fetch = FetchType.EAGER, cascade = {CascadeType.ALL})
+	@JoinTable(name = "publicinquiry$attach", joinColumns = @JoinColumn(name = "in_id", referencedColumnName = "in_id"), inverseJoinColumns = @JoinColumn(name="at_id", referencedColumnName = "at_id"))
+	private Set<Attach> attachs;
+
+	/**
+	 * 客户已提交
+	 */
+	@Column(name = "in_checked")
+	private Short check;
+
+	/**
+	 * 是否过期
+	 */
+	@Column(name = "in_overdue", insertable = false, updatable = false)
+	private Short overdue;
+
+	/**
+	 * 是否公开<br>
+	 * 1、 公共<br>
+	 * 0、 不用开
+	 */
+	@Column(name = "in_isopen")
+	private Short isOpen;
+
+	/**
+	 * 应用来源,主要是为了平台公共询价做处理
+	 */
+	@Column(name = "in_sourceapp")
+	private String sourceApp;
+
+	/**
+	 * 收货地址
+	 */
+	@Column(name = "in_ship")
+	private String ship;
+
+	/**
+	 * 是否开票<br>
+	 * 1. 是<br>
+	 * 0. 否
+	 */
+	@Column(name = "in_invoice")
+	private Short invoice;
+
+	/**
+	 * 询价类型
+	 */
+	@Column(name = "in_inquirytype")
+	private String inquirytype;
+
+	/**
+	 * 询价种类(公共或其他)
+	 */
+	@Column(name = "in_kind")
+	private String kind;
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public String getCode() {
+		return code;
+	}
+
+	public String getPriceType() {
+		return priceType;
+	}
+
+	public void setPriceType(String priceType) {
+		this.priceType = priceType;
+	}
+
+	public void setCode(String code) {
+		this.code = code;
+	}
+
+	public Date getDate() {
+		return date;
+	}
+
+	public void setDate(Date date) {
+		this.date = date;
+	}
+
+	public String getRecorder() {
+		return recorder;
+	}
+
+	public void setRecorder(String recorder) {
+		this.recorder = recorder;
+	}
+
+	public String getAuditor() {
+		return auditor;
+	}
+
+	public void setAuditor(String auditor) {
+		this.auditor = auditor;
+	}
+
+	public Date getEndDate() {
+		return endDate;
+	}
+
+	public void setEndDate(Date endDate) {
+		this.endDate = endDate;
+	}
+
+	public String getRemark() {
+		return remark;
+	}
+
+	public void setRemark(String remark) {
+		this.remark = remark;
+	}
+
+	public Long getEnUU() {
+		return enUU;
+	}
+
+	public void setEnUU(Long enUU) {
+		this.enUU = enUU;
+	}
+
+	public EnterpriseInfo getEnterprise() {
+		return enterprise;
+	}
+
+	public void setEnterprise(EnterpriseInfo enterprise) {
+		this.enterprise = enterprise;
+	}
+
+	public Long getRecorderUU() {
+		return recorderUU;
+	}
+
+	public void setRecorderUU(Long recorderUU) {
+		this.recorderUU = recorderUU;
+	}
+
+	public Long getSourceId() {
+		return sourceId;
+	}
+
+	public void setSourceId(Long sourceId) {
+		this.sourceId = sourceId;
+	}
+
+	@JsonIgnore
+	@JSONField(serialize = false)
+	public Set<PublicInquiryItemInfo> getInquiryItems() {
+		return inquiryItems;
+	}
+
+	public void setInquiryItems(Set<PublicInquiryItemInfo> inquiryItems) {
+		this.inquiryItems = inquiryItems;
+	}
+
+	public Set<Attach> getAttachs() {
+		return attachs;
+	}
+
+	public void setAttachs(Set<Attach> attachs) {
+		this.attachs = attachs;
+	}
+
+	public String getEnvironment() {
+		return environment;
+	}
+
+	public void setEnvironment(String environment) {
+		this.environment = environment;
+	}
+
+	public Short getCheck() {
+		return check;
+	}
+
+	public void setCheck(Short check) {
+		this.check = check;
+	}
+
+	public Short getOverdue() {
+		return overdue;
+	}
+
+	public void setOverdue(Short overdue) {
+		this.overdue = overdue;
+	}
+
+	public Short getIsOpen() {
+		return isOpen;
+	}
+
+	public void setIsOpen(Short isOpen) {
+		this.isOpen = isOpen;
+	}
+
+	public String getSourceApp() {
+		return sourceApp;
+	}
+
+	public void setSourceApp(String sourceApp) {
+		this.sourceApp = sourceApp;
+	}
+
+	public String getShip() {
+		return ship;
+	}
+
+	public void setShip(String ship) {
+		this.ship = ship;
+	}
+
+	public Short getInvoice() {
+		return invoice;
+	}
+
+	public void setInvoice(Short invoice) {
+		this.invoice = invoice;
+	}
+
+	public String getInquirytype() {
+		return inquirytype;
+	}
+
+	public void setInquirytype(String inquirytype) {
+		this.inquirytype = inquirytype;
+	}
+
+	public String getKind() {
+		return kind;
+	}
+
+	public void setKind(String kind) {
+		this.kind = kind;
+	}
+}

+ 673 - 0
src/main/java/com/uas/platform/b2b/model/PublicInquiryItem.java

@@ -0,0 +1,673 @@
+package com.uas.platform.b2b.model;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.uas.platform.b2b.core.util.DateUtils;
+import com.uas.platform.core.model.Constant;
+import com.uas.platform.core.model.Status;
+import org.codehaus.jackson.annotate.JsonIgnore;
+import org.springframework.util.CollectionUtils;
+
+import javax.persistence.*;
+import java.io.Serializable;
+import java.util.*;
+
+/**
+ * 公共询价单转报价后的询价单明细
+ *
+ * @author hejq 2018-01-06
+ */
+@Table(name = "public$inquiryitems")
+@Entity
+public class PublicInquiryItem implements Serializable {
+
+    /**
+     * 序列
+     */
+    private static final long serialVersionUID = 1L;
+
+	/**
+	 * id
+	 */
+	@Id
+	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "public$inquiryitems_gen")
+	@SequenceGenerator(name = "public$inquiryitems_gen", sequenceName = "public$inquiryitems_seq", allocationSize = 1)
+	@Column(name = "id_id")
+	private Long id;
+
+	/**
+	 * 来源(买家ERP采购询价明细)的ID
+	 */
+	@Column(name = "id_sourceid", updatable = false)
+	private Long sourceId;
+
+	/**
+	 * 序号
+	 */
+	@Column(name = "id_number")
+	private Short number;
+
+	/**
+	 * 询价单
+	 */
+	@ManyToOne(cascade = CascadeType.ALL, optional = true)
+	@JoinColumn(name = "id_inid", nullable = false)
+	private PublicInquiry inquiry;
+
+	/**
+	 * 买家采购员UU
+	 */
+	@Column(name = "id_useruu")
+	private Long userUU;
+
+	/**
+	 * 产品
+	 */
+	@OneToOne(cascade = { CascadeType.REFRESH })
+	@JoinColumn(name = "id_prid", insertable = false, updatable = false)
+	private Product product;
+
+    /**
+     * 产品id
+     */
+	@Column(name = "id_prid")
+	private Long productId;
+
+	/**
+	 * 币种
+	 */
+	@Column(name = "id_currency")
+	private String currency;
+
+	/**
+	 * 税率
+	 */
+	@Column(name = "id_taxrate")
+	private Float taxrate;
+
+	/**
+	 * 备注
+	 */
+	@Column(name = "id_remark")
+	private String remark;
+
+	/**
+	 * 供应商UU
+	 */
+	@Column(name = "id_venduu")
+	private Long vendUU;
+
+	/**
+	 * 被询价企业
+	 */
+	@OneToOne(cascade = { CascadeType.MERGE, CascadeType.REFRESH })
+	@JoinColumn(name = "id_venduu", insertable = false, updatable = false)
+	private EnterpriseInfo enterprise;
+
+	/**
+	 * 供应商联系人UU
+	 */
+	@Column(name = "id_venduseruu")
+	private Long vendUserUU;
+
+	/**
+	 * (买家预先提供的)有效期始
+	 */
+	@Column(name = "id_fromdate")
+	private Date fromDate;
+
+	/**
+	 * (买家预先提供的)有效期止
+	 */
+	@Column(name = "id_todate")
+	private Date toDate;
+
+	/**
+	 * (卖家报的)有效期始
+	 */
+	@Column(name = "id_vendfromdate")
+	private Date vendFromDate;
+
+	/**
+	 * (卖家报的)有效期止
+	 */
+	@Column(name = "id_vendtodate")
+	private Date vendToDate;
+
+	/**
+	 * (卖家报的)最小订购量
+	 */
+	@Column(name = "id_minorderqty")
+	private Double minOrderQty;
+
+	/**
+	 * (卖家报的)最小包装量
+	 */
+	@Column(name = "id_minpackqty")
+	private Double minPackQty;
+
+	/**
+	 * (卖家报的)物料品牌
+	 */
+	@Column(name = "id_brand")
+	private String brand;
+
+	/**
+	 * (卖家报的)供应商物料编号
+	 */
+	@Column(name = "id_vendorprodcode")
+	private String vendorprodcode;
+
+	/**
+	 * (卖家报的)交货周期(天数)
+	 */
+	@Column(name = "id_leadtime")
+	private Long leadtime;
+
+	/**
+	 * 分段报价明细
+	 */
+	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
+	@JoinColumn(name = "ir_idid")
+	@OrderBy("lapQty")
+	private Set<PublicInquiryReply> replies;
+
+	/**
+	 * {未回复、已回复}
+	 */
+	@Column(name = "id_status")
+	private Short status;
+
+	/**
+	 * (针对卖家的)询价传输状态{待上传、已下载}
+	 */
+	@Column(name = "id_sendstatus")
+	private Short sendStatus;
+
+	/**
+	 * (针对买家的)报价信息传输状态{待上传、已下载}
+	 */
+	@Column(name = "id_backstatus")
+	private Short backStatus;
+
+	/**
+	 * (针对卖家的)报价信息传输状态{待上传、已下载}
+	 */
+	@Column(name = "id_replysendstatus")
+	private Short replySendStatus;
+
+	/**
+	 * 是否采纳
+	 */
+	@Column(name = "id_agreed")
+	private Short agreed;
+
+	/**
+	 * (针对卖家的)是否采纳信息传输状态{待上传、已下载}
+	 */
+	@Column(name = "id_decidestatus")
+	private Short decideStatus;
+
+	/**
+	 * (针对卖家的)作废信息传输状态{待上传、已下载}
+	 */
+	@Column(name = "id_invalidstatus")
+	private Short invalidStatus;
+
+	/**
+	 * 是否买家已设置分段数
+	 */
+	@Column(name = "id_custlap")
+	private Short custLap;
+
+	/**
+	 * 保存erp传入数据的时间
+	 * 
+	 * @return
+	 */
+	@Column(name = "id_erpdate")
+	private Date erpDate;
+
+	/**
+	 * 录入时间(取主表日期字段)
+	 *
+	 * @return
+	 */
+	@Column(name = "id_date", insertable = false, updatable = false)
+	private Date date;
+
+	/**
+	 * search项目进行单据是否已过期时实际根据主表中enddate与当前时间的比较获取,但是数据库无字段会报“标识符无效”的错误
+	 * 所以建立此字段,但是此字段不会赋值。
+	 *   在建立索引时,overdue的值加入到了invalid(已失效)的判断条件中,所以此字段的值无实际意义,
+	 *   UAS询价单提交或反提交时,更新此字段,来使询价单明细更新触发器生效,更新询价单明细索引,
+	 *   才能使未过期未报价已提交单据进入失效列表,未过期未报价反提交单据从已失效列表回到待报价列表。
+	 *
+	 *   (1为已提交, 0为被反提交, null为未提交)
+	 */
+	@Column(name = "id_overdue", insertable = false, updatable = false)
+	private Short overdue;
+
+	/**
+	 * 报价是否已过期  根据vendToDate与当前时间的比较获取,但是数据库无字段会报“标识符无效”的错误
+	 * 所以建立此字段,此字段在视图中赋值。
+	 *
+	 */
+	@Column(name = "id_invalid", insertable = false, updatable = false)
+	private Short invalid;
+
+	/**
+	 * 应用来源ERP、B2B
+	 */
+	@Column(name = "id_sourceapp")
+	private String sourceApp;
+
+	/**
+	 * 报价附件
+	 */
+	@OneToMany(fetch = FetchType.EAGER, cascade = {CascadeType.ALL})
+	@JoinTable(name = "public$inquiryitems$attach", joinColumns = @JoinColumn(name = "id_id", referencedColumnName = "id_id"), inverseJoinColumns = @JoinColumn(name="at_id", referencedColumnName = "at_id"))
+	private Set<Attach> attaches;
+
+	/**
+	 * 需求数量
+	 */
+	@Column(name = "id_needquantity")
+	private Double needquantity;
+
+    /**
+     * erp传输状态
+     *
+     * <pre>erp发出数据传输请求时,赋给状态,完成后更新状态</pre>
+     *
+     * 1、 传输完成<br>
+     * 0、 正在传输
+     *
+     */
+	@Column(name = "id_erpstatus")
+    private Short erpstatus;
+
+	/**
+	 * 询价种类
+	 */
+	@Column(name = "id_kind")
+	private String kind;
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	@JsonIgnore
+	@JSONField(serialize = false)
+	public Long getSourceId() {
+		return sourceId;
+	}
+
+	public void setSourceId(Long sourceId) {
+		this.sourceId = sourceId;
+	}
+
+	public Short getNumber() {
+		return number;
+	}
+
+	public void setNumber(Short number) {
+		this.number = number;
+	}
+
+	public PublicInquiry getInquiry() {
+		return inquiry;
+	}
+
+	public void setInquiry(PublicInquiry inquiry) {
+		this.inquiry = inquiry;
+	}
+
+	public Product getProduct() {
+		return product;
+	}
+
+	public void setProduct(Product product) {
+		this.product = product;
+	}
+
+	public Long getProductId() {
+		return productId;
+	}
+
+	public void setProductId(Long productId) {
+		this.productId = productId;
+	}
+
+	public String getCurrency() {
+		return currency;
+	}
+
+	public void setCurrency(String currency) {
+		this.currency = currency;
+	}
+
+	public Float getTaxrate() {
+		return taxrate;
+	}
+
+	public void setTaxrate(Float taxrate) {
+		this.taxrate = taxrate;
+	}
+
+	public String getRemark() {
+		return remark;
+	}
+
+	public void setRemark(String remark) {
+		this.remark = remark;
+	}
+
+	public Date getFromDate() {
+		return fromDate;
+	}
+
+	public void setFromDate(Date fromDate) {
+		this.fromDate = fromDate;
+	}
+
+	public Date getToDate() {
+		return toDate;
+	}
+
+	public void setToDate(Date toDate) {
+		this.toDate = toDate;
+	}
+
+	public Date getVendFromDate() {
+		return vendFromDate;
+	}
+
+	public void setVendFromDate(Date vendFromDate) {
+		this.vendFromDate = vendFromDate;
+	}
+
+	public Date getVendToDate() {
+		return vendToDate;
+	}
+
+	public void setVendToDate(Date vendToDate) {
+		this.vendToDate = vendToDate;
+	}
+
+	public Long getVendUU() {
+		return vendUU;
+	}
+
+	public void setVendUU(Long vendUU) {
+		this.vendUU = vendUU;
+	}
+
+	public Set<PublicInquiryReply> getReplies() {
+		return replies;
+	}
+
+	public void setReplies(Set<PublicInquiryReply> replies) {
+		this.replies = replies;
+	}
+
+	public Long getVendUserUU() {
+		return vendUserUU;
+	}
+
+	public void setVendUserUU(Long vendUserUU) {
+		this.vendUserUU = vendUserUU;
+	}
+
+	public Short getAgreed() {
+		return agreed;
+	}
+
+	public void setAgreed(Short agreed) {
+		this.agreed = agreed;
+	}
+
+	public Short getStatus() {
+		return status;
+	}
+
+	public void setStatus(Short status) {
+		this.status = status;
+	}
+
+	public Short getSendStatus() {
+		return sendStatus;
+	}
+
+	public void setSendStatus(Short sendStatus) {
+		this.sendStatus = sendStatus;
+	}
+
+	public Double getMinOrderQty() {
+		return minOrderQty;
+	}
+
+	public void setMinOrderQty(Double minOrderQty) {
+		this.minOrderQty = minOrderQty;
+	}
+
+	public Double getMinPackQty() {
+		return minPackQty;
+	}
+
+	public void setMinPackQty(Double minPackQty) {
+		this.minPackQty = minPackQty;
+	}
+
+	public Short getBackStatus() {
+		return backStatus;
+	}
+
+	public void setBackStatus(Short backStatus) {
+		this.backStatus = backStatus;
+	}
+
+	public Short getReplySendStatus() {
+		return replySendStatus;
+	}
+
+	public void setReplySendStatus(Short replySendStatus) {
+		this.replySendStatus = replySendStatus;
+	}
+
+	public Short getDecideStatus() {
+		return decideStatus;
+	}
+
+	public void setDecideStatus(Short decideStatus) {
+		this.decideStatus = decideStatus;
+	}
+
+	public Short getCustLap() {
+		return custLap;
+	}
+
+	public void setCustLap(Short custLap) {
+		this.custLap = custLap;
+	}
+
+	public Long getUserUU() {
+		return userUU;
+	}
+
+	public void setUserUU(Long userUU) {
+		this.userUU = userUU;
+	}
+
+	public String getBrand() {
+		return brand;
+	}
+
+	public void setBrand(String brand) {
+		this.brand = brand;
+	}
+
+	public String getVendorprodcode() {
+		return vendorprodcode;
+	}
+
+	public void setVendorprodcode(String vendorprodcode) {
+		this.vendorprodcode = vendorprodcode;
+	}
+
+	public Long getLeadtime() {
+		return leadtime;
+	}
+
+	public void setLeadtime(Long leadtime) {
+		this.leadtime = leadtime;
+	}
+
+	public Date getErpDate() {
+		return erpDate;
+	}
+
+	public void setErpDate(Date erpDate) {
+		this.erpDate = erpDate;
+	}
+
+	public Date getDate() {
+		return date;
+	}
+
+	public void setDate(Date date) {
+		this.date = date;
+	}
+
+	public String getSourceApp() {
+		return sourceApp;
+	}
+
+	public void setSourceApp(String sourceApp) {
+		this.sourceApp = sourceApp;
+	}
+
+	public EnterpriseInfo getEnterprise() {
+		return enterprise;
+	}
+
+	public void setEnterprise(EnterpriseInfo enterprise) {
+		this.enterprise = enterprise;
+	}
+
+	public Short getInvalidStatus() {
+		return invalidStatus;
+	}
+
+	public void setInvalidStatus(Short invalidStatus) {
+		this.invalidStatus = invalidStatus;
+	}
+
+	public Set<Attach> getAttaches() {
+		return attaches;
+	}
+
+	public void setAttaches(Set<Attach> attaches) {
+		this.attaches = attaches;
+	}
+
+	public Double getNeedquantity() {
+		return needquantity;
+	}
+
+	public void setNeedquantity(Double needquantity) {
+		this.needquantity = needquantity;
+	}
+
+	public Short getOverdue() {
+		return overdue;
+	}
+
+	public void setOverdue(Short overdue) {
+		this.overdue = overdue;
+	}
+
+	public Short getInvalid() {
+		return invalid;
+	}
+
+	public void setInvalid(Short invalid) {
+		this.invalid = invalid;
+	}
+
+    public Short getErpstatus() {
+        return erpstatus;
+    }
+
+    public void setErpstatus(Short erpstatus) {
+
+	    this.erpstatus = erpstatus ;
+    }
+
+	public String getKind() {
+		return kind;
+	}
+
+	public void setKind(String kind) {
+		this.kind = kind;
+	}
+
+	/**
+	 * 回复记录的描述
+	 * 
+	 * @return
+	 */
+	public String replyDescription() {
+		if (!CollectionUtils.isEmpty(this.replies)) {
+			StringBuffer sb = new StringBuffer();
+			for (PublicInquiryReply reply : this.replies)
+				sb.append("分段数:").append(reply.getLapQty()).append(",").append("价格:").append(reply.getPrice())
+						.append(";");
+			return sb.toString();
+		}
+		return null;
+	}
+
+	/**
+	 * 是否可报价
+	 * <p>
+	 * 1.未报价,未截止报价
+	 * </p>
+	 * <p>
+	 * 2.已报价,未截止报价,客户未提交
+	 * </p>
+	 * 
+	 * @return
+	 */
+	public boolean isReplyable() {
+	    if(this.erpstatus == null) {
+	        this.erpstatus = Constant.YES;
+        }
+		if (this.inquiry.getEndDate() != null) {
+			return DateUtils
+					.compare(this.inquiry.getEndDate(), new Date(),
+							DateUtils.COMPARE_DAY) >= 0
+					&& (this.status == Status.NOT_REPLY.value() || (this.status == Status.REPLIED.value()
+							&& (this.inquiry.getCheck() == null || this.inquiry.getCheck() != Constant.YES)
+							&& this.agreed == null) && this.erpstatus != Constant.NO);
+		}
+		return this.status == Status.NOT_REPLY.value() || (this.status == Status.REPLIED.value()
+				&& (this.inquiry.getCheck() == null || this.inquiry.getCheck() != Constant.YES)
+				&& this.agreed == null) && this.erpstatus != Constant.NO;
+	}
+
+    public static List<PublicInquiry> distinct(List<PublicInquiryItem> purcitems) {
+		List<PublicInquiry> inquiries = new ArrayList<>();
+		Set<Long> keys = new HashSet<>();
+		for (PublicInquiryItem item : purcitems) {
+			if (!keys.contains(item.getInquiry().getId())) {
+				inquiries.add(item.getInquiry());
+				keys.add(item.getInquiry().getId());
+			}
+		}
+		return inquiries;
+    }
+}

+ 671 - 0
src/main/java/com/uas/platform/b2b/model/PublicInquiryItemInfo.java

@@ -0,0 +1,671 @@
+package com.uas.platform.b2b.model;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.uas.platform.b2b.core.util.DateUtils;
+import com.uas.platform.core.model.Constant;
+import com.uas.platform.core.model.Status;
+import org.codehaus.jackson.annotate.JsonIgnore;
+import org.springframework.util.CollectionUtils;
+
+import javax.persistence.*;
+import java.io.Serializable;
+import java.util.*;
+
+/**
+ * 公共询价单转报价后的询价单明细
+ *
+ * @author hejq 2018-01-06
+ */
+@Table(name = "v$public$inquiryitems")
+@Entity
+public class PublicInquiryItemInfo implements Serializable {
+
+    /**
+     * 序列
+     */
+    private static final long serialVersionUID = 1L;
+
+	/**
+	 * id
+	 */
+	@Id
+	@Column(name = "id_id")
+	private Long id;
+
+	/**
+	 * 来源(买家ERP采购询价明细)的ID
+	 */
+	@Column(name = "id_sourceid", updatable = false)
+	private Long sourceId;
+
+	/**
+	 * 序号
+	 */
+	@Column(name = "id_number")
+	private Short number;
+
+	/**
+	 * 询价单
+	 */
+	@ManyToOne(cascade = CascadeType.ALL, optional = true)
+	@JoinColumn(name = "id_inid", nullable = false)
+	private PublicInquiryInfo inquiry;
+
+	/**
+	 * 买家采购员UU
+	 */
+	@Column(name = "id_useruu")
+	private Long userUU;
+
+	/**
+	 * 产品
+	 */
+	@OneToOne(cascade = { CascadeType.REFRESH })
+	@JoinColumn(name = "id_prid", insertable = false, updatable = false)
+	private Product product;
+
+    /**
+     * 产品id
+     */
+	@Column(name = "id_prid")
+	private Long productId;
+
+	/**
+	 * 币种
+	 */
+	@Column(name = "id_currency")
+	private String currency;
+
+	/**
+	 * 税率
+	 */
+	@Column(name = "id_taxrate")
+	private Float taxrate;
+
+	/**
+	 * 备注
+	 */
+	@Column(name = "id_remark")
+	private String remark;
+
+	/**
+	 * 供应商UU
+	 */
+	@Column(name = "id_venduu")
+	private Long vendUU;
+
+	/**
+	 * 被询价企业
+	 */
+	@OneToOne(cascade = { CascadeType.MERGE, CascadeType.REFRESH })
+	@JoinColumn(name = "id_venduu", insertable = false, updatable = false)
+	private EnterpriseInfo enterprise;
+
+	/**
+	 * 供应商联系人UU
+	 */
+	@Column(name = "id_venduseruu")
+	private Long vendUserUU;
+
+	/**
+	 * (买家预先提供的)有效期始
+	 */
+	@Column(name = "id_fromdate")
+	private Date fromDate;
+
+	/**
+	 * (买家预先提供的)有效期止
+	 */
+	@Column(name = "id_todate")
+	private Date toDate;
+
+	/**
+	 * (卖家报的)有效期始
+	 */
+	@Column(name = "id_vendfromdate")
+	private Date vendFromDate;
+
+	/**
+	 * (卖家报的)有效期止
+	 */
+	@Column(name = "id_vendtodate")
+	private Date vendToDate;
+
+	/**
+	 * (卖家报的)最小订购量
+	 */
+	@Column(name = "id_minorderqty")
+	private Double minOrderQty;
+
+	/**
+	 * (卖家报的)最小包装量
+	 */
+	@Column(name = "id_minpackqty")
+	private Double minPackQty;
+
+	/**
+	 * (卖家报的)物料品牌
+	 */
+	@Column(name = "id_brand")
+	private String brand;
+
+	/**
+	 * (卖家报的)供应商物料编号
+	 */
+	@Column(name = "id_vendorprodcode")
+	private String vendorprodcode;
+
+	/**
+	 * (卖家报的)交货周期(天数)
+	 */
+	@Column(name = "id_leadtime")
+	private Long leadtime;
+
+	/**
+	 * 分段报价明细
+	 */
+	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
+	@JoinColumn(name = "ir_idid")
+	@OrderBy("lapQty")
+	private Set<PublicInquiryReply> replies;
+
+	/**
+	 * {未回复、已回复}
+	 */
+	@Column(name = "id_status")
+	private Short status;
+
+	/**
+	 * (针对卖家的)询价传输状态{待上传、已下载}
+	 */
+	@Column(name = "id_sendstatus")
+	private Short sendStatus;
+
+	/**
+	 * (针对买家的)报价信息传输状态{待上传、已下载}
+	 */
+	@Column(name = "id_backstatus")
+	private Short backStatus;
+
+	/**
+	 * (针对卖家的)报价信息传输状态{待上传、已下载}
+	 */
+	@Column(name = "id_replysendstatus")
+	private Short replySendStatus;
+
+	/**
+	 * 是否采纳
+	 */
+	@Column(name = "id_agreed")
+	private Short agreed;
+
+	/**
+	 * (针对卖家的)是否采纳信息传输状态{待上传、已下载}
+	 */
+	@Column(name = "id_decidestatus")
+	private Short decideStatus;
+
+	/**
+	 * (针对卖家的)作废信息传输状态{待上传、已下载}
+	 */
+	@Column(name = "id_invalidstatus")
+	private Short invalidStatus;
+
+	/**
+	 * 是否买家已设置分段数
+	 */
+	@Column(name = "id_custlap")
+	private Short custLap;
+
+	/**
+	 * 保存erp传入数据的时间
+	 * 
+	 * @return
+	 */
+	@Column(name = "id_erpdate")
+	private Date erpDate;
+
+	/**
+	 * 录入时间(取主表日期字段)
+	 *
+	 * @return
+	 */
+	@Column(name = "id_date", insertable = false, updatable = false)
+	private Date date;
+
+	/**
+	 * search项目进行单据是否已过期时实际根据主表中enddate与当前时间的比较获取,但是数据库无字段会报“标识符无效”的错误
+	 * 所以建立此字段,但是此字段不会赋值。
+	 *   在建立索引时,overdue的值加入到了invalid(已失效)的判断条件中,所以此字段的值无实际意义,
+	 *   UAS询价单提交或反提交时,更新此字段,来使询价单明细更新触发器生效,更新询价单明细索引,
+	 *   才能使未过期未报价已提交单据进入失效列表,未过期未报价反提交单据从已失效列表回到待报价列表。
+	 *
+	 *   (1为已提交, 0为被反提交, null为未提交)
+	 */
+	@Column(name = "id_overdue", insertable = false, updatable = false)
+	private Short overdue;
+
+	/**
+	 * 报价是否已过期  根据vendToDate与当前时间的比较获取,但是数据库无字段会报“标识符无效”的错误
+	 * 所以建立此字段,此字段在视图中赋值。
+	 *
+	 */
+	@Column(name = "id_invalid", insertable = false, updatable = false)
+	private Short invalid;
+
+	/**
+	 * 应用来源ERP、B2B
+	 */
+	@Column(name = "id_sourceapp")
+	private String sourceApp;
+
+	/**
+	 * 报价附件
+	 */
+	@OneToMany(fetch = FetchType.EAGER, cascade = {CascadeType.ALL})
+	@JoinTable(name = "public$inquiryitems$attach", joinColumns = @JoinColumn(name = "id_id", referencedColumnName = "id_id"), inverseJoinColumns = @JoinColumn(name="at_id", referencedColumnName = "at_id"))
+	private Set<Attach> attaches;
+
+	/**
+	 * 需求数量
+	 */
+	@Column(name = "id_needquantity")
+	private Double needquantity;
+
+    /**
+     * erp传输状态
+     *
+     * <pre>erp发出数据传输请求时,赋给状态,完成后更新状态</pre>
+     *
+     * 1、 传输完成<br>
+     * 0、 正在传输
+     *
+     */
+	@Column(name = "id_erpstatus")
+    private Short erpstatus;
+
+	/**
+	 * 询价种类
+	 */
+	@Column(name = "id_kind")
+	private String kind;
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	@JsonIgnore
+	@JSONField(serialize = false)
+	public Long getSourceId() {
+		return sourceId;
+	}
+
+	public void setSourceId(Long sourceId) {
+		this.sourceId = sourceId;
+	}
+
+	public Short getNumber() {
+		return number;
+	}
+
+	public void setNumber(Short number) {
+		this.number = number;
+	}
+
+	public PublicInquiryInfo getInquiry() {
+		return inquiry;
+	}
+
+	public void setInquiry(PublicInquiryInfo inquiry) {
+		this.inquiry = inquiry;
+	}
+
+	public Product getProduct() {
+		return product;
+	}
+
+	public void setProduct(Product product) {
+		this.product = product;
+	}
+
+	public Long getProductId() {
+		return productId;
+	}
+
+	public void setProductId(Long productId) {
+		this.productId = productId;
+	}
+
+	public String getCurrency() {
+		return currency;
+	}
+
+	public void setCurrency(String currency) {
+		this.currency = currency;
+	}
+
+	public Float getTaxrate() {
+		return taxrate;
+	}
+
+	public void setTaxrate(Float taxrate) {
+		this.taxrate = taxrate;
+	}
+
+	public String getRemark() {
+		return remark;
+	}
+
+	public void setRemark(String remark) {
+		this.remark = remark;
+	}
+
+	public Date getFromDate() {
+		return fromDate;
+	}
+
+	public void setFromDate(Date fromDate) {
+		this.fromDate = fromDate;
+	}
+
+	public Date getToDate() {
+		return toDate;
+	}
+
+	public void setToDate(Date toDate) {
+		this.toDate = toDate;
+	}
+
+	public Date getVendFromDate() {
+		return vendFromDate;
+	}
+
+	public void setVendFromDate(Date vendFromDate) {
+		this.vendFromDate = vendFromDate;
+	}
+
+	public Date getVendToDate() {
+		return vendToDate;
+	}
+
+	public void setVendToDate(Date vendToDate) {
+		this.vendToDate = vendToDate;
+	}
+
+	public Long getVendUU() {
+		return vendUU;
+	}
+
+	public void setVendUU(Long vendUU) {
+		this.vendUU = vendUU;
+	}
+
+	public Set<PublicInquiryReply> getReplies() {
+		return replies;
+	}
+
+	public void setReplies(Set<PublicInquiryReply> replies) {
+		this.replies = replies;
+	}
+
+	public Long getVendUserUU() {
+		return vendUserUU;
+	}
+
+	public void setVendUserUU(Long vendUserUU) {
+		this.vendUserUU = vendUserUU;
+	}
+
+	public Short getAgreed() {
+		return agreed;
+	}
+
+	public void setAgreed(Short agreed) {
+		this.agreed = agreed;
+	}
+
+	public Short getStatus() {
+		return status;
+	}
+
+	public void setStatus(Short status) {
+		this.status = status;
+	}
+
+	public Short getSendStatus() {
+		return sendStatus;
+	}
+
+	public void setSendStatus(Short sendStatus) {
+		this.sendStatus = sendStatus;
+	}
+
+	public Double getMinOrderQty() {
+		return minOrderQty;
+	}
+
+	public void setMinOrderQty(Double minOrderQty) {
+		this.minOrderQty = minOrderQty;
+	}
+
+	public Double getMinPackQty() {
+		return minPackQty;
+	}
+
+	public void setMinPackQty(Double minPackQty) {
+		this.minPackQty = minPackQty;
+	}
+
+	public Short getBackStatus() {
+		return backStatus;
+	}
+
+	public void setBackStatus(Short backStatus) {
+		this.backStatus = backStatus;
+	}
+
+	public Short getReplySendStatus() {
+		return replySendStatus;
+	}
+
+	public void setReplySendStatus(Short replySendStatus) {
+		this.replySendStatus = replySendStatus;
+	}
+
+	public Short getDecideStatus() {
+		return decideStatus;
+	}
+
+	public void setDecideStatus(Short decideStatus) {
+		this.decideStatus = decideStatus;
+	}
+
+	public Short getCustLap() {
+		return custLap;
+	}
+
+	public void setCustLap(Short custLap) {
+		this.custLap = custLap;
+	}
+
+	public Long getUserUU() {
+		return userUU;
+	}
+
+	public void setUserUU(Long userUU) {
+		this.userUU = userUU;
+	}
+
+	public String getBrand() {
+		return brand;
+	}
+
+	public void setBrand(String brand) {
+		this.brand = brand;
+	}
+
+	public String getVendorprodcode() {
+		return vendorprodcode;
+	}
+
+	public void setVendorprodcode(String vendorprodcode) {
+		this.vendorprodcode = vendorprodcode;
+	}
+
+	public Long getLeadtime() {
+		return leadtime;
+	}
+
+	public void setLeadtime(Long leadtime) {
+		this.leadtime = leadtime;
+	}
+
+	public Date getErpDate() {
+		return erpDate;
+	}
+
+	public void setErpDate(Date erpDate) {
+		this.erpDate = erpDate;
+	}
+
+	public Date getDate() {
+		return date;
+	}
+
+	public void setDate(Date date) {
+		this.date = date;
+	}
+
+	public String getSourceApp() {
+		return sourceApp;
+	}
+
+	public void setSourceApp(String sourceApp) {
+		this.sourceApp = sourceApp;
+	}
+
+	public EnterpriseInfo getEnterprise() {
+		return enterprise;
+	}
+
+	public void setEnterprise(EnterpriseInfo enterprise) {
+		this.enterprise = enterprise;
+	}
+
+	public Short getInvalidStatus() {
+		return invalidStatus;
+	}
+
+	public void setInvalidStatus(Short invalidStatus) {
+		this.invalidStatus = invalidStatus;
+	}
+
+	public Set<Attach> getAttaches() {
+		return attaches;
+	}
+
+	public void setAttaches(Set<Attach> attaches) {
+		this.attaches = attaches;
+	}
+
+	public Double getNeedquantity() {
+		return needquantity;
+	}
+
+	public void setNeedquantity(Double needquantity) {
+		this.needquantity = needquantity;
+	}
+
+	public Short getOverdue() {
+		return overdue;
+	}
+
+	public void setOverdue(Short overdue) {
+		this.overdue = overdue;
+	}
+
+	public Short getInvalid() {
+		return invalid;
+	}
+
+	public void setInvalid(Short invalid) {
+		this.invalid = invalid;
+	}
+
+    public Short getErpstatus() {
+        return erpstatus;
+    }
+
+    public void setErpstatus(Short erpstatus) {
+
+	    this.erpstatus = erpstatus ;
+    }
+
+	public String getKind() {
+		return kind;
+	}
+
+	public void setKind(String kind) {
+		this.kind = kind;
+	}
+
+	/**
+	 * 回复记录的描述
+	 * 
+	 * @return
+	 */
+	public String replyDescription() {
+		if (!CollectionUtils.isEmpty(this.replies)) {
+			StringBuffer sb = new StringBuffer();
+			for (PublicInquiryReply reply : this.replies)
+				sb.append("分段数:").append(reply.getLapQty()).append(",").append("价格:").append(reply.getPrice())
+						.append(";");
+			return sb.toString();
+		}
+		return null;
+	}
+
+	/**
+	 * 是否可报价
+	 * <p>
+	 * 1.未报价,未截止报价
+	 * </p>
+	 * <p>
+	 * 2.已报价,未截止报价,客户未提交
+	 * </p>
+	 * 
+	 * @return
+	 */
+	public boolean isReplyable() {
+	    if(this.erpstatus == null) {
+	        this.erpstatus = Constant.YES;
+        }
+		if (this.inquiry.getEndDate() != null) {
+			return DateUtils
+					.compare(this.inquiry.getEndDate(), new Date(),
+							DateUtils.COMPARE_DAY) >= 0
+					&& (this.status == Status.NOT_REPLY.value() || (this.status == Status.REPLIED.value()
+							&& (this.inquiry.getCheck() == null || this.inquiry.getCheck() != Constant.YES)
+							&& this.agreed == null) && this.erpstatus != Constant.NO);
+		}
+		return this.status == Status.NOT_REPLY.value() || (this.status == Status.REPLIED.value()
+				&& (this.inquiry.getCheck() == null || this.inquiry.getCheck() != Constant.YES)
+				&& this.agreed == null) && this.erpstatus != Constant.NO;
+	}
+
+    public static List<PublicInquiryInfo> distinct(List<PublicInquiryItemInfo> purcitems) {
+		List<PublicInquiryInfo> inquiries = new ArrayList<>();
+		Set<Long> keys = new HashSet<>();
+		for (PublicInquiryItemInfo item : purcitems) {
+			if (!keys.contains(item.getInquiry().getId())) {
+				inquiries.add(item.getInquiry());
+				keys.add(item.getInquiry().getId());
+			}
+		}
+		return inquiries;
+    }
+}

+ 64 - 0
src/main/java/com/uas/platform/b2b/model/PublicInquiryReply.java

@@ -0,0 +1,64 @@
+package com.uas.platform.b2b.model;
+
+import javax.persistence.*;
+import java.io.Serializable;
+
+/**
+ * 公共询价单报价明细
+ * @author hejq 2018-01-06
+ */
+@Table(name = "public$inquiryreply")
+@Entity
+public class PublicInquiryReply implements Serializable {
+
+	/**
+	 * 序列
+	 */
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * id
+	 */
+	@Id
+	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "public$inquiryreply_gen")
+	@SequenceGenerator(name = "public$inquiryreply_gen", sequenceName = "public$inquiryreply_seq", allocationSize = 1)
+	@Column(name = "ir_id")
+	private Long id;
+
+	/**
+	 * (买家或卖家定义的)分段数量
+	 */
+	@Column(name = "ir_lapqty")
+	private Double lapQty;
+
+	/**
+	 * (卖家报的)单价
+	 */
+	@Column(name = "ir_price")
+	private Double price;
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public Double getLapQty() {
+		return lapQty;
+	}
+
+	public void setLapQty(Double lapQty) {
+		this.lapQty = lapQty;
+	}
+
+	public Double getPrice() {
+		return price;
+	}
+
+	public void setPrice(Double price) {
+		this.price = price;
+	}
+
+}