广汽安道拓Acura项目MES后台
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

355 lines
6.8 KiB

3 years ago
  1. package utils
  2. import (
  3. "reflect"
  4. "strconv"
  5. "time"
  6. )
  7. func ValueType(in interface{}) string {
  8. if in == nil {
  9. return "<nil>"
  10. }
  11. switch in.(type) {
  12. case int:
  13. return "int"
  14. case int8:
  15. return "int8"
  16. case int16:
  17. return "int16"
  18. case int32:
  19. return "int32"
  20. case int64:
  21. return "int64"
  22. case uint:
  23. return "uint"
  24. case uint8:
  25. return "uint8"
  26. case uint16:
  27. return "uint16"
  28. case uint32:
  29. return "uint32"
  30. case uint64:
  31. return "uint64"
  32. case float32:
  33. return "float32"
  34. case float64:
  35. return "float64"
  36. case []byte:
  37. return "[]byte"
  38. case string:
  39. return "string"
  40. case []string:
  41. return "[]string"
  42. case *[]byte:
  43. return "*[]byte"
  44. case *string:
  45. return "*string"
  46. case []*string:
  47. return "[]*string"
  48. default:
  49. }
  50. rv := reflect.ValueOf(in)
  51. switch rv.Kind() {
  52. case reflect.Map:
  53. return "reflect.Map"
  54. case reflect.Array:
  55. return "reflect.Array"
  56. case reflect.Slice:
  57. return "reflect.Slice"
  58. }
  59. return "[" + rv.Kind().String() + "]" + reflect.TypeOf(in).Name()
  60. }
  61. func ValueToInt(in interface{}, def int) int {
  62. if in == nil {
  63. return def
  64. }
  65. switch in.(type) {
  66. case int:
  67. return in.(int)
  68. case int8:
  69. return int(in.(int8))
  70. case int16:
  71. return int(in.(int16))
  72. case int32:
  73. return int(in.(int32))
  74. case int64:
  75. return int(in.(int64))
  76. case uint:
  77. return int(in.(uint))
  78. case uint8:
  79. return int(in.(uint8))
  80. case uint16:
  81. return int(in.(uint16))
  82. case uint32:
  83. return int(in.(uint32))
  84. case uint64:
  85. return int(in.(uint64))
  86. case float32:
  87. return int(in.(float32))
  88. case float64:
  89. return int(in.(float64))
  90. case []byte:
  91. ii, _ := strconv.ParseFloat(string(in.([]byte)), 64)
  92. return int(ii)
  93. case string:
  94. ii, _ := strconv.ParseFloat(in.(string), 64)
  95. return int(ii)
  96. case *[]byte:
  97. ii, _ := strconv.ParseFloat(string(*(in.(*[]byte))), 64)
  98. return int(ii)
  99. case *string:
  100. ii, _ := strconv.ParseFloat(*(in.(*string)), 64)
  101. return int(ii)
  102. default:
  103. }
  104. return def
  105. }
  106. func ValueToFloat(in interface{}, def float64) float64 {
  107. if in == nil {
  108. return def
  109. }
  110. switch in.(type) {
  111. case int:
  112. return float64(in.(int))
  113. case int8:
  114. return float64(in.(int8))
  115. case int16:
  116. return float64(in.(int16))
  117. case int32:
  118. return float64(in.(int32))
  119. case int64:
  120. return float64(in.(int64))
  121. case uint:
  122. return float64(in.(uint))
  123. case uint8:
  124. return float64(in.(uint8))
  125. case uint16:
  126. return float64(in.(uint16))
  127. case uint32:
  128. return float64(in.(uint32))
  129. case uint64:
  130. return float64(in.(uint64))
  131. case float32:
  132. return float64(in.(float32))
  133. case float64:
  134. return in.(float64)
  135. case []byte:
  136. ii, _ := strconv.ParseFloat(string(in.([]byte)), 64)
  137. return ii
  138. case string:
  139. ii, _ := strconv.ParseFloat(in.(string), 64)
  140. return ii
  141. case *[]byte:
  142. ii, _ := strconv.ParseFloat(string(*(in.(*[]byte))), 64)
  143. return ii
  144. case *string:
  145. ii, _ := strconv.ParseFloat(*(in.(*string)), 64)
  146. return ii
  147. default:
  148. }
  149. return def
  150. }
  151. func ValueToString(in interface{}, def string) string {
  152. return ValueToStringIn(in, def, 0)
  153. }
  154. func ValueToStringIn(in interface{}, def string, fixed int) string {
  155. if in == nil {
  156. return def
  157. }
  158. switch in.(type) {
  159. case int:
  160. return strconv.FormatInt(int64(in.(int)), 10)
  161. case int8:
  162. return strconv.FormatInt(int64(in.(int8)), 10)
  163. case int16:
  164. return strconv.FormatInt(int64(in.(int16)), 10)
  165. case int32:
  166. return strconv.FormatInt(int64(in.(int32)), 10)
  167. case int64:
  168. return strconv.FormatInt(in.(int64), 10)
  169. case uint:
  170. return strconv.FormatUint(uint64(in.(uint)), 10)
  171. case uint8:
  172. return strconv.FormatUint(uint64(in.(uint8)), 10)
  173. case uint16:
  174. return strconv.FormatUint(uint64(in.(uint16)), 10)
  175. case uint32:
  176. return strconv.FormatUint(uint64(in.(uint32)), 10)
  177. case uint64:
  178. return strconv.FormatUint(in.(uint64), 10)
  179. case float32:
  180. if fixed > 0 {
  181. return strconv.FormatFloat(float64(in.(float32)), 'f', fixed, 32)
  182. }
  183. return strconv.FormatFloat(float64(in.(float32)), 'f', 10, 32)
  184. case float64:
  185. if fixed > 0 {
  186. return strconv.FormatFloat(in.(float64), 'f', fixed, 64)
  187. }
  188. return strconv.FormatFloat(in.(float64), 'f', 10, 64)
  189. case []byte:
  190. return string(in.([]byte))
  191. case string:
  192. return in.(string)
  193. case *[]byte:
  194. return string(*(in.(*[]byte)))
  195. case *string:
  196. return *(in.(*string))
  197. default:
  198. }
  199. return def
  200. }
  201. func ValueToTime(in interface{}, timeFormat string, def string) string {
  202. if in == nil {
  203. return def
  204. }
  205. switch in.(type) {
  206. case time.Time:
  207. return TimeFormat(in.(time.Time), timeFormat)
  208. case *time.Time:
  209. return TimeFormat(*(in.(*time.Time)), timeFormat)
  210. case []byte:
  211. return string(in.([]byte))
  212. case string:
  213. return in.(string)
  214. case *[]byte:
  215. return string(*(in.(*[]byte)))
  216. case *string:
  217. return *(in.(*string))
  218. default:
  219. res := ValueToInt(in, 0)
  220. return TimeFormat(time.Unix(int64(res), 0), timeFormat)
  221. }
  222. return def
  223. }
  224. func ValueIsEmpty(in interface{}) bool {
  225. if in == nil {
  226. return true
  227. }
  228. rv := reflect.ValueOf(in)
  229. switch rv.Kind() {
  230. case reflect.Map, reflect.Array, reflect.Slice:
  231. return rv.Len() == 0
  232. }
  233. switch in.(type) {
  234. case bool:
  235. return !in.(bool)
  236. case *bool:
  237. return !(*(in.(*bool)))
  238. case int:
  239. return in.(int) == 0
  240. case int8:
  241. return in.(int8) == 0
  242. case int16:
  243. return in.(int16) == 0
  244. case int32:
  245. return in.(int32) == 0
  246. case int64:
  247. return in.(int64) == 0
  248. case uint:
  249. return in.(uint) == 0
  250. case uint8:
  251. return in.(uint8) == 0
  252. case uint16:
  253. return in.(uint16) == 0
  254. case uint32:
  255. return in.(uint32) == 0
  256. case uint64:
  257. return in.(uint64) == 0
  258. case float32:
  259. return in.(float32) == 0.0
  260. case float64:
  261. return in.(float64) == 0.0
  262. case string:
  263. return len(in.(string)) == 0
  264. case *string:
  265. return len(*(in.(*string))) == 0
  266. default:
  267. }
  268. return rv.IsNil()
  269. }
  270. func ValueToStringArray(in interface{}) []string {
  271. arr, ok := in.([]interface{})
  272. if !ok {
  273. return nil
  274. }
  275. res := make([]string, 0)
  276. for _, v := range arr {
  277. res = append(res, ValueToString(v, ""))
  278. }
  279. return res
  280. }
  281. func ValueToIntArray(in interface{}) []int {
  282. arr, ok := in.([]interface{})
  283. if !ok {
  284. return nil
  285. }
  286. res := make([]int, 0)
  287. for _, v := range arr {
  288. res = append(res, ValueToInt(v, 0))
  289. }
  290. return res
  291. }
  292. func ValueToFloatArray(in interface{}) []float64 {
  293. arr, ok := in.([]interface{})
  294. if !ok {
  295. return nil
  296. }
  297. res := make([]float64, 0)
  298. for _, v := range arr {
  299. res = append(res, ValueToFloat(v, 0.0))
  300. }
  301. return res
  302. }
  303. func ValueFromStringArray(in []string) []interface{} {
  304. out := make([]interface{}, len(in))
  305. for k, v := range in {
  306. out[k] = v
  307. }
  308. return out
  309. }
  310. func ValueFromIntArray(in []int) []interface{} {
  311. out := make([]interface{}, len(in))
  312. for k, v := range in {
  313. out[k] = v
  314. }
  315. return out
  316. }
  317. func ValueFromFloatArray(in []float64) []interface{} {
  318. out := make([]interface{}, len(in))
  319. for k, v := range in {
  320. out[k] = v
  321. }
  322. return out
  323. }
  324. func IDsToString(ids []int) string {
  325. ll := len(ids)
  326. str := ""
  327. for i := 0; i < ll; i++ {
  328. if i > 0 {
  329. str = str + "','" + ValueToString(ids[i], "")
  330. } else {
  331. str = "('" + ValueToString(ids[i], "")
  332. }
  333. }
  334. if len(str) > 0 {
  335. str = str + "')"
  336. }
  337. return str
  338. }