289 lines
7.0 KiB
Go
289 lines
7.0 KiB
Go
package upstreamimpl
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"git.5iot.com/iotlcm-public/iotlcm-upstream-chan/internal/consts"
|
|
"git.5iot.com/iotlcm-public/iotlcm-upstream-chan/internal/model"
|
|
|
|
"github.com/gogf/gf/v2/util/gconv"
|
|
)
|
|
|
|
func pickSimQueryParam(simKey *model.SimKey) (string, string) {
|
|
if simKey == nil {
|
|
return "", ""
|
|
}
|
|
if value := strings.TrimSpace(simKey.ICCID); value != "" {
|
|
return "iccid", value
|
|
}
|
|
if value := strings.TrimSpace(simKey.MSISDN); value != "" {
|
|
return "msisdn", value
|
|
}
|
|
if value := strings.TrimSpace(simKey.IMSI); value != "" {
|
|
return "imsi", value
|
|
}
|
|
return "", ""
|
|
}
|
|
|
|
func ydBasicInfoHasIdentity(iccid, msisdn, imsi string) bool {
|
|
return strings.TrimSpace(iccid) != "" || strings.TrimSpace(msisdn) != "" || strings.TrimSpace(imsi) != ""
|
|
}
|
|
|
|
func mapYdStopReasonText(stopReason string) string {
|
|
value := strings.TrimSpace(stopReason)
|
|
if len(value) == 12 && strings.Trim(value, "02") == "" {
|
|
if value == "000000000000" {
|
|
return "未停机或系统暂无停机原因"
|
|
}
|
|
var reasons []string
|
|
for _, code := range []struct {
|
|
position int
|
|
label string
|
|
}{
|
|
{0, "窄带网商品到期失效停机"},
|
|
{1, "机卡分离停机"},
|
|
{3, "M2M管理停机"},
|
|
{4, "信控双向停机"},
|
|
{8, "主动申请双向停机"},
|
|
{9, "区域限制管理型停机"},
|
|
{10, "强制双向停机"},
|
|
} {
|
|
if value[code.position] == '2' {
|
|
reasons = append(reasons, code.label)
|
|
}
|
|
}
|
|
if len(reasons) > 0 {
|
|
if strings.Count(value, "2") == len(reasons) {
|
|
return strings.Join(reasons, "、")
|
|
}
|
|
return strings.Join(reasons, "、") + " (原始码: " + value + ")"
|
|
}
|
|
}
|
|
switch value {
|
|
case "":
|
|
return "未停机"
|
|
case "000000000000":
|
|
return "未停机或系统暂无停机原因"
|
|
case "000000000020":
|
|
return "强制双向停机"
|
|
case "000000002000":
|
|
return "主动申请双向停机"
|
|
case "000020000000":
|
|
return "信控双向停机"
|
|
case "020000000000":
|
|
return "机卡分离停机"
|
|
case "000200000000":
|
|
return "M2M管理停机"
|
|
case "000000000200":
|
|
return "区域限制管理型停机"
|
|
default:
|
|
return value
|
|
}
|
|
}
|
|
|
|
func mapYdFrozenStatusText(frozenStatus string) string {
|
|
value := strings.TrimSpace(frozenStatus)
|
|
switch value {
|
|
case "", "0":
|
|
return "未冻结"
|
|
case "1":
|
|
return "已冻结"
|
|
default:
|
|
return value
|
|
}
|
|
}
|
|
|
|
func mapYdOperatingStatus(status string) string {
|
|
switch strings.ToUpper(strings.TrimSpace(status)) {
|
|
case "1", "01", "ON", "ONLINE":
|
|
return "1"
|
|
case "0", "00", "OFF", "OFFLINE", "-1":
|
|
return "0"
|
|
default:
|
|
return consts.CardSessionStatusUnknown
|
|
}
|
|
}
|
|
|
|
func mapYdDeviceStatus(status string) string {
|
|
return mapYdOperatingStatus(status)
|
|
}
|
|
|
|
func mapDxOperatingStatus(status string) string {
|
|
switch strings.TrimSpace(status) {
|
|
case "0":
|
|
// Telecom NQ007: 0 = power on, 1 = power off.
|
|
return "1"
|
|
case "1":
|
|
return "0"
|
|
default:
|
|
return consts.CardSessionStatusUnknown
|
|
}
|
|
}
|
|
|
|
func pickYdCardBindStatus(result map[string]any) string {
|
|
if len(result) == 0 {
|
|
return ""
|
|
}
|
|
if value := strings.TrimSpace(toString(result["result"])); value != "" {
|
|
switch value {
|
|
case "0", "1", "2":
|
|
return value
|
|
case "OK", "ok":
|
|
return "1"
|
|
}
|
|
}
|
|
for _, key := range []string{"bind_status", "bindStatus", "cardBindStatus", "cardBindingType", "status"} {
|
|
value := strings.TrimSpace(toString(result[key]))
|
|
switch value {
|
|
case "0", "1":
|
|
return value
|
|
case "OK", "ok":
|
|
return "1"
|
|
}
|
|
}
|
|
return ""
|
|
}
|
|
|
|
func pickYdCardBindStatusErrorCode(result map[string]any) string {
|
|
if len(result) == 0 {
|
|
return ""
|
|
}
|
|
for _, key := range []string{"errorCode", "error_code", "errCode", "errcode"} {
|
|
value := strings.TrimSpace(toString(result[key]))
|
|
if value != "" {
|
|
return value
|
|
}
|
|
}
|
|
return ""
|
|
}
|
|
|
|
func pickYdCardBindStatusErrorDes(result map[string]any) string {
|
|
if len(result) == 0 {
|
|
return ""
|
|
}
|
|
for _, key := range []string{"errorDes", "error_des", "errDes", "errMsg", "message"} {
|
|
value := strings.TrimSpace(toString(result[key]))
|
|
if value != "" {
|
|
return value
|
|
}
|
|
}
|
|
return ""
|
|
}
|
|
|
|
func toString(value any) string {
|
|
return strings.TrimSpace(gconv.String(value))
|
|
}
|
|
|
|
func mapDxStopTypeListText(stopTypeList []string) string {
|
|
if len(stopTypeList) == 0 {
|
|
return "未停机"
|
|
}
|
|
texts := make([]string, 0, len(stopTypeList))
|
|
for _, stopType := range stopTypeList {
|
|
switch strings.TrimSpace(stopType) {
|
|
case "":
|
|
continue
|
|
case "100000":
|
|
texts = append(texts, "申请停机")
|
|
case "110000":
|
|
texts = append(texts, "挂失停机")
|
|
case "120000":
|
|
texts = append(texts, "停机保号")
|
|
case "130000":
|
|
texts = append(texts, "欠费停机")
|
|
case "130001":
|
|
texts = append(texts, "欠费单停")
|
|
case "130002":
|
|
texts = append(texts, "欠费双停")
|
|
case "140000":
|
|
texts = append(texts, "预拆机停机")
|
|
case "150000":
|
|
texts = append(texts, "违章停机")
|
|
case "150001":
|
|
texts = append(texts, "未实名制违规停机")
|
|
case "160000":
|
|
texts = append(texts, "数据异常停机")
|
|
case "170000":
|
|
texts = append(texts, "局方原因停机")
|
|
case "180000":
|
|
texts = append(texts, "强制停机")
|
|
case "190000":
|
|
texts = append(texts, "超范围使用违规停机")
|
|
case "200000":
|
|
texts = append(texts, "去激活停机")
|
|
case "210000":
|
|
texts = append(texts, "紧急停机")
|
|
case "220000":
|
|
texts = append(texts, "安全事件关停")
|
|
case "230000":
|
|
texts = append(texts, "到期停机")
|
|
case "240000":
|
|
texts = append(texts, "公免到期停机")
|
|
case "250000":
|
|
texts = append(texts, "限额管控停机")
|
|
case "260000":
|
|
texts = append(texts, "欺诈停机")
|
|
case "270000":
|
|
texts = append(texts, "模组融合停机")
|
|
case "280100":
|
|
texts = append(texts, "区域限制停机")
|
|
default:
|
|
texts = append(texts, strings.TrimSpace(stopType))
|
|
}
|
|
}
|
|
if len(texts) == 0 {
|
|
return "未停机"
|
|
}
|
|
return strings.Join(texts, "、")
|
|
}
|
|
|
|
func mapDxRegionLimitStatus(areaLimitType string, areaLimitInfo string) string {
|
|
areaLimitType = strings.TrimSpace(areaLimitType)
|
|
areaLimitInfo = strings.TrimSpace(areaLimitInfo)
|
|
if areaLimitType == "" || areaLimitType == "-1" || areaLimitType == "0" {
|
|
if areaLimitInfo == "" {
|
|
return "1"
|
|
}
|
|
}
|
|
return "0"
|
|
}
|
|
|
|
func mapDxRegionLimitStatusByOrder(orderStatus string, limitStatus string) string {
|
|
orderStatus = strings.TrimSpace(orderStatus)
|
|
limitStatus = strings.TrimSpace(limitStatus)
|
|
switch {
|
|
case orderStatus == "1":
|
|
return "2"
|
|
case orderStatus == "0" && limitStatus == "0":
|
|
return "1"
|
|
case orderStatus == "0" && limitStatus == "1":
|
|
return "0"
|
|
case orderStatus == "0" && limitStatus == "-":
|
|
return "2"
|
|
default:
|
|
return "2"
|
|
}
|
|
}
|
|
|
|
func normalizeDxRegionLimitDetails(orderStatus string, limitStatus string, limitType string, limitArea string) (string, string, string) {
|
|
if strings.TrimSpace(orderStatus) != "0" {
|
|
return "", "", ""
|
|
}
|
|
|
|
switch strings.TrimSpace(limitStatus) {
|
|
case "0", "1", "-":
|
|
limitStatus = strings.TrimSpace(limitStatus)
|
|
default:
|
|
limitStatus = ""
|
|
}
|
|
|
|
switch strings.TrimSpace(limitType) {
|
|
case "1", "2", "3", "4":
|
|
limitType = strings.TrimSpace(limitType)
|
|
default:
|
|
limitType = ""
|
|
}
|
|
|
|
return limitStatus, limitType, strings.TrimSpace(limitArea)
|
|
}
|