This commit is contained in:
PQZ 2025-10-21 15:41:44 +08:00
parent a769623042
commit b9ab476660
7 changed files with 176 additions and 6 deletions

View File

@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.busi.domain.BusiChatItem;
import com.ruoyi.busi.service.IBusiChatItemService;
import com.ruoyi.busi.vo.ChatExcelMainVO;
import com.ruoyi.busi.vo.ChatMainVO;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.utils.SecurityUtils;
@ -66,10 +67,12 @@ public class BusiChatMainController extends BaseController
@PreAuthorize("@ss.hasPermi('busi:chatMain:export')")
@Log(title = "在线聊天", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, BusiChatMain busiChatMain)
public void export(HttpServletResponse response, ChatMainVO busiChatMain)
{
List<BusiChatMain> list = busiChatMainService.list();
ExcelUtil<BusiChatMain> util = new ExcelUtil<BusiChatMain>(BusiChatMain.class);
// List<BusiChatMain> list = busiChatMainService.list();
// ExcelUtil<BusiChatMain> util = new ExcelUtil<BusiChatMain>(BusiChatMain.class);
List<ChatExcelMainVO> list = busiChatMainService.listChatMain(busiChatMain);
ExcelUtil<ChatExcelMainVO> util = new ExcelUtil<ChatExcelMainVO>(ChatExcelMainVO.class);
util.exportExcel(response, list, "在线聊天数据");
}

View File

@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.busi.domain.BusiChatMain;
import com.ruoyi.busi.vo.ChartDataVO;
import com.ruoyi.busi.vo.ChatExcelMainVO;
import com.ruoyi.busi.vo.ChatMainVO;
import com.ruoyi.busi.vo.ThirdSoftVO;
import org.apache.ibatis.annotations.Param;
@ -22,6 +23,8 @@ public interface BusiChatMainMapper extends BaseMapper<BusiChatMain>
{
IPage<ChatMainVO> queryListPage(@Param("entity") ChatMainVO entity, Page<BusiChatMain> page);
List<ChatExcelMainVO> selectChatList(@Param("entity") BusiChatMain entity);
/**
* 查询IP数量
* @author vinjor-M

View File

@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.busi.domain.BusiChatMain;
import com.ruoyi.busi.vo.ChatExcelMainVO;
import com.ruoyi.busi.vo.ChatMainVO;
/**
@ -17,6 +18,15 @@ import com.ruoyi.busi.vo.ChatMainVO;
public interface IBusiChatMainService extends IService<BusiChatMain> {
IPage<ChatMainVO> queryListPage(ChatMainVO pageReqVO, Page<BusiChatMain> page);
/**
* 不分页查询聊天记录适配导出
* @author PQZ
* @date 14:03 2025/10/21
* @param chatMainVO {@link ChatMainVO}
* @return java.util.List<com.ruoyi.busi.vo.ChatMainVO>
**/
List<ChatExcelMainVO> listChatMain(ChatMainVO chatMainVO);
/**
* 校验是否需要新增
*

View File

@ -7,8 +7,10 @@ import java.util.concurrent.TimeUnit;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.ruoyi.base.service.IBaseManagerService;
import com.ruoyi.busi.domain.BusiChatItem;
import com.ruoyi.busi.mapper.BusiChatItemMapper;
import com.ruoyi.busi.service.IBusiChatItemService;
import com.ruoyi.busi.vo.ChatExcelMainVO;
import com.ruoyi.busi.vo.ChatMainVO;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.redis.RedisCache;
@ -53,6 +55,43 @@ public class BusiChatMainServiceImpl extends ServiceImpl<BusiChatMainMapper,Busi
return busiChatMainMapper.queryListPage(pageReqVO, page);
}
/**
* 不分页查询聊天记录适配导出
*
* @param chatMainVO {@link ChatMainVO}
* @return java.util.List<com.ruoyi.busi.vo.ChatMainVO>
* @author PQZ
* @date 14:03 2025/10/21
**/
@Override
public List<ChatExcelMainVO> listChatMain(ChatMainVO chatMainVO) {
List<ChatExcelMainVO> result = busiChatMainMapper.selectChatList(chatMainVO);
result.forEach(item -> {
item.setCreateTimeStr(DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss",item.getCreateTime()));
item.setUpdateTimeStr(DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss",item.getUpdateTime()));
// 将chatItemList转换为指定格式的字符串
if (item.getChatItemList() != null && !item.getChatItemList().isEmpty()) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < item.getChatItemList().size(); i++) {
BusiChatItem chatItem = item.getChatItemList().get(i);
String dataFromDisplay = "customer".equals(chatItem.getDataFrom()) ? "客户" : "平台";
sb.append(dataFromDisplay)
.append("")
.append(chatItem.getContent())
.append("")
.append(DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss", chatItem.getCreateTime()))
.append("");
// 如果不是最后一个元素添加换行符
if (i < item.getChatItemList().size() - 1) {
sb.append("\n");
}
}
item.setChatHistory(sb.toString());
}
});
return result;
}
/**
* 校验是否需要新增
*

View File

@ -0,0 +1,61 @@
package com.ruoyi.busi.vo;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.busi.domain.BusiChatItem;
import com.ruoyi.common.annotation.Excel;
import lombok.*;
import java.util.Date;
import java.util.List;
@Data
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ChatExcelMainVO{
private String id;
/** 产品名称 */
@Excel(name = "产品名称")
private String prodName;
/** 来源IP */
@Excel(name = "IP")
private String ip;
/** 来源国家 */
@Excel(name = "国家")
private String national;
/** 来源洲 */
@Excel(name = "")
private String oceania;
/** 设备类型 */
@Excel(name = "设备类型")
private String equipment;
/** 用户名称 */
@Excel(name = "负责员工")
private String userName;
/** 创建时间 */
@Excel(name = "最早聊天时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private String createTimeStr;
/** 创建时间 */
@Excel(name = "最近聊天时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private String updateTimeStr;
/** 聊天记录 */
@Excel(name = "聊天记录")
private String chatHistory;
/** 创建时间 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
/** 创建时间 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
private List<BusiChatItem> chatItemList;
}

View File

@ -28,6 +28,23 @@
<result property="siteName" column="site_name"/>
</resultMap>
<resultMap type="com.ruoyi.busi.vo.ChatExcelMainVO" id="ChatExcelMainResult">
<result property="ip" column="ip"/>
<result property="national" column="national"/>
<result property="oceania" column="oceania"/>
<result property="equipment" column="equipment"/>
<result property="prodName" column="prod_name"/>
<result property="userName" column="user_name"/>
<result property="createTime" column="create_time"/>
<result property="updateTime" column="update_time"/>
<!-- 添加集合映射 -->
<collection select="getChatItems"
column="id"
property="chatItemList"
javaType="java.util.List"
ofType="com.ruoyi.busi.domain.BusiChatItem"/>
</resultMap>
<select id="queryListPage" parameterType="BusiChatMain" resultMap="BusiChatMainResult">
select dbcm.*,dbpn.title AS prod_name,su.nick_name AS user_name,dbs.site_name AS site_name
@ -58,6 +75,41 @@
</where>
order BY dbcm.create_time DESC,dbcm.update_time DESC
</select>
<select id="selectChatList" parameterType="BusiChatMain" resultMap="ChatExcelMainResult">
select dbcm.*,dbpn.title AS prod_name,su.nick_name AS user_name,dbs.site_name AS site_name
from dl_busi_chat_main dbcm
left join dl_busi_prod_new dbpn on dbcm.prod_id = dbpn.id
left join sys_user su on dbcm.user_id = su.user_id
left join dl_base_site dbs ON dbcm.tenant_id = dbs.id
<where>
<if test="entity.prodName != null and entity.prodName != ''">and dbpn.title LIKE
CONCAT('%',#{entity.prodName},'%')
</if>
<if test="entity.ip != null and entity.ip != ''">and dbcm.ip = #{entity.ip}</if>
<if test="entity.equipment != null and entity.equipment != ''">and dbcm.equipment = #{entity.equipment}</if>
<if test="entity.national != null and entity.national != ''">and dbcm.national LIKE
CONCAT('%',#{entity.national},'%')
</if>
<if test="entity.oceania != null and entity.oceania != ''">and dbcm.oceania = #{entity.oceania}</if>
<if test="entity.userName != null and entity.userName != ''">and (su.nick_name LIKE
CONCAT('%',#{entity.userName},'%') OR su.user_name LIKE CONCAT('%',#{entity.userName},'%'))
</if>
<if test="entity.tenantId != null and entity.tenantId != ''">and dbcm.tenant_id = #{entity.tenantId}</if>
<if test="entity.startDate != null and entity.startDate != ''">and (dbcm.create_time &gt;=
#{entity.startDate} OR dbcm.update_time &gt;= #{entity.startDate})
</if>
<if test="entity.endDate != null and entity.endDate != ''">and (dbcm.create_time &lt;= #{entity.endDate} OR
dbcm.update_time &gt;= #{entity.startDate})
</if>
</where>
order BY dbcm.create_time DESC,dbcm.update_time DESC
</select>
<select id="getChatItems" resultType="com.ruoyi.busi.domain.BusiChatItem">
select * from dl_busi_chat_item where main_id = #{id} order by create_time asc
</select>
<select id="selectIpCount" resultType="java.lang.Integer">
SELECT
COUNT( id )

View File

@ -50,11 +50,13 @@
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
type="warning"
plain
icon="el-icon-download"
size="mini"
v-hasPermi="['busi:chatMain:add']"
>导出</el-button>
@click="handleExport"
>导出
</el-button>
</el-col>
<!-- <el-col :span="1.5">-->
<!-- <el-button-->