Browse Source

更新采购询价数据库取值方法,改为视图取数

hejq 8 years ago
parent
commit
0274b7deda

+ 37 - 33
src/main/java/com/uas/platform/b2b/controller/SaleInquiryController.java

@@ -3,9 +3,11 @@ package com.uas.platform.b2b.controller;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.uas.platform.b2b.model.FileUpload;
+import com.uas.platform.b2b.model.PurchaseInquiryDetail;
 import com.uas.platform.b2b.model.PurchaseInquiryItem;
 import com.uas.platform.b2b.model.SearchFilter;
 import com.uas.platform.b2b.search.SearchService;
+import com.uas.platform.b2b.service.PurchaseInquiryDetailService;
 import com.uas.platform.b2b.service.PurchaseInquiryService;
 import com.uas.platform.b2b.service.UserService;
 import com.uas.platform.b2b.support.JxlsExcelView;
@@ -55,6 +57,9 @@ public class SaleInquiryController {
 	@Autowired
 	private PurchaseInquiryService purchaseInquiryService;
 
+	@Autowired
+	private PurchaseInquiryDetailService detailService;
+
 	@Autowired
 	private UserService userService;
 
@@ -79,7 +84,7 @@ public class SaleInquiryController {
 	 */
 	@RequestMapping(value = "/info/search", method = RequestMethod.GET)
 	@ResponseBody
-	public SPage<PurchaseInquiryItem> getReceivedPurchaseInquiries(PageParams params, String searchFilter) {
+	public SPage<PurchaseInquiryDetail> getReceivedPurchaseInquiries(PageParams params, String searchFilter) {
 		logger.log("客户询价单", "搜索查看收到的客户询价单列表(全部)");
 		JSONObject jsonObject = JSON.parseObject(searchFilter);
 		String keyword = jsonObject.getString("keyword");
@@ -100,7 +105,7 @@ public class SaleInquiryController {
 		List<Sort> sortList = new ArrayList<>();
 		sortList.add(new Sort("id_id", false, Type.LONG, new Long(1)));
 		pageParams.getFilters().put(SearchConstants.SORT_KEY, sortList);
-		return searchService.searchPurchaseInquiryItemIds(keyword, pageParams);
+		return searchService.searchPurchaseInquiryDetailIds(keyword, pageParams);
 	}
 
 	/**
@@ -111,7 +116,7 @@ public class SaleInquiryController {
 	 */
 	@RequestMapping(value = "/info/search", params = RequestState.TODO, method = RequestMethod.GET)
 	@ResponseBody
-	public SPage<PurchaseInquiryItem> getTodoInquiries(PageParams params, String searchFilter) {
+	public SPage<PurchaseInquiryDetail> getTodoInquiries(PageParams params, String searchFilter) {
 		logger.log("客户询价单", "搜索查看收到的客户询价单(待报价)");
 		JSONObject jsonObject = JSON.parseObject(searchFilter);
 		String keyword = jsonObject.getString("keyword");
@@ -134,7 +139,7 @@ public class SaleInquiryController {
 		List<Sort> sortList = new ArrayList<>();
 		sortList.add(new Sort("id_id", false, Type.LONG, new Long(1)));
 		pageParams.getFilters().put(SearchConstants.SORT_KEY, sortList);
-		return searchService.searchPurchaseInquiryItemIds(keyword, pageParams);
+		return searchService.searchPurchaseInquiryDetailIds(keyword, pageParams);
 	}
 
 	/**
@@ -144,7 +149,7 @@ public class SaleInquiryController {
 	 */
 	@RequestMapping(value = "/info/search", params = RequestState.END, method = RequestMethod.GET)
 	@ResponseBody
-	public SPage<PurchaseInquiryItem> getEndInquiries(PageParams params, String searchFilter) {
+	public SPage<PurchaseInquiryDetail> getEndInquiries(PageParams params, String searchFilter) {
 		logger.log("客户询价单", "搜索查看收到的客户询价单(已过期)");
 		JSONObject jsonObject = JSON.parseObject(searchFilter);
 		String keyword = jsonObject.getString("keyword");
@@ -170,7 +175,7 @@ public class SaleInquiryController {
 		List<Sort> sortList = new ArrayList<>();
 		sortList.add(new Sort("id_id", false, Type.LONG, new Long(1)));
 		pageParams.getFilters().put(SearchConstants.SORT_KEY, sortList);
-		return searchService.searchPurchaseInquiryItemIds(keyword, pageParams);
+		return searchService.searchPurchaseInquiryDetailIds(keyword, pageParams);
 	}
 
 	/**
@@ -181,7 +186,7 @@ public class SaleInquiryController {
 	 */
 	@RequestMapping(value = "/info/search", params = RequestState.DONE, method = RequestMethod.GET)
 	@ResponseBody
-	public SPage<PurchaseInquiryItem> getDoneInquiries(PageParams params, String searchFilter) {
+	public SPage<PurchaseInquiryDetail> getDoneInquiries(PageParams params, String searchFilter) {
 		logger.log("客户询价单", "搜索查看收到的客户询价单(已报价)");
 		JSONObject jsonObject = JSON.parseObject(searchFilter);
 		String keyword = jsonObject.getString("keyword");
@@ -205,7 +210,7 @@ public class SaleInquiryController {
 		List<Sort> sortList = new ArrayList<>();
 		sortList.add(new Sort("id_id", false, Type.LONG, new Long(1)));
 		pageParams.getFilters().put(SearchConstants.SORT_KEY, sortList);
-		return searchService.searchPurchaseInquiryItemIds(keyword, pageParams);
+		return searchService.searchPurchaseInquiryDetailIds(keyword, pageParams);
 	}
 
 	/**
@@ -215,7 +220,7 @@ public class SaleInquiryController {
 	 */
 	@RequestMapping(value = "/info/search", params = RequestState.INVALID, method = RequestMethod.GET)
 	@ResponseBody
-	public SPage<PurchaseInquiryItem> getInvalidInquiries(PageParams params, String searchFilter) {
+	public SPage<PurchaseInquiryDetail> getInvalidInquiries(PageParams params, String searchFilter) {
 		logger.log("客户询价单", "搜索查看收到的客户询价单(已失效)");
 		JSONObject jsonObject = JSON.parseObject(searchFilter);
 		String keyword = jsonObject.getString("keyword");
@@ -235,7 +240,7 @@ public class SaleInquiryController {
 		sortList.add(new Sort("id_id", false, Type.LONG, 1L));
 		pageParams.getFilters().put(SearchConstants.SORT_KEY, sortList);
 		pageParams.getFilters().put("id_overdue", Constant.YES); // 已失效
-		return searchService.searchPurchaseInquiryItemIds(keyword, pageParams);
+		return searchService.searchPurchaseInquiryDetailIds(keyword, pageParams);
 	}
 
 	/**
@@ -246,7 +251,7 @@ public class SaleInquiryController {
 	 */
 	@RequestMapping(value = "/info/search", params = RequestState.AGREED, method = RequestMethod.GET)
 	@ResponseBody
-	public SPage<PurchaseInquiryItem> getAgreedInquiries(PageParams params, String searchFilter) {
+	public SPage<PurchaseInquiryDetail> getAgreedInquiries(PageParams params, String searchFilter) {
 		logger.log("客户询价单", "搜索查看收到的客户询价单(已采纳)");
 		JSONObject jsonObject = JSON.parseObject(searchFilter);
 		String keyword = jsonObject.getString("keyword");
@@ -272,7 +277,7 @@ public class SaleInquiryController {
 		List<Sort> sortList = new ArrayList<>();
 		sortList.add(new Sort("id_id", false, Type.LONG, new Long(1)));
 		pageParams.getFilters().put(SearchConstants.SORT_KEY, sortList);
-		return searchService.searchPurchaseInquiryItemIds(keyword, pageParams);
+		return searchService.searchPurchaseInquiryDetailIds(keyword, pageParams);
 	}
 
 	/**
@@ -283,7 +288,7 @@ public class SaleInquiryController {
 	 */
 	@RequestMapping(value = "/info/search", params = RequestState.REFUSED, method = RequestMethod.GET)
 	@ResponseBody
-	public SPage<PurchaseInquiryItem> getRefusedInquiries(PageParams params, String searchFilter) {
+	public SPage<PurchaseInquiryDetail> getRefusedInquiries(PageParams params, String searchFilter) {
 		logger.log("客户询价单", "搜索查看收到的客户询价单(未采纳)");
 		JSONObject jsonObject = JSON.parseObject(searchFilter);
 		String keyword = jsonObject.getString("keyword");
@@ -306,7 +311,7 @@ public class SaleInquiryController {
 		List<Sort> sortList = new ArrayList<>();
 		sortList.add(new Sort("id_id", false, Type.LONG, new Long(1)));
 		pageParams.getFilters().put(SearchConstants.SORT_KEY, sortList);
-		return searchService.searchPurchaseInquiryItemIds(keyword, pageParams);
+		return searchService.searchPurchaseInquiryDetailIds(keyword, pageParams);
 	}
 
 	/**
@@ -317,7 +322,7 @@ public class SaleInquiryController {
 	 */
 	@RequestMapping(value = "/info/search", params = RequestState.TEAMS, method = RequestMethod.GET)
 	@ResponseBody
-	public SPage<PurchaseInquiryItem> getPublicInquiry(PageParams params, String searchFilter) {
+	public SPage<PurchaseInquiryDetail> getPublicInquiry(PageParams params, String searchFilter) {
 		logger.log("客户询价单", "搜索已转报价的公共询价单");
 		JSONObject jsonObject = JSON.parseObject(searchFilter);
 		String keyword = jsonObject.getString("keyword");
@@ -339,7 +344,7 @@ public class SaleInquiryController {
 		List<Sort> sortList = new ArrayList<>();
 		sortList.add(new Sort("id_id", false, Type.LONG, new Long(1)));
 		pageParams.getFilters().put(SearchConstants.SORT_KEY, sortList);
-		return searchService.searchPurchaseInquiryItemIds(keyword, pageParams);
+		return searchService.searchPurchaseInquiryDetailIds(keyword, pageParams);
 	}
 
 	/**
@@ -350,7 +355,7 @@ public class SaleInquiryController {
 	 */
 	@RequestMapping(value = "/info/nosearch", method = RequestMethod.GET)
 	@ResponseBody
-	public SPage<PurchaseInquiryItem> getPurchaseInquiries(PageParams params, String searchFilter) {
+	public SPage<PurchaseInquiryDetail> getPurchaseInquiries(PageParams params, String searchFilter) {
 		logger.log("客户询价单", "查看收到的客户询价单列表(全部)");
 		PageInfo pageInfo = new PageInfo(params);
 		pageInfo.filter("vendUU", SystemSession.getUser().getEnterprise().getUu());
@@ -362,7 +367,7 @@ public class SaleInquiryController {
 		if (distribute != null && !CollectionUtils.isEmpty(distribute.getDistribute())) {
 			filter.setDistribute(distribute.getDistribute());
 		}
-		return purchaseInquiryService.findByPageInfo(pageInfo, null, filter);
+		return detailService.findByPageInfo(pageInfo, null, filter);
 	}
 
 	/**
@@ -373,7 +378,7 @@ public class SaleInquiryController {
 	 */
 	@RequestMapping(value = "/info/nosearch", params = RequestState.TODO, method = RequestMethod.GET)
 	@ResponseBody
-	public SPage<PurchaseInquiryItem> getPurchaseInquiriesTodo(PageParams params, String searchFilter) {
+	public SPage<PurchaseInquiryDetail> getPurchaseInquiriesTodo(PageParams params, String searchFilter) {
 		logger.log("客户询价单", "查看收到的客户询价单列表(待报价)");
 		PageInfo pageInfo = new PageInfo(params);
 		pageInfo.filter("status", Status.NOT_REPLY.value());
@@ -386,7 +391,7 @@ public class SaleInquiryController {
 		if (distribute != null && !CollectionUtils.isEmpty(distribute.getDistribute())) {
 			filter.setDistribute(distribute.getDistribute());
 		}
-		return purchaseInquiryService.findTodoByPageInfo(pageInfo, null, filter);
+		return detailService.findTodoByPageInfo(pageInfo, null, filter);
 	}
 
 	/**
@@ -397,7 +402,7 @@ public class SaleInquiryController {
 	 */
 	@RequestMapping(value = "/info/nosearch", params = RequestState.END, method = RequestMethod.GET)
 	@ResponseBody
-	public SPage<PurchaseInquiryItem> getPurchaseInquiriesEnd(PageParams params, String searchFilter) {
+	public SPage<PurchaseInquiryDetail> getPurchaseInquiriesEnd(PageParams params, String searchFilter) {
 		logger.log("客户询价单", "查看收到的客户询价单列表(已过期)");
 		PageInfo pageInfo = new PageInfo(params);
 		pageInfo.filter("overdue", Constant.YES);
@@ -411,7 +416,7 @@ public class SaleInquiryController {
 		if (distribute != null && !CollectionUtils.isEmpty(distribute.getDistribute())) {
 			filter.setDistribute(distribute.getDistribute());
 		}
-		return purchaseInquiryService.findByPageInfo(pageInfo, null, filter);
+		return detailService.findByPageInfo(pageInfo, null, filter);
 	}
 
 	/**
@@ -422,10 +427,9 @@ public class SaleInquiryController {
 	 */
 	@RequestMapping(value = "/info/nosearch", params = RequestState.DONE, method = RequestMethod.GET)
 	@ResponseBody
-	public SPage<PurchaseInquiryItem> getPurchaseInquiriesDone(PageParams params, String searchFilter) {
+	public SPage<PurchaseInquiryDetail> getPurchaseInquiriesDone(PageParams params, String searchFilter) {
 		logger.log("客户询价单", "查看收到的客户询价单列表(已报价)");
 		PageInfo pageInfo = new PageInfo(params);
-//		pageInfo.filter("overdue", Constant.NO);
 		pageInfo.filter("status", Status.REPLIED.value());
 		pageInfo.filter("invalid", Constant.NO);
 		pageInfo.filter("vendUU", SystemSession.getUser().getEnterprise().getUu());
@@ -438,7 +442,7 @@ public class SaleInquiryController {
 		if (distribute != null && !CollectionUtils.isEmpty(distribute.getDistribute())) {
 			filter.setDistribute(distribute.getDistribute());
 		}
-		return purchaseInquiryService.findByPageInfo(pageInfo, null, filter);
+		return detailService.findByPageInfo(pageInfo, null, filter);
 	}
 
 	/**
@@ -449,7 +453,7 @@ public class SaleInquiryController {
 	 */
 	@RequestMapping(value = "/info/nosearch", params = RequestState.INVALID, method = RequestMethod.GET)
 	@ResponseBody
-	public SPage<PurchaseInquiryItem> getPurchaseInquiriesInvalid(PageParams params, String searchFilter) {
+	public SPage<PurchaseInquiryDetail> getPurchaseInquiriesInvalid(PageParams params, String searchFilter) {
 		logger.log("客户询价单", "查看收到的客户询价单列表(已失效)");
 		PageInfo pageInfo = new PageInfo(params);
 		pageInfo.filter("vendUU", SystemSession.getUser().getEnterprise().getUu());
@@ -461,7 +465,7 @@ public class SaleInquiryController {
 		if (distribute != null && !CollectionUtils.isEmpty(distribute.getDistribute())) {
 			filter.setDistribute(distribute.getDistribute());
 		}
-		return purchaseInquiryService.findInvalidByPageInfo(pageInfo, null, filter);
+		return detailService.findInvalidByPageInfo(pageInfo, null, filter);
 	}
 
 	/**
@@ -472,7 +476,7 @@ public class SaleInquiryController {
 	 */
 	@RequestMapping(value = "/info/nosearch", params = RequestState.REFUSED, method = RequestMethod.GET)
 	@ResponseBody
-	public SPage<PurchaseInquiryItem> getPurchaseInquiriesRefused(PageParams params, String searchFilter) {
+	public SPage<PurchaseInquiryDetail> getPurchaseInquiriesRefused(PageParams params, String searchFilter) {
 		logger.log("客户询价单", "查看收到的客户询价单列表(未采纳)");
 		PageInfo pageInfo = new PageInfo(params);
 		pageInfo.filter("agreed", Constant.NO);
@@ -487,7 +491,7 @@ public class SaleInquiryController {
 		if (distribute != null && !CollectionUtils.isEmpty(distribute.getDistribute())) {
 			filter.setDistribute(distribute.getDistribute());
 		}
-		return purchaseInquiryService.findByPageInfo(pageInfo, null, filter);
+		return detailService.findByPageInfo(pageInfo, null, filter);
 	}
 
 	/**
@@ -498,7 +502,7 @@ public class SaleInquiryController {
 	 */
 	@RequestMapping(value = "/info/nosearch", params = RequestState.AGREED, method = RequestMethod.GET)
 	@ResponseBody
-	public SPage<PurchaseInquiryItem> getPurchaseInquiriesAgreed(PageParams params, String searchFilter) {
+	public SPage<PurchaseInquiryDetail> getPurchaseInquiriesAgreed(PageParams params, String searchFilter) {
 		logger.log("客户询价单", "查看收到的客户询价单列表(已采纳)");
 		PageInfo pageInfo = new PageInfo(params);
 		pageInfo.filter("vendUU", SystemSession.getUser().getEnterprise().getUu());
@@ -513,7 +517,7 @@ public class SaleInquiryController {
 		if (distribute != null && !CollectionUtils.isEmpty(distribute.getDistribute())) {
 			filter.setDistribute(distribute.getDistribute());
 		}
-		return purchaseInquiryService.findByPageInfo(pageInfo, null, filter);
+		return detailService.findByPageInfo(pageInfo, null, filter);
 	}
 
 	/**
@@ -524,7 +528,7 @@ public class SaleInquiryController {
 	 */
 	@RequestMapping(value = "/info/nosearch", params = RequestState.TEAMS, method = RequestMethod.GET)
 	@ResponseBody
-	public SPage<PurchaseInquiryItem> getPublicInquiryInfo(PageParams params, String searchFilter) {
+	public SPage<PurchaseInquiryDetail> getPublicInquiryInfo(PageParams params, String searchFilter) {
 		logger.log("客户询价单", "查看收到已报价的公共询价单");
 		PageInfo pageInfo = new PageInfo(params);
 		pageInfo.filter("vendUU", SystemSession.getUser().getEnterprise().getUu());
@@ -539,7 +543,7 @@ public class SaleInquiryController {
 		if (distribute != null && !CollectionUtils.isEmpty(distribute.getDistribute())) {
 			filter.setDistribute(distribute.getDistribute());
 		}
-		return purchaseInquiryService.findByPageInfo(pageInfo, null, filter);
+		return detailService.findByPageInfo(pageInfo, null, filter);
 	}
 
 	/**

+ 14 - 0
src/main/java/com/uas/platform/b2b/dao/PurchaseInquiryDetailDao.java

@@ -0,0 +1,14 @@
+package com.uas.platform.b2b.dao;
+
+import com.uas.platform.b2b.model.PurchaseInquiryDetail;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.stereotype.Repository;
+
+import javax.transaction.Transactional;
+
+@Repository
+@Transactional
+public interface PurchaseInquiryDetailDao extends JpaSpecificationExecutor<PurchaseInquiryDetail>, JpaRepository<PurchaseInquiryDetail, Long> {
+
+}

+ 1 - 0
src/main/java/com/uas/platform/b2b/erp/service/impl/PublicInquiryServiceImpl.java

@@ -6,6 +6,7 @@ import com.uas.platform.b2b.core.util.DateFormatUtils;
 import com.uas.platform.b2b.core.util.ThreadTask;
 import com.uas.platform.b2b.dao.*;
 import com.uas.platform.b2b.erp.model.*;
+import com.uas.platform.b2b.erp.model.Inquiry;
 import com.uas.platform.b2b.erp.service.PublicInquiryService;
 import com.uas.platform.b2b.erp.support.ErpBufferedLogger;
 import com.uas.platform.b2b.event.PurcInquirySaveReleaseEvent;

+ 375 - 0
src/main/java/com/uas/platform/b2b/model/Inquiry.java

@@ -0,0 +1,375 @@
+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>
+ * 数据库虚拟列里面用到的函数,是不允许操作动态数据的;原over_sysdate函数用法存在问题;
+ * 改用视图{@code v$purc$inquiry}处理
+ * </pre>
+ * 
+ * @author yingp
+ * 
+ */
+@Table(name = "v$purc$inquiry", indexes = {@Index(name = "unique_enuu_code", columnList = "in_enuu,in_code", unique = true)})
+@Entity
+public class Inquiry implements Serializable {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	@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.REFRESH })
+	@JoinColumn(name = "in_recorderuu", insertable = false, updatable = false)
+	private UserBaseInfo recorderUser;
+
+	/**
+	 * 询价企业
+	 */
+	@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<PurchaseInquiryDetail> inquiryItems;
+
+	/**
+	 * 来源系统单据ID
+	 */
+	@Column(name = "in_sourceid")
+	private Long sourceId;
+
+	/**
+	 * 附件
+	 */
+	@OneToMany(fetch = FetchType.EAGER, cascade = {CascadeType.ALL})
+	@JoinTable(name = "purc$inquiryattach", 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<PurchaseInquiryDetail> getInquiryItems() {
+		return inquiryItems;
+	}
+
+	public void setInquiryItems(Set<PurchaseInquiryDetail> 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;
+	}
+
+	public UserBaseInfo getRecorderUser() {
+		return recorderUser;
+	}
+
+	public void setRecorderUser(UserBaseInfo recorderUser) {
+		this.recorderUser = recorderUser;
+	}
+}

+ 692 - 0
src/main/java/com/uas/platform/b2b/model/PurchaseInquiryDetail.java

@@ -0,0 +1,692 @@
+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.util.Date;
+import java.util.Set;
+
+/**
+ * 平台里面,以供应商的角度来查看采购询价单明细
+ * 
+ * @author yingp
+ *
+ */
+@Table(name = "v$purc$inquiryitems")
+@Entity
+public class PurchaseInquiryDetail {
+
+	@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 Inquiry inquiry;
+
+	/**
+	 * 买家采购员UU
+	 */
+	@Column(name = "id_useruu")
+	private Long userUU;
+
+	/**
+	 * 联系人姓名
+	 */
+	@Column(name = "id_username")
+	private String userName;
+
+	/**
+	 * 联系人电话
+	 */
+	@Column(name = "id_usertel")
+	private String userTel;
+
+	/**
+	 * 联系人编号
+	 */
+	@Column(name = "id_usercode")
+	private String userCode;
+
+	/**
+	 * 产品
+	 */
+	@OneToOne(cascade = { CascadeType.REFRESH })
+	@JoinColumn(name = "id_prid", insertable = false, updatable = false)
+	private Product product;
+
+	@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<PurchaseInquiryReply> 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 = "purc$inquiryitemsattach", 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 Inquiry getInquiry() {
+		return inquiry;
+	}
+
+	public void setInquiry(Inquiry 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<PurchaseInquiryReply> getReplies() {
+		return replies;
+	}
+
+	public void setReplies(Set<PurchaseInquiryReply> 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;
+	}
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public String getUserTel() {
+        return userTel;
+    }
+
+    public void setUserTel(String userTel) {
+        this.userTel = userTel;
+    }
+
+    public String getUserCode() {
+        return userCode;
+    }
+
+    public void setUserCode(String userCode) {
+        this.userCode = userCode;
+    }
+
+    /**
+	 * 回复记录的描述
+	 * 
+	 * @return
+	 */
+	public String replyDescription() {
+		if (!CollectionUtils.isEmpty(this.replies)) {
+			StringBuffer sb = new StringBuffer();
+			for (PurchaseInquiryReply 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;
+	}
+
+}

+ 9 - 0
src/main/java/com/uas/platform/b2b/search/SearchService.java

@@ -584,4 +584,13 @@ public interface SearchService {
 	 * @return
 	 */
 	Page<PurchaseOrderEnd> searchPurchaseEndOrderIdsForApp(String keyword, PageParams pageParams);
+
+	/**
+	 * 分页查询采购询价信息
+	 *
+	 * @param keyword 关键词
+	 * @param pageParams 分页参数
+	 * @return
+	 */
+	SPage<PurchaseInquiryDetail> searchPurchaseInquiryDetailIds(String keyword, PageParams pageParams);
 }

+ 26 - 0
src/main/java/com/uas/platform/b2b/search/SearchServiceImpl.java

@@ -79,6 +79,9 @@ public class SearchServiceImpl implements com.uas.platform.b2b.search.SearchServ
 	@Autowired
 	private PurchaseInquiryItemDao purchaseInquiryItemDao;
 
+	@Autowired
+    private PurchaseInquiryDetailDao inquiryDetailDao;
+
 	@Autowired
 	private PurchaseMRBDao purchaseMRBDao;
 
@@ -419,6 +422,29 @@ public class SearchServiceImpl implements com.uas.platform.b2b.search.SearchServ
 		return toSPage(idsPage, content);
 	}
 
+    /**
+     * 分页查询采购询价信息
+     *
+     * @param keyword 关键词
+     * @param pageParams 分页参数
+     * @return
+     */
+	@Override
+	public SPage<PurchaseInquiryDetail> searchPurchaseInquiryDetailIds(String keyword, PageParams pageParams) {
+		SPage<Long> idsPage = searchService.searchIds(keyword, Table_name.PURC$INQUIRYITEMS, pageParams);
+		final PredicateFactory<PurchaseInquiryDetail> factory = new PredicateFactory<PurchaseInquiryDetail>();
+		factory.add(PredicateUtils.in("id", idsPage.getContent(), false));
+		List<PurchaseInquiryDetail> content = inquiryDetailDao.findAll(new Specification<PurchaseInquiryDetail>() {
+			public Predicate toPredicate(Root<PurchaseInquiryDetail> root, CriteriaQuery<?> query,
+										 CriteriaBuilder builder) {
+				query.where(factory.toPredicate(root, query, builder));
+				return null;
+			}
+		});
+		sortByProperty(content, PurchaseInquiryDetail.class, "id", idsPage.getContent());
+		return toSPage(idsPage, content);
+	}
+
 	/**
 	 * 客户MRB
 	 */

+ 48 - 0
src/main/java/com/uas/platform/b2b/service/PurchaseInquiryDetailService.java

@@ -0,0 +1,48 @@
+package com.uas.platform.b2b.service;
+
+import com.uas.platform.b2b.model.PurchaseInquiryDetail;
+import com.uas.platform.b2b.model.SearchFilter;
+import com.uas.platform.core.model.PageInfo;
+import com.uas.search.b2b.model.SPage;
+import org.springframework.data.domain.Page;
+
+public interface PurchaseInquiryDetailService {
+
+	/**
+	 * 分页查找询价单
+	 *
+	 * @param pageInfo
+	 * @param keyword
+	 *            查找关键词
+	 * @return
+	 */
+	public Page<PurchaseInquiryDetail> findAllByPageInfo(PageInfo pageInfo, String keyword, SearchFilter filter);
+
+	/**
+	 * 分页查找询价单
+	 *
+	 * @param pageInfo
+	 * @param keyword
+	 * @param filter
+	 * @return
+	 */
+	public SPage<PurchaseInquiryDetail> findByPageInfo(PageInfo pageInfo, String keyword, SearchFilter filter);
+
+	/**
+	 * 不使用关键词搜索时,从数据库直接获取已失效询价单列表
+	 * @param pageInfo 页面参数
+	 * @param keyword 关键词
+	 * @param filter 搜索过滤条件
+	 * @return
+	 */
+    SPage<PurchaseInquiryDetail> findInvalidByPageInfo(PageInfo pageInfo, String keyword, SearchFilter filter);
+
+    /**
+     * 不使用关键词搜索时,从数据库直接获取待报价询价单列表
+     * @param pageInfo 页面参数
+     * @param keyword 关键词
+     * @param filter 搜索过滤条件
+     * @return
+     */
+    SPage<PurchaseInquiryDetail> findTodoByPageInfo(PageInfo pageInfo, String keyword, SearchFilter filter);
+}

+ 161 - 0
src/main/java/com/uas/platform/b2b/service/impl/PurchaseInquiryDetailServiceImpl.java

@@ -0,0 +1,161 @@
+package com.uas.platform.b2b.service.impl;
+
+import com.uas.platform.b2b.dao.PurchaseInquiryDetailDao;
+import com.uas.platform.b2b.model.PurchaseInquiryDetail;
+import com.uas.platform.b2b.model.SearchFilter;
+import com.uas.platform.b2b.search.SearchService;
+import com.uas.platform.b2b.service.PurchaseInquiryDetailService;
+import com.uas.platform.b2b.support.SystemSession;
+import com.uas.platform.core.model.Constant;
+import com.uas.platform.core.model.PageInfo;
+import com.uas.platform.core.model.Status;
+import com.uas.platform.core.persistence.criteria.PredicateUtils;
+import com.uas.search.b2b.model.PageParams;
+import com.uas.search.b2b.model.SPage;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.jpa.domain.Specification;
+import org.springframework.stereotype.Service;
+import org.springframework.ui.ModelMap;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
+
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+
+
+@Service
+public class PurchaseInquiryDetailServiceImpl implements PurchaseInquiryDetailService {
+
+
+    @Autowired
+    private PurchaseInquiryDetailDao inquiryDetailDao;
+
+    @Autowired
+	private SearchService searchService;
+
+	/**
+	 * 不使用关键词搜索时,从数据库直接获取已失效询价单列表
+	 *
+	 * @param pageInfo 页面参数
+	 * @param keyword  关键词
+	 * @param filter   搜索过滤条件
+	 * @return
+	 */
+	@Override
+	public SPage<PurchaseInquiryDetail> findInvalidByPageInfo(PageInfo pageInfo, String keyword, SearchFilter filter) {
+		Date date = new Date();
+		Calendar now = Calendar.getInstance();
+		now.setTime(date);
+		// 判断时间设置为23:59:59 ,截止报价日期当天也可报价
+		now.set(Calendar.HOUR_OF_DAY, 23);
+		now.set(Calendar.MINUTE, 59);
+		now.set(Calendar.SECOND, 59);
+		// 增加已失效过滤条件
+		pageInfo.expression(PredicateUtils.or(
+				// 状态为314 已作废
+				PredicateUtils.eq("status", Status.DISABLED.value(), false),
+				// invalid 为1,已过客户报价有效截止日期
+				PredicateUtils.eq("invalid", Constant.YES, true),
+				// 未回复且客户系统已提交(this.status == 200 && null != this.getInquiry().getCheck() && this.getInquiry().getCheck() == 1)
+				PredicateUtils.and(PredicateUtils.eq("status", Status.NOT_REPLY.value(), false),
+						PredicateUtils.eq("inquiry.check", Constant.YES, false)),
+				// 未回复但是已过报价截止日期
+				PredicateUtils.and(PredicateUtils.eq("status", Status.NOT_REPLY.value(), false),
+						PredicateUtils.lte("inquiry.endDate", now.getTime(), false))
+
+		));
+		return findByPageInfo(pageInfo, keyword, filter);
+	}
+
+    /**
+     * 不使用关键词搜索时,从数据库直接获取待报价询价单列表
+     *
+     * @param pageInfo 页面参数
+     * @param keyword  关键词
+     * @param filter   搜索过滤条件
+     * @return
+     */
+    @Override
+    public SPage<PurchaseInquiryDetail> findTodoByPageInfo(PageInfo pageInfo, String keyword, SearchFilter filter) {
+        // 提交状态不为1
+        pageInfo.expression(PredicateUtils.or(PredicateUtils.isNull("inquiry.check"), PredicateUtils.eq("inquiry.check", Constant.NO, false)));
+        pageInfo.expression(PredicateUtils.ne("overdue", Constant.YES, false));
+        pageInfo.expression(PredicateUtils.ne("invalid", Constant.YES, false));
+        return findByPageInfo(pageInfo, keyword, filter);
+    }
+
+    @Override
+	public SPage<PurchaseInquiryDetail> findByPageInfo(final PageInfo pageInfo, final String keyword,
+			final SearchFilter filter) {
+		SPage<PurchaseInquiryDetail> items = new SPage<PurchaseInquiryDetail>();
+		Page<PurchaseInquiryDetail> inquiryitems = inquiryDetailDao
+				.findAll(new Specification<PurchaseInquiryDetail>() {
+			public Predicate toPredicate(Root<PurchaseInquiryDetail> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
+				if (filter != null) {
+					if (!CollectionUtils.isEmpty(filter.getDistribute()))
+						pageInfo.expression(PredicateUtils.in("inquiry.enUU", filter.getDistribute(), false));
+					if (filter.getFromDate() != null)
+						pageInfo.expression(PredicateUtils.gte("inquiry.date", new Date(filter.getFromDate()), false));
+					if (filter.getEndDate() != null)
+						pageInfo.expression(PredicateUtils.lte("inquiry.date", new Date(filter.getEndDate()), false));
+				}
+				if (StringUtils.hasText(keyword)) {
+					List<Object> lists = new ArrayList<>();
+					PageParams pageParams = new PageParams();
+					ModelMap map = new ModelMap();
+					map.put("id_venduu", SystemSession.getUser().getEnterprise().getUu());
+					pageParams.setFilters(map);
+					for (PurchaseInquiryDetail list : searchService.searchPurchaseInquiryDetailIds(keyword, pageParams).getContent()) {
+						lists.add(list.getId());
+					}
+					pageInfo.expression(PredicateUtils.in("id", lists, false));
+				}
+				return query.where(pageInfo.getPredicates(root, query, builder)).getRestriction();
+			}
+		}, pageInfo);
+		items.setContent(inquiryitems.getContent());
+		items.setPage(inquiryitems.getNumber());
+		items.setSize(inquiryitems.getSize());
+		items.setTotalElement(inquiryitems.getTotalElements());
+		items.setTotalPage(inquiryitems.getTotalPages());
+		return items;
+	}
+
+	@Override
+	public Page<PurchaseInquiryDetail> findAllByPageInfo(final PageInfo pageInfo, final String keyword,
+			final SearchFilter filter) {
+		return inquiryDetailDao.findAll(new Specification<PurchaseInquiryDetail>() {
+			public Predicate toPredicate(Root<PurchaseInquiryDetail> root, CriteriaQuery<?> query,
+					CriteriaBuilder builder) {
+				if (filter != null) {
+					if (!CollectionUtils.isEmpty(filter.getDistribute()))
+						pageInfo.expression(PredicateUtils.in("inquiry.enUU", filter.getDistribute(), false));
+					if (filter.getFromDate() != null)
+						pageInfo.expression(PredicateUtils.gte("date", new Date(filter.getFromDate()), false));
+					if (filter.getEndDate() != null)
+						pageInfo.expression(PredicateUtils.lte("date", new Date(filter.getEndDate()), false));
+				}
+				if (!StringUtils.isEmpty(keyword)) {
+					PageParams pageParams = new PageParams();
+					ModelMap map = new ModelMap();
+					List<Long> lists = new ArrayList<>();
+					map.put("id_venduu", SystemSession.getUser().getEnterprise().getUu());
+					pageParams.setFilters(map);
+					for (PurchaseInquiryDetail list : searchService.searchPurchaseInquiryDetailIds(keyword, pageParams)
+							.getContent()) {
+						lists.add(list.getId());
+					}
+					pageInfo.expression(PredicateUtils.in("id", lists, false));
+				}
+				return query.where(pageInfo.getPredicates(root, query, builder)).getRestriction();
+			}
+		}, pageInfo);
+	}
+}