bparamapi.go 8.5 KB

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