package manage import ( "recook/internal/v2/lib/common" "recook/internal/v2/lib/db" "recook/internal/v2/model/recook/after" "recook/internal/v2/model/recook/user" "strconv" "github.com/golangkit/formatime" "github.com/shopspring/decimal" ) const ( RecookOrderInfoExpressStatusNone = 0 // 未发货 RecookOrderInfoExpressStatusIng = 1 // 已发货 RecookOrderInfoExpressStatusComp = 2 // 已收货 RecookOrderInfoIsClosedFalse = 0 // 未关闭 RecookOrderInfoIsClosedTrue = 1 // 已关闭 RecookOrderInfoPayMethodRecookPay = 0 // 余额支付 RecookOrderInfoPayMethodWechatPay = 1 // 微信支付 RecookOrderInfoPayMethodAlipay = 2 // 支付宝支付 RecookOrderInfoPayMethodWechatMiniPay = 4 // 微信小程序支付 RecookOrderInfoPayMethodAlipayH5 = 5 // 支付宝h5支付 RecookOrderInfoPayMethodWechatH5Pay = 6 // 微信h5支付 RecookOrderInfoPayMethodWechatH5Inner = 7 // 微信公众号内支付 RecookOrderInfoPayMethodUnionPay = 8 // 银联支付 RecookOrderInfoStatusNone = 0 // 未付款 RecookOrderInfoStatusSuc = 1 // 支付成功 PayMethodTypeRecook = 1 // 余额支付 PayMethodTypeWechat = 2 // 微信支付 PayMethodTypeAlipay = 3 // 支付宝支付 PayMethodTypeUnion = 4 // 银联支付 ) type PayMethodItem struct { PayMethodType int `json:"payMethodType"` PayMethodTypeName string `json:"payMethodTypeName"` } var ( PayMethodTypeRecookArr = []int{RecookOrderInfoPayMethodRecookPay} PayMethodTypeWechatArr = []int{RecookOrderInfoPayMethodWechatPay, RecookOrderInfoPayMethodWechatMiniPay, RecookOrderInfoPayMethodWechatH5Pay, RecookOrderInfoPayMethodWechatH5Inner} PayMethodTypeAlipayArr = []int{RecookOrderInfoPayMethodAlipay, RecookOrderInfoPayMethodAlipayH5} PayMethodTypeUnionArr = []int{RecookOrderInfoPayMethodUnionPay} PayMethodAll = []PayMethodItem{ { PayMethodType: PayMethodTypeRecook, PayMethodTypeName: "余额支付", }, { PayMethodType: PayMethodTypeWechat, PayMethodTypeName: "微信支付", }, { PayMethodType: PayMethodTypeAlipay, PayMethodTypeName: "支付宝支付", }, { PayMethodType: PayMethodTypeUnion, PayMethodTypeName: "银联支付", }, } ) // @Style 发货状态 func (r *RecookOrderInfoModel) GetExpressName(expressStatus uint) string { switch expressStatus { case RecookOrderInfoExpressStatusNone: return "未发货" case RecookOrderInfoExpressStatusIng: return "已发货" case RecookOrderInfoExpressStatusComp: return "已收货" } return "" } // @Style 获取支付大类的支付方式 func (r *RecookOrderInfoModel) GetPayMethods(payMethodType uint) []int { switch payMethodType { case PayMethodTypeRecook: return PayMethodTypeRecookArr case PayMethodTypeWechat: return PayMethodTypeWechatArr case PayMethodTypeAlipay: return PayMethodTypeAlipayArr case PayMethodTypeUnion: return PayMethodTypeUnionArr } return nil } // @Style 获取支付方式类型 func (r *RecookOrderInfoModel) GetPayMethodType() int { if common.InArray(int(r.PayMethod), PayMethodTypeRecookArr) { return PayMethodTypeRecook } if common.InArray(int(r.PayMethod), PayMethodTypeWechatArr) { return PayMethodTypeWechat } if common.InArray(int(r.PayMethod), PayMethodTypeAlipayArr) { return PayMethodTypeAlipay } if common.InArray(int(r.PayMethod), PayMethodTypeUnionArr) { return PayMethodTypeUnion } return 0 } // @Style 获取支付方式类型名称 func (r *RecookOrderInfoModel) GetPayMethodTypeName() string { payMethodType := r.GetPayMethodType() for _, item := range PayMethodAll { if item.PayMethodType == payMethodType { return item.PayMethodTypeName } } return "" } type RecookOrderInfoModel struct { db.BaseModel Id uint `gorm:"column:id;primary_key" json:"id"` AncestorId uint `gorm:"column:ancestor_id" json:"-"` ParentId uint `gorm:"column:parent_id" json:"parentId"` // 分享者id,链接购买则是分享者id。其他方式则是自己上级的id SharerId uint `gorm:"column:sharer_id" json:"sharerId"` LiveId uint `gorm:"column:live_id" json:"liveId"` UserId uint `gorm:"column:user_id" json:"userId"` // 下单者 UserRole uint `gorm:"column:user_role" json:"userRole"` Title string `gorm:"column:title" json:"title"` // 订单简要标题 BrandCouponTotalAmount decimal.Decimal `gorm:"column:brand_coupon_total_amount" json:"brandCouponTotalAmount"` // 品牌优惠券抵扣总金额 UniverseCouponTotalAmount decimal.Decimal `gorm:"column:universe_coupon_total_amount" json:"universeCouponTotalAmount"` // 购物券抵扣总金额 CoinTotalAmount decimal.Decimal `gorm:"column:coin_total_amount" json:"coinTotalAmount"` // 瑞币抵扣总金额 ExpressTotalFee decimal.Decimal `gorm:"column:express_total_fee" json:"expressTotalFee"` // 总快递费 GoodsTotalAmount decimal.Decimal `gorm:"column:goods_total_amount" json:"goodsTotalAmount"` // 商品总金额, GoodsTotalCommission decimal.Decimal `gorm:"column:goods_total_commission" json:"goodsTotalCommission"` // 商品总返还金额 ActualTotalAmount decimal.Decimal `gorm:"column:actual_total_amount" json:"actualTotalAmount"` // 实际支付的金额 Channel uint `gorm:"column:channel" json:"-"` // 下单渠道:0详情页直接购买 1购物车结算购买 ShippingMethod uint `gorm:"column:shipping_method" json:"shippingMethod"` // 0快递 1自提 StoreId uint `gorm:"column:store_id" json:"-"` // 门店id BuyerMessage string `gorm:"column:buyer_message" json:"buyerMessage"` // 买家留言 Status uint `gorm:"column:status" json:"status"` // 0未付款 1支付成功 2订单取消 3订单过期 4交易成功 5订单关闭 ExpressStatus uint `gorm:"column:express_status" json:"expressStatus"` // 快递状态 0 没有发货 1部分发货 2全部发货 InvoiceStatus uint `gorm:"column:invoice_status" json:"invoiceStatus"` // 开票状态 0 未申请, 1已申请 2已开票 EvaluatedAt formatime.Second `gorm:"column:evaluated_at" json:"evaluatedAt"` // 评价时间 CreatedAt formatime.Second `gorm:"column:created_at" json:"createdAt"` // 创建时间 ExpireTime formatime.Second `gorm:"column:expire_time" json:"expireTime"` // 订单过期时间 PayIP string `gorm:"column:pay_ip" json:"payIp"` // 支付时的ip TradeNo string `gorm:"column:trade_no" json:"tradeNo"` // 传递给第三方支付的id凭证 PayTime formatime.Second `gorm:"column:pay_time" json:"payTime"` // 支付时间 PayMethod uint `gorm:"column:pay_method" json:"payMethod"` // 支付方式: 0:recookpay 1:微信 2:支付宝 3:零支付 4:小程序支付' 5:alipay-h5 CompletedAt formatime.Second `gorm:"column:completed_at" json:"completedAt"` // 交易完成时间 RbacId int `gorm:"column:rbac_id" json:"rbacId"` IsFirst int `gorm:"column:is_first" json:"isFirst"` // 是否为第一笔订单 1 否,2 是 3 提交订单的时候检查是否是第一次提交订单 VirtualID uint `gorm:"column:virtual_id"` PayType uint `gorm:"pay_type"` Kind int `gorm:"column:kind"` JCookOrderID uint `gorm:"column:jcook_order_id"` ApplyStatus int `gorm:"column:apply_status"` DealStatus int `gorm:"column:deal_status"` IsSplit bool `gorm:"column:is_split"` JCookRootID uint `gorm:"column:jcook_root_id"` JCookParentID uint `gorm:"column:jcook_parent_id"` OrderSku []RecookOrderGoodsDetailModel `json:"-" gorm:"foreignKey:order_id"` After []after.RecookAfterSalesGoodsModel `json:"-" gorm:"foreignKey:order_id"` OrderType uint `json:"-"` User user.RecookUserInfoModel `json:"-" gorm:"foreignKey:user_id"` } // TableName sets the insert table name for this struct type func (r *RecookOrderInfoModel) TableName() string { return "recook_order_info" } // @Style 添加 func (r *RecookOrderInfoModel) Create(data *RecookOrderInfoModel) { r.GetDb().Create(data) } // @Style 获取列表数量 func (r *RecookOrderInfoModel) List(start, limit int, order string, query interface{}, args ...interface{}) (result []RecookOrderInfoModel) { r.GetDb().Model(&RecookOrderInfoModel{}).Where(query, args...).Offset(start).Limit(limit).Order(order).Find(&result) return } // @Style 获取列表数量 func (r *RecookOrderInfoModel) ListCount(query interface{}, args ...interface{}) (count int) { r.GetDb().Model(&RecookOrderInfoModel{}).Where(query, args...).Count(&count) return } // @Style 获取数据 func (r *RecookOrderInfoModel) FindById(orderId uint) (result RecookOrderInfoModel) { r.GetDb().Model(&RecookOrderInfoModel{}).Where("id = ?", orderId).First(&result) return } // @Style 获取数据 func (r *RecookOrderInfoModel) FindByIds(orderIds []uint) (result []RecookOrderInfoModel) { r.GetDb().Model(&RecookOrderInfoModel{}).Where("id in (?)", orderIds).Find(&result) return } // @Style 编辑 func (r *RecookOrderInfoModel) UpdateById(orderId uint, date *RecookOrderInfoModel) error { return r.GetDb().Model(&RecookOrderInfoModel{}).Where("id = ?", orderId).Update(date).Error } // GetSoID 获取线上订单号. func (r *RecookOrderInfoModel) GetSoID() string { return strconv.Itoa(int(r.Id)) } //获取 userid 相关的可开发票列表 func (r *RecookOrderInfoModel) CanBill(id uint, size uint, num uint) (rest []RecookOrderInfoModel) { r.GetDb().Model(&RecookOrderInfoModel{}).Limit(size).Offset((num-1)*num).Where("invoice_status=? and status=?", 0, 4).Where("user_id =?", id).Preload("After").Preload("OrderSku").Order("pay_time desc").Find(&rest) return }