GAAS GFrame项目web后台
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.

280 lines
7.7 KiB

  1. package grmi
  2. import (
  3. "LAPP_GAAS_GFrame_BACKEND/container"
  4. "LAPP_GAAS_GFrame_BACKEND/rpc"
  5. "LAPP_GAAS_GFrame_BACKEND/utils"
  6. "LAPP_GAAS_GFrame_BACKEND/web/models"
  7. "errors"
  8. "fmt"
  9. "github.com/kataras/iris/v12/core/router"
  10. "strconv"
  11. "strings"
  12. "time"
  13. )
  14. type GoType int
  15. const (
  16. URLDateTimeFormat = "20060102150405"
  17. URLDateFormat = "20060102"
  18. DateOutFormat = "2006-01-02"
  19. DatetimeOutFormat = "2006-01-02 15:04:05"
  20. )
  21. const (
  22. TypeInt GoType = iota + 1
  23. TypeInt8
  24. TypeInt16
  25. TypeInt32
  26. TypeInt64
  27. TypeUint
  28. TypeUint8
  29. TypeUint16
  30. TypeUint32
  31. TypeUint64
  32. TypeFloat32
  33. TypeFloat64
  34. TypeDate
  35. TypeDateTime
  36. TypeBool
  37. TypeString
  38. )
  39. var componentContainer = container.NewComponentContainer()
  40. var routeManager = rpc.NewRouteManager(componentContainer)
  41. var routeMapping = make(map[string]func(router.Party), 10)
  42. func RegisterRouteMapping(path string, factory func(router.Party)) {
  43. routeMapping[path] = factory
  44. }
  45. func BindRoutes(party router.Party) {
  46. for path, factory := range routeMapping {
  47. party.PartyFunc(path, factory)
  48. }
  49. var pathMapping = make(map[string][]string)
  50. for _, serviceRouteManager := range routeManager.ServiceRouteManagers() {
  51. serviceRouteManager.BindRoutes(pathMapping, party)
  52. }
  53. for path, group := range pathMapping {
  54. if len(group) > 1 {
  55. panic(fmt.Sprintf("服务路径冲突! 路径: \"%s\" 服务: %s", path, group))
  56. }
  57. }
  58. }
  59. func RepeatStrings(content string, count int) []string {
  60. result := make([]string, count)
  61. for index := range result {
  62. result[index] = content
  63. }
  64. return result
  65. }
  66. func Equal(predicate Predicate) (string, error) {
  67. if predicate.Values == nil || len(predicate.Values) != 1 {
  68. return "", errors.New("相等性比较只支持一个参数")
  69. }
  70. return fmt.Sprintf(" and %s = ?", predicate.ColumnName), nil
  71. }
  72. func NotEqual(predicate Predicate) (string, error) {
  73. if predicate.Values == nil || len(predicate.Values) != 1 {
  74. return "", errors.New("相等性比较只支持一个参数")
  75. }
  76. return fmt.Sprintf(" and %s <> ?", predicate.ColumnName), nil
  77. }
  78. func Like(predicate Predicate) (string, error) {
  79. if predicate.Values == nil || len(predicate.Values) != 1 {
  80. return "", errors.New("相似性比较只支持一个参数")
  81. }
  82. return fmt.Sprintf(" and %s like concat('%%', ?, '%%')", predicate.ColumnName), nil
  83. }
  84. func NotLike(predicate Predicate) (string, error) {
  85. if predicate.Values == nil || len(predicate.Values) != 1 {
  86. return "", errors.New("相似性比较只支持一个参数")
  87. }
  88. return fmt.Sprintf(" and %s not like concat('%%', ?, '%%')", predicate.ColumnName), nil
  89. }
  90. func IsNull(predicate Predicate) (string, error) {
  91. if predicate.Values != nil && len(predicate.Values) > 0 {
  92. return "", errors.New("为空比较比较不支持参数")
  93. }
  94. return fmt.Sprintf(" and %s is null", predicate.ColumnName), nil
  95. }
  96. func IsNotNull(predicate Predicate) (string, error) {
  97. if predicate.Values != nil && len(predicate.Values) > 0 {
  98. return "", errors.New("为空比较比较不支持参数")
  99. }
  100. return fmt.Sprintf(" and %s is not null", predicate.ColumnName), nil
  101. }
  102. func Include(predicate Predicate) (string, error) {
  103. if predicate.Values != nil && len(predicate.Values) > 0 {
  104. return fmt.Sprintf(" and %s in (%s)", predicate.ColumnName, strings.Join(RepeatStrings("?", len(predicate.Values)), ",")), nil
  105. } else {
  106. return " and 1 <> 1", nil
  107. }
  108. }
  109. func Exclude(predicate Predicate) (string, error) {
  110. if predicate.Values != nil && len(predicate.Values) > 0 {
  111. return fmt.Sprintf(" and %s not in (%s)", predicate.ColumnName, strings.Join(RepeatStrings("?", len(predicate.Values)), ",")), nil
  112. } else {
  113. return " and 1 = 1", nil
  114. }
  115. }
  116. func Approximate(predicate Predicate) (string, error) {
  117. if predicate.Values == nil || len(predicate.Values) != 1 {
  118. return "", errors.New("约等于比较比较只支持一个参数")
  119. }
  120. return fmt.Sprintf(" and datediff(second, %s, ?) = 0", predicate.ColumnName), nil
  121. }
  122. func NotApproximate(predicate Predicate) (string, error) {
  123. if predicate.Values == nil || len(predicate.Values) != 1 {
  124. return "", errors.New("约等于比较比较只支持一个参数")
  125. }
  126. return fmt.Sprintf(" and datediff(second, %s, ?) <> 0", predicate.ColumnName), nil
  127. }
  128. func GreaterThen(predicate Predicate) (string, error) {
  129. if predicate.Values == nil || len(predicate.Values) != 1 {
  130. return "", errors.New("大于比较比较只支持一个参数")
  131. }
  132. return fmt.Sprintf(" and %s > ?", predicate.ColumnName), nil
  133. }
  134. func GreaterOrEqual(predicate Predicate) (string, error) {
  135. if predicate.Values == nil || len(predicate.Values) != 1 {
  136. return "", errors.New("大于等于比较比较只支持一个参数")
  137. }
  138. return fmt.Sprintf(" and %s >= ?", predicate.ColumnName), nil
  139. }
  140. func LessThen(predicate Predicate) (string, error) {
  141. if predicate.Values == nil || len(predicate.Values) != 1 {
  142. return "", errors.New("小于比较比较只支持一个参数")
  143. }
  144. return fmt.Sprintf(" and %s < ?", predicate.ColumnName), nil
  145. }
  146. func LessOrEqual(predicate Predicate) (string, error) {
  147. if predicate.Values == nil || len(predicate.Values) != 1 {
  148. return "", errors.New("小于等于比较比较只支持一个参数")
  149. }
  150. return fmt.Sprintf(" and %s <= ?", predicate.ColumnName), nil
  151. }
  152. func Log(user *models.Usertab, codeFile string, function string, message string) {
  153. logs := new(models.LeitServerLog)
  154. logs.File = codeFile
  155. logs.Level = "info"
  156. logs.Function = function
  157. logs.Message = message
  158. logs.Operator = user.Userid
  159. logs.TimeStamp = utils.TimeFormat(time.Now(), "yyyyMMddHHmmss")
  160. logs.InsertRecord()
  161. }
  162. func intParser(value string) (interface{}, error) {
  163. predicateValue, err := strconv.ParseInt(value, 10, 64)
  164. if err != nil {
  165. return nil, err
  166. }
  167. return predicateValue, nil
  168. }
  169. func uint64Parser(value string) (interface{}, error) {
  170. predicateValue, err := strconv.ParseUint(value, 10, 64)
  171. if err != nil {
  172. return nil, err
  173. }
  174. return predicateValue, nil
  175. }
  176. func floatParser(value string) (interface{}, error) {
  177. predicateValue, err := strconv.ParseFloat(value, 64)
  178. if err != nil {
  179. return nil, err
  180. }
  181. return predicateValue, nil
  182. }
  183. func dateTimeParser(value string) (interface{}, error) {
  184. predicateValue, err := time.Parse(URLDateTimeFormat, value)
  185. if err != nil {
  186. return nil, err
  187. }
  188. return predicateValue, nil
  189. }
  190. func dateParser(value string) (interface{}, error) {
  191. predicateValue, err := time.Parse(URLDateFormat, value)
  192. if err != nil {
  193. return nil, err
  194. }
  195. return predicateValue, nil
  196. }
  197. func boolParser(value string) (interface{}, error) {
  198. predicateValue, err := strconv.ParseBool(value)
  199. if err != nil {
  200. return nil, err
  201. }
  202. return predicateValue, nil
  203. }
  204. func stringParser(value string) (interface{}, error) {
  205. return strings.TrimSpace(value), nil
  206. }
  207. var valueParsers = map[GoType]func(string) (interface{}, error){
  208. TypeInt: intParser,
  209. TypeInt8: intParser,
  210. TypeInt16: intParser,
  211. TypeInt32: intParser,
  212. TypeInt64: intParser,
  213. TypeUint: intParser,
  214. TypeUint8: intParser,
  215. TypeUint16: intParser,
  216. TypeUint32: intParser,
  217. TypeUint64: uint64Parser,
  218. TypeFloat32: floatParser,
  219. TypeFloat64: floatParser,
  220. TypeDateTime: dateTimeParser,
  221. TypeDate: dateParser,
  222. TypeBool: boolParser,
  223. TypeString: stringParser,
  224. }
  225. /******************************************************************************
  226. *
  227. * @Function Name : DeleteUrlParametersEmpty
  228. *-----------------------------------------------------------------------------
  229. *
  230. * @Description : 删除urlParameters的空字符串
  231. *
  232. * @Function Parameters : 删除urlParameters的空字符串
  233. *
  234. * @Author : 张鑫
  235. *
  236. * @Date : 2021-03-24
  237. *
  238. ******************************************************************************/
  239. func DeleteUrlParametersEmpty(urlParameters *map[string]string) {
  240. for key, value := range *urlParameters {
  241. if value == "" {
  242. delete(*urlParameters, key)
  243. }
  244. }
  245. }