From 82cd796b5c59d68afbb8219043724717ae97e688 Mon Sep 17 00:00:00 2001 From: richboo111 Date: Fri, 5 May 2023 14:48:54 +0800 Subject: [PATCH 01/23] 1 --- business/jxutils/unipush/push.go | 21 +-- business/jxutils/weixinmsg/weixinmsg.go | 108 ++++++++++---- business/model/api_config.go | 3 - business/model/dao/store.go | 6 +- business/partner/printer/trendit/trendit.go | 5 + business/partner/purchase/ebai/im.go | 2 +- business/partner/purchase/im/im.go | 154 ++++++++++++++++---- business/partner/purchase/im/im_model.go | 116 +++++++++++---- business/partner/purchase/im/im_server.go | 80 +++++----- controllers/im.go | 33 ----- main.go | 3 +- 11 files changed, 343 insertions(+), 188 deletions(-) diff --git a/business/jxutils/unipush/push.go b/business/jxutils/unipush/push.go index 26dad7ee1..f919d29a0 100644 --- a/business/jxutils/unipush/push.go +++ b/business/jxutils/unipush/push.go @@ -20,7 +20,7 @@ const ( SoundsFileNewOrder = "newOrder.caf" SoundsFileNewAfsOrder = "afsOrder.caf" SoundsFileNewCancelOrder = "cancelOrder.caf" - SoundsFileNewImMsg = "" //TODO 待定 + SoundsFileNewImMsg = "newMsg.caf" ) // NotifyNewOrder 推送新订单 @@ -116,19 +116,11 @@ func NotifyImNewMessage(vendorStoreID string, vendorID int) error { if len(vendorStoreID) == 0 { return nil } - var ( - temp = 0 - msg = MsgContext{} - ) - if vendorID == 10 { //美团 - temp = 1 - } else if vendorID == 11 { //饿了么 - temp = 3 - } + var msg = MsgContext{} - store, err := dao.GetStoreBaseByVendorStoreID(vendorStoreID, temp) + store, err := dao.GetStoreBaseByVendorStoreID(vendorStoreID, vendorID) if err != nil { - return fmt.Errorf("未查到此门店:%s", vendorStoreID) + return fmt.Errorf("未查到此门店/门店未与平台正常绑定:%s", vendorStoreID) } cid, err := GetStoreBoosCID(store.ID) @@ -138,13 +130,12 @@ func NotifyImNewMessage(vendorStoreID string, vendorID int) error { } fmt.Print(cid) msg.MsgType = "newImMsg" - msg.VendorName = model.VendorChineseNames[temp] + msg.VendorName = model.VendorChineseNames[vendorID] msg.StoreTitle = store.Name msg.Context = "老板,你有新的用户消息,请及时查看!" context, _ := json.Marshal(msg) - body := fmt.Sprintf(msg.Context+"(%s)", model.VendorChineseNames[temp]) - pushMsgByUniApp(store.ID, store.Name, cid, string(context), body, SoundsFileNewImMsg) + pushMsgByUniApp(store.ID, store.Name, cid, string(context), "", SoundsFileNewImMsg) return err } diff --git a/business/jxutils/weixinmsg/weixinmsg.go b/business/jxutils/weixinmsg/weixinmsg.go index 507137c3f..a15939678 100644 --- a/business/jxutils/weixinmsg/weixinmsg.go +++ b/business/jxutils/weixinmsg/weixinmsg.go @@ -3,10 +3,11 @@ package weixinmsg import ( "encoding/json" "fmt" - "git.rosy.net.cn/baseapi/platformapi/weixinapi" "strings" "time" + "git.rosy.net.cn/baseapi/platformapi/weixinapi" + beego "github.com/astaxie/beego/server/web" "git.rosy.net.cn/jx-callback/business/auth2/authprovider/weixin" @@ -48,6 +49,7 @@ const ( WX_TEMPLATE_VENDERCOLOR_ELM = "#0191EA" //蓝色 WX_TEMPLATE_VENDERCOLOR_BAD_COMMENTS = "#4F4DA0" + WX_NEWORDER_TEMPLATE_ID2 = "b8-tLyWwAmK-1tEU1eGqp_YAAqQtSzoVDZkHuyUe9lk" //微信新订单推送2 WX_NEWORDER_TEMPLATE_ID = "_DtNGwmOeR6TkkTVUblxLIlkV2MAPOX57TkvfdqG6nY" //微信新订单推送 WX_ADJUSTORDER_TEMPLATE_ID = "N5rmV2-PDf3opjkv23IdLc76VnFThr_uOKSh5FzT13M" //微信调整订单推送 WX_MTPS_DELIVERY_GRABDONE_TEMPLATE_ID = "h4dkON6AgnHz1XmaksEUB_8Bcir4V8MSexUhC149pPE" //微信美团配送员接单推送 @@ -197,6 +199,7 @@ func getOrderDetailBrief(order *model.GoodsOrder) (brief string) { return sb.String() } +//新订单推送模板2 func NotifyNewOrder(order *model.GoodsOrder) (err error) { if order.VendorID == model.VendorIDELM { return nil @@ -210,49 +213,90 @@ func NotifyNewOrder(order *model.GoodsOrder) (err error) { globals.SugarLogger.Infof("NotifyNewOrder orderID:%s is not solid", order.VendorOrderID) return nil } - suffix := "" storeDetail, err := dao.GetStoreDetail(dao.GetDB(), jxutils.GetSaleStoreIDFromOrder(order), order.VendorID, "") - if err == nil && storeDetail != nil { - suffix = storeDetail.CityName + "," + storeDetail.Name - } - sb := new(strings.Builder) - sb.WriteString(suffix + "老板,") - sb.WriteString(order.ConsigneeName) - sb.WriteString("购买了商品") - sb.WriteString(getOrderDetailBrief(order)) + data := map[string]interface{}{ - "first": map[string]interface{}{ - "value": sb.String(), - "color": WX_NEW_ORDER_TEMPLATE_COLOR, - }, - "Day": map[string]interface{}{ - "value": FormatDeliveryTime(order), - "color": WX_NEW_ORDER_TEMPLATE_COLOR, - }, - "orderId": map[string]interface{}{ - "value": order.VendorOrderID, - "color": WX_NEW_ORDER_TEMPLATE_COLOR, - }, - "orderType": map[string]interface{}{ - "value": fmt.Sprintf("%s 第%d号订单", model.VendorChineseNames[order.VendorID], order.OrderSeq), + "keyword1": map[string]interface{}{ //订单来源 + "value": fmt.Sprintf("%s #%d", model.VendorChineseNames[order.VendorID], order.OrderSeq), "color": VendorColors[order.VendorID], }, - "customerName": map[string]interface{}{ - "value": order.ConsigneeName, + "keyword2": map[string]interface{}{ //商家信息 + "value": storeDetail.Name, "color": WX_NEW_ORDER_TEMPLATE_COLOR, }, - "customerPhone": map[string]interface{}{ - "value": order.ConsigneeMobile, + "keyword3": map[string]interface{}{ //顾客信息 + "value": order.ConsigneeName + " " + order.ConsigneeMobile, + "color": WX_NEW_ORDER_TEMPLATE_COLOR, + }, + "keyword4": map[string]interface{}{ //下单时间及金额 + "value": utils.Time2Str(order.CreatedAt) + "(¥" + utils.Int64ToStr(order.ActualPayPrice) + ")", + "color": WX_NEW_ORDER_TEMPLATE_COLOR, + }, + "keyword5": map[string]interface{}{ //配送时间 + "value": order.ExpectedDeliveredTime, "color": WX_NEW_ORDER_TEMPLATE_COLOR, }, } storeID := jxutils.GetSaleStoreIDFromOrder(order) - //return SendMsgToStore(storeID, WX_NEWORDER_TEMPLATE_ID, globals.WxBackstageHost+fmt.Sprintf("%s%d", WX_TO_ORDER_PAGE_URL, storeID), WX_MINI_TO_ORDER_PAGE_URL+fmt.Sprintf("?jxStoreId=%v", storeID), data) - //dataStore := fmt.Sprintf(`{"address":"%s","cityName":"%s","id":%d,"name":"%s","payeeName":"%s","status":%d,"tel1":"%s","tel2":"%s"}`, storeDetail.Address, storeDetail.CityName, storeDetail.ID, storeDetail.Name, storeDetail.PayeeName, storeDetail.Status, storeDetail.Tel1, storeDetail.Tel2) - //url := WX_MINI_TO_ORDER_PAGE_URL + fmt.Sprintf("?jxStoreId=%v&data=%v", storeID, dataStore) - return SendMsgToStore(storeID, WX_NEWORDER_TEMPLATE_ID, globals.WxBackstageHost+fmt.Sprintf("%s%d", WX_TO_ORDER_PAGE_URL, storeID), WX_MINI_TO_ORDER_PAGE_URL, data) + return SendMsgToStore(storeID, WX_NEWORDER_TEMPLATE_ID2, globals.WxBackstageHost+fmt.Sprintf("%s%d", WX_TO_ORDER_PAGE_URL, storeID), WX_MINI_TO_ORDER_PAGE_URL, data) } +//func NotifyNewOrder(order *model.GoodsOrder) (err error) { +// if order.VendorID == model.VendorIDELM { +// return nil +// } +// +// if len(order.Skus) == 0 { +// return nil +// } +// +// if !model.IsOrderSolid(order) { +// globals.SugarLogger.Infof("NotifyNewOrder orderID:%s is not solid", order.VendorOrderID) +// return nil +// } +// suffix := "" +// storeDetail, err := dao.GetStoreDetail(dao.GetDB(), jxutils.GetSaleStoreIDFromOrder(order), order.VendorID, "") +// if err == nil && storeDetail != nil { +// suffix = storeDetail.CityName + "," + storeDetail.Name +// } +// sb := new(strings.Builder) +// sb.WriteString(suffix + "老板,") +// sb.WriteString(order.ConsigneeName) +// sb.WriteString("购买了商品") +// sb.WriteString(getOrderDetailBrief(order)) +// data := map[string]interface{}{ +// "first": map[string]interface{}{ +// "value": sb.String(), +// "color": WX_NEW_ORDER_TEMPLATE_COLOR, +// }, +// "Day": map[string]interface{}{ +// "value": FormatDeliveryTime(order), +// "color": WX_NEW_ORDER_TEMPLATE_COLOR, +// }, +// "orderId": map[string]interface{}{ +// "value": order.VendorOrderID, +// "color": WX_NEW_ORDER_TEMPLATE_COLOR, +// }, +// "orderType": map[string]interface{}{ +// "value": fmt.Sprintf("%s 第%d号订单", model.VendorChineseNames[order.VendorID], order.OrderSeq), +// "color": VendorColors[order.VendorID], +// }, +// "customerName": map[string]interface{}{ +// "value": order.ConsigneeName, +// "color": WX_NEW_ORDER_TEMPLATE_COLOR, +// }, +// "customerPhone": map[string]interface{}{ +// "value": order.ConsigneeMobile, +// "color": WX_NEW_ORDER_TEMPLATE_COLOR, +// }, +// } +// storeID := jxutils.GetSaleStoreIDFromOrder(order) +// //return SendMsgToStore(storeID, WX_NEWORDER_TEMPLATE_ID, globals.WxBackstageHost+fmt.Sprintf("%s%d", WX_TO_ORDER_PAGE_URL, storeID), WX_MINI_TO_ORDER_PAGE_URL+fmt.Sprintf("?jxStoreId=%v", storeID), data) +// //dataStore := fmt.Sprintf(`{"address":"%s","cityName":"%s","id":%d,"name":"%s","payeeName":"%s","status":%d,"tel1":"%s","tel2":"%s"}`, storeDetail.Address, storeDetail.CityName, storeDetail.ID, storeDetail.Name, storeDetail.PayeeName, storeDetail.Status, storeDetail.Tel1, storeDetail.Tel2) +// //url := WX_MINI_TO_ORDER_PAGE_URL + fmt.Sprintf("?jxStoreId=%v&data=%v", storeID, dataStore) +// return SendMsgToStore(storeID, WX_NEWORDER_TEMPLATE_ID, globals.WxBackstageHost+fmt.Sprintf("%s%d", WX_TO_ORDER_PAGE_URL, storeID), WX_MINI_TO_ORDER_PAGE_URL, data) +//} + func NotifyWaybillStatus(bill *model.Waybill, order *model.GoodsOrder, isBillAlreadyCandidate bool) (err error) { if order.VendorID == model.VendorIDELM { return nil diff --git a/business/model/api_config.go b/business/model/api_config.go index 0ceb110b2..298283ac0 100644 --- a/business/model/api_config.go +++ b/business/model/api_config.go @@ -2,9 +2,6 @@ package model // VendorIDJD, VendorIDMTWM与VendorIDELM的定义和老系统是兼容的 const ( - IMVendorIDMT = "10" //美团IM - IMVendorIDELM = "11" //饿了么im - VendorTypeUnknown = 0 // 未知 VendorTypePurchase = 1 // 购物平台 VendorTypeDelivery = 2 // 快递平台 diff --git a/business/model/dao/store.go b/business/model/dao/store.go index 35ed12a53..86884ee2d 100644 --- a/business/model/dao/store.go +++ b/business/model/dao/store.go @@ -1653,9 +1653,9 @@ func GetStoreBaseByVendorStoreID(vendorStoreID string, vendorID int) (storeDetai return nil, errors.New("vendorStoreID不能为空") } - DefaultTimeValue := utils.Str2Time("1970-01-01 00:00:00") - sql := `SELECT t.* FROM store t WHERE t.id = (SELECT s.store_id FROM store_map s WHERE s.vendor_store_id= ? AND s.vendor_id= ? AND s.deleted_at= ? )` - if err := GetRow(GetDB(), &storeDetail, sql, []interface{}{vendorStoreID, vendorID, DefaultTimeValue}); err != nil { + //DefaultTimeValue := utils.Str2Time("1970-01-01 00:00:00") + sql := `SELECT t.* FROM store t WHERE t.id = (SELECT s.store_id FROM store_map s WHERE s.vendor_store_id= ? AND s.vendor_id= ? AND s.deleted_at= '1970-01-01 00:00:00' )` + if err := GetRow(GetDB(), &storeDetail, sql, []interface{}{vendorStoreID, vendorID}); err != nil { return nil, err } return storeDetail, err diff --git a/business/partner/printer/trendit/trendit.go b/business/partner/printer/trendit/trendit.go index cf481b47b..07eefb863 100644 --- a/business/partner/printer/trendit/trendit.go +++ b/business/partner/printer/trendit/trendit.go @@ -194,6 +194,7 @@ func (c *PrinterHandler) getOrderContentV2(order *model.GoodsOrder, storeTel str 期望送达: %s 客户姓名: %s 客户电话: %s +店铺名称: %s 订单编号: %s
%s#%d %s @@ -211,6 +212,7 @@ func (c *PrinterHandler) getOrderContentV2(order *model.GoodsOrder, storeTel str utils.Time2Str(expectedDeliveryTime), order.ConsigneeName, order.ConsigneeMobile, + order.StoreName, order.VendorOrderID, jxutils.GetVendorName(order.VendorID), order.OrderSeq, @@ -227,6 +229,7 @@ func (c *PrinterHandler) getOrderContentV2(order *model.GoodsOrder, storeTel str orderParams = append(orderParams, order.SkuCount, order.GoodsCount, order.OrderSeq) return fmt.Sprintf(orderFmt, orderParams...) } + func (c *PrinterHandler) getOrderContentBigV2(order *model.GoodsOrder, storeTel string, storeDetail *dao.StoreDetail) (content string) { expectedDeliveryTime := order.ExpectedDeliveredTime if utils.IsTimeZero(expectedDeliveryTime) { @@ -257,6 +260,7 @@ func (c *PrinterHandler) getOrderContentBigV2(order *model.GoodsOrder, storeTel 期望送达: %s 客户姓名: %s 客户电话: %s +店铺名称: %s 订单编号: %s
%s#%d %s @@ -274,6 +278,7 @@ func (c *PrinterHandler) getOrderContentBigV2(order *model.GoodsOrder, storeTel utils.Time2Str(expectedDeliveryTime), order.ConsigneeName, order.ConsigneeMobile, + order.StoreName, order.VendorOrderID, jxutils.GetVendorName(order.VendorID), order.OrderSeq, diff --git a/business/partner/purchase/ebai/im.go b/business/partner/purchase/ebai/im.go index a1edd851e..d759a8925 100644 --- a/business/partner/purchase/ebai/im.go +++ b/business/partner/purchase/ebai/im.go @@ -9,7 +9,7 @@ import ( ) const ( - IMVendorIDELM = 11 //饿了么 + IMVendorIDELM = 3 //饿了么 ) // OnImMessage 用户/骑手 发送/已读消息 回调 diff --git a/business/partner/purchase/im/im.go b/business/partner/purchase/im/im.go index b7ad0cf4e..b26425a62 100644 --- a/business/partner/purchase/im/im.go +++ b/business/partner/purchase/im/im.go @@ -5,6 +5,10 @@ import ( "errors" "fmt" + "git.rosy.net.cn/jx-callback/business/jxutils" + + "git.rosy.net.cn/baseapi/utils/errlist" + "git.rosy.net.cn/jx-callback/globals" "git.rosy.net.cn/baseapi/platformapi/ebaiapi" @@ -19,7 +23,6 @@ import ( // SendToVendor 向平台发消息 func SendToVendor(msg []byte) { var ( - //w http.ResponseWriter sendData SendData err error elmAppID = api.EbaiAPI.GetSource() @@ -36,7 +39,11 @@ func SendToVendor(msg []byte) { //发送信息 if sendData.VendorID == VendorIDMT { temp, _ := json.Marshal(sendData.Data) - Send(temp) + if sendData.Data.(map[string]interface{})["app_id"] == nil { + globals.SugarLogger.Debug("SendToVendor appId=null") + return + } + Send(temp, sendData.Data.(map[string]interface{})["app_id"]) } if sendData.VendorID == VendorIDELM { param := sendData.Data.(ebaiapi.BusinessSendMsgReq) @@ -46,23 +53,24 @@ func SendToVendor(msg []byte) { } } - if err != nil { - ClientRender(Fail, FailMsg, map[string]string{ - "errMsg": fmt.Sprintf("%v", err), - }) - return - } else { - ClientRender(SuccessCode, SuccessMsg, map[string]interface{}{ - "vendorID": sendData.VendorID, - "msg": "ok", - }) - return - } + //if err != nil { + // ClientRender(Fail, FailMsg, map[string]string{ + // "errMsg": fmt.Sprintf("%v", err), + // }) + // return err + //} else { + // ClientRender(SuccessCode, SuccessMsg, map[string]interface{}{ + // "vendorID": sendData.VendorID, + // "msg": "ok", + // }) + // return nil + //} + return } -func Send(data []byte) { - //生成完整url - fullUrl := GenFullUrl() //clientID暂时不用 +func Send(data []byte, appID interface{}) { + //根据appID生成完整url + fullUrl := GenFullUrl(appID.(float64)) //clientID暂时不用 conn, resp, err := websocket.DefaultDialer.Dial(fullUrl, nil) if err != nil || resp.StatusCode != 101 { @@ -83,11 +91,11 @@ func Send(data []byte) { for { _, msg, err := conn.ReadMessage() + temp := string(msg) if err != nil { break } else { - temp := string(msg) - if temp != HeartCheckSuccess || temp != "成功" { + if temp != HeartSuccessWord { ReadMsgFromVendor(VendorIDMT, "", msg) } } @@ -96,6 +104,83 @@ func Send(data []byte) { return } +// MtInit 发送心跳 +func MtInit() { + data := []byte(HeartCheckMsg) + //生成完整url + url := GenFullUrl2() + //主连接 + jxutils.CallMsgHandlerAsync(func() { + conn, resp, err := websocket.DefaultDialer.Dial(url.UrlMain, nil) + if err != nil || resp.StatusCode != 101 { + fmt.Printf("连接失败:%v http响应不成功", err) + } + //关闭 + defer func(conn *websocket.Conn) { + err := conn.Close() + if err != nil { + return + } + }(conn) + + //client连接事件 + client := NewClient(url.ClientIDMain, conn, ClientTypeMt) + Manager.Connect <- client + + err = conn.WriteMessage(websocket.TextMessage, data) + if err != nil { + fmt.Println(err) + } + + for { + _, msg, err := conn.ReadMessage() + temp := string(msg) + if err != nil || temp != "HB" { + break + } + fmt.Printf("%s receive: %s\n", conn.RemoteAddr(), string(msg)) + } + }, url.ClientIDMain) + + //副连接 + if url.UrlSub != "" { + jxutils.CallMsgHandlerAsync(func() { + connSub, respSub, errSub := websocket.DefaultDialer.Dial(url.UrlSub, nil) + if errSub != nil || respSub.StatusCode != 101 { + fmt.Printf("连接失败:%v http响应不成功", errSub) + } + + //关闭 + defer func(conn *websocket.Conn) { + err := conn.Close() + if err != nil { + return + } + }(connSub) + + //client连接事件 + client := NewClient(url.ClientIDSub, connSub, ClientTypeMt) + Manager.Connect <- client + + errSub = connSub.WriteMessage(websocket.TextMessage, data) + if errSub != nil { + fmt.Println(errSub) + } + + for { + _, msg, err := connSub.ReadMessage() + temp := string(msg) + if err != nil || temp != HeartCheckSuccess { + break + } + fmt.Printf("%s connSub:receive: %s\n", connSub.RemoteAddr(), string(msg)) + } + + }, url.ClientIDSub) + } + +} + // ReadMsgFromClient 存储客户端发送的消息 func ReadMsgFromClient(vendorID int, elmAppID string, msg interface{}) { var ( @@ -221,13 +306,8 @@ func PushMsgByCid(vendorStoreID string, vendorID int) error { func SetMessageDetail(req *JXMsg, vendorID int, elmAppID string) error { //生成京西消息ID detail msgID := GenMsgDetailID(req, vendorID, elmAppID) - err := rdb.Set("test", "可以插入数据sjdfoiqaj", ExpireTimeDay) - if err != nil { - globals.SugarLogger.Debugf("测试插入err:%v", err) - } data, _ := json.Marshal(req) - err = rdb.RPush(msgID, string(data)) - globals.SugarLogger.Debugf("im SetUserList err=%v", err) + err := rdb.RPush(msgID, string(data)) ok, err := rdb.ExpireResult(msgID, ExpireTimeDay) if err != nil || !ok { return err @@ -251,12 +331,6 @@ func SetUserList(jxMsg *JXMsg, userList *UserMessageList, vendorID int, elmAppID //存储当前数据 data, _ := json.Marshal(userList) err = rdb.RPush(msgID, string(data)) - globals.SugarLogger.Debugf("im SetUserList msgID=%s", msgID) - globals.SugarLogger.Debugf("im SetUserList err=%v", err) - //test - str := rdb.Get(msgID) - globals.SugarLogger.Debugf("im SetUserList str=%v", str) - //over ok, err := rdb.ExpireResult(msgID, ExpireTimeDay) if err != nil || !ok { return err @@ -331,6 +405,8 @@ func GetImUserList(req []RelInfo) (map[string][]interface{}, error) { temp := rdb.LRange(j) for _, v := range temp { retVal[j] = append(retVal[j], v) + //暂时写死 + //retVal["userList"] = append(retVal["userList"], v) } } return retVal, nil @@ -351,6 +427,7 @@ func GetImChatDetail(req []UserRelInfo) (map[string][]interface{}, error) { temp := rdb.LRange(j) for _, v := range temp { retVal[j] = append(retVal[j], v) + //retVal["chatDetail"] = append(retVal["chatDetail"], v) } } return retVal, nil @@ -388,3 +465,18 @@ func SetJxMsgRead(appID, vendorStoreID, vendorID, userID string) error { } return nil } + +// DelRedisByKey 清除redis数据 +func DelRedisByKey(keys []string) { + var errList errlist.ErrList + for _, key := range keys { + err := rdb.Del(key) + if err != nil { + errList.AddErr(err) + } + } + if errList.GetErrListAsOne() != nil { + globals.SugarLogger.Debugf("DelRedisByKey err=%v", errList.GetErrListAsOne()) + } + return +} diff --git a/business/partner/purchase/im/im_model.go b/business/partner/purchase/im/im_model.go index a25892efe..3eb6bfa28 100644 --- a/business/partner/purchase/im/im_model.go +++ b/business/partner/purchase/im/im_model.go @@ -12,6 +12,8 @@ import ( "sync" "time" + "git.rosy.net.cn/jx-callback/globals" + "git.rosy.net.cn/baseapi/platformapi/mtwmapi" "git.rosy.net.cn/jx-callback/globals/api" "github.com/gazeboxu/mapstructure" @@ -38,6 +40,7 @@ type ClientManager struct { type Client struct { ClientId string // 标识ID Socket *websocket.Conn // 用户连接 + ClientType string //标识是美团/客户端长链接 ConnectTime uint64 // 首次连接时间 IsDeleted bool // 是否删除或下线 UserId string // 业务端标识用户ID @@ -132,27 +135,45 @@ type UserRelInfo struct { UserID string `json:"userID"` //用户id/groupID } +// UrlInfo 生成美团长链接url信息 +type UrlInfo struct { + UrlMain string `json:"urlMain"` //主连接路由 + ClientIDMain string `json:"ClientIDMain"` //主连接id + UrlSub string `json:"urlSub"` //副连接路由 + ClientIDSub string `json:"ClientIDSub"` //副连接id +} + var ( - cfg *ini.File - rdb = api.Cacher - Manager = NewClientManager() // 管理者 - CommonSetting = &commonConf{} - GlobalSetting = &global{} - ToClientChan chan clientInfo - heartbeatInterval = 60 * time.Second // 心跳间隔 - HeartCheckMsg = "~#HHHBBB#~" //心跳检测消息 - HeartCheckSuccess = "HB" //成功发送返回心跳消息 - VendorIDMT = 10 //im美团 - VendorIDELM = 11 //im饿了么 - SendTypeJx = "jx" //京西客户端发送方标识 - SendTypeMt = "mt" //美团用户发送方标识符 - SendTypeElm = "elm" //饿了么用户发送方标识符 - MTIMPushUrl = "wss://wpush.meituan.com/websocket" //buildPushConnect建立长连接 + cfg *ini.File + rdb = api.Cacher + //客户端相关 + Manager = NewClientManager() // 管理者 + ToClientChan chan clientInfo + ClientTypeJx = "jx" //京西客户端 + ClientTypeMt = "mt" //美团客户端 + //配置文件 + CommonSetting = &commonConf{} + GlobalSetting = &global{} + //心跳相关 + heartbeatInterval = 60 * time.Second // 心跳间隔 + HeartCheckMsg = "~#HHHBBB#~" //心跳检测消息 + HeartCheckSuccess = "HB" //成功发送返回心跳消息 + HeartSuccessWord = "成功" //成功发送返回心跳消息 + //平台标识 + AppID5873 = float64(5873) + AppID589 = "589" + VendorIDMT = 1 //im美团 + VendorIDELM = 3 //im饿了么 + SendTypeJx = "jx" //京西客户端发送方标识 + SendTypeMt = "mt" //美团用户发送方标识符 + SendTypeElm = "elm" //饿了么用户发送方标识符 + MTIMPushUrl = "wss://wpush.meituan.com/websocket" //buildPushConnect建立长连接 + ) const ( - ExpireTimeDay = 24 * time.Hour //redis一天过期时间 - maxMessageSize = 8192 // 最大的消息大小 + ExpireTimeDay = 2 * time.Hour //redis一天过期时间 + maxMessageSize = 8192 // 最大的消息大小 ) type renderData struct { @@ -162,7 +183,7 @@ type renderData struct { const ( SuccessCode = 0 SuccessMsg = "success" - Fail = -1 + FailCode = -1 FailMsg = "fail" SYSTEM_ID_ERROR = -1001 @@ -189,12 +210,13 @@ func Render(conn *websocket.Conn, messageId string, code int, message string, da } } -func ClientRender(code int, msg string, data interface{}) (str string) { +// ClientRender http响应 +func ClientRender(code int, msg string) (str string) { var retData RetData retData.Code = code retData.Msg = msg - retData.Data = data + //retData.Data = data retJson, _ := json.Marshal(retData) str = string(retJson) @@ -272,7 +294,16 @@ func getIntranetIp() string { } // GenFullUrl 组装完整websocket url以及生成clientID -func GenFullUrl() (fullUrl string) { +func GenFullUrl(appID float64) (fullUrl string) { + if appID == AppID5873 { + if resp5873, err := api.Mtwm2API.GetConnectionToken(); err == nil { + r1 := mtwmapi.GetConnTokenResp{} + err = mapstructure.Decode(resp5873, &r1) + fullUrl = MTIMPushUrl + "/" + r1.AppKey + "/" + r1.ConnectionToken + return fullUrl + } + } + //589/4123 resp, err := api.MtwmAPI.GetConnectionToken() if err != nil { return "" @@ -280,13 +311,48 @@ func GenFullUrl() (fullUrl string) { retVal := mtwmapi.GetConnTokenResp{} err = mapstructure.Decode(resp, &retVal) fullUrl = MTIMPushUrl + "/" + retVal.AppKey + "/" + retVal.ConnectionToken - //clientID = api.MtwmAPI.GetAppID() + ":" + retVal.ConnectionToken - //打印输出 - //fmt.Printf("Create websocket connect failCount:%d", retVal.UserCount) + + //todo 测试 + tete := api.MtwmAPI.GetAppID() + globals.SugarLogger.Debugf("GenFullUrl appID=%s", tete) + //todo + + fmt.Printf("GenFullUrl:%s", fullUrl) return fullUrl } -//生成随机字符串 +// GenFullUrl2 组装完整websocket url以及生成clientID +func GenFullUrl2() *UrlInfo { + urlInfo := &UrlInfo{} + //1 589/4123 + resp, err := api.MtwmAPI.GetConnectionToken() + if err != nil { + return nil + } + retVal := mtwmapi.GetConnTokenResp{} + err = mapstructure.Decode(resp, &retVal) + urlInfo.UrlMain = MTIMPushUrl + "/" + retVal.AppKey + "/" + retVal.ConnectionToken + urlInfo.ClientIDMain = retVal.AppKey + ":" + retVal.ConnectionToken + + if api.MtwmAPI.GetAppID() == AppID589 { //目前果园无4123 + if resp5873, err := api.Mtwm2API.GetConnectionToken(); err == nil { + r1 := mtwmapi.GetConnTokenResp{} + err = mapstructure.Decode(resp5873, &r1) + urlInfo.UrlSub = MTIMPushUrl + "/" + r1.AppKey + "/" + r1.ConnectionToken + urlInfo.ClientIDSub = r1.AppKey + ":" + r1.ConnectionToken + } + } + + //todo 测试 + tete := api.MtwmAPI.GetAppID() + globals.SugarLogger.Debugf("GenFullUrl appID=%s", tete) + //todo + + fmt.Printf("GenFullUrl:urlMain=%s, urlSub=%s", urlInfo.UrlMain, urlInfo.UrlSub) + return urlInfo +} + +// RandString 生成随机字符串 func RandString() string { bytes := make([]byte, 16) for i := 0; i < 16; i++ { diff --git a/business/partner/purchase/im/im_server.go b/business/partner/purchase/im/im_server.go index a76db0e23..2c0e1ef11 100644 --- a/business/partner/purchase/im/im_server.go +++ b/business/partner/purchase/im/im_server.go @@ -6,6 +6,8 @@ import ( "net/http" "time" + "git.rosy.net.cn/jx-callback/business/jxutils" + "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/globals" @@ -18,16 +20,21 @@ func Init() { //写入全局变量 Setup() //建立长链接 - go Send([]byte(HeartCheckMsg)) + jxutils.CallMsgHandlerAsync(func() { + MtInit() + }, "MtInit:"+RandString()) //启动定时器 PingTimer() - go WriteMessage() + jxutils.CallMsgHandlerAsync(func() { + WriteMessage() + }, "WriteMessage:"+RandString()) - go Manager.Start() + jxutils.CallMsgHandlerAsync(func() { + Manager.Start() + }, "Manager Start:"+RandString()) - //fmt.Printf("服务器启动成功,端口号:%s\n", CommonSetting.HttpPort) } func Run(w http.ResponseWriter, r *http.Request) { @@ -54,8 +61,8 @@ func Run(w http.ResponseWriter, r *http.Request) { } else { clientID = temp } - globals.SugarLogger.Debugf("Run clientID=%s", clientID) - clientSocket := NewClient(clientID, conn) + + clientSocket := NewClient(clientID, conn, ClientTypeJx) //读取客户端消息 clientSocket.Read() @@ -69,26 +76,6 @@ func Run(w http.ResponseWriter, r *http.Request) { Manager.Connect <- clientSocket } -func StartWebSocket(conn *websocket.Conn, clientID string, err error) { - - //设置读取消息大小上线 - conn.SetReadLimit(maxMessageSize) - - clientSocket := NewClient(clientID, conn) - - //读取客户端消息 - clientSocket.Read() - - if err = ConnRender(conn, renderData{ClientId: clientID}); err != nil { - _ = conn.Close() - return - } - - // 用户连接事件 - Manager.Connect <- clientSocket - -} - // PingTimer 定时器发送心跳 func PingTimer() { go func() { @@ -99,16 +86,20 @@ func PingTimer() { for { i++ <-ticker.C - //对美团发送心跳 - Send([]byte(HeartCheckMsg)) - for clientId, conn := range Manager.AllClient() { - if err := conn.Socket.WriteControl(websocket.PingMessage, []byte{}, time.Now().Add(time.Second)); err != nil { - Manager.DisConnect <- conn - globals.SugarLogger.Debugf("发送心跳失败: %s 总连接数:%d", clientId, Manager.Count()) - } - if err := ConnRender(conn.Socket, renderData{ClientId: clientId}); err != nil { - return + if conn.ClientType == ClientTypeJx { + if err := conn.Socket.WriteControl(websocket.PingMessage, []byte{}, time.Now().Add(time.Second)); err != nil { + Manager.DisConnect <- conn + globals.SugarLogger.Debugf("发送心跳失败: %s 总连接数:%d", clientId, Manager.Count()) + } + if err := ConnRender(conn.Socket, renderData{ClientId: clientId}); err != nil { + return + } + } else { + if err := conn.Socket.WriteMessage(websocket.TextMessage, []byte(HeartCheckMsg)); err != nil { + //对美团重新建立连接 + MtInit() + } } globals.SugarLogger.Debugf("发送心跳 clientId=%s,i=%d", clientId, i) } @@ -121,14 +112,16 @@ func WriteMessage() { i := 0 for { clientInfo := <-ToClientChan - //广播发送通知所有客户端 + //广播发送通知所有京西客户端 i++ fmt.Printf("WriteMessage clientInfo=%s i=%d", utils.Format4Output(clientInfo, false), i) if Manager.AllClient() != nil { for _, conn := range Manager.AllClient() { - globals.SugarLogger.Debugf("WriteMessage conn.ClientId=%s", conn.ClientId) - if err := Render(conn.Socket, clientInfo.MessageId, clientInfo.Code, clientInfo.Msg, clientInfo.Data); err != nil { - Manager.DisConnect <- conn + if conn.ClientType == ClientTypeJx { //只发送给京西 + globals.SugarLogger.Debugf("WriteMessage conn.ClientId=%s", conn.ClientId) + if err := Render(conn.Socket, clientInfo.MessageId, clientInfo.Code, clientInfo.Msg, clientInfo.Data); err != nil { + Manager.DisConnect <- conn + } } } } else { @@ -162,6 +155,8 @@ func (c *Client) Read() { go func() { for { messageType, msg, err := c.Socket.ReadMessage() + //temp := string(msg) + //fmt.Print(temp) if err != nil { if messageType == -1 && websocket.IsCloseError(err, websocket.CloseGoingAway, websocket.CloseNormalClosure, websocket.CloseNoStatusReceived) { Manager.DisConnect <- c @@ -169,10 +164,8 @@ func (c *Client) Read() { } else if messageType != websocket.PingMessage { return } - } else { - SendToVendor(msg) - return } + SendToVendor(msg) } }() } @@ -197,10 +190,11 @@ func (manager *ClientManager) EventDisconnect(client *Client) { //以下为客户端Client操作******************************************* // NewClient 初始化Client -func NewClient(clientId string, socket *websocket.Conn) *Client { +func NewClient(clientId string, socket *websocket.Conn, clientType string) *Client { return &Client{ ClientId: clientId, Socket: socket, + ClientType: clientType, ConnectTime: uint64(time.Now().Unix()), IsDeleted: false, } diff --git a/controllers/im.go b/controllers/im.go index 862003efd..7f691df49 100644 --- a/controllers/im.go +++ b/controllers/im.go @@ -11,46 +11,13 @@ type IMController struct { web.Controller } -var maxMessageSize = int64(8192) // 最大的消息大小 - // @Title IM初始化长链接 // @Description IM初始化长链接 // @Success 200 {object} controllers.CallResult // @Failure 200 {object} controllers.CallResult // @router /StartWebSocket [get] func (c *IMController) StartWebSocket() { - im.Run(c.Ctx.ResponseWriter, c.Ctx.Request) - // - //upgrader.CheckOrigin = func(r *http.Request) bool { - // return true - //} - //conn, err := upgrader.Upgrade(c.Ctx.ResponseWriter, c.Ctx.Request, nil) - //if err != nil { - // globals.SugarLogger.Errorf("upgrade error: %v", err) - // return - //} - //defer conn.Close() - // - //clientID := c.GetString("clientID") - //globals.SugarLogger.Debugf("clientID=%s", clientID) - // - ////设置读取消息大小上线 - //conn.SetReadLimit(maxMessageSize) - // - //clientSocket := im.NewClient(clientID, conn) - // - ////读取客户端消息 - //clientSocket.Read() - // - //if err = im.ConnRender(conn, im.RetData{Data: clientID}); err != nil { - // _ = conn.Close() - // return - //} - // - //// 用户连接事件 - //im.Manager.Connect <- clientSocket - } // @Title IM获取门店用户聊天列表 diff --git a/main.go b/main.go index 7e233a897..48d01c5c7 100644 --- a/main.go +++ b/main.go @@ -97,11 +97,10 @@ func Init() { auto_delivery.Init() // 初始化骑手列表 im.Init() //初始化ws连接 - //http.HandleFunc("/ws", im.Run) //test //mux := http.NewServeMux() - //mux.HandleFunc("/v2/im/Run", im.Run) + //mux.HandleFunc("/v2/im/SendToVendor", im.Run) //go http.ListenAndServe(":8082", mux) } From 82677cc89e54ad5f52ecff5aa4ebef7bdbfe033f Mon Sep 17 00:00:00 2001 From: richboo111 Date: Fri, 5 May 2023 15:31:04 +0800 Subject: [PATCH 02/23] 1 --- business/partner/printer/trendit/trendit.go | 1 - business/partner/purchase/im/im_model.go | 16 ---------------- business/partner/purchase/im/im_server.go | 6 +++--- 3 files changed, 3 insertions(+), 20 deletions(-) diff --git a/business/partner/printer/trendit/trendit.go b/business/partner/printer/trendit/trendit.go index 07eefb863..3da8f14bd 100644 --- a/business/partner/printer/trendit/trendit.go +++ b/business/partner/printer/trendit/trendit.go @@ -203,7 +203,6 @@ func (c *PrinterHandler) getOrderContentV2(order *model.GoodsOrder, storeTel str -------------------------------- 客户备注:%s -------------------------------- -商品列表 商品名` + trenditapi.StrRepeat(" ", 20) + `数量 ` + trenditapi.StrRepeat("-", 32) + ` ` diff --git a/business/partner/purchase/im/im_model.go b/business/partner/purchase/im/im_model.go index 3eb6bfa28..49a984ea3 100644 --- a/business/partner/purchase/im/im_model.go +++ b/business/partner/purchase/im/im_model.go @@ -12,8 +12,6 @@ import ( "sync" "time" - "git.rosy.net.cn/jx-callback/globals" - "git.rosy.net.cn/baseapi/platformapi/mtwmapi" "git.rosy.net.cn/jx-callback/globals/api" "github.com/gazeboxu/mapstructure" @@ -311,13 +309,6 @@ func GenFullUrl(appID float64) (fullUrl string) { retVal := mtwmapi.GetConnTokenResp{} err = mapstructure.Decode(resp, &retVal) fullUrl = MTIMPushUrl + "/" + retVal.AppKey + "/" + retVal.ConnectionToken - - //todo 测试 - tete := api.MtwmAPI.GetAppID() - globals.SugarLogger.Debugf("GenFullUrl appID=%s", tete) - //todo - - fmt.Printf("GenFullUrl:%s", fullUrl) return fullUrl } @@ -342,13 +333,6 @@ func GenFullUrl2() *UrlInfo { urlInfo.ClientIDSub = r1.AppKey + ":" + r1.ConnectionToken } } - - //todo 测试 - tete := api.MtwmAPI.GetAppID() - globals.SugarLogger.Debugf("GenFullUrl appID=%s", tete) - //todo - - fmt.Printf("GenFullUrl:urlMain=%s, urlSub=%s", urlInfo.UrlMain, urlInfo.UrlSub) return urlInfo } diff --git a/business/partner/purchase/im/im_server.go b/business/partner/purchase/im/im_server.go index 2c0e1ef11..d635146dc 100644 --- a/business/partner/purchase/im/im_server.go +++ b/business/partner/purchase/im/im_server.go @@ -82,9 +82,9 @@ func PingTimer() { ticker := time.NewTicker(heartbeatInterval) defer ticker.Stop() //测试用 - i := 0 + //i := 0 for { - i++ + //i++ <-ticker.C for clientId, conn := range Manager.AllClient() { if conn.ClientType == ClientTypeJx { @@ -101,7 +101,7 @@ func PingTimer() { MtInit() } } - globals.SugarLogger.Debugf("发送心跳 clientId=%s,i=%d", clientId, i) + //globals.SugarLogger.Debugf("发送心跳 clientId=%s,i=%d", clientId, i) } } }() From 2108858e9f8d61161423fa4c11a670cd540091ff Mon Sep 17 00:00:00 2001 From: richboo111 Date: Fri, 5 May 2023 15:40:23 +0800 Subject: [PATCH 03/23] 1 --- business/partner/printer/trendit/trendit.go | 1 - 1 file changed, 1 deletion(-) diff --git a/business/partner/printer/trendit/trendit.go b/business/partner/printer/trendit/trendit.go index 3da8f14bd..5d670d967 100644 --- a/business/partner/printer/trendit/trendit.go +++ b/business/partner/printer/trendit/trendit.go @@ -268,7 +268,6 @@ func (c *PrinterHandler) getOrderContentBigV2(order *model.GoodsOrder, storeTel -------------------------------- 客户备注:%s -------------------------------- -商品列表 商品名` + trenditapi.StrRepeat(" ", 20) + `数量 ` + trenditapi.StrRepeat("-", 32) + ` ` From 0f7b686091a02d9868af40cc8f76ecd35324d702 Mon Sep 17 00:00:00 2001 From: richboo111 Date: Fri, 5 May 2023 16:49:45 +0800 Subject: [PATCH 04/23] 1 --- business/jxutils/weixinmsg/weixinmsg.go | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/business/jxutils/weixinmsg/weixinmsg.go b/business/jxutils/weixinmsg/weixinmsg.go index a15939678..4bb3c571a 100644 --- a/business/jxutils/weixinmsg/weixinmsg.go +++ b/business/jxutils/weixinmsg/weixinmsg.go @@ -214,6 +214,12 @@ func NotifyNewOrder(order *model.GoodsOrder) (err error) { return nil } storeDetail, err := dao.GetStoreDetail(dao.GetDB(), jxutils.GetSaleStoreIDFromOrder(order), order.VendorID, "") + var expectedDeliveredTime = "" + if utils.Time2Str(order.ExpectedDeliveredTime) != "1970-01-01 00:00:00" { + expectedDeliveredTime = "请于" + utils.Time2Str(order.ExpectedDeliveredTime) + "之前送达" + } else { + expectedDeliveredTime = "请立即送达" + } data := map[string]interface{}{ "keyword1": map[string]interface{}{ //订单来源 @@ -229,11 +235,11 @@ func NotifyNewOrder(order *model.GoodsOrder) (err error) { "color": WX_NEW_ORDER_TEMPLATE_COLOR, }, "keyword4": map[string]interface{}{ //下单时间及金额 - "value": utils.Time2Str(order.CreatedAt) + "(¥" + utils.Int64ToStr(order.ActualPayPrice) + ")", + "value": utils.Time2Str(order.CreatedAt), "color": WX_NEW_ORDER_TEMPLATE_COLOR, }, "keyword5": map[string]interface{}{ //配送时间 - "value": order.ExpectedDeliveredTime, + "value": expectedDeliveredTime, "color": WX_NEW_ORDER_TEMPLATE_COLOR, }, } From 834b9321d6b0e8a097da9b07d501c822f77dd49d Mon Sep 17 00:00:00 2001 From: richboo111 Date: Fri, 5 May 2023 16:51:21 +0800 Subject: [PATCH 05/23] 1 --- business/jxutils/weixinmsg/weixinmsg.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/business/jxutils/weixinmsg/weixinmsg.go b/business/jxutils/weixinmsg/weixinmsg.go index 4bb3c571a..2abf492f6 100644 --- a/business/jxutils/weixinmsg/weixinmsg.go +++ b/business/jxutils/weixinmsg/weixinmsg.go @@ -216,7 +216,7 @@ func NotifyNewOrder(order *model.GoodsOrder) (err error) { storeDetail, err := dao.GetStoreDetail(dao.GetDB(), jxutils.GetSaleStoreIDFromOrder(order), order.VendorID, "") var expectedDeliveredTime = "" if utils.Time2Str(order.ExpectedDeliveredTime) != "1970-01-01 00:00:00" { - expectedDeliveredTime = "请于" + utils.Time2Str(order.ExpectedDeliveredTime) + "之前送达" + expectedDeliveredTime = "请于" + utils.Time2Str(order.ExpectedDeliveredTime) + "前送达" } else { expectedDeliveredTime = "请立即送达" } From c72794a9221d504a3fa49b7c28a41080985246c0 Mon Sep 17 00:00:00 2001 From: richboo111 Date: Fri, 5 May 2023 17:05:19 +0800 Subject: [PATCH 06/23] 1 --- business/jxutils/weixinmsg/weixinmsg.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/business/jxutils/weixinmsg/weixinmsg.go b/business/jxutils/weixinmsg/weixinmsg.go index 2abf492f6..1841068ee 100644 --- a/business/jxutils/weixinmsg/weixinmsg.go +++ b/business/jxutils/weixinmsg/weixinmsg.go @@ -214,11 +214,12 @@ func NotifyNewOrder(order *model.GoodsOrder) (err error) { return nil } storeDetail, err := dao.GetStoreDetail(dao.GetDB(), jxutils.GetSaleStoreIDFromOrder(order), order.VendorID, "") + var expectedDeliveredTime = "" - if utils.Time2Str(order.ExpectedDeliveredTime) != "1970-01-01 00:00:00" { - expectedDeliveredTime = "请于" + utils.Time2Str(order.ExpectedDeliveredTime) + "前送达" - } else { + if utils.Time2Str(order.ExpectedDeliveredTime) == "1970-01-01 00:00:00" || len(utils.Time2Str(order.ExpectedDeliveredTime)) == 0 { expectedDeliveredTime = "请立即送达" + } else { + expectedDeliveredTime = "请于" + utils.Time2Str(order.ExpectedDeliveredTime) + "前送达" } data := map[string]interface{}{ From e37225a2efa4e692b0f2a96ff268e87a597fce0b Mon Sep 17 00:00:00 2001 From: richboo111 Date: Fri, 5 May 2023 17:26:53 +0800 Subject: [PATCH 07/23] 1 --- business/jxutils/weixinmsg/weixinmsg.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/business/jxutils/weixinmsg/weixinmsg.go b/business/jxutils/weixinmsg/weixinmsg.go index 1841068ee..da5b97917 100644 --- a/business/jxutils/weixinmsg/weixinmsg.go +++ b/business/jxutils/weixinmsg/weixinmsg.go @@ -217,9 +217,9 @@ func NotifyNewOrder(order *model.GoodsOrder) (err error) { var expectedDeliveredTime = "" if utils.Time2Str(order.ExpectedDeliveredTime) == "1970-01-01 00:00:00" || len(utils.Time2Str(order.ExpectedDeliveredTime)) == 0 { - expectedDeliveredTime = "请立即送达" + expectedDeliveredTime = "立即送" } else { - expectedDeliveredTime = "请于" + utils.Time2Str(order.ExpectedDeliveredTime) + "前送达" + expectedDeliveredTime = "预定单" } data := map[string]interface{}{ From 27d6e6398831f0ef02363f3e74996b67871f9f59 Mon Sep 17 00:00:00 2001 From: richboo111 Date: Sat, 6 May 2023 12:04:08 +0800 Subject: [PATCH 08/23] 1 --- business/partner/printer/trendit/trendit.go | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/business/partner/printer/trendit/trendit.go b/business/partner/printer/trendit/trendit.go index 5d670d967..5627bc19b 100644 --- a/business/partner/printer/trendit/trendit.go +++ b/business/partner/printer/trendit/trendit.go @@ -101,10 +101,14 @@ func (p PrinterHandler) PrintOrder(ctx *jxcontext.Context, store *model.Store, s return } content := "" - if store.PrinterFontSize == partner.PrinterFontSizeBig || store.PrinterFontSize == partner.PrinterFontSizeBig2 { - content = p.getOrderContentBigV2(order, store.Tel1, storeDetail) + if store.ID == 669063 { + content = p.getOrderContent(order, store.Tel1, storeDetail) } else { - content = p.getOrderContentV2(order, store.Tel1, storeDetail) + if store.PrinterFontSize == partner.PrinterFontSizeBig || store.PrinterFontSize == partner.PrinterFontSizeBig2 { + content = p.getOrderContentBigV2(order, store.Tel1, storeDetail) + } else { + content = p.getOrderContentV2(order, store.Tel1, storeDetail) + } } count := 0 for { @@ -326,6 +330,7 @@ func (c *PrinterHandler) getOrderContent(order *model.GoodsOrder, storeTel strin 期望送达: %s 客户姓名: %s 客户电话: %s +店铺名称: %s 订单编号: %s
%s#%d %s @@ -334,7 +339,6 @@ func (c *PrinterHandler) getOrderContent(order *model.GoodsOrder, storeTel strin -------------------------------- 客户备注:%s -------------------------------- -商品列表 商品名` + trenditapi.StrRepeat(" ", 2) + `数量` + trenditapi.StrRepeat(" ", 3) + `单价` + trenditapi.StrRepeat(" ", 5) + `小计 ` + trenditapi.StrRepeat("-", 32) + ` ` @@ -343,6 +347,7 @@ func (c *PrinterHandler) getOrderContent(order *model.GoodsOrder, storeTel strin utils.Time2Str(expectedDeliveryTime), order.ConsigneeName, order.ConsigneeMobile, + order.StoreName, order.VendorOrderID, jxutils.GetVendorName(order.VendorID), order.OrderSeq, @@ -394,6 +399,7 @@ func (c *PrinterHandler) getOrderContentBig(order *model.GoodsOrder, storeTel st 期望送达: %s 客户姓名: %s 客户电话: %s +店铺名称: %s 订单编号: %s
%s#%d %s From db5c6aa18730318d63019745b1992a3ed7be85c2 Mon Sep 17 00:00:00 2001 From: richboo111 Date: Sat, 6 May 2023 13:51:27 +0800 Subject: [PATCH 09/23] 1 --- business/partner/printer/trendit/trendit.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/business/partner/printer/trendit/trendit.go b/business/partner/printer/trendit/trendit.go index 5627bc19b..2d08b6fe8 100644 --- a/business/partner/printer/trendit/trendit.go +++ b/business/partner/printer/trendit/trendit.go @@ -102,7 +102,11 @@ func (p PrinterHandler) PrintOrder(ctx *jxcontext.Context, store *model.Store, s } content := "" if store.ID == 669063 { - content = p.getOrderContent(order, store.Tel1, storeDetail) + if store.PrinterFontSize == partner.PrinterFontSizeBig || store.PrinterFontSize == partner.PrinterFontSizeBig2 { + content = p.getOrderContentBig(order, store.Tel1, storeDetail) + } else { + content = p.getOrderContent(order, store.Tel1, storeDetail) + } } else { if store.PrinterFontSize == partner.PrinterFontSizeBig || store.PrinterFontSize == partner.PrinterFontSizeBig2 { content = p.getOrderContentBigV2(order, store.Tel1, storeDetail) @@ -408,7 +412,6 @@ func (c *PrinterHandler) getOrderContentBig(order *model.GoodsOrder, storeTel st -------------------------------- 客户备注:%s -------------------------------- -商品列表 商品名 数量 单价 小计 -------------------------------- ` @@ -417,6 +420,7 @@ func (c *PrinterHandler) getOrderContentBig(order *model.GoodsOrder, storeTel st utils.Time2Str(expectedDeliveryTime), order.ConsigneeName, order.ConsigneeMobile, + order.StoreName, order.VendorOrderID, jxutils.GetVendorName(order.VendorID), order.OrderSeq, From 973c3c6bab72db49162786a49e5a3faa3b6120b0 Mon Sep 17 00:00:00 2001 From: richboo111 Date: Sat, 6 May 2023 15:51:31 +0800 Subject: [PATCH 10/23] 1 --- business/partner/purchase/mtwm/order.go | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/business/partner/purchase/mtwm/order.go b/business/partner/purchase/mtwm/order.go index 055483cf2..3bf5a11ad 100644 --- a/business/partner/purchase/mtwm/order.go +++ b/business/partner/purchase/mtwm/order.go @@ -122,6 +122,10 @@ func (p *PurchaseHandler) Map2Order(orderData map[string]interface{}) (order *mo // 因为美团外卖不能自动设置商家门店号,且只能通过商家门店号来访问门店, // 为了在后台设置简单一致,把app_poi_code直接当成平台门店号使用(即在后台设置时,平台门店号与商家门店号一样) // 订单中wm_poi_id实际来平台门店号,app_poi_code为商家门店号,这样一来,这两个就相同了 + + //_修改为, + caution := strings.ReplaceAll(utils.Interface2String(result["caution"]), "_", ",") + order = &model.GoodsOrder{ VendorOrderID: vendorOrderID, // VendorOrderID2: utils.Int64ToStr(utils.MustInterface2Int64(result["wm_order_id_view"])), @@ -130,12 +134,13 @@ func (p *PurchaseHandler) Map2Order(orderData map[string]interface{}) (order *mo StoreID: 0, // VendorStoreID: utils.Int64ToStr(utils.MustInterface2Int64(result["wm_poi_id"])), // StoreID: int(utils.Str2Int64WithDefault(utils.Interface2String(result["app_poi_code"]), 0)), - StoreName: result["wm_poi_name"].(string), - ConsigneeName: result["recipient_name"].(string), - ConsigneeMobile: jxutils.FormalizeMobile(result["recipient_phone"].(string)), - ConsigneeAddress: result["recipient_address"].(string), - CoordinateType: model.CoordinateTypeMars, - BuyerComment: utils.TrimBlankChar(utils.Interface2String(result["caution"])), + StoreName: result["wm_poi_name"].(string), + ConsigneeName: result["recipient_name"].(string), + ConsigneeMobile: jxutils.FormalizeMobile(result["recipient_phone"].(string)), + ConsigneeAddress: result["recipient_address"].(string), + CoordinateType: model.CoordinateTypeMars, + //BuyerComment: utils.TrimBlankChar(utils.Interface2String(result["caution"])), + BuyerComment: utils.TrimBlankChar(caution), ExpectedDeliveredTime: getTimeFromTimestamp(utils.Interface2Int64WithDefault(result["delivery_time"], 0)), PickDeadline: utils.DefaultTimeValue, VendorStatus: utils.Int64ToStr(utils.MustInterface2Int64(result["status"])), From c3bd6181717542f6cbcce0d883846a791312cf16 Mon Sep 17 00:00:00 2001 From: richboo111 Date: Sat, 6 May 2023 17:47:33 +0800 Subject: [PATCH 11/23] 1 --- business/jxstore/cms/sku.go | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/business/jxstore/cms/sku.go b/business/jxstore/cms/sku.go index 26fcc486e..94d4b5813 100644 --- a/business/jxstore/cms/sku.go +++ b/business/jxstore/cms/sku.go @@ -4,7 +4,6 @@ import ( "encoding/json" "errors" "fmt" - "git.rosy.net.cn/jx-callback/globals/api/apimanager" "io" "math" "mime/multipart" @@ -14,6 +13,8 @@ import ( "strings" "time" + "git.rosy.net.cn/jx-callback/globals/api/apimanager" + beego "github.com/astaxie/beego/server/web" "git.rosy.net.cn/baseapi/platformapi/aliupcapi" @@ -1323,7 +1324,27 @@ func updateOrCreateSkuVendorCategoryMap(db *dao.DaoDB, ctx *jxcontext.Context, n ddCategoryID = value } } else { - ddCategoryID = getCategoryByImg(payload["descImg"].(string), payload["img"].(string), payload["img2"].(string), payload["img3"].(string), payload["img4"].(string), payload["img5"].(string)) + imgs := make([]string, 0) + if payload["descImg"] != nil { + imgs = append(imgs, payload["descImg"].(string)) + } + if payload["img"] != "" { + imgs = append(imgs, payload["descImg"].(string)) + } + if payload["img2"] != "" { + imgs = append(imgs, payload["img2"].(string)) + } + if payload["img3"] != "" { + imgs = append(imgs, payload["img3"].(string)) + } + if payload["img4"] != "" { + imgs = append(imgs, payload["img4"].(string)) + } + if payload["img5"] != "" { + imgs = append(imgs, payload["img5"].(string)) + } + ddCategoryID = getCategoryByImg(imgs...) + //ddCategoryID = getCategoryByImg(payload["descImg"].(string), payload["img"].(string), payload["img2"].(string), payload["img3"].(string), payload["img4"].(string), payload["img5"].(string)) } } From a7c1a0c55d5255159fc8a4f8f1550e47530c488f Mon Sep 17 00:00:00 2001 From: richboo111 Date: Sat, 6 May 2023 18:27:24 +0800 Subject: [PATCH 12/23] 1 --- business/partner/delivery/rider.go | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/business/partner/delivery/rider.go b/business/partner/delivery/rider.go index 01a479019..91bc7c61c 100644 --- a/business/partner/delivery/rider.go +++ b/business/partner/delivery/rider.go @@ -3,13 +3,14 @@ package delivery import ( "crypto/rand" "fmt" + "math/big" + "time" + "git.rosy.net.cn/baseapi" "git.rosy.net.cn/baseapi/platformapi/mtwmapi" "git.rosy.net.cn/jx-callback/business/jxutils/jxcontext" "git.rosy.net.cn/jx-callback/business/jxutils/tasksch" "git.rosy.net.cn/jx-callback/business/partner/purchase/mtwm" - "math/big" - "time" "git.rosy.net.cn/baseapi/platformapi/mtpsapi" "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/tiktok_api" @@ -86,6 +87,9 @@ func GetOrderRiderInfoToPlatform(orderId string, wayBillStatus int) { //3.当同一个订单已经上传了一次配送信息,如再次同步会更新配送信息,以最新的一次为准。 //4.如订单已完成、已取消等状态发货将失败。 for _, v := range orders { + if v.Status >= model.OrderStatusFinished || v.Status < model.OrderStatusDelivering { + continue + } if orderId == "" && v.VendorID == model.VendorIDDD { // 抖音门店订单除了三方配送回调时推送,不在主动推送配送消息 continue } @@ -167,7 +171,7 @@ func GetOrderRiderInfoToPlatform(orderId string, wayBillStatus int) { if riderInfo.CourierPhone == "" { storeDetail, err := dao.GetStoreDetail(dao.GetDB(), v.JxStoreID, 0, "") - if err != nil { + if err == nil { riderInfo.CourierPhone = storeDetail.Tel1 } riderInfo.CourierName = "老板" From f8323fb1c1e9b274ec4c4df68ce2d1c136f2700e Mon Sep 17 00:00:00 2001 From: richboo111 Date: Sat, 6 May 2023 18:31:20 +0800 Subject: [PATCH 13/23] 1 --- controllers/tiktok_delivery.go | 1 + 1 file changed, 1 insertion(+) diff --git a/controllers/tiktok_delivery.go b/controllers/tiktok_delivery.go index 377f98bb5..83ea7fb60 100644 --- a/controllers/tiktok_delivery.go +++ b/controllers/tiktok_delivery.go @@ -204,6 +204,7 @@ func (c *LogisticsController) LogisticsQuery() { } c.Data["json"] = wayBillDetail c.ServeJSON() + return } returnParam := &LogisticsQueryRest{ From 563cfb5fba1acd1f8bfde3ccd299e9b34fe9fccf Mon Sep 17 00:00:00 2001 From: richboo111 Date: Tue, 9 May 2023 11:44:53 +0800 Subject: [PATCH 14/23] 1 --- business/jxstore/cms/cms.go | 24 ++++++++++++++++++++++++ business/partner/delivery/rider.go | 6 +++--- controllers/cms.go | 16 ++++++++++++++++ routers/commentsRouter_controllers.go | 9 +++++++++ 4 files changed, 52 insertions(+), 3 deletions(-) diff --git a/business/jxstore/cms/cms.go b/business/jxstore/cms/cms.go index 5c4560a9b..c620a586c 100644 --- a/business/jxstore/cms/cms.go +++ b/business/jxstore/cms/cms.go @@ -583,3 +583,27 @@ func GetCityBankBranches(ctx *jxcontext.Context, cityCode int, bankCode string) } return info, err } + +// GetSToUWalkingDistance 获取商家与用户间步行距离 +//func GetSToUWalkingDistance(sLng, sLat, uLng, uLat float64) (distance float64, err error) { +// var ( +// coords []*baidunavi.Coordinate +// sCoord *baidunavi.Coordinate +// uCoord *baidunavi.Coordinate +// ) +// coords = append(coords, &baidunavi.Coordinate{ +// Lng: sLng, +// Lat: sLat, +// }, &baidunavi.Coordinate{ +// Lat: uLng, +// Lng: uLat, +// }) +// if coords, err = api.BaiDuNaviAPI.BatchCoordinateConvert(coords, baidunavi.CoordSysGCJ02, baidunavi.CoordSysBaiDu); err == nil { +// if len(coords) > 0 { +// //distance=baidunavi. +// //todo 修改为百度地图 +// return jxutils.WalkingDistance(sLng, sLat, uLng, uLat), nil +// } +// } +// return 0, err +//} diff --git a/business/partner/delivery/rider.go b/business/partner/delivery/rider.go index 91bc7c61c..3bddf1f27 100644 --- a/business/partner/delivery/rider.go +++ b/business/partner/delivery/rider.go @@ -87,9 +87,9 @@ func GetOrderRiderInfoToPlatform(orderId string, wayBillStatus int) { //3.当同一个订单已经上传了一次配送信息,如再次同步会更新配送信息,以最新的一次为准。 //4.如订单已完成、已取消等状态发货将失败。 for _, v := range orders { - if v.Status >= model.OrderStatusFinished || v.Status < model.OrderStatusDelivering { - continue - } + //if v.Status >= model.OrderStatusFinished || v.Status < model.OrderStatusDelivering { + // continue + //} if orderId == "" && v.VendorID == model.VendorIDDD { // 抖音门店订单除了三方配送回调时推送,不在主动推送配送消息 continue } diff --git a/controllers/cms.go b/controllers/cms.go index 42162f966..e9c9b37cc 100644 --- a/controllers/cms.go +++ b/controllers/cms.go @@ -359,3 +359,19 @@ func (c *CmsController) GetVendorOrgCodeInfo() { return retVal, "", err }) } + +// @Title 得到商家与用户之间步行距离 +// @Description 得到商家与用户之间步行距离 +// @Param token header string true "认证token" +// @Param sLng query int true "商家经度" +// @Param sLat query int true "商家纬度" +// @Param uLng query int true "用户经度" +// @Param uLat query int true "用户纬度" +// @Success 200 {object} controllers.CallResult +// @Failure 200 {object} controllers.CallResult +// @router /GetSToUWalkingDistance [get] +func (c *CmsController) GetSToUWalkingDistance() { + c.callGetSToUWalkingDistance(func(params *tCmsGetSToUWalkingDistanceParams) (interface{}, string, error) { + return nil, "", nil + }) +} diff --git a/routers/commentsRouter_controllers.go b/routers/commentsRouter_controllers.go index d9d7150a2..0bdaa32f5 100644 --- a/routers/commentsRouter_controllers.go +++ b/routers/commentsRouter_controllers.go @@ -448,6 +448,15 @@ func init() { Filters: nil, Params: nil}) + web.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:CmsController"] = append(web.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:CmsController"], + web.ControllerComments{ + Method: "GetSToUWalkingDistance", + Router: `/GetSToUWalkingDistance`, + AllowHTTPMethods: []string{"get"}, + MethodParams: param.Make(), + Filters: nil, + Params: nil}) + web.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:CmsController"] = append(web.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:CmsController"], web.ControllerComments{ Method: "NewConfig", From 0326ba9f1f12ac2c2ee8fbfb6e0a04b61cd06143 Mon Sep 17 00:00:00 2001 From: richboo111 Date: Tue, 9 May 2023 18:00:44 +0800 Subject: [PATCH 15/23] =?UTF-8?q?sku=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/store_sku.go | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index 12e8ac500..5c506339b 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -4,8 +4,6 @@ import ( "bytes" "errors" "fmt" - "git.rosy.net.cn/jx-callback/business/partner/purchase/mtwm" - "git.rosy.net.cn/jx-callback/business/partner/purchase/tiktok_store" "io" "math" "mime/multipart" @@ -16,6 +14,9 @@ import ( "time" "unicode" + "git.rosy.net.cn/jx-callback/business/partner/purchase/mtwm" + "git.rosy.net.cn/jx-callback/business/partner/purchase/tiktok_store" + "git.rosy.net.cn/baseapi/platformapi/mtwmapi" "git.rosy.net.cn/jx-callback/business/auth2" @@ -403,13 +404,21 @@ func GetStoresSkusForStore(ctx *jxcontext.Context, storeID int, isFocus, isAct b func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { v := batchItemList[0].(*dao.StoreSkuNameExt2) var skus []*dao.StoreSkuExt + // sql2 := ` + // SELECT a.id sku_id, a.spec_quality sku_spec_quality, a.spec_unit sku_spec_unit, a.status sku_status, a.comment, + // b.stock, b.price bind_price, b.unit_price, + // b.status store_sku_status + // FROM sku a + // JOIN sku_name c ON a.name_id = c.id AND c.deleted_at = ? AND c.status = ? + //` + sql2 := ` SELECT a.id sku_id, a.spec_quality sku_spec_quality, a.spec_unit sku_spec_unit, a.status sku_status, a.comment, - b.stock, b.price bind_price, b.unit_price, - b.status store_sku_status + b.* FROM sku a JOIN sku_name c ON a.name_id = c.id AND c.deleted_at = ? AND c.status = ? ` + sqlParams2 := []interface{}{ utils.DefaultTimeValue, model.SkuStatusNormal, } From 41e8f490b9202ec268ad47a3ad18a7d11d99aa39 Mon Sep 17 00:00:00 2001 From: richboo111 Date: Tue, 9 May 2023 18:09:33 +0800 Subject: [PATCH 16/23] =?UTF-8?q?sku=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/store_sku.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index 5c506339b..8f940f508 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -413,8 +413,7 @@ func GetStoresSkusForStore(ctx *jxcontext.Context, storeID int, isFocus, isAct b //` sql2 := ` - SELECT a.id sku_id, a.spec_quality sku_spec_quality, a.spec_unit sku_spec_unit, a.status sku_status, a.comment, - b.* + SELECT a.*,b.* FROM sku a JOIN sku_name c ON a.name_id = c.id AND c.deleted_at = ? AND c.status = ? ` From 7bde589dd1a93266aa24846a311f00f2b3049b4c Mon Sep 17 00:00:00 2001 From: richboo111 Date: Wed, 10 May 2023 09:37:20 +0800 Subject: [PATCH 17/23] 1 --- business/jxstore/cms/store_sku.go | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index 8f940f508..89b13bfff 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -404,20 +404,20 @@ func GetStoresSkusForStore(ctx *jxcontext.Context, storeID int, isFocus, isAct b func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { v := batchItemList[0].(*dao.StoreSkuNameExt2) var skus []*dao.StoreSkuExt - // sql2 := ` - // SELECT a.id sku_id, a.spec_quality sku_spec_quality, a.spec_unit sku_spec_unit, a.status sku_status, a.comment, - // b.stock, b.price bind_price, b.unit_price, - // b.status store_sku_status - // FROM sku a - // JOIN sku_name c ON a.name_id = c.id AND c.deleted_at = ? AND c.status = ? - //` - sql2 := ` - SELECT a.*,b.* + SELECT a.id sku_id, a.spec_quality sku_spec_quality, a.spec_unit sku_spec_unit, a.status sku_status, a.comment, + b.stock, b.price bind_price, b.unit_price, + b.status store_sku_status FROM sku a JOIN sku_name c ON a.name_id = c.id AND c.deleted_at = ? AND c.status = ? ` + // sql2 := ` + // SELECT a.*,b.* + // FROM sku a + // JOIN sku_name c ON a.name_id = c.id AND c.deleted_at = ? AND c.status = ? + //` + sqlParams2 := []interface{}{ utils.DefaultTimeValue, model.SkuStatusNormal, } From c2338095156ad1d630818f1bffea359466245d45 Mon Sep 17 00:00:00 2001 From: richboo111 Date: Wed, 10 May 2023 15:02:11 +0800 Subject: [PATCH 18/23] 1 --- business/jxstore/cms/cms.go | 42 +++++++++++++-------------- business/jxstore/cms/store_sku.go | 5 ++++ business/model/sku.go | 4 +-- conf/app.conf | 3 +- controllers/cms.go | 17 +++++++---- routers/commentsRouter_controllers.go | 4 +-- 6 files changed, 42 insertions(+), 33 deletions(-) diff --git a/business/jxstore/cms/cms.go b/business/jxstore/cms/cms.go index c620a586c..c3531aad6 100644 --- a/business/jxstore/cms/cms.go +++ b/business/jxstore/cms/cms.go @@ -8,6 +8,8 @@ import ( "strings" "time" + "git.rosy.net.cn/baseapi/platformapi/baidunavi" + "git.rosy.net.cn/jx-callback/business/partner/purchase/ebai" "git.rosy.net.cn/baseapi/utils/errlist" @@ -585,25 +587,21 @@ func GetCityBankBranches(ctx *jxcontext.Context, cityCode int, bankCode string) } // GetSToUWalkingDistance 获取商家与用户间步行距离 -//func GetSToUWalkingDistance(sLng, sLat, uLng, uLat float64) (distance float64, err error) { -// var ( -// coords []*baidunavi.Coordinate -// sCoord *baidunavi.Coordinate -// uCoord *baidunavi.Coordinate -// ) -// coords = append(coords, &baidunavi.Coordinate{ -// Lng: sLng, -// Lat: sLat, -// }, &baidunavi.Coordinate{ -// Lat: uLng, -// Lng: uLat, -// }) -// if coords, err = api.BaiDuNaviAPI.BatchCoordinateConvert(coords, baidunavi.CoordSysGCJ02, baidunavi.CoordSysBaiDu); err == nil { -// if len(coords) > 0 { -// //distance=baidunavi. -// //todo 修改为百度地图 -// return jxutils.WalkingDistance(sLng, sLat, uLng, uLat), nil -// } -// } -// return 0, err -//} +func GetSToURidingDistance(sLng, sLat, uLng, uLat float64) (stepInfo interface{}, err error) { + var coords []*baidunavi.Coordinate + coords = append(coords, &baidunavi.Coordinate{ + Lng: sLng, + Lat: sLat, + }, &baidunavi.Coordinate{ + Lat: uLat, + Lng: uLng, + }) + if coords, err = api.BaiDuNaviAPI.BatchCoordinateConvert(coords, baidunavi.CoordSysGCJ02, baidunavi.CoordSysBaiDu); err == nil { + if len(coords) > 0 { + if stepInfo, err = api.BaiDuNaviAPI.DirectionLiteRide(coords); err == nil && stepInfo.(string) != "" { + return stepInfo, nil + } + } + } + return 0, err +} diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index 89b13bfff..701856114 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -395,7 +395,11 @@ func GetStoresSkusForStore(ctx *jxcontext.Context, storeID int, isFocus, isAct b sqlParams = append(sqlParams, pageSize, offset) txDB, _ := dao.Begin(db) defer dao.Commit(db, txDB) + + globals.SugarLogger.Debugf("store_sku 检查:sql:%s sqlParams:%s", sql, sqlParams) + if err = dao.GetRowsTx(txDB, &SkuNames, sql, sqlParams...); err == nil { + globals.SugarLogger.Debugf(" 检查参数:SkuNames:%s", utils.Format4Output(SkuNames, false)) skuNamesInfo = &dao.StoreSkuNamesInfo2{ TotalCount: dao.GetLastTotalRowCount2(db, txDB), } @@ -437,6 +441,7 @@ func GetStoresSkusForStore(ctx *jxcontext.Context, storeID int, isFocus, isAct b sqlParams2 = append(sqlParams2, status) } if err = dao.GetRows(db, &skus, sql2, sqlParams2); err == nil { + globals.SugarLogger.Debugf(" 检查参数:skus:%s", utils.Format4Output(skus, false)) v.Skus = skus } return retVal, err diff --git a/business/model/sku.go b/business/model/sku.go index 491cb1f61..6cf2ff637 100644 --- a/business/model/sku.go +++ b/business/model/sku.go @@ -23,8 +23,8 @@ const ( const ( SkuStatusDeleted = -1 // 商品删除 - SkuStatusDontSale = 0 // 商品正常 - SkuStatusNormal = 1 // 商品不可售 + SkuStatusDontSale = 0 // 商品不可售 + SkuStatusNormal = 1 // 商品正常 ) const ( diff --git a/conf/app.conf b/conf/app.conf index 4b325d339..8257bc917 100644 --- a/conf/app.conf +++ b/conf/app.conf @@ -26,7 +26,8 @@ tiktokShopAppSecret = "c397aa9f-3927-47c4-8cfe-4d84e02602e0" autonaviKey = "ef64f638f31e05cb7bde28790f7309fe" -baidunaviAK = "eL94zToVOdGDTkNQxV8dnEQ1ZRcB2UKb" +# baidunaviAK = "eL94zToVOdGDTkNQxV8dnEQ1ZRcB2UKb" +baidunaviAK = "wW2AwzPS0hdaPy5QLalzso7ARX5uYZtZ" baidunaviSK = "ZG0OOpOsOVURUwAkkmoHQFKRCbzn0zGb" disableElm = true diff --git a/controllers/cms.go b/controllers/cms.go index e9c9b37cc..6e6fa2eb6 100644 --- a/controllers/cms.go +++ b/controllers/cms.go @@ -360,8 +360,8 @@ func (c *CmsController) GetVendorOrgCodeInfo() { }) } -// @Title 得到商家与用户之间步行距离 -// @Description 得到商家与用户之间步行距离 +// @Title 得到商家与用户之间骑行路线规划 +// @Description 得到商家与用户之间骑行路线规划 // @Param token header string true "认证token" // @Param sLng query int true "商家经度" // @Param sLat query int true "商家纬度" @@ -369,9 +369,14 @@ func (c *CmsController) GetVendorOrgCodeInfo() { // @Param uLat query int true "用户纬度" // @Success 200 {object} controllers.CallResult // @Failure 200 {object} controllers.CallResult -// @router /GetSToUWalkingDistance [get] -func (c *CmsController) GetSToUWalkingDistance() { - c.callGetSToUWalkingDistance(func(params *tCmsGetSToUWalkingDistanceParams) (interface{}, string, error) { - return nil, "", nil +// @router /GetSToURidingDistance [get] +func (c *CmsController) GetSToURidingDistance() { + c.callGetSToURidingDistance(func(params *tCmsGetSToURidingDistanceParams) (retVal interface{}, errCode string, err error) { + sLng := jxutils.IntCoordinate2Standard(params.SLng) + sLat := jxutils.IntCoordinate2Standard(params.SLat) + uLng := jxutils.IntCoordinate2Standard(params.ULng) + uLat := jxutils.IntCoordinate2Standard(params.ULat) + retVal, err = cms.GetSToURidingDistance(sLng, sLat, uLng, uLat) + return retVal, "", err }) } diff --git a/routers/commentsRouter_controllers.go b/routers/commentsRouter_controllers.go index 0bdaa32f5..5063a37a1 100644 --- a/routers/commentsRouter_controllers.go +++ b/routers/commentsRouter_controllers.go @@ -450,8 +450,8 @@ func init() { web.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:CmsController"] = append(web.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:CmsController"], web.ControllerComments{ - Method: "GetSToUWalkingDistance", - Router: `/GetSToUWalkingDistance`, + Method: "GetSToURidingDistance", + Router: `/GetSToURidingDistance`, AllowHTTPMethods: []string{"get"}, MethodParams: param.Make(), Filters: nil, From ca9ac1dd73f8640a5cd979bc7ad4d4fa5230ed0d Mon Sep 17 00:00:00 2001 From: richboo111 Date: Wed, 10 May 2023 15:03:04 +0800 Subject: [PATCH 19/23] 1 --- business/jxstore/cms/store_sku.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index 701856114..088f8403c 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -440,6 +440,8 @@ func GetStoresSkusForStore(ctx *jxcontext.Context, storeID int, isFocus, isAct b sql2 += " AND b.status = ?" sqlParams2 = append(sqlParams2, status) } + + globals.SugarLogger.Debugf("store_sku 检查:sql2:%s sqlParams2:%s", sql2, sqlParams2) if err = dao.GetRows(db, &skus, sql2, sqlParams2); err == nil { globals.SugarLogger.Debugf(" 检查参数:skus:%s", utils.Format4Output(skus, false)) v.Skus = skus From 4b82890145759ffe3f74dad924b61c0142ae4625 Mon Sep 17 00:00:00 2001 From: richboo111 Date: Wed, 10 May 2023 16:00:00 +0800 Subject: [PATCH 20/23] =?UTF-8?q?sku=20sync=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/store_sku.go | 15 ++++++++------- business/partner/purchase/im/im_server.go | 4 ++-- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index 088f8403c..bdbc50ec8 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -408,20 +408,21 @@ func GetStoresSkusForStore(ctx *jxcontext.Context, storeID int, isFocus, isAct b func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { v := batchItemList[0].(*dao.StoreSkuNameExt2) var skus []*dao.StoreSkuExt + // sql2 := ` + // SELECT a.id sku_id, a.spec_quality sku_spec_quality, a.spec_unit sku_spec_unit, a.status sku_status, a.comment, + // b.stock, b.price bind_price, b.unit_price, + // b.status store_sku_status + // FROM sku a + // JOIN sku_name c ON a.name_id = c.id AND c.deleted_at = ? AND c.status = ? + //` sql2 := ` SELECT a.id sku_id, a.spec_quality sku_spec_quality, a.spec_unit sku_spec_unit, a.status sku_status, a.comment, - b.stock, b.price bind_price, b.unit_price, + b.stock, b.price bind_price, b.unit_price,b.jd_sync_status,b.mtwm_id,b.mtwm_sync_status,b.ebai_id,b.ebai_sync_status, b.status store_sku_status FROM sku a JOIN sku_name c ON a.name_id = c.id AND c.deleted_at = ? AND c.status = ? ` - // sql2 := ` - // SELECT a.*,b.* - // FROM sku a - // JOIN sku_name c ON a.name_id = c.id AND c.deleted_at = ? AND c.status = ? - //` - sqlParams2 := []interface{}{ utils.DefaultTimeValue, model.SkuStatusNormal, } diff --git a/business/partner/purchase/im/im_server.go b/business/partner/purchase/im/im_server.go index d635146dc..798b39b71 100644 --- a/business/partner/purchase/im/im_server.go +++ b/business/partner/purchase/im/im_server.go @@ -155,8 +155,8 @@ func (c *Client) Read() { go func() { for { messageType, msg, err := c.Socket.ReadMessage() - //temp := string(msg) - //fmt.Print(temp) + temp := string(msg) + fmt.Print(temp) if err != nil { if messageType == -1 && websocket.IsCloseError(err, websocket.CloseGoingAway, websocket.CloseNormalClosure, websocket.CloseNoStatusReceived) { Manager.DisConnect <- c From a31731508210fe9a4cc0cbc65abc90517da0c343 Mon Sep 17 00:00:00 2001 From: richboo111 Date: Wed, 10 May 2023 16:10:15 +0800 Subject: [PATCH 21/23] 1 --- business/jxstore/cms/store_sku.go | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index bdbc50ec8..e90f52abf 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -396,10 +396,10 @@ func GetStoresSkusForStore(ctx *jxcontext.Context, storeID int, isFocus, isAct b txDB, _ := dao.Begin(db) defer dao.Commit(db, txDB) - globals.SugarLogger.Debugf("store_sku 检查:sql:%s sqlParams:%s", sql, sqlParams) + //globals.SugarLogger.Debugf("store_sku 检查:sql:%s sqlParams:%s", sql, sqlParams) if err = dao.GetRowsTx(txDB, &SkuNames, sql, sqlParams...); err == nil { - globals.SugarLogger.Debugf(" 检查参数:SkuNames:%s", utils.Format4Output(SkuNames, false)) + //globals.SugarLogger.Debugf(" 检查参数:SkuNames:%s", utils.Format4Output(SkuNames, false)) skuNamesInfo = &dao.StoreSkuNamesInfo2{ TotalCount: dao.GetLastTotalRowCount2(db, txDB), } @@ -441,10 +441,9 @@ func GetStoresSkusForStore(ctx *jxcontext.Context, storeID int, isFocus, isAct b sql2 += " AND b.status = ?" sqlParams2 = append(sqlParams2, status) } - - globals.SugarLogger.Debugf("store_sku 检查:sql2:%s sqlParams2:%s", sql2, sqlParams2) + //globals.SugarLogger.Debugf("store_sku 检查:sql2:%s sqlParams2:%s", sql2, sqlParams2) if err = dao.GetRows(db, &skus, sql2, sqlParams2); err == nil { - globals.SugarLogger.Debugf(" 检查参数:skus:%s", utils.Format4Output(skus, false)) + //globals.SugarLogger.Debugf(" 检查参数:skus:%s", utils.Format4Output(skus, false)) v.Skus = skus } return retVal, err From 472dac5dbb9eb05e492c76f73c52a97bf7b645eb Mon Sep 17 00:00:00 2001 From: richboo111 Date: Wed, 10 May 2023 16:46:14 +0800 Subject: [PATCH 22/23] im --- business/partner/purchase/im/im.go | 4 ++++ globals/beegodb/beegodb.go | 13 ++++++------- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/business/partner/purchase/im/im.go b/business/partner/purchase/im/im.go index b26425a62..df1d001f4 100644 --- a/business/partner/purchase/im/im.go +++ b/business/partner/purchase/im/im.go @@ -137,6 +137,8 @@ func MtInit() { temp := string(msg) if err != nil || temp != "HB" { break + } else { + ReadMsgFromVendor(VendorIDMT, "", msg) } fmt.Printf("%s receive: %s\n", conn.RemoteAddr(), string(msg)) } @@ -172,6 +174,8 @@ func MtInit() { temp := string(msg) if err != nil || temp != HeartCheckSuccess { break + } else { + ReadMsgFromVendor(VendorIDMT, "", msg) } fmt.Printf("%s connSub:receive: %s\n", connSub.RemoteAddr(), string(msg)) } diff --git a/globals/beegodb/beegodb.go b/globals/beegodb/beegodb.go index b2b3d56a8..d2590df44 100644 --- a/globals/beegodb/beegodb.go +++ b/globals/beegodb/beegodb.go @@ -6,25 +6,24 @@ import ( "git.rosy.net.cn/jx-callback/business/model/legacymodel" "git.rosy.net.cn/jx-callback/globals" "github.com/astaxie/beego/client/orm" - "github.com/astaxie/beego/server/web" ) func Init() { // set default database // orm.RegisterDataBase(aliasName, driverName, dataSource, params) //正式服务器 - orm.RegisterDataBase("default", "mysql", web.AppConfig.DefaultString("dbConnectStr", "")) - orm.RegisterDataBase("c4beta", "mysql", "ubuntu:WebServer@1@tcp(111.231.218.230:3306)/jxd_dev_0?charset=utf8mb4&loc=Local&parseTime=true") - orm.RegisterDataBase("api", "mysql", "root:WebServer@1@tcp(127.0.0.1:3306)/api?charset=utf8mb4&loc=Local&parseTime=true") + //orm.RegisterDataBase("default", "mysql", web.AppConfig.DefaultString("dbConnectStr", "")) + //orm.RegisterDataBase("c4beta", "mysql", "ubuntu:WebServer@1@tcp(111.231.218.230:3306)/jxd_dev_0?charset=utf8mb4&loc=Local&parseTime=true") + //orm.RegisterDataBase("api", "mysql", "root:WebServer@1@tcp(127.0.0.1:3306)/api?charset=utf8mb4&loc=Local&parseTime=true") // 本地测试服调试 // orm.RegisterDataBase("default", "mysql", web.AppConfig.DefaultString("dbConnectStr", "")) //orm.RegisterDataBase("api", "mysql", "root:WebServer@1@tcp(127.0.0.1:3306)/api?charset=utf8mb4&loc=Local&parseTime=true") //orm.RegisterDataBase("c4beta", "mysql", "ubuntu:WebServer@1@tcp(127.0.0.1:3306)/jxd_dev_0?charset=utf8mb4&loc=Local&parseTime=true") //本地服务器测试用 -ysq - //orm.RegisterDataBase("default", "mysql", "root:123456@tcp(127.0.0.1:3306)/jxd_dev_0?charset=utf8mb4&loc=Local&parseTime=true") - //orm.RegisterDataBase("c4beta", "mysql", "root:123456@tcp(127.0.0.1:3306)/jxd_dev_0?charset=utf8mb4&loc=Local&parseTime=true") - //orm.RegisterDataBase("api", "mysql", "root:123456@tcp(127.0.0.1:3306)/api?charset=utf8mb4&loc=Local&parseTime=true") + orm.RegisterDataBase("default", "mysql", "root:123456@tcp(127.0.0.1:3306)/jxd_dev_0?charset=utf8mb4&loc=Local&parseTime=true") + orm.RegisterDataBase("c4beta", "mysql", "root:123456@tcp(127.0.0.1:3306)/jxd_dev_0?charset=utf8mb4&loc=Local&parseTime=true") + orm.RegisterDataBase("api", "mysql", "root:123456@tcp(127.0.0.1:3306)/api?charset=utf8mb4&loc=Local&parseTime=true") // 开启sql打印 //orm.Debug = true From 6d314dbacc82528d81b4a9bbf7f6da235716130f Mon Sep 17 00:00:00 2001 From: richboo111 Date: Wed, 10 May 2023 16:48:40 +0800 Subject: [PATCH 23/23] im --- globals/beegodb/beegodb.go | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/globals/beegodb/beegodb.go b/globals/beegodb/beegodb.go index d2590df44..b2b3d56a8 100644 --- a/globals/beegodb/beegodb.go +++ b/globals/beegodb/beegodb.go @@ -6,24 +6,25 @@ import ( "git.rosy.net.cn/jx-callback/business/model/legacymodel" "git.rosy.net.cn/jx-callback/globals" "github.com/astaxie/beego/client/orm" + "github.com/astaxie/beego/server/web" ) func Init() { // set default database // orm.RegisterDataBase(aliasName, driverName, dataSource, params) //正式服务器 - //orm.RegisterDataBase("default", "mysql", web.AppConfig.DefaultString("dbConnectStr", "")) - //orm.RegisterDataBase("c4beta", "mysql", "ubuntu:WebServer@1@tcp(111.231.218.230:3306)/jxd_dev_0?charset=utf8mb4&loc=Local&parseTime=true") - //orm.RegisterDataBase("api", "mysql", "root:WebServer@1@tcp(127.0.0.1:3306)/api?charset=utf8mb4&loc=Local&parseTime=true") + orm.RegisterDataBase("default", "mysql", web.AppConfig.DefaultString("dbConnectStr", "")) + orm.RegisterDataBase("c4beta", "mysql", "ubuntu:WebServer@1@tcp(111.231.218.230:3306)/jxd_dev_0?charset=utf8mb4&loc=Local&parseTime=true") + orm.RegisterDataBase("api", "mysql", "root:WebServer@1@tcp(127.0.0.1:3306)/api?charset=utf8mb4&loc=Local&parseTime=true") // 本地测试服调试 // orm.RegisterDataBase("default", "mysql", web.AppConfig.DefaultString("dbConnectStr", "")) //orm.RegisterDataBase("api", "mysql", "root:WebServer@1@tcp(127.0.0.1:3306)/api?charset=utf8mb4&loc=Local&parseTime=true") //orm.RegisterDataBase("c4beta", "mysql", "ubuntu:WebServer@1@tcp(127.0.0.1:3306)/jxd_dev_0?charset=utf8mb4&loc=Local&parseTime=true") //本地服务器测试用 -ysq - orm.RegisterDataBase("default", "mysql", "root:123456@tcp(127.0.0.1:3306)/jxd_dev_0?charset=utf8mb4&loc=Local&parseTime=true") - orm.RegisterDataBase("c4beta", "mysql", "root:123456@tcp(127.0.0.1:3306)/jxd_dev_0?charset=utf8mb4&loc=Local&parseTime=true") - orm.RegisterDataBase("api", "mysql", "root:123456@tcp(127.0.0.1:3306)/api?charset=utf8mb4&loc=Local&parseTime=true") + //orm.RegisterDataBase("default", "mysql", "root:123456@tcp(127.0.0.1:3306)/jxd_dev_0?charset=utf8mb4&loc=Local&parseTime=true") + //orm.RegisterDataBase("c4beta", "mysql", "root:123456@tcp(127.0.0.1:3306)/jxd_dev_0?charset=utf8mb4&loc=Local&parseTime=true") + //orm.RegisterDataBase("api", "mysql", "root:123456@tcp(127.0.0.1:3306)/api?charset=utf8mb4&loc=Local&parseTime=true") // 开启sql打印 //orm.Debug = true