- move some funcs from jxtools to dao.
This commit is contained in:
@@ -19,6 +19,7 @@ var (
|
|||||||
|
|
||||||
var (
|
var (
|
||||||
ErrHaveNotImplementedYet = errors.New("还没有实现")
|
ErrHaveNotImplementedYet = errors.New("还没有实现")
|
||||||
|
ErrEntityNotExist = errors.New("找不到相应实体")
|
||||||
)
|
)
|
||||||
|
|
||||||
func GetPurchaseHandler(vendorID int) partner.IPurchasePlatformHandler {
|
func GetPurchaseHandler(vendorID int) partner.IPurchasePlatformHandler {
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import (
|
|||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
"git.rosy.net.cn/baseapi/utils"
|
"git.rosy.net.cn/baseapi/utils"
|
||||||
"git.rosy.net.cn/jx-callback/business/jxutils"
|
|
||||||
"git.rosy.net.cn/jx-callback/business/model"
|
"git.rosy.net.cn/jx-callback/business/model"
|
||||||
"git.rosy.net.cn/jx-callback/business/model/dao"
|
"git.rosy.net.cn/jx-callback/business/model/dao"
|
||||||
)
|
)
|
||||||
@@ -52,9 +51,8 @@ func GetCategories(parentID int) (cats []*model.SkuCategory, err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func AddCategory(cat *model.SkuCategory, userName string) (outCat *model.SkuCategory, err error) {
|
func AddCategory(cat *model.SkuCategory, userName string) (outCat *model.SkuCategory, err error) {
|
||||||
cat.ID = 0
|
dao.WrapAddIDCULDEntity(cat, userName)
|
||||||
cat.JdSyncStatus = model.SyncFlagNewMask
|
cat.JdSyncStatus = model.SyncFlagNewMask
|
||||||
cat.DeletedAt = utils.DefaultTimeValue
|
|
||||||
if err = dao.CreateEntity(nil, cat); err == nil {
|
if err = dao.CreateEntity(nil, cat); err == nil {
|
||||||
outCat = cat
|
outCat = cat
|
||||||
err = CurVendorSync.SyncCategory(cat.ID, false, userName)
|
err = CurVendorSync.SyncCategory(cat.ID, false, userName)
|
||||||
@@ -65,7 +63,7 @@ func AddCategory(cat *model.SkuCategory, userName string) (outCat *model.SkuCate
|
|||||||
func UpdateCategory(categoryID int, payload map[string]interface{}, userName string) (num int64, err error) {
|
func UpdateCategory(categoryID int, payload map[string]interface{}, userName string) (num int64, err error) {
|
||||||
cat := &model.SkuCategory{}
|
cat := &model.SkuCategory{}
|
||||||
cat.ID = categoryID
|
cat.ID = categoryID
|
||||||
valid := jxutils.NormalMakeMapByStructObject(payload, cat, userName)
|
valid := dao.NormalMakeMapByStructObject(payload, cat, userName)
|
||||||
valid[model.FieldJdSyncStatus] = model.SyncFlagModifiedMask
|
valid[model.FieldJdSyncStatus] = model.SyncFlagModifiedMask
|
||||||
db := dao.GetDB()
|
db := dao.GetDB()
|
||||||
if num, err = dao.UpdateEntityByKV(db, cat, valid, nil); err == nil {
|
if num, err = dao.UpdateEntityByKV(db, cat, valid, nil); err == nil {
|
||||||
@@ -96,6 +94,7 @@ func ReorderCategories(parentID int, categoryIDs []int, userName string) (err er
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// todo 这里应该也需要先置标记
|
||||||
if err == nil {
|
if err == nil {
|
||||||
err = GetPurchaseHandler(model.VendorIDJD).ReorderCategories(parentCat, userName)
|
err = GetPurchaseHandler(model.VendorIDJD).ReorderCategories(parentCat, userName)
|
||||||
}
|
}
|
||||||
@@ -262,8 +261,31 @@ func GetSkuNames(keyword string, params map[string]interface{}, offset, pageSize
|
|||||||
return skuNamesInfo, err
|
return skuNamesInfo, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func AddSkuName(skuNameID int, payload map[string]interface{}) (num int64, err error) {
|
func AddSkuName(skuNameExt *SkuNameExt, userName string) (outSkuNameExt *SkuNameExt, err error) {
|
||||||
return num, err
|
db := dao.GetDB()
|
||||||
|
dao.Begin(db)
|
||||||
|
dao.WrapAddIDCULDEntity(&skuNameExt.SkuName, userName)
|
||||||
|
if err = dao.CreateEntity(db, &skuNameExt.SkuName); err != nil {
|
||||||
|
dao.Rollback(db)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
for _, sku := range skuNameExt.Skus {
|
||||||
|
dao.WrapAddIDCULDEntity(sku, userName)
|
||||||
|
if err = dao.CreateEntity(db, sku); err != nil {
|
||||||
|
dao.Rollback(db)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
dao.Commit(db)
|
||||||
|
tmpInfo, err := GetSkuNames("", utils.Params2Map("id", skuNameExt.SkuName.ID), 0, 1)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if tmpInfo.TotalCount != 1 {
|
||||||
|
return nil, ErrEntityNotExist
|
||||||
|
}
|
||||||
|
outSkuNameExt = tmpInfo.SkuNames[0]
|
||||||
|
return outSkuNameExt, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func UpdateSkuName(skuNameID int, payload map[string]interface{}) (num int64, err error) {
|
func UpdateSkuName(skuNameID int, payload map[string]interface{}) (num int64, err error) {
|
||||||
|
|||||||
@@ -4,10 +4,8 @@ import (
|
|||||||
"errors"
|
"errors"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
|
||||||
|
|
||||||
"git.rosy.net.cn/baseapi/utils"
|
"git.rosy.net.cn/baseapi/utils"
|
||||||
"git.rosy.net.cn/jx-callback/business/jxutils"
|
|
||||||
"git.rosy.net.cn/jx-callback/business/model"
|
"git.rosy.net.cn/jx-callback/business/model"
|
||||||
"git.rosy.net.cn/jx-callback/business/model/dao"
|
"git.rosy.net.cn/jx-callback/business/model/dao"
|
||||||
"git.rosy.net.cn/jx-callback/globals"
|
"git.rosy.net.cn/jx-callback/globals"
|
||||||
@@ -57,11 +55,7 @@ func UpdatePlaces(places []map[string]interface{}, userName string) (num int64,
|
|||||||
return 0, ErrMissingInput
|
return 0, ErrMissingInput
|
||||||
}
|
}
|
||||||
placeid := &model.Place{}
|
placeid := &model.Place{}
|
||||||
globals.SugarLogger.Debug(utils.Format4Output(place, false))
|
valid := dao.NormalMakeMapByFieldList(place, []string{"jdCode", "enabled", "mtpsPrice"}, userName)
|
||||||
valid, _ := jxutils.FilterMapByFieldList(place, []string{"jdCode", "enabled", "mtpsPrice"})
|
|
||||||
valid["updatedAt"] = time.Now()
|
|
||||||
valid["lastOperator"] = userName
|
|
||||||
globals.SugarLogger.Debug(valid)
|
|
||||||
if num, err = dao.UpdateEntityByKV(nil, placeid, valid, utils.Params2Map("Code", place["code"])); err != nil {
|
if num, err = dao.UpdateEntityByKV(nil, placeid, valid, utils.Params2Map("Code", place["code"])); err != nil {
|
||||||
return num, err
|
return num, err
|
||||||
}
|
}
|
||||||
@@ -74,6 +68,7 @@ func UpdatePlace(placeCode int, payload map[string]interface{}, userName string)
|
|||||||
return UpdatePlaces([]map[string]interface{}{payload}, userName)
|
return UpdatePlaces([]map[string]interface{}{payload}, userName)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// todo 门店绑定信息可以考虑以数组形式返回,而不是现在这样
|
||||||
func GetStores(keyword string, params map[string]interface{}, offset, pageSize int) (retVal *StoresInfo, err error) {
|
func GetStores(keyword string, params map[string]interface{}, offset, pageSize int) (retVal *StoresInfo, err error) {
|
||||||
sql := `
|
sql := `
|
||||||
FROM store t1
|
FROM store t1
|
||||||
@@ -205,7 +200,7 @@ func GetVendorStore(vendorStoreID string, vendorID int) (retVal *StoreExt, err e
|
|||||||
func UpdateStore(storeID int, payload map[string]interface{}, userName string) (num int64, err error) {
|
func UpdateStore(storeID int, payload map[string]interface{}, userName string) (num int64, err error) {
|
||||||
store := &model.Store{}
|
store := &model.Store{}
|
||||||
store.ID = storeID
|
store.ID = storeID
|
||||||
valid := jxutils.NormalMakeMapByStructObject(payload, store, userName)
|
valid := dao.NormalMakeMapByStructObject(payload, store, userName)
|
||||||
db := dao.GetDB()
|
db := dao.GetDB()
|
||||||
if num, err = dao.UpdateEntityByKV(db, store, valid, nil); err == nil {
|
if num, err = dao.UpdateEntityByKV(db, store, valid, nil); err == nil {
|
||||||
dummy := &model.StoreMap{}
|
dummy := &model.StoreMap{}
|
||||||
@@ -220,10 +215,7 @@ func UpdateStore(storeID int, payload map[string]interface{}, userName string) (
|
|||||||
}
|
}
|
||||||
|
|
||||||
func CreateStore(store *model.Store, userName string) (id int, err error) {
|
func CreateStore(store *model.Store, userName string) (id int, err error) {
|
||||||
store.ID = 0
|
dao.WrapAddIDCULEntity(store, userName)
|
||||||
store.LastOperator = userName
|
|
||||||
store.CreatedAt = time.Now()
|
|
||||||
store.UpdatedAt = store.CreatedAt
|
|
||||||
if err = dao.CreateEntity(nil, store); err == nil {
|
if err = dao.CreateEntity(nil, store); err == nil {
|
||||||
return store.ID, nil
|
return store.ID, nil
|
||||||
}
|
}
|
||||||
@@ -243,6 +235,7 @@ func GetStoreVendorMaps(db *dao.DaoDB, storeID int, vendorID int) (storeMaps []*
|
|||||||
func AddStoreVendorMap(db *dao.DaoDB, storeMap *model.StoreMap, userName string) (outStoreMap *model.StoreMap, err error) {
|
func AddStoreVendorMap(db *dao.DaoDB, storeMap *model.StoreMap, userName string) (outStoreMap *model.StoreMap, err error) {
|
||||||
store, err := GetPurchaseHandler(storeMap.VendorID).ReadStore(storeMap.VendorStoreID)
|
store, err := GetPurchaseHandler(storeMap.VendorID).ReadStore(storeMap.VendorStoreID)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
|
dao.WrapAddIDCULEntity(storeMap, userName)
|
||||||
storeMap.DeliveryType = store.DeliveryType
|
storeMap.DeliveryType = store.DeliveryType
|
||||||
storeMap.Status = store.Status
|
storeMap.Status = store.Status
|
||||||
storeMap.SyncStatus = model.SyncFlagModifiedMask
|
storeMap.SyncStatus = model.SyncFlagModifiedMask
|
||||||
@@ -271,8 +264,8 @@ func UpdateStoreVendorMap(db *dao.DaoDB, storeID, vendorID int, payload map[stri
|
|||||||
}
|
}
|
||||||
if err == nil {
|
if err == nil {
|
||||||
dummyStoreMap := &model.StoreMap{}
|
dummyStoreMap := &model.StoreMap{}
|
||||||
valid := jxutils.NormalMakeMapByStructObject(payload, dummyStoreMap, userName)
|
valid := dao.NormalMakeMapByStructObject(payload, dummyStoreMap, userName)
|
||||||
if valid["status"] != nil {
|
if valid["status"] != nil { // 对于store vendor map,只有Status改变才需要同步到厂商
|
||||||
valid[model.FieldSyncStatus] = model.SyncFlagModifiedMask
|
valid[model.FieldSyncStatus] = model.SyncFlagModifiedMask
|
||||||
}
|
}
|
||||||
globals.SugarLogger.Debug(utils.Format4Output(valid, false))
|
globals.SugarLogger.Debug(utils.Format4Output(valid, false))
|
||||||
|
|||||||
@@ -96,7 +96,7 @@ func (m *DurableTaskMan) AddItem(taskID, objHint string, funcName string, params
|
|||||||
if item.Params, err = SerializeData(params); err == nil {
|
if item.Params, err = SerializeData(params); err == nil {
|
||||||
db := dao.GetDB()
|
db := dao.GetDB()
|
||||||
if err = dao.CreateEntity(db, item); err == nil {
|
if err = dao.CreateEntity(db, item); err == nil {
|
||||||
err = dao.UpdateEntity(db, d.data, "TotalItem")
|
_, err = dao.UpdateEntity(db, d.data, "TotalItem")
|
||||||
d.items = append(d.items, item)
|
d.items = append(d.items, item)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -302,7 +302,6 @@ func FilterMapByStructObject(mapData map[string]interface{}, obj interface{}, ex
|
|||||||
for _, v := range excludedFields {
|
for _, v := range excludedFields {
|
||||||
excludedMap[v] = 1
|
excludedMap[v] = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
m := Struct2FlatMap(obj)
|
m := Struct2FlatMap(obj)
|
||||||
valid = make(map[string]interface{})
|
valid = make(map[string]interface{})
|
||||||
invalid = make(map[string]interface{})
|
invalid = make(map[string]interface{})
|
||||||
@@ -316,10 +315,6 @@ func FilterMapByStructObject(mapData map[string]interface{}, obj interface{}, ex
|
|||||||
return valid, invalid
|
return valid, invalid
|
||||||
}
|
}
|
||||||
|
|
||||||
func NormalFilterMapByStructObject(mapData map[string]interface{}, obj interface{}) (valid map[string]interface{}, invalid map[string]interface{}) {
|
|
||||||
return FilterMapByStructObject(mapData, obj, []string{"id", "createdAt", "syncStatus", "lastOperator", "updatedAt", "finishedAt"})
|
|
||||||
}
|
|
||||||
|
|
||||||
func FilterMapByFieldList(mapData map[string]interface{}, fields []string) (valid map[string]interface{}, invalid map[string]interface{}) {
|
func FilterMapByFieldList(mapData map[string]interface{}, fields []string) (valid map[string]interface{}, invalid map[string]interface{}) {
|
||||||
valid = make(map[string]interface{})
|
valid = make(map[string]interface{})
|
||||||
invalid = make(map[string]interface{})
|
invalid = make(map[string]interface{})
|
||||||
@@ -336,10 +331,3 @@ func FilterMapByFieldList(mapData map[string]interface{}, fields []string) (vali
|
|||||||
func GetObjFieldByName(obj interface{}, fieldName string) interface{} {
|
func GetObjFieldByName(obj interface{}, fieldName string) interface{} {
|
||||||
return reflect.Indirect(reflect.ValueOf(obj)).FieldByName(fieldName).Interface()
|
return reflect.Indirect(reflect.ValueOf(obj)).FieldByName(fieldName).Interface()
|
||||||
}
|
}
|
||||||
|
|
||||||
func NormalMakeMapByStructObject(mapData map[string]interface{}, obj interface{}, userName string) (retVal map[string]interface{}) {
|
|
||||||
retVal, _ = NormalFilterMapByStructObject(mapData, obj)
|
|
||||||
retVal["lastOperator"] = userName
|
|
||||||
retVal["updatedAt"] = time.Now()
|
|
||||||
return retVal
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -56,6 +56,18 @@ func GetDB() *DaoDB {
|
|||||||
return &DaoDB{db: orm.NewOrm()}
|
return &DaoDB{db: orm.NewOrm()}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Begin(db *DaoDB) error {
|
||||||
|
return db.db.Begin()
|
||||||
|
}
|
||||||
|
|
||||||
|
func Commit(db *DaoDB) error {
|
||||||
|
return db.db.Commit()
|
||||||
|
}
|
||||||
|
|
||||||
|
func Rollback(db *DaoDB) error {
|
||||||
|
return db.db.Rollback()
|
||||||
|
}
|
||||||
|
|
||||||
func GetRow(db *DaoDB, inPtr interface{}, sql string, values ...interface{}) (err error) {
|
func GetRow(db *DaoDB, inPtr interface{}, sql string, values ...interface{}) (err error) {
|
||||||
if db == nil {
|
if db == nil {
|
||||||
db = GetDB()
|
db = GetDB()
|
||||||
@@ -154,7 +166,7 @@ func DeleteEntity(db *DaoDB, item interface{}, conditions map[string]interface{}
|
|||||||
err = utils.CallFuncLogError(func() error {
|
err = utils.CallFuncLogError(func() error {
|
||||||
qs := db.db.QueryTable(item)
|
qs := db.db.QueryTable(item)
|
||||||
if len(conditions) == 0 {
|
if len(conditions) == 0 {
|
||||||
qs = qs.Filter("ID", jxutils.GetObjFieldByName(item, model.FieldID))
|
qs = qs.Filter(model.FieldID, jxutils.GetObjFieldByName(item, model.FieldID))
|
||||||
} else {
|
} else {
|
||||||
for k, v := range conditions {
|
for k, v := range conditions {
|
||||||
qs = qs.Filter(k, v)
|
qs = qs.Filter(k, v)
|
||||||
|
|||||||
80
business/model/dao/dao_utils.go
Normal file
80
business/model/dao/dao_utils.go
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
package dao
|
||||||
|
|
||||||
|
import (
|
||||||
|
"reflect"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"git.rosy.net.cn/baseapi/utils"
|
||||||
|
"git.rosy.net.cn/jx-callback/business/jxutils"
|
||||||
|
"git.rosy.net.cn/jx-callback/business/model"
|
||||||
|
)
|
||||||
|
|
||||||
|
func NormalFilterMapByStructObject(mapData map[string]interface{}, obj interface{}) (valid map[string]interface{}, invalid map[string]interface{}) {
|
||||||
|
return jxutils.FilterMapByStructObject(mapData, obj, []string{"id", "createdAt", "syncStatus", "lastOperator", "updatedAt", "finishedAt"})
|
||||||
|
}
|
||||||
|
|
||||||
|
func NormalMakeMapByStructObject(mapData map[string]interface{}, obj interface{}, userName string) (retVal map[string]interface{}) {
|
||||||
|
retVal, _ = NormalFilterMapByStructObject(mapData, obj)
|
||||||
|
retVal["lastOperator"] = userName
|
||||||
|
retVal["updatedAt"] = time.Now()
|
||||||
|
return retVal
|
||||||
|
}
|
||||||
|
|
||||||
|
func NormalMakeMapByFieldList(mapData map[string]interface{}, fields []string, userName string) (retVal map[string]interface{}) {
|
||||||
|
retVal, _ = jxutils.FilterMapByFieldList(mapData, fields)
|
||||||
|
retVal["lastOperator"] = userName
|
||||||
|
retVal["updatedAt"] = time.Now()
|
||||||
|
return retVal
|
||||||
|
}
|
||||||
|
|
||||||
|
func checkAndGetStructValue(item interface{}) *reflect.Value {
|
||||||
|
value := reflect.ValueOf(item)
|
||||||
|
if value.Kind() == reflect.Ptr {
|
||||||
|
value = value.Elem()
|
||||||
|
} else {
|
||||||
|
panic("item ust be ptr type")
|
||||||
|
}
|
||||||
|
return &value
|
||||||
|
}
|
||||||
|
|
||||||
|
func WrapAddIDCULEntity(item interface{}, lastOperator string) interface{} {
|
||||||
|
now := time.Now()
|
||||||
|
if mapData, ok := item.(map[string]interface{}); ok {
|
||||||
|
mapData[model.FieldID] = 0
|
||||||
|
mapData[model.FieldCreatedAt] = now
|
||||||
|
mapData[model.FieldUpdatedAt] = now
|
||||||
|
mapData[model.FieldLastOperator] = lastOperator
|
||||||
|
} else {
|
||||||
|
value := checkAndGetStructValue(item)
|
||||||
|
nowValue := reflect.ValueOf(now)
|
||||||
|
value.FieldByName(model.FieldID).SetInt(0)
|
||||||
|
value.FieldByName(model.FieldCreatedAt).Set(nowValue)
|
||||||
|
value.FieldByName(model.FieldUpdatedAt).Set(nowValue)
|
||||||
|
value.FieldByName(model.FieldLastOperator).SetString(lastOperator)
|
||||||
|
}
|
||||||
|
return item
|
||||||
|
}
|
||||||
|
|
||||||
|
func WrapAddIDCULDEntity(item interface{}, lastOperator string) interface{} {
|
||||||
|
if mapData, ok := item.(map[string]interface{}); ok {
|
||||||
|
mapData[model.FieldDeletedAt] = utils.DefaultTimeValue
|
||||||
|
} else {
|
||||||
|
value := checkAndGetStructValue(item)
|
||||||
|
value.FieldByName(model.FieldDeletedAt).Set(reflect.ValueOf(utils.DefaultTimeValue))
|
||||||
|
}
|
||||||
|
return WrapAddIDCULEntity(item, lastOperator)
|
||||||
|
}
|
||||||
|
|
||||||
|
func WrapUpdateULEntity(item interface{}, lastOperator string) interface{} {
|
||||||
|
now := time.Now()
|
||||||
|
if mapData, ok := item.(map[string]interface{}); ok {
|
||||||
|
mapData[model.FieldUpdatedAt] = now
|
||||||
|
mapData[model.FieldLastOperator] = lastOperator
|
||||||
|
} else {
|
||||||
|
value := checkAndGetStructValue(item)
|
||||||
|
nowValue := reflect.ValueOf(now)
|
||||||
|
value.FieldByName(model.FieldUpdatedAt).Set(nowValue)
|
||||||
|
value.FieldByName(model.FieldLastOperator).SetString(lastOperator)
|
||||||
|
}
|
||||||
|
return item
|
||||||
|
}
|
||||||
@@ -17,20 +17,6 @@ func TestReadStore(t *testing.T) {
|
|||||||
t.Log(result)
|
t.Log(result)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestCloseStore(t *testing.T) {
|
|
||||||
err := new(PurchaseHandler).CloseStore(TestStoreNo, "我就是想休息一下", "test")
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err.Error())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestOpenStore(t *testing.T) {
|
|
||||||
err := new(PurchaseHandler).OpenStore(TestStoreNo, "test")
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err.Error())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestUpdateStore(t *testing.T) {
|
func TestUpdateStore(t *testing.T) {
|
||||||
handler := new(PurchaseHandler)
|
handler := new(PurchaseHandler)
|
||||||
result, err := handler.ReadStore(TestStoreNo)
|
result, err := handler.ReadStore(TestStoreNo)
|
||||||
|
|||||||
Reference in New Issue
Block a user