412 lines
14 KiB
Go
412 lines
14 KiB
Go
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.00"] = 3
|
||
numMap["5600.00"] = 8
|
||
numMap["6500.00"] = 10
|
||
numMap["8500.00"] = 15
|
||
numMap["10500.00"] = 20
|
||
numMap["11500.00"] = 25
|
||
numMap["14100.00"] = 30
|
||
incrMap := make(map[string]float32)
|
||
incrMap["3150.00"] = 1650
|
||
incrMap["5600.00"] = 4100
|
||
incrMap["6500.00"] = 5000
|
||
incrMap["8500.00"] = 7000
|
||
incrMap["10500.00"] = 9000
|
||
incrMap["11500.00"] = 10000
|
||
incrMap["14100.00"] = 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,
|
||
HandlingFee: unfinishInfo.OrderFeeAmount,
|
||
}, &bundle.OrderCreateAddRecord{ //图文
|
||
ServiceType: 2,
|
||
ValueUid: textAndImagesUuid,
|
||
CurrencyType: 2, //美元
|
||
Amount: 0, //增值服务金额
|
||
Num: 120,
|
||
Unit: "个",
|
||
Source: 1,
|
||
PaymentStatus: 1,
|
||
HandlingFee: unfinishInfo.OrderFeeAmount,
|
||
}, &bundle.OrderCreateAddRecord{ //数据报表
|
||
ServiceType: 3,
|
||
ValueUid: reportUuid,
|
||
CurrencyType: 2, //美元
|
||
Amount: 0, //增值服务金额
|
||
Num: 12,
|
||
Unit: "个",
|
||
Source: 1,
|
||
PaymentStatus: 1,
|
||
HandlingFee: unfinishInfo.OrderFeeAmount,
|
||
}, &bundle.OrderCreateAddRecord{ //账号数
|
||
ServiceType: 4,
|
||
ValueUid: accountUuid,
|
||
CurrencyType: 2, //美元
|
||
Amount: 0, //增值服务金额
|
||
Num: 3,
|
||
Unit: "个",
|
||
Source: 1,
|
||
PaymentStatus: 1,
|
||
HandlingFee: unfinishInfo.OrderFeeAmount,
|
||
}, &bundle.OrderCreateAddRecord{ //可用时长
|
||
ServiceType: 5,
|
||
ValueUid: durationUuid,
|
||
CurrencyType: 2, //美元
|
||
Amount: 0, //增值服务金额
|
||
Num: 10,
|
||
Unit: "年",
|
||
Source: 1,
|
||
PaymentStatus: 1,
|
||
HandlingFee: unfinishInfo.OrderFeeAmount,
|
||
},
|
||
)
|
||
// 当前 未将 签名 写入合同中 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
|
||
expirationTime := t.AddDate(10, 0, 0).Format("2006-01-02 15:04:05")
|
||
orderReq.ExpirationTime = expirationTime
|
||
_, 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
|
||
|
||
}
|