package svc
import (
"applet/app/db"
"applet/app/db/model"
"applet/app/md"
"applet/app/utils"
"applet/app/utils/logx"
"fmt"
"github.com/gin-gonic/gin"
"strings"
"time"
"xorm.io/xorm"
)
// 替换
func ReplaceOne(c *gin.Context, args *md.PrinterRequest) {
eg := MasterDb(c)
printerOne, _ := db.GetPrinterIndexById(eg, args.PrinterId, args.StoreId)
if printerOne.Type == "bluetooth" {
return
}
module, _ := db.GetAllPrinterModuleListByModuleIdOne(eg, printerOne.ModuleId)
ReplaceStr(c, eg, args, printerOne, module.Content)
}
func GetReplaceContent(c *gin.Context, args *md.PrinterRequest) string {
eg := MasterDb(c)
printerOne, _ := db.GetPrinterIndexByBluetooth(eg, args.StoreId)
if printerOne == nil {
return ""
}
module, _ := db.GetAllPrinterModuleListByModuleIdOne(eg, printerOne.ModuleId)
content := GetCommContent(args, printerOne, module.Content)
return content
}
// 替换
func ReplaceMore(c *gin.Context, args *md.PrinterRequest) {
eg := MasterDb(c)
fmt.Println(args)
//查出这个店铺下的所有打印机
list, err := db.GetPrinterIndexAll(eg, args.StoreId)
if err != nil {
logx.Info(err)
return
}
//循环拿出模板id
var moduleIds = make([]int, 0)
for _, v := range list {
if v.IsUse == 0 || v.Type == "bluetooth" || (args.Ord["order_type"] == "face_to_pay" && v.LocationType != "reception") {
continue
}
if v.ModuleId > 0 {
moduleIds = append(moduleIds, v.ModuleId)
}
}
if moduleIds == nil || len(moduleIds) == 0 {
return
}
//查出对应模板数据
moduleList, err := db.GetAllPrinterModuleListByModuleId(eg, moduleIds)
if err != nil {
logx.Info(err)
return
}
moduleArr := make(map[int]model.CommunityTeamStorePrinterModule, 0)
for _, v := range moduleList {
moduleArr[v.Id] = v
}
//处理数据内容
for _, v := range list {
if v.IsUse == 0 {
continue
}
moduleId := v.ModuleId
moduleData := moduleArr[moduleId]
if moduleData.Content == "" {
continue
}
content := moduleData.Content
ReplaceStr(c, eg, args, &v, content)
}
}
func GetCommContent(arg *md.PrinterRequest, list *model.CommunityTeamStorePrinter, content string) string {
goodsInfoStr := ReplaceGoodsInfo(arg.GoodsInfo, list.Type, 15, 22, 26, 32)
content = strings.ReplaceAll(content, "{商品信息}", goodsInfoStr)
content = strings.ReplaceAll(content, "{付款金额}", arg.Ord["payment"])
content = strings.ReplaceAll(content, "{取餐号}", arg.Ord["num"])
content = strings.ReplaceAll(content, "{桌号}", arg.Ord["table_num"])
content = strings.ReplaceAll(content, "{订单号}", arg.Ord["main_ord_id"])
content = strings.ReplaceAll(content, "{姓名}", arg.Ord["name"])
content = strings.ReplaceAll(content, "{电话}", arg.Ord["phone"])
content = strings.ReplaceAll(content, "{打印时间}", time.Now().Format("2006-01-02 15:04:05"))
content = strings.ReplaceAll(content, "{收货地址}", arg.Ord["address"])
content = strings.ReplaceAll(content, "{二维码链接}", arg.Ord["qrcode_url"])
content = strings.ReplaceAll(content, "{二维码标签左}", "")
content = strings.ReplaceAll(content, "{二维码标签右}", "")
content = strings.ReplaceAll(content, "{商家名称}", arg.Ord["store_name"])
content = strings.ReplaceAll(content, "{商家店铺首页二维码链接}", arg.Ord["store_qrcode_url"])
if list.Type == "cloud" {
content = strings.ReplaceAll(content, "{居中放大左}", "")
content = strings.ReplaceAll(content, "{居中放大右}", "")
} else {
content = strings.ReplaceAll(content, "{居中放大左}", "")
content = strings.ReplaceAll(content, "{居中放大右}", "")
content = strings.ReplaceAll(content, "\n", "
")
content = strings.ReplaceAll(content, "\\n", "
")
}
return content
}
// 字符替换
func ReplaceStr(c *gin.Context, eg *xorm.Engine, arg *md.PrinterRequest, list *model.CommunityTeamStorePrinter, content string) {
content = GetCommContent(arg, list, content)
fmt.Println(content)
if arg.Ord["order_type"] == "face_to_pay" {
arg.Ord["order_type"] = "3"
}
//加入打印明细
var detailData = model.CommunityTeamStorePrinterDetail{
OrdId: arg.Ord["main_ord_id"],
OrdType: utils.StrToInt(arg.Ord["order_type"]),
PrinterId: list.Id,
PrinterModuleId: list.ModuleId,
PrintContent: content,
StoreId: utils.StrToInt(arg.StoreId),
CreateTime: time.Now(),
UpdateTime: time.Now(),
}
has, err := db.DetailInsert(eg, &detailData)
if has == 0 || err != nil {
return
}
fmt.Println(detailData.Id)
//调用打印机打印
oids := fmt.Sprintf("%s%d%d", detailData.OrdId, detailData.PrinterId, detailData.CreateTime.Unix())
oid, msg := CommDoing(c, content, list.SnNum, list.Type, oids)
if msg != "" {
return
}
detailData.State = 1
if msg != "" {
logx.Info(msg)
detailData.State = 2
detailData.FailMsg = msg
} else {
detailData.PrinterOid = oid
}
detailData.PrintTime = time.Now()
detailData.UpdateTime = time.Now()
_, err = db.DetailUpdate(eg, detailData.Id, &detailData, "printer_oid,print_time,update_time,state,fail_msg")
logx.Info(err)
}
// 处理商品信息
func ReplaceGoodsInfo(goodsInfo []map[string]string, printerType string, nameLen, priceLen, numLen, pricesLen int) string {
goodsInfoStr := ""
var sub = []int{0, nameLen, priceLen, numLen, pricesLen}
for _, v := range goodsInfo {
name := v["name"]
skuText := v["sku_text"]
price := v["price"]
num := v["num"]
prices := v["prices"]
goodsInfoStr += CheckStr(name, 0, sub)
goodsInfoStr += CheckStr(price, 1, sub)
goodsInfoStr += CheckStr(num, 2, sub)
goodsInfoStr += CheckStr(prices, 3, sub)
if printerType == "cloud" {
goodsInfoStr += "\n"
} else {
goodsInfoStr += "
"
}
if skuText != "" {
goodsInfoStr += CheckStr(skuText, 0, sub)
if printerType == "cloud" {
goodsInfoStr += "\n"
} else {
goodsInfoStr += "
"
}
}
}
return goodsInfoStr
}
func CheckStr(str string, index int, sub []int) string {
kw := ""
lens := len(str)
if lens > 15 && index == 0 {
if lens > 15 && lens <= 32 {
kw += str
for i := 0; i < 32-lens; i++ {
kw += " "
}
kw += "
"
for i := 0; i < 15; i++ {
kw += " "
}
}
if lens > 32 {
if lens > 16*4 {
lens = 16 * 4
}
kw += str[0:lens]
kw += "
"
str2 := str[lens:]
str2Len := len(str2)
kw += str2
key := sub[index+1] - str2Len - sub[index]
for i := 0; i < key; i++ {
kw += " "
}
}
} else {
kw += str
key := sub[index+1] - lens - sub[index]
if index == 0 {
key = 20 - lens
if lens < 15 {
key = 19 - lens
}
if lens < 10 {
key = 18 - lens
}
if lens < 7 {
key = 17 - lens
}
fmt.Println(lens)
fmt.Println(key)
}
for i := 0; i < key; i++ {
kw += " "
}
}
return kw
}