This commit is contained in:
suyl
2021-09-06 10:49:12 +08:00
parent f5f8bdb199
commit 46f705278f
6 changed files with 76 additions and 11 deletions

View File

@@ -0,0 +1,242 @@
package secretNumber
import (
"fmt"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/baseapi/utils/errlist"
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
"git.rosy.net.cn/jx-callback/business/model"
"git.rosy.net.cn/jx-callback/business/model/dao"
"git.rosy.net.cn/jx-callback/business/partner"
"git.rosy.net.cn/jx-callback/globals/api"
"github.com/alibabacloud-go/dyplsapi-20170525/client"
"github.com/alibabacloud-go/tea/tea"
"strings"
)
//查询线上可购号码余量
func QuerySecretNoRemain(city string) (b bool, err error) {
result, err := api.SecretNumClient.QuerySecretNoRemain(&client.QuerySecretNoRemainRequest{
SpecId: tea.Int64(1), //1虚商号码即170或171。
City: tea.String(city), //城市名
})
if err != nil {
return false, err
}
if tea.StringValue(result.Body.Code) != "OK" {
err = fmt.Errorf(tea.StringValue(result.Body.Message))
return false, err
}
if tea.Int64Value(result.Body.SecretRemainDTO.Amount) > 0 {
return true, nil
}
return false, err
}
//购买号码
func BuySecretNo(ctx *jxcontext.Context, poolKey, city string) (err error) {
result, err := api.SecretNumClient.BuySecretNo(&client.BuySecretNoRequest{
PoolKey: tea.String(poolKey),
SpecId: tea.Int64(1),
City: tea.String(city),
})
if err != nil {
return err
}
if tea.StringValue(result.Body.Code) != "OK" {
err = fmt.Errorf(tea.StringValue(result.Body.Message))
return err
}
if secretNo := tea.StringValue(result.Body.SecretBuyInfoDTO.SecretNo); secretNo != "" {
secretNumber := &model.SecretNumber{
City: city,
Number: secretNo,
PoolKey: poolKey,
}
dao.WrapAddIDCULDEntity(secretNumber, ctx.GetUserName())
err = dao.CreateEntity(dao.GetDB(), secretNumber)
}
return err
}
//绑定号码
func BindAxb(ctx *jxcontext.Context, secretNumber, numberA, numberB, expiration string) (err error) {
result, err := api.SecretNumClient.BindAxb(&client.BindAxbRequest{
PhoneNoA: tea.String(numberA),
PhoneNoB: tea.String(numberB),
PhoneNoX: tea.String(secretNumber),
Expiration: tea.String(expiration),
})
if err != nil {
return err
}
if tea.StringValue(result.Body.Code) != "OK" {
err = fmt.Errorf(tea.StringValue(result.Body.Message))
return err
}
return err
}
//查询绑定唯一标识SubsId
func QuerySubsId(poolKey, secretNumber string) (subIDs string, err error) {
result, err := api.SecretNumClient.QuerySubsId(&client.QuerySubsIdRequest{
PoolKey: tea.String(poolKey),
PhoneNoX: tea.String(secretNumber),
})
if err != nil {
return "", err
}
if tea.StringValue(result.Body.Code) != "OK" {
err = fmt.Errorf(tea.StringValue(result.Body.Message))
return "", err
}
//多个绑定关系是返回的逗号间隔的
if tea.StringValue(result.Body.SubsId) != "" {
return *result.Body.SubsId, nil
}
return "", err
}
type QuerySubscriptionDetailResult struct {
Status int `json:"status"` //该绑定关系的状态。其中0已失效。1生效中。
NumberA string `json:"numberA"`
NumberB string `json:"numberB"`
NumberX string `json:"numberX"`
GmtCreate string `json:"gmtCreate"` //绑定时间
ExpireDate string `json:"expireDate"` //绑定过期时间
SubsID string `json:"subsID"` //绑定ID
PoolKey string `json:"poolKey"`
}
//查询号码的绑定关系
func QuerySubscriptionDetail(poolKey, phoneNoX string) (querySubscriptionDetailResult []*QuerySubscriptionDetailResult, err error) {
subIDs, err := QuerySubsId(poolKey, phoneNoX)
if err != nil {
return querySubscriptionDetailResult, fmt.Errorf("查询号码绑定关系ID错误err: %v", err)
}
errList := errlist.New()
for _, v := range strings.Split(subIDs, ",") {
result, err2 := api.SecretNumClient.QuerySubscriptionDetail(&client.QuerySubscriptionDetailRequest{
PoolKey: tea.String(poolKey),
SubsId: tea.String(v),
PhoneNoX: tea.String(phoneNoX),
})
if err2 != nil {
errList.AddErr(err2)
continue
}
if tea.StringValue(result.Body.Code) != "OK" {
errList.AddErr(fmt.Errorf(tea.StringValue(result.Body.Message)))
continue
}
dto := result.Body.SecretBindDetailDTO
r := &QuerySubscriptionDetailResult{
Status: int(tea.Int64Value(dto.Status)),
NumberA: tea.StringValue(dto.PhoneNoA),
NumberB: tea.StringValue(dto.PhoneNoB),
NumberX: tea.StringValue(dto.PhoneNoX),
GmtCreate: tea.StringValue(dto.GmtCreate),
ExpireDate: tea.StringValue(dto.ExpireDate),
SubsID: v,
PoolKey: poolKey,
}
querySubscriptionDetailResult = append(querySubscriptionDetailResult, r)
}
return querySubscriptionDetailResult, err
}
//修改绑定关系
//修改哪个字段就传哪个字段
//updateNoA修改A号码。
//updateNoB修改B号码。
//updateExpire修改绑定关系有效期。
func UpdateSubscription(poolKey, subsId, phoneNoX, phoneNoA, phoneNoB, expiration string) (err error) {
params := &client.UpdateSubscriptionRequest{
PoolKey: tea.String(poolKey),
SubsId: tea.String(subsId),
PhoneNoX: tea.String(phoneNoX),
}
if phoneNoA != "" {
params.OperateType = tea.String("updateNoA")
params.PhoneNoA = tea.String(phoneNoA)
}
if phoneNoB != "" {
params.OperateType = tea.String("updateNoB")
params.PhoneNoB = tea.String(phoneNoB)
}
if expiration != "" {
params.OperateType = tea.String("updateExpire")
params.Expiration = tea.String(expiration)
}
result, err := api.SecretNumClient.UpdateSubscription(params)
if err != nil {
return err
}
if tea.StringValue(result.Body.Code) != "OK" {
err = fmt.Errorf(tea.StringValue(result.Body.Message))
return err
}
return err
}
//解除号码的绑定关系
func UnbindSubscription(poolKey, subsId, phoneNoX string) (err error) {
result, err := api.SecretNumClient.UnbindSubscription(&client.UnbindSubscriptionRequest{
PoolKey: tea.String(poolKey),
SubsId: tea.String(subsId),
SecretNo: tea.String(phoneNoX),
})
if err != nil {
return err
}
if tea.StringValue(result.Body.Code) != "OK" {
err = fmt.Errorf(tea.StringValue(result.Body.Message))
return err
}
return err
}
type SecretNumberMsgRes struct {
PhoneNo string `json:"phone_no"`
PoolKey string `json:"pool_key"`
City string `json:"city"`
SubID int64 `json:"sub_id"`
UnconnectedCause int `json:"unconnected_cause"`
CallTime string `json:"call_time"`
CallOutTime string `json:"call_out_time"`
PeerNo string `json:"peer_no"`
CalledDisplayNo string `json:"called_display_no"`
ReleaseDir int `json:"release_dir"`
RingTime string `json:"ring_time"`
CallID string `json:"call_id"`
StartTime string `json:"start_time"`
CallStatus string `json:"call_status"`
FreeRingTime string `json:"free_ring_time"`
PartnerKey string `json:"partner_key"`
ControlMsg string `json:"control_msg"`
ID int64 `json:"id"`
SecretNo string `json:"secret_no"`
CallType int `json:"call_type"`
ReleaseCause int `json:"release_cause"`
ControlType string `json:"control_type"`
ReleaseTime string `json:"release_time"`
}
func CallbackBrandBill(res *SecretNumberMsgRes) (err error) {
var (
db = dao.GetDB()
)
if brands, _ := dao.GetBrands(db, "", 0, res.PoolKey); len(brands) > 0 {
if brandID := brands[0].ID; brandID != 0 {
price := utils.Float64TwoInt(utils.Str2Time(res.ReleaseTime).Sub(utils.Str2Time(res.StartTime)).Minutes()+1) * 6
if err = partner.CurStoreAcctManager.InsertBrandBill(jxcontext.AdminCtx, brandID, price, model.BrandBillTypeExpend, model.BrandBillFeeTypeSecretNumber, ""); err == nil {
//计算余额小于10就解绑
balance, _ := partner.CurStoreAcctManager.GetBrandBalance(brandID)
if balance < model.BrandBalanceLimit {
}
}
}
}
return err
}

View File

@@ -4,7 +4,7 @@ import (
"bytes"
"context"
"fmt"
"git.rosy.net.cn/jx-callback/business/jxutils/secretNumber"
"git.rosy.net.cn/jx-callback/business/jxstore/secretNumber"
"net"
"regexp"
"strconv"