Browse Source

feat(store): 新增用户学习记录功能模块

- 创建用户学习记录实体类 LifeUserLearningRecord
- 实现用户学习记录的增删改查接口
- 提供根据用户ID查询学习记录的方法
- 支持分页查询用户学习记录列表
- 添加获取视频学习列表的功能
- 集成MyBatis Plus实现数据访问层
- 实现服务层逻辑处理和控制器路由映射
qrs 4 days ago
parent
commit
831639d9a4

+ 54 - 0
alien-entity/src/main/java/shop/alien/entity/store/LifeUserLearningRecord.java

@@ -0,0 +1,54 @@
+package shop.alien.entity.store;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+@JsonInclude
+@TableName("life_user_learning_record")
+@ApiModel(value = "LifeUserLearningRecord对象", description = "用户学习记录")
+public class LifeUserLearningRecord {
+
+    @ApiModelProperty(value = "主键id")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "用户id")
+    @TableField("user_id")
+    private Integer userId;
+
+    @ApiModelProperty(value = "学习id")
+    @TableField("learning_id")
+    private Integer learningId;
+
+    @ApiModelProperty(value = "删除标记, 0:未删除, 1:已删除")
+    @TableField("delete_flag")
+    @TableLogic
+    private Integer deleteFlag;
+
+    @ApiModelProperty(value = "创建时间")
+    @TableField(value = "created_time", fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createdTime;
+
+    @ApiModelProperty(value = "创建人ID")
+    @TableField("created_user_id")
+    private Integer createdUserId;
+
+    @ApiModelProperty(value = "修改时间")
+    @TableField(value = "updated_time", fill = FieldFill.UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date updatedTime;
+
+    @ApiModelProperty(value = "修改人ID")
+    @TableField("updated_user_id")
+    private Integer updatedUserId;
+
+}
+

+ 19 - 0
alien-entity/src/main/java/shop/alien/entity/store/vo/LifeUserLearningVideoVo.java

@@ -0,0 +1,19 @@
+package shop.alien.entity.store.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import shop.alien.entity.store.LifeUserLearningVideo;
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="LifeUserLearningVideoVo对象")
+public class LifeUserLearningVideoVo extends LifeUserLearningVideo {
+
+    @ApiModelProperty(value = "是否看过  0-没看过 1-看过")
+    private String isWatch;
+
+}

+ 17 - 0
alien-entity/src/main/java/shop/alien/mapper/LifeUserLearningRecordMapper.java

@@ -0,0 +1,17 @@
+package shop.alien.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+import shop.alien.entity.store.LifeUserLearningRecord;
+import shop.alien.entity.store.vo.LifeUserLearningVideoVo;
+
+import java.util.List;
+
+public interface LifeUserLearningRecordMapper extends BaseMapper<LifeUserLearningRecord> {
+
+    @Select("select video.name, video.profile, video.score, video.video_url, if(record.id is null, 0, 1) isWatch from life_user_learning_video video\n" +
+            "left join life_user_learning_record record on record.learning_id = video.id and user_id = #{userId}")
+    List<LifeUserLearningVideoVo> getListByUserId(@Param("userId") Integer userId);
+}
+

+ 98 - 0
alien-store/src/main/java/shop/alien/store/controller/LifeUserLearningRecordController.java

@@ -0,0 +1,98 @@
+tpackage shop.alien.store.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiOperationSupport;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.*;
+import shop.alien.entity.result.R;
+import shop.alien.entity.store.LifeUserLearningRecord;
+import shop.alien.entity.store.vo.LifeUserLearningVideoVo;
+import shop.alien.store.service.LifeUserLearningRecordService;
+
+import java.util.List;
+
+@Api(tags = {"用户学习记录"})
+@Slf4j
+@RestController
+@CrossOrigin
+@RequestMapping("/lifeUserLearningRecord")
+@RequiredArgsConstructor
+public class LifeUserLearningRecordController {
+
+    private final LifeUserLearningRecordService lifeUserLearningRecordService;
+
+    @ApiOperation("新增用户学习记录")
+    @ApiOperationSupport(order = 1)
+    @PostMapping("/add")
+    public R<String> add(@RequestBody LifeUserLearningRecord lifeUserLearningRecord) {
+        return lifeUserLearningRecordService.add(lifeUserLearningRecord);
+    }
+
+    @ApiOperation("根据ID删除用户学习记录")
+    @ApiOperationSupport(order = 2)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "主键ID", dataType = "Integer", paramType = "query", required = true)
+    })
+    @GetMapping("/deleteById")
+    public R<String> deleteById(@RequestParam Integer id) {
+        return lifeUserLearningRecordService.deleteById(id);
+    }
+
+    @ApiOperation("更新用户学习记录")
+    @ApiOperationSupport(order = 3)
+    @PostMapping("/update")
+    public R<String> update(@RequestBody LifeUserLearningRecord lifeUserLearningRecord) {
+        return lifeUserLearningRecordService.update(lifeUserLearningRecord);
+    }
+
+    @ApiOperation("根据ID查询用户学习记录")
+    @ApiOperationSupport(order = 4)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "主键ID", dataType = "Integer", paramType = "query", required = true)
+    })
+    @GetMapping("/getById")
+    public R<LifeUserLearningRecord> getById(@RequestParam Integer id) {
+        return lifeUserLearningRecordService.getInfoById(id);
+    }
+
+    @ApiOperation("根据用户ID查询用户学习记录")
+    @ApiOperationSupport(order = 5)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "userId", value = "用户ID", dataType = "Integer", paramType = "query", required = true)
+    })
+    @GetMapping("/getByUserId")
+    public R<LifeUserLearningRecord> getByUserId(@RequestParam Integer userId) {
+        return lifeUserLearningRecordService.getByUserId(userId);
+    }
+
+    @ApiOperation("分页查询用户学习记录列表")
+    @ApiOperationSupport(order = 6)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "pageNum", value = "页码", dataType = "Integer", paramType = "query", required = true),
+            @ApiImplicitParam(name = "pageSize", value = "每页数量", dataType = "Integer", paramType = "query", required = true),
+            @ApiImplicitParam(name = "userId", value = "用户ID", dataType = "Integer", paramType = "query")
+    })
+    @GetMapping("/list")
+    public R<IPage<LifeUserLearningRecord>> list(
+            @RequestParam Integer pageNum,
+            @RequestParam Integer pageSize,
+            @RequestParam(required = false) Integer userId) {
+        return lifeUserLearningRecordService.list(pageNum, pageSize, userId);
+    }
+
+    @ApiOperation("获取视频学习列表")
+    @ApiOperationSupport(order = 7)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "userId", value = "用户ID", dataType = "Integer", paramType = "query", required = true)
+    })
+    @GetMapping("/getListByUserId")
+    public R<List<LifeUserLearningVideoVo>> getListByUserId(@RequestParam Integer userId) {
+        return lifeUserLearningRecordService.getListByUserId(userId);
+    }
+}
+

+ 45 - 0
alien-store/src/main/java/shop/alien/store/service/LifeUserLearningRecordService.java

@@ -0,0 +1,45 @@
+package shop.alien.store.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import shop.alien.entity.result.R;
+import shop.alien.entity.store.LifeUserLearningRecord;
+import shop.alien.entity.store.vo.LifeUserLearningVideoVo;
+
+import java.util.List;
+
+public interface LifeUserLearningRecordService extends IService<LifeUserLearningRecord> {
+
+    /**
+     * 新增用户学习记录
+     */
+    R<String> add(LifeUserLearningRecord lifeUserLearningRecord);
+
+    /**
+     * 根据ID删除用户学习记录
+     */
+    R<String> deleteById(Integer id);
+
+    /**
+     * 更新用户学习记录
+     */
+    R<String> update(LifeUserLearningRecord lifeUserLearningRecord);
+
+    /**
+     * 根据ID查询用户学习记录
+     */
+    R<LifeUserLearningRecord> getInfoById(Integer id);
+
+    /**
+     * 根据用户ID查询用户学习记录
+     */
+    R<LifeUserLearningRecord> getByUserId(Integer userId);
+
+    /**
+     * 分页查询用户学习记录列表
+     */
+    R<IPage<LifeUserLearningRecord>> list(Integer pageNum, Integer pageSize, Integer userId);
+
+    R<List<LifeUserLearningVideoVo>> getListByUserId(Integer userId);
+}
+

+ 92 - 0
alien-store/src/main/java/shop/alien/store/service/impl/LifeUserLearningRecordServiceImpl.java

@@ -0,0 +1,92 @@
+package shop.alien.store.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import shop.alien.entity.result.R;
+import shop.alien.entity.store.LifeUserLearningRecord;
+import shop.alien.entity.store.LifeUserLearningVideo;
+import shop.alien.entity.store.vo.LifeUserLearningVideoVo;
+import shop.alien.mapper.LifeUserLearningRecordMapper;
+import shop.alien.mapper.LifeUserLearningVideoMapper;
+import shop.alien.store.service.LifeUserLearningRecordService;
+
+import java.util.List;
+
+@Service
+@RequiredArgsConstructor
+@Slf4j
+public class LifeUserLearningRecordServiceImpl extends ServiceImpl<LifeUserLearningRecordMapper, LifeUserLearningRecord> implements LifeUserLearningRecordService {
+
+    private final LifeUserLearningRecordMapper lifeUserLearningRecordMapper;
+    private final LifeUserLearningVideoMapper lifeUserLearningVideoMapper;
+
+    @Override
+    public R<String> add(LifeUserLearningRecord lifeUserLearningRecord) {
+        log.info("LifeUserLearningRecordServiceImpl.add, param={}", lifeUserLearningRecord);
+        boolean result = this.save(lifeUserLearningRecord);
+        if (result) {
+            return R.success("新增成功");
+        }
+        return R.fail("新增失败");
+    }
+
+    @Override
+    public R<String> deleteById(Integer id) {
+        log.info("LifeUserLearningRecordServiceImpl.deleteById, id={}", id);
+        boolean result = this.removeById(id);
+        if (result) {
+            return R.success("删除成功");
+        }
+        return R.fail("删除失败");
+    }
+
+    @Override
+    public R<String> update(LifeUserLearningRecord lifeUserLearningRecord) {
+        log.info("LifeUserLearningRecordServiceImpl.update, param={}", lifeUserLearningRecord);
+        boolean result = this.updateById(lifeUserLearningRecord);
+        if (result) {
+            return R.success("更新成功");
+        }
+        return R.fail("更新失败");
+    }
+
+    @Override
+    public R<LifeUserLearningRecord> getInfoById(Integer id) {
+        log.info("LifeUserLearningRecordServiceImpl.getInfoById, id={}", id);
+        LifeUserLearningRecord result = this.getById(id);
+        return R.data(result);
+    }
+
+    @Override
+    public R<LifeUserLearningRecord> getByUserId(Integer userId) {
+        log.info("LifeUserLearningRecordServiceImpl.getByUserId, userId={}", userId);
+        LambdaQueryWrapper<LifeUserLearningRecord> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(LifeUserLearningRecord::getUserId, userId);
+        LifeUserLearningRecord result = this.getOne(queryWrapper);
+        return R.data(result);
+    }
+
+    @Override
+    public R<IPage<LifeUserLearningRecord>> list(Integer pageNum, Integer pageSize, Integer userId) {
+        log.info("LifeUserLearningRecordServiceImpl.list, pageNum={}, pageSize={}, userId={}", pageNum, pageSize, userId);
+        Page<LifeUserLearningRecord> page = new Page<>(pageNum, pageSize);
+        LambdaQueryWrapper<LifeUserLearningRecord> queryWrapper = new LambdaQueryWrapper<>();
+        if (userId != null) {
+            queryWrapper.eq(LifeUserLearningRecord::getUserId, userId);
+        }
+        queryWrapper.orderByDesc(LifeUserLearningRecord::getCreatedTime);
+        IPage<LifeUserLearningRecord> result = this.page(page, queryWrapper);
+        return R.data(result);
+    }
+
+    @Override
+    public R<List<LifeUserLearningVideoVo>> getListByUserId(Integer userId) {
+        return R.data(lifeUserLearningRecordMapper.getListByUserId(userId));
+    }
+}
+