|
|
@@ -20,12 +20,17 @@ import shop.alien.entity.store.dto.StoreStaffReviewDto;
|
|
|
import shop.alien.entity.store.vo.StoreStaffCommentVo;
|
|
|
import shop.alien.entity.store.vo.StoreStaffReviewDetailVo;
|
|
|
import shop.alien.entity.store.vo.StoreStaffReviewVo;
|
|
|
+import shop.alien.entity.store.StoreStaffConfig;
|
|
|
import shop.alien.mapper.LifeLikeRecordMapper;
|
|
|
import shop.alien.mapper.StoreStaffCommentMapper;
|
|
|
+import shop.alien.mapper.StoreStaffConfigMapper;
|
|
|
import shop.alien.mapper.StoreStaffReviewMapper;
|
|
|
import shop.alien.store.service.StoreStaffCommentService;
|
|
|
import shop.alien.store.service.StoreStaffReviewService;
|
|
|
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.math.RoundingMode;
|
|
|
+
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.Date;
|
|
|
import java.util.List;
|
|
|
@@ -48,6 +53,7 @@ public class StoreStaffReviewServiceImpl extends ServiceImpl<StoreStaffReviewMap
|
|
|
private final StoreStaffCommentService storeStaffCommentService;
|
|
|
private final StoreStaffCommentMapper storeStaffCommentMapper;
|
|
|
private final LifeLikeRecordMapper lifeLikeRecordMapper;
|
|
|
+ private final StoreStaffConfigMapper storeStaffConfigMapper;
|
|
|
|
|
|
@Override
|
|
|
public R<StoreStaffReview> createReview(StoreStaffReviewDto reviewDto) {
|
|
|
@@ -65,6 +71,8 @@ public class StoreStaffReviewServiceImpl extends ServiceImpl<StoreStaffReviewMap
|
|
|
|
|
|
if (success) {
|
|
|
log.info("创建评价成功, 评价ID={}", review.getId());
|
|
|
+ // 更新员工评分
|
|
|
+ updateStaffServiceScore(review.getStaffUserId());
|
|
|
return R.data(review, "提交成功");
|
|
|
} else {
|
|
|
log.error("创建评价失败");
|
|
|
@@ -368,6 +376,9 @@ public class StoreStaffReviewServiceImpl extends ServiceImpl<StoreStaffReviewMap
|
|
|
.eq(StoreStaffComment::getDeleteFlag, 0);
|
|
|
List<StoreStaffComment> comments = storeStaffCommentService.list(commentWrapper);
|
|
|
|
|
|
+ // 保存员工ID,用于后续更新评分
|
|
|
+ Integer staffUserId = review.getStaffUserId();
|
|
|
+
|
|
|
// 删除评价(逻辑删除)
|
|
|
int num = storeStaffReviewMapper.deleteById(reviewId);
|
|
|
|
|
|
@@ -375,6 +386,9 @@ public class StoreStaffReviewServiceImpl extends ServiceImpl<StoreStaffReviewMap
|
|
|
// 级联删除该评价下的所有评论和回复
|
|
|
comments.forEach(comment -> deleteCommentAndReplies(comment, userId));
|
|
|
|
|
|
+ // 更新员工评分
|
|
|
+ updateStaffServiceScore(staffUserId);
|
|
|
+
|
|
|
if (userId != null) {
|
|
|
log.info("用户删除评价成功, reviewId={}, userId={}", reviewId, userId);
|
|
|
} else {
|
|
|
@@ -388,6 +402,54 @@ public class StoreStaffReviewServiceImpl extends ServiceImpl<StoreStaffReviewMap
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
+ * 更新员工服务评分
|
|
|
+ * 计算公式:员工评分 = overallRating平均值 (保留1位小数)
|
|
|
+ *
|
|
|
+ * @param staffUserId 员工用户ID
|
|
|
+ */
|
|
|
+ private void updateStaffServiceScore(Integer staffUserId) {
|
|
|
+ if (staffUserId == null) {
|
|
|
+ log.warn("更新员工评分失败:员工ID为空");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ try {
|
|
|
+ // 计算平均评分(1-5星)
|
|
|
+ BigDecimal averageRating = storeStaffReviewMapper.getAverageRatingByStaffUserId(staffUserId);
|
|
|
+
|
|
|
+ BigDecimal serviceScore;
|
|
|
+ if (averageRating != null) {
|
|
|
+ // 保留1位小数,四舍五入
|
|
|
+ serviceScore = averageRating.setScale(1, RoundingMode.HALF_UP);
|
|
|
+ // 确保在0-5范围内
|
|
|
+ if (serviceScore.compareTo(BigDecimal.ZERO) < 0) {
|
|
|
+ serviceScore = BigDecimal.ZERO;
|
|
|
+ } else if (serviceScore.compareTo(new BigDecimal("5.0")) > 0) {
|
|
|
+ serviceScore = new BigDecimal("5.0");
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // 如果没有评价,设置为0.0
|
|
|
+ serviceScore = BigDecimal.ZERO;
|
|
|
+ log.info("员工暂无评价,将评分设置为0.0, 员工ID={}", staffUserId);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 更新员工评分
|
|
|
+ LambdaUpdateWrapper<StoreStaffConfig> updateWrapper = new LambdaUpdateWrapper<>();
|
|
|
+ updateWrapper.eq(StoreStaffConfig::getId, staffUserId);
|
|
|
+ updateWrapper.set(StoreStaffConfig::getServiceScore, serviceScore);
|
|
|
+ int result = storeStaffConfigMapper.update(null, updateWrapper);
|
|
|
+
|
|
|
+ if (result > 0) {
|
|
|
+ log.info("更新员工评分成功, 员工ID={}, 平均评分={}, 服务评分={}", staffUserId, averageRating, serviceScore);
|
|
|
+ } else {
|
|
|
+ log.warn("更新员工评分失败,员工ID={}", staffUserId);
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("更新员工评分异常,员工ID={}, 错误信息={}", staffUserId, e.getMessage(), e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
* 删除评论及其回复
|
|
|
*/
|
|
|
private void deleteCommentAndReplies(StoreStaffComment comment, Integer userId) {
|