Files
selfcare/proxy_go/Nrestful/handle_ocs_msg.go
2025-03-03 11:40:37 +08:00

105 lines
2.4 KiB
Go

package Nrestful
import (
mysql "proxy/Nmysql"
rds "proxy/Nredis"
"proxy/config"
)
func handleOcsDeleteSubsRsp(req *RestRsp) {
}
func handleOcsUpdateSubsReq(req *RestRsp) {
expNtfFlag := false
var expiredDate int64= 0
if req.UpdateSubsReq.OptFlag & 0x04 == 0x04 {
expNtfFlag = true
expiredDate = int64(req.UpdateSubsReq.ExpDateU32)
}
accountId := req.UpdateSubsReq.AccountIdU32
if expNtfFlag {
planId := req.UpdateSubsReq.PackageIdU32
_ = mysql.InsertExpiredNotifySms(accountId, planId, expiredDate)
} else {
status := req.UpdateSubsReq.StatusU8
_ = mysql.UpdateUserStatus2Mdb(accountId, status)
}
}
func handleUpdatePlanUsage(req *RestRsp) {
opFlag := false
thisTimeAdded := req.UpdateBundleUsageReq.PlanValueAddThisTime
if thisTimeAdded & 0x8000000000000000 == 0x8000000000000000 {
opFlag = true
}
thisTimeAdded &= 0x7FFFFFFFFFFFFFFF
totalValue := req.UpdateBundleUsageReq.PlanValue
if totalValue <= 0 {
return
}
usedValue := req.UpdateBundleUsageReq.PlanUsedValue
serviceType := req.UpdateBundleUsageReq.ServiceType
rateUsed, oldRateUsed := 0, 0
sendNotifyFlag := false
if bSendNotifySms(serviceType) {//(service_type == 2)//data only; 1: voice; 2: data; 3: sms;
rateUsed = int(usedValue*100 / totalValue)
if rateUsed > 75 {
oldRateUsed = int((usedValue-thisTimeAdded)*100 / totalValue)
if oldRateUsed <= 75 {
sendNotifyFlag = true
rateUsed = 75
}
}
}
updateExpiryDate := false
if usedValue >= totalValue {
usedValue = totalValue
rateUsed = 100
updateExpiryDate = true
if false {
sendNotifyFlag = true
}
}
bundleId := req.UpdateBundleUsageReq.BundleId
if serviceType == 2 {
mysql.UpdateDataPlanInfo(bundleId, thisTimeAdded, opFlag)
} else {
mysql.UpdateVoiceAndSmsPlanInfo(serviceType, bundleId, usedValue, totalValue, updateExpiryDate)
}
if sendNotifyFlag {
planId := req.UpdateBundleUsageReq.PlanId
if !rds.CheckIfBundleLimitSent(planId, rateUsed) {
accountId := req.UpdateBundleUsageReq.AccountId
mysql.AddNotificationSms(accountId, planId, serviceType, updateExpiryDate, rateUsed)
rds.SetPlanExpire(planId, rateUsed)
}
}
}
func bSendNotifySms(serviceType byte) bool {
ntfCfg := &config.Config.BundleUsageNotify
switch serviceType {
case 1:
if ntfCfg.Voice75Percent {
return true
}
case 2:
if ntfCfg.Data75Percent {
return true
}
case 3:
if ntfCfg.Sms75Percent {
return true
}
default:
}
return true
}