MessageServiceImpl.java 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667
  1. package com.uas.ps.message.service.impl;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.uas.account.entity.User;
  4. import com.uas.account.entity.UserView;
  5. import com.uas.account.util.AccountUtils;
  6. import com.uas.account.util.FlexJsonUtil;
  7. import com.uas.ps.core.page.PageInfo;
  8. import com.uas.ps.core.page.PageParams;
  9. import com.uas.ps.message.dao.AppDao;
  10. import com.uas.ps.message.dao.MessageDao;
  11. import com.uas.ps.message.domain.App;
  12. import com.uas.ps.message.domain.Message;
  13. import com.uas.ps.message.domain.SmsMessage;
  14. import com.uas.ps.message.exception.IllegalOperatorException;
  15. import com.uas.ps.message.exception.ParameterMissingException;
  16. import com.uas.ps.message.service.MessageService;
  17. import com.uas.ps.message.util.Constant;
  18. import com.uas.ps.message.util.ConsumeType;
  19. import com.uas.ps.message.util.FastjsonUtils;
  20. import com.uas.ps.message.util.SMSType;
  21. import com.uas.ps.message.util.SplitChar;
  22. import com.uas.ps.message.util.account.HttpUtil;
  23. import com.uas.ps.message.util.account.HttpUtil.ResponseWrap;
  24. import java.sql.ResultSet;
  25. import java.sql.SQLException;
  26. import java.util.ArrayList;
  27. import java.util.Date;
  28. import java.util.HashMap;
  29. import java.util.HashSet;
  30. import java.util.List;
  31. import java.util.Map;
  32. import java.util.Set;
  33. import org.apache.log4j.Logger;
  34. import org.springframework.beans.factory.annotation.Autowired;
  35. import org.springframework.data.domain.Page;
  36. import org.springframework.data.domain.PageImpl;
  37. import org.springframework.data.domain.Sort;
  38. import org.springframework.http.HttpHeaders;
  39. import org.springframework.http.MediaType;
  40. import org.springframework.jdbc.core.JdbcTemplate;
  41. import org.springframework.jdbc.core.RowMapper;
  42. import org.springframework.stereotype.Service;
  43. import org.springframework.ui.ModelMap;
  44. import org.springframework.util.CollectionUtils;
  45. import org.springframework.util.StringUtils;
  46. /**
  47. * Created by wangyc on 2018/1/13.
  48. *
  49. * @version 2018/1/13 15:44 wangyc
  50. */
  51. @Service
  52. public class MessageServiceImpl implements MessageService {
  53. private final MessageDao messageDao;
  54. private final AppDao appDao;
  55. private static final Logger LOGGER = Logger.getLogger(Logger.class);
  56. private final JdbcTemplate jdbcTemplate;
  57. // private RestTemplate restTemplate;
  58. // private static final String EMAIL_REGEX = "\\w[-\\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\\.)+[A-Za-z]{2,14}";
  59. // private static final String TEL_REGEXP = "^((\\(\\d{3}\\))|(\\d{3}\\-))?(13|15|18|17)\\d{9}$";
  60. private static final String PROD_URL = "https://mobile.ubtob.com/tigase/baiduPush";
  61. private static final String PUBLIC_INQUIRY_IM_URL = "https://mobile.ubtob.com:8443/openapp/?pagekind"
  62. + "=B&id=%s&uu=%s&telephone=%s";
  63. /**
  64. * 邮件服务主机地址
  65. */
  66. private static final String MAIL_CONSOLE_HOST = "http://10.10.100.136:8080";
  67. /**
  68. * 发送邮件给单个人url
  69. */
  70. private static final String MAIL_SEND_URL = "mail/send";
  71. /**
  72. * 发送邮件给多个人 url
  73. */
  74. private static final String MAIL_SEND_MANY_URL = "mail/send/o2m";
  75. /**
  76. * 短信接口
  77. */
  78. private final String messageUrl = "http://10.10.100.136:8080/sms/send";
  79. @Autowired
  80. public MessageServiceImpl(MessageDao messageDao, AppDao appDao, JdbcTemplate jdbcTemplate) {
  81. this.messageDao = messageDao;
  82. this.appDao = appDao;
  83. this.jdbcTemplate = jdbcTemplate;
  84. }
  85. @Override
  86. public Page<Message> getMessages(String receiverUu, String receiverEnuu, String consumerApp, String isRead,
  87. String keyword, PageParams pageParams) {
  88. if (StringUtils.isEmpty(receiverUu) || StringUtils.isEmpty(receiverEnuu)) {
  89. throw new ParameterMissingException("接收人信息为空");
  90. }
  91. if (StringUtils.isEmpty(consumerApp)) {
  92. throw new ParameterMissingException("接收应用信息为空");
  93. }
  94. App consumerAppExists = appDao.findByName(consumerApp);
  95. if (consumerApp == null) {
  96. throw new IllegalOperatorException("接收应用不存在");
  97. }
  98. final Long consumerAppId = consumerAppExists.getId();
  99. // 消息接收人过滤
  100. // SimpleExpression receiverUuExp = PredicateUtils.eq("receiverUu", Long.valueOf(receiverUu), true);
  101. // 消息接收企业过滤
  102. // SimpleExpression receiverEnuuExp = PredicateUtils.eq("receiverEnuu", Long.valueOf(receiverEnuu), true);
  103. // SimpleExpression[] simpleExpressions = new SimpleExpression[] {receiverUuExp, receiverEnuuExp};
  104. String sql = String.format("select count(1) from messages m where ms_receiveruu = %s and ms_receiverenuu = %s ",
  105. Long.valueOf(receiverUu), Long.valueOf(receiverEnuu));
  106. // 读取状态
  107. if (!StringUtils.isEmpty(isRead)) {
  108. // SimpleExpression isReadExp = PredicateUtils.eq("isRead", Short.valueOf(isRead), true);
  109. // simpleExpressions = ArrayUtils.concat(simpleExpressions, new SimpleExpression[] {isReadExp});
  110. sql += String.format(" and ms_isread = %s", Short.valueOf(isRead));
  111. }
  112. // 关键词搜索
  113. if (!StringUtils.isEmpty(keyword)) {
  114. // SimpleExpression contentExp = PredicateUtils.like("content", keyword, true);
  115. // simpleExpressions = ArrayUtils.concat(simpleExpressions, new SimpleExpression[] {contentExp});
  116. sql += String.format(" and ms_content like '%%%s%%'", keyword);
  117. }
  118. sql += String.format(" and exists (select 1 from message$consumeapp where app_id = %s and m.ms_id = ms_id)",
  119. consumerAppId);
  120. // final LogicalExpression logicalExpression = PredicateUtils.and(simpleExpressions);
  121. final PageInfo pageInfo = new PageInfo(pageParams);
  122. Long count = jdbcTemplate.queryForObject(sql, Long.class);
  123. List<Message> messageList = new ArrayList<>();
  124. if (count > 0) {
  125. sql += String.format("order by ms_createtime desc limit %s,%s", (pageParams.getPage() - 1) * pageParams.getCount(), pageParams.getCount());
  126. messageList = jdbcTemplate.query(sql.replace("count(1)", "*"), new RowMapper<Message>() {
  127. @Override
  128. public Message mapRow(ResultSet resultSet, int i) throws SQLException {
  129. Message message = new Message();
  130. if (resultSet != null) {
  131. message.setId(resultSet.getLong("ms_id"));
  132. message.setConsumeType(resultSet.getString("ms_consumeType"));
  133. message.setContent(resultSet.getString("ms_content"));
  134. message.setCreateTime(resultSet.getTimestamp("ms_createTime"));
  135. message.setIsRead(resultSet.getShort("ms_isread"));
  136. message.setIsSent(resultSet.getShort("ms_issent"));
  137. message.setReceiverEnuu(resultSet.getLong("ms_receiverenuu"));
  138. message.setReceiverUu(resultSet.getLong("ms_receiveruu"));
  139. message.setSenderEnuu(resultSet.getLong("ms_senderenuu"));
  140. message.setSenderUu(resultSet.getLong("ms_senderuu"));
  141. message.setType(resultSet.getString("ms_type"));
  142. message.setRemark(resultSet.getString("ms_remark"));
  143. message.setSourceId(resultSet.getLong("ms_sourceid"));
  144. }
  145. return message;
  146. }
  147. });
  148. }
  149. return new PageImpl<Message>(messageList, pageInfo, count);
  150. // return messageDao.findAll(new Specification<Message>() {
  151. // @Override
  152. // public Predicate toPredicate(Root<Message> root, CriteriaQuery<?> criteriaQuery,
  153. // CriteriaBuilder criteriaBuilder) {
  154. // Predicate messagePredicate = criteriaBuilder.and(logicalExpression.toPredicate(root, criteriaQuery,
  155. // criteriaBuilder));
  156. // // 消费应用过滤
  157. // Predicate consumerAppPredicate = criteriaBuilder.equal(root.join("consumerApp").get("id"),
  158. // consumerAppId);
  159. // Predicate all = criteriaBuilder.and(messagePredicate, consumerAppPredicate);
  160. // criteriaQuery.where(all);
  161. // return null;
  162. // }
  163. // }, pageInfo);
  164. }
  165. @Override
  166. public Map<String, Object> getUnReadMessageCount(String receiverUu, String receiverEnuu, String consumerApp) {
  167. if (StringUtils.isEmpty(receiverUu) || StringUtils.isEmpty(receiverEnuu)) {
  168. throw new ParameterMissingException("接收人信息为空");
  169. }
  170. if (StringUtils.isEmpty(consumerApp)) {
  171. throw new ParameterMissingException("接收应用信息为空");
  172. }
  173. App consumerAppExists = appDao.findByName(consumerApp);
  174. if (consumerApp == null) {
  175. throw new IllegalOperatorException("接收应用不存在");
  176. }
  177. Integer messagesCount = messageDao.findCountByReceiverUuAndReceiverEnuuAndIsReadAndConsumerAppId(Long.valueOf(receiverUu),
  178. Long.valueOf(receiverEnuu), Constant.NO, consumerAppExists.getId());
  179. Map<String, Object> resultMap = new HashMap<>();
  180. resultMap.put("success", "success");
  181. resultMap.put("count", messagesCount);
  182. return resultMap;
  183. }
  184. @Override
  185. public Map<String, Object> getMessageCount(String receiverUu, String receiverEnuu, String consumerApp,
  186. String isRead) {
  187. if (StringUtils.isEmpty(receiverUu) || StringUtils.isEmpty(receiverEnuu)) {
  188. throw new ParameterMissingException("接收人信息为空");
  189. }
  190. if (StringUtils.isEmpty(consumerApp)) {
  191. throw new ParameterMissingException("接收应用信息为空");
  192. }
  193. App consumerAppExists = appDao.findByName(consumerApp);
  194. if (consumerAppExists == null) {
  195. throw new IllegalOperatorException("接收应用不存在");
  196. }
  197. Integer messagesCount = 0;
  198. if (StringUtils.isEmpty(isRead) || (!isRead.equals(Constant.NO.toString()) && !isRead.equals(Constant.YES.toString()))) {
  199. messagesCount = messageDao.findCountByReceiverUuAndReceiverEnuuAndConsumerAppId(Long.valueOf(receiverUu),
  200. Long.valueOf(receiverEnuu), consumerAppExists.getId());
  201. } else {
  202. messagesCount = messageDao.findCountByReceiverUuAndReceiverEnuuAndIsReadAndConsumerAppId(Long.valueOf(receiverUu),
  203. Long.valueOf(receiverEnuu), Short.valueOf(isRead), consumerAppExists.getId());
  204. }
  205. Map<String, Object> resultMap = new HashMap<>();
  206. resultMap.put("success", "success");
  207. resultMap.put("count", messagesCount);
  208. return resultMap;
  209. }
  210. @Override
  211. public List<Message> saveMessages(String messages) {
  212. List<JSONObject> jsonObjects = FastjsonUtils.fromJsonArray(messages, JSONObject.class);
  213. List<Message> messageList = convertFromJsonObj(jsonObjects);
  214. return messageDao.save(messageList);
  215. }
  216. @Override
  217. public Map<String, Object> sendMessage(String consumerApp) {
  218. JSONObject consumer = FastjsonUtils.parseObject(consumerApp);
  219. Object consumerAppObj = consumer.get("consumerApp");
  220. if (consumerAppObj != null && !StringUtils.isEmpty(String.valueOf(consumerAppObj))) {
  221. App consumerAppExists = appDao.findByName(String.valueOf(consumerAppObj));
  222. if (consumerAppExists == null) {
  223. throw new IllegalOperatorException("接收应用不存在");
  224. }
  225. // 获取改应用应接收的未读、未发送的需要推送的消息(取前500条)
  226. List<Message> messages = messageDao.findByConsumerAppIdAndIsReadAndIsSentNeedToSend(
  227. consumerAppExists.getId(), Constant.NO, Constant.NO);
  228. LOGGER.info("信息数量:" + messages.size());
  229. Map<String, Object> resultMap = sendMessageByAPI(messages, consumerApp);
  230. resultMap.put("success", "success");
  231. return resultMap;
  232. } else {
  233. throw new ParameterMissingException("接收应用信息为空");
  234. }
  235. }
  236. @Override
  237. public ModelMap readMessage(String consumer) {
  238. ModelMap map = new ModelMap();
  239. map.put("success", "false");
  240. if (StringUtils.isEmpty(consumer)) {
  241. throw new ParameterMissingException("接收人信息为空,无法阅读消息");
  242. }
  243. JSONObject jsonObject = FastjsonUtils.parseObject(consumer);
  244. // 消息id
  245. Object messageId = jsonObject.get("messageId");
  246. Object receiverUu = jsonObject.get("receiverUu");
  247. Object receiverEnuu = jsonObject.get("receiverEnuu");
  248. Object consumerApp = jsonObject.get("consumerApp");
  249. if (StringUtils.isEmpty(messageId)) {
  250. map.put("data", "消息id为空,请重新确认消息信息");
  251. return map;
  252. } else {
  253. String[] messageIds = String.valueOf(messageId).split(SplitChar.COMMA);
  254. List<Message> messages = new ArrayList<>();
  255. for (String id : messageIds) {
  256. Message message = messageDao.findOne(Long.valueOf(String.valueOf(id)));
  257. if (message == null) {
  258. map.put("data", "消息不存在,请重新确认消息信息");
  259. return map;
  260. }
  261. if (receiverUu == null || StringUtils.isEmpty(String.valueOf(receiverEnuu)) || receiverEnuu == null
  262. || StringUtils.isEmpty(String.valueOf(receiverUu))
  263. || StringUtils.isEmpty(String.valueOf(consumerApp))) {
  264. map.put("data", "用户信息为空,无法读取消息");
  265. return map;
  266. }
  267. if (!Long.valueOf(String.valueOf(receiverEnuu)).equals(message.getReceiverEnuu())
  268. || !Long.valueOf(String.valueOf(receiverUu)).equals(message.getReceiverUu())) {
  269. map.put("data", "此消息不属于当前用户,请重新确认后读取");
  270. return map;
  271. }
  272. if (Constant.YES.equals(message.getIsRead())) {
  273. map.put("data", "消息已阅读");
  274. return map;
  275. }
  276. App app = appDao.findByName(String.valueOf(consumerApp));
  277. if (app == null) {
  278. map.put("data", "消费应用不存在,请重新确认用户信息");
  279. return map;
  280. }
  281. if (!message.getConsumerApp().contains(app)) {
  282. map.put("data", "消息不属于当前应用");
  283. return map;
  284. }
  285. message.setIsRead(Constant.YES);
  286. messages.add(message);
  287. }
  288. messages = messageDao.save(messages);
  289. map.put("success", "success");
  290. map.put("data", FastjsonUtils.toJson(messages));
  291. return map;
  292. }
  293. }
  294. /**
  295. * jsonObject转换为Message
  296. * @param jsonObjects jsonObjects
  297. * @return messages
  298. */
  299. private List<Message> convertFromJsonObj(List<JSONObject> jsonObjects) {
  300. List<Message> messages = new ArrayList<>();
  301. for (JSONObject jsonObject : jsonObjects) {
  302. Message message = new Message();
  303. // 消息内容
  304. Object content = jsonObject.get("content");
  305. if (StringUtils.isEmpty(content)) {
  306. throw new ParameterMissingException("消息内容为空");
  307. } else {
  308. message.setContent(String.valueOf(content));
  309. }
  310. // 发送人
  311. Object senderUu = jsonObject.get("senderUu");
  312. Object senderEnuu = jsonObject.get("senderEnuu");
  313. if (StringUtils.isEmpty(senderUu) || StringUtils.isEmpty(senderEnuu)) {
  314. throw new ParameterMissingException("发送人信息为空");
  315. } else {
  316. message.setSenderUu(Long.valueOf(String.valueOf(senderUu)));
  317. message.setSenderEnuu(Long.valueOf(String.valueOf(senderEnuu)));
  318. }
  319. // 接收人
  320. Object receiverUu = jsonObject.get("receiverUu");
  321. Object receiverEnuu = jsonObject.get("receiverEnuu");
  322. if (StringUtils.isEmpty(receiverUu) || StringUtils.isEmpty(receiverEnuu)) {
  323. throw new ParameterMissingException("接收人信息为空");
  324. } else {
  325. message.setReceiverUu(Long.valueOf(String.valueOf(receiverUu)));
  326. message.setReceiverEnuu(Long.valueOf(String.valueOf(receiverEnuu)));
  327. }
  328. // 发送应用
  329. Object producerApp = jsonObject.get("producerApp");
  330. if (StringUtils.isEmpty(producerApp)) {
  331. throw new ParameterMissingException("发送应用为空");
  332. } else {
  333. App app = appDao.findByName(String.valueOf(producerApp));
  334. if (app == null) {
  335. throw new IllegalOperatorException("发送应用不存在");
  336. }
  337. message.setProducerApp(app.getId());
  338. }
  339. // 接收应用
  340. Object consumerType = jsonObject.get("consumerType");
  341. if (StringUtils.isEmpty(consumerType)) {
  342. throw new ParameterMissingException("接收应用类型为空");
  343. } else {
  344. String type = String.valueOf(consumerType);
  345. // 消息接收类型为公共,即所有子应用共享
  346. if (ConsumeType.PUBLIC.equals(type)) {
  347. List<App> apps = appDao.findAll();
  348. message.setConsumerApp(new HashSet<>(apps));
  349. message.setConsumeType(type);
  350. } else {
  351. Object consumerApp = jsonObject.get("consumerApp");
  352. if (consumerApp == null) {
  353. throw new ParameterMissingException("接收应用为空");
  354. } else {
  355. // 取出通过逗号拼接的接收应用
  356. String[] consumers = String.valueOf(consumerApp).split(SplitChar.COMMA);
  357. if (consumers.length < 1) {
  358. throw new ParameterMissingException("接收应用为空");
  359. }
  360. Set<App> consumerApps = new HashSet<>();
  361. for (String consumer : consumers) {
  362. App app = appDao.findByName(consumer);
  363. if (app == null) {
  364. throw new IllegalOperatorException("接收应用不存在");
  365. }
  366. consumerApps.add(app);
  367. }
  368. message.setConsumerApp(consumerApps);
  369. message.setConsumeType(consumers.length > 1 ? ConsumeType.MULTI : ConsumeType.SINGLE);
  370. }
  371. }
  372. }
  373. // 消息类型(暂时未定)
  374. Object type = jsonObject.get("type");
  375. if (!StringUtils.isEmpty(type)) {
  376. message.setType(String.valueOf(type));
  377. }
  378. // 推送类型
  379. Object smsType = jsonObject.get("smsType");
  380. if (StringUtils.isEmpty(smsType)) {
  381. message.setSmsType(SMSType.DONT_SEND);
  382. } else {
  383. message.setSmsType(String.valueOf(smsType));
  384. }
  385. // 备注
  386. Object remark = jsonObject.get("remark");
  387. if (!StringUtils.isEmpty(remark)) {
  388. message.setRemark(String.valueOf(remark));
  389. }
  390. // 来源id
  391. Object sourceId = jsonObject.get("sourceId");
  392. if (!StringUtils.isEmpty(sourceId)) {
  393. message.setSourceId(Long.valueOf(String.valueOf(sourceId)));
  394. }
  395. // 邮件模板
  396. Object mailTemplate = jsonObject.get("mailTemplate");
  397. if (!StringUtils.isEmpty(mailTemplate)) {
  398. message.setMailTemplate(String.valueOf(mailTemplate));
  399. }
  400. // 短信模板
  401. Object smTemplate = jsonObject.get("smTemplate");
  402. if (!StringUtils.isEmpty(smTemplate)) {
  403. message.setSmTemplate(String.valueOf(smTemplate));
  404. }
  405. message.setIsRead(Constant.NO);
  406. message.setCreateTime(new Date());
  407. message.setIsSent(Constant.NO);
  408. messages.add(message);
  409. }
  410. return messages;
  411. }
  412. /**
  413. * 推送消息(调用邮件、短信、IM接口)
  414. * @param messages 消息
  415. * @param consumerApp 消费app
  416. * @return resultMap
  417. */
  418. private Map<String, Object> sendMessageByAPI(List<Message> messages, String consumerApp) {
  419. Map<String, Object> resultMap = new HashMap<>();
  420. if (!CollectionUtils.isEmpty(messages)) {
  421. for (Message message : messages) {
  422. try {
  423. UserView receiver = AccountUtils.getImUserByUserUU(message.getReceiverUu(),
  424. message.getReceiverEnuu());
  425. if (receiver.getName() != null) {
  426. LOGGER.info("接收人:" + receiver.getName());
  427. UserView sender = AccountUtils.getImUserByUserUU(message.getSenderUu(),
  428. message.getSenderEnuu());
  429. if (sender != null && sender.getName() != null && sender.getSpaceName() != null) {
  430. LOGGER.info("发送人:" + sender.getName());
  431. boolean sendSuccess = false;
  432. // 发送邮件
  433. // if (message.getSmsType().contains(SMSType.MAIL)) {
  434. // sendMail(message, receiver);
  435. // }
  436. // 发送短息
  437. if (message.getSmsType().contains(SMSType.SM)) {
  438. LOGGER.info("开始推送短信");
  439. sendSuccess = sendSM(message, receiver, sender);
  440. }
  441. // 发送IM
  442. if (message.getSmsType().contains(SMSType.IM)) {
  443. LOGGER.info("开始推送IM");
  444. sendSuccess = sendIM(message, receiver, consumerApp);
  445. }
  446. // 推送成功
  447. if (sendSuccess) {
  448. pushSuccess(message, receiver, sender);
  449. }
  450. } else {
  451. LOGGER.info("发送人信息为空,uu:" + message.getSenderUu() + ",enuu:" + message.getSenderEnuu());
  452. }
  453. } else {
  454. LOGGER.info("接收人姓名为空,uu:" + message.getReceiverUu() + ",enuu:" + message.getReceiverEnuu());
  455. }
  456. } catch (Exception e) {
  457. message.setIsSent(Constant.ERROR);
  458. LOGGER.info(e.getMessage());
  459. }
  460. }
  461. messageDao.save(messages);
  462. }
  463. return resultMap;
  464. }
  465. /**
  466. * 发送邮件
  467. * @param message 消息
  468. * @param receiver 接收人
  469. */
  470. private void sendMail(Message message, User receiver) {
  471. if (message.getMailTemplate() != null && receiver.getSecondUID() != null) {
  472. HttpHeaders headers = new HttpHeaders();
  473. MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
  474. headers.setContentType(type);
  475. headers.add("Accept", MediaType.APPLICATION_JSON.toString());
  476. JSONObject object = new JSONObject();
  477. object.put("templateId", message.getMailTemplate());
  478. object.put("receiver", receiver.getSecondUID());
  479. object.put("params", message.getContent());
  480. // HttpEntity<String> formEntity = new HttpEntity<String>(, headers);
  481. try {
  482. ResponseWrap responseWrap = HttpUtil.doPost(MAIL_CONSOLE_HOST + MAIL_SEND_URL,
  483. FlexJsonUtil.toJson(object));
  484. } catch (Exception e) {
  485. e.printStackTrace();
  486. }
  487. }
  488. }
  489. /**
  490. * 发送短信
  491. * @param message 消息
  492. * @param receiver 接收人
  493. * @param sender 发送人
  494. * @return 推送成功状态
  495. */
  496. private boolean sendSM(Message message, UserView receiver, UserView sender) {
  497. if (!StringUtils.isEmpty(message.getSmTemplate()) && !StringUtils.isEmpty(receiver.getUid())) {
  498. try {
  499. SmsMessage sms = new SmsMessage();
  500. List<Object> obj = new ArrayList<Object>();
  501. switch (message.getSmTemplate()) {
  502. // 公共询价单,普通短信
  503. case "e14d502a-25b8-40a0-8acf-5c61ae38d763" :
  504. obj.add(receiver.getName());
  505. obj.add(sender.getSpaceName());
  506. obj.add(message.getRemark());
  507. pushSm(sms, message, obj, receiver, sender);
  508. break;
  509. // 公共询价单,UU互联
  510. case "6e094dcf-f2c7-462a-9686-b2d32d684a78" :
  511. obj.add(message.getSourceId());
  512. obj.add(message.getReceiverEnuu());
  513. obj.add(receiver.getUid());
  514. pushSm(sms, message, obj, receiver, sender);
  515. break;
  516. // 公共询价统计
  517. case "e6320a3c-89ac-4c77-a75f-62a727bce654" :
  518. obj.add(receiver.getSpaceName());
  519. obj.add(message.getRemark());
  520. pushSm(sms, message, obj, receiver, sender);
  521. default:
  522. break;
  523. }
  524. return true;
  525. } catch (Exception e) {
  526. LOGGER.info("短信推送异常:" + e.getMessage());
  527. e.printStackTrace();
  528. return false;
  529. }
  530. }
  531. return false;
  532. }
  533. /**
  534. * 调用短信接口
  535. * @param sms 短信model
  536. * @param message 消息
  537. * @param param 短信参数
  538. * @param receiver 接收人
  539. * @param sender 发送人
  540. */
  541. private void pushSm(SmsMessage sms, Message message, List<Object> param, UserView receiver, UserView sender) {
  542. sms.setParams(param);
  543. sms.setReceiver(receiver.getUid());
  544. sms.setTemplateId(message.getSmTemplate());
  545. String response = com.uas.ps.message.util.HttpUtil
  546. .sendPost(messageUrl, FastjsonUtils.toJson(sms));
  547. LOGGER.info("短信推送成功:" + response);
  548. }
  549. /**
  550. * 设置推送送成功
  551. * @param message 消息
  552. * @param receiver 接收人
  553. * @param sender 发送人
  554. */
  555. private void pushSuccess(Message message, UserView receiver, UserView sender) {
  556. message.setIsSent(Constant.YES);
  557. message.setReceiver(FastjsonUtils.toJson(receiver));
  558. message.setSender(FastjsonUtils.toJson(sender));
  559. }
  560. /**
  561. * 发送IM
  562. * @param message 消息
  563. * @param receiver 接收人
  564. * @param consumerApp 消费app
  565. * @return 推送成功状态
  566. */
  567. private boolean sendIM(Message message, UserView receiver, String consumerApp) {
  568. Map<String, Object> params = new HashMap<>();
  569. if (!StringUtils.isEmpty(receiver.getDialectUID())) {
  570. params.put("master", receiver.getSpaceName()); // 账套 公司名称
  571. params.put("userid", receiver.getDialectUID()); // 推送目标用户
  572. params.put("title", message.getType() == null ? "" : message.getType()); // 推送标题
  573. params.put("content", message.getContent()); // 正文
  574. params.put("enUU", message.getReceiverEnuu()); // UU号
  575. params.put("masterId", null);
  576. params.put("url", String.format(PUBLIC_INQUIRY_IM_URL, message.getSourceId(),
  577. message.getReceiverEnuu(), receiver.getUid())); // 跳转链接地址
  578. params.put("pageTitle", message.getType() == null ? "" : message.getType());
  579. params.put("platform", "B2B"); // 系统名称,ERP或B2B
  580. try {
  581. ResponseWrap res = HttpUtil.doPost(PROD_URL, params);
  582. if (res.isSuccess()) {
  583. LOGGER.info("IM推送成功");
  584. return true;
  585. } else {
  586. LOGGER.info("IM推送失败:" + res.getContent());
  587. }
  588. } catch (Exception e) {
  589. e.printStackTrace();
  590. return false;
  591. }
  592. }
  593. return false;
  594. }
  595. }