|
@@ -1,5 +1,6 @@
|
|
|
package com.chelvc.cloud.vehicle.server.service.impl;
|
|
|
|
|
|
+import cn.hutool.json.JSONObject;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import com.chelvc.cloud.vehicle.api.dto.AssessRecoverDto;
|
|
@@ -13,22 +14,27 @@ import com.chelvc.cloud.uc.api.service.UserService;
|
|
|
import com.chelvc.cloud.vehicle.server.copier.AssessRecoverCopier;
|
|
|
import com.chelvc.cloud.vehicle.server.copier.GoodsAssessCopier;
|
|
|
import com.chelvc.cloud.vehicle.server.dao.AssessRecoverMapper;
|
|
|
+import com.chelvc.cloud.vehicle.server.dao.AssessScoreMapper;
|
|
|
import com.chelvc.cloud.vehicle.server.dao.GoodsAssessMapper;
|
|
|
import com.chelvc.cloud.vehicle.server.entity.AssessRecover;
|
|
|
+import com.chelvc.cloud.vehicle.server.entity.AssessScore;
|
|
|
import com.chelvc.cloud.vehicle.server.entity.GoodsAssess;
|
|
|
import com.chelvc.framework.base.context.SessionContextHolder;
|
|
|
import com.chelvc.framework.base.model.Session;
|
|
|
import com.chelvc.framework.base.util.ResourceUtils;
|
|
|
+import com.fasterxml.jackson.databind.util.JSONPObject;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.dubbo.config.annotation.DubboService;
|
|
|
import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.scheduling.annotation.Scheduled;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.math.RoundingMode;
|
|
|
import java.text.SimpleDateFormat;
|
|
|
-import java.util.Date;
|
|
|
-import java.util.List;
|
|
|
+import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
@@ -45,6 +51,7 @@ public class AssessServiceImpl extends ServiceImpl<GoodsAssessMapper, GoodsAsses
|
|
|
private static final SimpleDateFormat SDF = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
|
|
|
private final AssessRecoverMapper assessRecoverMapper;
|
|
|
+ private final AssessScoreMapper assessScoreMapper;
|
|
|
|
|
|
@Override
|
|
|
public Long add(AssessModifyParam param) {
|
|
@@ -110,9 +117,9 @@ public class AssessServiceImpl extends ServiceImpl<GoodsAssessMapper, GoodsAsses
|
|
|
}
|
|
|
|
|
|
//排序规则
|
|
|
- if (param.getCreator() == null){
|
|
|
+ if (param.getCreator() == null) {
|
|
|
wrapper.orderByDesc("hits", "score");
|
|
|
- }else{
|
|
|
+ } else {
|
|
|
//查询个人时按照评论时间排序
|
|
|
wrapper.orderByDesc("create_time");
|
|
|
}
|
|
@@ -153,14 +160,56 @@ public class AssessServiceImpl extends ServiceImpl<GoodsAssessMapper, GoodsAsses
|
|
|
|
|
|
}
|
|
|
|
|
|
+
|
|
|
/**
|
|
|
- * 每天计算年、半年、季度、月、周商品平均分
|
|
|
+ * 每天凌晨1点计算年、半年、季度、月、周商品平均分
|
|
|
*/
|
|
|
-
|
|
|
-// @Scheduled(cron = "0 0 1 * * ? *")
|
|
|
+ @Transactional(rollbackFor = RuntimeException.class)
|
|
|
+ @Scheduled(cron = "0 0 1 * * ?")
|
|
|
@Override
|
|
|
public void computeAvgScore() {
|
|
|
+ Date date = new Date();
|
|
|
+ this.baseMapper.clearScore();
|
|
|
//获取所有评论, 按商品分类 分别计算 一年 半年 一个季度 一个月 一周 的评价分数
|
|
|
- //TODO
|
|
|
+ List<Long> goodsIds = this.baseMapper.getAllGoodsIds();
|
|
|
+ if (goodsIds == null) return;
|
|
|
+ goodsIds.forEach(goodsId -> {
|
|
|
+ List<GoodsAssess> goodsAssessList = this.list(new QueryWrapper<GoodsAssess>().eq("goods_id", goodsId));
|
|
|
+ if (goodsAssessList.isEmpty()) return;
|
|
|
+ BigDecimal goodsAvgScore = this.baseMapper.getAvgScore(goodsId).setScale(2, RoundingMode.HALF_UP);
|
|
|
+ this.baseMapper.updateGoodsAvgScore(goodsAvgScore, goodsId);
|
|
|
+
|
|
|
+ BigDecimal goodsYearScore = this.baseMapper.getGoodsScore(365, goodsId).setScale(2, RoundingMode.HALF_UP);
|
|
|
+ BigDecimal goodsHalfYearScore = this.baseMapper.getGoodsScore(180, goodsId).setScale(2, RoundingMode.HALF_UP);
|
|
|
+ BigDecimal goodsQuarterScore = this.baseMapper.getGoodsScore(90, goodsId).setScale(2, RoundingMode.HALF_UP);
|
|
|
+ BigDecimal goodsMonthScore = this.baseMapper.getGoodsScore(30, goodsId).setScale(2, RoundingMode.HALF_UP);
|
|
|
+ BigDecimal goodsWeekScore = this.baseMapper.getGoodsScore(7, goodsId).setScale(2, RoundingMode.HALF_UP);
|
|
|
+ AssessScore assessScore = new AssessScore();
|
|
|
+ assessScore.setGoodsId(goodsId);
|
|
|
+ assessScore.setYearScore(goodsYearScore);
|
|
|
+ goodsHalfYearScore = goodsHalfYearScore.intValue() == 0 ? goodsYearScore : goodsHalfYearScore;
|
|
|
+ assessScore.setHalfYearScore(goodsHalfYearScore);
|
|
|
+ goodsQuarterScore = goodsQuarterScore.intValue() == 0 ? goodsHalfYearScore : goodsQuarterScore;
|
|
|
+ assessScore.setQuarterScore(goodsQuarterScore);
|
|
|
+ goodsMonthScore = goodsMonthScore.intValue() == 0 ? goodsQuarterScore : goodsMonthScore;
|
|
|
+ assessScore.setMonthScore(goodsMonthScore);
|
|
|
+ goodsWeekScore = goodsWeekScore.intValue() == 0 ? goodsMonthScore : goodsWeekScore;
|
|
|
+ assessScore.setWeekScore(goodsWeekScore);
|
|
|
+ assessScore.setModifyTime(date);
|
|
|
+ this.assessScoreMapper.insert(assessScore);
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Map<String, BigDecimal> getGoodsScore(Long goodsId) {
|
|
|
+ Map<String, BigDecimal> data = new HashMap<>();
|
|
|
+ data.put("score", this.baseMapper.getGoodsAvgScore(goodsId).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ AssessScore assessScore = this.assessScoreMapper.selectOne(new QueryWrapper<AssessScore>().eq("goods_id", goodsId));
|
|
|
+ data.put("yearScore", assessScore.getYearScore());
|
|
|
+ data.put("halfYearScore", assessScore.getHalfYearScore());
|
|
|
+ data.put("quarterScore", assessScore.getQuarterScore());
|
|
|
+ data.put("monthScore", assessScore.getMonthScore());
|
|
|
+ data.put("weekScore", assessScore.getWeekScore());
|
|
|
+ return data;
|
|
|
}
|
|
|
}
|