Files
jx-callback/business/partner/purchase/jd/jd.go
邹宗楠 2e786d8db4 1
2024-06-12 14:29:39 +08:00

241 lines
7.7 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package jd
import (
"encoding/json"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/globals/api"
"net/url"
"strings"
"git.rosy.net.cn/jx-callback/business/model/dao"
"git.rosy.net.cn/baseapi/platformapi/jdapi"
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
"git.rosy.net.cn/jx-callback/business/model"
"git.rosy.net.cn/jx-callback/business/partner"
"git.rosy.net.cn/jx-callback/globals"
)
type PurchaseHandler struct {
partner.BasePurchasePlatform
}
var (
CurPurchaseHandler *PurchaseHandler
)
func init() {
CurPurchaseHandler = new(PurchaseHandler)
partner.RegisterPurchasePlatform(CurPurchaseHandler)
}
func getAPI(appOrgCode string) (apiObj *jdapi.API) {
if appOrgCode == "" {
globals.SugarLogger.Warnf("getAPI appOrgCode is empty")
}
return partner.CurAPIManager.GetAPI(model.VendorIDJD, appOrgCode).(*jdapi.API)
}
func GetAPI(appOrgCode string) (apiObj *jdapi.API) {
return getAPI(appOrgCode)
}
func GetAPIbyKey(appKey string) (apiObj *jdapi.API) {
if code, err := dao.GetVendorOrgCodeByKey(dao.GetDB(), model.VendorIDJD, appKey); err == nil && code != nil {
return jdapi.New(code.Token, code.AppKey, code.AppSecret)
}
return nil
}
func AppKey2OrgCode(appKey string) (vendorOrgCode string) {
// apiList := partner.CurAPIManager.GetAppOrgCodeList(model.VendorIDJD)
// for _, v := range apiList {
// jdAPI := partner.CurAPIManager.GetAPI(model.VendorIDJD, v).(*jdapi.API)
// if jdAPI.GetAppKey() == appKey {
// vendorOrgCode = v
// break
// }
// }
if code, err := dao.GetVendorOrgCodeByKey(dao.GetDB(), model.VendorIDJD, appKey); err == nil && code != nil {
vendorOrgCode = code.VendorOrgCode
}
if vendorOrgCode == "" {
globals.SugarLogger.Warnf("AppKey2OrgCode appKey:%s get empty vendorOrgCode", appKey)
}
return vendorOrgCode
}
func (c *PurchaseHandler) GetVendorID() int {
return model.VendorIDJD
}
func JdOperationTime2JxOperationTime(value1 int) int16 {
value := int16(value1)
return (value/2)*100 + (value%2)*30
}
func JxOperationTime2JdOperationTime(value int16) int16 {
return (value/100)*2 + (value%100)/30
}
func JdStoreStatus2JxStatus(yn, closeStatus int) int {
if yn == 1 {
return model.StoreStatusDisabled
} else if closeStatus == 1 {
return model.StoreStatusClosed
}
return model.StoreStatusOpened
}
func JxStoreStatus2JdStatus(status int) (yn, closeStatus int) {
switch status {
case model.StoreStatusDisabled:
return 1, 1
case model.StoreStatusHaveRest, model.StoreStatusClosed:
return 0, 1
default:
return 0, 0
}
}
func (p *PurchaseHandler) UploadImg(ctx *jxcontext.Context, vendorOrgCode, imgURL string, imgData []byte, imgName string, imgType int) (imgHint string, err error) {
return imgHint, err
}
type JdCode struct {
Code string `json:"code"`
VenderID string `json:"venderId"`
}
type JdToken struct {
Token string `json:"token"`
VenderID string `json:"venderId"`
}
func OnTokenChange(values url.Values) {
db := dao.GetDB()
codeInfo := &JdCode{}
if dataStr := values.Get("code"); dataStr != "" {
json.Unmarshal([]byte(dataStr), &codeInfo)
}
if codeInfo.Code != "" {
voc := &model.VendorOrgCode{}
//sql := `
// SELECT * FROM tmp_jd WHERE vendor_org_code = ?
//`
//sqlParams := []interface{}{codeInfo.VenderID}
//if err := dao.GetRow(db, &voc, sql, sqlParams); err == nil && voc != nil {
if result, _ := dao.GetVendorOrgCode(db, model.VendorIDJD, codeInfo.VenderID, model.VendorOrgTypePlatform); len(result) == 0 {
voc2 := &model.VendorOrgCode{
Comment: voc.Comment,
VendorOrgCode: codeInfo.VenderID,
VendorType: model.VendorOrgTypePlatform,
IsJxCat: 1,
}
dao.WrapAddIDCULDEntity(voc2, "jxadmin")
if err := dao.CreateEntity(db, voc2); err == nil {
//添加成功后去开发者后台填验证码
if configs, err := dao.QueryConfigs(dao.GetDB(), "jdConfigCookie", model.ConfigTypeCookie, ""); err == nil {
api.JdAPI.SetCookieWithStr(configs[0].Value)
if appID, err := api.JdAPI.GetJdNoAuthAppID(codeInfo.VenderID); err == nil {
api.JdAPI.SetCode(codeInfo.Code, appID)
}
}
}
} else {
globals.SugarLogger.Debugf("OnTokenChange 发验证码,但是库里有这个账号了")
}
//}
} else {
tokenInfo := &JdToken{}
if dataStr := values.Get("token"); dataStr != "" {
json.Unmarshal([]byte(dataStr), &tokenInfo)
}
if tokenInfo == nil {
return
}
//sql := `
// SELECT * FROM tmp_jd WHERE vendor_org_code = ?
//`
//sqlParams := []interface{}{tokenInfo.VenderID}
//if err := dao.GetRow(db, &voc, sql, sqlParams); err == nil && voc != nil {
if result, _ := dao.GetVendorOrgCode(db, model.VendorIDJD, tokenInfo.VenderID, model.VendorOrgTypePlatform); len(result) > 0 {
result[0].Token = tokenInfo.Token
if _, err := dao.UpdateEntity(db, result[0], "Token"); err == nil {
//添加成功后去开发者后台填验证码
// if configs, err := dao.QueryConfigs(dao.GetDB(), "jdConfigCookie", model.ConfigTypeCookie, ""); err == nil {
// api.JdAPI.SetCookieWithStr(configs[0].Value)
// result2, _ := api.JdAPI.GetJdAppInfo()
// result[0].AppKey = result2.AppKey
// result[0].AppSecret = result2.AppSecret
// dao.UpdateEntity(db, result[0], "AppKey", "AppSecret")
// }
}
} else {
globals.SugarLogger.Debugf("OnTokenChange 发token但是库里没这个账号")
}
//}
}
}
func (p *PurchaseHandler) GetOrderRider(vendorOrgCode, vendorStoreID string, param map[string]interface{}) (err error) {
logisticInfo := jdapi.ReceiveLogisticInfo{
OrderId: param["order_id"].(string),
DeliveryInfoList: nil,
}
deliveryInfoList := make([]jdapi.DeliveryInfo, 0, 0)
deliverInfo := jdapi.DeliveryInfo{
DeliveryManName: "暂无",
DeliveryManPhone: "",
DeliveryCarrierNo: "9966", // 暂时未获取到写死
DeliveryCarrierName: "达达配送", // 暂时未获取到写死
DeliveryCarrierOrderNo: param["order_id"].(string),
FailReason: "",
OperateTime: utils.GetCurTimeStr(),
Operator: jxcontext.AdminCtx.GetUserName(),
}
switch param["logistics_status"].(int) {
case 0:
deliverInfo.DeliveryStatus = jdapi.JdDeliveryStatusNew
case 10:
// 接单、更换骑手、骑手到店、骑手取货 都需要填加:骑手姓名和电话
deliverInfo.DeliveryStatus = jdapi.JdDeliveryStatusRiderTaking
deliverInfo.DeliveryManName = param["courier_name"].(string)
deliverInfo.DeliveryManPhone = param["courier_phone"].(string)
case 15:
deliverInfo.DeliveryStatus = jdapi.JdDeliveryStatusToStore
deliverInfo.DeliveryManName = param["courier_name"].(string)
deliverInfo.DeliveryManPhone = param["courier_phone"].(string)
case 20:
deliverInfo.DeliveryStatus = jdapi.JdDeliveryStatusDelivering
deliverInfo.DeliveryManName = param["courier_name"].(string)
deliverInfo.DeliveryManPhone = param["courier_phone"].(string)
case 40:
// 完成和取消状态不通过此接口发送通知消息
getAPI(vendorOrgCode).DeliveryEndOrder(param["order_id"].(string), param["courier_name"].(string))
return nil
case 100:
// 完成和取消状态不通过此接口发送通知消息
return nil
case 22:
deliverInfo.DeliveryStatus = jdapi.JdDeliveryStatusFail
}
deliveryInfoList = append(deliveryInfoList, deliverInfo)
logisticInfo.DeliveryInfoList = deliveryInfoList
return getAPI(vendorOrgCode).ReceiveLogisticInfoForOpenApiPlatform(logisticInfo)
}
func OrderDeliveryCoordinate(vendorOrgCode string, param map[string]interface{}) error {
operateUser := param["courier_name"].(string)
if operateUser == "" {
operateUser = "system_user"
}
return getAPI(vendorOrgCode).SelfDeliveryUploadCoordinate(utils.Str2Int64(param["order_id"].(string)), strings.ReplaceAll(param["latitude"].(string), ".", ""), strings.ReplaceAll(param["longitude"].(string), ".", ""), operateUser)
}