소스 검색

邮箱关联过慢先去除

yzc 1 년 전
부모
커밋
564dfaae0e

+ 3 - 1
hx-mail/src/main/java/com/fjhx/mail/mapper/enterprise/EnterpriseMessageMapper.java

@@ -20,6 +20,8 @@ import org.apache.ibatis.annotations.Param;
 @Mapper
 public interface EnterpriseMessageMapper extends BaseMapper<EnterpriseMessage> {
 
-    Page<MessageVo> getPage(@Param("page") Page<EnterpriseMessage> page, @Param("ew") QueryWrapper<EnterpriseMessage> wrapper, @Param("tenantId") String tenantId);
+    Page<MessageVo> getPage(@Param("page") Page<EnterpriseMessage> page, @Param("ew") QueryWrapper<EnterpriseMessage> wrapper,
+                            @Param("tenantId") String tenantId,
+                            @Param("keyword") String keyword);
 
 }

+ 40 - 24
hx-mail/src/main/java/com/fjhx/mail/service/message/impl/InfoServiceImpl.java

@@ -9,8 +9,10 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fjhx.common.constant.SourceConstant;
+import com.fjhx.customer.entity.customer.po.CustomerUser;
 import com.fjhx.customer.entity.customer.vo.CustomerVo;
 import com.fjhx.customer.service.customer.CustomerService;
+import com.fjhx.customer.service.customer.CustomerUserService;
 import com.fjhx.mail.config.MailServiceConfig;
 import com.fjhx.mail.entity.dto.GetMessagePageDto;
 import com.fjhx.mail.entity.enterprise.po.EnterpriseDomain;
@@ -84,6 +86,8 @@ public class InfoServiceImpl implements InfoService {
     private PersonalMessageMapper personalMessageMapper;
     @Autowired
     private CustomerService customerService;
+    @Autowired
+    private CustomerUserService customerUserService;
 
     @Override
     public List<SysUser> getUserList() {
@@ -247,6 +251,7 @@ public class InfoServiceImpl implements InfoService {
 
     @Override
     public Object getMessagePage(GetMessagePageDto dto) {
+        String keyword = dto.getKeyword();
 
         Page<MessageVo> page;
 
@@ -264,15 +269,14 @@ public class InfoServiceImpl implements InfoService {
             }
 
             wrapper.eq(ObjectUtil.isNotEmpty(dto.getFolderId()), "pm.folder_id", dto.getFolderId());
-            wrapper.and(ObjectUtil.isNotEmpty(dto.getKeyword()), q1 -> q1
-                    .like("pm.from_email", dto.getKeyword())
-                    .or().like("pm.subject", dto.getKeyword())
-                    .or().like("pmc.content", dto.getKeyword())
-                    .or().like("c.name", dto.getKeyword())
-                    .or().like("cu.name", dto.getKeyword())
-                    .or().like("pm.from_personal_name", dto.getKeyword())
+            wrapper.and(ObjectUtil.isNotEmpty(keyword), q1 -> q1
+                            .like("pm.from_email", keyword)
+                            .or().like("pm.subject", keyword)
+//                    .or().like("pmc.content", keyword)
+//                    .or().like("c.name", keyword)
+//                    .or().like("cu.name", keyword)
+                            .or().like("pm.from_personal_name", keyword)
             );
-            wrapper.groupBy("pm.id");
             wrapper.orderByDesc("pm.send_date");
             page = personalMessageMapper.getPage(dto.getPage(), wrapper, SecurityUtils.getTenantId());
 
@@ -294,17 +298,22 @@ public class InfoServiceImpl implements InfoService {
             wrapper.eq(ObjectUtil.isNotEmpty(dto.getMailboxId()), "em.mailbox_id", dto.getMailboxId());
 
             wrapper.eq(ObjectUtil.isNotEmpty(dto.getFolderId()), "em.folder_id", dto.getFolderId());
-            wrapper.and(ObjectUtil.isNotEmpty(dto.getKeyword()), q1 -> q1
-                    .like("em.from_email", dto.getKeyword())
-                    .or().like("em.subject", dto.getKeyword())
-                    .or().like("emc.content", dto.getKeyword())
-                    .or().like("c.name", dto.getKeyword())
-                    .or().like("cu.name", dto.getKeyword())
-                    .or().like("em.from_personal_name", dto.getKeyword())
-            );
-            wrapper.groupBy("em.id");
+
+            if (ObjectUtil.isNotEmpty(keyword)) {
+
+                wrapper.and(ObjectUtil.isNotEmpty(dto.getKeyword()), q1 -> q1
+                                .like("em.from_email", dto.getKeyword())
+                                .or().like("em.subject", dto.getKeyword())
+//                    .or().like("emc.content", dto.getKeyword())
+//                    .or().like("c.name", dto.getKeyword())
+//                    .or().like("cu.name", dto.getKeyword())
+                                .or().like("em.from_personal_name", dto.getKeyword())
+//                    .or().apply("em.id in (select message_id from enterprise_message_content where content like CONCAT('%','" + keyword + "','%'))")
+                );
+            }
             wrapper.orderByDesc("em.send_date");
-            page = enterpriseMessageMapper.getPage(dto.getPage(), wrapper, SecurityUtils.getTenantId());
+            page = enterpriseMessageMapper
+                    .getPage(dto.getPage(), wrapper, SecurityUtils.getTenantId(), keyword);
 
             if (page.getSize() == 0) {
                 return page;
@@ -319,13 +328,20 @@ public class InfoServiceImpl implements InfoService {
         }
 
         List<MessageVo> records = page.getRecords();
-        List<Long> customerIds = records.stream().map(MessageVo::getCustomerId).collect(Collectors.toList());
 
-        //赋值客户信息
-        List<CustomerVo> customerInfoByIds = customerService.getCustomerInfoByIds(customerIds);
-        Map<Long, CustomerVo> customerInfoMap = customerInfoByIds.stream().collect(Collectors.toMap(CustomerVo::getId, Function.identity()));
-        for (MessageVo record : records) {
-            record.setCustomerInfo(customerInfoMap.get(record.getCustomerId()));
+
+        List<String> eMailList = records.stream().map(MessageVo::getFromEmail).distinct().collect(Collectors.toList());
+        if (ObjectUtil.isNotEmpty(eMailList)) {
+            List<Long> customerIds = customerUserService.listObject(CustomerUser::getCustomerId, q -> q.in(CustomerUser::getEmail, eMailList));
+            if (ObjectUtil.isEmpty(customerIds)) {
+                return R.ok(page);
+            }
+            //赋值客户信息
+            List<CustomerVo> customerInfoByIds = customerService.getCustomerInfoByIds(customerIds);
+            Map<Long, CustomerVo> customerInfoMap = customerInfoByIds.stream().collect(Collectors.toMap(CustomerVo::getId, Function.identity()));
+            for (MessageVo record : records) {
+                record.setCustomerInfo(customerInfoMap.get(record.getCustomerId()));
+            }
         }
 
         return R.ok(page);

+ 22 - 12
hx-mail/src/main/java/com/fjhx/mail/service/my/impl/MyFolderMessageServiceImpl.java

@@ -3,8 +3,10 @@ package com.fjhx.mail.service.my.impl;
 import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.customer.entity.customer.po.CustomerUser;
 import com.fjhx.customer.entity.customer.vo.CustomerVo;
 import com.fjhx.customer.service.customer.CustomerService;
+import com.fjhx.customer.service.customer.CustomerUserService;
 import com.fjhx.mail.entity.my.dto.MyFolderMessageAddBathDto;
 import com.fjhx.mail.entity.my.dto.MyFolderMessageDto;
 import com.fjhx.mail.entity.my.dto.MyFolderMessageSelectDto;
@@ -36,6 +38,8 @@ public class MyFolderMessageServiceImpl extends ServiceImpl<MyFolderMessageMappe
 
     @Autowired
     private CustomerService customerService;
+    @Autowired
+    private CustomerUserService customerUserService;
 
     @Override
     public Page<MessageVo> getPage(MyFolderMessageSelectDto dto) {
@@ -43,26 +47,32 @@ public class MyFolderMessageServiceImpl extends ServiceImpl<MyFolderMessageMappe
         wrapper.eq("mfm", MyFolderMessage::getMyFolderId, dto.getMyFolderId());
 
         wrapper.and(ObjectUtil.isNotEmpty(dto.getKeyword()), q1 -> q1
-                .like("m.from_email", dto.getKeyword())
-                .or().like("m.subject", dto.getKeyword())
-                .or().like("mc.content", dto.getKeyword())
-                .or().like("c.name", dto.getKeyword())
-                .or().like("cu.name", dto.getKeyword())
-                .or().like("m.from_personal_name", dto.getKeyword())
+                        .like("m.from_email", dto.getKeyword())
+                        .or().like("m.subject", dto.getKeyword())
+//                .or().like("mc.content", dto.getKeyword())
+//                .or().like("c.name", dto.getKeyword())
+//                .or().like("cu.name", dto.getKeyword())
+                        .or().like("m.from_personal_name", dto.getKeyword())
         );
-        wrapper.groupBy("m.id");
 
         wrapper.orderByDesc("mfm", MyFolderMessage::getUpdateTime);
         Page<MessageVo> page = this.baseMapper.getPage(dto.getPage(), wrapper, dto.getType(), SecurityUtils.getTenantId());
 
         List<MessageVo> records = page.getRecords();
-        List<Long> customerIds = records.stream().map(MessageVo::getCustomerId).collect(Collectors.toList());
 
         //赋值客户信息
-        List<CustomerVo> customerInfoByIds = customerService.getCustomerInfoByIds(customerIds);
-        Map<Long, CustomerVo> customerInfoMap = customerInfoByIds.stream().collect(Collectors.toMap(CustomerVo::getId, Function.identity()));
-        for (MessageVo record : records) {
-            record.setCustomerInfo(customerInfoMap.get(record.getCustomerId()));
+        List<String> eMailList = records.stream().map(MessageVo::getFromEmail).distinct().collect(Collectors.toList());
+        if (ObjectUtil.isNotEmpty(eMailList)) {
+            List<Long> customerIds = customerUserService.listObject(CustomerUser::getCustomerId, q -> q.in(CustomerUser::getEmail, eMailList));
+            if (ObjectUtil.isEmpty(customerIds)) {
+                return page;
+            }
+            //赋值客户信息
+            List<CustomerVo> customerInfoByIds = customerService.getCustomerInfoByIds(customerIds);
+            Map<Long, CustomerVo> customerInfoMap = customerInfoByIds.stream().collect(Collectors.toMap(CustomerVo::getId, Function.identity()));
+            for (MessageVo record : records) {
+                record.setCustomerInfo(customerInfoMap.get(record.getCustomerId()));
+            }
         }
 
         return page;

+ 22 - 12
hx-mail/src/main/java/com/fjhx/mail/service/my/impl/MyTagMessageServiceImpl.java

@@ -3,8 +3,10 @@ package com.fjhx.mail.service.my.impl;
 import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.customer.entity.customer.po.CustomerUser;
 import com.fjhx.customer.entity.customer.vo.CustomerVo;
 import com.fjhx.customer.service.customer.CustomerService;
+import com.fjhx.customer.service.customer.CustomerUserService;
 import com.fjhx.mail.entity.my.dto.MyTagMessageAddBathDto;
 import com.fjhx.mail.entity.my.dto.MyTagMessageDto;
 import com.fjhx.mail.entity.my.dto.MyTagMessageSelectDto;
@@ -37,6 +39,8 @@ public class MyTagMessageServiceImpl extends ServiceImpl<MyTagMessageMapper, MyT
 
     @Autowired
     private CustomerService customerService;
+    @Autowired
+    private CustomerUserService customerUserService;
 
     @Override
     public Page<MessageVo> getPage(MyTagMessageSelectDto dto) {
@@ -44,26 +48,32 @@ public class MyTagMessageServiceImpl extends ServiceImpl<MyTagMessageMapper, MyT
         wrapper.eq("mtm", MyTagMessage::getMyTagId, dto.getMyTagId());
 
         wrapper.and(ObjectUtil.isNotEmpty(dto.getKeyword()), q1 -> q1
-                .like("m.from_email", dto.getKeyword())
-                .or().like("m.subject", dto.getKeyword())
-                .or().like("mc.content", dto.getKeyword())
-                .or().like("c.name", dto.getKeyword())
-                .or().like("cu.name", dto.getKeyword())
-                .or().like("m.from_personal_name", dto.getKeyword())
+                        .like("m.from_email", dto.getKeyword())
+                        .or().like("m.subject", dto.getKeyword())
+//                .or().like("mc.content", dto.getKeyword())
+//                .or().like("c.name", dto.getKeyword())
+//                .or().like("cu.name", dto.getKeyword())
+                        .or().like("m.from_personal_name", dto.getKeyword())
         );
-        wrapper.groupBy("m.id");
 
         wrapper.orderByDesc("mtm", MyTagMessage::getUpdateTime);
         Page<MessageVo> page = this.baseMapper.getPage(dto.getPage(), wrapper, dto.getType(), SecurityUtils.getTenantId());
 
         List<MessageVo> records = page.getRecords();
-        List<Long> customerIds = records.stream().map(MessageVo::getCustomerId).collect(Collectors.toList());
 
         //赋值客户信息
-        List<CustomerVo> customerInfoByIds = customerService.getCustomerInfoByIds(customerIds);
-        Map<Long, CustomerVo> customerInfoMap = customerInfoByIds.stream().collect(Collectors.toMap(CustomerVo::getId, Function.identity()));
-        for (MessageVo record : records) {
-            record.setCustomerInfo(customerInfoMap.get(record.getCustomerId()));
+        List<String> eMailList = records.stream().map(MessageVo::getFromEmail).distinct().collect(Collectors.toList());
+        if (ObjectUtil.isNotEmpty(eMailList)) {
+            List<Long> customerIds = customerUserService.listObject(CustomerUser::getCustomerId, q -> q.in(CustomerUser::getEmail, eMailList));
+            if (ObjectUtil.isEmpty(customerIds)) {
+                return page;
+            }
+            //赋值客户信息
+            List<CustomerVo> customerInfoByIds = customerService.getCustomerInfoByIds(customerIds);
+            Map<Long, CustomerVo> customerInfoMap = customerInfoByIds.stream().collect(Collectors.toMap(CustomerVo::getId, Function.identity()));
+            for (MessageVo record : records) {
+                record.setCustomerInfo(customerInfoMap.get(record.getCustomerId()));
+            }
         }
 
         return page;

+ 1 - 9
hx-mail/src/main/resources/mapper/enterprise/EnterpriseMessageMapper.xml

@@ -2,16 +2,8 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.fjhx.mail.mapper.enterprise.EnterpriseMessageMapper">
     <select id="getPage" resultType="com.fjhx.mail.entity.my.vo.MessageVo">
-        SELECT em.*,
-               emc.content,
-               emc.mime_type,
-               cu.customer_id
+        SELECT em.*
         FROM enterprise_message em
-                 LEFT JOIN enterprise_message_content emc ON emc.message_id = em.id
-                 LEFT JOIN bytesailing_customer.customer_user cu
-                           ON (em.from_email = cu.email OR FIND_IN_SET(cu.email, em.recipients)) and cu.del_flag = 0 and
-                              cu.tenant_id = #{tenantId}
-                 LEFT JOIN bytesailing_customer.customer c ON cu.customer_id = c.id and c.del_flag = 0
             ${ew.customSqlSegment}
     </select>
 </mapper>

+ 0 - 13
hx-mail/src/main/resources/mapper/my/MyFolderMessageMapper.xml

@@ -11,7 +11,6 @@
         m.from_type,
         m.send_date,
         mfm.id myFolderMessageId,
-        cu.customer_id,
         m.is_attachments,
         m.uid
         from my_folder_message mfm
@@ -23,18 +22,6 @@
             enterprise_message
         </if>
         m on m.id = mfm.message_id
-        LEFT JOIN
-        <if test="type eq 1">
-            personal_message_content
-        </if>
-        <if test="type eq 2">
-            enterprise_message_content
-        </if>
-        mc ON mc.message_id = m.id
-        LEFT JOIN bytesailing_customer.customer_user cu
-        ON (m.from_email = cu.email OR FIND_IN_SET(cu.email, m.recipients)) and cu.del_flag = 0 and cu.tenant_id =
-        #{tenantId}
-        LEFT JOIN bytesailing_customer.customer c ON cu.customer_id = c.id and c.del_flag = 0
         ${ew.customSqlSegment}
     </select>
 </mapper>

+ 0 - 13
hx-mail/src/main/resources/mapper/my/MyTagMessageMapper.xml

@@ -10,7 +10,6 @@
         m.from_type,
         m.send_date,
         mtm.id myTagMessageId,
-        cu.customer_id,
         m.is_attachments,
         m.uid
         from my_tag_message mtm
@@ -22,18 +21,6 @@
             enterprise_message
         </if>
         m on m.id = mtm.message_id
-        LEFT JOIN
-        <if test="type eq 1">
-            personal_message_content
-        </if>
-        <if test="type eq 2">
-            enterprise_message_content
-        </if>
-        mc ON mc.message_id = m.id
-        LEFT JOIN bytesailing_customer.customer_user cu
-        ON (m.from_email = cu.email OR FIND_IN_SET(cu.email, m.recipients)) and cu.del_flag = 0 and cu.tenant_id =
-        #{tenantId}
-        LEFT JOIN bytesailing_customer.customer c ON cu.customer_id = c.id and c.del_flag = 0
         ${ew.customSqlSegment}
     </select>
 </mapper>

+ 1 - 9
hx-mail/src/main/resources/mapper/personal/PersonalMessageMapper.xml

@@ -2,16 +2,8 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.fjhx.mail.mapper.personal.PersonalMessageMapper">
     <select id="getPage" resultType="com.fjhx.mail.entity.my.vo.MessageVo">
-        SELECT pm.*,
-               pmc.content,
-               pmc.mime_type,
-               cu.customer_id
+        SELECT pm.*
         FROM personal_message pm
-                 LEFT JOIN personal_message_content pmc ON pmc.message_id = pm.id
-                 LEFT JOIN bytesailing_customer.customer_user cu
-                           ON (pm.from_email = cu.email OR FIND_IN_SET(cu.email, pm.recipients)) and cu.del_flag = 0 and
-                              cu.tenant_id = #{tenantId}
-                 LEFT JOIN bytesailing_customer.customer c ON cu.customer_id = c.id and c.del_flag = 0
             ${ew.customSqlSegment}
     </select>
 </mapper>