Files
jx-print/services/print_server/app_server/wx_print.go
邹宗楠 b0dfd93d6c 1
2022-11-17 17:49:12 +08:00

286 lines
9.0 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/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, string, error) {
return dao.GetPrintIsUse(printNo)
}
func DelPrinters(appID int, tokenInfo *model.TokenInfo, printNos string) (err error) {
var (
db = globals.GetDB()
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 {
return fmt.Errorf("未在该应用下查到此打印机app_id: %d, print_no: %s", appID, printNos)
}
if printers[0].UserId != tokenInfo.User.UserID {
return 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 {
return err
}
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
getPrinterReportResult.UserAllPrintCount, err = dao.GetUserBindAppNo(db, tokenInfo.User.UserID)
if err != nil {
return nil, err
}
return getPrinterReportResult, err
}