bparamapi.go 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  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. // heartMap:心跳map
  82. func (obj *BparamApi) UpdateBtsStatusByHeartMap(heartMap map[string]public.HeartMapValue) error {
  83. modeBaseParam := new(bparammodel.BtsBaseParam)
  84. var dataList [][]interface{} //基站数据队列
  85. //开启事务
  86. tx := obj.MySqlApi.GetDb().Begin()
  87. //将所有项目的基站的状态修改为离线
  88. if err := tx.Model(modeBaseParam).Update("status", 1).Error; err != nil {
  89. tx.Rollback()
  90. return err
  91. }
  92. //map不为空
  93. if len(heartMap) > 0 {
  94. //组织基站信息
  95. for _, v := range heartMap {
  96. dataList = append(dataList, []interface{}{v.ProjectID, v.BtsID})
  97. }
  98. //修改基站状态
  99. if err := tx.Model(modeBaseParam).Where("(project_id, bts_id) in (?)", dataList).Update("status", 2).Error; err != nil {
  100. tx.Rollback()
  101. return err
  102. }
  103. }
  104. //提交事务
  105. if err := tx.Commit().Error; err != nil {
  106. tx.Rollback()
  107. return err
  108. }
  109. //清空心跳map
  110. public.PublicHeartMapDeleteAllItem()
  111. return nil
  112. }
  113. // 删除基站基本参数
  114. func (obj *BparamApi) DeleteBtsBaseParam(dataModel *bparammodel.BtsBaseParam) error {
  115. if err := obj.MySqlApi.DeleteItem(dataModel); err != nil {
  116. return errors.New("删除记录失败")
  117. }
  118. return nil
  119. }
  120. // 查询基站基本参数单条记录
  121. func (obj *BparamApi) GetBtsBaseParamById(dataModel *bparammodel.BtsBaseParam) error {
  122. if err := obj.MySqlApi.GetItemByID(dataModel); err != nil {
  123. return errors.New("查询记录失败")
  124. }
  125. return nil
  126. }
  127. // 查询基站基本参数记录(满足条件的全部记录)
  128. func (obj *BparamApi) GetBtsBaseParamList(dataModel *bparammodel.BtsBaseParam, listParam *mysqlmodel.ListParam, dataList interface{}) error {
  129. if err := obj.MySqlApi.GetItemList(dataModel, listParam, dataList); err != nil {
  130. return err
  131. }
  132. return nil
  133. }
  134. // 分页查询基站基本参数记录
  135. func (obj *BparamApi) GetBtsBaseParamPageList(dataModel *bparammodel.BtsBaseParam, pageListParam *mysqlmodel.PageListParam, dataList interface{}) (mysqlmodel.PageListData, error) {
  136. pageListData, err := obj.MySqlApi.GetPageItemList(dataModel, pageListParam, dataList)
  137. if err != nil {
  138. return pageListData, err
  139. }
  140. return pageListData, nil
  141. }
  142. // 基于项目ID获得公司ID
  143. func (obj *BparamApi) GuiGetCompanyIdByProjectId(dataModel *bparammodel.BtsBaseParam) (int, error) {
  144. modelProject := new(projectmodel.Project) //项目模型
  145. var companyId int = 0
  146. //获得公司信息
  147. if err := obj.MySqlApi.GetDb().Model(modelProject).Where("project_id=?", dataModel.ProjectID).First(modelProject).Error; err != nil {
  148. return companyId, err
  149. }
  150. if modelProject.CompanyID <= 0 {
  151. return companyId, errors.New("未找到与项目匹配的公司资料")
  152. }
  153. return modelProject.CompanyID, nil
  154. }
  155. // 基于项目ID和基站ID查询记录ID
  156. func (obj *BparamApi) GetRecordIdByProjectIdAndBtsId(dataModel *bparammodel.BtsBaseParam) error {
  157. modelBtsBaseParam := new(bparammodel.BtsBaseParam) //项目模型
  158. //获得公司信息
  159. if err := obj.MySqlApi.GetDb().Model(modelBtsBaseParam).Where("project_id=? and bts_id=?", dataModel.ProjectID, dataModel.BtsID).First(modelBtsBaseParam).Error; err != nil {
  160. return err
  161. }
  162. dataModel.ID = modelBtsBaseParam.ID
  163. return nil
  164. }
  165. // 基于项目ID和公司ID检查基站参数记录是否已经存在
  166. func (obj *BparamApi) GuiCheckBparamRecordIsExist(dataModel *bparammodel.BtsBaseParam) (int, error) {
  167. modelTmp := new(bparammodel.BtsBaseParam)
  168. //查询基站参数
  169. if err := obj.MySqlApi.GetDb().Model(modelTmp).Where("company_id=? and project_id=?", dataModel.CompanyID, dataModel.ProjectID).First(modelTmp).Error; err != nil {
  170. return modelTmp.ID, err
  171. }
  172. if modelTmp.ID <= 0 { //记录不存在
  173. return modelTmp.ID, nil
  174. }
  175. dataModel.ID = modelTmp.ID
  176. return modelTmp.ID, nil //记录存在
  177. }
  178. // 修改
  179. func (obj *BparamApi) GuiUpdateBaseParam(dataModel *bparammodel.BtsBaseParam, dataMap map[string]interface{}) error {
  180. if err := obj.MySqlApi.UpdateItem(dataModel, dataMap); err != nil {
  181. return errors.New("数据库操作失败")
  182. }
  183. return nil
  184. }
  185. // 移动端查询基站参数
  186. func (obj *BparamApi) GetMobileBtsParamList(dataModel *bparammodel.BtsBaseParam) ([]bparammodel.MobileBtsParam, error) {
  187. tempModel := new(bparammodel.BtsBaseParam)
  188. dataList := []bparammodel.MobileBtsParam{}
  189. db := obj.MySqlApi.GetDb()
  190. if err := db.Model(tempModel).Where("project_id=? and enable_flag=1", dataModel.ProjectID).Scan(&dataList).Error; err != nil {
  191. return dataList, err
  192. }
  193. return dataList, nil
  194. }