diff --git a/business/jxstore/act/act.go b/business/jxstore/act/act.go index bff5cdbea..bf23c42fc 100644 --- a/business/jxstore/act/act.go +++ b/business/jxstore/act/act.go @@ -2,10 +2,10 @@ package act import ( "fmt" - "strings" "time" "git.rosy.net.cn/baseapi/utils" + "git.rosy.net.cn/baseapi/utils/errlist" "git.rosy.net.cn/jx-callback/business/jxutils" "git.rosy.net.cn/jx-callback/business/partner" "git.rosy.net.cn/jx-callback/globals" @@ -279,9 +279,11 @@ func checkDiscountValidation(actType int, pricePercentage int) (err error) { } func checkActValidation(act *model.Act, vendorIDs []int) (err error) { - var errList []error + errList := errlist.New() if utils.IsTimeZero(act.BeginAt) || utils.IsTimeZero(act.EndAt) { - errList = append(errList, fmt.Errorf("活动开始与结束时间必须指定")) + errList.AddErr(fmt.Errorf("活动开始与结束时间必须指定")) + } else if act.EndAt.Sub(act.BeginAt) < 0 { + errList.AddErr(fmt.Errorf("活动开始时间必须小于活动结束时间")) } vendorIDMap := make(map[int]int) for _, vendorID := range vendorIDs { @@ -290,25 +292,19 @@ func checkActValidation(act *model.Act, vendorIDs []int) (err error) { if act.Type == model.ActSkuDirectDown || act.Type == model.ActSkuSecKill { if act.PricePercentage == 0 { - errList = append(errList, fmt.Errorf("活动必须指定价格折扣")) + errList.AddErr(fmt.Errorf("必须指定缺省活动折扣")) } else if err = checkDiscountValidation(act.Type, act.PricePercentage); err != nil { - errList = append(errList, err) + errList.AddErr(err) } else if act.Type == model.ActSkuSecKill && vendorIDMap[model.VendorIDMTWM] == 1 { - errList = append(errList, err) + errList.AddErr(fmt.Errorf("%s平台不支持%s活动", model.VendorChineseNames[model.VendorIDMTWM], model.ActTypeName[model.ActSkuSecKill])) } } else if act.Type == model.ActSkuFake { } else { - errList = append(errList, fmt.Errorf("当前只支持直降与秒杀活动")) + errList.AddErr(fmt.Errorf("当前只支持%s与%s活动", model.ActTypeName[model.ActSkuDirectDown], model.ActTypeName[model.ActSkuSecKill])) } - if errList == nil { - return nil - } - strList := make([]string, len(errList)) - for k, v := range errList { - strList[k] = v.Error() - } - return fmt.Errorf("%s", strings.Join(strList, ",\n")) + err = errList.GetErrListAsOne() + return err } func setActDefault(act *model.Act) { diff --git a/business/jxstore/cms/store.go b/business/jxstore/cms/store.go index 15ebdccca..d6ea7e552 100644 --- a/business/jxstore/cms/store.go +++ b/business/jxstore/cms/store.go @@ -1015,7 +1015,9 @@ func AddStoreCourierMap(ctx *jxcontext.Context, db *dao.DaoDB, storeID, vendorID } func addStoreCourierMap(ctx *jxcontext.Context, db *dao.DaoDB, storeID, vendorID int, storeCourierMap *model.StoreCourierMap, isNeedUpdateRemote bool) (outStoreCourierMap *model.StoreCourierMap, err error) { - globals.SugarLogger.Debugf("addStoreCourierMap %s, storeID:%d, isNeedUpdateRemote:%t", model.VendorChineseNames[vendorID], storeCourierMap, isNeedUpdateRemote) + storeCourierMap.StoreID = storeID + storeCourierMap.VendorID = vendorID + globals.SugarLogger.Debugf("addStoreCourierMap %s, storeCourierMap:%s, isNeedUpdateRemote:%t", model.VendorChineseNames[vendorID], utils.Format4Output(storeCourierMap, true), isNeedUpdateRemote) if handler := partner.GetDeliveryPlatformFromVendorID(vendorID); handler != nil { if db == nil { @@ -1029,14 +1031,13 @@ func addStoreCourierMap(ctx *jxcontext.Context, db *dao.DaoDB, storeID, vendorID if storeDetail.VendorStoreID != "" { return nil, fmt.Errorf("门店已经绑定了%s, ID:%s, 如需重新绑定, 请先解绑", model.VendorChineseNames[vendorID], storeDetail.VendorStoreID) } + storeDetail.VendorID = vendorID storeDetail.VendorStoreID = storeCourierMap.VendorStoreID if err = updateCourierStore(ctx, storeDetail); err != nil { return nil, err } } dao.WrapAddIDCULDEntity(storeCourierMap, ctx.GetUserName()) - storeCourierMap.StoreID = storeID - storeCourierMap.VendorID = vendorID if err = dao.CreateEntity(db, storeCourierMap); err != nil { return nil, err } diff --git a/business/jxstore/cms/user.go b/business/jxstore/cms/user.go index 0ed83f02a..de4e57985 100644 --- a/business/jxstore/cms/user.go +++ b/business/jxstore/cms/user.go @@ -4,6 +4,7 @@ import ( "fmt" "git.rosy.net.cn/baseapi/utils" + "git.rosy.net.cn/jx-callback/business/auth2" "git.rosy.net.cn/jx-callback/business/jxcallback/auth" "git.rosy.net.cn/jx-callback/business/jxcallback/auth/mobile" "git.rosy.net.cn/jx-callback/business/jxcallback/auth/weixin" @@ -65,6 +66,33 @@ func GetSelfInfo(ctx *jxcontext.Context) (storeUserInfo *dao.StoreUserInfo, err return storeUserInfo, err } +func getMobileFromCtx(ctx *jxcontext.Context) (mobile string) { + token := ctx.GetToken() + if auth2.IsV2Token(token) { + authInfo, err2 := auth2.GetTokenInfo(token) + if err2 == nil { + if authInfo.TokenType == auth2.TokenTypeNormal { + mobile = authInfo.GetMobile() + } + } + } else { + userInfo, err2 := auth.GetUserInfo(token) + if err2 == nil { + mobile = userInfo.GetAuthID() + } + } + return mobile +} + +func GetMyStoreList(ctx *jxcontext.Context) (storeList []*model.Store, err error) { + mobileNum := getMobileFromCtx(ctx) + if mobileNum == "" { + return nil, fmt.Errorf("不能得到用户手机号") + } + storeList, err = dao.GetStoreListByMobile(dao.GetDB(), mobileNum) + return storeList, err +} + func UnbindMobile(ctx *jxcontext.Context, mobile string) (num int64, err error) { db := dao.GetDB() num, err = dao.UpdateEntityByKV(db, &legacymodel.WeiXins{}, map[string]interface{}{ diff --git a/business/jxutils/jxcontext/jxcontext.go b/business/jxutils/jxcontext/jxcontext.go index 8b490bee3..97fca5292 100644 --- a/business/jxutils/jxcontext/jxcontext.go +++ b/business/jxutils/jxcontext/jxcontext.go @@ -4,7 +4,6 @@ import ( "errors" "net/http" - "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/auth2" "git.rosy.net.cn/jx-callback/business/jxcallback/auth" "git.rosy.net.cn/jx-callback/business/model" @@ -57,7 +56,7 @@ func New(notUsed interface{}, token string, w http.ResponseWriter, r *http.Reque authInfo, err2 := auth2.GetTokenInfo(token) if err = err2; err == nil { ctx.userInfo = authInfo - // globals.SugarLogger.Debugf("jxcontext New, V2 authInfo:%s", utils.Format4Output(authInfo, false)) + // globals.SugarLogger.Debugf("jxcontext New, V2 authInfo:%s", utils.Format4Output(authInfo, true)) if authInfo.TokenType != auth2.TokenTypeNormal { err = errors.New("需要正式TOKEN") } @@ -65,7 +64,7 @@ func New(notUsed interface{}, token string, w http.ResponseWriter, r *http.Reque } else { userInfo, err2 := auth.GetUserInfo(token) if err = err2; err == nil { - globals.SugarLogger.Debugf("jxcontext New, V1 authInfo:%s", utils.Format4Output(userInfo, false)) + // globals.SugarLogger.Debugf("jxcontext New, V1 authInfo:%s", utils.Format4Output(userInfo, true)) ctx.userInfo = userInfo } } diff --git a/business/model/dao/dao_user.go b/business/model/dao/dao_user.go index 604f8bbb8..0338e5406 100644 --- a/business/model/dao/dao_user.go +++ b/business/model/dao/dao_user.go @@ -4,6 +4,7 @@ import ( "fmt" "git.rosy.net.cn/baseapi/utils" + "git.rosy.net.cn/jx-callback/business/model" "git.rosy.net.cn/jx-callback/business/model/legacymodel" ) @@ -116,3 +117,30 @@ func GetUserStoreInfo(db *DaoDB, fieldName, fieldValue string) (storeUserInfo *S } return storeUserInfo, err } + +func GetStoreListByMobile(db *DaoDB, mobile string) (storeList []*model.Store, err error) { + if mobile != "" { + sql := ` + SELECT DISTINCT * + FROM ( + SELECT * + FROM store t1 + WHERE (t1.market_man_phone = ? OR t1.operator_phone = ?) + UNION DISTINCT + SELECT t1.* + FROM store t1 + JOIN weixins t2 ON t2.jxstoreid = t1.id AND t2.parentid = -1 + LEFT JOIN weixins t3 ON t3.parentid = t2.id + WHERE (t2.tel = ? OR t3.tel = ?) + ) t1 + ORDER BY t1.name` + sqlParams := []interface{}{ + mobile, + mobile, + mobile, + mobile, + } + err = GetRows(db, &storeList, sql, sqlParams...) + } + return storeList, err +} diff --git a/business/partner/purchase/mtwm/order_afs.go b/business/partner/purchase/mtwm/order_afs.go index d3b67cdee..60eecab66 100644 --- a/business/partner/purchase/mtwm/order_afs.go +++ b/business/partner/purchase/mtwm/order_afs.go @@ -9,6 +9,7 @@ import ( "git.rosy.net.cn/jx-callback/business/jxutils" "git.rosy.net.cn/jx-callback/business/jxutils/jxcontext" "git.rosy.net.cn/jx-callback/business/model" + "git.rosy.net.cn/jx-callback/business/model/dao" "git.rosy.net.cn/jx-callback/business/partner" "git.rosy.net.cn/jx-callback/globals" "git.rosy.net.cn/jx-callback/globals/api" @@ -48,10 +49,23 @@ func (c *PurchaseHandler) OnAfsOrderMsg(msg *mtwmapi.CallbackMsg) (retVal *mtwma return retVal } +// todo 对于退款与部分退款,order.go与这个文件中对于状态的处理不一致 func (c *PurchaseHandler) onAfsOrderMsg(msg *mtwmapi.CallbackMsg) (retVal *mtwmapi.CallbackResponse) { var err error orderStatus := c.callbackAfsMsg2Status(msg) - if orderStatus.Status == model.AfsOrderStatusWait4Approve || orderStatus.Status == model.AfsOrderStatusNew { + needCallNew := orderStatus.Status == model.AfsOrderStatusWait4Approve || orderStatus.Status == model.AfsOrderStatusNew + if !needCallNew { + _, err := partner.CurOrderManager.LoadAfsOrder(orderStatus.VendorOrderID, orderStatus.VendorID) + if err != nil { + if dao.IsNoRowsError(err) { + needCallNew = true + } else { + return mtwmapi.Err2CallbackResponse(err, "") + } + } + } + + if needCallNew { var afsOrder *model.AfsOrder refundData := msg.Data.(*mtwmapi.CallbackRefundInfo) if msg.Cmd == mtwmapi.MsgTypeOrderPartialRefund { diff --git a/business/partner/putils/store_sku.go b/business/partner/putils/store_sku.go index 4371257a5..84047474e 100644 --- a/business/partner/putils/store_sku.go +++ b/business/partner/putils/store_sku.go @@ -90,16 +90,27 @@ func (p *DefSingleStorePlatform) GetStoreSkusBareInfo(ctx *jxcontext.Context, pa } for _, v := range resultList { skuName := v.(*partner.SkuNameInfo) - storeSkuBareInfo := &skuName.SkuList[0].StoreSkuInfo - if storeSkuBareInfo.SkuID == 0 && inStoreSkuMap[storeSkuBareInfo.VendorSkuID] != nil { - storeSkuBareInfo.SkuID = inStoreSkuMap[storeSkuBareInfo.VendorSkuID].SkuID - storeSkuBareInfo.NameID = inStoreSkuMap[storeSkuBareInfo.VendorSkuID].NameID + for _, v2 := range skuName.SkuList { + storeSkuBareInfo := &v2.StoreSkuInfo + if storeSkuBareInfo.SkuID == 0 && inStoreSkuMap[storeSkuBareInfo.VendorSkuID] != nil { + storeSkuBareInfo.SkuID = inStoreSkuMap[storeSkuBareInfo.VendorSkuID].SkuID + storeSkuBareInfo.NameID = inStoreSkuMap[storeSkuBareInfo.VendorSkuID].NameID + } + outStoreSkuList = append(outStoreSkuList, storeSkuBareInfo) } - outStoreSkuList = append(outStoreSkuList, storeSkuBareInfo) } return outStoreSkuList, err } +func StoreSkuFullList2Bare(storeSkuFull []*partner.SkuNameInfo) (bareStoreSkuList []*partner.StoreSkuInfo) { + for _, v := range storeSkuFull { + for _, v2 := range v.SkuList { + bareStoreSkuList = append(bareStoreSkuList, &v2.StoreSkuInfo) + } + } + return bareStoreSkuList +} + func findCategoryByName(catList []*partner.BareCategoryInfo, catName string) (cat *partner.BareCategoryInfo) { for _, v := range catList { if v.Name == catName { diff --git a/conf/app.conf b/conf/app.conf index 455bc3d25..7f615e2e8 100644 --- a/conf/app.conf +++ b/conf/app.conf @@ -52,7 +52,7 @@ wxBackstageHost = "http://wx.jxc4.com" jdStorePageCookie = "YYJV3NHVBPHLD36FWP6F3EM5PTXJ2XZQS7U4HWRIDPP4IWGUKUIB4XG5N26CZRDLDF7PKOXBPD6BNTUAJLETLZOIWMCVFI3K6MYZIY4QBIXIMXYDJNUKFGJVQTN5356SAD6WPCIHWNQAG7DDMF7L7S3SHDYZP7PPVMRGO4VWG2JRBMKFTOGIWZ5L2XHXC3SXQ4OLX7EL4RKUPZQT6GOH63KE3EVK37L5LG7TGSDGXFQP4377YK72UB5YZG6IJH6PY25YLLCJYPMDSHKPGYBUFJ4MMMKGN6MWB37CP7XVDBBZJ3U462ENTEXH744AWCQCIG2AAE2PKYVHC" ebaiStorePageCookieWMUSS = "4AAPQCAAB5PF0aUGcBVzoRTCEkOFhFIhx-Yk9vN2EfPHYoLlROKBEsQmAUQjhNUgRt0ADAP5x-RFklwAAdjxGO11iOj8xKXYSSDIJb2BcPghsaklNfQwGS10JOVRFfhAiYElhEXFXIzoJKyloCGdwdFE6Qk9FRxojUFN3FVEHNjJPZJu4Bt9nxQ13cwoMbjA" ebaiStorePageCookieWMSTOKEN = "AcAANQZAABbC04rUBZFc2UYanlocDAaP0dcfzZCeS1SHQ1qJ15ExgAA13A2dGLjdbcitBZJu4Bn6B_g6cZAAA0tyyFm8cdBaNAQAAwug8HTG0xRjwt1UZzbcAAN7ofRO" -mtpsStoreToken = "0seqGSJnhbr4XJ0EaIQL6CoOpnaV1ErgS42uOlzNXYIX7PeuLuyCFQQZKKWGExJ7IMTQQQDe5H6YMmVFnxjCkw" +mtpsStoreToken = "jWQx6ao1-BFeuFg1iOHX207ocrPXlJPY-f41EaF1769C13Gw-irr5QnfQzmZOvOqt99cdN4XdQW0n8wvy-Hl_A" weimobAppID = "319F5E7FB6784DFCA3684C9333EB7744" weimobAppSecret = "7267AA7F58261F6965599218F5A1D592" @@ -119,7 +119,7 @@ getWeixinTokenURL = "http://beta.jxc4.com/v2/sys/GetWXToken" [prod] EnableDocs = false -jdToken = "ccb10daf-e6f5-4a58-ada5-b97f9073a137" +jdToken = "77e703b7-7997-441b-a12a-2e522efb117a" jdAppKey = "1dba76d40cac446ca500c0391a0b6c9d" jdSecret = "a88d031a1e7b462cb1579f12e97fe7f4" diff --git a/controllers/cms_user.go b/controllers/cms_user.go index e51a1f8de..b3b919cd4 100644 --- a/controllers/cms_user.go +++ b/controllers/cms_user.go @@ -50,6 +50,19 @@ func (c *UserController) TmpGetSelfInfo() { }) } +// @Title 得到用户自己的门店列表 +// @Description 得到用户自己的门店列表 +// @Param token header string true "认证token" +// @Success 200 {object} controllers.CallResult +// @Failure 200 {object} controllers.CallResult +// @router /TmpGetMyStoreList [get] +func (c *UserController) TmpGetMyStoreList() { + c.callTmpGetSelfInfo(func(params *tUserTmpGetSelfInfoParams) (retVal interface{}, errCode string, err error) { + retVal, err = cms.GetMyStoreList(params.Ctx) + return retVal, "", err + }) +} + // @Title 取消手机门店绑定 // @Description 此操作会将此手机关联的所有门店信息清除(取消组长,取消自己为他组组员),如果此人为组长,取消后组员也相应会取消门店绑定(但组员的成员关系还在) // @Param token header string true "认证token" diff --git a/routers/commentsRouter_controllers.go b/routers/commentsRouter_controllers.go index ee8e4b0fd..1a31eaca4 100644 --- a/routers/commentsRouter_controllers.go +++ b/routers/commentsRouter_controllers.go @@ -1753,6 +1753,15 @@ func init() { Filters: nil, Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:UserController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:UserController"], + beego.ControllerComments{ + Method: "TmpGetMyStoreList", + Router: `/TmpGetMyStoreList`, + AllowHTTPMethods: []string{"get"}, + MethodParams: param.Make(), + Filters: nil, + Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:UserController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:UserController"], beego.ControllerComments{ Method: "TmpGetSelfInfo",