From 140d07bb922aa93b7135074f14849a5926562c00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E5=AE=97=E6=A5=A0?= Date: Tue, 14 Jun 2022 15:23:02 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=80=80=E6=AC=BE=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E6=89=93=E5=8D=B0=E4=BB=A5=E5=8F=8A=E9=80=80=E5=8D=95?= =?UTF-8?q?=E6=89=93=E5=8D=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxcallback/orderman/order.go | 12 +- .../scheduler/basesch/basesch_ext.go | 17 +- .../jxcallback/scheduler/defsch/defsch.go | 7 + business/jxstore/cms/store.go | 37 +--- business/jxutils/netprinter/netprinter.go | 24 +++ business/model/store.go | 12 +- business/partner/delivery/dada/waybill.go | 10 +- business/partner/delivery/fn/store.go | 9 +- business/partner/partner_printer.go | 1 + business/partner/printer/feie/feie.go | 8 +- business/partner/printer/jxprint/jxprint.go | 4 + business/partner/printer/xiaowm/xiaowm.go | 8 +- .../partner/printer/yilianyun/yilianyun.go | 179 ++++++++++++++++++ business/partner/printer/zhongwu/zhongwu.go | 4 + 14 files changed, 285 insertions(+), 47 deletions(-) diff --git a/business/jxcallback/orderman/order.go b/business/jxcallback/orderman/order.go index aaa076faa..8bf2b8127 100644 --- a/business/jxcallback/orderman/order.go +++ b/business/jxcallback/orderman/order.go @@ -6,6 +6,7 @@ import ( "fmt" "git.rosy.net.cn/jx-callback/business/authz/autils" "git.rosy.net.cn/jx-callback/business/jxutils/excel" + "git.rosy.net.cn/jx-callback/business/jxutils/netprinter" "git.rosy.net.cn/jx-callback/business/jxutils/weixinmsg" "git.rosy.net.cn/jx-callback/globals/api2" beego "github.com/astaxie/beego/server/web" @@ -243,11 +244,20 @@ func (c *OrderManager) OnOrderStatusChanged(vendorOrgCode string, orderStatus *m } else if orderStatus.Status == model.OrderStatusCanceled { //如果取消订单则要把库存加回去 if order, err2 := c.LoadOrder(orderStatus.VendorOrderID, orderStatus.VendorID); err2 == nil { - //ModifyOrderSkusStock(db, order, true) + // 判断是否需要打印取消订单 + storeDetail, err := c.LoadStoreDetail(order.StoreID, order.VendorID) + if err == nil && storeDetail.IsPrintCancelOrder == model.YES { // 取消申请 + _, err = netprinter.PrintRefundOrCancelOrder(jxcontext.AdminCtx, model.YES, order, order.StoreID) + } + if err != nil { + globals.SugarLogger.Debug("Get store Detail Err: ", err) + } + //门店发单的订单,取消后要退回配送费 resetCreateWaybillFee(db, order) } } + if !isDuplicated { if order != nil { order.Skus = c.loadOrderSku(db, order.VendorOrderID, order.VendorID) diff --git a/business/jxcallback/scheduler/basesch/basesch_ext.go b/business/jxcallback/scheduler/basesch/basesch_ext.go index 5f0f48d15..b151035c4 100644 --- a/business/jxcallback/scheduler/basesch/basesch_ext.go +++ b/business/jxcallback/scheduler/basesch/basesch_ext.go @@ -2,6 +2,7 @@ package basesch import ( "fmt" + "git.rosy.net.cn/jx-callback/business/jxutils/netprinter" "strings" "time" @@ -206,6 +207,7 @@ func (c *BaseScheduler) CancelWaybillByID(ctx *jxcontext.Context, vendorWaybillI } func (c *BaseScheduler) AgreeOrRefuseRefund(ctx *jxcontext.Context, afsOrderID string, vendorID, approveType int, reason string) (err error) { + skus := make([]*model.OrderFinancialSkuExt, 0, 0) afsOrder, err := partner.CurOrderManager.LoadAfsOrder(afsOrderID, vendorID) if err == nil { if c.IsReallyCallPlatformAPI { @@ -228,7 +230,7 @@ func (c *BaseScheduler) AgreeOrRefuseRefund(ctx *jxcontext.Context, afsOrderID s var ( afsCount, orderCount int ) - skus, _ := dao.GetAfsOrderSkuInfo(db, order.VendorOrderID, afsOrderID, order.VendorID, false) + skus, _ = dao.GetAfsOrderSkuInfo(db, order.VendorOrderID, afsOrderID, order.VendorID, false) for _, v := range skus { afsCount += v.Count } @@ -274,6 +276,19 @@ func (c *BaseScheduler) AgreeOrRefuseRefund(ctx *jxcontext.Context, afsOrderID s dao.SetAfsOrderFlag(dao.GetDB(), ctx.GetUserName(), afsOrderID, vendorID, flag) } } + + if approveType != partner.AfsApproveTypeRefused { + storeDetail, err := partner.CurOrderManager.LoadStoreDetail(afsOrder.StoreID, afsOrder.VendorID) + if err != nil { + globals.SugarLogger.Debug("Get store detail Err : ", err) + return err + } + if storeDetail.IsPrintRefundOrder == model.YES { // 打印退款订单 + order2, _ := partner.CurOrderManager.LoadOrder(afsOrder.VendorOrderID, afsOrder.VendorID) + _, err = netprinter.PrintRefundOrCancelOrder(jxcontext.AdminCtx, model.NO, order2, afsOrder.StoreID) + } + } + return err } diff --git a/business/jxcallback/scheduler/defsch/defsch.go b/business/jxcallback/scheduler/defsch/defsch.go index efb9fa7d4..2ff08acce 100644 --- a/business/jxcallback/scheduler/defsch/defsch.go +++ b/business/jxcallback/scheduler/defsch/defsch.go @@ -628,6 +628,12 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo if bill.Status == model.WaybillStatusAccepted && order.NotifyType == 0 { smsmsg.NotifyPickOrder(order) } + + // 订单在三方配送中,转自送 + if order.Status >= model.OrderStatusDelivering && order.DeliveryType == model.OrderDeliveryTypeStoreSelf { + s.swtich2SelfDeliverWithRetry(savedOrderInfo, bill, switch2SelfDeliverRetryCount, switch2SelfDeliverRetryGap) + } + // 订单处于配送状态来的新分配骑手运单 if order.Status >= model.OrderStatusDelivering && order.Status < model.OrderStatusEndBegin && bill.Status < model.OrderStatusDelivering { if order.DeliveryType == model.OrderDeliveryTypeStoreSelf { @@ -636,6 +642,7 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo s.ProxyCancelWaybill(order, bill, partner.CancelWaybillReasonNotAcceptIntime, partner.CancelWaybillReasonStrNotAcceptIntime) } } + //订单已经是结束状态之后来的运单143945553920000001 if order.Status > model.OrderStatusEndBegin { s.ProxyCancelWaybill(order, bill, partner.CancelWaybillReasonNotAcceptIntime, partner.CancelWaybillReasonStrNotAcceptIntime) diff --git a/business/jxstore/cms/store.go b/business/jxstore/cms/store.go index a1bfafac4..b288750c0 100644 --- a/business/jxstore/cms/store.go +++ b/business/jxstore/cms/store.go @@ -1028,33 +1028,8 @@ func UpdateStore(ctx *jxcontext.Context, storeID int, payload map[string]interfa } } } - // if roleMap[k] != "" { - // if authInfo, err := ctx.GetV2AuthInfo(); err == nil { - // if roleMoblieMap[authInfo.Mobile] == "" { - // return 0, errors.New(fmt.Sprintf("当前用户 [%v] 无权限修改 [%v] 字段!", authInfo.Name, roleMap[k])) - // } - // } - // } - // if marketManPhoneRoleMap[k] != "" { - // if authInfo, err := ctx.GetV2AuthInfo(); err == nil { - // if marketManPhoneRoleMoblieMap[authInfo.Mobile] == "" { - // return 0, errors.New(fmt.Sprintf("当前用户 [%v] 无权限修改 [%v] 字段!", authInfo.Name, roleMap[k])) - // } - // } - // } } - // districtCode := 0 - // if valid["districtCode"] != nil { - // districtCode = int(utils.MustInterface2Int64(valid["districtCode"])) - // } - // if districtCode == 0 && store.DistrictCode == 0 { - // if lng == 0 { - // lng = jxutils.IntCoordinate2Standard(store.Lng) - // lat = jxutils.IntCoordinate2Standard(store.Lat) - // } - // valid["districtCode"] = api.AutonaviAPI.GetCoordinateDistrictCode(lng, lat) - // } globals.SugarLogger.Debugf("UpdateStore track:%s, storeID:%d, valid:%s", ctx.GetTrackInfo(), storeID, utils.Format4Output(valid, true)) if len(valid) > 0 { if globals.IsAddEvent { @@ -1398,7 +1373,7 @@ func AddStoreVendorMap(ctx *jxcontext.Context, db *dao.DaoDB, vendorID int, vend storeMap.SyncStatus = model.SyncFlagNewMask //京东商城要去建店 } else { if handler := CurVendorSync.GetStoreHandler(vendorID); handler != nil { - store, err2 := handler.ReadStore(ctx, vendorOrgCode, storeMap.VendorStoreID,storeMap.VendorStoreName) + store, err2 := handler.ReadStore(ctx, vendorOrgCode, storeMap.VendorStoreID, storeMap.VendorStoreName) if err = err2; err == nil || storeMap.IsSync == 0 { if store != nil { storeMap.Status = store.Status @@ -1567,7 +1542,7 @@ func UpdateStoreVendorMap(ctx *jxcontext.Context, db *dao.DaoDB, storeID, vendor if vendorID != model.VendorIDJX && vendorID != model.VendorIDYB { if vendorStoreID := utils.Interface2String(valid["vendorStoreID"]); vendorStoreID != "" { - vendorStoreInfo, err2 := storeHandler.ReadStore(ctx, storeMap.VendorOrgCode, vendorStoreID,storeMap.VendorStoreName) + vendorStoreInfo, err2 := storeHandler.ReadStore(ctx, storeMap.VendorOrgCode, vendorStoreID, storeMap.VendorStoreName) if err = err2; err == nil { valid["deliveryType"] = vendorStoreInfo.DeliveryType } @@ -2253,7 +2228,7 @@ func GetStoresVendorSnapshot(ctx *jxcontext.Context, parentTask tasksch.ITask, v storeMap := batchItemList[0].(*model.StoreMap) if model.IsVendorRemote(storeMap.VendorID) { if handler := partner.GetPurchasePlatformFromVendorID(storeMap.VendorID); handler != nil { - store, err2 := handler.ReadStore(ctx, storeMap.VendorOrgCode, storeMap.VendorStoreID,storeMap.VendorStoreName) + store, err2 := handler.ReadStore(ctx, storeMap.VendorOrgCode, storeMap.VendorStoreID, storeMap.VendorStoreName) if err = err2; err == nil { retVal = []interface{}{&model.VendorStoreSnapshot{ StoreID: storeMap.StoreID, @@ -2907,13 +2882,13 @@ func GetVendorStoreInfo(ctx *jxcontext.Context, vendorIDList []int, isAsync, isC storeID := batchItemList[0].(string) if partner.IsMultiStore(vendorID) { multiHandler, _ := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.IMultipleStoresHandler) - storeDetail, err = multiHandler.ReadStore(ctx, "", storeID,"") + storeDetail, err = multiHandler.ReadStore(ctx, "", storeID, "") if err != nil { return retVal, err } } else { singleHandler, _ := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.ISingleStoreHandler) - storeDetail, err = singleHandler.ReadStore(ctx, "", storeID,"") + storeDetail, err = singleHandler.ReadStore(ctx, "", storeID, "") if err != nil { return retVal, err } @@ -5276,7 +5251,7 @@ func RefreshStoreIsOnline(ctx *jxcontext.Context) (err error) { func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { storeMap := batchItemList[0].(*model.StoreMap) if handler := CurVendorSync.GetStoreHandler(storeMap.VendorID); handler != nil { - if store, err := handler.ReadStore(ctx, storeMap.VendorOrgCode, storeMap.VendorStoreID,""); err == nil && store != nil { + if store, err := handler.ReadStore(ctx, storeMap.VendorOrgCode, storeMap.VendorStoreID, ""); err == nil && store != nil { if store.Status != model.StoreStatusDisabled { storeMap.IsOnline = 1 } else { diff --git a/business/jxutils/netprinter/netprinter.go b/business/jxutils/netprinter/netprinter.go index f4f57530b..b3fe380d0 100644 --- a/business/jxutils/netprinter/netprinter.go +++ b/business/jxutils/netprinter/netprinter.go @@ -70,6 +70,7 @@ func getStore4Print(db *dao.DaoDB, storeID int) (store *model.Store, err error) return store, err } +// PrintOrderByOrder4Store 打印订单信息 func PrintOrderByOrder4Store(ctx *jxcontext.Context, order *model.GoodsOrder, storeID int) (printResult *partner.PrinterStatus, err error) { globals.SugarLogger.Debugf("PrintOrderByOrder4Store orderID:%s", order.VendorOrderID) db := dao.GetDB() @@ -99,6 +100,29 @@ func PrintOrderByOrder4Store(ctx *jxcontext.Context, order *model.GoodsOrder, st return printResult, err } +// PrintRefundOrCancelOrder 打印退单或取消订单信息 +func PrintRefundOrCancelOrder(ctx *jxcontext.Context, printType int, order *model.GoodsOrder, storeID int) (printResult *partner.PrinterStatus, err error) { + db := dao.GetDB() + store, err := getStore4Print(db, storeID) + if err == nil { + handler, err := GetHandlerFromStore(store) + if err != nil { + return &partner.PrinterStatus{ + PrintResult: partner.PrintResultNoPrinter, + }, nil + } + storeDetail, _ := dao.GetStoreDetail(db, storeID, order.VendorID, order.VendorOrgCode) + printResult, err = handler.PrintCancelOrRefundOrder(ctx, printType, store, storeDetail, order) + if err == nil { + dao.SetOrderPrintFlag(db, ctx.GetUserName(), order.VendorOrderID, order.VendorID, true) + } + } + if err != nil { + globals.SugarLogger.Infof("PrintRefundOrCancelOrder orderID:%s failed with error:%v", order.VendorOrderID, err) + } + return printResult, err +} + func GetNetPrinterStatus(ctx *jxcontext.Context, storeID int) (printResult *partner.PrinterStatus, err error) { store := &model.Store{} store.ID = storeID diff --git a/business/model/store.go b/business/model/store.go index 1b921e162..3be90738c 100644 --- a/business/model/store.go +++ b/business/model/store.go @@ -389,11 +389,13 @@ type Store struct { OperatorPhone3 string `orm:"size(16)" json:"operatorPhone3"` // 饿百运营人电话 OperatorRole3 string `orm:"size(32)" json:"operatorRole3"` // 饿百运营人组(角色) - PromoteInfo string `orm:"size(255)" json:"promoteInfo"` //门店公告(所有平台统一的公告) - IsBoughtMatter int `json:"isBoughtMatter"` //这周是否申请过物料 - SoundPercentage int `json:"soundPercentage"` //打印机声音大小比例 - Banner string `orm:"size(9999)" json:"banner"` //门店商城bannar图 - BrandID int `orm:"column(brand_id)" json:"brandID"` //品牌ID + PromoteInfo string `orm:"size(255)" json:"promoteInfo"` //门店公告(所有平台统一的公告) + IsBoughtMatter int `json:"isBoughtMatter"` //这周是否申请过物料 + SoundPercentage int `json:"soundPercentage"` //打印机声音大小比例 + Banner string `orm:"size(9999)" json:"banner"` //门店商城bannar图 + BrandID int `orm:"column(brand_id)" json:"brandID"` //品牌ID + IsPrintCancelOrder int `orm:"column(is_print_cancel_order)" json:"isPrintCancelOrder"` //是否打印取消订单1是/-1否 + IsPrintRefundOrder int `orm:"column(is_print_refund_order)" json:"isPrintRefundOrder"` //是否打印退款订单1是/-1否 } func (*Store) TableUnique() [][]string { diff --git a/business/partner/delivery/dada/waybill.go b/business/partner/delivery/dada/waybill.go index 169afaacc..9e178fa54 100644 --- a/business/partner/delivery/dada/waybill.go +++ b/business/partner/delivery/dada/waybill.go @@ -95,7 +95,7 @@ func (c *DeliveryHandler) onWaybillMsg(msg *dadaapi.CallbackMsg) (retVal *dadaap order.Status = model.WaybillStatusUnknown } err := dadaapi.Err2CallbackResponse(partner.CurOrderManager.OnWaybillStatusChanged(order), utils.Int2Str(order.Status)) - defer delivery.GetOrderRiderInfoToPlatform(order.VendorOrderID) // 骑手位置更新 + defer delivery.GetOrderRiderInfoToPlatform(order.VendorOrderID) // 骑手位置更新 return err } @@ -120,6 +120,12 @@ func (c *DeliveryHandler) callbackMsg2Waybill(msg *dadaapi.CallbackMsg) (retVal } func StoreDetail2ShopInfo(storeDetail *dao.StoreDetail2) (shopInfo *dadaapi.ShopInfo) { + // 获取品牌名称 + brandInfo, err := dao.GetBrands(dao.GetDB(), "", storeDetail.BrandID, "", false, "") + if err != nil { + return nil + } + lng := jxutils.IntCoordinate2Standard(storeDetail.Lng) lat := jxutils.IntCoordinate2Standard(storeDetail.Lat) cityName := storeDetail.CityName @@ -135,7 +141,7 @@ func StoreDetail2ShopInfo(storeDetail *dao.StoreDetail2) (shopInfo *dadaapi.Shop } shopInfo = &dadaapi.ShopInfo{ OriginShopID: storeDetail.VendorStoreID, - StationName: globals.StoreName + "-" + storeDetail.Name, + StationName: brandInfo[0].Name + "-" + storeDetail.Name, Business: dadaapi.BusinessTypeConvStore, // 故意设置成这个的 CityName: cityName, AreaName: districtName, diff --git a/business/partner/delivery/fn/store.go b/business/partner/delivery/fn/store.go index 4a59848b8..29c9fbddf 100644 --- a/business/partner/delivery/fn/store.go +++ b/business/partner/delivery/fn/store.go @@ -34,11 +34,9 @@ func getAuditStatus(vendorAuditStatus int) int { } func (c *DeliveryHandler) CreateStore(ctx *jxcontext.Context, storeDetail *dao.StoreDetail2) (vendorStoreID string, status int, err error) { - globals.SugarLogger.Debug("蜂鸟门店创建") // 获取品牌名称 brandInfo, err := dao.GetBrands(dao.GetDB(), "", storeDetail.BrandID, "", false, "") if err != nil { - globals.SugarLogger.Debug("蜂鸟门店创建--1", err) return "", 0, err } createStore := &fnpsapi.CreateStoreBaseInfo{ @@ -69,7 +67,6 @@ func (c *DeliveryHandler) CreateStore(ctx *jxcontext.Context, storeDetail *dao.S fnShopId, err := api.FnAPI.CreateStore(createStore) if err != nil { - globals.SugarLogger.Debug("蜂鸟门店创建--2", err) return "", 0, err } @@ -145,6 +142,12 @@ func (c *DeliveryHandler) UpdateStore(ctx *jxcontext.Context, storeDetail *dao.S updateStore.HeadShopName = brandInfo[0].Name + "-" + storeDetail.Name updateStore.BranchShopName = storeDetail.Name } + if updateStore.OwnerName == "" { + updateStore.OwnerName = "石锋" + } + if updateStore.OwnerIDNum == "" { + updateStore.OwnerIDNum = "610126198012230014" + } return api.FnAPI.UpdateStore(updateStore) } diff --git a/business/partner/partner_printer.go b/business/partner/partner_printer.go index 66df7f376..e7697f3f0 100644 --- a/business/partner/partner_printer.go +++ b/business/partner/partner_printer.go @@ -63,6 +63,7 @@ type IPrinterHandler interface { RebindPrinter(ctx *jxcontext.Context, lastBindResult *BindPrinterResult) (bindResult *BindPrinterResult, err error) PrintOrder(ctx *jxcontext.Context, store *model.Store, storeDetail *dao.StoreDetail, order *model.GoodsOrder) (printerStatus *PrinterStatus, err error) + PrintCancelOrRefundOrder(ctx *jxcontext.Context, printType int, store *model.Store, storeDetail *dao.StoreDetail, order *model.GoodsOrder) (printerStatus *PrinterStatus, err error) EmptyPrintList(ctx *jxcontext.Context, id1, id2 string) (err error) PlayText(ctx *jxcontext.Context, id1, id2, orderID, text string) (printerStatus *PrinterStatus, err error) diff --git a/business/partner/printer/feie/feie.go b/business/partner/printer/feie/feie.go index 73d4baf25..750f5537d 100644 --- a/business/partner/printer/feie/feie.go +++ b/business/partner/printer/feie/feie.go @@ -83,7 +83,7 @@ func (c *PrinterHandler) getOrderContent(order *model.GoodsOrder, storeTel strin 商品明细:
品名 数量 单价 小计
--------------------------------
` - // 实际支付:%s
+ // 实际支付:%s
orderParams = append(orderParams, utils.Time2Str(order.OrderCreatedAt), utils.Time2Str(expectedDeliveryTime), @@ -174,7 +174,7 @@ func (c *PrinterHandler) getOrderContentBig(order *model.GoodsOrder, storeTel st 商品明细:
品名数量单价小计
--------------------------------
` - // 实际支付:%s
+ // 实际支付:%s
orderParams = append(orderParams, utils.Time2Str(order.OrderCreatedAt), utils.Time2Str(expectedDeliveryTime), @@ -265,6 +265,10 @@ func (c *PrinterHandler) PrintOrder(ctx *jxcontext.Context, store *model.Store, return c.PrintMsg(ctx, store.PrinterSN, store.PrinterKey, order.VendorOrderID, content) } +func (c *PrinterHandler) PrintCancelOrRefundOrder(ctx *jxcontext.Context, printType int, store *model.Store, storeDetail *dao.StoreDetail, order *model.GoodsOrder) (printerStatus *partner.PrinterStatus, err error) { + return nil, err +} + func (c *PrinterHandler) RegisterPrinter(ctx *jxcontext.Context, printerSN, printerKey, printerName string) (notUsed1, notUsed2 string, err error) { var no map[string]string if globals.EnableStoreWrite { diff --git a/business/partner/printer/jxprint/jxprint.go b/business/partner/printer/jxprint/jxprint.go index 8a6b4db0d..fe58c3915 100644 --- a/business/partner/printer/jxprint/jxprint.go +++ b/business/partner/printer/jxprint/jxprint.go @@ -255,6 +255,10 @@ func (c *PrinterHandler) PrintOrder(ctx *jxcontext.Context, store *model.Store, return c.PrintMsg(ctx, store.PrinterSN, utils.Int2Str(order.OrderSeq), order.VendorOrderID, content) } +func (c *PrinterHandler) PrintCancelOrRefundOrder(ctx *jxcontext.Context, printType int, store *model.Store, storeDetail *dao.StoreDetail, order *model.GoodsOrder) (printerStatus *partner.PrinterStatus, err error) { + return nil, err +} + func (c *PrinterHandler) EmptyPrintList(ctx *jxcontext.Context, id1, id2 string) (err error) { if globals.EnableStoreWrite { err = api.JxPrintAPI.DelPrinterSeq(id1) diff --git a/business/partner/printer/xiaowm/xiaowm.go b/business/partner/printer/xiaowm/xiaowm.go index 0281451ad..e0d933ffb 100644 --- a/business/partner/printer/xiaowm/xiaowm.go +++ b/business/partner/printer/xiaowm/xiaowm.go @@ -65,7 +65,7 @@ func (c *PrinterHandler) getOrderContent(order *model.GoodsOrder, storeTel strin 品名 数量 单价 小计 --------------------------------* ` - // 实际支付: %s* + // 实际支付: %s* orderParams := []interface{}{ globals.StoreName, utils.Time2Str(order.OrderCreatedAt), @@ -140,7 +140,7 @@ func (c *PrinterHandler) getOrderContentBig(order *model.GoodsOrder, storeTel st 品名数量单价小计* --------------------------------* ` - // 实际支付: %s* + // 实际支付: %s* orderParams := []interface{}{ globals.StoreName, utils.Time2Str(order.OrderCreatedAt), @@ -307,6 +307,10 @@ func (c *PrinterHandler) PrintOrder(ctx *jxcontext.Context, store *model.Store, return c.PrintMsg(ctx, store.PrinterSN, store.PrinterKey, order.VendorOrderID, content) } +func (c *PrinterHandler) PrintCancelOrRefundOrder(ctx *jxcontext.Context, printType int, store *model.Store, storeDetail *dao.StoreDetail, order *model.GoodsOrder) (printerStatus *partner.PrinterStatus, err error) { + return nil, err +} + func isV500(printerNo string) bool { printerNoNum := utils.Str2Int64WithDefault("1"+printerNo, 0) return printerNoNum > 1000000000 diff --git a/business/partner/printer/yilianyun/yilianyun.go b/business/partner/printer/yilianyun/yilianyun.go index e16986c4f..a8d57665d 100644 --- a/business/partner/printer/yilianyun/yilianyun.go +++ b/business/partner/printer/yilianyun/yilianyun.go @@ -210,6 +210,170 @@ func (c *PrinterHandler) getOrderContentBig(order *model.GoodsOrder, storeTel st return strings.Replace(fmt.Sprintf(strings.Replace(orderFmt, "\n", "", -1), orderParams...), "\\n", "\r\n", -1) } +// 打印取消或者退款订单 +func (c *PrinterHandler) getCancelOrRefundOrderContent(order *model.GoodsOrder, printType int, storeDetail *dao.StoreDetail) (content string) { + expectedDeliveryTime := order.ExpectedDeliveredTime + if utils.IsTimeZero(expectedDeliveryTime) { + expectedDeliveryTime = order.OrderCreatedAt.Add(1 * time.Hour) + } + orderParams := []interface{}{} + orderFmt := `` + if storeDetail != nil { + if storeDetail.BrandIsPrint == model.NO { + orderFmt += ` + %s\n\n + ` + if order.VendorOrgCode == "34665" { + orderParams = append(orderParams, globals.StoreNameEbai2) + } else { + orderParams = append(orderParams, storeDetail.BrandName) + } + } + } + + title := `` + if printType == model.YES { // 退单 + title = `取消订单详情\n` + } else { + title = `退款订单详情\n` + } + orderFmt += ` +手机买菜上京西\n +` + title + ` +-------------------------------- +下单时间: %s\n +预计送达: %s\n +订单编号: %s\n +` + + orderFmt += ` +\n +%s#%d\n\n +客户: %s\n +电话: %s\n +地址: %s\n +\n +客户备注: \n +%s\n +\n +\n +商品明细: \n +品名 数量 小计\n +--------------------------------\n` + orderParams = append(orderParams, + utils.Time2Str(order.OrderCreatedAt), + utils.Time2Str(expectedDeliveryTime), + order.VendorOrderID, + jxutils.GetVendorName(order.VendorID), + //order.OrderSeq, + order.VendorOrderID, + order.ConsigneeName, + order.ConsigneeMobile, + order.ConsigneeAddress, + order.BuyerComment, + ) + + for _, sku := range order.Skus { + orderFmt += `%s\n` + orderFmt += `%20s%8s\n` + orderParams = append(orderParams, sku.SkuName, "X"+utils.Int2Str(sku.Count), jxutils.IntPrice2StandardCurrencyString(sku.SalePrice*int64(sku.Count))) + //标品需要打印条形码 + if sku.Upc != "" { + orderFmt += `upc码: %s\n` + orderParams = append(orderParams, sku.Upc) + } + } + orderFmt += `\n +共%d种%d件商品 +\n +--------------------------------\n +--------------------------------\n +` + // http://weixin.qq.com/r/tkkDGzTERmk5rXB49xyk + orderParams = append(orderParams, order.SkuCount, order.GoodsCount) + return strings.Replace(fmt.Sprintf(strings.Replace(orderFmt, "\n", "", -1), orderParams...), "\\n", "\r\n", -1) +} + +// 打印取消或者退款订单,大字体 +func (c *PrinterHandler) getCancelOrRefundOrderContentBig(order *model.GoodsOrder, printType int, storeDetail *dao.StoreDetail) (content string) { + expectedDeliveryTime := order.ExpectedDeliveredTime + if utils.IsTimeZero(expectedDeliveryTime) { + expectedDeliveryTime = order.OrderCreatedAt.Add(1 * time.Hour) + } + orderParams := []interface{}{} + orderFmt := `` + if storeDetail != nil { + if storeDetail.BrandIsPrint == model.NO { + orderFmt += ` + %s\n\n + ` + if order.VendorOrgCode == "34665" { + orderParams = append(orderParams, globals.StoreNameEbai2) + } else { + orderParams = append(orderParams, storeDetail.BrandName) + } + } + } + title := `` + if printType == model.YES { // 退单 + title = `退单申请\n` + } else { + title = `退款申请\n` + } + orderFmt += ` +手机买菜上京西\n +` + title + ` +-------------------------------- +下单时间: %s\n\n +预计送达: %s\n\n +订单编号: %s\n +\n +%s#%d\n\n +客户: %s\n +电话: %s\n +地址: %s\n +\n +客户备注: \n +%s\n +\n +\n +商品明细: \n +品名 数量 小计\n +--------------------------------\n` + orderParams = append(orderParams, + utils.Time2Str(order.OrderCreatedAt), + utils.Time2Str(expectedDeliveryTime), + order.VendorOrderID, + jxutils.GetVendorName(order.VendorID), + //order.OrderSeq, + order.VendorOrderID, + order.ConsigneeName, + order.ConsigneeMobile, + order.ConsigneeAddress, + order.BuyerComment, + ) + + for _, sku := range order.Skus { + orderFmt += `%s\n` + orderFmt += `%15s%8s\n` + orderParams = append(orderParams, sku.SkuName, "X"+utils.Int2Str(sku.Count), jxutils.IntPrice2StandardCurrencyString(sku.SalePrice*int64(sku.Count))) + //标品需要打印条形码 + if sku.Upc != "" { + orderFmt += `upc码: %s\n` + orderParams = append(orderParams, sku.Upc) + } + } + orderFmt += `\n +共%d种%d件商品 +\n +--------------------------------\n +--------------------------------\n +` + // http://weixin.qq.com/r/tkkDGzTERmk5rXB49xyk + orderParams = append(orderParams, order.SkuCount, order.GoodsCount) + return strings.Replace(fmt.Sprintf(strings.Replace(orderFmt, "\n", "", -1), orderParams...), "\\n", "\r\n", -1) +} + func (c *PrinterHandler) GetVendorID() int { return model.VendorIDYiLianYun } @@ -272,6 +436,21 @@ func (c *PrinterHandler) PrintOrder(ctx *jxcontext.Context, store *model.Store, } } +func (c *PrinterHandler) PrintCancelOrRefundOrder(ctx *jxcontext.Context, printType int, store *model.Store, storeDetail *dao.StoreDetail, order *model.GoodsOrder) (printerStatus *partner.PrinterStatus, err error) { + globals.SugarLogger.Debugf("yilianyun PrintCancelOrRefundOrder orderID:%s, storeID:%d", order.VendorOrderID, store.ID) + if len(order.Skus) == 0 { + return + } + content := "" + if store.PrinterFontSize == partner.PrinterFontSizeBig || store.PrinterFontSize == partner.PrinterFontSizeBig2 { + content = c.getCancelOrRefundOrderContent(order, printType, storeDetail) + } else { + content = c.getCancelOrRefundOrderContentBig(order, printType, storeDetail) + } + + return c.PrintMsg(ctx, store.PrinterSN, store.PrinterKey, order.VendorOrderID, content) +} + func (c *PrinterHandler) RegisterPrinter(ctx *jxcontext.Context, machineCode, secret, printerName string) (notUsed1, notUsed2 string, err error) { if globals.EnableStoreWrite { err = api.YilianyunAPI.AddPrinter(machineCode, secret, printerName) diff --git a/business/partner/printer/zhongwu/zhongwu.go b/business/partner/printer/zhongwu/zhongwu.go index c16bb59bc..bb74419a5 100644 --- a/business/partner/printer/zhongwu/zhongwu.go +++ b/business/partner/printer/zhongwu/zhongwu.go @@ -230,6 +230,10 @@ func (c *PrinterHandler) PrintOrder(ctx *jxcontext.Context, store *model.Store, return c.PrintMsg(ctx, store.PrinterSN, store.PrinterKey, order.VendorOrderID, content) } +func (c *PrinterHandler) PrintCancelOrRefundOrder(ctx *jxcontext.Context, printType int, store *model.Store, storeDetail *dao.StoreDetail, order *model.GoodsOrder) (printerStatus *partner.PrinterStatus, err error) { + return nil, err +} + func (c *PrinterHandler) RegisterPrinter(ctx *jxcontext.Context, deviceID, deviceSecret, printerName string) (notUsed1, notUsed2 string, err error) { if deviceID == "" || deviceSecret == "" { err = fmt.Errorf("打印机ID与打印机密钥都不能为空")