http_handler.go 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334
  1. package gateway
  2. import (
  3. "errors"
  4. "time"
  5. "xps/cmd/cache"
  6. "xps/cmd/constant"
  7. "xps/cmd/datasource"
  8. bizViewModel "xps/pkg/biz/viewmodel"
  9. "xps/pkg/common"
  10. "xps/pkg/dataway"
  11. )
  12. type HttpHandler interface {
  13. Get(objectCode, oamCode string, params []common.QueryParam) (map[string]interface{}, error)
  14. GetPage(objectCode, oamCode string, params []common.QueryParam, page int, limit int) (*common.PageResult, error)
  15. GetList(objectCode, oamCode string, params []common.QueryParam) ([]map[string]interface{}, error)
  16. GenerateParams(objectCode, oamCode string) (map[string]interface{}, error)
  17. Create(objectCode, oamCode string, m map[string]interface{}, user *common.CurUserInfo) error
  18. Update(objectCode, oamCode string, m map[string]interface{}, user *common.CurUserInfo) error
  19. Patch(objectCode, oamCode string, m map[string]interface{}, user *common.CurUserInfo) error
  20. Delete(objectCode, oamCode string, m map[string]interface{}, user *common.CurUserInfo) error
  21. }
  22. type httpHandler struct {
  23. xBus *dataway.DatabaseIO
  24. }
  25. func NewHttpHandler() HttpHandler {
  26. return &httpHandler{
  27. xBus: dataway.NewDatabaseIO(datasource.InstanceSlave()),
  28. }
  29. }
  30. func (a *httpHandler) GenerateParams(objectCode, oamCode string) (map[string]interface{}, error) {
  31. attrs, err2 := cache.GetBizObjectAttrs(objectCode)
  32. if err2 != nil {
  33. return nil, err2
  34. }
  35. result := make(map[string]interface{}, 0)
  36. for _, attr := range attrs {
  37. attrType := attr.AttrType
  38. if attrType == constant.DATA_TYPE_INT {
  39. result[attr.AttrCode] = 1
  40. } else if attrType == constant.DATA_TYPE_VARCHAR {
  41. result[attr.AttrCode] = "test"
  42. } else if attrType == constant.DATA_TYPE_DECIMAL {
  43. result[attr.AttrCode] = 1.1
  44. } else if attrType == constant.DATA_TYPE_DATE {
  45. result[attr.AttrCode] = "2022-01-01"
  46. } else if attrType == constant.DATA_TYPE_DATETIME {
  47. result[attr.AttrCode] = "2022-01-01 01:01:01"
  48. }
  49. }
  50. return result, nil
  51. }
  52. func (a *httpHandler) Get(objectCode, oamCode string, params []common.QueryParam) (map[string]interface{}, error) {
  53. oam, err1 := cache.GetBizObjectOAM(objectCode, oamCode)
  54. if err1 != nil {
  55. return nil, err1
  56. }
  57. sqlStatement := oam.SqlStatement
  58. data, err2 := a.xBus.GetById(sqlStatement, params)
  59. if err2 != nil {
  60. return nil, err2
  61. }
  62. return a.Mapping2BizObjectAttr(objectCode, data)
  63. }
  64. func (a *httpHandler) GetList(objectCode, oamCode string, params []common.QueryParam) ([]map[string]interface{}, error) {
  65. oam, err1 := cache.GetBizObjectOAM(objectCode, oamCode)
  66. if err1 != nil {
  67. return nil, err1
  68. }
  69. sqlStatement := oam.SqlStatement
  70. dataList, err2 := a.xBus.GetList(sqlStatement, params)
  71. if err2 != nil {
  72. return nil, err2
  73. }
  74. return a.Mapping2BizObjectList(objectCode, dataList)
  75. }
  76. func (a *httpHandler) GetPage(objectCode, oamCode string, params []common.QueryParam, page int, limit int) (*common.PageResult, error) {
  77. oam, err1 := cache.GetBizObjectOAM(objectCode, oamCode)
  78. if err1 != nil {
  79. return nil, err1
  80. }
  81. sqlStatement := oam.SqlStatement
  82. sqlCount := oam.SqlCount
  83. pageData, err2 := a.xBus.GetPage(sqlStatement, sqlCount, params, page, limit)
  84. if err2 != nil {
  85. return nil, err2
  86. }
  87. return a.Mapping2BizPageObject(objectCode, pageData)
  88. }
  89. func (a *httpHandler) Create(objectCode, oamCode string, m map[string]interface{}, user *common.CurUserInfo) error {
  90. err1 := a.HandleOAMRuleList(objectCode, oamCode, m, user)
  91. if err1 != nil {
  92. return err1
  93. }
  94. data, err2 := a.Mapping2ModelObjectAttr(objectCode, m)
  95. if err2 != nil {
  96. return err2
  97. }
  98. objectOAMMappingList, err3 := cache.GetBizObjectOAMMapping(objectCode, oamCode)
  99. if err3 != nil {
  100. return err3
  101. }
  102. for _, mappingObject := range objectOAMMappingList {
  103. mappingObjectCode := mappingObject.MappingObjectCode
  104. err4 := a.xBus.Create(mappingObjectCode, data)
  105. if err4 != nil {
  106. return err4
  107. }
  108. }
  109. return nil
  110. }
  111. func (a *httpHandler) Update(objectCode, oamCode string, m map[string]interface{}, user *common.CurUserInfo) error {
  112. err1 := a.HandleOAMRuleList(objectCode, oamCode, m, user)
  113. if err1 != nil {
  114. return err1
  115. }
  116. data, err2 := a.Mapping2ModelObjectAttr(objectCode, m)
  117. if err2 != nil {
  118. return err2
  119. }
  120. objectOAMMappingList, err3 := cache.GetBizObjectOAMMapping(objectCode, oamCode)
  121. if err3 != nil {
  122. return err3
  123. }
  124. for _, mappingObject := range objectOAMMappingList {
  125. mappingObjectCode := mappingObject.MappingObjectCode
  126. err4 := a.xBus.Update(mappingObjectCode, data)
  127. if err4 != nil {
  128. return err4
  129. }
  130. }
  131. return nil
  132. }
  133. func (a *httpHandler) Patch(objectCode, oamCode string, m map[string]interface{}, user *common.CurUserInfo) error {
  134. err1 := a.HandleOAMRuleList(objectCode, oamCode, m, user)
  135. if err1 != nil {
  136. return err1
  137. }
  138. data, err2 := a.Mapping2ModelObjectAttr(objectCode, m)
  139. if err2 != nil {
  140. return err2
  141. }
  142. objectOAMMappingList, err3 := cache.GetBizObjectOAMMapping(objectCode, oamCode)
  143. if err3 != nil {
  144. return err3
  145. }
  146. for _, mappingObject := range objectOAMMappingList {
  147. mappingObjectCode := mappingObject.MappingObjectCode
  148. err4 := a.xBus.Patch(mappingObjectCode, data)
  149. if err4 != nil {
  150. return err4
  151. }
  152. }
  153. return nil
  154. }
  155. func (a *httpHandler) Delete(objectCode, oamCode string, m map[string]interface{}, user *common.CurUserInfo) error {
  156. err1 := a.HandleOAMRuleList(objectCode, oamCode, m, user)
  157. if err1 != nil {
  158. return err1
  159. }
  160. data, err2 := a.Mapping2ModelObjectAttr(objectCode, m)
  161. if err2 != nil {
  162. return err2
  163. }
  164. objectOAMMappingList, err3 := cache.GetBizObjectOAMMapping(objectCode, oamCode)
  165. if err3 != nil {
  166. return err3
  167. }
  168. for _, mappingObject := range objectOAMMappingList {
  169. mappingObjectCode := mappingObject.MappingObjectCode
  170. err4 := a.xBus.Delete(mappingObjectCode, data)
  171. if err4 != nil {
  172. return err4
  173. }
  174. }
  175. return nil
  176. }
  177. func (a *httpHandler) HandleOAMRuleList(objectCode, oamCode string, m map[string]interface{}, user *common.CurUserInfo) error {
  178. oamRules, err1 := cache.GetBizObjectOAMRules(objectCode, oamCode)
  179. if err1 != nil {
  180. return err1
  181. }
  182. for _, oamRule := range oamRules {
  183. err2 := a.HandleOAMRule(&oamRule, m, user)
  184. if err2 != nil {
  185. return err2
  186. }
  187. }
  188. return nil
  189. }
  190. func (a *httpHandler) HandleOAMRule(oamRule *bizViewModel.BizObjectOAMRuleInfo, m map[string]interface{}, user *common.CurUserInfo) error {
  191. if oamRule.RuleId == constant.BIZ_RULE_NEW_ID {
  192. m[oamRule.TargetAttrCode] = NewID()
  193. } else if oamRule.RuleId == constant.BIZ_RULE_CUR_DATETIME {
  194. m[oamRule.TargetAttrCode] = time.Now()
  195. } else if oamRule.RuleId == constant.BIZ_RULE_CUR_DATE {
  196. m[oamRule.TargetAttrCode] = time.Now()
  197. } else if oamRule.RuleId == constant.BIZ_RULE_CUR_USER_ID {
  198. m[oamRule.TargetAttrCode] = user.UserId
  199. } else if oamRule.RuleId == constant.BIZ_RULE_CUR_USER_NAME {
  200. m[oamRule.TargetAttrCode] = user.UserName
  201. } else if oamRule.RuleId == constant.BIZ_RULE_CUR_USER_POSITION_ID {
  202. m[oamRule.TargetAttrCode] = user.PositionId
  203. } else if oamRule.RuleId == constant.BIZ_RULE_CUR_USER_POSITION_NAME {
  204. m[oamRule.TargetAttrCode] = user.PositionName
  205. } else if oamRule.RuleId == constant.BIZ_RULE_CUR_USER_GROUP_ID {
  206. m[oamRule.TargetAttrCode] = user.GroupId
  207. } else if oamRule.RuleId == constant.BIZ_RULE_CUR_USER_GROUP_NAME {
  208. m[oamRule.TargetAttrCode] = user.GroupName
  209. }
  210. return nil
  211. }
  212. func (a *httpHandler) Mapping2ModelObjectAttr(objectCode string, m map[string]interface{}) (map[string]interface{}, error) {
  213. bizObjectAttrs, err := cache.GetBizObjectAttrs(objectCode)
  214. if err != nil {
  215. return nil, err
  216. }
  217. for _, bzAttr := range bizObjectAttrs {
  218. bzAttrCode := bzAttr.AttrCode
  219. bzMappingCode := bzAttr.MappingCode
  220. if bzAttrValue, ok := m[bzAttrCode]; ok {
  221. m[bzMappingCode] = bzAttrValue
  222. delete(m, bzAttrCode)
  223. }
  224. }
  225. return m, nil
  226. }
  227. func (a *httpHandler) Mapping2BizObjectAttr(objectCode string, m map[string]interface{}) (map[string]interface{}, error) {
  228. bizObjectAttrs, err := cache.GetBizObjectAttrs(objectCode)
  229. if err != nil {
  230. return nil, err
  231. }
  232. params := make(map[string]interface{}, 0)
  233. for _, bzAttr := range bizObjectAttrs {
  234. bzAttrCode := bzAttr.AttrCode
  235. bzMappingCode := bzAttr.MappingCode
  236. if bzAttrValue, ok := m[bzMappingCode]; ok {
  237. params[bzAttrCode] = bzAttrValue
  238. }
  239. }
  240. return params, nil
  241. }
  242. func (a *httpHandler) Mapping2BizObjectList(objectCode string, dataList []map[string]interface{}) ([]map[string]interface{}, error) {
  243. bizObjectAttrs, err := cache.GetBizObjectAttrs(objectCode)
  244. if err != nil {
  245. return nil, err
  246. }
  247. targetDataList := make([]map[string]interface{}, 0)
  248. for _, data := range dataList {
  249. targetData := make(map[string]interface{}, 0)
  250. for _, bzAttr := range bizObjectAttrs {
  251. bzAttrCode := bzAttr.AttrCode
  252. bzMappingCode := bzAttr.MappingCode
  253. if bzAttrValue, ok := data[bzMappingCode]; ok {
  254. targetData[bzAttrCode] = bzAttrValue
  255. }
  256. }
  257. targetDataList = append(targetDataList, targetData)
  258. }
  259. return targetDataList, nil
  260. }
  261. func (a *httpHandler) Mapping2BizPageObject(objectCode string, pageData *common.PageResult) (*common.PageResult, error) {
  262. bizObjectAttrs, err := cache.GetBizObjectAttrs(objectCode)
  263. if err != nil {
  264. return nil, err
  265. }
  266. dataList, ok := pageData.Data.([]map[string]interface{})
  267. if !ok {
  268. return nil, errors.New("类型转换错误")
  269. }
  270. targetDataList := make([]map[string]interface{}, 0)
  271. for _, data := range dataList {
  272. targetData := make(map[string]interface{}, 0)
  273. for _, bzAttr := range bizObjectAttrs {
  274. bzAttrCode := bzAttr.AttrCode
  275. bzMappingCode := bzAttr.MappingCode
  276. if bzAttrValue, ok := data[bzMappingCode]; ok {
  277. targetData[bzAttrCode] = bzAttrValue
  278. }
  279. }
  280. targetDataList = append(targetDataList, targetData)
  281. }
  282. targetPageData := &common.PageResult{
  283. Total: pageData.Total,
  284. PageSize: pageData.PageSize,
  285. Page: pageData.Page,
  286. Data: targetDataList,
  287. }
  288. return targetPageData, nil
  289. }