- sku almost ok.
This commit is contained in:
@@ -3,6 +3,8 @@ package cms
|
||||
import (
|
||||
"errors"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
"git.rosy.net.cn/jx-callback/business/model"
|
||||
@@ -148,9 +150,9 @@ func GetSkuNames(keyword string, params map[string]interface{}, offset, pageSize
|
||||
sql += ")"
|
||||
}
|
||||
|
||||
if params["id"] != nil {
|
||||
if params["nameID"] != nil {
|
||||
sql += " AND t1.id = ?"
|
||||
sqlParams = append(sqlParams, params["id"].(int))
|
||||
sqlParams = append(sqlParams, params["nameID"].(int))
|
||||
}
|
||||
if params["categoryID"] != nil {
|
||||
sql += " AND t1.category_id = ?"
|
||||
@@ -172,16 +174,28 @@ func GetSkuNames(keyword string, params map[string]interface{}, offset, pageSize
|
||||
sql += " AND t1.unit = ?"
|
||||
sqlParams = append(sqlParams, params["unit"].(string))
|
||||
}
|
||||
if params["placeCode"] != nil {
|
||||
sql += " AND (SELECT COUNT(*) FROM sku_name_place_bind bind WHERE bind.sku_name_id = t1.id AND bind.place_code = ?) > 0"
|
||||
sqlParams = append(sqlParams, params["placeCode"].(int))
|
||||
}
|
||||
if params["isGlobal"] != nil {
|
||||
if params["isGlobal"].(bool) {
|
||||
sql += " AND t1.is_global = 1"
|
||||
if placeCond := strings.ToUpper(utils.Interface2String(params["placeCond"])); placeCond == "AND" || placeCond == "OR" {
|
||||
if placeCond == "AND" {
|
||||
sql += " AND ( 1 = 1"
|
||||
} else {
|
||||
sql += " AND t1.is_global = 0"
|
||||
sql += " AND ( 1 = 0"
|
||||
}
|
||||
if params["placeCode"] != nil {
|
||||
sql += " " + placeCond + " (SELECT COUNT(*) FROM sku_name_place_bind bind WHERE bind.sku_name_id = t1.id AND bind.place_code = ?) > 0"
|
||||
sqlParams = append(sqlParams, params["placeCode"].(int))
|
||||
}
|
||||
if params["isGlobal"] != nil {
|
||||
if params["isGlobal"].(bool) {
|
||||
sql += " " + placeCond + " t1.is_global = 1"
|
||||
} else {
|
||||
sql += " " + placeCond + " t1.is_global = 0"
|
||||
}
|
||||
}
|
||||
sql += ")"
|
||||
}
|
||||
if params["skuID"] != nil {
|
||||
sql += " AND t2.id = ?"
|
||||
sqlParams = append(sqlParams, params["skuID"].(int))
|
||||
}
|
||||
if params["fromStatus"] != nil {
|
||||
fromStatus := params["fromStatus"].(int)
|
||||
@@ -284,7 +298,7 @@ func AddSkuName(skuNameExt *SkuNameExt, userName string) (outSkuNameExt *SkuName
|
||||
return nil, ErrEntityNotExist
|
||||
}
|
||||
outSkuNameExt = tmpInfo.SkuNames[0]
|
||||
err = CurVendorSync.SyncSku(db, &outSkuNameExt.SkuName, -1, false, userName)
|
||||
err = CurVendorSync.SyncSku(db, outSkuNameExt.SkuName.ID, -1, false, userName)
|
||||
return outSkuNameExt, err
|
||||
}
|
||||
|
||||
@@ -296,13 +310,89 @@ func UpdateSkuName(nameID int, payload map[string]interface{}, userName string)
|
||||
db := dao.GetDB()
|
||||
if num, err = dao.UpdateEntityByKV(db, skuName, valid, nil); err == nil && num == 1 {
|
||||
sku := &model.Sku{}
|
||||
_, err2 := dao.UpdateEntityByKV(db, sku, utils.Params2Map(model.FieldSyncStatus, model.SyncFlagModifiedMask), utils.Params2Map(model.FieldNameID, skuName.ID))
|
||||
_, err2 := dao.UpdateEntityByKV(db, sku, utils.Params2Map(model.FieldJdSyncStatus, model.SyncFlagModifiedMask), utils.Params2Map(model.FieldNameID, skuName.ID))
|
||||
if err = err2; err == nil {
|
||||
if err = dao.GetEntity(db, skuName); err == nil {
|
||||
err = CurVendorSync.SyncSku(db, skuName, -1, false, userName)
|
||||
err = CurVendorSync.SyncSku(db, skuName.ID, -1, false, userName)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return num, err
|
||||
}
|
||||
|
||||
func DeleteSkuName(nameID int, userName string) (num int64, err error) {
|
||||
db := dao.GetDB()
|
||||
dao.Begin(db)
|
||||
skuName := &model.SkuName{}
|
||||
skuName.ID = nameID
|
||||
if num, err = dao.DeleteEntity(db, skuName, nil, userName, nil); err == nil && num == 1 {
|
||||
dummy := &model.Sku{}
|
||||
num2, err2 := dao.UpdateEntityByKV(db, dummy, map[string]interface{}{
|
||||
model.FieldDeletedAt: time.Now(),
|
||||
model.FieldLastOperator: userName,
|
||||
model.FieldJdSyncStatus: model.SyncFlagDeletedMask,
|
||||
"Status": model.SkuStatusDeleted,
|
||||
}, utils.Params2Map(model.FieldNameID, skuName.ID))
|
||||
if err2 == nil {
|
||||
dao.Commit(db)
|
||||
if num2 > 0 {
|
||||
err = CurVendorSync.SyncSku(db, skuName.ID, -1, false, userName)
|
||||
}
|
||||
return num, err
|
||||
}
|
||||
}
|
||||
dao.Rollback(db)
|
||||
return num, err
|
||||
}
|
||||
|
||||
func AddSku(nameID int, sku *model.Sku, userName string) (outSkuNameExt *SkuNameExt, err error) {
|
||||
db := dao.GetDB()
|
||||
dao.WrapAddIDCULDEntity(sku, userName)
|
||||
sku.JdSyncStatus = model.SyncFlagNewMask
|
||||
sku.NameID = nameID
|
||||
if err = dao.CreateEntity(db, sku); err == nil {
|
||||
result, err2 := GetSkuNames("", utils.Params2Map("skuID", sku.ID), 0, 0)
|
||||
if err = err2; err == nil {
|
||||
if result.TotalCount == 1 {
|
||||
outSkuNameExt = result.SkuNames[0]
|
||||
err = CurVendorSync.SyncSku(db, outSkuNameExt.SkuName.ID, sku.ID, false, userName)
|
||||
} else {
|
||||
err = ErrEntityNotExist
|
||||
}
|
||||
}
|
||||
}
|
||||
return outSkuNameExt, err
|
||||
}
|
||||
|
||||
func UpdateSku(skuID int, payload map[string]interface{}, userName string) (num int64, err error) {
|
||||
sku := &model.Sku{}
|
||||
sku.ID = skuID
|
||||
valid := dao.NormalMakeMapByStructObject(payload, sku, userName)
|
||||
if len(valid) > 0 {
|
||||
valid[model.FieldJdSyncStatus] = model.SyncFlagModifiedMask
|
||||
db := dao.GetDB()
|
||||
if num, err = dao.UpdateEntityByKV(db, sku, valid, nil); err == nil {
|
||||
if num == 1 {
|
||||
err = CurVendorSync.SyncSku(db, -1, sku.ID, false, userName)
|
||||
} else {
|
||||
err = ErrEntityNotExist
|
||||
}
|
||||
}
|
||||
}
|
||||
return num, err
|
||||
}
|
||||
|
||||
func DeleteSku(skuID int, userName string) (num int64, err error) {
|
||||
db := dao.GetDB()
|
||||
sku := &model.Sku{}
|
||||
sku.ID = skuID
|
||||
if num, err = dao.DeleteEntity(db, sku, nil, userName, nil); err == nil {
|
||||
if num == 1 {
|
||||
err = CurVendorSync.SyncSku(db, -1, sku.ID, false, userName)
|
||||
} else {
|
||||
err = ErrEntityNotExist
|
||||
}
|
||||
}
|
||||
return num, err
|
||||
}
|
||||
|
||||
@@ -95,9 +95,9 @@ func GetStores(keyword string, params map[string]interface{}, offset, pageSize i
|
||||
sqlWhere += " 1 = 1"
|
||||
}
|
||||
|
||||
if params["id"] != nil {
|
||||
if params["storeID"] != nil {
|
||||
sqlWhere += " AND t1.id = ?"
|
||||
sqlParams = append(sqlParams, params["id"].(int))
|
||||
sqlParams = append(sqlParams, params["storeID"].(int))
|
||||
}
|
||||
if params["name"] != nil {
|
||||
sqlWhere += " AND t1.name LIKE ?"
|
||||
|
||||
@@ -66,12 +66,19 @@ func (v *VendorSync) SyncStore(db *dao.DaoDB, vendorID int, store *model.Store,
|
||||
return err
|
||||
}
|
||||
|
||||
func (v *VendorSync) SyncSku(db *dao.DaoDB, skuName *model.SkuName, skuID int, isForce bool, userName string) (err error) {
|
||||
func (v *VendorSync) SyncSku(db *dao.DaoDB, nameID, skuID int, isForce bool, userName string) (err error) {
|
||||
if db == nil {
|
||||
db = dao.GetDB()
|
||||
}
|
||||
var skuList []*model.Sku
|
||||
if err = dao.GetEntities(db, &skuList, utils.Params2Map(model.FieldNameID, skuName.ID), true); err == nil {
|
||||
cond := make(map[string]interface{})
|
||||
if nameID != -1 {
|
||||
cond[model.FieldNameID] = nameID
|
||||
}
|
||||
if skuID != -1 {
|
||||
cond[model.FieldID] = skuID
|
||||
}
|
||||
if err = dao.GetEntities(db, &skuList, cond, true); err == nil {
|
||||
for _, sku := range skuList {
|
||||
if (skuID == -1 || skuID == sku.ID) && (isForce || sku.JdSyncStatus != 0) {
|
||||
if sku.JdSyncStatus&model.SyncFlagDeletedMask != 0 { // 删除
|
||||
@@ -83,7 +90,7 @@ func (v *VendorSync) SyncSku(db *dao.DaoDB, skuName *model.SkuName, skuID int, i
|
||||
}
|
||||
if err == nil {
|
||||
sku.JdSyncStatus = 0
|
||||
dao.UpdateEntity(db, sku, model.FieldSyncStatus)
|
||||
dao.UpdateEntity(db, sku, model.FieldJdSyncStatus)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -151,7 +151,8 @@ type Sku struct {
|
||||
|
||||
func (*Sku) TableUnique() [][]string {
|
||||
return [][]string{
|
||||
[]string{"NameID", "SpecQuality", "SpecUnit"},
|
||||
[]string{"NameID", "SpecQuality", "SpecUnit", "DeletedAt"},
|
||||
[]string{"JdID", "DeletedAt"},
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -85,14 +85,14 @@ func (c *SkuController) UpdateCategory() {
|
||||
// @Description 商品类别重排序(区别于厂商家SKU类别)
|
||||
// @Param token header string true "认证token"
|
||||
// @Param categoryID formData int true "父ID"
|
||||
// @Param ids formData string true "同一父类别下的所有子类别ID列表([1,2,3,4])"
|
||||
// @Param categoryIDs formData string true "同一父类别下的所有子类别ID列表([1,2,3,4])"
|
||||
// @Success 200 {object} controllers.CallResult
|
||||
// @Failure 200 {object} controllers.CallResult
|
||||
// @router /ReorderCategories [put]
|
||||
func (c *SkuController) ReorderCategories() {
|
||||
c.callReorderCategories(func(params *tSkuReorderCategoriesParams) (retVal interface{}, errCode string, err error) {
|
||||
var idList []int
|
||||
if err = utils.UnmarshalUseNumber([]byte(params.Ids), &idList); err == nil {
|
||||
if err = utils.UnmarshalUseNumber([]byte(params.CategoryIDs), &idList); err == nil {
|
||||
err = cms.ReorderCategories(params.CategoryID, idList, GetUserNameFromToken(params.Token))
|
||||
}
|
||||
return retVal, "", err
|
||||
@@ -117,9 +117,11 @@ func (c *SkuController) DeleteCategory() {
|
||||
// @Description 得到商品信息,如下条件之间是与的关系
|
||||
// @Param token header string true "认证token"
|
||||
// @Param keyword query string false "查询关键字(可以为空,为空表示不限制)"
|
||||
// @Param id query int false "SkuName ID"
|
||||
// @Param nameID query int false "SkuName ID"
|
||||
// @Param skuID query int false "Sku ID"
|
||||
// @Param name query string false "商品名称(不要求完全一致)"
|
||||
// @Param prefix query string false "商品前缀(不要求完全一致)"
|
||||
// @Param placeCond query string false "查询地点的条件,and:与,or:或,指的是placeCode,isGlobal这两个条件间的关系,这组条件与其它条件都是与的关系"
|
||||
// @Param placeCode query int false "可售地点Code"
|
||||
// @Param isGlobal query bool false "是否全球可售"
|
||||
// @Param categoryID query int false "商品所属类别ID"
|
||||
@@ -139,8 +141,8 @@ func (c *SkuController) GetSkuNames() {
|
||||
})
|
||||
}
|
||||
|
||||
// @Title 新增商品信息
|
||||
// @Description 新增商品信息
|
||||
// @Title 新增商品名(及商品)信息
|
||||
// @Description 新增商品名(及商品)信息
|
||||
// @Param token header string true "认证token"
|
||||
// @Param payload formData string true "json数据,SkuNameExt对象(),可传Skus"
|
||||
// @Success 200 {object} controllers.CallResult
|
||||
@@ -173,3 +175,67 @@ func (c *SkuController) UpdateSkuName() {
|
||||
return retVal, "", err
|
||||
})
|
||||
}
|
||||
|
||||
// @Title 删除商品名
|
||||
// @Description 此前商品名下的所有商品也会被级连删除
|
||||
// @Param token header string true "认证token"
|
||||
// @Param nameID query int true "商品名ID"
|
||||
// @Success 200 {object} controllers.CallResult
|
||||
// @Failure 200 {object} controllers.CallResult
|
||||
// @router /DeleteSkuName [delete]
|
||||
func (c *SkuController) DeleteSkuName() {
|
||||
c.callDeleteSkuName(func(params *tSkuDeleteSkuNameParams) (retVal interface{}, errCode string, err error) {
|
||||
retVal, err = cms.DeleteSkuName(params.NameID, GetUserNameFromToken(params.Token))
|
||||
return retVal, "", err
|
||||
})
|
||||
}
|
||||
|
||||
// @Title 新增商品
|
||||
// @Description 新增商品
|
||||
// @Param token header string true "认证token"
|
||||
// @Param nameID formData int true "商品名ID, playload中的相应字段会被忽略"
|
||||
// @Param payload formData string true "json数据,Sku对象()"
|
||||
// @Success 200 {object} controllers.CallResult
|
||||
// @Failure 200 {object} controllers.CallResult
|
||||
// @router /AddSku [post]
|
||||
func (c *SkuController) AddSku() {
|
||||
c.callAddSku(func(params *tSkuAddSkuParams) (retVal interface{}, errCode string, err error) {
|
||||
sku := &model.Sku{}
|
||||
if err = utils.UnmarshalUseNumber([]byte(params.Payload), sku); err == nil {
|
||||
retVal, err = cms.AddSku(params.NameID, sku, GetUserNameFromToken(params.Token))
|
||||
}
|
||||
return retVal, "", err
|
||||
})
|
||||
}
|
||||
|
||||
// @Title 修改商品信息
|
||||
// @Description 修改商品信息
|
||||
// @Param token header string true "认证token"
|
||||
// @Param skuID formData int true "需要修改的商品名ID,payload中的相应数据会被忽略"
|
||||
// @Param payload formData string true "json数据,Sku对象"
|
||||
// @Success 200 {object} controllers.CallResult
|
||||
// @Failure 200 {object} controllers.CallResult
|
||||
// @router /UpdateSku [put]
|
||||
func (c *SkuController) UpdateSku() {
|
||||
c.callUpdateSku(func(params *tSkuUpdateSkuParams) (retVal interface{}, errCode string, err error) {
|
||||
payload := make(map[string]interface{})
|
||||
if err = utils.UnmarshalUseNumber([]byte(params.Payload), &payload); err == nil {
|
||||
retVal, err = cms.UpdateSku(params.SkuID, payload, GetUserNameFromToken(params.Token))
|
||||
}
|
||||
return retVal, "", err
|
||||
})
|
||||
}
|
||||
|
||||
// @Title 删除商品
|
||||
// @Description 删除商品
|
||||
// @Param token header string true "认证token"
|
||||
// @Param skuID query int true "商品ID"
|
||||
// @Success 200 {object} controllers.CallResult
|
||||
// @Failure 200 {object} controllers.CallResult
|
||||
// @router /DeleteSku [delete]
|
||||
func (c *SkuController) DeleteSku() {
|
||||
c.callDeleteSku(func(params *tSkuDeleteSkuParams) (retVal interface{}, errCode string, err error) {
|
||||
retVal, err = cms.DeleteSku(params.SkuID, GetUserNameFromToken(params.Token))
|
||||
return retVal, "", err
|
||||
})
|
||||
}
|
||||
|
||||
@@ -74,7 +74,7 @@ func (c *StoreController) UpdatePlace() {
|
||||
// @Description 得到京西门店信息,如下条件之间是与的关系
|
||||
// @Param token header string true "认证token"
|
||||
// @Param keyword query string false "查询关键字(可以为空,为空表示不限制)"
|
||||
// @Param id query int false "门店ID"
|
||||
// @Param storeID query int false "门店ID"
|
||||
// @Param name query string false "门店名称(不要求完全一致)"
|
||||
// @Param placeID query int false "所属地点ID"
|
||||
// @Param placeLevel query int false "所属地点级别"
|
||||
|
||||
@@ -143,6 +143,14 @@ func init() {
|
||||
MethodParams: param.Make(),
|
||||
Params: nil})
|
||||
|
||||
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"],
|
||||
beego.ControllerComments{
|
||||
Method: "AddSku",
|
||||
Router: `/AddSku`,
|
||||
AllowHTTPMethods: []string{"post"},
|
||||
MethodParams: param.Make(),
|
||||
Params: nil})
|
||||
|
||||
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"],
|
||||
beego.ControllerComments{
|
||||
Method: "AddSkuName",
|
||||
@@ -159,6 +167,22 @@ func init() {
|
||||
MethodParams: param.Make(),
|
||||
Params: nil})
|
||||
|
||||
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"],
|
||||
beego.ControllerComments{
|
||||
Method: "DeleteSku",
|
||||
Router: `/DeleteSku`,
|
||||
AllowHTTPMethods: []string{"delete"},
|
||||
MethodParams: param.Make(),
|
||||
Params: nil})
|
||||
|
||||
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"],
|
||||
beego.ControllerComments{
|
||||
Method: "DeleteSkuName",
|
||||
Router: `/DeleteSkuName`,
|
||||
AllowHTTPMethods: []string{"delete"},
|
||||
MethodParams: param.Make(),
|
||||
Params: nil})
|
||||
|
||||
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"],
|
||||
beego.ControllerComments{
|
||||
Method: "GetCategories",
|
||||
@@ -199,6 +223,14 @@ func init() {
|
||||
MethodParams: param.Make(),
|
||||
Params: nil})
|
||||
|
||||
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"],
|
||||
beego.ControllerComments{
|
||||
Method: "UpdateSku",
|
||||
Router: `/UpdateSku`,
|
||||
AllowHTTPMethods: []string{"put"},
|
||||
MethodParams: param.Make(),
|
||||
Params: nil})
|
||||
|
||||
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"],
|
||||
beego.ControllerComments{
|
||||
Method: "UpdateSkuName",
|
||||
|
||||
Reference in New Issue
Block a user