package app_server import ( "fmt" "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-print/dao" "git.rosy.net.cn/jx-print/globals" "git.rosy.net.cn/jx-print/model" "git.rosy.net.cn/jx-print/model/app_model" "git.rosy.net.cn/jx-print/putils" "github.com/jmoiron/sqlx" "time" ) // QueryPrintKeyIsExit 查询用户打印机以及绑定信息 func QueryPrintKeyIsExit(printInfo *model.PrintInfo, phone, bizId, code string, appId int) (bool, error) { var ( db = globals.GetDB() ) // 电话号码校验 have, err := SendVerifyCodeServer.VerifySecret(phone, bizId, code) if err != nil { return false, err } if !have { return false, fmt.Errorf("验证码错误") } if printInfo.PrintNo == "" { return false, fmt.Errorf("请输入正确的打印机编号!print_no :%s 。", printInfo.PrintNo) } printers, _ := dao.GetPrinters(db, appId, printInfo.PrintNo, 0, 0, 0) // 打印机已经被绑定 if len(printers) != 0 { // 修改绑定 if printers[0].PrintKey != "" && printers[0].PrintKey != phone { return false, fmt.Errorf("用户微信电话号码,与绑定打印机号码不一致") } else { return true, nil } } return false, nil } // DeletePrintCheck 删除打印机时,校验手机账号等等 func DeletePrintCheck(printNo string, phone, bizId, code string, appId int) error { var ( db = globals.GetDB() ) //电话号码校验 have, err := SendVerifyCodeServer.VerifySecret(phone, bizId, code) if err != nil { return err } if !have { return fmt.Errorf("验证码错误") } printers, _ := dao.GetPrinters(db, appId, printNo, 0, 0, 0) if len(printers) != 1 { return fmt.Errorf("打印机不存在或异常,联系管理员") } if printers[0].PrintKey != phone { return fmt.Errorf("打印机绑定电话与删除时绑定电话不匹配") } return nil } func AddPrinters(txDB *sqlx.Tx, tokenInfo *model.TokenInfo, appID int, printInfo []*model.PrintInfo, phone string) (err error) { var ( db = globals.GetDB() errs []error now = time.Now() ) if len(printInfo) > 50 { return fmt.Errorf("每次最多添加50台!") } if apps, _ := dao.GetApps(db, appID, "", ""); len(apps) == 0 { return fmt.Errorf("未查询到此应用!app_id:%d", appID) } for _, v := range printInfo { if v.PrintNo == "" { errs = append(errs, fmt.Errorf("请输入正确的打印机编号!print_no :%s 。", v.PrintNo)) continue } printers, _ := dao.GetPrinters(db, appID, v.PrintNo, 0, 0, 0) if len(printers) != 0 && printers[0].UserId != "system" { errs = append(errs, fmt.Errorf("打印机已经被绑定!print_no :%s 。", v.PrintNo)) continue } printer := &model.Printer{ CreatedAt: &now, UpdatedAt: &now, DeletedAt: &utils.DefaultTimeValue, LastOperator: tokenInfo.User.Name, AppID: appID, PrintNo: v.PrintNo, Name: v.Name, PrintKey: phone, Status: model.PrinterStatusNormal, IsOnline: model.PrinterOffline, Sound: "sounda", Volume: 4, UserId: tokenInfo.User.UserID, } if len(printers) > 0 { if err = dao.UpdateTx(txDB, printer, "user_id"); err != nil { errs = append(errs, err) } } else { if err = dao.InsertTx(txDB, printer); err != nil { errs = append(errs, err) } } } if len(errs) > 0 { err = putils.BuildErr(errs) } return err } func GetPrinters(appID int, printNo, name string, status, isOnline, offset, pageSize int, userId string) (page *model.PagedInfo, err error) { return dao.GetPrintersPage(globals.GetDB(), appID, printNo, name, status, isOnline, offset, pageSize, userId) } func GetPrintIsUse(printNo string) (bool, error) { return dao.GetPrintIsUse(printNo) } func DelPrinters(appID int, tokenInfo *model.TokenInfo, printNos string) (err error) { var ( db = globals.GetDB() errs []error now = time.Now() ) if len(printNos) > 50 { return fmt.Errorf("每次最多删除50台!") } if apps, _ := dao.GetApps(db, appID, "", ""); len(apps) == 0 { return fmt.Errorf("未查询到此应用!app_id:%d", appID) } printers, _ := dao.GetPrinters(db, appID, printNos, 0, 0, 0) if len(printers) == 0 { errs = append(errs, fmt.Errorf("未在该应用下查到此打印机!app_id: %d, print_no: %s", appID, printNos)) } if printers[0].UserId != tokenInfo.User.UserID { errs = append(errs, fmt.Errorf("该打印机不属于此用户 :%s 。", printNos)) } printer := printers[0] printer.DeletedAt = &now printer.LastOperator = tokenInfo.User.Name if err = dao.Update(db, printer, model.FieldLastOperator, model.FieldDeletedAt); err != nil { errs = append(errs, err) } if len(errs) > 0 { err = putils.BuildErr(errs) } return err } func UpdatePrinter(appID int, tokenInfo *model.TokenInfo, printNo, name, sound string, volume int) (err error) { var ( db = globals.GetDB() now = time.Now() fields []string ) if apps, _ := dao.GetApps(db, appID, "", ""); len(apps) == 0 { return fmt.Errorf("未查询到此应用!app_id:%d", appID) } printers, _ := dao.GetPrinters(db, appID, printNo, 0, 0, 0) if len(printers) == 0 { return fmt.Errorf("未在该应用下查到此打印机!app_id: %d, print_no: %s", appID, printNo) } printer := printers[0] printer.UpdatedAt = &now printer.LastOperator = tokenInfo.User.Name fields = append(fields, model.FieldUpdatedAt, model.FieldLastOperator) if name != printer.Name { printer.Name = name fields = append(fields, "name") } if sound != printer.Sound { printer.Sound = sound fields = append(fields, "sound") } if volume != printer.Volume { printer.Volume = volume fields = append(fields, "volume") } if err = dao.Update(db, printer, fields...); err != nil { return err } return err } // TestPrint 测试打印 func TestPrint(appID int, tokenInfo *model.TokenInfo, printNo string, orderNo int64, content string) (msgID string, err error) { var ( db = globals.GetDB() now = time.Now() ) msgID = now.Format("20060102150405") + "_" + putils.RandStringBytesWithNumber(8) if apps, _ := dao.GetApps(db, appID, tokenInfo.User.UserID, ""); len(apps) == 0 { return "", fmt.Errorf("未查询到此应用!app_id:%d", appID) } printers, _ := dao.GetPrinters(db, appID, printNo, 0, 0, 0) if len(printers) == 0 { return "", fmt.Errorf("未在该应用下查到此打印机!app_id: %d, print_no: %s", appID, printNo) } printMsg := &model.PrintMsg{ CreatedAt: &now, UpdatedAt: &now, LastOperator: tokenInfo.User.Name, DeletedAt: &utils.DefaultTimeValue, PrintNo: printNo, OrderNo: orderNo, Content: content, MsgID: msgID, } err = dao.Insert(db, printMsg) return msgID, err } func GetPrintMessages(appID int, tokenInfo *model.TokenInfo, printNo, msgID string, beginAt, endAt string, offset, pageSize int) (page *model.PagedInfo, err error) { var ( db = globals.GetDB() ) if apps, _ := dao.GetApps(db, appID, tokenInfo.User.UserID, ""); len(apps) == 0 { return nil, fmt.Errorf("未查询到此应用!app_id:%d", appID) } printers, _ := dao.GetPrinters(db, appID, printNo, 0, 0, 0) if len(printers) == 0 { return nil, fmt.Errorf("未在该应用下查到此打印机!app_id: %d, print_no: %s", appID, printNo) } return dao.GetPrintMessagesPage(db, printNo, msgID, beginAt, endAt, offset, pageSize) } func GetPrinterReport(tokenInfo *model.TokenInfo) (getPrinterReportResult *app_model.GetPrinterReportResult, err error) { var ( db = globals.GetDB() weekCount, DayCount, DayUnCount = 0, 0, 0 onlineC, offlineC, flowC, paperC = 0, 0, 0, 0 ) getPrinterReportResult = &app_model.GetPrinterReportResult{} apps, _ := dao.GetApps(db, 0, tokenInfo.User.UserID, "") if len(apps) == 0 { return nil, err } for _, app := range apps { printers, _ := dao.GetPrinters(db, app.ID, "", 0, 0, 0) for _, printer := range printers { weeks, _ := dao.GetPrintMessages(db, printer.PrintNo, "", utils.Time2Str(time.Now().AddDate(0, 0, -7)), utils.Time2Str(time.Now()), 0) weekCount += len(weeks) days, _ := dao.GetPrintMessages(db, printer.PrintNo, "", utils.Time2Str(time.Now().AddDate(0, 0, -1)), utils.Time2Str(time.Now()), 0) DayCount += len(days) dayUns, _ := dao.GetPrintMessages(db, printer.PrintNo, "", utils.Time2Str(time.Now().AddDate(0, 0, -1)), utils.Time2Str(time.Now()), 1) DayUnCount += len(dayUns) } onlines, _ := dao.GetPrinters(db, app.ID, "", model.PrinterOnline, 0, 0) onlineC += len(onlines) offlines, _ := dao.GetPrinters(db, app.ID, "", model.PrinterOffline, 0, 0) offlineC += len(offlines) flows, _ := dao.GetPrinters(db, app.ID, "", 0, 0, 1) flowC += len(flows) papers, _ := dao.GetPrinters(db, app.ID, "", model.PrinterStatusWithouPaper, 0, 0) paperC += len(papers) } getPrinterReportResult.WeekPrintCount = weekCount getPrinterReportResult.DayPrintCount = DayCount getPrinterReportResult.DayUnPrintCount = DayUnCount getPrinterReportResult.OnlinePrinterCount = onlineC getPrinterReportResult.OfflinePrinterCount = offlineC getPrinterReportResult.FlowPrinterCount = flowC getPrinterReportResult.PaperPrinterCount = paperC return getPrinterReportResult, err }