MallBizOrder.java 8.77 KB
package com.diligrp.cashier.mall.model;

import com.diligrp.cashier.mall.domain.rtmall.co.AuthLoginCO;
import com.diligrp.cashier.mall.domain.rtmall.co.OrderCO;
import com.diligrp.cashier.mall.domain.rtmall.co.OrderStatusCallbackCO;
import com.diligrp.cashier.mall.type.OrderState;
import com.diligrp.cashier.mall.type.RtmartState;
import com.diligrp.cashier.mall.util.MallSnowflakeKeyManager;
import com.diligrp.cashier.shared.domain.BaseDO;
import com.diligrp.cashier.shared.util.SpringContextUtils;
import com.diligrp.cashier.trade.type.SnowflakeKey;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import org.springframework.beans.BeanUtils;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Optional;

/**
 * MallBizOrder
 *
 * @author dengwei
 */
@JsonIgnoreProperties({"version"})
public class MallBizOrder extends BaseDO {
    /**
     * 订单单号-系统生成
     */
    private String orderNo;

    /**
     * 业务侧订单号
     */
    private String orderId;

    /**
     * 业务侧支付单号
     */
    private String tradeId;

    /**
     * dili侧渠道(中瑞 地利)
     * @see com.diligrp.cashier.mall.type.OrderChannel
     */
    private String channel;

    /**
     * 商户ID
     */
    private String mchId;

    /**
     * 订单来源(1大润发 2山姆)-换取回调地址
     * @see com.diligrp.cashier.mall.type.OrderSource
     */
    private Integer source;

    /**
     * 支付单类型: 1线下扫码购,2 接口扫码购,3小程序
     * @see com.diligrp.cashier.mall.type.OrderType
     */
    private Integer orderType;

    /**
     * 用户编号
     */
    private String userCode;

    /**
     * 用户名称
     */
    private String username;

    /**
     * 企业组编号
     */
    private String companyCode;

    /**
     * 门店编号
     */
    private String shopCode;

    /**
     * 门店名称
     */
    private String shopName;

    /**
     * 订单总金额(分)
     */
    private Long totalAmount;

    /**
     * 运费(分)
     */
    private Long freightFee;

    /**
     * 订单状态(0-notpay-未支付-1-payed-已支付 2-notpaycancel-未支付取消 3-payedcancel-已支付取消  4-done-订单完成 5-buyer_confirm-待用户收货)
     * @see OrderState
     */
    private Integer state;

    /**
     * 配送状态(1-transfer-转单 2-package-打包 3-collect-揽件 4-delivery-配达)
     * @see RtmartState
     */
    private Integer rtmartState;

    /**
     * 下单时间
     */
    private LocalDateTime orderTime;

    /**
     * 订单有效期分钟-超时自动取消
     */
    private Integer orderExpire;

    /**
     * 修改人名称
     */
    private String modifierName;

    /**
     * 订单地址信息
     */
    private MallBizOrderAddress mallBizOrderAddress;

    private List<MallBizOrderItem> mallBizOrderItems;

    public String getOrderNo() {
        return orderNo;
    }

    public void setOrderNo(String orderNo) {
        this.orderNo = orderNo;
    }

    public String getOrderId() {
        return orderId;
    }

    public void setOrderId(String orderId) {
        this.orderId = orderId;
    }

    public String getTradeId() {
        return tradeId;
    }

    public void setTradeId(String tradeId) {
        this.tradeId = tradeId;
    }

    public String getChannel() {
        return channel;
    }

    public void setChannel(String channel) {
        this.channel = channel;
    }

    public String getMchId() {
        return mchId;
    }

    public void setMchId(String mchId) {
        this.mchId = mchId;
    }

    public Integer getSource() {
        return source;
    }

    public void setSource(Integer source) {
        this.source = source;
    }

    public Integer getOrderType() {
        return orderType;
    }

    public void setOrderType(Integer orderType) {
        this.orderType = orderType;
    }

    public String getUserCode() {
        return userCode;
    }

    public void setUserCode(String userCode) {
        this.userCode = userCode;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getCompanyCode() {
        return companyCode;
    }

    public void setCompanyCode(String companyCode) {
        this.companyCode = companyCode;
    }

    public String getShopCode() {
        return shopCode;
    }

    public void setShopCode(String shopCode) {
        this.shopCode = shopCode;
    }

    public String getShopName() {
        return shopName;
    }

    public void setShopName(String shopName) {
        this.shopName = shopName;
    }

    public Long getTotalAmount() {
        return totalAmount;
    }

    public void setTotalAmount(Long totalAmount) {
        this.totalAmount = totalAmount;
    }

    public Long getFreightFee() {
        return freightFee;
    }

    public void setFreightFee(Long freightFee) {
        this.freightFee = freightFee;
    }

    public Integer getState() {
        return state;
    }

    public void setState(Integer state) {
        this.state = state;
    }

    public Integer getRtmartState() {
        return rtmartState;
    }

    public void setRtmartState(Integer rtmartState) {
        this.rtmartState = rtmartState;
    }

    public LocalDateTime getOrderTime() {
        return orderTime;
    }

    public void setOrderTime(LocalDateTime orderTime) {
        this.orderTime = orderTime;
    }

    public Integer getOrderExpire() {
        return orderExpire;
    }

    public void setOrderExpire(Integer orderExpire) {
        this.orderExpire = orderExpire;
    }

    public String getModifierName() {
        return modifierName;
    }

    public void setModifierName(String modifierName) {
        this.modifierName = modifierName;
    }

    public MallBizOrderAddress getMallBizOrderAddress() {
        return mallBizOrderAddress;
    }

    public void setMallBizOrderAddress(MallBizOrderAddress mallBizOrderAddress) {
        this.mallBizOrderAddress = mallBizOrderAddress;
    }

    public List<MallBizOrderItem> getMallBizOrderItems() {
        return mallBizOrderItems;
    }

    public void setMallBizOrderItems(List<MallBizOrderItem> mallBizOrderItems) {
        this.mallBizOrderItems = mallBizOrderItems;
    }

    /**
     * of
     */
    public static MallBizOrder of(OrderCO orderCo, AuthLoginCO authLogin) {
        orderCo.setVersion(null);
        MallBizOrder mallBizOrder = new MallBizOrder();
        BeanUtils.copyProperties(orderCo, mallBizOrder);

        MallSnowflakeKeyManager snowflakeKeyManager = SpringContextUtils.getBean(MallSnowflakeKeyManager.class);
        mallBizOrder.setId(snowflakeKeyManager.nextId(SnowflakeKey.MALL_BIZ_ORDER_ID));
        mallBizOrder.setOrderNo(snowflakeKeyManager.nextId(SnowflakeKey.MALL_BIZ_ORDER_ID).toString());
        BeanUtils.copyProperties(authLogin, mallBizOrder);

        Optional.ofNullable(orderCo.getReceiverInfo())
                .ifPresent(receiverInfo -> {
                    MallBizOrderAddress address = new MallBizOrderAddress();
                    mallBizOrder.setMallBizOrderAddress(address);

                    address.setId(mallBizOrder.getId());
                    address.setReceiverName(receiverInfo.getReceiverName());
                    address.setReceiverMobile(receiverInfo.getReceiverMobile());
                    address.setReceiverAddress(receiverInfo.getReceiverAddress());
                });

        Optional.ofNullable(orderCo.getItemList())
                .ifPresent(itemList -> {
                    List<MallBizOrderItem> orderItems = itemList
                            .stream()
                            .map(itemCo -> {
                                MallBizOrderItem item = new MallBizOrderItem();
                                BeanUtils.copyProperties(itemCo, item);

                                item.setId(snowflakeKeyManager.nextId(SnowflakeKey.MALL_BIZ_ORDER_ID));
                                item.setBizOrderId(mallBizOrder.getId());
                                item.setOrderId(orderCo.getOrderId());
                                item.setShopCode(orderCo.getShopCode());
                                item.setShopName(orderCo.getShopName());
                                return item;
                            }).toList();
                    mallBizOrder.setMallBizOrderItems(orderItems);
                });
        return mallBizOrder;
    }

    /**
     * ofUpdateState
     */
    public MallBizOrder ofUpdateState(OrderStatusCallbackCO orderStatusCallback) {
        MallBizOrder update = new MallBizOrder();
        update.setId(this.getId());
        update.setState(OrderState.getCode(orderStatusCallback.getOrderStatus()));
        update.setModifierName(orderStatusCallback.getUserCode());
        update.setVersion(this.getVersion());
        return update;
    }
}