diff --git a/business/jxstore/cms/store.go b/business/jxstore/cms/store.go index 4f8686350..f2387ff2b 100644 --- a/business/jxstore/cms/store.go +++ b/business/jxstore/cms/store.go @@ -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 +} diff --git a/business/partner/partner_store.go b/business/partner/partner_store.go index 37994fb41..7f961b837 100644 --- a/business/partner/partner_store.go +++ b/business/partner/partner_store.go @@ -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) +} diff --git a/business/partner/purchase/jd/store.go b/business/partner/purchase/jd/store.go index 7e3f3a380..2d35e75d3 100644 --- a/business/partner/purchase/jd/store.go +++ b/business/partner/purchase/jd/store.go @@ -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 +} diff --git a/business/partner/purchase/jd/store_test.go b/business/partner/purchase/jd/store_test.go index eac91d3e8..a18f80ec4 100644 --- a/business/partner/purchase/jd/store_test.go +++ b/business/partner/purchase/jd/store_test.go @@ -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()) + } +} diff --git a/controllers/cms_store.go b/controllers/cms_store.go index 9dcae6060..3e309b1bc 100644 --- a/controllers/cms_store.go +++ b/controllers/cms_store.go @@ -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 + }) +} diff --git a/routers/commentsRouter_controllers.go b/routers/commentsRouter_controllers.go index 8fd2aa156..a9259ea78 100644 --- a/routers/commentsRouter_controllers.go +++ b/routers/commentsRouter_controllers.go @@ -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",