diff --git a/business/jxcallback/orderman/order.go b/business/jxcallback/orderman/order.go index 05e756dc7..1a48d195b 100644 --- a/business/jxcallback/orderman/order.go +++ b/business/jxcallback/orderman/order.go @@ -359,24 +359,27 @@ func (c *OrderManager) addOrderStatus(orderStatus *model.OrderStatus, db *dao.Da if (model.IsOrderLockStatus(orderStatus.Status) || model.IsOrderUnlockStatus(orderStatus.Status)) || (model.IsOrderMainStatus(orderStatus.Status) && orderStatus.Status >= order.Status) { // todo 要求status不能回绕 order.VendorStatus = orderStatus.VendorStatus - order.StatusTime = orderStatus.StatusTime updateFields := []string{ - "VendorStatus", "StatusTime", + "VendorStatus", } if model.IsOrderMainStatus(orderStatus.Status) { - order.LockStatus = model.OrderStatusUnknown order.Status = orderStatus.Status - updateFields = append(updateFields, "Status", "LockStatus") + order.StatusTime = orderStatus.StatusTime + updateFields = append(updateFields, "Status", "StatusTime") + if order.LockStatus != model.OrderStatusUnknown { + order.LockStatus = model.OrderStatusUnknown + order.LockStatusTime = orderStatus.StatusTime + updateFields = append(updateFields, "LockStatus", "LockStatusTime") + } } else { if model.IsOrderUnlockStatus(orderStatus.Status) { order.LockStatus = model.OrderStatusUnknown - updateFields = append(updateFields, "LockStatus") - } else if model.IsOrderLockStatus(orderStatus.Status) { + } else { order.LockStatus = orderStatus.Status - updateFields = append(updateFields, "LockStatus") } + order.LockStatusTime = orderStatus.StatusTime + updateFields = append(updateFields, "LockStatus", "LockStatusTime") } - // orderStatus.LockStatus = order.LockStatus if model.IsOrderFinalStatus(orderStatus.Status) { order.OrderFinishedAt = orderStatus.StatusTime updateFields = append(updateFields, "OrderFinishedAt") diff --git a/business/jxcallback/scheduler/basesch/basesch_ext.go b/business/jxcallback/scheduler/basesch/basesch_ext.go index 34fcb209d..b1da476f4 100644 --- a/business/jxcallback/scheduler/basesch/basesch_ext.go +++ b/business/jxcallback/scheduler/basesch/basesch_ext.go @@ -133,6 +133,13 @@ func (c *BaseScheduler) AcceptOrRefuseFailedGetOrder(ctx *jxcontext.Context, ord if c.IsReallyCallPlatformAPI { err = partner.GetPurchasePlatformFromVendorID(order.VendorID).AcceptOrRefuseFailedGetOrder(ctx, order, isAcceptIt) } + if err == nil { + flag := int8(model.OrderFlagAgreeFailedGetGoods) + if !isAcceptIt { + flag = model.OrderFlagRefuseFailedGetGoods + } + dao.SetOrderFlag(dao.GetDB(), ctx.GetUserName(), order.VendorOrderID, order.VendorID, flag) + } return err } @@ -140,6 +147,9 @@ func (c *BaseScheduler) CallPMCourier(ctx *jxcontext.Context, order *model.Goods if c.IsReallyCallPlatformAPI { err = partner.GetPurchasePlatformFromVendorID(order.VendorID).CallCourier(ctx, order) } + if err == nil { + dao.SetOrderFlag(dao.GetDB(), ctx.GetUserName(), order.VendorOrderID, order.VendorID, model.OrderFlagMaskCallPMCourier) + } return err } @@ -147,6 +157,9 @@ func (c *BaseScheduler) ConfirmReceiveGoods(ctx *jxcontext.Context, order *model if c.IsReallyCallPlatformAPI { err = partner.GetPurchasePlatformFromVendorID(order.VendorID).ConfirmReceiveGoods(ctx, order) } + if err == nil { + dao.SetOrderFlag(dao.GetDB(), ctx.GetUserName(), order.VendorOrderID, order.VendorID, model.OrderFlagMaskFailedDeliver) + } return err } @@ -154,5 +167,12 @@ func (c *BaseScheduler) AgreeOrRefuseCancel(ctx *jxcontext.Context, order *model if c.IsReallyCallPlatformAPI { err = partner.GetPurchasePlatformFromVendorID(order.VendorID).AgreeOrRefuseCancel(ctx, order, isAcceptIt, reason) } + if err == nil { + flag := int8(model.OrderFlagAgreeUserApplyCancel) + if !isAcceptIt { + flag = model.OrderFlagRefuseUserApplyCancel + } + dao.SetOrderFlag(dao.GetDB(), ctx.GetUserName(), order.VendorOrderID, order.VendorID, flag) + } return err } diff --git a/business/jxcallback/scheduler/defsch/defsch.go b/business/jxcallback/scheduler/defsch/defsch.go index 9b160bfcc..0cf2a351a 100644 --- a/business/jxcallback/scheduler/defsch/defsch.go +++ b/business/jxcallback/scheduler/defsch/defsch.go @@ -113,11 +113,12 @@ func (s *WatchOrderInfo) updateOrderStoreFeature(order *model.GoodsOrder) (err e } s.autoPickupTimeoutMinute = int(storeMap.AutoPickup) s.storeDeliveryType = FixedScheduler.GetStoreDeliveryType(order, storeMap) - if s.storeDeliveryType == scheduler.StoreDeliveryTypeByStore && (order.DeliveryFlag&model.OrderDeliveryFlagMaskPurcahseDisabled) == 0 { - order.DeliveryFlag |= model.OrderDeliveryFlagMaskPurcahseDisabled - err = partner.CurOrderManager.UpdateOrderStatusAndFlag(order) - } - globals.SugarLogger.Debugf("updateOrderStoreFeature orderID:%s, s.storeDeliveryType:%d, order.DeliveryFlag:%d", order.VendorOrderID, s.storeDeliveryType, order.DeliveryFlag) + globals.SugarLogger.Debugf("updateOrderStoreFeature orderID:%s, s.storeDeliveryType:%d", order.VendorOrderID, s.storeDeliveryType) + // if s.storeDeliveryType == scheduler.StoreDeliveryTypeByStore && (order.DeliveryFlag&model.OrderDeliveryFlagMaskPurcahseDisabled) == 0 { + // order.DeliveryFlag |= model.OrderDeliveryFlagMaskPurcahseDisabled + // err = partner.CurOrderManager.UpdateOrderStatusAndFlag(order) + // } + // globals.SugarLogger.Debugf("updateOrderStoreFeature orderID:%s, s.storeDeliveryType:%d, order.DeliveryFlag:%d", order.VendorOrderID, s.storeDeliveryType, order.DeliveryFlag) } return err } diff --git a/business/jxstore/cms/cms.go b/business/jxstore/cms/cms.go index 1dbac5fdc..a9c18fae0 100644 --- a/business/jxstore/cms/cms.go +++ b/business/jxstore/cms/cms.go @@ -54,6 +54,7 @@ func InitServiceInfo(version string, buildTime time.Time, gitCommit string) { "storeMsgSendStatusName": model.StoreMsgSendStatusName, "shopChineseNames": model.ShopChineseNames, "printerVendorInfo": model.PrinterVendorInfo, + "purchaseVendorInfo": model.PurchaseVendorInfo, }, } Init() diff --git a/business/jxutils/netprinter/netprinter.go b/business/jxutils/netprinter/netprinter.go index e3ae5f97f..b0d5b892f 100644 --- a/business/jxutils/netprinter/netprinter.go +++ b/business/jxutils/netprinter/netprinter.go @@ -54,10 +54,12 @@ func PrintOrderByOrder(ctx *jxcontext.Context, order *model.GoodsOrder) (printRe return &partner.PrinterStatus{ PrintResult: partner.PrintResultNoPrinter, }, nil - } else { - if globals.EnableStoreWrite { - printResult, err = handler.PrintOrder(ctx, store, order) - } + } + if globals.EnableStoreWrite { + printResult, err = handler.PrintOrder(ctx, store, order) + } + if err == nil { + dao.SetOrderPrintFlag(db, ctx.GetUserName(), order.VendorOrderID, order.VendorID, true) } } if err != nil { diff --git a/business/model/const.go b/business/model/const.go index e24837af5..e42b6f55d 100644 --- a/business/model/const.go +++ b/business/model/const.go @@ -1,5 +1,11 @@ package model +import ( + "git.rosy.net.cn/baseapi/platformapi/ebaiapi" + "git.rosy.net.cn/baseapi/platformapi/jdapi" + "git.rosy.net.cn/baseapi/platformapi/mtwmapi" +) + // VendorIDJD, VendorIDMTWM与VendorIDELM的定义和老系统是兼容的 const ( VendorIDUnknown = -1 @@ -42,6 +48,7 @@ var ( VendorIDYiLianYun: "Yilianyun", VendorIDZhongWu: "ZhongWu", } + VendorChineseNames = map[int]string{ VendorIDJD: "京东到家", VendorIDMTWM: "美团外卖", @@ -58,6 +65,21 @@ var ( VendorIDZhongWu: "中午云", } + PurchaseVendorInfo = map[int]map[string]interface{}{ + VendorIDJD: map[string]interface{}{ + "chineseName": VendorChineseNames[VendorIDJD], + "userApplyCancelWaitMinute": jdapi.UserApplyCancelWaitMinute, + }, + VendorIDMTWM: map[string]interface{}{ + "chineseName": VendorChineseNames[VendorIDMTWM], + "userApplyCancelWaitMinute": mtwmapi.UserApplyCancelWaitMinute, + }, + VendorIDEBAI: map[string]interface{}{ + "chineseName": VendorChineseNames[VendorIDEBAI], + "userApplyCancelWaitMinute": ebaiapi.UserApplyCancelWaitMinute, + }, + } + ShopChineseNames = map[int]string{ VendorIDJD: "京西菜市", VendorIDMTWM: "美好菜市", @@ -240,8 +262,20 @@ const ( OrderDeliveryFlagMaskScheduleDisabled = 1 // 禁止三方配送调度 OrderDeliveryFlagMaskPurcahseDisabled = 2 // 购物平台已不配送(一般为门店配送类型本身为自配送,或已经转自配送) ) + const ( OrderFlagMaskPrinted = 1 // 已经打印 + + OrderFlagMaskUserApplyCancel = 6 + OrderFlagAgreeUserApplyCancel = 2 + OrderFlagRefuseUserApplyCancel = 6 + + OrderFlagMaskFailedGetGoods = 24 + OrderFlagAgreeFailedGetGoods = 8 + OrderFlagRefuseFailedGetGoods = 24 + + OrderFlagMaskFailedDeliver = 32 + OrderFlagMaskCallPMCourier = 64 // 取货失败后召唤平台配送 ) func IsPurchaseVendorExist(vendorID int) bool { diff --git a/business/model/dao/dao_order.go b/business/model/dao/dao_order.go index 487141567..2c3c82909 100644 --- a/business/model/dao/dao_order.go +++ b/business/model/dao/dao_order.go @@ -25,27 +25,29 @@ func GetStoreOrderAfterTime(db *DaoDB, storeID int, orderTime time.Time, lastOrd return orderList, GetRows(db, &orderList, sql, sqlParams...) } -func SetOrderPrintFlag(db *DaoDB, vendorOrderID string, vendorID int, isPrinted bool) (err error) { - var ( - sql string - sqlParams []interface{} - ) +func SetOrderPrintFlag(db *DaoDB, userName string, vendorOrderID string, vendorID int, isPrinted bool) (err error) { if isPrinted { - sql = ` - UPDATE goods_order - SET flag = flag | ? - WHERE vendor_order_id = ? AND vendor_id = ? - ` - sqlParams = append(sqlParams, model.OrderFlagMaskPrinted) + err = SetOrderFlag(db, userName, vendorOrderID, vendorID, model.OrderFlagMaskPrinted) } else { - sql = ` - UPDATE goods_order - SET flag = flag & ? - WHERE vendor_order_id = ? AND vendor_id = ? - ` - sqlParams = append(sqlParams, ^model.OrderFlagMaskPrinted) + err = SetOrderFlag(db, userName, vendorOrderID, vendorID, ^int8(model.OrderFlagMaskPrinted)) } - sqlParams = append(sqlParams, vendorOrderID, vendorID) - _, err = ExecuteSQL(db, sql, sqlParams...) + return err +} + +func SetOrderFlag(db *DaoDB, userName string, vendorOrderID string, vendorID int, flag int8) (err error) { + _, err = ExecuteSQL(db, ` + UPDATE goods_order + SET flag = flag | ? + WHERE vendor_order_id = ? AND vendor_id = ? + `, flag, vendorOrderID, vendorID) + return err +} + +func ClearOrderFlag(db *DaoDB, userName string, vendorOrderID string, vendorID int, flag int8) (err error) { + _, err = ExecuteSQL(db, ` + UPDATE goods_order + SET flag = flag & ? + WHERE vendor_order_id = ? AND vendor_id = ? + `, flag, vendorOrderID, vendorID) return err } diff --git a/business/model/order.go b/business/model/order.go index 87ea6f1ac..a0a2a9629 100644 --- a/business/model/order.go +++ b/business/model/order.go @@ -32,7 +32,8 @@ type GoodsOrder struct { Status int `json:"status"` // 参见OrderStatus*相关的常量定义 VendorStatus string `orm:"size(255)" json:"-"` LockStatus int `json:"lockStatus"` - OrderSeq int `json:"orderSeq"` // 门店订单序号 + LockStatusTime time.Time `orm:"type(datetime);null" json:"-"` // last lock status time + OrderSeq int `json:"orderSeq"` // 门店订单序号 BuyerComment string `orm:"size(255)" json:"buyerComment"` BusinessType int `json:"businessType"` ExpectedDeliveredTime time.Time `orm:"type(datetime)" json:"expectedDeliveredTime"` // 预期送达时间 diff --git a/controllers/jx_order.go b/controllers/jx_order.go index a40bf5863..d9f05b48b 100644 --- a/controllers/jx_order.go +++ b/controllers/jx_order.go @@ -309,7 +309,7 @@ func (c *OrderController) RefreshOrderRealMobile() { // @router /SetOrderPrintStatus [put] func (c *OrderController) SetOrderPrintStatus() { c.callSetOrderPrintStatus(func(params *tOrderSetOrderPrintStatusParams) (retVal interface{}, errCode string, err error) { - err = dao.SetOrderPrintFlag(dao.GetDB(), params.VendorOrderID, params.VendorID, params.IsPrinted) + err = dao.SetOrderPrintFlag(dao.GetDB(), params.Ctx.GetUserName(), params.VendorOrderID, params.VendorID, params.IsPrinted) return retVal, "", err }) }