diff --git a/luoo_common/src/main/java/dto/UserMessageDto.java b/luoo_common/src/main/java/dto/UserMessageDto.java
new file mode 100644
index 0000000..d0c9b9f
--- /dev/null
+++ b/luoo_common/src/main/java/dto/UserMessageDto.java
@@ -0,0 +1,51 @@
+package dto;
+
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+public class UserMessageDto implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+
+ /**
+ * 消息ID
+ */
+ private String messageId;
+
+ /**
+ * 消息ID
+ */
+ private String userId;
+
+
+ /**
+ * 消息标题
+ */
+ private String title;
+
+ /**
+ * 消息内容
+ */
+ private String content;
+
+
+ /**
+ * 是否已读 0为未读 1为已读
+ */
+ private Integer haveRead;
+
+
+ /**
+ * 发送时间
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date sendTime;
+}
diff --git a/luoo_music/pom.xml b/luoo_music/pom.xml
index 0b9600d..0cce7b0 100644
--- a/luoo_music/pom.xml
+++ b/luoo_music/pom.xml
@@ -57,6 +57,12 @@
tika-core
1.27
+
+
+
+ software.amazon.awssdk
+ s3
+
app
diff --git a/luoo_music/src/main/java/com/luoo/music/config/AwsS3Config.java b/luoo_music/src/main/java/com/luoo/music/config/AwsS3Config.java
new file mode 100644
index 0000000..ba8e41a
--- /dev/null
+++ b/luoo_music/src/main/java/com/luoo/music/config/AwsS3Config.java
@@ -0,0 +1,44 @@
+package com.luoo.music.config;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
+import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider;
+import software.amazon.awssdk.regions.Region;
+import software.amazon.awssdk.services.s3.S3Client;
+import software.amazon.awssdk.services.s3.S3Configuration;
+import software.amazon.awssdk.services.s3.presigner.S3Presigner;
+
+import java.net.URI;
+
+@Configuration
+public class AwsS3Config {
+
+ private static final Region region = Region.of("cn-east-1");
+
+ @Bean
+ public S3Client s3Client(){
+ AwsBasicCredentials awsBasicCredentials = AwsBasicCredentials.create("GLwHmLTZ05Kw9RyCGJXnIkua", "ynOBIqdNXH5HBgrVA29DTn4cUSh1wAI");
+ S3Configuration s3Config = S3Configuration.builder().pathStyleAccessEnabled(true).build();
+ S3Client s3 = S3Client.builder()
+ .endpointOverride(URI.create("https://s3.bitiful.net/"))
+ .credentialsProvider(StaticCredentialsProvider.create(awsBasicCredentials))
+ .region(region)
+ .serviceConfiguration(s3Config)
+ .build();
+
+ return s3;
+ }
+
+ @Bean
+ public S3Presigner s3Presigner(){
+ S3Configuration s3Config = S3Configuration.builder().pathStyleAccessEnabled(true).build();
+ S3Presigner presigner = S3Presigner.builder()
+ .endpointOverride(URI.create("https://s3.bitiful.net/"))
+ .region(region)
+ .build();
+
+ return presigner;
+ }
+}
diff --git a/luoo_music/src/main/java/com/luoo/music/controller/S3Controller.java b/luoo_music/src/main/java/com/luoo/music/controller/S3Controller.java
new file mode 100644
index 0000000..d9a3aa2
--- /dev/null
+++ b/luoo_music/src/main/java/com/luoo/music/controller/S3Controller.java
@@ -0,0 +1,75 @@
+package com.luoo.music.controller;
+
+
+import api.Result;
+import com.luoo.music.service.S3Service;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.UnsupportedEncodingException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+
+@RestController
+@CrossOrigin
+public class S3Controller {
+
+ @Autowired
+ private S3Service s3Service;
+
+
+ @GetMapping("/awstest")
+ public Result test() throws UnsupportedEncodingException {
+
+// s3Service.listObjects()
+ List list = s3Service.list();
+ return Result.success();
+ }
+
+
+ /**
+ * 文件存储目录规划
+ *
+ * music 存放期刊和期刊歌曲 二级目录为期刊期刊号 三级目录存放期刊歌曲和封面图片和歌曲图片
+ *
+ * song 存放通用歌曲
+ *
+ * image存放图片
+ *
+ * img
+ *
+ * user/avatar/111.jpg
+ *
+ *
+ *
+ *
+ */
+ @PostMapping("/awsUpload")
+ public Result upload(MultipartFile file) {
+
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
+// String fileName = UUID.randomUUID().toString().trim().replaceAll("-", "");
+
+
+ String filePath = sdf.format(new Date()) + "/" + file.getOriginalFilename();
+ try{
+ int code = s3Service.singleUpload("indie", filePath, file);
+
+ } catch (Exception ex){
+ }
+
+
+ return Result.success();
+ }
+
+ @PostMapping("/awsCopy")
+ public Result copy() {
+ s3Service.copy();
+ return Result.success();
+ }
+}
diff --git a/luoo_music/src/main/java/com/luoo/music/service/S3Service.java b/luoo_music/src/main/java/com/luoo/music/service/S3Service.java
new file mode 100644
index 0000000..a7a83a6
--- /dev/null
+++ b/luoo_music/src/main/java/com/luoo/music/service/S3Service.java
@@ -0,0 +1,103 @@
+package com.luoo.music.service;
+
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+import software.amazon.awssdk.core.sync.RequestBody;
+import software.amazon.awssdk.http.SdkHttpResponse;
+import software.amazon.awssdk.services.s3.S3Client;
+import software.amazon.awssdk.services.s3.model.*;
+import software.amazon.awssdk.services.s3.presigner.S3Presigner;
+
+import javax.annotation.Resource;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.util.List;
+
+
+@Service
+public class S3Service {
+ @Resource
+ private S3Client s3Client;
+
+ @Resource
+ private S3Presigner s3Presigner;
+
+//
+// public ListObjectsResponse listObjects(){
+// ListObjectsResponse indie = s3Client.listObjects( ListObjectsV2Request.builder().bucket("indie"));
+// return indie;
+// }
+
+
+ public List list() throws UnsupportedEncodingException {
+// if(StringUtil.isEmpty(bucket)) return ResultUtil.resultFail("参数错误");
+
+ ListObjectsV2Request.Builder builder = ListObjectsV2Request.builder();
+ // 设置bucket
+ builder.bucket("indie");
+
+
+ ListObjectsV2Request listObjReq = builder.build();
+ ListObjectsV2Response listObjRes = s3Client.listObjectsV2(listObjReq);
+
+
+
+ List s3ObjectList = listObjRes.contents();
+
+
+ return s3ObjectList;
+ }
+
+
+
+ /**
+ * 异步完整上传不分片
+ * @param bucket bucket
+ * @param key 对象路径
+ * @param file 文件对象
+ */
+// @Async("awsThreadPoolExecutor")
+ public int singleUpload(String bucket, String key, MultipartFile file) throws IOException {
+ Long startTime = System.currentTimeMillis() / 1000;
+ PutObjectRequest putObjectRequest = PutObjectRequest.builder()
+ .bucket(bucket)
+ .key(key)
+ .build();
+ RequestBody requestBody = RequestBody.fromInputStream(file.getInputStream(), file.getSize());
+ PutObjectResponse putObjectResponse = s3Client.putObject(putObjectRequest, requestBody);
+ SdkHttpResponse sdkHttpResponse = putObjectResponse.sdkHttpResponse();
+ if(!sdkHttpResponse.isSuccessful()){
+ return -1;
+ }
+ long endTime = System.currentTimeMillis() / 1000;
+// log.info("上传文件(" + key + ")总计耗费时间为:" + (endTime - startTime) + " 秒");
+
+ return 1;
+ }
+
+
+
+ public int copy() {
+
+ String bucket = "indie"; //存储桶名
+ String sourceKey = "20240121/1.mp3"; //copy的源文件路径
+ String destinationKey = "20240121/2.mp3"; // copy的目的地路径
+ CopyObjectResponse copyObjectResponse = s3Client.copyObject(CopyObjectRequest.builder().sourceBucket(bucket).sourceKey(sourceKey).destinationBucket(bucket).destinationKey(destinationKey).build());
+ SdkHttpResponse sdkHttpResponse = copyObjectResponse.sdkHttpResponse();
+ if(!sdkHttpResponse.isSuccessful()){
+ return -1;
+ }
+ return 1;
+ }
+
+ public void uploadAvatar(String bucket, String key, byte[] buffer) {
+ PutObjectRequest putObjectRequest = PutObjectRequest.builder()
+ .bucket(bucket)
+ .key(key)
+ .build();
+ RequestBody requestBody = RequestBody.fromInputStream(new ByteArrayInputStream(buffer), buffer.length);
+ s3Client.putObject(putObjectRequest, requestBody);
+ }
+
+}
diff --git a/luoo_user/src/main/java/com/luoo/user/controller/MyController.java b/luoo_user/src/main/java/com/luoo/user/controller/MyController.java
index 791f05c..0eae87f 100644
--- a/luoo_user/src/main/java/com/luoo/user/controller/MyController.java
+++ b/luoo_user/src/main/java/com/luoo/user/controller/MyController.java
@@ -6,6 +6,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Paths;
import java.util.Date;
+import java.util.EnumMap;
import org.apache.commons.io.IOUtils;
import org.springframework.beans.BeanUtils;
@@ -26,6 +27,7 @@ import controller.BaseController;
import com.luoo.user.dto.response.UserRespDTO;
import com.luoo.user.pojo.UserInfo;
import com.luoo.user.service.S3Service;
+import com.luoo.user.service.UserCollectService;
import com.luoo.user.service.UserInfoService;
import annotation.GlobalInterceptor;
@@ -33,6 +35,7 @@ import annotation.VerifyParam;
import api.Result;
import api.StatusCode;
import dto.UserLoginDto;
+import enums.CollectTypeEnum;
import enums.DateTimePatternEnum;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
@@ -52,6 +55,9 @@ public class MyController extends BaseController{
@Autowired
private UserInfoService userInfoService;
+ @Autowired
+ private UserCollectService userCollectService;
+
public static String UPLOAD_DIRECTORY = "user/avatar/";
@ApiOperation(value = "1.获取个人信息", notes = "游客无法获取个人信息")
@@ -65,6 +71,22 @@ public class MyController extends BaseController{
UserRespDTO userRespDTO = new UserRespDTO();
UserInfo user = userInfoService.findById(userLoginDto.getUserId());
BeanUtils.copyProperties(user, userRespDTO);
+ //EnumMap map=userCollectService.getUserCollectTypeMap(user.getId());
+ int fansCount=userCollectService.getFansCount(user.getId());
+ int followCount=userCollectService.getCount(user.getId(),CollectTypeEnum.FOLLOW.getType());
+ int thumbUpCount=userCollectService.getCount(user.getId(),CollectTypeEnum.THUMB_UP.getType());
+ int songCount=userCollectService.getCount(user.getId(),CollectTypeEnum.SONG.getType());
+ int journalCount=userCollectService.getCount(user.getId(),CollectTypeEnum.JOURNAL.getType());
+
+ userRespDTO.setFollowCount(followCount);
+ userRespDTO.setFansCount(fansCount);
+ userRespDTO.setThumbUpCount(thumbUpCount);
+ userRespDTO.setCommentReplyCount(0);
+ userRespDTO.setSongCount(songCount);
+ userRespDTO.setJournalCount(journalCount);
+ if(null!=user.getBirthday()) {
+ userRespDTO.setBirthDay(DateUtil.format(user.getBirthday(), DateTimePatternEnum.YYYY_DOT_MM_DOT_DD.getPattern()));
+ }
return Result.success(userRespDTO);
}
@@ -110,7 +132,7 @@ public class MyController extends BaseController{
@ApiOperation(value = "3.上传个人头像", notes = "图片压缩为70X70 JPEG,存入S3,桶为indie,目录为 user/avatar/")
@PostMapping("/uploadAvatar")
@GlobalInterceptor(checkLogin = true)
- public Result uploadAvatar(@RequestHeader(value = "token", required = false) String token,
+ public Result uploadAvatar(@RequestHeader(value = "token", required = false) String token,
@VerifyParam(required = true) MultipartFile file) throws IOException {
UserLoginDto userLoginDto = getUserLoginDto(token);
@@ -123,6 +145,6 @@ public class MyController extends BaseController{
user.setAvatar(filePath);
userInfoService.update(user);
- return Result.success();
+ return Result.success(filePath);
}
}
diff --git a/luoo_user/src/main/java/com/luoo/user/controller/UserCollectInfoController.java b/luoo_user/src/main/java/com/luoo/user/controller/UserCollectInfoController.java
new file mode 100644
index 0000000..65f1207
--- /dev/null
+++ b/luoo_user/src/main/java/com/luoo/user/controller/UserCollectInfoController.java
@@ -0,0 +1,37 @@
+package com.luoo.user.controller;
+
+
+import api.Result;
+import com.luoo.user.pojo.UserCollectInfo;
+import com.luoo.user.service.UserCollectInfoService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+@RestController
+@RequestMapping("/UserCollectInfo")
+public class UserCollectInfoController {
+
+
+ @Autowired
+ private UserCollectInfoService userCollectInfoService;
+
+
+ @PostMapping("/save")
+ public Result save(){
+ userCollectInfoService.save();
+ return Result.success();
+ }
+
+ @GetMapping("/show")
+ public Result show(){
+ UserCollectInfo userCollectInfo =userCollectInfoService.findByUserId();
+ return Result.success(userCollectInfo);
+ }
+
+ @PutMapping("/unCollect")
+ public Result unCollect() {
+ userCollectInfoService.unCollect();
+ return Result.success();
+ }
+
+}
diff --git a/luoo_user/src/main/java/com/luoo/user/controller/UserMessageController.java b/luoo_user/src/main/java/com/luoo/user/controller/UserMessageController.java
new file mode 100644
index 0000000..6cf7a4c
--- /dev/null
+++ b/luoo_user/src/main/java/com/luoo/user/controller/UserMessageController.java
@@ -0,0 +1,61 @@
+package com.luoo.user.controller;
+
+
+import api.PageResult;
+import api.Result;
+import com.luoo.user.pojo.UserMessage;
+import com.luoo.user.service.UserMessageService;
+import dto.UserMessageDto;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("/userMessage")
+public class UserMessageController {
+
+ @Autowired
+ private UserMessageService userMessageService;
+
+
+ /**
+ * 测试时用的,忽略这个方法
+ * * @param userMessageDto
+ * @return
+ */
+
+ @PostMapping("/sendUserMessage")
+ public Result sendUserMessage(@RequestBody UserMessageDto userMessageDto) {
+
+ userMessageService.sendUserMessage(userMessageDto);
+ return Result.success();
+ }
+
+
+ /**测试时用的,获取当前登录用户ID请走TOKEN
+ * 根据登录的用户ID获取消息
+ * @return
+ */
+ @GetMapping("/list/{userId}/{page}/{size}")
+ public Result list(@PathVariable String userId,@PathVariable int page,@PathVariable int size){
+// List list = userMessageService.findByUserId(userId);
+
+ Page pageList = userMessageService.findSearch(userId,page,size);
+ return Result.success(new PageResult(pageList.getTotalElements(),pageList.getContent()));
+ }
+
+ @PutMapping("/haveRead/{messageId}")
+ public Result haveRead(@PathVariable String messageId) {
+ userMessageService.haveRead(messageId);
+ return Result.success();
+ }
+
+ @PutMapping("/batchHaveRead")
+ public Result haveRead(@RequestBody List userMessageList) {
+ userMessageService.batchHaveRead(userMessageList);
+ return Result.success();
+ }
+
+}
diff --git a/luoo_user/src/main/java/com/luoo/user/dao/UserCollectDao.java b/luoo_user/src/main/java/com/luoo/user/dao/UserCollectDao.java
index 45a7036..74ba5e1 100644
--- a/luoo_user/src/main/java/com/luoo/user/dao/UserCollectDao.java
+++ b/luoo_user/src/main/java/com/luoo/user/dao/UserCollectDao.java
@@ -1,11 +1,20 @@
package com.luoo.user.dao;
+import java.util.List;
+
+import org.springframework.data.jpa.repository.Query;
import org.springframework.data.mongodb.repository.MongoRepository;
+import com.luoo.user.dto.UserCollectCount;
import com.luoo.user.pojo.UserCollect;
public interface UserCollectDao extends MongoRepository {
public UserCollect findByUserIdAndObjectIdAndCollectType(String userId, String objectId, Integer collectType);
public long deleteByUserIdAndObjectIdAndCollectType(String userId, String objectId, Integer collectType);
+ //@Query(value = "select NumberInt(collectType),count(*) from common.userCollect where userId=?1 group by collectType", nativeQuery = true)
+ //public List countByUserIdAndGroupByCollectType(String userId);
+
+ public int countByObjectIdAndCollectType(String objectId, Integer collectType);
+ public int countByUserIdAndCollectType(String userId, Integer collectType);
}
diff --git a/luoo_user/src/main/java/com/luoo/user/dao/UserCollectInfoDao.java b/luoo_user/src/main/java/com/luoo/user/dao/UserCollectInfoDao.java
new file mode 100644
index 0000000..21d7e48
--- /dev/null
+++ b/luoo_user/src/main/java/com/luoo/user/dao/UserCollectInfoDao.java
@@ -0,0 +1,9 @@
+package com.luoo.user.dao;
+
+import com.luoo.user.pojo.UserCollectInfo;
+import org.springframework.data.mongodb.repository.MongoRepository;
+
+public interface UserCollectInfoDao extends MongoRepository {
+
+ UserCollectInfo findUserCollectInfoByUserId(String userId);
+}
diff --git a/luoo_user/src/main/java/com/luoo/user/dao/UserMessageDao.java b/luoo_user/src/main/java/com/luoo/user/dao/UserMessageDao.java
new file mode 100644
index 0000000..bdc5112
--- /dev/null
+++ b/luoo_user/src/main/java/com/luoo/user/dao/UserMessageDao.java
@@ -0,0 +1,19 @@
+package com.luoo.user.dao;
+
+import com.luoo.user.pojo.UserMessage;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.mongodb.repository.MongoRepository;
+
+import java.util.List;
+
+public interface UserMessageDao extends MongoRepository {
+
+ List findAllByUserId(String userId);
+
+ Page findByUserId(String userId, Pageable pageable);
+
+
+}
diff --git a/luoo_user/src/main/java/com/luoo/user/dto/UserCollectCount.java b/luoo_user/src/main/java/com/luoo/user/dto/UserCollectCount.java
new file mode 100644
index 0000000..ddadf05
--- /dev/null
+++ b/luoo_user/src/main/java/com/luoo/user/dto/UserCollectCount.java
@@ -0,0 +1,11 @@
+package com.luoo.user.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class UserCollectCount {
+ private int collectType;
+ private long count;
+}
diff --git a/luoo_user/src/main/java/com/luoo/user/dto/UserCollectJournalDto.java b/luoo_user/src/main/java/com/luoo/user/dto/UserCollectJournalDto.java
new file mode 100644
index 0000000..932c189
--- /dev/null
+++ b/luoo_user/src/main/java/com/luoo/user/dto/UserCollectJournalDto.java
@@ -0,0 +1,59 @@
+package com.luoo.user.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+
+@Data
+public class UserCollectJournalDto implements Serializable {
+ private String id;
+
+ /**
+ * 期刊编号
+ */
+ private String number;
+ /**
+ * 期刊标题
+ */
+ private String name;
+ /**
+ * 期刊简介
+ */
+ private String summary;
+ /**
+ * 用户ID
+ */
+ private String userId;
+ /**
+ * 启停状态 停用:0,启用:1
+ */
+ private String state;
+ /**
+ * 发布状态 未发布:0,已发布:1
+ */
+ private String status;
+ /**
+ * 是否定时 否:0 是:1
+ */
+ private String scheduled;
+ /**
+ * 封面路径
+ */
+ private String coverPhoto;
+ /**
+ * 发布日期
+ */
+ private LocalDateTime pubTime;
+ /**
+ * 创建日期
+ */
+ private LocalDateTime createTime;
+ /**
+ * 更新日期
+ */
+ private LocalDateTime updateTime;
+
+
+}
diff --git a/luoo_user/src/main/java/com/luoo/user/dto/UserCollectSongDto.java b/luoo_user/src/main/java/com/luoo/user/dto/UserCollectSongDto.java
new file mode 100644
index 0000000..5eec7b0
--- /dev/null
+++ b/luoo_user/src/main/java/com/luoo/user/dto/UserCollectSongDto.java
@@ -0,0 +1,67 @@
+package com.luoo.user.dto;
+
+import lombok.Data;
+import org.springframework.data.annotation.CreatedDate;
+import org.springframework.data.annotation.LastModifiedDate;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+
+@Data
+public class UserCollectSongDto implements Serializable {
+
+ private String id;
+
+ /**
+ * 歌曲名称
+ */
+ private String name;
+ /**
+ * 歌手或乐队
+ */
+ private String artist;
+ /**
+ * 专辑
+ */
+ private String album;
+ /**
+ * 封面图片路径
+ */
+ private String picture;
+ /**
+ * 歌曲状态 0:停用,1:启用
+ */
+ private String state;
+ /**
+ * 文件大小
+ */
+ private Long size;
+ /**
+ * 歌曲时长
+ */
+ private Long duration;
+ /**
+ * 歌曲文件路径
+ */
+ private String url;
+ /**
+ * 歌词
+ */
+ private String lyric;
+ /**
+ * 上传人员ID
+ */
+ private String userId;
+ /**
+ * 创建日期
+ */
+ private LocalDateTime createTime;
+ /**
+ * 更新日期
+ */
+ private LocalDateTime updateTime;
+
+
+
+}
diff --git a/luoo_user/src/main/java/com/luoo/user/dto/response/UserRespDTO.java b/luoo_user/src/main/java/com/luoo/user/dto/response/UserRespDTO.java
index 32b12d5..2f92b11 100644
--- a/luoo_user/src/main/java/com/luoo/user/dto/response/UserRespDTO.java
+++ b/luoo_user/src/main/java/com/luoo/user/dto/response/UserRespDTO.java
@@ -17,4 +17,18 @@ public class UserRespDTO {
private String signature;
@ApiModelProperty(value = "用户标识,如“贡献者”,“音乐人”")
private String badge;
+ @ApiModelProperty(value = "关注数")
+ private int followCount;
+ @ApiModelProperty(value = "粉丝数")
+ private int fansCount;
+ @ApiModelProperty(value = "获赞数")
+ private int thumbUpCount;
+ @ApiModelProperty(value = "喜欢歌曲数")
+ private int songCount;
+ @ApiModelProperty(value = "收藏期刊数")
+ private int journalCount;
+ @ApiModelProperty(value = "获得评论数")
+ private int commentReplyCount;
+ @ApiModelProperty(value = "生日,格式为: yyyy.MM.dd")
+ private String birthDay;
}
diff --git a/luoo_user/src/main/java/com/luoo/user/listener/UserMessageListener.java b/luoo_user/src/main/java/com/luoo/user/listener/UserMessageListener.java
new file mode 100644
index 0000000..79a706a
--- /dev/null
+++ b/luoo_user/src/main/java/com/luoo/user/listener/UserMessageListener.java
@@ -0,0 +1,29 @@
+package com.luoo.user.listener;
+
+
+import com.luoo.user.dao.UserMessageDao;
+import com.luoo.user.pojo.UserMessage;
+import dto.UserMessageDto;
+import org.springframework.amqp.rabbit.annotation.RabbitHandler;
+import org.springframework.amqp.rabbit.annotation.RabbitListener;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Component
+@RabbitListener(queues = "userMessage")
+public class UserMessageListener {
+
+ @Autowired
+ private UserMessageDao userMessageDao;
+
+ @RabbitHandler
+ public void executeSendUserMessage(UserMessageDto userMessageDto) {
+
+ UserMessage userMessage = new UserMessage();
+ BeanUtils.copyProperties(userMessageDto,userMessage);
+
+ userMessageDao.save(userMessage);
+ }
+
+}
diff --git a/luoo_user/src/main/java/com/luoo/user/pojo/UserCollectInfo.java b/luoo_user/src/main/java/com/luoo/user/pojo/UserCollectInfo.java
new file mode 100644
index 0000000..2313084
--- /dev/null
+++ b/luoo_user/src/main/java/com/luoo/user/pojo/UserCollectInfo.java
@@ -0,0 +1,40 @@
+package com.luoo.user.pojo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springframework.data.annotation.Id;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+
+@Data
+public class UserCollectInfo implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 收藏ID
+ */
+ @Id
+ private String collectId;
+
+ /**
+ * 用户ID
+ */
+ private String userId;
+
+ /**
+ * 收藏的单曲
+ */
+ private List songList;
+
+
+
+ /**
+ * 收藏的期刊
+ */
+ private List journalList;
+}
diff --git a/luoo_user/src/main/java/com/luoo/user/pojo/UserInfo.java b/luoo_user/src/main/java/com/luoo/user/pojo/UserInfo.java
index be561c7..680046d 100644
--- a/luoo_user/src/main/java/com/luoo/user/pojo/UserInfo.java
+++ b/luoo_user/src/main/java/com/luoo/user/pojo/UserInfo.java
@@ -67,11 +67,11 @@ public class UserInfo implements Serializable {
/**
* 粉丝数
*/
- private Integer fansCount;
+ private int fansCount;
/**
* 关注数
*/
- private Integer followCount;
+ private int followCount;
/**
* 创建时间
*/
@@ -111,5 +111,5 @@ public class UserInfo implements Serializable {
/**
* 0:禁用 1:正常
*/
- private Integer status;
+ private int status;
}
diff --git a/luoo_user/src/main/java/com/luoo/user/pojo/UserMessage.java b/luoo_user/src/main/java/com/luoo/user/pojo/UserMessage.java
new file mode 100644
index 0000000..12102e8
--- /dev/null
+++ b/luoo_user/src/main/java/com/luoo/user/pojo/UserMessage.java
@@ -0,0 +1,53 @@
+package com.luoo.user.pojo;
+
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springframework.data.annotation.Id;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+public class UserMessage implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+
+ /**
+ * 消息ID
+ */
+ @Id
+ private String messageId;
+
+ /**
+ * 消息ID
+ */
+ private String userId;
+
+
+ /**
+ * 消息标题
+ */
+ private String title;
+
+ /**
+ * 消息内容
+ */
+ private String content;
+
+
+ /**
+ * 是否已读 0为未读 1为已读
+ */
+ private Integer haveRead;
+
+
+ /**
+ * 发送时间
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date sendTime;
+}
diff --git a/luoo_user/src/main/java/com/luoo/user/service/UserCollectInfoService.java b/luoo_user/src/main/java/com/luoo/user/service/UserCollectInfoService.java
new file mode 100644
index 0000000..16cde92
--- /dev/null
+++ b/luoo_user/src/main/java/com/luoo/user/service/UserCollectInfoService.java
@@ -0,0 +1,61 @@
+package com.luoo.user.service;
+
+
+import com.luoo.user.dao.UserCollectInfoDao;
+import com.luoo.user.dto.UserCollectSongDto;
+import com.luoo.user.pojo.UserCollectInfo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.annotation.CreatedDate;
+import org.springframework.stereotype.Service;
+import util.IdWorker;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class UserCollectInfoService {
+
+ @Autowired
+ private UserCollectInfoDao userCollectInfoDao;
+
+ @Autowired
+ private IdWorker idWorker;
+
+
+ public void save() {
+
+ UserCollectInfo userCollectInfo = new UserCollectInfo();
+ UserCollectSongDto userCollectSongDto = new UserCollectSongDto();
+ userCollectSongDto.setName("smell like teensprit");
+ userCollectSongDto.setArtist("Nirvana");
+
+ UserCollectSongDto userCollectSongDto1 = new UserCollectSongDto();
+ userCollectSongDto1.setName("the unforgiven");
+ userCollectSongDto1.setArtist("Metallica");
+
+ List list = new ArrayList();
+ list.add(userCollectSongDto);
+ list.add(userCollectSongDto1);
+ userCollectInfo.setSongList(list);
+ userCollectInfo.setCollectId(idWorker.nextId()+"");
+ userCollectInfo.setUserId("111222");
+ userCollectInfoDao.save(userCollectInfo);
+ }
+
+
+ public UserCollectInfo findByUserId(){
+
+ return userCollectInfoDao.findUserCollectInfoByUserId("111222");
+ }
+
+ public void unCollect(){
+ UserCollectInfo userCollectInfo = userCollectInfoDao.findUserCollectInfoByUserId("111222");
+ UserCollectSongDto userCollectSongDto = new UserCollectSongDto();
+ userCollectSongDto.setName("smell like teensprit");
+ userCollectSongDto.setArtist("Nirvana");
+ userCollectInfo.getSongList().remove(userCollectSongDto);
+ userCollectInfoDao.save(userCollectInfo);
+ }
+}
diff --git a/luoo_user/src/main/java/com/luoo/user/service/UserCollectService.java b/luoo_user/src/main/java/com/luoo/user/service/UserCollectService.java
index 9a24388..8b355a3 100644
--- a/luoo_user/src/main/java/com/luoo/user/service/UserCollectService.java
+++ b/luoo_user/src/main/java/com/luoo/user/service/UserCollectService.java
@@ -1,6 +1,8 @@
package com.luoo.user.service;
import java.util.Date;
+import java.util.EnumMap;
+import java.util.List;
import java.util.Optional;
import org.springframework.beans.factory.annotation.Autowired;
@@ -8,6 +10,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.luoo.user.dao.UserCollectDao;
+import com.luoo.user.dto.UserCollectCount;
import com.luoo.user.pojo.UserCollect;
import api.StatusCode;
@@ -24,7 +27,7 @@ public class UserCollectService {
throw new BizException(StatusCode.VALIDATE_FAILED);
}
String collectId=userId+"_"+objectId+"_"+collectType;
- Optional dbCollect = userCollectDao.findById(collectId);//.findByUserIdAndObjectIdAndCollectType(userId, objectId, collectType);
+ Optional dbCollect = userCollectDao.findById(collectId);
if (dbCollect.isPresent()) {
return;
}
@@ -41,6 +44,26 @@ public class UserCollectService {
Integer collectType) {
String collectId=userId+"_"+objectId+"_"+collectType;
userCollectDao.deleteById(collectId);
- //userCollectDao.deleteByUserIdAndObjectIdAndCollectType(userId, objectId, collectType);
+ }
+
+ public EnumMap getUserCollectTypeMap(String userId) {
+ EnumMap userCollectTypeMap=new EnumMap<>(CollectTypeEnum.class);
+ /*
+ * List
+ * userCollectCounts=userCollectDao.countByUserIdAndGroupByCollectType(userId);
+ *
+ * userCollectCounts.forEach(u->{ CollectTypeEnum collectTypeEnum =
+ * CollectTypeEnum.getByType(u.getCollectType());
+ * userCollectTypeMap.put(collectTypeEnum, u.getCount()); });
+ */
+ return userCollectTypeMap;
+ }
+
+ public int getFansCount(String userId) {
+ return userCollectDao.countByObjectIdAndCollectType(userId,CollectTypeEnum.FOLLOW.getType());
+ }
+
+ public int getCount(String userId, Integer type) {
+ return userCollectDao.countByUserIdAndCollectType(userId,type);
}
}
diff --git a/luoo_user/src/main/java/com/luoo/user/service/UserMessageService.java b/luoo_user/src/main/java/com/luoo/user/service/UserMessageService.java
new file mode 100644
index 0000000..533c1d9
--- /dev/null
+++ b/luoo_user/src/main/java/com/luoo/user/service/UserMessageService.java
@@ -0,0 +1,93 @@
+package com.luoo.user.service;
+
+import com.luoo.user.dao.UserMessageDao;
+import com.luoo.user.pojo.UserMessage;
+import com.mongodb.bulk.BulkWriteResult;
+import dto.UserMessageDto;
+import org.springframework.amqp.rabbit.core.RabbitTemplate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.mongodb.core.BulkOperations;
+import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.data.mongodb.core.query.Update;
+import org.springframework.stereotype.Service;
+import util.IdWorker;
+
+import java.util.Date;
+import java.util.List;
+
+@Service
+public class UserMessageService {
+
+ @Autowired
+ private RabbitTemplate rabbitTemplate;
+
+ @Autowired
+ private UserMessageDao userMessageDao;
+ @Autowired
+ private IdWorker idWorker;
+
+ @Autowired
+ private MongoTemplate mongoTemplate;
+
+ public void sendUserMessage(UserMessageDto userMessageDto) {
+
+ userMessageDto.setMessageId(idWorker.nextId()+"");
+ userMessageDto.setHaveRead(0);
+ userMessageDto.setSendTime(new Date());
+ rabbitTemplate.convertAndSend("userMessage",userMessageDto);
+ }
+
+
+ public List list() {
+
+ return userMessageDao.findAll();
+ }
+
+ public List findByUserId(String userId) {
+
+ return userMessageDao.findAllByUserId(userId);
+ }
+
+ public Page findSearch(String userId,int page,int size) {
+
+
+ PageRequest pageRequest = PageRequest.of(page-1,size);
+ return userMessageDao.findByUserId(userId,pageRequest);
+ }
+
+
+ public void haveRead(String messageId) {
+
+ Query query = new Query();
+ query.addCriteria(Criteria.where("_id").is(messageId));
+ Update update = new Update();
+ update.set("haveRead",1); //已读为1
+ mongoTemplate.updateFirst(query,update,UserMessage.class);
+
+ }
+
+
+
+ public void batchHaveRead(List userMessageList) {
+
+ BulkOperations bulkOps = mongoTemplate.bulkOps(BulkOperations.BulkMode.ORDERED, UserMessage.class);
+
+ for (UserMessage userMessage: userMessageList) {
+ Query query = new Query();
+ query.addCriteria(Criteria.where("_id").is(userMessage.getMessageId()));
+ Update update = new Update();
+ update.set("haveRead",1); //已读为1
+ // 添加更新操作
+ bulkOps.updateOne(query,update);
+
+ }
+
+ //执行批量更新操作
+
+ BulkWriteResult result = bulkOps.execute();
+ }
+}