package model import ( "encoding/json" "fmt" "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/globals" "strings" "time" ) var SystemTempObj map[string]*SystemTemp func init() { SystemTempObj = make(map[string]*SystemTemp, 0) sysTempList, err := QuerySystemTemp() if err != nil { globals.SugarLogger.Debug("query system temp err :", err) return } if len(sysTempList) <= 0 { globals.SugarLogger.Debug("query system temp err :", "system temp don't have") // 不存在系统模板,初始化系统模板 //InitSystemTemp() } temp := make(map[string]*SystemTemp, 0) for _, v := range sysTempList { temp[v.TempSize] = v SystemTempObj[v.TempSize] = v } now := time.Now() param := &SystemTemp{ CreatedAt: &now, UpdatedAt: &now, LastOperator: "system", DeletedAt: &utils.DefaultTimeValue, TempName: "", TempRank: SystemTempKey, Temp: "", UserId: "system_user", TempType: TempTypeMerchant, TempSize: SystemTempSizeBig, PrintSn: "system", IsUse: 1, } // 初始化大字体模板 if _, v := temp[SystemTempSizeBig]; !v { param.TempName = "system" + SystemTempSizeBig param.Temp = SystemTempValue if err := AddTemp(param); err != nil { globals.SugarLogger.Debug("init system temp err :", err) } SystemTempObj[SystemTempSizeBig] = param } // 初始化中字体模板 if _, v := temp[SystemTempSizeMedium]; !v { param.TempName = "system" + SystemTempSizeMedium medium := strings.Replace(SystemTempValue, "", "", -1) medium2 := strings.Replace(medium, "", "", -1) param.Temp = medium2 param.TempSize = SystemTempSizeMedium param.IsUse = 2 if err := AddTemp(param); err != nil { globals.SugarLogger.Debug("init system temp err :", err) } SystemTempObj[SystemTempSizeMedium] = param } // 初始化小字体模板 if _, v := temp[SystemTempSizeSmall]; !v { param.TempName = "system" + SystemTempSizeSmall medium := strings.Replace(SystemTempValue, "", " ", -1) medium2 := strings.Replace(medium, "", " ", -1) param.Temp = medium2 param.TempSize = SystemTempSizeSmall param.IsUse = 2 if err := AddTemp(param); err != nil { globals.SugarLogger.Debug("init system temp err :", err) } SystemTempObj[SystemTempSizeSmall] = param } } // MakePrintMsgOnTemp 将打印数据渲染到模板当中 func MakePrintMsgOnTemp(param map[string]string, userId string) (string, error) { // 查询用户默认模板,不存在则使用系统默认模板 var userTemp *SystemTemp userTemp, isHave, err := SelectUserDefaultTemp(userId, TempTypeMerchant) if err != nil { return "", err } if userTemp == nil || !isHave { userTemp = SystemTempObj[SystemTempSizeBig] } // 需要打印数据 printMsg := "" printValue := make([]interface{}, 0, 0) for _, v := range strings.Split(userTemp.TempRank, ",") { switch v { case "skuName", "skuNumber", "skuPrice", "skuAllPrice", "allSkuTypeCount", "allSkuCount": continue case "goodsListDetail": printMsg += TempTag[v] skuList := make([]*SkuListPrintOrder, 0, 0) if err := json.Unmarshal([]byte(param[v]), skuList); err != nil { return "", err } for i := 0; i < len(skuList); i++ { printMsg += TempTag["skuName"] printMsg += TempTag["skuNumber"] printMsg += TempTag["skuPrice"] printMsg += TempTag["skuAllPrice"] printValue = append(printValue, skuList[i].SkuName, skuList[i].SkuName, skuList[i].SalePrice, skuList[i].TotalCountPrice) if skuList[i].Upc != "" { printMsg += TempTag["sku"] printValue = append(printValue, skuList[i].Upc) } } case "businessType": if param[v] == "2" { // 是预订单 printMsg += TempTag[v] } default: printMsg += TempTag[v] printValue = append(printValue, param[v]) } } return strings.Replace(fmt.Sprintf(strings.Replace(printMsg, "\n", "", -1), printValue...), "\\n", "\r\n", -1), nil } // MakePrintMsgOnTempVoice 制作平台语音 func MakePrintMsgOnTempVoice(param map[string]string, setting *PrintSettingObj, userId string) (string, error) { // 打印机提示音设置(暂时不做) // 打订单 if param[OrderStatusPrint] != "" { // 订单提示设置 printMsg, err := PrinterOrderVoice(param, setting, userId) if err != nil { return "", err } return printMsg, nil } // 打运单 if param[WayBillStatusPrint] != "" { } // 门店状态 if param[StoreStatusPrint] != "" { return PrintStoreStatus(param, setting), nil } } // PrinterOrderVoice 打印机订单提示设置 func PrinterOrderVoice(param map[string]string, setting *PrintSettingObj, userId string) (string, error) { var ( printVoiceMsg string //语音信息 printVoiceValue = make([]interface{}, 0, 0) textMsg string // 文本信息 err error ) // 称谓设置/平台语音设置 if (setting.CallNameSetting == 64 || setting.CallNameSetting == 65 || setting.CallNameSetting == 66) && setting.SystemVoice == SettingClose { // 老板 printVoiceMsg += `%s` printVoiceValue = append(printVoiceValue, setting.CallNameSetting) } // 订单状态 switch param[OrderStatusPrint] { // 新订单 case utils.Int2Str(OrderStatusNew): // 订单设置 if setting.OrderVoiceSetting.PrintOrder == SettingOpen { // 打印订单 textMsg, err = MakePrintMsgOnTemp(param, userId) if err != nil { return "", err } } if setting.OrderVoiceSetting.OrderNotice == SettingOpen && setting.SystemVoice == SettingClose { // 订单通知 printVoiceMsg += `%s%s` // 你来新订单了 printVoiceValue = append(printVoiceValue, NewOrderVoice) printVoiceMsg, printVoiceValue = SyntheticSpeech(printVoiceMsg, printVoiceValue, param) } // 申请取消 case utils.Int2Str(ApplyOrderCancel): // 订单设置 if setting.OrderVoiceSetting.UserOrderCancel == SettingOpen { // 申请取消打印 textMsg, err = MakePrintMsgOnTemp(param, userId) if err != nil { return "", err } } if setting.OrderVoiceSetting.UserOrderCancelVoice == SettingOpen && setting.SystemVoice == SettingClose { // 申请取消语音 printVoiceMsg += `%s%s` // 你来新订单了 printVoiceValue = append(printVoiceValue, ApplyCancelVoice) printVoiceMsg, printVoiceValue = SyntheticSpeech(printVoiceMsg, printVoiceValue, param) } // 申请退款 case utils.Int2Str(ApplyOrderRefund): // 订单设置 if setting.OrderVoiceSetting.RefundOrder == SettingOpen { // 取消打印订单 textMsg, err = MakePrintMsgOnTemp(param, userId) if err != nil { return "", err } } if setting.OrderVoiceSetting.RefundOrderVoice == SettingOpen && setting.SystemVoice == SettingClose { if setting.OrderVoiceSetting.OrderNotice == SettingOpen && setting.SystemVoice == SettingClose { printVoiceMsg, printVoiceValue = SyntheticSpeech(printVoiceMsg, printVoiceValue, param) printVoiceMsg += `%s` printVoiceValue = append(printVoiceValue, ApplyRefundVoice) } } // 取消打印 case utils.Int2Str(OrderStatusCanceled): // 订单设置 if setting.OrderVoiceSetting.BusinessOrderCancel == SettingOpen { // 取消打印订单 textMsg, err = MakePrintMsgOnTemp(param, userId) if err != nil { return "", err } } if setting.OrderVoiceSetting.BusinessOrderCancelVoice == SettingOpen && setting.SystemVoice == SettingClose { if setting.OrderVoiceSetting.OrderNotice == SettingOpen && setting.SystemVoice == SettingClose { // 订单取消语音通知 printVoiceMsg, printVoiceValue = SyntheticSpeech(printVoiceMsg, printVoiceValue, param) printVoiceMsg += `%s` // 你来新订单了 printVoiceValue = append(printVoiceValue, CancelOrderVoice) } } case utils.Int2Str(OrderStatusAccepted): // 待拣货 if setting.PickingSetting.WaitPickingPrint == SettingOpen { // 打印订单 textMsg, err = MakePrintMsgOnTemp(param, userId) if err != nil { return "", err } } if setting.PickingSetting.WaitPickingVoice == SettingOpen && setting.SystemVoice == SettingClose { // 订单通知 printVoiceMsg += `%s%s` // 你有订单未拣货 printVoiceValue = append(printVoiceValue, WaitPickUpOrderVoice) printVoiceMsg, printVoiceValue = SyntheticSpeech(printVoiceMsg, printVoiceValue, param) } case utils.Int2Str(OrderStatusWaitAccepted): // 待接单 if setting.PickingSetting.WaitPickingPrint == SettingOpen { // 打印订单 textMsg, err = MakePrintMsgOnTemp(param, userId) if err != nil { return "", err } } if setting.PickingSetting.WaitPickingVoice == SettingOpen && setting.SystemVoice == SettingClose { // 订单通知 printVoiceMsg += `%s%s` // 你有订单未接单(订单未处理) printVoiceValue = append(printVoiceValue, WaitOrderVoice) printVoiceMsg, printVoiceValue = SyntheticSpeech(printVoiceMsg, printVoiceValue, param) } case "110": // 送达 case "120": // 收货,好像没有 } voice := strings.Replace(fmt.Sprintf(strings.Replace(printVoiceMsg, "\n", "", -1), printVoiceValue...), "\\n", "\r\n", -1) return voice + textMsg, nil } // PrintWayBillOrderStatus 打印运单类通知消息 func PrintWayBillOrderStatus(param map[string]string, setting *PrintSettingObj) { var ( printVoiceMsg string //语音信息 printVoiceValue = make([]interface{}, 0, 0) textMsg string // 文本信息 err error ) switch param[WayBillStatusPrint] { case: if setting.PickingSetting.WaitPickingPrint == SettingOpen { // 打印订单 textMsg, err = MakePrintMsgOnTemp(param, userId) if err != nil { return "", err } } if setting.PickingSetting.WaitPickingVoice == SettingOpen && setting.SystemVoice == SettingClose { // 订单通知 printVoiceMsg += `%s%s` // 你有订单未拣货 printVoiceValue = append(printVoiceValue, WaitPickUpOrderVoice) printVoiceMsg, printVoiceValue = SyntheticSpeech(printVoiceMsg, printVoiceValue, param) } } } // PrintStoreStatus 打印门店状态 func PrintStoreStatus(param map[string]string, setting *PrintSettingObj) string { var ( printVoiceMsg string //语音信息 printVoiceValue = make([]interface{}, 0, 0) textMsg string // 文本信息 textMsgValue = make([]interface{}, 0, 0) ) // 离线打印文本开启 if setting.PickingSetting.BusinessOffLine == SettingOpen { textMsg += `
门店下线通知

` textMsg += `
门店:%s

` textMsg += `
平台:%s

` textMsg += `
下线时间:%s

` textMsgValue = append(textMsgValue, param[EBailOrderNoPrint], param[VendorNamePrint], utils.Time2DateStr(time.Now())) } // 离线打印语音开启 if setting.SystemVoice == SettingOpen && setting.PickingSetting.BusinessOffLineVoice == SettingOpen { printVoiceMsg += `%s` printVoiceValue = append(printVoiceValue, StoreOfflineVoice) } voice := strings.Replace(fmt.Sprintf(strings.Replace(printVoiceMsg, "\n", "", -1), printVoiceValue...), "\\n", "\r\n", -1) msg := strings.Replace(fmt.Sprintf(strings.Replace(textMsg, "\n", "", -1), textMsgValue...), "\\n", "\r\n", -1) return voice + msg } // SyntheticSpeech 合成语音 (美团xxx号订单) func SyntheticSpeech(printVoiceMsg string, printVoiceValue []interface{}, param map[string]string) (string, []interface{}) { printVoiceMsg += `%s` // 美团 switch param[VendOrIDPrint] { case utils.Int2Str(VendorIDJD): // 京东 printVoiceValue = append(printVoiceValue, JdVoice) case utils.Int2Str(VendorIDMTWM): // 美团 printVoiceValue = append(printVoiceValue, MtVoice) case utils.Int2Str(VendorIDELM): // 饿了么 printVoiceValue = append(printVoiceValue, ElmVoice) case utils.Int2Str(VendorIDEBAI): // 饿百 printVoiceValue = append(printVoiceValue, ElmVoice) case utils.Int2Str(VendorIDJDShop): // 京东商城 printVoiceValue = append(printVoiceValue, JdToHose) case utils.Int2Str(VendorIDTT): // 抖音 // 暂无 } if param[VendorOrderNoPrint] != "" { switch len(param[VendorOrderNoPrint]) { case 1: printVoiceMsg += `%s` printVoiceValue = append(printVoiceValue, NumberVoiceMap[param[VendorOrderNoPrint]]) case 2: printVoiceMsg += `%s` printVoiceValue = append(printVoiceValue, NumberVoiceMap[param[VendorOrderNoPrint][:1]+"0"]) if param[VendorOrderNoPrint][1:] != "0" { printVoiceMsg += `%s` printVoiceValue = append(printVoiceValue, NumberVoiceMap[param[VendorOrderNoPrint][1:]]) } case 3: printVoiceMsg += `%s` printVoiceValue = append(printVoiceValue, NumberVoiceMap[param[VendorOrderNoPrint][0:1]+"00"]) if param[VendorOrderNoPrint][1:2] == "0" && param[VendorOrderNoPrint][2:] == "0" { } else if param[VendorOrderNoPrint][1:2] == "0" && param[VendorOrderNoPrint][2:] != "0" { printVoiceMsg += `%s` printVoiceValue = append(printVoiceValue, NumberVoiceMap[param[VendorOrderNoPrint][1:2]]) printVoiceMsg += `%s` printVoiceValue = append(printVoiceValue, NumberVoiceMap[param[VendorOrderNoPrint][2:]]) } else if param[VendorOrderNoPrint][1:2] != "0" && param[VendorOrderNoPrint][2:] == "0" { printVoiceMsg += `%s` printVoiceValue = append(printVoiceValue, NumberVoiceMap[param[VendorOrderNoPrint][1:2]+"0"]) } else if param[VendorOrderNoPrint][1:2] != "0" && param[VendorOrderNoPrint][2:] != "0" { printVoiceMsg += `%s` printVoiceValue = append(printVoiceValue, NumberVoiceMap[param[VendorOrderNoPrint][1:2]+"0"]) printVoiceMsg += `%s` printVoiceValue = append(printVoiceValue, NumberVoiceMap[param[VendorOrderNoPrint][2:]]) } } } printVoiceMsg += `%s` printVoiceValue = append(printVoiceValue, OrderNoVoice) return printVoiceMsg, printVoiceValue }