Переглянути джерело

新增通话记录相关处理

王苗苗 3 місяців тому
батько
коміт
d18abdc6b4

+ 106 - 0
slibra-admin/src/main/java/com/slibra/web/controller/business/TCallRecordController.java

@@ -0,0 +1,106 @@
+package com.slibra.web.controller.business;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.slibra.common.annotation.Log;
+import com.slibra.common.core.controller.BaseController;
+import com.slibra.common.core.domain.AjaxResult;
+import com.slibra.common.enums.BusinessType;
+import com.slibra.business.domain.TCallRecord;
+import com.slibra.business.service.ITCallRecordService;
+import com.slibra.common.utils.poi.ExcelUtil;
+import com.slibra.common.core.page.TableDataInfo;
+
+/**
+ * 通话记录Controller
+ * 
+ * @author slibra
+ * @date 2024-11-11
+ */
+@RestController
+@RequestMapping("/business/record")
+public class TCallRecordController extends BaseController
+{
+    @Autowired
+    private ITCallRecordService tCallRecordService;
+
+    /**
+     * 查询通话记录列表
+     */
+    @PreAuthorize("@ss.hasPermi('business:record:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TCallRecord tCallRecord)
+    {
+        startPage();
+        List<TCallRecord> list = tCallRecordService.selectTCallRecordList(tCallRecord);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出通话记录列表
+     */
+    @PreAuthorize("@ss.hasPermi('business:record:export')")
+    @Log(title = "通话记录", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TCallRecord tCallRecord)
+    {
+        List<TCallRecord> list = tCallRecordService.selectTCallRecordList(tCallRecord);
+        ExcelUtil<TCallRecord> util = new ExcelUtil<TCallRecord>(TCallRecord.class);
+        util.exportExcel(response, list, "通话记录数据");
+    }
+
+    /**
+     * 获取通话记录详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('business:record:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(tCallRecordService.selectTCallRecordById(id));
+    }
+
+    /**
+     * 新增通话记录
+     */
+    @PreAuthorize("@ss.hasPermi('business:record:add')")
+    @Log(title = "通话记录", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TCallRecord tCallRecord)
+    {
+        tCallRecord.setCreateBy(getUsername());
+        return toAjax(tCallRecordService.insertTCallRecord(tCallRecord));
+    }
+
+    /**
+     * 修改通话记录
+     */
+    @PreAuthorize("@ss.hasPermi('business:record:edit')")
+    @Log(title = "通话记录", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TCallRecord tCallRecord)
+    {
+        tCallRecord.setUpdateBy(getUsername());
+        return toAjax(tCallRecordService.updateTCallRecord(tCallRecord));
+    }
+
+    /**
+     * 删除通话记录
+     */
+    @PreAuthorize("@ss.hasPermi('business:record:remove')")
+    @Log(title = "通话记录", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(tCallRecordService.deleteTCallRecordByIds(ids));
+    }
+}

+ 255 - 0
slibra-system/src/main/java/com/slibra/business/domain/TCallRecord.java

@@ -0,0 +1,255 @@
+package com.slibra.business.domain;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.slibra.common.annotation.Excel;
+import com.slibra.common.core.domain.BaseEntity;
+
+/**
+ * 通话记录对象 t_call_record
+ * 
+ * @author slibra
+ * @date 2024-11-11
+ */
+public class TCallRecord extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 主键 */
+    private Long id;
+
+    /** 呼入分类(0白名单 1AI服务 2传统服务) */
+    @Excel(name = "呼入分类", readConverterExp = "0=白名单,1=AI服务,2=传统服务")
+    private Long type;
+
+    /** 客服ID */
+    @Excel(name = "客服ID")
+    private Long userId;
+
+    /** 客服名字 */
+    @Excel(name = "客服名字")
+    private String userName;
+
+    /** 服务类型(0人工坐席 1机器人坐席 2机器人转人工) */
+    @Excel(name = "服务类型", readConverterExp = "0=人工坐席,1=机器人坐席,2=机器人转人工")
+    private Long serviceCategory;
+
+    /** 通话发起时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "通话发起时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date timeBegin;
+
+    /** 通话结束时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "通话结束时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date timeEnd;
+
+    /** 通话时长(暂时按字符串接收) */
+    @Excel(name = "通话时长", readConverterExp = "暂=时按字符串接收")
+    private String times;
+
+    /** 通话类型(0呼入 1呼出) */
+    @Excel(name = "通话类型", readConverterExp = "0=呼入,1=呼出")
+    private Long category;
+
+    /** 通话状态(0未接听 1已接通) */
+    @Excel(name = "通话状态(0未接听 1已接通)")
+    private Long status;
+
+    /** 电话号码 */
+    @Excel(name = "电话号码")
+    private String phone;
+
+    /** 业务类型(创个返回字符串) */
+    @Excel(name = "业务类型", readConverterExp = "创=个返回字符串")
+    private String bussinessType;
+
+    /** 是否已转录音(0否 1是) */
+    @Excel(name = "是否已转录音", readConverterExp = "0=否,1=是")
+    private Long hasParsed;
+
+    /** 通话录音内容 */
+    @Excel(name = "通话录音内容")
+    private String parsedVoiceContent;
+
+    /** 删除标志(0代表存在 2代表删除) */
+    private Long delFlag;
+
+    /** 乐观锁 */
+    @Excel(name = "乐观锁")
+    private Long revision;
+
+    public void setId(Long id) 
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+    public void setType(Long type) 
+    {
+        this.type = type;
+    }
+
+    public Long getType() 
+    {
+        return type;
+    }
+    public void setUserId(Long userId) 
+    {
+        this.userId = userId;
+    }
+
+    public Long getUserId() 
+    {
+        return userId;
+    }
+    public void setUserName(String userName) 
+    {
+        this.userName = userName;
+    }
+
+    public String getUserName() 
+    {
+        return userName;
+    }
+    public void setServiceCategory(Long serviceCategory) 
+    {
+        this.serviceCategory = serviceCategory;
+    }
+
+    public Long getServiceCategory() 
+    {
+        return serviceCategory;
+    }
+    public void setTimeBegin(Date timeBegin) 
+    {
+        this.timeBegin = timeBegin;
+    }
+
+    public Date getTimeBegin() 
+    {
+        return timeBegin;
+    }
+    public void setTimeEnd(Date timeEnd) 
+    {
+        this.timeEnd = timeEnd;
+    }
+
+    public Date getTimeEnd() 
+    {
+        return timeEnd;
+    }
+    public void setTimes(String times) 
+    {
+        this.times = times;
+    }
+
+    public String getTimes() 
+    {
+        return times;
+    }
+    public void setCategory(Long category) 
+    {
+        this.category = category;
+    }
+
+    public Long getCategory() 
+    {
+        return category;
+    }
+    public void setStatus(Long status) 
+    {
+        this.status = status;
+    }
+
+    public Long getStatus() 
+    {
+        return status;
+    }
+    public void setPhone(String phone) 
+    {
+        this.phone = phone;
+    }
+
+    public String getPhone() 
+    {
+        return phone;
+    }
+    public void setBussinessType(String bussinessType) 
+    {
+        this.bussinessType = bussinessType;
+    }
+
+    public String getBussinessType() 
+    {
+        return bussinessType;
+    }
+    public void setHasParsed(Long hasParsed) 
+    {
+        this.hasParsed = hasParsed;
+    }
+
+    public Long getHasParsed() 
+    {
+        return hasParsed;
+    }
+    public void setParsedVoiceContent(String parsedVoiceContent) 
+    {
+        this.parsedVoiceContent = parsedVoiceContent;
+    }
+
+    public String getParsedVoiceContent() 
+    {
+        return parsedVoiceContent;
+    }
+    public void setDelFlag(Long delFlag) 
+    {
+        this.delFlag = delFlag;
+    }
+
+    public Long getDelFlag() 
+    {
+        return delFlag;
+    }
+    public void setRevision(Long revision) 
+    {
+        this.revision = revision;
+    }
+
+    public Long getRevision() 
+    {
+        return revision;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("type", getType())
+            .append("userId", getUserId())
+            .append("userName", getUserName())
+            .append("serviceCategory", getServiceCategory())
+            .append("timeBegin", getTimeBegin())
+            .append("timeEnd", getTimeEnd())
+            .append("times", getTimes())
+            .append("category", getCategory())
+            .append("status", getStatus())
+            .append("phone", getPhone())
+            .append("bussinessType", getBussinessType())
+            .append("remark", getRemark())
+            .append("hasParsed", getHasParsed())
+            .append("parsedVoiceContent", getParsedVoiceContent())
+            .append("delFlag", getDelFlag())
+            .append("revision", getRevision())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .toString();
+    }
+}

+ 61 - 0
slibra-system/src/main/java/com/slibra/business/mapper/TCallRecordMapper.java

@@ -0,0 +1,61 @@
+package com.slibra.business.mapper;
+
+import java.util.List;
+import com.slibra.business.domain.TCallRecord;
+
+/**
+ * 通话记录Mapper接口
+ * 
+ * @author slibra
+ * @date 2024-11-11
+ */
+public interface TCallRecordMapper 
+{
+    /**
+     * 查询通话记录
+     * 
+     * @param id 通话记录主键
+     * @return 通话记录
+     */
+    public TCallRecord selectTCallRecordById(Long id);
+
+    /**
+     * 查询通话记录列表
+     * 
+     * @param tCallRecord 通话记录
+     * @return 通话记录集合
+     */
+    public List<TCallRecord> selectTCallRecordList(TCallRecord tCallRecord);
+
+    /**
+     * 新增通话记录
+     * 
+     * @param tCallRecord 通话记录
+     * @return 结果
+     */
+    public int insertTCallRecord(TCallRecord tCallRecord);
+
+    /**
+     * 修改通话记录
+     * 
+     * @param tCallRecord 通话记录
+     * @return 结果
+     */
+    public int updateTCallRecord(TCallRecord tCallRecord);
+
+    /**
+     * 删除通话记录
+     * 
+     * @param id 通话记录主键
+     * @return 结果
+     */
+    public int deleteTCallRecordById(Long id);
+
+    /**
+     * 批量删除通话记录
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteTCallRecordByIds(Long[] ids);
+}

+ 61 - 0
slibra-system/src/main/java/com/slibra/business/service/ITCallRecordService.java

@@ -0,0 +1,61 @@
+package com.slibra.business.service;
+
+import java.util.List;
+import com.slibra.business.domain.TCallRecord;
+
+/**
+ * 通话记录Service接口
+ * 
+ * @author slibra
+ * @date 2024-11-11
+ */
+public interface ITCallRecordService 
+{
+    /**
+     * 查询通话记录
+     * 
+     * @param id 通话记录主键
+     * @return 通话记录
+     */
+    public TCallRecord selectTCallRecordById(Long id);
+
+    /**
+     * 查询通话记录列表
+     * 
+     * @param tCallRecord 通话记录
+     * @return 通话记录集合
+     */
+    public List<TCallRecord> selectTCallRecordList(TCallRecord tCallRecord);
+
+    /**
+     * 新增通话记录
+     * 
+     * @param tCallRecord 通话记录
+     * @return 结果
+     */
+    public int insertTCallRecord(TCallRecord tCallRecord);
+
+    /**
+     * 修改通话记录
+     * 
+     * @param tCallRecord 通话记录
+     * @return 结果
+     */
+    public int updateTCallRecord(TCallRecord tCallRecord);
+
+    /**
+     * 批量删除通话记录
+     * 
+     * @param ids 需要删除的通话记录主键集合
+     * @return 结果
+     */
+    public int deleteTCallRecordByIds(Long[] ids);
+
+    /**
+     * 删除通话记录信息
+     * 
+     * @param id 通话记录主键
+     * @return 结果
+     */
+    public int deleteTCallRecordById(Long id);
+}

+ 96 - 0
slibra-system/src/main/java/com/slibra/business/service/impl/TCallRecordServiceImpl.java

@@ -0,0 +1,96 @@
+package com.slibra.business.service.impl;
+
+import java.util.List;
+import com.slibra.common.utils.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.slibra.business.mapper.TCallRecordMapper;
+import com.slibra.business.domain.TCallRecord;
+import com.slibra.business.service.ITCallRecordService;
+
+/**
+ * 通话记录Service业务层处理
+ * 
+ * @author slibra
+ * @date 2024-11-11
+ */
+@Service
+public class TCallRecordServiceImpl implements ITCallRecordService 
+{
+    @Autowired
+    private TCallRecordMapper tCallRecordMapper;
+
+    /**
+     * 查询通话记录
+     * 
+     * @param id 通话记录主键
+     * @return 通话记录
+     */
+    @Override
+    public TCallRecord selectTCallRecordById(Long id)
+    {
+        return tCallRecordMapper.selectTCallRecordById(id);
+    }
+
+    /**
+     * 查询通话记录列表
+     * 
+     * @param tCallRecord 通话记录
+     * @return 通话记录
+     */
+    @Override
+    public List<TCallRecord> selectTCallRecordList(TCallRecord tCallRecord)
+    {
+        return tCallRecordMapper.selectTCallRecordList(tCallRecord);
+    }
+
+    /**
+     * 新增通话记录
+     * 
+     * @param tCallRecord 通话记录
+     * @return 结果
+     */
+    @Override
+    public int insertTCallRecord(TCallRecord tCallRecord)
+    {
+        tCallRecord.setCreateTime(DateUtils.getNowDate());
+        return tCallRecordMapper.insertTCallRecord(tCallRecord);
+    }
+
+    /**
+     * 修改通话记录
+     * 
+     * @param tCallRecord 通话记录
+     * @return 结果
+     */
+    @Override
+    public int updateTCallRecord(TCallRecord tCallRecord)
+    {
+        tCallRecord.setUpdateTime(DateUtils.getNowDate());
+        return tCallRecordMapper.updateTCallRecord(tCallRecord);
+    }
+
+    /**
+     * 批量删除通话记录
+     * 
+     * @param ids 需要删除的通话记录主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTCallRecordByIds(Long[] ids)
+    {
+        return tCallRecordMapper.deleteTCallRecordByIds(ids);
+    }
+
+    /**
+     * 删除通话记录信息
+     * 
+     * @param id 通话记录主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTCallRecordById(Long id)
+    {
+        return tCallRecordMapper.deleteTCallRecordById(id);
+    }
+}

+ 150 - 0
slibra-system/src/main/resources/mapper/business/TCallRecordMapper.xml

@@ -0,0 +1,150 @@
+<?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.slibra.business.mapper.TCallRecordMapper">
+    
+    <resultMap type="TCallRecord" id="TCallRecordResult">
+        <result property="id"    column="id"    />
+        <result property="type"    column="type"    />
+        <result property="userId"    column="user_id"    />
+        <result property="userName"    column="user_name"    />
+        <result property="serviceCategory"    column="service_category"    />
+        <result property="timeBegin"    column="time_begin"    />
+        <result property="timeEnd"    column="time_end"    />
+        <result property="times"    column="times"    />
+        <result property="category"    column="category"    />
+        <result property="status"    column="status"    />
+        <result property="phone"    column="phone"    />
+        <result property="bussinessType"    column="bussiness_type"    />
+        <result property="remark"    column="remark"    />
+        <result property="hasParsed"    column="has_parsed"    />
+        <result property="parsedVoiceContent"    column="parsed_voice_content"    />
+        <result property="delFlag"    column="del_flag"    />
+        <result property="revision"    column="revision"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+    </resultMap>
+
+    <sql id="selectTCallRecordVo">
+        select id, type, user_id, user_name, service_category, time_begin, time_end, times, category, status, phone, bussiness_type, remark, has_parsed, parsed_voice_content, del_flag, revision, create_by, create_time, update_by, update_time from t_call_record
+    </sql>
+
+    <select id="selectTCallRecordList" parameterType="TCallRecord" resultMap="TCallRecordResult">
+        <include refid="selectTCallRecordVo"/>
+        <where>
+            1 = 1
+            <if test="type != null "> and type = #{type}</if>
+            <if test="userId != null "> and user_id = #{userId}</if>
+            <if test="userName != null  and userName != ''"> and user_name like concat('%', #{userName}, '%')</if>
+            <if test="serviceCategory != null "> and service_category = #{serviceCategory}</if>
+            <if test="timeBegin != null "> and time_begin = #{timeBegin}</if>
+            <if test="timeEnd != null "> and time_end = #{timeEnd}</if>
+            <if test="times != null  and times != ''"> and times = #{times}</if>
+            <if test="category != null "> and category = #{category}</if>
+            <if test="status != null "> and status = #{status}</if>
+            <if test="phone != null  and phone != ''"> and phone = #{phone}</if>
+            <if test="bussinessType != null  and bussinessType != ''"> and bussiness_type = #{bussinessType}</if>
+            <if test="hasParsed != null "> and has_parsed = #{hasParsed}</if>
+            <if test="parsedVoiceContent != null  and parsedVoiceContent != ''"> and parsed_voice_content = #{parsedVoiceContent}</if>
+            <if test="revision != null "> and revision = #{revision}</if>
+        </where>
+        and del_flag = 0 order by id desc
+    </select>
+    
+    <select id="selectTCallRecordById" parameterType="Long" resultMap="TCallRecordResult">
+        <include refid="selectTCallRecordVo"/>
+        where id = #{id} and del_flag = 0
+    </select>
+        
+    <insert id="insertTCallRecord" parameterType="TCallRecord" useGeneratedKeys="true" keyProperty="id">
+        insert into t_call_record
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="type != null">type,</if>
+            <if test="userId != null">user_id,</if>
+            <if test="userName != null">user_name,</if>
+            <if test="serviceCategory != null">service_category,</if>
+            <if test="timeBegin != null">time_begin,</if>
+            <if test="timeEnd != null">time_end,</if>
+            <if test="times != null">times,</if>
+            <if test="category != null">category,</if>
+            <if test="status != null">status,</if>
+            <if test="phone != null">phone,</if>
+            <if test="bussinessType != null">bussiness_type,</if>
+            <if test="remark != null">remark,</if>
+            <if test="hasParsed != null">has_parsed,</if>
+            <if test="parsedVoiceContent != null">parsed_voice_content,</if>
+            <if test="delFlag != null">del_flag,</if>
+            <if test="revision != null">revision,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="type != null">#{type},</if>
+            <if test="userId != null">#{userId},</if>
+            <if test="userName != null">#{userName},</if>
+            <if test="serviceCategory != null">#{serviceCategory},</if>
+            <if test="timeBegin != null">#{timeBegin},</if>
+            <if test="timeEnd != null">#{timeEnd},</if>
+            <if test="times != null">#{times},</if>
+            <if test="category != null">#{category},</if>
+            <if test="status != null">#{status},</if>
+            <if test="phone != null">#{phone},</if>
+            <if test="bussinessType != null">#{bussinessType},</if>
+            <if test="remark != null">#{remark},</if>
+            <if test="hasParsed != null">#{hasParsed},</if>
+            <if test="parsedVoiceContent != null">#{parsedVoiceContent},</if>
+            <if test="delFlag != null">#{delFlag},</if>
+            <if test="revision != null">#{revision},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+         </trim>
+    </insert>
+
+    <update id="updateTCallRecord" parameterType="TCallRecord">
+        update t_call_record
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="type != null">type = #{type},</if>
+            <if test="userId != null">user_id = #{userId},</if>
+            <if test="userName != null">user_name = #{userName},</if>
+            <if test="serviceCategory != null">service_category = #{serviceCategory},</if>
+            <if test="timeBegin != null">time_begin = #{timeBegin},</if>
+            <if test="timeEnd != null">time_end = #{timeEnd},</if>
+            <if test="times != null">times = #{times},</if>
+            <if test="category != null">category = #{category},</if>
+            <if test="status != null">status = #{status},</if>
+            <if test="phone != null">phone = #{phone},</if>
+            <if test="bussinessType != null">bussiness_type = #{bussinessType},</if>
+            <if test="remark != null">remark = #{remark},</if>
+            <if test="hasParsed != null">has_parsed = #{hasParsed},</if>
+            <if test="parsedVoiceContent != null">parsed_voice_content = #{parsedVoiceContent},</if>
+            <if test="delFlag != null">del_flag = #{delFlag},</if>
+            <if test="revision != null">revision = #{revision},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+        </trim>
+        ,revision = revision + 1
+        where id = #{id}
+    </update>
+
+    
+
+    <delete id="deleteTCallRecordById" parameterType="Long">
+        update t_call_record set del_flag = 2,revision = revision + 1 where del_flag = 0 and id = #{id}
+    </delete>
+
+    <delete id="deleteTCallRecordByIds" parameterType="String">
+        update t_call_record set del_flag = 2,revision = revision + 1 where del_flag = 0 and id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>