Browse Source

增加替代物料-消息推送

liusw 7 years ago
parent
commit
51a99e886c

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

@@ -0,0 +1,13 @@
+package com.uas.ps.inquiry.dao;
+
+import com.uas.ps.inquiry.model.ProductReplace;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.stereotype.Repository;
+
+
+
+@Repository
+public interface ProductReplaceDao extends JpaRepository<ProductReplace, Long>, JpaSpecificationExecutor<ProductReplace> {
+
+}

+ 182 - 0
src/main/java/com/uas/ps/inquiry/model/ProductReplace.java

@@ -0,0 +1,182 @@
+package com.uas.ps.inquiry.model;
+
+import javax.persistence.*;
+import java.util.Date;
+
+/**
+ * 存贮商城替代物料
+ */
+@Table(name = "v$product$replace")
+@Entity
+public class ProductReplace {
+
+    @Id
+    @GeneratedValue
+    @Column(name = "id")
+    private Long id;
+
+    /**
+     * 用户uu
+     */
+    @Column(name = "ptr_useruu")
+    private Long userUU;
+
+    /**
+     * 物料id
+     */
+    @Column(name = "ptr_prid")
+    private Long productId;
+
+    /**
+     * 原型号型号(冗余p字段)
+     */
+    @Column(name = "p_cmpcode" ,length = 800)
+    private String pCmpcode;
+
+    /**
+     * 原品牌品牌(冗余p字段)
+     */
+    @Column(name = "p_pbranden")
+    private String pBranden;
+
+    /**
+     * 可替代型号
+     */
+    @Column(name = "ptr_cmpcode" ,length = 800)
+    private String ptrCmpcode;
+
+    /**
+     * 可替代品牌
+     */
+    @Column(name = "ptr_pbranden")
+    private String ptrBranden;
+
+    /**
+     * UUID 标准料号
+     * @return
+     */
+    @Column(name = "ptr_cmpuuid")
+    private String ptrCmpUuId;
+
+    /**
+     * 可替代品牌(uuid)
+     */
+    @Column(name = "ptr_pbranduuid")
+    private String ptrBrandUuid;
+
+    /**
+     * 创建时间
+     */
+    @Temporal(TemporalType.TIMESTAMP)
+    @org.hibernate.annotations.CreationTimestamp
+    @Column(name = "ptr_createtime")
+    private Date time;
+
+    /**
+     * 序号
+     */
+    @Column(name = "ptr_detno", nullable = false)
+    private Short detno;
+
+    /**
+     * 企业uu
+     */
+    @Column(name = "pr_enuu")
+    private Long enuu;
+
+    public Long getEnuu() {
+        return enuu;
+    }
+
+    public void setEnuu(Long enuu) {
+        this.enuu = enuu;
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getUserUU() {
+        return userUU;
+    }
+
+    public void setUserUU(Long userUU) {
+        this.userUU = userUU;
+    }
+
+    public Long getProductId() {
+        return productId;
+    }
+
+    public void setProductId(Long productId) {
+        this.productId = productId;
+    }
+
+    public String getpCmpcode() {
+        return pCmpcode;
+    }
+
+    public void setpCmpcode(String pCmpcode) {
+        this.pCmpcode = pCmpcode;
+    }
+
+    public String getpBranden() {
+        return pBranden;
+    }
+
+    public void setpBranden(String pBranden) {
+        this.pBranden = pBranden;
+    }
+
+    public String getPtrCmpcode() {
+        return ptrCmpcode;
+    }
+
+    public void setPtrCmpcode(String ptrCmpcode) {
+        this.ptrCmpcode = ptrCmpcode;
+    }
+
+    public String getPtrBranden() {
+        return ptrBranden;
+    }
+
+    public void setPtrBranden(String ptrBranden) {
+        this.ptrBranden = ptrBranden;
+    }
+
+    public String getPtrCmpUuId() {
+        return ptrCmpUuId;
+    }
+
+    public void setPtrCmpUuId(String ptrCmpUuId) {
+        this.ptrCmpUuId = ptrCmpUuId;
+    }
+
+    public String getPtrBrandUuid() {
+        return ptrBrandUuid;
+    }
+
+    public void setPtrBrandUuid(String ptrBrandUuid) {
+        this.ptrBrandUuid = ptrBrandUuid;
+    }
+
+    public Date getTime() {
+        return time;
+    }
+
+    public void setTime(Date time) {
+        this.time = time;
+    }
+
+    public Short getDetno() {
+        return detno;
+    }
+
+    public void setDetno(Short detno) {
+        this.detno = detno;
+    }
+}

+ 48 - 8
src/main/java/com/uas/ps/inquiry/service/impl/PublicInquiryServiceImpl.java

@@ -15,10 +15,7 @@ import com.uas.ps.inquiry.exception.NotFoundException;
 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.criteria.*;
 import com.uas.ps.inquiry.service.PublicInquiryService;
 import com.uas.ps.inquiry.support.InquiryBufferedLogger;
 import com.uas.ps.inquiry.util.*;
@@ -82,6 +79,9 @@ public class PublicInquiryServiceImpl implements PublicInquiryService {
     @Autowired
     private InquiryRemindDao remindDao;
 
+    @Autowired
+    private ProductReplaceDao productReplaceDao;
+
     private static final Logger log = Logger.getLogger(Logger.class);
 
     /**
@@ -207,9 +207,10 @@ public class PublicInquiryServiceImpl implements PublicInquiryService {
                     HttpUtil.Response res = HttpUtil.sendGetRequest(url, formData);
                     if (res.getStatusCode() == 200) {
                         List<ProductUsers> users = FlexJsonUtils.fromJsonArray(res.getResponseText(), ProductUsers.class);
-                        if (!CollectionUtils.isEmpty(users)) {
+                        List<ProductReplace> productReplaces = getProductReplaceByEnUUAndCmpCode(item.getInquiry().getEnUU(), cmpCode, users);
+                        if (!CollectionUtils.isEmpty(productReplaces)) {
                             List<MessageModel> models = new ArrayList<MessageModel>();
-                            for (ProductUsers user : users) {
+                            for (ProductReplace user : productReplaces) {
                                 User u = userDao.findOne(null != item.getInquiry().getRecorderUU() ? item.getInquiry().getRecorderUU() : 0L);
                                 Enterprise e = enterpriseDao.findOne(item.getInquiry().getEnUU());
                                 String cmp = cmpCode.length() > 10 ? cmpCode.substring(0, 10).concat("...") : cmpCode;
@@ -228,7 +229,7 @@ public class PublicInquiryServiceImpl implements PublicInquiryService {
                                 model.setRemark(String.valueOf(item.getInquiry().getId()));
                                 model.setSourceId(item.getId());
                                 model.setReceiverEnuu(user.getEnuu());
-                                model.setReceiverUu(user.getUseruu());
+                                model.setReceiverUu(user.getUserUU());
                                 model.setSenderEnuu(item.getInquiry().getEnUU());
                                 if (null != item.getUserUU() || null != item.getInquiry().getRecorderUU()) {
                                     model.setSenderUu(item.getUserUU() != null ? item.getUserUU() : item.getInquiry().getRecorderUU());
@@ -240,7 +241,7 @@ public class PublicInquiryServiceImpl implements PublicInquiryService {
                                 model.setMailTemplate(MAIL_TEMP_ID);
                                 model.setSmTemplate(SMS_TEMP_ID);
                                 models.add(model);
-                                logger.log("公共询价产生消息", "根据物料型号【" + cmpCode + "】查询接收人", "关联询价单明细【" + item.getId() + "】", user.getUseruu(), user.getEnuu(), InquirySource.ERP.name());
+                                logger.log("公共询价产生消息", "根据物料型号【" + cmpCode + "】查询接收人", "关联询价单明细【" + item.getId() + "】", user.getUserUU(), user.getEnuu(), InquirySource.ERP.name());
                             }
                             if (!CollectionUtils.isEmpty(models)) {
                                 sendMessage(models);
@@ -259,6 +260,45 @@ public class PublicInquiryServiceImpl implements PublicInquiryService {
         }
     }
 
+    /**
+     * 根据企业UU和物料原厂型号cmpCode获取替代物料信息
+     *
+     * @param enUU    企业UU
+     * @param cmpCode 物料原厂型号
+     * @return
+     */
+    public List<ProductReplace> getProductReplaceByEnUUAndCmpCode(final Long enUU, final String cmpCode, List<ProductUsers> productUsers) {
+        List<ProductReplace> productReplacesList = productReplaceDao.findAll(new Specification<ProductReplace>() {
+            @Override
+            public Predicate toPredicate(Root<ProductReplace> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
+                final PredicateFactory<ProductReplace> factory = new PredicateFactory<>();
+                factory.add(PredicateUtils.ne("enuu", enUU, false));
+                factory.add(PredicateUtils.and (PredicateUtils.isNotNull("ptrCmpcode"), PredicateUtils.eq("ptrCmpcode", cmpCode, false)));
+                query.where(factory.toPredicate(root, query, cb));
+                return null;
+            }
+        });
+        if (!CollectionUtils.isEmpty(productUsers)) {
+            for (ProductUsers user:productUsers) {
+                ProductReplace productReplace = new ProductReplace();
+                productReplace.setEnuu(user.getEnuu());
+                productReplace.setUserUU(user.getUseruu());
+                productReplacesList.add(productReplace);
+            }
+        }
+        // 去掉同一企业下同一个人相同原厂型号的不同物料的记录,保证一个原厂型号只发一条
+        List<ProductReplace> returnList = new ArrayList<>();
+        Set<String> enUUAndUserUUs = new HashSet<>();
+        for (ProductReplace productReplace : productReplacesList) {
+            String receiverInfo = productReplace.getEnuu().toString() + productReplace.getUserUU().toString();
+            if (!enUUAndUserUUs.contains(receiverInfo)) {
+                returnList.add(productReplace);
+                enUUAndUserUUs.add(receiverInfo);
+            }
+        }
+        return returnList;
+    }
+
     /**
      * 通过查询的个人物料相关联的信息,自动生成推荐的报价的数据
      *