38e040af07
CI / changes (push) Successful in 37s
CI / ad (push) Successful in 29s
CI / admin (push) Successful in 17s
CI / bff (push) Successful in 13s
CI / chore (push) Successful in 15s
CI / equipment (push) Successful in 14s
CI / express (push) Successful in 14s
CI / product (push) Successful in 13s
CI / record (push) Successful in 13s
CI / sale (push) Successful in 13s
CI / task (push) Successful in 13s
CI / user (push) Successful in 14s
CI / wecom (push) Successful in 13s
157 lines
5.2 KiB
Go
157 lines
5.2 KiB
Go
package logic
|
|
|
|
import (
|
|
"context"
|
|
"lone-services/pkg/modelbase"
|
|
"lone-services/pkg/utils"
|
|
"lone-services/rpc/express/pb"
|
|
"lone-services/services/express/internal/dao"
|
|
"lone-services/services/express/internal/model"
|
|
"lone-services/services/express/internal/svc"
|
|
"lone-services/services/express/internal/transit"
|
|
"strconv"
|
|
|
|
jsoniter "github.com/json-iterator/go"
|
|
"github.com/zeromicro/go-zero/core/logx"
|
|
)
|
|
|
|
type ExpressJdBackLogic struct {
|
|
ctx context.Context
|
|
svcCtx *svc.ServiceContext
|
|
logx.Logger
|
|
BaseLogic
|
|
}
|
|
|
|
func NewExpressJdBackLogic(ctx context.Context, svcCtx *svc.ServiceContext) *ExpressJdBackLogic {
|
|
return &ExpressJdBackLogic{
|
|
ctx: ctx,
|
|
svcCtx: svcCtx,
|
|
Logger: logx.WithContext(ctx),
|
|
}
|
|
}
|
|
|
|
func (l *ExpressJdBackLogic) ExpressJdBack(in *express.JdRequest) (*express.SfResponse, error) {
|
|
//TODO 透传数据还是获取?
|
|
l.Logger.Error(in)
|
|
//routers.POST("/transit/jd", obj.JdBack)
|
|
//appKey := c.Query("app_key")
|
|
//timestamp := c.Query("timestamp")
|
|
//sign := c.Query("sign")
|
|
//path := c.Query("path")
|
|
//
|
|
//l.Logger.Info("JD back params : app_key=", appKey,
|
|
// " timestamp=", timestamp, " sign=", sign, " path=", path)
|
|
|
|
//JD back params : app_key=e99f6232b45c4c3e871780f5a9b1a555 timestamp=Tue, 26 May 2026 01:41:06 GMT sign=2640A486A4A529AAD722FED2E5C7E0BB path=
|
|
//JD back data:{"carrierId":2087,"customerOrderNo":"JD2026052609395822530404255","extend":{"curSiteName":"张家口涿鹿汽车点部项目小站","curSiteId":"1929145","siteTelephone":"15732381119","siteId":"4989","remark":"【实时调度-路区排班】揽收任务已分配给李晓龙,配送员电话13833376743","operatorPhone":"13833376743","curJDCode":"34512","requireTime":"2026-05-27 22:00:00"},"nextLocation":{},"operateLocation":{"lat":"40.459022","lon":"115.276425","routeAddress":" 河北省张家口市下花园区S342(张家口农商银行苏家坊信用社南)","routeCityName":"张家口市","routeDistrictName":"涿鹿县","routeProvinceName":"河北","routeStreetName":"涿鹿镇"},"operateSite":"张家口涿鹿汽车点部项目小站","operateSiteId":"1929145","operationCode":"200034","operationTime":"2026-05-26 09:40:11","operationType":"2013","operatorName":"李晓龙","orderNo":"JD2026052609395822530404255","remark":"您的快件将由快递员李晓龙上门取件,快递员电话:13833376743,营业部电话:15732381119","waybillNo":"JDVA44161571823"}
|
|
body := utils.GetBody(l.ctx)
|
|
ret := express.SfResponse{
|
|
ReturnCode: "1001",
|
|
ReturnMsg: "body获取失败",
|
|
}
|
|
if body == utils.StringEmpty {
|
|
return &ret, nil
|
|
}
|
|
l.Logger.Info("JD back data:", body)
|
|
|
|
ret.ReturnCode = "1002"
|
|
ret.ReturnMsg = "系统异常"
|
|
ok := l.JdBack(body)
|
|
if ok {
|
|
ret.ReturnCode = "000"
|
|
ret.ReturnMsg = "成功"
|
|
}
|
|
|
|
return &ret, nil
|
|
}
|
|
|
|
func (l *ExpressJdBackLogic) JdBack(body string) bool {
|
|
var bodyData map[string]interface{}
|
|
err := jsoniter.Unmarshal([]byte(body), &bodyData)
|
|
if err != nil {
|
|
l.Logger.Error("back body strInt error ", err)
|
|
return false
|
|
}
|
|
result, ok := bodyData["Body"].(map[string]interface{})
|
|
if !ok {
|
|
l.Logger.Error("back Body interface error ")
|
|
return false
|
|
}
|
|
|
|
l.Logger.Error("back body strInt result ", result)
|
|
waybillNo := utils.GetStringByMap(result, "waybillNo")
|
|
if waybillNo == utils.StringEmpty {
|
|
l.Logger.Error("back body no id error ")
|
|
return false
|
|
}
|
|
|
|
w := modelbase.Params{Eq: map[string]string{
|
|
"status": strconv.Itoa(dao.SendStatusOk),
|
|
"transit_type": strconv.Itoa(dao.ExpressCompanyJd),
|
|
"transit_sn": waybillNo}}
|
|
var info dao.DeliveryOrderUpTransit
|
|
modelObj := model.DeliveryOrderModel{}.Init()
|
|
err = modelObj.GetOne(w, &info)
|
|
if err != nil || info.Id < utils.NumberOne {
|
|
l.Logger.Error("没有找到快递数据", err)
|
|
return true
|
|
}
|
|
var items []dao.ExpressQueryItems
|
|
if len(info.TransitQuery) > utils.NumberTen {
|
|
ok := utils.JsonStringToStruct(info.TransitQuery, &items)
|
|
if ok != true {
|
|
l.Logger.Error("back json error ", err)
|
|
return false
|
|
}
|
|
}
|
|
|
|
tmp := dao.ExpressQueryItems{
|
|
Remark: result["remark"].(string),
|
|
AcceptTime: result["operationTime"].(string),
|
|
OperatorName: result["operatorName"].(string),
|
|
OpCode: result["operationCode"].(string),
|
|
AllInfo: body,
|
|
}
|
|
tmp.LastMd5 = utils.MD5Encrypt(tmp.Remark + tmp.AcceptTime +
|
|
tmp.OperatorName)
|
|
if len(items) > utils.NumberZero {
|
|
if items[len(items)-utils.NumberOne].LastMd5 == tmp.LastMd5 {
|
|
return true
|
|
}
|
|
}
|
|
|
|
items = append(items, tmp)
|
|
info.TransitQuery = utils.StructToJson(items)
|
|
modelObj.Begin()
|
|
if ok := transit.JdSingedCodeMap[tmp.OpCode]; ok {
|
|
w = modelbase.Params{Eq: map[string]string{"deliver_goods_id": strconv.Itoa(info.Id)}}
|
|
expEdit := dao.DeliveryExpStatus{
|
|
Status: utils.StatusOk,
|
|
}
|
|
_, err = model.DeliveryOrderExpModel{}.Init().Edit(w, &expEdit)
|
|
if err != nil {
|
|
l.Logger.Error("back set deliver exp error ", err)
|
|
modelObj.Rollback()
|
|
return false
|
|
}
|
|
info.Status = dao.SendStatusOver
|
|
info.ChangeEstimatedTime = utils.StatusFail
|
|
info.SignTime = utils.Now()
|
|
|
|
s := svc.UpOrderDeliverStatus(l.svcCtx.OrderSvcName, info.ObjId, int(info.Type), int32(info.Status))
|
|
if s != utils.Ok {
|
|
modelObj.Rollback()
|
|
return false
|
|
}
|
|
}
|
|
|
|
_, err = modelObj.Edit(w, &info)
|
|
if err != nil {
|
|
modelObj.Rollback()
|
|
l.Logger.Error("back edit error ", err)
|
|
return false
|
|
}
|
|
modelObj.Commit()
|
|
return true
|
|
}
|