model_object_service.go 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265
  1. package service
  2. import (
  3. "errors"
  4. "time"
  5. "xps/cache"
  6. "xps/datamodels"
  7. "xps/datasource"
  8. "xps/repositories"
  9. "xps/viewmodels"
  10. )
  11. type ModelObjectService interface {
  12. GetList(m map[string]interface{}) ([]viewmodels.ModelObjectInfo, error)
  13. GetPage(m map[string]interface{}) (*viewmodels.PageResult, error)
  14. GetById(modelId, objectId int64) (*viewmodels.ModelObjectInfo, error)
  15. Create(d *datamodels.ModelObject) error
  16. Update(d *datamodels.ModelObject) error
  17. Delete(m map[string]interface{}) error
  18. GetObjectDataById(modelId, objectId int64) (*viewmodels.ModelObjectDataInfo, error)
  19. CreateObjectData(d *viewmodels.ModelObjectData) error
  20. UpdateObjectData(d *viewmodels.ModelObjectData) error
  21. }
  22. type modelObjectService struct {
  23. modelObjectRepo *repositories.ModelObjectRepo
  24. modelObjectAttrRepo *repositories.ModelObjectAttrRepo
  25. }
  26. func NewModelObjectService() ModelObjectService {
  27. return &modelObjectService{
  28. modelObjectRepo: repositories.NewModelObjectRepo(datasource.InstanceMaster()),
  29. modelObjectAttrRepo: repositories.NewModelObjectAttrRepo(datasource.InstanceMaster()),
  30. }
  31. }
  32. func (s *modelObjectService) GetList(m map[string]interface{}) ([]viewmodels.ModelObjectInfo, error) {
  33. return s.modelObjectRepo.GetList(m)
  34. }
  35. func (s *modelObjectService) GetPage(m map[string]interface{}) (*viewmodels.PageResult, error) {
  36. return s.modelObjectRepo.GetPage(m)
  37. }
  38. func (s *modelObjectService) GetById(modelId, objectId int64) (*viewmodels.ModelObjectInfo, error) {
  39. return s.modelObjectRepo.GetById(modelId, objectId)
  40. }
  41. func (s *modelObjectService) Create(Object *datamodels.ModelObject) error {
  42. Object.ObjectId = NewID()
  43. return s.modelObjectRepo.Create(Object)
  44. }
  45. func (s *modelObjectService) Update(Object *datamodels.ModelObject) error {
  46. return s.modelObjectRepo.Update(Object)
  47. }
  48. func (s *modelObjectService) Delete(m map[string]interface{}) error {
  49. modelId := m["modelId"].(int64)
  50. objectId := m["objectId"].(int64)
  51. err := s.modelObjectRepo.Delete(m)
  52. if err != nil {
  53. return err
  54. }
  55. return s.modelObjectAttrRepo.DeleteByObjectId(modelId, objectId)
  56. }
  57. func (s *modelObjectService) GetObjectDataById(modelId, objectId int64) (*viewmodels.ModelObjectDataInfo, error) {
  58. objectInfo, err := s.modelObjectRepo.GetById(modelId, objectId)
  59. if err != nil {
  60. return nil, err
  61. }
  62. attrs, err := s.modelObjectAttrRepo.GetListById(modelId, objectId)
  63. if err != nil {
  64. return nil, err
  65. }
  66. objectDataInfo := &viewmodels.ModelObjectDataInfo{
  67. ModelId: objectInfo.ModelId,
  68. ObjectId: objectInfo.ObjectId,
  69. ObjectType: objectInfo.ObjectType,
  70. ObjectTitle: objectInfo.ObjectTitle,
  71. ObjectCode: objectInfo.ObjectCode,
  72. Comment: objectInfo.Comment,
  73. IsFixed: objectInfo.IsFixed,
  74. Attrs: attrs,
  75. }
  76. return objectDataInfo, nil
  77. }
  78. func (s *modelObjectService) CreateObjectData(o *viewmodels.ModelObjectData) error {
  79. modelId := o.ModelId
  80. objectId := NewID()
  81. createdBy := o.CreatedBy
  82. object := &datamodels.ModelObject{
  83. ModelId: modelId,
  84. ObjectId: objectId,
  85. ObjectType: o.ObjectType,
  86. ObjectTitle: o.ObjectTitle,
  87. ObjectCode: o.ObjectCode,
  88. Comment: o.Comment,
  89. IsFixed: 0,
  90. CreatedBy: createdBy,
  91. CreatedAt: time.Now(),
  92. }
  93. err := s.modelObjectRepo.Create(object)
  94. if err != nil {
  95. return err
  96. }
  97. // cache object
  98. attrsCache := make([]viewmodels.ModelObjectAttrInfo, 0)
  99. for _, a := range o.Attrs {
  100. newId := NewID()
  101. objectAttr := &datamodels.ModelObjectAttr{
  102. ModelId: modelId,
  103. ObjectId: objectId,
  104. AttrId: newId,
  105. AttrTitle: a.AttrTitle,
  106. AttrCode: a.AttrCode,
  107. AttrType: a.AttrType,
  108. AttrLength: a.AttrLength,
  109. AttrDecimals: a.AttrDecimals,
  110. Comment: a.Comment,
  111. IsFixed: a.IsFixed,
  112. IsNotNull: a.IsNotNull,
  113. IsPKey: a.IsPKey,
  114. CreatedAt: time.Now(),
  115. CreatedBy: createdBy,
  116. }
  117. err = s.modelObjectAttrRepo.Create(objectAttr)
  118. if err != nil {
  119. return err
  120. }
  121. attrCache := viewmodels.ModelObjectAttrInfo{
  122. ModelId: modelId,
  123. ObjectId: objectId,
  124. AttrId: newId,
  125. AttrTitle: a.AttrTitle,
  126. AttrCode: a.AttrCode,
  127. AttrType: a.AttrType,
  128. AttrLength: a.AttrLength,
  129. AttrDecimals: a.AttrDecimals,
  130. Comment: a.Comment,
  131. IsFixed: a.IsFixed,
  132. IsNotNull: a.IsNotNull,
  133. IsPKey: a.IsPKey,
  134. }
  135. attrsCache = append(attrsCache, attrCache)
  136. }
  137. objectDataCache := &viewmodels.ModelObjectDataInfo{
  138. ModelId: o.ModelId,
  139. ModelTitle: o.ModelTitle,
  140. ObjectId: o.ObjectId,
  141. ObjectType: o.ObjectType,
  142. ObjectTitle: o.ObjectTitle,
  143. ObjectCode: o.ObjectCode,
  144. Comment: o.Comment,
  145. IsFixed: o.IsFixed,
  146. Attrs: attrsCache,
  147. }
  148. // 缓存数据
  149. err = cache.SetModelObjectData(o.ObjectCode, objectDataCache)
  150. if err != nil {
  151. return errors.New("Redis缓存Model数据失败")
  152. }
  153. return nil
  154. }
  155. func (s *modelObjectService) UpdateObjectData(o *viewmodels.ModelObjectData) error {
  156. modelId := o.ModelId
  157. objectId := o.ObjectId
  158. updatedBy := o.UpdatedBy
  159. object := &datamodels.ModelObject{
  160. ModelId: modelId,
  161. ObjectId: objectId,
  162. ObjectType: o.ObjectType,
  163. ObjectTitle: o.ObjectTitle,
  164. ObjectCode: o.ObjectCode,
  165. Comment: o.Comment,
  166. IsFixed: 0,
  167. UpdatedBy: updatedBy,
  168. }
  169. err := s.modelObjectRepo.Update(object)
  170. if err != nil {
  171. return err
  172. }
  173. err = s.modelObjectAttrRepo.DeleteByObjectId(modelId, objectId)
  174. if err != nil {
  175. return err
  176. }
  177. // cache object
  178. attrsCache := make([]viewmodels.ModelObjectAttrInfo, 0)
  179. for _, a := range o.Attrs {
  180. newId := NewID()
  181. objectAttr := &datamodels.ModelObjectAttr{
  182. ModelId: modelId,
  183. ObjectId: objectId,
  184. AttrId: newId,
  185. AttrTitle: a.AttrTitle,
  186. AttrCode: a.AttrCode,
  187. AttrType: a.AttrType,
  188. AttrLength: a.AttrLength,
  189. AttrDecimals: a.AttrDecimals,
  190. Comment: a.Comment,
  191. IsFixed: a.IsFixed,
  192. IsNotNull: a.IsNotNull,
  193. IsPKey: a.IsPKey,
  194. CreatedBy: updatedBy,
  195. }
  196. err = s.modelObjectAttrRepo.Create(objectAttr)
  197. if err != nil {
  198. return err
  199. }
  200. attrCache := viewmodels.ModelObjectAttrInfo{
  201. ModelId: modelId,
  202. ObjectId: objectId,
  203. AttrId: newId,
  204. AttrTitle: a.AttrTitle,
  205. AttrCode: a.AttrCode,
  206. AttrType: a.AttrType,
  207. AttrLength: a.AttrLength,
  208. AttrDecimals: a.AttrDecimals,
  209. Comment: a.Comment,
  210. IsFixed: a.IsFixed,
  211. IsNotNull: a.IsNotNull,
  212. IsPKey: a.IsPKey,
  213. }
  214. attrsCache = append(attrsCache, attrCache)
  215. }
  216. objectDataCache := &viewmodels.ModelObjectDataInfo{
  217. ModelId: o.ModelId,
  218. ModelTitle: o.ModelTitle,
  219. ObjectId: o.ObjectId,
  220. ObjectType: o.ObjectType,
  221. ObjectTitle: o.ObjectTitle,
  222. ObjectCode: o.ObjectCode,
  223. Comment: o.Comment,
  224. IsFixed: o.IsFixed,
  225. Attrs: attrsCache,
  226. }
  227. err = cache.SetModelObjectData(o.ObjectCode, objectDataCache)
  228. if err != nil {
  229. return errors.New("Redis缓存Model数据失败")
  230. }
  231. return nil
  232. }