MessageServiceImpl.java 28 KB

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