Commit 58ad4b20 by 吴博

feat: [1004273] 本书服务埋点

parent 1fd15347
...@@ -124,4 +124,8 @@ public interface AppletService { ...@@ -124,4 +124,8 @@ public interface AppletService {
@GetMapping("autoChageBannerState") @GetMapping("autoChageBannerState")
void autoChageBannerState(@RequestParam("id") Long id, void autoChageBannerState(@RequestParam("id") Long id,
@RequestParam("showState") Integer showState); @RequestParam("showState") Integer showState);
@ApiOperation("定时任务从redis中删掉超时的本书服务记录")
@GetMapping("autoDeleteReadBook")
void autoDeleteReadBook();
} }
...@@ -47,6 +47,12 @@ public class BookConstant { ...@@ -47,6 +47,12 @@ public class BookConstant {
/** /**
* 图书缓存时间60分钟 * 图书缓存时间60分钟
*/ */
public static final Integer BOOK_CACHE_MINUTE = 60;
/**
* 图书缓存时间60分钟
*/
public static final Integer BOOK_CACHE_SECOUND = 3600; public static final Integer BOOK_CACHE_SECOUND = 3600;
/** /**
......
package com.pcloud.book.applet.biz;
import com.pcloud.book.applet.dto.ReadBookRecordDTO;
import com.pcloud.book.applet.entity.ReadBookRecord;
import com.pcloud.common.page.PageBeanNew;
/**
* (ReadBookRecord)表服务接口
*
* @author makejava
* @since 2021-02-04 15:33:43
*/
public interface ReadBookRecordBiz {
/**
* 通过ID查询单条数据
*
* @param id 主键
* @return 实例对象
*/
ReadBookRecord getById(Long id);
/**
* 分页查询
*/
PageBeanNew getList(Integer currentPage, Integer numPerPage);
/**
* 新增数据
*
* @param readBookRecord 实例对象
* @return 主键
*/
Long insert(ReadBookRecord readBookRecord);
/**
* 修改数据
*
* @param readBookRecord 实例对象
*/
void update(ReadBookRecord readBookRecord);
/**
* 通过主键删除数据
*
* @param id 主键
* @return 是否成功
*/
void deleteById(Long id);
/**
* 新增记录
* @param readBookRecordDTO
*/
Long addReadBookRecord(ReadBookRecordDTO readBookRecordDTO);
/**
* 定时任务从redis中删掉超时的本书服务记录
*/
void autoDeleteReadBook();
}
\ No newline at end of file
package com.pcloud.book.applet.biz.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.setting.SettingUtil;
import com.pcloud.book.applet.biz.ReadBookRecordBiz;
import com.pcloud.book.applet.dao.ReadBookRecordDao;
import com.pcloud.book.applet.dto.ReadBookRecordDTO;
import com.pcloud.book.applet.entity.ReadBookRecord;
import com.pcloud.book.book.constant.BookConstant;
import com.pcloud.book.util.common.ThreadPoolUtils;
import com.pcloud.common.core.aspect.ParamLog;
import com.pcloud.common.exceptions.BizException;
import com.pcloud.common.page.PageBeanNew;
import com.pcloud.common.page.PageParam;
import com.pcloud.common.utils.BeanUtils;
import com.pcloud.common.utils.ListUtils;
import com.pcloud.common.utils.NumberUtil;
import com.pcloud.common.utils.cache.redis.JedisClusterUtils;
import com.pcloud.common.utils.json.JSONUtils;
import com.pcloud.readercenter.common.enums.YesOrNoNumEnum;
import org.apache.commons.collections4.SetUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import static cn.hutool.core.date.DateUnit.SECOND;
import static com.pcloud.book.book.constant.BookConstant.BOOK_CACHE_MINUTE;
/**
* (ReadBookRecord)表服务实现类
*
* @author makejava
* @since 2021-02-04 15:33:44
*/
@Service("readBookRecordBiz")
public class ReadBookRecordBizImpl implements ReadBookRecordBiz {
private static final Logger LOGGER = LoggerFactory.getLogger(ReadBookRecordBizImpl.class);
private static final String redisKey4Reader = "BOOK:READER_ALL";
@Autowired
private ReadBookRecordDao readBookRecordDao;
@Override
@ParamLog("通过ID查询单条数据")
public ReadBookRecord getById(Long id) {
return readBookRecordDao.getById(id);
}
@Override
@ParamLog("查询多条数据")
public PageBeanNew getList(Integer currentPage, Integer numPerPage) {
PageBeanNew pageBeanNew = readBookRecordDao.listPageNew(new PageParam(currentPage, numPerPage), null, "getList");
List recordList = pageBeanNew.getRecordList();
if (ListUtils.isEmpty(recordList)) {
return pageBeanNew;
}
// 加载其它数据
return pageBeanNew;
}
@Override
@ParamLog("新增")
public Long insert(ReadBookRecord readBookRecord) {
readBookRecordDao.insert(readBookRecord);
return readBookRecord.getId();
}
@Override
@ParamLog("修改")
public void update(ReadBookRecord readBookRecord) {
if (readBookRecord == null || !NumberUtil.isNumber(readBookRecord.getId())) {
throw BizException.PARAM_IS_NULL;
}
readBookRecordDao.update(readBookRecord);
}
@Override
@ParamLog("删除")
public void deleteById(Long id) {
readBookRecordDao.deleteById(id);
}
@Override
@ParamLog("新增用户阅读本书服务记录")
public Long addReadBookRecord(ReadBookRecordDTO readBookRecordDTO) {
Long bookId = readBookRecordDTO.getBookId();
Long channelId = readBookRecordDTO.getChannelId();
Long adviserId = readBookRecordDTO.getAdviserId();
Long id = readBookRecordDTO.getId();
String redisKey4Random = "BOOK:READER_COUNT:" + bookId + ":" + channelId + ":" + adviserId;
String redisKey4Set = "BOOK:READER_SET:" + bookId + ":" + channelId + ":" + adviserId;
Integer readerCount = null;
//获取随机读者数
if (JedisClusterUtils.exists(redisKey4Random)) {
JedisClusterUtils.expire(redisKey4Random, BookConstant.BOOK_CACHE_SECOUND);
} else {
List<Integer> readerCountList = BookConstant.READER_COUNT_MAP.get(DateUtil.hour(new Date(), Boolean.TRUE));
readerCount = RandomUtil.randomInt(readerCountList.get(0), readerCountList.get(1));
JedisClusterUtils.set(redisKey4Random, readerCount.toString(), BookConstant.BOOK_CACHE_SECOUND);
}
//新增记录并获取当前在读人数
if (Objects.equals(YesOrNoNumEnum.YES.getValue(), readBookRecordDTO.getRecordType())) {
JedisClusterUtils.sadd(redisKey4Set, readBookRecordDTO.getWechatUserId().toString());
JedisClusterUtils.expire(redisKey4Set, BookConstant.BOOK_CACHE_SECOUND);
ReadBookRecord readBookRecord = new ReadBookRecord();
//id为空 新记录 插入数据库 并新增到redis中
BeanUtils.copyProperties(readBookRecordDTO, readBookRecord);
readBookRecord.setStartTime(new Date());
readBookRecord.setLeaveType(YesOrNoNumEnum.NO.getValue());
readBookRecordDao.insert(readBookRecord);
id = readBookRecord.getId();
JedisClusterUtils.sadd(redisKey4Reader, JSONUtils.toJsonString(readBookRecord));
JedisClusterUtils.expire(redisKey4Reader, BookConstant.BOOK_CACHE_SECOUND);
} else if (Objects.equals(YesOrNoNumEnum.NO.getValue(), readBookRecordDTO.getRecordType())) {
ReadBookRecord readBookRecord = readBookRecordDao.getById(id);
readBookRecord.setRecordTime(null);
readBookRecord.setEndTime(null);
JedisClusterUtils.srem(redisKey4Set, readBookRecordDTO.getWechatUserId().toString());
JedisClusterUtils.expire(redisKey4Set, BookConstant.BOOK_CACHE_SECOUND);
String s = JSONUtils.toJsonString(readBookRecord);
JedisClusterUtils.srem(redisKey4Reader, JSONUtils.toJsonString(readBookRecord));
JedisClusterUtils.expire(redisKey4Reader, BookConstant.BOOK_CACHE_SECOUND);
//id不为空 更新数据库时间 并从redis中删除
Date endTime = new Date();
readBookRecord.setEndTime(endTime);
readBookRecord.setRecordTime(DateUtil.between(readBookRecord.getStartTime(), endTime, SECOND));
readBookRecordDao.updateRecordTime(readBookRecord);
}
return id;
}
@Override
public void autoDeleteReadBook() {
Set<String> smembers = JedisClusterUtils.smembers(redisKey4Reader);
if (null == smembers || smembers.size() == 0) {
LOGGER.info("autoDeleteReadBook, 缓存为空,返回");
return;
}
List<ReadBookRecord> readBookRecords = new ArrayList<>();
List<ReadBookRecord> readBookRecords4Expire = new ArrayList<>();
smembers.stream().forEach(e ->{
ReadBookRecord readBookRecord = JSONUtils.jsonToBean(e, ReadBookRecord.class);
readBookRecords.add(readBookRecord);
});
if (ListUtils.isEmpty(readBookRecords)) {
return;
}
readBookRecords.stream().forEach(e -> {
Date startTime = e.getStartTime();
long between = DateUtil.between(startTime, new Date(), SECOND);
//查找开始时间与现在时间超过1分钟的数据
if (between > BOOK_CACHE_MINUTE) {
JedisClusterUtils.srem(redisKey4Reader, JSONUtils.toJsonString(e));
e.setEndTime(DateUtil.offsetMinute(e.getStartTime(), 1));
e.setRecordTime(Long.valueOf(BOOK_CACHE_MINUTE));
e.setLeaveType(YesOrNoNumEnum.YES.getValue());
readBookRecords4Expire.add(e);
}
});
if (ListUtils.isEmpty(readBookRecords4Expire)) {
return;
}
LOGGER.info("批量更新已过期的本书服务页浏览记录:{}", readBookRecords4Expire);
readBookRecordDao.batchUpdateRecordTime(readBookRecords4Expire);
}
}
\ No newline at end of file
package com.pcloud.book.applet.dao;
import com.pcloud.book.applet.entity.ReadBookRecord;
import com.pcloud.common.core.dao.BaseDao;
import java.util.List;
/**
* (ReadBookRecord)表数据库访问层
*
* @author makejava
* @since 2021-02-04 15:33:43
*/
public interface ReadBookRecordDao extends BaseDao<ReadBookRecord> {
/**
* 更新访问时间
* @param readBookRecord
*/
void updateRecordTime(ReadBookRecord readBookRecord);
/**
*
* @param readBookRecords
*/
void batchUpdateRecordTime(List<ReadBookRecord> readBookRecords);
}
\ No newline at end of file
package com.pcloud.book.applet.dao.impl;
import com.pcloud.book.applet.dao.ReadBookRecordDao;
import com.pcloud.book.applet.entity.ReadBookRecord;
import com.pcloud.common.core.dao.BaseDaoImpl;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* (ReadBookRecord)表数据库访问层
*
* @author makejava
* @since 2021-02-04 15:33:43
*/
@Repository("readBookRecordDaoImpl")
public class ReadBookRecordDaoImpl extends BaseDaoImpl<ReadBookRecord> implements ReadBookRecordDao {
@Override
public void updateRecordTime(ReadBookRecord readBookRecord) {
getSessionTemplate().update(getStatement("updateRecordTime"), readBookRecord);
}
@Override
public void batchUpdateRecordTime(List<ReadBookRecord> readBookRecords) {
getSessionTemplate().update(getStatement("batchUpdateRecordTime"), readBookRecords);
}
}
\ No newline at end of file
...@@ -4,6 +4,11 @@ import lombok.Data; ...@@ -4,6 +4,11 @@ import lombok.Data;
@Data @Data
public class ReadBookRecordDTO { public class ReadBookRecordDTO {
/**
* 主键id
*/
private Long id;
/** /**
* 书刊id * 书刊id
*/ */
......
package com.pcloud.book.applet.dto;
import lombok.Data;
@Data
public class ReadBookRedisDTO {
}
package com.pcloud.book.applet.entity;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.pcloud.common.entity.BaseEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* (ReadBookRecord)实体类
*
* @author makejava
* @since 2021-02-04 18:17:00
*/
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class ReadBookRecord extends BaseEntity {
private static final long serialVersionUID = 430043591368019316L;
@ApiModelProperty("主键id")
private Long id;
@ApiModelProperty("用户id")
private Long wechatUserId;
@ApiModelProperty("书籍id")
private Long bookId;
@ApiModelProperty("渠道id")
private Long channelId;
@ApiModelProperty("编辑id")
private Long adviserId;
@ApiModelProperty("访问开始时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date startTime;
@ApiModelProperty("访问结束时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date endTime;
@ApiModelProperty("本次访问持续时间")
private Long recordTime;
@ApiModelProperty("记录来源 默认0 小程序")
private Integer recordSource;
@ApiModelProperty("离开方式 默认0 主动离开 1 超时离开")
private Integer leaveType;
}
\ No newline at end of file
package com.pcloud.book.applet.facade;
import com.pcloud.book.applet.biz.ReadBookRecordBiz;
import com.pcloud.book.applet.dto.ReadBookRecordDTO;
import com.pcloud.book.applet.entity.ReadBookRecord;
import com.pcloud.book.base.exception.BookBizException;
import com.pcloud.common.dto.ResponseDto;
import com.pcloud.common.exceptions.BizException;
import com.pcloud.common.permission.PermissionException;
import com.pcloud.common.utils.SessionUtil;
import com.pcloud.common.utils.cookie.Cookie;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
/**
* (ReadBookRecord)表控制层
*
* @author makejava
* @since 2021-02-04 15:33:44
*/
@RestController("readBookRecordFacade")
@RequestMapping("readBookRecord")
public class ReadBookRecordFacade {
@Autowired
private ReadBookRecordBiz readBookRecordBiz;
@ApiOperation("通过主键查询单条数据")
@GetMapping("getById")
public ResponseDto<?> getById(@RequestHeader("token") String token, @RequestParam Long id) throws BizException, PermissionException {
SessionUtil.getToken4Redis(token);
return new ResponseDto<>(readBookRecordBiz.getById(id));
}
@ApiOperation("分页查询")
@GetMapping("getList")
public ResponseDto<?> getList(@RequestHeader("token") String token,
@RequestParam(value = "currentPage", defaultValue = "0") Integer currentPage,
@RequestParam(value = "numPerPage", defaultValue = "10") Integer numPerPage)
throws BizException, PermissionException {
SessionUtil.getToken4Redis(token);
return new ResponseDto<>(readBookRecordBiz.getList(currentPage, numPerPage));
}
@ApiOperation("新增")
@PostMapping("insert")
public ResponseDto<?> insert(@RequestHeader("token") String token, @RequestBody ReadBookRecord readBookRecord)
throws BizException, PermissionException {
SessionUtil.getToken4Redis(token);
return new ResponseDto<>(readBookRecordBiz.insert(readBookRecord));
}
@ApiOperation("更新")
@PostMapping("update")
public ResponseDto<?> update(@RequestHeader("token") String token, @RequestBody ReadBookRecord readBookRecord) throws BizException, PermissionException {
SessionUtil.getToken4Redis(token);
readBookRecordBiz.update(readBookRecord);
return new ResponseDto<>();
}
@ApiOperation("删除")
@GetMapping("deleteById")
public ResponseDto<?> deleteById(@RequestHeader("token") String token, @RequestParam Long id) throws BizException, PermissionException {
SessionUtil.getToken4Redis(token);
if (null == id) {
throw BookBizException.PARAM_DELETION;
}
readBookRecordBiz.deleteById(id);
return new ResponseDto<>();
}
@ApiOperation("本书服务页阅读记录")
@RequestMapping(value = "addReadBookRecord", method = RequestMethod.POST)
public ResponseDto<Long> addReadBookRecord(@CookieValue("userInfo") String userInfo,
@RequestBody ReadBookRecordDTO readBookRecordDTO){
Long wechatUserId = Cookie.getId(userInfo,Cookie._WECHAT_USER_ID);
readBookRecordDTO.setWechatUserId(wechatUserId);
return new ResponseDto<Long>( readBookRecordBiz.addReadBookRecord(readBookRecordDTO));
}
}
\ No newline at end of file
...@@ -10,6 +10,7 @@ import com.pcloud.book.applet.biz.AppletRecordBiz; ...@@ -10,6 +10,7 @@ import com.pcloud.book.applet.biz.AppletRecordBiz;
import com.pcloud.book.applet.biz.AppletRecordStatisBiz; import com.pcloud.book.applet.biz.AppletRecordStatisBiz;
import com.pcloud.book.applet.biz.AppletRecordAggrStatisBiz; import com.pcloud.book.applet.biz.AppletRecordAggrStatisBiz;
import com.pcloud.book.applet.biz.AppletThirdResourcesStaticBiz; import com.pcloud.book.applet.biz.AppletThirdResourcesStaticBiz;
import com.pcloud.book.applet.biz.ReadBookRecordBiz;
import com.pcloud.book.applet.biz.ServeCollectBiz; import com.pcloud.book.applet.biz.ServeCollectBiz;
import com.pcloud.book.applet.dto.AppletAppOrProductDTO; import com.pcloud.book.applet.dto.AppletAppOrProductDTO;
import com.pcloud.book.applet.dto.AppletNewsDTO; import com.pcloud.book.applet.dto.AppletNewsDTO;
...@@ -24,6 +25,7 @@ import com.pcloud.book.applet.service.AppletService; ...@@ -24,6 +25,7 @@ import com.pcloud.book.applet.service.AppletService;
import com.pcloud.book.rightsSetting.biz.RightsSettingBiz; import com.pcloud.book.rightsSetting.biz.RightsSettingBiz;
import com.pcloud.book.skill.biz.PcloudGroupActivityBiz; import com.pcloud.book.skill.biz.PcloudGroupActivityBiz;
import com.pcloud.book.skill.entity.PcloudGroupActivity; import com.pcloud.book.skill.entity.PcloudGroupActivity;
import com.pcloud.common.core.aspect.ParamLog;
import com.pcloud.common.dto.ResponseDto; import com.pcloud.common.dto.ResponseDto;
import com.pcloud.common.utils.BeanUtils; import com.pcloud.common.utils.BeanUtils;
import com.pcloud.common.utils.ListUtils; import com.pcloud.common.utils.ListUtils;
...@@ -81,6 +83,8 @@ public class AppletServiceImpl implements AppletService { ...@@ -81,6 +83,8 @@ public class AppletServiceImpl implements AppletService {
private AppletRecordAggrStatisBiz appletRecordAggrStatisBiz; private AppletRecordAggrStatisBiz appletRecordAggrStatisBiz;
@Autowired @Autowired
private AppletBannerBiz appletBannerBiz; private AppletBannerBiz appletBannerBiz;
@Autowired
private ReadBookRecordBiz readBookRecordBiz;
@Override @Override
...@@ -224,4 +228,11 @@ public class AppletServiceImpl implements AppletService { ...@@ -224,4 +228,11 @@ public class AppletServiceImpl implements AppletService {
appletBannerBiz.autoChageBannerState(id, showState); appletBannerBiz.autoChageBannerState(id, showState);
} }
@Override
@ParamLog("定时任务从redis中删掉超时的本书服务记录")
@GetMapping("autoDeleteReadBook")
public void autoDeleteReadBook() {
readBookRecordBiz.autoDeleteReadBook();
}
} }
<?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.pcloud.book.applet.dao.impl.ReadBookRecordDaoImpl">
<resultMap id="BaseResultMap" type="com.pcloud.book.applet.entity.ReadBookRecord">
<id column="id" property="id" jdbcType="BIGINT"/>
<result column="wechat_user_id" property="wechatUserId" jdbcType="BIGINT"/>
<result column="book_id" property="bookId" jdbcType="BIGINT"/>
<result column="channel_id" property="channelId" jdbcType="BIGINT"/>
<result column="adviser_id" property="adviserId" jdbcType="BIGINT"/>
<result column="start_time" property="startTime" jdbcType="TIMESTAMP"/>
<result column="end_time" property="endTime" jdbcType="TIMESTAMP"/>
<result column="record_time" property="recordTime" jdbcType="BIGINT"/>
<result column="record_source" property="recordSource" jdbcType="INTEGER"/>
<result column="leave_type" property="leaveType" jdbcType="INTEGER"/>
</resultMap>
<sql id="Base_Column_List">
id, wechat_user_id, book_id, channel_id, adviser_id, start_time, end_time, record_time, record_source, leave_type
</sql>
<select id="getById" resultMap="BaseResultMap">
SELECT
<include refid="Base_Column_List"/>
FROM read_book_record
WHERE id = #{id}
</select>
<select id="getList" resultMap="BaseResultMap">
SELECT
<include refid="Base_Column_List"/>
FROM read_book_record
</select>
<insert id="insert" keyProperty="id" useGeneratedKeys="true">
INSERT INTO read_book_record(
wechat_user_id,
book_id,
channel_id,
adviser_id,
start_time,
end_time,
record_time,
record_source,
leave_type,
update_time
) VALUES (
#{wechatUserId, jdbcType=BIGINT},
#{bookId, jdbcType=BIGINT},
#{channelId, jdbcType=BIGINT},
#{adviserId, jdbcType=BIGINT},
#{startTime, jdbcType=TIMESTAMP},
#{endTime, jdbcType=TIMESTAMP},
#{recordTime, jdbcType=BIGINT},
#{recordSource, jdbcType=INTEGER},
#{leaveType, jdbcType=INTEGER},
now()
)
</insert>
<insert id="batchInsert">
INSERT INTO read_book_record (
wechat_user_id,
book_id,
channel_id,
adviser_id,
start_time,
end_time,
record_time,
record_source,
leave_type
) VALUES
<foreach collection="list" item="item" separator=",">
(
#{item.wechatUserId, jdbcType=BIGINT},
#{item.bookId, jdbcType=BIGINT},
#{item.channelId, jdbcType=BIGINT},
#{item.adviserId, jdbcType=BIGINT},
#{item.startTime, jdbcType=TIMESTAMP},
#{item.endTime, jdbcType=TIMESTAMP},
#{item.recordTime, jdbcType=BIGINT},
#{item.recordSource, jdbcType=INTEGER},
#{item.leaveType, jdbcType=INTEGER}
)
</foreach>
</insert>
<!--通过主键修改数据-->
<update id="update">
UPDATE read_book_record
<set>
<if test="wechatUserId != null">
wechat_user_id = #{wechatUserId},
</if>
<if test="bookId != null">
book_id = #{bookId},
</if>
<if test="channelId != null">
channel_id = #{channelId},
</if>
<if test="adviserId != null">
adviser_id = #{adviserId},
</if>
<if test="startTime != null">
start_time = #{startTime},
</if>
<if test="endTime != null">
end_time = #{endTime},
</if>
<if test="recordTime != null">
record_time = #{recordTime},
</if>
<if test="recordSource != null">
record_source = #{recordSource},
</if>
<if test="leaveType != null">
leave_type = #{leaveType},
</if>
</set>
WHERE id = #{id}
</update>
<!--通过主键删除-->
<delete id="deleteById">
DELETE FROM read_book_record where id = #{id}
</delete>
<update id="updateRecordTime">
UPDATE read_book_record
<set>
<if test="endTime != null">
end_time = #{endTime},
record_time = #{recordTime}
</if>
</set>
WHERE id = #{id}
</update>
<update id="batchUpdateRecordTime" parameterType="com.pcloud.book.applet.entity.ReadBookRecord">
UPDATE read_book_record
<trim prefix="set" suffixOverrides=",">
<trim prefix="end_time =case" suffix="end,">
<foreach collection="list" item="item">
<if test="item.endTime!=null">
when id=#{item.id} then #{item.endTime}
</if>
</foreach>
</trim>
record_time = 60,
leave_type = 1,
update_time = now(),
</trim>
WHERE
<foreach collection="list" separator="or" item="item">
id = #{item.id}
</foreach>
</update>
</mapper>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment