+ SyncStoresQualify

This commit is contained in:
gazebo
2019-08-15 12:40:14 +08:00
parent c607fa931c
commit 3c5f25b839
6 changed files with 169 additions and 1 deletions

View File

@@ -1707,3 +1707,35 @@ func SaveAndSendAlarmVendorSnapshot(ctx *jxcontext.Context, vendorIDs, storeIDs
}
return err
}
func SyncStoresQualify(ctx *jxcontext.Context, storeIDs []int, isAsync, isContinueWhenError bool) (hint string, err error) {
if len(storeIDs) > 0 {
db := dao.GetDB()
task := tasksch.NewParallelTask("上传门店资质", tasksch.NewParallelConfig().SetParallelCount(1).SetIsContinueWhenError(isContinueWhenError), ctx,
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
vendorID := model.VendorIDJD
if handler := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.IStoreSyncQualifyHandler); handler != nil {
storeID := batchItemList[0].(int)
storeDetail, err := dao.GetStoreDetail(db, storeID, vendorID)
if err == nil {
if err = handler.SyncQualify(ctx, storeDetail); err == nil {
retVal = []int{1}
}
}
} else {
err = fmt.Errorf("平台%s不支持此操作", model.VendorChineseNames[vendorID])
}
return retVal, err
}, storeIDs)
tasksch.HandleTask(task, nil, true).Run()
if isAsync {
hint = task.GetID()
} else {
resultList, err2 := task.GetResult(0)
if err = err2; err == nil {
hint = utils.Int2Str(len(resultList))
}
}
}
return hint, err
}

View File

@@ -1,6 +1,9 @@
package partner
import "git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
import (
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
"git.rosy.net.cn/jx-callback/business/model/dao"
)
type IStoreHandler interface {
GetAllStoresVendorID(ctx *jxcontext.Context) (vendorStoreIDs []string, err error)
@@ -9,3 +12,8 @@ type IStoreHandler interface {
// opTime格式为整数1130代表11:30
UpdateStoreOpTime(ctx *jxcontext.Context, storeID int, vendorStoreID string, opTimeList []int16) (err error)
}
// 同步资质信息至平台
type IStoreSyncQualifyHandler interface {
SyncQualify(ctx *jxcontext.Context, storeDetail *dao.StoreDetail) (err error)
}

View File

@@ -357,3 +357,90 @@ func (c *PurchaseHandler) GetAllStoresVendorID(ctx *jxcontext.Context) (vendorSt
vendorStoreIDs, err = api.JdAPI.GetStationsByVenderId()
return vendorStoreIDs, err
}
func (c *PurchaseHandler) storeUploadImgByURL(inImgURL string) (imgURL string, err error) {
if globals.EnableJdStoreWrite {
imgURL, err = api.JdPageAPI.StoreUploadImgByURL(inImgURL)
} else {
imgURL = utils.GetUUID()
}
return imgURL, err
}
func (c *PurchaseHandler) SyncQualify(ctx *jxcontext.Context, storeDetail *dao.StoreDetail) (err error) {
if storeDetail.LicenceCode == "" || storeDetail.Licence == "" {
return fmt.Errorf("营业执照信息不全")
}
if storeDetail.IDCode == "" || storeDetail.IDCardFront == "" || storeDetail.IDCardBack == "" || storeDetail.IDValid == "" {
return fmt.Errorf("个人信息不全")
}
var qualifyList []*jdapi.QualifyItem
licenceDetail, err := api.JdPageAPI.GetCorporationInfo(storeDetail.VendorStoreID, storeDetail.LicenceCode)
if err != nil {
return err
}
licenceURL, err := c.storeUploadImgByURL(storeDetail.Licence)
if err != nil {
return err
}
qualifyList = append(qualifyList, &jdapi.QualifyItem{
QualifyType: jdapi.QualifyTypeCompany,
QualifyURL: licenceURL,
QualifyExpireStart: licenceDetail.StartDate,
QualifyExpireForever: 0,
QualifyName: licenceDetail.OperName,
LicenceType: "-1",
QualifyNumber: storeDetail.LicenceCode,
QualifyAddress: licenceDetail.Address,
LicenceName: licenceDetail.Name,
EconKind: licenceDetail.EconKind,
Scope: licenceDetail.Scope,
})
if licenceDetail.EconKind == jdapi.LincenceEconKindPerson { // 个人
idFrondURL, err := c.storeUploadImgByURL(storeDetail.IDCardFront)
if err != nil {
return err
}
personQualify := &jdapi.QualifyItem{
QualifyType: jdapi.QualifyTypePerson,
QualifyURL: idFrondURL,
QualifyExpireStart: storeDetail.IDValid,
QualifyNumber: storeDetail.IDCode,
QualifyOwner: storeDetail.LicenceOwnerName,
}
if storeDetail.IDExpire == "" {
personQualify.QualifyExpireForever = 0
} else {
personQualify.QualifyExpireForever = 1
personQualify.QualifyExpireEnd = storeDetail.IDExpire
}
qualifyList = append(qualifyList, personQualify)
} else {
idFrondURL, err := c.storeUploadImgByURL(storeDetail.IDCardFront)
if err != nil {
return err
}
qualifyList = append(qualifyList, &jdapi.QualifyItem{
QualifyType: jdapi.QualifyTypeAddInfo,
QualifyURL: idFrondURL,
QualifyExpireForever: 1,
})
}
if storeDetail.IDExpire == "" {
idBackURL, err := c.storeUploadImgByURL(storeDetail.IDCardBack)
if err != nil {
return err
}
qualifyList = append(qualifyList, &jdapi.QualifyItem{
QualifyType: jdapi.QualifyTypeAddInfo,
QualifyURL: idBackURL,
QualifyExpireForever: 1,
})
}
globals.SugarLogger.Debug(utils.Format4Output(qualifyList, false))
if globals.EnableJdStoreWrite {
// err = api.JdPageAPI.SaveQualify(storeDetail.VendorStoreID, jdapi.SaveQualifyActionTypeCommit, qualifyList)
err = api.JdPageAPI.SaveQualify(storeDetail.VendorStoreID, jdapi.SaveQualifyActionTypeSave, qualifyList)
}
return err
}

View File

@@ -5,6 +5,7 @@ import (
"testing"
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
"git.rosy.net.cn/jx-callback/business/model"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/model/dao"
@@ -81,3 +82,14 @@ func TestUpdateStore2(t *testing.T) {
// t.Fatal("result doesn't match")
// }
// }
func TestSyncQualify(t *testing.T) {
storeDetail, err := dao.GetStoreDetail(dao.GetDB(), 102610, model.VendorIDJD)
if err != nil {
t.Fatal(err.Error())
}
err = curPurchaseHandler.SyncQualify(jxcontext.AdminCtx, storeDetail)
if err != nil {
t.Fatal(err.Error())
}
}

View File

@@ -400,3 +400,23 @@ func (c *StoreController) BindPrinter() {
return retVal, "", err
})
}
// @Title 同步门店资质信息至平台(当前只支持京东)
// @Description 同步门店资质信息至平台(当前只支持京东)
// @Param token header string true "认证token"
// @Param storeIDs formData string true "京西门店ID列表必须非空值"
// @Param isAsync formData bool true "是否异步操作"
// @Param isContinueWhenError formData bool false "单个同步失败是否继续缺省false"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /SyncStoresQualify [post]
func (c *StoreController) SyncStoresQualify() {
c.callSyncStoresQualify(func(params *tStoreSyncStoresQualifyParams) (retVal interface{}, errCode string, err error) {
var storeIDs []int
err = jxutils.Strings2Objs(params.StoreIDs, &storeIDs)
if err == nil {
retVal, err = cms.SyncStoresQualify(params.Ctx, storeIDs, params.IsAsync, params.IsContinueWhenError)
}
return retVal, "", err
})
}

View File

@@ -1258,6 +1258,15 @@ func init() {
Filters: nil,
Params: nil})
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreController"],
beego.ControllerComments{
Method: "SyncStoresQualify",
Router: `/SyncStoresQualify`,
AllowHTTPMethods: []string{"post"},
MethodParams: param.Make(),
Filters: nil,
Params: nil})
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreController"],
beego.ControllerComments{
Method: "TmpGetJxBadComments",