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 obtainAllowance() { return R.ok(orderService.obtainAllowance(adminClient.prizeList().getData())); } /** * 抽奖获取津贴 * * @return 奖品列表 */ @GetMapping("/allowanceMoney") @ApiOperation(value = "补充订单津贴金额", tags = {"用户端-订单"}) public R 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 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 placeOrder(@RequestBody OrderRequest orderRequest) { LoginUserInfo loginUser = tokenService.getLoginUserByUser(); if (null == loginUser) { return R.loginExpire("登录失效!"); } Boolean result = orderService.placeOrder(orderRequest, loginUser.getUserid()); return result ? R.ok() : R.fail(); } }