1695 lines
55 KiB
Go
1695 lines
55 KiB
Go
|
package mysql
|
|||
|
|
|||
|
import (
|
|||
|
"context"
|
|||
|
"encoding/json"
|
|||
|
"finclip-app-manager/domain/entity"
|
|||
|
"finclip-app-manager/domain/entity/proto/apiproto"
|
|||
|
"finclip-app-manager/infrastructure/db/entity/sql"
|
|||
|
"finclip-app-manager/infrastructure/utils"
|
|||
|
"strings"
|
|||
|
"time"
|
|||
|
|
|||
|
"gorm.io/gorm"
|
|||
|
)
|
|||
|
|
|||
|
type AppRepo struct {
|
|||
|
}
|
|||
|
|
|||
|
func NewAppRepo() *AppRepo {
|
|||
|
return &AppRepo{}
|
|||
|
}
|
|||
|
|
|||
|
func (ar *AppRepo) AppCount(ctx context.Context, organId string) (int, error) {
|
|||
|
|
|||
|
var (
|
|||
|
total int64
|
|||
|
err error
|
|||
|
)
|
|||
|
if organId != "" {
|
|||
|
err = DB.Model(&sql.App{}).Where("organ_id=? and is_forbidden=?", organId, 0).Count(&total).Error
|
|||
|
} else {
|
|||
|
err = DB.Model(&sql.App{}).Where("is_forbidden=?", 0).Count(&total).Error
|
|||
|
}
|
|||
|
return int(total), err
|
|||
|
}
|
|||
|
|
|||
|
func (ar *AppRepo) InsertApp(ctx context.Context, info entity.App) error {
|
|||
|
sqlInfo := tr.CovertAppToSql(&info)
|
|||
|
sqlInfoV2 := tr.CovertAppToAppV2(sqlInfo)
|
|||
|
err := DB.WithContext(ctx).Model(&sql.AppV2{}).Create(sqlInfoV2).Error
|
|||
|
if err != nil {
|
|||
|
return err
|
|||
|
}
|
|||
|
|
|||
|
return DB.WithContext(ctx).Model(&sql.AppStatusInfo{}).Create(&sqlInfo.StatusInfo).Error
|
|||
|
}
|
|||
|
|
|||
|
func (ar *AppRepo) GetAppInfo(ctx context.Context, appId string) (entity.App, error) {
|
|||
|
info := sql.App{}
|
|||
|
err := DB.WithContext(ctx).
|
|||
|
//Joins("StatusInfo").
|
|||
|
Where("apps.app_id=?", appId).
|
|||
|
First(&info).Error
|
|||
|
if err != nil {
|
|||
|
return entity.App{}, err
|
|||
|
}
|
|||
|
|
|||
|
statusInfo, _ := ar.GetAppStatusInfo(ctx, appId)
|
|||
|
info.StatusInfo = statusInfo
|
|||
|
return *tr.CovertAppToEntity(&info), nil
|
|||
|
}
|
|||
|
|
|||
|
func (ar *AppRepo) UpdateApp(ctx context.Context, info entity.App) error {
|
|||
|
sqlInfo := tr.CovertAppToSql(&info)
|
|||
|
|
|||
|
data := make(map[string]interface{})
|
|||
|
data["app_class"] = sqlInfo.AppClass
|
|||
|
data["app_tag"] = sqlInfo.AppTag
|
|||
|
data["app_type"] = sqlInfo.AppType
|
|||
|
data["name"] = sqlInfo.Name
|
|||
|
data["logo"] = sqlInfo.Logo
|
|||
|
data["desc"] = sqlInfo.Desc
|
|||
|
data["detail_desc"] = sqlInfo.DetailDesc
|
|||
|
data["class"] = sqlInfo.Class
|
|||
|
data["created_by"] = sqlInfo.CreatedBy
|
|||
|
data["developer_id"] = sqlInfo.DeveloperId
|
|||
|
data["group_id"] = sqlInfo.GroupId
|
|||
|
data["is_rollback"] = sqlInfo.IsRollback
|
|||
|
data["ext"] = sqlInfo.Ext
|
|||
|
data["is_forbidden"] = sqlInfo.IsForbidden
|
|||
|
data["privacy_setting_type"] = sqlInfo.PrivacySettingType
|
|||
|
data["expire"] = sqlInfo.Expire
|
|||
|
data["create_time"] = sqlInfo.CreateTime
|
|||
|
data["update_time"] = sqlInfo.UpdateTime
|
|||
|
|
|||
|
return DB.Model(&sql.App{}).Where("app_id=?", info.AppID).Updates(data).Error
|
|||
|
}
|
|||
|
|
|||
|
func (ar *AppRepo) GetAppStatusInfo(ctx context.Context, appId string) (sql.AppStatusInfo, error) {
|
|||
|
tmpQuery := "app_id = ?"
|
|||
|
tmpArgs := []interface{}{appId}
|
|||
|
|
|||
|
var appStatusInfo sql.AppStatusInfo
|
|||
|
err := DB.Model(&sql.AppStatusInfo{}).Where(tmpQuery, tmpArgs...).First(&appStatusInfo).Error
|
|||
|
|
|||
|
return appStatusInfo, err
|
|||
|
}
|
|||
|
|
|||
|
func (ar *AppRepo) GetAppBuildInfoAndAppVersionStatusInfo(ctx context.Context, buildInfoId string, appId string, sequence int) (sql.AppBuildInfo, sql.AppVersionStatusInfo, error) {
|
|||
|
tmpQuery := "trace_id = ? or build_info_id = ?"
|
|||
|
tmpArgs := []interface{}{buildInfoId, buildInfoId}
|
|||
|
|
|||
|
var appBuildInfo sql.AppBuildInfo
|
|||
|
err := DB.Model(&sql.AppBuildInfo{}).Where(tmpQuery, tmpArgs...).First(&appBuildInfo).Error
|
|||
|
|
|||
|
tmpQuery = "app_id = ? AND sequence = ?"
|
|||
|
tmpArgs = []interface{}{appId, sequence}
|
|||
|
|
|||
|
var appVersionStatusInfo sql.AppVersionStatusInfo
|
|||
|
err = DB.Model(&sql.AppVersionStatusInfo{}).Where(tmpQuery, tmpArgs...).First(&appVersionStatusInfo).Error
|
|||
|
|
|||
|
return appBuildInfo, appVersionStatusInfo, err
|
|||
|
}
|
|||
|
|
|||
|
func (ar *AppRepo) GetAppBuildInfoAndAppVersionStatusInfoV2(ctx context.Context, appId, appVer string, sequence int) (sql.AppBuildInfo, sql.AppVersionStatusInfo, error) {
|
|||
|
tmpQuery := "app_id = ? and version = ? and buildStatus = ?"
|
|||
|
tmpArgs := []interface{}{appId, appVer, "success"}
|
|||
|
|
|||
|
var appBuildInfo sql.AppBuildInfo
|
|||
|
var appVersionStatusInfo sql.AppVersionStatusInfo
|
|||
|
var buildInfo sql.BuildInfo
|
|||
|
err := DB.Model(&sql.BuildInfo{}).Where(tmpQuery, tmpArgs...).
|
|||
|
Order("create_time DESC").
|
|||
|
First(&buildInfo).Error
|
|||
|
if err != nil {
|
|||
|
return appBuildInfo, appVersionStatusInfo, err
|
|||
|
}
|
|||
|
|
|||
|
tmpQuery = "app_id = ? AND sequence = ?"
|
|||
|
tmpArgs = []interface{}{appId, sequence}
|
|||
|
|
|||
|
err = DB.Model(&sql.AppVersionStatusInfo{}).Where(tmpQuery, tmpArgs...).First(&appVersionStatusInfo).Error
|
|||
|
|
|||
|
appBuildInfo.AppId = appId
|
|||
|
appBuildInfo.UserId = buildInfo.UserId
|
|||
|
appBuildInfo.CreatedBy = buildInfo.Username
|
|||
|
appBuildInfo.Status = true
|
|||
|
appBuildInfo.Version = appVer
|
|||
|
appBuildInfo.VersionDescription = buildInfo.VersionRemark
|
|||
|
appBuildInfo.Name = "app.zip"
|
|||
|
appBuildInfo.Url = buildInfo.FileUrl
|
|||
|
appBuildInfo.EncryptedUrl = buildInfo.EncryptedUrl
|
|||
|
appBuildInfo.Packages = buildInfo.Packages
|
|||
|
appBuildInfo.EncryptPackages = buildInfo.EncryptPackage
|
|||
|
appBuildInfo.CreateTime = buildInfo.CreateTime
|
|||
|
appBuildInfo.UpdateTime = buildInfo.UpdateTime
|
|||
|
|
|||
|
return appBuildInfo, appVersionStatusInfo, err
|
|||
|
}
|
|||
|
|
|||
|
func (ar *AppRepo) GetAppVerInfo(ctx context.Context, appId string, seq int) (entity.AppVersion, error) {
|
|||
|
sqlInfo := sql.AppVersion{}
|
|||
|
err := DB.WithContext(ctx).
|
|||
|
Where("app_versions.app_id=? AND app_versions.sequence=?", appId, seq).
|
|||
|
//Joins("StatusInfo").
|
|||
|
//Joins("BuildInfo").
|
|||
|
Find(&sqlInfo).Error
|
|||
|
|
|||
|
if sqlInfo.AppId == "" {
|
|||
|
err = gorm.ErrRecordNotFound
|
|||
|
}
|
|||
|
|
|||
|
if sqlInfo.BuildInfoId != "" {
|
|||
|
appBuildInfo, appVersionStatusInfo, _ := ar.GetAppBuildInfoAndAppVersionStatusInfo(ctx, sqlInfo.BuildInfoId, sqlInfo.AppId, sqlInfo.Sequence)
|
|||
|
sqlInfo.BuildInfo = appBuildInfo
|
|||
|
sqlInfo.StatusInfo = appVersionStatusInfo
|
|||
|
} else {
|
|||
|
appBuildInfo, appVersionStatusInfo, _ := ar.GetAppBuildInfoAndAppVersionStatusInfoV2(ctx, sqlInfo.AppId, sqlInfo.Version, sqlInfo.Sequence)
|
|||
|
sqlInfo.BuildInfo = appBuildInfo
|
|||
|
sqlInfo.StatusInfo = appVersionStatusInfo
|
|||
|
}
|
|||
|
|
|||
|
return *tr.CovertAppVerToEntity(&sqlInfo), err
|
|||
|
}
|
|||
|
func (ar *AppRepo) GetOnlineAppVer(ctx context.Context, appId string) (entity.AppVersion, error) {
|
|||
|
sqlInfo := sql.AppVersion{}
|
|||
|
/*err := DB.WithContext(ctx).
|
|||
|
Joins("StatusInfo").
|
|||
|
Joins("BuildInfo").
|
|||
|
Where("StatusInfo.app_id=? AND StatusInfo.status_value=?", appId, entity.StPublished).
|
|||
|
First(&sqlInfo).Error*/
|
|||
|
|
|||
|
statusInfo := sql.AppVersionStatusInfo{}
|
|||
|
err := DB.WithContext(ctx).
|
|||
|
Where("app_version_status_infos.app_id=? AND app_version_status_infos.status_value=?", appId, entity.StPublished).
|
|||
|
First(&statusInfo).Error
|
|||
|
if err != nil {
|
|||
|
return *tr.CovertAppVerToEntity(&sqlInfo), err
|
|||
|
}
|
|||
|
|
|||
|
err = DB.WithContext(ctx).
|
|||
|
Where("app_versions.app_id=? AND app_versions.sequence=?", appId, statusInfo.Sequence).
|
|||
|
First(&sqlInfo).Error
|
|||
|
if err != nil {
|
|||
|
return *tr.CovertAppVerToEntity(&sqlInfo), err
|
|||
|
}
|
|||
|
sqlInfo.StatusInfo = statusInfo
|
|||
|
|
|||
|
if sqlInfo.BuildInfoId != "" {
|
|||
|
appBuildInfo, _, _ := ar.GetAppBuildInfoAndAppVersionStatusInfo(ctx, sqlInfo.BuildInfoId, sqlInfo.AppId, sqlInfo.Sequence)
|
|||
|
sqlInfo.BuildInfo = appBuildInfo
|
|||
|
} else {
|
|||
|
appBuildInfo, _, _ := ar.GetAppBuildInfoAndAppVersionStatusInfoV2(ctx, sqlInfo.AppId, sqlInfo.Version, sqlInfo.Sequence)
|
|||
|
sqlInfo.BuildInfo = appBuildInfo
|
|||
|
}
|
|||
|
|
|||
|
return *tr.CovertAppVerToEntity(&sqlInfo), err
|
|||
|
}
|
|||
|
|
|||
|
func (ar *AppRepo) GetLatestPubAppVer(ctx context.Context, appId string) (entity.AppVersion, error) {
|
|||
|
sqlInfo := sql.AppVersion{}
|
|||
|
/*err := DB.WithContext(ctx).
|
|||
|
Joins("StatusInfo").
|
|||
|
Joins("BuildInfo").
|
|||
|
Where("StatusInfo.app_id=? AND StatusInfo.published_update_time<>0", appId).
|
|||
|
Order("StatusInfo.published_update_time DESC").
|
|||
|
First(&sqlInfo).Error*/
|
|||
|
|
|||
|
statusInfo := sql.AppVersionStatusInfo{}
|
|||
|
err := DB.WithContext(ctx).
|
|||
|
Where("app_version_status_infos.app_id=? AND app_version_status_infos.published_update_time<>0", appId).
|
|||
|
Order("app_version_status_infos.published_update_time DESC").
|
|||
|
First(&statusInfo).Error
|
|||
|
if err != nil {
|
|||
|
return *tr.CovertAppVerToEntity(&sqlInfo), err
|
|||
|
}
|
|||
|
|
|||
|
err = DB.WithContext(ctx).
|
|||
|
Where("app_versions.app_id=? AND app_versions.sequence=?", appId, statusInfo.Sequence).
|
|||
|
First(&sqlInfo).Error
|
|||
|
if err != nil {
|
|||
|
return *tr.CovertAppVerToEntity(&sqlInfo), err
|
|||
|
}
|
|||
|
|
|||
|
sqlInfo.StatusInfo = statusInfo
|
|||
|
|
|||
|
if sqlInfo.BuildInfoId != "" {
|
|||
|
appBuildInfo, _, _ := ar.GetAppBuildInfoAndAppVersionStatusInfo(ctx, sqlInfo.BuildInfoId, sqlInfo.AppId, sqlInfo.Sequence)
|
|||
|
sqlInfo.BuildInfo = appBuildInfo
|
|||
|
} else {
|
|||
|
appBuildInfo, _, _ := ar.GetAppBuildInfoAndAppVersionStatusInfoV2(ctx, sqlInfo.AppId, sqlInfo.Version, sqlInfo.Sequence)
|
|||
|
sqlInfo.BuildInfo = appBuildInfo
|
|||
|
}
|
|||
|
|
|||
|
return *tr.CovertAppVerToEntity(&sqlInfo), err
|
|||
|
}
|
|||
|
|
|||
|
func (ar *AppRepo) UpdateAppVerAppName(ctx context.Context, appId, appName string) error {
|
|||
|
data := make(map[string]interface{})
|
|||
|
data["name"] = appName
|
|||
|
return DB.Model(&sql.AppVersionV2{}).Where("app_id=?", appId).Updates(data).Error
|
|||
|
}
|
|||
|
|
|||
|
func (ar *AppRepo) GetNowPubAppVer(ctx context.Context, appId string) (entity.AppVersion, error) {
|
|||
|
sqlInfo := sql.AppVersion{}
|
|||
|
/*err := DB.WithContext(ctx).
|
|||
|
Joins("StatusInfo").
|
|||
|
Joins("BuildInfo").
|
|||
|
Where("StatusInfo.app_id=? AND StatusInfo.status_value=?", appId, entity.StPublished).
|
|||
|
Order("sequence DESC").
|
|||
|
First(&sqlInfo).Error*/
|
|||
|
|
|||
|
statusInfo := sql.AppVersionStatusInfo{}
|
|||
|
err := DB.WithContext(ctx).
|
|||
|
Where("app_version_status_infos.app_id=? AND app_version_status_infos.status_value=?", appId, entity.StPublished).
|
|||
|
Order("app_version_status_infos.sequence DESC").
|
|||
|
First(&statusInfo).Error
|
|||
|
if err != nil {
|
|||
|
return *tr.CovertAppVerToEntity(&sqlInfo), err
|
|||
|
}
|
|||
|
|
|||
|
err = DB.WithContext(ctx).
|
|||
|
Where("app_versions.app_id=? AND app_versions.sequence=?", appId, statusInfo.Sequence).
|
|||
|
First(&sqlInfo).Error
|
|||
|
if err != nil {
|
|||
|
return *tr.CovertAppVerToEntity(&sqlInfo), err
|
|||
|
}
|
|||
|
|
|||
|
sqlInfo.StatusInfo = statusInfo
|
|||
|
|
|||
|
appBuildInfo, _, _ := ar.GetAppBuildInfoAndAppVersionStatusInfo(ctx, sqlInfo.BuildInfoId, sqlInfo.AppId, sqlInfo.Sequence)
|
|||
|
sqlInfo.BuildInfo = appBuildInfo
|
|||
|
|
|||
|
return *tr.CovertAppVerToEntity(&sqlInfo), err
|
|||
|
}
|
|||
|
|
|||
|
func (ar *AppRepo) GetLatestReviewAppVer(ctx context.Context, appId string) (entity.AppVersion, error) {
|
|||
|
sqlInfo := sql.AppVersion{}
|
|||
|
/*err := DB.WithContext(ctx).
|
|||
|
Joins("StatusInfo").
|
|||
|
Joins("BuildInfo").
|
|||
|
Where("app_versions.app_id=? AND StatusInfo.publishing_update_time <> 0", appId).
|
|||
|
Order("app_versions.sequence DESC").
|
|||
|
First(&sqlInfo).Error*/
|
|||
|
|
|||
|
statusInfo := sql.AppVersionStatusInfo{}
|
|||
|
err := DB.WithContext(ctx).
|
|||
|
Where("app_version_status_infos.app_id=? AND app_version_status_infos.publishing_update_time <> 0", appId).
|
|||
|
Order("app_version_status_infos.publishing_update_time DESC").
|
|||
|
First(&statusInfo).Error
|
|||
|
if err != nil {
|
|||
|
return *tr.CovertAppVerToEntity(&sqlInfo), err
|
|||
|
}
|
|||
|
|
|||
|
err = DB.WithContext(ctx).
|
|||
|
Where("app_versions.app_id=?", appId).
|
|||
|
Order("app_versions.sequence DESC").
|
|||
|
First(&sqlInfo).Error
|
|||
|
if err != nil {
|
|||
|
return *tr.CovertAppVerToEntity(&sqlInfo), err
|
|||
|
}
|
|||
|
|
|||
|
sqlInfo.StatusInfo = statusInfo
|
|||
|
|
|||
|
if sqlInfo.BuildInfoId != "" {
|
|||
|
appBuildInfo, _, _ := ar.GetAppBuildInfoAndAppVersionStatusInfo(ctx, sqlInfo.BuildInfoId, sqlInfo.AppId, sqlInfo.Sequence)
|
|||
|
sqlInfo.BuildInfo = appBuildInfo
|
|||
|
} else {
|
|||
|
appBuildInfo, _, _ := ar.GetAppBuildInfoAndAppVersionStatusInfoV2(ctx, sqlInfo.AppId, sqlInfo.Version, sqlInfo.Sequence)
|
|||
|
sqlInfo.BuildInfo = appBuildInfo
|
|||
|
}
|
|||
|
|
|||
|
return *tr.CovertAppVerToEntity(&sqlInfo), err
|
|||
|
}
|
|||
|
|
|||
|
func (ar *AppRepo) GetAllPermitGrayPubVers(ctx context.Context, appId string, maxSeq int) ([]entity.AppVersion, error) {
|
|||
|
statusList := make([]sql.AppVersionStatusInfo, 0)
|
|||
|
/*err := DB.WithContext(ctx).
|
|||
|
Joins("StatusInfo").
|
|||
|
Where("StatusInfo.app_id=? AND StatusInfo.status_value=? AND StatusInfo.sequence>?", appId, entity.StPublishApproved, maxSeq).
|
|||
|
Find(&list).Error*/
|
|||
|
err := DB.WithContext(ctx).
|
|||
|
Where("app_version_status_infos.app_id=? AND app_version_status_infos.status_value=? AND app_version_status_infos.sequence>?", appId, entity.StPublishApproved, maxSeq).
|
|||
|
Find(&statusList).Error
|
|||
|
if err != nil {
|
|||
|
return nil, err
|
|||
|
}
|
|||
|
result := make([]entity.AppVersion, 0)
|
|||
|
for _, v := range statusList {
|
|||
|
sqlInfo := sql.AppVersion{}
|
|||
|
err = DB.WithContext(ctx).
|
|||
|
Where("app_versions.app_id=? AND app_versions.sequence=?", appId, v.Sequence).
|
|||
|
First(&sqlInfo).Error
|
|||
|
if err == nil {
|
|||
|
result = append(result, *tr.CovertAppVerToEntity(&sqlInfo))
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
return result, nil
|
|||
|
}
|
|||
|
|
|||
|
func (ar *AppRepo) GetMaxSeqAppVer(ctx context.Context, appId string) (entity.AppVersion, error) {
|
|||
|
sqlInfo := sql.AppVersion{}
|
|||
|
err := DB.WithContext(ctx).
|
|||
|
//Joins("StatusInfo").
|
|||
|
//Joins("BuildInfo").
|
|||
|
Where("app_versions.app_id=?", appId).
|
|||
|
Order("sequence DESC").
|
|||
|
First(&sqlInfo).Error
|
|||
|
|
|||
|
if err != nil {
|
|||
|
return *tr.CovertAppVerToEntity(&sqlInfo), err
|
|||
|
}
|
|||
|
|
|||
|
appBuildInfo, statusInfo, _ := ar.GetAppBuildInfoAndAppVersionStatusInfo(ctx, sqlInfo.BuildInfoId, sqlInfo.AppId, sqlInfo.Sequence)
|
|||
|
sqlInfo.BuildInfo = appBuildInfo
|
|||
|
sqlInfo.StatusInfo = statusInfo
|
|||
|
return *tr.CovertAppVerToEntity(&sqlInfo), err
|
|||
|
}
|
|||
|
|
|||
|
func (ar *AppRepo) SubmitApp(ctx context.Context, req entity.SubmitAppReq, expire int64, userId string) error {
|
|||
|
nowMaxSeq := 0
|
|||
|
maxAppVerInfo, err := ar.GetMaxSeqAppVer(ctx, req.AppId)
|
|||
|
if err == nil {
|
|||
|
nowMaxSeq = maxAppVerInfo.Sequence
|
|||
|
} else {
|
|||
|
if !DbNotFound(err) {
|
|||
|
return err
|
|||
|
}
|
|||
|
}
|
|||
|
buildInfo, err := NewAppBuildInfoMysqlRepo().GetInfoById(ctx, req.BuildId)
|
|||
|
if DbNotFound(err) {
|
|||
|
buildInfo, err = NewAppBuildInfoMysqlRepo().GetInfoByBuildId(ctx, req.BuildId)
|
|||
|
if err != nil {
|
|||
|
return err
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
appInfo, err := ar.GetAppInfo(ctx, req.AppId)
|
|||
|
if err != nil {
|
|||
|
return err
|
|||
|
}
|
|||
|
now := utils.GetNowMs()
|
|||
|
appVerInfo := sql.AppVersion{
|
|||
|
AppId: appInfo.AppID,
|
|||
|
Sequence: nowMaxSeq + 1,
|
|||
|
Name: appInfo.Name,
|
|||
|
Logo: appInfo.Logo,
|
|||
|
Version: buildInfo.Version,
|
|||
|
Desc: appInfo.CoreDescription,
|
|||
|
DetailDesc: appInfo.CustomData.DetailDescription,
|
|||
|
Class: appInfo.AppClass,
|
|||
|
Tag: strings.Join(appInfo.AppTag, ","),
|
|||
|
AppType: appInfo.AppType,
|
|||
|
DeveloperId: userId,
|
|||
|
GroupId: appInfo.GroupID,
|
|||
|
AutoPub: req.NeedAutoPub,
|
|||
|
InGrayRelease: false,
|
|||
|
BuildInfoId: req.BuildId,
|
|||
|
StatusInfo: sql.AppVersionStatusInfo{
|
|||
|
AppId: appInfo.AppID,
|
|||
|
Sequence: nowMaxSeq + 1,
|
|||
|
StatusValue: entity.StPublishing,
|
|||
|
StatusReason: "",
|
|||
|
StatusUpdateTime: now,
|
|||
|
StatusUpdater: req.Account,
|
|||
|
PublishingReason: "",
|
|||
|
PublishingUpdateTime: now,
|
|||
|
PublishingUpdater: req.Account,
|
|||
|
PublishedReason: "",
|
|||
|
PublishedUpdateTime: 0,
|
|||
|
PublishedUpdater: "",
|
|||
|
UnpublishedReason: "",
|
|||
|
UnpublishedUpdateTime: 0,
|
|||
|
UnpublishedUpdater: "",
|
|||
|
UnpublishedType: "",
|
|||
|
ApprovalReason: "",
|
|||
|
ApprovalUpdateTime: 0,
|
|||
|
ApprovalUpdater: "",
|
|||
|
ActionReason: "",
|
|||
|
ActionUpdater: req.Account,
|
|||
|
ActionUpdateTime: now,
|
|||
|
PublishingApprovalReason: "",
|
|||
|
PublishingApprovalUpdateTime: 0,
|
|||
|
PublishingApprovalUpdater: "",
|
|||
|
CreateTime: now,
|
|||
|
},
|
|||
|
CreatedBy: req.Account,
|
|||
|
IsRollback: false,
|
|||
|
ExpireTime: expire,
|
|||
|
CreateTime: now,
|
|||
|
TestInfo: "",
|
|||
|
}
|
|||
|
testInfoByte, _ := json.Marshal(req.TestInfo)
|
|||
|
appVerInfo.TestInfo = string(testInfoByte)
|
|||
|
appVerInfoV2 := tr.CovertAppVerToAppVerV2(&appVerInfo)
|
|||
|
err = DB.WithContext(ctx).Model(&sql.AppVersionV2{}).Create(appVerInfoV2).Error
|
|||
|
if err != nil {
|
|||
|
return err
|
|||
|
}
|
|||
|
|
|||
|
return DB.WithContext(ctx).Model(&sql.AppVersionStatusInfo{}).Create(&appVerInfo.StatusInfo).Error
|
|||
|
}
|
|||
|
|
|||
|
func (ar *AppRepo) WithdrawPubApp(ctx context.Context, appId string, seq int, account string) error {
|
|||
|
now := utils.GetNowMs()
|
|||
|
params := map[string]interface{}{
|
|||
|
"status_value": entity.StPublishWithdrawed,
|
|||
|
"status_update_time": now,
|
|||
|
"status_updater": account,
|
|||
|
}
|
|||
|
return DB.WithContext(ctx).Model(&sql.AppVersionStatusInfo{}).Where("app_id=? AND sequence=?", appId, seq).Updates(params).Error
|
|||
|
}
|
|||
|
|
|||
|
/*
|
|||
|
//结束所有低版本的灰度
|
|||
|
err := appVerTable.UpdateAll(ctx, bson.M{"appId": appId, "sequence": bson.M{"$lte": seq}}, bson.M{"$set": bson.M{"inGrayRelease": false}})
|
|||
|
if err != nil {
|
|||
|
return err
|
|||
|
}
|
|||
|
now := time.Now().UnixNano() / 1e6
|
|||
|
//下架之前上架的小程序版本
|
|||
|
oldAppVer, err := ar.GetNowPubAppVer(ctx, appId)
|
|||
|
if err != nil && !NotFound(err) {
|
|||
|
return err
|
|||
|
}
|
|||
|
if !NotFound(err) {
|
|||
|
unpublishedStatus := mongo.UnpublishedStatus{
|
|||
|
LastUpdated: now,
|
|||
|
ModifiedBy: account,
|
|||
|
Type: entity.TypeUnpublishedDueToNewSeq, // Mark the type.
|
|||
|
}
|
|||
|
//if !isDev {
|
|||
|
// unpublishedStatus.Type = entity.TypeUnpublishedByAdmin
|
|||
|
//}
|
|||
|
unPubUpInfo := map[string]interface{}{
|
|||
|
"unpublishedStatus": unpublishedStatus,
|
|||
|
"status": mongo.Status{
|
|||
|
Value: entity.StUnpublished,
|
|||
|
LastUpdated: now,
|
|||
|
ModifiedBy: account,
|
|||
|
},
|
|||
|
}
|
|||
|
err = appVerTable.UpdateOne(ctx, bson.M{"appId": oldAppVer.AppID, "sequence": oldAppVer.Sequence}, bson.M{"$set": unPubUpInfo})
|
|||
|
if err != nil {
|
|||
|
return err
|
|||
|
}
|
|||
|
}
|
|||
|
//上架当前小程序版本
|
|||
|
upInfo := make(map[string]interface{})
|
|||
|
upInfo["status"] = mongo.Status{
|
|||
|
Value: entity.StPublished,
|
|||
|
Reason: "",
|
|||
|
LastUpdated: now,
|
|||
|
ModifiedBy: account,
|
|||
|
}
|
|||
|
upInfo["publishedStatus"] = mongo.SpecificStatus{
|
|||
|
Reason: "",
|
|||
|
LastUpdated: now,
|
|||
|
ModifiedBy: account,
|
|||
|
}
|
|||
|
upInfo["actionStatus"] = mongo.SpecificStatus{
|
|||
|
LastUpdated: now,
|
|||
|
ModifiedBy: account,
|
|||
|
}
|
|||
|
//修改小程序元数据信息
|
|||
|
err = appTable.UpdateOne(ctx, bson.M{"appId": appId}, bson.M{"$set": upInfo})
|
|||
|
if err != nil {
|
|||
|
return err
|
|||
|
}
|
|||
|
upInfo["isRollback"] = isRollback
|
|||
|
err = appVerTable.UpdateOne(ctx, bson.M{"appId": appId, "sequence": seq}, bson.M{"$set": upInfo})
|
|||
|
if err != nil {
|
|||
|
return err
|
|||
|
}
|
|||
|
return nil
|
|||
|
*/
|
|||
|
func (ar *AppRepo) PubApp(ctx context.Context, appId string, seq int, account string, isDev, isRollback bool) error {
|
|||
|
now := utils.GetNowMs()
|
|||
|
oldAppVer, oldPubAppErr := ar.GetNowPubAppVer(ctx, appId)
|
|||
|
if oldPubAppErr != nil && !DbNotFound(oldPubAppErr) {
|
|||
|
return oldPubAppErr
|
|||
|
}
|
|||
|
return DB.WithContext(ctx).Transaction(func(tx *gorm.DB) error {
|
|||
|
var err error
|
|||
|
//下架之前上架的小程序版本
|
|||
|
if !DbNotFound(oldPubAppErr) {
|
|||
|
updateInfos := map[string]interface{}{
|
|||
|
"unpublished_update_time": now,
|
|||
|
"unpublished_updater": account,
|
|||
|
"unpublished_type": entity.TypeUnpublishedDueToNewSeq,
|
|||
|
"status_value": entity.StUnpublished,
|
|||
|
"status_update_time": now,
|
|||
|
"status_updater": account,
|
|||
|
}
|
|||
|
//if !isDev {
|
|||
|
// updateInfos["unpublished_type"] = entity.TypeUnpublishedByAdmin
|
|||
|
//}
|
|||
|
err = tx.WithContext(ctx).
|
|||
|
Model(&sql.AppVersionStatusInfo{}).
|
|||
|
Where("app_id=? AND sequence=?", oldAppVer.AppID, oldAppVer.Sequence).
|
|||
|
Updates(updateInfos).Error
|
|||
|
if err != nil {
|
|||
|
return err
|
|||
|
}
|
|||
|
}
|
|||
|
//结束所有低版本的灰度
|
|||
|
err = tx.WithContext(ctx).
|
|||
|
Model(&sql.AppVersion{}).
|
|||
|
Where("app_id=? AND sequence<=?", appId, seq).
|
|||
|
Update("in_gray_release", false).Error
|
|||
|
if err != nil {
|
|||
|
return err
|
|||
|
}
|
|||
|
//上架当前小程序版本
|
|||
|
upInfo := map[string]interface{}{
|
|||
|
"status_value": entity.StPublished,
|
|||
|
"status_update_time": now,
|
|||
|
"status_updater": account,
|
|||
|
"published_reason": "",
|
|||
|
"published_update_time": now,
|
|||
|
"published_updater": account,
|
|||
|
"action_update_time": now,
|
|||
|
"action_updater": account,
|
|||
|
}
|
|||
|
err = tx.WithContext(ctx).
|
|||
|
Model(&sql.AppStatusInfo{}).
|
|||
|
Where("app_id=?", appId).
|
|||
|
Updates(upInfo).Error
|
|||
|
if err != nil {
|
|||
|
return err
|
|||
|
}
|
|||
|
err = tx.WithContext(ctx).
|
|||
|
Model(&sql.AppVersionStatusInfo{}).
|
|||
|
Where("app_id=? AND sequence=?", appId, seq).
|
|||
|
Updates(upInfo).Error
|
|||
|
if err != nil {
|
|||
|
return err
|
|||
|
}
|
|||
|
if isRollback {
|
|||
|
err = tx.WithContext(ctx).
|
|||
|
Model(&sql.AppVersionV2{}).
|
|||
|
Where("app_id=? AND sequence=?", appId, seq).
|
|||
|
Update("is_rollback", isRollback).Error
|
|||
|
if err != nil {
|
|||
|
return err
|
|||
|
}
|
|||
|
}
|
|||
|
return nil
|
|||
|
})
|
|||
|
}
|
|||
|
|
|||
|
func (ar *AppRepo) ListApps(ctx context.Context, groupId string, pageNo, pageSize int, searchText string, sortType, pullType string) (int, []entity.App, error) {
|
|||
|
var (
|
|||
|
list []sql.App
|
|||
|
sort string
|
|||
|
query string
|
|||
|
total int64
|
|||
|
queryList []interface{}
|
|||
|
err error
|
|||
|
)
|
|||
|
switch sortType {
|
|||
|
case "created":
|
|||
|
sort = "apps.create_time"
|
|||
|
case "-created":
|
|||
|
sort = "apps.create_time DESC"
|
|||
|
case "updated":
|
|||
|
sort = "app_status_infos.status_update_time"
|
|||
|
case "-updated":
|
|||
|
sort = "app_status_infos.status_update_time DESC"
|
|||
|
default:
|
|||
|
sort = "app_status_infos.status_update_time DESC"
|
|||
|
}
|
|||
|
if groupId != "" {
|
|||
|
query = genQuery(query, "AND", "apps.group_id=? ")
|
|||
|
queryList = append(queryList, groupId)
|
|||
|
}
|
|||
|
switch pullType {
|
|||
|
case "published":
|
|||
|
//已上架
|
|||
|
query = genQuery(query, "AND", "app_status_infos.status_value=? ")
|
|||
|
queryList = append(queryList, entity.StPublished)
|
|||
|
case "inDevelopment":
|
|||
|
//未上架
|
|||
|
query = genQuery(query, "AND", "app_status_infos.status_value=? ")
|
|||
|
queryList = append(queryList, entity.StInDevelopment)
|
|||
|
case "unPublished":
|
|||
|
//已下架
|
|||
|
query = genQuery(query, "AND", "app_status_infos.status_value=? ")
|
|||
|
queryList = append(queryList, entity.StUnpublished)
|
|||
|
}
|
|||
|
|
|||
|
if searchText != "" {
|
|||
|
s := "%" + searchText + "%"
|
|||
|
query = genQuery(query, "AND", "( apps.app_id LIKE ? OR apps.name LIKE ? )")
|
|||
|
queryList = append(queryList, s, s)
|
|||
|
}
|
|||
|
if query != "" {
|
|||
|
err = DB.WithContext(ctx).Debug().Model(&sql.App{}).
|
|||
|
//Joins("StatusInfo").
|
|||
|
Joins("left join app_status_infos on apps.app_id = app_status_infos.app_id").
|
|||
|
Where(query, queryList...).
|
|||
|
Order(sort).
|
|||
|
Offset(genOffset(pageNo, pageSize)).Limit(pageSize).
|
|||
|
Find(&list).Error
|
|||
|
} else {
|
|||
|
if sortType == "updated" || sortType == "-updated" {
|
|||
|
err = DB.WithContext(ctx).Debug().Model(&sql.App{}).
|
|||
|
Joins("left join app_status_infos on apps.app_id = app_status_infos.app_id").
|
|||
|
Order(sort).
|
|||
|
Offset(genOffset(pageNo, pageSize)).Limit(pageSize).
|
|||
|
Find(&list).Error
|
|||
|
} else {
|
|||
|
err = DB.WithContext(ctx).Debug().Model(&sql.App{}).
|
|||
|
//Joins("StatusInfo").
|
|||
|
Order(sort).
|
|||
|
Offset(genOffset(pageNo, pageSize)).Limit(pageSize).
|
|||
|
Find(&list).Error
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
if err != nil {
|
|||
|
return 0, nil, err
|
|||
|
}
|
|||
|
if query != "" {
|
|||
|
err = DB.WithContext(ctx).Model(&sql.App{}).
|
|||
|
Joins("left join app_status_infos on apps.app_id = app_status_infos.app_id").
|
|||
|
Where(query, queryList...).
|
|||
|
Count(&total).Error
|
|||
|
} else {
|
|||
|
err = DB.WithContext(ctx).Model(&sql.App{}).
|
|||
|
Count(&total).Error
|
|||
|
}
|
|||
|
if err != nil {
|
|||
|
return 0, nil, err
|
|||
|
}
|
|||
|
result := make([]entity.App, 0)
|
|||
|
for _, v := range list {
|
|||
|
statusInfo, _ := ar.GetAppStatusInfo(ctx, v.AppId)
|
|||
|
v.StatusInfo = statusInfo
|
|||
|
temp := v
|
|||
|
result = append(result, *tr.CovertAppToEntity(&temp))
|
|||
|
}
|
|||
|
return int(total), result, err
|
|||
|
}
|
|||
|
|
|||
|
func (ar *AppRepo) ListAppVers(ctx context.Context, pageNo, pageSize int, searchText string, t string, groupId string) (int, []entity.AppVersion, error) {
|
|||
|
var (
|
|||
|
list []sql.AppVersion
|
|||
|
sort string
|
|||
|
query string
|
|||
|
total int64
|
|||
|
queryList []interface{}
|
|||
|
err error
|
|||
|
)
|
|||
|
sort = "app_version_status_infos.publishing_update_time DESC"
|
|||
|
switch t {
|
|||
|
case "pendingReview": //待审核
|
|||
|
query += "app_version_status_infos.status_value IN (?) "
|
|||
|
queryList = append(queryList, []string{entity.StPublishing, entity.StUnpublishing})
|
|||
|
case "reviewed": //已审核
|
|||
|
query += "app_version_status_infos.status_value NOT IN (?) "
|
|||
|
queryList = append(queryList, []string{entity.StPublishing, entity.StPublishWithdrawed})
|
|||
|
case "revoked": //已撤销
|
|||
|
query += "app_version_status_infos.status_value IN (?)"
|
|||
|
queryList = append(queryList, []string{entity.StPublishWithdrawed})
|
|||
|
}
|
|||
|
if searchText != "" {
|
|||
|
query = genQuery(query, "AND", "(app_versions.name LIKE ? OR app_versions.app_id LIKE ? )")
|
|||
|
//query += "(app_versions.name LIKE ? OR app_versions.app_id LIKE ?)"
|
|||
|
queryList = append(queryList, "%"+searchText+"%", "%"+searchText+"%")
|
|||
|
}
|
|||
|
if groupId != "" {
|
|||
|
query = genQuery(query, "AND", "app_versions.group_id = ?")
|
|||
|
queryList = append(queryList, groupId)
|
|||
|
}
|
|||
|
|
|||
|
if query != "" {
|
|||
|
err = DB.Debug().Model(&sql.AppVersion{}).
|
|||
|
Joins("left join app_version_status_infos on concat(app_versions.app_id,app_versions.sequence)=concat(app_version_status_infos.app_id,app_version_status_infos.sequence)").
|
|||
|
Where(query, queryList...).
|
|||
|
Order(sort).
|
|||
|
Offset(genOffset(pageNo, pageSize)).Limit(pageSize).
|
|||
|
Find(&list).Error
|
|||
|
} else {
|
|||
|
err = DB.Debug().Model(&sql.AppVersion{}).
|
|||
|
Joins("left join app_version_status_infos on concat(app_versions.app_id,app_versions.sequence)=concat(app_version_status_infos.app_id,app_version_status_infos.sequence)").
|
|||
|
Order(sort).
|
|||
|
Offset(genOffset(pageNo, pageSize)).Limit(pageSize).
|
|||
|
Find(&list).Error
|
|||
|
}
|
|||
|
/*if query != "" {
|
|||
|
err = DB.WithContext(ctx).
|
|||
|
Model(&sql.AppVersion{}).
|
|||
|
Order(sort).
|
|||
|
Joins("StatusInfo").
|
|||
|
Joins("BuildInfo").
|
|||
|
Where(query, queryList...).
|
|||
|
Offset(genOffset(pageNo, pageSize)).Limit(pageSize).
|
|||
|
Find(&list).Error
|
|||
|
} else {
|
|||
|
err = DB.WithContext(ctx).
|
|||
|
Model(&sql.AppVersion{}).
|
|||
|
Order(sort).
|
|||
|
Joins("StatusInfo").
|
|||
|
Joins("BuildInfo").
|
|||
|
Offset(genOffset(pageNo, pageSize)).Limit(pageSize).
|
|||
|
Find(&list).Error
|
|||
|
}*/
|
|||
|
if err != nil {
|
|||
|
return 0, nil, err
|
|||
|
}
|
|||
|
if query != "" {
|
|||
|
err = DB.WithContext(ctx).
|
|||
|
Model(&sql.AppVersion{}).
|
|||
|
//Joins("StatusInfo").
|
|||
|
//Joins("BuildInfo").
|
|||
|
Joins("left join app_version_status_infos on concat(app_versions.app_id,app_versions.sequence)=concat(app_version_status_infos.app_id,app_version_status_infos.sequence)").
|
|||
|
Where(query, queryList...).
|
|||
|
Count(&total).Error
|
|||
|
} else {
|
|||
|
err = DB.WithContext(ctx).
|
|||
|
Model(&sql.AppVersion{}).
|
|||
|
//Joins("StatusInfo").
|
|||
|
//Joins("BuildInfo").
|
|||
|
Count(&total).Error
|
|||
|
}
|
|||
|
result := make([]entity.AppVersion, 0)
|
|||
|
for _, v := range list {
|
|||
|
appBuildInfo, statusInfo, _ := ar.GetAppBuildInfoAndAppVersionStatusInfo(ctx, v.BuildInfoId, v.AppId, v.Sequence)
|
|||
|
v.BuildInfo = appBuildInfo
|
|||
|
v.StatusInfo = statusInfo
|
|||
|
temp := v
|
|||
|
result = append(result, *tr.CovertAppVerToEntity(&temp))
|
|||
|
}
|
|||
|
return int(total), result, err
|
|||
|
}
|
|||
|
|
|||
|
func (ar *AppRepo) UnpubApp(ctx context.Context, appId string, seq int, account, reason string, isDev bool) error {
|
|||
|
var err error
|
|||
|
unpublishedType := ""
|
|||
|
if isDev {
|
|||
|
unpublishedType = entity.TypeUnpublishedByDev
|
|||
|
} else {
|
|||
|
unpublishedType = entity.TypeUnpublishedByAdmin
|
|||
|
}
|
|||
|
now := time.Now().UnixNano() / 1e6
|
|||
|
params := map[string]interface{}{
|
|||
|
"status_value": entity.StUnpublished,
|
|||
|
"status_updater": account,
|
|||
|
"status_update_time": now,
|
|||
|
"status_reason": reason,
|
|||
|
"unpublished_updater": account,
|
|||
|
"unpublished_update_time": now,
|
|||
|
"unpublished_reason": reason,
|
|||
|
"action_updater": account,
|
|||
|
"action_update_time": now,
|
|||
|
"action_reason": reason,
|
|||
|
}
|
|||
|
return DB.WithContext(ctx).Transaction(func(tx *gorm.DB) error {
|
|||
|
//更新app
|
|||
|
err = tx.Model(&sql.AppStatusInfo{}).
|
|||
|
Where("app_id=?", appId).
|
|||
|
Updates(params).Error
|
|||
|
if err != nil {
|
|||
|
return err
|
|||
|
}
|
|||
|
//更新app_version
|
|||
|
params["unpublished_type"] = unpublishedType
|
|||
|
err = tx.Model(&sql.AppVersionStatusInfo{}).
|
|||
|
Where("app_id=? AND sequence=?", appId, seq).Updates(params).Error
|
|||
|
if err != nil {
|
|||
|
return err
|
|||
|
}
|
|||
|
return nil
|
|||
|
})
|
|||
|
}
|
|||
|
|
|||
|
func (ar *AppRepo) ListAppVersByAppId(ctx context.Context, appId string, pageNo, pageSize int) (int, []entity.AppVersion, error) {
|
|||
|
var (
|
|||
|
list = make([]sql.AppVersion, 0)
|
|||
|
total int64
|
|||
|
err error
|
|||
|
)
|
|||
|
err = DB.WithContext(ctx).
|
|||
|
//Joins("StatusInfo").
|
|||
|
//Joins("BuildInfo").
|
|||
|
Where("app_versions.app_id=?", appId).
|
|||
|
Order("sequence DESC").
|
|||
|
Offset(genOffset(pageNo, pageSize)).Limit(pageSize).
|
|||
|
Find(&list).Error
|
|||
|
if err != nil {
|
|||
|
return 0, nil, err
|
|||
|
}
|
|||
|
|
|||
|
err = DB.WithContext(ctx).Model(&sql.AppVersion{}).
|
|||
|
Where("app_id=?", appId).
|
|||
|
Count(&total).Error
|
|||
|
if err != nil {
|
|||
|
return 0, nil, err
|
|||
|
}
|
|||
|
|
|||
|
result := make([]entity.AppVersion, 0)
|
|||
|
for _, v := range list {
|
|||
|
appBuildInfo, statusInfo, _ := ar.GetAppBuildInfoAndAppVersionStatusInfo(ctx, v.BuildInfoId, v.AppId, v.Sequence)
|
|||
|
v.BuildInfo = appBuildInfo
|
|||
|
v.StatusInfo = statusInfo
|
|||
|
temp := v
|
|||
|
result = append(result, *tr.CovertAppVerToEntity(&temp))
|
|||
|
}
|
|||
|
return int(total), result, err
|
|||
|
}
|
|||
|
|
|||
|
func (ar *AppRepo) GetAppReviews(ctx context.Context, req apiproto.AdminGetAppReviewsReq) (int, []entity.AppVersion, error) {
|
|||
|
return 0, nil, nil
|
|||
|
}
|
|||
|
|
|||
|
func (ar *AppRepo) GetAllPublishedVerList(ctx context.Context, appId string) ([]entity.AppVersion, int, error) {
|
|||
|
var (
|
|||
|
//list = make([]sql.AppVersion, 0)
|
|||
|
statusList = make([]sql.AppVersionStatusInfo, 0)
|
|||
|
total int64
|
|||
|
err error
|
|||
|
)
|
|||
|
/*err = DB.WithContext(ctx).
|
|||
|
Joins("StatusInfo").
|
|||
|
Joins("BuildInfo").
|
|||
|
Where("app_versions.app_id=? AND StatusInfo.status_value=?", appId, entity.StPublished).
|
|||
|
Order("sequence DESC").
|
|||
|
Find(&list).Error*/
|
|||
|
err = DB.WithContext(ctx).
|
|||
|
Where("app_version_status_infos.app_id=? AND app_version_status_infos.status_value=?", appId, entity.StPublished).
|
|||
|
Order("sequence DESC").
|
|||
|
Find(&statusList).Error
|
|||
|
if err != nil {
|
|||
|
return nil, 0, err
|
|||
|
}
|
|||
|
|
|||
|
result := make([]entity.AppVersion, 0)
|
|||
|
for _, v := range statusList {
|
|||
|
sqlInfo := sql.AppVersion{}
|
|||
|
err = DB.WithContext(ctx).
|
|||
|
Where("app_versions.app_id=? AND app_versions.sequence=?", appId, v.Sequence).
|
|||
|
First(&sqlInfo).Error
|
|||
|
if err == nil {
|
|||
|
appBuildInfo, statusInfo, _ := ar.GetAppBuildInfoAndAppVersionStatusInfo(ctx, sqlInfo.BuildInfoId, sqlInfo.AppId, sqlInfo.Sequence)
|
|||
|
sqlInfo.BuildInfo = appBuildInfo
|
|||
|
sqlInfo.StatusInfo = statusInfo
|
|||
|
result = append(result, *tr.CovertAppVerToEntity(&sqlInfo))
|
|||
|
}
|
|||
|
}
|
|||
|
return result, int(total), err
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
func (ar *AppRepo) GetPublishedAppList(ctx context.Context, pageNo, pageSize int, searchText string) ([]entity.AppVersion, int, error) {
|
|||
|
var (
|
|||
|
err error
|
|||
|
total int64
|
|||
|
list = make([]sql.AppVersion, 0)
|
|||
|
)
|
|||
|
if searchText != "" {
|
|||
|
s := genLike(searchText)
|
|||
|
/*err = DB.WithContext(ctx).Model(&sql.AppVersion{}).
|
|||
|
Joins("StatusInfo").
|
|||
|
Joins("BuildInfo").
|
|||
|
Where("StatusInfo.status_value=? AND app_versions.name LIKE ? OR app_versions.app_id LIKE ?", entity.StPublished, s, s).
|
|||
|
Find(&list).Error*/
|
|||
|
err = DB.WithContext(ctx).Model(&sql.AppVersion{}).
|
|||
|
Joins("left join app_version_status_infos on concat(app_versions.app_id,app_versions.sequence)=concat(app_version_status_infos.app_id,app_version_status_infos.sequence)").
|
|||
|
Where("app_version_status_infos.status_value=? AND (app_versions.name LIKE ? OR app_versions.app_id LIKE ?)", entity.StPublished, s, s).
|
|||
|
Order("app_versions.create_time desc").
|
|||
|
Offset(genOffset(pageNo, pageSize)).Limit(pageSize).
|
|||
|
Find(&list).Error
|
|||
|
} else {
|
|||
|
/*err = DB.WithContext(ctx).Model(&sql.AppVersion{}).
|
|||
|
Joins("StatusInfo").
|
|||
|
Joins("BuildInfo").
|
|||
|
Where("StatusInfo.status_value=?", entity.StPublished).
|
|||
|
Find(&list).Error*/
|
|||
|
err = DB.WithContext(ctx).Model(&sql.AppVersion{}).
|
|||
|
Joins("left join app_version_status_infos on concat(app_versions.app_id,app_versions.sequence)=concat(app_version_status_infos.app_id,app_version_status_infos.sequence)").
|
|||
|
Where("app_version_status_infos.status_value=?", entity.StPublished).
|
|||
|
Order("app_versions.create_time desc").
|
|||
|
Offset(genOffset(pageNo, pageSize)).Limit(pageSize).
|
|||
|
Find(&list).Error
|
|||
|
}
|
|||
|
if err != nil {
|
|||
|
return nil, 0, err
|
|||
|
}
|
|||
|
if searchText != "" {
|
|||
|
s := genLike(searchText)
|
|||
|
/*err = DB.WithContext(ctx).Model(&sql.AppVersion{}).
|
|||
|
Joins("StatusInfo").
|
|||
|
Where("StatusInfo.status_value=? AND app_versions.name LIKE ? OR app_versions.app_id LIKE ?", entity.StPublished, s, s).
|
|||
|
Count(&total).Error*/
|
|||
|
err = DB.WithContext(ctx).Model(&sql.AppVersion{}).
|
|||
|
Joins("left join app_version_status_infos on concat(app_versions.app_id,app_versions.sequence)=concat(app_version_status_infos.app_id,app_version_status_infos.sequence)").
|
|||
|
Where("app_version_status_infos.status_value=? AND app_versions.name LIKE ? OR app_versions.app_id LIKE ?", entity.StPublished, s, s).
|
|||
|
Count(&total).Error
|
|||
|
} else {
|
|||
|
/*err = DB.WithContext(ctx).Model(&sql.AppVersion{}).
|
|||
|
Joins("StatusInfo").
|
|||
|
Where("StatusInfo.status_value=?", entity.StPublished).
|
|||
|
Count(&total).Error*/
|
|||
|
err = DB.WithContext(ctx).Model(&sql.AppVersion{}).
|
|||
|
Joins("left join app_version_status_infos on concat(app_versions.app_id,app_versions.sequence)=concat(app_version_status_infos.app_id,app_version_status_infos.sequence)").
|
|||
|
Where("app_version_status_infos.status_value=?", entity.StPublished).
|
|||
|
Count(&total).Error
|
|||
|
}
|
|||
|
if err != nil {
|
|||
|
return nil, 0, err
|
|||
|
}
|
|||
|
|
|||
|
result := make([]entity.AppVersion, 0)
|
|||
|
for _, v := range list {
|
|||
|
temp := v
|
|||
|
result = append(result, *tr.CovertAppVerToEntity(&temp))
|
|||
|
}
|
|||
|
return result, int(total), nil
|
|||
|
}
|
|||
|
|
|||
|
func (ar *AppRepo) GetAllVers(ctx context.Context, appId string) ([]entity.AppVersion, int, error) {
|
|||
|
var (
|
|||
|
list = make([]sql.AppVersion, 0)
|
|||
|
total int64
|
|||
|
err error
|
|||
|
)
|
|||
|
err = DB.WithContext(ctx).
|
|||
|
//Joins("StatusInfo").
|
|||
|
//Joins("BuildInfo").
|
|||
|
Where("app_versions.app_id=?", appId).
|
|||
|
Order("app_versions.sequence DESC").
|
|||
|
Find(&list).Error
|
|||
|
if err != nil {
|
|||
|
return nil, 0, err
|
|||
|
}
|
|||
|
|
|||
|
result := make([]entity.AppVersion, 0)
|
|||
|
for _, v := range list {
|
|||
|
appBuildInfo, statusInfo, _ := ar.GetAppBuildInfoAndAppVersionStatusInfo(ctx, v.BuildInfoId, v.AppId, v.Sequence)
|
|||
|
v.BuildInfo = appBuildInfo
|
|||
|
v.StatusInfo = statusInfo
|
|||
|
temp := v
|
|||
|
result = append(result, *tr.CovertAppVerToEntity(&temp))
|
|||
|
}
|
|||
|
return result, int(total), err
|
|||
|
}
|
|||
|
|
|||
|
func (ar *AppRepo) GetAppsByAppIds(ctx context.Context, appIds []string) ([]entity.App, error) {
|
|||
|
list := make([]sql.App, 0)
|
|||
|
err := DB.WithContext(ctx).
|
|||
|
Model(&sql.App{}).
|
|||
|
Where("apps.app_id IN (?)", appIds).
|
|||
|
//Joins("StatusInfo").
|
|||
|
Order("apps.create_time DESC").
|
|||
|
Find(&list).Error
|
|||
|
if err != nil {
|
|||
|
return nil, err
|
|||
|
}
|
|||
|
result := make([]entity.App, 0)
|
|||
|
for _, v := range list {
|
|||
|
statusInfo, _ := ar.GetAppStatusInfo(ctx, v.AppId)
|
|||
|
v.StatusInfo = statusInfo
|
|||
|
temp := v
|
|||
|
result = append(result, *tr.CovertAppToEntity(&temp))
|
|||
|
}
|
|||
|
return result, nil
|
|||
|
}
|
|||
|
|
|||
|
func (ar *AppRepo) GetAppsByGroupIds(ctx context.Context, groupIds []string) (int, []entity.App, error) {
|
|||
|
list := make([]sql.App, 0)
|
|||
|
var total int64
|
|||
|
err := DB.WithContext(ctx).Model(&sql.App{}).
|
|||
|
Where("group_id IN (?)", groupIds).
|
|||
|
Count(&total).
|
|||
|
Order("create_time DESC").
|
|||
|
Find(&list).Error
|
|||
|
if err != nil {
|
|||
|
return 0, nil, err
|
|||
|
}
|
|||
|
result := make([]entity.App, 0)
|
|||
|
for _, v := range list {
|
|||
|
statusInfo, _ := ar.GetAppStatusInfo(ctx, v.AppId)
|
|||
|
v.StatusInfo = statusInfo
|
|||
|
temp := v
|
|||
|
result = append(result, *tr.CovertAppToEntity(&temp))
|
|||
|
}
|
|||
|
return int(total), result, nil
|
|||
|
}
|
|||
|
|
|||
|
func (ar *AppRepo) GetAppsToBinding(ctx context.Context, bindingId string, pageNo, pageSize int, searchText string) (int, []entity.App, error) {
|
|||
|
br := NewBindingByMysqlRepo()
|
|||
|
bindingInfo, err := br.GetBindingByBindingId(ctx, bindingId)
|
|||
|
if err != nil {
|
|||
|
return 0, nil, err
|
|||
|
}
|
|||
|
//获取应用关联的小程序Id
|
|||
|
assAppIdList := make([]string, 0)
|
|||
|
for _, v := range bindingInfo.AppInfos {
|
|||
|
assAppIdList = append(assAppIdList, v.AppID)
|
|||
|
}
|
|||
|
query := "apps.group_id=? "
|
|||
|
queryList := []interface{}{bindingInfo.GroupID}
|
|||
|
if len(assAppIdList) != 0 {
|
|||
|
query = genQuery(query, "AND", "apps.app_id NOT IN (?) ")
|
|||
|
queryList = append(queryList, assAppIdList)
|
|||
|
}
|
|||
|
if searchText != "" {
|
|||
|
query = genQuery(query, "AND", "apps.name LIKE ?")
|
|||
|
queryList = append(queryList, "%"+searchText+"%")
|
|||
|
}
|
|||
|
list := make([]sql.App, 0)
|
|||
|
var total int64
|
|||
|
err = DB.WithContext(ctx).
|
|||
|
Model(&sql.App{}).
|
|||
|
Where(query, queryList...).
|
|||
|
Count(&total).
|
|||
|
Find(&list).Error
|
|||
|
if err != nil {
|
|||
|
return 0, nil, err
|
|||
|
}
|
|||
|
err = DB.WithContext(ctx).
|
|||
|
Model(&sql.App{}).
|
|||
|
//Joins("StatusInfo").
|
|||
|
Where(query, queryList...).
|
|||
|
Order("apps.create_time DESC").
|
|||
|
Offset(genOffset(pageNo, pageSize)).Limit(pageSize).
|
|||
|
Find(&list).Error
|
|||
|
if err != nil {
|
|||
|
return 0, nil, err
|
|||
|
}
|
|||
|
result := make([]entity.App, 0)
|
|||
|
for _, v := range list {
|
|||
|
statusInfo, _ := ar.GetAppStatusInfo(ctx, v.AppId)
|
|||
|
v.StatusInfo = statusInfo
|
|||
|
temp := v
|
|||
|
result = append(result, *tr.CovertAppToEntity(&temp))
|
|||
|
}
|
|||
|
return int(total), result, nil
|
|||
|
}
|
|||
|
|
|||
|
func (ar *AppRepo) GetLinkAppsByBindingId(ctx context.Context, bindingId string, pageNo, pageSize int, searchText string) (int, []entity.App, error) {
|
|||
|
br := NewBindingByMysqlRepo()
|
|||
|
bindingInfo, err := br.GetBindingByBindingId(ctx, bindingId)
|
|||
|
if err != nil {
|
|||
|
return 0, nil, err
|
|||
|
}
|
|||
|
//获取应用关联的小程序Id
|
|||
|
assAppIdList := make([]string, 0)
|
|||
|
for _, v := range bindingInfo.AppInfos {
|
|||
|
assAppIdList = append(assAppIdList, v.AppID)
|
|||
|
}
|
|||
|
list := make([]sql.App, 0)
|
|||
|
var total int64
|
|||
|
err = DB.WithContext(ctx).Model(&sql.App{}).
|
|||
|
Where("group_id=? AND app_id IN (?)", bindingInfo.GroupID, assAppIdList).
|
|||
|
Count(&total).
|
|||
|
Order("create_time DESC").
|
|||
|
Offset(genOffset(pageNo, pageSize)).Limit(pageSize).
|
|||
|
Find(&list).Error
|
|||
|
if err != nil {
|
|||
|
return 0, nil, err
|
|||
|
}
|
|||
|
result := make([]entity.App, 0)
|
|||
|
for _, v := range list {
|
|||
|
statusInfo, _ := ar.GetAppStatusInfo(ctx, v.AppId)
|
|||
|
v.StatusInfo = statusInfo
|
|||
|
temp := v
|
|||
|
result = append(result, *tr.CovertAppToEntity(&temp))
|
|||
|
}
|
|||
|
return int(total), result, nil
|
|||
|
}
|
|||
|
|
|||
|
func (ar *AppRepo) GetLinkAppsBySDKKey(ctx context.Context, sdkKey string, pageNo, pageSize int) (int, []entity.App, error) {
|
|||
|
br := NewBindingByMysqlRepo()
|
|||
|
//bindingInfo, err := br.GetBindingByBindingId(ctx, bindingId)
|
|||
|
bindingInfos, err := br.GetBindListBySdkKey(ctx, sdkKey)
|
|||
|
if err != nil {
|
|||
|
return 0, nil, err
|
|||
|
}
|
|||
|
//获取应用关联的小程序Id
|
|||
|
assAppIdList := make([]string, 0)
|
|||
|
for _, v := range bindingInfos {
|
|||
|
for _, y := range v.AppInfos {
|
|||
|
assAppIdList = append(assAppIdList, y.AppID)
|
|||
|
}
|
|||
|
}
|
|||
|
list := make([]sql.App, 0)
|
|||
|
var total int64
|
|||
|
err = DB.WithContext(ctx).Model(&sql.App{}).
|
|||
|
Joins("left join app_status_infos on apps.app_id = app_status_infos.app_id").
|
|||
|
Where("app_status_infos.status_value=? and apps.app_id IN (?)", entity.StPublished, assAppIdList).
|
|||
|
Count(&total).
|
|||
|
Order("create_time DESC").
|
|||
|
Offset(genOffset(pageNo, pageSize)).Limit(pageSize).
|
|||
|
Find(&list).Error
|
|||
|
if err != nil {
|
|||
|
return 0, nil, err
|
|||
|
}
|
|||
|
result := make([]entity.App, 0)
|
|||
|
for _, v := range list {
|
|||
|
statusInfo, _ := ar.GetAppStatusInfo(ctx, v.AppId)
|
|||
|
v.StatusInfo = statusInfo
|
|||
|
temp := v
|
|||
|
result = append(result, *tr.CovertAppToEntity(&temp))
|
|||
|
}
|
|||
|
return int(total), result, nil
|
|||
|
}
|
|||
|
|
|||
|
func (ar *AppRepo) AdminGetLinkApps(ctx context.Context, pageNo, pageSize int, searchText string) (int, []entity.AdminGetLinkAppsRspItem, error) {
|
|||
|
type temp struct {
|
|||
|
AppId string `gorm:"column:app_id"`
|
|||
|
AppName string `gorm:"column:app_name"`
|
|||
|
AssTime int64 `gorm:"column:ass_time"`
|
|||
|
BindingId string `gorm:"column:binding_id"`
|
|||
|
GroupName string `gorm:"column:group_name"`
|
|||
|
BindingName string `gorm:"column:binding_name"`
|
|||
|
}
|
|||
|
var (
|
|||
|
err error
|
|||
|
list = make([]temp, 0)
|
|||
|
total int64
|
|||
|
)
|
|||
|
// 和mongo保持一致,mongo 0 代表的第一页,客户端的pageNo也是从0开始的
|
|||
|
pageNo = pageNo + 1
|
|||
|
if searchText != "" {
|
|||
|
s := genLike(searchText)
|
|||
|
err = DB.WithContext(ctx).
|
|||
|
Table("link_app_infos l").
|
|||
|
Joins("JOIN apps a ON l.app_id=a.app_id").
|
|||
|
Joins("JOIN binding b ON l.binding_id=b.binding_id").
|
|||
|
Joins("JOIN app_status_infos c ON l.app_id=c.app_id").
|
|||
|
Where("c.status_value =? and (a.name LIKE ? OR b.name LIKE ? OR b.group_name LIKE ? )", entity.StPublished, s, s, s).
|
|||
|
Select("l.app_id AS app_id,a.name AS app_name,l.associated_at AS ass_time," +
|
|||
|
"l.binding_id AS binding_id,b.group_name AS group_name,b.name AS binding_name").
|
|||
|
Order("l.associated_at DESC").
|
|||
|
Offset(genOffset(pageNo, pageSize)).Limit(pageSize).
|
|||
|
Find(&list).Error
|
|||
|
} else {
|
|||
|
err = DB.WithContext(ctx).
|
|||
|
Table("link_app_infos l").
|
|||
|
Joins("JOIN apps a ON l.app_id=a.app_id").
|
|||
|
Joins("JOIN binding b ON l.binding_id=b.binding_id").
|
|||
|
Joins("JOIN app_status_infos c ON l.app_id=c.app_id").
|
|||
|
Where("c.status_value =? ", entity.StPublished).
|
|||
|
Select("l.app_id AS app_id,a.name AS app_name,l.associated_at AS ass_time," +
|
|||
|
"l.binding_id AS binding_id,b.group_name AS group_name,b.name AS binding_name").
|
|||
|
Order("l.associated_at DESC").
|
|||
|
Offset(genOffset(pageNo, pageSize)).Limit(pageSize).
|
|||
|
Find(&list).Error
|
|||
|
}
|
|||
|
if err != nil {
|
|||
|
return 0, nil, err
|
|||
|
}
|
|||
|
if searchText != "" {
|
|||
|
s := genLike(searchText)
|
|||
|
err = DB.WithContext(ctx).
|
|||
|
Table("link_app_infos l").
|
|||
|
Joins("JOIN apps a ON l.app_id=a.app_id").
|
|||
|
Joins("JOIN binding b ON l.binding_id=b.binding_id").
|
|||
|
Joins("JOIN app_status_infos c ON l.app_id=c.app_id").
|
|||
|
Where("c.status_value =? and (a.name LIKE ? OR b.name LIKE ? OR b.group_name LIKE ? )", entity.StPublished, s, s, s).
|
|||
|
Count(&total).Error
|
|||
|
} else {
|
|||
|
err = DB.WithContext(ctx).
|
|||
|
Table("link_app_infos l").
|
|||
|
Joins("JOIN app_status_infos c ON l.app_id=c.app_id").
|
|||
|
Where("c.status_value =? ", entity.StPublished).
|
|||
|
Count(&total).Error
|
|||
|
}
|
|||
|
if err != nil {
|
|||
|
return 0, nil, err
|
|||
|
}
|
|||
|
result := make([]entity.AdminGetLinkAppsRspItem, 0)
|
|||
|
for _, v := range list {
|
|||
|
item := entity.AdminGetLinkAppsRspItem{}
|
|||
|
item.Id = v.BindingId
|
|||
|
item.AppIdDetail.AppId = v.AppId
|
|||
|
item.AppIdDetail.Name = v.AppName
|
|||
|
item.AppIdDetail.Sequence = 0
|
|||
|
item.AppInfos.AssociatedAt = v.AssTime
|
|||
|
item.BindingId = v.BindingId
|
|||
|
item.GroupName = v.GroupName
|
|||
|
item.Name = v.BindingName
|
|||
|
result = append(result, item)
|
|||
|
}
|
|||
|
return int(total), result, nil
|
|||
|
}
|
|||
|
|
|||
|
func (ar *AppRepo) ApproveApp(ctx context.Context, appId string, seq int, account, reason string, isPass bool) error {
|
|||
|
now := utils.GetNowMs()
|
|||
|
params := map[string]interface{}{
|
|||
|
"status_update_time": now,
|
|||
|
"status_updater": account,
|
|||
|
"status_reason": reason,
|
|||
|
"publishing_approval_update_time": now,
|
|||
|
"publishing_approval_updater": account,
|
|||
|
"publishing_approval_reason": reason,
|
|||
|
"approval_update_time": now,
|
|||
|
"approval_updater": account,
|
|||
|
"approval_reason": reason,
|
|||
|
}
|
|||
|
if isPass {
|
|||
|
params["status_value"] = entity.StPublishApproved
|
|||
|
} else {
|
|||
|
params["status_value"] = entity.StPublishRejected
|
|||
|
}
|
|||
|
|
|||
|
return DB.WithContext(ctx).Model(&sql.AppVersionStatusInfo{}).
|
|||
|
Where("app_id=? AND sequence=?", appId, seq).
|
|||
|
Updates(params).Error
|
|||
|
}
|
|||
|
|
|||
|
func (ar *AppRepo) GetRollbackAbleList(ctx context.Context, groupId, appId string, latestPubSeq int) ([]entity.AppVersion, error) {
|
|||
|
appVers := make([]sql.AppVersion, 0)
|
|||
|
limitVersion := 5 // 最近5个版本, 不是最近下架的5个版本
|
|||
|
/*query := "app_versions.app_id=? AND app_versions.group_id=? AND " +
|
|||
|
"StatusInfo.app_id=? AND StatusInfo.status_value=? AND " +
|
|||
|
"StatusInfo.sequence>=? AND StatusInfo.sequence<? AND " +
|
|||
|
"(StatusInfo.unpublished_type=? OR StatusInfo.unpublished_type=?)"*/
|
|||
|
query := "app_versions.app_id=? AND app_versions.group_id=? AND " +
|
|||
|
"app_version_status_infos.app_id=? AND app_version_status_infos.status_value=? AND " +
|
|||
|
"app_version_status_infos.sequence>=? AND app_version_status_infos.sequence<? AND " +
|
|||
|
"(app_version_status_infos.unpublished_type=? OR app_version_status_infos.unpublished_type=?)"
|
|||
|
queryList := []interface{}{appId, groupId, appId, entity.StUnpublished, latestPubSeq - limitVersion, latestPubSeq, entity.TypeUnpublishedByDev, entity.TypeUnpublishedDueToNewSeq}
|
|||
|
err := DB.WithContext(ctx).Model(&sql.AppVersion{}).
|
|||
|
Where(query, queryList...).
|
|||
|
//Joins("StatusInfo").
|
|||
|
//Joins("BuildInfo").
|
|||
|
Joins("left join app_version_status_infos on concat(app_versions.app_id,app_versions.sequence)=concat(app_version_status_infos.app_id,app_version_status_infos.sequence)").
|
|||
|
Order("app_versions.sequence DESC").
|
|||
|
Find(&appVers).Error
|
|||
|
if err != nil {
|
|||
|
return nil, err
|
|||
|
}
|
|||
|
result := make([]entity.AppVersion, 0)
|
|||
|
for _, v := range appVers {
|
|||
|
appBuildInfo, statusInfo, _ := ar.GetAppBuildInfoAndAppVersionStatusInfo(ctx, v.BuildInfoId, v.AppId, v.Sequence)
|
|||
|
v.BuildInfo = appBuildInfo
|
|||
|
v.StatusInfo = statusInfo
|
|||
|
temp := v
|
|||
|
result = append(result, *tr.CovertAppVerToEntity(&temp))
|
|||
|
}
|
|||
|
return result, nil
|
|||
|
}
|
|||
|
|
|||
|
func (ar *AppRepo) UpdateGrayStatus(ctx context.Context, appId string, seq int, status bool) error {
|
|||
|
return DB.WithContext(ctx).Model(&sql.AppVersion{}).Where("app_id=? AND sequence=?", appId, seq).Update("in_gray_release", status).Error
|
|||
|
}
|
|||
|
func (ar *AppRepo) UpdateExpire(ctx context.Context, appId string, expire int64) error {
|
|||
|
return DB.WithContext(ctx).Model(&sql.App{}).Where("app_id=? ", appId).Update("expire", expire).Error
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
func (ar *AppRepo) UpdateExpireAppVersion(ctx context.Context, appId string, seq int, expire int64) error {
|
|||
|
return DB.WithContext(ctx).Model(&sql.AppVersion{}).Where("app_id=? AND sequence=?", appId, seq).Update("expire", expire).Error
|
|||
|
}
|
|||
|
|
|||
|
func (ar *AppRepo) GetCreatedStatistics(ctx context.Context, startTime, endTime int64, groupId string, isForbidden int) (int, error) {
|
|||
|
/*
|
|||
|
filter := bson.M{}
|
|||
|
if groupId != "" {
|
|||
|
filter["groupId"] = groupId
|
|||
|
}
|
|||
|
if startTime != -1 && startTime != 0 {
|
|||
|
filter["created"] = bson.M{"$gt": startTime}
|
|||
|
}
|
|||
|
if endTime != -1 && endTime != 0 {
|
|||
|
if _, ok := filter["created"]; ok {
|
|||
|
filter["created"] = bson.M{"$gt": startTime, "$lte": endTime}
|
|||
|
}
|
|||
|
}
|
|||
|
log.Debugf("GetCreatedStatistics filter:%+v", filter)
|
|||
|
return appTable.Count(ctx, filter)
|
|||
|
*/
|
|||
|
var (
|
|||
|
query = ""
|
|||
|
queryList = make([]interface{}, 0)
|
|||
|
err error
|
|||
|
total int64
|
|||
|
)
|
|||
|
if groupId != "" {
|
|||
|
query += "group_id = ? "
|
|||
|
queryList = append(queryList, groupId)
|
|||
|
}
|
|||
|
if startTime > 0 {
|
|||
|
query = genQuery(query, "AND", "create_time>? ")
|
|||
|
queryList = append(queryList, startTime)
|
|||
|
}
|
|||
|
if endTime > 0 {
|
|||
|
query = genQuery(query, "AND", "create_time<=? ")
|
|||
|
queryList = append(queryList, endTime)
|
|||
|
}
|
|||
|
switch isForbidden {
|
|||
|
case entity.APP_FORBIDDEN_NOT_STATUS, entity.APP_FORBIDDEN_IS_STATUS:
|
|||
|
query = genQuery(query, "AND", "is_forbidden=? ")
|
|||
|
queryList = append(queryList, isForbidden)
|
|||
|
}
|
|||
|
if query != "" {
|
|||
|
err = DB.WithContext(ctx).
|
|||
|
Model(&sql.App{}).
|
|||
|
Where(query, queryList...).
|
|||
|
Count(&total).Error
|
|||
|
} else {
|
|||
|
err = DB.WithContext(ctx).
|
|||
|
Model(&sql.App{}).
|
|||
|
Count(&total).Error
|
|||
|
}
|
|||
|
return int(total), err
|
|||
|
}
|
|||
|
|
|||
|
func (ar *AppRepo) GetPublishedStatistics(ctx context.Context, startTime, endTime int64, groupId string) (int, error) {
|
|||
|
var (
|
|||
|
query = ""
|
|||
|
queryList = make([]interface{}, 0)
|
|||
|
err error
|
|||
|
total int64
|
|||
|
)
|
|||
|
query += "status_value=? "
|
|||
|
queryList = append(queryList, entity.StPublished)
|
|||
|
|
|||
|
if groupId != "" {
|
|||
|
query += "group_id = ? "
|
|||
|
queryList = append(queryList, groupId)
|
|||
|
}
|
|||
|
if startTime > 0 {
|
|||
|
query = genQuery(query, "AND", "published_update_time>? ")
|
|||
|
queryList = append(queryList, startTime)
|
|||
|
}
|
|||
|
if endTime > 0 {
|
|||
|
query = genQuery(query, "AND", "published_update_time<=? ")
|
|||
|
queryList = append(queryList, endTime)
|
|||
|
}
|
|||
|
if query != "" {
|
|||
|
err = DB.WithContext(ctx).Model(&sql.AppStatusInfo{}).
|
|||
|
Where(query, queryList...).
|
|||
|
Count(&total).Error
|
|||
|
} else {
|
|||
|
err = DB.WithContext(ctx).Model(&sql.AppStatusInfo{}).Count(&total).Error
|
|||
|
}
|
|||
|
return int(total), err
|
|||
|
}
|
|||
|
|
|||
|
//GetSubmittedStatistics 累计审核的小程序----只要小程序被审核过都算
|
|||
|
func (ar *AppRepo) GetSubmittedStatistics(ctx context.Context, startTime, endTime int64, groupId string, distinct bool) (int, error) {
|
|||
|
var (
|
|||
|
query = ""
|
|||
|
queryList = make([]interface{}, 0)
|
|||
|
err error
|
|||
|
total int64
|
|||
|
)
|
|||
|
query += "status_value<>? "
|
|||
|
queryList = append(queryList, entity.StInDevelopment)
|
|||
|
|
|||
|
if groupId != "" {
|
|||
|
query += "AND group_id = ? "
|
|||
|
queryList = append(queryList, groupId)
|
|||
|
}
|
|||
|
if startTime > 0 {
|
|||
|
query = genQuery(query, "AND", "publishing_update_time>? ")
|
|||
|
queryList = append(queryList, startTime)
|
|||
|
}
|
|||
|
if endTime > 0 {
|
|||
|
query = genQuery(query, "AND", "publishing_update_time<=? ")
|
|||
|
queryList = append(queryList, endTime)
|
|||
|
}
|
|||
|
if distinct {
|
|||
|
if query != "" {
|
|||
|
err = DB.WithContext(ctx).Model(&sql.AppVersionStatusInfo{}).
|
|||
|
Where(query, queryList...).
|
|||
|
Select("count(distinct app_id)").
|
|||
|
Count(&total).Error
|
|||
|
} else {
|
|||
|
err = DB.WithContext(ctx).Model(&sql.AppVersionStatusInfo{}).
|
|||
|
Select("count(distinct app_id)").
|
|||
|
Count(&total).Error
|
|||
|
}
|
|||
|
} else {
|
|||
|
if query != "" {
|
|||
|
err = DB.WithContext(ctx).Model(&sql.AppVersionStatusInfo{}).
|
|||
|
Where(query, queryList...).
|
|||
|
Count(&total).Error
|
|||
|
} else {
|
|||
|
err = DB.WithContext(ctx).Model(&sql.AppVersionStatusInfo{}).
|
|||
|
Count(&total).Error
|
|||
|
}
|
|||
|
}
|
|||
|
return int(total), err
|
|||
|
}
|
|||
|
|
|||
|
//审核通过小程序
|
|||
|
func (ar *AppRepo) GetApprovedStatistics(ctx context.Context, startTime, endTime int64, groupId string, distinct bool) (int, error) {
|
|||
|
var (
|
|||
|
query = ""
|
|||
|
queryList = make([]interface{}, 0)
|
|||
|
err error
|
|||
|
total int64
|
|||
|
)
|
|||
|
query += "status_value IN (?) "
|
|||
|
queryList = append(queryList, []string{entity.StPublishApproved, entity.StPublished, entity.StUnpublishing, entity.StUnpublishApproved, entity.StUnpublishRejected, entity.StUnpublished})
|
|||
|
|
|||
|
if groupId != "" {
|
|||
|
query += "AND group_id = ? "
|
|||
|
queryList = append(queryList, groupId)
|
|||
|
}
|
|||
|
if startTime > 0 {
|
|||
|
query = genQuery(query, "AND", "published_update_time>? ")
|
|||
|
queryList = append(queryList, startTime)
|
|||
|
}
|
|||
|
if endTime > 0 {
|
|||
|
query = genQuery(query, "AND", "published_update_time<=? ")
|
|||
|
queryList = append(queryList, endTime)
|
|||
|
}
|
|||
|
if distinct {
|
|||
|
if query != "" {
|
|||
|
err = DB.WithContext(ctx).Debug().
|
|||
|
Model(&sql.AppVersionStatusInfo{}).
|
|||
|
Where(query, queryList...).
|
|||
|
Select("COUNT(DISTINCT app_id)").
|
|||
|
Count(&total).Error
|
|||
|
} else {
|
|||
|
err = DB.WithContext(ctx).Debug().
|
|||
|
Model(&sql.AppVersionStatusInfo{}).
|
|||
|
Select("COUNT(DISTINCT app_id)").
|
|||
|
Count(&total).Error
|
|||
|
}
|
|||
|
} else {
|
|||
|
if query != "" {
|
|||
|
err = DB.WithContext(ctx).Model(&sql.AppVersionStatusInfo{}).Where(query, queryList...).Count(&total).Error
|
|||
|
} else {
|
|||
|
err = DB.WithContext(ctx).Model(&sql.AppVersionStatusInfo{}).Count(&total).Error
|
|||
|
}
|
|||
|
}
|
|||
|
return int(total), err
|
|||
|
}
|
|||
|
|
|||
|
func (ar *AppRepo) GetAppClassPer(ctx context.Context, status string) ([]entity.AppClassPerRsp, error) {
|
|||
|
//先获取所有的class
|
|||
|
_, typeConfigList, err := NewTypeConfigByMysqlRepo().GetAll(ctx)
|
|||
|
if err != nil {
|
|||
|
return nil, err
|
|||
|
}
|
|||
|
type TempRsp struct {
|
|||
|
AppClass string `gorm:"column:app_class"`
|
|||
|
Count int `gorm:"column:count"`
|
|||
|
}
|
|||
|
rspList := make([]TempRsp, 0)
|
|||
|
if status == "published" {
|
|||
|
err = DB.WithContext(ctx).Model(&sql.App{}).
|
|||
|
Joins("StatusInfo").
|
|||
|
Where("StatusInfo.status_value = ?", entity.StPublished).
|
|||
|
Select("apps.app_class as app_class ,count(apps.class) as count").
|
|||
|
Group("app_class").Find(&rspList).Error
|
|||
|
if err != nil {
|
|||
|
return nil, err
|
|||
|
}
|
|||
|
} else {
|
|||
|
err = DB.WithContext(ctx).Model(&sql.App{}).
|
|||
|
Select("app_class,count(*) as count").
|
|||
|
Group("app_class").Find(&rspList).Error
|
|||
|
if err != nil {
|
|||
|
return nil, err
|
|||
|
}
|
|||
|
}
|
|||
|
typeConfigListMap := make(map[string]string)
|
|||
|
for _, v := range typeConfigList {
|
|||
|
typeConfigListMap[v.Value] = v.CustomData.Chinese
|
|||
|
}
|
|||
|
result := make([]entity.AppClassPerRsp, 0)
|
|||
|
for _, v := range rspList {
|
|||
|
item := entity.AppClassPerRsp{
|
|||
|
Class: v.AppClass,
|
|||
|
Count: v.Count,
|
|||
|
}
|
|||
|
if name, ok := typeConfigListMap[v.AppClass]; ok {
|
|||
|
item.Name = []string{name}
|
|||
|
}
|
|||
|
result = append(result, item)
|
|||
|
}
|
|||
|
return result, err
|
|||
|
}
|
|||
|
|
|||
|
func (ar *AppRepo) GetAppVerLimitByIdentity(ctx context.Context, t, appId, identity string, limit int) ([]entity.AppVersion, error) {
|
|||
|
var (
|
|||
|
list = make([]sql.AppVersion, 0)
|
|||
|
query = ""
|
|||
|
err error
|
|||
|
)
|
|||
|
query = "app_build_infos.file_md5=?"
|
|||
|
if t == "sha256" {
|
|||
|
query = "app_build_infos.encrypted_file_sha256=?"
|
|||
|
}
|
|||
|
err = DB.WithContext(ctx).
|
|||
|
//Joins("BuildInfo").
|
|||
|
//Joins("StatusInfo").
|
|||
|
Joins("left join app_build_infos on app_versions.build_info_id = app_build_infos.trace_id").
|
|||
|
Where(query, identity).
|
|||
|
Order("sequence DESC").
|
|||
|
Limit(limit).Find(&list).Error
|
|||
|
if err != nil {
|
|||
|
return nil, err
|
|||
|
}
|
|||
|
result := make([]entity.AppVersion, 0)
|
|||
|
for _, v := range list {
|
|||
|
appBuildInfo, statusInfo, _ := ar.GetAppBuildInfoAndAppVersionStatusInfo(ctx, v.BuildInfoId, v.AppId, v.Sequence)
|
|||
|
v.BuildInfo = appBuildInfo
|
|||
|
v.StatusInfo = statusInfo
|
|||
|
temp := v
|
|||
|
result = append(result, *tr.CovertAppVerToEntity(&temp))
|
|||
|
}
|
|||
|
return result, nil
|
|||
|
}
|
|||
|
|
|||
|
func (ar *AppRepo) GetGrayStatisticsVerList(ctx context.Context, appId string, seq int, begin, end int64) (int, []entity.AppVersion, error) {
|
|||
|
var (
|
|||
|
list = make([]sql.AppVersion, 0)
|
|||
|
total int64
|
|||
|
query = ""
|
|||
|
queryList = make([]interface{}, 0)
|
|||
|
err error
|
|||
|
)
|
|||
|
query = "app_versions.app_id=? AND app_versions.sequence<=? "
|
|||
|
queryList = append(queryList, appId, seq)
|
|||
|
if end == 0 {
|
|||
|
query += "AND (app_version_status_infos.status_value=? OR (app_version_status_infos.status_value=? AND app_version_status_infos.unpublished_update_time >=?) ) "
|
|||
|
queryList = append(queryList, entity.StPublished, entity.StUnpublished, begin)
|
|||
|
} else {
|
|||
|
query += "AND ( (app_version_status_infos.status_value=? AND app_version_status_infos.published_update_time<=?) OR " +
|
|||
|
"(app_version_status_infos.status_value=? AND ((app_version_status_infos.published_update_time >=? AND app_version_status_infos.published_update_time<=?) " +
|
|||
|
"OR (app_version_status_infos.unpublished_update_time>=? AND app_version_status_infos.unpublished_update_time<=?)))) "
|
|||
|
queryList = append(queryList, entity.StPublished, end, entity.StUnpublished, begin, end, begin, end)
|
|||
|
}
|
|||
|
err = DB.WithContext(ctx).Model(&sql.AppVersion{}).Debug().
|
|||
|
//Joins("BuildInfo").
|
|||
|
//Joins("StatusInfo").
|
|||
|
Joins("left join app_version_status_infos on concat(app_versions.app_id,app_versions.sequence)=concat(app_version_status_infos.app_id,app_version_status_infos.sequence)").
|
|||
|
Where(query, queryList...).
|
|||
|
Order("app_versions.sequence ASC").
|
|||
|
Find(&list).Error
|
|||
|
if err != nil {
|
|||
|
return 0, nil, err
|
|||
|
}
|
|||
|
err = DB.WithContext(ctx).Model(&sql.AppVersion{}).
|
|||
|
//Joins("BuildInfo").
|
|||
|
//Joins("StatusInfo").
|
|||
|
Joins("left join app_version_status_infos on concat(app_versions.app_id,app_versions.sequence)=concat(app_version_status_infos.app_id,app_version_status_infos.sequence)").
|
|||
|
Where(query, queryList...).
|
|||
|
Count(&total).Error
|
|||
|
if err != nil {
|
|||
|
return 0, nil, err
|
|||
|
}
|
|||
|
result := make([]entity.AppVersion, 0)
|
|||
|
for _, v := range list {
|
|||
|
appBuildInfo, statusInfo, _ := ar.GetAppBuildInfoAndAppVersionStatusInfo(ctx, v.BuildInfoId, v.AppId, v.Sequence)
|
|||
|
v.BuildInfo = appBuildInfo
|
|||
|
v.StatusInfo = statusInfo
|
|||
|
temp := v
|
|||
|
result = append(result, *tr.CovertAppVerToEntity(&temp))
|
|||
|
}
|
|||
|
return int(total), result, nil
|
|||
|
}
|
|||
|
|
|||
|
func (ar *AppRepo) GetAppClassList(ctx context.Context) ([]entity.CItem, error) {
|
|||
|
apps := make([]sql.App, 0)
|
|||
|
err := DB.Model(&sql.App{}).
|
|||
|
Select("apps.app_class").Group("apps.app_class").
|
|||
|
Find(&apps).Error
|
|||
|
if err != nil {
|
|||
|
return make([]entity.CItem, 0), err
|
|||
|
}
|
|||
|
|
|||
|
cItems := make([]entity.CItem, 0)
|
|||
|
for _, v := range apps {
|
|||
|
cItem := entity.CItem{
|
|||
|
Id: v.AppClass,
|
|||
|
}
|
|||
|
cItems = append(cItems, cItem)
|
|||
|
}
|
|||
|
|
|||
|
return cItems, nil
|
|||
|
}
|
|||
|
|
|||
|
func (ar *AppRepo) GetAppTagList(ctx context.Context) ([]entity.TagItem, error) {
|
|||
|
apps := make([]sql.App, 0)
|
|||
|
err := DB.Model(&sql.App{}).
|
|||
|
Select("apps.app_tag").Group("apps.app_tag").
|
|||
|
Find(&apps).Error
|
|||
|
if err != nil {
|
|||
|
return make([]entity.TagItem, 0), err
|
|||
|
}
|
|||
|
|
|||
|
tagItem := make([]entity.TagItem, 0)
|
|||
|
for _, v := range apps {
|
|||
|
var id []string
|
|||
|
appTags := strings.Split(v.AppTag, ",")
|
|||
|
for _, x := range appTags {
|
|||
|
id = append(id, x)
|
|||
|
}
|
|||
|
tag := entity.TagItem{
|
|||
|
Id: id,
|
|||
|
}
|
|||
|
tagItem = append(tagItem, tag)
|
|||
|
}
|
|||
|
|
|||
|
return tagItem, nil
|
|||
|
}
|
|||
|
|
|||
|
func (ar *AppRepo) GetAppsBySearchText(ctx context.Context, searchText string) ([]entity.App, error) {
|
|||
|
list := make([]sql.App, 0)
|
|||
|
err := DB.WithContext(ctx).Model(&sql.App{}).
|
|||
|
Where("app_id LIKE ? OR name LIKE ?", "%"+searchText+"%", "%"+searchText+"%").
|
|||
|
Find(&list).Error
|
|||
|
if err != nil {
|
|||
|
return nil, err
|
|||
|
}
|
|||
|
result := make([]entity.App, 0)
|
|||
|
for _, v := range list {
|
|||
|
/*statusInfo, _ := ar.GetAppStatusInfo(ctx, v.AppId)
|
|||
|
v.StatusInfo = statusInfo*/
|
|||
|
temp := v
|
|||
|
result = append(result, *tr.CovertAppToEntity(&temp))
|
|||
|
}
|
|||
|
return result, nil
|
|||
|
}
|
|||
|
|
|||
|
func (ar *AppRepo) GetAppByCreator(ctx context.Context, phone string) ([]entity.App, error) {
|
|||
|
list := make([]sql.App, 0)
|
|||
|
err := DB.WithContext(ctx).Model(&sql.App{}).
|
|||
|
Where("created_by = ? ", phone).
|
|||
|
Find(&list).Error
|
|||
|
if err != nil {
|
|||
|
return nil, err
|
|||
|
}
|
|||
|
|
|||
|
result := make([]entity.App, 0)
|
|||
|
for _, v := range list {
|
|||
|
/*statusInfo, _ := ar.GetAppStatusInfo(ctx, v.AppId)
|
|||
|
v.StatusInfo = statusInfo*/
|
|||
|
temp := v
|
|||
|
result = append(result, *tr.CovertAppToEntity(&temp))
|
|||
|
}
|
|||
|
return result, nil
|
|||
|
}
|