Merge remote-tracking branch 'origin/jdshop' into jxact

This commit is contained in:
苏尹岚
2020-09-25 11:38:03 +08:00
27 changed files with 428 additions and 156 deletions

View File

@@ -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{

View File

@@ -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
}

View File

@@ -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 (

View File

@@ -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)
})
}
}

View File

@@ -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

View File

@@ -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 {

View File

@@ -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 {

View File

@@ -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 != "" {

View File

@@ -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 = ""

View File

@@ -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 {

View File

@@ -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
}

View File

@@ -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)

View File

@@ -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 {

View File

@@ -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 (

View File

@@ -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"`

View File

@@ -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
}

View File

@@ -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
}

View File

@@ -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
}

View File

@@ -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 {

View 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
}

View File

@@ -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,

View File

@@ -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
// }

View File

@@ -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"

View File

@@ -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

View File

@@ -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
})
}

View File

@@ -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
})
}

View File

@@ -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",