- CopyStoreSkus
This commit is contained in:
@@ -10,6 +10,12 @@ import (
|
|||||||
"git.rosy.net.cn/jx-callback/globals"
|
"git.rosy.net.cn/jx-callback/globals"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
CopyStoreSkuModeFresh = "fresh"
|
||||||
|
CopyStoreSkuModeUpdate = "update"
|
||||||
|
// CopyStoreSkuModeAdd = "add"
|
||||||
|
)
|
||||||
|
|
||||||
// GetStoreSkus用
|
// GetStoreSkus用
|
||||||
type StoreSkuNameExt struct {
|
type StoreSkuNameExt struct {
|
||||||
model.SkuName
|
model.SkuName
|
||||||
@@ -383,6 +389,92 @@ func UpdateStoresSkus(storeIDs []int, skuBindInfos []*StoreSkuBindInfo, userName
|
|||||||
return int64(len(skuIDs)), err
|
return int64(len(skuIDs)), err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func CopyStoreSkus(fromStoreID, toStoreID int, copyMode string, params map[string]interface{}, userName string) (num int64, err error) {
|
||||||
|
db := dao.GetDB()
|
||||||
|
sqlCatAndSku := ""
|
||||||
|
sqlCatAndSkuParams := make([]interface{}, 0)
|
||||||
|
if params["categoryIDs"] != nil {
|
||||||
|
var cats []int
|
||||||
|
if err = utils.UnmarshalUseNumber([]byte(params["categoryIDs"].(string)), &cats); err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
if len(cats) > 0 {
|
||||||
|
sqlCatAndSku += " AND t3.category_id IN (" + dao.GenQuestionMarks(len(cats)) + ")"
|
||||||
|
sqlCatAndSkuParams = append(sqlCatAndSkuParams, cats)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if params["skuIDs"] != nil {
|
||||||
|
var skus []int
|
||||||
|
if err = utils.UnmarshalUseNumber([]byte(params["skuIDs"].(string)), &skus); err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
if len(skus) > 0 {
|
||||||
|
sqlCatAndSku += " AND t1.sku_id IN (" + dao.GenQuestionMarks(len(skus)) + ")"
|
||||||
|
sqlCatAndSkuParams = append(sqlCatAndSkuParams, skus)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pricePercentage := 100
|
||||||
|
if params["pricePercentage"] != nil {
|
||||||
|
pricePercentage = params["pricePercentage"].(int)
|
||||||
|
}
|
||||||
|
|
||||||
|
dao.Begin(db)
|
||||||
|
defer func() {
|
||||||
|
dao.Rollback(db)
|
||||||
|
if r := recover(); r != nil {
|
||||||
|
panic(r)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
if copyMode == CopyStoreSkuModeFresh || copyMode == CopyStoreSkuModeUpdate {
|
||||||
|
sqlDelete := `
|
||||||
|
DELETE t1
|
||||||
|
FROM store_sku_bind t1
|
||||||
|
JOIN sku t2 ON t1.sku_id = t2.id
|
||||||
|
JOIN sku_name t3 ON t2.name_id = t3.id
|
||||||
|
WHERE t1.store_id = ? AND t1.deleted_at = ?
|
||||||
|
`
|
||||||
|
sqlDeleteParams := []interface{}{
|
||||||
|
toStoreID,
|
||||||
|
utils.DefaultTimeValue,
|
||||||
|
}
|
||||||
|
if copyMode == CopyStoreSkuModeUpdate {
|
||||||
|
sqlDelete += sqlCatAndSku
|
||||||
|
sqlDeleteParams = append(sqlDeleteParams, sqlCatAndSkuParams)
|
||||||
|
}
|
||||||
|
if _, err = dao.ExecuteSQL(db, sqlDelete, sqlDeleteParams); err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sql := `
|
||||||
|
INSERT INTO store_sku_bind(created_at, updated_at, last_operator, deleted_at, store_id, sku_id, sub_store_id, price, unit_price, status, jd_sync_status, elm_sync_status, ebai_sync_status)
|
||||||
|
SELECT NOW(), NOW(), ?, ?,
|
||||||
|
?, t1.sku_id, 0, t1.price * ? / 100, t1.unit_price * ? / 100, t1.status, ?, ?, ?
|
||||||
|
FROM store_sku_bind t1
|
||||||
|
JOIN sku t2 ON t1.sku_id = t2.id
|
||||||
|
JOIN sku_name t3 ON t2.name_id = t3.id
|
||||||
|
WHERE t1.store_id = ? AND t1.deleted_at = ?
|
||||||
|
`
|
||||||
|
sqlParams := []interface{}{
|
||||||
|
userName,
|
||||||
|
utils.DefaultTimeValue,
|
||||||
|
toStoreID,
|
||||||
|
pricePercentage,
|
||||||
|
pricePercentage,
|
||||||
|
model.SyncFlagNewMask,
|
||||||
|
model.SyncFlagNewMask,
|
||||||
|
model.SyncFlagNewMask,
|
||||||
|
fromStoreID,
|
||||||
|
utils.DefaultTimeValue,
|
||||||
|
}
|
||||||
|
sql += sqlCatAndSku
|
||||||
|
sqlParams = append(sqlParams, sqlCatAndSkuParams)
|
||||||
|
num, err = dao.ExecuteSQL(db, sql, sqlParams)
|
||||||
|
if err == nil {
|
||||||
|
dao.Commit(db)
|
||||||
|
}
|
||||||
|
return num, err
|
||||||
|
}
|
||||||
|
|
||||||
func setStoreSkuBindStatus(skuBind *model.StoreSkuBind, status int8) {
|
func setStoreSkuBindStatus(skuBind *model.StoreSkuBind, status int8) {
|
||||||
skuBind.JdSyncStatus |= status
|
skuBind.JdSyncStatus |= status
|
||||||
skuBind.ElmSyncStatus |= status
|
skuBind.ElmSyncStatus |= status
|
||||||
|
|||||||
@@ -180,8 +180,8 @@ func (p *PurchaseHandler) syncOneStoreSkus(db *dao.DaoDB, storeID int, skuIDs []
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *PurchaseHandler) SyncStoreCategories(db *dao.DaoDB, storeIDs []int, userName string) (err error) {
|
func (p *PurchaseHandler) SyncStoresCategories(db *dao.DaoDB, storeIDs []int, userName string) (err error) {
|
||||||
globals.SugarLogger.Debugf("SyncStoreCategories storeIDs:%d, userName:%s", storeIDs, userName)
|
globals.SugarLogger.Debugf("SyncStoresCategories storeIDs:%d, userName:%s", storeIDs, userName)
|
||||||
|
|
||||||
for _, storeID := range storeIDs {
|
for _, storeID := range storeIDs {
|
||||||
if err = p.SyncOneStoreCategories(db, storeID, userName); err != nil {
|
if err = p.SyncOneStoreCategories(db, storeID, userName); err != nil {
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import (
|
|||||||
"git.rosy.net.cn/jx-callback/business/model/dao"
|
"git.rosy.net.cn/jx-callback/business/model/dao"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestSyncStoreSkus(t *testing.T) {
|
func TestSyncStoresSkus(t *testing.T) {
|
||||||
db := dao.GetDB()
|
db := dao.GetDB()
|
||||||
err := new(PurchaseHandler).SyncStoresSkus(db, []int{100077}, []int{7}, false, "autotest")
|
err := new(PurchaseHandler).SyncStoresSkus(db, []int{100077}, []int{7}, false, "autotest")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import (
|
|||||||
"git.rosy.net.cn/jx-callback/business/model/dao"
|
"git.rosy.net.cn/jx-callback/business/model/dao"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (p *PurchaseHandler) SyncStoreCategories(db *dao.DaoDB, storeIDs []int, userName string) (err error) {
|
func (p *PurchaseHandler) SyncStoresCategories(db *dao.DaoDB, storeIDs []int, userName string) (err error) {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
func (p *PurchaseHandler) ReadStoreCategories(storeID int) (cats []*model.SkuCategory, err error) {
|
func (p *PurchaseHandler) ReadStoreCategories(storeID int) (cats []*model.SkuCategory, err error) {
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ func (p *PurchaseHandler) SyncStoresSkus(db *dao.DaoDB, storeIDs []int, skuIDs [
|
|||||||
if len(skuIDs) < MaxSkuBatchSize {
|
if len(skuIDs) < MaxSkuBatchSize {
|
||||||
parallelCount = 10
|
parallelCount = 10
|
||||||
}
|
}
|
||||||
task := tasksch.RunManagedTask("SyncStoreSkus", false, nil, parallelCount, 1, userName, func(batchItemList []interface{}, params ...interface{}) (interface{}, error) {
|
task := tasksch.RunManagedTask("SyncStoresSkus", false, nil, parallelCount, 1, userName, func(batchItemList []interface{}, params ...interface{}) (interface{}, error) {
|
||||||
storeID := batchItemList[0].(int)
|
storeID := batchItemList[0].(int)
|
||||||
sqlParams := []interface{}{
|
sqlParams := []interface{}{
|
||||||
utils.DefaultTimeValue,
|
utils.DefaultTimeValue,
|
||||||
|
|||||||
@@ -122,3 +122,22 @@ func (c *StoreSkuController) UpdateStoresSkus() {
|
|||||||
return retVal, "", err
|
return retVal, "", err
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// @Title 拷贝门店SKU信息
|
||||||
|
// @Description 拷贝门店SKU信息
|
||||||
|
// @Param token header string true "认证token"
|
||||||
|
// @Param fromStoreID formData int true "源门店ID"
|
||||||
|
// @Param toStoreID formData int true "目标门店ID"
|
||||||
|
// @Param copyMode formData string true "拷贝模式,fresh:目标门店数据全部清除后拷贝,update:确保指定的源数据全部拷贝,已有的忽略"
|
||||||
|
// @Param pricePercentage formData int false "价格调整百分比,缺省为100%"
|
||||||
|
// @Param categoryIDs formData string false "json数据,skuName所属的类别,[1,2,3]"
|
||||||
|
// @Param skuIDs formData string false "json数据,skuID列表,[1,2,3]"
|
||||||
|
// @Success 200 {object} controllers.CallResult
|
||||||
|
// @Failure 200 {object} controllers.CallResult
|
||||||
|
// @router /CopyStoreSkus [post]
|
||||||
|
func (c *StoreSkuController) CopyStoreSkus() {
|
||||||
|
c.callCopyStoreSkus(func(params *tStoreSkuCopyStoreSkusParams) (retVal interface{}, errCode string, err error) {
|
||||||
|
retVal, err = cms.CopyStoreSkus(params.FromStoreID, params.ToStoreID, params.CopyMode, params.MapData, GetUserNameFromToken(params.Token))
|
||||||
|
return retVal, "", err
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|||||||
@@ -423,6 +423,14 @@ func init() {
|
|||||||
MethodParams: param.Make(),
|
MethodParams: param.Make(),
|
||||||
Params: nil})
|
Params: nil})
|
||||||
|
|
||||||
|
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"],
|
||||||
|
beego.ControllerComments{
|
||||||
|
Method: "CopyStoreSkus",
|
||||||
|
Router: `/CopyStoreSkus`,
|
||||||
|
AllowHTTPMethods: []string{"post"},
|
||||||
|
MethodParams: param.Make(),
|
||||||
|
Params: nil})
|
||||||
|
|
||||||
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"],
|
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"],
|
||||||
beego.ControllerComments{
|
beego.ControllerComments{
|
||||||
Method: "GetStoreSkus",
|
Method: "GetStoreSkus",
|
||||||
@@ -433,8 +441,8 @@ func init() {
|
|||||||
|
|
||||||
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"],
|
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"],
|
||||||
beego.ControllerComments{
|
beego.ControllerComments{
|
||||||
Method: "SyncStoreSkus",
|
Method: "SyncStoresSkus",
|
||||||
Router: `/SyncStoreSkus`,
|
Router: `/SyncStoresSkus`,
|
||||||
AllowHTTPMethods: []string{"put"},
|
AllowHTTPMethods: []string{"put"},
|
||||||
MethodParams: param.Make(),
|
MethodParams: param.Make(),
|
||||||
Params: nil})
|
Params: nil})
|
||||||
|
|||||||
Reference in New Issue
Block a user