mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-11-04 12:18:42 +08:00 
			
		
		
		
	@@ -1,13 +1,15 @@
 | 
			
		||||
package cn.iocoder.yudao.module.trade.api.order;
 | 
			
		||||
 | 
			
		||||
import cn.iocoder.yudao.module.trade.api.order.dto.TradeOrderRespDTO;
 | 
			
		||||
import cn.iocoder.yudao.module.trade.convert.order.TradeOrderConvert;
 | 
			
		||||
import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO;
 | 
			
		||||
import cn.iocoder.yudao.module.trade.service.order.TradeOrderService;
 | 
			
		||||
import org.springframework.stereotype.Service;
 | 
			
		||||
import org.springframework.validation.annotation.Validated;
 | 
			
		||||
 | 
			
		||||
import javax.annotation.Resource;
 | 
			
		||||
 | 
			
		||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
 | 
			
		||||
import static cn.iocoder.yudao.module.trade.enums.ErrorCodeConstants.ORDER_ITEM_NOT_FOUND;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 订单 API 接口实现类
 | 
			
		||||
 *
 | 
			
		||||
@@ -21,8 +23,14 @@ public class TradeOrderApiImpl implements TradeOrderApi {
 | 
			
		||||
    private TradeOrderService tradeOrderService;
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public TradeOrderRespDTO getOrder(Long id) {
 | 
			
		||||
        return TradeOrderConvert.INSTANCE.convert(tradeOrderService.getOrder(id));
 | 
			
		||||
    public Long validateOrder(Long userId, Long orderItemId) {
 | 
			
		||||
        // 校验订单项,订单项存在订单就存在
 | 
			
		||||
        TradeOrderItemDO item = tradeOrderService.getOrderItem(userId, orderItemId);
 | 
			
		||||
        if (item == null) {
 | 
			
		||||
            throw exception(ORDER_ITEM_NOT_FOUND);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return item.getOrderId();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -5,9 +5,11 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
 | 
			
		||||
import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils;
 | 
			
		||||
import cn.iocoder.yudao.framework.security.core.annotations.PreAuthenticated;
 | 
			
		||||
import cn.iocoder.yudao.module.pay.api.notify.dto.PayOrderNotifyReqDTO;
 | 
			
		||||
import cn.iocoder.yudao.module.product.api.comment.ProductCommentApi;
 | 
			
		||||
import cn.iocoder.yudao.module.product.api.property.ProductPropertyValueApi;
 | 
			
		||||
import cn.iocoder.yudao.module.product.api.property.dto.ProductPropertyValueDetailRespDTO;
 | 
			
		||||
import cn.iocoder.yudao.module.trade.controller.app.order.vo.*;
 | 
			
		||||
import cn.iocoder.yudao.module.trade.controller.app.order.vo.item.AppTradeOrderItemCommentCreateReqVO;
 | 
			
		||||
import cn.iocoder.yudao.module.trade.controller.app.order.vo.item.AppTradeOrderItemRespVO;
 | 
			
		||||
import cn.iocoder.yudao.module.trade.convert.order.TradeOrderConvert;
 | 
			
		||||
import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO;
 | 
			
		||||
@@ -15,6 +17,7 @@ import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO;
 | 
			
		||||
import cn.iocoder.yudao.module.trade.enums.order.TradeOrderStatusEnum;
 | 
			
		||||
import cn.iocoder.yudao.module.trade.framework.order.config.TradeOrderProperties;
 | 
			
		||||
import cn.iocoder.yudao.module.trade.service.order.TradeOrderService;
 | 
			
		||||
import com.google.common.collect.Maps;
 | 
			
		||||
import io.swagger.v3.oas.annotations.Operation;
 | 
			
		||||
import io.swagger.v3.oas.annotations.Parameter;
 | 
			
		||||
import io.swagger.v3.oas.annotations.tags.Tag;
 | 
			
		||||
@@ -24,14 +27,15 @@ import org.springframework.web.bind.annotation.*;
 | 
			
		||||
 | 
			
		||||
import javax.annotation.Resource;
 | 
			
		||||
import javax.validation.Valid;
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
 | 
			
		||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
 | 
			
		||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
 | 
			
		||||
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
 | 
			
		||||
import static cn.iocoder.yudao.framework.common.util.servlet.ServletUtils.getClientIP;
 | 
			
		||||
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
 | 
			
		||||
import static cn.iocoder.yudao.module.trade.enums.ErrorCodeConstants.ORDER_ITEM_NOT_FOUND;
 | 
			
		||||
 | 
			
		||||
@Tag(name = "用户 App - 交易订单")
 | 
			
		||||
@RestController
 | 
			
		||||
@@ -49,6 +53,9 @@ public class AppTradeOrderController {
 | 
			
		||||
    @Resource
 | 
			
		||||
    private TradeOrderProperties tradeOrderProperties;
 | 
			
		||||
 | 
			
		||||
    @Resource
 | 
			
		||||
    private ProductCommentApi productCommentApi;
 | 
			
		||||
 | 
			
		||||
    @GetMapping("/settlement")
 | 
			
		||||
    @Operation(summary = "获得订单结算信息")
 | 
			
		||||
    @PreAuthenticated
 | 
			
		||||
@@ -106,7 +113,7 @@ public class AppTradeOrderController {
 | 
			
		||||
    @GetMapping("/get-count")
 | 
			
		||||
    @Operation(summary = "获得交易订单数量")
 | 
			
		||||
    public CommonResult<Map<String, Long>> getOrderCount() {
 | 
			
		||||
        Map<String, Long> orderCount = new HashMap<>();
 | 
			
		||||
        Map<String, Long> orderCount = Maps.newLinkedHashMapWithExpectedSize(5);
 | 
			
		||||
        // 全部
 | 
			
		||||
        orderCount.put("allCount", tradeOrderService.getOrderCount(getLoginUserId(), null, null));
 | 
			
		||||
        // 待付款(未支付)
 | 
			
		||||
@@ -130,11 +137,18 @@ public class AppTradeOrderController {
 | 
			
		||||
        return success(TradeOrderConvert.INSTANCE.convert03(item));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // TODO 芋艿:待实现
 | 
			
		||||
    @PostMapping("/item/create-comment")
 | 
			
		||||
    @Operation(summary = "创建交易订单项的评价")
 | 
			
		||||
    public CommonResult<Long> createOrderItemComment() {
 | 
			
		||||
        return success(0L);
 | 
			
		||||
    public CommonResult<Long> createOrderItemComment(@RequestBody AppTradeOrderItemCommentCreateReqVO createReqVO) {
 | 
			
		||||
        // 校验订单项,订单项存在订单就存在
 | 
			
		||||
        TradeOrderItemDO item = tradeOrderService.getOrderItem(createReqVO.getUserId(), createReqVO.getOrderItemId());
 | 
			
		||||
        if (item == null) {
 | 
			
		||||
            throw exception(ORDER_ITEM_NOT_FOUND);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return success(productCommentApi.createComment(TradeOrderConvert.INSTANCE.convert04(createReqVO), item.getOrderId()));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // TODO 合并代码后发现只有商家回复功能 用户追评不要了吗?
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,71 @@
 | 
			
		||||
package cn.iocoder.yudao.module.trade.controller.app.order.vo.item;
 | 
			
		||||
 | 
			
		||||
import io.swagger.v3.oas.annotations.media.Schema;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
 | 
			
		||||
import javax.validation.constraints.NotNull;
 | 
			
		||||
import javax.validation.constraints.Size;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 商品评价创建 Request VO
 | 
			
		||||
 *
 | 
			
		||||
 * @author HUIHUI
 | 
			
		||||
 */
 | 
			
		||||
@Schema(description = "用户APP - 商品评价创建 Request VO")
 | 
			
		||||
@Data
 | 
			
		||||
public class AppTradeOrderItemCommentCreateReqVO {
 | 
			
		||||
 | 
			
		||||
    @Schema(description = "是否匿名", required = true, example = "true")
 | 
			
		||||
    @NotNull(message = "是否匿名不能为空")
 | 
			
		||||
    private Boolean anonymous;
 | 
			
		||||
 | 
			
		||||
    @Schema(description = "交易订单项编号", required = true, example = "2312312")
 | 
			
		||||
    @NotNull(message = "交易订单项编号不能为空")
 | 
			
		||||
    private Long orderItemId;
 | 
			
		||||
 | 
			
		||||
    @Schema(description = "商品SPU编号", required = true, example = "29502")
 | 
			
		||||
    @NotNull(message = "商品SPU编号不能为空")
 | 
			
		||||
    private Long spuId;
 | 
			
		||||
 | 
			
		||||
    @Schema(description = "商品SPU名称", required = true, example = "丝滑飘逸小短裙")
 | 
			
		||||
    @NotNull(message = "商品SPU名称不能为空")
 | 
			
		||||
    private String spuName;
 | 
			
		||||
 | 
			
		||||
    @Schema(description = "商品SKU编号", required = true, example = "3082")
 | 
			
		||||
    @NotNull(message = "商品SKU编号不能为空")
 | 
			
		||||
    private Long skuId;
 | 
			
		||||
 | 
			
		||||
    @Schema(description = "评分星级 1-5分", required = true, example = "5")
 | 
			
		||||
    @NotNull(message = "评分星级 1-5分不能为空")
 | 
			
		||||
    private Integer scores;
 | 
			
		||||
 | 
			
		||||
    @Schema(description = "描述星级 1-5分", required = true, example = "5")
 | 
			
		||||
    @NotNull(message = "描述星级 1-5分不能为空")
 | 
			
		||||
    private Integer descriptionScores;
 | 
			
		||||
 | 
			
		||||
    @Schema(description = "服务星级 1-5分", required = true, example = "5")
 | 
			
		||||
    @NotNull(message = "服务星级 1-5分不能为空")
 | 
			
		||||
    private Integer benefitScores;
 | 
			
		||||
 | 
			
		||||
    @Schema(description = "评论内容", required = true, example = "穿身上很漂亮诶(*^▽^*)")
 | 
			
		||||
    @NotNull(message = "评论内容不能为空")
 | 
			
		||||
    private String content;
 | 
			
		||||
 | 
			
		||||
    @Schema(description = "评论图片地址数组,以逗号分隔最多上传9张", required = true, example = "[https://www.iocoder.cn/xx.png, https://www.iocoder.cn/xx.png]")
 | 
			
		||||
    @Size(max = 9, message = "评论图片地址数组长度不能超过9张")
 | 
			
		||||
    private List<String> picUrls;
 | 
			
		||||
 | 
			
		||||
    @Schema(description = "评价人名称", required = true, example = "小姑凉")
 | 
			
		||||
    @NotNull(message = "评价人名称不能为空")
 | 
			
		||||
    private String userNickname;
 | 
			
		||||
 | 
			
		||||
    @Schema(description = "评价人头像", required = true, example = "https://www.iocoder.cn/xx.png")
 | 
			
		||||
    @NotNull(message = "评价人头像不能为空")
 | 
			
		||||
    private String userAvatar;
 | 
			
		||||
 | 
			
		||||
    @Schema(description = "评价人", required = true, example = "16868")
 | 
			
		||||
    @NotNull(message = "评价人不能为空")
 | 
			
		||||
    private Long userId;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -8,6 +8,7 @@ import cn.iocoder.yudao.framework.ip.core.utils.AreaUtils;
 | 
			
		||||
import cn.iocoder.yudao.module.member.api.address.dto.AddressRespDTO;
 | 
			
		||||
import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO;
 | 
			
		||||
import cn.iocoder.yudao.module.pay.api.order.dto.PayOrderCreateReqDTO;
 | 
			
		||||
import cn.iocoder.yudao.module.product.api.comment.dto.CommentCreateReqDTO;
 | 
			
		||||
import cn.iocoder.yudao.module.product.api.property.dto.ProductPropertyValueDetailRespDTO;
 | 
			
		||||
import cn.iocoder.yudao.module.product.api.sku.dto.ProductSkuUpdateStockReqDTO;
 | 
			
		||||
import cn.iocoder.yudao.module.promotion.api.price.dto.PriceCalculateReqDTO;
 | 
			
		||||
@@ -18,6 +19,7 @@ import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderDetailR
 | 
			
		||||
import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderPageItemRespVO;
 | 
			
		||||
import cn.iocoder.yudao.module.trade.controller.app.base.property.AppProductPropertyValueDetailRespVO;
 | 
			
		||||
import cn.iocoder.yudao.module.trade.controller.app.order.vo.*;
 | 
			
		||||
import cn.iocoder.yudao.module.trade.controller.app.order.vo.item.AppTradeOrderItemCommentCreateReqVO;
 | 
			
		||||
import cn.iocoder.yudao.module.trade.controller.app.order.vo.item.AppTradeOrderItemRespVO;
 | 
			
		||||
import cn.iocoder.yudao.module.trade.dal.dataobject.cart.TradeCartDO;
 | 
			
		||||
import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO;
 | 
			
		||||
@@ -75,9 +77,10 @@ public interface TradeOrderConvert {
 | 
			
		||||
            return orderItem;
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    TradeOrderItemDO convert(TradePriceCalculateRespBO.OrderItem item);
 | 
			
		||||
 | 
			
		||||
    @Mapping(source = "userId" , target = "userId")
 | 
			
		||||
    @Mapping(source = "userId", target = "userId")
 | 
			
		||||
    PriceCalculateReqDTO convert(AppTradeOrderCreateReqVO createReqVO, Long userId);
 | 
			
		||||
 | 
			
		||||
    @Mappings({
 | 
			
		||||
@@ -85,6 +88,7 @@ public interface TradeOrderConvert {
 | 
			
		||||
            @Mapping(source = "count", target = "incrCount"),
 | 
			
		||||
    })
 | 
			
		||||
    ProductSkuUpdateStockReqDTO.Item convert(TradeOrderItemDO bean);
 | 
			
		||||
 | 
			
		||||
    List<ProductSkuUpdateStockReqDTO.Item> convertList(List<TradeOrderItemDO> list);
 | 
			
		||||
 | 
			
		||||
    default PayOrderCreateReqDTO convert(TradeOrderDO order, List<TradeOrderItemDO> orderItems,
 | 
			
		||||
@@ -136,7 +140,7 @@ public interface TradeOrderConvert {
 | 
			
		||||
                    properties.forEach(property -> {
 | 
			
		||||
                        ProductPropertyValueDetailRespDTO propertyValueDetail = propertyValueDetailMap.get(property.getValueId());
 | 
			
		||||
                        if (propertyValueDetail == null) {
 | 
			
		||||
                           return;
 | 
			
		||||
                            return;
 | 
			
		||||
                        }
 | 
			
		||||
                        item.getProperties().add(convert(propertyValueDetail));
 | 
			
		||||
                    });
 | 
			
		||||
@@ -148,7 +152,9 @@ public interface TradeOrderConvert {
 | 
			
		||||
        });
 | 
			
		||||
        return new PageResult<>(orderVOs, pageResult.getTotal());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    TradeOrderPageItemRespVO convert(TradeOrderDO order, List<TradeOrderItemDO> items);
 | 
			
		||||
 | 
			
		||||
    ProductPropertyValueDetailRespVO convert(ProductPropertyValueDetailRespDTO bean);
 | 
			
		||||
 | 
			
		||||
    // TODO 芋艿:可简化
 | 
			
		||||
@@ -179,7 +185,9 @@ public interface TradeOrderConvert {
 | 
			
		||||
        orderVO.setUser(convert(user));
 | 
			
		||||
        return orderVO;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    TradeOrderDetailRespVO convert2(TradeOrderDO order, List<TradeOrderItemDO> items);
 | 
			
		||||
 | 
			
		||||
    MemberUserRespVO convert(MemberUserRespDTO bean);
 | 
			
		||||
 | 
			
		||||
    // TODO 芋艿:可简化
 | 
			
		||||
@@ -214,7 +222,9 @@ public interface TradeOrderConvert {
 | 
			
		||||
        });
 | 
			
		||||
        return new PageResult<>(orderVOs, pageResult.getTotal());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    AppTradeOrderPageItemRespVO convert02(TradeOrderDO order, List<TradeOrderItemDO> items);
 | 
			
		||||
 | 
			
		||||
    AppProductPropertyValueDetailRespVO convert02(ProductPropertyValueDetailRespDTO bean);
 | 
			
		||||
 | 
			
		||||
    default AppTradeOrderDetailRespVO convert02(TradeOrderDO order, List<TradeOrderItemDO> orderItems,
 | 
			
		||||
@@ -243,10 +253,13 @@ public interface TradeOrderConvert {
 | 
			
		||||
        orderVO.setReceiverAreaName(AreaUtils.format(order.getReceiverAreaId()));
 | 
			
		||||
        return orderVO;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    AppTradeOrderDetailRespVO convert3(TradeOrderDO order, List<TradeOrderItemDO> items);
 | 
			
		||||
 | 
			
		||||
    AppTradeOrderItemRespVO convert03(TradeOrderItemDO bean);
 | 
			
		||||
 | 
			
		||||
    CommentCreateReqDTO convert04(AppTradeOrderItemCommentCreateReqVO createReqVO);
 | 
			
		||||
 | 
			
		||||
    default TradePriceCalculateReqBO convert(Long userId, AppTradeOrderSettlementReqVO settlementReqVO,
 | 
			
		||||
                                             List<TradeCartDO> cartList) {
 | 
			
		||||
        TradePriceCalculateReqBO reqBO = new TradePriceCalculateReqBO();
 | 
			
		||||
@@ -286,6 +299,8 @@ public interface TradeOrderConvert {
 | 
			
		||||
        }
 | 
			
		||||
        return respVO;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    AppTradeOrderSettlementRespVO convert0(TradePriceCalculateRespBO calculate, AddressRespDTO address);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user