bparamapi.go 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. // 模块模型操作接口-基站参数,包括基本参数和位置参数
  2. // 秒寻科技
  3. // zt 2024-02-15
  4. package bparamapi
  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/public"
  12. "github.com/jinzhu/gorm"
  13. )
  14. type BparamApi struct {
  15. MySqlApi mysqlapi.MySqlApi
  16. }
  17. // 增加基站基本参数
  18. func (obj *BparamApi) AddBtsBaseParam(dataModel *bparammodel.BtsBaseParam) error {
  19. btsBaseModel := new(bparammodel.BtsBaseParam)
  20. projectModel := new(projectmodel.Project) //项目模型
  21. //基于项目ID,补充公司ID
  22. if dataModel.SourceID == 3 { //申请来源于GUI网管
  23. companyId, err := obj.GuiGetCompanyIdByProjectId(dataModel) //基于项目ID获得公司ID
  24. if err != nil {
  25. return err
  26. } else {
  27. dataModel.CompanyID = companyId //补充公司ID
  28. }
  29. }
  30. //查重
  31. if err := obj.MySqlApi.GetDb().Model(btsBaseModel).Where("company_id=? and project_id=? and bts_id=?", dataModel.CompanyID, dataModel.ProjectID, dataModel.BtsID).First(btsBaseModel).Error; err != nil {
  32. if err != gorm.ErrRecordNotFound {
  33. return err
  34. }
  35. }
  36. //该记录已经存在,则修改记录
  37. if btsBaseModel.ID > 0 {
  38. dataModel.ID = btsBaseModel.ID
  39. if err := obj.MySqlApi.GetDb().Model(btsBaseModel).Updates(map[string]interface{}{"carrier_id": dataModel.CarrierID, "timeslot": dataModel.Timeslot}).Where("id=?", dataModel.ID).Error; err != nil {
  40. return err
  41. }
  42. } else { //该记录还不存在,则心在记录
  43. ////判断该记录是否合法,即项目ID是否存在,该项目下属基站是否已经超过最大规模数
  44. //判断项目ID是否存在
  45. if err := obj.MySqlApi.GetDb().Model(projectModel).Where("project_id=?", dataModel.ProjectID).First(projectModel).Error; err != nil {
  46. if err != gorm.ErrRecordNotFound {
  47. return err
  48. }
  49. }
  50. //项目ID不存在
  51. if projectModel.ID <= 0 {
  52. return errors.New("该项目编号不存在,请与系统管理员联系")
  53. } else { //项目ID存在
  54. //新增记录
  55. if err := obj.MySqlApi.AddItem(dataModel); err != nil {
  56. return err
  57. }
  58. }
  59. }
  60. return nil
  61. }
  62. // 修改基站基本参数
  63. func (obj *BparamApi) UpdateBtsBaseParam(dataModel *bparammodel.BtsBaseParam, dataMap map[string]interface{}) error {
  64. var count int = 0
  65. //查重
  66. if err := obj.MySqlApi.GetDb().Model(dataModel).Where("id<>? and company_id=? and project_id=? and bts_id=?", dataModel.ID, dataModel.CompanyID, dataModel.ProjectID, dataModel.BtsID).Count(&count).Error; err != nil {
  67. return err
  68. }
  69. if count > 0 {
  70. return errors.New("该基站记录已经存在")
  71. }
  72. //修改
  73. delete(dataMap, "project_id")
  74. //delete(dataMap, "bts_id")
  75. if err := obj.MySqlApi.UpdateItem(dataModel, dataMap); err != nil {
  76. return errors.New("数据库操作失败")
  77. }
  78. return nil
  79. }
  80. // 修改设备状态
  81. func (obj *BparamApi) UpdateBtsStatus(mapHeart map[string]public.HeartMapValue) error {
  82. modeBaseParam := new(bparammodel.BtsBaseParam)
  83. //开启事务
  84. tx := obj.MySqlApi.GetDb().Begin()
  85. //将所有项目的基站的状态修改为离线
  86. if err := tx.Model(modeBaseParam).Update("status", 1).Error; err != nil {
  87. tx.Rollback()
  88. return err
  89. }
  90. //map不为空
  91. if len(mapHeart) > 0 {
  92. //修改基站状态
  93. for _, v := range mapHeart {
  94. if err := tx.Model(modeBaseParam).Where("project_id=? and bts_id=?", v.ProjectID, v.BtsID).Update("status", 2).Error; err != nil {
  95. tx.Rollback()
  96. return err
  97. }
  98. }
  99. }
  100. //提交事务
  101. if err := tx.Commit().Error; err != nil {
  102. tx.Rollback()
  103. return err
  104. }
  105. //清空map
  106. public.PublicDeleteAllItem()
  107. return nil
  108. }
  109. // 删除基站基本参数
  110. func (obj *BparamApi) DeleteBtsBaseParam(dataModel *bparammodel.BtsBaseParam) error {
  111. if err := obj.MySqlApi.DeleteItem(dataModel); err != nil {
  112. return errors.New("删除记录失败")
  113. }
  114. return nil
  115. }
  116. // 查询基站基本参数单条记录
  117. func (obj *BparamApi) GetBtsBaseParamById(dataModel *bparammodel.BtsBaseParam) error {
  118. if err := obj.MySqlApi.GetItemByID(dataModel); err != nil {
  119. return errors.New("查询记录失败")
  120. }
  121. return nil
  122. }
  123. // 查询基站基本参数记录(满足条件的全部记录)
  124. func (obj *BparamApi) GetBtsBaseParamList(dataModel *bparammodel.BtsBaseParam, listParam *mysqlmodel.ListParam, dataList interface{}) error {
  125. if err := obj.MySqlApi.GetItemList(dataModel, listParam, dataList); err != nil {
  126. return err
  127. }
  128. return nil
  129. }
  130. // 分页查询基站基本参数记录
  131. func (obj *BparamApi) GetBtsBaseParamPageList(dataModel *bparammodel.BtsBaseParam, pageListParam *mysqlmodel.PageListParam, dataList interface{}) (mysqlmodel.PageListData, error) {
  132. pageListData, err := obj.MySqlApi.GetPageItemList(dataModel, pageListParam, dataList)
  133. if err != nil {
  134. return pageListData, err
  135. }
  136. return pageListData, nil
  137. }
  138. // 基于项目ID获得公司ID
  139. func (obj *BparamApi) GuiGetCompanyIdByProjectId(dataModel *bparammodel.BtsBaseParam) (int, error) {
  140. modelProject := new(projectmodel.Project) //项目模型
  141. var companyId int = 0
  142. //获得公司信息
  143. if err := obj.MySqlApi.GetDb().Model(modelProject).Where("project_id=?", dataModel.ProjectID).First(modelProject).Error; err != nil {
  144. return companyId, err
  145. }
  146. if modelProject.CompanyID <= 0 {
  147. return companyId, errors.New("未找到与项目匹配的公司资料")
  148. }
  149. return modelProject.CompanyID, nil
  150. }
  151. // 基于项目ID和基站ID查询记录ID
  152. func (obj *BparamApi) GetRecordIdByProjectIdAndBtsId(dataModel *bparammodel.BtsBaseParam) error {
  153. modelBtsBaseParam := new(bparammodel.BtsBaseParam) //项目模型
  154. //获得公司信息
  155. if err := obj.MySqlApi.GetDb().Model(modelBtsBaseParam).Where("project_id=? and bts_id=?", dataModel.ProjectID, dataModel.BtsID).First(modelBtsBaseParam).Error; err != nil {
  156. return err
  157. }
  158. dataModel.ID = modelBtsBaseParam.ID
  159. return nil
  160. }
  161. // 基于项目ID和公司ID检查基站参数记录是否已经存在
  162. func (obj *BparamApi) GuiCheckBparamRecordIsExist(dataModel *bparammodel.BtsBaseParam) (int, error) {
  163. modelTmp := new(bparammodel.BtsBaseParam)
  164. //查询基站参数
  165. if err := obj.MySqlApi.GetDb().Model(modelTmp).Where("company_id=? and project_id=?", dataModel.CompanyID, dataModel.ProjectID).First(modelTmp).Error; err != nil {
  166. return modelTmp.ID, err
  167. }
  168. if modelTmp.ID <= 0 { //记录不存在
  169. return modelTmp.ID, nil
  170. }
  171. dataModel.ID = modelTmp.ID
  172. return modelTmp.ID, nil //记录存在
  173. }
  174. // 修改
  175. func (obj *BparamApi) GuiUpdateBaseParam(dataModel *bparammodel.BtsBaseParam, dataMap map[string]interface{}) error {
  176. if err := obj.MySqlApi.UpdateItem(dataModel, dataMap); err != nil {
  177. return errors.New("数据库操作失败")
  178. }
  179. return nil
  180. }
  181. // 移动端查询基站参数
  182. func (obj *BparamApi) GetMobileBtsParamList(dataModel *bparammodel.BtsBaseParam) ([]bparammodel.MobileBtsParam, error) {
  183. tempModel := new(bparammodel.BtsBaseParam)
  184. dataList := []bparammodel.MobileBtsParam{}
  185. db := obj.MySqlApi.GetDb()
  186. if err := db.Model(tempModel).Where("project_id=? and enable_flag=1", dataModel.ProjectID).Scan(&dataList).Error; err != nil {
  187. return dataList, err
  188. }
  189. return dataList, nil
  190. }