|
@@ -0,0 +1,166 @@
|
|
|
+package com.chelvc.cloud.vehicle.server.service.impl;
|
|
|
+
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import com.chelvc.cloud.vehicle.api.dto.AssessRecoverDto;
|
|
|
+import com.chelvc.cloud.vehicle.api.dto.GoodsAssessDto;
|
|
|
+import com.chelvc.cloud.uc.api.dto.UserDTO;
|
|
|
+import com.chelvc.cloud.vehicle.api.param.AssessModifyParam;
|
|
|
+import com.chelvc.cloud.vehicle.api.param.AssessQueryParam;
|
|
|
+import com.chelvc.cloud.vehicle.api.param.AssessRecoverModifyParam;
|
|
|
+import com.chelvc.cloud.vehicle.api.service.AssessService;
|
|
|
+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.GoodsAssessMapper;
|
|
|
+import com.chelvc.cloud.vehicle.server.entity.AssessRecover;
|
|
|
+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 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.transaction.annotation.Transactional;
|
|
|
+
|
|
|
+import java.text.SimpleDateFormat;
|
|
|
+import java.util.Date;
|
|
|
+import java.util.List;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @author valley
|
|
|
+ * @date 2024/01/30 00:03
|
|
|
+ **/
|
|
|
+@Slf4j
|
|
|
+@RequiredArgsConstructor(onConstructor = @__(@Autowired))
|
|
|
+@DubboService(interfaceClass = AssessService.class)
|
|
|
+public class AssessServiceImpl extends ServiceImpl<GoodsAssessMapper, GoodsAssess> implements com.chelvc.cloud.vehicle.server.service.AssessService, AssessService {
|
|
|
+
|
|
|
+ private final UserService userService;
|
|
|
+
|
|
|
+ private static final SimpleDateFormat SDF = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
+
|
|
|
+ private final AssessRecoverMapper assessRecoverMapper;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Long add(AssessModifyParam param) {
|
|
|
+ Session user = SessionContextHolder.getSession();
|
|
|
+ ResourceUtils.required(this.getOne(new QueryWrapper<GoodsAssess>().eq("order_id", param.getOrderId()).eq("creator", user.getId())) == null, "该订单已评价");
|
|
|
+
|
|
|
+ GoodsAssess goodsAssess = GoodsAssessCopier.INSTANCE.copying(param);
|
|
|
+ goodsAssess.setHits(0L);
|
|
|
+ goodsAssess.setIsRecover(0);
|
|
|
+ this.save(goodsAssess);
|
|
|
+ return goodsAssess.getId();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<GoodsAssessDto> query(AssessQueryParam param) {
|
|
|
+ QueryWrapper<GoodsAssess> wrapper = new QueryWrapper<>();
|
|
|
+ //查询评价内容详情 单条查询时 增加点击数
|
|
|
+ if (param.getId() != null) {
|
|
|
+ wrapper.eq("id", param.getId());
|
|
|
+ }
|
|
|
+ //查询商品所有评价内容
|
|
|
+ if (param.getGoodsId() != null) {
|
|
|
+ wrapper.eq("goods_id", param.getGoodsId());
|
|
|
+ }
|
|
|
+ //查询个人订单评价内容
|
|
|
+ if (param.getOrderId() != null) {
|
|
|
+ wrapper.eq("order_id", param.getOrderId());
|
|
|
+ }
|
|
|
+ //按评价级别查询
|
|
|
+ if (param.getScore() != null) {
|
|
|
+ switch (param.getScore()) {
|
|
|
+ case "1":
|
|
|
+ wrapper.ge("score", 0);
|
|
|
+ wrapper.lt("score", 2);
|
|
|
+ break;
|
|
|
+ case "2":
|
|
|
+ wrapper.ge("score", 2);
|
|
|
+ wrapper.lt("score", 3);
|
|
|
+ break;
|
|
|
+ case "3":
|
|
|
+ wrapper.ge("score", 3);
|
|
|
+ wrapper.lt("score", 4);
|
|
|
+ break;
|
|
|
+ case "4":
|
|
|
+ wrapper.ge("score", 4);
|
|
|
+ wrapper.lt("score", 5);
|
|
|
+ break;
|
|
|
+ case "5":
|
|
|
+ wrapper.eq("score", 5);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ //过滤是否回复
|
|
|
+ if (param.getIsRecover() != null) {
|
|
|
+ wrapper.eq("is_recover", param.getIsRecover());
|
|
|
+ }
|
|
|
+
|
|
|
+ if (param.getCreator() != null) {
|
|
|
+ wrapper.eq("creator", param.getCreator());
|
|
|
+ }
|
|
|
+
|
|
|
+ //排序规则
|
|
|
+ if (param.getCreator() == null){
|
|
|
+ wrapper.orderByDesc("hits", "score");
|
|
|
+ }else{
|
|
|
+ //查询个人时按照评论时间排序
|
|
|
+ wrapper.orderByDesc("create_time");
|
|
|
+ }
|
|
|
+ List<GoodsAssess> goodsAssesses = this.list(wrapper);
|
|
|
+ List<GoodsAssessDto> goodsAssesseDtos = GoodsAssessCopier.INSTANCE.copying(goodsAssesses);
|
|
|
+ return goodsAssesseDtos.stream().peek(item -> {
|
|
|
+ //个人信息获取
|
|
|
+ UserDTO user = userService.getUser(item.getCreator());
|
|
|
+ item.setCreatorAvatar(user.getAvatar());
|
|
|
+ item.setCreatorNickName(user.getNickname());
|
|
|
+ item.setCreatorTimeFormat(SDF.format(item.getCreateTime()));
|
|
|
+ AssessRecover assessRecover = assessRecoverMapper.selectOne(new QueryWrapper<AssessRecover>().eq("assess_id", item.getId()));
|
|
|
+ if (assessRecover != null) {
|
|
|
+ AssessRecoverDto assessRecoverDto = AssessRecoverCopier.INSTANCE.copying(assessRecover);
|
|
|
+ assessRecoverDto.setRecoverTimeFormat(SDF.format(assessRecoverDto.getRecoverTime()));
|
|
|
+ item.setAssessRecoverDto(assessRecoverDto);
|
|
|
+ }
|
|
|
+ if (param.getId() != null) {
|
|
|
+ GoodsAssess updateAssess = this.getById(item.getId());
|
|
|
+ updateAssess.setHits(item.getHits() + 1);
|
|
|
+ this.updateById(updateAssess);
|
|
|
+ }
|
|
|
+
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Long addAssessRecover(AssessRecoverModifyParam param) {
|
|
|
+
|
|
|
+ ResourceUtils.required(assessRecoverMapper.selectOne(new QueryWrapper<AssessRecover>().eq("assess_id", param.getAssessId())) == null, "该订单已回复");
|
|
|
+ AssessRecover assessRecover = AssessRecoverCopier.INSTANCE.copying(param);
|
|
|
+ assessRecover.setRecoverTime(new Date());
|
|
|
+ assessRecoverMapper.insert(assessRecover);
|
|
|
+ GoodsAssess goodsAssess = this.getById(param.getAssessId());
|
|
|
+ goodsAssess.setIsRecover(1);
|
|
|
+ this.updateById(goodsAssess);
|
|
|
+ return assessRecover.getId();
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 每天计算年、半年、季度、月、周商品平均分
|
|
|
+ */
|
|
|
+
|
|
|
+// @Scheduled(cron = "0 0 1 * * ? *")
|
|
|
+ @Override
|
|
|
+ public void computeAvgScore() {
|
|
|
+ //获取所有评论, 按商品分类 分别计算 一年 半年 一个季度 一个月 一周 的评价分数
|
|
|
+ //TODO
|
|
|
+ }
|
|
|
+}
|