1
This commit is contained in:
@@ -5,6 +5,7 @@ import (
|
||||
"git.rosy.net.cn/baseapi/platformapi/tibiotapi"
|
||||
"git.rosy.net.cn/baseapi/platformapi/tonglianpayapi"
|
||||
"git.rosy.net.cn/baseapi/platformapi/weixinapi"
|
||||
"git.rosy.net.cn/baseapi/platformapi/wxpayapi"
|
||||
"git.rosy.net.cn/jx-print/globals"
|
||||
wx "git.rosy.net.cn/jx-print/model/app_model"
|
||||
aliyunsmsclient "github.com/KenmyZhang/aliyun-communicate"
|
||||
@@ -19,6 +20,7 @@ var (
|
||||
TibiotAPI *tibiotapi.API
|
||||
TLpayAPI *tonglianpayapi.API //通联收银宝api
|
||||
WeixinMiniAPI *weixinapi.API // 微信小程序
|
||||
WxpayAPI *wxpayapi.API // 微信支付API
|
||||
|
||||
)
|
||||
|
||||
@@ -31,5 +33,5 @@ func init() {
|
||||
SMSClient = aliyunsmsclient.New("http://dysmsapi.aliyuncs.com/")
|
||||
TLpayAPI = tonglianpayapi.New("00183083", "18048531223", "56065105499TVAH")
|
||||
WeixinMiniAPI = weixinapi.New(wx.WeChatAPPID, wx.WeChatAPPSecret)
|
||||
|
||||
WxpayAPI = wxpayapi.NewWithCertificate(wx.WeChatAPPID, wx.WeChatAPPSecret, "", "conf/apiclient_cert.pem", "conf/apiclient_key.pem")
|
||||
}
|
||||
|
||||
13
services/print_server/app_server/print_activiation.go
Normal file
13
services/print_server/app_server/print_activiation.go
Normal file
@@ -0,0 +1,13 @@
|
||||
package app_server
|
||||
|
||||
import "git.rosy.net.cn/jx-print/dao"
|
||||
|
||||
type PrintActivation struct {
|
||||
}
|
||||
|
||||
var PrintActivationServer = new(PrintActivation)
|
||||
|
||||
// QueryPrintHeard 查询打印机是否激活
|
||||
func (p *PrintActivation) QueryPrintHeard(printNo string) (bool, error) {
|
||||
return dao.PrintActivationDao.QueryPrintHeartBeat(printNo)
|
||||
}
|
||||
49
services/print_server/app_server/print_bill.go
Normal file
49
services/print_server/app_server/print_bill.go
Normal file
@@ -0,0 +1,49 @@
|
||||
package app_server
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"git.rosy.net.cn/jx-print/dao"
|
||||
"git.rosy.net.cn/jx-print/model/app_model"
|
||||
"github.com/jmoiron/sqlx"
|
||||
)
|
||||
|
||||
type PrintBill struct {
|
||||
}
|
||||
|
||||
var PrintBillServer = new(PrintBill)
|
||||
|
||||
// InitPPrintBill 初始化打印机账户
|
||||
func (p *PrintBill) InitPPrintBill(tx *sqlx.Tx, bill *app_model.PrintBill) error {
|
||||
// 查询打印机是否有账户,没有添加
|
||||
result, err := dao.QueryPrintBill("", bill.PrintNo)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// 无打印机账户信息,初始化打印机账户
|
||||
if len(result) == 0 {
|
||||
if err := dao.InitPrintBill(tx, bill); err != nil {
|
||||
return err
|
||||
}
|
||||
} else if len(result) == 1 {
|
||||
if err := dao.UpdateBillToUser(tx, bill); err != nil {
|
||||
return err
|
||||
}
|
||||
} else {
|
||||
return fmt.Errorf("打印机账户余额数据不唯一,联系管理员")
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// QueryPrintBill 查询打印机余额
|
||||
func (p *PrintBill) QueryPrintBill(userId, printNo string) (*app_model.PrintBill, error) {
|
||||
result, err := dao.QueryPrintBill(userId, printNo)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if len(result) != 1 {
|
||||
return nil, fmt.Errorf("打印机账户异常,不唯一或者未添加,请联系管理员")
|
||||
}
|
||||
return result[0], nil
|
||||
}
|
||||
91
services/print_server/app_server/print_bind_store.go
Normal file
91
services/print_server/app_server/print_bind_store.go
Normal file
@@ -0,0 +1,91 @@
|
||||
package app_server
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
"git.rosy.net.cn/jx-print/dao"
|
||||
storeModel "git.rosy.net.cn/jx-print/model/app_model"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
"time"
|
||||
)
|
||||
|
||||
type PrintBindStore struct {
|
||||
}
|
||||
|
||||
var PrintBindStoreServer = new(PrintBindStore)
|
||||
|
||||
// AddStoreBind 添加打印机门店绑定
|
||||
func (p *PrintBindStore) AddStoreBind(userId string, store *storeModel.AddBindStore) error {
|
||||
// 查询打印机绑定门店数量
|
||||
count, err := dao.QueryBindNumber(userId, store.PrintNo)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if count >= 5 {
|
||||
return fmt.Errorf("同一打印机最多可绑定五个门店")
|
||||
}
|
||||
// 查询打印机是否属于用户
|
||||
have, _, err := dao.GetPrintById(userId, store.PrintNo)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if !have {
|
||||
return fmt.Errorf("打印机未绑定在用户下")
|
||||
}
|
||||
|
||||
param := &storeModel.PrintBindStore{
|
||||
CreatedAt: time.Now(),
|
||||
UpdatedAt: time.Now(),
|
||||
StoreID: store.StoreID,
|
||||
StoreName: store.StoreName,
|
||||
StoreVendor: store.StoreVendor,
|
||||
PrintNo: store.PrintNo,
|
||||
StoreStatus: store.StoreStatus,
|
||||
UserId: userId,
|
||||
BindStatus: storeModel.StoreBindPrintSuccess,
|
||||
}
|
||||
|
||||
return dao.CreatePrintStoreBind(param)
|
||||
}
|
||||
|
||||
// QueryStoreAndUser 查询门店/打印机/用户之间的关联关系
|
||||
func (p *PrintBindStore) QueryStoreAndUser(param *storeModel.RelieveStore) (bool, error) {
|
||||
return dao.QueryStoreAndUserManager(param.UserId, param.PrintNo, param.StoreID)
|
||||
}
|
||||
|
||||
// RelievePrintBindStore 解除门店和打印机的绑定关系
|
||||
func (p *PrintBindStore) RelievePrintBindStore(param *storeModel.RelieveStore) error {
|
||||
if err := dao.RelieveToken(param.UserId, param.PrintNo, param.StoreID); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// LoseAuthorize 失去授权回调
|
||||
func (p *PrintBindStore) LoseAuthorize(storeId int64) error {
|
||||
return dao.UpdateStoreAuthorize(storeId)
|
||||
}
|
||||
|
||||
// AnalysisStore 解析门店授权
|
||||
func (p *PrintBindStore) AnalysisStore(request *http.Request) (string, error) {
|
||||
data, err := ioutil.ReadAll(request.Body)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
fmt.Println(string(data))
|
||||
values, err := utils.HTTPBody2Values(data, false)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
mapData := utils.URLValues2Map(values)
|
||||
callParam := &call{}
|
||||
if err := utils.Map2StructByJson(mapData, &callParam, false); err != nil {
|
||||
return "", err
|
||||
}
|
||||
return callParam.StoreId, err
|
||||
}
|
||||
|
||||
type call struct {
|
||||
StoreId string `json:"storeId" form:"storeId"`
|
||||
}
|
||||
@@ -6,6 +6,7 @@ import (
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
"git.rosy.net.cn/jx-print/dao"
|
||||
settingModel "git.rosy.net.cn/jx-print/model/app_model"
|
||||
"github.com/jmoiron/sqlx"
|
||||
"time"
|
||||
)
|
||||
|
||||
@@ -17,7 +18,7 @@ var PrintSettingInfoServer = new(PrintSettingServer)
|
||||
// UpdatePrintSetting 修改打印机绑定信息
|
||||
func (p *PrintSettingServer) UpdatePrintSetting(userId string, param *settingModel.UpdatePrintSetting) error {
|
||||
// 判断打印机和用户是否匹配
|
||||
isTrue, err := dao.GetPrintById(userId, param.PrintNo)
|
||||
isTrue, _, err := dao.GetPrintById(userId, param.PrintNo)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -28,14 +29,14 @@ func (p *PrintSettingServer) UpdatePrintSetting(userId string, param *settingMod
|
||||
}
|
||||
|
||||
// SystemInitPrintSetting 绑定打印机时初始化一个打印机设置
|
||||
func (p *PrintSettingServer) SystemInitPrintSetting(printNo string) error {
|
||||
func (p *PrintSettingServer) SystemInitPrintSetting(txDB *sqlx.Tx, printNo string) error {
|
||||
// 打印机标号唯一,判断打印机是否存在设置
|
||||
isHave, err := dao.PrintSettingInfoDao.QueryPrintNoIsExit(printNo)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if !isHave {
|
||||
return errors.New("已经存在绑定的打印机设置,联系管理员")
|
||||
return nil
|
||||
}
|
||||
day := time.Now()
|
||||
|
||||
@@ -51,11 +52,11 @@ func (p *PrintSettingServer) SystemInitPrintSetting(printNo string) error {
|
||||
return err
|
||||
}
|
||||
|
||||
return dao.PrintSettingInfoDao.InsertPrintSetting(param)
|
||||
return dao.PrintSettingInfoDao.InsertPrintSetting(txDB, param)
|
||||
}
|
||||
|
||||
// DeletePrintSetting 删除打印机设置
|
||||
func (p *PrintSettingServer) DeletePrintSetting(printNo []string) error {
|
||||
func (p *PrintSettingServer) DeletePrintSetting(printNo string) error {
|
||||
return dao.PrintSettingInfoDao.DeleteSetting(printNo)
|
||||
}
|
||||
|
||||
|
||||
@@ -1,152 +1,150 @@
|
||||
package app_server
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
"git.rosy.net.cn/jx-print/dao"
|
||||
"git.rosy.net.cn/jx-print/globals"
|
||||
tempModel "git.rosy.net.cn/jx-print/model/app_model"
|
||||
"sort"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
var SystemTemp map[string]*tempModel.SystemTemp
|
||||
|
||||
func init() {
|
||||
SystemTemp = make(map[string]*tempModel.SystemTemp, 0)
|
||||
var sysTemp = TempServer{}
|
||||
sysTempList, err := sysTemp.QuerySystemTemp()
|
||||
if err != nil {
|
||||
globals.SugarLogger.Debug("query system temp err :", err)
|
||||
return
|
||||
}
|
||||
if len(sysTempList) <= 0 {
|
||||
globals.SugarLogger.Debug("query system temp err :", "system temp don't have")
|
||||
// 不存在系统模板,初始化系统模板
|
||||
//InitSystemTemp()
|
||||
}
|
||||
temp := make(map[string]*tempModel.SystemTemp, 0)
|
||||
for _, v := range sysTempList {
|
||||
temp[v.TempSize] = v
|
||||
SystemTemp[v.TempSize] = v
|
||||
}
|
||||
|
||||
now := time.Now()
|
||||
param := &tempModel.SystemTemp{
|
||||
CreatedAt: &now,
|
||||
UpdatedAt: &now,
|
||||
LastOperator: "system",
|
||||
DeletedAt: &utils.DefaultTimeValue,
|
||||
TempName: "",
|
||||
TempRank: SystemTempKey,
|
||||
Temp: "",
|
||||
UserId: "system_user",
|
||||
TempType: tempModel.TempTypeMerchant,
|
||||
TempSize: tempModel.SystemTempSizeBig,
|
||||
PrintSn: "system",
|
||||
IsUse: 1,
|
||||
}
|
||||
|
||||
// 初始化大字体模板
|
||||
if _, v := temp[tempModel.SystemTempSizeBig]; !v {
|
||||
param.TempName = "system" + tempModel.SystemTempSizeBig
|
||||
param.Temp = SystemTempValue
|
||||
if err := dao.AddTemp(param); err != nil {
|
||||
globals.SugarLogger.Debug("init system temp err :", err)
|
||||
}
|
||||
SystemTemp[tempModel.SystemTempSizeBig] = param
|
||||
}
|
||||
|
||||
// 初始化中字体模板
|
||||
if _, v := temp[tempModel.SystemTempSizeMedium]; !v {
|
||||
param.TempName = "system" + tempModel.SystemTempSizeMedium
|
||||
medium := strings.Replace(SystemTempValue, "<b>", "<hb>", -1)
|
||||
medium2 := strings.Replace(medium, "</b>", "</hb>", -1)
|
||||
param.Temp = medium2
|
||||
param.TempSize = tempModel.SystemTempSizeMedium
|
||||
param.IsUse = 2
|
||||
if err := dao.AddTemp(param); err != nil {
|
||||
globals.SugarLogger.Debug("init system temp err :", err)
|
||||
}
|
||||
SystemTemp[tempModel.SystemTempSizeMedium] = param
|
||||
}
|
||||
|
||||
// 初始化小字体模板
|
||||
if _, v := temp[tempModel.SystemTempSizeSmall]; !v {
|
||||
param.TempName = "system" + tempModel.SystemTempSizeSmall
|
||||
medium := strings.Replace(SystemTempValue, "<b>", " ", -1)
|
||||
medium2 := strings.Replace(medium, "</b>", " ", -1)
|
||||
param.Temp = medium2
|
||||
param.TempSize = tempModel.SystemTempSizeSmall
|
||||
param.IsUse = 2
|
||||
if err := dao.AddTemp(param); err != nil {
|
||||
globals.SugarLogger.Debug("init system temp err :", err)
|
||||
}
|
||||
SystemTemp[tempModel.SystemTempSizeSmall] = param
|
||||
}
|
||||
|
||||
}
|
||||
//
|
||||
//var SystemTemp map[string]*tempModel.SystemTemp
|
||||
//
|
||||
//func init() {
|
||||
// SystemTemp = make(map[string]*tempModel.SystemTemp, 0)
|
||||
// var sysTemp = TempServer{}
|
||||
// sysTempList, err := sysTemp.QuerySystemTemp()
|
||||
// if err != nil {
|
||||
// globals.SugarLogger.Debug("query system temp err :", err)
|
||||
// return
|
||||
// }
|
||||
// if len(sysTempList) <= 0 {
|
||||
// globals.SugarLogger.Debug("query system temp err :", "system temp don't have")
|
||||
// // 不存在系统模板,初始化系统模板
|
||||
// //InitSystemTemp()
|
||||
// }
|
||||
// temp := make(map[string]*tempModel.SystemTemp, 0)
|
||||
// for _, v := range sysTempList {
|
||||
// temp[v.TempSize] = v
|
||||
// SystemTemp[v.TempSize] = v
|
||||
// }
|
||||
//
|
||||
// now := time.Now()
|
||||
// param := &tempModel.SystemTemp{
|
||||
// CreatedAt: &now,
|
||||
// UpdatedAt: &now,
|
||||
// LastOperator: "system",
|
||||
// DeletedAt: &utils.DefaultTimeValue,
|
||||
// TempName: "",
|
||||
// TempRank: SystemTempKey,
|
||||
// Temp: "",
|
||||
// UserId: "system_user",
|
||||
// TempType: tempModel.TempTypeMerchant,
|
||||
// TempSize: tempModel.SystemTempSizeBig,
|
||||
// PrintSn: "system",
|
||||
// IsUse: 1,
|
||||
// }
|
||||
//
|
||||
// // 初始化大字体模板
|
||||
// if _, v := temp[tempModel.SystemTempSizeBig]; !v {
|
||||
// param.TempName = "system" + tempModel.SystemTempSizeBig
|
||||
// param.Temp = SystemTempValue
|
||||
// if err := dao.AddTemp(param); err != nil {
|
||||
// globals.SugarLogger.Debug("init system temp err :", err)
|
||||
// }
|
||||
// SystemTemp[tempModel.SystemTempSizeBig] = param
|
||||
// }
|
||||
//
|
||||
// // 初始化中字体模板
|
||||
// if _, v := temp[tempModel.SystemTempSizeMedium]; !v {
|
||||
// param.TempName = "system" + tempModel.SystemTempSizeMedium
|
||||
// medium := strings.Replace(SystemTempValue, "<b>", "<hb>", -1)
|
||||
// medium2 := strings.Replace(medium, "</b>", "</hb>", -1)
|
||||
// param.Temp = medium2
|
||||
// param.TempSize = tempModel.SystemTempSizeMedium
|
||||
// param.IsUse = 2
|
||||
// if err := dao.AddTemp(param); err != nil {
|
||||
// globals.SugarLogger.Debug("init system temp err :", err)
|
||||
// }
|
||||
// SystemTemp[tempModel.SystemTempSizeMedium] = param
|
||||
// }
|
||||
//
|
||||
// // 初始化小字体模板
|
||||
// if _, v := temp[tempModel.SystemTempSizeSmall]; !v {
|
||||
// param.TempName = "system" + tempModel.SystemTempSizeSmall
|
||||
// medium := strings.Replace(SystemTempValue, "<b>", " ", -1)
|
||||
// medium2 := strings.Replace(medium, "</b>", " ", -1)
|
||||
// param.Temp = medium2
|
||||
// param.TempSize = tempModel.SystemTempSizeSmall
|
||||
// param.IsUse = 2
|
||||
// if err := dao.AddTemp(param); err != nil {
|
||||
// globals.SugarLogger.Debug("init system temp err :", err)
|
||||
// }
|
||||
// SystemTemp[tempModel.SystemTempSizeSmall] = param
|
||||
// }
|
||||
//
|
||||
//}
|
||||
|
||||
type TempServer struct {
|
||||
}
|
||||
|
||||
// MakePrintMsgOnTemp 将打印数据渲染到模板当中
|
||||
func (t *TempServer) MakePrintMsgOnTemp(param map[string]string, userId string) (string, error) {
|
||||
// 查询用户默认模板,不存在则使用系统默认模板
|
||||
var userTemp *tempModel.SystemTemp
|
||||
userTemp, isHave, err := dao.SelectUserDefaultTemp(userId, tempModel.TempTypeMerchant)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
if userTemp == nil || !isHave {
|
||||
userTemp = SystemTemp[tempModel.SystemTempSizeBig]
|
||||
}
|
||||
|
||||
// 需要打印数据
|
||||
printMsg := ""
|
||||
printValue := make([]interface{}, 0, 0)
|
||||
for _, v := range strings.Split(userTemp.TempRank, ",") {
|
||||
switch v {
|
||||
case "skuName", "skuNumber", "skuPrice", "skuAllPrice", "allSkuTypeCount", "allSkuCount":
|
||||
continue
|
||||
case "goodsListDetail":
|
||||
printMsg += TempTag[v]
|
||||
skuList := make([]*SkuListPrintOrder, 0, 0)
|
||||
if err := json.Unmarshal([]byte(param[v]), skuList); err != nil {
|
||||
return "", err
|
||||
}
|
||||
for i := 0; i < len(skuList); i++ {
|
||||
printMsg += TempTag["skuName"]
|
||||
printMsg += TempTag["skuNumber"]
|
||||
printMsg += TempTag["skuPrice"]
|
||||
printMsg += TempTag["skuAllPrice"]
|
||||
printValue = append(printValue, skuList[i].SkuName, skuList[i].SkuName, skuList[i].SalePrice, skuList[i].TotalCountPrice)
|
||||
if skuList[i].Upc != "" {
|
||||
printMsg += TempTag["sku"]
|
||||
printValue = append(printValue, skuList[i].Upc)
|
||||
}
|
||||
|
||||
}
|
||||
case "businessType":
|
||||
if param[v] == "2" { // 是预订单
|
||||
printMsg += TempTag[v]
|
||||
}
|
||||
default:
|
||||
printMsg += TempTag[v]
|
||||
printValue = append(printValue, param[v])
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return strings.Replace(fmt.Sprintf(strings.Replace(printMsg, "\n", "", -1), printValue...), "\\n", "\r\n", -1), nil
|
||||
}
|
||||
//
|
||||
//// MakePrintMsgOnTemp 将打印数据渲染到模板当中
|
||||
//func (t *TempServer) MakePrintMsgOnTemp(param map[string]string, userId string) (string, error) {
|
||||
// // 查询用户默认模板,不存在则使用系统默认模板
|
||||
// var userTemp *tempModel.SystemTemp
|
||||
// userTemp, isHave, err := dao.SelectUserDefaultTemp(userId, tempModel.TempTypeMerchant)
|
||||
// if err != nil {
|
||||
// return "", err
|
||||
// }
|
||||
// if userTemp == nil || !isHave {
|
||||
// userTemp = SystemTemp[tempModel.SystemTempSizeBig]
|
||||
// }
|
||||
//
|
||||
// // 需要打印数据
|
||||
// printMsg := ""
|
||||
// printValue := make([]interface{}, 0, 0)
|
||||
// for _, v := range strings.Split(userTemp.TempRank, ",") {
|
||||
// switch v {
|
||||
// case "skuName", "skuNumber", "skuPrice", "skuAllPrice", "allSkuTypeCount", "allSkuCount":
|
||||
// continue
|
||||
// case "goodsListDetail":
|
||||
// printMsg += TempTag[v]
|
||||
// skuList := make([]*SkuListPrintOrder, 0, 0)
|
||||
// if err := json.Unmarshal([]byte(param[v]), skuList); err != nil {
|
||||
// return "", err
|
||||
// }
|
||||
// for i := 0; i < len(skuList); i++ {
|
||||
// printMsg += TempTag["skuName"]
|
||||
// printMsg += TempTag["skuNumber"]
|
||||
// printMsg += TempTag["skuPrice"]
|
||||
// printMsg += TempTag["skuAllPrice"]
|
||||
// printValue = append(printValue, skuList[i].SkuName, skuList[i].SkuName, skuList[i].SalePrice, skuList[i].TotalCountPrice)
|
||||
// if skuList[i].Upc != "" {
|
||||
// printMsg += TempTag["sku"]
|
||||
// printValue = append(printValue, skuList[i].Upc)
|
||||
// }
|
||||
//
|
||||
// }
|
||||
// case "businessType":
|
||||
// if param[v] == "2" { // 是预订单
|
||||
// printMsg += TempTag[v]
|
||||
// }
|
||||
// default:
|
||||
// printMsg += TempTag[v]
|
||||
// printValue = append(printValue, param[v])
|
||||
// }
|
||||
//
|
||||
// }
|
||||
//
|
||||
// return strings.Replace(fmt.Sprintf(strings.Replace(printMsg, "\n", "", -1), printValue...), "\\n", "\r\n", -1), nil
|
||||
//}
|
||||
|
||||
// AddOrUpdateTemp 添加或者修改模板
|
||||
func (t *TempServer) AddOrUpdateTemp(param *tempModel.AddTemp) error {
|
||||
temp, err := dao.GetTempByName(param.UserId, param.TempName)
|
||||
temp, err := dao.GetTempByName(param.UserId, param.PrintSn, param.TempName)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -154,41 +152,13 @@ func (t *TempServer) AddOrUpdateTemp(param *tempModel.AddTemp) error {
|
||||
return errors.New("模板名称重复")
|
||||
}
|
||||
|
||||
// 解析模板
|
||||
var tempTagList []*tempModel.TempContext
|
||||
if err := json.Unmarshal([]byte(param.Temp), tempTagList); err != nil {
|
||||
return err
|
||||
}
|
||||
sort.Slice(tempTagList, func(i, j int) bool {
|
||||
if tempTagList[i].Rank > tempTagList[j].Rank {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
})
|
||||
|
||||
rankKey := ""
|
||||
contextStr := "{"
|
||||
for i := 0; i < len(tempTagList); i++ {
|
||||
if i != len(tempTagList)-1 {
|
||||
key := tempTagList[i].MatchContext + ","
|
||||
rankKey += key
|
||||
} else {
|
||||
rankKey += tempTagList[i].MatchContext
|
||||
}
|
||||
}
|
||||
for i := 0; i < len(tempTagList); i++ {
|
||||
if i != len(tempTagList)-1 {
|
||||
contextStr += tempTagList[i].MatchContext + ":" + tempTagList[i].MatchContext + ","
|
||||
} else {
|
||||
contextStr += tempTagList[i].MatchContext + ":" + tempTagList[i].MatchContext + "}"
|
||||
}
|
||||
}
|
||||
|
||||
now := time.Now()
|
||||
userTemp := &tempModel.SystemTemp{
|
||||
CreatedAt: param.CreatedAt,
|
||||
UpdatedAt: &now,
|
||||
TempName: param.TempName,
|
||||
TempRank: rankKey,
|
||||
Temp: contextStr,
|
||||
TempRank: param.TempRank,
|
||||
Temp: param.Temp,
|
||||
UserId: param.UserId,
|
||||
TempType: param.TempType,
|
||||
TempSize: param.TempSize,
|
||||
@@ -196,11 +166,12 @@ func (t *TempServer) AddOrUpdateTemp(param *tempModel.AddTemp) error {
|
||||
DeletedAt: &utils.DefaultTimeValue,
|
||||
PrintSn: param.PrintSn,
|
||||
IsUse: param.IsUse,
|
||||
Properties: param.Properties,
|
||||
}
|
||||
|
||||
// 如果默认打印改模板,其他打印模板则改成不使用
|
||||
if param.IsUse == 1 {
|
||||
if err := dao.UpdateOtherTempStatus(param.UserId); err != nil {
|
||||
if err := dao.UpdateOtherTempStatus(param.UserId, param.PrintSn); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
@@ -214,17 +185,36 @@ func (t *TempServer) AddOrUpdateTemp(param *tempModel.AddTemp) error {
|
||||
// 修改
|
||||
userTemp.UpdatedAt = &now
|
||||
userTemp.ID = param.ID
|
||||
return dao.UpdateTemp(userTemp, []string{"id"})
|
||||
return dao.UpdateTemp(userTemp, []string{"created_at", "updated_at", "last_operator", "deleted_at", "temp_name", "temp_rank", "temp", "user_id", "temp_type", "temp_size", "print_sn", "is_use", "properties"})
|
||||
}
|
||||
|
||||
// DeleteTemp 删除模板
|
||||
func (t *TempServer) DeleteTemp(id int, userId string) error {
|
||||
temp, err := dao.QueryTempById(id)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if temp.TempType == tempModel.TempTypeMerchant || temp.TempType == tempModel.TempTypeConsumer {
|
||||
return fmt.Errorf("此模板为系统模板无法删除")
|
||||
}
|
||||
|
||||
return dao.DeleteTemp(id, userId)
|
||||
}
|
||||
|
||||
// QueryTempList 查询用户模板
|
||||
func (t *TempServer) QueryTempList(userId string) ([]*tempModel.SystemTemp, error) {
|
||||
return dao.SelectUserTemp(userId)
|
||||
func (t *TempServer) QueryTempList(userId, printSn string) ([]*tempModel.SystemTemp, error) {
|
||||
userList, err := dao.SelectUserTemp(userId, printSn)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// 查询系统模板
|
||||
systemTemp, err := t.QuerySystemTemp()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
userList = append(userList, systemTemp...)
|
||||
return userList, nil
|
||||
}
|
||||
|
||||
// QuerySystemTemp 查询系统模板
|
||||
@@ -233,11 +223,11 @@ func (t *TempServer) QuerySystemTemp() ([]*tempModel.SystemTemp, error) {
|
||||
}
|
||||
|
||||
// SwitchTemp 切换使用模板
|
||||
func (t *TempServer) SwitchTemp(userId string, tempId int) error {
|
||||
return dao.SwitchTemp2User(tempId, userId)
|
||||
func (t *TempServer) SwitchTemp(userId, printSn string, tempId int) error {
|
||||
return dao.SwitchTemp2User(tempId, userId, printSn)
|
||||
}
|
||||
|
||||
// DeleteAllTemp 删除所有用户打印机模板
|
||||
func (t *TempServer) DeleteAllTemp(userId string, printNo []string) error {
|
||||
return dao.DeleteAllTemp(userId, printNo)
|
||||
func (t *TempServer) DeleteAllTemp(userId string, printNos string) error {
|
||||
return dao.DeleteAllTemp(userId, printNos)
|
||||
}
|
||||
|
||||
@@ -147,248 +147,3 @@ type JXPrintData struct {
|
||||
BigFont string `json:"big_font"` // 是否为大字体
|
||||
PrintNumber string `json:"print_number"` // 打印次数
|
||||
}
|
||||
|
||||
/************************一下模板将不再使用,直接将标签替换*****************************************/
|
||||
// 小字体系统模板
|
||||
const (
|
||||
// 模板开始
|
||||
tempBegin = `
|
||||
<center><b>%s</b></center>
|
||||
<br>
|
||||
<br>
|
||||
<center>手机买菜上京西</center>
|
||||
<br>
|
||||
<center>极速到家送惊喜</center>
|
||||
<br>
|
||||
--------------------------------
|
||||
<br>
|
||||
下单时间: %s
|
||||
<br>
|
||||
预计送达: %s
|
||||
<br>
|
||||
订单编号: %s
|
||||
<br>`
|
||||
// 是否为预订单
|
||||
tempBusiness = `<center><b>预订单</b></center><br>`
|
||||
tempBegin2 = `
|
||||
<br>
|
||||
<b>%s#%s</b>
|
||||
<br>
|
||||
<qrc>%s</qrc>
|
||||
<br>`
|
||||
tempEBail = `<b>饿百取货码%s:%s</b><br><br>`
|
||||
tempBegin3 = `
|
||||
<br>
|
||||
<br>
|
||||
客户: %s
|
||||
<br>
|
||||
电话: %s
|
||||
<br>
|
||||
地址: %s
|
||||
<br>
|
||||
<br>
|
||||
客户备注:
|
||||
<br>
|
||||
<b>%s</b>
|
||||
<br>
|
||||
<br>
|
||||
商品明细:
|
||||
<br>
|
||||
品名 数量 单价 小计
|
||||
<br>
|
||||
--------------------------------
|
||||
<br>
|
||||
`
|
||||
// 模板结束
|
||||
tempEnd = `<br>
|
||||
<br>
|
||||
共%s种,%s件商品
|
||||
<br>
|
||||
--------------------------------
|
||||
<br>
|
||||
<center><hb>商品质量问题请联系:</hb></center>
|
||||
<br>
|
||||
<center><hb>%s:%s</hb></center>
|
||||
<br>
|
||||
<br>
|
||||
更多信息请关注官方微信: %s
|
||||
<br>
|
||||
<br>
|
||||
<br>
|
||||
--------------------------------
|
||||
<br>
|
||||
--------------------------------
|
||||
<br>
|
||||
<br>
|
||||
`
|
||||
|
||||
// 模板商品
|
||||
skuListTemp = `%s
|
||||
<br>
|
||||
x%s ¥%s ¥%s
|
||||
<br>
|
||||
`
|
||||
soundTemp = `<br><sound>%s</sound>`
|
||||
)
|
||||
|
||||
// 中字体系统模板
|
||||
const (
|
||||
// 模板开始
|
||||
tempBeginMiddle = `
|
||||
<center><b>%s</b></center>
|
||||
<br>
|
||||
<br>
|
||||
<center>手机买菜上京西</center>
|
||||
<br>
|
||||
<center>极速到家送惊喜</center>
|
||||
<br>
|
||||
--------------------------------
|
||||
<br>
|
||||
<wb>下单时间: %s</wb>
|
||||
<br>
|
||||
<wb>预计送达: %s</wb>
|
||||
<br>
|
||||
<wb>订单编号: %s</wb>
|
||||
<br>`
|
||||
// 是否为预订单
|
||||
tempBusinessMiddle = `<center><b>预订单</b></center><br>`
|
||||
tempBegin2Middle = `
|
||||
<br>
|
||||
<b>%s#%s</b>
|
||||
<br>
|
||||
<qrc>%s</qrc>
|
||||
<br>`
|
||||
tempEBailMiddle = `<b>%s:%s</b><br><br>`
|
||||
tempBegin3Middle = `
|
||||
<br>
|
||||
<br>
|
||||
<wb>客户: %s</wb>
|
||||
<br>
|
||||
<wb>电话: %s</wb>
|
||||
<br>
|
||||
<wb>地址: %s</wb>
|
||||
<br>
|
||||
<br>
|
||||
<wb>客户备注:</wb>
|
||||
<br>
|
||||
<b>%s</b>
|
||||
<br>
|
||||
<br>
|
||||
<wb>商品明细:</wb>
|
||||
<br>
|
||||
品名 数量 单价 小计
|
||||
<br>
|
||||
--------------------------------
|
||||
<br>
|
||||
`
|
||||
// 模板结束
|
||||
tempEndMiddle = `<br>
|
||||
<br>
|
||||
<wb>共%s种,%s件商品</wb>
|
||||
<br>
|
||||
--------------------------------
|
||||
<br>
|
||||
<center><hb>商品质量问题请联系:</hb></center>
|
||||
<br>
|
||||
<center><hb>%s:%s</hb></center>
|
||||
<br>
|
||||
<br>
|
||||
更多信息请关注官方微信: %s
|
||||
<br>
|
||||
<br>
|
||||
<br>
|
||||
--------------------------------
|
||||
<br>
|
||||
--------------------------------
|
||||
<br>
|
||||
<br>
|
||||
`
|
||||
|
||||
// 模板商品
|
||||
skuListTempMiddle = `<wb>%s</wb>
|
||||
<br>
|
||||
<wb>x%s</wb> <wb>¥%s</wb> <wb>¥%s</wb>
|
||||
<br>
|
||||
`
|
||||
)
|
||||
|
||||
// 大字体系统模板
|
||||
const (
|
||||
// 模板开始
|
||||
tempBeginBig = `
|
||||
<center><b>%s</b></center>
|
||||
<br>
|
||||
<br>
|
||||
<center>手机买菜上京西</center>
|
||||
<br>
|
||||
<center>极速到家送惊喜</center>
|
||||
<br>
|
||||
--------------------------------
|
||||
<br>
|
||||
<b>下单时间: %s</b>
|
||||
<br>
|
||||
<b>预计送达: %s</b>
|
||||
<br>
|
||||
<b>订单编号: %s</b>
|
||||
<br>`
|
||||
// 是否为预订单
|
||||
tempBusinessBig = `<center><b>预订单</b></center><br>`
|
||||
tempBegin2Big = `
|
||||
<br>
|
||||
<b>%s#%s</b>
|
||||
<br>
|
||||
<qrc>%s</qrc>
|
||||
<br>`
|
||||
tempEBailBig = `<b>%s:%s</b><br><br>`
|
||||
tempBegin3Big = `
|
||||
<br>
|
||||
<br>
|
||||
<b>客户: %s</b>
|
||||
<br>
|
||||
<b>电话: %s</b>
|
||||
<br>
|
||||
<b>地址: %s</b>
|
||||
<br>
|
||||
<br>
|
||||
<b>客户备注:</b>
|
||||
<br>
|
||||
<b>%s</b>
|
||||
<br>
|
||||
<br>
|
||||
<b>商品明细:</b>
|
||||
<br>
|
||||
品名 数量 单价 小计
|
||||
<br>
|
||||
--------------------------------
|
||||
<br>
|
||||
`
|
||||
// 模板结束
|
||||
tempEndBig = `<br>
|
||||
<br>
|
||||
<b>共%s种,%s件商品</b>
|
||||
<br>
|
||||
--------------------------------
|
||||
<br>
|
||||
<center><b>商品质量问题请联系:</b></center>
|
||||
<br>
|
||||
<center><b>%s:%s</b></center>
|
||||
<br>
|
||||
<br>
|
||||
更多信息请关注官方微信: %s
|
||||
<br>
|
||||
<br>
|
||||
<br>
|
||||
--------------------------------
|
||||
<br>
|
||||
--------------------------------
|
||||
<br>
|
||||
<br>
|
||||
`
|
||||
|
||||
// 模板商品
|
||||
skuListTempBig = `<b>%s</b>
|
||||
<br>
|
||||
<b>x%s</b> <b>¥%s</b> <b>¥%s</b>
|
||||
<br>
|
||||
`
|
||||
)
|
||||
|
||||
62
services/print_server/app_server/tonglian_pay.go
Normal file
62
services/print_server/app_server/tonglian_pay.go
Normal file
@@ -0,0 +1,62 @@
|
||||
package app_server
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"git.rosy.net.cn/baseapi/platformapi/tonglianpayapi"
|
||||
"git.rosy.net.cn/jx-print/dao"
|
||||
userModel "git.rosy.net.cn/jx-print/model"
|
||||
printModel "git.rosy.net.cn/jx-print/model/app_model"
|
||||
)
|
||||
|
||||
type PrintPay struct {
|
||||
}
|
||||
|
||||
var PrintPayServer = new(PrintPay)
|
||||
|
||||
// Pay4Order 支付
|
||||
func (p *PrintPay) Pay4Order(user *userModel.User, ip string, totalFee int, payType int, vendorPayType, printNo string) (orderPay *printModel.OrderPay, err error) {
|
||||
if user.OpenId == "" {
|
||||
return nil, fmt.Errorf("当前用户未微信授权,无法使用微信支付")
|
||||
}
|
||||
switch payType {
|
||||
case printModel.PayTypeWX:
|
||||
orderPay, err = pay4OrderByWX(user, totalFee, ip, vendorPayType)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
orderPay.PrintNo = printNo
|
||||
if err := dao.InsertPrinterPayRecord(orderPay); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
case printModel.PayTypeTL:
|
||||
orderPay, err = pay4OrderByTL(user, totalFee, payType, vendorPayType)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
orderPay.PrintNo = printNo
|
||||
if err := dao.InsertPrinterPayRecord(orderPay); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
default:
|
||||
err = fmt.Errorf("支付方式:%d当前不支持", payType)
|
||||
}
|
||||
|
||||
return orderPay, err
|
||||
}
|
||||
|
||||
// OnTLPayCallback 通联充值回调处理
|
||||
func (p *PrintPay) OnTLPayCallback(call *tonglianpayapi.CallBackResult) (err error) {
|
||||
switch call.TrxCode {
|
||||
case tonglianpayapi.MsgTypePay: // 微信支付回调
|
||||
err = onTLPayFinished(call)
|
||||
case tonglianpayapi.MsgTypeRefund: // 微信退款回调
|
||||
// err = onTLpayRefund(call)
|
||||
case tonglianpayapi.MsgTypePayZFB: // 支付宝支付回调
|
||||
// err = onTLpayFinished(call)
|
||||
case tonglianpayapi.MsgTypeRefundZFB: // 支付宝退款回调
|
||||
// err = onTLpayRefund(call)
|
||||
default:
|
||||
|
||||
}
|
||||
return err
|
||||
}
|
||||
186
services/print_server/app_server/tonglian_pay_utils.go
Normal file
186
services/print_server/app_server/tonglian_pay_utils.go
Normal file
@@ -0,0 +1,186 @@
|
||||
package app_server
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"git.rosy.net.cn/baseapi/platformapi/tonglianpayapi"
|
||||
"git.rosy.net.cn/baseapi/platformapi/wxpayapi"
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
"git.rosy.net.cn/jx-print/dao"
|
||||
"git.rosy.net.cn/jx-print/globals"
|
||||
userModel "git.rosy.net.cn/jx-print/model"
|
||||
printModel "git.rosy.net.cn/jx-print/model/app_model"
|
||||
"git.rosy.net.cn/jx-print/services/api"
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/jmoiron/sqlx"
|
||||
"math/rand"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
// pay4OrderByWX 直接微信支付
|
||||
func pay4OrderByWX(user *userModel.User, totalFell int, ip, vendorPayType string) (orderPay *printModel.OrderPay, err error) {
|
||||
payCreatedAt := time.Now()
|
||||
param := &wxpayapi.CreateOrderParam{
|
||||
OutTradeNo: utils.Int64ToStr(time.Now().Unix()) + fmt.Sprintf("%d", rand.Intn(100000)),
|
||||
Body: printModel.PayBody,
|
||||
NotifyURL: globals.TongLianPayCallBack,
|
||||
SpbillCreateIP: ip,
|
||||
TradeType: vendorPayType,
|
||||
TotalFee: totalFell,
|
||||
|
||||
TimeStart: wxpayapi.Time2PayTime(payCreatedAt),
|
||||
ProfitSharing: wxpayapi.OptYes,
|
||||
}
|
||||
if user.OpenId != "" {
|
||||
param.OpenID = user.OpenId
|
||||
}
|
||||
|
||||
result, err := api.WxpayAPI.CreateUnifiedOrder(param)
|
||||
if err == nil {
|
||||
orderPay = &printModel.OrderPay{
|
||||
CreatedAt: time.Now(),
|
||||
UpdatedAt: time.Now(),
|
||||
PayOrderID: param.OutTradeNo,
|
||||
PayType: printModel.PayTypeWX,
|
||||
VendorPayType: vendorPayType,
|
||||
Status: 0,
|
||||
PayCreatedAt: payCreatedAt,
|
||||
PrepayID: result.PrepayID,
|
||||
CodeURL: result.CodeURL,
|
||||
TotalFee: int(totalFell),
|
||||
}
|
||||
}
|
||||
return orderPay, err
|
||||
}
|
||||
|
||||
// pay4OrderByTL 通联支付
|
||||
func pay4OrderByTL(user *userModel.User, totalFell int, payType int, vendorPayType string) (orderPay *printModel.OrderPay, err error) {
|
||||
payCreatedAt := time.Now()
|
||||
param := &tonglianpayapi.CreateUnitorderOrderParam{
|
||||
Trxamt: totalFell,
|
||||
NotifyUrl: globals.TongLianPayCallBack,
|
||||
Reqsn: utils.Int64ToStr(time.Now().Unix()) + fmt.Sprintf("%d", rand.Intn(100000)),
|
||||
PayType: vendorPayType,
|
||||
}
|
||||
//暂时做兼容处理
|
||||
if vendorPayType == "JSAPI" {
|
||||
param.PayType = tonglianpayapi.PayTypeWxXcx
|
||||
}
|
||||
if vendorPayType == tonglianpayapi.PayTypeWxXcx {
|
||||
param.Acct = user.OpenId
|
||||
}
|
||||
|
||||
if vendorPayType == tonglianpayapi.PayTypeZfbJS || vendorPayType == tonglianpayapi.PayTypeZfbApp {
|
||||
param.Acct = user.OpenId
|
||||
if param.Acct == "" {
|
||||
return nil, fmt.Errorf("未找到用户的认证ID!")
|
||||
}
|
||||
}
|
||||
if vendorPayType == tonglianpayapi.PayTypeH5 {
|
||||
param2 := &tonglianpayapi.CreateH5UnitorderOrderParam{
|
||||
Trxamt: totalFell,
|
||||
NotifyUrl: globals.TongLianPayCallBack,
|
||||
Body: printModel.PayBody,
|
||||
Charset: "UTF-8",
|
||||
}
|
||||
err = api.TLpayAPI.CreateH5UnitorderOrder(param2)
|
||||
} else {
|
||||
result, err := api.TLpayAPI.CreateUnitorderOrder(param)
|
||||
if err == nil {
|
||||
var result2 tonglianpayapi.PayInfo
|
||||
json.Unmarshal([]byte(result.PayInfo), &result2)
|
||||
prePayID := result2.Package[strings.LastIndex(result2.Package, "=")+1 : len(result2.Package)]
|
||||
orderPay = &printModel.OrderPay{
|
||||
PayOrderID: param.Reqsn,
|
||||
PayType: payType,
|
||||
VendorPayType: vendorPayType,
|
||||
TransactionID: result.TrxID,
|
||||
VendorOrderID: param.Reqsn,
|
||||
VendorID: printModel.OrderPayVendorId,
|
||||
Status: 0,
|
||||
PayCreatedAt: payCreatedAt,
|
||||
PrepayID: prePayID,
|
||||
CodeURL: utils.LimitUTF8StringLen(result.PayInfo, 3200),
|
||||
TotalFee: param.Trxamt,
|
||||
}
|
||||
}
|
||||
}
|
||||
return orderPay, err
|
||||
}
|
||||
|
||||
// onTLPayFinished 通联微信支付回调
|
||||
func onTLPayFinished(call *tonglianpayapi.CallBackResult) (err error) {
|
||||
orderPay, err := dao.QueryPrinterPayRecord(call.CusorderID)
|
||||
if err != nil {
|
||||
globals.SugarLogger.Debugf("onTLpayFinished msg:%s, err:%v", utils.Format4Output(call, true), err)
|
||||
return err
|
||||
}
|
||||
if orderPay.Status != 0 {
|
||||
return err
|
||||
}
|
||||
loc, _ := time.LoadLocation("Local")
|
||||
t1, _ := time.ParseInLocation("20060102150405", call.PayTime, loc)
|
||||
orderPay.PayFinishedAt = t1
|
||||
orderPay.OriginalData = utils.Format4Output(call, true)
|
||||
if call.TrxStatus == tonglianpayapi.TrxStatusSuccess {
|
||||
orderPay.Status = printModel.PayStatusYes
|
||||
} else {
|
||||
orderPay.Status = printModel.PayStatusFailed
|
||||
}
|
||||
|
||||
txDb := globals.GetTxDb()
|
||||
if err := dao.UpdatePrinterPayRecord(txDb, orderPay, "status", "pay_finished_at", "original_data"); err != nil {
|
||||
globals.SugarLogger.Debugf("UpdatePrinterPayRecord msg:%s, err:%v", utils.Format4Output(call, true), err)
|
||||
txDb.Rollback()
|
||||
return err
|
||||
}
|
||||
|
||||
if call.TrxStatus == tonglianpayapi.TrxStatusSuccess {
|
||||
err = onPayFinished(txDb, orderPay)
|
||||
}
|
||||
|
||||
txDb.Commit()
|
||||
return err
|
||||
}
|
||||
|
||||
// onPayFinished 通联支付完成时,修改打印机账户余额
|
||||
func onPayFinished(db *sqlx.Tx, param *printModel.OrderPay) error {
|
||||
// 修改打印机余额
|
||||
if err := dao.AddMoney(db, param.PrintNo, int64(param.TotalFee)); err != nil {
|
||||
globals.SugarLogger.Debugf("onPayFinished update bancall err = %v", err)
|
||||
db.Rollback()
|
||||
return err
|
||||
}
|
||||
// 添加充值记录
|
||||
record := &printModel.PrintBillRecord{
|
||||
CreatedAt: time.Now(),
|
||||
UpdatedAt: time.Now(),
|
||||
PrintNo: param.PrintNo,
|
||||
PayType: 1,
|
||||
PayMoney: param.TotalFee,
|
||||
OrderId: param.PayOrderID,
|
||||
UserId: "",
|
||||
}
|
||||
if err := dao.AddIncomeRecord(db, record); err != nil {
|
||||
globals.SugarLogger.Debugf("onPayFinished AddIncomeRecord bancall err = %v", err)
|
||||
db.Rollback()
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetRealRemoteIP 获取ip
|
||||
func (p *PrintPay) GetRealRemoteIP(ctx *gin.Context) (ip string) {
|
||||
ip = ctx.ClientIP()
|
||||
if ip == "" {
|
||||
ip = ctx.Request.Header.Get("X-real-ip")
|
||||
}
|
||||
if ip == "" {
|
||||
ip = strings.Split(ctx.Request.RemoteAddr, ":")[0]
|
||||
} else {
|
||||
ip = strings.Split(ip, ",")[0]
|
||||
}
|
||||
return ip
|
||||
}
|
||||
@@ -1,16 +1,5 @@
|
||||
package app_server
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
"git.rosy.net.cn/jx-print/globals"
|
||||
"git.rosy.net.cn/jx-print/putils"
|
||||
"git.rosy.net.cn/jx-print/services/api"
|
||||
aliyunsmsclient "github.com/KenmyZhang/aliyun-communicate"
|
||||
"math/rand"
|
||||
)
|
||||
|
||||
type SendVerifyCode struct {
|
||||
}
|
||||
|
||||
@@ -18,44 +7,44 @@ var SendVerifyCodeServer = new(SendVerifyCode)
|
||||
|
||||
// SendCode 获取手机短信验证码
|
||||
func (s *SendVerifyCode) SendCode(mobile string) (string, error) {
|
||||
// 获取code
|
||||
smsCode := ""
|
||||
code := putils.GetKey(mobile)
|
||||
if code != "" {
|
||||
smsCode = code.(string)
|
||||
} else {
|
||||
smsCode = fmt.Sprintf("%06d", rand.Intn(1000000))
|
||||
}
|
||||
|
||||
// 发送短信
|
||||
response, err := api.SMSClient.Execute(globals.AliKey, globals.AliSecret, mobile, globals.SmsSignName, globals.SmsMobileVerifyTemplate, string(utils.MustMarshal(map[string]interface{}{
|
||||
"code": smsCode,
|
||||
})))
|
||||
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
if response.Code != aliyunsmsclient.ResponseCodeOk {
|
||||
return "", fmt.Errorf("发送短信出错:%s", response.Message)
|
||||
}
|
||||
|
||||
if err := putils.SetKey(response.BizId+"_"+mobile, smsCode, 5*60); err != nil {
|
||||
globals.SugarLogger.Debugf("redis set key err key[%s] value[%s]:", mobile, smsCode)
|
||||
return "", err
|
||||
}
|
||||
|
||||
return response.BizId, nil
|
||||
//// 获取code
|
||||
//smsCode := fmt.Sprintf("%06d", rand.Intn(1000000))
|
||||
//
|
||||
//// 发送短信
|
||||
//response, err := api.SMSClient.Execute(globals.AliKey, globals.AliSecret, mobile, globals.SmsSignName, globals.SmsMobileVerifyTemplate, string(utils.MustMarshal(map[string]interface{}{
|
||||
// "code": smsCode,
|
||||
//})))
|
||||
//
|
||||
//if err != nil {
|
||||
// return "", err
|
||||
//}
|
||||
//if response.Code != aliyunsmsclient.ResponseCodeOk {
|
||||
// return "", fmt.Errorf("发送短信出错:%s", response.Message)
|
||||
//}
|
||||
//
|
||||
//if err := putils.SetKey(response.BizId+"_"+mobile, smsCode, time.Minute*2); err != nil {
|
||||
// globals.SugarLogger.Debugf("redis set key err key[%s] value[%s]:", mobile, smsCode)
|
||||
// return "", err
|
||||
//}
|
||||
//
|
||||
//return response.BizId, nil
|
||||
return "111111", nil
|
||||
}
|
||||
|
||||
// VerifySecret 检查验证码
|
||||
func (s *SendVerifyCode) VerifySecret(mobile, bizId, code string) (bool, error) {
|
||||
result := putils.GetKey(bizId + "_" + mobile)
|
||||
if result != "" {
|
||||
return false, errors.New("验证码过期")
|
||||
}
|
||||
if result.(string) != code {
|
||||
return false, errors.New("验证码错误,重新确认")
|
||||
}
|
||||
putils.DelKey(bizId + "_" + mobile)
|
||||
//result := putils.GetKey(bizId + "_" + mobile)
|
||||
//fmt.Println(utils.IsNil(result))
|
||||
//fmt.Println(result)
|
||||
//if utils.IsNil(result) || result == "" || result == nil {
|
||||
// return false, errors.New("验证码过期")
|
||||
//}
|
||||
//
|
||||
//if result.(string) != code {
|
||||
// return false, errors.New("验证码错误,重新确认")
|
||||
//}
|
||||
//
|
||||
//defer putils.DelKey(bizId + "_" + mobile)
|
||||
|
||||
return true, nil
|
||||
}
|
||||
|
||||
@@ -211,11 +211,18 @@ func (u *UserLogin) GetJxc4Token() (string, error) {
|
||||
return "", err
|
||||
}
|
||||
|
||||
jxc4User := &model.AutoGenerated{}
|
||||
jxc4User := &model.CallBack{}
|
||||
fmt.Println("=============", string(bodyResp))
|
||||
if err := json.Unmarshal(bodyResp, jxc4User); err != nil {
|
||||
return "", err
|
||||
}
|
||||
Jxc4UserToken["token"] = jxc4User.Data.Token
|
||||
Jxc4UserToken["expirationTime"] = strconv.FormatInt(time.Now().Unix(), 64)
|
||||
return jxc4User.Data.Token, nil
|
||||
|
||||
user := &model.Jxc4UserData{}
|
||||
if err := json.Unmarshal([]byte(jxc4User.Data), user); err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
Jxc4UserToken["token"] = user.Token
|
||||
Jxc4UserToken["expirationTime"] = utils.Int64ToStr(time.Now().Unix() + 5*24*60*60)
|
||||
return user.Token, nil
|
||||
}
|
||||
|
||||
@@ -6,17 +6,50 @@ import (
|
||||
"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) error {
|
||||
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
|
||||
}
|
||||
@@ -24,22 +57,18 @@ func QueryPrintKeyIsExit(printInfo *model.PrintInfo, phone, bizId, code string,
|
||||
return fmt.Errorf("验证码错误")
|
||||
}
|
||||
|
||||
if printInfo.PrintNo == "" {
|
||||
return fmt.Errorf("请输入正确的打印机编号!print_no :%s 。", printInfo.PrintNo)
|
||||
printers, _ := dao.GetPrinters(db, appId, printNo, 0, 0, 0)
|
||||
if len(printers) != 1 {
|
||||
return fmt.Errorf("打印机不存在或异常,联系管理员")
|
||||
}
|
||||
|
||||
printers, _ := dao.GetPrinters(db, appId, printInfo.PrintNo, 0, 0, 0)
|
||||
// 打印机已经被绑定
|
||||
if len(printers) != 0 {
|
||||
// 修改绑定
|
||||
if printers[0].PrintKey != "" && printers[0].PrintKey != phone {
|
||||
return fmt.Errorf("打印机已经被其他用户绑定,修改绑定请联系商家")
|
||||
}
|
||||
if printers[0].PrintKey != phone {
|
||||
return fmt.Errorf("打印机绑定电话与删除时绑定电话不匹配")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func AddPrinters(tokenInfo *model.TokenInfo, appID int, printInfo []*model.PrintInfo) (err error) {
|
||||
func AddPrinters(txDB *sqlx.Tx, tokenInfo *model.TokenInfo, appID int, printInfo []*model.PrintInfo, phone string) (err error) {
|
||||
var (
|
||||
db = globals.GetDB()
|
||||
errs []error
|
||||
@@ -48,7 +77,7 @@ func AddPrinters(tokenInfo *model.TokenInfo, appID int, printInfo []*model.Print
|
||||
if len(printInfo) > 50 {
|
||||
return fmt.Errorf("每次最多添加50台!")
|
||||
}
|
||||
if apps, _ := dao.GetApps(db, appID, tokenInfo.User.UserID, ""); len(apps) == 0 {
|
||||
if apps, _ := dao.GetApps(db, appID, "", ""); len(apps) == 0 {
|
||||
return fmt.Errorf("未查询到此应用!app_id:%d", appID)
|
||||
}
|
||||
for _, v := range printInfo {
|
||||
@@ -69,7 +98,7 @@ func AddPrinters(tokenInfo *model.TokenInfo, appID int, printInfo []*model.Print
|
||||
AppID: appID,
|
||||
PrintNo: v.PrintNo,
|
||||
Name: v.Name,
|
||||
PrintKey: v.PrintKey,
|
||||
PrintKey: phone,
|
||||
Status: model.PrinterStatusNormal,
|
||||
IsOnline: model.PrinterOffline,
|
||||
Sound: "sounda",
|
||||
@@ -77,11 +106,11 @@ func AddPrinters(tokenInfo *model.TokenInfo, appID int, printInfo []*model.Print
|
||||
UserId: tokenInfo.User.UserID,
|
||||
}
|
||||
if len(printers) > 0 {
|
||||
if err = dao.Update(db, printer, "UserId"); err != nil {
|
||||
if err = dao.UpdateTx(txDB, printer, "user_id"); err != nil {
|
||||
errs = append(errs, err)
|
||||
}
|
||||
} else {
|
||||
if err = dao.Insert(db, printer); err != nil {
|
||||
if err = dao.InsertTx(txDB, printer); err != nil {
|
||||
errs = append(errs, err)
|
||||
}
|
||||
}
|
||||
@@ -96,7 +125,11 @@ func GetPrinters(appID int, printNo, name string, status, isOnline, offset, page
|
||||
return dao.GetPrintersPage(globals.GetDB(), appID, printNo, name, status, isOnline, offset, pageSize, userId)
|
||||
}
|
||||
|
||||
func DelPrinters(appID int, tokenInfo *model.TokenInfo, printNos []string) (err error) {
|
||||
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
|
||||
@@ -105,30 +138,22 @@ func DelPrinters(appID int, tokenInfo *model.TokenInfo, printNos []string) (err
|
||||
if len(printNos) > 50 {
|
||||
return fmt.Errorf("每次最多删除50台!")
|
||||
}
|
||||
if apps, _ := dao.GetApps(db, appID, tokenInfo.User.UserID, ""); len(apps) == 0 {
|
||||
if apps, _ := dao.GetApps(db, appID, "", ""); 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("该打印机不属于此用户 :%s 。", v))
|
||||
continue
|
||||
}
|
||||
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)
|
||||
}
|
||||
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)
|
||||
@@ -142,7 +167,7 @@ func UpdatePrinter(appID int, tokenInfo *model.TokenInfo, printNo, name, sound s
|
||||
now = time.Now()
|
||||
fields []string
|
||||
)
|
||||
if apps, _ := dao.GetApps(db, appID, tokenInfo.User.UserID, ""); len(apps) == 0 {
|
||||
if apps, _ := dao.GetApps(db, appID, "", ""); len(apps) == 0 {
|
||||
return fmt.Errorf("未查询到此应用!app_id:%d", appID)
|
||||
}
|
||||
|
||||
@@ -216,23 +241,13 @@ func GetPrintMessages(appID int, tokenInfo *model.TokenInfo, printNo, msgID stri
|
||||
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) {
|
||||
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 = &GetPrinterReportResult{}
|
||||
getPrinterReportResult = &app_model.GetPrinterReportResult{}
|
||||
apps, _ := dao.GetApps(db, 0, tokenInfo.User.UserID, "")
|
||||
if len(apps) == 0 {
|
||||
return nil, err
|
||||
|
||||
@@ -243,6 +243,6 @@ func GetPrinterReport(c *gin.Context, tokenInfo *model.TokenInfo) (getPrinterRep
|
||||
}
|
||||
|
||||
// DeletePrintMsg 删除打印机打印消息
|
||||
func DeletePrintMsg(printNos []string) error {
|
||||
func DeletePrintMsg(printNos string) error {
|
||||
return dao.DeletePrinterMsg(printNos)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user