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/putils" "time" ) func AddPrinters(tokenInfo *model.TokenInfo, appID int, printInfo []*model.PrintInfo) (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, tokenInfo.User.UserID, ""); 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 { 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: v.PrintKey, Status: model.PrinterStatusNormal, IsOnline: model.PrinterOffline, Sound: "sounda", Volume: 4, UserId: tokenInfo.User.UserID, } if err = dao.Insert(db, 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 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, tokenInfo.User.UserID, ""); len(apps) == 0 { return fmt.Errorf("未查询到此应用!app_id:%d", appID) } for _, v := range printNos { if v == "" { errs = append(errs, fmt.Errorf("请输入正确的打印机编号!print_no :%s 。", v)) continue } printers, _ := dao.GetPrinters(db, appID, v, 0, 0, 0) if len(printers) == 0 { errs = append(errs, fmt.Errorf("未在该应用下查到此打印机!app_id: %d, print_no: %s", appID, v)) continue } if printers[0].UserId != tokenInfo.User.UserID { errs = append(errs, fmt.Errorf("该appId不在用户账号下!app_id: %d, print_no: %s", appID, v)) continue } 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, 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) } if printers[0].UserId != tokenInfo.User.UserID { return fmt.Errorf("该appId不在用户账号下!app_id: %d, print_no: %s", appID, printers[0].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 string, 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) } if printers[0].UserId != tokenInfo.User.UserID { return "", fmt.Errorf("该appId不在用户账号下!app_id: %d, print_no: %s", appID, printers[0].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) } type GetPrinterReportResult struct { WeekPrintCount int `json:"week_print_count"` DayPrintCount int `json:"day_print_count"` DayUnPrintCount int `json:"day_un_print_count"` OnlinePrinterCount int `json:"online_printer_count"` OfflinePrinterCount int `json:"offline_printer_count"` FlowPrinterCount int `json:"flow_printer_count"` PaperPrinterCount int `json:"paper_printer_count"` } func GetPrinterReport(tokenInfo *model.TokenInfo) (getPrinterReportResult *GetPrinterReportResult, err error) { var ( db = globals.GetDB() weekCount, DayCount, DayUnCount = 0, 0, 0 onlineC, offlineC, flowC, paperC = 0, 0, 0, 0 ) getPrinterReportResult = &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 }