Browse Source

公共询价单保存时增加推荐,将关联物料存入到推荐表,供应商便可以在平台进行查询报价处理

hejq 7 years ago
parent
commit
f956f6f641

+ 34 - 0
src/main/java/com/uas/ps/inquiry/controller/InquiryForSaleController.java

@@ -3,14 +3,22 @@ package com.uas.ps.inquiry.controller;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.uas.ps.core.logging.BufferedLoggerManager;
+import com.uas.ps.inquiry.domain.IPage;
 import com.uas.ps.inquiry.entity.Constant;
+import com.uas.ps.inquiry.entity.Inquiry;
 import com.uas.ps.inquiry.entity.InquirySource;
 import com.uas.ps.inquiry.model.Attach;
+import com.uas.ps.inquiry.model.InquiryRemind;
 import com.uas.ps.inquiry.model.PublicInquiryItem;
 import com.uas.ps.inquiry.model.PublicInquiryReply;
+import com.uas.ps.inquiry.page.PageInfo;
+import com.uas.ps.inquiry.page.PageParams;
+import com.uas.ps.inquiry.page.SearchFilter;
 import com.uas.ps.inquiry.service.InquiryForSaleService;
 import com.uas.ps.inquiry.support.InquiryBufferedLogger;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Sort;
 import org.springframework.ui.ModelMap;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -157,4 +165,30 @@ public class InquiryForSaleController {
                 useruu, en_uu, InquirySource.UU.name());
         return saleService.quoteInquiry(inquiryItemId, en_uu, useruu, replyList, leadtime, minPackQty, minOrderQty);
     }
+
+    /**
+     * 通过用户信息查询推荐的询价列表
+     *
+     * @param useruu 用户UU
+     * @param enuu 企业UU
+     * @param pageInfo 分页参数
+     * @param searchFilter 过滤条件
+     * @return page<T>
+     */
+    @RequestMapping(value = "/remind", method = RequestMethod.GET)
+    public IPage<InquiryRemind> findByUserInfo(Long useruu, Long enuu, PageInfo pageInfo, SearchFilter searchFilter) {
+        if (useruu == null || enuu == null) {
+            throw new IllegalAccessError("非法访问");
+        } else {
+            Sort sort = new Sort(Sort.Direction.DESC, "date");
+            if (pageInfo.getOffset() == 0) {
+                pageInfo.setOffset(pageInfo.getPageSize() * (pageInfo.getPageNumber() - 1));
+            }
+            pageInfo.setSort(sort);
+            pageInfo.filter("vendUU", enuu);
+            pageInfo.filter("vendUserUU", useruu);
+            logger.log("公共询价", "查询推荐询价信息", null, useruu, enuu, InquirySource.PLAIN.name());
+            return saleService.findRemindByPageInfo(pageInfo, searchFilter);
+        }
+    }
 }

+ 2 - 0
src/main/java/com/uas/ps/inquiry/controller/PublicInquiryController.java

@@ -231,6 +231,8 @@ public class PublicInquiryController {
             pageInfo.setPageSize(size);
         }
         pageInfo.setOffset(pageInfo.getPageSize() * (pageInfo.getPageNumber() - 1));
+        Sort sort = new Sort(Sort.Direction.DESC, "date");
+        pageInfo.setSort(sort);
         SearchFilter filter = new SearchFilter();
         filter.setFromDate(fromDate);
         filter.setEndDate(endDate);

+ 2 - 0
src/main/java/com/uas/ps/inquiry/dao/InquiryLogDao.java

@@ -3,11 +3,13 @@ package com.uas.ps.inquiry.dao;
 import com.uas.ps.inquiry.model.InquiryLog;
 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-31.
  */
+@Repository
 public interface InquiryLogDao extends JpaRepository<InquiryLog, Long>, JpaSpecificationExecutor<InquiryLog> {
 }

+ 13 - 0
src/main/java/com/uas/ps/inquiry/dao/InquiryRemindDao.java

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

+ 13 - 0
src/main/java/com/uas/ps/inquiry/entity/InquiryMessage.java

@@ -27,6 +27,11 @@ public class InquiryMessage {
 	 */
 	private String enName;
 
+	/**
+	 * 如果已报价,记录报价id
+	 */
+	private Long quteId;
+
 	public Long getInid() {
 		return inid;
 	}
@@ -66,4 +71,12 @@ public class InquiryMessage {
 	public void setEnName(String enName) {
 		this.enName = enName;
 	}
+
+	public Long getQuteId() {
+		return quteId;
+	}
+
+	public void setQuteId(Long quteId) {
+		this.quteId = quteId;
+	}
 }

+ 320 - 0
src/main/java/com/uas/ps/inquiry/model/InquiryRemind.java

@@ -0,0 +1,320 @@
+package com.uas.ps.inquiry.model;
+
+import javax.persistence.*;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 针对用户的询价推荐提醒
+ *
+ * Created by hejq on 2018-01-31.
+ */
+@Entity
+@Table(name = "purc$inquiry$remind")
+public class InquiryRemind implements Serializable {
+
+    /**
+     * default serialVersionUID
+     */
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * id
+     */
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Column(name = "ir_id")
+    private Long id;
+
+    /**
+     * 询价单号
+     */
+    @Column(name = "ir_code")
+    private String code;
+
+    /**
+     * 询价企业名称
+     */
+    @Column(name = "ir_enname")
+    private String enName;
+
+    /**
+     * 询价企业UU
+     */
+    @Column(name = "ir_enuu")
+    private Long enUU;
+
+    /**
+     * 联系人
+     */
+    @Column(name = "ir_username")
+    private String userName;
+
+    /**
+     * 联系方式
+     */
+    @Column(name = "ir_usertel")
+    private String userTel;
+
+    /**
+     * 询价品牌
+     */
+    @Column(name = "ir_brand")
+    private String brand;
+
+    /**
+     * 原厂型号
+     */
+    @Column(name = "ir_cmpcode")
+    private String cmpCode;
+
+    /**
+     * 物料规格
+     */
+    @Column(name = "ir_spec")
+    private String spec;
+
+    /**
+     * 物料名称
+     */
+    @Column(name = "ir_title")
+    private String title;
+
+    /**
+     * 需求数量
+     */
+    @Column(name = "ir_needqty")
+    private Double needQty;
+
+    /**
+     * 发布日期
+     */
+    @Column(name = "ir_redate")
+    private Date reDate;
+
+    /**
+     * 截止日期
+     */
+    @Column(name = "ir_endate")
+    private Date endDate;
+
+    /**
+     * 记录来源id
+     */
+    @Column(name = "ir_itemid")
+    private Long itemId;
+
+    /**
+     * 记录转报价后的id
+     */
+    @Column(name = "ir_newid")
+    private Long newId;
+
+    /**
+     * 单据状态
+     * <note>
+     * {@code 100 在录入}
+     * {@code 101 已提交}
+     * {@code 102 已审核}
+     * {@code 103 未通过}
+     * {@code 104 已通过}
+     * </note>
+     */
+    @Column(name = "ir_status")
+    private Integer status;
+
+    /**
+     * 被推荐的企业UU
+     */
+    @Column(name = "ir_venduu")
+    private Long vendUU;
+
+    /**
+     * 被推荐的人员UU
+     */
+    @Column(name = "ir_venduseruu")
+    private Long vendUserUU;
+
+    /**
+     * 记录日期
+     */
+    @Column(name = "ir_date")
+    private Date date;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getEnName() {
+        return enName;
+    }
+
+    public void setEnName(String enName) {
+        this.enName = enName;
+    }
+
+    public Long getEnUU() {
+        return enUU;
+    }
+
+    public void setEnUU(Long enUU) {
+        this.enUU = enUU;
+    }
+
+    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 getBrand() {
+        return brand;
+    }
+
+    public void setBrand(String brand) {
+        this.brand = brand;
+    }
+
+    public String getCmpCode() {
+        return cmpCode;
+    }
+
+    public void setCmpCode(String cmpCode) {
+        this.cmpCode = cmpCode;
+    }
+
+    public String getSpec() {
+        return spec;
+    }
+
+    public void setSpec(String spec) {
+        this.spec = spec;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    public Double getNeedQty() {
+        return needQty;
+    }
+
+    public void setNeedQty(Double needQty) {
+        this.needQty = needQty;
+    }
+
+    public Date getReDate() {
+        return reDate;
+    }
+
+    public void setReDate(Date reDate) {
+        this.reDate = reDate;
+    }
+
+    public Date getEndDate() {
+        return endDate;
+    }
+
+    public void setEndDate(Date endDate) {
+        this.endDate = endDate;
+    }
+
+    public Long getItemId() {
+        return itemId;
+    }
+
+    public void setItemId(Long itemId) {
+        this.itemId = itemId;
+    }
+
+    public Long getNewId() {
+        return newId;
+    }
+
+    public void setNewId(Long newId) {
+        this.newId = newId;
+    }
+
+    public Integer getStatus() {
+        return status;
+    }
+
+    public void setStatus(Integer status) {
+        this.status = status;
+    }
+
+    public Long getVendUU() {
+        return vendUU;
+    }
+
+    public void setVendUU(Long vendUU) {
+        this.vendUU = vendUU;
+    }
+
+    public Long getVendUserUU() {
+        return vendUserUU;
+    }
+
+    public void setVendUserUU(Long vendUserUU) {
+        this.vendUserUU = vendUserUU;
+    }
+
+    public Date getDate() {
+        return date;
+    }
+
+    public void setDate(Date date) {
+        this.date = date;
+    }
+
+    @Override
+    public String toString() {
+        return "InquiryRemind{" +
+                "id=" + id +
+                ", code='" + code + '\'' +
+                ", enName='" + enName + '\'' +
+                ", enUU=" + enUU +
+                ", userName='" + userName + '\'' +
+                ", userTel='" + userTel + '\'' +
+                ", brand='" + brand + '\'' +
+                ", cmpCode='" + cmpCode + '\'' +
+                ", spec='" + spec + '\'' +
+                ", title='" + title + '\'' +
+                ", needQty=" + needQty +
+                ", reDate=" + reDate +
+                ", endDate=" + endDate +
+                ", itemId=" + itemId +
+                ", newId=" + newId +
+                ", status=" + status +
+                ", vendUU=" + vendUU +
+                ", vendUserUU=" + vendUserUU +
+                ", date=" + date +
+                '}';
+    }
+}

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

@@ -1,8 +1,13 @@
 package com.uas.ps.inquiry.service;
 
+import com.uas.ps.inquiry.domain.IPage;
 import com.uas.ps.inquiry.model.Attach;
+import com.uas.ps.inquiry.model.InquiryRemind;
 import com.uas.ps.inquiry.model.PublicInquiryItem;
 import com.uas.ps.inquiry.model.PublicInquiryReply;
+import com.uas.ps.inquiry.page.PageInfo;
+import com.uas.ps.inquiry.page.SearchFilter;
+import org.springframework.data.domain.Page;
 import org.springframework.ui.ModelMap;
 
 import java.util.List;
@@ -96,4 +101,13 @@ public interface InquiryForSaleService {
      * @return
      */
     ModelMap quoteInquiry(Long id, Long enuu, Long useruu, List<PublicInquiryReply> replies, Long leadtime, Double minPackQty, Double minOrderQty) throws Exception;
+
+    /**
+     * 通过分页信息查询询价推荐信息
+     *
+     * @param pageInfo 分页信息
+     * @param searchFilter 过滤条件
+     * @return
+     */
+    IPage<InquiryRemind> findRemindByPageInfo(PageInfo pageInfo, SearchFilter searchFilter);
 }

+ 84 - 0
src/main/java/com/uas/ps/inquiry/service/impl/InquiryForSaleServiceImpl.java

@@ -2,18 +2,33 @@ package com.uas.ps.inquiry.service.impl;
 
 import com.uas.ps.entity.Status;
 import com.uas.ps.inquiry.dao.*;
+import com.uas.ps.inquiry.domain.IPage;
 import com.uas.ps.inquiry.entity.Constant;
 import com.uas.ps.inquiry.entity.InquirySource;
 import com.uas.ps.inquiry.model.*;
+import com.uas.ps.inquiry.page.PageInfo;
+import com.uas.ps.inquiry.page.SearchFilter;
+import com.uas.ps.inquiry.page.criteria.CriterionExpression;
+import com.uas.ps.inquiry.page.criteria.LogicalExpression;
+import com.uas.ps.inquiry.page.criteria.PredicateUtils;
+import com.uas.ps.inquiry.page.criteria.SimpleExpression;
 import com.uas.ps.inquiry.page.exception.IllegalOperatorException;
 import com.uas.ps.inquiry.service.InquiryForSaleService;
+import com.uas.ps.inquiry.util.IPageUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.dao.DataAccessException;
+import org.springframework.data.domain.Page;
+import org.springframework.data.jpa.domain.Specification;
 import org.springframework.jdbc.core.JdbcTemplate;
 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.*;
 
 /**
@@ -45,6 +60,9 @@ public class InquiryForSaleServiceImpl implements InquiryForSaleService {
     @Autowired
     private PurcInquiryItemDao purcInquiryItemDao;
 
+    @Autowired
+    private InquiryRemindDao remindDao;
+
     /**
      * 通过明细查询询价详情
      *
@@ -309,4 +327,70 @@ public class InquiryForSaleServiceImpl implements InquiryForSaleService {
             }
         }
     }
+
+    /**
+     * 通过分页信息查询询价推荐信息
+     *
+     * @param pageInfo     分页信息
+     * @param filter 过滤条件
+     * @return
+     */
+    @Override
+    public IPage<InquiryRemind> findRemindByPageInfo(final PageInfo pageInfo, final SearchFilter filter) {
+        if (null != filter) {
+            if (StringUtils.hasText(filter.getKeyword())) {
+                SimpleExpression title = new SimpleExpression("title", filter.getKeyword(), CriterionExpression.Operator.LIKE, true);
+                SimpleExpression cmpCode = new SimpleExpression("cmpCode", filter.getKeyword(), CriterionExpression.Operator.LIKE, true);
+                SimpleExpression spec = new SimpleExpression("spec", filter.getKeyword(), CriterionExpression.Operator.LIKE, true);
+                SimpleExpression brand = new SimpleExpression("brand", filter.getKeyword(), CriterionExpression.Operator.LIKE, true);
+                SimpleExpression enName = new SimpleExpression("enName", filter.getKeyword(), CriterionExpression.Operator.LIKE, true);
+                SimpleExpression userName = new SimpleExpression("userName", filter.getKeyword(), CriterionExpression.Operator.LIKE, true);
+                SimpleExpression[] simpleExpressions = new SimpleExpression[]{title, brand, cmpCode, spec, enName, userName};
+                LogicalExpression logical = new LogicalExpression(simpleExpressions, CriterionExpression.Operator.OR);
+                pageInfo.expression(logical);
+            }
+            if (filter.getFromDate() != null) {
+                pageInfo.expression(PredicateUtils.gte("reDate", new Date(filter.getFromDate()), false));
+            }
+            if (filter.getEndDate() != null) {
+                pageInfo.expression(PredicateUtils.lte("reDate", new Date(filter.getEndDate()), false));
+            }
+        }
+        Page reminds = remindDao.findAll(new Specification<InquiryRemind>() {
+            public Predicate toPredicate(Root<InquiryRemind> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
+                query.where(pageInfo.getPredicates(root, query, builder));
+                return null;
+            }
+        }, pageInfo);
+        return covert(reminds);
+    }
+
+    /**
+     * 将查询的分页信息封装成需要的数据
+     *
+     * @param reminds 推荐询价信息
+     * @return
+     */
+    private IPage<InquiryRemind> covert(Page reminds) {
+        IPage<InquiryRemind> remindIPage = IPageUtils.covertIgnoreContent(reminds);
+        if (!CollectionUtils.isEmpty(reminds.getContent())) {
+            List<InquiryRemind> remindList = reminds.getContent();
+            for (InquiryRemind remind : remindList) {
+                PublicInquiryItem item = infoDao.findByVendUUAndSourceId(remind.getVendUU(), remind.getItemId());
+                if (null != item) {
+                    remind.setNewId(item.getId());
+                    remind.setStatus(Status.SUBMITTED.value());
+                    if (null != item.getAgreed()) {
+                        if (item.getAgreed().equals(Constant.YES)) {
+                            remind.setStatus(Status.ALLOW.value());
+                        } else if (item.getAgreed().equals(Constant.NO)) {
+                            remind.setStatus(Status.NOTALLOW.value());
+                        }
+                    }
+                }
+            }
+            remindIPage.setContent(remindList);
+        }
+        return remindIPage;
+    }
 }

+ 65 - 1
src/main/java/com/uas/ps/inquiry/service/impl/PublicInquiryServiceImpl.java

@@ -77,6 +77,9 @@ public class PublicInquiryServiceImpl implements PublicInquiryService {
     @Autowired
     private EnterpriseDao enterpriseDao;
 
+    @Autowired
+    private InquiryRemindDao remindDao;
+
     private static final Logger logger = Logger.getLogger(Logger.class);
 
     /**
@@ -220,6 +223,9 @@ public class PublicInquiryServiceImpl implements PublicInquiryService {
                         if (!CollectionUtils.isEmpty(models)) {
                             sendMessage(models);
                         }
+
+                        // 生成推荐信息
+                        remindInquiry(inquiryItems, users);
                     }
                 }
             } catch (Exception e) {
@@ -228,6 +234,61 @@ public class PublicInquiryServiceImpl implements PublicInquiryService {
         }
     }
 
+    /**
+     * 通过查询的个人物料相关联的信息,自动生成推荐的报价的数据
+     *
+     * @param inquiryItems 报价明细
+     * @param users 用户信息
+     */
+    private void remindInquiry(final List<PurcInquiryItem> inquiryItems, final List<ProductUsers> users) {
+        ThreadUtils.task(new Runnable() {
+            @Override
+            public void run() {
+                try {
+                    List<InquiryRemind> reminds = new ArrayList<InquiryRemind>();
+                    for (ProductUsers u : users) {
+                        for (PurcInquiryItem item : inquiryItems) {
+                            if (item.getInquiry().getEnUU() != null) {
+                                Enterprise enterprise = enterpriseDao.findOne(item.getInquiry().getEnUU());
+                                InquiryRemind remind = new InquiryRemind();
+                                remind.setEnName(enterprise.getEnName());
+                                remind.setEnUU(item.getInquiry().getEnUU());
+                                remind.setUserName(item.getUserName());
+                                remind.setUserTel(item.getUserTel());
+                                remind.setCode(item.getInquiry().getCode());
+                                remind.setBrand(item.getBrand());
+                                remind.setCmpCode(item.getCmpCode());
+                                remind.setSpec(item.getSpec());
+                                remind.setTitle(item.getProdTitle());
+                                if (item.getProduct() != null) {
+                                    remind.setBrand(item.getProduct().getBrand());
+                                    remind.setCmpCode(item.getProduct().getCmpCode());
+                                    remind.setSpec(item.getProduct().getSpec());
+                                    remind.setTitle(item.getProduct().getTitle());
+                                }
+                                remind.setItemId(item.getId());
+                                remind.setNeedQty(item.getNeedquantity());
+                                remind.setReDate(item.getInquiry().getDate());
+                                remind.setEndDate(item.getInquiry().getEndDate());
+                                remind.setVendUU(u.getEnuu());
+                                remind.setVendUserUU(u.getUseruu());
+                                remind.setDate(new Date(System.currentTimeMillis()));
+                                remind.setStatus(Status.INPUTTING.value());
+                                reminds.add(remind);
+                            }
+
+                        }
+                    }
+                    if (!CollectionUtils.isEmpty(reminds)) {
+                        remindDao.save(reminds);
+                    }
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+            }
+        }).run();
+    }
+
     /**
      * 通过id查询询价信息
      *
@@ -812,8 +873,11 @@ public class PublicInquiryServiceImpl implements PublicInquiryService {
                 Product prod = productDao.findOne(item.getProductId());
                 message.setPordName(prod.getTitle());
                 item = purcInquiryItemDao.findOne(item.getId());
-//                message.setRead(getReadStatus(item.getId(), SystemSession.getUser().getUserUU()));
                 message.setInid(item.getId());
+                PublicInquiryItem publicInquiryItem = publicInquiryItemDao.findByVendUUAndSourceId(enuu, item.getId());
+                if (null != publicInquiryItem) {
+                    message.setQuteId(publicInquiryItem.getId());
+                }
                 message.setLastest(isToday(item.getDate()));
                 messages.add(message);
             }