|
|
@@ -1,27 +1,35 @@
|
|
|
package com.uas.platform.b2b.service.impl;
|
|
|
|
|
|
+import com.uas.message.mail.service.MailService;
|
|
|
import com.uas.platform.b2b.core.util.ContextUtils;
|
|
|
+import com.uas.platform.b2b.core.util.DateFormatUtils;
|
|
|
import com.uas.platform.b2b.core.util.ThreadTask;
|
|
|
import com.uas.platform.b2b.core.util.ThreadUtils;
|
|
|
import com.uas.platform.b2b.dao.*;
|
|
|
import com.uas.platform.b2b.erp.model.Inquiry;
|
|
|
import com.uas.platform.b2b.erp.model.QuotationDown;
|
|
|
import com.uas.platform.b2b.erp.model.QuotationDownDetail;
|
|
|
+import com.uas.platform.b2b.erp.support.ErpBufferedLogger;
|
|
|
import com.uas.platform.b2b.event.*;
|
|
|
import com.uas.platform.b2b.model.*;
|
|
|
import com.uas.platform.b2b.search.SearchService;
|
|
|
import com.uas.platform.b2b.service.AttachService;
|
|
|
import com.uas.platform.b2b.service.PurchaseInquiryService;
|
|
|
+import com.uas.platform.b2b.support.MessageConf;
|
|
|
import com.uas.platform.b2b.support.SystemSession;
|
|
|
import com.uas.platform.b2b.support.XingePusher;
|
|
|
import com.uas.platform.b2b.temporary.model.InquiryMessage;
|
|
|
+import com.uas.platform.b2b.temporary.model.SmsMessage;
|
|
|
import com.uas.platform.core.concurrent.IRunnable;
|
|
|
import com.uas.platform.core.exception.IllegalOperatorException;
|
|
|
import com.uas.platform.core.exception.IllegalStatusException;
|
|
|
+import com.uas.platform.core.logging.BufferedLoggerManager;
|
|
|
import com.uas.platform.core.model.Constant;
|
|
|
import com.uas.platform.core.model.PageInfo;
|
|
|
import com.uas.platform.core.model.Status;
|
|
|
import com.uas.platform.core.persistence.criteria.PredicateUtils;
|
|
|
+import com.uas.platform.core.util.HttpUtil;
|
|
|
+import com.uas.platform.core.util.serializer.FlexJsonUtils;
|
|
|
import com.uas.search.b2b.model.PageParams;
|
|
|
import com.uas.search.b2b.model.SPage;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
@@ -39,6 +47,7 @@ import javax.persistence.criteria.CriteriaQuery;
|
|
|
import javax.persistence.criteria.Predicate;
|
|
|
import javax.persistence.criteria.Root;
|
|
|
import java.util.*;
|
|
|
+import java.util.regex.Pattern;
|
|
|
|
|
|
|
|
|
@Service
|
|
|
@@ -89,12 +98,45 @@ public class PurchaseInquiryServiceImpl implements PurchaseInquiryService {
|
|
|
@Autowired
|
|
|
private DistributeDao distributeDao;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private MailService mailService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private MessageConf messageConf;
|
|
|
+
|
|
|
+ private final static ErpBufferedLogger logger = BufferedLoggerManager.getLogger(ErpBufferedLogger.class);
|
|
|
+
|
|
|
@Override
|
|
|
public void save(List<PurchaseInquiryItem> inquiryItems) {
|
|
|
inquiryItems = purchaseInquiryItemDao.save(inquiryItems);
|
|
|
saveUserOrders(inquiryItems);
|
|
|
+ sendRemind(PurchaseInquiryItem.distinct(inquiryItems));
|
|
|
ContextUtils.publishEvent(new PurchaseInquiryItemSaveEvent(inquiryItems));
|
|
|
- ContextUtils.publishEvent(new PurchaseInquiryItemSaveReleaseEvent(PurchaseInquiryItem.distinct(inquiryItems)));
|
|
|
+ sendMessage(inquiryItems);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 产生消息
|
|
|
+ * @param inquiryItems
|
|
|
+ */
|
|
|
+ private void sendMessage(final List<PurchaseInquiryItem> inquiryItems) {
|
|
|
+ ThreadTask.getInstance().execute(new Runnable() {
|
|
|
+ @Override
|
|
|
+ public void run() {
|
|
|
+ List<PurchaseInquiry> inquiries = PurchaseInquiryItem.distinct(inquiryItems);
|
|
|
+ List<PurchaseInquiryItem> items = new ArrayList<>();
|
|
|
+ for (PurchaseInquiry inquiry : inquiries) {
|
|
|
+ Set<Long> enUUs = new HashSet<>();
|
|
|
+ for (PurchaseInquiryItem inquiryItem : inquiry.getInquiryItems()) {
|
|
|
+ if (!enUUs.contains(inquiryItem.getVendUU())) {
|
|
|
+ items.add(inquiryItem);
|
|
|
+ enUUs.add(inquiryItem.getVendUU());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ContextUtils.publishEvent(new PurchaseInquiryItemSaveReleaseEvent(items));
|
|
|
+ }
|
|
|
+ });
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -155,6 +197,73 @@ public class PurchaseInquiryServiceImpl implements PurchaseInquiryService {
|
|
|
});
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 发送通知
|
|
|
+ *
|
|
|
+ * @param inquiries 采购询价单主表
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private void sendRemind(final List<PurchaseInquiry> inquiries){
|
|
|
+ ThreadTask.getInstance().execute(new Runnable() {
|
|
|
+ @Override
|
|
|
+ public void run() {
|
|
|
+ for (PurchaseInquiry inquiry : inquiries) {
|
|
|
+ // 一个询价单,给一个企业只发一封邮件
|
|
|
+ Set<Long> enUUs = new HashSet<>();
|
|
|
+ // 短信设置
|
|
|
+ SmsMessage sms = new SmsMessage();
|
|
|
+ List<Object> obj = new ArrayList<Object>();
|
|
|
+ obj.add(inquiry.getEnterprise().getEnName());
|
|
|
+ sms.setParams(obj);
|
|
|
+ for (PurchaseInquiryItem inquiryItem : inquiry.getInquiryItems()) {
|
|
|
+ if (!enUUs.contains(inquiryItem.getVendUU())) {
|
|
|
+ // 查找业务员邮箱
|
|
|
+ String userEmailSql = "select distinct us.user_email useremail from sec$users us " +
|
|
|
+ " left join sec$userrole ur on us.user_uu = ur.user_uu left join sec$roles sr " +
|
|
|
+ " on ur.role_id = sr.role_id where sr.role_desc = '业务员' and us.user_email is not null " +
|
|
|
+ " and sr.role_enuu = " + inquiryItem.getVendUU();
|
|
|
+ List<String> userEmails = commonDao.query(userEmailSql, String.class);
|
|
|
+ String userTelSql = "select distinct us.user_email useremail from sec$users us " +
|
|
|
+ " left join sec$userrole ur on us.user_uu = ur.user_uu left join sec$roles sr " +
|
|
|
+ " on ur.role_id = sr.role_id where sr.role_desc = '业务员' and us.user_email is not null " +
|
|
|
+ " and sr.role_enuu = " + inquiryItem.getVendUU();
|
|
|
+ List<String> userTels = commonDao.query(userTelSql, String.class);
|
|
|
+ // 发邮件
|
|
|
+ Map<String, Object> model = new HashMap<String, Object>();
|
|
|
+ model.put("vendorname", inquiryItem.getEnterprise().getEnName());
|
|
|
+ model.put("custname", inquiry.getEnterprise().getEnName());
|
|
|
+ model.put("date", DateFormatUtils.DATE_FORMAT.format(new Date()));
|
|
|
+ for (String userEmail : userEmails) {
|
|
|
+ String emailRegex = "[\\w!#$%&'*+/=?^_`{|}~-]+(?:\\.[\\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\\w](?:[\\w-]*[\\w])?\\.)+[\\w](?:[\\w-]*[\\w])?";
|
|
|
+ if (Pattern.matches(emailRegex, userEmail)) {
|
|
|
+ try {
|
|
|
+ mailService.send(messageConf.getTplInquiryForB2B(), userEmail, model);
|
|
|
+ } catch (Exception e) {
|
|
|
+ logger.log("内部询价发送邮件出错", inquiry.getEnUU() + "," +inquiry.getCode() +" 发送失败", 0);
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 发短信
|
|
|
+ for (String userTel : userTels) {
|
|
|
+ try {
|
|
|
+ sms.setReceiver(userTel);
|
|
|
+ sms.setTemplateId(messageConf.getMsgInquiryForB2B());
|
|
|
+ HttpUtil.sendPost(messageConf.getMessageUrl(), FlexJsonUtils.toJsonDeep(sms));
|
|
|
+
|
|
|
+ } catch (Exception e) {
|
|
|
+ logger.log("内部询价发送短信出错", inquiry.getEnUU() + "," +inquiry.getCode() +" 发送失败", 0);
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ enUUs.add(inquiryItem.getVendUU());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public List<PurchaseInquiryItem> findNotUploadReply() {
|
|
|
return purchaseInquiryItemDao.findByEnUUAndBackStatus(SystemSession.getUser().getEnterprise().getUu(),
|
|
|
@@ -594,7 +703,7 @@ public class PurchaseInquiryServiceImpl implements PurchaseInquiryService {
|
|
|
}, inquiries).run();
|
|
|
List<PurchaseInquiryItem> savedInquiryItems = purchaseInquiryItemDao.save(newInquiryItems);
|
|
|
// 触发消息事件
|
|
|
- ContextUtils.publishEvent(new PurchaseInquiryItemInvalidReleaseEvent(PurchaseInquiryItem.distinct(savedInquiryItems)));
|
|
|
+ ContextUtils.publishEvent(new PurchaseInquiryItemInvalidReleaseEvent(savedInquiryItems));
|
|
|
}
|
|
|
|
|
|
@Override
|