x_gateway_service.go 11 KB

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