Browse Source

询报价加入物料库

liusw 7 years ago
parent
commit
5be9ad9948

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

@@ -65,6 +65,11 @@ public class SearchFilter {
 	 */
 	private Collection<?> distribute;
 
+	/**
+	 * 是否登录, 登录:1,未登录:0
+	 */
+	private Short isLogin;
+
 	public String getKeyword() {
 		return keyword;
 	}
@@ -139,4 +144,12 @@ public class SearchFilter {
 	public void setDistribute(Collection<?> distribute) {
 		this.distribute = distribute;
 	}
+
+	public Short getIsLogin() {
+		return isLogin;
+	}
+
+	public void setIsLogin(Short isLogin) {
+		this.isLogin = isLogin;
+	}
 }

+ 71 - 13
src/main/java/com/uas/ps/inquiry/service/impl/InquiryForSaleServiceImpl.java

@@ -1,5 +1,7 @@
 package com.uas.ps.inquiry.service.impl;
 
+import com.alibaba.fastjson.JSONObject;
+import com.uas.ps.core.logging.BufferedLoggerManager;
 import com.uas.ps.core.util.ContextUtils;
 import com.uas.ps.entity.Product;
 import com.uas.ps.entity.Status;
@@ -17,6 +19,7 @@ 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.support.InquiryBufferedLogger;
 import com.uas.ps.inquiry.util.FlexJsonUtils;
 import com.uas.ps.inquiry.util.HttpUtil;
 import com.uas.ps.inquiry.util.IPageUtils;
@@ -72,6 +75,11 @@ public class InquiryForSaleServiceImpl implements InquiryForSaleService {
     @Autowired
     private ProductDao productDao;
 
+    /**
+     * 日志
+     */
+    private final static InquiryBufferedLogger logger = BufferedLoggerManager.getLogger(InquiryBufferedLogger.class);
+
     /**
      * 公共物料访问地址
      */
@@ -201,6 +209,7 @@ public class InquiryForSaleServiceImpl implements InquiryForSaleService {
             if (CollectionUtils.isEmpty(saleInquiries)) {// 新增
                 inquiry.setSourceId(inquiry.getId());
                 inquiry.setId(null);
+                inquiry.setInquiryItems(null);
                 if (!CollectionUtils.isEmpty(inquiry.getAttachs())) {
                     Set<Attach> attachs = new HashSet<Attach>();
                     for (com.uas.ps.inquiry.model.Attach attach : inquiry.getAttachs()) {
@@ -221,20 +230,69 @@ public class InquiryForSaleServiceImpl implements InquiryForSaleService {
                     inquiry.setEnName(e.getEnName());
                 }
                 inquiry = inquiryDao.save(inquiry);
-                return SaveInquiryItems(inquiry, inquiryItem);
+
+                PublicInquiryItem item = SaveInquiryItems(inquiry, inquiryItem);
+                // 报价成功后保存到个人物料库中
+                if (!StringUtils.isEmpty(item) && !StringUtils.isEmpty(item.getInbrand()) && !StringUtils.isEmpty(item.getCmpCode())) {
+                    saveInquiryItemProduct(item);
+                }
+                return item;
             } else {// 插入
                 inquiry = saleInquiries.get(0);
                 PublicInquiryItem purcItem = infoDao.findByVendUUAndSourceId(inquiryItem.getVendUU(), inquiryItem.getSourceId());
                 if (purcItem != null) {
                     throw new Exception("询价单已存在,不允许再次报价");
                 } else {
-                   return SaveInquiryItems(inquiry, inquiryItem);
+                    PublicInquiryItem item = SaveInquiryItems(inquiry, inquiryItem);
+                    // 报价成功后保存到个人物料库中
+                    if (!StringUtils.isEmpty(item) && !StringUtils.isEmpty(item.getInbrand()) && !StringUtils.isEmpty(item.getCmpCode())) {
+                        saveInquiryItemProduct(item);
+                    }
+                    return item;
                 }
             }
         }
         return null;
     }
 
+    /**
+     * 报价成功后保存到个人物料库中
+     * @param inquiryItem
+     */
+    private void saveInquiryItemProduct(PublicInquiryItem inquiryItem) {
+        Product product = new Product();
+        // 需要哪些字段
+        product.setEnUU(inquiryItem.getVendUU());
+        product.setUserUU(inquiryItem.getVendUserUU());
+        product.setCmpCode(inquiryItem.getCmpCode());
+        product.setBrand(inquiryItem.getInbrand());
+        product.setpCmpCode(inquiryItem.getCmpCode());
+        product.setpBrandEn(inquiryItem.getInbrand());
+        product.setStandard((short) 0);
+        product.setCreateTime(new Date());
+        product.setSourceApp(inquiryItem.getQutoApp());
+        product.setSpec(StringUtils.isEmpty(inquiryItem.getSpec()) ? inquiryItem.getCmpCode() : inquiryItem.getSpec());
+        if (!StringUtils.isEmpty(inquiryItem.getProduct())) {
+            product.setKind(inquiryItem.getProduct().getTitle());
+        }
+        product.setSpec((inquiryItem.getSpec() == null || inquiryItem.getSpec().equals("")) ? inquiryItem.getCmpCode() : inquiryItem.getSpec());
+        // 调用公共物料服务的接口
+        try {
+            String url = PS_PRODUCT_URL + "/product/save/inquiry";
+            String res = HttpUtil.doPost(url, FlexJsonUtils.toJsonDeep(product));
+            JSONObject result = JSONObject.parseObject(res);
+            Boolean success = (Boolean) result.get("success");
+            if (success) {
+                logger.log("报价成功后保存到个人物料库", "保存报价id【" + inquiryItem.getId() + "】到个人物料库成功", "保存成功", product.getUserUU(), product.getEnUU(), inquiryItem.getSource());
+            } else {
+                logger.log("报价成功后保存到个人物料库", "保存报价id【" + inquiryItem.getId() + "】到个人物料库失败", result.get("message").toString(), product.getUserUU(), product.getEnUU(), inquiryItem.getSource());
+            }
+        } catch (Exception e) {
+            String reason = e.getMessage().length() > 10 ? e.getMessage().substring(0, 999).concat("") : e.getMessage();
+            logger.log("报价成功后保存到个人物料库", "保存报价id【" + inquiryItem.getId() + "】到个人物料库失败", reason, product.getUserUU(), product.getEnUU(), inquiryItem.getSource());
+        }
+    }
+
     /**
      * 保存明细
      * @param inquiry 主表信息
@@ -281,17 +339,17 @@ public class InquiryForSaleServiceImpl implements InquiryForSaleService {
         purcInquiryItemDao.updateAmount(publicInquiryItems.get(0).getSourceId(), publicInquiryItems.size());
         // 更新推荐表中的相关信息
         remindDao.updateStatus(inquiryItem.getSourceId(), Status.SUBMITTED.value(), inquiryItem.getVendUU());
-        ThreadUtils.task(new Runnable() {
-            @Override
-            public void run() {
-                try {
-                    // 同步物料信息
-                    syscProduct(publicInquiryItems);
-                } catch (Exception e) {
-                    e.printStackTrace();
-                }
-            }
-        }).run();
+//        ThreadUtils.task(new Runnable() {
+//            @Override
+//            public void run() {
+//                try {
+//                    // 同步物料信息
+//                    syscProduct(publicInquiryItems);
+//                } catch (Exception e) {
+//                    e.printStackTrace();
+//                }
+//            }
+//        }).run();
         if (publicInquiryItems.get(0).getId() != null) {
             return publicInquiryItems.get(0);
         } else {

+ 61 - 0
src/main/java/com/uas/ps/inquiry/service/impl/InquiryServiceImpl.java

@@ -1,8 +1,12 @@
 package com.uas.ps.inquiry.service.impl;
 
+import com.alibaba.fastjson.JSONObject;
+import com.uas.ps.core.logging.BufferedLoggerManager;
 import com.uas.ps.core.util.CollectionUtils;
+import com.uas.ps.core.util.ContextUtils;
 import com.uas.ps.entity.Product;
 import com.uas.ps.entity.Status;
+import com.uas.ps.inquiry.AccessConfiguration;
 import com.uas.ps.inquiry.dao.*;
 import com.uas.ps.inquiry.entity.*;
 import com.uas.ps.inquiry.model.*;
@@ -22,6 +26,9 @@ import javax.persistence.criteria.CriteriaQuery;
 import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
 
+import com.uas.ps.inquiry.support.InquiryBufferedLogger;
+import com.uas.ps.inquiry.util.FlexJsonUtils;
+import com.uas.ps.inquiry.util.HttpUtil;
 import com.uas.ps.inquiry.util.ThreadUtils;
 import javassist.NotFoundException;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -69,6 +76,16 @@ public class InquiryServiceImpl implements InquiryService {
     @Autowired
     private EnterpriseDao enterpriseDao;
 
+    /**
+     * 公共物料访问地址
+     */
+    private final String PS_PRODUCT_URL = ContextUtils.getBean(AccessConfiguration.class).getPsProductUrl();
+
+    /**
+     * 日志
+     */
+    private final static InquiryBufferedLogger logger = BufferedLoggerManager.getLogger(InquiryBufferedLogger.class);
+
     /**
      * 查询公共询价列表信息
      *
@@ -185,12 +202,16 @@ public class InquiryServiceImpl implements InquiryService {
                 // 消息推送
                 final List<PurcInquiryItem> purcInquiryItems = items;
                 final String sourceapp = inquiry.getSourceapp();
+                final Long enuu = inquiry.getEnUU();
                 if (null != inquiry.getSourceapp()) {
                     ThreadUtils.task(new Runnable() {
                         @Override
                         public void run() {
                             try {
                                 inquiryService.notifyMessage(purcInquiryItems, sourceapp);
+                                if (!StringUtils.isEmpty(enuu)) {
+                                    saveProduct(purcInquiryItems, sourceapp);
+                                }
                             } catch (Exception e) {
                                 e.printStackTrace();
                             }
@@ -202,6 +223,46 @@ public class InquiryServiceImpl implements InquiryService {
         }
     }
 
+    /**
+     * 发布询价成功后加入当前用户的个人物料库
+     * @param inquiryItems
+     * @param sourceApp
+     */
+    public void saveProduct(List<PurcInquiryItem> inquiryItems, String sourceApp) {
+        for (PurcInquiryItem item : inquiryItems) {
+            Product product = new Product();
+            // 需要哪些字段
+            product.setEnUU(item.getInquiry().getEnUU());
+            product.setUserUU(item.getInquiry().getRecorderUU());
+            product.setCmpCode(item.getCmpCode());
+            product.setBrand(item.getInbrand());
+            product.setpCmpCode(item.getCmpCode());
+            product.setpBrandEn(item.getInbrand());
+            product.setStandard((short) 0);
+            product.setCreateTime(new Date());
+            product.setSourceApp(sourceApp);
+            product.setSpec(StringUtils.isEmpty(item.getSpec()) ? item.getCmpCode() : item.getSpec());
+            product.setKind(item.getProdTitle());
+            product.setSpec((item.getSpec() == null || item.getSpec().equals("")) ? item.getCmpCode() : item.getSpec());
+            // 调用公共物料服务的接口
+            try {
+                String url = PS_PRODUCT_URL + "/product/save/inquiry";
+                String res = HttpUtil.doPost(url, FlexJsonUtils.toJsonDeep(product));
+                JSONObject result = JSONObject.parseObject(res);
+                Boolean success = (Boolean) result.get("success");
+                if (success) {
+                    logger.log("发布询价后保存到个人物料库", "保存询价明细id【" + item.getId() + "】到个人物料库成功", "保存成功", product.getUserUU(), product.getEnUU(), item.getSource());
+                } else {
+                    logger.log("发布询价后保存到个人物料库", "保存询价明细id【" + item.getId() + "】到个人物料库失败", result.get("message").toString(), product.getUserUU(), product.getEnUU(), item.getSource());
+                }
+            } catch (Exception e) {
+                String reason = e.getMessage().length() > 10 ? e.getMessage().substring(0, 999).concat("") : e.getMessage();
+                logger.log("报价成功后保存到个人物料库", "保存报价id【" + item.getId() + "】到个人物料库失败", reason, product.getUserUU(), product.getEnUU(), item.getSource());
+            }
+        }
+    }
+
+
     /**
      * 通过报价明细id对供应商报价进行相关审核操作
      *

+ 23 - 20
src/main/java/com/uas/ps/inquiry/service/impl/PublicInquiryServiceImpl.java

@@ -219,10 +219,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);
-                        List<ProductReplace> productReplaces = getProductReplaceByEnUUAndCmpCode(item.getInquiry().getEnUU(), cmpCode, users);
-                        if (!CollectionUtils.isEmpty(productReplaces)) {
+                        users = getProductReplaceByEnUUAndCmpCode(item.getInquiry().getEnUU(), cmpCode, users);
+                        if (!CollectionUtils.isEmpty(users)) {
                             List<MessageModel> models = new ArrayList<MessageModel>();
-                            for (ProductReplace user : productReplaces) {
+                            for (ProductUsers user : users) {
                                 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;
@@ -241,7 +241,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());
@@ -253,7 +253,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);
@@ -279,7 +279,7 @@ public class PublicInquiryServiceImpl implements PublicInquiryService {
      * @param cmpCode 物料原厂型号
      * @return
      */
-    public List<ProductReplace> getProductReplaceByEnUUAndCmpCode(final Long enUU, final String cmpCode, List<ProductUsers> productUsers) {
+    public List<ProductUsers> 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) {
@@ -290,21 +290,21 @@ public class PublicInquiryServiceImpl implements PublicInquiryService {
                 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);
+        if (!CollectionUtils.isEmpty(productReplacesList)) {
+            for (ProductReplace productReplace:productReplacesList) {
+                ProductUsers user = new ProductUsers();
+                user.setEnuu(productReplace.getEnuu());
+                user.setUseruu(productReplace.getUserUU());
+                productUsers.add(user);
             }
         }
         // 去掉同一企业下同一个人相同原厂型号的不同物料的记录,保证一个原厂型号只发一条
-        List<ProductReplace> returnList = new ArrayList<>();
+        List<ProductUsers> returnList = new ArrayList<>();
         Set<String> enUUAndUserUUs = new HashSet<>();
-        for (ProductReplace productReplace : productReplacesList) {
-            String receiverInfo = productReplace.getEnuu().toString() + productReplace.getUserUU().toString();
+        for (ProductUsers user : productUsers) {
+            String receiverInfo = user.getEnuu().toString() + user.getUseruu().toString();
             if (!enUUAndUserUUs.contains(receiverInfo)) {
-                returnList.add(productReplace);
+                returnList.add(user);
                 enUUAndUserUUs.add(receiverInfo);
             }
         }
@@ -324,9 +324,7 @@ public class PublicInquiryServiceImpl implements PublicInquiryService {
                 try {
                     for (ProductUsers u : users) {
                         List<InquiryRemind> remindList = remindDao.findByVendUserUUAndVendUUAndItemId(u.getUseruu(), u.getEnuu(), item.getId());
-                        if (remindList.size() == 0 && item.getInquiry().getEnUU() != null &&
-                                ((item.getProduct() != null && item.getProduct().getCmpCode().equalsIgnoreCase(u.getProduct().getCmpCode())) ||
-                                        item.getCmpCode().equalsIgnoreCase(u.getProduct().getCmpCode()))) {
+                        if (remindList.size() == 0 && item.getInquiry().getEnUU() != null) {
                             Enterprise enterprise = enterpriseDao.findOne(item.getInquiry().getEnUU());
                             InquiryRemind remind = new InquiryRemind();
                             remind.setEnName(enterprise.getEnName());
@@ -963,7 +961,12 @@ public class PublicInquiryServiceImpl implements PublicInquiryService {
                         SimpleExpression title = new SimpleExpression("prodTitle", filter.getKeyword(), CriterionExpression.Operator.LIKE, true);
                         SimpleExpression code = new SimpleExpression("inquiry.code", filter.getKeyword(), CriterionExpression.Operator.LIKE, true);
                         SimpleExpression enName = new SimpleExpression("inquiry.enName", filter.getKeyword(), CriterionExpression.Operator.LIKE, true);
-                        SimpleExpression[] simpleExpressions = new SimpleExpression[]{cmpCode, brand, code, title, enName};
+                        SimpleExpression[] simpleExpressions = null;
+                        if (!StringUtils.isEmpty(filter.getIsLogin()) && filter.getIsLogin() == 0) {
+                            simpleExpressions = new SimpleExpression[]{cmpCode, brand, code, title};
+                        } else {
+                            simpleExpressions = new SimpleExpression[]{cmpCode, brand, code, title, enName};
+                        }
                         LogicalExpression logical = new LogicalExpression(simpleExpressions, CriterionExpression.Operator.OR);
                         info.expression(logical);
                     }