|
|
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
|
|
|
}
|