102 lines
2.8 KiB
Go
102 lines
2.8 KiB
Go
package jxutils
|
|
|
|
import (
|
|
"fmt"
|
|
"math"
|
|
"strings"
|
|
"time"
|
|
|
|
"git.rosy.net.cn/baseapi/utils"
|
|
)
|
|
|
|
// 合并得到最终的门店状态
|
|
func MergeStoreStatus(status int, vendorStatus int) int {
|
|
if status < vendorStatus {
|
|
return status
|
|
}
|
|
return vendorStatus
|
|
}
|
|
|
|
func SplitSlice(list []interface{}, batchCount int) (listInList [][]interface{}) {
|
|
len := len(list)
|
|
if len > 0 {
|
|
listInListLen := (len-1)/batchCount + 1
|
|
listInList = make([][]interface{}, listInListLen)
|
|
index := 0
|
|
for i := 0; i < len; i++ {
|
|
if i%batchCount == 0 {
|
|
index = i / batchCount
|
|
arrLen := len - i
|
|
if arrLen > batchCount {
|
|
arrLen = batchCount
|
|
}
|
|
listInList[index] = make([]interface{}, arrLen)
|
|
}
|
|
listInList[index][i%batchCount] = list[i]
|
|
}
|
|
}
|
|
return listInList
|
|
}
|
|
|
|
func SplitStoreName(fullName, separator, defaultPrefix string) (prefix, bareName string) {
|
|
names := strings.Split(fullName, separator)
|
|
if len(names) == 2 {
|
|
prefix = names[0]
|
|
bareName = names[1]
|
|
} else {
|
|
prefix = defaultPrefix
|
|
bareName = strings.Trim(strings.Trim(fullName, defaultPrefix), separator)
|
|
|
|
}
|
|
return utils.TrimBlanChar(defaultPrefix), utils.TrimBlanChar(bareName)
|
|
}
|
|
|
|
func ComposeStoreName(bareName, separator, prefix string) (fullName string) {
|
|
return prefix + separator + utils.TrimBlanChar(strings.Trim(bareName, separator))
|
|
}
|
|
|
|
func StrTime2JxOperationTime(strTime string, defValue int16) int16 {
|
|
if timeValue, err := time.Parse("15:04:05", strTime); err == nil {
|
|
return int16(timeValue.Hour()*100 + timeValue.Minute())
|
|
}
|
|
return defValue
|
|
}
|
|
|
|
func JxOperationTime2StrTime(value int16) string {
|
|
return fmt.Sprintf("%02d:%02d:00", value/100, value%100)
|
|
}
|
|
|
|
func GetPolygonFromCircle(lng, lat, distance float64, pointCount int) (points [][2]float64) {
|
|
points = make([][2]float64, pointCount)
|
|
for k := range points {
|
|
angle := float64(k) * 360 / float64(pointCount)
|
|
points[k][0], points[k][1] = ConvertDistanceToLogLat(lng, lat, float64(distance), angle)
|
|
}
|
|
return points
|
|
}
|
|
|
|
func GetPolygonFromCircleStr(lng, lat, distance float64, pointCount int) string {
|
|
points := GetPolygonFromCircle(lng, lat, distance, pointCount)
|
|
points2 := make([]string, len(points))
|
|
for k, v := range points {
|
|
points2[k] = fmt.Sprintf("%.6f,%.6f", v[0], v[1])
|
|
}
|
|
return strings.Join(points2, ";")
|
|
}
|
|
|
|
func ConvertDistanceToLogLat(lng, lat, distance, angle float64) (newLng, newLat float64) {
|
|
oneDu := 111319.55
|
|
newLng = lng + (distance*math.Sin(angle*math.Pi/180))/(oneDu*math.Cos(lat*math.Pi/180)) //将距离转换成经度的计算公式
|
|
newLat = lat + (distance*math.Cos(angle*math.Pi/180))/oneDu //将距离转换成纬度的计算公式
|
|
return newLng, newLat
|
|
}
|
|
|
|
func IntMap2List(intMap map[int]int) []int {
|
|
retVal := make([]int, len(intMap))
|
|
index := 0
|
|
for k := range intMap {
|
|
retVal[index] = k
|
|
}
|
|
return retVal
|
|
}
|