[新增] 报告日志管理

This commit is contained in:
bupengxiang
2023-05-06 18:04:14 +08:00
parent 3cd351adc5
commit 8d93660dc6
13 changed files with 466 additions and 229 deletions
@@ -0,0 +1,113 @@
package com.adc.da.report.controller;
import com.adc.da.report.eo.ReportLogBook;
import com.adc.da.report.service.IReportLogService;
import com.adc.da.report.vo.DeleteParamRequestVO;
import com.adc.da.report.vo.ReportLogPageVO;
import com.adc.da.util.http.ResponseMessage;
import com.adc.da.util.http.Result;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* @Author bu
*/
@Api(tags = "报告日志book管理")
@RequestMapping("/${restPath}/reportLogBook")
@RestController
public class ReportLogBookController {
@Autowired
private IReportLogService reportLogService;
/**
* @param reportLogPageVO
* @return com.adc.da.util.http.ResponseMessage
* @author bu
* @date 2023-05-06
* @description 分页查询
*/
@PostMapping(value = "/page")
@ApiOperation(value = "分页查询")
@ApiImplicitParam(name = "reportLogPageVO", value = "查询条件VO", dataType = "ReportLogPageVO")
public ResponseMessage<Page<ReportLogBook>> page(@RequestBody ReportLogPageVO reportLogPageVO){
//分页查询
Page<ReportLogBook> reportLogIPage = reportLogService.selectPage(reportLogPageVO);
return Result.success(reportLogIPage);
}
/**
* @param reportLogPageVO
* @return com.adc.da.util.http.ResponseMessage
* @author bu
* @date 2023-05-06
* @description 列表查询
*/
@PostMapping("/list")
@ApiOperation(value = "列表查询")
@ApiImplicitParam(name = "reportLogPageVO", value = "查询条件VO", dataType = "ReportLogPageVO")
public ResponseMessage<List<ReportLogBook>> list(@RequestBody ReportLogPageVO reportLogPageVO) {
//列表查询
List<ReportLogBook> reportLogBookList = reportLogService.selectList(reportLogPageVO);
return Result.success(reportLogBookList);
}
/**
* @param id
* @return com.adc.da.util.http.ResponseMessage
* @author bu
* @date 2023-05-06
* @description 根据id查询
*/
@GetMapping("/info/{id}")
@ApiOperation(value = "根据id查询")
@ApiImplicitParam(name = "id", value = "主键ID", dataType = "String")
public ResponseMessage<ReportLogBook> info(@PathVariable("id") String id){
//根据id查询
ReportLogBook reportLogBook = reportLogService.selectById(id);
return Result.success(reportLogBook);
}
/**
* @param reportLogBook
* @return com.adc.da.util.http.ResponseMessage
* @author bu
* @date 2023-05-06
* @description 单条数据新增/更改
*/
@PostMapping("/saveOrUpdate")
@ApiOperation(value = "单条数据新增/更改")
@ApiImplicitParam(name = "reportLog", value = " ReportLog实体", dataType = "ReportLog")
public ResponseMessage<String> saveOrUpdate(@RequestBody ReportLogBook reportLogBook){
//单条数据新增/更改
reportLogService.saveOrUpdateSingle(reportLogBook);
return Result.success(reportLogBook.getId());
}
/**
* @param deleteParamRequestVO
* @return com.adc.da.util.http.ResponseMessage
* @author bu
* @date 2023-05-06
* @description 根据id或id数组进行删除
*/
@DeleteMapping("/delete")
@ApiOperation(value = "单条/批量删除数据")
public ResponseMessage delete(@RequestBody DeleteParamRequestVO deleteParamRequestVO){
//单条/批量删除数据
reportLogService.deleteById(deleteParamRequestVO);
return Result.success();
}
}
@@ -1,9 +1,12 @@
package com.adc.da.report.controller;
import com.adc.da.login.util.UserUtils;
import com.adc.da.report.annotation.ReportLog;
import com.adc.da.report.dao.mysql.ReportDao;
import com.adc.da.report.dao.mysql.ReportLogDao;
import com.adc.da.report.eo.FileEntity;
import com.adc.da.report.eo.ReportEntity;
import com.adc.da.report.eo.ReportLogBook;
import com.adc.da.report.service.IFileService;
import com.adc.da.report.service.IReportService;
import com.adc.da.report.util.LocalFileUtil;
@@ -74,6 +77,8 @@ public class ReportManageConroller {
@Autowired
private ReportDao reportDao;
@Autowired
private ReportLogDao reportLogDao;
/**
* 新增或编辑报告
* @param vo
@@ -165,6 +170,13 @@ public class ReportManageConroller {
String html = reportService.reportHtml(id);
Map<String, Object> map = new HashMap<>();
map.put("content", html);
ReportLogBook reportLog = new ReportLogBook();
reportLog.setReportId(id);
reportLog.setType(1);
reportLog.setUpdateTime(new Date());
reportLog.setUserId(UserUtils.getUserId());
reportLogDao.insert(reportLog);
return Result.success(map);
}
@@ -330,7 +342,7 @@ public class ReportManageConroller {
*/
@ApiOperation(value = "|下载文件")
@GetMapping("/download")
public void downloadPic(HttpServletResponse response, String fileId) throws IOException {
public void downloadPic(HttpServletResponse response, String fileId,String repostId) throws IOException {
try {
FileEntity entity = fileService.getFile(fileId);
@@ -351,6 +363,12 @@ public class ReportManageConroller {
} catch (Exception ex) {
log.info(ex.getMessage(),ex);
}
ReportLogBook reportLog = new ReportLogBook();
reportLog.setReportId(repostId);
reportLog.setType(2);
reportLog.setUpdateTime(new Date());
reportLog.setUserId(UserUtils.getUserId());
reportLogDao.insert(reportLog);
}
@@ -0,0 +1,47 @@
package com.adc.da.report.dao.mysql;
import com.adc.da.report.eo.ReportLogBook;
import com.adc.da.report.vo.ReportLogPageVO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @author bu
* @version 1.0
* @description 报告日志 Mapper接口
* @date 2023-05-06
*/
public interface ReportLogDao extends BaseMapper<ReportLogBook> {
/**
* @param reportLogPageVO
* @param page
* @author bu
* @date 2023-05-06
* @description 使用分页插件进行查询
*/
List<ReportLogBook> selectPage(Page<ReportLogBook> page, @Param("pageVO") ReportLogPageVO reportLogPageVO);
/**
* @param reportLogPageVO
* @param page
* @author bu
* @date 2023-05-06
* @description 使用分页插件进行查询总数
*/
Long selectPageCount(@Param("pageVO") ReportLogPageVO reportLogPageVO);
/**
* @param reportLogPageVO
* @return java.util.List
* @author bu
* @date 2023-05-06
* @description 列表查询
*/
List<ReportLogBook> queryList(@Param("pageVO") ReportLogPageVO reportLogPageVO);
}
@@ -0,0 +1,45 @@
package com.adc.da.report.eo;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.util.Date;
/**
* @author bu
* @version 1.0
* @description 报告日志
* @date 2023-05-06
*/
@Data
@TableName("report_log")
public class ReportLogBook {
@TableId("id")
private String id;
/**
* 报告id
*/
@TableField("report_id")
private String reportId;
/**
* 类型 1预览 2下载 3点赞
*/
private Integer type;
/**
* 操作人
*/
@TableField("user_id")
private String userId;
/**
* 操作时间
*/
@TableField("update_time")
private Date updateTime;
}
@@ -0,0 +1,27 @@
package com.adc.da.report.service;
import com.adc.da.report.eo.ReportLogBook;
import com.adc.da.report.vo.DeleteParamRequestVO;
import com.adc.da.report.vo.ReportLogPageVO;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import java.util.List;
/**
* @author bu
* @version 1.0
* @description 报告日志
* @date 2023-05-06
*/
public interface IReportLogService {
Page<ReportLogBook> selectPage(ReportLogPageVO reportLogPageVO);
List<ReportLogBook> selectList(ReportLogPageVO reportLogPageVO);
ReportLogBook selectById(String id);
void saveOrUpdateSingle(ReportLogBook reportLogBook);
void deleteById(DeleteParamRequestVO deleteParamVO);
}
@@ -0,0 +1,110 @@
package com.adc.da.report.service.impl;
import com.adc.da.report.dao.mysql.ReportLogDao;
import com.adc.da.report.eo.ReportLogBook;
import com.adc.da.report.service.IReportLogService;
import com.adc.da.report.vo.DeleteParamRequestVO;
import com.adc.da.report.vo.ReportLogPageVO;
import com.adc.da.util.utils.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
import java.util.ArrayList;
import java.util.List;
/**
* @author bu
* @version 1.0
* @description 报告日志 服务实现类
* @date 2023-05-06
*/
@Slf4j
@Service
public class IReportLogServiceImpl extends ServiceImpl<ReportLogDao, ReportLogBook> implements IReportLogService {
/**
* @param reportLogPageVO
* @return <com.adc.da.report.entity.ReportLog>
* @author bu
* @date 2023-05-06
* @description 分页查询
*/
public Page<ReportLogBook> selectPage(ReportLogPageVO reportLogPageVO){
Page<ReportLogBook> page = new Page<>(reportLogPageVO.getCurrent(),
reportLogPageVO.getSize());
page.setRecords(baseMapper.selectPage(page, reportLogPageVO));
Long total = baseMapper.selectPageCount(reportLogPageVO);
page.setTotal(total);
return page;
}
/**
* @param reportLogPageVO
* @return java.util.List<com.adc.da.report.entity.ReportLog>
* @author bu
* @date 2023-05-06
* @description 列表查询
*/
public List<ReportLogBook> selectList(ReportLogPageVO reportLogPageVO) {
return baseMapper.queryList(reportLogPageVO);
}
/**
* @param id
* @return com.adc.da.report.entity.ReportLog
* @author bu
* @date 2023-05-06
* @description 根据id查询
*/
public ReportLogBook selectById(String id) {
return baseMapper.selectById(id);
}
/**
* @param reportLogBook
* @return boolean
* @author bu
* @date 2023-05-06
* @description 单条数据新增/更改
*/
public void saveOrUpdateSingle(ReportLogBook reportLogBook) {
if (StringUtils.isEmpty(reportLogBook.getId())) {
baseMapper.insert(reportLogBook);
} else {
baseMapper.updateById(reportLogBook);
}
}
/**
* @param deleteParamVO
* @return void
* @author bu
* @date 2023-05-06
* @description 根据id或id数组进行删除
*/
public void deleteById(DeleteParamRequestVO deleteParamVO) {
if (ObjectUtils.isEmpty(deleteParamVO)) {
return;
}
List<String> ids = new ArrayList<>();
if (!ObjectUtils.isEmpty(deleteParamVO.getId())) {
ids.add(deleteParamVO.getId());
}
if (!ObjectUtils.isEmpty(deleteParamVO.getIds())) {
ids.addAll(deleteParamVO.getIds());
}
if (ObjectUtils.isEmpty(deleteParamVO)) {
return;
}
// Q<ReportLog> wrapper = new EntityWrapper();
// wrapper.in("id",ids);
// ReportLog reportLog = new ReportLog();
// reportLog.setDel(YesOrNoEnum.YES.getValue());
// baseMapper.update(reportLog,wrapper);
}
}
@@ -0,0 +1,31 @@
package com.adc.da.report.vo;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* @author bu
* @version 1.0
* @description 报告日志查询条件VO
* @date 2023-05-06
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class ReportLogPageVO extends BasePageVO {
/**
*
*/
private String reportId;
/**
* 类型 1预览 2下载 3点赞
*/
private Integer type;
/**
* 操作人
*/
private String userId;
}
@@ -0,0 +1,74 @@
<?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.adc.da.report.dao.mysql.ReportLogDao">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.adc.da.report.eo.ReportLogBook">
<result column="id" property="id" />
<result column="update_time" property="updateTime" />
<result column="report_id" property="reportId" />
<result column="type" property="type" />
<result column="user_id" property="userId" />
</resultMap>
<!--表名信息-->
<sql id="TableName">
report_log
</sql>
<!-- 通用查询结果列 -->
<sql id="BaseColumnList">
id,
update_time,
report_id, type, user_id
</sql>
<!-- 查询条件 -->
<sql id="BaseQuerySql">
<where>
AND del = '${@com.adc.da.sys.constant.YesOrNoEnum@NO.value}'
<if test="pageVO != null">
<if test="pageVO.reportId !=null and pageVO.reportId !=''">
AND report_id LIKE CONCAT(CONCAT('%',#{pageVO.reportId}),'%')
</if>
<if test="pageVO.type !=null">
AND type = #{pageVO.type}
</if>
<if test="pageVO.userId !=null and pageVO.userId !=''">
AND user_id LIKE CONCAT(CONCAT('%',#{pageVO.userId}),'%')
</if>
</if>
</where>
</sql>
<!-- 根据查询VO进行分页查询 -->
<select id="selectPage" resultMap="BaseResultMap">
SELECT
<include refid="BaseColumnList"/>
FROM <include refid="TableName"/>
<include refid="BaseQuerySql"/>
ORDER BY create_time DESC
</select>
<!-- 根据查询VO进行分页查询总数 -->
<select id="selectPageCount" resultType="java.lang.Long">
SELECT
COUNT(1)
FROM (
SELECT
<include refid="BaseColumnList"/>
FROM <include refid="TableName"/>
<include refid="BaseQuerySql"/>
)a
</select>
<!-- 根据查询VO进行列表查询 -->
<select id="queryList" resultMap="BaseResultMap">
SELECT
<include refid="BaseColumnList"/>
FROM <include refid="TableName"/>
<include refid="BaseQuerySql"/>
ORDER BY create_time DESC
</select>
</mapper>
@@ -1,228 +0,0 @@
<?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.adc.da.report.dao.mysql.ReportDao">
<!-- <select id="list" parameterType="com.adc.da.report.vo.ReportQueryVo" resultType="com.adc.da.report.vo.ReportVo">-->
<!-- select t1.id,t1.labelOneId,t1.labelTwoId,t1.labelThreeId,t1.labelOneName,t1.labelTwoName,t1.labelThreeName,t1.name,t1.year,t1.keyContent,t1.mainContent-->
<!-- ,t1.department,date_format(t1.updateDate,'%Y-%m-%d') createDate,t1.fileId-->
<!-- from(-->
<!-- (-->
<!-- select distinct b1.*,(case when b3.name is null then '-' else b3.name end) labelOneName-->
<!-- ,(case when b4.name is null then '-' else b4.name end) labelTwoName-->
<!-- ,(case when b5.name is null then '-' else b5.name end) labelThreeName from-->
<!-- (select * from TT_REPORT_MANAGE )b1-->
<!-- left join TR_REPORT_USER b2 on b1.id=b2.reportId-->
<!-- left join TS_LABEL b3 on b1.labelOneId=b3.id-->
<!-- left join TS_LABEL b4 on b1.labelTwoId=b4.id-->
<!-- left join TS_LABEL b5 on b1.labelThreeId=b5.id-->
<!-- where b1.del_flag='0' and(b3.name is null or b4.name is null or b5.name is null )-->
<!-- &lt;!&ndash;文本搜索&ndash;&gt;-->
<!-- <if test="Vo.keyContent !=null and Vo.keyContent !=''">-->
<!-- and (b1.name like "%"#{Vo.keyContent}"%" or b1.keycontent like "%"#{Vo.keyContent}"%"-->
<!-- or b1.maincontent like "%"#{Vo.keyContent}"%" or b1.department like "%"#{Vo.keyContent}"%")-->
<!-- </if>-->
<!-- &lt;!&ndash;年份搜索&ndash;&gt;-->
<!-- <if test="Vo.year !=null and Vo.year.size() >0">-->
<!-- and b1.year in-->
<!-- <foreach collection="Vo.year" item="year" open="(" separator="," close=")">-->
<!-- #{year}-->
<!-- </foreach>-->
<!-- </if>-->
<!-- &lt;!&ndash;标签搜索&ndash;&gt;-->
<!-- <if test="Vo.labelOneId !=null and Vo.labelOneId.size() >0">-->
<!-- and b1.labelOneId in-->
<!-- <foreach collection="Vo.labelOneId" item="labelOneId" open="(" separator="," close=")">-->
<!-- #{labelOneId}-->
<!-- </foreach>-->
<!-- </if>-->
<!-- <if test="Vo.labelTwoId !=null and Vo.labelTwoId.size() >0">-->
<!-- and b1.labelTwoId in-->
<!-- <foreach collection="Vo.labelTwoId" item="labelTwoId" open="(" separator="," close=")">-->
<!-- #{labelTwoId}-->
<!-- </foreach>-->
<!-- </if>-->
<!-- <if test="Vo.labelThreeId !=null and Vo.labelThreeId.size() >0">-->
<!-- and b1.labelThreeId in-->
<!-- <foreach collection="Vo.labelThreeId" item="labelThreeId" open="(" separator="," close=")">-->
<!-- #{labelThreeId}-->
<!-- </foreach>-->
<!-- </if>-->
<!-- <if test="Vo.usid !=null and Vo.usid !=''">-->
<!-- and b2.userId=#{Vo.usid}-->
<!-- </if>-->
<!-- ORDER BY updateDate desc limit 999999999-->
<!-- )-->
<!-- UNION ALL-->
<!-- (select distinct a1.* ,a3.name labelOneName,a4.name labelTwoName,a5.name labelThreeName from(select * from TT_REPORT_MANAGE ) a1-->
<!-- left join TR_REPORT_USER a2 on a1.id=a2.reportId-->
<!-- left join TS_LABEL a3 on a1.labelOneId=a3.id-->
<!-- left join TS_LABEL a4 on a1.labelTwoId=a4.id-->
<!-- left join TS_LABEL a5 on a1.labelThreeId=a5.id-->
<!-- where a1.del_flag='0' and (a3.name is not null and a4.name is not null and a5.name is not null )-->
<!-- &lt;!&ndash;文本搜索&ndash;&gt;-->
<!-- <if test="Vo.keyContent !=null and Vo.keyContent !=''">-->
<!-- and (a1.name like "%"#{Vo.keyContent}"%" or a1.keycontent like "%"#{Vo.keyContent}"%"-->
<!-- or a1.maincontent like "%"#{Vo.keyContent}"%" or a1.department like "%"#{Vo.keyContent}"%" )-->
<!-- </if>-->
<!-- &lt;!&ndash;年份搜索&ndash;&gt;-->
<!-- <if test="Vo.year !=null and Vo.year.size >0">-->
<!-- and a1.year in-->
<!-- <foreach collection="Vo.year" item="year" open="(" separator="," close=")">-->
<!-- #{year}-->
<!-- </foreach>-->
<!-- </if>-->
<!-- &lt;!&ndash;标签搜索&ndash;&gt;-->
<!-- <if test="Vo.labelOneId !=null and Vo.labelOneId.size() >0">-->
<!-- and a1.labelOneId in-->
<!-- <foreach collection="Vo.labelOneId" item="labelOneId" open="(" separator="," close=")">-->
<!-- #{labelOneId}-->
<!-- </foreach>-->
<!-- </if>-->
<!-- <if test="Vo.labelTwoId !=null and Vo.labelTwoId.size() >0">-->
<!-- and a1.labelTwoId in-->
<!-- <foreach collection="Vo.labelTwoId" item="labelTwoId" open="(" separator="," close=")">-->
<!-- #{labelTwoId}-->
<!-- </foreach>-->
<!-- </if>-->
<!-- <if test="Vo.labelThreeId !=null and Vo.labelThreeId.size() >0">-->
<!-- and a1.labelThreeId in-->
<!-- <foreach collection="Vo.labelThreeId" item="labelThreeId" open="(" separator="," close=")">-->
<!-- #{labelThreeId}-->
<!-- </foreach>-->
<!-- </if>-->
<!-- <if test="Vo.usid !=null and Vo.usid !=''">-->
<!-- and a2.userId=#{Vo.usid}-->
<!-- </if>-->
<!-- ORDER BY updateDate desc limit 999999999)-->
<!-- )t1-->
<!-- </select>-->
<select id="list" parameterType="com.adc.da.report.vo.ReportQueryVo" resultType="com.adc.da.report.vo.ReportVo">
SELECT DISTINCT t.id, t.year, t.name, t.keycontent, t.fileId, t.createDate, t.department, t.maincontent,
t.confidentialLevel, t.privacyLevel
FROM `tt_report_manage` AS t
INNER JOIN ts_report_label AS trl ON t.id = trl.report_id
WHERE 1 = 1
<!--报表名称搜索-->
<if test="Vo.name != null and Vo.name != ''">
and t.name like "%"#{Vo.name}"%"
</if>
<!--年份搜索-->
<if test="Vo.year != null and Vo.year.size() > 0">
and t.year in
<foreach collection="Vo.year" item="year" open="(" separator="," close=")">
#{year}
</foreach>
</if>
<!--id搜索-->
<if test="idSet !=null and idSet.size() > 0">
and t.id in
<foreach collection="idSet" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</if>
<!--id搜索-->
<if test="Vo.ids !=null and Vo.ids.size() > 0">
and Vo.ids in
<foreach collection="Vo.ids" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</if>
<!--用户搜索-->
<if test="Vo.usid != null and Vo.usid != ''">
and t.userId=#{Vo.usid}
</if>
ORDER BY updateDate desc
</select>
<select id="getReportDateList" parameterType="string" resultType="string">
select distinct year from TT_REPORT_MANAGE t1
left join TR_REPORT_USER t2 on t1.id=t2.reportId
where del_flag='0'
<if test="usid !='' and usid !=null">
and t2.userId=#{usid}
</if>
ORDER BY year DESC
</select>
<select id="getAddReportPage" resultType="com.adc.da.report.vo.ReportVo">
SELECT
eo.id,
eo.NAME,
eo.keycontent,
eo.maincontent,
eo.DEPARTMENT,
eo.YEAR,
eo.fileid,
eo.confidentialLevel,
eo.privacyLevel,
pa.report_id,
pa.user_id
FROM
TT_REPORT_MANAGE eo
LEFT JOIN tr_report_user ru ON eo.id = ru.reportId
LEFT JOIN power_apply pa ON pa.report_id = eo.id
WHERE
eo.DEL_FLAG = 0
<if test="pageVO.usid !='' and pageVO.usid != null">
and ru.userId != #{pageVO.usid}
</if>
<if test="pageVO.usid !='' and pageVO.usid != null">
and eo.id not in (
SELECT tt.report_id from power_apply tt WHERE tt.user_id = #{pageVO.usid}
)
</if>
<if test="pageVO.name !='' and pageVO.name != null">
and name like CONCAT(CONCAT('%',#{pageVO.name}),'%')
</if>
<!--年份搜索-->
<if test="pageVO.year != null and pageVO.year.size() > 0">
and year in
<foreach collection="pageVO.year" item="year" open="(" separator="," close=")">
#{year}
</foreach>
</if>
<if test="pageVO.ids != null and pageVO.ids.size() > 0">
and eo.id in
<foreach collection="pageVO.ids" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</if>
GROUP BY
eo.id
ORDER BY
eo.updateDate DESC
</select>
</mapper>