ermcpCommon.go 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  1. /**
  2. * @Author: zou.yingbin
  3. * @Create : 2021/3/30 14:51
  4. * @Modify : 2021/3/30 14:51
  5. * @Note : Ermcp定义一些公共的方法或变量
  6. */
  7. package models
  8. import (
  9. "encoding/hex"
  10. "fmt"
  11. "math"
  12. "mtp2_if/utils"
  13. "strconv"
  14. "strings"
  15. "github.com/shopspring/decimal"
  16. )
  17. type ReportType int
  18. // IErmcp 通用接口
  19. type IErmcp interface {
  20. calc() // 相关计算和数据处理
  21. buildSql() string // 生成sql语句
  22. GetDataEx() (interface{}, error) // 获取数据接口
  23. }
  24. // PageEx 分页信息
  25. type PageEx struct {
  26. Page int `json:"-" form:"page"` // 页码
  27. PageSize int `json:"-" form:"pagesize"` // 每页大小
  28. Total int `json:"-" xorm:"'TOTAL'"` // 总条数
  29. }
  30. type PageJosn struct {
  31. Page int `json:"page"` // 页码
  32. PageSize int `json:"pagesize"` // 每页大小
  33. Total int `json:"TOTAL"` // 总条数
  34. }
  35. // DecryptField 解密字段
  36. func DecryptField(oriStr string) string {
  37. nLen := len(oriStr)
  38. if nLen < 32 || nLen%16 != 0 {
  39. // 非加密字符串
  40. return oriStr
  41. }
  42. key := "0d299ce2d4105282f7471074cb0f9f9d"
  43. key2, _ := hex.DecodeString(key)
  44. if oriStr == "" {
  45. return oriStr
  46. }
  47. d, _ := hex.DecodeString(oriStr)
  48. if dst, err := utils.AESDecrypt(d, key2); err == nil {
  49. return string(dst)
  50. }
  51. return oriStr
  52. }
  53. // DecodeStr 类似于问号表达式, true返回第1个 false返回第2个
  54. func DecodeStr(condition bool, strTrue, strFalse string) string {
  55. if condition {
  56. return strTrue
  57. }
  58. return strFalse
  59. }
  60. // IFValue 类似于三元表达式
  61. func IFValue(condition bool, trueValue interface{}, falseValue interface{}) interface{} {
  62. if condition {
  63. return trueValue
  64. } else {
  65. return falseValue
  66. }
  67. }
  68. // InStrBuilder 构建InStr字串
  69. type InStrBuilder struct {
  70. Value []interface{}
  71. }
  72. // Add 增加元素
  73. func (r *InStrBuilder) Add(v interface{}) {
  74. r.Value = append(r.Value, v)
  75. }
  76. // InStr 返回逗号隔开的字串
  77. func (r *InStrBuilder) InStr() string {
  78. var str string
  79. for _, v := range r.Value {
  80. if len(str) > 0 {
  81. str += ","
  82. }
  83. if _, ok := v.(string); ok {
  84. str += fmt.Sprintf("'%v'", v)
  85. } else {
  86. str += fmt.Sprintf("%v", v)
  87. }
  88. }
  89. return str
  90. }
  91. // InStr
  92. func InStr(param ...interface{}) string {
  93. var str string
  94. for i := range param {
  95. if len(str) > 0 {
  96. str += ","
  97. }
  98. str += fmt.Sprintf("%v", param[i])
  99. }
  100. return str
  101. }
  102. type ZOOMFUN func(vList ...*float64)
  103. // NewZoomFun 创建缩放函数
  104. func NewZoomFun(decimalplace int) ZOOMFUN {
  105. return func(vList ...*float64) {
  106. for i := range vList {
  107. *vList[i] = *vList[i] / math.Pow10(decimalplace)
  108. }
  109. }
  110. }
  111. // ZoomByDecimal
  112. func ZoomByDecimal(decimalplace int, vList ...*float64) {
  113. for i := range vList {
  114. *vList[i] = *vList[i] / math.Pow10(decimalplace)
  115. }
  116. }
  117. // SFLOAT64 浮点数Json格式化为字符串, 使用%g
  118. type SFLOAT64 float64
  119. // MarshalJSON
  120. func (r *SFLOAT64) MarshalJSON() ([]byte, error) {
  121. return []byte(r.string()), nil
  122. }
  123. // Float64
  124. func (r *SFLOAT64) Float64() float64 {
  125. return float64(*r)
  126. }
  127. func (r *SFLOAT64) string() string {
  128. return strconv.FormatFloat(r.Float64(), 'f', -1, 64)
  129. }
  130. // Set
  131. func (r *SFLOAT64) Set(v float64) {
  132. *r = SFLOAT64(v)
  133. }
  134. // SetByInt64
  135. func (r *SFLOAT64) SetByInt64(v int64, place int) {
  136. if place == 0 {
  137. *r = SFLOAT64(v)
  138. } else if place > 0 {
  139. str := fmt.Sprintf("%v", *r)
  140. if len(str) >= place {
  141. pos := len(str) - place
  142. str = str[0:pos] + "." + str[pos:]
  143. if d, err := strconv.ParseFloat(str, 64); err == nil {
  144. *r = SFLOAT64(d)
  145. }
  146. }
  147. }
  148. }
  149. // Round
  150. func (r *SFLOAT64) Round(places int32) *SFLOAT64 {
  151. d, _ := decimal.NewFromFloat(float64(*r)).Round(places).Float64()
  152. *r = SFLOAT64(d)
  153. return r
  154. }
  155. // Power10
  156. func (r *SFLOAT64) Power10(n int) *SFLOAT64 {
  157. *r = *r * SFLOAT64(math.Pow10(n))
  158. return r
  159. }
  160. // FtItemName 解析逗号隔开的字符串
  161. func FtItemName(dgItemName string) ([]string, bool) {
  162. if len(dgItemName) < 2 {
  163. return nil, false
  164. }
  165. sItem := strings.Split(dgItemName, ",")
  166. if len(sItem) > 0 {
  167. return sItem, true
  168. }
  169. return nil, false
  170. }
  171. // EncryptByStar 名字脱敏处理
  172. func EncryptByStar(str string) string {
  173. if str == "" {
  174. return ""
  175. }
  176. d := []rune(str)
  177. var strName string
  178. nLen := len(d)
  179. switch nLen {
  180. case 1:
  181. strName = "*" + string(d[0])
  182. case 2:
  183. strName = "*" + string(d[1])
  184. case 3:
  185. strName = string(d[0]) + "*" + string(d[2])
  186. case 4:
  187. strName = string(d[0]) + "**" + string(d[3])
  188. default:
  189. strName = string(d[0]) + "***" + string(d[nLen-1])
  190. }
  191. return strName
  192. }
  193. func EncryptByStar2(str string) string {
  194. if str == "" {
  195. return ""
  196. }
  197. d := []rune(str)
  198. var strName string
  199. nLen := len(d)
  200. switch nLen {
  201. case 1:
  202. strName = "*" + string(d[0])
  203. case 2:
  204. strName = "*" + string(d[1])
  205. case 3:
  206. strName = string(d[0]) + "**"
  207. case 4:
  208. strName = string(d[0]) + "***"
  209. default:
  210. strName = string(d[0]) + "****"
  211. }
  212. return strName
  213. }