fonchain-fiee/pkg/service/order/payment.go

463 lines
13 KiB
Go
Raw Normal View History

2025-02-19 06:24:15 +00:00
package order
import (
"context"
"errors"
"fmt"
"os"
"github.com/fonchain_enterprise/fonchain-main/api/collection_record"
"github.com/fonchain_enterprise/fonchain-main/api/payment"
"github.com/fonchain_enterprise/fonchain-main/pkg/config"
"github.com/fonchain_enterprise/fonchain-main/pkg/e"
"github.com/fonchain_enterprise/fonchain-main/pkg/model"
"github.com/fonchain_enterprise/fonchain-main/pkg/service"
"github.com/fonchain_enterprise/fonchain-main/pkg/utils"
"github.com/fonchain_enterprise/utils/objstorage"
"github.com/gin-gonic/gin"
"github.com/nacos-group/nacos-sdk-go/common/logger"
)
func AddShop(c *gin.Context) {
var req payment.AddShopreq
if err := c.ShouldBind(&req); err != nil {
fmt.Println("req 的err 是:", err)
logger.Errorf("Add ShouldBind err", err)
service.ResponseQuickMsg(c, e.Failed, err.Error(), nil)
return
}
resp, err := service.GrpcPaymentImpl.AddShop(context.Background(), &req)
fmt.Println("输出是:", resp)
if err != nil {
fmt.Println("err 是:", err)
service.ResponseQuickMsg(c, e.Failed, err.Error(), nil)
return
}
service.ResponseQuickMsg(c, e.Ok, resp.Msg, resp)
return
}
func ShopList(c *gin.Context) {
var req payment.ShopListreq
fmt.Println("输入是:", req)
if err := c.ShouldBind(&req); err != nil {
fmt.Println("req 的err 是:", err)
logger.Errorf("ShopList ShouldBind err", err)
service.ResponseQuickMsg(c, e.Failed, err.Error(), nil)
return
}
resp, err := service.GrpcPaymentImpl.ShopList(context.Background(), &req)
fmt.Println("输出是:", resp)
if err != nil {
fmt.Println("err 是:", err)
service.ResponseQuickMsg(c, e.Failed, err.Error(), nil)
return
}
service.ResponseQuickMsg(c, e.Ok, resp.Msg, resp)
return
}
func EditShop(c *gin.Context) {
var req payment.EditShopreq
if err := c.ShouldBind(&req); err != nil {
fmt.Println("req 的err 是:", err)
logger.Errorf("EditShop ShouldBind err", err)
service.ResponseQuickMsg(c, e.Failed, err.Error(), nil)
return
}
resp, err := service.GrpcPaymentImpl.EditShop(context.Background(), &req)
fmt.Println("输出是:", resp)
if err != nil {
fmt.Println("err 是:", err)
service.ResponseQuickMsg(c, e.Failed, err.Error(), nil)
return
}
service.ResponseQuickMsg(c, e.Ok, "修改成功", nil)
return
}
func DelShop(c *gin.Context) {
var req payment.DelShopreq
if err := c.ShouldBind(&req); err != nil {
fmt.Println("req 的err 是:", err)
logger.Errorf("DelShop ShouldBind err", err)
service.ResponseQuickMsg(c, e.Failed, err.Error(), nil)
return
}
resp, err := service.GrpcPaymentImpl.DelShop(context.Background(), &req)
fmt.Println("输出是:", resp)
if err != nil {
fmt.Println("err 是:", err)
service.ResponseQuickMsg(c, e.Failed, err.Error(), nil)
return
}
service.ResponseQuickMsg(c, e.Ok, "删除成功", nil)
return
}
// 生成二维码
func AddQr(c *gin.Context) {
var req payment.AddQrreq
if err := c.ShouldBind(&req); err != nil {
fmt.Println("req 的 err 是:", err)
logger.Errorf("AddQr ShouldBind err", err)
service.ResponseQuickMsg(c, e.Failed, err.Error(), nil)
return
}
qrContent := "http://paycode.szjixun.cn/#/pages/index/index?shopUid=" + req.Uuid
qrBytes, err := utils.CreateQr(qrContent, "") // Assuming CreateQr returns []byte
// fmt.Println("qrBytes 是:", qrBytes)
if err != nil {
fmt.Println("创建二维码失败:", err)
service.ResponseQuickMsg(c, e.Failed, "创建二维码失败", nil)
return
}
// 设置响应头,指定内容类型为 image/apng这是一个 APNG 图像格式
// c.Writer.Header().Set("content-type", "image/apng")
// _, _ = c.Writer.Write([]byte(qrBytes)) // 将生成的二维码字节切片写入响应体
qrbytess := []byte(qrBytes)
var objectName string = fmt.Sprintf("%s/%s/%s.jpg", config.ConfigData.Oss.BaseDir, config.Env, req.Uuid)
BOSClient, _ := objstorage.NewOSS(config.ConfigData.Oss.AccessKeyId, config.ConfigData.Oss.AccessKeySecret, config.ConfigData.Oss.Endpoint)
_, err = BOSClient.PutObjectFromBytes(config.ConfigData.Oss.BucketName, objectName, qrbytess)
if err != nil {
logger.Errorf("quickBos err", err)
return
}
//url := fmt.Sprintf("%s%s%s/%s", config.BosHttp, config.BosBucketName, config.BosUrl, objectName)
url := fmt.Sprintf("%s/%s", config.ConfigData.Oss.CdnHost, objectName)
fmt.Println("得到的url是", url)
// bosurl, err = quickBos(file, mediaType, mask, source, &req)
// if err != nil {
// fmt.Println("quickBos 处理失败:", err)
// service.ResponseQuickMsg(c, e.Failed, "quickBos 处理失败", nil)
// return
// }
// 将二维码内容赋给 req 的 Qr 字段
req.Qr = url
resp, err := service.GrpcPaymentImpl.AddQr(context.Background(), &req)
fmt.Println("resp是:", resp)
if err != nil {
fmt.Println("err 是:", err)
service.ResponseQuickMsg(c, e.Failed, err.Error(), nil)
return
}
service.ResponseQuickMsg(c, e.Ok, "生成二维码成功", nil)
return
}
// func AddQr(c *gin.Context) {
// var req payment.AddQrreq
// if err := c.ShouldBind(&req); err != nil {
// fmt.Println("req 的err 是:", err)
// logger.Errorf("AddQr ShouldBind err", err)
// service.ResponseQuickMsg(c, e.Failed, err.Error(), nil)
// return
// }
// s, _ := utils.CreateQr("http://paycode.szjixun.cn/"+req.Uuid, "")
// c.Writer.Header().Set("content-type", "image/apng")
// _, _ = c.Writer.WriteString(s)
// req.Qr = s
// fmt.Println(s)
// resp, err := service.GrpcPaymentImpl.AddQr(context.Background(), &req)
// fmt.Println("输出是:", resp)
// if err != nil {
// fmt.Println("err 是:", err)
// service.ResponseQuickMsg(c, e.Failed, err.Error(), nil)
// return
// }
// return
// }
// 生成二维码base64
func AddQrBase64(c *gin.Context) {
var req payment.AddQrreq
if err := c.ShouldBind(&req); err != nil {
fmt.Println("req 的err 是:", err)
logger.Errorf("AddQrBase64 ShouldBind err", err)
service.ResponseQuickMsg(c, e.Failed, err.Error(), nil)
return
}
s, _ := utils.CreateQrBase64("http://paycode.szjixun.cn/"+req.Uuid, "")
c.Writer.Header().Set("content-type", "image/apng")
_, _ = c.Writer.WriteString(s)
fmt.Println(s)
req.Qr = s
resp, err := service.GrpcPaymentImpl.AddQr(context.Background(), &req)
fmt.Println("输出是:", resp)
if err != nil {
fmt.Println("err 是:", err)
service.ResponseQuickMsg(c, e.Failed, err.Error(), nil)
return
}
return
}
// 启用二维码
func OnQr(c *gin.Context) {
var req payment.OnQrreq
if err := c.ShouldBind(&req); err != nil {
fmt.Println("req 的err 是:", err)
logger.Errorf("OnQr ShouldBind err", err)
service.ResponseQuickMsg(c, e.Failed, err.Error(), nil)
return
}
resp, err := service.GrpcPaymentImpl.OnQr(context.Background(), &req)
fmt.Println("输出是:", resp)
if err != nil {
fmt.Println("err 是:", err)
service.ResponseQuickMsg(c, e.Failed, err.Error(), nil)
return
}
service.ResponseQuickMsg(c, e.Ok, "启用二维码成功", nil)
return
}
// 停用二维码
func OffQr(c *gin.Context) {
var req payment.OffQrreq
if err := c.ShouldBind(&req); err != nil {
fmt.Println("req 的err 是:", err)
logger.Errorf("OffQr ShouldBind err", err)
service.ResponseQuickMsg(c, e.Failed, err.Error(), nil)
return
}
resp, err := service.GrpcPaymentImpl.OffQr(context.Background(), &req)
fmt.Println("输出是:", resp)
if err != nil {
fmt.Println("err 是:", err)
service.ResponseQuickMsg(c, e.Failed, err.Error(), nil)
return
}
service.ResponseQuickMsg(c, e.Ok, "二维码停用成功", nil)
return
}
// 下载二维码并做成压缩包
func Downloadqr(c *gin.Context) {
var req payment.Downloadqrreq
if err := c.ShouldBind(&req); err != nil {
fmt.Println("req 的err 是:", err)
logger.Errorf("OffQr ShouldBind err", err)
service.ResponseQuickMsg(c, e.Failed, err.Error(), nil)
return
}
var adminId uint64
if config.Env != "dev" {
if mLoginInfoAny, exists := c.Get("mLoginInfo"); exists {
userInfo := mLoginInfoAny.(model.LoginInfo)
adminId = userInfo.ID
}
}
var downloadshopQr string = fmt.Sprintf("%s%d", "qrimage", adminId)
var zipName string = "聚合支付商家二维码.zip"
var zipFilepath string = "runtime/" + zipName
var ImgNum int
for i, v := range req.Qrs {
if v == "" {
service.ResponseQuickMsg(c, e.Failed, fmt.Sprintf("您选择的第 %d 条数据未生成二维码图片,请生成之后再下载", i+1), nil)
return
}
}
for _, v := range req.Qrs {
fmt.Println("参与下载压缩的图片有:", v)
var qrnamereq payment.NameQrreq
qrnamereq.Qr = v
qrnameres, err1 := service.GrpcPaymentImpl.NameQr(context.Background(), &qrnamereq)
fmt.Println("输出是:", qrnameres)
if err1 != nil {
fmt.Println("err 是:", err1)
service.ResponseQuickMsg(c, e.Failed, err1.Error(), nil)
return
}
imagePath, err := utils.SaveUrlFileDisk(v, downloadshopQr, qrnameres.Name+".jpg")
fmt.Println("imagepath是:", imagePath)
fmt.Println("SaveUrlFileDisk 保存图片到本地的错误是", err)
if err != nil {
service.ResponseQuickMsg(c, e.Failed, err.Error(), nil)
return
}
ImgNum++
}
if ImgNum == 0 {
service.ResponseQuickMsg(c, e.Failed, e.GetMsg(e.NOTDATA), nil)
return
}
if err1 := utils.ZipFile(downloadshopQr, zipFilepath); err1 != nil {
fmt.Println("压缩的错误是:", err1)
logger.Errorf("utils.ZipFile err", err1)
err1 = errors.New(e.GetMsg(e.ERROR_ZIP))
return
}
os.RemoveAll(downloadshopQr)
var httpType string
if config.IsHttps {
httpType = model.HttpsType
} else {
httpType = model.HttpType
}
var exportUrl string = fmt.Sprintf("%s%s/static/%s", httpType, c.Request.Host, zipName)
service.ResponseQuickMsg(c, e.Ok, "下载成功", map[string]string{
"url": exportUrl,
})
return
}
func CollectionRecordList(c *gin.Context) {
var req collection_record.CollectionRecordListRequest
if err := c.ShouldBind(&req); err != nil {
logger.Errorf("CollectionRecordList ShouldBind err", err)
service.ResponseQuickMsg(c, e.Failed, err.Error(), nil)
return
}
resp, err := service.GrpcCollectionRecordImpl.CollectionRecordList(context.Background(), &req)
if err != nil {
service.ResponseQuickMsg(c, e.Failed, err.Error(), nil)
return
}
service.ResponseQuickMsg(c, e.Ok, resp.Msg, resp)
return
}
func ExportForm(c *gin.Context) {
var req collection_record.ExportExcelRequest
if err := c.ShouldBind(&req); err != nil {
logger.Errorf("ExportForm ShouldBind err", err)
service.ResponseQuickMsg(c, e.Failed, err.Error(), nil)
return
}
resp, err := service.GrpcCollectionRecordImpl.ExportExcel(context.Background(), &req)
if err != nil {
service.ResponseQuickMsg(c, e.Failed, err.Error(), nil)
return
}
if len(resp.CollectionRecordInfo) == 0 {
service.ResponseQuickMsg(c, e.Failed, errors.New("所选条件无可导出数据").Error(), nil)
return
}
columns := []string{"订单Uid", "商户名", "地址", "支付金额", "支付时间", "支付方式", "备注", "总价"}
var totalPrice int64
var data []interface{}
// 添加数据行
for k, collectionRecord := range resp.CollectionRecordInfo {
var info []string
info = append(info, collectionRecord.CollectionRecordUid)
info = append(info, collectionRecord.MerchantName)
info = append(info, collectionRecord.MerchantAddress)
info = append(info, fmt.Sprintf("%.2f", float64(collectionRecord.Cent)/100)) //将 int32 转换为 float64 然后 格式化为带两位小数的字符串
info = append(info, collectionRecord.PayTimeFormat)
if collectionRecord.PayType == 1 {
info = append(info, "微信支付")
} else if collectionRecord.PayType == 2 {
info = append(info, "支付宝支付")
}
info = append(info, collectionRecord.Remark)
totalPrice = totalPrice + collectionRecord.Cent
if k == len(resp.CollectionRecordInfo)-1 {
info = append(info, fmt.Sprintf("%.2f", float64(totalPrice)/100)) //总价 以元为单位
}
data = append(data, &info)
}
filePath := "./runtime/收款记录表.xlsx"
_, err = utils.ToExcelByType(columns, data, "slice", filePath)
if err != nil {
fmt.Println("err", err)
service.ResponseQuickMsg(c, e.Failed, errors.New("转换为excel类型出错").Error(), nil)
return
}
var httpType string
if config.IsHttps {
httpType = model.HttpsType
} else {
httpType = model.HttpType
}
var exportUrl string = fmt.Sprintf("%s%s/static/收款记录表.xlsx", httpType, c.Request.Host)
resp.ExportUrl = exportUrl
service.ResponseQuickMsg(c, e.Ok, resp.Msg, resp)
return
}
func ModifyRemarks(c *gin.Context) {
var req collection_record.ModifyRemarksRequest
if err := c.ShouldBind(&req); err != nil {
logger.Errorf("ExportForm ShouldBind err", err)
service.ResponseQuickMsg(c, e.Failed, err.Error(), nil)
return
}
resp, err := service.GrpcCollectionRecordImpl.ModifyRemarks(context.Background(), &req)
if err != nil {
service.ResponseQuickMsg(c, e.Failed, err.Error(), nil)
return
}
service.ResponseQuickMsg(c, e.Ok, resp.Msg, resp)
return
}