bparamhandler.go 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879
  1. // 模块控制接口-基站参数
  2. // 秒寻科技
  3. // zt 2024-02-16
  4. package bparamhandler
  5. import (
  6. "encoding/binary"
  7. "fmt"
  8. "ipsomc/core/dao/mysql/mysqlmodel"
  9. "ipsomc/core/gin/bind"
  10. "ipsomc/core/gin/resp"
  11. "ipsomc/module/bparam/bparamapi"
  12. "ipsomc/module/bparam/bparamlogic"
  13. "ipsomc/module/bparam/bparammodel"
  14. "ipsomc/module/bparam/bparamoam"
  15. "ipsomc/public"
  16. "os"
  17. "strconv"
  18. "strings"
  19. "time"
  20. "github.com/gin-gonic/gin"
  21. )
  22. type BparamHan struct {
  23. bindApi bind.BindApi
  24. bparamApi bparamapi.BparamApi
  25. bparamLgc bparamlogic.BparamLgc
  26. bparamOamApi bparamoam.BparamOam
  27. }
  28. // 新增基站基本参数
  29. func (obj *BparamHan) AddBtsBaseParamHan(c *gin.Context) {
  30. dataModel := new(bparammodel.BtsBaseParam)
  31. //把前端数据绑定到模型上
  32. if err := obj.bindApi.Bind2Model(c, dataModel); err != nil {
  33. resp.RespFail(c, "数据错误")
  34. return
  35. }
  36. //保存数据
  37. if err := obj.bparamApi.AddBtsBaseParam(dataModel); err != nil {
  38. resp.RespFail(c, err.Error())
  39. return
  40. }
  41. //返回数据
  42. resp.RespId(c, dataModel.ID)
  43. }
  44. // 修改
  45. func (obj *BparamHan) UpdateBtsBaseParamHan(c *gin.Context) {
  46. dataModel := new(bparammodel.BtsBaseParam)
  47. dataMap := make(map[string]interface{})
  48. //把前端数据绑定到模型
  49. if err := obj.bindApi.Bind2Map(c, dataModel, dataMap); err != nil {
  50. resp.RespFail(c, err.Error())
  51. return
  52. }
  53. //保存数据
  54. if err := obj.bparamApi.UpdateBtsBaseParam(dataModel, dataMap); err != nil {
  55. resp.RespFail(c, err.Error())
  56. return
  57. }
  58. //返回数据
  59. resp.RespOk(c)
  60. }
  61. // 启用和停用基站
  62. func (obj *BparamHan) EnableBtsBaseParamHan(c *gin.Context) {
  63. dataModel := new(bparammodel.BtsBaseParam)
  64. //把前端数据绑定到模型
  65. if err := obj.bindApi.Bind2Model(c, dataModel); err != nil {
  66. resp.RespFail(c, "数据错误")
  67. return
  68. }
  69. //保存数据
  70. if err := obj.bparamApi.EnableBtsBaseParam(dataModel); err != nil {
  71. resp.RespFail(c, err.Error())
  72. return
  73. }
  74. //返回数据
  75. resp.RespOk(c)
  76. }
  77. // 启用和停用基站
  78. func (obj *BparamHan) EnableLayerBtsHan(c *gin.Context) {
  79. dataModel := new(bparammodel.BtsBaseParam)
  80. //把前端数据绑定到模型
  81. if err := obj.bindApi.Bind2Model(c, dataModel); err != nil {
  82. resp.RespFail(c, "数据错误")
  83. return
  84. }
  85. //保存数据
  86. if err := obj.bparamApi.EnableLayerBts(dataModel); err != nil {
  87. resp.RespFail(c, err.Error())
  88. return
  89. }
  90. //返回数据
  91. resp.RespOk(c)
  92. }
  93. // 删除
  94. func (obj *BparamHan) DeleteBtsBaseParamHan(c *gin.Context) {
  95. dataModel := new(bparammodel.BtsBaseParam)
  96. //把前端数据绑定到模型
  97. if err := obj.bindApi.Bind2Model(c, dataModel); err != nil {
  98. resp.RespFail(c, "数据解析错误")
  99. return
  100. }
  101. if err := obj.bparamApi.DeleteBtsBaseParam(dataModel); err != nil {
  102. resp.RespFail(c, err.Error())
  103. return
  104. }
  105. //返回数据
  106. resp.RespOk(c)
  107. }
  108. // 查询单条记录
  109. func (obj *BparamHan) GetBtsBaseParamByIdHan(c *gin.Context) {
  110. dataModel := new(bparammodel.BtsBaseParam)
  111. //把前端数据绑定到模型
  112. if err := obj.bindApi.Bind2Model(c, dataModel); err != nil {
  113. resp.RespFail(c, "数据解析错误")
  114. return
  115. }
  116. if err := obj.bparamApi.GetBtsBaseParamById(dataModel); err != nil {
  117. resp.RespFail(c, err.Error())
  118. return
  119. }
  120. //返回数据
  121. resp.RespData(c, dataModel)
  122. }
  123. // 查询满足条件的所有记录
  124. func (obj *BparamHan) GetBtsBaseParamListHan(c *gin.Context) {
  125. dataModel := new(bparammodel.BtsBaseParam)
  126. listParam := new(mysqlmodel.ListParam)
  127. dataList := []bparammodel.BtsBaseParam{}
  128. //把前端数据绑定到模型
  129. if err := obj.bindApi.Bind2Query(c, listParam); err != nil {
  130. resp.RespFail(c, "数据解析错误")
  131. return
  132. }
  133. //查询满足条件的记录
  134. err := obj.bparamApi.GetBtsBaseParamList(dataModel, listParam, &dataList)
  135. if err != nil {
  136. resp.RespFail(c, err.Error())
  137. return
  138. }
  139. //更新基站在线状态
  140. existFlag := false
  141. if len(public.Gpub_mapHeart) > 0 {
  142. //更新基站状态
  143. for i, btsParam := range dataList {
  144. existFlag = false
  145. //修改基站状态
  146. for _, v := range public.Gpub_mapHeart {
  147. if btsParam.ProjectID == v.ProjectID && btsParam.BtsID == v.BtsID {
  148. dataList[i].Status = 2 //在线
  149. existFlag = true
  150. break
  151. }
  152. }
  153. if !existFlag && btsParam.Status == 2 {
  154. dataList[i].Status = 1 //离线
  155. }
  156. }
  157. }
  158. //返回记录
  159. resp.RespList(c, dataList)
  160. }
  161. // 分页查询
  162. func (obj *BparamHan) GetBtsBaseParamPageListHan(c *gin.Context) {
  163. dataModel := new(bparammodel.BtsBaseParam)
  164. pageListParam := new(mysqlmodel.PageListParam)
  165. dataList := []bparammodel.BtsBaseParam{}
  166. //把前端数据绑定到模型
  167. if err := obj.bindApi.Bind2PageQuery(c, pageListParam); err != nil {
  168. resp.RespFail(c, "数据解析错误")
  169. return
  170. }
  171. pageListData, err := obj.bparamApi.GetBtsBaseParamPageList(dataModel, pageListParam, &dataList)
  172. if err != nil {
  173. resp.RespFail(c, err.Error())
  174. return
  175. }
  176. //更新基站在线状态
  177. existFlag := false
  178. if len(public.Gpub_mapHeart) > 0 {
  179. //更新基站状态
  180. for i, btsParam := range dataList {
  181. existFlag = false
  182. //修改基站状态
  183. for _, v := range public.Gpub_mapHeart {
  184. if btsParam.ProjectID == v.ProjectID && btsParam.BtsID == v.BtsID {
  185. dataList[i].Status = 2 //在线
  186. existFlag = true
  187. break
  188. }
  189. }
  190. if !existFlag && btsParam.Status == 2 {
  191. dataList[i].Status = 1 //离线
  192. }
  193. }
  194. }
  195. resp.RespList(c, pageListData)
  196. }
  197. // 移动端查询基站参数
  198. func (obj *BparamHan) GetMobileBtsParamListHan(c *gin.Context) {
  199. dataModel := new(bparammodel.BtsBaseParam)
  200. //把前端数据绑定到模型
  201. if err := obj.bindApi.Bind2Model(c, dataModel); err != nil {
  202. resp.RespFail(c, "数据解析错误")
  203. return
  204. }
  205. //查询满足条件的
  206. dataList, err := obj.bparamApi.GetMobileBtsParamList(dataModel)
  207. if err != nil {
  208. resp.RespFail(c, "查询数据错误")
  209. return
  210. }
  211. //返回记录
  212. resp.RespList(c, dataList)
  213. }
  214. // 移动端查询某大楼某楼层基站参数
  215. func (obj *BparamHan) GetMobileLayerBtsParamListHan(c *gin.Context) {
  216. dataModel := new(bparammodel.BtsBaseParam)
  217. //把前端数据绑定到模型
  218. if err := obj.bindApi.Bind2Model(c, dataModel); err != nil {
  219. resp.RespFail(c, "数据解析错误")
  220. return
  221. }
  222. //查询满足条件的
  223. dataList, err := obj.bparamApi.GetMobileLayerBtsParamList(dataModel)
  224. if err != nil {
  225. resp.RespFail(c, "查询数据错误")
  226. return
  227. }
  228. //返回记录
  229. resp.RespList(c, dataList)
  230. }
  231. // 本地网管新增基站基本参数
  232. func (obj *BparamHan) GuiUploadBtsBaseParamAddHan(c *gin.Context) {
  233. dataModel := new(bparammodel.BtsBaseParam)
  234. //把前端数据绑定到模型上
  235. if err := obj.bindApi.Bind2Model(c, dataModel); err != nil {
  236. resp.RespFail(c, "数据错误")
  237. return
  238. }
  239. //保存数据
  240. if err := obj.bparamApi.AddBtsBaseParam(dataModel); err != nil {
  241. resp.RespFail(c, err.Error())
  242. return
  243. }
  244. //返回数据
  245. resp.RespId(c, dataModel.ID)
  246. }
  247. // 本地网管修改基站基本参数
  248. func (obj *BparamHan) GuiUploadBtsBaseParamUpdateHan(c *gin.Context) {
  249. dataModel := new(bparammodel.BtsBaseParam)
  250. dataMap := make(map[string]interface{})
  251. //把前端数据绑定到模型
  252. if err := obj.bindApi.Bind2Map(c, dataModel, dataMap); err != nil {
  253. resp.RespFail(c, err.Error())
  254. return
  255. }
  256. //保存数据
  257. if err := obj.bparamLgc.UploadBparamLgc(dataModel, dataMap); err != nil {
  258. resp.RespFail(c, err.Error())
  259. return
  260. }
  261. //返回数据
  262. resp.RespOk(c)
  263. }
  264. //***********************************以上是http命令**********************************************
  265. //**********************************************************************************************
  266. //***********************************下面是socket命令********************************************
  267. // 保存http请求通道
  268. func (obj *BparamHan) SaveRequestChan(httpReqChan chan interface{}, ProjectID int, BtsID int, mcpCmdType uint8, moduleId uint8) {
  269. requestIdStr := fmt.Sprintf("%08X", ProjectID) + "-" + fmt.Sprintf("%08X", BtsID) + "-" + fmt.Sprintf("%d", mcpCmdType) + "-" + fmt.Sprintf("%d", moduleId)
  270. public.Gpub_mutex.Lock()
  271. public.Gpub_mapChan[requestIdStr] = httpReqChan //保存通道
  272. public.Gpub_mutex.Unlock()
  273. }
  274. // 返回数据并删除http请求通道
  275. func (obj *BparamHan) RespDataWithChan(c *gin.Context, httpReqChan chan interface{}, ProjectID int, BtsID int, mcpCmdType uint8, moduleId uint8) {
  276. requestIdStr := fmt.Sprintf("%08X", ProjectID) + "-" + fmt.Sprintf("%08X", BtsID) + "-" + fmt.Sprintf("%d", mcpCmdType) + "-" + fmt.Sprintf("%d", moduleId)
  277. //把数据返回给客户端
  278. select {
  279. case v := <-httpReqChan:
  280. resp.RespData(c, v) //数据返回前端
  281. case <-time.After(10 * time.Second): // 10秒超时
  282. resp.RespFail(c, "查询超时")
  283. }
  284. close(httpReqChan) //关闭通道
  285. public.Gpub_mutex.Lock()
  286. delete(public.Gpub_mapChan, requestIdStr)
  287. public.Gpub_mutex.Unlock()
  288. }
  289. // 查询基站设备参数
  290. func (obj *BparamHan) GetBtsOamParamDeviceHan(c *gin.Context) {
  291. dataModel := new(bparammodel.BtsBaseParam)
  292. //把前端数据绑定到模型上
  293. if err := obj.bindApi.Bind2Model(c, dataModel); err != nil {
  294. resp.RespFail(c, "数据错误")
  295. return
  296. }
  297. //生成并保存http请求通道
  298. httpReqChan := make(chan interface{})
  299. obj.SaveRequestChan(httpReqChan, dataModel.ProjectID, dataModel.BtsID, public.BTS_MCP_QUERY, public.BTS_MODULE_DEVICE)
  300. //查询基站参数
  301. if err := obj.bparamOamApi.OamQueryDeviceParam(dataModel); err != nil {
  302. resp.RespFail(c, "查询数据错误")
  303. }
  304. //返回数据并删除http请求通道
  305. obj.RespDataWithChan(c, httpReqChan, dataModel.ProjectID, dataModel.BtsID, public.BTS_MCP_QUERY, public.BTS_MODULE_DEVICE)
  306. }
  307. // 查询基站网管参数
  308. func (obj *BparamHan) GetBtsOamParamNetworkHan(c *gin.Context) {
  309. dataModel := new(bparammodel.BtsBaseParam)
  310. //把前端数据绑定到模型上
  311. if err := obj.bindApi.Bind2Model(c, dataModel); err != nil {
  312. resp.RespFail(c, "数据错误")
  313. return
  314. }
  315. //生成并保存http请求通道
  316. httpReqChan := make(chan interface{})
  317. obj.SaveRequestChan(httpReqChan, dataModel.ProjectID, dataModel.BtsID, public.BTS_MCP_QUERY, public.BTS_MODULE_NETWORK)
  318. //查询基站参数
  319. if err := obj.bparamOamApi.OamQueryNetworkParam(dataModel); err != nil {
  320. resp.RespFail(c, "查询数据错误")
  321. }
  322. //返回数据并删除http请求通道
  323. obj.RespDataWithChan(c, httpReqChan, dataModel.ProjectID, dataModel.BtsID, public.BTS_MCP_QUERY, public.BTS_MODULE_NETWORK)
  324. }
  325. // 设置基站网管参数
  326. func (obj *BparamHan) SetBtsOamParamNetworkHan(c *gin.Context) {
  327. dataModel := new(bparammodel.BtsBaseParam)
  328. //把前端数据绑定到模型上
  329. if err := obj.bindApi.Bind2Model(c, dataModel); err != nil {
  330. resp.RespFail(c, "数据错误")
  331. return
  332. }
  333. //生成并保存http请求通道
  334. httpReqChan := make(chan interface{})
  335. obj.SaveRequestChan(httpReqChan, dataModel.ProjectID, dataModel.BtsID, public.BTS_MCP_SET, public.BTS_MODULE_NETWORK)
  336. //设置基站参数
  337. if err := obj.bparamOamApi.OamSetNetworkParam(dataModel); err != nil {
  338. resp.RespFail(c, "设置数据错误")
  339. }
  340. //返回数据并删除http请求通道
  341. obj.RespDataWithChan(c, httpReqChan, dataModel.ProjectID, dataModel.BtsID, public.BTS_MCP_SET, public.BTS_MODULE_NETWORK)
  342. }
  343. // 查询基站同步参数
  344. func (obj *BparamHan) GetBtsOamParamSyncHan(c *gin.Context) {
  345. dataModel := new(bparammodel.BtsBaseParam)
  346. //把前端数据绑定到模型上
  347. if err := obj.bindApi.Bind2Model(c, dataModel); err != nil {
  348. resp.RespFail(c, "数据错误")
  349. return
  350. }
  351. //生成并保存http请求通道
  352. httpReqChan := make(chan interface{})
  353. obj.SaveRequestChan(httpReqChan, dataModel.ProjectID, dataModel.BtsID, public.BTS_MCP_QUERY, public.BTS_MODULE_SYNC)
  354. //查询基站参数
  355. if err := obj.bparamOamApi.OamQuerySyncParam(dataModel); err != nil {
  356. resp.RespFail(c, "查询数据错误")
  357. }
  358. //返回数据并删除http请求通道
  359. obj.RespDataWithChan(c, httpReqChan, dataModel.ProjectID, dataModel.BtsID, public.BTS_MCP_QUERY, public.BTS_MODULE_SYNC)
  360. }
  361. // 设置基站同步参数
  362. func (obj *BparamHan) SetBtsOamParamSyncHan(c *gin.Context) {
  363. dataModel := new(bparammodel.BtsBaseParam)
  364. //把前端数据绑定到模型上
  365. if err := obj.bindApi.Bind2Model(c, dataModel); err != nil {
  366. resp.RespFail(c, "数据错误")
  367. return
  368. }
  369. //生成并保存http请求通道
  370. httpReqChan := make(chan interface{})
  371. obj.SaveRequestChan(httpReqChan, dataModel.ProjectID, dataModel.BtsID, public.BTS_MCP_SET, public.BTS_MODULE_SYNC)
  372. //设置基站参数
  373. if err := obj.bparamOamApi.OamSetSyncParam(dataModel); err != nil {
  374. resp.RespFail(c, "设置数据错误")
  375. }
  376. //返回数据并删除http请求通道
  377. obj.RespDataWithChan(c, httpReqChan, dataModel.ProjectID, dataModel.BtsID, public.BTS_MCP_SET, public.BTS_MODULE_SYNC)
  378. }
  379. // 查询基站增益参数
  380. func (obj *BparamHan) GetBtsOamParamGainHan(c *gin.Context) {
  381. dataModel := new(bparammodel.BtsDeviceParam)
  382. //把前端数据绑定到模型上
  383. if err := obj.bindApi.Bind2Model(c, dataModel); err != nil {
  384. resp.RespFail(c, "数据错误")
  385. return
  386. }
  387. //生成并保存http请求通道
  388. httpReqChan := make(chan interface{})
  389. obj.SaveRequestChan(httpReqChan, dataModel.ProjectID, dataModel.BtsID, public.BTS_MCP_QUERY, public.BTS_MODULE_GAIN)
  390. //查询基站参数
  391. if err := obj.bparamOamApi.OamQueryGainParam(dataModel); err != nil {
  392. resp.RespFail(c, "查询数据错误")
  393. }
  394. //返回数据并删除http请求通道
  395. obj.RespDataWithChan(c, httpReqChan, dataModel.ProjectID, dataModel.BtsID, public.BTS_MCP_QUERY, public.BTS_MODULE_GAIN)
  396. }
  397. // 设置基站增益参数
  398. func (obj *BparamHan) SetBtsOamParamGainHan(c *gin.Context) {
  399. dataModel := new(bparammodel.BtsBaseParam)
  400. //把前端数据绑定到模型上
  401. if err := obj.bindApi.Bind2Model(c, dataModel); err != nil {
  402. resp.RespFail(c, "数据错误")
  403. return
  404. }
  405. //生成并保存http请求通道
  406. httpReqChan := make(chan interface{})
  407. obj.SaveRequestChan(httpReqChan, dataModel.ProjectID, dataModel.BtsID, public.BTS_MCP_SET, public.BTS_MODULE_GAIN)
  408. //设置基站参数
  409. if err := obj.bparamOamApi.OamSetGainParam(dataModel); err != nil {
  410. resp.RespFail(c, "设置数据错误")
  411. }
  412. //返回数据并删除http请求通道
  413. obj.RespDataWithChan(c, httpReqChan, dataModel.ProjectID, dataModel.BtsID, public.BTS_MCP_SET, public.BTS_MODULE_GAIN)
  414. }
  415. // 查询安装参数
  416. func (obj *BparamHan) GetBtsOamParamInstallHan(c *gin.Context) {
  417. dataModel := new(bparammodel.BtsDeviceParam)
  418. //把前端数据绑定到模型上
  419. if err := obj.bindApi.Bind2Model(c, dataModel); err != nil {
  420. resp.RespFail(c, "数据错误")
  421. return
  422. }
  423. //生成并保存http请求通道
  424. httpReqChan := make(chan interface{})
  425. obj.SaveRequestChan(httpReqChan, dataModel.ProjectID, dataModel.BtsID, public.BTS_MCP_QUERY, public.BTS_MODULE_INSTALL)
  426. //查询基站参数
  427. if err := obj.bparamOamApi.OamQueryInstallParam(dataModel); err != nil {
  428. resp.RespFail(c, "查询数据错误")
  429. }
  430. //返回数据并删除http请求通道
  431. obj.RespDataWithChan(c, httpReqChan, dataModel.ProjectID, dataModel.BtsID, public.BTS_MCP_QUERY, public.BTS_MODULE_INSTALL)
  432. }
  433. // 配置基站参数
  434. func (obj *BparamHan) SetBtsOamParamInstallHan(c *gin.Context) {
  435. dataModel := new(bparammodel.BtsBaseParam)
  436. //把前端数据绑定到模型上
  437. if err := obj.bindApi.Bind2Model(c, dataModel); err != nil {
  438. resp.RespFail(c, "数据错误")
  439. return
  440. }
  441. //生成并保存http请求通道
  442. httpReqChan := make(chan interface{})
  443. obj.SaveRequestChan(httpReqChan, dataModel.ProjectID, dataModel.BtsID, public.BTS_MCP_SET, public.BTS_MODULE_INSTALL)
  444. //设置基站参数
  445. if err := obj.bparamOamApi.OamSetInstallParam(dataModel); err != nil {
  446. resp.RespFail(c, "设置数据错误")
  447. }
  448. //返回数据并删除http请求通道
  449. obj.RespDataWithChan(c, httpReqChan, dataModel.ProjectID, dataModel.BtsID, public.BTS_MCP_SET, public.BTS_MODULE_INSTALL)
  450. }
  451. // 查询基站参数
  452. func (obj *BparamHan) GetBtsOamParamBtsHan(c *gin.Context) {
  453. dataModel := new(bparammodel.BtsDeviceParam)
  454. //把前端数据绑定到模型上
  455. if err := obj.bindApi.Bind2Model(c, dataModel); err != nil {
  456. resp.RespFail(c, "数据错误")
  457. return
  458. }
  459. //生成并保存http请求通道
  460. httpReqChan := make(chan interface{})
  461. obj.SaveRequestChan(httpReqChan, dataModel.ProjectID, dataModel.BtsID, public.BTS_MCP_QUERY, public.BTS_MODULE_BTS)
  462. //查询基站参数
  463. if err := obj.bparamOamApi.OamQueryBtsParam(dataModel); err != nil {
  464. resp.RespFail(c, "查询数据错误")
  465. }
  466. //返回数据并删除http请求通道
  467. obj.RespDataWithChan(c, httpReqChan, dataModel.ProjectID, dataModel.BtsID, public.BTS_MCP_QUERY, public.BTS_MODULE_BTS)
  468. }
  469. // 配置基站参数
  470. func (obj *BparamHan) SetBtsOamParamBtsHan(c *gin.Context) {
  471. dataModel := new(bparammodel.BtsBaseParam)
  472. //把前端数据绑定到模型上
  473. if err := obj.bindApi.Bind2Model(c, dataModel); err != nil {
  474. resp.RespFail(c, "数据错误")
  475. return
  476. }
  477. //生成并保存http请求通道
  478. httpReqChan := make(chan interface{})
  479. obj.SaveRequestChan(httpReqChan, dataModel.ProjectID, dataModel.BtsID, public.BTS_MCP_SET, public.BTS_MODULE_BTS)
  480. //设置基站参数
  481. if err := obj.bparamOamApi.OamSetBtsParam(dataModel); err != nil {
  482. resp.RespFail(c, "设置数据错误")
  483. }
  484. //返回数据并删除http请求通道
  485. obj.RespDataWithChan(c, httpReqChan, dataModel.ProjectID, dataModel.BtsID, public.BTS_MCP_SET, public.BTS_MODULE_BTS)
  486. }
  487. // 查询定位类型参数
  488. func (obj *BparamHan) GetBtsOamParamLocationTypeHan(c *gin.Context) {
  489. dataModel := new(bparammodel.BtsDeviceParam)
  490. //把前端数据绑定到模型上
  491. if err := obj.bindApi.Bind2Model(c, dataModel); err != nil {
  492. resp.RespFail(c, "数据错误")
  493. return
  494. }
  495. //生成并保存http请求通道
  496. httpReqChan := make(chan interface{})
  497. obj.SaveRequestChan(httpReqChan, dataModel.ProjectID, dataModel.BtsID, public.BTS_MCP_QUERY, public.BTS_MODULE_BTS)
  498. //查询基站参数
  499. if err := obj.bparamOamApi.OamQueryLocationTypeParam(dataModel); err != nil {
  500. resp.RespFail(c, "查询数据错误")
  501. }
  502. //返回数据并删除http请求通道
  503. obj.RespDataWithChan(c, httpReqChan, dataModel.ProjectID, dataModel.BtsID, public.BTS_MCP_QUERY, public.BTS_MODULE_BTS)
  504. }
  505. // 配置定位类型参数
  506. func (obj *BparamHan) SetBtsOamParamLocationTypeHan(c *gin.Context) {
  507. dataModel := new(bparammodel.BtsBaseParam)
  508. //把前端数据绑定到模型上
  509. if err := obj.bindApi.Bind2Model(c, dataModel); err != nil {
  510. resp.RespFail(c, "数据错误")
  511. return
  512. }
  513. //生成并保存http请求通道
  514. httpReqChan := make(chan interface{})
  515. obj.SaveRequestChan(httpReqChan, dataModel.ProjectID, dataModel.BtsID, public.BTS_MCP_SET, public.BTS_MODULE_BTS)
  516. //设置基站参数
  517. if err := obj.bparamOamApi.OamSetLocationTypeParam(dataModel); err != nil {
  518. resp.RespFail(c, "设置数据错误")
  519. }
  520. //返回数据并删除http请求通道
  521. obj.RespDataWithChan(c, httpReqChan, dataModel.ProjectID, dataModel.BtsID, public.BTS_MCP_SET, public.BTS_MODULE_BTS)
  522. }
  523. // 查询rtc参数
  524. func (obj *BparamHan) GetBtsOamParamRtcHan(c *gin.Context) {
  525. dataModel := new(bparammodel.BtsBaseParam)
  526. //把前端数据绑定到模型上
  527. if err := obj.bindApi.Bind2Model(c, dataModel); err != nil {
  528. resp.RespFail(c, "数据错误")
  529. return
  530. }
  531. //生成并保存http请求通道
  532. httpReqChan := make(chan interface{})
  533. obj.SaveRequestChan(httpReqChan, dataModel.ProjectID, dataModel.BtsID, public.BTS_MCP_QUERY, public.BTS_MODULE_RTC)
  534. //查询基站参数
  535. if err := obj.bparamOamApi.OamQueryRtcParam(dataModel); err != nil {
  536. resp.RespFail(c, "查询数据错误")
  537. }
  538. //返回数据并删除http请求通道
  539. obj.RespDataWithChan(c, httpReqChan, dataModel.ProjectID, dataModel.BtsID, public.BTS_MCP_QUERY, public.BTS_MODULE_RTC)
  540. }
  541. // 配置rtc参数
  542. func (obj *BparamHan) SetBtsOamParamRtcHan(c *gin.Context) {
  543. dataModel := new(bparammodel.BtsBaseParam)
  544. //把前端数据绑定到模型上
  545. if err := obj.bindApi.Bind2Model(c, dataModel); err != nil {
  546. resp.RespFail(c, "数据错误")
  547. return
  548. }
  549. //生成并保存http请求通道
  550. httpReqChan := make(chan interface{})
  551. obj.SaveRequestChan(httpReqChan, dataModel.ProjectID, dataModel.BtsID, public.BTS_MCP_SET, public.BTS_MODULE_RTC)
  552. //设置基站参数
  553. if err := obj.bparamOamApi.OamSetRtcParam(dataModel); err != nil {
  554. resp.RespFail(c, "设置数据错误")
  555. }
  556. //返回数据并删除http请求通道
  557. obj.RespDataWithChan(c, httpReqChan, dataModel.ProjectID, dataModel.BtsID, public.BTS_MCP_SET, public.BTS_MODULE_RTC)
  558. }
  559. // 保存参数
  560. func (obj *BparamHan) SaveOamParamHan(c *gin.Context) {
  561. dataModel := new(bparammodel.BtsBaseParam)
  562. //把前端数据绑定到模型上
  563. if err := obj.bindApi.Bind2Model(c, dataModel); err != nil {
  564. resp.RespFail(c, "数据错误")
  565. return
  566. }
  567. //生成并保存http请求通道
  568. httpReqChan := make(chan interface{})
  569. obj.SaveRequestChan(httpReqChan, dataModel.ProjectID, dataModel.BtsID, public.BTS_MCP_SET, public.BTS_MODULE_GAIN)
  570. //设置基站参数
  571. if err := obj.bparamOamApi.OamSaveParam(dataModel); err != nil {
  572. resp.RespFail(c, "设置数据错误")
  573. }
  574. //返回数据并删除http请求通道
  575. obj.RespDataWithChan(c, httpReqChan, dataModel.ProjectID, dataModel.BtsID, public.BTS_MCP_SET, public.BTS_MODULE_GAIN)
  576. }
  577. // 复位基站
  578. func (obj *BparamHan) ResetBtsHan(c *gin.Context) {
  579. dataModel := new(bparammodel.BtsBaseParam)
  580. //把前端数据绑定到模型上
  581. if err := obj.bindApi.Bind2Model(c, dataModel); err != nil {
  582. resp.RespFail(c, "数据错误")
  583. return
  584. }
  585. //设置基站参数
  586. if err := obj.bparamOamApi.OamResetBts(dataModel); err != nil {
  587. resp.RespFail(c, "设置数据错误")
  588. }
  589. resp.RespOk(c)
  590. }
  591. // 按照大楼和楼层导出基站安装参数
  592. func (obj *BparamHan) ExportBtsInstallParamHan(c *gin.Context) {
  593. dataModel := new(bparammodel.BtsBaseParam)
  594. //把前端数据绑定到模型上
  595. if err := obj.bindApi.Bind2Model(c, dataModel); err != nil {
  596. resp.RespFail(c, "数据错误")
  597. return
  598. }
  599. dataList, err := obj.bparamApi.ExportBtsInstallParam(dataModel)
  600. if err != nil {
  601. resp.RespFail(c, "查询数据错误")
  602. return
  603. }
  604. // 创建二进制文件
  605. file, err := os.Create("build_layer_bts_param.bin")
  606. if err != nil {
  607. resp.RespFail(c, "文件操作失败")
  608. panic(err)
  609. }
  610. defer file.Close()
  611. //生成bin文件
  612. buf := make([]byte, 4)
  613. for _, v := range dataList {
  614. //大楼编号
  615. binary.LittleEndian.PutUint32(buf, uint32(v.BuildID))
  616. if _, err := file.Write(buf); err != nil {
  617. resp.RespFail(c, "文件操作失败")
  618. panic(err)
  619. }
  620. //楼层编号
  621. binary.LittleEndian.PutUint32(buf, uint32(v.LayerID))
  622. if _, err := file.Write(buf); err != nil {
  623. resp.RespFail(c, "文件操作失败")
  624. panic(err)
  625. }
  626. //基站编号
  627. binary.LittleEndian.PutUint32(buf, uint32(v.BtsID))
  628. if _, err := file.Write(buf); err != nil {
  629. resp.RespFail(c, "文件操作失败")
  630. panic(err)
  631. }
  632. //载波编号
  633. binary.LittleEndian.PutUint32(buf, uint32(v.CarrierID))
  634. if _, err := file.Write(buf); err != nil {
  635. resp.RespFail(c, "文件操作失败")
  636. panic(err)
  637. }
  638. //时隙编号
  639. binary.LittleEndian.PutUint32(buf, uint32(v.Timeslot))
  640. if _, err := file.Write(buf); err != nil {
  641. resp.RespFail(c, "文件操作失败")
  642. panic(err)
  643. }
  644. //X坐标
  645. binary.LittleEndian.PutUint32(buf, uint32(v.CoordX))
  646. if _, err := file.Write(buf); err != nil {
  647. resp.RespFail(c, "文件操作失败")
  648. panic(err)
  649. }
  650. //Y坐标
  651. binary.LittleEndian.PutUint32(buf, uint32(v.CoordY))
  652. if _, err := file.Write(buf); err != nil {
  653. resp.RespFail(c, "文件操作失败")
  654. panic(err)
  655. }
  656. //Z坐标
  657. binary.LittleEndian.PutUint32(buf, uint32(v.CoordZ))
  658. if _, err := file.Write(buf); err != nil {
  659. resp.RespFail(c, "文件操作失败")
  660. panic(err)
  661. }
  662. //定位类型
  663. binary.LittleEndian.PutUint32(buf, uint32(v.LocationType))
  664. if _, err := file.Write(buf); err != nil {
  665. resp.RespFail(c, "文件操作失败")
  666. panic(err)
  667. }
  668. //两站数量
  669. binary.LittleEndian.PutUint32(buf, uint32(v.TwoBtsNum))
  670. if _, err := file.Write(buf); err != nil {
  671. resp.RespFail(c, "文件操作失败")
  672. panic(err)
  673. }
  674. //两站列表
  675. if v.LocationType == 1 || v.LocationType == 3 {
  676. input := strings.ReplaceAll(v.TwoBtsList, " ", "") // 去除空格
  677. parts := strings.Split(input, ",") // 分割字符串
  678. btsNum := len(parts)
  679. for _, part := range parts {
  680. if part == "" {
  681. continue // 跳过空字符串
  682. }
  683. num, _ := strconv.ParseInt(part, 10, 32)
  684. binary.LittleEndian.PutUint32(buf, uint32(num))
  685. if _, err := file.Write(buf); err != nil {
  686. resp.RespFail(c, "文件操作失败")
  687. panic(err)
  688. }
  689. }
  690. //补齐6个两站定位编号
  691. for i := btsNum; i < 6; i++ {
  692. binary.LittleEndian.PutUint32(buf, uint32(0))
  693. if _, err := file.Write(buf); err != nil {
  694. resp.RespFail(c, "文件操作失败")
  695. panic(err)
  696. }
  697. }
  698. } else {
  699. //初始化6个两站定位编号
  700. for i := 0; i < 6; i++ {
  701. binary.LittleEndian.PutUint32(buf, uint32(0))
  702. if _, err := file.Write(buf); err != nil {
  703. resp.RespFail(c, "文件操作失败")
  704. panic(err)
  705. }
  706. }
  707. }
  708. }
  709. //TODO 把bin文件发送到前端
  710. resp.RespOk(c)
  711. }