package com.ruoyi.user.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.ruoyi.admin.api.entity.Prize;
import com.ruoyi.admin.api.feignClient.AdminClient;
import com.ruoyi.common.core.constant.Constants;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.exception.GlobalException;
import com.ruoyi.common.core.utils.GaoDeMapUtil;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.core.vo.CityInfoVO;
import com.ruoyi.common.security.service.TokenService;
import com.ruoyi.order.api.entity.Order;
import com.ruoyi.order.api.entity.ServeRecord;
import com.ruoyi.order.api.feignClient.OrderClient;
import com.ruoyi.order.api.feignClient.ServeRecordClient;
import com.ruoyi.system.api.model.LoginUserInfo;
import com.ruoyi.user.entity.RecoveryServe;
import com.ruoyi.user.entity.RecoveryServePrice;
import com.ruoyi.user.request.OrderRequest;
import com.ruoyi.user.service.OrderService;
import com.ruoyi.user.service.RecoveryServePriceService;
import com.ruoyi.user.service.RecoveryServeService;
import com.ruoyi.user.service.UserService;
import com.ruoyi.user.vo.OrderDetailVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.boot.autoconfigure.kafka.KafkaProperties;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
/**
*
* 订单管理 前端控制器
*
*
* @author hjl
* @since 2024-06-07
*/
@RestController
@RequestMapping("/order")
@Api(tags = {"用户端-订单"})
public class OrderController {
@Resource
private RecoveryServeService recoveryServeService;
@Resource
private RecoveryServePriceService recoveryServePriceService;
@Resource
private AdminClient adminClient;
@Resource
private TokenService tokenService;
@Resource
private OrderClient orderClient;
@Resource
private OrderService orderService;
@Resource
private ServeRecordClient serveRecordClient;
@GetMapping("/orderList")
@ApiOperation(value = "订单列表", tags = {"用户端-订单"})
@ApiImplicitParams({
@ApiImplicitParam(value = "状态(-1:全部;0:派单中;1:待上门;2:待完工;3:已完结;4:已取消;5:已改派)", name = "state", dataType = "Integer", required = true),
@ApiImplicitParam(value = "页码", name = "pageNum", dataType = "Integer", required = true),
@ApiImplicitParam(value = "条数", name = "pageSize", dataType = "Integer", required = true)
})
public R> orderList(@RequestParam 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("登录失效!");
}
IPage data = orderClient.orderListByUser(loginUser.getUserid(), state, pageNum, pageSize).getData();
List ids = data.getRecords().stream().map(Order::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,
mw -> Optional.ofNullable(mw.getCover()).orElse("")));
for (Order order : data.getRecords()) {
Integer serveId = order.getServeId();
order.setCover(map.get(serveId));
}
}
return R.ok(data);
}
@GetMapping("/estimate")
@ApiOperation(value = "在线评估", tags = {"用户端-订单"})
@ApiImplicitParams({
@ApiImplicitParam(value = "回收服务id", name = "orderId", dataType = "Integer", required = true),
@ApiImplicitParam(value = "所在城市code", name = "city", dataType = "String")
})
public R estimate(@RequestParam String orderId, String city) {
Order order = orderClient.detail(orderId).getData();
// RecoveryServe recoveryServe = recoveryServeService.lambdaQuery()
// .eq(RecoveryServe::getId, order.getServeId())
// .eq(RecoveryServe::getIsDelete, 0).one();
// BigDecimal money = recoveryServe.getDefaultPrice();
// if (StringUtils.isNotBlank(city)) {
// CityInfoVO info = GaoDeMapUtil.getAddressInfo(city).getDatas();
// RecoveryServePrice price = recoveryServePriceService.lambdaQuery()
// .eq(RecoveryServePrice::getRecoveryServeId, recoveryServe.getId())
// .eq(RecoveryServePrice::getCity, info.getCode())
// .eq(RecoveryServePrice::getIsDelete, Constants.ZERO).one();
// if (null != price) {
// money = price.getRecoveryPrice();
// }
// }
return R.ok(order.getServePrice());
}
@GetMapping("/detail")
@ApiOperation(value = "订单详情", tags = {"用户端-订单"})
@ApiImplicitParams({
@ApiImplicitParam(value = "订单id", name = "orderId", dataType = "Integer", required = true)
})
public R detail(@RequestParam String orderId) {
Order order = orderClient.detail(orderId).getData();
if (null == order) {
throw new GlobalException("订单不存在或已删除!");
}
OrderDetailVO orderDetail = new OrderDetailVO(order);
if (Constants.THREE.equals(order.getState())) {
ServeRecord serveRecord = serveRecordClient.serveRecordByOrderId(orderId).getData();
if (null != serveRecord) {
orderDetail.setPhoto(serveRecord.getPhoto());
}
}
R workPic = adminClient.getWorkPic(order.getServerId());
orderDetail.setWorkPic(workPic.getMsg());
return R.ok(orderDetail);
}
/**
* 获取奖品列表
*
* @return 奖品列表
*/
@GetMapping("/prizeList")
@ApiOperation(value = "获取奖品列表", tags = {"用户端-订单"})
public R> prizeList() {
return R.ok(adminClient.prizeList().getData());
}
/**
* 抽奖获取津贴
*
* @return 奖品列表
*/
@GetMapping("/allowance")
@ApiOperation(value = "抽奖获取津贴", tags = {"用户端-订单"})
public R