commit
6339c7d067
@ -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;
|
||||||
|
}
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
@ -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();
|
||||||
|
}
|
||||||
|
}
|
@ -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<S3Object> 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<S3Object> 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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -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();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,11 +1,43 @@
|
|||||||
package com.luoo.user.dao;
|
package com.luoo.user.dao;
|
||||||
|
|
||||||
|
import com.luoo.user.pojo.AppUpdate;
|
||||||
|
import org.springframework.data.domain.Page;
|
||||||
|
import org.springframework.data.domain.PageRequest;
|
||||||
|
import org.springframework.data.domain.Sort;
|
||||||
|
import org.springframework.data.jpa.domain.Specification;
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
|
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
|
||||||
|
|
||||||
import com.luoo.user.pojo.AppUpdate;
|
import javax.persistence.criteria.Expression;
|
||||||
|
import javax.persistence.criteria.Predicate;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public interface AppUpdateDao extends JpaRepository<AppUpdate, String>, JpaSpecificationExecutor<AppUpdate> {
|
public interface AppUpdateDao extends JpaRepository<AppUpdate, String>, JpaSpecificationExecutor<AppUpdate> {
|
||||||
|
|
||||||
//AppUpdate selectLatestUpdate(String appVersion, String deviceId);
|
default AppUpdate selectLatestUpdate(String appVersion, String deviceId){
|
||||||
|
Specification<AppUpdate> appUpdateSpecification = createAppUpdateSpecification(appVersion, deviceId);
|
||||||
|
Sort createTimeDescSort = Sort.by(Sort.Direction.DESC, "createTime");
|
||||||
|
Page<AppUpdate> appUpdatePage = this.findAll(appUpdateSpecification, PageRequest.of(0, 1, createTimeDescSort));
|
||||||
|
if(appUpdatePage.getContent().isEmpty()){
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return appUpdatePage.getContent().get(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
default Specification<AppUpdate> createAppUpdateSpecification(String appVersion, String deviceId) {
|
||||||
|
return (root, criteriaQuery, criteriaBuilder) -> {
|
||||||
|
List<Predicate> predicateList = new ArrayList<>();
|
||||||
|
predicateList.add(criteriaBuilder.greaterThan(root.get("version"), appVersion));
|
||||||
|
Predicate allPublishPredicate = criteriaBuilder.equal(root.get("status"), 2);
|
||||||
|
Predicate grayPublishPredicate = criteriaBuilder.equal(root.get("status"), 1);
|
||||||
|
Expression<Integer> grayDeviceExpress = criteriaBuilder
|
||||||
|
.function("find_in_set", Integer.class, criteriaBuilder.literal(deviceId), root.get("grayscaleDevice"));
|
||||||
|
Predicate grayDevicePredicate = criteriaBuilder.gt(grayDeviceExpress, 0);
|
||||||
|
Predicate grayScalePredicate = criteriaBuilder.and(grayPublishPredicate, grayDevicePredicate);
|
||||||
|
predicateList.add(criteriaBuilder.or(allPublishPredicate, grayScalePredicate));
|
||||||
|
Predicate[] predicates = new Predicate[predicateList.size()];
|
||||||
|
return criteriaBuilder.and(predicateList.toArray(predicates));
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,11 +1,20 @@
|
|||||||
package com.luoo.user.dao;
|
package com.luoo.user.dao;
|
||||||
|
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.springframework.data.jpa.repository.Query;
|
||||||
import org.springframework.data.mongodb.repository.MongoRepository;
|
import org.springframework.data.mongodb.repository.MongoRepository;
|
||||||
|
|
||||||
|
import com.luoo.user.dto.UserCollectCount;
|
||||||
import com.luoo.user.pojo.UserCollect;
|
import com.luoo.user.pojo.UserCollect;
|
||||||
|
|
||||||
public interface UserCollectDao extends MongoRepository<UserCollect, String> {
|
public interface UserCollectDao extends MongoRepository<UserCollect, String> {
|
||||||
public UserCollect findByUserIdAndObjectIdAndCollectType(String userId, String objectId, Integer collectType);
|
public UserCollect findByUserIdAndObjectIdAndCollectType(String userId, String objectId, Integer collectType);
|
||||||
public long deleteByUserIdAndObjectIdAndCollectType(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<UserCollectCount> countByUserIdAndGroupByCollectType(String userId);
|
||||||
|
|
||||||
|
public int countByObjectIdAndCollectType(String objectId, Integer collectType);
|
||||||
|
public int countByUserIdAndCollectType(String userId, Integer collectType);
|
||||||
}
|
}
|
||||||
|
@ -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, String> {
|
||||||
|
|
||||||
|
UserCollectInfo findUserCollectInfoByUserId(String userId);
|
||||||
|
}
|
@ -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<UserMessage,String> {
|
||||||
|
|
||||||
|
List<UserMessage> findAllByUserId(String userId);
|
||||||
|
|
||||||
|
Page<UserMessage> findByUserId(String userId, Pageable pageable);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -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;
|
||||||
|
}
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -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;
|
||||||
|
}
|
@ -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;
|
||||||
|
}
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
@ -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<UserMessage> 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<UserMessage> 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();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,14 @@
|
|||||||
|
-- 创建表
|
||||||
|
drop table if exists indie_user.tb_app_update;
|
||||||
|
create table if not exists indie_user.tb_app_update (
|
||||||
|
id varchar(100) not null comment 'ID' primary key,
|
||||||
|
version varchar(10) default '' not null comment '版本号',
|
||||||
|
update_desc varchar(500) default '' not null comment '更新描述',
|
||||||
|
update_type tinyint(1) default 0 not null comment '更新类型(0=全更新, 1=局部热更新)',
|
||||||
|
status tinyint(1) default 1 not null comment '状态(0=未发布, 1=灰度发布, 2=全网发布)',
|
||||||
|
grayscale_device varchar(4000) default '' not null comment '灰度设备ID集合(英文逗号相隔)',
|
||||||
|
create_time datetime default CURRENT_TIMESTAMP not null comment '创建时间'
|
||||||
|
) comment '应用版本更新记录表';
|
||||||
|
|
||||||
|
create index idx_version on indie_user.tb_app_update (version);
|
||||||
|
create index idx_create_time on indie_user.tb_app_update (create_time);
|
Loading…
Reference in new issue