Просмотр исходного кода

邮件列表添加搜索已经客户信息

yzc 1 год назад
Родитель
Сommit
b0b1cd0a32

+ 4 - 0
hx-customer/src/main/java/com/fjhx/customer/service/customer/CustomerService.java

@@ -91,4 +91,8 @@ public interface CustomerService extends BaseService<Customer> {
     Map<String, Object> tagStatistics(CustomerSelectDto customerDto);
 
 
+    /**
+     * 根据客户id获取客户信息
+     */
+    List<CustomerVo> getCustomerInfoByIds(List<Long> customerIds);
 }

+ 21 - 0
hx-customer/src/main/java/com/fjhx/customer/service/customer/impl/CustomerServiceImpl.java

@@ -529,4 +529,25 @@ public class CustomerServiceImpl extends ServiceImpl<CustomerMapper, Customer> i
 
         return customerCodeAndCountryId;
     }
+
+    @Override
+    public List<CustomerVo> getCustomerInfoByIds(List<Long> customerIds) {
+        if (ObjectUtil.isEmpty(customerIds)) {
+            return new ArrayList<>();
+        }
+        List<Customer> customerList = this.list(q -> q.in(Customer::getId, customerIds));
+        if (ObjectUtil.isEmpty(customerList)) {
+            return new ArrayList<>();
+        }
+        List<CustomerVo> customerVos = BeanUtil.copyToList(customerList, CustomerVo.class);
+        Map<Long, List<CustomerUser>> customerUserMap = customerUserService.mapKGroup(CustomerUser::getCustomerId,
+                q -> q.in(CustomerUser::getCustomerId, customerIds));
+        for (CustomerVo customerVo : customerVos) {
+            customerVo.setCustomerUserList(customerUserMap.get(customerVo.getId()));
+        }
+        //赋值国家信息
+        CustomizeAreaUtil.setAreaName(customerVos);
+
+        return customerVos;
+    }
 }

+ 2 - 2
hx-mail/src/main/java/com/fjhx/mail/controller/message/MailController.java

@@ -12,6 +12,7 @@ import com.fjhx.mail.entity.message.dto.SendDto;
 import com.fjhx.mail.entity.message.dto.SetSeenDto;
 import com.fjhx.mail.service.message.InfoService;
 import com.ruoyi.common.annotation.NonInterception;
+import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.utils.SecurityUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -44,8 +45,7 @@ public class MailController {
     public Object getMessagePage(@RequestBody JSONObject dtoJson) {
         dtoJson.remove("id");//解决前端传的字符串id
         GetMessagePageDto dto = BeanUtil.copyProperties(dtoJson, GetMessagePageDto.class);
-        return infoService.getMessagePage(dto);
-
+        return R.ok(infoService.getMessagePage(dto));
 
 //        String post = HttpUtil.post(MailServiceConfig.urlPrefix + "getMessagePage", JSONObject.toJSONString(dto));
 //        return JSON.parseObject(post);

+ 16 - 0
hx-mail/src/main/java/com/fjhx/mail/entity/my/vo/MessageVo.java

@@ -1,5 +1,6 @@
 package com.fjhx.mail.entity.my.vo;
 
+import com.fjhx.customer.entity.customer.vo.CustomerVo;
 import lombok.Getter;
 import lombok.Setter;
 
@@ -54,4 +55,19 @@ public class MessageVo {
      */
     private Long myTagMessageId;
 
+    /**
+     * 客户id
+     */
+    private Long customerId;
+
+    /**
+     * 是否有附件 1是0否
+     */
+    private Integer isAttachments;
+
+    /**
+     * 客户信息
+     */
+    private CustomerVo customerInfo;
+
 }

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

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fjhx.mail.entity.enterprise.po.EnterpriseMessage;
+import com.fjhx.mail.entity.my.vo.MessageVo;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
@@ -19,6 +20,6 @@ import org.apache.ibatis.annotations.Param;
 @Mapper
 public interface EnterpriseMessageMapper extends BaseMapper<EnterpriseMessage> {
 
-    Page<EnterpriseMessage> getPage(@Param("page") Page<EnterpriseMessage> page, @Param("ew") QueryWrapper<EnterpriseMessage> wrapper);
+    Page<MessageVo> getPage(@Param("page") Page<EnterpriseMessage> page, @Param("ew") QueryWrapper<EnterpriseMessage> wrapper, @Param("tenantId") String tenantId);
 
 }

+ 1 - 1
hx-mail/src/main/java/com/fjhx/mail/mapper/my/MyFolderMessageMapper.java

@@ -23,6 +23,6 @@ public interface MyFolderMessageMapper extends BaseMapper<MyFolderMessage> {
      */
     Page<MessageVo> getPage(@Param("page") Page<Object> page,
                             @Param("ew") IWrapper<MyFolderMessage> wrapper,
-                            @Param("type") Integer type);
+                            @Param("type") Integer type, @Param("tenantId") String tenantId);
 
 }

+ 1 - 1
hx-mail/src/main/java/com/fjhx/mail/mapper/my/MyTagMessageMapper.java

@@ -20,6 +20,6 @@ public interface MyTagMessageMapper extends BaseMapper<MyTagMessage> {
 
     Page<MessageVo> getPage(@Param("page") Page<Object> page,
                             @Param("ew") IWrapper<MyTagMessage> wrapper,
-                            @Param("type") Integer type);
+                            @Param("type") Integer type, @Param("tenantId") String tenantId);
 
 }

+ 2 - 1
hx-mail/src/main/java/com/fjhx/mail/mapper/personal/PersonalMessageMapper.java

@@ -3,6 +3,7 @@ package com.fjhx.mail.mapper.personal;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.mail.entity.my.vo.MessageVo;
 import com.fjhx.mail.entity.personal.po.PersonalMessage;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
@@ -19,6 +20,6 @@ import org.apache.ibatis.annotations.Param;
 @Mapper
 public interface PersonalMessageMapper extends BaseMapper<PersonalMessage> {
 
-    Page<PersonalMessage> getPage(@Param("page") Page<PersonalMessage> page, @Param("ew") QueryWrapper<PersonalMessage> wrapper);
+    Page<MessageVo> getPage(@Param("page") Page<PersonalMessage> page, @Param("ew") QueryWrapper<PersonalMessage> wrapper, @Param("tenantId") String tenantId);
 
 }

+ 25 - 12
hx-mail/src/main/java/com/fjhx/mail/service/message/impl/InfoServiceImpl.java

@@ -9,6 +9,8 @@ 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.vo.CustomerVo;
+import com.fjhx.customer.service.customer.CustomerService;
 import com.fjhx.mail.config.MailServiceConfig;
 import com.fjhx.mail.entity.dto.GetMessagePageDto;
 import com.fjhx.mail.entity.enterprise.po.EnterpriseDomain;
@@ -36,7 +38,6 @@ import com.fjhx.mail.service.personal.PersonalMessageService;
 import com.ruoyi.common.core.domain.entity.SysDept;
 import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.exception.ServiceException;
-import com.ruoyi.common.utils.PageWrapper;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.system.service.ISysDeptService;
 import com.ruoyi.system.service.ISysUserService;
@@ -44,6 +45,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.*;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 @Service
@@ -79,6 +81,8 @@ public class InfoServiceImpl implements InfoService {
     private EnterpriseMessageMapper enterpriseMessageMapper;
     @Autowired
     private PersonalMessageMapper personalMessageMapper;
+    @Autowired
+    private CustomerService customerService;
 
     @Override
     public List<SysUser> getUserList() {
@@ -235,7 +239,8 @@ public class InfoServiceImpl implements InfoService {
 
     @Override
     public Object getMessagePage(GetMessagePageDto dto) {
-        PageWrapper<MessageVo> pageWrapper;
+
+        Page<MessageVo> page;
 
         // 个人邮箱
         if (dto.getType().equals(1)) {
@@ -249,13 +254,12 @@ public class InfoServiceImpl implements InfoService {
                     .or().like("cu.name", dto.getKeyword())
                     .or().like("pm.from_personal_name", dto.getKeyword())
             );
+            wrapper.groupBy("pm.id");
             wrapper.orderByDesc("pm.send_date");
-            Page<PersonalMessage> page = personalMessageMapper.getPage(dto.getPage(), wrapper);
-
-            pageWrapper = new PageWrapper<>(page, MessageVo.class);
+            page = personalMessageMapper.getPage(dto.getPage(), wrapper, SecurityUtils.getTenantId());
 
             if (page.getSize() == 0) {
-                return pageWrapper;
+                return page;
             }
 
             PersonalFolder personalFolder = personalFolderService.getById(dto.getFolderId());
@@ -276,14 +280,12 @@ public class InfoServiceImpl implements InfoService {
                     .or().like("cu.name", dto.getKeyword())
                     .or().like("em.from_personal_name", dto.getKeyword())
             );
+            wrapper.groupBy("em.id");
             wrapper.orderByDesc("em.send_date");
-            Page<EnterpriseMessage> page = enterpriseMessageMapper.getPage(dto.getPage(), wrapper);
-
-
-            pageWrapper = new PageWrapper<>(page, MessageVo.class);
+            page = enterpriseMessageMapper.getPage(dto.getPage(), wrapper, SecurityUtils.getTenantId());
 
             if (page.getSize() == 0) {
-                return pageWrapper;
+                return page;
             }
 
             EnterpriseFolder enterpriseFolder = enterpriseFolderService.getById(dto.getFolderId());
@@ -291,7 +293,18 @@ public class InfoServiceImpl implements InfoService {
                 throw new ServiceException("文件夹已被删除");
             }
         }
-        return pageWrapper;
+
+        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()));
+        }
+
+        return page;
     }
 
 

+ 34 - 1
hx-mail/src/main/java/com/fjhx/mail/service/my/impl/MyFolderMessageServiceImpl.java

@@ -1,7 +1,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.vo.CustomerVo;
+import com.fjhx.customer.service.customer.CustomerService;
 import com.fjhx.mail.entity.my.dto.MyFolderMessageAddBathDto;
 import com.fjhx.mail.entity.my.dto.MyFolderMessageDto;
 import com.fjhx.mail.entity.my.dto.MyFolderMessageSelectDto;
@@ -9,10 +12,14 @@ import com.fjhx.mail.entity.my.po.MyFolderMessage;
 import com.fjhx.mail.entity.my.vo.MessageVo;
 import com.fjhx.mail.mapper.my.MyFolderMessageMapper;
 import com.fjhx.mail.service.my.MyFolderMessageService;
+import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.wrapper.IWrapper;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
+import java.util.Map;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 
@@ -27,12 +34,38 @@ import java.util.stream.Collectors;
 @Service
 public class MyFolderMessageServiceImpl extends ServiceImpl<MyFolderMessageMapper, MyFolderMessage> implements MyFolderMessageService {
 
+    @Autowired
+    private CustomerService customerService;
+
     @Override
     public Page<MessageVo> getPage(MyFolderMessageSelectDto dto) {
         IWrapper<MyFolderMessage> wrapper = getWrapper();
         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())
+        );
+        wrapper.groupBy("m.id");
+
         wrapper.orderByDesc("mfm", MyFolderMessage::getUpdateTime);
-        return this.baseMapper.getPage(dto.getPage(), wrapper, dto.getType());
+        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()));
+        }
+
+        return page;
     }
 
     @Override

+ 34 - 1
hx-mail/src/main/java/com/fjhx/mail/service/my/impl/MyTagMessageServiceImpl.java

@@ -1,7 +1,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.vo.CustomerVo;
+import com.fjhx.customer.service.customer.CustomerService;
 import com.fjhx.mail.entity.my.dto.MyTagMessageAddBathDto;
 import com.fjhx.mail.entity.my.dto.MyTagMessageDto;
 import com.fjhx.mail.entity.my.dto.MyTagMessageSelectDto;
@@ -10,10 +13,14 @@ import com.fjhx.mail.entity.my.vo.MessageVo;
 import com.fjhx.mail.mapper.my.MyTagMessageMapper;
 import com.fjhx.mail.service.my.MyTagMessageService;
 import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.wrapper.IWrapper;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
+import java.util.Map;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 
@@ -28,12 +35,38 @@ import java.util.stream.Collectors;
 @Service
 public class MyTagMessageServiceImpl extends ServiceImpl<MyTagMessageMapper, MyTagMessage> implements MyTagMessageService {
 
+    @Autowired
+    private CustomerService customerService;
+
     @Override
     public Page<MessageVo> getPage(MyTagMessageSelectDto dto) {
         IWrapper<MyTagMessage> wrapper = getWrapper();
         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())
+        );
+        wrapper.groupBy("m.id");
+
         wrapper.orderByDesc("mtm", MyTagMessage::getUpdateTime);
-        return this.baseMapper.getPage(dto.getPage(), wrapper, dto.getType());
+        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()));
+        }
+
+        return page;
     }
 
     @Override

+ 4 - 3
hx-mail/src/main/resources/mapper/enterprise/EnterpriseMessageMapper.xml

@@ -1,15 +1,16 @@
 <?xml version="1.0" encoding="UTF-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.enterprise.po.EnterpriseMessage">
+    <select id="getPage" resultType="com.fjhx.mail.entity.my.vo.MessageVo">
         SELECT em.*,
                emc.content,
                emc.mime_type,
                cu.customer_id
         FROM enterprise_message em
-                 LEFT OUTER JOIN enterprise_message_content emc ON emc.message_id = em.id
+                 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
+                           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>

+ 14 - 1
hx-mail/src/main/resources/mapper/my/MyFolderMessageMapper.xml

@@ -10,7 +10,8 @@
         m.from_personal_name,
         m.from_type,
         m.send_date,
-        mfm.id myFolderMessageId
+        mfm.id myFolderMessageId,
+        cu.customer_id
         from my_folder_message mfm
         left join
         <if test="type eq 1">
@@ -20,6 +21,18 @@
             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>

+ 14 - 1
hx-mail/src/main/resources/mapper/my/MyTagMessageMapper.xml

@@ -9,7 +9,8 @@
         m.from_personal_name,
         m.from_type,
         m.send_date,
-        mtm.id myTagMessageId
+        mtm.id myTagMessageId,
+        cu.customer_id
         from my_tag_message mtm
         left join
         <if test="type eq 1">
@@ -19,6 +20,18 @@
             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>

+ 4 - 3
hx-mail/src/main/resources/mapper/personal/PersonalMessageMapper.xml

@@ -1,15 +1,16 @@
 <?xml version="1.0" encoding="UTF-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.personal.po.PersonalMessage">
+    <select id="getPage" resultType="com.fjhx.mail.entity.my.vo.MessageVo">
         SELECT pm.*,
                pmc.content,
                pmc.mime_type,
                cu.customer_id
         FROM personal_message pm
-                 LEFT OUTER JOIN personal_message_content pmc ON pmc.message_id = pm.id
+                 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
+                           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>