package app_server import ( "encoding/json" "errors" "fmt" "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-print/dao" "git.rosy.net.cn/jx-print/globals" tempModel "git.rosy.net.cn/jx-print/model/app_model" "sort" "strings" "time" ) var SystemTemp map[string]*tempModel.SystemTemp func init() { SystemTemp = make(map[string]*tempModel.SystemTemp, 0) var sysTemp = TempServer{} sysTempList, err := sysTemp.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]*tempModel.SystemTemp, 0) for _, v := range sysTempList { temp[v.TempSize] = v SystemTemp[v.TempSize] = v } now := time.Now() param := &tempModel.SystemTemp{ CreatedAt: &now, UpdatedAt: &now, LastOperator: "system", DeletedAt: &utils.DefaultTimeValue, TempName: "", TempRank: SystemTempKey, Temp: "", UserId: "system_user", TempType: tempModel.TempTypeMerchant, TempSize: tempModel.SystemTempSizeBig, PrintSn: "system", IsUse: 1, } // 初始化大字体模板 if _, v := temp[tempModel.SystemTempSizeBig]; !v { param.TempName = "system" + tempModel.SystemTempSizeBig param.Temp = SystemTempValue if err := dao.AddTemp(param); err != nil { globals.SugarLogger.Debug("init system temp err :", err) } SystemTemp[tempModel.SystemTempSizeBig] = param } // 初始化中字体模板 if _, v := temp[tempModel.SystemTempSizeMedium]; !v { param.TempName = "system" + tempModel.SystemTempSizeMedium medium := strings.Replace(SystemTempValue, "", "", -1) medium2 := strings.Replace(medium, "", "", -1) param.Temp = medium2 param.TempSize = tempModel.SystemTempSizeMedium param.IsUse = 2 if err := dao.AddTemp(param); err != nil { globals.SugarLogger.Debug("init system temp err :", err) } SystemTemp[tempModel.SystemTempSizeMedium] = param } // 初始化小字体模板 if _, v := temp[tempModel.SystemTempSizeSmall]; !v { param.TempName = "system" + tempModel.SystemTempSizeSmall medium := strings.Replace(SystemTempValue, "", " ", -1) medium2 := strings.Replace(medium, "", " ", -1) param.Temp = medium2 param.TempSize = tempModel.SystemTempSizeSmall param.IsUse = 2 if err := dao.AddTemp(param); err != nil { globals.SugarLogger.Debug("init system temp err :", err) } SystemTemp[tempModel.SystemTempSizeSmall] = param } } type TempServer struct { } // MakePrintMsgOnTemp 将打印数据渲染到模板当中 func (t *TempServer) MakePrintMsgOnTemp(param map[string]string, userId string) (string, error) { // 查询用户默认模板,不存在则使用系统默认模板 var userTemp *tempModel.SystemTemp userTemp, isHave, err := dao.SelectUserDefaultTemp(userId, tempModel.TempTypeMerchant) if err != nil { return "", err } if userTemp == nil || !isHave { userTemp = SystemTemp[tempModel.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 } // AddOrUpdateTemp 添加或者修改模板 func (t *TempServer) AddOrUpdateTemp(param *tempModel.AddTemp) error { temp, err := dao.GetTempByName(param.UserId, param.TempName) if err != nil { return err } if len(temp) > 0 { return errors.New("模板名称重复") } // 解析模板 var tempTagList []*tempModel.TempContext if err := json.Unmarshal([]byte(param.Temp), tempTagList); err != nil { return err } sort.Slice(tempTagList, func(i, j int) bool { if tempTagList[i].Rank > tempTagList[j].Rank { return false } return true }) rankKey := "" contextStr := "{" for i := 0; i < len(tempTagList); i++ { if i != len(tempTagList)-1 { key := tempTagList[i].MatchContext + "," rankKey += key } else { rankKey += tempTagList[i].MatchContext } } for i := 0; i < len(tempTagList); i++ { if i != len(tempTagList)-1 { contextStr += tempTagList[i].MatchContext + ":" + tempTagList[i].MatchContext + "," } else { contextStr += tempTagList[i].MatchContext + ":" + tempTagList[i].MatchContext + "}" } } now := time.Now() userTemp := &tempModel.SystemTemp{ TempName: param.TempName, TempRank: rankKey, Temp: contextStr, UserId: param.UserId, TempType: param.TempType, TempSize: param.TempSize, LastOperator: param.UserId, DeletedAt: &utils.DefaultTimeValue, PrintSn: param.PrintSn, IsUse: param.IsUse, } // 如果默认打印改模板,其他打印模板则改成不使用 if param.IsUse == 1 { if err := dao.UpdateOtherTempStatus(param.UserId); err != nil { return err } } // 新增 if param.ID == 0 { userTemp.CreatedAt = &now userTemp.UpdatedAt = &now return dao.AddTemp(userTemp) } // 修改 userTemp.UpdatedAt = &now userTemp.ID = param.ID return dao.UpdateTemp(userTemp, []string{"id"}) } // DeleteTemp 删除模板 func (t *TempServer) DeleteTemp(id int, userId string) error { return dao.DeleteTemp(id, userId) } // QueryTempList 查询用户模板 func (t *TempServer) QueryTempList(userId string) ([]*tempModel.SystemTemp, error) { return dao.SelectUserTemp(userId) } // QuerySystemTemp 查询系统模板 func (t *TempServer) QuerySystemTemp() ([]*tempModel.SystemTemp, error) { return dao.QuerySystemTemp() } // SwitchTemp 切换使用模板 func (t *TempServer) SwitchTemp(userId string, tempId int) error { return dao.SwitchTemp2User(tempId, userId) } // DeleteAllTemp 删除所有用户打印机模板 func (t *TempServer) DeleteAllTemp(userId string, printNo []string) error { return dao.DeleteAllTemp(userId, printNo) }