luodangjia
2024-07-29 dc9239d73b15b9a51c46a9e8d25c0d4400e613ce
ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/controller/OrderController.java
@@ -1,27 +1,42 @@
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.Order;
import com.ruoyi.user.entity.ServeRecord;
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.ServeRecordService;
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;
/**
 * <p>
@@ -37,25 +52,73 @@
public class OrderController {
    @Resource
    private OrderService orderService;
    private RecoveryServeService recoveryServeService;
    @Resource
    private ServeRecordService serveRecordService;
    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 = {"用户端-订单"})
    public R<List<Order>> orderList() {
    @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<IPage<Order>> 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("登录失效!");
        }
        return R.ok(orderService.lambdaQuery()
                .eq(Order::getIsDelete, 0)
                .eq(Order::getUserId, loginUser.getUserid())
                .orderByDesc(Order::getCreateTime).list());
        IPage<Order> data = orderClient.orderListByUser(loginUser.getUserid(), state, pageNum, pageSize).getData();
        List<Integer> ids = data.getRecords().stream().map(Order::getServeId).collect(Collectors.toList());
        if (!ids.isEmpty()) {
            List<RecoveryServe> serveList = recoveryServeService.lambdaQuery()
                    .in(RecoveryServe::getId, ids).eq(RecoveryServe::getIsDelete, 0).list();
            Map<Integer, String> 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<BigDecimal> 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::getCityCode, info.getCode())
                    .eq(RecoveryServePrice::getIsDelete, Constants.ZERO).one();
            if (null != price) {
                money = price.getRecoveryPrice();
            }
        }
        return R.ok(money);
    }
    @GetMapping("/detail")
@@ -63,20 +126,20 @@
    @ApiImplicitParams({
            @ApiImplicitParam(value = "订单id", name = "orderId", dataType = "Integer", required = true)
    })
    public R<OrderDetailVO> detail(@RequestParam Integer orderId) {
        Order order = orderService.lambdaQuery().eq(Order::getId, orderId).eq(Order::getIsDelete, 0).one();
    public R<OrderDetailVO> detail(@RequestParam String orderId) {
        Order order = orderClient.detail(orderId).getData();
        if (null == order) {
            throw new GlobalException("订单状态异常!");
            throw new GlobalException("订单不存在或已删除!");
        }
        OrderDetailVO orderDetail = new OrderDetailVO(order);
        if (Constants.THREE.equals(order.getState())) {
            ServeRecord record = serveRecordService.lambdaQuery().eq(ServeRecord::getOrderId, orderId)
                    .eq(ServeRecord::getIsDelete, 0).one();
            if (null == record) {
                throw new GlobalException("暂未上传家电照片!");
            ServeRecord serveRecord = serveRecordClient.serveRecordByOrderId(orderId).getData();
            if (null != serveRecord) {
                orderDetail.setPhoto(serveRecord.getPhoto());
            }
            orderDetail.setPhoto(record.getPhoto());
        }
        R<String> workPic = adminClient.getWorkPic(order.getServerId());
        orderDetail.setWorkPic(workPic.getMsg());
        return R.ok(orderDetail);
    }
@@ -102,6 +165,38 @@
        return R.ok(orderService.obtainAllowance(adminClient.prizeList().getData()));
    }
    /**
     * 抽奖获取津贴
     *
     * @return 奖品列表
     */
    @GetMapping("/allowanceMoney")
    @ApiOperation(value = "补充订单津贴金额", tags = {"用户端-订单"})
    public R<Object> allowanceMoney(@RequestParam("orderId") String orderId, @RequestParam("prizeId") String prizeId) {
        Prize data = adminClient.prizeDetail(prizeId).getData();
        if (null == data) {
            return R.fail(adminClient.prizeDetail(prizeId).getMsg());
        }
        String prizeMoney;
        if (data.getPrizeName().contains(Constants.SUBSIDY_MONEY)) {
            prizeMoney = data.getPrizeName().substring(Constants.ONE);
        } else {
            prizeMoney = "0";
        }
        return R.ok(orderClient.supplementAllowance(orderId, prizeMoney).getData());
    }
    @PostMapping("/orderEstimate")
    @ApiOperation(value = "下单评估,生成预订单信息", tags = {"用户端-订单"})
    public R<String> orderEstimate(@RequestBody OrderRequest orderRequest) {
        LoginUserInfo loginUser = tokenService.getLoginUserByUser();
        if (null == loginUser) {
            return R.loginExpire("登录失效!");
        }
        String result = orderService.orderEstimate(orderRequest, loginUser.getUserid());
        return R.ok(result, "");
    }
    @PostMapping("/placeOrder")
    @ApiOperation(value = "用户下单", tags = {"用户端-订单"})
    public R<String> placeOrder(@RequestBody OrderRequest orderRequest) {