Browse Source

公共询价相关功能开发

hejq 8 years ago
parent
commit
0d3197e0fd
24 changed files with 1109 additions and 160 deletions
  1. 1 0
      pom.xml
  2. 21 1
      src/main/java/com/uas/ps/inquiry/controller/InquiryForSaleController.java
  3. 53 23
      src/main/java/com/uas/ps/inquiry/controller/PublicInquiryController.java
  4. 15 0
      src/main/java/com/uas/ps/inquiry/dao/EnterpriseDao.java
  5. 2 1
      src/main/java/com/uas/ps/inquiry/dao/PublicInquiryItemDao.java
  6. 17 0
      src/main/java/com/uas/ps/inquiry/dao/PublicInquiryItemInfoDao.java
  7. 24 0
      src/main/java/com/uas/ps/inquiry/dao/UserDao.java
  8. 39 0
      src/main/java/com/uas/ps/inquiry/entity/InquiryColumn.java
  9. 1 1
      src/main/java/com/uas/ps/inquiry/entity/InquiryDetail.java
  10. 47 0
      src/main/java/com/uas/ps/inquiry/entity/MessageModel.java
  11. 40 0
      src/main/java/com/uas/ps/inquiry/entity/OrderStatus.java
  12. 24 1
      src/main/java/com/uas/ps/inquiry/model/PublicInquiry.java
  13. 359 0
      src/main/java/com/uas/ps/inquiry/model/PublicInquiryInfo.java
  14. 23 0
      src/main/java/com/uas/ps/inquiry/model/PublicInquiryItem.java
  15. 16 94
      src/main/java/com/uas/ps/inquiry/model/PublicInquiryItemInfo.java
  16. 108 0
      src/main/java/com/uas/ps/inquiry/model/User.java
  17. 35 0
      src/main/java/com/uas/ps/inquiry/page/FilterCondition.java
  18. 14 0
      src/main/java/com/uas/ps/inquiry/page/SearchFilter.java
  19. 14 0
      src/main/java/com/uas/ps/inquiry/service/InquiryForSaleService.java
  20. 11 1
      src/main/java/com/uas/ps/inquiry/service/PublicInquiryService.java
  21. 9 0
      src/main/java/com/uas/ps/inquiry/service/UserService.java
  22. 122 26
      src/main/java/com/uas/ps/inquiry/service/impl/InquiryForSaleServiceImpl.java
  23. 100 12
      src/main/java/com/uas/ps/inquiry/service/impl/PublicInquiryServiceImpl.java
  24. 14 0
      src/main/java/com/uas/ps/inquiry/service/impl/UserServiceImpl.java

+ 1 - 0
pom.xml

@@ -19,6 +19,7 @@
         <dependency>
             <groupId>com.uas.ps</groupId>
             <artifactId>ps-core</artifactId>
+            <version>0.0.1-SNAPSHOT</version>
         </dependency>
         <dependency>
             <groupId>com.uas.ps</groupId>

+ 21 - 1
src/main/java/com/uas/ps/inquiry/controller/InquiryForSaleController.java

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.uas.ps.inquiry.model.Attach;
 import com.uas.ps.inquiry.model.PublicInquiryItem;
+import com.uas.ps.inquiry.model.PublicInquiryReply;
 import com.uas.ps.inquiry.service.InquiryForSaleService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.ui.ModelMap;
@@ -12,6 +13,8 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.List;
+
 
 /**
  * 针对供应商,对询价的相关操作
@@ -32,7 +35,7 @@ public class InquiryForSaleController {
      * @return
      */
     @RequestMapping(value = "/inquiry/detail", method = RequestMethod.GET)
-    public PublicInquiryItem findById(Long id) {
+    public PublicInquiryItem findById(Long id, Long enuu) {
         return saleService.findById(id);
     }
 
@@ -123,4 +126,21 @@ public class InquiryForSaleController {
     public PublicInquiryItem findBySourceId(Long id, Long enuu) {
         return saleService.findBySourceIdAndEnuu(id, enuu);
     }
+
+    /**
+     * 移动端转报价的功能
+     *
+     * @param inquiryItemId 公共询价明细id
+     * @param enuu 报价企业UU号
+     * @param replies 报价信息
+     * @param leadtime 交货周期
+     * @param minOrderQty 最小订购
+     * @param minPackQty 最小包装
+     * @return
+     */
+    @RequestMapping(value = "/mobile/quote", method = RequestMethod.POST)
+    public ModelMap getQuotationList(Long inquiryItemId, Long enuu, Long useruu, Long leadtime, Double minPackQty, Double minOrderQty, String replies) throws Exception {
+        List<PublicInquiryReply> replyList = JSONObject.parseArray(replies, PublicInquiryReply.class);
+         return saleService.quoteInquiry(inquiryItemId, enuu, useruu, replyList, leadtime, minPackQty, minOrderQty);
+    }
 }

+ 53 - 23
src/main/java/com/uas/ps/inquiry/controller/PublicInquiryController.java

@@ -1,21 +1,19 @@
 package com.uas.ps.inquiry.controller;
 
 import com.alibaba.fastjson.JSONObject;
-import com.uas.ps.inquiry.entity.BatchInquiry;
-import com.uas.ps.inquiry.entity.Inquiry;
-import com.uas.ps.inquiry.entity.InquiryDecide;
-import com.uas.ps.inquiry.entity.InquiryDetail;
-import com.uas.ps.inquiry.model.PublicInquiryItem;
+import com.uas.ps.inquiry.entity.*;
 import com.uas.ps.inquiry.model.PublicInquiryItemInfo;
+import com.uas.ps.inquiry.model.PublicInquiryReply;
 import com.uas.ps.inquiry.model.PurcInquiryItemInfo;
+import com.uas.ps.inquiry.page.FilterCondition;
 import com.uas.ps.inquiry.page.PageInfo;
 import com.uas.ps.inquiry.page.SearchFilter;
-import com.uas.ps.inquiry.page.exception.IllegalOperatorException;
 import com.uas.ps.inquiry.service.PublicInquiryService;
 import javassist.NotFoundException;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.ui.ModelMap;
+import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.*;
 
 import java.io.UnsupportedEncodingException;
@@ -44,7 +42,7 @@ public class PublicInquiryController {
      * @throws UnsupportedEncodingException
      */
     @RequestMapping(method = RequestMethod.POST)
-    public void saveInquiries(@RequestParam("data") String data, @RequestParam("enuu") Long enuu, @RequestParam("address") String address) throws NotFoundException, UnsupportedEncodingException {
+    public void saveInquiries(@RequestParam("data") String data, Long enuu, String address) throws NotFoundException, UnsupportedEncodingException {
         String jsonStr = URLDecoder.decode(data, "UTF-8");
         address = URLDecoder.decode(address, "UTF-8");
         List<BatchInquiry> inquiries = JSONObject.parseArray(jsonStr, BatchInquiry.class);
@@ -72,7 +70,7 @@ public class PublicInquiryController {
      * @date 2018-01-14 15:20
      * @param enuu 询价企业UU
      */
-    @RequestMapping(value = "/infos", method = RequestMethod.GET)
+    @RequestMapping(value = "/quotation", method = RequestMethod.GET)
     public List<InquiryDetail> getReply(Long enuu) {
         List<InquiryDetail> details = publicInquiryService.findNotUploadReply(enuu);
         return details;
@@ -86,7 +84,7 @@ public class PublicInquiryController {
      * @throws UnsupportedEncodingException
      */
     @RequestMapping(value = "/reply/back", method = RequestMethod.POST)
-    public void onReplySuccess(@RequestParam("data") String data) throws UnsupportedEncodingException {
+    public void onReplySuccess(@RequestParam("data") String data, Long enuu) throws UnsupportedEncodingException {
         String[] idArray = URLDecoder.decode(data, "UTF-8").split(",");
         publicInquiryService.onReplyUploadSuccess(idArray);
     }
@@ -98,7 +96,7 @@ public class PublicInquiryController {
      * @throws UnsupportedEncodingException
      */
     @RequestMapping(value = "/checking", method = RequestMethod.POST)
-    public void checkInquiry(@RequestParam("data") String data) throws UnsupportedEncodingException {
+    public void checkInquiry(@RequestParam("data") String data, Long enuu) throws UnsupportedEncodingException {
         String jsonStr = URLDecoder.decode(data, "UTF-8");
         List<Inquiry> inquiries = JSONObject.parseArray(jsonStr, Inquiry.class);
         publicInquiryService.updateInquiryStatus(inquiries);
@@ -111,7 +109,7 @@ public class PublicInquiryController {
      * @throws UnsupportedEncodingException
      */
     @RequestMapping(value = "/reply/decide", method = RequestMethod.POST)
-    public void onReplyDecide(@RequestParam("data") String data, @RequestParam("enuu") Long enuu) throws UnsupportedEncodingException {
+    public void onReplyDecide(@RequestParam("data") String data, Long enuu) throws UnsupportedEncodingException {
         String jsonStr = URLDecoder.decode(data, "UTF-8");
         List<InquiryDecide> decides = JSONObject.parseArray(jsonStr, InquiryDecide.class);
         publicInquiryService.onReplyDecide(decides, enuu);
@@ -125,7 +123,7 @@ public class PublicInquiryController {
      * @throws UnsupportedEncodingException
      */
     @RequestMapping(value = "/invalid", method = RequestMethod.POST)
-    public void onReplyInvalid(@RequestParam("data") String data, @RequestParam("enuu") Long enuu) throws UnsupportedEncodingException {
+    public void onReplyInvalid(@RequestParam("data") String data, Long enuu) throws UnsupportedEncodingException {
         String jsonStr = URLDecoder.decode(data, "UTF-8");
         List<Inquiry> inquiries = JSONObject.parseArray(jsonStr, Inquiry.class);
         publicInquiryService.onReplyInvalid(inquiries, enuu);
@@ -166,7 +164,7 @@ public class PublicInquiryController {
      * @param page 页码
      * @param size 每页大小
      * @param en_uu 企业UU
-     * @param state 过滤状态
+     * @param _state 过滤状态
      * @param keyword 搜索词
      * @param user_tel 电话
      * @param fromDate 开始日期
@@ -174,16 +172,45 @@ public class PublicInquiryController {
      * @return
      */
     @RequestMapping(value = "/mobile", method = RequestMethod.GET)
-    public Page<PurcInquiryItemInfo> publincInquiry(Integer page, Integer size, Long en_uu, String state,
+    public ModelMap publincInquiry(Integer page, Integer size, Long en_uu, String _state,
                                                     String keyword, String user_tel, Long fromDate, Long endDate) {
+        ModelMap map = new ModelMap();
         PageInfo pageInfo = new PageInfo();
-        pageInfo.setPageNumber(page);
-        pageInfo.setPageSize(size);
+        if (page == 0) {
+            pageInfo.setPageNumber(1);
+        } else {
+            pageInfo.setPageNumber(page);
+        }
+        if (size == 0) {
+            pageInfo.setPageSize(5);
+        } else {
+            pageInfo.setPageSize(size);
+        }
+        pageInfo.setOffset(pageInfo.getPageSize() * (pageInfo.getPageNumber() - 1));
         SearchFilter filter = new SearchFilter();
         filter.setFromDate(fromDate);
         filter.setEndDate(endDate);
         filter.setKeyword(keyword);
-        return publicInquiryService.findTodoByPageInfo(pageInfo, filter);
+        if (StringUtils.hasText(_state)) {
+            if (_state.equals(OrderStatus.end.name())) {
+                pageInfo.filter("overdue", Constant.YES);
+                map.put("content", publicInquiryService.findTodoByPageInfo(pageInfo, filter).getContent());
+                return map;
+            } else if (_state.equals(OrderStatus.invalid)) {
+                pageInfo.filter("invalid", Constant.YES);
+                map.put("content", publicInquiryService.findTodoByPageInfo(pageInfo, filter).getContent());
+                return map;
+            } else if (_state.equals(OrderStatus.done.name())) {
+                filter.setVendUU(en_uu);
+                filter.setKeyword(keyword);
+                map.put("content", publicInquiryService.findByPageInfo(pageInfo, filter).getContent());
+                return map;
+            }
+        } else {
+            map.put("content", publicInquiryService.findTodoByPageInfo(pageInfo, filter).getContent());
+            return map;
+        }
+        return map;
     }
 
     /**
@@ -192,18 +219,21 @@ public class PublicInquiryController {
      * @author hejq
      * @date 2018-01-18 15:36
      * @param pageInfo 分页参数
-     * @param searchFilter 过滤条件
+     * @param filter 过滤条件
      * @return
      */
     @RequestMapping(value = "/quotation/list", method = RequestMethod.GET)
-    public Page<PublicInquiryItem> getQuotation(PageInfo pageInfo, SearchFilter searchFilter) {
+    public Page<PublicInquiryItemInfo> getQuotation(PageInfo pageInfo, String filter, String _state) {
+        SearchFilter searchFilter = JSONObject.parseObject(filter, SearchFilter.class);
         if (null != searchFilter.getVendUU()) {
             pageInfo.filter("vendUU", searchFilter.getVendUU());
         } else if (null != searchFilter.getEnUU()) {
-            pageInfo.filter("inquiry.enUU", searchFilter.getVendUU());
-        } else {
-            throw new IllegalOperatorException("参数格式不对");
+            pageInfo.filter("inquiry.enUU", searchFilter.getEnUU());
         }
-        return publicInquiryService.findByPageInfo(pageInfo, searchFilter);
+        if (null != _state) {
+            pageInfo = publicInquiryService.covert(pageInfo, _state);
+        }
+        return  publicInquiryService.findByPageInfo(pageInfo, searchFilter);
     }
+
 }

+ 15 - 0
src/main/java/com/uas/ps/inquiry/dao/EnterpriseDao.java

@@ -0,0 +1,15 @@
+package com.uas.ps.inquiry.dao;
+
+import com.uas.ps.inquiry.model.Enterprise;
+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-20.
+ */
+@Repository
+public interface EnterpriseDao extends JpaRepository<Enterprise, Long>, JpaSpecificationExecutor<Enterprise> {
+}

+ 2 - 1
src/main/java/com/uas/ps/inquiry/dao/PublicInquiryItemDao.java

@@ -74,5 +74,6 @@ public interface PublicInquiryItemDao extends JpaRepository<PublicInquiryItem, L
      * @param id 询价主表id
      * @return
      */
-    Integer countByInquiryId(Long id);
+    @Query("select count(1) from PublicInquiryItem i where i.inquiry.id = :id")
+    Integer countByInquiryId(@Param("id") Long id);
 }

+ 17 - 0
src/main/java/com/uas/ps/inquiry/dao/PublicInquiryItemInfoDao.java

@@ -0,0 +1,17 @@
+package com.uas.ps.inquiry.dao;
+
+import com.uas.ps.inquiry.model.PublicInquiryItemInfo;
+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-14.
+ */
+@Repository
+public interface PublicInquiryItemInfoDao extends JpaRepository<PublicInquiryItemInfo, Long>, JpaSpecificationExecutor<PublicInquiryItemInfo> {
+
+}

+ 24 - 0
src/main/java/com/uas/ps/inquiry/dao/UserDao.java

@@ -0,0 +1,24 @@
+package com.uas.ps.inquiry.dao;
+
+import com.uas.ps.inquiry.model.User;
+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-20.
+ */
+@Repository
+public interface UserDao extends JpaSpecificationExecutor<User>, JpaRepository<User, Long> {
+
+    /**
+     * 通过手机号查询用户信息
+     *
+     * @param userTel
+     * @return
+     */
+    User findByUserTel(String userTel);
+}
+

+ 39 - 0
src/main/java/com/uas/ps/inquiry/entity/InquiryColumn.java

@@ -0,0 +1,39 @@
+package com.uas.ps.inquiry.entity;
+
+/**
+ * 搜索过滤条件字段
+ *
+ * Created by hejq on 2018-01-19.
+ */
+public enum InquiryColumn {
+
+    /**
+     * 供应商UU
+     */
+    vendUU,
+
+    /**
+     * 状态码
+     */
+    status,
+
+    /**
+     * 客户UU
+     */
+    enUU,
+
+    /**
+     * 是否同意
+     */
+    agreed,
+
+    /**
+     * 是否失效
+     */
+    invalid,
+
+    /**
+     * 是否过期
+     */
+    overdue
+}

+ 1 - 1
src/main/java/com/uas/ps/inquiry/entity/InquiryDetail.java

@@ -40,7 +40,7 @@ public class InquiryDetail {
 	private String sourceApp;
 	private String id_vendname;// 供应商名称
 	private String id_vendyyzzh;// 供应商营业执照号
-	private String in_code;// 公共询价时epr没有表不同,这时,需要新建数据
+	private String in_code;// 公共询价时erp没有表不同,这时,需要新建数据
 	private String in_inquirytype;// 询价类型,公共询价传回到ERP时进行特殊处理
     private Integer id_quto;//给是否自动询价赋值
 

+ 47 - 0
src/main/java/com/uas/ps/inquiry/entity/MessageModel.java

@@ -0,0 +1,47 @@
+package com.uas.ps.inquiry.entity;
+
+/**
+ * 消息
+ */
+public class MessageModel {
+    /**
+     * 消息类型
+     */
+    private String type;
+    /**
+     * 消息内容
+     */
+    private String content;
+    /**
+     * 消息接受者json信息
+     */
+    private String receiver;
+    /**
+     * 消息发送者json信息
+     */
+    private String sender;
+    /**
+     * 来源应用id
+     */
+    private String producerApp;
+    /**
+     * 消费类型
+     */
+    private String consumeType;
+    /**
+     * 推送方式类型
+     */
+    private String smsType;
+    /**
+     * 邮件模板id
+     */
+    private String mailTemplate;
+    /**
+     * 短息模板id
+     */
+    private String smTemplate;
+    /**
+     * 接收应用(以","拼接应用名称)
+     */
+    private String consumerApp;
+}

+ 40 - 0
src/main/java/com/uas/ps/inquiry/entity/OrderStatus.java

@@ -0,0 +1,40 @@
+package com.uas.ps.inquiry.entity;
+
+/**
+ * 单据状态
+ *
+ * Created by hejq on 2018-01-20.
+ */
+public enum  OrderStatus {
+
+    /**
+     * 待处理
+     */
+    todo,
+
+    /**
+     * 已结束
+     */
+    end,
+
+    /**
+     * 已处理
+     */
+    done,
+
+    /**
+     * 已同意
+     */
+    agreed,
+
+    /**
+     * 已拒绝
+     */
+    refused,
+
+    /**
+     * 已失效
+     */
+    invalid
+
+}

+ 24 - 1
src/main/java/com/uas/ps/inquiry/model/PublicInquiry.java

@@ -172,7 +172,7 @@ public class PublicInquiry implements Serializable {
 	@Column(name = "in_kind")
 	private String kind;
 
-	public Long getId() {
+    public Long getId() {
 		return id;
 	}
 
@@ -357,4 +357,27 @@ public class PublicInquiry implements Serializable {
 	public void setKind(String kind) {
 		this.kind = kind;
 	}
+
+	public PublicInquiry() {
+	}
+
+	public PublicInquiry(PurcInquiryInfo inquiry) {
+        this.check = inquiry.getCheck();
+        this.auditor = inquiry.getAuditor();
+        this.attachs = inquiry.getAttachs();
+        this.code = inquiry.getCode();
+        this.date = inquiry.getDate();
+        this.endDate = inquiry.getEndDate();
+        this.enUU = inquiry.getEnUU();
+        this.environment = inquiry.getEnvironment();
+        this.inquirytype = inquiry.getInquirytype();
+        this.invoice = inquiry.getInvoice();
+        this.isOpen = inquiry.getIsOpen();
+        this.overdue = inquiry.getOverdue();
+        this.priceType = inquiry.getPriceType();
+        this.recorderUU = inquiry.getRecorderUU();
+        this.recorder = inquiry.getRecorder();
+        this.sourceApp = inquiry.getSourceapp();
+        this.ship = inquiry.getShip();
+	}
 }

+ 359 - 0
src/main/java/com/uas/ps/inquiry/model/PublicInquiryInfo.java

@@ -0,0 +1,359 @@
+package com.uas.ps.inquiry.model;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.fasterxml.jackson.annotation.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;
+
+	/**
+	 * 询价企业信息
+	 */
+	@OneToOne(cascade = { CascadeType.MERGE, CascadeType.REFRESH })
+	@JoinColumn(name = "in_enuu", insertable = false, updatable = false)
+	private Enterprise enterprise;
+
+	/**
+	 * 询价单所属用户UU
+	 */
+	@Column(name = "in_recorderuu")
+	private Long recorderUU;
+
+	/**
+	 * 流水号
+	 */
+	@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 Enterprise getEnterprise() {
+        return enterprise;
+    }
+
+    public void setEnterprise(Enterprise 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;
+	}
+}

+ 23 - 0
src/main/java/com/uas/ps/inquiry/model/PublicInquiryItem.java

@@ -643,6 +643,29 @@ public class PublicInquiryItem implements Serializable {
 		this.businessCode = businessCode;
 	}
 
+	/**
+	 * 将公共询价单转成报价单
+	 *
+	 * @param item 公共询价单明细
+	 */
+	public PublicInquiryItem(PurcInquiryItemInfo item) {
+		this.date = new Date();
+		this.agreed = item.getAgreed();
+		this.brand = item.getBrand();
+		this.sourceId = item.getId();
+		this.currency = item.getCurrency();
+		this.custLap = item.getCustLap();
+		this.leadtime = item.getLeadtime();
+		this.productId = item.getProductId();
+		this.needquantity = item.getNeedquantity();
+		this.fromDate = item.getFromDate();
+		this.taxrate = item.getTaxrate();
+		this.toDate = item.getToDate();
+	}
+
+	public PublicInquiryItem() {
+	}
+
 	/**
 	 * 回复记录的描述
 	 * 

+ 16 - 94
src/main/java/com/uas/ps/inquiry/model/PublicInquiryItemInfo.java

@@ -2,10 +2,6 @@ package com.uas.ps.inquiry.model;
 
 import com.alibaba.fastjson.annotation.JSONField;
 import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.uas.ps.entity.Status;
-import com.uas.ps.inquiry.entity.Constant;
-import com.uas.ps.inquiry.util.DateUtils;
-import org.springframework.util.CollectionUtils;
 
 import javax.persistence.*;
 import java.io.Serializable;
@@ -16,7 +12,7 @@ import java.util.*;
  *
  * @author hejq 2018-01-06
  */
-@Table(name = "public$inquiryitems")
+@Table(name = "v$public$inquiryitems")
 @Entity
 public class PublicInquiryItemInfo implements Serializable {
 
@@ -29,7 +25,6 @@ public class PublicInquiryItemInfo implements Serializable {
 	 * id
 	 */
 	@Id
-	@GeneratedValue(strategy = GenerationType.IDENTITY)
 	@Column(name = "id_id")
 	private Long id;
 
@@ -48,9 +43,9 @@ public class PublicInquiryItemInfo implements Serializable {
 	/**
 	 * 询价单
 	 */
-	@ManyToOne(cascade = CascadeType.ALL, optional = true)
+	@ManyToOne(cascade = CascadeType.ALL)
 	@JoinColumn(name = "id_inid", nullable = false)
-	private PublicInquiry inquiry;
+	private PublicInquiryInfo inquiry;
 
 	/**
 	 * 买家采购员UU
@@ -101,6 +96,13 @@ public class PublicInquiryItemInfo implements Serializable {
 	@Column(name = "id_venduu")
 	private Long vendUU;
 
+	/**
+	 * 询价企业信息
+	 */
+	@OneToOne(cascade = { CascadeType.MERGE, CascadeType.REFRESH })
+	@JoinColumn(name = "id_venduu", insertable = false, updatable = false)
+	private Enterprise enterprise;
+
 	/**
 	 * 供应商联系人UU
 	 */
@@ -161,14 +163,6 @@ public class PublicInquiryItemInfo implements Serializable {
 	@Column(name = "id_leadtime")
 	private Long leadtime;
 
-	/**
-	 * 分段报价明细
-	 */
-	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
-	@JoinColumn(name = "ir_idid")
-	@OrderBy("lapQty")
-	private List<PublicInquiryReply> replies;
-
 	/**
 	 * {未回复、已回复}
 	 */
@@ -259,13 +253,6 @@ public class PublicInquiryItemInfo implements Serializable {
 	@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;
-
 	/**
 	 * 需求数量
 	 */
@@ -312,8 +299,6 @@ public class PublicInquiryItemInfo implements Serializable {
 		this.id = id;
 	}
 
-	@JsonIgnore
-	@JSONField(serialize = false)
 	public Long getSourceId() {
 		return sourceId;
 	}
@@ -330,11 +315,11 @@ public class PublicInquiryItemInfo implements Serializable {
 		this.number = number;
 	}
 
-	public PublicInquiry getInquiry() {
+	public PublicInquiryInfo getInquiry() {
 		return inquiry;
 	}
 
-	public void setInquiry(PublicInquiry inquiry) {
+	public void setInquiry(PublicInquiryInfo inquiry) {
 		this.inquiry = inquiry;
 	}
 
@@ -426,12 +411,12 @@ public class PublicInquiryItemInfo implements Serializable {
 		this.vendUU = vendUU;
 	}
 
-	public List<PublicInquiryReply> getReplies() {
-		return replies;
+	public Enterprise getEnterprise() {
+		return enterprise;
 	}
 
-	public void setReplies(List<PublicInquiryReply> replies) {
-		this.replies = replies;
+	public void setEnterprise(Enterprise enterprise) {
+		this.enterprise = enterprise;
 	}
 
 	public Long getVendUserUU() {
@@ -578,14 +563,6 @@ public class PublicInquiryItemInfo implements Serializable {
 		this.invalidStatus = invalidStatus;
 	}
 
-	public Set<Attach> getAttaches() {
-		return attaches;
-	}
-
-	public void setAttaches(Set<Attach> attaches) {
-		this.attaches = attaches;
-	}
-
 	public Double getNeedquantity() {
 		return needquantity;
 	}
@@ -643,59 +620,4 @@ public class PublicInquiryItemInfo implements Serializable {
 		this.businessCode = businessCode;
 	}
 
-	/**
-	 * 回复记录的描述
-	 * 
-	 * @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<PublicInquiryItemInfo> purcitems) {
-		List<PublicInquiry> 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;
-    }
 }

+ 108 - 0
src/main/java/com/uas/ps/inquiry/model/User.java

@@ -0,0 +1,108 @@
+package com.uas.ps.inquiry.model;
+
+import javax.persistence.*;
+import java.io.Serializable;
+
+/**
+ * 只包含最基本的信息,用与跟单据关联展现
+ * @author suntg
+ *
+ */
+@Entity
+@Table(name = "sec$users")
+public class User implements Serializable {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@Column(name = "user_uu")
+	private Long userUU;
+
+	@Column(name = "user_name")
+	private String userName;
+	
+	@Column(name = "user_pwd")
+	private String userPwd;
+
+	@Column(name = "user_email")
+	private String userEmail;
+
+	@Column(name = "user_tel")
+	private String userTel;
+
+	@Column(name = "user_sex")
+	private String userSex;
+	
+	@Column(name = "user_imid")
+	private Long userIMId;
+
+	@Transient
+	private Enterprise enterprise;
+
+	public Long getUserUU() {
+		return userUU;
+	}
+
+	public void setUserUU(Long userUU) {
+		this.userUU = userUU;
+	}
+
+	public String getUserName() {
+		return userName;
+	}
+
+	public void setUserName(String userName) {
+		this.userName = userName;
+	}
+
+	public String getUserPwd() {
+		return userPwd;
+	}
+
+	public void setUserPwd(String userPwd) {
+		this.userPwd = userPwd;
+	}
+
+	public String getUserEmail() {
+		return userEmail;
+	}
+
+	public void setUserEmail(String userEmail) {
+		this.userEmail = userEmail;
+	}
+
+	public String getUserTel() {
+		return userTel;
+	}
+
+	public void setUserTel(String userTel) {
+		this.userTel = userTel;
+	}
+
+	public String getUserSex() {
+		return userSex;
+	}
+
+	public void setUserSex(String userSex) {
+		this.userSex = userSex;
+	}
+
+	public Long getUserIMId() {
+		return userIMId;
+	}
+
+	public void setUserIMId(Long userIMId) {
+		this.userIMId = userIMId;
+	}
+
+	public Enterprise getEnterprise() {
+		return enterprise;
+	}
+
+	public void setEnterprise(Enterprise enterprise) {
+		this.enterprise = enterprise;
+	}
+}

+ 35 - 0
src/main/java/com/uas/ps/inquiry/page/FilterCondition.java

@@ -0,0 +1,35 @@
+package com.uas.ps.inquiry.page;
+
+/**
+ * 搜索过滤条件
+ *
+ * Created by hejq on 2018-01-19.
+ */
+public class FilterCondition {
+
+    /**
+     * 关键字
+     */
+    private String key;
+
+    /**
+     * 值
+     */
+    private String value;
+
+    public String getKey() {
+        return key;
+    }
+
+    public void setKey(String key) {
+        this.key = key;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+}

+ 14 - 0
src/main/java/com/uas/ps/inquiry/page/SearchFilter.java

@@ -1,6 +1,7 @@
 package com.uas.ps.inquiry.page;
 
 import java.util.Collection;
+import java.util.List;
 
 /**
  * 单据查询搜索条件
@@ -57,6 +58,11 @@ public class SearchFilter {
 	 */
 	private Long userUU;
 
+	/**
+	 * 条件
+	 */
+	private List<FilterCondition> conditions;
+
 	public String getKeyword() {
 		return keyword;
 	}
@@ -129,4 +135,12 @@ public class SearchFilter {
 	public void setUserUU(Long userUU) {
 		this.userUU = userUU;
 	}
+
+	public List<FilterCondition> getConditions() {
+		return conditions;
+	}
+
+	public void setConditions(List<FilterCondition> conditions) {
+		this.conditions = conditions;
+	}
 }

+ 14 - 0
src/main/java/com/uas/ps/inquiry/service/InquiryForSaleService.java

@@ -2,6 +2,7 @@ package com.uas.ps.inquiry.service;
 
 import com.uas.ps.inquiry.model.Attach;
 import com.uas.ps.inquiry.model.PublicInquiryItem;
+import com.uas.ps.inquiry.model.PublicInquiryReply;
 import org.springframework.ui.ModelMap;
 
 import java.util.List;
@@ -82,4 +83,17 @@ public interface InquiryForSaleService {
      * @return
      */
     ModelMap findByIdAndEnuu(Long id, Long enuu);
+
+    /**
+     * 移动端转报价的功能
+     *
+     * @param id 公共询价明细id
+     * @param enuu 报价企业UU号
+     * @param replies 报价信息
+     * @param leadtime 交货周期
+     * @param minOrderQty 最小订购
+     * @param minPackQty 最小包装
+     * @return
+     */
+    ModelMap quoteInquiry(Long id, Long enuu, Long useruu, List<PublicInquiryReply> replies, Long leadtime, Double minPackQty, Double minOrderQty) throws Exception;
 }

+ 11 - 1
src/main/java/com/uas/ps/inquiry/service/PublicInquiryService.java

@@ -139,7 +139,7 @@ public interface PublicInquiryService {
      * @param filter 过滤条件
      * @return
      */
-    Page<PublicInquiryItem> findByPageInfo(PageInfo info, SearchFilter filter);
+    Page<PublicInquiryItemInfo> findByPageInfo(PageInfo info, SearchFilter filter);
 
     /**
      * 通过分页参数和过滤条件查询公共询价价信息
@@ -150,5 +150,15 @@ public interface PublicInquiryService {
      * @return
      */
     Page<PurcInquiryItemInfo> findTodoByPageInfo(PageInfo info, SearchFilter filter);
+
+    /**
+     * 根据传入条件封装查询条件
+     *
+     * @param pageInfo 分页参数
+     * @param state 过滤条件
+     * @return
+     */
+    PageInfo covert(PageInfo pageInfo, String state);
+
 }
 

+ 9 - 0
src/main/java/com/uas/ps/inquiry/service/UserService.java

@@ -0,0 +1,9 @@
+package com.uas.ps.inquiry.service;
+
+/**
+ * 用户的一些操作
+ *
+ * Created by hejq on 2018-01-20.
+ */
+public interface UserService {
+}

+ 122 - 26
src/main/java/com/uas/ps/inquiry/service/impl/InquiryForSaleServiceImpl.java

@@ -4,8 +4,10 @@ import com.uas.ps.entity.Status;
 import com.uas.ps.inquiry.dao.*;
 import com.uas.ps.inquiry.entity.Constant;
 import com.uas.ps.inquiry.model.*;
+import com.uas.ps.inquiry.page.exception.IllegalOperatorException;
 import com.uas.ps.inquiry.service.InquiryForSaleService;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.dao.DataAccessException;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.ui.ModelMap;
@@ -36,6 +38,9 @@ public class InquiryForSaleServiceImpl implements InquiryForSaleService {
     @Autowired
     private PurcInquiryItemInfoDao inquiryItemInfoDao;
 
+    @Autowired
+    private EnterpriseDao enterpriseDao;
+
     /**
      * 通过明细查询询价详情
      *
@@ -127,6 +132,10 @@ public class InquiryForSaleServiceImpl implements InquiryForSaleService {
      */
     @Override
     public PublicInquiryItem saveItem(PublicInquiryItem inquiryItem) throws Exception {
+        PublicInquiryItem existInquiry = infoDao.findByVendUUAndSourceId(inquiryItem.getVendUU(), inquiryItem.getId());
+        if (null != existInquiry) {
+            throw new IllegalOperatorException("该单据已报价,不能重复报价");
+        }
         PublicInquiry inquiry = inquiryItem.getInquiry();
         if (null != inquiry) {
             // 先判断客户询价单是否存在这张单据
@@ -151,43 +160,48 @@ public class InquiryForSaleServiceImpl implements InquiryForSaleService {
 
                 }
                 inquiry = inquiryDao.save(inquiry);
-                Set<PublicInquiryItem> items = new HashSet<PublicInquiryItem>();
-                Short i = 0;
-                if (null != inquiryItem) {
-                    inquiryItem.setInquiry(inquiry);
-                    inquiryItem.setNumber(i);
-                    inquiryItem.setCustLap(Constant.NO);
-                    inquiryItem.setSendStatus((short) Status.NOT_UPLOAD.value());
-                    inquiryItem.setSourceId(inquiryItem.getId());
-                    inquiryItem.setId(null);
-                    List<PublicInquiryReply> replies = new ArrayList<PublicInquiryReply>();
-                    PublicInquiryReply reply = new PublicInquiryReply();
-                    reply.setLapQty((double) 0);
-                    replies.add(reply);
-                    inquiryItem.setReplies(replies);
-                    items.add(inquiryItem);
-                    i++;
-                }
-                List<PublicInquiryItem> purcitems = infoDao.save(items);
-                if (purcitems.get(0).getId() != null) {
-                    return purcitems.get(0);
-                } else {
-                   throw new Exception("转询价报价单失败");
-                }
+                return SaveInquiryItems(inquiry, inquiryItem);
             } else {// 插入
+                inquiry = saleInquiries.get(0);
                 PublicInquiryItem purcItem = infoDao.findByVendUUAndSourceId(inquiryItem.getVendUU(), inquiryItem.getSourceId());
                 if (purcItem != null) {
                     throw new Exception("询价单已存在,不允许再次报价");
                 } else {
-                    int number = infoDao.countByInquiryId(inquiryItem.getInquiry().getId()) + 1;
-                    inquiryItem.setNumber((short) number);
-                    return add(inquiryItem);
+                   return SaveInquiryItems(inquiry, inquiryItem);
                 }
             }
         }
         return null;
     }
 
+    /**
+     * 保存明细
+     * @param inquiry 主表信息
+     * @param inquiryItem 明细信息
+     * @return
+     * @throws Exception
+     */
+    private PublicInquiryItem SaveInquiryItems(PublicInquiry inquiry, PublicInquiryItem inquiryItem) throws Exception {
+        Set<PublicInquiryItem> items = new HashSet<PublicInquiryItem>();
+        int number = infoDao.countByInquiryId(inquiryItem.getInquiry().getId()) + 1;
+        if (null != inquiryItem) {
+            inquiryItem.setInquiry(inquiry);
+            inquiryItem.setNumber((short) number);
+            inquiryItem.setCustLap(Constant.NO);
+            inquiryItem.setSendStatus((short) Status.NOT_UPLOAD.value());
+            inquiryItem.setSourceId(inquiryItem.getId());
+            inquiryItem.setId(null);
+            inquiryItem.setDate(new Date());
+            items.add(inquiryItem);
+        }
+        List<PublicInquiryItem> purcitems = infoDao.save(items);
+        if (purcitems.get(0).getId() != null) {
+            return purcitems.get(0);
+        } else {
+            throw new Exception("转询价报价单失败");
+        }
+    }
+
     /**
      * 通过id查询公共询价详情
      *
@@ -208,4 +222,86 @@ public class InquiryForSaleServiceImpl implements InquiryForSaleService {
         }
         return map;
     }
+
+    /**
+     * 移动端转报价的功能
+     *
+     * @param id      公共询价明细id
+     * @param enuu    报价企业UU号
+     * @param useruu
+     * @param replies 报价信息
+     * @param leadtime 交货周期
+     * @param minOrderQty 最小订购
+     * @param minPackQty 最小包装
+     */
+    @Override
+    public ModelMap quoteInquiry(Long id, Long enuu, Long useruu, List<PublicInquiryReply> replies, Long leadtime, Double minPackQty, Double minOrderQty) throws Exception {
+        ModelMap map = new ModelMap();
+        PublicInquiryItem existInquiry = infoDao.findByVendUUAndSourceId(enuu, id);
+        if (null != existInquiry) {
+            throw new IllegalOperatorException("该单据已报价,不能重复报价");
+        }
+        PurcInquiryItemInfo item = inquiryItemInfoDao.findOne(id);
+        PublicInquiry inquiry = new PublicInquiry();
+        List<PublicInquiry> saleInquiries = inquiryDao.findByEnUUAndCode(item.getInquiry().getEnUU(), item.getInquiry().getCode());
+        PublicInquiryItem inquiryItem = new PublicInquiryItem(item);
+        inquiryItem.setMinOrderQty(minOrderQty);
+        inquiryItem.setMinPackQty(minPackQty);
+        inquiryItem.setLeadtime(leadtime);
+        inquiryItem.setStatus((short) Status.REPLIED.value());
+        inquiryItem.setBackStatus((short) Status.NOT_UPLOAD.value());
+        inquiryItem.setReplySendStatus((short) Status.NOT_UPLOAD.value());
+        // 将采纳状态设置成申请状态,方便过滤
+        inquiryItem.setDecideStatus((short) Status.UNAUDIT.value());
+        // 先判断客户询价单是否存在这张单据
+        if (CollectionUtils.isEmpty(saleInquiries)) {
+            inquiry = new PublicInquiry(item.getInquiry());
+                inquiry.setSourceId(inquiry.getId());
+                inquiry.setId(null);
+                if (!CollectionUtils.isEmpty(inquiry.getAttachs())) {
+                    Set<Attach> attachs = new HashSet<Attach>();
+                    for (com.uas.ps.inquiry.model.Attach attach : inquiry.getAttachs()) {
+                        com.uas.ps.inquiry.model.Attach newAttach = new com.uas.ps.inquiry.model.Attach();
+                        newAttach.setDate(new Date());
+                        newAttach.setDescription(attach.getDescription());
+                        newAttach.setName(attach.getName());
+                        newAttach.setPath(attach.getPath());
+                        newAttach.setRelatedKey(attach.getRelatedKey());
+                        newAttach.setSize(attach.getSize());
+                        newAttach.setRelatedKey(attach.getRelatedKey());
+                        attachs.add(newAttach);
+                    }
+                    inquiry.setAttachs(attachs);
+
+                }
+                inquiry = inquiryDao.save(inquiry);
+                inquiryItem.setVendUU(enuu);
+                inquiryItem.setVendUserUU(useruu);
+                Enterprise enterprise = enterpriseDao.findOne(enuu);
+                inquiryItem.setVendName(enterprise.getEnName());
+                inquiryItem.setBusinessCode(enterprise.getBusinesscode());
+                inquiryItem = SaveInquiryItems(inquiry, inquiryItem);
+                if (null != inquiryItem.getId()) {
+                    map.put("content", true);
+                } else {
+                    map.put("content", false);
+                }
+                return map;
+        } else {// 插入
+            inquiry = saleInquiries.get(0);
+            PublicInquiryItem purcItem = infoDao.findByVendUUAndSourceId(inquiryItem.getVendUU(), inquiryItem.getSourceId());
+            if (purcItem != null) {
+                throw new Exception("询价单已存在,不允许再次报价");
+            } else {
+                inquiryItem.setInquiry(inquiry);
+                inquiryItem = SaveInquiryItems(inquiry, inquiryItem);
+                if (null != inquiryItem.getId()) {
+                    map.put("content", true);
+                } else {
+                    map.put("content", false);
+                }
+                return map;
+            }
+        }
+    }
 }

+ 100 - 12
src/main/java/com/uas/ps/inquiry/service/impl/PublicInquiryServiceImpl.java

@@ -1,10 +1,13 @@
 package com.uas.ps.inquiry.service.impl;
 
+import com.alibaba.fastjson.JSONObject;
+import com.uas.ps.core.util.HttpUtil;
+import com.uas.ps.core.util.exception.FlexJsonUtils;
+import com.uas.ps.entity.ProductUsers;
 import com.uas.ps.entity.Status;
 import com.uas.ps.inquiry.dao.*;
 import com.uas.ps.inquiry.entity.*;
 import com.uas.ps.inquiry.model.*;
-import com.uas.ps.inquiry.model.Attach;
 import com.uas.ps.inquiry.page.PageInfo;
 import com.uas.ps.inquiry.page.SearchFilter;
 import com.uas.ps.inquiry.page.criteria.CriterionExpression;
@@ -51,9 +54,6 @@ public class PublicInquiryServiceImpl implements PublicInquiryService {
     @Autowired
     private PurcInquiryItemDao purcInquiryItemDao;
 
-    @Autowired
-    private PublicInquiryItemDao publicInquiryItemDao;
-
     @Autowired
     private JdbcTemplate jdbcTemplate;
 
@@ -63,6 +63,18 @@ public class PublicInquiryServiceImpl implements PublicInquiryService {
     @Autowired
     private PurcInquiryItemInfoDao inquiryItemInfoDao;
 
+    @Autowired
+    private PublicInquiryItemInfoDao  itemInfoDao;
+
+    @Autowired
+    private PublicInquiryItemDao publicInquiryItemDao;
+
+    @Autowired
+    private UserDao userDao;
+
+    @Autowired
+    private EnterpriseDao enterpriseDao;
+
     /**
      * 应用来源
      */
@@ -98,6 +110,9 @@ public class PublicInquiryServiceImpl implements PublicInquiryService {
                 try {
                     items = purcInquiryItemDao.save(items);
                     inquiryItems.addAll(items);
+                    if (!CollectionUtils.isEmpty(inquiryItems)) {
+                        notify(inquiryItems);
+                    }
                 } catch (Exception e) {
                     e.printStackTrace();
                 }
@@ -105,6 +120,47 @@ public class PublicInquiryServiceImpl implements PublicInquiryService {
         }
     }
 
+    /**
+     * 消息推送
+     *
+     * @param inquiryItems 询价明细
+     */
+    private void notify(List<PurcInquiryItem> inquiryItems) {
+        for (PurcInquiryItem item : inquiryItems) {
+            String url = "http:// 192.168.253.102:8080/productuser/getProductUsersByEnUUAndCmpCode";
+            JSONObject formData = new JSONObject();
+            formData.put("enUU", item.getInquiry().getEnUU());
+            formData.put("cmpCode", item.getCmpCode());
+            try {
+                HttpUtil.Response res = HttpUtil.sendGetRequest(url, formData);
+                if (res.getStatusCode() == 200) {
+                    List<ProductUsers> users = FlexJsonUtils.fromJsonArray(res.getResponseText(), ProductUsers.class);
+                    if (!CollectionUtils.isEmpty(users)) {
+                        for (ProductUsers user : users) {
+                            User u = userDao.findOne(user.getUseruu());
+                            Enterprise e = enterpriseDao.findOne(user.getEnuu());
+                            if (null != e) {
+                                u.setEnterprise(e);
+                            }
+                            MessageModel model = new MessageModel();
+                            // TODO 设置消息模板
+                        }
+                    }
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+
+        ThreadUtils.task(new Runnable() {
+
+            @Override
+            public void run() {
+
+            }
+        }).run();
+    }
+
     /**
      * 将ERP传入的inquiry信息转成公共询价服务中心需要的信息
      *
@@ -504,15 +560,10 @@ public class PublicInquiryServiceImpl implements PublicInquiryService {
      * @date 2018-01-17 10:30
      */
     @Override
-    public Page<PublicInquiryItem> findByPageInfo(final PageInfo info, final SearchFilter filter) {
+    public Page<PublicInquiryItemInfo> findByPageInfo(final PageInfo info, final SearchFilter filter) {
         if (null != filter) {
             int k = 1;
             SimpleExpression[] simpArrs = new SimpleExpression[5];
-            if (null != filter.getEnUU()) {
-                simpArrs[0] = new SimpleExpression("inquiry.enUU", filter.getEnUU(), CriterionExpression.Operator.EQ, true);
-            } else if (null != filter.getVendUU()) {
-                simpArrs[0] = new SimpleExpression("vendUU", filter.getEnUU(), CriterionExpression.Operator.EQ, true);
-            }
             if (StringUtils.hasText(filter.getKeyword())) {
                 simpArrs[k] = new SimpleExpression("product.title", filter.getKeyword(), CriterionExpression.Operator.LIKE, true);
                 simpArrs[k + 1] = new SimpleExpression("product.code", filter.getKeyword(), CriterionExpression.Operator.LIKE, true);
@@ -528,8 +579,8 @@ public class PublicInquiryServiceImpl implements PublicInquiryService {
                 info.expression(PredicateUtils.lte("date", new Date(filter.getEndDate()), false));
             }
         }
-        return publicInquiryItemDao.findAll(new Specification<PublicInquiryItem>() {
-            public Predicate toPredicate(Root<PublicInquiryItem> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
+        return itemInfoDao.findAll(new Specification<PublicInquiryItemInfo>() {
+            public Predicate toPredicate(Root<PublicInquiryItemInfo> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
                 query.where(info.getPredicates(root, query, builder));
                 return null;
             }
@@ -571,4 +622,41 @@ public class PublicInquiryServiceImpl implements PublicInquiryService {
             }
         }, info);
     }
+
+    /**
+     * 根据传入条件封装查询条件
+     *
+     * @param pageInfo 分页参数
+     * @param state    过滤条件
+     * @return
+     */
+    @Override
+    public PageInfo covert(PageInfo pageInfo, String state) {
+        if (state.equals(OrderStatus.todo.name())) {
+            pageInfo.filter("status", Status.NOT_REPLY.value());
+            pageInfo.filter("overdue", Constant.NO);
+            pageInfo.filter("invalid", Constant.NO);
+        } else if (state.equals(OrderStatus.done.name())) {
+            pageInfo.filter("overdue", Constant.NO);
+            pageInfo.filter("status", Status.REPLIED.value());
+            pageInfo.filter("invalid", Constant.NO);
+            pageInfo.filter("decideStatus", Status.UNAUDIT.value());
+        } else if (state.equals(OrderStatus.end.name())) {
+            pageInfo.filter("overdue", Constant.YES);
+            pageInfo.filter("invalid", Constant.NO);
+        } else if (state.equals(OrderStatus.invalid.name())) {
+            pageInfo.filter("overdue", Constant.YES);
+            pageInfo.filter("invalid", Constant.YES);
+        } else if (state.equals(OrderStatus.agreed.name())) {
+            pageInfo.filter("agreed", Constant.YES);
+            pageInfo.filter("status", Status.REPLIED.value());
+            pageInfo.filter("invalid", Constant.NO);
+        } else if (state.equals(OrderStatus.refused.name())) {
+            pageInfo.filter("agreed", Constant.NO);
+            pageInfo.filter("status", Status.REPLIED.value());
+            pageInfo.filter("invalid", Constant.NO);
+        }
+        return pageInfo;
+    }
+
 }

+ 14 - 0
src/main/java/com/uas/ps/inquiry/service/impl/UserServiceImpl.java

@@ -0,0 +1,14 @@
+package com.uas.ps.inquiry.service.impl;
+
+import com.uas.ps.inquiry.service.UserService;
+import org.springframework.stereotype.Service;
+
+/**
+ * 用户操作实现方法
+ *
+ * Created by hejq on 2018-01-20.
+ */
+@Service
+public class UserServiceImpl implements UserService {
+
+}