Merge remote-tracking branch 'origin/jdshop' into jxact
This commit is contained in:
@@ -243,7 +243,7 @@ func LoginInternal(ctx *Context, authType, authID, authIDType, authSecret string
|
||||
realAuthID = user.GetID()
|
||||
}
|
||||
if authBindEx, err = handler.VerifySecret(realAuthID, authSecret); err == nil {
|
||||
// globals.SugarLogger.Debugf("auth2 Login authBindEx:%s", utils.Format4Output(authBindEx, false))
|
||||
globals.SugarLogger.Debugf("testttttttttttttttttttttttttttttttttttt", utils.Format4Output(authBindEx, false))
|
||||
if authBindEx == nil { // mobile, email会返回nil(表示不会新建AuthBind实体)
|
||||
user = userProvider.GetUser(authID, authIDType)
|
||||
authBindEx = &AuthBindEx{
|
||||
|
||||
@@ -1212,7 +1212,7 @@ func result2Orders(ctx *jxcontext.Context, result *jdshopapi.AllOrdersResult) (o
|
||||
continue
|
||||
}
|
||||
//有可能是库里已经有这个订单了
|
||||
orderE, err := partner.CurOrderManager.LoadOrder(utils.Int64ToStr(jdsOrder.OrderID)+"01", model.VendorIDJDShop)
|
||||
orderE, err := partner.CurOrderManager.LoadOrder(utils.Int64ToStr(jdsOrder.OrderID)+"000001", model.VendorIDJDShop)
|
||||
if orderE != nil {
|
||||
continue
|
||||
}
|
||||
@@ -1500,8 +1500,8 @@ func TransferJdsOrder(ctx *jxcontext.Context, vendorOrderID string, storeID int)
|
||||
if order.Status >= model.OrderStatusDelivering && order.Status != model.OrderStatusCanceled {
|
||||
return "", fmt.Errorf("暂不支持此状态的订单进行转移!")
|
||||
}
|
||||
if order.VendorID != model.VendorIDJDShop {
|
||||
return "", fmt.Errorf("暂不支持非京狗的订单进行转移!")
|
||||
if order.VendorID != model.VendorIDJDShop && order.VendorID != model.VendorIDJX {
|
||||
return "", fmt.Errorf("暂不支持该平台的订单进行转移!")
|
||||
}
|
||||
skus, err := dao.GetSimpleOrderSkus(db, vendorOrderID, nil)
|
||||
if err != nil || order == nil {
|
||||
@@ -1519,26 +1519,20 @@ func TransferJdsOrder(ctx *jxcontext.Context, vendorOrderID string, storeID int)
|
||||
}
|
||||
}
|
||||
if waybill != nil {
|
||||
if waybill.WaybillVendorID != model.VendorIDJDWL {
|
||||
if handler := partner.GetDeliveryPlatformFromVendorID(waybill.WaybillVendorID); handler != nil {
|
||||
err = handler.Handler.CancelWaybill(waybill, 0, "订单转移被取消")
|
||||
}
|
||||
if handler := partner.GetDeliveryPlatformFromVendorID(waybill.WaybillVendorID); handler != nil {
|
||||
err = handler.Handler.CancelWaybill(waybill, 0, "订单转移被取消")
|
||||
}
|
||||
}
|
||||
}
|
||||
err = jdshop.ChangeOrderStatus(vendorOrderID, model.OrderStatusCanceled, "订单转移被取消")
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
//重新构建order的数据
|
||||
storeMaps, err := dao.GetStoresMapList(db, []int{order.VendorID}, []int{storeID}, nil, model.StoreStatusAll, model.StoreIsSyncAll, "", "")
|
||||
if err != nil || len(storeMaps) == 0 {
|
||||
return "", fmt.Errorf("该门店未绑定京狗平台,请先绑定后再转移!门店:[%v]", storeID)
|
||||
return "", fmt.Errorf("该门店未绑定平台,请先绑定后再转移!门店:[%v]", storeID)
|
||||
}
|
||||
stores, err := dao.GetStoreList(db, []int{storeID}, nil, nil, nil, "")
|
||||
if len(storeMaps) > 0 && len(stores) > 0 {
|
||||
if storeMaps[0].VendorStoreID == "" {
|
||||
return "", fmt.Errorf("该门店未绑定京狗平台,或绑定有误,请联系技术部!门店:[%v]", storeID)
|
||||
return "", fmt.Errorf("该门店未绑定平台,或绑定有误,请联系技术部!门店:[%v]", storeID)
|
||||
}
|
||||
order.StoreID = storeID
|
||||
order.StoreName = stores[0].Name
|
||||
@@ -1558,6 +1552,9 @@ func TransferJdsOrder(ctx *jxcontext.Context, vendorOrderID string, storeID int)
|
||||
if store.OpenTime1 == 0 || store.CloseTime1 == 0 {
|
||||
return "", fmt.Errorf("该门店没有营业时间,不能接单!门店:[%v]", storeID)
|
||||
}
|
||||
if closetime1.Sub(opentime1) <= time.Hour {
|
||||
return "", fmt.Errorf("该门店营业时间间隔过小,请确认!门店:[%v]", storeID)
|
||||
}
|
||||
if !(orderCreatedAt.Sub(opentime1) >= 0 && orderCreatedAt.Sub(closetime1) <= 0) {
|
||||
if store.OpenTime2 != 0 && store.CloseTime2 != 0 {
|
||||
if !(orderCreatedAt.Sub(opentime2) >= 0 && orderCreatedAt.Sub(closetime2) <= 0) {
|
||||
@@ -1592,35 +1589,63 @@ func TransferJdsOrder(ctx *jxcontext.Context, vendorOrderID string, storeID int)
|
||||
} else {
|
||||
return "", fmt.Errorf("未查询到该门店对应的平台信息!门店:[%v]", order.StoreID)
|
||||
}
|
||||
if len(order.VendorOrderID) > 12 {
|
||||
var goodsOrders []*model.GoodsOrder
|
||||
sql := `
|
||||
SELECT * FROM goods_order WHERE vendor_order_id2 = ? ORDER BY vendor_order_id DESC
|
||||
`
|
||||
sqlParams := []interface{}{order.VendorOrderID2}
|
||||
err = dao.GetRows(db, &goodsOrders, sql, sqlParams)
|
||||
if goodsOrders[0].Status != model.OrderStatusCanceled {
|
||||
err = jdshop.ChangeOrderStatus(goodsOrders[0].VendorOrderID, model.OrderStatusCanceled, "订单转移被取消")
|
||||
if order.VendorID == model.VendorIDJDShop {
|
||||
if len(order.VendorOrderID) > 12 {
|
||||
var goodsOrders []*model.GoodsOrder
|
||||
sql := `
|
||||
SELECT * FROM goods_order WHERE vendor_order_id2 = ? ORDER BY vendor_order_id DESC
|
||||
`
|
||||
sqlParams := []interface{}{order.VendorOrderID2}
|
||||
err = dao.GetRows(db, &goodsOrders, sql, sqlParams)
|
||||
if goodsOrders[0].Status != model.OrderStatusCanceled {
|
||||
err = jdshop.ChangeOrderStatus(goodsOrders[0].VendorOrderID, model.OrderStatusCanceled, "订单转移被取消")
|
||||
}
|
||||
// suffix := utils.Str2Int(goodsOrders[0].VendorOrderID[12:len(goodsOrders[0].VendorOrderID)])
|
||||
// suffix++
|
||||
if len(order.VendorOrderID2) > 18 {
|
||||
order.VendorOrderID2 = order.VendorOrderID2[0:12]
|
||||
}
|
||||
order.VendorOrderID = utils.Int64ToStr(utils.Str2Int64(order.VendorOrderID2)*10000) + utils.Int2Str(time.Now().Second())
|
||||
if len(order.VendorOrderID) < 18 {
|
||||
order.VendorOrderID = order.VendorOrderID + "0"
|
||||
}
|
||||
}
|
||||
// suffix := utils.Str2Int(goodsOrders[0].VendorOrderID[12:len(goodsOrders[0].VendorOrderID)])
|
||||
// suffix++
|
||||
if len(order.VendorOrderID2) > 18 {
|
||||
order.VendorOrderID2 = order.VendorOrderID2[0:12]
|
||||
if storeID != model.JdShopMainStoreID {
|
||||
order.DeliveryFlag = model.NO
|
||||
}
|
||||
order.VendorOrderID = utils.Int64ToStr(utils.Str2Int64(order.VendorOrderID2)*10000) + utils.Int2Str(time.Now().Second())
|
||||
if len(order.VendorOrderID) < 18 {
|
||||
order.VendorOrderID = order.VendorOrderID + "0"
|
||||
err = jdshop.ChangeOrderStatus(vendorOrderID, model.OrderStatusCanceled, "订单转移被取消")
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
order.Status = model.OrderStatusNew
|
||||
} else {
|
||||
order.VendorOrderID2 = order.VendorOrderID
|
||||
order.VendorOrderID = utils.Int64ToStr(jxutils.GenOrderNo())
|
||||
order.DeliveryFlag = model.NO
|
||||
orderStatus := &model.OrderStatus{
|
||||
VendorOrderID: vendorOrderID,
|
||||
VendorID: model.VendorIDJX,
|
||||
OrderType: model.OrderTypeOrder,
|
||||
RefVendorOrderID: vendorOrderID,
|
||||
RefVendorID: model.VendorIDJX,
|
||||
VendorStatus: utils.Int2Str(model.OrderStatusCanceled),
|
||||
Status: model.OrderStatusCanceled,
|
||||
StatusTime: time.Now(),
|
||||
Remark: "订单转移被取消",
|
||||
}
|
||||
jxutils.CallMsgHandlerAsync(func() {
|
||||
err = partner.CurOrderManager.OnOrderStatusChanged("", orderStatus)
|
||||
}, jxutils.ComposeUniversalOrderID(vendorOrderID, model.VendorIDJX))
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
order.Status = model.OrderStatusAccepted
|
||||
}
|
||||
for _, sku := range skus {
|
||||
sku.VendorOrderID = order.VendorOrderID
|
||||
sku.ID = 0
|
||||
order.Skus = append(order.Skus, sku)
|
||||
}
|
||||
if storeID != model.JdShopMainStoreID {
|
||||
order.DeliveryFlag = model.NO
|
||||
}
|
||||
order.Status = model.OrderStatusNew
|
||||
setJdsOrderSeq(order)
|
||||
err = partner.CurOrderManager.OnOrderNew(order, model.Order2Status(order))
|
||||
vendorOrderIDJds = order.VendorOrderID
|
||||
@@ -1776,6 +1801,10 @@ func UpdateWaybillDesiredFee(ctx *jxcontext.Context, vendorOrderID string, desir
|
||||
} else {
|
||||
bill.DesiredFee = int64(desiredFee)
|
||||
_, err = dao.UpdateEntity(db, bill, "DesiredFee")
|
||||
if order.EarningType == model.EarningTypePoints {
|
||||
order.NewEarningPrice = order.NewEarningPrice - int64(desiredFee)
|
||||
_, err = dao.UpdateEntity(db, order, "NewEarningPrice")
|
||||
}
|
||||
}
|
||||
return err
|
||||
}
|
||||
@@ -1831,3 +1860,26 @@ func RefreshJdsOrderConsigneeInfo(ctx *jxcontext.Context, vendorOrderID string)
|
||||
partner.CurOrderManager.UpdateOrderFields(order, []string{"ConsigneeAddress", "ConsigneeName", "ConsigneeMobile", "ConsigneeMobile2", "BuyerComment", "ConsigneeLng", "ConsigneeLat"})
|
||||
return err
|
||||
}
|
||||
|
||||
func UpdateOrderInfo(ctx *jxcontext.Context, vendorOrderID string, vendorID int, payload map[string]interface{}) (num int64, err error) {
|
||||
var (
|
||||
db = dao.GetDB()
|
||||
)
|
||||
order, err := partner.CurOrderManager.LoadOrder(vendorOrderID, vendorID)
|
||||
valid := dao.StrictMakeMapByStructObject(payload, order, ctx.GetUserName())
|
||||
if len(valid) > 0 {
|
||||
dao.Begin(db)
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
dao.Rollback(db)
|
||||
panic(r)
|
||||
}
|
||||
}()
|
||||
if num, err = dao.UpdateEntityByKV(db, order, valid, nil); err != nil {
|
||||
dao.Rollback(db)
|
||||
return 0, err
|
||||
}
|
||||
}
|
||||
dao.Commit(db)
|
||||
return num, err
|
||||
}
|
||||
|
||||
@@ -159,7 +159,7 @@ func (c *OrderManager) GetOrderInfo(ctx *jxcontext.Context, vendorOrderID string
|
||||
|
||||
// 这里用QueryRows而不用QueryRow的原因是用QueryRow在这种情况下不能将数据读出,很奇怪。大概的原因是QueryRow对于GoodsOrderExt这种有嵌入的struct处理有问题
|
||||
num, err := db.Raw(`
|
||||
SELECT t3.*,ROUND(t3.shop_sum_price/t3.count) avg_price, t1.*, t2.status waybill_status, t2.courier_name, t2.courier_mobile
|
||||
SELECT t3.*,ROUND(t3.shop_sum_price/t3.count) avg_price, t1.*, t2.status waybill_status, t2.courier_name, t2.courier_mobile, t2.desired_fee
|
||||
FROM goods_order t1
|
||||
LEFT JOIN waybill t2 ON t1.vendor_waybill_id = t2.vendor_waybill_id AND t1.waybill_vendor_id = t2.waybill_vendor_id
|
||||
JOIN (
|
||||
|
||||
@@ -378,6 +378,7 @@ func (s *DefScheduler) OnOrderNew(order *model.GoodsOrder, isPending bool) (err
|
||||
savedOrderInfo.SetOrder(order)
|
||||
if order.Status == model.OrderStatusWaitAccepted {
|
||||
s.resetTimer(savedOrderInfo, nil, isPending)
|
||||
push.NotifyNewOrder(order)
|
||||
}
|
||||
if order.Status >= model.OrderStatusNew {
|
||||
s.resetTimer(savedOrderInfo, nil, isPending)
|
||||
@@ -1471,7 +1472,9 @@ func (s *DefScheduler) notifyNewOrder(order *model.GoodsOrder) {
|
||||
smsmsg.NotifyNewOrder(order)
|
||||
smsmsg.NotifyNewUserOrder(order)
|
||||
}
|
||||
push.NotifyNewOrder(order)
|
||||
if order.VendorID != model.VendorIDEBAI {
|
||||
push.NotifyNewOrder(order)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
@@ -1489,6 +1492,7 @@ func (s *DefScheduler) notifyOrderCanceled(order *model.GoodsOrder) {
|
||||
order = setFakeActualPayPrice(order)
|
||||
weixinmsg.NotifyOrderCanceled(order)
|
||||
smsmsg.NotifyOrderCanceled(order)
|
||||
push.NotifyOrderCanceled(order)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ package defsch
|
||||
import (
|
||||
"git.rosy.net.cn/jx-callback/business/jxutils"
|
||||
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
|
||||
push "git.rosy.net.cn/jx-callback/business/jxutils/unipush"
|
||||
"git.rosy.net.cn/jx-callback/business/jxutils/weixinmsg"
|
||||
"git.rosy.net.cn/jx-callback/business/model"
|
||||
"git.rosy.net.cn/jx-callback/business/msghub"
|
||||
@@ -31,6 +32,7 @@ func (s *DefScheduler) OnAfsOrderNew(order *model.AfsOrder, isPending bool) (err
|
||||
}
|
||||
msghub.OnNewWait4ApproveAfsOrder(order)
|
||||
weixinmsg.NotifyAfsOrderStatus(order)
|
||||
push.NotifyAfsOrder(order)
|
||||
}
|
||||
}
|
||||
return err
|
||||
|
||||
@@ -222,6 +222,11 @@ func GetCoordinateDistrictCode(ctx *jxcontext.Context, lng, lat float64) (code i
|
||||
return api.AutonaviAPI.GetCoordinateDistrictCode(lng, lat), nil
|
||||
}
|
||||
|
||||
func GetCoordinateCityInfo(ctx *jxcontext.Context, lng, lat float64) (name string, err error) {
|
||||
name, _ = api.AutonaviAPI.GetCoordinateCityInfo(lng, lat)
|
||||
return name, err
|
||||
}
|
||||
|
||||
func SendMsg2Somebody(ctx *jxcontext.Context, mobileNum, verifyCode, msgType, msgContent string) (err error) {
|
||||
if needConfirmRequestMap[msgType] == 1 {
|
||||
if _, err = mobile.AutherObj.VerifySecret(mobileNum, verifyCode); err != nil {
|
||||
|
||||
@@ -3570,6 +3570,19 @@ func CreateStoreAudit(ctx *jxcontext.Context, storeAudit *model.StoreAudit) (err
|
||||
if len(storeAudits) > 0 {
|
||||
return fmt.Errorf("您已申请过入驻,请不要重复申请!")
|
||||
}
|
||||
if storeAudit.Address == "" {
|
||||
return fmt.Errorf("门店地址必填!")
|
||||
}
|
||||
if storeAudit.Lng == 0 || storeAudit.Lat == 0 {
|
||||
lng, lat, _ := api.AutonaviAPI.GetCoordinateFromAddressByPage(storeAudit.Address)
|
||||
if lng != 0 && lat != 0 {
|
||||
storeAudit.Lng = jxutils.StandardCoordinate2Int(lng)
|
||||
storeAudit.Lat = jxutils.StandardCoordinate2Int(lat)
|
||||
} else {
|
||||
return fmt.Errorf("请填写正确的门店地址!")
|
||||
}
|
||||
}
|
||||
|
||||
if storeAudit.UserID == "" {
|
||||
storeAudit.UserID = ctx.GetUserID()
|
||||
}
|
||||
@@ -3601,7 +3614,7 @@ func GetStoreAudit(ctx *jxcontext.Context, statuss []int, keyword, applyTimeStar
|
||||
|
||||
func StoreAudit(ctx *jxcontext.Context, storeAudits []*model.StoreAudit, status int) (err error) {
|
||||
db := dao.GetDB()
|
||||
if status == model.StoreAuditStatusOnline {
|
||||
if status != model.StoreAuditStatusCreated && status != model.StoreAuditStatusRejected {
|
||||
return fmt.Errorf("审核标志不正确!")
|
||||
}
|
||||
task := tasksch.NewParallelTask("StoreAudit", tasksch.NewParallelConfig().SetParallelCount(5).SetIsContinueWhenError(true), ctx,
|
||||
@@ -3619,7 +3632,13 @@ func StoreAudit(ctx *jxcontext.Context, storeAudits []*model.StoreAudit, status
|
||||
storeAudits[0].AuditStatus = model.StoreAuditStatusCreated
|
||||
//添加门店
|
||||
storeExt := &StoreExt{}
|
||||
utils.Map2StructByJson(utils.Struct2MapByJson(&storeAudit), &storeExt, false)
|
||||
if data, err := json.Marshal(&storeAudits[0]); err == nil {
|
||||
utils.UnmarshalUseNumber(data, &storeExt)
|
||||
}
|
||||
storeExt.ID = 0
|
||||
storeExt.Store.StoreLevel = "C"
|
||||
storeExt.FloatLng = jxutils.IntCoordinate2Standard(utils.Float64TwoInt(storeExt.FloatLng))
|
||||
storeExt.FloatLat = jxutils.IntCoordinate2Standard(utils.Float64TwoInt(storeExt.FloatLat))
|
||||
storeID, err := CreateStore(ctx, storeExt, ctx.GetUserName())
|
||||
if err != nil {
|
||||
return retVal, fmt.Errorf(err.Error())
|
||||
@@ -3629,13 +3648,13 @@ func StoreAudit(ctx *jxcontext.Context, storeAudits []*model.StoreAudit, status
|
||||
return retVal, fmt.Errorf(err.Error())
|
||||
}
|
||||
} else if status == model.StoreAuditStatusRejected {
|
||||
storeAudits[0].Status = model.StoreAuditStatusRejected
|
||||
storeAudits[0].AuditStatus = model.StoreAuditStatusRejected
|
||||
} else {
|
||||
return retVal, fmt.Errorf("审核标志不正确!")
|
||||
}
|
||||
storeAudits[0].LastOperator = ctx.GetUserName()
|
||||
storeAudits[0].Remark = storeAudit.Remark
|
||||
_, err = dao.UpdateEntity(db, storeAudits[0], "UserID", "Status", "Remark")
|
||||
_, err = dao.UpdateEntity(db, storeAudits[0], "LastOperator", "AuditStatus", "Remark")
|
||||
//是否推送app消息
|
||||
if err == nil {
|
||||
|
||||
|
||||
@@ -147,6 +147,9 @@ func SyncSkus(ctx *jxcontext.Context, parentTask tasksch.ITask, vendorIDs []int,
|
||||
if skuVendorInfo.ExdSkuID != "" {
|
||||
return nil, err
|
||||
}
|
||||
if skuVendorInfo.SkuVendorMapCatID != "" {
|
||||
skuVendorInfo.VendorVendorCatID = utils.Str2Int64(skuVendorInfo.SkuVendorMapCatID)
|
||||
}
|
||||
skuVendorInfo.SkuName = jxutils.ComposeSkuNameSync(skuVendorInfo.Prefix, skuVendorInfo.Name, skuVendorInfo.Comment, skuVendorInfo.Unit, skuVendorInfo.SpecQuality, skuVendorInfo.SpecUnit, 0, skuVendorInfo.ExPrefix, skuVendorInfo.ExPrefixBegin, skuVendorInfo.ExPrefixEnd)
|
||||
skuVendorInfo.SkuNameOrigin = jxutils.ComposeSkuNameOriginal(skuVendorInfo.Prefix, skuVendorInfo.Name, skuVendorInfo.Comment, skuVendorInfo.Unit, skuVendorInfo.SpecQuality, skuVendorInfo.SpecUnit, 0)
|
||||
if skuVendorInfo.ImgWatermark != "" {
|
||||
|
||||
@@ -301,9 +301,10 @@ func formalizeStoreSkuList(inSkuList []*dao.StoreSkuSyncInfo) []*dao.StoreSkuSyn
|
||||
skuItem.SkuName = jxutils.ComposeSkuNameSync(skuItem.Prefix, skuItem.Name, skuItem.Comment, skuItem.Unit, skuItem.SpecQuality, skuItem.SpecUnit, 0, skuItem.ExPrefix, skuItem.ExPrefixBegin, skuItem.ExPrefixEnd)
|
||||
skuItem.SkuNameOrigin = jxutils.ComposeSkuNameOriginal(skuItem.Prefix, skuItem.Name, skuItem.Comment, skuItem.Unit, skuItem.SpecQuality, skuItem.SpecUnit, 0)
|
||||
if skuItem.ImgWatermark != "" && model.IsSyncStatusUpdate(skuItem.SkuSyncStatus) && skuItem.VendorID != model.VendorIDJD {
|
||||
if utils.Time2Date(time.Now().Add(6*time.Hour)).Sub(*skuItem.ExPrefixBegin) >= 0 && utils.Time2Date(time.Now()).Sub(*skuItem.ExPrefixEnd) <= 0 {
|
||||
downLoad, _ := uploadImgStandard(skuItem.ImgWatermark)
|
||||
skuItem.ImgMix = jxutils.MixWatermarkImg(downLoad, skuItem.ImgOrigin, skuItem.ExPrefixBegin, skuItem.ExPrefixEnd)
|
||||
if utils.Time2Date(time.Now().Add(6*time.Hour)).Sub(*skuItem.ExPrefixBegin) == 0 {
|
||||
// if utils.Time2Date(time.Now().Add(6*time.Hour)).Sub(*skuItem.ExPrefixBegin) >= 0 && utils.Time2Date(time.Now()).Sub(*skuItem.ExPrefixEnd) <= 0 {
|
||||
// downLoad, _ := uploadImgStandard(skuItem.ImgWatermark)
|
||||
skuItem.ImgMix = jxutils.MixWatermarkImg(skuItem.ImgWatermark, skuItem.ImgOrigin, skuItem.ExPrefixBegin, skuItem.ExPrefixEnd)
|
||||
}
|
||||
if utils.Time2Date(time.Now().Add(6*time.Hour)).Sub(*skuItem.ExPrefixEnd) > 0 {
|
||||
skuItem.ImgMix = ""
|
||||
|
||||
@@ -4,6 +4,7 @@ import (
|
||||
"bytes"
|
||||
"context"
|
||||
"crypto/aes"
|
||||
"crypto/md5"
|
||||
"encoding/base64"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
@@ -26,9 +27,10 @@ import (
|
||||
)
|
||||
|
||||
var (
|
||||
routinePool *routinepool.Pool
|
||||
skuNamePat *regexp.Regexp
|
||||
emailPat *regexp.Regexp
|
||||
routinePool *routinepool.Pool
|
||||
skuNamePat *regexp.Regexp
|
||||
emailPat *regexp.Regexp
|
||||
orderNoBeginTimestamp int64
|
||||
|
||||
resourceTypeMap = map[int][]string{
|
||||
model.VendorIDQiNiuCloud: []string{
|
||||
@@ -75,6 +77,7 @@ func init() {
|
||||
// https://stackoverflow.com/questions/38933898/error-parsing-regexp-invalid-or-unsupported-perl-syntax
|
||||
skuNamePat = regexp.MustCompile(`([\((\[【][^\((\[【\))\]】]*[\))\]】])?(.*?)([((].*[))])?\s*约?([1-9][\d\.]*)(g|G|kg|kG|Kg|KG|l|L|ml|mL|Ml|ML|克)\s*([((].*[))])?\s*(?:\/|/|)\s*([^\s()()]{0,2})(\s.*)?$\s*([((].*[))])?$`)
|
||||
emailPat = regexp.MustCompile(`[A-Za-z0-9_\-.]+@(?:[A-Za-z0-9_\-]+\.)+[A-Za-z]+`)
|
||||
orderNoBeginTimestamp = utils.Str2Time("2010-01-01 00:00:00").Unix()
|
||||
}
|
||||
|
||||
func getJxStoreIDFromOrder(order *model.GoodsOrder) (retVal int) {
|
||||
@@ -168,6 +171,36 @@ func GetPossibleVendorIDFromVendorOrderID(vendorOrderID string) (vendorID int) {
|
||||
return vendorID
|
||||
}
|
||||
|
||||
func GenOrderNo() (orderNo int64) {
|
||||
const prefix = 88
|
||||
const randPartNum = 1000
|
||||
orderNo = time.Now().Unix() - orderNoBeginTimestamp
|
||||
orderNo = orderNo * randPartNum
|
||||
md5Bytes := md5.Sum([]byte(utils.GetUUID()))
|
||||
randPart := 0
|
||||
for k, v := range md5Bytes {
|
||||
randPart += int(v) << ((k % 3) * 8)
|
||||
}
|
||||
orderNo += int64(randPart % randPartNum)
|
||||
orderNo += int64(math.Pow10(int(math.Log10(float64(orderNo)))+1)) * prefix
|
||||
return orderNo
|
||||
}
|
||||
|
||||
func GenAfsOrderNo() (orderNo int64) {
|
||||
const prefix = 80
|
||||
const randPartNum = 100
|
||||
orderNo = time.Now().Unix() - orderNoBeginTimestamp
|
||||
orderNo = orderNo * randPartNum
|
||||
md5Bytes := md5.Sum([]byte(utils.GetUUID()))
|
||||
randPart := 0
|
||||
for k, v := range md5Bytes {
|
||||
randPart += int(v) << ((k % 3) * 8)
|
||||
}
|
||||
orderNo += int64(randPart % randPartNum)
|
||||
orderNo += int64(math.Pow10(int(math.Log10(float64(orderNo)))+1)) * prefix
|
||||
return orderNo
|
||||
}
|
||||
|
||||
func GetPossibleVendorIDFromAfsOrderID(afsOrderID string) (vendorID int) {
|
||||
vendorID = model.VendorIDUnknown
|
||||
if afsOrderIDInt64 := utils.Str2Int64WithDefault(afsOrderID, 0); afsOrderIDInt64 > 0 {
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package push
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"git.rosy.net.cn/baseapi/platformapi/unipushapi"
|
||||
@@ -13,24 +14,22 @@ import (
|
||||
"github.com/astaxie/beego"
|
||||
)
|
||||
|
||||
func NotifyNewOrder(order *model.GoodsOrder) {
|
||||
func pushToSingle(content, title string, storeID int) {
|
||||
var (
|
||||
db = dao.GetDB()
|
||||
)
|
||||
globals.SugarLogger.Debugf("NotifyNewOrder push begin orderID :[%v]", order.VendorOrderID)
|
||||
storePushs, err := dao.GetStorePushClient(db, jxutils.GetSaleStoreIDFromOrder(order), "")
|
||||
if !globals.IsProductEnv() {
|
||||
return
|
||||
}
|
||||
storePushs, err := dao.GetStorePushClient(db, storeID, "")
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
for _, v := range storePushs {
|
||||
sb := new(strings.Builder)
|
||||
sb.WriteString("老板,")
|
||||
sb.WriteString(order.ConsigneeName)
|
||||
sb.WriteString("购买了商品")
|
||||
sb.WriteString(getOrderDetailBrief(order))
|
||||
|
||||
status, err2 := api.PushAPI.PushToSingle(v.ClientID, false, &unipushapi.Notification{
|
||||
Title: "京西菜市新订单推送",
|
||||
Body: sb.String(),
|
||||
Title: title,
|
||||
Body: content,
|
||||
})
|
||||
if err = err2; err != nil {
|
||||
globals.SugarLogger.Debugf("NotifyNewOrder push error: [%v]", err)
|
||||
@@ -38,7 +37,7 @@ func NotifyNewOrder(order *model.GoodsOrder) {
|
||||
}
|
||||
if status == unipushapi.SuccessOffLine {
|
||||
_, err = api.PushAPI.PushToSingle(v.ClientID, true, &unipushapi.Notification{
|
||||
Body: sb.String(),
|
||||
Body: content,
|
||||
})
|
||||
if err != nil {
|
||||
globals.SugarLogger.Debugf("NotifyNewOrder push2 error: [%v]", err)
|
||||
@@ -49,6 +48,16 @@ func NotifyNewOrder(order *model.GoodsOrder) {
|
||||
}
|
||||
}
|
||||
|
||||
func NotifyNewOrder(order *model.GoodsOrder) {
|
||||
globals.SugarLogger.Debugf("NotifyNewOrder push begin orderID :[%v]", order.VendorOrderID)
|
||||
sb := new(strings.Builder)
|
||||
sb.WriteString("老板,")
|
||||
sb.WriteString(order.ConsigneeName)
|
||||
sb.WriteString("购买了商品")
|
||||
sb.WriteString(getOrderDetailBrief(order))
|
||||
pushToSingle(sb.String(), "京西菜市新订单推送", jxutils.GetSaleStoreIDFromOrder(order))
|
||||
}
|
||||
|
||||
func getOrderDetailBrief(order *model.GoodsOrder) (brief string) {
|
||||
sb := new(strings.Builder)
|
||||
sb.WriteString(order.Skus[0].SkuName)
|
||||
@@ -72,3 +81,15 @@ func getOrderDetailBrief(order *model.GoodsOrder) (brief string) {
|
||||
sb.WriteString("元")
|
||||
return sb.String()
|
||||
}
|
||||
|
||||
func NotifyAfsOrder(afsOrder *model.AfsOrder) (err error) {
|
||||
globals.SugarLogger.Debugf("NotifyAfsOrder push begin orderID :[%v]", afsOrder.VendorOrderID)
|
||||
pushToSingle("老板,您有新的售后单,请尽快处理!", "京西菜市售后单推送", jxutils.GetSaleStoreIDFromAfsOrder(afsOrder))
|
||||
return err
|
||||
}
|
||||
|
||||
func NotifyOrderCanceled(order *model.GoodsOrder) (err error) {
|
||||
title := fmt.Sprintf("老板,您的订单%s第%d号订单, %s被取消了!", model.VendorChineseNames[order.VendorID], order.OrderSeq, order.VendorOrderID)
|
||||
pushToSingle(title, "京西菜市取消单推送", jxutils.GetSaleStoreIDFromOrder(order))
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -1266,12 +1266,12 @@ func GetWaybills(db *DaoDB, vendorOrderID string) (waybills []*model.Waybill, er
|
||||
func GetMatterChildOrders(db *DaoDB, vendorOrderID string) (goods []*model.GoodsOrder, err error) {
|
||||
sql := `SELECT *
|
||||
FROM goods_order
|
||||
WHERE vendor_order_id LIKE ? OR vendor_order_id LIKE ?
|
||||
WHERE vendor_order_id LIKE ? OR vendor_order_id LIKE ? OR vendor_order_id LIKE ?
|
||||
AND vendor_id = ?
|
||||
ORDER BY vendor_order_id DESC
|
||||
`
|
||||
sqlParams := []interface{}{
|
||||
vendorOrderID + "0%", vendorOrderID + "1%",
|
||||
vendorOrderID + "0%", vendorOrderID + "1%", vendorOrderID + "2%",
|
||||
model.VendorIDJX,
|
||||
}
|
||||
err = GetRows(db, &goods, sql, sqlParams)
|
||||
|
||||
@@ -260,7 +260,8 @@ func GetSkusWithVendor(db *DaoDB, vendorIDs []int, appOrgCodes []string, nameIDs
|
||||
t3.jd_category_id vendor_vendor_cat_id,
|
||||
tsu.ex_prefix, tsu.begin_at ex_prefix_begin, tsu.end_at ex_prefix_end, tsu.img_watermark,
|
||||
t3m.sync_status cat_sync_status,
|
||||
t3m.vendor_thing_id vendor_cat_id
|
||||
t3m.vendor_thing_id vendor_cat_id,
|
||||
tsy.vendor_category_id sku_vendor_map_cat_id
|
||||
|
||||
FROM sku t1
|
||||
LEFT JOIN thing_map t1m ON t1m.thing_id = t1.id AND t1m.thing_type = ? AND t1m.deleted_at = ?`
|
||||
@@ -286,9 +287,10 @@ func GetSkusWithVendor(db *DaoDB, vendorIDs []int, appOrgCodes []string, nameIDs
|
||||
LEFT JOIN data_resource t11 ON t11.main_url = t2.img
|
||||
LEFT JOIN data_resource t12 ON t12.main_url = t2.img2
|
||||
LEFT JOIN sku_exinfo_map tsu ON tsu.name_id = t2.id AND tsu.deleted_at = ? AND tsu.vendor_id = t1m.vendor_id
|
||||
LEFT JOIN sku_vendor_category_map tsy ON tsy.name_id = t2.id AND tsy.vendor_id = ? AND tsy.deleted_at = ?
|
||||
WHERE 1 = 1
|
||||
`
|
||||
sqlParams = append(sqlParams, model.ThingTypeCategory, utils.DefaultTimeValue, utils.DefaultTimeValue)
|
||||
sqlParams = append(sqlParams, model.ThingTypeCategory, utils.DefaultTimeValue, utils.DefaultTimeValue, model.VendorIDJD, utils.DefaultTimeValue)
|
||||
if mustDirty {
|
||||
sql += " AND t1m.sync_status IS NOT NULL AND t1m.sync_status <> 0"
|
||||
} else {
|
||||
|
||||
@@ -28,10 +28,11 @@ const (
|
||||
)
|
||||
|
||||
const (
|
||||
OrderTypeNormal = 0 //普通订单
|
||||
OrderTypeMatter = 1 //物料订单
|
||||
OrderTypeSupplyGoods = 2 //进货订单
|
||||
OrderTypeDefendPrice = 3 //守价订单
|
||||
OrderTypeAddressErr = -1 //地址异常订单
|
||||
OrderTypeNormal = 0 //普通订单
|
||||
OrderTypeMatter = 1 //物料订单
|
||||
OrderTypeSupplyGoods = 2 //进货订单
|
||||
OrderTypeDefendPrice = 3 //守价订单
|
||||
)
|
||||
|
||||
var (
|
||||
|
||||
@@ -711,8 +711,8 @@ type StoreAudit struct {
|
||||
CloseTime1 int16 `json:"closeTime1" validate:"max=2359,min=1` // 格式同上
|
||||
OpenTime2 int16 `json:"openTime2" validate:"max=2359,min=1,ltfield=CloseTime2"` // 格式同上
|
||||
CloseTime2 int16 `json:"closeTime2" validate:"max=2359,min=1` // 格式同上
|
||||
Lng int `json:"-"` // 乘了10的6次方
|
||||
Lat int `json:"-"` // 乘了10的6次方
|
||||
Lng int `json:"lng"` // 乘了10的6次方
|
||||
Lat int `json:"lat"` // 乘了10的6次方
|
||||
DeliveryRangeType int8 `json:"deliveryRangeType"` // 参见相关常量定义
|
||||
DeliveryRange string `orm:"type(text)" json:"deliveryRange"` // 如果DeliveryRangeType为DeliveryRangeTypePolygon,则为逗号分隔坐标,分号分隔的坐标点(坐标与Lng和Lat一样,都是整数),比如 121361504,31189308;121420555,31150238。否则为半径,单位为米
|
||||
Status int `json:"status"`
|
||||
|
||||
@@ -44,36 +44,38 @@ func (c *DeliveryHandler) OnStoreStatus(msg *mtpsapi.CallbackShopStatusMsg) (ret
|
||||
}
|
||||
|
||||
func (c *DeliveryHandler) CreateStore(ctx *jxcontext.Context, storeDetail *dao.StoreDetail2) (vendorStoreID string, status int, err error) {
|
||||
businessHours := []*mtpsapi.BusinessHour{
|
||||
&mtpsapi.BusinessHour{
|
||||
BeginTime: "06:00",
|
||||
EndTime: "22:00",
|
||||
},
|
||||
}
|
||||
shopInfo := &mtpsapi.ShopInfo{
|
||||
ShopID: storeDetail.VendorStoreID,
|
||||
ShopName: storeDetail.Name,
|
||||
Category: mtpsapi.ShopCategoryFruit,
|
||||
SecondCategory: mtpsapi.ShopCategoryFruitFruit,
|
||||
ContactName: storeDetail.PayeeName,
|
||||
ContactPhone: storeDetail.Tel1,
|
||||
ContactEmail: fakeContactEmail,
|
||||
ShopAddress: storeDetail.Address,
|
||||
ShopLng: storeDetail.Lng,
|
||||
ShopLat: storeDetail.Lat,
|
||||
CoordinateType: mtpsapi.CoordinateTypeMars,
|
||||
BusinessHours: string(utils.MustMarshal(businessHours)),
|
||||
}
|
||||
shopStatus := mtpsapi.ShopStatusAuditCreated
|
||||
if globals.EnableStoreWrite {
|
||||
shopStatus, err = api.MtpsAPI.ShopCreate(shopInfo)
|
||||
if err == nil {
|
||||
vendorStoreID = shopInfo.ShopID
|
||||
status = getAuditStatus(shopStatus)
|
||||
businessHours := []*mtpsapi.BusinessHour{
|
||||
&mtpsapi.BusinessHour{
|
||||
BeginTime: "06:00",
|
||||
EndTime: "22:00",
|
||||
},
|
||||
}
|
||||
shopInfo := &mtpsapi.ShopInfo{
|
||||
ShopID: storeDetail.VendorStoreID,
|
||||
ShopName: storeDetail.Name,
|
||||
Category: mtpsapi.ShopCategoryFruit,
|
||||
SecondCategory: mtpsapi.ShopCategoryFruitFruit,
|
||||
ContactName: storeDetail.PayeeName,
|
||||
ContactPhone: storeDetail.Tel1,
|
||||
ContactEmail: fakeContactEmail,
|
||||
ShopAddress: storeDetail.Address,
|
||||
ShopLng: storeDetail.Lng,
|
||||
ShopLat: storeDetail.Lat,
|
||||
CoordinateType: mtpsapi.CoordinateTypeMars,
|
||||
BusinessHours: string(utils.MustMarshal(businessHours)),
|
||||
}
|
||||
shopStatus := mtpsapi.ShopStatusAuditCreated
|
||||
if globals.EnableStoreWrite {
|
||||
shopStatus, err = api.MtpsAPI.ShopCreate(shopInfo)
|
||||
if err == nil {
|
||||
vendorStoreID = shopInfo.ShopID
|
||||
status = getAuditStatus(shopStatus)
|
||||
}
|
||||
} else {
|
||||
vendorStoreID = utils.Int64ToStr(jxutils.GenFakeID())
|
||||
status = model.StoreAuditStatusOnline
|
||||
}
|
||||
} else {
|
||||
vendorStoreID = utils.Int64ToStr(jxutils.GenFakeID())
|
||||
status = model.StoreAuditStatusOnline
|
||||
}
|
||||
return vendorStoreID, status, err
|
||||
}
|
||||
|
||||
@@ -114,7 +114,7 @@ func (p *PurchaseHandler) ReorderCategories2(ctx *jxcontext.Context, vendorOrgCo
|
||||
|
||||
func (p *PurchaseHandler) getVendorCategories(level int, pid int64) (vendorCats []*model.SkuVendorCategory, err error) {
|
||||
// 得到平台的分类,不需要指定分账号
|
||||
cats, err := api.Jd2API.QueryChildCategoriesForOP(pid)
|
||||
cats, err := api.JdAPI.QueryChildCategoriesForOP(pid)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -70,13 +70,11 @@ func SaveJdsOrders(msg *jdshopapi.CallBackResult) (err error) {
|
||||
if err != nil || order == nil {
|
||||
return err
|
||||
}
|
||||
// order.StoreID = 102919
|
||||
// order.JxStoreID = 102919
|
||||
// order.StoreName = "商城模板(成都发货)"
|
||||
// order.VendorStoreID = model.JdShopMainVendorStoreID
|
||||
// order.DeliveryFlag = model.OrderDeliveryFlagMaskScheduleDisabled
|
||||
partner.CurOrderManager.OnOrderNew(order, model.Order2Status(order))
|
||||
noticeMsg := fmt.Sprintf("京东商城新订单,订单号:[%v] ,将要发到的门店id:[%v] , 门店名:[%v]", order.VendorOrderID, order.StoreID, order.StoreName)
|
||||
if order.OrderType == model.OrderTypeAddressErr {
|
||||
noticeMsg += " 此订单地址有问题,需要矫正坐标!"
|
||||
}
|
||||
ddmsg.SendUserMessage(dingdingapi.MsgTyeText, "DDC5657B43EE11E9A9FF525400E86DC0", "京东商城来新订单了!", noticeMsg)
|
||||
ddmsg.SendUserMessage(dingdingapi.MsgTyeText, "1439B3E07D3911EA881A525400E86DC0", "京东商城来新订单了!", noticeMsg)
|
||||
return err
|
||||
@@ -114,9 +112,22 @@ func result2Orders(msg *jdshopapi.CallBackResult) (order *model.GoodsOrder, err
|
||||
order.TotalShopMoney = 100
|
||||
}
|
||||
if order.ConsigneeAddress != "" {
|
||||
lng, lat, _ := api.AutonaviAPI.GetCoordinateFromAddress(order.ConsigneeAddress, "")
|
||||
order.ConsigneeLng = jxutils.StandardCoordinate2Int(lng)
|
||||
order.ConsigneeLat = jxutils.StandardCoordinate2Int(lat)
|
||||
lng, lat, err2 := api.AutonaviAPI.GetCoordinateFromAddressByPage(order.ConsigneeAddress)
|
||||
if err = err2; err != nil {
|
||||
globals.SugarLogger.Infof("高德page err: %v", err)
|
||||
}
|
||||
lng2, lat2, _ := api.AutonaviAPI.GetCoordinateFromAddress(order.ConsigneeAddress, "")
|
||||
distance := jxutils.EarthDistance(lng, lat, lng2, lat2)
|
||||
if distance > 1 {
|
||||
order.OrderType = model.OrderTypeAddressErr
|
||||
}
|
||||
if err == nil && lng != 0 && lat != 0 {
|
||||
order.ConsigneeLng = jxutils.StandardCoordinate2Int(lng)
|
||||
order.ConsigneeLat = jxutils.StandardCoordinate2Int(lat)
|
||||
} else {
|
||||
order.ConsigneeLng = jxutils.StandardCoordinate2Int(lng2)
|
||||
order.ConsigneeLat = jxutils.StandardCoordinate2Int(lat2)
|
||||
}
|
||||
order.CoordinateType = model.CoordinateTypeMars
|
||||
}
|
||||
for _, v := range msg.ItemInfoList {
|
||||
@@ -163,8 +174,10 @@ func result2Orders(msg *jdshopapi.CallBackResult) (order *model.GoodsOrder, err
|
||||
)
|
||||
for _, sku := range order.Skus {
|
||||
storeSkuList, _ := dao.GetStoresSkusInfo(dao.GetDB(), []int{order.StoreID}, []int{sku.SkuID})
|
||||
if len(storeSkuList) > 0 && storeSkuList[0].Status == model.StoreSkuBindStatusNormal {
|
||||
saleNormalSum += 1
|
||||
if len(storeSkuList) > 0 {
|
||||
if storeSkuList[0].Status == model.StoreSkuBindStatusNormal {
|
||||
saleNormalSum += 1
|
||||
}
|
||||
shopPriceSum += storeSkuList[0].Price * sku.Count
|
||||
}
|
||||
}
|
||||
@@ -202,8 +215,8 @@ func result2Orders(msg *jdshopapi.CallBackResult) (order *model.GoodsOrder, err
|
||||
// 如果是暂停,表示是预订单g
|
||||
if msg.OrderState == jdshopapi.OrderStatusPause || msg.OrderState == jdshopapi.OrderStatusPopPause {
|
||||
order.BusinessType = model.BusinessTypeDingshida
|
||||
if time, err := api.JdShopAPI.GetOrderExtInfoByOrderId(order.VendorOrderID2); err == nil {
|
||||
order.ExpectedDeliveredTime = utils.Str2Time(time)
|
||||
if time2, err := api.JdShopAPI.GetOrderExtInfoByOrderId(order.VendorOrderID2); err == nil {
|
||||
order.ExpectedDeliveredTime = utils.Str2Time(time2).Add(-time.Minute * 30)
|
||||
}
|
||||
order.PickDeadline = order.ExpectedDeliveredTime.Add(-time.Hour)
|
||||
} else if msg.OrderState == jdshopapi.OrderStatusWait {
|
||||
@@ -214,12 +227,15 @@ func result2Orders(msg *jdshopapi.CallBackResult) (order *model.GoodsOrder, err
|
||||
return nil, err
|
||||
}
|
||||
if msg.IDSopShipmenttype == jdshopapi.IdSopShipmenttypeTC {
|
||||
if time, err := api.JdShopAPI.GetOrderExtInfoByOrderId(order.VendorOrderID2); err == nil {
|
||||
if time2, err := api.JdShopAPI.GetOrderExtInfoByOrderId(order.VendorOrderID2); err == nil {
|
||||
order.BusinessType = model.BusinessTypeDingshida
|
||||
order.ExpectedDeliveredTime = utils.Str2Time(time)
|
||||
order.ExpectedDeliveredTime = utils.Str2Time(time2).Add(-time.Minute * 30)
|
||||
}
|
||||
}
|
||||
setJdsOrderSeq(order)
|
||||
if order.OrderType == model.OrderTypeAddressErr {
|
||||
buildOrderTo102919(order)
|
||||
}
|
||||
return order, err
|
||||
}
|
||||
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package localjx
|
||||
|
||||
import (
|
||||
"crypto/md5"
|
||||
"fmt"
|
||||
"math"
|
||||
"regexp"
|
||||
@@ -140,8 +139,6 @@ type MatterOrderStatus struct {
|
||||
}
|
||||
|
||||
var (
|
||||
orderNoBeginTimestamp int64
|
||||
|
||||
weekdayMap = map[int]string{
|
||||
1: "一",
|
||||
2: "二",
|
||||
@@ -174,7 +171,6 @@ var (
|
||||
)
|
||||
|
||||
func init() {
|
||||
orderNoBeginTimestamp = utils.Str2Time("2010-01-01 00:00:00").Unix()
|
||||
}
|
||||
|
||||
func GetMyOrders(ctx *jxcontext.Context, fromDateStr, toDateStr string, params map[string]interface{}, offset, pageSize int) (pagedInfo *model.PagedInfo, err error) {
|
||||
@@ -250,7 +246,7 @@ func CreateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64,
|
||||
if jxOrder.IsPriceDefend == model.YES {
|
||||
outJxOrder.OrderID = jxOrder.OrderID
|
||||
} else {
|
||||
outJxOrder.OrderID = GenOrderNo(ctx)
|
||||
outJxOrder.OrderID = jxutils.GenOrderNo()
|
||||
}
|
||||
order, err2 := jxOrder2GoodsOrder(ctx, outJxOrder, deliveryAddress, "", IsDeliverySelf)
|
||||
if err = err2; err == nil {
|
||||
@@ -273,7 +269,7 @@ func buildDefendPriceOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, address
|
||||
)
|
||||
issue = jxutils.GetDefendPriceIssue()
|
||||
priceDefendOrder := &model.PriceDefendOrder{
|
||||
VendorOrderID: utils.Int64ToStr(GenOrderNo(ctx)),
|
||||
VendorOrderID: utils.Int64ToStr(jxutils.GenOrderNo()),
|
||||
StoreID: jxOrder.StoreID,
|
||||
SkuID: jxOrder.Skus[0].SkuID,
|
||||
AddressID: addressID,
|
||||
@@ -543,37 +539,6 @@ func OnPayFinished(orderPay *model.OrderPay) (err error) {
|
||||
return err
|
||||
}
|
||||
|
||||
func GenOrderNo(ctx *jxcontext.Context) (orderNo int64) {
|
||||
const prefix = 88
|
||||
const randPartNum = 1000
|
||||
orderNo = time.Now().Unix() - orderNoBeginTimestamp
|
||||
// fmt.Println(orderNo)
|
||||
orderNo = orderNo * randPartNum
|
||||
md5Bytes := md5.Sum([]byte(utils.GetUUID()))
|
||||
randPart := 0
|
||||
for k, v := range md5Bytes {
|
||||
randPart += int(v) << ((k % 3) * 8)
|
||||
}
|
||||
orderNo += int64(randPart % randPartNum)
|
||||
orderNo += int64(math.Pow10(int(math.Log10(float64(orderNo)))+1)) * prefix
|
||||
return orderNo
|
||||
}
|
||||
|
||||
func GenAfsOrderNo(ctx *jxcontext.Context) (orderNo int64) {
|
||||
const prefix = 80
|
||||
const randPartNum = 100
|
||||
orderNo = time.Now().Unix() - orderNoBeginTimestamp
|
||||
orderNo = orderNo * randPartNum
|
||||
md5Bytes := md5.Sum([]byte(utils.GetUUID()))
|
||||
randPart := 0
|
||||
for k, v := range md5Bytes {
|
||||
randPart += int(v) << ((k % 3) * 8)
|
||||
}
|
||||
orderNo += int64(randPart % randPartNum)
|
||||
orderNo += int64(math.Pow10(int(math.Log10(float64(orderNo)))+1)) * prefix
|
||||
return orderNo
|
||||
}
|
||||
|
||||
func GenPayOrderID(order *model.GoodsOrder) (payOrderID int64) {
|
||||
return utils.Str2Int64(order.VendorOrderID)
|
||||
}
|
||||
@@ -1219,6 +1184,7 @@ func orderSolutionForWuLiao(order *model.GoodsOrder) (err error) {
|
||||
checkMatterDeliveryAddress(deliveryAddress)
|
||||
order2, err2 := jxOrder2GoodsOrder(jxcontext.AdminCtx, outJxOrder, deliveryAddress, order.UserID, false)
|
||||
if err = err2; err == nil {
|
||||
order2.FromStoreID = v.FromStoreID
|
||||
order2.AddressID = order.AddressID
|
||||
order2.Status = model.OrderStatusDelivering
|
||||
err = partner.CurOrderManager.OnOrderNew(order2, model.Order2Status(order2))
|
||||
@@ -1970,6 +1936,7 @@ func SendFailedMatterOrder(ctx *jxcontext.Context, vendorOrderID string) (err er
|
||||
if order == nil || order.StoreID != model.MatterStoreID || order.FromStoreID == 0 {
|
||||
return fmt.Errorf("只允许物料店重发物料订单调用此接口!")
|
||||
}
|
||||
err = CancelMatterOrder(db, order, cancelMatterOrderReason)
|
||||
// queryOrderStatus, err := api.JdEclpAPI.QueryOrderStatus(order.EclpOutID)
|
||||
// if len(queryOrderStatus.OrderStatusList) > 0 {
|
||||
// code := queryOrderStatus.OrderStatusList[len(queryOrderStatus.OrderStatusList)-1].SoStatusCode
|
||||
@@ -1980,7 +1947,6 @@ func SendFailedMatterOrder(ctx *jxcontext.Context, vendorOrderID string) (err er
|
||||
globals.SugarLogger.Debugf("SendFailedMatterOrder err : [%v]", err)
|
||||
return err
|
||||
}
|
||||
err = CancelMatterOrder(db, order, cancelMatterOrderReason)
|
||||
changeOrderStatus(order.VendorOrderID, model.OrderStatusCanceled, cancelMatterOrderReason)
|
||||
for _, v := range order.Skus {
|
||||
cms.RefreshMatterStock(jxcontext.AdminCtx, v.SkuID)
|
||||
@@ -1997,13 +1963,12 @@ func SendFailedMatterOrder(ctx *jxcontext.Context, vendorOrderID string) (err er
|
||||
return err
|
||||
}
|
||||
suffix := utils.Str2Int64(cOrder.VendorOrderID[len(cOrder.VendorOrderID)-2:]) + int64(len(goodsList))
|
||||
_, err = createMatterOrder(buildJxOrderInfo(cOrder, cOrder.Skus), cOrder, suffix)
|
||||
_, err = createMatterOrder(buildJxOrderInfo(cOrder, cOrder.Skus), order, suffix)
|
||||
for _, v := range cOrder.Skus {
|
||||
cms.RefreshMatterStock(jxcontext.AdminCtx, v.SkuID)
|
||||
}
|
||||
}
|
||||
}
|
||||
// err = CancelMatterOrder(db, order, cancelMatterOrderReason)
|
||||
changeOrderStatus(order.VendorOrderID, model.OrderStatusCanceled, cancelMatterOrderReason)
|
||||
} else if len(order.VendorOrderID) == 16 && order.EclpOutID != "" { // 这是分包的子订单
|
||||
return fmt.Errorf("请重发主订单!主订单号:[%v]", order.VendorOrderID[len(order.VendorOrderID)-2:])
|
||||
@@ -2101,7 +2066,7 @@ func CreateOrderByPriceDefend(ctx *jxcontext.Context) (err error) {
|
||||
BuyerComment: "守价订单",
|
||||
StoreID: vv[0].StoreID,
|
||||
IsPriceDefend: model.YES,
|
||||
OrderID: GenOrderNo(ctx),
|
||||
OrderID: jxutils.GenOrderNo(),
|
||||
UserID: address.UserID,
|
||||
}
|
||||
for _, priceDefend := range vv {
|
||||
|
||||
60
business/partner/purchase/jx/localjx/user.go
Normal file
60
business/partner/purchase/jx/localjx/user.go
Normal file
@@ -0,0 +1,60 @@
|
||||
package localjx
|
||||
|
||||
import (
|
||||
"git.rosy.net.cn/jx-callback/business/model/dao"
|
||||
"git.rosy.net.cn/jx-callback/globals/api"
|
||||
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
"git.rosy.net.cn/jx-callback/business/jxutils"
|
||||
"git.rosy.net.cn/jx-callback/business/model"
|
||||
|
||||
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
|
||||
)
|
||||
|
||||
type GetJxShopUsersResult struct {
|
||||
model.User
|
||||
BuyCount int `json:"buyCount"`
|
||||
ActualPayPrice int `json:"actualPayPrice"`
|
||||
GoodCommentCount int `json:"goodCommentCount"`
|
||||
BadCommentCount int `json:"badCommentCount"`
|
||||
UserMembers []*model.UserMember `json:"userMembers"`
|
||||
}
|
||||
|
||||
func GetJxShopUsers(ctx *jxcontext.Context, keyword string, offset, pageSize int) (pagedInfo *model.PagedInfo, err error) {
|
||||
var (
|
||||
requestList []*GetJxShopUsersResult
|
||||
db = dao.GetDB()
|
||||
)
|
||||
sql := `
|
||||
SELECT SQL_CALC_FOUND_ROWS DISTINCT a.*, b.buy_count, b.actual_pay_price
|
||||
FROM user a,
|
||||
(SELECT a.user_id, COUNT(*) buy_count, SUM(c.actual_pay_price) actual_pay_price
|
||||
FROM user a
|
||||
JOIN auth_bind b ON b.user_id = a.user_id AND b.deleted_at = ? AND b.type_id = ?
|
||||
JOIN goods_order c ON c.user_id = a.user_id AND c.status <> ?
|
||||
WHERE a.deleted_at = ?
|
||||
GROUP BY 1) b
|
||||
WHERE a.user_id = b.user_id
|
||||
`
|
||||
sqlParams := []interface{}{
|
||||
utils.DefaultTimeValue, api.WeixinMiniAppID2,
|
||||
model.OrderStatusCanceled,
|
||||
utils.DefaultTimeValue,
|
||||
}
|
||||
if keyword != "" {
|
||||
sql += " AND (a.user_id LIKE ? OR a.name LIKE ? OR a.moblie LIKE ? OR a.user_id2 LIKE ?)"
|
||||
sqlParams = append(sqlParams, "%"+keyword+"%", "%"+keyword+"%", "%"+keyword+"%", "%"+keyword+"%")
|
||||
}
|
||||
sql += "LIMIT ? OFFSET ?"
|
||||
pageSize = jxutils.FormalizePageSize(pageSize)
|
||||
sqlParams = append(sqlParams, pageSize, offset)
|
||||
dao.Begin(db)
|
||||
defer dao.Commit(db)
|
||||
if err = dao.GetRows(db, &requestList, sql, sqlParams...); err == nil {
|
||||
return &model.PagedInfo{
|
||||
TotalCount: dao.GetLastTotalRowCount(db),
|
||||
Data: requestList,
|
||||
}, nil
|
||||
}
|
||||
return pagedInfo, err
|
||||
}
|
||||
@@ -5,6 +5,8 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"git.rosy.net.cn/jx-callback/business/jxutils"
|
||||
|
||||
"git.rosy.net.cn/jx-callback/globals"
|
||||
|
||||
"git.rosy.net.cn/jx-callback/business/model/dao"
|
||||
@@ -142,7 +144,7 @@ func (c *PurchaseHandler) PartRefundOrder(ctx *jxcontext.Context, order *model.G
|
||||
|
||||
func buildOrderStatus(ctx *jxcontext.Context, order *model.GoodsOrder, reason string, isJxShop bool) (orderStatus *model.OrderStatus) {
|
||||
orderStatus = &model.OrderStatus{
|
||||
VendorOrderID: utils.Int64ToStr(localjx.GenAfsOrderNo(ctx)), // 是售后单ID,不是订单ID,订单ID在RefVendorOrderID中
|
||||
VendorOrderID: utils.Int64ToStr(jxutils.GenAfsOrderNo()), // 是售后单ID,不是订单ID,订单ID在RefVendorOrderID中
|
||||
VendorID: order.VendorID,
|
||||
OrderType: model.OrderTypeAfsOrder,
|
||||
RefVendorOrderID: order.VendorOrderID,
|
||||
|
||||
@@ -254,13 +254,19 @@ func (p *PurchaseHandler) Map2Order(orderData map[string]interface{}) (order *mo
|
||||
if skuBenefitDetailMap != nil && skuBenefitDetailMap[sku.VendorSkuID] != nil && ignoreSkuMap[sku.SkuID] == 0 /* && sku.Count == 1 */ {
|
||||
for _, v := range skuBenefitDetailMap[sku.VendorSkuID].WmAppOrderActDetails {
|
||||
if /*skuActTypeMap[v.Type] == 1 && */ strings.Index(v.Remark, skuName) >= 0 && sku.Count == v.Count {
|
||||
ignoreSkuMap[sku.SkuID] = 1
|
||||
sku.SalePrice -= jxutils.StandardPrice2Int(v.MtCharge + v.PoiCharge)
|
||||
if sku.SalePrice-jxutils.StandardPrice2Int(v.MtCharge+v.PoiCharge) < 0 {
|
||||
continue
|
||||
} else {
|
||||
ignoreSkuMap[sku.SkuID] = 1
|
||||
sku.SalePrice -= jxutils.StandardPrice2Int(v.MtCharge + v.PoiCharge)
|
||||
}
|
||||
sku.StoreSubName = utils.Int2Str(v.Type)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if sku.SalePrice < 0 {
|
||||
sku.SalePrice = jxutils.StandardPrice2Int(utils.MustInterface2Float64(product["price"]))
|
||||
}
|
||||
// if product["isGift"].(bool) {
|
||||
// sku.SkuType = 1
|
||||
// }
|
||||
|
||||
@@ -139,6 +139,21 @@ func (c *CmsController) GetCoordinateDistrictCode() {
|
||||
})
|
||||
}
|
||||
|
||||
// @Title 根据坐标得到城市
|
||||
// @Description 根据坐标得到城市
|
||||
// @Param token header string true "认证token"
|
||||
// @Param lng query number true "经度"
|
||||
// @Param lat query number true "纬度"
|
||||
// @Success 200 {object} controllers.CallResult
|
||||
// @Failure 200 {object} controllers.CallResult
|
||||
// @router /GetCoordinateCityInfo [get]
|
||||
func (c *CmsController) GetCoordinateCityInfo() {
|
||||
c.callGetCoordinateCityInfo(func(params *tCmsGetCoordinateCityInfoParams) (retVal interface{}, errCode string, err error) {
|
||||
retVal, err = cms.GetCoordinateCityInfo(params.Ctx, params.Lng, params.Lat)
|
||||
return retVal, "", err
|
||||
})
|
||||
}
|
||||
|
||||
// @Title 得到配置参数
|
||||
// @Description 得到配置参数
|
||||
// @Param token header string true "认证token"
|
||||
|
||||
@@ -889,7 +889,7 @@ func (c *StoreController) GetStoreAudit() {
|
||||
// @Title 门店审核
|
||||
// @Description 门店审核
|
||||
// @Param token header string true "认证token"
|
||||
// @Param payload fomData string true "json数据,storeaudit对象"
|
||||
// @Param payload formData string true "json数据,storeaudit对象"
|
||||
// @Param status formData int false "审核标志,1通过,-1 不通过"
|
||||
// @Success 200 {object} controllers.CallResult
|
||||
// @Failure 200 {object} controllers.CallResult
|
||||
|
||||
@@ -12,6 +12,7 @@ import (
|
||||
"git.rosy.net.cn/jx-callback/business/jxutils/jsonerr"
|
||||
"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/purchase/jx/localjx"
|
||||
"github.com/astaxie/beego"
|
||||
)
|
||||
|
||||
@@ -533,3 +534,19 @@ func (c *User2Controller) GetUserAgreement() {
|
||||
return retVal, "", err
|
||||
})
|
||||
}
|
||||
|
||||
// @Title 查询京西商城用户信息
|
||||
// @Description 查询京西商城用户信息
|
||||
// @Param token header string true "认证token"
|
||||
// @Param keyword query string false "关键字"
|
||||
// @Param offset query int false "结果起始序号(以0开始,缺省为0)"
|
||||
// @Param pageSize query int false "结果页大小(缺省为50,-1表示全部)"
|
||||
// @Success 200 {object} controllers.CallResult
|
||||
// @Failure 200 {object} controllers.CallResult
|
||||
// @router /GetJxShopUsers [get]
|
||||
func (c *User2Controller) GetJxShopUsers() {
|
||||
c.callGetJxShopUsers(func(params *tUser2GetJxShopUsersParams) (retVal interface{}, errCode string, err error) {
|
||||
retVal, err = localjx.GetJxShopUsers(params.Ctx, params.Keyword, params.Offset, params.PageSize)
|
||||
return retVal, "", err
|
||||
})
|
||||
}
|
||||
|
||||
@@ -1182,3 +1182,22 @@ func (c *OrderController) RefreshJdsOrderConsigneeInfo() {
|
||||
return retVal, "", err
|
||||
})
|
||||
}
|
||||
|
||||
// @Title 修改订单信息
|
||||
// @Description 修改订单信息
|
||||
// @Param token header string true "认证token"
|
||||
// @Param vendorOrderID formData string true "订单号"
|
||||
// @Param vendorID formData int true "平台ID"
|
||||
// @Param payload formData string true "json数据,格式为goodsOrder"
|
||||
// @Success 200 {object} controllers.CallResult
|
||||
// @Failure 200 {object} controllers.CallResult
|
||||
// @router /UpdateOrderInfo [put]
|
||||
func (c *OrderController) UpdateOrderInfo() {
|
||||
c.callUpdateOrderInfo(func(params *tOrderUpdateOrderInfoParams) (retVal interface{}, errCode string, err error) {
|
||||
payload := make(map[string]interface{})
|
||||
if err = utils.UnmarshalUseNumber([]byte(params.Payload), &payload); err == nil {
|
||||
retVal, err = orderman.UpdateOrderInfo(params.Ctx, params.VendorOrderID, params.VendorID, payload)
|
||||
}
|
||||
return retVal, "", err
|
||||
})
|
||||
}
|
||||
|
||||
@@ -277,6 +277,15 @@ func init() {
|
||||
Filters: nil,
|
||||
Params: nil})
|
||||
|
||||
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:CmsController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:CmsController"],
|
||||
beego.ControllerComments{
|
||||
Method: "GetCoordinateCityInfo",
|
||||
Router: `/GetCoordinateCityInfo`,
|
||||
AllowHTTPMethods: []string{"get"},
|
||||
MethodParams: param.Make(),
|
||||
Filters: nil,
|
||||
Params: nil})
|
||||
|
||||
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:CmsController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:CmsController"],
|
||||
beego.ControllerComments{
|
||||
Method: "GetCoordinateDistrictCode",
|
||||
@@ -1386,6 +1395,15 @@ func init() {
|
||||
Filters: nil,
|
||||
Params: nil})
|
||||
|
||||
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"],
|
||||
beego.ControllerComments{
|
||||
Method: "UpdateOrderInfo",
|
||||
Router: `/UpdateOrderInfo`,
|
||||
AllowHTTPMethods: []string{"put"},
|
||||
MethodParams: param.Make(),
|
||||
Filters: nil,
|
||||
Params: nil})
|
||||
|
||||
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"],
|
||||
beego.ControllerComments{
|
||||
Method: "UpdateOrderWaybillTip",
|
||||
@@ -2925,6 +2943,15 @@ func init() {
|
||||
Filters: nil,
|
||||
Params: nil})
|
||||
|
||||
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:User2Controller"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:User2Controller"],
|
||||
beego.ControllerComments{
|
||||
Method: "GetJxShopUsers",
|
||||
Router: `/GetJxShopUsers`,
|
||||
AllowHTTPMethods: []string{"get"},
|
||||
MethodParams: param.Make(),
|
||||
Filters: nil,
|
||||
Params: nil})
|
||||
|
||||
beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:User2Controller"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:User2Controller"],
|
||||
beego.ControllerComments{
|
||||
Method: "GetMyJxStoreList",
|
||||
|
||||
Reference in New Issue
Block a user