构造器设计模式完成订单下单的数据赋值

构造器设计模式完成订单下单的数据赋值

/**
 * @Author: xrl
 * @Date: 2022/9/10  14:41
 * @Version 1.0
 * 订单
 */
@Service
public class OrdersServiceImpl extends ServiceImpl<OrdersMapper, Orders> implements OrdersService {
    @Autowired
    private ShoppingCartService shoppingCartService;

    @Autowired
    private AddressBookService addressBookService;

    @Autowired
    private UserService userService;

    @Autowired
    private OrderDetailService orderDetailService;

    /**
     * 用户下单
     */
    @Override
    @Transactional
    public void submit(Orders orders) {
        //工具类获取订单号,设置到订单表中
        orders.setId(IdWorker.getId());
        StructureBuilder structureBuilder = new StructureBuilder(shoppingCartService,addressBookService,userService,
                orderDetailService,orders);

        //构造设计模式,构造结果
        OrderPlus orderPlus = structureBuilder.builderOrderItem().builderOrder().build();

        //获得订单数据
        Orders orderPlusOrders = orderPlus.getOrders();
        //获得订单明细数据
        List<OrderDetail> detailList = orderPlus.getOrderDetailList();

        //添加数据到订单表
        this.save(orderPlusOrders);
        //订单明细数据添加到订单明细表OrderDetail
        orderDetailService.saveBatch(detailList);
        //结算成功,清空购物车
        LambdaQueryWrapper<ShoppingCart> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(ShoppingCart::getUserId, BaseContext.getCurrentId());
        shoppingCartService.remove(wrapper);
    }
}

builder构造

/**
 * @Author: xrl
 * @Date: 2022/9/13  13:53
 * @Version 1.0
 * 最终结果类
 */
@Data
public class OrderPlus {
    private Orders orders;
    private List<OrderDetail> orderDetailList;
}

构造设计模式,构造数据

/**
 * @Author: xrl
 * @Date: 2022/9/13  13:52
 * @Version 1.0
 * 构造设计模式,构造数据
 */
public class StructureBuilder {
    private ShoppingCartService shoppingCartService;
    private AddressBookService addressBookService;
    private UserService userService;
    private OrderDetailService orderDetailService;
    private Orders orders;
    private AtomicInteger amount = new AtomicInteger(0);//就可以使用这个类;
    //最终结果类
    private OrderPlus orderPlus;

    //构造接收参数,提升作用域到成员变量位置
    public StructureBuilder(ShoppingCartService shoppingCartService, AddressBookService addressBookService,
                            UserService userService, OrderDetailService orderDetailService, Orders orders
                           ) {
        this.shoppingCartService = shoppingCartService;
        this.addressBookService = addressBookService;
        this.userService = userService;
        this.orderDetailService = orderDetailService;
        this.orders = orders;
        this.orderPlus = new OrderPlus();
    }

    //获取购物车数据信息,设置到OrderPlus结果实体类中
    public StructureBuilder builderOrderItem() {
        LambdaQueryWrapper<ShoppingCart> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(ShoppingCart::getUserId, BaseContext.getCurrentId());
        //根据用户id,查询用户购物车
        List<ShoppingCart> cartList = shoppingCartService.list(wrapper);
        if (cartList == null || cartList.size() == 0) {
            throw new CustomException("购物车为空,禁止下单");
        }

        //遍历购物车
        List<OrderDetail> orderDetailas = cartList.stream().map((item) -> {
            //创建订单明细OrderDetail对象
            OrderDetail orderDetail = new OrderDetail();
            //组装订单明细表信息(基本信息使用拷贝方式)
            BeanUtils.copyProperties(item, orderDetail);
            orderDetail.setOrderId(orders.getId());
            //累加订单金额 = 单价 * 数量
            int value = item.getAmount().multiply(new BigDecimal(item.getNumber())).intValue();
            amount.addAndGet(value);
            return orderDetail;
        }).collect(Collectors.toList());
        orderPlus.setOrderDetailList(orderDetailas);
        return this;
    }

    //获取订单信息,设置到OrderPlus结果实体类中
    public StructureBuilder builderOrder() {
        //查询地址信息
        Long addressId = orders.getAddressBookId();
        AddressBook addressBook = addressBookService.getById(addressId);
        if (addressBook == null) {
            throw new CustomException("地址信息为空,禁止下单");
        }
        //获取用户信息
        User user = userService.getById(BaseContext.getCurrentId());

        //组装订单表数据
        Orders build = Orders.builder()
                .number(String.valueOf(orders.getId()))
                .status(2)
                .addressBookId(addressId)
                .userId(BaseContext.getCurrentId())
                .orderTime(LocalDateTime.now())
                .checkoutTime(LocalDateTime.now())
                .payMethod(2)//支付方式
                .amount(new BigDecimal(amount.get()))
                .phone(addressBook.getPhone())
                .userName(user.getName())
                .consignee(addressBook.getConsignee())
                .address((addressBook.getProvinceName() == null ? "" : addressBook.getProvinceName())
                        + (addressBook.getCityName() == null ? "" : addressBook.getCityName())
                        + (addressBook.getDistrictName() == null ? "" : addressBook.getDistrictName())
                        + (addressBook.getDetail() == null ? "" : addressBook.getDetail())).build();//具体地址信息
        orderPlus.setOrders(build);
        return this;
    }

    public OrderPlus build() {
        return orderPlus;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值