This commit is contained in:
邹宗楠
2022-08-25 16:10:01 +08:00
parent be87623211
commit 66db5867a4
49 changed files with 2364 additions and 649 deletions

View File

@@ -0,0 +1,109 @@
package app
import (
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-print/controllers"
"git.rosy.net.cn/jx-print/globals"
"git.rosy.net.cn/jx-print/model"
tempModel "git.rosy.net.cn/jx-print/model/app_model"
printServer "git.rosy.net.cn/jx-print/services/print_server/app_server"
"github.com/gin-gonic/gin"
"net/http"
)
type PrinterBindStore struct {
}
var PrinterBindStoreController = new(PrinterBindStore)
// AddPrinterBindStore 记录授权成功的门店信息
// @Title 记录授权成功的门店信息
// @Description 记录授权成功的门店信息
// @Param token cookie string true "用户登录token"
// @Param data body app_model.AddBindStore true "请求参数"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /bindingStore [post]
func (p *PrinterBindStore) AddPrinterBindStore(c *gin.Context) {
var (
err error
tokenInfo *model.TokenInfo
param = &tempModel.AddBindStore{}
bindServer = printServer.PrintBindStore{}
)
if err = c.ShouldBind(&param); err != nil {
controllers.BuildErrJson(c, err)
return
}
if tokenInfo = controllers.CheckToken(c); tokenInfo == nil {
return
}
controllers.CallFunc(c, func() (retVal interface{}, errCode string, err error) {
err = bindServer.AddStoreBind(tokenInfo.User.UserID, param)
return retVal, "", err
})
}
// CheckStoreBindStatus 检查用户是否可以取消门店打印机绑定
// @Title 检查用户是否可以取消门店打印机绑定
// @Description 检查用户是否可以取消门店打印机绑定
// @Param token cookie string true "用户登录token"
// @Param data body app_model.RelieveStore true "请求参数"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /checkBindingStore [post]
func (p *PrinterBindStore) CheckStoreBindStatus(c *gin.Context) {
var (
err error
tokenInfo *model.TokenInfo
param = &tempModel.RelieveStore{}
bindServer = printServer.PrintBindStore{}
)
if err = c.ShouldBind(&param); err != nil {
controllers.BuildErrJson(c, err)
return
}
if tokenInfo = controllers.CheckToken(c); tokenInfo == nil {
return
}
controllers.CallFunc(c, func() (retVal interface{}, errCode string, err error) {
have, err := bindServer.QueryStoreAndUser(param)
return map[string]bool{"bind": have}, "", err
})
}
// LoseStoreAuthorize 失去授权回调
// @Title 失去授权回调
// @Description 失去授权回调
// @Param token cookie string true "用户登录token"
// @Param data body app_model.RelieveStore true "请求参数"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /loseAuthorize [post]
func (p *PrinterBindStore) LoseStoreAuthorize(c *gin.Context) {
if c.Request.Method == http.MethodPost {
var (
bindServer = printServer.PrintBindStore{}
)
storeId, err := bindServer.AnalysisStore(c.Request)
if err != nil {
globals.SugarLogger.Errorf("京西菜市门店失去授权回调错误:%v", err)
c.JSON(http.StatusNotFound, "")
}
if storeId == "" {
globals.SugarLogger.Errorf("京西菜市门店失去授权回调错误,门店id不能小于等于0:%v", err)
c.JSON(http.StatusNotFound, "")
}
if err := bindServer.LoseAuthorize(utils.Str2Int64(storeId)); err != nil {
globals.SugarLogger.Errorf("通联支付,回调函数错误处理异常:%v", err)
c.JSON(http.StatusNotFound, "")
}
c.JSON(http.StatusOK, "")
} else {
c.JSON(http.StatusNotFound, "")
}
}

View File

@@ -27,12 +27,47 @@ func (p *PrintSetting) UpdatePrintSetting(c *gin.Context) {
param = &tempModel.UpdatePrintSetting{}
server = app_server.PrintSettingInfoServer
)
if tokenInfo = controllers.CheckToken(c); tokenInfo == nil {
return
}
if err = c.ShouldBind(param); err != nil {
controllers.BuildErrJson(c, err)
return
}
controllers.CallFunc(c, func() (retVal interface{}, errCode string, err error) {
err = server.UpdatePrintSetting(tokenInfo.User.UserID, param)
return "", "", err
})
}
// GetPrintSetting 获取当前打印机设置
// @Title 获取当前打印机设置
// @Description 获取当前打印机设置
// @Param token cookie string true "用户登录token"
// @Param data body app_model.GetPrintSetting true "请求参数"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /getPrintSetting [get]
func (p *PrintSetting) GetPrintSetting(c *gin.Context) {
var (
err error
param = &tempModel.GetPrintSetting{}
server = app_server.PrintSettingInfoServer
tokenInfo *model.TokenInfo
)
if tokenInfo = controllers.CheckToken(c); tokenInfo == nil {
return
}
if err = c.ShouldBind(param); err != nil {
controllers.BuildErrJson(c, err)
return
}
controllers.CallFunc(c, func() (retVal interface{}, errCode string, err error) {
retVal, err = server.QueryPrintSetting(param.PrintNo)
return retVal, "", err
})
}

View File

@@ -75,6 +75,7 @@ func (p *PrinterTemp) DeleteTemp(c *gin.Context) {
// @Title 获取用户模板
// @Description 获取用户模板
// @Param token cookie string true "用户登录token"
// @Param data body app_model.QueryUserTemp true "请求参数"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /getUserTempList [get]
@@ -82,7 +83,7 @@ func (p *PrinterTemp) GetUserTempList(c *gin.Context) {
var (
err error
tokenInfo *model.TokenInfo
param = tempModel.DeleteTemp{}
param = tempModel.QueryUserTemp{}
tempServer = printServer.TempServer{}
)
if err = c.ShouldBind(&param); err != nil {
@@ -92,8 +93,9 @@ func (p *PrinterTemp) GetUserTempList(c *gin.Context) {
if tokenInfo = controllers.CheckToken(c); tokenInfo == nil {
return
}
controllers.CallFunc(c, func() (retVal interface{}, errCode string, err error) {
retVal, err = tempServer.QueryTempList(tokenInfo.User.UserID)
retVal, err = tempServer.QueryTempList(tokenInfo.User.UserID, param.PrintSn)
return retVal, "", err
})
}
@@ -117,8 +119,13 @@ func (p *PrinterTemp) SwitchTemp(c *gin.Context) {
controllers.BuildErrJson(c, err)
return
}
if tokenInfo = controllers.CheckToken(c); tokenInfo == nil {
return
}
controllers.CallFunc(c, func() (retVal interface{}, errCode string, err error) {
err = tempServer.SwitchTemp(tokenInfo.User.UserID, param.ID)
err = tempServer.SwitchTemp(tokenInfo.User.UserID, param.PrintSn, param.ID)
return "", "", err
})
}

View File

@@ -0,0 +1,71 @@
package app
import (
"git.rosy.net.cn/jx-print/controllers"
"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/services/api"
"git.rosy.net.cn/jx-print/services/print_server/app_server"
"github.com/gin-gonic/gin"
"net/http"
)
// Pay4Order 充值打印机
// @Title 充值打印机
// @Description 充值打印机
// @Param token header string true "认证token"
// @Param data body app_model.PayOrder true "请求参数"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /pay4Order [post]
func (a *Auth2Controller) Pay4Order(c *gin.Context) {
// 参数绑定
var (
err error
params *app_model.PayOrder
service = app_server.PrintPayServer
tokenInfo *model.TokenInfo
)
if err = c.ShouldBind(&params); err != nil {
c.JSON(http.StatusOK, &model.CallBack{
Code: model.ErrCodeNormal,
Desc: err.Error(),
})
return
}
if tokenInfo = controllers.CheckToken(c); tokenInfo == nil {
return
}
controllers.CallFunc(c, func() (retVal interface{}, errCode string, err error) {
pay, err := service.Pay4Order(tokenInfo.User, service.GetRealRemoteIP(c), params.TotalFee, params.PayType, params.VendorPayType, params.PrintNo)
if err != nil {
return nil, "", err
}
return map[string]interface{}{"pay": pay}, "", nil
})
}
func (a *Auth2Controller) PayCallBack(c *gin.Context) {
if c.Request.Method == http.MethodPost {
call, err := api.TLpayAPI.GetCallbackMsg(c.Request)
if err != nil {
globals.SugarLogger.Errorf("通联支付,结构体转换错误:%v", err)
c.JSON(http.StatusNotFound, "")
}
var service = app_server.PrintPayServer
if err := service.OnTLPayCallback(call); err != nil {
globals.SugarLogger.Errorf("通联支付,回调函数错误处理异常:%v", err)
c.JSON(http.StatusNotFound, "")
}
c.JSON(http.StatusOK, call)
} else {
c.JSON(http.StatusNotFound, "")
}
}

View File

@@ -2,13 +2,16 @@ package app
import (
"errors"
"fmt"
"git.rosy.net.cn/jx-print/controllers"
"git.rosy.net.cn/jx-print/globals"
"git.rosy.net.cn/jx-print/model"
printModel "git.rosy.net.cn/jx-print/model/app_model"
"git.rosy.net.cn/jx-print/putils"
print "git.rosy.net.cn/jx-print/services/print_server"
printServer "git.rosy.net.cn/jx-print/services/print_server/app_server"
"github.com/gin-gonic/gin"
"time"
)
type Print struct{}
@@ -30,6 +33,8 @@ func (p *Print) AddPrinters(c *gin.Context) {
param = printModel.AddPrintReq{}
printInfo []*model.PrintInfo
setting = printServer.PrintSettingInfoServer
bill = printServer.PrintBillServer
txDB = globals.GetTxDb()
)
if err = c.ShouldBind(&param); err != nil {
@@ -45,18 +50,48 @@ func (p *Print) AddPrinters(c *gin.Context) {
}
controllers.CallFunc(c, func() (retVal interface{}, errCode string, err error) {
// 校验打印机绑定用户
if err := printServer.QueryPrintKeyIsExit(printInfo[0], param.Phone, param.BizId, param.Code, param.AppID); err != nil {
// 查询打印机心跳,服务器接收到打印机心跳请求,才可以继续绑定!防止用户无休止绑定打印机!
// 只有开机联网成功的打印机才可以绑定用户
have, err := printServer.PrintActivationServer.QueryPrintHeard(printInfo[0].PrintNo)
if err != nil {
return nil, "", err
}
if !have {
return nil, "", fmt.Errorf("未检测到打印机心跳,请激活打印机,链接无线网络")
}
// 添加打印机
if err := printServer.AddPrinters(tokenInfo, param.AppID, printInfo); err != nil {
if err := printServer.AddPrinters(txDB, tokenInfo, param.AppID, printInfo, param.Phone); err != nil {
txDB.Rollback()
return nil, "", err
}
// 赋予默认配置
if err := setting.SystemInitPrintSetting(printInfo[0].PrintNo); err != nil {
if err := setting.SystemInitPrintSetting(txDB, printInfo[0].PrintNo); err != nil {
txDB.Rollback()
return nil, "", err
}
// 初始化打印机账户
if err := bill.InitPPrintBill(txDB, &printModel.PrintBill{
CreatedAt: time.Now(),
UpdatedAt: time.Now(),
PrintNo: printInfo[0].PrintNo,
PrintBalance: 20000,
UserId: tokenInfo.User.UserID,
}); err != nil {
txDB.Rollback()
return nil, "", err
}
defer func() {
if r := recover(); r != nil {
txDB.Rollback()
} else {
txDB.Commit()
}
}()
// 初始化打印机余额,如果打印机存在,如果打印机存在,不做修改!打印机不存在则初始化打印机余额
return "", "", nil
})
@@ -85,7 +120,30 @@ func (p *Print) GetPrinters(c *gin.Context) {
}
controllers.CallFunc(c, func() (retVal interface{}, errCode string, err error) {
retVal, err = printServer.GetPrinters(param.AppID, param.PrintNo, param.Name, param.Status, param.IsOnline, param.Offset, param.PageSize, "")
retVal, err = printServer.GetPrinters(param.AppID, param.PrintNo, param.Name, param.Status, param.IsOnline, param.Offset, param.PageSize, tokenInfo.User.UserID)
return retVal, "", err
})
}
// GetPrintIsUse 查询打印机是否被使用 GET
// @Title 查询打印机是否被使用
// @Description 查询打印机是否被使用
// @Param token cookie string true "用户登录token"
// @Param data body app_model.GetPrintIsUse true "请求参数"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /getPrintIsUse [get]
func (p *Print) GetPrintIsUse(c *gin.Context) {
var (
err error
param = printModel.GetPrintIsUse{}
)
if err = c.ShouldBind(&param); err != nil {
controllers.BuildErrJson(c, err)
return
}
controllers.CallFunc(c, func() (retVal interface{}, errCode string, err error) {
retVal, err = printServer.GetPrintIsUse(param.PrintNo)
return retVal, "", err
})
}
@@ -103,7 +161,6 @@ func (p *Print) DelPrinters(c *gin.Context) {
err error
tokenInfo *model.TokenInfo
param = printModel.DeletePrintReq{}
printNos []string
tempServer = printServer.TempServer{}
settingServer = printServer.PrintSettingServer{}
)
@@ -114,21 +171,23 @@ func (p *Print) DelPrinters(c *gin.Context) {
if tokenInfo = controllers.CheckToken(c); tokenInfo == nil {
return
}
if err = putils.UnmarshalUseNumber([]byte(param.PrintNos), &printNos); err != nil {
controllers.BuildErrJson(c, err)
return
}
controllers.CallFunc(c, func() (retVal interface{}, errCode string, err error) {
// 手机号验证
if err := printServer.DeletePrintCheck(param.PrintNos, param.Phone, param.BizId, param.Code, param.AppID); err != nil {
return nil, "", err
}
// 删除打印机
if err := printServer.DelPrinters(param.AppID, tokenInfo, printNos); err != nil {
if err := printServer.DelPrinters(param.AppID, tokenInfo, param.PrintNos); err != nil {
return nil, "", err
}
// 删除模板
err = tempServer.DeleteAllTemp(tokenInfo.User.UserID, printNos)
err = tempServer.DeleteAllTemp(tokenInfo.User.UserID, param.PrintNos)
// 删除设置
err = settingServer.DeletePrintSetting(printNos)
err = settingServer.DeletePrintSetting(param.PrintNos)
// 删除打印消息
err = print.DeletePrintMsg(printNos)
err = print.DeletePrintMsg(param.PrintNos)
return retVal, "", err
})
}
@@ -224,6 +283,35 @@ func (p *Print) GetPrintMessages(c *gin.Context) {
})
}
// QueryPrintBill 查询打印机账户余额 get
// @Title 获取打印机账户余额
// @Description 获取打印机账户余额
// @Param token cookie string true "用户登录token"
// @Param data body app_model.QueryPrintBill true "请求参数"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /queryPrintBill [get]
func (p *Print) QueryPrintBill(c *gin.Context) {
var (
err error
tokenInfo *model.TokenInfo
param = printModel.QueryPrintBill{}
server = printServer.PrintBillServer
)
if err = c.ShouldBind(&param); err != nil {
controllers.BuildErrJson(c, err)
return
}
if tokenInfo = controllers.CheckToken(c); tokenInfo == nil {
return
}
controllers.CallFunc(c, func() (retVal interface{}, errCode string, err error) {
retVal, err = server.QueryPrintBill(tokenInfo.User.UserID, param.PrintNo)
return retVal, "", err
})
}
// StatPrinterReport 查询打印统计(首页) GET
func (p *Print) StatPrinterReport(c *gin.Context) {
var (

View File

@@ -22,10 +22,9 @@ func init() {
func CheckToken(c *gin.Context) (tokenInfo *model.TokenInfo) {
var (
cookie *http.Cookie
err error
tokenMap map[string]interface{}
user *model.User
cookie *http.Cookie
err error
user *model.User
)
tokenInfo = &model.TokenInfo{}
//验证token
@@ -40,8 +39,9 @@ func CheckToken(c *gin.Context) (tokenInfo *model.TokenInfo) {
} else {
tokenInfo.Token = cookie.Value
}
globals.SugarLogger.Debugf("checkToken token: %v", tokenInfo.Token)
if tokenMap = putils.GetKey(tokenInfo.Token).(map[string]interface{}); tokenMap == nil {
tokenMap2 := putils.GetKey(tokenInfo.Token)
if utils.IsNil(tokenMap2) {
err = fmt.Errorf("token过期或无效请重新登录")
c.JSON(http.StatusOK, &model.CallBack{
Desc: err.Error(),
@@ -49,7 +49,8 @@ func CheckToken(c *gin.Context) (tokenInfo *model.TokenInfo) {
})
return nil
}
data, _ := json.Marshal(tokenMap)
data, _ := json.Marshal(tokenMap2)
if err = json.Unmarshal(data, &user); err == nil && user != nil {
tokenInfo.User = user
} else {
@@ -152,8 +153,8 @@ func createToken(user *model.User) (token string) {
wxConst.TokenHeader,
wxConst.TokenVer,
user.UserID,
time.Now().Format("20060102-150405"),
utils.GetUUID(),
time.Now().Format("20060102"),
utils.Int2Str(user.ID),
user.Mobile,
}, wxConst.TokenTypeSep)
}