bparamapi.go 7.6 KB

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