package cn.lili.modules.order.order.entity.dos;
|
|
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.text.CharSequenceUtil;
|
import cn.hutool.json.JSONUtil;
|
import cn.lili.common.utils.BeanUtil;
|
import cn.lili.common.utils.CurrencyUtil;
|
import cn.lili.common.utils.SnowFlake;
|
import cn.lili.modules.order.order.entity.dto.PriceDetailDTO;
|
import cn.lili.modules.order.order.entity.enums.FlowTypeEnum;
|
import cn.lili.modules.order.order.entity.enums.OrderPromotionTypeEnum;
|
import cn.lili.modules.order.order.entity.enums.ProfitSharingStatusEnum;
|
import cn.lili.modules.payment.entity.enums.PaymentMethodEnum;
|
import cn.lili.mybatis.BaseIdEntity;
|
import com.baomidou.mybatisplus.annotation.FieldFill;
|
import com.baomidou.mybatisplus.annotation.TableField;
|
import com.baomidou.mybatisplus.annotation.TableName;
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
import io.swagger.annotations.ApiModel;
|
import io.swagger.annotations.ApiModelProperty;
|
import lombok.Data;
|
import lombok.EqualsAndHashCode;
|
import lombok.NoArgsConstructor;
|
import org.springframework.data.annotation.CreatedDate;
|
import org.springframework.format.annotation.DateTimeFormat;
|
|
import java.util.Date;
|
|
/**
|
* 商家订单流水
|
*
|
* @author Chopper
|
* @since 2020/11/17 7:31 下午
|
*/
|
@Data
|
@TableName("li_store_flow")
|
@ApiModel(value = "商家订单流水")
|
@NoArgsConstructor
|
@EqualsAndHashCode(callSuper = true)
|
public class StoreFlow extends BaseIdEntity {
|
|
private static final long serialVersionUID = -5998757398902747939L;
|
|
@ApiModelProperty(value = "流水编号")
|
private String sn;
|
|
@ApiModelProperty(value = "订单sn")
|
private String orderSn;
|
|
@ApiModelProperty(value = "子订单sn")
|
private String orderItemSn;
|
|
@ApiModelProperty(value = "售后SN")
|
private String refundSn;
|
|
@ApiModelProperty(value = "店铺id")
|
private String storeId;
|
|
@ApiModelProperty(value = "店铺名称 ")
|
private String storeName;
|
|
@ApiModelProperty(value = "会员id")
|
private String memberId;
|
|
@ApiModelProperty(value = "会员名称")
|
private String memberName;
|
|
|
@ApiModelProperty(value = "商品ID")
|
private String goodsId;
|
|
@ApiModelProperty(value = "商品名称")
|
private String goodsName;
|
|
@ApiModelProperty(value = "货品ID")
|
private String skuId;
|
|
@ApiModelProperty(value = "图片")
|
private String image;
|
|
@ApiModelProperty(value = "分类ID")
|
private String categoryId;
|
|
@ApiModelProperty(value = "规格json")
|
private String specs;
|
|
|
/**
|
* @see FlowTypeEnum
|
*/
|
@ApiModelProperty(value = "流水类型:PAY/REFUND 支付/退款", allowableValues = "PAY,REFUND")
|
private String flowType;
|
|
/**
|
* @see cn.lili.modules.order.order.entity.enums.OrderPromotionTypeEnum
|
*/
|
@ApiModelProperty(value = "订单促销类型")
|
private String orderPromotionType;
|
|
@ApiModelProperty(value = "积分活动商品结算价格")
|
private Double pointSettlementPrice;
|
|
@ApiModelProperty(value = "砍价活动商品结算价格")
|
private Double kanjiaSettlementPrice;
|
|
@ApiModelProperty(value = "平台优惠券 使用金额")
|
private Double siteCouponPrice;
|
|
@ApiModelProperty(value = "站点优惠券补贴比例")
|
private Double siteCouponPoint;
|
|
@ApiModelProperty(value = "站点优惠券补贴金额")
|
private Double siteCouponCommission;
|
|
@ApiModelProperty(value = "单品分销返现支出")
|
private Double distributionRebate;
|
|
@ApiModelProperty(value = "平台收取交易佣金")
|
private Double commissionPrice;
|
|
@ApiModelProperty(value = "流水金额")
|
private Double finalPrice;
|
|
@ApiModelProperty(value = "最终结算金额")
|
private Double billPrice;
|
|
@ApiModelProperty(value = "第三方交易流水号")
|
private String transactionId;
|
|
/**
|
* @see PaymentMethodEnum
|
*/
|
@ApiModelProperty(value = "支付方式名称")
|
private String paymentName;
|
|
@ApiModelProperty(value = "销售量")
|
private Integer num;
|
|
@CreatedDate
|
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
|
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
@TableField(fill = FieldFill.INSERT)
|
@ApiModelProperty(value = "创建时间", hidden = true)
|
private Date createTime;
|
|
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
|
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
@TableField(fill = FieldFill.INSERT)
|
@ApiModelProperty(value = "结算时间", hidden = true)
|
private Date billTime;
|
|
@ApiModelProperty(value = "是否全部退款,true为全部退款")
|
private Boolean fullRefund;
|
|
/**
|
* @see ProfitSharingStatusEnum
|
*/
|
@ApiModelProperty(value = "分账状态")
|
private String profitSharingStatus;
|
|
@ApiModelProperty(value = "实际分账金额DTO", hidden = true)
|
private String profitSharing;
|
|
|
public StoreFlow(Order order, OrderItem item, FlowTypeEnum flowTypeEnum) {
|
//获取订单促销类型,如果为促销订单则获取促销商品并获取结算价
|
String promotionType = order.getOrderPromotionType();
|
BeanUtil.copyProperties(item, this);
|
|
//去掉orderitem的时间。
|
this.setCreateTime(null);
|
//入账
|
this.setId(SnowFlake.getIdStr());
|
this.setFlowType(flowTypeEnum.name());
|
this.setSn(SnowFlake.createStr("SF"));
|
this.setOrderSn(item.getOrderSn());
|
this.setOrderItemSn(item.getSn());
|
this.setStoreId(order.getStoreId());
|
this.setStoreName(order.getStoreName());
|
this.setMemberId(order.getMemberId());
|
this.setMemberName(order.getMemberName());
|
this.setGoodsName(item.getGoodsName());
|
this.setOrderPromotionType(item.getPromotionType());
|
//格式化订单价格详情
|
PriceDetailDTO priceDetailDTO = JSONUtil.toBean(item.getPriceDetail(), PriceDetailDTO.class);
|
//站点优惠券比例=最大比例(100)-店铺承担比例
|
this.setSiteCouponPoint(CurrencyUtil.sub(100, priceDetailDTO.getSiteCouponPoint()));
|
//平台优惠券 使用金额
|
this.setSiteCouponPrice(priceDetailDTO.getSiteCouponPrice());
|
//站点优惠券佣金(站点优惠券承担金额=优惠券金额 * (站点承担比例/100))
|
this.setSiteCouponCommission(CurrencyUtil.mul(this.getSiteCouponPrice(), CurrencyUtil.div(this.getSiteCouponPoint(), 100)));
|
|
/**
|
* @TODO 计算平台佣金
|
*/
|
//店铺流水金额=goodsPrice(商品总金额(商品原价))+ freightPrice(配送费) - discountPrice(优惠金额) - couponPrice(优惠券金额) + updatePrice(订单修改金额)
|
this.setFinalPrice(item.getPriceDetailDTO().getFlowPrice());
|
//平台收取交易佣金=(flowPrice(流水金额) * platFormCommissionPoint(平台佣金比例))/100
|
this.setCommissionPrice(item.getPriceDetailDTO().getPlatFormCommission());
|
//单品分销返现支出
|
this.setDistributionRebate(item.getPriceDetailDTO().getDistributionCommission());
|
//最终结算金额=flowPrice(流水金额) - platFormCommission(平台收取交易佣金) - distributionCommission(单品分销返现支出)
|
this.setBillPrice(item.getPriceDetailDTO().getBillPrice());
|
//兼容为空,以及普通订单操作
|
if (CharSequenceUtil.isNotEmpty(promotionType)) {
|
//如果为砍价活动,填写砍价结算价
|
if (promotionType.equals(OrderPromotionTypeEnum.KANJIA.name())) {
|
this.setKanjiaSettlementPrice(item.getPriceDetailDTO().getSettlementPrice());
|
}
|
//如果为砍价活动,填写砍价结算价
|
else if (promotionType.equals(OrderPromotionTypeEnum.POINTS.name())) {
|
this.setPointSettlementPrice(item.getPriceDetailDTO().getSettlementPrice());
|
}
|
}
|
//添加支付方式
|
this.setPaymentName(order.getPaymentMethod());
|
//添加第三方支付流水号
|
this.setTransactionId(order.getReceivableNo());
|
//默认结算时间180天
|
if (flowTypeEnum.equals(FlowTypeEnum.PAY)) {
|
this.billTime = DateUtil.offsetDay(new Date(), 180);
|
this.fullRefund = false;
|
}
|
}
|
}
|