|
@@ -5,6 +5,7 @@
|
|
|
package bparamhandler
|
|
|
|
|
|
import (
|
|
|
+ "encoding/binary"
|
|
|
"fmt"
|
|
|
"ipsomc/core/dao/mysql/mysqlmodel"
|
|
|
"ipsomc/core/gin/bind"
|
|
@@ -14,6 +15,9 @@ import (
|
|
|
"ipsomc/module/bparam/bparammodel"
|
|
|
"ipsomc/module/bparam/bparamoam"
|
|
|
"ipsomc/public"
|
|
|
+ "os"
|
|
|
+ "strconv"
|
|
|
+ "strings"
|
|
|
"time"
|
|
|
|
|
|
"github.com/gin-gonic/gin"
|
|
@@ -713,3 +717,142 @@ func (obj *BparamHan) ResetBtsHan(c *gin.Context) {
|
|
|
|
|
|
resp.RespOk(c)
|
|
|
}
|
|
|
+
|
|
|
+// 按照大楼和楼层导出基站安装参数
|
|
|
+func (obj *BparamHan) ExportBtsInstallParamHan(c *gin.Context) {
|
|
|
+ dataModel := new(bparammodel.BtsBaseParam)
|
|
|
+
|
|
|
+ //把前端数据绑定到模型上
|
|
|
+ if err := obj.bindApi.Bind2Model(c, dataModel); err != nil {
|
|
|
+ resp.RespFail(c, "数据错误")
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ dataList, err := obj.bparamApi.ExportBtsInstallParam(dataModel)
|
|
|
+ if err != nil {
|
|
|
+ resp.RespFail(c, "查询数据错误")
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ // 创建二进制文件
|
|
|
+ file, err := os.Create("build_layer_bts_param.bin")
|
|
|
+ if err != nil {
|
|
|
+ resp.RespFail(c, "文件操作失败")
|
|
|
+ panic(err)
|
|
|
+ }
|
|
|
+ defer file.Close()
|
|
|
+
|
|
|
+ //生成bin文件
|
|
|
+ buf := make([]byte, 4)
|
|
|
+ for _, v := range dataList {
|
|
|
+ //大楼编号
|
|
|
+ binary.LittleEndian.PutUint32(buf, uint32(v.BuildID))
|
|
|
+ if _, err := file.Write(buf); err != nil {
|
|
|
+ resp.RespFail(c, "文件操作失败")
|
|
|
+ panic(err)
|
|
|
+ }
|
|
|
+
|
|
|
+ //楼层编号
|
|
|
+ binary.LittleEndian.PutUint32(buf, uint32(v.LayerID))
|
|
|
+ if _, err := file.Write(buf); err != nil {
|
|
|
+ resp.RespFail(c, "文件操作失败")
|
|
|
+ panic(err)
|
|
|
+ }
|
|
|
+
|
|
|
+ //基站编号
|
|
|
+ binary.LittleEndian.PutUint32(buf, uint32(v.BtsID))
|
|
|
+ if _, err := file.Write(buf); err != nil {
|
|
|
+ resp.RespFail(c, "文件操作失败")
|
|
|
+ panic(err)
|
|
|
+ }
|
|
|
+
|
|
|
+ //载波编号
|
|
|
+ binary.LittleEndian.PutUint32(buf, uint32(v.CarrierID))
|
|
|
+ if _, err := file.Write(buf); err != nil {
|
|
|
+ resp.RespFail(c, "文件操作失败")
|
|
|
+ panic(err)
|
|
|
+ }
|
|
|
+
|
|
|
+ //时隙编号
|
|
|
+ binary.LittleEndian.PutUint32(buf, uint32(v.Timeslot))
|
|
|
+ if _, err := file.Write(buf); err != nil {
|
|
|
+ resp.RespFail(c, "文件操作失败")
|
|
|
+ panic(err)
|
|
|
+ }
|
|
|
+
|
|
|
+ //X坐标
|
|
|
+ binary.LittleEndian.PutUint32(buf, uint32(v.CoordX))
|
|
|
+ if _, err := file.Write(buf); err != nil {
|
|
|
+ resp.RespFail(c, "文件操作失败")
|
|
|
+ panic(err)
|
|
|
+ }
|
|
|
+
|
|
|
+ //Y坐标
|
|
|
+ binary.LittleEndian.PutUint32(buf, uint32(v.CoordY))
|
|
|
+ if _, err := file.Write(buf); err != nil {
|
|
|
+ resp.RespFail(c, "文件操作失败")
|
|
|
+ panic(err)
|
|
|
+ }
|
|
|
+
|
|
|
+ //Z坐标
|
|
|
+ binary.LittleEndian.PutUint32(buf, uint32(v.CoordZ))
|
|
|
+ if _, err := file.Write(buf); err != nil {
|
|
|
+ resp.RespFail(c, "文件操作失败")
|
|
|
+ panic(err)
|
|
|
+ }
|
|
|
+
|
|
|
+ //定位类型
|
|
|
+ binary.LittleEndian.PutUint32(buf, uint32(v.LocationType))
|
|
|
+ if _, err := file.Write(buf); err != nil {
|
|
|
+ resp.RespFail(c, "文件操作失败")
|
|
|
+ panic(err)
|
|
|
+ }
|
|
|
+
|
|
|
+ //两站数量
|
|
|
+ binary.LittleEndian.PutUint32(buf, uint32(v.TwoBtsNum))
|
|
|
+ if _, err := file.Write(buf); err != nil {
|
|
|
+ resp.RespFail(c, "文件操作失败")
|
|
|
+ panic(err)
|
|
|
+ }
|
|
|
+
|
|
|
+ //两站列表
|
|
|
+ if v.LocationType == 1 || v.LocationType == 3 {
|
|
|
+ input := strings.ReplaceAll(v.TwoBtsList, " ", "") // 去除空格
|
|
|
+ parts := strings.Split(input, ",") // 分割字符串
|
|
|
+ btsNum := len(parts)
|
|
|
+ for _, part := range parts {
|
|
|
+ if part == "" {
|
|
|
+ continue // 跳过空字符串
|
|
|
+ }
|
|
|
+ num, _ := strconv.ParseInt(part, 10, 32)
|
|
|
+ binary.LittleEndian.PutUint32(buf, uint32(num))
|
|
|
+ if _, err := file.Write(buf); err != nil {
|
|
|
+ resp.RespFail(c, "文件操作失败")
|
|
|
+ panic(err)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //补齐6个两站定位编号
|
|
|
+ for i := btsNum; i < 6; i++ {
|
|
|
+ binary.LittleEndian.PutUint32(buf, uint32(0))
|
|
|
+ if _, err := file.Write(buf); err != nil {
|
|
|
+ resp.RespFail(c, "文件操作失败")
|
|
|
+ panic(err)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ //初始化6个两站定位编号
|
|
|
+ for i := 0; i < 6; i++ {
|
|
|
+ binary.LittleEndian.PutUint32(buf, uint32(0))
|
|
|
+ if _, err := file.Write(buf); err != nil {
|
|
|
+ resp.RespFail(c, "文件操作失败")
|
|
|
+ panic(err)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //TODO 把bin文件发送到前端
|
|
|
+
|
|
|
+ resp.RespOk(c)
|
|
|
+}
|