zhangzengfei
2023-11-28 3a706d3378aa3626501370352963883fd2783558
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
package service
 
import (
    "basic.com/pubsub/protomsg.git"
    "basic.com/valib/bhomeclient.git"
    "basic.com/valib/licence.git"
    "basic.com/valib/logger.git"
    "encoding/json"
    "errors"
    "github.com/satori/go.uuid"
    "time"
    "vamicro/appcenter-service/models"
    "vamicro/appcenter-service/vo"
    "vamicro/config"
    "vamicro/extend/util"
)
 
type SdkService struct {
    bk bhomeclient.Broker
}
 
func NewSdkService(broker bhomeclient.Broker) *SdkService {
    return &SdkService{
        bk: broker,
    }
}
 
type res struct {
    Code    int         `json:"code"`
    Success bool        `json:"success"`
    Msg     string      `json:"msg"`
    Data    interface{} `json:"data"`
}
 
func GetLicenseFromShopCenter(sdkId string) (string, error) {
    url := "http://" + util.GetShopUrl() + "/data/api-s/sdk/dev/license"
    machineCode := licence.GetMachineCode()
    logger.Debug("url:", url, "machineCode:", machineCode)
    paramBody := map[string]interface{}{
        "devId": config.Server.AnalyServerId,
        "sdkId": sdkId,
    }
    header := map[string]string{
        "Authorization": token,
    }
    respBody, err := util.DoPostRequest(url, util.CONTENT_TYPE_JSON, paramBody, nil, header, time.Second*2)
    if err != nil {
        logger.Debug("DoPostRequest err:", err)
        return "", nil
    }
    var r res
    if err = json.Unmarshal(respBody, &r); err != nil {
        logger.Debug("unmarshal err:", err)
        return "", nil
    }
    bts, _ := json.Marshal(r.Data)
    var m map[string]interface{}
    if err := json.Unmarshal(bts, &m); err != nil {
        return "", err
    }
    if lce, ok := m["license"]; ok {
        return lce.(string), nil
    }
    return "", errors.New("未获取到授权信息")
}
 
//实时监视本机算法是否已授权
func (sv SdkService) WatchLicense() {
    for {
        var sdkE models.Sdk
        sdks, err := sdkE.FindAll("")
        if err == nil && sdks != nil {
            for _, s := range sdks {
                if s.AuthState3rd == models.AuthState3rd_UnAuth || s.AuthState3rd == models.AuthState3rd_expired {
                    //查看商城中此算法是否已更新授权信息
                    if lceStr, err := GetLicenseFromShopCenter(s.Id); err == nil {
                        sdkE.Update3rdLicense(s.Id, lceStr, models.AuthState3rd_Authed)
                    }
                }
            }
        }
        time.Sleep(10 * time.Second)
    }
}
 
func (sv SdkService) Register(argBody *vo.SdkRegisterVo) bool {
    var err error
    tx := models.GetDB().Begin()
    defer func() {
        if err != nil && tx != nil {
            tx.Rollback()
        }
    }()
 
    var sdkE models.Sdk
    rows, _ := sdkE.SelectById(argBody.Id)
    registerSdk := argBody.Copy2Sdk()
    if rows > 0 {
        //update
        if err = tx.Table(sdkE.TableName()).Save(&registerSdk).Error; err != nil {
            return false
        }
    } else {
        if err = tx.Table(sdkE.TableName()).Create(&registerSdk).Error; err != nil {
            logger.Debug("register create sdk err:", err)
            return false
        }
    }
    //deal args
    if err = tx.Exec("delete from sdk_arg where sdk_id=?", sdkE.Id).Error; err != nil {
        logger.Debug("register del sdkarg err:", err)
        return false
    }
    if argBody.Args != nil {
        for _, argVo := range argBody.Args {
            if argVo.Name == "" || argVo.Alias == "" || argVo.Type == "" {
                err = errors.New("sdk arg error")
                logger.Debug("register sdk err:", err)
                return false
            }
            sdkArgE := models.SdkArgEntity{
                Id:    uuid.NewV4().String(),
                SdkId: argBody.Id,
                Scope: argVo.Scope,
            }
            sdkArgE.SdkArg = argVo.Copy2SdkArg()
            if sdkArgE.ArgType == "" {
                sdkArgE.ArgType = "target" //如果为空,认为是目标
            }
            if err = tx.Table(sdkArgE.TableName()).Create(&sdkArgE).Error; err != nil {
                logger.Debug("register sdk err:", err)
                return false
            }
 
            //处理算法参数枚举值
            if err = tx.Exec("delete from dictionary where type=?", argVo.Alias).Error; err != nil {
                logger.Debug("register sdk err:", err)
                return false
            }
            if argVo.Dics != nil && len(argVo.Dics) > 0 {
                for _, argValEle := range argVo.Dics {
                    argValDic := models.Dictionary{
                        Id:       uuid.NewV4().String(),
                        Value:    argValEle.Value,
                        Name:     argValEle.Name,
                        Type:     argVo.Alias,
                        Sort:     argValEle.Sort,
                        ParentId: argBody.Id, //属于哪个算法
                    }
                    if err = tx.Table(argValDic.TableName()).Create(&argValDic).Error; err != nil {
                        logger.Debug("register sdk err:", err)
                        return false
                    }
                }
            }
        }
    }
    tx.Commit()
    sv.AddDbChangeMsg(protomsg.DbAction_Insert)
    return true
}
 
func (sv SdkService) AddDbChangeMsg(action protomsg.DbAction) {
    pMsg := protomsg.DbChangeMessage{
        Table:  protomsg.TableChanged_T_Sdk,
        Action: action,
    }
    pb, _ := json.Marshal(pMsg)
    sv.bk.Publish(ProcName, pb)
}