projectapi.go 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. // 模块模型操作接口-项目
  2. // 秒寻科技
  3. // zt 2024-02-03
  4. package projectapi
  5. import (
  6. "errors"
  7. "ipsomc/core/dao/mysql/mysqlapi"
  8. "ipsomc/core/dao/mysql/mysqlmodel"
  9. "ipsomc/module/bparam/bparammodel"
  10. "ipsomc/module/project/projectmodel"
  11. "ipsomc/util"
  12. )
  13. type ProjectApi struct {
  14. MySqlApi mysqlapi.MySqlApi
  15. }
  16. // 生成项目编号
  17. func (obj *ProjectApi) GenerateProjectID() (string, error) {
  18. dataModel := new(projectmodel.Project)
  19. var strProjectId string = ""
  20. var count int = 0
  21. for {
  22. ProjectID := util.GenRandomProjectID(7) //生成项目ID,7个字符
  23. ProjectID = "0" + ProjectID
  24. if err := obj.MySqlApi.GetDb().Model(dataModel).Where("project_id=?", ProjectID).Count(&count).Error; err != nil {
  25. return strProjectId, err
  26. }
  27. if count <= 0 {
  28. strProjectId = ProjectID
  29. break
  30. }
  31. }
  32. return strProjectId, nil
  33. }
  34. // 查重
  35. func (obj *ProjectApi) AddProject(dataModel *projectmodel.Project) error {
  36. var count uint
  37. //项目名称查重
  38. if err := obj.MySqlApi.GetDb().Model(dataModel).Where("company_id=? and name=?", dataModel.CompanyID, dataModel.Name).Count(&count).Error; err != nil {
  39. return err
  40. }
  41. if count > 0 {
  42. return errors.New("该项目已经存在")
  43. }
  44. //项目编号查重
  45. count = 0
  46. if err := obj.MySqlApi.GetDb().Model(dataModel).Where("project_id=?", dataModel.ProjectID).Count(&count).Error; err != nil {
  47. return err
  48. }
  49. if count > 0 {
  50. return errors.New("该项目编号已经存在")
  51. }
  52. //查重二级域名
  53. count = 0
  54. if err := obj.MySqlApi.GetDb().Model(dataModel).Where("domain_name=?", dataModel.DomainName).Count(&count).Error; err != nil {
  55. return err
  56. }
  57. if count > 0 {
  58. return errors.New("该二级域名已经存在")
  59. }
  60. if err := obj.MySqlApi.AddItem(dataModel); err != nil {
  61. return errors.New("数据库操作失败")
  62. }
  63. return nil
  64. }
  65. // 修改
  66. func (obj *ProjectApi) UpdateProject(dataModel *projectmodel.Project, dataMap map[string]interface{}) error {
  67. var count uint
  68. var tmpModel projectmodel.Project
  69. //查重
  70. if err := obj.MySqlApi.GetDb().Model(&tmpModel).Where("id<>? and company_id=? and name=?", dataModel.ID, dataModel.CompanyID, dataModel.Name).Count(&count).Error; err != nil {
  71. return err
  72. }
  73. if count > 0 {
  74. return errors.New("该项目已经存在")
  75. }
  76. //查重二级域名
  77. count = 0
  78. if err := obj.MySqlApi.GetDb().Model(dataModel).Where("id<>? and domain_name=?", dataModel.ID, dataModel.DomainName).Count(&count).Error; err != nil {
  79. return err
  80. }
  81. if count > 0 {
  82. return errors.New("访问域名已经存在")
  83. }
  84. if err := obj.MySqlApi.UpdateItem(dataModel, dataMap); err != nil {
  85. return err
  86. }
  87. return nil
  88. }
  89. // 删除,删除项目的同时还要删除项目下面的所有基站
  90. func (obj *ProjectApi) DeleteProject(dataModel *projectmodel.Project) error {
  91. //开启一个事务
  92. tx := obj.MySqlApi.GetDb().Begin()
  93. //基于项目ID获得项目资料
  94. if err := tx.Model(dataModel).Where("id=?", dataModel.ID).First(dataModel).Error; err != nil {
  95. tx.Rollback()
  96. return err
  97. }
  98. //删除该项目的所有基站
  99. if err := tx.Delete(&bparammodel.BtsBaseParam{}, "project_id=?", dataModel.ProjectID).Error; err != nil {
  100. tx.Rollback()
  101. return err
  102. }
  103. //删除项目资料
  104. if err := tx.Delete(&projectmodel.Project{}, "id=?", dataModel.ID).Error; err != nil {
  105. tx.Rollback()
  106. return err
  107. }
  108. //提交事务
  109. if err := tx.Commit().Error; err != nil {
  110. tx.Rollback()
  111. return err
  112. }
  113. return nil
  114. }
  115. // 查询单条记录
  116. func (obj *ProjectApi) GetProjectById(dataModel *projectmodel.Project) error {
  117. if err := obj.MySqlApi.GetItemByID(dataModel); err != nil {
  118. return errors.New("查询记录失败")
  119. }
  120. return nil
  121. }
  122. // 根据域名获得项目
  123. func (obj *ProjectApi) GetProjectByDomainName(dataModel *projectmodel.Project) error {
  124. if err := obj.MySqlApi.GetDb().Model(dataModel).Where("domain_name=?", dataModel.DomainName).First(dataModel).Error; err != nil {
  125. return errors.New("查询记录失败")
  126. }
  127. return nil
  128. }
  129. // 查询记录
  130. func (obj *ProjectApi) GetProjectList(dataModel *projectmodel.Project, listParam *mysqlmodel.ListParam, dataList interface{}) error {
  131. if err := obj.MySqlApi.GetItemList(dataModel, listParam, dataList); err != nil {
  132. return err
  133. }
  134. return nil
  135. }
  136. // 分页查询记录
  137. func (obj *ProjectApi) GetProjectPageList(dataModel *projectmodel.Project, pageListParam *mysqlmodel.PageListParam, dataList interface{}) (mysqlmodel.PageListData, error) {
  138. pageListData, err := obj.MySqlApi.GetPageItemList(dataModel, pageListParam, dataList)
  139. if err != nil {
  140. return pageListData, err
  141. }
  142. return pageListData, nil
  143. }
  144. // 获得公司项目数
  145. func (obj *ProjectApi) GetCompanyProjectSum(companyId int) (int, error) {
  146. dataModel := new(projectmodel.Project)
  147. var count int = 0
  148. //获得公司项目数
  149. if err := obj.MySqlApi.GetDb().Model(dataModel).Where("company_id=?", companyId).Count(&count).Error; err != nil {
  150. return 0, err
  151. }
  152. return count, nil
  153. }