package com.ruoyi.user.controller;
import cn.hutool.core.util.RandomUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.security.service.TokenService;
import com.ruoyi.order.api.entity.EvaluateOrderInfoVO;
import com.ruoyi.order.api.entity.OrderEvaluateSubmitRequest;
import com.ruoyi.order.api.entity.OrderEvaluateVO;
import com.ruoyi.order.api.feignClient.EvaluateClient;
import com.ruoyi.system.api.model.LoginUserInfo;
import com.ruoyi.user.entity.RecoveryServe;
import com.ruoyi.user.request.OrderEvaluateRequest;
import com.ruoyi.user.service.RecoveryServeService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
*
* 用户评价表 前端控制器
*
*
* @author hjl
* @since 2024-05-29
*/
@RestController
@RequestMapping("/evaluate")
@Api(tags = {"用户端-个人中心"})
public class EvaluateController {
@Resource
private TokenService tokenService;
@Resource
private EvaluateClient evaluateClient;
@Resource
private RecoveryServeService recoveryServeService;
@GetMapping("/orderEvaluate")
@ApiOperation(value = "订单评价列表", tags = {"用户端-个人中心"})
public R> orderEvaluate(@RequestParam("state") Integer state,
@RequestParam(name = "pageNum", defaultValue = "1") Integer pageNum,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
LoginUserInfo loginUser = tokenService.getLoginUserByUser();
if (null == loginUser) {
return R.loginExpire("登录失效!");
}
Page list = evaluateClient.evaluateListByUser(loginUser.getUserid(), state, pageNum, pageSize).getData();
if (null != list) {
// 数据封装,减少循环io
List ids = list.getRecords().stream().map(data -> data.getOrderInfo().getServeId()).collect(Collectors.toList());
if (!ids.isEmpty()) {
List serveList = recoveryServeService.lambdaQuery()
.in(RecoveryServe::getId, ids)
.eq(RecoveryServe::getIsDelete, 0).list();
Map map = serveList.stream().collect(Collectors.
toMap(RecoveryServe::getId, data -> data));
for (OrderEvaluateVO data : list.getRecords()) {
Integer serveId = data.getOrderInfo().getServeId();
RecoveryServe recoveryServe = map.get(serveId);
if (null != recoveryServe) {
EvaluateOrderInfoVO orderInfo = data.getOrderInfo();
orderInfo.setServeName(recoveryServe.getServeName());
orderInfo.setServeDescribe(recoveryServe.getServeDescribe());
orderInfo.setCover(recoveryServe.getCover());
}
}
}
}
return R.ok(list);
}
@GetMapping("/conductEvaluation")
@ApiOperation(value = "进行评价(服务单号)", tags = {"用户端-个人中心"})
public R conductEvaluation() {
return R.ok(RandomUtil.randomNumbers(15));
}
@PostMapping("/submitEvaluation")
@ApiOperation(value = "提交评价", tags = {"用户端-个人中心"})
public R submitEvaluation(@RequestBody @Validated OrderEvaluateRequest orderEvaluate) {
Long orderId = orderEvaluate.getOrderId();
String content = orderEvaluate.getContent();
Double starRating = orderEvaluate.getStarRating();
String serveNo = orderEvaluate.getServeNo();
LoginUserInfo loginUser = tokenService.getLoginUserByUser();
if (null == loginUser) {
return R.loginExpire("登录失效!");
}
boolean save = evaluateClient.evaluateSave(new OrderEvaluateSubmitRequest(orderId, content, starRating,
serveNo, loginUser.getUserid())).getData();
return save ? R.ok() : R.fail();
}
}