Merge branch 'master' into get-store
This commit is contained in:
135
business/model/act.go
Normal file
135
business/model/act.go
Normal file
@@ -0,0 +1,135 @@
|
||||
package model
|
||||
|
||||
import "time"
|
||||
|
||||
const (
|
||||
ActSkuDirectDown = 1
|
||||
ActSkuSecKill = 2
|
||||
|
||||
ActOrderBegin = 10
|
||||
ActOrderMoneyOff = 11
|
||||
ActOrderMoneyOffCoupon = 12
|
||||
ActOrderReduceFreight = 13
|
||||
ActOrderReduceFreightCoupon = 14
|
||||
)
|
||||
|
||||
const (
|
||||
ActStatusCreated = 1 // 需同步
|
||||
ActStatusCanceled = 2 // 需同步
|
||||
ActStatusEnded = 3 // 不需要同步,根据活动时间自动刷新的
|
||||
)
|
||||
|
||||
type Act struct {
|
||||
ModelIDCULD
|
||||
|
||||
Name string `orm:"size(64)" json:"name"`
|
||||
Advertising string `orm:"size(255)" json:"advertising"`
|
||||
Type int `json:"type"`
|
||||
Status int `json:"status"`
|
||||
LimitDevice int `json:"limitDevice"`
|
||||
LimitPin int `json:"limitPin"`
|
||||
LimitDaily int `json:"limitDaily"`
|
||||
LimitCount int `json:"limitCount"`
|
||||
Source string `orm:"size(255)" json:"source"`
|
||||
CreateType int `json:"createType"`
|
||||
PricePercentage int `json:"pricePercentage"` // 单品级活动才有效
|
||||
BeginAt time.Time `orm:"type(datetime);index;null" json:"beginAt"`
|
||||
EndAt time.Time `orm:"type(datetime);index;null" json:"endAt"`
|
||||
}
|
||||
|
||||
type ActMap struct {
|
||||
ModelIDCULD
|
||||
|
||||
ActID int `orm:"column(act_id)" json:"actID"`
|
||||
VendorID int `orm:"column(vendor_id)" json:"vendorID"`
|
||||
|
||||
VendorActID string `orm:"column(vendor_act_id);size(48)" json:"vendorActID"`
|
||||
SyncStatus int `orm:"default(2)" json:"syncStatus"`
|
||||
}
|
||||
|
||||
type Act2 struct {
|
||||
MapID int `orm:"column(map_id)"`
|
||||
|
||||
Act
|
||||
VendorID int `orm:"column(vendor_id)" json:"vendorID"`
|
||||
|
||||
VendorActID string `orm:"column(vendor_act_id);size(48)" json:"vendorActID"`
|
||||
SyncStatus int `orm:"default(2)" json:"syncStatus"`
|
||||
}
|
||||
|
||||
type ActOrderRule struct {
|
||||
ModelIDCULD
|
||||
|
||||
ActID int `orm:"column(act_id)" json:"actID"`
|
||||
SalePrice int64 `orm:"" json:"salePrice"` // 满的价格
|
||||
DeductPrice int64 `orm:"" json:"deductPrice"` // 减的价格
|
||||
}
|
||||
|
||||
// type ActStore struct {
|
||||
// ModelIDCULD
|
||||
|
||||
// ActID int `orm:"column(act_id)" json:"actID"`
|
||||
// StoreID int `orm:"column(store_id)" json:"storeID"`
|
||||
// }
|
||||
|
||||
type ActStoreMap struct {
|
||||
ModelIDCULD
|
||||
|
||||
ActID int `orm:"column(act_id)" json:"actID"`
|
||||
StoreID int `orm:"column(store_id)" json:"storeID"`
|
||||
VendorID int `orm:"column(vendor_id)" json:"vendorID"`
|
||||
|
||||
VendorActID string `orm:"column(vendor_act_id);size(48)" json:"vendorActID"`
|
||||
SyncStatus int `orm:"default(2)" json:"syncStatus"`
|
||||
}
|
||||
|
||||
type ActStore2 struct {
|
||||
MapID int `orm:"column(map_id)"`
|
||||
|
||||
ActStoreMap
|
||||
|
||||
VendorStoreID string `orm:"column(vendor_store_id)" json:"vendorStoreID"`
|
||||
}
|
||||
|
||||
type ActStoreSku struct {
|
||||
ModelIDCULD
|
||||
|
||||
ActID int `orm:"column(act_id)" json:"actID"`
|
||||
StoreID int `orm:"column(store_id)" json:"storeID"`
|
||||
SkuID int `orm:"column(sku_id)" json:"skuID"`
|
||||
|
||||
// LocalStatus int // 这个状态是多个平台的
|
||||
// RemoteStatus int // 这个状态是多个平台的
|
||||
OriginalPrice int64 `orm:"" json:"originalPrice"` // 单品级活动用,创建活动时商品的原始京西价
|
||||
PricePercentage int `orm:"" json:"pricePercentage"` // 单品级活动用,SKU级的价格比例,非0覆盖Act中的PricePercentage
|
||||
ActPrice int64 `orm:"" json:"actPrice"` // 单品级活动用,SKU级指定的价格,非0覆盖CustomPricePercentage与Act中的PricePercentage
|
||||
|
||||
Stock int `orm:"" json:"stock"` // 订单级活动用
|
||||
}
|
||||
|
||||
type ActStoreSkuMap struct {
|
||||
ModelIDCULD
|
||||
|
||||
ActID int `orm:"column(act_id)" json:"actID"`
|
||||
StoreID int `orm:"column(store_id)" json:"storeID"`
|
||||
SkuID int `orm:"column(sku_id)" json:"skuID"`
|
||||
VendorID int `orm:"column(vendor_id)" json:"vendorID"`
|
||||
|
||||
VendorActID string `orm:"column(vendor_act_id);size(48)" json:"vendorActID"`
|
||||
SyncStatus int `orm:"default(2)" json:"syncStatus"`
|
||||
ActualActPrice int64 `orm:"" json:"actualActPrice"` // 单品级活动用,创建活动时商品的活动价格
|
||||
}
|
||||
|
||||
type ActStoreSku2 struct {
|
||||
MapID int `orm:"column(map_id)"`
|
||||
|
||||
ActStoreSku
|
||||
VendorID int `orm:"column(vendor_id)" json:"vendorID"`
|
||||
|
||||
VendorActID string `orm:"column(vendor_act_id);size(48)" json:"vendorActID"`
|
||||
SyncStatus int `orm:"default(2)" json:"syncStatus"`
|
||||
ActualActPrice int64 `orm:"" json:"actualActPrice"` // 单品级活动用,创建活动时商品的活动价格
|
||||
|
||||
VendorStoreID string `orm:"column(vendor_store_id)" json:"vendorStoreID"`
|
||||
VendorSkuID string `orm:"column(vendor_sku_id)" json:"vendorSkuID"`
|
||||
}
|
||||
@@ -12,15 +12,25 @@ const (
|
||||
|
||||
type GoodsOrderExt struct {
|
||||
GoodsOrder
|
||||
EarningPrice int64 `json:"earningPrice"` // 预估结算给门店老板的钱
|
||||
|
||||
WaybillStatus int `json:"waybillStatus"`
|
||||
CourierName string `orm:"size(32)" json:"courierName"`
|
||||
CourierMobile string `orm:"size(32)" json:"courierMobile"`
|
||||
CurrentConsigneeMobile string `orm:"-" json:"currentConsigneeMobile"`
|
||||
CourierVendorName string `json:"courierVendorName"`
|
||||
|
||||
Status2 string `json:"status2"`
|
||||
ActualFee int64 `json:"actualFee"` // 实际要支付给快递公司的费用
|
||||
DesiredFee int64 `json:"desiredFee"` // 运单总费用
|
||||
WaybillCreatedAt time.Time `orm:"type(datetime);index" json:"waybillCreatedAt"`
|
||||
WaybillFinishedAt time.Time `orm:"type(datetime)" json:"waybillFinishedAt"`
|
||||
|
||||
SkuID int `orm:"column(sku_id)" json:"skuID,omitempty"`
|
||||
SkuShopPrice int `json:"skuShopPrice,omitempty"`
|
||||
SkuSalePrice int `json:"skuSalePrice,omitempty"`
|
||||
SkuCount2 int `json:"skuCount2,omitempty"`
|
||||
SkuInfo string `json:"skuInfo,omitempty"`
|
||||
}
|
||||
|
||||
type OrderSkuExt struct {
|
||||
@@ -30,11 +40,6 @@ type OrderSkuExt struct {
|
||||
}
|
||||
|
||||
type GoodsOrderCountInfo struct {
|
||||
Status int `json:"status"`
|
||||
Count int `json:"count"`
|
||||
}
|
||||
|
||||
type GoodsOrderCountInfo2 struct {
|
||||
LockStatus int `json:"lockStatus"`
|
||||
Status int `json:"status"`
|
||||
Count int `json:"count"`
|
||||
@@ -61,3 +66,8 @@ type OrderFinancialExt struct {
|
||||
Skus []*OrderSkuFinancial `orm:"-" json:"skus"` // 正向订单购买商品列表
|
||||
Discounts []*OrderDiscountFinancial `orm:"-" json:"discounts"` // 正向订单享受优惠列表
|
||||
}
|
||||
|
||||
type OrderFinancialSkuExt struct {
|
||||
OrderSkuFinancial
|
||||
Image string `json:"image"`
|
||||
}
|
||||
|
||||
@@ -14,9 +14,9 @@ const (
|
||||
VendorIDMTWM = 1
|
||||
VendorIDELM = 2
|
||||
VendorIDEBAI = 3
|
||||
VendorIDJX = 9 // 这是一个假的京西VendorID
|
||||
VendorIDWSC = 11 // 微盟微商城
|
||||
VendorIDPurchaseEnd = 11
|
||||
VendorIDJX = 99 // 这是一个假的京西VendorID
|
||||
|
||||
VendorIDDeliveryBegin = 101
|
||||
VendorIDDada = 101
|
||||
@@ -112,22 +112,34 @@ var (
|
||||
OrderStatusDeliverFailed: "投递失败",
|
||||
OrderStatusFinished: "完成",
|
||||
OrderStatusCanceled: "取消",
|
||||
|
||||
AfsOrderStatusWait4Approve: "待审核",
|
||||
AfsOrderStatusNew: "已审核",
|
||||
AfsOrderStatusWait4ReceiveGoods: "退货待确认",
|
||||
AfsOrderStatusReceivedGoods: "退货已收到",
|
||||
AfsOrderStatusFinished: "售后成功",
|
||||
AfsOrderStatusFailed: "售后失败",
|
||||
}
|
||||
WaybillStatusName = map[int]string{
|
||||
WaybillStatusUnknown: "一般事件",
|
||||
|
||||
WaybillStatusNew: "新运单",
|
||||
WaybillStatusAcceptCanceled: "取消接受",
|
||||
WaybillStatusAccepted: "已接单",
|
||||
WaybillStatusCourierArrived: "已到店",
|
||||
WaybillStatusDelivering: "配送中",
|
||||
WaybillStatusDelivered: "送达",
|
||||
WaybillStatusCanceled: "取消",
|
||||
WaybillStatusFailed: "失败",
|
||||
WaybillStatusNew: "新运单",
|
||||
WaybillStatusPending: "压单",
|
||||
WaybillStatusAcceptCanceled: "取消接受",
|
||||
WaybillStatusAccepted: "已接单",
|
||||
WaybillStatusCourierArrived: "已到店",
|
||||
WaybillStatusApplyFailedGetGoods: "取货失败待审核",
|
||||
WaybillStatusAgreeFailedGetGoods: "取货失败",
|
||||
WaybillStatusDelivering: "配送中",
|
||||
WaybillStatusDeliverFailed: "投递失败",
|
||||
WaybillStatusDelivered: "送达",
|
||||
WaybillStatusCanceled: "取消",
|
||||
WaybillStatusFailed: "失败",
|
||||
}
|
||||
OrderTypeName = map[int]string{
|
||||
OrderTypeOrder: "订单",
|
||||
OrderTypeWaybill: "运单",
|
||||
OrderTypeOrder: "订单",
|
||||
OrderTypeWaybill: "运单",
|
||||
OrderTypeAfsOrder: "售后单",
|
||||
}
|
||||
|
||||
MultiStoresVendorMap = map[int]int{
|
||||
@@ -159,11 +171,30 @@ var (
|
||||
"打印机密钥",
|
||||
},
|
||||
}
|
||||
AfsReasonTypeName = map[int]string{
|
||||
AfsReasonTypeGoodsQuality: "商品质量",
|
||||
AfsReasonTypeWrongGoods: "错误的商品",
|
||||
AfsReasonTypeMissingGoods: "缺少部分商品",
|
||||
AfsReasonTypeNoGoods: "全部商品未收到",
|
||||
AfsReasonTypeDamagedGoods: "商品有损伤",
|
||||
AfsReasonTypeGoodsQuantity: "缺斤少两",
|
||||
AfsReasonTypeAgreedByMerchant: "与商家协商一致",
|
||||
AfsReasonTypeGoodsNoSame: "商品与描述不符",
|
||||
AfsReasonWrongPurchase: "误购",
|
||||
AfsReasonNotReceivedIntime: "未在时效内送达",
|
||||
AfsReasonNotOthers: "其它",
|
||||
}
|
||||
AfsAppealTypeName = map[int]string{
|
||||
AfsAppealTypeRefund: "仅退款",
|
||||
AfsAppealTypeReturnAndRefund: "退货退款",
|
||||
AfsAppealTypeNewGoods: "重发商品",
|
||||
}
|
||||
)
|
||||
|
||||
const (
|
||||
OrderTypeOrder = 1
|
||||
OrderTypeWaybill = 2
|
||||
OrderTypeOrder = 1
|
||||
OrderTypeWaybill = 2
|
||||
OrderTypeAfsOrder = 3
|
||||
)
|
||||
|
||||
// https://blog.csdn.net/a13570320979/article/details/51366355
|
||||
@@ -212,6 +243,14 @@ const (
|
||||
OrderStatusEndBegin = 100 // 以下的状态就是结束状态
|
||||
OrderStatusFinished = 110 // 订单已完成
|
||||
OrderStatusCanceled = 115 // 订单已取消
|
||||
OrderStatusEndEnd = 120
|
||||
|
||||
AfsOrderStatusWait4Approve = 155 // 待审核售后单
|
||||
AfsOrderStatusNew = 160 // 已审核或不需要审核售后单
|
||||
AfsOrderStatusWait4ReceiveGoods = 165 // 退款退货的,需要商家确认收到货
|
||||
AfsOrderStatusReceivedGoods = 167 // 已确认收到货
|
||||
AfsOrderStatusFinished = 180 // 售后单成功完成
|
||||
AfsOrderStatusFailed = 190 // 售后单失败
|
||||
)
|
||||
|
||||
const (
|
||||
@@ -224,6 +263,7 @@ const (
|
||||
WaybillStatusUnknown = 0
|
||||
|
||||
WaybillStatusNew = 5
|
||||
WaybillStatusPending = 7
|
||||
WaybillStatusAcceptCanceled = 8
|
||||
WaybillStatusAccepted = 10
|
||||
WaybillStatusCourierArrived = 15 // 此状态是可选的,明确写出来是因为还是较重要的状态,但业务逻辑不应依赖此状态
|
||||
@@ -238,7 +278,6 @@ const (
|
||||
WaybillStatusDelivered = 105 // todo 这个应该改为110,与订单对应
|
||||
WaybillStatusCanceled = 115
|
||||
WaybillStatusFailed = 120 // 这个状态存在的意义是区分于WaybillStatusCanceled,比如达达平台在这种状态下再次创建运单的方式不一样
|
||||
WaybillStatusNeverSend = 125 // 这个状态指的是平台方不愿意配送,门店自己想办法。与WaybillStatusAcceptCanceled不一样,WaybillStatusAcceptCanceled可能之后还会尝试配送
|
||||
)
|
||||
|
||||
const (
|
||||
@@ -261,6 +300,13 @@ const (
|
||||
const (
|
||||
OrderDeliveryFlagMaskScheduleDisabled = 1 // 禁止三方配送调度
|
||||
OrderDeliveryFlagMaskPurcahseDisabled = 2 // 购物平台已不配送(一般为门店配送类型本身为自配送,或已经转自配送)
|
||||
|
||||
OrderDeliveryFlagMaskDada = 16 // 创建达达运单中
|
||||
OrderDeliveryFlagMaskMtps = 32 // 创建美团配送运单中
|
||||
)
|
||||
|
||||
const (
|
||||
WaybillDeliveryFlagMaskActiveCancel = 1 // 主动取消
|
||||
)
|
||||
|
||||
const (
|
||||
@@ -275,7 +321,42 @@ const (
|
||||
OrderFlagRefuseFailedGetGoods = 24
|
||||
|
||||
OrderFlagMaskFailedDeliver = 32
|
||||
OrderFlagMaskCallPMCourier = 64 // 取货失败后召唤平台配送
|
||||
OrderFlagMaskCallPMCourier = 64 // 取货失败后召唤平台配送
|
||||
OrderFlagMaskSetDelivered = 128 // 设置送达
|
||||
)
|
||||
|
||||
const (
|
||||
AfsOrderFlagMaskUserRefund = 3 // 门店处理售后单申请
|
||||
AfsOrderFlagAgreeUserRefund = 1 // 门店同意售后单申请
|
||||
AfsOrderFlagRefuseUserRefund = 3 // 门店拒绝售后单申请
|
||||
|
||||
AfsOrderFlagMaskReturnGoods = 4 // 门店确认收到退货
|
||||
)
|
||||
|
||||
const (
|
||||
AfsAppealTypeRefund = 1 // 仅退款
|
||||
AfsAppealTypeReturnAndRefund = 2 // 退货退款
|
||||
AfsAppealTypeNewGoods = 3 // 重发新商品(即京东到家的直赔)
|
||||
)
|
||||
|
||||
const (
|
||||
AfsReasonTypeGoodsQuality = 1 // 商品质量
|
||||
AfsReasonTypeWrongGoods = 2 // 错误的商品
|
||||
AfsReasonTypeMissingGoods = 3 // 缺少部分商品
|
||||
AfsReasonTypeNoGoods = 4 // 全部商品未收到
|
||||
AfsReasonTypeDamagedGoods = 5 // 商品有损伤
|
||||
AfsReasonTypeGoodsQuantity = 6 // 缺斤少两
|
||||
AfsReasonTypeAgreedByMerchant = 7 // 与商家协商一致
|
||||
AfsReasonTypeGoodsNoSame = 8 // 商品与描述不符
|
||||
AfsReasonWrongPurchase = 9 // 误购
|
||||
AfsReasonNotReceivedIntime = 10 // 未在时效内送达
|
||||
AfsReasonNotOthers = 0 // 其它
|
||||
)
|
||||
|
||||
const (
|
||||
AfsTypeUnknown = 0 // 未知
|
||||
AfsTypePartRefund = 1 // 部分退款
|
||||
AfsTypeFullRefund = 2 // 全额退款
|
||||
)
|
||||
|
||||
func IsPurchaseVendorExist(vendorID int) bool {
|
||||
@@ -306,9 +387,22 @@ func IsOrderMainStatus(status int) bool {
|
||||
}
|
||||
|
||||
func IsOrderFinalStatus(status int) bool {
|
||||
return status >= OrderStatusEndBegin
|
||||
return status >= OrderStatusEndBegin && status <= OrderStatusEndEnd
|
||||
}
|
||||
|
||||
func IsOrderImportantStatus(status int) bool {
|
||||
return IsOrderMainStatus(status) || IsOrderLockStatus(status) || IsOrderUnlockStatus(status)
|
||||
}
|
||||
|
||||
func WaybillVendorID2Mask(vendorID int) (mask int8) {
|
||||
if vendorID == VendorIDDada {
|
||||
mask = OrderDeliveryFlagMaskDada
|
||||
} else if vendorID == VendorIDMTPS {
|
||||
mask = OrderDeliveryFlagMaskMtps
|
||||
}
|
||||
return mask
|
||||
}
|
||||
|
||||
func IsAfsOrderFinalStatus(status int) bool {
|
||||
return status >= AfsOrderStatusFinished && status <= AfsOrderStatusFailed
|
||||
}
|
||||
|
||||
117
business/model/dao/act.go
Normal file
117
business/model/dao/act.go
Normal file
@@ -0,0 +1,117 @@
|
||||
package dao
|
||||
|
||||
import (
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
"git.rosy.net.cn/jx-callback/business/model"
|
||||
)
|
||||
|
||||
func GetActVendorInfo(db *DaoDB, actID int, vendorIDs []int) (actMap map[int]*model.Act2, err error) {
|
||||
sql := `
|
||||
SELECT t1.*,
|
||||
t2.id map_id, t2.vendor_id, t2.vendor_act_id, t2.sync_status
|
||||
FROM act t1
|
||||
JOIN act_map t2 ON t2.act_id = t1.id AND t2.deleted_at = ?
|
||||
WHERE t1.deleted_at = ? AND t1.id = ?
|
||||
`
|
||||
sqlParams := []interface{}{
|
||||
utils.DefaultTimeValue,
|
||||
utils.DefaultTimeValue,
|
||||
actID,
|
||||
}
|
||||
if len(vendorIDs) > 0 {
|
||||
sql += " AND t2.vendor_id IN (" + GenQuestionMarks(len(vendorIDs)) + ")"
|
||||
sqlParams = append(sqlParams, vendorIDs)
|
||||
}
|
||||
var actList []*model.Act2
|
||||
if err = GetRows(db, &actList, sql, sqlParams...); err == nil {
|
||||
actMap = make(map[int]*model.Act2)
|
||||
for _, v := range actList {
|
||||
actMap[v.VendorID] = v
|
||||
}
|
||||
}
|
||||
return actMap, err
|
||||
}
|
||||
|
||||
func GetActStoreVendorInfo(db *DaoDB, actID int, vendorIDs, storeIDs []int) (actStoreMap map[int][]*model.ActStore2, err error) {
|
||||
sql := `
|
||||
SELECT t1.*,
|
||||
t1.id map_id,
|
||||
t2.vendor_store_id
|
||||
FROM act_store_map t1
|
||||
JOIN store_map t2 ON t2.store_id = t1.store_id AND t2.vendor_id = t1.vendor_id AND t2.deleted_at = ?
|
||||
WHERE t1.deleted_at = ? AND t1.act_id = ?
|
||||
`
|
||||
sqlParams := []interface{}{
|
||||
utils.DefaultTimeValue,
|
||||
utils.DefaultTimeValue,
|
||||
actID,
|
||||
}
|
||||
if len(vendorIDs) > 0 {
|
||||
sql += " AND t1.vendor_id IN (" + GenQuestionMarks(len(vendorIDs)) + ")"
|
||||
sqlParams = append(sqlParams, vendorIDs)
|
||||
}
|
||||
if len(storeIDs) > 0 {
|
||||
sql += " AND t1.store_id IN (" + GenQuestionMarks(len(storeIDs)) + ")"
|
||||
sqlParams = append(sqlParams, storeIDs)
|
||||
}
|
||||
var actStoreList []*model.ActStore2
|
||||
if err = GetRows(db, &actStoreList, sql, sqlParams...); err == nil {
|
||||
actStoreMap = make(map[int][]*model.ActStore2)
|
||||
for _, v := range actStoreList {
|
||||
actStoreMap[v.VendorID] = append(actStoreMap[v.VendorID], v)
|
||||
}
|
||||
}
|
||||
return actStoreMap, err
|
||||
}
|
||||
|
||||
func GetActStoreSkuVendorInfo(db *DaoDB, actID int, vendorIDs, storeIDs, skuIDs []int) (actStoreSkuMap map[int][]*model.ActStoreSku2, err error) {
|
||||
sql := `
|
||||
SELECT t1.*,
|
||||
t2.id map_id, t2.vendor_id, t2.vendor_act_id, t2.sync_status,
|
||||
t3.vendor_store_id,
|
||||
CASE t2.vendor_id
|
||||
WHEN 0 THEN
|
||||
t4.jd_id
|
||||
WHEN 1 THEN
|
||||
t5.mtwm_id
|
||||
WHEN 3 THEN
|
||||
t5.ebai_id
|
||||
ELSE
|
||||
''
|
||||
END vendor_sku_id
|
||||
FROM act_store_sku t1
|
||||
JOIN act_store_sku_map t2 ON t2.act_id = t1.act_id AND t2.sku_id = t1.sku_id AND t2.store_id = t1.store_id AND t2.deleted_at = ?
|
||||
JOIN store_map t3 ON t3.store_id = t1.store_id AND t3.vendor_id = t2.vendor_id AND t3.deleted_at = ?
|
||||
JOIN sku t4 ON t4.id = t1.sku_id AND t4.deleted_at = ?
|
||||
JOIN store_sku_bind t5 ON t5.sku_id = t1.sku_id AND t5.store_id = t1.store_id AND t5.deleted_at = ?
|
||||
WHERE t1.deleted_at = ? AND t1.act_id = ?
|
||||
`
|
||||
sqlParams := []interface{}{
|
||||
utils.DefaultTimeValue,
|
||||
utils.DefaultTimeValue,
|
||||
utils.DefaultTimeValue,
|
||||
utils.DefaultTimeValue,
|
||||
utils.DefaultTimeValue,
|
||||
actID,
|
||||
}
|
||||
if len(vendorIDs) > 0 {
|
||||
sql += " AND t2.vendor_id IN (" + GenQuestionMarks(len(vendorIDs)) + ")"
|
||||
sqlParams = append(sqlParams, vendorIDs)
|
||||
}
|
||||
if len(storeIDs) > 0 {
|
||||
sql += " AND t1.store_id IN (" + GenQuestionMarks(len(storeIDs)) + ")"
|
||||
sqlParams = append(sqlParams, storeIDs)
|
||||
}
|
||||
if len(skuIDs) > 0 {
|
||||
sql += " AND t1.sku_id IN (" + GenQuestionMarks(len(skuIDs)) + ")"
|
||||
sqlParams = append(sqlParams, skuIDs)
|
||||
}
|
||||
var actStoreSkuList []*model.ActStoreSku2
|
||||
if err = GetRows(db, &actStoreSkuList, sql, sqlParams...); err == nil {
|
||||
actStoreSkuMap = make(map[int][]*model.ActStoreSku2)
|
||||
for _, v := range actStoreSkuList {
|
||||
actStoreSkuMap[v.VendorID] = append(actStoreSkuMap[v.VendorID], v)
|
||||
}
|
||||
}
|
||||
return actStoreSkuMap, err
|
||||
}
|
||||
@@ -58,7 +58,7 @@ func UpdateEntityByKV(db *DaoDB, item interface{}, kvs map[string]interface{}, c
|
||||
}
|
||||
|
||||
func UpdateEntityLogically(db *DaoDB, item interface{}, kvs map[string]interface{}, userName string, conditions map[string]interface{}) (num int64, err error) {
|
||||
if conditions != nil {
|
||||
if conditions != nil && refutil.IsFieldExist(item, model.FieldDeletedAt) {
|
||||
conditions = utils.MergeMaps(conditions, map[string]interface{}{
|
||||
model.FieldDeletedAt: utils.DefaultTimeValue,
|
||||
})
|
||||
@@ -71,7 +71,7 @@ func UpdateEntityLogically(db *DaoDB, item interface{}, kvs map[string]interface
|
||||
|
||||
// 此函数会更新同步标志
|
||||
func UpdateEntityLogicallyAndUpdateSyncStatus(db *DaoDB, item interface{}, kvs map[string]interface{}, userName string, conditions map[string]interface{}, syncStatusFieldName string, valueMask int) (num int64, err error) {
|
||||
if conditions != nil {
|
||||
if conditions != nil && refutil.IsFieldExist(item, model.FieldDeletedAt) {
|
||||
conditions = utils.MergeMaps(conditions, map[string]interface{}{
|
||||
model.FieldDeletedAt: utils.DefaultTimeValue,
|
||||
})
|
||||
@@ -115,6 +115,7 @@ func AddStoreCategoryMap(db *DaoDB, storeID, categoryID int, vendorID int, vendo
|
||||
StoreID: storeID,
|
||||
CategoryID: categoryID,
|
||||
MtwmSyncStatus: model.SyncFlagNewMask,
|
||||
EbaiSyncStatus: model.SyncFlagNewMask,
|
||||
WscSyncStatus: model.SyncFlagNewMask,
|
||||
}
|
||||
storeCat.DeletedAt = utils.DefaultTimeValue
|
||||
|
||||
@@ -29,12 +29,12 @@ func SetOrderPrintFlag(db *DaoDB, userName string, vendorOrderID string, vendorI
|
||||
if isPrinted {
|
||||
err = SetOrderFlag(db, userName, vendorOrderID, vendorID, model.OrderFlagMaskPrinted)
|
||||
} else {
|
||||
err = SetOrderFlag(db, userName, vendorOrderID, vendorID, ^int8(model.OrderFlagMaskPrinted))
|
||||
err = SetOrderFlag(db, userName, vendorOrderID, vendorID, ^model.OrderFlagMaskPrinted)
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
func SetOrderFlag(db *DaoDB, userName string, vendorOrderID string, vendorID int, flag int8) (err error) {
|
||||
func SetOrderFlag(db *DaoDB, userName string, vendorOrderID string, vendorID int, flag int) (err error) {
|
||||
_, err = ExecuteSQL(db, `
|
||||
UPDATE goods_order
|
||||
SET flag = flag | ?
|
||||
@@ -43,7 +43,7 @@ func SetOrderFlag(db *DaoDB, userName string, vendorOrderID string, vendorID int
|
||||
return err
|
||||
}
|
||||
|
||||
func ClearOrderFlag(db *DaoDB, userName string, vendorOrderID string, vendorID int, flag int8) (err error) {
|
||||
func ClearOrderFlag(db *DaoDB, userName string, vendorOrderID string, vendorID int, flag int) (err error) {
|
||||
_, err = ExecuteSQL(db, `
|
||||
UPDATE goods_order
|
||||
SET flag = flag & ?
|
||||
@@ -51,3 +51,34 @@ func ClearOrderFlag(db *DaoDB, userName string, vendorOrderID string, vendorID i
|
||||
`, flag, vendorOrderID, vendorID)
|
||||
return err
|
||||
}
|
||||
|
||||
func SetAfsOrderFlag(db *DaoDB, userName string, afsOrderID string, vendorID int, flag int) (err error) {
|
||||
_, err = ExecuteSQL(db, `
|
||||
UPDATE afs_order
|
||||
SET flag = flag | ?
|
||||
WHERE afs_order_id = ? AND vendor_id = ?
|
||||
`, flag, afsOrderID, vendorID)
|
||||
return err
|
||||
}
|
||||
|
||||
func GetAfsOrders(db *DaoDB, vendorID int, vendorOrderID, afsOrderID string) (afsOrderList []*model.AfsOrder, err error) {
|
||||
sql := `
|
||||
SELECT *
|
||||
FROM afs_order t1
|
||||
WHERE t1.vendor_id = ?
|
||||
`
|
||||
sqlParams := []interface{}{
|
||||
vendorID,
|
||||
}
|
||||
if vendorOrderID != "" {
|
||||
sql += " AND t1.vendor_order_id = ?"
|
||||
sqlParams = append(sqlParams, vendorOrderID)
|
||||
}
|
||||
if afsOrderID != "" {
|
||||
sql += " AND t1.afs_order_id = ?"
|
||||
sqlParams = append(sqlParams, afsOrderID)
|
||||
}
|
||||
sql += " ORDER BY t1.afs_order_id DESC"
|
||||
err = GetRows(db, &afsOrderList, sql, sqlParams...)
|
||||
return afsOrderList, err
|
||||
}
|
||||
|
||||
@@ -168,3 +168,7 @@ func value2Value(srcValue, dstValue reflect.Value, copyType int) {
|
||||
// func ObjNull2Normal(src, dst interface{}) {
|
||||
// copyBetweenNoramAndNullObj(src, dst, 2)
|
||||
// }
|
||||
|
||||
func IsVendorThingIDEmpty(vendorThingID string) bool {
|
||||
return vendorThingID == "" || vendorThingID == "0"
|
||||
}
|
||||
|
||||
@@ -1,8 +1,11 @@
|
||||
package dao
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
"git.rosy.net.cn/jx-callback/business/model"
|
||||
"git.rosy.net.cn/jx-callback/globals"
|
||||
)
|
||||
|
||||
func GetSellCities(db *DaoDB, nameID int, vendorID int) (cities []*model.Place, err error) {
|
||||
@@ -52,6 +55,47 @@ func GetSkuNameByHashCode(db *DaoDB, hashCode string) (skuName *model.SkuName, e
|
||||
return nil, err
|
||||
}
|
||||
|
||||
func GetSkus(db *DaoDB, skuIDs, nameIDs, statuss, catIDs []int) (skuList []*model.SkuAndName, err error) {
|
||||
sql := `
|
||||
SELECT t1.*, t2.name, t2.unit
|
||||
FROM sku t1
|
||||
JOIN sku_name t2 ON t2.id = t1.name_id AND t2.deleted_at = ?
|
||||
`
|
||||
sqlWhere := `
|
||||
WHERE t1.deleted_at = ?
|
||||
`
|
||||
sqlParams := []interface{}{
|
||||
utils.DefaultTimeValue,
|
||||
utils.DefaultTimeValue,
|
||||
}
|
||||
if len(skuIDs) > 0 {
|
||||
sqlWhere += " AND t1.id IN (" + GenQuestionMarks(len(skuIDs)) + ")"
|
||||
sqlParams = append(sqlParams, skuIDs)
|
||||
}
|
||||
if len(nameIDs) > 0 {
|
||||
sqlWhere += " AND t1.name_id IN (" + GenQuestionMarks(len(nameIDs)) + ")"
|
||||
sqlParams = append(sqlParams, nameIDs)
|
||||
}
|
||||
if len(statuss) > 0 {
|
||||
sqlWhere += " AND t1.status IN (" + GenQuestionMarks(len(statuss)) + ") AND t2.status IN (" + GenQuestionMarks(len(statuss)) + ")"
|
||||
sqlParams = append(sqlParams, statuss, statuss)
|
||||
}
|
||||
if len(catIDs) > 0 {
|
||||
sql += `
|
||||
JOIN sku_category t3 ON t3.id = t2.category_id
|
||||
LEFT JOIN sku_category t3p ON t3p.id = t3.parent_id
|
||||
`
|
||||
sqlWhere += " AND (t3.id IN (" + GenQuestionMarks(len(catIDs)) + ")"
|
||||
sqlWhere += " OR t3p.id IN (" + GenQuestionMarks(len(catIDs)) + ") )"
|
||||
sqlParams = append(sqlParams, catIDs, catIDs)
|
||||
}
|
||||
sql += sqlWhere
|
||||
if err = GetRows(db, &skuList, sql, sqlParams...); err == nil {
|
||||
return skuList, nil
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
|
||||
func GetSkuNames(db *DaoDB, nameIDs []int) (skuNameList []*model.SkuName, err error) {
|
||||
sql := `
|
||||
SELECT *
|
||||
@@ -70,3 +114,76 @@ func GetSkuNames(db *DaoDB, nameIDs []int) (skuNameList []*model.SkuName, err er
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
|
||||
func GetSkuByNames(db *DaoDB, nameIDs []int) (skuList []*model.Sku, err error) {
|
||||
sql := `
|
||||
SELECT *
|
||||
FROM sku t1
|
||||
WHERE t1.deleted_at = ?
|
||||
`
|
||||
sqlParams := []interface{}{
|
||||
utils.DefaultTimeValue,
|
||||
}
|
||||
if len(nameIDs) > 0 {
|
||||
sql += " AND t1.name_id IN (" + GenQuestionMarks(len(nameIDs)) + ")"
|
||||
sqlParams = append(sqlParams, nameIDs)
|
||||
}
|
||||
if err = GetRows(db, &skuList, sql, sqlParams...); err == nil {
|
||||
return skuList, nil
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
|
||||
func GetSkuIDByNames(db *DaoDB, nameIDs []int) (skuIDs []int, err error) {
|
||||
skuList, err := GetSkuByNames(db, nameIDs)
|
||||
if err == nil {
|
||||
for _, sku := range skuList {
|
||||
skuIDs = append(skuIDs, sku.ID)
|
||||
}
|
||||
}
|
||||
return skuIDs, err
|
||||
}
|
||||
|
||||
func GetSkuByCats(db *DaoDB, catIDs []int) (skuList []*model.Sku, err error) {
|
||||
sql := `
|
||||
SELECT t1.*
|
||||
FROM sku t1
|
||||
JOIN sku_name t2 ON t2.id = t1.name_id
|
||||
WHERE t1.deleted_at = ?
|
||||
`
|
||||
sqlParams := []interface{}{
|
||||
utils.DefaultTimeValue,
|
||||
}
|
||||
if len(catIDs) > 0 {
|
||||
sql += " AND t2.category_id IN (" + GenQuestionMarks(len(catIDs)) + ")"
|
||||
sqlParams = append(sqlParams, catIDs)
|
||||
}
|
||||
err = GetRows(db, &skuList, sql, sqlParams...)
|
||||
globals.SugarLogger.Debugf("GetSkuByCats err:%v", err)
|
||||
return skuList, err
|
||||
}
|
||||
|
||||
func SetSkuSyncStatus(db *DaoDB, vendorID int, skuIDs []int, syncStatus int) (num int64, err error) {
|
||||
globals.SugarLogger.Debugf("SetSkuSyncStatus, vendorID:%d", vendorID)
|
||||
|
||||
fieldPrefix := ConvertDBFieldPrefix(model.VendorNames[vendorID])
|
||||
sql := fmt.Sprintf(`
|
||||
UPDATE sku t1
|
||||
SET t1.%s_sync_status = IF(t1.deleted_at = ?, t1.%s_sync_status | ?, 0)
|
||||
`, fieldPrefix, fieldPrefix)
|
||||
sqlParams := []interface{}{
|
||||
utils.DefaultTimeValue,
|
||||
syncStatus,
|
||||
}
|
||||
if (syncStatus & model.SyncFlagNewMask) != 0 {
|
||||
sql += fmt.Sprintf(`,
|
||||
t1.%s_id = 0
|
||||
`, fieldPrefix)
|
||||
}
|
||||
sql += " WHERE 1 = 1"
|
||||
if len(skuIDs) > 0 {
|
||||
sql += " AND t1.id IN (" + GenQuestionMarks(len(skuIDs)) + ")"
|
||||
sqlParams = append(sqlParams, skuIDs)
|
||||
}
|
||||
return ExecuteSQL(db, sql, sqlParams...)
|
||||
}
|
||||
|
||||
@@ -24,8 +24,8 @@ type StoreDetail struct {
|
||||
|
||||
type StoreDetail2 struct {
|
||||
model.Store
|
||||
VendorStoreID string `orm:"column(vendor_store_id)` // 这个在GetMissingDadaStores返回中指的是到家的vendorStoreID
|
||||
DadaStoreID string `orm:"column(dada_store_id)`
|
||||
VendorStoreID string `orm:"column(vendor_store_id)"` // 这个在GetMissingDadaStores返回中指的是到家的vendorStoreID
|
||||
DadaStoreID string `orm:"column(dada_store_id)"`
|
||||
DistrictName string
|
||||
CityName string
|
||||
}
|
||||
@@ -136,8 +136,8 @@ func GetMissingDadaStores(db *DaoDB, storeID int, isMustHaveJdStore bool) (store
|
||||
t3.vendor_store_id dada_store_id
|
||||
FROM store t1
|
||||
LEFT JOIN store_map t2 ON t1.id = t2.store_id AND t2.vendor_id = ? AND t2.deleted_at = ?
|
||||
JOIN place city ON city.code = t1.city_code
|
||||
JOIN place district ON district.code = t1.district_code
|
||||
LEFT JOIN place city ON city.code = t1.city_code
|
||||
LEFT JOIN place district ON district.code = t1.district_code
|
||||
LEFT JOIN store_courier_map t3 ON t3.store_id = t1.id AND t3.vendor_id = ? AND t3.deleted_at = ?
|
||||
WHERE t1.deleted_at = ?
|
||||
`
|
||||
@@ -181,6 +181,33 @@ func GetStoreCourierList(db *DaoDB, storeID, status int) (courierStoreList []*mo
|
||||
return nil, err
|
||||
}
|
||||
|
||||
func GetStoresMapList(db *DaoDB, vendorIDs, storeIDs []int, status int) (storeMapList []*model.StoreMap, err error) {
|
||||
sql := `
|
||||
SELECT t1.*
|
||||
FROM store_map t1
|
||||
WHERE t1.deleted_at = ?
|
||||
`
|
||||
sqlParams := []interface{}{
|
||||
utils.DefaultTimeValue,
|
||||
}
|
||||
if len(vendorIDs) > 0 {
|
||||
sql += " AND t1.vendor_id IN (" + GenQuestionMarks(len(vendorIDs)) + ")"
|
||||
sqlParams = append(sqlParams, vendorIDs)
|
||||
}
|
||||
if len(storeIDs) > 0 {
|
||||
sql += " AND t1.store_id IN (" + GenQuestionMarks(len(storeIDs)) + ")"
|
||||
sqlParams = append(sqlParams, storeIDs)
|
||||
}
|
||||
if status != model.StoreStatusAll {
|
||||
sql += " AND t1.status = ?"
|
||||
sqlParams = append(sqlParams, status)
|
||||
}
|
||||
if err = GetRows(db, &storeMapList, sql, sqlParams...); err == nil {
|
||||
return storeMapList, nil
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// 此函数在检测到一个门店的所有平台状态一样,且不为StoreStatusOpened时,
|
||||
// 将平台门店状态全部改为StoreStatusOpened,则把京西门店状态改为之前那个统一的平台门店状态
|
||||
func FormalizeStoreStatus(db *DaoDB, storeID, storeStatus int) (err error) {
|
||||
|
||||
@@ -2,6 +2,7 @@ package dao
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
"git.rosy.net.cn/jx-callback/business/model"
|
||||
@@ -13,13 +14,16 @@ var (
|
||||
model.VendorIDWSC: "img_weimob",
|
||||
model.VendorIDEBAI: "img_ebai",
|
||||
}
|
||||
descImgFieldMap = map[int]string{
|
||||
model.VendorIDEBAI: "desc_img_ebai",
|
||||
}
|
||||
)
|
||||
|
||||
type SkuStoreCatInfo struct {
|
||||
model.SkuCategory
|
||||
MapID int `orm:"column(map_id)"` // 这个主要用于判断是否有store_sku_category_map
|
||||
VendorCatID string `orm:"column(vendor_cat_id)"`
|
||||
CatSyncStatus int8
|
||||
MapID int `orm:"column(map_id)"` // 这个主要用于判断是否有store_sku_category_map
|
||||
VendorCatID string `orm:"column(vendor_cat_id)"`
|
||||
StoreCatSyncStatus int8
|
||||
|
||||
ParentCatName string
|
||||
ParentMapID int `orm:"column(parent_map_id)"` // 这个主要用于判断是否有父store_sku_category_map
|
||||
@@ -27,47 +31,63 @@ type SkuStoreCatInfo struct {
|
||||
ParentCatSyncStatus int8
|
||||
}
|
||||
|
||||
type StoreCatSyncInfo struct {
|
||||
CatName string
|
||||
Seq int `json:"seq"`
|
||||
model.StoreSkuCategoryMap
|
||||
|
||||
ParentCatName string
|
||||
ParentCatID int `orm:"column(parent_cat_id)"` // 这个主要用于判断是否有父store_sku_category_map
|
||||
ParentVendorCatID string `orm:"column(parent_vendor_cat_id)"`
|
||||
ParentCatSyncStatus int8
|
||||
}
|
||||
|
||||
type StoreSkuSyncInfo struct {
|
||||
BindID int `orm:"column(bind_id)"`
|
||||
Price int64
|
||||
UnitPrice int64
|
||||
StoreSkuStatus int
|
||||
SkuSyncStatus int8
|
||||
// 平台无关的store sku信息
|
||||
BindID int `orm:"column(bind_id)"` // 换名的原因是与Sku.ID同名区别
|
||||
StoreID int `orm:"column(store_id)"`
|
||||
SkuID int `orm:"column(sku_id)"` // 这个与Sku.ID的区别是SkuID是必然存在的
|
||||
Price int64
|
||||
UnitPrice int64
|
||||
|
||||
// 平台相关的store sku信息
|
||||
StoreSkuStatus int
|
||||
StoreSkuSyncStatus int8
|
||||
VendorSkuID string `orm:"column(vendor_sku_id)"`
|
||||
|
||||
model.Sku
|
||||
VendorSkuID string `orm:"column(vendor_sku_id)"`
|
||||
|
||||
// sku_name
|
||||
Prefix string
|
||||
NameID int `orm:"column(name_id)"`
|
||||
VendorNameID string `orm:"column(vendor_name_id)"`
|
||||
Name string
|
||||
Unit string
|
||||
Img string
|
||||
Upc string
|
||||
Seq int
|
||||
|
||||
VendorVendorCatID int64 `orm:"column(vendor_vendor_cat_id)"`
|
||||
// 平台相关的图片信息
|
||||
Img string
|
||||
DescImg string
|
||||
|
||||
CatSyncStatus int8
|
||||
VendorCatID string `orm:"column(vendor_cat_id)"`
|
||||
VendorVendorCatID int64 `orm:"column(vendor_vendor_cat_id)"` // 平台商品分类(叶子结点)
|
||||
VendorVendorCatID2 int64 `orm:"column(vendor_vendor_cat_id2)"` // 平台商品分类上一级
|
||||
VendorVendorCatID3 int64 `orm:"column(vendor_vendor_cat_id3)"` // 平台商品分类再上一级
|
||||
|
||||
SkuCatSyncStatus int8
|
||||
SkuVendorCatID string `orm:"column(sku_vendor_cat_id)"`
|
||||
// sku的商家分类信息
|
||||
SkuStoreCatSyncStatus int8
|
||||
SkuVendorCatID string `orm:"column(sku_vendor_cat_id)"`
|
||||
|
||||
// sku_name的商家分类信息
|
||||
StoreCatSyncStatus int8
|
||||
VendorCatID string `orm:"column(vendor_cat_id)"`
|
||||
|
||||
CatPricePercentage int
|
||||
}
|
||||
|
||||
type MissingStoreSkuInfo struct {
|
||||
StoreID int `orm:"column(store_id)"`
|
||||
NameID int `orm:"column(name_id)"`
|
||||
SkuID int `orm:"column(sku_id)"`
|
||||
SpecQuality float32
|
||||
SpecUnit string
|
||||
Unit string
|
||||
RefPrice int
|
||||
}
|
||||
|
||||
// 单门店模式厂商适用
|
||||
// 从store_sku_bind中,得到所有依赖的商家分类信息
|
||||
func GetSkusCategories(db *DaoDB, vendorID, storeID int, skuIDs []int, level int) (cats []*SkuStoreCatInfo, err error) {
|
||||
sql := `
|
||||
SELECT DISTINCT t4.*, t5.id map_id, t5.%s_id vendor_cat_id, t5.%s_sync_status cat_sync_status, t4p.name parent_cat_name, t5p.id parent_map_id, t5p.%s_id parent_vendor_cat_id, t5p.%s_sync_status parent_cat_sync_status
|
||||
SELECT DISTINCT t4.*, t5.id map_id, t5.%s_id vendor_cat_id, t5.%s_sync_status store_cat_sync_status, t4p.name parent_cat_name, t5p.id parent_map_id, t5p.%s_id parent_vendor_cat_id, t5p.%s_sync_status parent_cat_sync_status
|
||||
FROM store_sku_bind t1
|
||||
JOIN sku t2 ON t1.sku_id = t2.id AND t2.deleted_at = ? AND t2.status = ?
|
||||
JOIN sku_name t3 ON t2.name_id = t3.id AND t3.deleted_at = ? AND t3.status = ?
|
||||
@@ -86,7 +106,7 @@ func GetSkusCategories(db *DaoDB, vendorID, storeID int, skuIDs []int, level int
|
||||
LEFT JOIN store_sku_category_map t5 ON t4.id = t5.category_id AND t5.store_id = t1.store_id AND t5.deleted_at = ?
|
||||
LEFT JOIN sku_category t4p ON t4.parent_id = t4p.id
|
||||
LEFT JOIN store_sku_category_map t5p ON t4p.id = t5p.category_id AND t5p.store_id = t1.store_id AND t5p.deleted_at = ?
|
||||
WHERE t1.deleted_at = ? AND t1.store_id = ?
|
||||
WHERE t1.deleted_at = ? AND t1.store_id = ? AND t1.status = ?
|
||||
`
|
||||
sqlParams := []interface{}{
|
||||
utils.DefaultTimeValue,
|
||||
@@ -98,6 +118,7 @@ func GetSkusCategories(db *DaoDB, vendorID, storeID int, skuIDs []int, level int
|
||||
utils.DefaultTimeValue,
|
||||
utils.DefaultTimeValue,
|
||||
storeID,
|
||||
model.SkuStatusNormal,
|
||||
}
|
||||
if len(skuIDs) > 0 {
|
||||
sql += " AND t1.sku_id IN (" + GenQuestionMarks(len(skuIDs)) + ")"
|
||||
@@ -112,93 +133,132 @@ func GetSkusCategories(db *DaoDB, vendorID, storeID int, skuIDs []int, level int
|
||||
}
|
||||
|
||||
// 单门店模式厂商适用
|
||||
func GetStoreCategories(db *DaoDB, vendorID, storeID int, level int) (cats []*StoreCatSyncInfo, err error) {
|
||||
// 单纯的从已经创建的store_sku_category_map中,得到相关的同步信息
|
||||
func GetStoreCategories(db *DaoDB, vendorID, storeID int, level int) (cats []*SkuStoreCatInfo, err error) {
|
||||
fieldPrefix := ConvertDBFieldPrefix(model.VendorNames[vendorID])
|
||||
sql := fmt.Sprintf(`
|
||||
SELECT t5.*, t4.name cat_name, t4.seq, t4p.name parent_cat_name, t5p.category_id parent_cat_id, t5p.%s_id parent_vendor_cat_id, t5p.%s_sync_status parent_cat_sync_status
|
||||
SELECT t4.*,
|
||||
t5.id map_id, t5.%s_id vendor_cat_id, t5.%s_sync_status store_cat_sync_status,
|
||||
t4p.name parent_cat_name,
|
||||
t5p.id parent_map_id, t5p.%s_id parent_vendor_cat_id, t5p.%s_sync_status parent_cat_sync_status
|
||||
FROM store_sku_category_map t5
|
||||
JOIN sku_category t4 ON t5.category_id = t4.id AND t4.deleted_at = ?
|
||||
LEFT JOIN sku_category t4p ON t4.parent_id = t4p.id
|
||||
LEFT JOIN store_sku_category_map t5p ON t4p.id = t5p.category_id AND t5.store_id = t5p.store_id AND t5p.deleted_at = ?
|
||||
WHERE t5.store_id = ? AND t4.level = ? AND t5.%s_sync_status <> 0 AND t5.deleted_at = ?
|
||||
`, fieldPrefix, fieldPrefix, fieldPrefix)
|
||||
`, fieldPrefix, fieldPrefix, fieldPrefix, fieldPrefix, fieldPrefix)
|
||||
if err = GetRows(db, &cats, sql, utils.DefaultTimeValue, utils.DefaultTimeValue, storeID, level, utils.DefaultTimeValue); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return cats, err
|
||||
}
|
||||
|
||||
// 单门店模式厂商适用
|
||||
func GetStoreSkus(db *DaoDB, vendorID, storeID int, skuIDs []int) (skus []*StoreSkuSyncInfo, err error) {
|
||||
// 以store_sku_bind为基础来做同步,正常情况下使用
|
||||
// 单多门店模式厂商通用
|
||||
func GetStoreSkus2(db *DaoDB, vendorID, storeID int, skuIDs []int, isDirty bool) (skus []*StoreSkuSyncInfo, err error) {
|
||||
isSingleStorePF := model.MultiStoresVendorMap[vendorID] != 1
|
||||
tableName := "t1"
|
||||
if model.MultiStoresVendorMap[vendorID] == 1 { // 多店模式平台
|
||||
if !isSingleStorePF {
|
||||
tableName = "t2"
|
||||
}
|
||||
vendorSkuNameField := "0"
|
||||
if vendorID == model.VendorIDWSC {
|
||||
vendorSkuNameField = "t1.wsc_id2"
|
||||
}
|
||||
fieldPrefix := ConvertDBFieldPrefix(model.VendorNames[vendorID])
|
||||
sql := `
|
||||
SELECT t1.id bind_id, t1.price, t1.unit_price, t1.status store_sku_status, %s.%s_id vendor_sku_id, t1.%s_sync_status sku_sync_status, %s vendor_name_id,
|
||||
SELECT t1.id bind_id, t1.sku_id, t1.price, t1.unit_price, t1.status store_sku_status, %s.%s_id vendor_sku_id, t1.%s_sync_status store_sku_sync_status, %s vendor_name_id, t1.store_id,
|
||||
t2.*,
|
||||
t3.id name_id, t3.prefix, t3.name, t3.unit, t3.%s img, t3.upc,
|
||||
t4.%s_category_id vendor_vendor_cat_id,
|
||||
t5.%s_sync_status cat_sync_status, t5.%s_id vendor_cat_id,
|
||||
t5sku.%s_sync_status sku_cat_sync_status, t5sku.%s_id sku_vendor_cat_id
|
||||
t3.id name_id, t3.prefix, t3.name, t3.unit, IF(t3.%s <> '', t3.%s, t3.img) img, t3.upc, t3.%s desc_img,
|
||||
t4.%s_category_id vendor_vendor_cat_id, t4.%s_price_percentage cat_price_percentage
|
||||
`
|
||||
fmtParams := []interface{}{
|
||||
tableName, fieldPrefix, fieldPrefix, vendorSkuNameField, GetImgFieldName(vendorID), GetImgFieldName(vendorID), GetDescImgFieldName(vendorID),
|
||||
fieldPrefix, fieldPrefix,
|
||||
}
|
||||
if vendorID == model.VendorIDEBAI {
|
||||
sql += `,
|
||||
t4vp.vendor_category_id vendor_vendor_cat_id2, t4vp.parent_id vendor_vendor_cat_id3`
|
||||
}
|
||||
if isSingleStorePF {
|
||||
sql += `,
|
||||
t5.%s_sync_status store_cat_sync_status, t5.%s_id vendor_cat_id,
|
||||
t5sku.%s_sync_status sku_store_cat_sync_status, t5sku.%s_id sku_vendor_cat_id`
|
||||
fmtParams = append(fmtParams, fieldPrefix, fieldPrefix, fieldPrefix, fieldPrefix)
|
||||
}
|
||||
sql += `
|
||||
FROM store_sku_bind t1
|
||||
LEFT JOIN sku t2 ON t1.sku_id = t2.id AND t2.deleted_at = ? AND t2.status = ?
|
||||
LEFT JOIN sku_name t3 ON t2.name_id = t3.id AND t3.deleted_at = ? AND t3.status = ?
|
||||
JOIN sku_category t4 ON t3.category_id = t4.id AND t4.deleted_at = ?
|
||||
JOIN store_sku_category_map t5 ON t4.id = t5.category_id AND t5.store_id = t1.store_id AND t5.deleted_at = ?
|
||||
LEFT JOIN store_sku_category_map t5sku ON t2.category_id = t5sku.category_id AND t5sku.store_id = t1.store_id AND t5sku.deleted_at = ?
|
||||
WHERE t1.store_id = ? AND t1.%s_sync_status <> 0
|
||||
`
|
||||
LEFT JOIN sku_category t4 ON t3.category_id = t4.id AND t4.deleted_at = ?`
|
||||
sqlParams := []interface{}{
|
||||
utils.DefaultTimeValue,
|
||||
model.SkuStatusNormal,
|
||||
utils.DefaultTimeValue,
|
||||
model.SkuStatusNormal,
|
||||
utils.DefaultTimeValue,
|
||||
utils.DefaultTimeValue,
|
||||
utils.DefaultTimeValue,
|
||||
storeID,
|
||||
}
|
||||
if vendorID == model.VendorIDEBAI {
|
||||
sql += `
|
||||
LEFT JOIN sku_vendor_category t4v ON t4v.vendor_category_id = t4.%s_category_id AND t4v.vendor_id = ?
|
||||
LEFT JOIN sku_vendor_category t4vp ON t4vp.vendor_category_id = t4v.parent_id AND t4v.vendor_id = ?`
|
||||
fmtParams = append(fmtParams, fieldPrefix)
|
||||
sqlParams = append(sqlParams, vendorID, vendorID)
|
||||
}
|
||||
if isSingleStorePF {
|
||||
sql += `
|
||||
LEFT JOIN store_sku_category_map t5 ON t4.id = t5.category_id AND t5.store_id = t1.store_id AND t5.deleted_at = ?
|
||||
LEFT JOIN store_sku_category_map t5sku ON t2.category_id = t5sku.category_id AND t5sku.store_id = t1.store_id AND t5sku.deleted_at = ?`
|
||||
sqlParams = append(sqlParams, utils.DefaultTimeValue, utils.DefaultTimeValue)
|
||||
}
|
||||
sql += " WHERE t1.store_id = ?"
|
||||
sqlParams = append(sqlParams, storeID)
|
||||
if isDirty {
|
||||
sql += " AND (t1.%s_sync_status <> 0 OR (%s.%s_id <> 0 AND t3.id IS NULL))"
|
||||
fmtParams = append(fmtParams, fieldPrefix, tableName, fieldPrefix)
|
||||
} else {
|
||||
sql += " AND t1.deleted_at = ?"
|
||||
sqlParams = append(sqlParams, utils.DefaultTimeValue)
|
||||
}
|
||||
if len(skuIDs) > 0 {
|
||||
sql += " AND t1.sku_id IN (" + GenQuestionMarks(len(skuIDs)) + ")"
|
||||
sqlParams = append(sqlParams, skuIDs)
|
||||
}
|
||||
fieldPrefix := ConvertDBFieldPrefix(model.VendorNames[vendorID])
|
||||
sql = fmt.Sprintf(sql, tableName, fieldPrefix, fieldPrefix, vendorSkuNameField, GetImgFieldName(vendorID), fieldPrefix, fieldPrefix, fieldPrefix, fieldPrefix, fieldPrefix, fieldPrefix)
|
||||
if !isSingleStorePF {
|
||||
sql += " AND t2.%s_id <> 0"
|
||||
fmtParams = append(fmtParams, fieldPrefix)
|
||||
}
|
||||
sql = fmt.Sprintf(sql, fmtParams...)
|
||||
sql += " ORDER BY t1.price"
|
||||
// globals.SugarLogger.Debug(sql)
|
||||
if err = GetRows(db, &skus, sql, sqlParams...); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
index := 1
|
||||
for _, sku := range skus {
|
||||
sku.Seq = index
|
||||
index++
|
||||
}
|
||||
return skus, err
|
||||
}
|
||||
|
||||
func GetStoreSkus(db *DaoDB, vendorID, storeID int, skuIDs []int) (skus []*StoreSkuSyncInfo, err error) {
|
||||
return GetStoreSkus2(db, vendorID, storeID, skuIDs, true)
|
||||
}
|
||||
|
||||
// 以sku为基础来做全同步,
|
||||
// 多门店模式厂商适用
|
||||
func GetFullStoreSkus(db *DaoDB, vendorID, storeID int) (skus []*StoreSkuSyncInfo, err error) {
|
||||
globals.SugarLogger.Debugf("GetFullStoreSkus, storeID:%d, vendorID:%d", storeID, vendorID)
|
||||
|
||||
sql := `
|
||||
SELECT t1.id bind_id, t1.price, t1.unit_price, t1.status store_sku_status, t2.%s_id vendor_sku_id, t1.%s_sync_status sku_sync_status,
|
||||
t2.*,
|
||||
t3.id name_id, t3.prefix, t3.name, t3.unit, t3.%s img,
|
||||
SELECT t1.id bind_id, t1.price, t1.unit_price, t1.status store_sku_status, t2.%s_id vendor_sku_id, t1.%s_sync_status store_sku_sync_status, t1.store_id,
|
||||
t2.*, t2.id sku_id,
|
||||
t3.id name_id, t3.prefix, t3.name, t3.unit, IF(t3.%s <> '', t3.%s, t3.img) img,
|
||||
t4.%s_category_id vendor_vendor_cat_id,
|
||||
t4.%s_sync_status cat_sync_status, t4.%s_id vendor_cat_id,
|
||||
t5sku.%s_sync_status sku_cat_sync_status, t5sku.%s_id sku_vendor_cat_id
|
||||
t4.%s_sync_status store_cat_sync_status, t4.%s_id vendor_cat_id,
|
||||
t5sku.%s_sync_status sku_store_cat_sync_status, t5sku.%s_id sku_vendor_cat_id
|
||||
FROM sku t2
|
||||
LEFT JOIN store_sku_bind t1 ON t1.sku_id = t2.id AND t1.store_id = ? AND t1.deleted_at = ?
|
||||
JOIN sku_name t3 ON t2.name_id = t3.id AND t3.deleted_at = ? AND t3.status = ?
|
||||
JOIN sku_category t4 ON t3.category_id = t4.id AND t4.deleted_at = ?
|
||||
LEFT JOIN sku_category t5sku ON t2.category_id = t5sku.id
|
||||
WHERE t2.deleted_at = ? AND t2.status = ?
|
||||
WHERE t2.deleted_at = ? AND t2.status = ? AND t2.%s_id <> 0
|
||||
`
|
||||
sqlParams := []interface{}{
|
||||
storeID,
|
||||
@@ -210,7 +270,8 @@ func GetFullStoreSkus(db *DaoDB, vendorID, storeID int) (skus []*StoreSkuSyncInf
|
||||
model.SkuStatusNormal,
|
||||
}
|
||||
fieldPrefix := ConvertDBFieldPrefix(model.VendorNames[vendorID])
|
||||
sql = fmt.Sprintf(sql, fieldPrefix, fieldPrefix, GetImgFieldName(vendorID), fieldPrefix, fieldPrefix, fieldPrefix, fieldPrefix, fieldPrefix)
|
||||
sql = fmt.Sprintf(sql, fieldPrefix, fieldPrefix, GetImgFieldName(vendorID), GetImgFieldName(vendorID),
|
||||
fieldPrefix, fieldPrefix, fieldPrefix, fieldPrefix, fieldPrefix, fieldPrefix)
|
||||
// globals.SugarLogger.Debug(sql)
|
||||
// globals.SugarLogger.Debug(utils.Format4Output(sqlParams, false))
|
||||
if err = GetRows(db, &skus, sql, sqlParams...); err != nil {
|
||||
@@ -219,53 +280,79 @@ func GetFullStoreSkus(db *DaoDB, vendorID, storeID int) (skus []*StoreSkuSyncInf
|
||||
return skus, err
|
||||
}
|
||||
|
||||
func SetStoreSkuSyncStatus(db *DaoDB, vendorID, storeID int, skuIDs []int, syncStatus int) (num int64, err error) {
|
||||
globals.SugarLogger.Debugf("SetStoreSkuSyncStatus, storeID:%d, vendorID:%d", storeID, vendorID)
|
||||
// 这个函数之前是要设置没有删除或同步标志不为0的,会导致将同步标志不为0且删除了的把标志去掉,现在改为只设置没有删除的
|
||||
func SetStoreSkuSyncStatus(db *DaoDB, vendorID int, storeIDs []int, skuIDs []int, syncStatus int) (num int64, err error) {
|
||||
globals.SugarLogger.Debugf("SetStoreSkuSyncStatus, storeIDs:%v, vendorID:%d", storeIDs, vendorID)
|
||||
|
||||
isSingleStorePF := model.MultiStoresVendorMap[vendorID] != 1
|
||||
fieldPrefix := ConvertDBFieldPrefix(model.VendorNames[vendorID])
|
||||
sql := fmt.Sprintf(`
|
||||
UPDATE store_sku_bind
|
||||
SET %s_sync_status = IF(deleted_at = ?, %s_sync_status | ?, 0)
|
||||
`, fieldPrefix, fieldPrefix)
|
||||
sql := `
|
||||
UPDATE store_sku_bind t1
|
||||
SET t1.%s_sync_status = t1.%s_sync_status | ?
|
||||
`
|
||||
fmtParams := []interface{}{
|
||||
fieldPrefix,
|
||||
fieldPrefix,
|
||||
}
|
||||
sqlParams := []interface{}{
|
||||
utils.DefaultTimeValue,
|
||||
syncStatus,
|
||||
}
|
||||
if (syncStatus & model.SyncFlagNewMask) != 0 {
|
||||
sql += fmt.Sprintf(`,
|
||||
%s_id = 0
|
||||
`, fieldPrefix)
|
||||
if isSingleStorePF && (syncStatus&model.SyncFlagNewMask) != 0 {
|
||||
sql += `,
|
||||
t1.%s_id = 0
|
||||
`
|
||||
fmtParams = append(fmtParams, fieldPrefix)
|
||||
}
|
||||
sql += " WHERE 1 = 1"
|
||||
if storeID > 0 {
|
||||
sql += " AND store_id = ?"
|
||||
sqlParams = append(sqlParams, storeID)
|
||||
sql += " WHERE (t1.deleted_at = ?)"
|
||||
// fmtParams = append(fmtParams, fieldPrefix)
|
||||
sqlParams = append(sqlParams, utils.DefaultTimeValue)
|
||||
if len(storeIDs) > 0 {
|
||||
sql += " AND t1.store_id IN (" + GenQuestionMarks(len(storeIDs)) + ")"
|
||||
sqlParams = append(sqlParams, storeIDs)
|
||||
}
|
||||
if len(skuIDs) > 0 {
|
||||
sql += " AND sku_id IN (" + GenQuestionMarks(len(skuIDs)) + ")"
|
||||
sql += " AND t1.sku_id IN (" + GenQuestionMarks(len(skuIDs)) + ")"
|
||||
sqlParams = append(sqlParams, skuIDs)
|
||||
}
|
||||
sql = fmt.Sprintf(sql, fmtParams...)
|
||||
return ExecuteSQL(db, sql, sqlParams...)
|
||||
}
|
||||
|
||||
func SetStoreCategorySyncStatus(db *DaoDB, vendorID, storeID int, catIDs []int, syncStatus int) (num int64, err error) {
|
||||
globals.SugarLogger.Debugf("SetStoreCategorySyncStatus, storeID:%d, vendorID:%d", storeID, vendorID)
|
||||
func SetStoreCategorySyncStatus(db *DaoDB, vendorID int, storeIDs []int, catIDs []int, syncStatus int) (num int64, err error) {
|
||||
globals.SugarLogger.Debugf("SetStoreCategorySyncStatus, storeIDs:%v, vendorID:%d", storeIDs, vendorID)
|
||||
|
||||
isSingleStorePF := model.MultiStoresVendorMap[vendorID] != 1
|
||||
fieldPrefix := ConvertDBFieldPrefix(model.VendorNames[vendorID])
|
||||
sql := fmt.Sprintf(`
|
||||
UPDATE store_sku_category_map
|
||||
SET %s_sync_status = %s_sync_status | ?
|
||||
WHERE deleted_at = ? AND store_id = ?
|
||||
`, fieldPrefix, fieldPrefix)
|
||||
sql := `
|
||||
UPDATE store_sku_category_map t1
|
||||
SET t1.%s_sync_status = IF(t1.deleted_at = ?, t1.%s_sync_status | ?, 0)
|
||||
`
|
||||
fmtParams := []interface{}{
|
||||
fieldPrefix,
|
||||
fieldPrefix,
|
||||
}
|
||||
sqlParams := []interface{}{
|
||||
syncStatus,
|
||||
utils.DefaultTimeValue,
|
||||
storeID,
|
||||
syncStatus,
|
||||
}
|
||||
if isSingleStorePF && (syncStatus&model.SyncFlagNewMask) != 0 {
|
||||
sql += `,
|
||||
t1.%s_id = 0
|
||||
`
|
||||
fmtParams = append(fmtParams, fieldPrefix)
|
||||
}
|
||||
sql += " WHERE (t1.deleted_at = ? OR t1.%s_sync_status <> 0)"
|
||||
fmtParams = append(fmtParams, fieldPrefix)
|
||||
sqlParams = append(sqlParams, utils.DefaultTimeValue)
|
||||
if len(storeIDs) > 0 {
|
||||
sql += " AND t1.store_id IN (" + GenQuestionMarks(len(storeIDs)) + ")"
|
||||
sqlParams = append(sqlParams, storeIDs)
|
||||
}
|
||||
if len(catIDs) > 0 {
|
||||
sql += " AND category_id IN (" + GenQuestionMarks(len(catIDs)) + ")"
|
||||
sql += " AND t1.category_id IN (" + GenQuestionMarks(len(catIDs)) + ")"
|
||||
sqlParams = append(sqlParams, catIDs)
|
||||
}
|
||||
sql = fmt.Sprintf(sql, fmtParams...)
|
||||
return ExecuteSQL(db, sql, sqlParams...)
|
||||
}
|
||||
|
||||
@@ -276,3 +363,66 @@ func GetImgFieldName(vendorID int) (fieldName string) {
|
||||
}
|
||||
return fieldName
|
||||
}
|
||||
|
||||
func GetDescImgFieldName(vendorID int) (fieldName string) {
|
||||
fieldName = descImgFieldMap[vendorID]
|
||||
if fieldName == "" {
|
||||
fieldName = "desc_img"
|
||||
}
|
||||
return fieldName
|
||||
}
|
||||
|
||||
func GetStoresSkusInfo(db *DaoDB, storeIDs, skuIDs []int) (storeSkuList []*model.StoreSkuBind, err error) {
|
||||
sql := `
|
||||
SELECT *
|
||||
FROM store_sku_bind t1
|
||||
WHERE t1.deleted_at = ?
|
||||
`
|
||||
sqlParams := []interface{}{
|
||||
utils.DefaultTimeValue,
|
||||
}
|
||||
if len(storeIDs) > 0 {
|
||||
sql += " AND t1.store_id IN (" + GenQuestionMarks(len(storeIDs)) + ")"
|
||||
sqlParams = append(sqlParams, storeIDs)
|
||||
}
|
||||
if len(skuIDs) > 0 {
|
||||
sql += " AND t1.sku_id IN (" + GenQuestionMarks(len(skuIDs)) + ")"
|
||||
sqlParams = append(sqlParams, skuIDs)
|
||||
}
|
||||
err = GetRows(db, &storeSkuList, sql, sqlParams...)
|
||||
return storeSkuList, err
|
||||
}
|
||||
|
||||
func GetMissingStoreSkuFromOrder(db *DaoDB, storeIDs []int, fromTime time.Time) (storeSkuList []*MissingStoreSkuInfo, err error) {
|
||||
if time.Now().Sub(fromTime) > 24*time.Hour*60 {
|
||||
return nil, fmt.Errorf("GetMissingStoreSkuFromOrder,时间超过60天")
|
||||
}
|
||||
sql := `
|
||||
SELECT IF(t2.jx_store_id <> 0, t2.jx_store_id, t2.store_id) store_id, t4.name_id, t1.sku_id,
|
||||
t4.spec_quality, t4.spec_unit, t5.unit,
|
||||
COUNT(*) ct, CAST(AVG(IF(t1.vendor_price <> 0, t1.vendor_price, t1.sale_price)) AS SIGNED) ref_price
|
||||
FROM order_sku t1
|
||||
JOIN goods_order t2 ON t2.vendor_order_id = t1.vendor_order_id
|
||||
LEFT JOIN store_sku_bind t3 ON t3.store_id = IF(t2.jx_store_id <> 0, t2.jx_store_id, t2.store_id) AND
|
||||
t3.sku_id = t1.sku_id AND t3.deleted_at = ?
|
||||
JOIN sku t4 ON t4.id = t1.sku_id
|
||||
JOIN sku_name t5 ON t5.id = t4.name_id
|
||||
WHERE t2.status = ? AND IF(t2.jx_store_id <> 0, t2.jx_store_id, t2.store_id) > 0 AND t1.sku_id > 0 AND t1.shop_price = 0 AND
|
||||
t1.order_created_at > ? AND t3.id IS NULL
|
||||
`
|
||||
sqlParams := []interface{}{
|
||||
utils.DefaultTimeValue,
|
||||
model.OrderStatusFinished,
|
||||
fromTime,
|
||||
}
|
||||
if len(storeIDs) > 0 {
|
||||
sql += " AND IF(t2.jx_store_id <> 0, t2.jx_store_id, t2.store_id) IN (" + GenQuestionMarks(len(storeIDs)) + ")"
|
||||
sqlParams = append(sqlParams, storeIDs)
|
||||
}
|
||||
sql += `
|
||||
GROUP BY 1,2,3,4,5,6
|
||||
ORDER BY 1,2,3,4,5,6
|
||||
`
|
||||
err = GetRows(db, &storeSkuList, sql, sqlParams...)
|
||||
return storeSkuList, err
|
||||
}
|
||||
|
||||
@@ -45,6 +45,9 @@ const (
|
||||
|
||||
FieldVendorOrderID = "VendorOrderID"
|
||||
FieldVendorOrderID2 = "VendorOrderID2"
|
||||
|
||||
FieldActID = "ActID"
|
||||
FieldVendorActID = "VendorActID"
|
||||
)
|
||||
|
||||
type ModelIDCUL struct {
|
||||
@@ -67,16 +70,43 @@ const (
|
||||
SyncFlagModifiedMask = 1
|
||||
SyncFlagNewMask = 2
|
||||
SyncFlagDeletedMask = 4
|
||||
SyncFlagChangedMask = SyncFlagModifiedMask | SyncFlagNewMask | SyncFlagDeletedMask
|
||||
|
||||
SyncFlagSaleMask = 8
|
||||
SyncFlagPriceMask = 16
|
||||
SyncFlagSaleMask = 8 // 改了门店商品可售状态必须设置此标志
|
||||
SyncFlagPriceMask = 16 // 改了门店商品价格必须设置此标志
|
||||
SyncFlagSpecMask = 32
|
||||
|
||||
SyncFlagStoreSkuOnlyMask = SyncFlagSaleMask | SyncFlagPriceMask
|
||||
SyncFlagStoreSkuModifiedMask = SyncFlagStoreSkuOnlyMask | SyncFlagModifiedMask
|
||||
SyncFlagChangedMask = SyncFlagSpecMask | SyncFlagNewMask | SyncFlagDeletedMask | SyncFlagStoreSkuModifiedMask
|
||||
|
||||
SyncFlagStoreName = 8
|
||||
SyncFlagStoreAddress = 16
|
||||
)
|
||||
|
||||
func IsSyncStatusNew(syncStatus int) bool {
|
||||
return (syncStatus & SyncFlagNewMask) != 0
|
||||
}
|
||||
|
||||
func IsSyncStatusDelete(syncStatus int) bool {
|
||||
return (syncStatus & SyncFlagDeletedMask) != 0
|
||||
}
|
||||
|
||||
func IsSyncStatusUpdate(syncStatus int) bool {
|
||||
return (syncStatus & SyncFlagModifiedMask) != 0
|
||||
}
|
||||
|
||||
func IsSyncStatusNeedCreate(syncStatus int) bool {
|
||||
return IsSyncStatusNew(syncStatus) && !IsSyncStatusDelete(syncStatus)
|
||||
}
|
||||
|
||||
func IsSyncStatusNeedDelete(syncStatus int) bool {
|
||||
return !IsSyncStatusNew(syncStatus) && IsSyncStatusDelete(syncStatus)
|
||||
}
|
||||
|
||||
func IsSyncStatusNeedUpdate(syncStatus int) bool {
|
||||
return !IsSyncStatusNew(syncStatus) && !IsSyncStatusDelete(syncStatus) && IsSyncStatusUpdate(syncStatus)
|
||||
}
|
||||
|
||||
// const (
|
||||
// KeyJdFlag = "jdFlag"
|
||||
// KeyJdSyncedAt = "jdSyncedAt"
|
||||
|
||||
@@ -16,9 +16,12 @@ type GoodsOrder struct {
|
||||
StoreID int `orm:"column(store_id)" json:"storeID"` // 外部系统里记录的 jxstoreid
|
||||
JxStoreID int `orm:"column(jx_store_id)" json:"jxStoreID"` // 根据VendorStoreID在本地系统里查询出来的 jxstoreid
|
||||
StoreName string `orm:"size(64)" json:"storeName"`
|
||||
ShopPrice int64 `json:"shopPrice"` // 单位为分 门店标价
|
||||
SalePrice int64 `json:"salePrice"` // 单位为分 售卖价
|
||||
ShopPrice int64 `json:"shopPrice"` // 京西价
|
||||
VendorPrice int64 `json:"vendorPrice"` // 平台价
|
||||
SalePrice int64 `json:"salePrice"` // 售卖价
|
||||
ActualPayPrice int64 `json:"actualPayPrice"` // 单位为分 顾客实际支付
|
||||
TotalShopMoney int64 `json:"shopMoney"` // 应结金额-第三方平台结算给京西的金额(包括了所有的补贴,扣除)
|
||||
PmSubsidyMoney int64 `json:"pmSubsidyMoney"` // 平台活动补贴(订单主体活动补贴+订单单条sku补贴)1+
|
||||
Weight int `json:"weight"` // 单位为克
|
||||
ConsigneeName string `orm:"size(32)" json:"consigneeName"`
|
||||
ConsigneeMobile string `orm:"size(32)" json:"consigneeMobile"`
|
||||
@@ -30,10 +33,10 @@ type GoodsOrder struct {
|
||||
SkuCount int `json:"skuCount"` // 商品类别数量,即有多少种商品(注意在某些情况下,相同SKU的商品由于售价不同,也会当成不同商品在这个值里)
|
||||
GoodsCount int `json:"goodsCount"` // 商品个数
|
||||
Status int `json:"status"` // 参见OrderStatus*相关的常量定义
|
||||
VendorStatus string `orm:"size(255)" json:"-"`
|
||||
VendorStatus string `orm:"size(255)" json:"vendorStatus"`
|
||||
LockStatus int `json:"lockStatus"`
|
||||
LockStatusTime time.Time `orm:"type(datetime);null" json:"-"` // last lock status time
|
||||
OrderSeq int `json:"orderSeq"` // 门店订单序号
|
||||
LockStatusTime time.Time `orm:"type(datetime);null" json:"lockStatusTime"` // last lock status time
|
||||
OrderSeq int `json:"orderSeq"` // 门店订单序号
|
||||
BuyerComment string `orm:"size(255)" json:"buyerComment"`
|
||||
BusinessType int `json:"businessType"`
|
||||
ExpectedDeliveredTime time.Time `orm:"type(datetime)" json:"expectedDeliveredTime"` // 预期送达时间
|
||||
@@ -44,19 +47,12 @@ type GoodsOrder struct {
|
||||
DuplicatedCount int `json:"-"` // 重复新订单消息数,这个一般不是由于消息重发造成的(消息重发由OrderStatus过滤),一般是业务逻辑造成的
|
||||
OrderCreatedAt time.Time `orm:"type(datetime);index" json:"orderCreatedAt"` // 这里记录的是订单生效时间,即用户支付完成(货到付款即为下单时间)
|
||||
OrderFinishedAt time.Time `orm:"type(datetime)" json:"orderFinishedAt"`
|
||||
StatusTime time.Time `orm:"type(datetime)" json:"-"` // last status time
|
||||
StatusTime time.Time `orm:"type(datetime)" json:"statusTime"` // last status time
|
||||
PickDeadline time.Time `orm:"type(datetime)" json:"pickDeadline"`
|
||||
ModelTimeInfo `json:"-"`
|
||||
OriginalData string `orm:"-" json:"-"` // 只是用于传递数据
|
||||
Skus []*OrderSku `orm:"-" json:"-"`
|
||||
Flag int8 `json:"flag"` //非运单调整相关的其它状态
|
||||
SkuPmFee int64 `json:"-"` //门店商品活动总支出
|
||||
OrderPmFee int64 `json:"-"` //门店订单活动支出
|
||||
SkuPmSubsidy int64 `json:"-"` //平台商品活动总补贴
|
||||
OrderPmSubsidy int64 `json:"-"` //平台订单活动补贴
|
||||
BoxFee int64 `json:"-"` //餐盒费
|
||||
PlatformFeeRate int16 `json:"-"` //平台费
|
||||
BillStoreFreightFee int64 `json:"-"` //需要回调,门店所承担的运费
|
||||
Flag int `json:"flag"` //非运单调整相关的其它状态
|
||||
}
|
||||
|
||||
func (o *GoodsOrder) TableUnique() [][]string {
|
||||
@@ -88,18 +84,18 @@ type OrderSku struct {
|
||||
StoreSubID int `orm:"column(store_sub_id)" json:"storeSubID"`
|
||||
StoreSubName string `orm:"size(64)" json:"storeSubName"`
|
||||
Count int `json:"count"`
|
||||
VendorSkuID string `orm:"column(vendor_sku_id);size(48)" json:"-"`
|
||||
VendorSkuID string `orm:"column(vendor_sku_id);size(48)" json:"vendorSkuID"`
|
||||
SkuID int `orm:"column(sku_id)" json:"skuID"` // 外部系统里记录的 jxskuid
|
||||
JxSkuID int `orm:"column(jx_sku_id)" json:"jxSkuID"` // 根据VendorSkuID在本地系统里查询出来的 jxskuid
|
||||
SkuName string `orm:"size(255)" json:"skuName"`
|
||||
ShopPrice int64 `json:"shopPrice"` // 门店标价
|
||||
ShopPrice int64 `json:"shopPrice"` // 京西价
|
||||
VendorPrice int64 `json:"vendorPrice"` // 平台价
|
||||
SalePrice int64 `json:"salePrice"` // 售卖价
|
||||
Weight int `json:"-"` // 单位为克
|
||||
SkuType int `json:"-"` // 当前如果为gift就为1,否则缺省为0
|
||||
PromotionType int `json:"-"` // todo 当前是用于记录京东的PromotionType(生成jxorder用),没有做转换
|
||||
EarningPrice int64 `json:"earningPrice"` // 活动商品设置,结算给门店老板的钱
|
||||
Weight int `json:"weight"` // 单位为克
|
||||
SkuType int `json:"skuType"` // 当前如果为gift就为1,否则缺省为0
|
||||
PromotionType int `json:"promotionType"` // todo 当前是用于记录京东的PromotionType(生成jxorder用),没有做转换
|
||||
OrderCreatedAt time.Time `orm:"type(datetime);index" json:"-"` // 分区考虑
|
||||
SkuPmSubsidy int64 `json:"-"` //平台商品活动补贴
|
||||
SkuPmFee int64 `json:"-"` //门店商品活动支出
|
||||
}
|
||||
|
||||
// 同样商品在一个订单中可能重复出现(比如搞活动时,相同商品价格不一样,第一个有优惠)
|
||||
@@ -124,6 +120,7 @@ type Waybill struct {
|
||||
ActualFee int64 `json:"actualFee"` // 实际要支付给快递公司的费用
|
||||
DesiredFee int64 `json:"desiredFee"` // 运单总费用
|
||||
DuplicatedCount int `json:"-"` // 重复新订单消息数,这个一般不是由于消息重发造成的(消息重发由OrderStatus过滤),一般是业务逻辑造成的
|
||||
DeliveryFlag int8 `json:"deliveryFlag"`
|
||||
WaybillCreatedAt time.Time `orm:"type(datetime);index" json:"waybillCreatedAt"`
|
||||
WaybillFinishedAt time.Time `orm:"type(datetime)" json:"waybillFinishedAt"`
|
||||
StatusTime time.Time `orm:"type(datetime)" json:"-"` // last status time
|
||||
@@ -240,3 +237,24 @@ type OrderComment struct {
|
||||
CommentUpdatedAt time.Time
|
||||
UpdatedOriginalMsg string `orm:"type(text)" json:"-"`
|
||||
}
|
||||
|
||||
// 判断是否是购买平台自有物流
|
||||
// 对于京东,饿百来说,就是其自有的物流,对于微商城来说,是达达
|
||||
func IsWaybillPlatformOwn(bill *Waybill) bool {
|
||||
return bill.OrderVendorID == bill.WaybillVendorID || IsSpecialOrderPlatformWaybill(bill)
|
||||
}
|
||||
|
||||
// 是否是特殊物流
|
||||
func IsSpecialOrderPlatformWaybill(bill *Waybill) bool {
|
||||
return (bill.OrderVendorID == VendorIDWSC && bill.WaybillVendorID == VendorIDDada)
|
||||
}
|
||||
|
||||
// 订单是否已经有了有效运单
|
||||
func IsOrderHaveWaybill(order *GoodsOrder) bool {
|
||||
return order.WaybillVendorID != VendorIDUnknown && order.VendorWaybillID != ""
|
||||
}
|
||||
|
||||
// 订单是否有自己平台的有效运单
|
||||
func IsOrderHaveOwnWaybill(order *GoodsOrder) bool {
|
||||
return order.VendorID == order.WaybillVendorID && order.VendorWaybillID != ""
|
||||
}
|
||||
|
||||
@@ -70,25 +70,40 @@ func (o *OrderDiscountFinancial) TableUnique() [][]string {
|
||||
type AfsOrder struct {
|
||||
ModelIDCUL
|
||||
|
||||
VendorID int `orm:"column(vendor_id)" json:"vendorID"`
|
||||
VendorOrderID string `orm:"column(vendor_order_id);size(48)" json:"vendorOrderID"` // 关联原始订单ID
|
||||
VendorOrderID2 string `orm:"column(vendor_order_id2);size(48);index" json:"vendorOrderID2"` // 关联原始订单ID2,饿百独有
|
||||
AfsOrderID string `orm:"column(afs_order_id);size(48)" json:"afsOrderID"` // 售后订单ID
|
||||
AfsCreateAt time.Time `orm:"type(datetime);index" json:"afsCreateAt"` // 订单生成时间
|
||||
VendorStoreID string `orm:"column(vendor_store_id);size(48)" json:"vendorStoreID"` // 外部系统里记录的storeid
|
||||
StoreID int `orm:"column(store_id)" json:"storeID"` // 接口返回的京西门店ID
|
||||
JxStoreID int `orm:"column(jx_store_id)" json:"jxStoreID"` // 根据VendorStoreID在本地系统里查询出来的 jxstoreid
|
||||
SkuUserMoney int64 `json:"skuUserMoney"` // 用户支付菜品金额
|
||||
FreightUserMoney int64 `json:"freightUserMoney"` // 用户支付运费金额
|
||||
AfsFreightMoney int64 `json:"afsFreightMoney"` // 退货取件费
|
||||
BoxMoney int64 `json:"boxMoney"` // 应退包装费金额
|
||||
TongchengFreightMoney int64 `json:"tongchengFreightMoney"` // 退货单产生的同城送费用
|
||||
SkuBoxMoney int64 `json:"skuBoxMoney"` // 应退订单餐盒费
|
||||
PmSubsidyMoney int64 `json:"pmSubsidyMoney"` // 平台总补贴金额
|
||||
PmSkuSubsidyMoney int64 `json:"pmSkuSubsidyMoney"` // 平台sku补贴金额
|
||||
PmRefundMoney int64 `json:"pmRefundMoney"` // 订单取消后可能存在佣金减少,平台退回部分金额的情况
|
||||
RefundMoney int64 `json:"refundMoney"` // 平台扣款总额 1
|
||||
RefundMoneyByCal int64 `json:"refundMoneyByCal"` // 平台扣款总额-通过公式计算平台扣除京西的金额M
|
||||
VendorID int `orm:"column(vendor_id)" json:"vendorID"`
|
||||
VendorOrderID string `orm:"column(vendor_order_id);size(48)" json:"vendorOrderID"` // 关联原始订单ID
|
||||
VendorOrderID2 string `orm:"column(vendor_order_id2);size(48);index" json:"vendorOrderID2"` // 关联原始订单ID2,饿百独有
|
||||
AfsOrderID string `orm:"column(afs_order_id);size(48)" json:"afsOrderID"` // 售后订单ID
|
||||
AfsCreatedAt time.Time `orm:"type(datetime);null;index" json:"afsCreatedAt"` // 售后单生成时间
|
||||
AfsFinishedAt time.Time `orm:"type(datetime);null;index" json:"afsFinishedAt"` // 售后单结束时间
|
||||
VendorStoreID string `orm:"column(vendor_store_id);size(48)" json:"vendorStoreID"` // 外部系统里记录的storeid
|
||||
StoreID int `orm:"column(store_id)" json:"storeID"` // 接口返回的京西门店ID
|
||||
JxStoreID int `orm:"column(jx_store_id)" json:"jxStoreID"` // 根据VendorStoreID在本地系统里查询出来的 jxstoreid
|
||||
|
||||
// IsNeedApprove int8 `json:"isNeedApprove"` // 售后单是否需要商家审核
|
||||
Status int `json:"status"`
|
||||
VendorStatus string `orm:"size(255)" json:"vendorStatus"`
|
||||
ReasonType int8 `json:"reasonType"` // 售后原因
|
||||
VendorReasonType string `orm:"size(255)" json:"vendorReasonType"`
|
||||
ReasonDesc string `orm:"size(1024)" json:"reasonDesc"` // 售后原因描述
|
||||
ReasonImgList string `orm:"size(1024)" json:"reasonImgList"` // 售后描述图片
|
||||
AppealType int8 `json:"appealType"` // 售后方式
|
||||
VendorAppealType string `orm:"size(255)" json:"vendorAppealType"`
|
||||
Flag int `json:"flag"`
|
||||
RefundType int8 `json:"refundType"`
|
||||
RefuseReason string `orm:"size(1024)" json:"refuseReason"`
|
||||
|
||||
SkuUserMoney int64 `json:"skuUserMoney"` // 用户支付菜品金额
|
||||
FreightUserMoney int64 `json:"freightUserMoney"` // 用户支付运费金额
|
||||
AfsFreightMoney int64 `json:"afsFreightMoney"` // 退货取件费
|
||||
BoxMoney int64 `json:"boxMoney"` // 应退包装费金额
|
||||
TongchengFreightMoney int64 `json:"tongchengFreightMoney"` // 退货单产生的同城送费用
|
||||
SkuBoxMoney int64 `json:"skuBoxMoney"` // 应退订单餐盒费
|
||||
PmSubsidyMoney int64 `json:"pmSubsidyMoney"` // 平台总补贴金额
|
||||
PmSkuSubsidyMoney int64 `json:"pmSkuSubsidyMoney"` // 平台sku补贴金额
|
||||
PmRefundMoney int64 `json:"pmRefundMoney"` // 订单取消后可能存在佣金减少,平台退回部分金额的情况
|
||||
RefundMoney int64 `json:"refundMoney"` // 平台扣款总额 1
|
||||
RefundMoneyByCal int64 `json:"refundMoneyByCal"` // 平台扣款总额-通过公式计算平台扣除京西的金额M
|
||||
// JxSkuMoney int64 `json:"jxSkuMoney"` // 京西补贴金额,现阶段是平台扣京西多少钱,京西扣商家多少钱,暂不考虑撤回京西补贴
|
||||
Skus []*OrderSkuFinancial `orm:"-" json:"skus"`
|
||||
}
|
||||
@@ -102,11 +117,10 @@ func (o *AfsOrder) TableUnique() [][]string {
|
||||
type OrderSkuFinancial struct {
|
||||
ModelIDCUL
|
||||
|
||||
VendorID int `orm:"column(vendor_id)" json:"vendorID"` // 平台id
|
||||
VendorOrderID string `orm:"column(vendor_order_id);size(48)" json:"vendorOrderID"` // 关联原始订单ID
|
||||
VendorOrderID2 string `orm:"column(vendor_order_id2);size(48);index" json:"vendorOrderID2"` // 关联原始订单ID2,饿百独有
|
||||
AfsOrderID string `orm:"column(order_financial_id);size(48)" json:"afsOrderID"` // 订单结账ID
|
||||
IsAfsOrder int8 `json:"isAfsOrder"` // 0--正向单, 1--售后单
|
||||
VendorID int `orm:"column(vendor_id)" json:"vendorID"` // 平台id
|
||||
VendorOrderID string `orm:"column(vendor_order_id);size(48)" json:"vendorOrderID"` // 关联原始订单ID
|
||||
AfsOrderID string `orm:"column(afs_order_id);size(48)" json:"afsOrderID"` // 售后单ID
|
||||
IsAfsOrder int8 `json:"isAfsOrder"` // 0--正向单, 1--售后单
|
||||
|
||||
// ConfirmTime time.Time `orm:"type(datetime)" json:"confirmTime"` // 订单生成/完成时间
|
||||
VendorStoreID string `orm:"column(vendor_store_id);size(48)" json:"vendorStoreID"` // 外部系统里记录的storeid
|
||||
@@ -141,7 +155,8 @@ type OrderSkuFinancial struct {
|
||||
|
||||
func (o *OrderSkuFinancial) TableIndex() [][]string {
|
||||
return [][]string{
|
||||
[]string{"VendorOrderID", "VendorSkuID", "PromotionType", "IsAfsOrder", "VendorID"},
|
||||
[]string{"VendorOrderID", "VendorSkuID"},
|
||||
[]string{"AfsOrderID", "VendorSkuID"},
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -30,7 +30,7 @@ var (
|
||||
type Promotion struct {
|
||||
ModelIDCULD
|
||||
|
||||
VendorID int `orm:"column(vendor_id)"`
|
||||
VendorID int `orm:"column(vendor_id)" json:"vendorID"`
|
||||
Name string `orm:"size(64)" json:"name"`
|
||||
Advertising string `orm:"size(255)" json:"advertising"`
|
||||
Type int `json:"type"`
|
||||
@@ -75,6 +75,8 @@ type PromotionSku struct {
|
||||
Price int `json:"price"` // 分,活动价,这个不是单价
|
||||
LimitSkuCount int `json:"limitSkuCount"`
|
||||
IsLock int8 `json:"isLock"` // 是否锁定门店商品信息
|
||||
|
||||
EarningPrice int `json:"earningPrice"` // 活动商品设置,结算给门店老板的钱
|
||||
}
|
||||
|
||||
func (*PromotionSku) TableUnique() [][]string {
|
||||
|
||||
@@ -89,6 +89,7 @@ var (
|
||||
SpecialUnit = "份"
|
||||
SpecialSpecQuality = 500
|
||||
SpecialSpecUnit = "g"
|
||||
SpecialSpecUnit2 = "ml"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -131,7 +132,12 @@ type SkuCategory struct {
|
||||
Type int8 `json:"type"` // 类别类型,即是普通类别还是特殊用于做活动的类别
|
||||
Seq int `json:"seq"`
|
||||
|
||||
JdCategoryID int `orm:"column(jd_category_id)" json:"jdCategoryID"` // 这个是指对应的京东商品类别
|
||||
JdPricePercentage int16 `orm:"default(100)" json:"jdPricePercentage"`
|
||||
EbaiPricePercentage int16 `orm:"default(100)" json:"ebaiPricePercentage"`
|
||||
MtwmPricePercentage int16 `orm:"default(100)" json:"mtwmPricePercentage"`
|
||||
WscPricePercentage int16 `orm:"default(100)" json:"wscPricePercentage"`
|
||||
|
||||
JdCategoryID int64 `orm:"column(jd_category_id)" json:"jdCategoryID"` // 这个是指对应的京东商品类别
|
||||
ElmCategoryID int64 `orm:"column(elm_category_id)" json:"elmCategoryID"` // 这个是指对应的饿了么商品类别
|
||||
EbaiCategoryID int64 `orm:"column(ebai_category_id)" json:"ebaiCategoryID"` // 这个是指对应的饿百商品类别
|
||||
MtwmCategoryID int64 `orm:"column(mtwm_category_id)" json:"mtwmCategoryID"` // 这个是指对应的美团外卖商品类别
|
||||
@@ -159,8 +165,9 @@ type SkuName struct {
|
||||
Prefix string `orm:"size(255)" json:"prefix"`
|
||||
Name string `orm:"size(255);index" json:"name"`
|
||||
|
||||
BrandID int `orm:"column(brand_id);default(0)" json:"brandID"` // todo,此属性暂时没有使用,且有问题,应该是不同平台都有一个brandid
|
||||
CategoryID int `orm:"column(category_id);index" json:"categoryID"` // 标准类别
|
||||
BrandID int `orm:"column(brand_id);default(0)" json:"brandID"` // todo,此属性暂时没有使用,且有问题,应该是不同平台都有一个brandid
|
||||
CategoryID int `orm:"column(category_id);index" json:"categoryID"` // 标准类别
|
||||
JdCategoryID int64 `orm:"column(jd_category_id)" json:"jdCategoryID"` // 这个是指对应的京东商品类别
|
||||
|
||||
IsGlobal int8 `orm:"default(1)" json:"isGlobal"` // 是否是全部(全国)可见,如果否的话,可见性由SkuPlace决定
|
||||
Unit string `orm:"size(8)" json:"unit"`
|
||||
@@ -176,6 +183,9 @@ type SkuName struct {
|
||||
Status int `orm:"default(1)" json:"status"` // skuname状态,取值同sku.Status
|
||||
IsSpu int8 `orm:"column(is_spu)" json:"isSpu"` // 用于指明是否SKUNAME当成SPU
|
||||
|
||||
DescImg string `orm:"size(255)" json:"descImg"` // 商品详情图片描述
|
||||
DescImgEbai string `orm:"size(255)" json:"descImgEbai"` // 饿百的商品详情图片描述RTF
|
||||
|
||||
JdID int64 `orm:"column(jd_id);null;index" json:"jdID"`
|
||||
JdSyncStatus int8 `orm:"default(2)" json:"jdSyncStatus"`
|
||||
|
||||
@@ -206,6 +216,12 @@ type Sku struct {
|
||||
LinkID int `orm:"column(link_id);null;index" json:"linkID"`
|
||||
}
|
||||
|
||||
type SkuAndName struct {
|
||||
Sku
|
||||
Name string
|
||||
Unit string
|
||||
}
|
||||
|
||||
// func (*Sku) TableUnique() [][]string {
|
||||
// return [][]string{
|
||||
// []string{"JdID", "DeletedAt"},
|
||||
|
||||
@@ -2,8 +2,9 @@ package model
|
||||
|
||||
const (
|
||||
StoreStatusAll = -9
|
||||
StoreStatusDisabled = -1
|
||||
StoreStatusClosed = 0
|
||||
StoreStatusDisabled = -2
|
||||
StoreStatusClosed = -1
|
||||
StoreStatusHaveRest = 0
|
||||
StoreStatusOpened = 1
|
||||
)
|
||||
|
||||
@@ -32,7 +33,8 @@ const (
|
||||
var (
|
||||
StoreStatusName = map[int]string{
|
||||
StoreStatusDisabled: "禁用",
|
||||
StoreStatusClosed: "休息",
|
||||
StoreStatusClosed: "长期休息",
|
||||
StoreStatusHaveRest: "临时休息",
|
||||
StoreStatusOpened: "营业中",
|
||||
}
|
||||
DeliveryRangeTypeName = map[int]string{
|
||||
@@ -62,6 +64,7 @@ var (
|
||||
"NBB": "宁波银行",
|
||||
"SPDB": "浦发银行",
|
||||
"GDB": "广发银行",
|
||||
"BOCOM": "交通银行",
|
||||
"SPAB": "平安银行",
|
||||
"BSB": "包商银行",
|
||||
"CSCB": "长沙银行",
|
||||
@@ -131,6 +134,8 @@ type Store struct {
|
||||
Status int `json:"status"`
|
||||
ChangePriceType int8 `json:"changePriceType"` // 修改价格类型,即是否需要审核
|
||||
|
||||
DeliveryType int8 `orm:"-" json:"deliveryType"` // 仅用于传值
|
||||
|
||||
PrinterVendorID int `orm:"column(printer_vendor_id);" json:"printerVendorID"`
|
||||
PrinterSN string `orm:"size(32);column(printer_sn);index" json:"printerSN"`
|
||||
PrinterKey string `orm:"size(32)" json:"printerKey"`
|
||||
@@ -138,10 +143,39 @@ type Store struct {
|
||||
IDCardFront string `orm:"size(255);column(id_card_front)" json:"idCardFront"`
|
||||
IDCardBack string `orm:"size(255);column(id_card_back)" json:"idCardBack"`
|
||||
IDCardHand string `orm:"size(255);column(id_card_hand)" json:"idCardHand"`
|
||||
Licence string `orm:"size(255)" json:"licence"`
|
||||
Licence string `orm:"size(255)" json:"licence"` // 营业执照图片
|
||||
LicenceCode string `orm:"size(32)" json:"licenceCode"`
|
||||
|
||||
DeliveryType int8 `orm:"-" json:"deliveryType"` // 仅用于传值
|
||||
LicenceType int8 `json:"licenceType"` // 营业执照类型,0:个人,1:公司
|
||||
LicenceCorpName string `orm:"size(64)" json:"licenceCorpName"` // 营业执照公司名称
|
||||
LicenceOwnerName string `orm:"size(8)" json:"licenceOwnerName"` // 法人姓名
|
||||
LicenceAddress string `orm:"size(255)" json:"licenceAddress"` // 地址
|
||||
LicenceValid string `orm:"size(32)" json:"licenceValid"` // 有效期开始
|
||||
LicenceExpire string `orm:"size(32)" json:"licenceExpire"` // 有效期结束
|
||||
|
||||
IDName string `orm:"size(8);column(id_name)" json:"idName"` // 身份证姓名
|
||||
IDCode string `orm:"size(32);column(id_code)" json:"idCode"` // 身份证号
|
||||
IDValid string `orm:"column(id_valid);size(32)" json:"idValid"` // 有效期开始
|
||||
IDExpire string `orm:"column(id_expire);size(32)" json:"idExpire"` // 有效期结束
|
||||
|
||||
Licence2Image string `orm:"size(255)" json:"licence2Image"` // 食品经营许可证
|
||||
Licence2Code string `orm:"size(32)" json:"licence2Code"` // 食品经营许可证编号
|
||||
Licence2Valid string `orm:"size(32)" json:"licence2Valid"` // 有效期开始
|
||||
Licence2Expire string `orm:"size(32)" json:"licence2Expire"` // 有效期结束
|
||||
|
||||
MarketManName string `orm:"size(8)" json:"marketManName"` // 市场负责人姓名
|
||||
MarketManPhone string `orm:"size(16)" json:"marketManPhone"` // 市场负责人电话
|
||||
JxBrandFeeFactor int `json:"jxBrandFeeFactor"` // 京西品牌费因子
|
||||
MarketAddFeeFactor int `json:"marketAddFeeFactor"` // 市场附加费因子
|
||||
|
||||
PayeeName string `orm:"size(8)" json:"payeeName"` // 收款人姓名
|
||||
PayeeAccountNo string `orm:"size(255)" json:"payeeAccountNo"` // 收款账号
|
||||
PayeeBankBranchName string `orm:"size(255)" json:"payeeBankBranchName"` // 开户银行
|
||||
PayeeBankName string `orm:"size(255)" json:"payeeBankName"` // 开户支行
|
||||
PayPercentage int `json:"payPercentage"`
|
||||
|
||||
OperatorName string `orm:"size(8)" json:"operatorName"` // 运营人姓名
|
||||
OperatorPhone string `orm:"size(16)" json:"operatorPhone"` // 运营人电话
|
||||
}
|
||||
|
||||
func (*Store) TableUnique() [][]string {
|
||||
|
||||
@@ -58,6 +58,29 @@ func (*StoreSkuCategoryMap) TableUnique() [][]string {
|
||||
}
|
||||
}
|
||||
|
||||
func (*StoreSkuCategoryMap) TableIndex() [][]string {
|
||||
return [][]string{
|
||||
[]string{"CategoryID", "StoreID", "DeletedAt"},
|
||||
}
|
||||
}
|
||||
|
||||
// type StoreSkuCategoryMap2 struct {
|
||||
// ModelIDCULD
|
||||
|
||||
// StoreID int `orm:"column(store_id)"`
|
||||
// VendorID int `orm:"column(vendor_id)"`
|
||||
// CategoryID int `orm:"column(category_id)"`
|
||||
|
||||
// VendorCatID string `orm:"column(vendor_cat_id);size(48)" json:"vendorCatID"`
|
||||
// SyncStatus int8 `orm:"default(2)"`
|
||||
// }
|
||||
|
||||
// func (*StoreSkuCategoryMap2) TableUnique() [][]string {
|
||||
// return [][]string{
|
||||
// []string{"StoreID", "VendorID", "CategoryID", "DeletedAt"},
|
||||
// }
|
||||
// }
|
||||
|
||||
type StoreSkuBind struct {
|
||||
ModelIDCULD
|
||||
|
||||
@@ -88,6 +111,12 @@ func (*StoreSkuBind) TableUnique() [][]string {
|
||||
}
|
||||
}
|
||||
|
||||
func (*StoreSkuBind) TableIndex() [][]string {
|
||||
return [][]string{
|
||||
[]string{"SkuID", "StoreID", "DeletedAt"},
|
||||
}
|
||||
}
|
||||
|
||||
type StoreOpRequest struct {
|
||||
ModelIDCULD // DeletedAt用于表示请求操作结束,而并不一定是删除
|
||||
|
||||
|
||||
Reference in New Issue
Block a user