fonchain-fiee/pkg/service/bundle/reconciliation.go

405 lines
13 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 bundle
import (
"context"
"fmt"
"fonchain-fiee/api/accountFiee"
"fonchain-fiee/api/bundle"
"fonchain-fiee/cmd/config"
"fonchain-fiee/pkg/service"
"fonchain-fiee/pkg/service/bundle/common"
"fonchain-fiee/pkg/service/bundle/logic"
bundleModel "fonchain-fiee/pkg/service/bundle/model"
"fonchain-fiee/pkg/utils"
"github.com/gin-gonic/gin"
"github.com/gin-gonic/gin/binding"
"strconv"
"time"
)
func GetReconciliationList(c *gin.Context) {
var req bundle.GetReconciliationListReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, err)
return
}
detail, detailErr := service.BundleProvider.GetReconciliationList(context.Background(), &req)
if detailErr != nil {
service.Error(c, detailErr)
return
}
service.Success(c, detail)
return
}
func GetReconciliationListDownload(c *gin.Context) {
var req bundle.GetReconciliationListReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, err)
return
}
detail, detailErr := service.BundleProvider.GetReconciliationList(context.Background(), &req)
if detailErr != nil {
service.Error(c, detailErr)
return
}
titleList := []string{
"关联套餐订单号", "关联增值服务订单号", "对账单创建时间", "艺人", "艺人手机号", "套餐", "支付金额", "币种", "支付渠道", "支付时间", "支付状态", "流水号",
}
var dataList []interface{}
for _, i := range detail.List {
payStatus := GetPayStatusText(i.PayStatus)
currencyType := GetCurrencyTypeText(i.CurrencyType)
payChannel := "未知"
if i.PayChannel == 1 {
payChannel = "支付宝"
}
data := []any{
i.BundleOrderOn,
i.BundleAddOrderOn,
i.CreationTime,
i.UserName,
i.UserTel,
i.BundleName,
i.PayAmount,
currencyType,
payChannel,
i.PayTime,
payStatus,
i.SerialNumber,
}
dataList = append(dataList, &data)
}
content, err := utils.ToExcelByType(titleList, dataList, "slice", "")
if err != nil {
service.Error(c, err)
return
}
utils.ResponseXls(c, content, "对账单")
return
}
func AutoCreateUserAndOrder(c *gin.Context) {
var req bundle.AutoCreateUserAndOrderRequest
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, err)
return
}
fmt.Println("==================== 111111111111111")
data, listErr := service.BundleProvider.ListUnfinishedInfos(context.Background(), &req)
if listErr != nil {
service.Error(c, listErr)
return
}
if data != nil {
fmt.Println("待处理的数据量:", len(data.UnfinishedInfos))
}
for _, unfinishInfo := range data.UnfinishedInfos {
fmt.Println("==================== 2222222222222")
// TODO 1.创建实名用户 [ok]
userReq := new(accountFiee.CreateUserAndRealNameRequest)
userReq.UserNum = unfinishInfo.UserNum
userReq.UserName = unfinishInfo.UserName
userReq.UserTelArea = unfinishInfo.UserTelArea
userReq.UserTel = unfinishInfo.UserTel
userReq.UserSex = unfinishInfo.UserSex
userReq.Nationality = unfinishInfo.Nationality
userReq.PlaceOfResidence = unfinishInfo.PlaceOfResidence
userReq.DocumentType = unfinishInfo.DocumentType
userReq.UserIdCardFrontUrl = unfinishInfo.UserIdCardFrontUrl
userReq.UserIdCardReverseUrl = unfinishInfo.UserIdCardReverseUrl
userReq.UserIdCardValidity = unfinishInfo.UserIdCardValidity
// 解析时间字符串
loc, _ := time.LoadLocation("Local")
t, err := time.ParseInLocation("2006-01-02 15:04:05", unfinishInfo.PayTime, loc)
if err != nil {
fmt.Println("解析时间失败:", err)
return
}
// 减去一天
oneDayBefore := t.AddDate(0, 0, -1)
// 格式化为字符串
userReq.AuditTime = oneDayBefore.Format("2006-01-02 15:04:05")
userResp, userErr := service.AccountFieeProvider.CreateUserAndRealName(context.Background(), userReq)
if userErr != nil {
service.Error(c, userErr)
return
}
fmt.Println("==================== 3333333333333")
// TODO 2.匹配套餐并签约? []
// 获取 最后一次的 合同编号
lastOrderRecord, _ := service.BundleProvider.OrderRecordsList(context.Background(), &bundle.OrderRecordsRequest{
PageSize: 1,
Page: 1,
})
lastContractNo := ""
if lastOrderRecord.OrderRecords != nil {
for _, lastOrder := range lastOrderRecord.OrderRecords {
lastContractNo = lastOrder.ContractNo
}
}
BundleName := ""
BundleUuid := ""
videoUuid := ""
textAndImagesUuid := ""
reportUuid := ""
accountUuid := ""
durationUuid := ""
if config.AppConfig.System.AppMode == "prod" {
BundleName = "全球尊享版"
BundleUuid = "ac4c99c2951c2fcdbf417928d321554d"
videoUuid = "a29a1fa2862b2cdda1377b19066c8eb7"
textAndImagesUuid = "dfba176a40ae2d23aa4ef9b30b646bc8"
reportUuid = "1727557a85c92957a3e3332d18c713aa"
accountUuid = "e1cc219e4f682b3d8cb85929e540a0de"
durationUuid = "f002449ac57a2e71b0673da938c0354e"
} else {
BundleName = "测试导入全球尊享版"
BundleUuid = "5e84f86cb7f92a4ab785271e4a383aa5"
videoUuid = "1084c3406c852fb5a09be89918d568e6"
textAndImagesUuid = "51aa912412b22d68adb14f4151242df2"
reportUuid = "362d66d4877827fdafab7b3e66d62e74"
accountUuid = "9eb646957aff239e9f89e2c6ed6aeb23"
durationUuid = "8f20f3863a7c2a86bcd81d3fbacbf8f7"
}
var addRecords []*bundle.OrderCreateAddRecord
var addTotalPrice float32
var TotalPrice float32
var expirationDay string
numMap := make(map[string]int32)
numMap["3150"] = 3
numMap["5600"] = 8
numMap["6500"] = 10
numMap["8500"] = 15
numMap["10500"] = 20
numMap["11500"] = 25
numMap["14100"] = 30
incrMap := make(map[string]float32)
incrMap["3150"] = 1650
incrMap["5600"] = 4100
incrMap["6500"] = 5000
incrMap["8500"] = 7000
incrMap["10500"] = 9000
incrMap["11500"] = 10000
incrMap["14100"] = 12600
addTotalPrice = incrMap[unfinishInfo.OrderPayAmount]
fmt.Println("incrMap:", incrMap)
fmt.Println("unfinishInfo.OrderPayAmount:", unfinishInfo.OrderPayAmount)
fmt.Println("addTotalPrice:", addTotalPrice)
f64, err := strconv.ParseFloat(unfinishInfo.OrderPayAmount, 32)
TotalPrice = float32(f64)
addRecords = append(addRecords,
&bundle.OrderCreateAddRecord{ //视频
ServiceType: 1,
ValueUid: videoUuid,
CurrencyType: 2, //美元
Amount: addTotalPrice, //增值服务金额
Num: numMap[unfinishInfo.OrderPayAmount],
Unit: "个",
Source: 1,
PaymentStatus: 1,
}, &bundle.OrderCreateAddRecord{ //图文
ServiceType: 2,
ValueUid: textAndImagesUuid,
CurrencyType: 2, //美元
Amount: 0, //增值服务金额
Num: 120,
Unit: "个",
Source: 1,
PaymentStatus: 1,
}, &bundle.OrderCreateAddRecord{ //数据报表
ServiceType: 3,
ValueUid: reportUuid,
CurrencyType: 2, //美元
Amount: 0, //增值服务金额
Num: 12,
Unit: "个",
Source: 1,
PaymentStatus: 1,
}, &bundle.OrderCreateAddRecord{ //账号数
ServiceType: 3,
ValueUid: accountUuid,
CurrencyType: 2, //美元
Amount: 0, //增值服务金额
Num: 3,
Unit: "个",
Source: 1,
PaymentStatus: 1,
}, &bundle.OrderCreateAddRecord{ //可用时长
ServiceType: 3,
ValueUid: durationUuid,
CurrencyType: 2, //美元
Amount: 0, //增值服务金额
Num: 10,
Unit: "年",
Source: 1,
PaymentStatus: 1,
},
)
// 当前 未将 签名 写入合同中 todo 金额和有效时间待修改
contract := "https://e-cdn.fontree.cn/fonchain-main/prod/file/saas/contract/template-25032801.pdf"
expirationDay = t.AddDate(10, 0, 0).Format("2006-01-02")
signContract, signContractErr := logic.SignContractV2(userReq.UserNum, contract, TotalPrice, expirationDay)
if signContractErr != nil {
service.Error(c, signContractErr)
return
}
var orderReq bundle.OrderCreateRecord
orderReq.CustomerNum = userReq.UserNum
orderReq.CustomerName = userReq.UserName
orderReq.CustomerID = strconv.FormatInt(userResp.UserId, 10)
orderReq.BundleName = BundleName //套餐名称
orderReq.Amount = 1500
orderReq.AmountType = 2
//req.BundleCommonUid = bundleDetail.BundleCommonUid
orderReq.TotalAmount = TotalPrice
orderReq.ContractNo = common.GenerateContractNo(lastContractNo)
orderReq.SignContract = signContract
orderReq.SignedTime = common.GetBeijingTime()
orderReq.Status = bundleModel.OrderSigned
orderReq.AddRecords = addRecords
//req.ExpirationTime = expirationDay //过期日期取消 在完成支付是更新
orderReq.PayType = 1
//补充
orderReq.BundleUuid = BundleUuid
orderReq.Language = "en-US"
orderReq.OrderNo = unfinishInfo.OrderNo
_, err = service.BundleProvider.CreateOrderRecord(context.Background(), &orderReq)
if err != nil {
service.Error(c, err)
return
}
fmt.Println("==================== 44444444444444444")
// TODO 3.创建成功的订单和回调 [ok]
////创建对账单 todo 待修改
// outTradeNo就是orderNo根据这个去查询子表的source,如果是2就时单独的子套餐如果是1就是主套餐
orderLimit, err := service.BundleProvider.OrderListByOrderNo(context.Background(), &bundle.OrderInfoByOrderNoRequest{
OrderNo: unfinishInfo.OrderNo,
})
if err != nil {
fmt.Println("=============== antom创建支付查询订单source报错", err)
service.Error(c, err)
return
}
bundleName := "" // 套餐名称
detail, detailErr := service.BundleProvider.OrderRecordsDetail(context.Background(), &bundle.OrderRecordsDetailRequest{
OrderNo: unfinishInfo.OrderNo,
})
if detailErr != nil {
fmt.Println("=============== antom创建支付查询主订单信息报错", detailErr)
service.Error(c, detailErr)
return
}
fmt.Println("detail.OrderRecord.Status :", detail.OrderRecord.Status)
fmt.Println("detail.OrderRecord.CheckoutSessionId :", detail.OrderRecord.CheckoutSessionId)
fmt.Println("detail.OrderRecord.PayTime :", detail.OrderRecord.PayTime)
bundleName = detail.OrderRecord.BundleName
payAmount, err := strconv.ParseFloat(unfinishInfo.OrderPayAmount, 64)
if err != nil {
fmt.Println("转换失败:", err)
return
}
_, err = service.BundleProvider.CreateReconciliation(context.Background(), &bundle.ReconciliationInfo{
BundleOrderOn: unfinishInfo.OrderNo,
BundleAddOrderOn: unfinishInfo.OrderNo,
UserName: unfinishInfo.UserName,
UserTel: unfinishInfo.UserTel,
BundleName: bundleName,
PayAmount: float32(payAmount),
CurrencyType: 2,
PayStatus: 2,
PayTime: unfinishInfo.PayTime,
UserID: uint64(userResp.UserId),
SerialNumber: unfinishInfo.OrderNo,
})
if err != nil {
fmt.Println("=============== antom创建支付创建对账单报错", err)
service.Error(c, err)
return
}
_, updateStatusErr := service.BundleProvider.UpdateOrderRecordByOrderNo(context.Background(), &bundle.OrderRecord{
OrderNo: unfinishInfo.OrderNo,
PayTime: unfinishInfo.PayTime,
Status: bundleModel.OrderPaid,
})
if updateStatusErr != nil {
fmt.Println("=============== antom创建支付更新订单报错", updateStatusErr)
service.Error(c, updateStatusErr)
return
}
//如果是购买套餐 1:创建新的余量信息CreateBundleBalance 2 添加扩展记录BundleExtend
_, err = service.BundleProvider.CreateBundleBalance(context.Background(), &bundle.CreateBundleBalanceReq{
UserId: int32(userResp.UserId),
OrderUUID: orderLimit.OrderUUID,
//AccountNumber: orderLimit.AccountNumber,
//VideoNumber: orderLimit.VideoNumber,
//ImageNumber: orderLimit.ImageNumber,
//DataAnalysisNumber: orderLimit.DataNumber,
ExpansionPacksNumber: 1,
})
if err != nil {
fmt.Println("=============== antom创建支付OrderTypePackage报错", err)
service.Error(c, err)
return
}
var timeUnit uint32
switch orderLimit.Unit {
case "天":
timeUnit = common.TimeUnitDay
case "月":
timeUnit = common.TimeUnitMonth
case "年":
timeUnit = common.TimeUnitYear
default:
timeUnit = 0
}
_, err = service.BundleProvider.BundleExtend(context.Background(), &bundle.BundleExtendRequest{
UserId: int64(orderLimit.UserId),
AccountAdditional: uint32(orderLimit.AccountNumber),
VideoAdditional: uint32(orderLimit.VideoNumber),
ImagesAdditional: uint32(orderLimit.ImageNumber),
DataAdditional: uint32(orderLimit.DataNumber),
AvailableDurationAdditional: uint32(orderLimit.Duration),
TimeUnit: timeUnit,
AssociatedorderNumber: unfinishInfo.OrderNo, //增值服务订单号
Type: 2, //自行购买
OperatorName: orderLimit.UserName,
OperatorId: orderLimit.UserId,
})
if err != nil {
service.Error(c, err)
return
}
fmt.Println("==================== 5555555555555555555")
// TODO 4.软删除未删除信息 [ok]
deleteReq := new(bundle.SoftDeleteUnfinishedInfoRequest)
deleteReq.ID = unfinishInfo.ID
_, deleteErr := service.BundleProvider.SoftDeleteUnfinishedInfo(context.Background(), deleteReq)
if deleteErr != nil {
service.Error(c, deleteErr)
return
}
}
fmt.Println("==================== 66666666666666666")
service.Success(c)
return
}