|
|
@@ -2,17 +2,17 @@ package cn.seecoder.fdroidrepository.Service.ServiceImpl;
|
|
|
|
|
|
import cn.seecoder.fdroidrepository.DataObject.Enum.PostTypeEnum;
|
|
|
import cn.seecoder.fdroidrepository.DataObject.Enum.ResultCode;
|
|
|
+import cn.seecoder.fdroidrepository.DataObject.PO.AppInfoPO;
|
|
|
import cn.seecoder.fdroidrepository.DataObject.PO.PostLogPO;
|
|
|
import cn.seecoder.fdroidrepository.DataObject.PO.PostPO;
|
|
|
import cn.seecoder.fdroidrepository.DataObject.VO.PostVO;
|
|
|
import cn.seecoder.fdroidrepository.DataObject.VO.Response;
|
|
|
+import cn.seecoder.fdroidrepository.Mapper.AppInfoMapper;
|
|
|
import cn.seecoder.fdroidrepository.Mapper.PostLogMapper;
|
|
|
import cn.seecoder.fdroidrepository.Mapper.PostMapper;
|
|
|
import cn.seecoder.fdroidrepository.Service.PostService;
|
|
|
-import javafx.geometry.Pos;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
import org.springframework.beans.BeanUtils;
|
|
|
-import org.springframework.security.core.parameters.P;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import java.util.Date;
|
|
|
@@ -25,12 +25,25 @@ import java.util.stream.Collectors;
|
|
|
public class PostServiceImpl implements PostService {
|
|
|
private final PostMapper postMapper;
|
|
|
private final PostLogMapper postLogMapper;
|
|
|
+ private final AppInfoMapper appInfoMapper;
|
|
|
|
|
|
@Override
|
|
|
public Response createPost(PostVO postVO) {
|
|
|
PostPO postPO = new PostPO();
|
|
|
BeanUtils.copyProperties(postVO, postPO);
|
|
|
postPO.setUpdateTime(new Date(System.currentTimeMillis()));
|
|
|
+ if (PostTypeEnum.APPRATE.equals(postPO.getType())) {
|
|
|
+ if (postPO.getRate() == null || postPO.getRate() < 0 || postPO.getRate() > 5.0 || postPO.getAppId() == null) {
|
|
|
+ return Response.buildFailure(ResultCode.ILLEGAL_ARGUMENT.getCode(), ResultCode.ILLEGAL_ARGUMENT.getMessage());
|
|
|
+ }
|
|
|
+ AppInfoPO appInfo = appInfoMapper.selectById(postPO.getAppId());
|
|
|
+ if (appInfo == null) {
|
|
|
+ return Response.buildFailure(ResultCode.APPINFO_NON_EXIST.getCode(), ResultCode.APPINFO_NON_EXIST.getMessage());
|
|
|
+ }
|
|
|
+ appInfo.setRate((appInfo.getRate() * appInfo.getRateCount() + postPO.getRate()) / (appInfo.getRateCount() + 1));
|
|
|
+ appInfo.setRateCount(appInfo.getRateCount() + 1);
|
|
|
+ appInfoMapper.updateAppInfo(appInfo);
|
|
|
+ }
|
|
|
Integer postId = postMapper.insert(postPO);
|
|
|
return Response.buildSuccess(postId);
|
|
|
}
|
|
|
@@ -40,6 +53,10 @@ public class PostServiceImpl implements PostService {
|
|
|
if (postVO.getId() == null) {
|
|
|
return Response.buildFailure(ResultCode.ILLEGAL_ARGUMENT.getCode(), ResultCode.ILLEGAL_ARGUMENT.getMessage());
|
|
|
}
|
|
|
+ if (PostTypeEnum.APPRATE.equals(postVO.getType()) &&
|
|
|
+ (postVO.getAppId() == null || postVO.getRate() == null || postVO.getRate() < 0 || postVO.getRate() > 5.0)) {
|
|
|
+ return Response.buildFailure(ResultCode.ILLEGAL_ARGUMENT.getCode(), ResultCode.ILLEGAL_ARGUMENT.getMessage());
|
|
|
+ }
|
|
|
PostPO oldPost = postMapper.selectById(postVO.getId());
|
|
|
if (oldPost == null || !oldPost.getValid()) {
|
|
|
return Response.buildFailure(ResultCode.POST_NON_EXIST.getCode(), ResultCode.POST_NON_EXIST.getMessage());
|
|
|
@@ -47,6 +64,16 @@ public class PostServiceImpl implements PostService {
|
|
|
PostPO newPost = new PostPO();
|
|
|
BeanUtils.copyProperties(postVO, newPost);
|
|
|
newPost.setUpdateTime(new Date(System.currentTimeMillis()));
|
|
|
+ // 更新应用的评分信息
|
|
|
+ if (PostTypeEnum.APPRATE.equals(postVO.getType())) {
|
|
|
+ AppInfoPO appInfoPO = appInfoMapper.selectById(postVO.getAppId());
|
|
|
+ if (appInfoPO == null) {
|
|
|
+ return Response.buildFailure(ResultCode.APPINFO_NON_EXIST.getCode(), ResultCode.APPINFO_NON_EXIST.getMessage());
|
|
|
+ }
|
|
|
+ Double newRateSum = appInfoPO.getRate() * appInfoPO.getRateCount() - oldPost.getRate() + newPost.getRate();
|
|
|
+ appInfoPO.setRate(newRateSum / appInfoPO.getRateCount());
|
|
|
+ appInfoMapper.updateAppInfo(appInfoPO);
|
|
|
+ }
|
|
|
postMapper.update(newPost);
|
|
|
// 在PostLog中增加新的历史记录
|
|
|
if (PostTypeEnum.ARTICLE.equals(postVO.getType()) || PostTypeEnum.QUESTION.equals(postVO.getType())
|