Browse Source

用户记录保存

zsf 2 months ago
parent
commit
3c92805c9e

+ 5 - 1
build.gradle

@@ -78,7 +78,7 @@ dependencies {
     // https://mvnrepository.com/artifact/commons-lang/commons-lang
     implementation 'commons-lang:commons-lang:2.6'
     // https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload
-    implementation group: 'commons-fileupload', name: 'commons-fileupload', version: '1.3.1'
+    implementation group: 'commons-fileupload', name: 'commons-fileupload', version: '1.3.3'
 // https://mvnrepository.com/artifact/cn.keking.project/kk-anti-reptile
     implementation group: 'cn.keking.project', name: 'kk-anti-reptile', version: '1.0.0-RELEASE'
 // https://mvnrepository.com/artifact/com.github.qcloudsms/qcloudsms
@@ -95,6 +95,10 @@ dependencies {
     // https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk15on
     implementation 'org.bouncycastle:bcprov-jdk15on:1.57'
 
+    // https://mvnrepository.com/artifact/cn.hutool/hutool-all
+    implementation group: 'cn.hutool', name: 'hutool-all', version: '5.8.25'
+
+
 
 }
 

+ 2 - 0
src/main/java/com/zzys/lightting/base/model/BaseEntity.java

@@ -1,6 +1,7 @@
 package com.zzys.lightting.base.model;
 
 
+import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
@@ -30,6 +31,7 @@ public class BaseEntity implements Serializable {
     @GeneratedValue(generator = "jpa-uuid")
     @Column(name = "id", columnDefinition = "varchar(36) COMMENT '数据ID'")
     @NotNull(groups = Update.class)
+    @ApiModelProperty(name = "ID",required = false,hidden = true)
     private String id;
 
     public @interface Update {

+ 57 - 0
src/main/java/com/zzys/lightting/user/dao/model/UserListenRecord.java

@@ -0,0 +1,57 @@
+package com.zzys.lightting.user.dao.model;
+
+import com.zzys.lightting.base.model.BaseEntity;
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Table;
+
+/**
+ * @Description:用户聆听记录
+ * @Author: mimang
+ * @Date: 2025/1/21
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Entity
+@Table(name = "lt_user_listen_record")
+public class UserListenRecord extends BaseEntity {
+
+    @ApiModelProperty(name = "用户编号",required = false,hidden = true)
+    @Column(name = "user_no",columnDefinition = "varchar(50) not null comment '用户编号'")
+    private String userNo;
+
+    @ApiModelProperty(name = "用户名称",required = false,hidden = true)
+    @Column(name = "user_name",columnDefinition = "varchar(50) not null comment '用户名称'")
+    private String userName;
+
+    @ApiModelProperty(name = "组织编号",required = false,hidden = true)
+    @Column(name = "org_no",columnDefinition = "varchar(50) not null comment '组织编号'")
+    private String orgNo;
+
+    @ApiModelProperty(name = "组织名称",required = false,hidden = true)
+    @Column(name = "org_name",columnDefinition = "varchar(50)  comment '组织名称'")
+    private String orgName;
+
+    @ApiModelProperty(name = "音乐ID",required = true)
+    @Column(name = "music_id",columnDefinition = "varchar(36) not null comment '音乐ID'")
+    private String musicId;
+
+    @ApiModelProperty(name = "音乐类型ID",required = true)
+    @Column(name = "type_id",columnDefinition = "varchar(36) not null comment '音乐类型ID'")
+    private String typeId;
+
+    @ApiModelProperty(name = "创建时间",required = false,hidden = true)
+    @Column(name = "create_time",columnDefinition = "varchar(30) not null comment '创建时间'")
+    private String createTime;
+
+    @ApiModelProperty(name = "更新时间",required = false,hidden = true)
+    @Column(name = "update_time",columnDefinition = "varchar(30)  comment '更新时间'")
+    private String updateTime;
+}

+ 10 - 0
src/main/java/com/zzys/lightting/user/dao/model/UserToken.java

@@ -1,10 +1,17 @@
 package com.zzys.lightting.user.dao.model;
 
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
 /**
  * @Description:用户Token
  * @Author: mimang
  * @Date: 2025/1/20
  */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
 public class UserToken {
 
     //用户id
@@ -21,4 +28,7 @@ public class UserToken {
 
     //用户组织名称
     private String orgName;
+
+    //role
+    private String roleType;
 }

+ 12 - 0
src/main/java/com/zzys/lightting/user/dao/repository/UserListenRecordRepository.java

@@ -0,0 +1,12 @@
+package com.zzys.lightting.user.dao.repository;
+
+import com.zzys.lightting.base.repository.BaseRepository;
+import com.zzys.lightting.user.dao.model.UserListenRecord;
+
+/**
+ * @Description:聆听记录接口
+ * @Author: mimang
+ * @Date: 2025/1/21
+ */
+public interface UserListenRecordRepository extends BaseRepository<UserListenRecord,String> {
+}

+ 85 - 0
src/main/java/com/zzys/lightting/user/rest/UserListenRecordController.java

@@ -0,0 +1,85 @@
+package com.zzys.lightting.user.rest;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.date.DateUtil;
+import com.zzys.lightting.base.rest.BaseController;
+import com.zzys.lightting.user.dao.model.UserListenRecord;
+import com.zzys.lightting.user.dao.model.UserToken;
+import com.zzys.lightting.user.service.UserListenRecordService;
+import com.zzys.lightting.utils.Result;
+import com.zzys.lightting.utils.WebContextUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * @Description:聆听记录接口
+ * @Author: mimang
+ * @Date: 2025/1/21
+ */
+@Slf4j
+@RestController
+@RequestMapping(value = "/listenRecord")
+@Api(tags = "用户音乐聆听管理")
+public class UserListenRecordController extends BaseController {
+
+    @Autowired
+    private UserListenRecordService recordService;
+
+
+    /**
+     * 保存用户聆听记录
+     * @param record
+     * @return
+     */
+    @ApiOperation(value = "保存用户聆听记录", notes = "用户聆听管理")
+    @PostMapping("/saveListenRecord")
+    public Result saveListenRecord(@RequestBody UserListenRecord record){
+        try {
+            UserToken userToken = WebContextUtil.getUserToken();
+            if (userToken== null){
+                return fail(null,"token值非法");
+            }
+            BeanUtil.copyProperties(userToken,record,"id");
+            return success(recordService.saveRecord(record));
+        }catch (Exception e){
+            e.printStackTrace();
+            log.error(e.getMessage());
+            return fail();
+        }
+    }
+
+
+    @ApiOperation(value = "结束音乐聆听")
+    @GetMapping("/finishListen")
+    public Result finishListen(@RequestParam String recordId){
+        try {
+            UserListenRecord record = recordService.findById(recordId);
+            if (record != null){
+                return success(recordService.finishRecord(record));
+            }else {
+                return fail();
+            }
+        }catch (Exception e){
+            e.printStackTrace();
+            log.error(e.getMessage());
+            return fail();
+        }
+    }
+
+    @ApiOperation(value = "查询聆听记录")
+    @PostMapping("/findListByPage")
+    public Result findListByPage(@RequestBody(required = false) UserListenRecord record,@RequestParam int pageSize,@RequestParam int pageNum){
+        try {
+            Page<UserListenRecord> page = recordService.findListByPage(record,pageSize,pageNum);
+            return success(page);
+        }catch (Exception e){
+            e.printStackTrace();
+            log.error(e.getMessage());
+            return fail();
+        }
+    }
+}

+ 42 - 0
src/main/java/com/zzys/lightting/user/service/UserListenRecordService.java

@@ -0,0 +1,42 @@
+package com.zzys.lightting.user.service;
+
+import com.zzys.lightting.user.dao.model.UserListenRecord;
+import org.springframework.data.domain.Page;
+
+/**
+ * @Description:聆听记录接口
+ * @Author: mimang
+ * @Date: 2025/1/21
+ */
+public interface UserListenRecordService {
+
+    /**
+     * 保存点击记录
+     * @param record
+     * @return
+     */
+    public UserListenRecord saveRecord(UserListenRecord record);
+
+    /**
+     * 根据ID查询详情
+     * @param recordId
+     * @return
+     */
+    UserListenRecord findById(String recordId);
+
+    /**
+     * 结束聆听
+     * @param record
+     * @return
+     */
+    UserListenRecord finishRecord(UserListenRecord record);
+
+    /**
+     * 获取到聆听列表
+     * @param record
+     * @param pageSize
+     * @param pageNum
+     * @return
+     */
+    Page<UserListenRecord> findListByPage(UserListenRecord record, int pageSize, int pageNum);
+}

+ 89 - 0
src/main/java/com/zzys/lightting/user/service/impl/UserListenRecordServiceImpl.java

@@ -0,0 +1,89 @@
+package com.zzys.lightting.user.service.impl;
+
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.PageUtil;
+import com.zzys.lightting.user.dao.model.UserListenRecord;
+import com.zzys.lightting.user.dao.repository.UserListenRecordRepository;
+import com.zzys.lightting.user.service.UserListenRecordService;
+import com.zzys.lightting.utils.EscapeUtil;
+import com.zzys.lightting.utils.PageRequestUtil;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.jpa.domain.Specification;
+import org.springframework.stereotype.Service;
+
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * @Description:聆听记录接口
+ * @Author: mimang
+ * @Date: 2025/1/21
+ */
+@Service
+public class UserListenRecordServiceImpl implements UserListenRecordService {
+
+    @Autowired
+    private UserListenRecordRepository repository;
+
+
+    @Override
+    public UserListenRecord saveRecord(UserListenRecord record) {
+        record.setCreateTime(DateUtil.now());
+        return repository.save(record);
+    }
+
+    @Override
+    public UserListenRecord findById(String recordId) {
+        return repository.findById(recordId).orElse(null);
+    }
+
+    @Override
+    public UserListenRecord finishRecord(UserListenRecord record) {
+        record.setUpdateTime(DateUtil.now());
+        return repository.save(record);
+    }
+
+    @Override
+    public Page<UserListenRecord> findListByPage(UserListenRecord record, int pageSize, int pageNum) {
+        if (record == null){
+            return repository.findAll(PageRequestUtil.of(pageNum,pageSize));
+        }else {
+            //处理条件
+            Specification<UserListenRecord> specification = ((root, query, criteriaBuilder) -> {
+                List<Predicate> list = new ArrayList<>();
+                if (StringUtils.isNotEmpty(record.getMusicId())){
+                    list.add(criteriaBuilder.equal(root.get("musicId"),record.getMusicId()));
+                }
+                if (StringUtils.isNotEmpty(record.getTypeId())){
+                    list.add(criteriaBuilder.equal(root.get("typeId"),record.getTypeId()));
+                }
+                if (StringUtils.isNotEmpty(record.getOrgNo())){
+                    String orgNo2 = EscapeUtil.escapeChar(record.getOrgNo());
+                    list.add(criteriaBuilder.like(root.get("orgNo"),"%"+orgNo2+"%"));
+                }
+                if (StringUtils.isNotEmpty(record.getUserNo())){
+                    String userNo2 = EscapeUtil.escapeChar(record.getUserNo());
+                    list.add(criteriaBuilder.like(root.get("userNo"),"%"+userNo2+"%"));
+                }
+                if (StringUtils.isNotEmpty(record.getUserName())){
+                    String userName2 = EscapeUtil.escapeChar(record.getUserName());
+                    list.add(criteriaBuilder.like(root.get("userName"),"%"+userName2+"%"));
+                }
+
+                //list.add(criteriaBuilder.equal(root.get("userStatus"), Constant.DEFAULT_VALUE_ONE));
+                query.where(criteriaBuilder.and(list.toArray(new Predicate[list.size()])));
+                query.orderBy(criteriaBuilder.asc(root.get("createTime")));
+                return query.getRestriction();
+            });
+            return repository.findAll(specification,PageRequestUtil.of(pageNum,pageSize));
+        }
+
+    }
+}

+ 22 - 0
src/main/java/com/zzys/lightting/utils/EscapeUtil.java

@@ -0,0 +1,22 @@
+package com.zzys.lightting.utils;
+
+import org.apache.commons.lang.StringUtils;
+
+/**
+ * @Description:mysql的模糊查询时特殊字符转义
+ * @Author: mimang
+ * @Date: 2025/1/13
+ */
+public class EscapeUtil {
+    /**
+     * mysql的模糊查询时特殊字符转义(条件查询%或者_查询所有问题)
+     */
+    public static String escapeChar(String string){
+        if(StringUtils.isNotBlank(string)){
+            string = string.replaceAll("_", "/_");
+            string = string.replaceAll("%", "/%");
+        }
+        return string.trim() ;
+    }
+
+}

+ 17 - 0
src/main/java/com/zzys/lightting/utils/PageRequestUtil.java

@@ -0,0 +1,17 @@
+package com.zzys.lightting.utils;
+
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Sort;
+
+/**
+ * @Description:分页工具
+ * @Author: zsf
+ * @Date: 2022/7/5
+ */
+public class PageRequestUtil {
+
+    public static PageRequest of(int page, int size) {
+        if (page <=0){page=0;}else {page = page-1;}
+        return PageRequest.of(page, size, Sort.unsorted());
+    }
+}