合并请求

This commit is contained in:
qidongsheng
2020-06-29 09:27:12 +08:00
16 changed files with 973 additions and 825 deletions

View File

@@ -208,9 +208,9 @@ func (c *OrderManager) OnOrderStatusChanged(vendorOrgCode string, orderStatus *m
return err
}
func (c *OrderManager) ChangeOrderInfo(order *model.GoodsOrder, valid map[string]interface{}) (err error) {
func (c *OrderManager) ChangeOrderInfo(order *model.GoodsOrder) (err error) {
db := dao.GetDB()
dao.UpdateEntityLogically(db, order, valid, "jxadmin", nil)
_, err = dao.UpdateEntity(db, order, "ConsigneeAddress", "ConsigneeName", "ConsigneeMobile", "ConsigneeLat", "ConsigneeLng", "BuyerComment")
return err
}
@@ -363,6 +363,9 @@ func (c *OrderManager) updateOrderSkuOtherInfo(order *model.GoodsOrder, db *dao.
if intVendorSkuID != 0 && v.VendorSkuID != "-70000" { // todo hard code
skuBindInfo := skumapper[v.VendorSkuID]
if skuBindInfo == nil {
if v.ShopPrice == 0 {
v.ShopPrice = v.SalePrice * 70 / 100
}
globals.SugarLogger.Infof("updateOrderSkuOtherInfo [运营%s]%s订单sku找不到门店价格或商品映射orderID:%s, StoreID:%d, VendorSkuID:%s, sku:%v", opNumStr, model.VendorChineseNames[order.VendorID], order.VendorOrderID, jxStoreID, v.VendorSkuID, v)
} else {
// TODO 客户端当前逻辑认为SkuID为0为赠品
@@ -381,6 +384,9 @@ func (c *OrderManager) updateOrderSkuOtherInfo(order *model.GoodsOrder, db *dao.
}
} else {
v.ShopPrice = int64(skuBindInfo.Price)
if v.ShopPrice == 0 {
v.ShopPrice = v.SalePrice * 70 / 100
}
}
v.Weight = skuBindInfo.Weight // 以本地信息中的WEIGHT为准
//饿鲜达的订单做一下处理
@@ -1126,6 +1132,7 @@ func result2Orders(ctx *jxcontext.Context, result *jdshopapi.AllOrdersResult) (o
if jdsOrder.OrderStatus == jdshopapi.JdsOrderStatusPause {
order.BusinessType = model.BusinessTypeDingshida
order.ExpectedDeliveredTime = utils.Str2Time(orderDetail.ExpectedDeliveredTime)
order.PickDeadline = order.ExpectedDeliveredTime.Add(-time.Hour)
} else if jdsOrder.OrderStatus == jdshopapi.JdsOrderStatusWaittingExport {
order.ExpectedDeliveredTime = order.OrderCreatedAt.Add(time.Hour)
order.BusinessType = model.BusinessTypeImmediate
@@ -1230,6 +1237,46 @@ func TransferJdsOrder(ctx *jxcontext.Context, vendorOrderID string, storeID int)
order.StoreID = storeID
order.StoreName = stores[0].Name
order.VendorStoreID = storeMaps[0].VendorStoreID
//如果是立即达的订单,要判断一下送达时间是否在门店营业时间范围内
//若没有,则要把这个订单变成定时达,预计送达时间改为门店的营业时间
//如果门店没有营业时间,则直接报错
if order.BusinessType == model.BusinessTypeImmediate {
store := stores[0]
var (
opentime1 = jxutils.JxOperationTime2TimeByDate(store.OpenTime1, order.ExpectedDeliveredTime)
opentime2 = jxutils.JxOperationTime2TimeByDate(store.OpenTime2, order.ExpectedDeliveredTime)
closetime1 = jxutils.JxOperationTime2TimeByDate(store.CloseTime1, order.ExpectedDeliveredTime)
closetime2 = jxutils.JxOperationTime2TimeByDate(store.CloseTime2, order.ExpectedDeliveredTime)
expectedTime = order.ExpectedDeliveredTime
)
if store.OpenTime1 == 0 || store.CloseTime1 == 0 {
return "", fmt.Errorf("该门店没有营业时间,不能接单!门店:[%v]", storeID)
}
if !(expectedTime.Sub(opentime1) >= 0 && expectedTime.Sub(closetime1) <= 0) {
if store.OpenTime2 != 0 && store.CloseTime2 != 0 {
if !(expectedTime.Sub(opentime2) >= 0 && expectedTime.Sub(closetime2) <= 0) {
if expectedTime.Sub(opentime1) < 0 {
order.ExpectedDeliveredTime = opentime1
order.BusinessType = model.BusinessTypeDingshida
} else {
if expectedTime.Sub(opentime2) < 0 {
order.ExpectedDeliveredTime = opentime2
} else {
order.ExpectedDeliveredTime = opentime1.AddDate(0, 0, 1)
}
order.BusinessType = model.BusinessTypeDingshida
}
}
} else {
if expectedTime.Sub(opentime1) < 0 {
order.ExpectedDeliveredTime = opentime1
} else {
order.ExpectedDeliveredTime = opentime1.AddDate(0, 0, 1)
}
order.BusinessType = model.BusinessTypeDingshida
}
}
}
} else {
return "", fmt.Errorf("未查询到该门店对应的平台信息!门店:[%v]", order.StoreID)
}

View File

@@ -194,6 +194,7 @@ var (
"18328080405": "18328080405",
"17380734342": "17380734342",
"15208271238": "15208271238",
"18583684218": "18583684218",
}
)

View File

@@ -713,12 +713,14 @@ func buildSetFinishHook(task tasksch.ITask, ctx *jxcontext.Context) {
globals.SugarLogger.Debugf("同步错误发送钉钉消息失败, authinfo [%v] , [%v]", *authInfo, err)
}
} else {
if time.Now().Hour() >= 20 || time.Now().Hour() < 7 {
downloadURL, _, _ := WirteToExcelBySyncFailed(task)
user, err := dao.GetUserByID(dao.GetDB(), "mobile", "18160030913")
noticeMsg += fmt.Sprintf("[详情点我]%s/billshow/?normal=true&path=%s \n", globals.BackstageHost, downloadURL)
if user != nil && err == nil {
ddmsg.SendUserMessage(dingdingapi.MsgTyeText, user.UserID, "同步错误返回", noticeMsg)
if len(task.GetFailedList()) > 1 {
if time.Now().Hour() >= 20 || time.Now().Hour() < 7 {
downloadURL, _, _ := WirteToExcelBySyncFailed(task)
user, err := dao.GetUserByID(dao.GetDB(), "mobile", "18160030913")
noticeMsg += fmt.Sprintf("[详情点我]%s/billshow/?normal=true&path=%s \n", globals.BackstageHost, downloadURL)
if user != nil && err == nil {
ddmsg.SendUserMessage(dingdingapi.MsgTyeText, user.UserID, "同步错误返回", noticeMsg)
}
}
}
}
@@ -1235,9 +1237,12 @@ func SyncSkuExperfixAndWatermark(ctx *jxcontext.Context) (err error) {
for _, v := range skuIDs {
OnUpdateThing(ctx, db, nil, int64(v), model.ThingTypeSku)
}
CurVendorSync.SyncSkus(ctx, db, nil, skuIDs, true, true, ctx.GetUserName())
// CurVendorSync.SyncSkus(ctx, db, nil, skuIDs, true, true, ctx.GetUserName())
} else {
CurVendorSync.SyncStoresSkus2(ctx, nil, 0, db, []int{skuExinfo.VendorID}, nil, false, skuIDs, nil, model.SyncFlagModifiedMask, true, true)
if len(skuIDs) > 0 {
SetStoreSkuSyncStatus2(db, nil, []int{skuExinfo.VendorID}, skuIDs, model.SyncFlagModifiedMask)
}
// CurVendorSync.SyncStoresSkus2(ctx, nil, 0, db, []int{skuExinfo.VendorID}, nil, false, skuIDs, nil, model.SyncFlagModifiedMask, true, true)
}
return retVal, err
}, skuExinfos)

View File

@@ -390,10 +390,13 @@ func doDailyWork2() {
func doDailyWork() {
globals.SugarLogger.Debug("doDailyWork")
//同步商品额外前缀和水印图(打标记)
cms.SyncSkuExperfixAndWatermark(jxcontext.AdminCtx)
dao.SetStoresMapSyncStatus(dao.GetDB(), nil, nil, model.SyncFlagStoreStatus)
cms.CurVendorSync.SyncStore2(jxcontext.AdminCtx, dao.GetDB(), nil, nil, true, true)
// syncStoreSku()
syncStoreSku()
InitEx()
cms.SyncStoresCourierInfo(jxcontext.AdminCtx, nil, false, true)
netprinter.RebindAllPrinters(jxcontext.AdminCtx, false, true)
@@ -419,8 +422,6 @@ func doDailyWork() {
orderman.RefreshJdShopOrdersEarningPrice(jxcontext.AdminCtx, time.Now().AddDate(0, 0, -3).Format("20060102"), time.Now().Format("20060102"))
//同步上架京东商城待售商品
cms.RefreshJdsSkusStatus(jxcontext.AdminCtx)
//同步商品额外前缀和水印图
cms.SyncSkuExperfixAndWatermark(jxcontext.AdminCtx)
}
func RefreshRealMobile(ctx *jxcontext.Context, vendorID int, fromTime, toTime time.Time, isAsync, isContinueWhenError bool) (hint string, err error) {

View File

@@ -1560,28 +1560,29 @@ func UploadJdsImage(ctx *jxcontext.Context) (err error) {
// }
//京东商城街道name
// var stores []*model.Store
// sql := `
// SELECT b.*
// FROM store_map a, store b
// WHERE a.store_id = b.id
// AND a.vendor_store_id = '' AND a.vendor_id = 5 AND a.deleted_at = ?
// AND b.deleted_at = ?
// `
// sqlParams := []interface{}{utils.DefaultTimeValue, utils.DefaultTimeValue}
// err = dao.GetRows(db, &stores, sql, sqlParams)
// for _, v := range stores {
// result, _ := api.AutonaviAPI.GetCoordinateAreaInfo(jxutils.IntCoordinate2Standard(v.Lng), jxutils.IntCoordinate2Standard(v.Lat))
// if result["regeocode"] != nil {
// street := result["regeocode"].(map[string]interface{})["addressComponent"].(map[string]interface{})["township"].(string)
// if street != "" {
// storeMaps, _ := dao.GetStoresMapList(db, []int{model.VendorIDJDShop}, []int{v.ID}, nil, model.StoreStatusAll, model.StoreIsSyncAll, "")
// storeMap := storeMaps[0]
// storeMap.JdsStreetName = street
// dao.UpdateEntity(db, storeMap, "JdsStreetName")
// }
// }
// }
var stores []*model.Store
var db = dao.GetDB()
sql := `
SELECT b.*
FROM store_map a, store b
WHERE a.store_id = b.id
AND a.vendor_store_id = '' AND a.vendor_id = 5 AND a.deleted_at = ?
AND b.deleted_at = ?
`
sqlParams := []interface{}{utils.DefaultTimeValue, utils.DefaultTimeValue}
err = dao.GetRows(db, &stores, sql, sqlParams)
for _, v := range stores {
result, _ := api.AutonaviAPI.GetCoordinateAreaInfo(jxutils.IntCoordinate2Standard(v.Lng), jxutils.IntCoordinate2Standard(v.Lat))
if result["regeocode"] != nil {
street := result["regeocode"].(map[string]interface{})["addressComponent"].(map[string]interface{})["township"].(string)
if street != "" {
storeMaps, _ := dao.GetStoresMapList(db, []int{model.VendorIDJDShop}, []int{v.ID}, nil, model.StoreStatusAll, model.StoreIsSyncAll, "", "")
storeMap := storeMaps[0]
storeMap.JdsStreetName = street
dao.UpdateEntity(db, storeMap, "JdsStreetName")
}
}
}
// var stores []*model.Store
// sql := `

View File

@@ -337,7 +337,7 @@ func GetStoresOrderSaleInfo(db *DaoDB, storeIDList []int, fromTime time.Time, to
return saleInfoList, err
}
func GetAfsOrderSkuInfo(db *DaoDB, vendorOrderID, afsOrderID string, vendorID int) (skus []*model.OrderFinancialSkuExt, err error) {
func GetAfsOrderSkuInfo(db *DaoDB, vendorOrderID, afsOrderID string, vendorID int, isNotFaild bool) (skus []*model.OrderFinancialSkuExt, err error) {
if vendorOrderID == "" && afsOrderID == "" {
return nil, fmt.Errorf("必须指定订单或售后单ID")
}
@@ -346,6 +346,7 @@ func GetAfsOrderSkuInfo(db *DaoDB, vendorOrderID, afsOrderID string, vendorID in
FROM order_sku_financial t1
LEFT JOIN sku t2 ON t2.id = IF(t1.jx_sku_id <> 0, t1.jx_sku_id, t1.sku_id)
LEFT JOIN sku_name t3 ON t3.id = t2.name_id
LEFT JOIN afs_order t4 ON t4.afs_order_id = t1.afs_order_id
WHERE t1.is_afs_order = 1 AND t1.vendor_id = ?`
sqlParams := []interface{}{
vendorID,
@@ -359,7 +360,10 @@ func GetAfsOrderSkuInfo(db *DaoDB, vendorOrderID, afsOrderID string, vendorID in
sql += " AND t1.afs_order_id = ?"
sqlParams = append(sqlParams, afsOrderID)
}
if isNotFaild {
sql += " AND t4.status <> ?"
sqlParams = append(sqlParams, model.AfsOrderStatusFailed)
}
err = GetRows(db, &skus, sql, sqlParams...)
return skus, err
}
@@ -1292,3 +1296,45 @@ func GetSimpleOrderSkus(db *DaoDB, vendorOrderID string) (skus []*model.OrderSku
err = GetRows(db, &skus, sql, sqlParams)
return skus, err
}
func GetAfsOrdersByPage(db *DaoDB, vendorOrderID, afsOrderID, userID string, fromTime, toTime time.Time, offset, pageSize int) (afsOrderList []*model.AfsOrder, totalCount int, err error) {
pageSize = jxutils.FormalizePageSize(pageSize)
offset = jxutils.FormalizePageOffset(offset)
sql := `
SELECT SQL_CALC_FOUND_ROWS t1.*
FROM afs_order t1
LEFT JOIN goods_order t2 ON t2.vendor_order_id = t1.vendor_order_id AND t2.vendor_id = t1.vendor_id
WHERE 1 = 1
`
sqlParams := []interface{}{}
if vendorOrderID != "" {
sql += " AND t1.vendor_order_id = ?"
sqlParams = append(sqlParams, vendorOrderID)
}
if afsOrderID != "" {
sql += " AND t1.afs_order_id = ?"
sqlParams = append(sqlParams, afsOrderID)
}
if !utils.IsTimeZero(fromTime) {
sql += " AND t1.afs_created_at >= ?"
sqlParams = append(sqlParams, fromTime)
}
if !utils.IsTimeZero(toTime) {
sql += " AND t1.afs_created_at <= ?"
sqlParams = append(sqlParams, toTime)
}
if userID != "" {
sql += " AND t2.user_id = ?"
sqlParams = append(sqlParams, userID)
}
sql += ` ORDER BY t1.afs_order_id DESC
LIMIT ? OFFSET ?
`
sqlParams = append(sqlParams, pageSize, offset)
Begin(db)
defer Commit(db)
if err = GetRows(db, &afsOrderList, sql, sqlParams...); err == nil {
totalCount = GetLastTotalRowCount(db)
}
return afsOrderList, totalCount, err
}

View File

@@ -61,7 +61,13 @@ func OnWaybillExcept(msg *mtpsapi.CallbackOrderExceptionMsg) (retVal *mtpsapi.Ca
}
func (c *DeliveryHandler) OnWaybillMsg(msg *mtpsapi.CallbackOrderMsg) (retVal *mtpsapi.CallbackResponse) {
c.pushToGy(msg)
vendorOrderID, _ := jxutils.SplitUniversalOrderID(msg.OrderID)
order, _ := dao.GetSimpleOrder(dao.GetDB(), vendorOrderID)
//查不到订单可能就是果园的订单
if order == nil {
c.pushToGy(msg)
return mtpsapi.SuccessResponse
}
jxutils.CallMsgHandler(func() {
retVal = c.onWaybillMsg(msg)
}, jxutils.ComposeUniversalOrderID(msg.OrderID, model.VendorIDMTPS))
@@ -105,37 +111,31 @@ func (c *DeliveryHandler) onWaybillMsg(msg *mtpsapi.CallbackOrderMsg) (retVal *m
globals.SugarLogger.Warnf("onWaybillMsg unknown msg:%v", msg)
return mtpsapi.SuccessResponse
}
globals.SugarLogger.Debugf("onWaybillMsg test, %v", msg)
return mtpsapi.Err2CallbackResponse(partner.CurOrderManager.OnWaybillStatusChanged(order), order.VendorStatus)
}
func (c *DeliveryHandler) pushToGy(msg *mtpsapi.CallbackOrderMsg) {
vendorOrderID, _ := jxutils.SplitUniversalOrderID(msg.OrderID)
order, _ := dao.GetSimpleOrder(dao.GetDB(), vendorOrderID)
//查不到订单可能就是果园的订单
if order == nil {
cl := http.Client{}
params := make(map[string]interface{})
params["mt_peisong_id"] = msg.MtPeisongID
params["courier_name"] = msg.CourierName
params["delivery_id"] = msg.DeliveryID
params["appkey"] = msg.AppKey
params["order_id"] = msg.OrderID
params["courier_phone"] = msg.CourierPhone
params["status"] = msg.Status
params["timestamp"] = msg.Timestamp
params["cancel_reason_id"] = msg.CancelReasonId
params["cancel_reason"] = msg.CancelReason
urls := utils.Map2URLValues(params)
sign := signParams(urls)
params["sign"] = sign
request, err := http.NewRequest(http.MethodPost, "http://callback-jxgy.jxc4.com/mtps/status", strings.NewReader(utils.Map2URLValues(params).Encode()))
if err != nil {
return
}
request.Header.Set("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8")
cl.Do(request)
cl := http.Client{}
params := make(map[string]interface{})
params["mt_peisong_id"] = msg.MtPeisongID
params["courier_name"] = msg.CourierName
params["delivery_id"] = msg.DeliveryID
params["appkey"] = msg.AppKey
params["order_id"] = msg.OrderID
params["courier_phone"] = msg.CourierPhone
params["status"] = msg.Status
params["timestamp"] = msg.Timestamp
params["cancel_reason_id"] = msg.CancelReasonId
params["cancel_reason"] = msg.CancelReason
urls := utils.Map2URLValues(params)
sign := signParams(urls)
params["sign"] = sign
request, err := http.NewRequest(http.MethodPost, "http://callback-jxgy.jxc4.com/mtps/status", strings.NewReader(utils.Map2URLValues(params).Encode()))
if err != nil {
return
}
request.Header.Set("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8")
cl.Do(request)
}
func signParams(params url.Values) string {

View File

@@ -114,7 +114,7 @@ type IOrderManager interface {
GetOrderWaybillInfo(ctx *jxcontext.Context, vendorOrderID string, vendorID int, isNotEnded, isGetPos bool) (bills []*model.WaybillExt, err error)
ChangeOrderInfo(order *model.GoodsOrder, valid map[string]interface{}) (err error)
ChangeOrderInfo(order *model.GoodsOrder) (err error)
// afs order
OnAfsOrderAdjust(afsOrder *model.AfsOrder, orderStatus *model.OrderStatus) (err error)
OnAfsOrderNew(afsOrder *model.AfsOrder, orderStatus *model.OrderStatus) (err error)

View File

@@ -213,7 +213,7 @@ func (c *PrinterHandler) getOrderContent2(order *model.GoodsOrder, storeTel stri
|5
|5
|5商品明细:
|5品名 数量 单价 小计
|5品名 数量
|5--------------------------------
`
// |6实际支付: %s
@@ -234,7 +234,8 @@ func (c *PrinterHandler) getOrderContent2(order *model.GoodsOrder, storeTel stri
for _, sku := range order.Skus {
orderFmt += `|5%s`
orderFmt += `|5%8s`
orderParams = append(orderParams, sku.SkuName, "x"+utils.Int2Str(sku.Count), jxutils.IntPrice2StandardCurrencyString(sku.SalePrice), jxutils.IntPrice2StandardCurrencyString(sku.SalePrice*int64(sku.Count)))
orderParams = append(orderParams, sku.SkuName, "x"+utils.Int2Str(sku.Count))
// jxutils.IntPrice2StandardCurrencyString(sku.SalePrice), jxutils.IntPrice2StandardCurrencyString(sku.SalePrice*int64(sku.Count))
}
orderFmt += `
|5

View File

@@ -127,8 +127,8 @@ func (c *PurchaseHandler) onOrderInfoChangeMsg(vendorOrgCode string, msg *jdapi.
order, _, err := c.getOrder(a, msg.BillID)
if err == nil {
globals.SugarLogger.Debugf("onOrderInfoChangeMsg orderID:%s", msg.BillID)
valid := orderInfoChangeSet(order, msg)
partner.CurOrderManager.ChangeOrderInfo(order, valid)
orderInfoChangeSet(order, msg)
partner.CurOrderManager.ChangeOrderInfo(order)
}
return retVal
}
@@ -574,25 +574,23 @@ func (c *PurchaseHandler) ConfirmSelfTake(ctx *jxcontext.Context, order *model.G
return err
}
func orderInfoChangeSet(order *model.GoodsOrder, msg *jdapi.CallbackOrderInfoChangeMsg) (valid map[string]interface{}) {
valid = make(map[string]interface{})
func orderInfoChangeSet(order *model.GoodsOrder, msg *jdapi.CallbackOrderInfoChangeMsg) {
if msg.BuyerFullAddress != "" {
valid["consigneeAddress"] = msg.BuyerFullAddress
order.ConsigneeAddress = msg.BuyerFullAddress
}
if msg.BuyerFullName != "" {
valid["consigneeName"] = msg.BuyerFullName
order.ConsigneeName = msg.BuyerFullName
}
if msg.BuyerMobile != "" {
valid["consigneeMobile"] = msg.BuyerMobile
order.ConsigneeMobile = msg.BuyerMobile
}
if msg.BuyerLat != 0 {
valid["consigneeLat"] = jxutils.StandardCoordinate2Int(msg.BuyerLat)
order.ConsigneeLat = jxutils.StandardCoordinate2Int(msg.BuyerLat)
}
if msg.BuyerLng != 0 {
valid["consigneeLng"] = jxutils.StandardCoordinate2Int(msg.BuyerLng)
order.ConsigneeLng = jxutils.StandardCoordinate2Int(msg.BuyerLng)
}
if msg.OrderBuyerRemark != "" {
valid["buyerComment"] = msg.OrderBuyerRemark
order.BuyerComment = msg.OrderBuyerRemark
}
return valid
}

View File

@@ -202,6 +202,15 @@ func GetMyOrders(ctx *jxcontext.Context, fromDateStr, toDateStr string, params m
return pagedInfo, err
}
func GetMyAfsOrders(ctx *jxcontext.Context, vendorOrderID, afsOrderID, userID, fromTime, toTime string, offset, pageSize int) (pagedInfo *model.PagedInfo, err error) {
afsOrderList, totalCount, err := dao.GetAfsOrdersByPage(dao.GetDB(), vendorOrderID, afsOrderID, userID, utils.Str2Time(fromTime), utils.Str2Time(toTime), offset, pageSize)
pagedInfo = &model.PagedInfo{
TotalCount: totalCount,
Data: afsOrderList,
}
return pagedInfo, err
}
func GetMyOrderCountInfo(ctx *jxcontext.Context, fromDate, toDate time.Time, statuss []int) (countInfo []*model.GoodsOrderCountInfo, err error) {
countInfo, err = dao.GetMyOrderCountInfo(dao.GetDB(), ctx.GetUserID(), fromDate, toDate, statuss)
return countInfo, err

View File

@@ -5,6 +5,8 @@ import (
"strings"
"time"
"git.rosy.net.cn/jx-callback/globals"
"git.rosy.net.cn/jx-callback/business/model/dao"
"git.rosy.net.cn/jx-callback/globals/api"
@@ -36,15 +38,18 @@ func (c *PurchaseHandler) AgreeOrRefuseRefund(ctx *jxcontext.Context, order *mod
StatusTime: time.Now(),
Remark: reason,
}
partner.CurOrderManager.OnAfsOrderStatusChanged(orderStatus)
if status == model.AfsOrderStatusFinished {
orderPays, err := dao.GetOrderPayList(dao.GetDB(), order.VendorOrderID, order.VendorID)
if err == nil {
_, err = localjx.RefundOrderByTL(ctx, orderPays[0], order.VendorOrderID, int(order.SkuUserMoney), reason)
if err != nil {
return err
} else {
partner.CurOrderManager.OnAfsOrderStatusChanged(orderStatus)
}
}
} else {
partner.CurOrderManager.OnAfsOrderStatusChanged(orderStatus)
}
return err
}
@@ -57,12 +62,13 @@ func (c *PurchaseHandler) ConfirmReceivedReturnGoods(ctx *jxcontext.Context, ord
// 发起全款退款
func (c *PurchaseHandler) RefundOrder(ctx *jxcontext.Context, order *model.GoodsOrder, reason string) (err error) {
err = fmt.Errorf("%s不支持售后全额退款请让买家发起退款", model.VendorChineseNames[model.VendorIDJX])
err = c.PartRefundOrder(ctx, order, order.Skus, reason)
return err
}
// 发起部分退款
func (c *PurchaseHandler) PartRefundOrder(ctx *jxcontext.Context, order *model.GoodsOrder, refundSkuList []*model.OrderSku, reason string) (err error) {
globals.SugarLogger.Debugf("PartRefundOrder jx, orderID :%v", order.VendorOrderID)
var (
skuMap = make(map[int]*model.OrderSku)
appID = ""
@@ -105,23 +111,27 @@ func (c *PurchaseHandler) PartRefundOrder(ctx *jxcontext.Context, order *model.G
}
if skuMap[sku.SkuID] != nil {
orderSku.Name = skuMap[sku.SkuID].SkuName
orderSku.UserMoney = skuMap[sku.SkuID].SalePrice
salePrice += skuMap[sku.SkuID].SalePrice
orderSku.UserMoney = skuMap[sku.SkuID].SalePrice * int64(sku.Count)
salePrice += skuMap[sku.SkuID].SalePrice * int64(sku.Count)
}
afsOrder.SkuUserMoney += orderSku.UserMoney
afsOrder.Skus = append(afsOrder.Skus, orderSku)
}
if afsOrder != nil {
err = partner.CurOrderManager.OnAfsOrderNew(afsOrder, orderStatus)
}
if !isJxShop(appID) {
orderPays, err := dao.GetOrderPayList(dao.GetDB(), order.VendorOrderID, order.VendorID)
if err == nil {
_, err = localjx.RefundOrderByTL(ctx, orderPays[0], order.VendorOrderID, int(salePrice), reason)
if err != nil {
return err
} else {
if afsOrder != nil {
err = partner.CurOrderManager.OnAfsOrderNew(afsOrder, orderStatus)
}
}
}
} else {
err = partner.CurOrderManager.OnAfsOrderNew(afsOrder, orderStatus)
}
return err
}
@@ -141,7 +151,7 @@ func buildOrderStatus(ctx *jxcontext.Context, order *model.GoodsOrder, reason st
if isJxShop {
orderStatus.Status = model.AfsOrderStatusWait4Approve
} else {
orderStatus.Status = model.AfsOrderStatusNew
orderStatus.Status = model.AfsOrderStatusFinished
}
return orderStatus
}

View File

@@ -396,14 +396,14 @@ func (c *PurchaseHandler) callbackMsg2Status(msg *mtwmapi.CallbackMsg) (orderSta
if msg.Cmd == mtwmapi.MsgTypeOrderPartialRefund {
if notifyType == mtwmapi.NotifyTypePartyApply {
if globals.EnableMtwmStoreWrite {
goods, err := dao.GetSimpleOrder(dao.GetDB(), orderID)
if err == nil {
if goods.Status < model.OrderStatusDelivering {
api.MtwmAPI.OrderRefundAgree(utils.Str2Int64(orderID), "自动确认退款")
} else {
api.MtwmAPI.OrderRefundReject(utils.Str2Int64(orderID), "商品配送中,请联系门店。") // todo 京东与饿百都没有售前用户提出订单调整的,自动拒绝调整单
}
}
// goods, err := dao.GetSimpleOrder(dao.GetDB(), orderID)
// if err == nil {
// if goods.Status < model.OrderStatusDelivering {
api.MtwmAPI.OrderRefundAgree(utils.Str2Int64(orderID), "自动确认退款")
// } else {
// api.MtwmAPI.OrderRefundReject(utils.Str2Int64(orderID), "商品配送中,请联系门店。") // todo 京东与饿百都没有售前用户提出订单调整的,自动拒绝调整单
// }
// }
}
} else if notifyType == mtwmapi.NotifyTypeSuccess {
vendorStatus = fakeOrderAdjustFinished

View File

@@ -373,14 +373,15 @@ func (c *OrderController) GetAfsOrders() {
// @Description 得到售后单SKU信息订单与售后单必填一项
// @Param token header string true "认证token"
// @Param vendorID query int true "售后单所属的厂商ID"
// @Param vendorOrderID query string faslse "订单ID"
// @Param afsOrderID query string faslse "售后单ID"
// @Param vendorOrderID query string false "订单ID"
// @Param afsOrderID query string false "售后单ID"
// @Param isNotFaild query bool false "是否查非失败的"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /GetAfsOrderSkuInfo [get]
func (c *OrderController) GetAfsOrderSkuInfo() {
c.callGetAfsOrderSkuInfo(func(params *tOrderGetAfsOrderSkuInfoParams) (retVal interface{}, errCode string, err error) {
retVal, err = dao.GetAfsOrderSkuInfo(dao.GetDB(), params.VendorOrderID, params.AfsOrderID, params.VendorID)
retVal, err = dao.GetAfsOrderSkuInfo(dao.GetDB(), params.VendorOrderID, params.AfsOrderID, params.VendorID, params.IsNotFaild)
return retVal, "", err
})
}
@@ -856,7 +857,7 @@ func (c *OrderController) RefundOrder() {
if err != nil {
return nil, "", err
}
afsSkuList, err := dao.GetAfsOrderSkuInfo(dao.GetDB(), params.VendorOrderID, "", params.VendorID)
afsSkuList, err := dao.GetAfsOrderSkuInfo(dao.GetDB(), params.VendorOrderID, "", params.VendorID, false)
if err != nil {
return nil, "", err
}

View File

@@ -111,6 +111,26 @@ func (c *JxOrderController) GetMyOrders() {
})
}
// @Title 查询自己的售后单
// @Description 查询自己的售后单
// @Param token header string true "认证token"
// @Param vendorOrderID query string false "订单号,如果此项不为空,忽略其它所有查询条件"
// @Param afsOrderID query string false "售后单号"
// @Param userID query string false "用户ID"
// @Param fromTime query string false "开始日期包含格式2006-01-02如果订单号为空此项必须要求"
// @Param toTime query string false "结束日期包含格式2006-01-02如果订单号为空此项必须要求"
// @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 /GetMyAfsOrders [get]
func (c *JxOrderController) GetMyAfsOrders() {
c.callGetMyAfsOrders(func(params *tJxorderGetMyAfsOrdersParams) (retVal interface{}, errCode string, err error) {
retVal, err = localjx.GetMyAfsOrders(params.Ctx, params.VendorOrderID, params.AfsOrderID, params.UserID, params.FromTime, params.ToTime, params.Offset, params.PageSize)
return retVal, "", err
})
}
// @Title 查询自己的订单状态数量信息
// @Description 查询自己的订单状态数量信息
// @Param token header string true "认证token"

File diff suppressed because it is too large Load Diff