sys_version.go 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. package system
  2. import (
  3. "context"
  4. "github.com/flipped-aurora/gin-vue-admin/server/global"
  5. "github.com/flipped-aurora/gin-vue-admin/server/model/system"
  6. systemReq "github.com/flipped-aurora/gin-vue-admin/server/model/system/request"
  7. "gorm.io/gorm"
  8. )
  9. type SysVersionService struct{}
  10. // CreateSysVersion 创建版本管理记录
  11. // Author [yourname](https://github.com/yourname)
  12. func (sysVersionService *SysVersionService) CreateSysVersion(ctx context.Context, sysVersion *system.SysVersion) (err error) {
  13. err = global.GVA_DB.Create(sysVersion).Error
  14. return err
  15. }
  16. // DeleteSysVersion 删除版本管理记录
  17. // Author [yourname](https://github.com/yourname)
  18. func (sysVersionService *SysVersionService) DeleteSysVersion(ctx context.Context, ID string) (err error) {
  19. err = global.GVA_DB.Delete(&system.SysVersion{}, "id = ?", ID).Error
  20. return err
  21. }
  22. // DeleteSysVersionByIds 批量删除版本管理记录
  23. // Author [yourname](https://github.com/yourname)
  24. func (sysVersionService *SysVersionService) DeleteSysVersionByIds(ctx context.Context, IDs []string) (err error) {
  25. err = global.GVA_DB.Where("id in ?", IDs).Delete(&system.SysVersion{}).Error
  26. return err
  27. }
  28. // GetSysVersion 根据ID获取版本管理记录
  29. // Author [yourname](https://github.com/yourname)
  30. func (sysVersionService *SysVersionService) GetSysVersion(ctx context.Context, ID string) (sysVersion system.SysVersion, err error) {
  31. err = global.GVA_DB.Where("id = ?", ID).First(&sysVersion).Error
  32. return
  33. }
  34. // GetSysVersionInfoList 分页获取版本管理记录
  35. // Author [yourname](https://github.com/yourname)
  36. func (sysVersionService *SysVersionService) GetSysVersionInfoList(ctx context.Context, info systemReq.SysVersionSearch) (list []system.SysVersion, total int64, err error) {
  37. limit := info.PageSize
  38. offset := info.PageSize * (info.Page - 1)
  39. // 创建db
  40. db := global.GVA_DB.Model(&system.SysVersion{})
  41. var sysVersions []system.SysVersion
  42. // 如果有条件搜索 下方会自动创建搜索语句
  43. if len(info.CreatedAtRange) == 2 {
  44. db = db.Where("created_at BETWEEN ? AND ?", info.CreatedAtRange[0], info.CreatedAtRange[1])
  45. }
  46. if info.VersionName != nil && *info.VersionName != "" {
  47. db = db.Where("version_name LIKE ?", "%"+*info.VersionName+"%")
  48. }
  49. if info.VersionCode != nil && *info.VersionCode != "" {
  50. db = db.Where("version_code = ?", *info.VersionCode)
  51. }
  52. err = db.Count(&total).Error
  53. if err != nil {
  54. return
  55. }
  56. if limit != 0 {
  57. db = db.Limit(limit).Offset(offset)
  58. }
  59. err = db.Find(&sysVersions).Error
  60. return sysVersions, total, err
  61. }
  62. func (sysVersionService *SysVersionService) GetSysVersionPublic(ctx context.Context) {
  63. // 此方法为获取数据源定义的数据
  64. // 请自行实现
  65. }
  66. // GetMenusByIds 根据ID列表获取菜单数据
  67. func (sysVersionService *SysVersionService) GetMenusByIds(ctx context.Context, ids []uint) (menus []system.SysBaseMenu, err error) {
  68. err = global.GVA_DB.Where("id in ?", ids).Preload("Parameters").Preload("MenuBtn").Find(&menus).Error
  69. return
  70. }
  71. // GetApisByIds 根据ID列表获取API数据
  72. func (sysVersionService *SysVersionService) GetApisByIds(ctx context.Context, ids []uint) (apis []system.SysApi, err error) {
  73. err = global.GVA_DB.Where("id in ?", ids).Find(&apis).Error
  74. return
  75. }
  76. // GetDictionariesByIds 根据ID列表获取字典数据
  77. func (sysVersionService *SysVersionService) GetDictionariesByIds(ctx context.Context, ids []uint) (dictionaries []system.SysDictionary, err error) {
  78. err = global.GVA_DB.Where("id in ?", ids).Preload("SysDictionaryDetails").Find(&dictionaries).Error
  79. return
  80. }
  81. // ImportMenus 导入菜单数据
  82. func (sysVersionService *SysVersionService) ImportMenus(ctx context.Context, menus []system.SysBaseMenu) error {
  83. return global.GVA_DB.Transaction(func(tx *gorm.DB) error {
  84. // 递归创建菜单
  85. return sysVersionService.createMenusRecursively(tx, menus, 0)
  86. })
  87. }
  88. // createMenusRecursively 递归创建菜单
  89. func (sysVersionService *SysVersionService) createMenusRecursively(tx *gorm.DB, menus []system.SysBaseMenu, parentId uint) error {
  90. for _, menu := range menus {
  91. // 检查菜单是否已存在
  92. var existingMenu system.SysBaseMenu
  93. if err := tx.Where("name = ? AND path = ?", menu.Name, menu.Path).First(&existingMenu).Error; err == nil {
  94. // 菜单已存在,使用现有菜单ID继续处理子菜单
  95. if len(menu.Children) > 0 {
  96. if err := sysVersionService.createMenusRecursively(tx, menu.Children, existingMenu.ID); err != nil {
  97. return err
  98. }
  99. }
  100. continue
  101. }
  102. // 保存参数和按钮数据,稍后处理
  103. parameters := menu.Parameters
  104. menuBtns := menu.MenuBtn
  105. children := menu.Children
  106. // 创建新菜单(不包含关联数据)
  107. newMenu := system.SysBaseMenu{
  108. ParentId: parentId,
  109. Path: menu.Path,
  110. Name: menu.Name,
  111. Hidden: menu.Hidden,
  112. Component: menu.Component,
  113. Sort: menu.Sort,
  114. Meta: menu.Meta,
  115. }
  116. if err := tx.Create(&newMenu).Error; err != nil {
  117. return err
  118. }
  119. // 创建参数
  120. if len(parameters) > 0 {
  121. for _, param := range parameters {
  122. newParam := system.SysBaseMenuParameter{
  123. SysBaseMenuID: newMenu.ID,
  124. Type: param.Type,
  125. Key: param.Key,
  126. Value: param.Value,
  127. }
  128. if err := tx.Create(&newParam).Error; err != nil {
  129. return err
  130. }
  131. }
  132. }
  133. // 创建菜单按钮
  134. if len(menuBtns) > 0 {
  135. for _, btn := range menuBtns {
  136. newBtn := system.SysBaseMenuBtn{
  137. SysBaseMenuID: newMenu.ID,
  138. Name: btn.Name,
  139. Desc: btn.Desc,
  140. }
  141. if err := tx.Create(&newBtn).Error; err != nil {
  142. return err
  143. }
  144. }
  145. }
  146. // 递归处理子菜单
  147. if len(children) > 0 {
  148. if err := sysVersionService.createMenusRecursively(tx, children, newMenu.ID); err != nil {
  149. return err
  150. }
  151. }
  152. }
  153. return nil
  154. }
  155. // ImportApis 导入API数据
  156. func (sysVersionService *SysVersionService) ImportApis(apis []system.SysApi) error {
  157. return global.GVA_DB.Transaction(func(tx *gorm.DB) error {
  158. for _, api := range apis {
  159. // 检查API是否已存在
  160. var existingApi system.SysApi
  161. if err := tx.Where("path = ? AND method = ?", api.Path, api.Method).First(&existingApi).Error; err == nil {
  162. // API已存在,跳过
  163. continue
  164. }
  165. // 创建新API
  166. newApi := system.SysApi{
  167. Path: api.Path,
  168. Description: api.Description,
  169. ApiGroup: api.ApiGroup,
  170. Method: api.Method,
  171. }
  172. if err := tx.Create(&newApi).Error; err != nil {
  173. return err
  174. }
  175. }
  176. return nil
  177. })
  178. }
  179. // ImportDictionaries 导入字典数据
  180. func (sysVersionService *SysVersionService) ImportDictionaries(dictionaries []system.SysDictionary) error {
  181. return global.GVA_DB.Transaction(func(tx *gorm.DB) error {
  182. for _, dict := range dictionaries {
  183. // 检查字典是否已存在
  184. var existingDict system.SysDictionary
  185. if err := tx.Where("type = ?", dict.Type).First(&existingDict).Error; err == nil {
  186. // 字典已存在,跳过
  187. continue
  188. }
  189. // 创建新字典
  190. newDict := system.SysDictionary{
  191. Name: dict.Name,
  192. Type: dict.Type,
  193. Status: dict.Status,
  194. Desc: dict.Desc,
  195. SysDictionaryDetails: dict.SysDictionaryDetails,
  196. }
  197. if err := tx.Create(&newDict).Error; err != nil {
  198. return err
  199. }
  200. }
  201. return nil
  202. })
  203. }