package cn.iocoder.yudao.module.trade.controller.admin.order; import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.member.api.user.MemberUserApi; import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO; import cn.iocoder.yudao.module.trade.controller.admin.order.vo.*; import cn.iocoder.yudao.module.trade.convert.order.TradeOrderConvert; import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO; import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO; import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderLogDO; import cn.iocoder.yudao.module.trade.service.order.TradeOrderLogService; import cn.iocoder.yudao.module.trade.service.order.TradeOrderQueryService; import cn.iocoder.yudao.module.trade.service.order.TradeOrderUpdateService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Set; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; @Tag(name = "管理后台 - 交易订单") @RestController @RequestMapping("/trade/order") @Validated @Slf4j public class TradeOrderController { @Resource private TradeOrderUpdateService tradeOrderUpdateService; @Resource private TradeOrderQueryService tradeOrderQueryService; @Resource private TradeOrderLogService tradeOrderLogService; @Resource private MemberUserApi memberUserApi; @GetMapping("/page") @Operation(summary = "获得交易订单分页") @PreAuthorize("@ss.hasPermission('trade:order:query')") public CommonResult> getOrderPage(TradeOrderPageReqVO reqVO) { // 查询订单 PageResult pageResult = tradeOrderQueryService.getOrderPage(reqVO); if (CollUtil.isEmpty(pageResult.getList())) { return success(PageResult.empty()); } // 查询用户信息 Set userIds = CollUtil.unionDistinct(convertList(pageResult.getList(), TradeOrderDO::getUserId), convertList(pageResult.getList(), TradeOrderDO::getBrokerageUserId, Objects::nonNull)); Map userMap = memberUserApi.getUserMap(userIds); // 查询订单项 List orderItems = tradeOrderQueryService.getOrderItemListByOrderId( convertSet(pageResult.getList(), TradeOrderDO::getId)); // 最终组合 return success(TradeOrderConvert.INSTANCE.convertPage(pageResult, orderItems, userMap)); } @GetMapping("/summary") @Operation(summary = "获得交易订单统计") @PreAuthorize("@ss.hasPermission('trade:order:query')") public CommonResult getOrderSummary(TradeOrderPageReqVO reqVO) { return success(tradeOrderQueryService.getOrderSummary(reqVO)); } @GetMapping("/get-detail") @Operation(summary = "获得交易订单详情") @Parameter(name = "id", description = "订单编号", required = true, example = "1") @PreAuthorize("@ss.hasPermission('trade:order:query')") public CommonResult getOrderDetail(@RequestParam("id") Long id) { // 查询订单 TradeOrderDO order = tradeOrderQueryService.getOrder(id); if (order == null) { return success(null); } // 查询订单项 List orderItems = tradeOrderQueryService.getOrderItemListByOrderId(id); // 拼接数据 MemberUserRespDTO user = memberUserApi.getUser(order.getUserId()); MemberUserRespDTO brokerageUser = order.getBrokerageUserId() != null ? memberUserApi.getUser(order.getBrokerageUserId()) : null; List orderLogs = tradeOrderLogService.getOrderLogListByOrderId(id); return success(TradeOrderConvert.INSTANCE.convert(order, orderItems, orderLogs, user, brokerageUser)); } @GetMapping("/get-express-track-list") @Operation(summary = "获得交易订单的物流轨迹") @Parameter(name = "id", description = "交易订单编号") @PreAuthorize("@ss.hasPermission('trade:order:query')") public CommonResult> getOrderExpressTrackList(@RequestParam("id") Long id) { return success(TradeOrderConvert.INSTANCE.convertList02( tradeOrderQueryService.getExpressTrackList(id))); } @PutMapping("/delivery") @Operation(summary = "订单发货") @PreAuthorize("@ss.hasPermission('trade:order:update')") public CommonResult deliveryOrder(@RequestBody TradeOrderDeliveryReqVO deliveryReqVO) { tradeOrderUpdateService.deliveryOrder(deliveryReqVO); return success(true); } @PutMapping("/update-remark") @Operation(summary = "订单备注") @PreAuthorize("@ss.hasPermission('trade:order:update')") public CommonResult updateOrderRemark(@RequestBody TradeOrderRemarkReqVO reqVO) { tradeOrderUpdateService.updateOrderRemark(reqVO); return success(true); } @PutMapping("/update-price") @Operation(summary = "订单调价") @PreAuthorize("@ss.hasPermission('trade:order:update')") public CommonResult updateOrderPrice(@RequestBody TradeOrderUpdatePriceReqVO reqVO) { tradeOrderUpdateService.updateOrderPrice(reqVO); return success(true); } @PutMapping("/update-address") @Operation(summary = "修改订单收货地址") @PreAuthorize("@ss.hasPermission('trade:order:update')") public CommonResult updateOrderAddress(@RequestBody TradeOrderUpdateAddressReqVO reqVO) { tradeOrderUpdateService.updateOrderAddress(reqVO); return success(true); } @PutMapping("/pick-up-by-id") @Operation(summary = "订单核销") @Parameter(name = "id", description = "交易订单编号") @PreAuthorize("@ss.hasPermission('trade:order:pick-up')") public CommonResult pickUpOrderById(@RequestParam("id") Long id) { tradeOrderUpdateService.pickUpOrderByAdmin(getLoginUserId(), id); return success(true); } @PutMapping("/pick-up-by-verify-code") @Operation(summary = "订单核销") @Parameter(name = "pickUpVerifyCode", description = "自提核销码") @PreAuthorize("@ss.hasPermission('trade:order:pick-up')") public CommonResult pickUpOrderByVerifyCode(@RequestParam("pickUpVerifyCode") String pickUpVerifyCode) { tradeOrderUpdateService.pickUpOrderByAdmin(getLoginUserId(), pickUpVerifyCode); return success(true); } @GetMapping("/get-by-pick-up-verify-code") @Operation(summary = "查询核销码对应的订单") @Parameter(name = "pickUpVerifyCode", description = "自提核销码") @PreAuthorize("@ss.hasPermission('trade:order:query')") public CommonResult getByPickUpVerifyCode(@RequestParam("pickUpVerifyCode") String pickUpVerifyCode) { TradeOrderDO tradeOrder = tradeOrderUpdateService.getByPickUpVerifyCode(pickUpVerifyCode); return success(TradeOrderConvert.INSTANCE.convert2(tradeOrder, null)); } }