Files
jx-print/services/print_server/app_server/wx_print.go
2022-07-26 17:24:41 +08:00

241 lines
8.1 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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
}