|
|
@@ -1,5 +1,6 @@
|
|
|
package com.uas.platform.b2b.service.impl;
|
|
|
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
import com.uas.message.mail.service.MailService;
|
|
|
import com.uas.platform.b2b.core.util.ContextUtils;
|
|
|
import com.uas.platform.b2b.core.util.DateFormatUtils;
|
|
|
@@ -10,7 +11,10 @@ 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.event.PurchaseInquiryItemDecideReleaseEvent;
|
|
|
+import com.uas.platform.b2b.event.PurchaseInquiryItemInvalidReleaseEvent;
|
|
|
+import com.uas.platform.b2b.event.PurchaseInquiryItemReplyReleaseEvent;
|
|
|
+import com.uas.platform.b2b.event.PurchaseInquiryItemSaveReleaseEvent;
|
|
|
import com.uas.platform.b2b.model.*;
|
|
|
import com.uas.platform.b2b.search.SearchService;
|
|
|
import com.uas.platform.b2b.service.AttachService;
|
|
|
@@ -20,6 +24,7 @@ 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.b2b.temporary.model.UserInfo;
|
|
|
import com.uas.platform.core.concurrent.IRunnable;
|
|
|
import com.uas.platform.core.exception.IllegalOperatorException;
|
|
|
import com.uas.platform.core.exception.IllegalStatusException;
|
|
|
@@ -101,18 +106,43 @@ public class PurchaseInquiryServiceImpl implements PurchaseInquiryService {
|
|
|
@Autowired
|
|
|
private MailService mailService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private EnterpriseDao enterpriseDao;
|
|
|
+
|
|
|
@Autowired
|
|
|
private MessageConf messageConf;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private NoticeDao noticeDao;
|
|
|
+
|
|
|
private final static ErpBufferedLogger logger = BufferedLoggerManager.getLogger(ErpBufferedLogger.class);
|
|
|
|
|
|
+ static final String TEL_REGEXP = "^((\\(\\d{3}\\))|(\\d{3}\\-))?(13|15|18|17)\\d{9}$";
|
|
|
+
|
|
|
+ static final String EMAIL_REGEXP = "\\w[-\\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\\.)+[A-Za-z]{2,14}";
|
|
|
+
|
|
|
@Override
|
|
|
public void save(List<PurchaseInquiryItem> inquiryItems) {
|
|
|
- inquiryItems = purchaseInquiryItemDao.save(inquiryItems);
|
|
|
- saveUserOrders(inquiryItems);
|
|
|
- sendRemind(PurchaseInquiryItem.distinct(inquiryItems));
|
|
|
-// ContextUtils.publishEvent(new PurchaseInquiryItemSaveEvent(inquiryItems)); // 之前的索引分词,已弃用
|
|
|
- sendMessage(inquiryItems);
|
|
|
+ inquiryItems = purchaseInquiryItemDao.save(inquiryItems);
|
|
|
+ saveUserOrders(inquiryItems);
|
|
|
+ Long userUU = SystemSession.getUser().getUserUU();
|
|
|
+ Long enUU = SystemSession.getUser().getEnterprise().getUu();
|
|
|
+ String userIp = SystemSession.getUser().getIp();
|
|
|
+ String userName = SystemSession.getUser().getUserName();
|
|
|
+ sendRemind(PurchaseInquiryItem.distinct(inquiryItems), userUU, userName, userIp, enUU);
|
|
|
+ // 产生消息
|
|
|
+ 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));
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -201,9 +231,12 @@ public class PurchaseInquiryServiceImpl implements PurchaseInquiryService {
|
|
|
* 发送通知
|
|
|
*
|
|
|
* @param inquiries 采购询价单主表
|
|
|
- * @return
|
|
|
+ * @param userUU
|
|
|
+ *@param userName
|
|
|
+ * @param userIp
|
|
|
+ * @param enUU @return
|
|
|
*/
|
|
|
- private void sendRemind(final List<PurchaseInquiry> inquiries){
|
|
|
+ private void sendRemind(final List<PurchaseInquiry> inquiries, final Long userUU, final String userName, final String userIp, final Long enUU){
|
|
|
ThreadTask.getInstance().execute(new Runnable() {
|
|
|
@Override
|
|
|
public void run() {
|
|
|
@@ -214,47 +247,80 @@ public class PurchaseInquiryServiceImpl implements PurchaseInquiryService {
|
|
|
SmsMessage sms = new SmsMessage();
|
|
|
List<Object> obj = new ArrayList<Object>();
|
|
|
obj.add(inquiry.getEnterprise().getEnName());
|
|
|
+ obj.add(inquiry.getCode());
|
|
|
sms.setParams(obj);
|
|
|
for (PurchaseInquiryItem inquiryItem : inquiry.getInquiryItems()) {
|
|
|
- if (!enUUs.contains(inquiryItem.getVendUU())) {
|
|
|
+ if (null != inquiryItem.getVendUU() && !enUUs.contains(inquiryItem.getVendUU())) {
|
|
|
// 查找业务员邮箱
|
|
|
- String userEmailSql = "select distinct us.user_email useremail from sec$users us " +
|
|
|
+ String userEmailSql = "select distinct us.user_email ememail 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 " +
|
|
|
+ " and sr.role_enuu = " + inquiryItem.getVendUU() + " and us.user_uu in (" +
|
|
|
+ "select pd_useruu from purc$distribute where pd_vdid = (" +
|
|
|
+ "select ve_id from purc$vendors where ve_myenuu = " + inquiry.getEnUU() + " and ve_vendenuu = " + inquiryItem.getVendUU() + "))";
|
|
|
+ List<UserInfo> userEmails = commonDao.query(userEmailSql, UserInfo.class);
|
|
|
+ String userTelSql = "select distinct us.user_tel emphone 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);
|
|
|
+ " on ur.role_id = sr.role_id where sr.role_desc = '业务员' and us.user_tel is not null " +
|
|
|
+ " and sr.role_enuu = " + inquiryItem.getVendUU() + " and us.user_uu in (" +
|
|
|
+ "select pd_useruu from purc$distribute where pd_vdid = (" +
|
|
|
+ "select ve_id from purc$vendors where ve_myenuu = " + inquiry.getEnUU() + " and ve_vendenuu = " + inquiryItem.getVendUU() + "))";
|
|
|
+ List<UserInfo> userTels = commonDao.query(userTelSql, UserInfo.class);
|
|
|
// 发邮件
|
|
|
Map<String, Object> model = new HashMap<String, Object>();
|
|
|
- model.put("vendorname", inquiryItem.getEnterprise().getEnName());
|
|
|
+ Enterprise vendor = enterpriseDao.findOne(inquiryItem.getVendUU());
|
|
|
+ if (null != vendor) {
|
|
|
+ model.put("vendorname", vendor.getEnName());
|
|
|
+ } else {
|
|
|
+ model.put("vendorname", "供应商");
|
|
|
+ }
|
|
|
model.put("custname", inquiry.getEnterprise().getEnName());
|
|
|
+ model.put("code", inquiry.getCode());
|
|
|
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)) {
|
|
|
+ // 不存在被分配客户的业务员则添加系统管理员
|
|
|
+ if (CollectionUtils.isEmpty(userEmails) && CollectionUtils.isEmpty(userTels)) {
|
|
|
+ Enterprise enterprise = enterpriseDao.findOne(inquiryItem.getVendUU());
|
|
|
+ if (null != enterprise) {
|
|
|
+ User admin = userDao.findOne(enterprise.getEnAdminuu());
|
|
|
+ if (null != admin) {
|
|
|
+ UserInfo adminInfo = new UserInfo(admin);
|
|
|
+ userEmails.add(adminInfo);
|
|
|
+ userTels.add(adminInfo);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for (UserInfo userEmail : userEmails) {
|
|
|
+ if (Pattern.matches(EMAIL_REGEXP, userEmail.getEmemail())) {
|
|
|
try {
|
|
|
- mailService.send(messageConf.getTplInquiryForB2B(), userEmail, model);
|
|
|
+ // 调用自动询价消息模版id
|
|
|
+ mailService.send(messageConf.getTplAutoInquiryForB2B(), userEmail.getEmemail(), model);
|
|
|
+ System.out.println("发送邮件成功:" + JSON.toJSON(userEmail));
|
|
|
+ // 线程内无法访问Systemsession,会报nullPoint,采用存储过程
|
|
|
+// usageLogger.log("询价发送邮件", "企业UU:" + inquiry.getEnUU() + ",单号:" +inquiry.getCode() +" 发送邮件成功", "询价发送邮件成功");
|
|
|
+ noticeDao.saveErpLog(userName, userIp, enUU, userUU, "发送询价单通知邮件", "发送成功,询价单号" + inquiry.getCode() + ",接收邮箱:" + userEmail.getEmemail());
|
|
|
} catch (Exception e) {
|
|
|
- logger.log("内部询价发送邮件出错", inquiry.getEnUU() + "," +inquiry.getCode() +" 发送失败", 0);
|
|
|
- throw new RuntimeException(e);
|
|
|
+// usageLogger.log("询价发送邮件", "企业UU:" + inquiry.getEnUU() + ",单号:" +inquiry.getCode() +" 发送邮件失败", "询价发送邮件出错");
|
|
|
+ noticeDao.saveErpLog(userName, userIp, enUU, userUU, "发送询价单通知邮件", "发送失败,询价单号" + inquiry.getCode() + ",接收邮箱:" + userEmail.getEmemail());
|
|
|
+ e.printStackTrace();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
// 发短信
|
|
|
- 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);
|
|
|
- }
|
|
|
+ for (UserInfo userTel : userTels) {
|
|
|
+ if(null != userTel.getEmphone() && userTel.getEmphone().matches(TEL_REGEXP)) {//手机号判断
|
|
|
+ try {
|
|
|
+ sms.setReceiver(userTel.getEmphone());
|
|
|
+ sms.setTemplateId(messageConf.getMsgAutoInquiryForB2B());
|
|
|
+ HttpUtil.sendPost(messageConf.getMessageUrl(), FlexJsonUtils.toJsonDeep(sms));
|
|
|
+// usageLogger.log("询价发送短信", "企业UU:" + inquiry.getEnUU() + ",单号:" +inquiry.getCode() +"短信发送成功", "询价发送短信成功");
|
|
|
+
|
|
|
+ noticeDao.saveErpLog(userName, userIp, enUU, userUU, "发送询价单通知短信", "发送成功,询价单号" + inquiry.getCode() + ",接收手机:" + userTel.getEmphone());
|
|
|
+ } catch (Exception e) {
|
|
|
+ noticeDao.saveErpLog(userName, userIp, enUU, userUU, "发送询价单通知短信", "发送失败,询价单号" + inquiry.getCode() + ",接收手机:" + userTel.getEmphone());
|
|
|
+// usageLogger.log("询价发送短信", "企业UU:" + inquiry.getEnUU() + ",单号:" +inquiry.getCode() +"短信发送失败", "询价发送短信出错");
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
enUUs.add(inquiryItem.getVendUU());
|
|
|
}
|
|
|
@@ -266,6 +332,7 @@ public class PurchaseInquiryServiceImpl implements PurchaseInquiryService {
|
|
|
|
|
|
@Override
|
|
|
public List<PurchaseInquiryItem> findNotUploadReply() {
|
|
|
+ purchaseInquiryItemDao.updateStatus(SystemSession.getUser().getEnterprise().getUu(), Constant.NO);
|
|
|
return purchaseInquiryItemDao.findByEnUUAndBackStatus(SystemSession.getUser().getEnterprise().getUu(),
|
|
|
(short) Status.NOT_UPLOAD.value());
|
|
|
}
|