You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

225 lines
12 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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
}