浏览代码

将消息读取改为jdbcTemplate方式

wangyc 7 年之前
父节点
当前提交
28f5767771
共有 2 个文件被更改,包括 81 次插入61 次删除
  1. 5 0
      pom.xml
  2. 76 61
      src/main/java/com/uas/ps/message/service/impl/MessageServiceImpl.java

+ 5 - 0
pom.xml

@@ -47,6 +47,11 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-web</artifactId>
         </dependency>
+        <!--jdbcTemplate-->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-jdbc</artifactId>
+        </dependency>
         <!--jpa-->
         <dependency>
             <groupId>org.springframework.boot</groupId>

+ 76 - 61
src/main/java/com/uas/ps/message/service/impl/MessageServiceImpl.java

@@ -7,10 +7,6 @@ import com.uas.account.util.AccountUtils;
 import com.uas.account.util.FlexJsonUtil;
 import com.uas.ps.core.page.PageInfo;
 import com.uas.ps.core.page.PageParams;
-import com.uas.ps.core.page.criteria.LogicalExpression;
-import com.uas.ps.core.page.criteria.PredicateUtils;
-import com.uas.ps.core.page.criteria.SimpleExpression;
-import com.uas.ps.core.util.ArrayUtils;
 import com.uas.ps.message.dao.AppDao;
 import com.uas.ps.message.dao.MessageDao;
 import com.uas.ps.message.domain.App;
@@ -26,6 +22,8 @@ import com.uas.ps.message.util.SMSType;
 import com.uas.ps.message.util.SplitChar;
 import com.uas.ps.message.util.account.HttpUtil;
 import com.uas.ps.message.util.account.HttpUtil.ResponseWrap;
+import java.sql.ResultSet;
+import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashMap;
@@ -33,16 +31,14 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import javax.persistence.criteria.CriteriaBuilder;
-import javax.persistence.criteria.CriteriaQuery;
-import javax.persistence.criteria.Predicate;
-import javax.persistence.criteria.Root;
 import org.apache.log4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
-import org.springframework.data.jpa.domain.Specification;
+import org.springframework.data.domain.PageImpl;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.MediaType;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.jdbc.core.RowMapper;
 import org.springframework.stereotype.Service;
 import org.springframework.ui.ModelMap;
 import org.springframework.util.CollectionUtils;
@@ -60,7 +56,9 @@ public class MessageServiceImpl implements MessageService {
 
     private final AppDao appDao;
 
-    private static final Logger logger = Logger.getLogger(Logger.class);
+    private static final Logger LOGGER = Logger.getLogger(Logger.class);
+
+    private final JdbcTemplate jdbcTemplate;
 
 //    private RestTemplate restTemplate;
 
@@ -70,7 +68,8 @@ public class MessageServiceImpl implements MessageService {
 
     private static final String PROD_URL = "https://mobile.ubtob.com/tigase/baiduPush";
 
-    private static final String PUBLIC_INQUIRY_IM_URL= "https://mobile.ubtob.com:8443/openapp/?pagekind=B&id=%s&uu=%s&telephone=%s";
+    private static final String PUBLIC_INQUIRY_IM_URL = "https://mobile.ubtob.com:8443/openapp/?pagekind"
+        + "=B&id=%s&uu=%s&telephone=%s";
     /**
      * 邮件服务主机地址
      */
@@ -91,9 +90,10 @@ public class MessageServiceImpl implements MessageService {
     private final String messageUrl = "http://10.10.100.136:8080/sms/send";
 
     @Autowired
-    public MessageServiceImpl(MessageDao messageDao, AppDao appDao) {
+    public MessageServiceImpl(MessageDao messageDao, AppDao appDao, JdbcTemplate jdbcTemplate) {
         this.messageDao = messageDao;
         this.appDao = appDao;
+        this.jdbcTemplate = jdbcTemplate;
     }
 
     @Override
@@ -112,41 +112,71 @@ public class MessageServiceImpl implements MessageService {
         final Long consumerAppId = consumerAppExists.getId();
 
         // 消息接收人过滤
-        SimpleExpression receiverUuExp = PredicateUtils.eq("receiverUu", Long.valueOf(receiverUu), true);
+//        SimpleExpression receiverUuExp = PredicateUtils.eq("receiverUu", Long.valueOf(receiverUu), true);
         // 消息接收企业过滤
-        SimpleExpression receiverEnuuExp = PredicateUtils.eq("receiverEnuu", Long.valueOf(receiverEnuu), true);
-        SimpleExpression[] simpleExpressions = new SimpleExpression[] {receiverUuExp, receiverEnuuExp};
+//        SimpleExpression receiverEnuuExp = PredicateUtils.eq("receiverEnuu", Long.valueOf(receiverEnuu), true);
+//        SimpleExpression[] simpleExpressions = new SimpleExpression[] {receiverUuExp, receiverEnuuExp};
 
+        String sql = String.format("select * from messages m where ms_receiveruu = %s and ms_receiverenuu = %s ",
+            Long.valueOf(receiverUu), Long.valueOf(receiverEnuu));
         // 读取状态
         if (!StringUtils.isEmpty(isRead)) {
-            SimpleExpression isReadExp = PredicateUtils.eq("isRead", Short.valueOf(isRead), true);
-            simpleExpressions = ArrayUtils.concat(simpleExpressions, new SimpleExpression[] {isReadExp});
+//            SimpleExpression isReadExp = PredicateUtils.eq("isRead", Short.valueOf(isRead), true);
+//            simpleExpressions = ArrayUtils.concat(simpleExpressions, new SimpleExpression[] {isReadExp});
+            sql += String.format(" and ms_isread = %s", Short.valueOf(isRead));
         }
 
         // 关键词搜索
         if (!StringUtils.isEmpty(keyword)) {
-            SimpleExpression contentExp = PredicateUtils.like("content", keyword, true);
-            simpleExpressions = ArrayUtils.concat(simpleExpressions, new SimpleExpression[] {contentExp});
+//            SimpleExpression contentExp = PredicateUtils.like("content", keyword, true);
+//            simpleExpressions = ArrayUtils.concat(simpleExpressions, new SimpleExpression[] {contentExp});
+            sql += String.format(" and ms_content like '%%%s%%'", keyword);
         }
 
-        final LogicalExpression logicalExpression = PredicateUtils.and(simpleExpressions);
+            sql += String.format(" and exists (select 1 from message$consumeapp where app_id = %s and m.ms_id = ms_id)",
+                consumerAppId);
 
+//        final LogicalExpression logicalExpression = PredicateUtils.and(simpleExpressions);
         final PageInfo pageInfo = new PageInfo(pageParams);
-
-        return messageDao.findAll(new Specification<Message>() {
+        List<Message> messageList = jdbcTemplate.query(sql, new RowMapper<Message>() {
             @Override
-            public Predicate toPredicate(Root<Message> root, CriteriaQuery<?> criteriaQuery,
-                CriteriaBuilder criteriaBuilder) {
-                Predicate messagePredicate = criteriaBuilder.and(logicalExpression.toPredicate(root, criteriaQuery,
-                    criteriaBuilder));
-                // 消费应用过滤
-                Predicate consumerAppPredicate = criteriaBuilder.equal(root.join("consumerApp").get("id"),
-                    consumerAppId);
-                Predicate all = criteriaBuilder.and(messagePredicate, consumerAppPredicate);
-                criteriaQuery.where(all);
-                return null;
+            public Message mapRow(ResultSet resultSet, int i) throws SQLException {
+                Message message = new Message();
+                if (resultSet != null) {
+                    message.setId(resultSet.getLong("ms_id"));
+                    message.setConsumeType(resultSet.getString("ms_consumeType"));
+                    message.setContent(resultSet.getString("ms_content"));
+                    message.setCreateTime(resultSet.getDate("ms_createTime"));
+                    message.setIsRead(resultSet.getShort("ms_isread"));
+                    message.setIsSent(resultSet.getShort("ms_issent"));
+                    message.setReceiverEnuu(resultSet.getLong("ms_receiverenuu"));
+                    message.setReceiverUu(resultSet.getLong("ms_receiveruu"));
+                    message.setSenderEnuu(resultSet.getLong("ms_senderenuu"));
+                    message.setSenderUu(resultSet.getLong("ms_senderuu"));
+                    message.setType(resultSet.getString("ms_type"));
+                    message.setRemark(resultSet.getString("ms_remark"));
+                    message.setSourceId(resultSet.getLong("ms_sourceid"));
+                }
+                return message;
             }
-        }, pageInfo);
+        });
+        Long count = jdbcTemplate.queryForObject(sql.replace("*", "count(1)"), Long.class);
+        return new PageImpl<Message>(messageList, pageInfo, count);
+
+//        return messageDao.findAll(new Specification<Message>() {
+//            @Override
+//            public Predicate toPredicate(Root<Message> root, CriteriaQuery<?> criteriaQuery,
+//                CriteriaBuilder criteriaBuilder) {
+//                Predicate messagePredicate = criteriaBuilder.and(logicalExpression.toPredicate(root, criteriaQuery,
+//                    criteriaBuilder));
+//                // 消费应用过滤
+//                Predicate consumerAppPredicate = criteriaBuilder.equal(root.join("consumerApp").get("id"),
+//                    consumerAppId);
+//                Predicate all = criteriaBuilder.and(messagePredicate, consumerAppPredicate);
+//                criteriaQuery.where(all);
+//                return null;
+//            }
+//        }, pageInfo);
     }
 
     @Override
@@ -181,7 +211,7 @@ public class MessageServiceImpl implements MessageService {
             throw new ParameterMissingException("接收应用信息为空");
         }
         App consumerAppExists = appDao.findByName(consumerApp);
-        if (consumerApp == null) {
+        if (consumerAppExists == null) {
             throw new IllegalOperatorException("接收应用不存在");
         }
 
@@ -223,7 +253,7 @@ public class MessageServiceImpl implements MessageService {
             // 获取改应用应接收的未读、未发送的需要推送的消息(取前500条)
             List<Message> messages = messageDao.findByConsumerAppIdAndIsReadAndIsSentNeedToSend(
                 consumerAppExists.getId(), Constant.NO, Constant.NO);
-            logger.info("信息数量:" + messages.size());
+            LOGGER.info("信息数量:" + messages.size());
             Map<String, Object> resultMap = sendMessageByAPI(messages, consumerApp);
             resultMap.put("success", "success");
             return resultMap;
@@ -445,12 +475,12 @@ public class MessageServiceImpl implements MessageService {
                     UserView receiver = AccountUtils.getImUserByUserUU(message.getReceiverUu(),
                         message.getReceiverEnuu());
                     if (receiver.getName() != null) {
-                        logger.info("接收人:" + receiver.getName());
+                        LOGGER.info("接收人:" + receiver.getName());
 
                         UserView sender = AccountUtils.getImUserByUserUU(message.getSenderUu(),
                             message.getSenderEnuu());
                         if (sender != null && sender.getName() != null && sender.getSpaceName() != null) {
-                            logger.info("发送人:" + sender.getName());
+                            LOGGER.info("发送人:" + sender.getName());
 
                             boolean sendSuccess = false;
                             // 发送邮件
@@ -460,13 +490,13 @@ public class MessageServiceImpl implements MessageService {
 
                             // 发送短息
                             if (message.getSmsType().contains(SMSType.SM)) {
-                                logger.info("开始推送短信");
+                                LOGGER.info("开始推送短信");
                                 sendSuccess = sendSM(message, receiver, sender);
                             }
 
                             // 发送IM
                             if (message.getSmsType().contains(SMSType.IM)) {
-                                logger.info("开始推送IM");
+                                LOGGER.info("开始推送IM");
                                 sendSuccess = sendIM(message, receiver, consumerApp);
                             }
 
@@ -475,14 +505,14 @@ public class MessageServiceImpl implements MessageService {
                                 pushSuccess(message, receiver, sender);
                             }
                         } else {
-                            logger.info("发送人信息为空,uu:" + message.getSenderUu() + ",enuu:" + message.getSenderEnuu());
+                            LOGGER.info("发送人信息为空,uu:" + message.getSenderUu() + ",enuu:" + message.getSenderEnuu());
                         }
                     } else {
-                        logger.info("接收人姓名为空,uu:" + message.getReceiverUu() + ",enuu:" + message.getReceiverEnuu());
+                        LOGGER.info("接收人姓名为空,uu:" + message.getReceiverUu() + ",enuu:" + message.getReceiverEnuu());
                     }
                 } catch (Exception e) {
                     message.setIsSent(Constant.ERROR);
-                    logger.info(e.getMessage());
+                    LOGGER.info(e.getMessage());
                 }
             }
             messageDao.save(messages);
@@ -556,7 +586,7 @@ public class MessageServiceImpl implements MessageService {
                 }
                 return true;
             } catch (Exception e) {
-                logger.info("短信推送异常:" + e.getMessage());
+                LOGGER.info("短信推送异常:" + e.getMessage());
                 e.printStackTrace();
                 return false;
             }
@@ -578,22 +608,7 @@ public class MessageServiceImpl implements MessageService {
         sms.setTemplateId(message.getSmTemplate());
         String response = com.uas.ps.message.util.HttpUtil
             .sendPost(messageUrl, FastjsonUtils.toJson(sms));
-        logger.info("短信推送成功:" + response);
-    }
-
-
-    public static void main(String[] args) {
-        SmsMessage smsMessage = new SmsMessage();
-        List<Object> param = new ArrayList<>();
-        param.add("测试公司");
-        param.add("测试型号");
-
-        smsMessage.setParams(param);
-        smsMessage.setReceiver("13632823241");
-        smsMessage.setTemplateId("7879bfda-f871-4a95-9430-54d1ea00b198");
-        String response = com.uas.ps.message.util.HttpUtil
-            .sendPost("http://10.10.100.136:8080/sms/send", FastjsonUtils.toJson(smsMessage));
-        System.out.println(response);
+        LOGGER.info("短信推送成功:" + response);
     }
 
     /**
@@ -631,10 +646,10 @@ public class MessageServiceImpl implements MessageService {
             try {
                 ResponseWrap res = HttpUtil.doPost(PROD_URL, params);
                 if (res.isSuccess()) {
-                    logger.info("IM推送成功");
+                    LOGGER.info("IM推送成功");
                     return true;
                 } else {
-                    logger.info("IM推送失败:" + res.getContent());
+                    LOGGER.info("IM推送失败:" + res.getContent());
                 }
             } catch (Exception e) {
                 e.printStackTrace();