service-asset-updator.go 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393
  1. package api
  2. import (
  3. "fmt"
  4. "sku3dweb/bus"
  5. "sku3dweb/db/model"
  6. "time"
  7. "github.com/gin-gonic/gin"
  8. "go.mongodb.org/mongo-driver/bson/primitive"
  9. "infish.cn/comm"
  10. )
  11. func regAssetUpdator(router *GinRouter) {
  12. router.POSTJWT("/asset/user/:assetType/header", updateUserAssetComm)
  13. router.POSTJWT("/asset/team/:assetType/header", updateTeamAssetComm)
  14. router.POSTJWT("/asset/company/:assetType/header", updateCompanyAssetComm)
  15. //目前只支持自己的
  16. router.POSTJWT("/asset/user/:assetType/retreat", retreatAssetPack)
  17. //目前只支持自己的
  18. router.POSTJWT("/shadow/:scope/:assetType/:id", createAssetShadow)
  19. router.POSTJWT("/asset/user/:assetType/create", createAssetPack)
  20. // !20240411 迁移到asset/:scope/:assetType/insert scope包括user,team,company
  21. // router.POSTJWT("/asset/user/:assetType/insert", insertAssetPack)
  22. router.POSTJWT("/asset/user/:assetType/insert", insertUserAsset)
  23. router.POSTJWT("/asset/team/:assetType/insert", insertTeamAsset)
  24. router.POSTJWT("/asset/company/:assetType/insert", insertCompanyAsset)
  25. router.POSTJWT("/company/publish", companyPublish)
  26. }
  27. func insertUserAsset(c *gin.Context, apictx *ApiSession) (interface{}, error) {
  28. return insertScopeAsset(c, apictx, "user")
  29. }
  30. func insertTeamAsset(c *gin.Context, apictx *ApiSession) (interface{}, error) {
  31. return insertScopeAsset(c, apictx, "team")
  32. }
  33. func insertCompanyAsset(c *gin.Context, apictx *ApiSession) (interface{}, error) {
  34. return insertScopeAsset(c, apictx, "company")
  35. }
  36. func createAssetPack(c *gin.Context, apictx *ApiSession) (interface{}, error) {
  37. assetType := c.Param("assetType")
  38. if len(assetType) < 1 {
  39. return nil, fmt.Errorf("参数错误")
  40. }
  41. isCompany := model.USERTYPE_COMPANY == apictx.User.UserType
  42. isSku3d := apictx.User.Parent == model.SKU3D_USERID
  43. req := &bus.UpdateCommReq{Db: Sku3dDbName}
  44. if isAssetPack(assetType) {
  45. req.Pack = &comm.AssetPackage{}
  46. err := c.ShouldBindJSON(req.Pack)
  47. if err != nil {
  48. return nil, err
  49. }
  50. req.Pack.CreateTime = time.Now()
  51. req.Pack.UpdateTime = time.Now()
  52. req.Pack.UserId, _ = primitive.ObjectIDFromHex(apictx.User.ID)
  53. req.Pack.OwnerId, _ = primitive.ObjectIDFromHex(apictx.User.Parent)
  54. req.Pack.OwnerType = "user"
  55. if req.Pack.Source != nil {
  56. if assetType == "shoe" || assetType == "shoes" {
  57. req.Pack.Source.ViewMode = "scene"
  58. } else {
  59. req.Pack.Source.ViewMode = "prod"
  60. }
  61. }
  62. transTask := req.Pack.TransTask
  63. if comm.TransTaskIsNotEmpty(transTask) {
  64. req.Pack.Source = nil
  65. }
  66. } else if isFabric3d(assetType) {
  67. req.Mat3d = &comm.AssetMatGroup{}
  68. err := c.ShouldBindJSON(req.Mat3d)
  69. if err != nil {
  70. return nil, err
  71. }
  72. req.Mat3d.Enable = BoolValue(false)
  73. req.Mat3d.AssetState = comm.AssetState_Succ
  74. req.Mat3d.CreateTime = time.Now()
  75. req.Mat3d.UpdateTime = time.Now()
  76. req.Mat3d.UserId, _ = primitive.ObjectIDFromHex(apictx.User.ID)
  77. req.Mat3d.OwnerId, _ = primitive.ObjectIDFromHex(apictx.User.Parent)
  78. req.Mat3d.OwnerType = "user"
  79. } else if isAssetImage(assetType) {
  80. req.Img = &comm.AssetImage{}
  81. err := c.ShouldBindJSON(req.Img)
  82. if err != nil {
  83. return nil, err
  84. }
  85. req.Img.Enable = BoolValue(false)
  86. req.Img.AssetState = comm.AssetState_Succ
  87. req.Img.CreateTime = time.Now()
  88. req.Img.UpdateTime = time.Now()
  89. req.Img.UserId, _ = primitive.ObjectIDFromHex(apictx.User.ID)
  90. req.Img.OwnerId, _ = primitive.ObjectIDFromHex(apictx.User.Parent)
  91. req.Img.OwnerType = "user"
  92. } else if isEnv3d(assetType) {
  93. req.Env3d = &comm.AssetEnv3dHdr{}
  94. err := c.ShouldBindJSON(req.Env3d)
  95. if err != nil {
  96. return nil, err
  97. }
  98. req.Env3d.Enable = BoolValue(false)
  99. req.Env3d.AssetState = comm.AssetState_Succ
  100. req.Env3d.CreateTime = time.Now()
  101. req.Env3d.UpdateTime = time.Now()
  102. req.Env3d.UserId, _ = primitive.ObjectIDFromHex(apictx.User.ID)
  103. req.Env3d.OwnerId, _ = primitive.ObjectIDFromHex(apictx.User.Parent)
  104. req.Env3d.OwnerType = "user"
  105. } else if isOtherMat(assetType) {
  106. req.OtherMat = &comm.AssetMat{}
  107. err := c.ShouldBindJSON(req.OtherMat)
  108. if err != nil {
  109. return nil, err
  110. }
  111. req.OtherMat.Enable = BoolValue(false)
  112. req.OtherMat.AssetState = comm.AssetState_Succ
  113. req.OtherMat.CreateTime = time.Now()
  114. req.OtherMat.UpdateTime = time.Now()
  115. req.OtherMat.UserId, _ = primitive.ObjectIDFromHex(apictx.User.ID)
  116. req.OtherMat.OwnerId, _ = primitive.ObjectIDFromHex(apictx.User.Parent)
  117. req.OtherMat.OwnerType = "user"
  118. }
  119. srcColl := getAssetTypeCollectin(isCompany, isSku3d, "user", assetType)
  120. req.Coll = srcColl
  121. fmt.Println("createAssetPack===>:\n", req)
  122. ret, err := bus.BusTreeAssetCreate(req)
  123. fmt.Printf("crate id%v,err:%v", ret, err)
  124. return ret, err
  125. }
  126. func insertScopeAsset(c *gin.Context, apictx *ApiSession, scope string) (interface{}, error) {
  127. isCompany := model.USERTYPE_COMPANY == apictx.User.UserType
  128. isSku3d := apictx.User.Parent == model.SKU3D_USERID
  129. req := &bus.UpdateCommReq{Db: Sku3dDbName}
  130. assetType := c.Param("assetType")
  131. if isAssetPack(assetType) {
  132. req.Pack = &comm.AssetPackage{}
  133. err := c.ShouldBindJSON(req.Pack)
  134. if err != nil {
  135. return nil, err
  136. }
  137. req.Pack.UserId, _ = primitive.ObjectIDFromHex(apictx.User.ID)
  138. // !ownerId 如果是team,company,则是team,parent的id
  139. // !前端做了相关处理,这里不需要再处理
  140. // req.Pack.OwnerId, _ = primitive.ObjectIDFromHex(apictx.User.Parent)
  141. req.Pack.OwnerType = scope
  142. if isShoePack(assetType) && req.Pack.Source != nil {
  143. req.Pack.Source.ViewMode = "scene"
  144. }
  145. } else if isFabric3d(assetType) {
  146. req.Mat3d = &comm.AssetMatGroup{}
  147. err := c.ShouldBindJSON(req.Mat3d)
  148. if err != nil {
  149. return nil, err
  150. }
  151. req.Mat3d.UserId, _ = primitive.ObjectIDFromHex(apictx.User.ID)
  152. // req.Pack.OwnerId, _ = primitive.ObjectIDFromHex(apictx.User.Parent)
  153. req.Mat3d.OwnerType = scope
  154. } else if isAssetImage(assetType) {
  155. req.Img = &comm.AssetImage{}
  156. err := c.ShouldBindJSON(req.Img)
  157. if err != nil {
  158. return nil, err
  159. }
  160. req.Img.UserId, _ = primitive.ObjectIDFromHex(apictx.User.ID)
  161. // req.Pack.OwnerId, _ = primitive.ObjectIDFromHex(apictx.User.Parent)
  162. req.Img.OwnerType = scope
  163. } else if isOtherMat(assetType) {
  164. req.OtherMat = &comm.AssetMat{}
  165. err := c.ShouldBindJSON(req.OtherMat)
  166. if err != nil {
  167. return nil, err
  168. }
  169. req.OtherMat.UserId, _ = primitive.ObjectIDFromHex(apictx.User.ID)
  170. // req.Pack.OwnerId, _ = primitive.ObjectIDFromHex(apictx.User.Parent)
  171. req.OtherMat.OwnerType = scope
  172. }
  173. srcColl := getAssetTypeCollectin(isCompany, isSku3d, scope, assetType)
  174. req.Coll = srcColl
  175. return bus.BusTreeInsertAssetPack(Sku3dDbName, srcColl, &bus.AssetInsertReq{
  176. DbName: Sku3dDbName,
  177. Coll: srcColl,
  178. Pack: req.Pack,
  179. Mat3d: req.Mat3d,
  180. Img: req.Img,
  181. OtherMat: req.OtherMat,
  182. })
  183. }
  184. func insertAssetPack(c *gin.Context, apictx *ApiSession) (interface{}, error) {
  185. assetType := c.Param("assetType")
  186. isCompany := model.USERTYPE_COMPANY == apictx.User.UserType
  187. isSku3d := apictx.User.Parent == model.SKU3D_USERID
  188. if !isAssetPack(assetType) {
  189. return nil, fmt.Errorf("不支持的类型" + assetType)
  190. }
  191. pack := &comm.AssetPackage{}
  192. err := c.ShouldBindJSON(pack)
  193. if err != nil {
  194. return nil, err
  195. }
  196. pack.CreateTime = time.Now()
  197. pack.UpdateTime = time.Now()
  198. pack.UserId, _ = primitive.ObjectIDFromHex(apictx.User.ID)
  199. pack.OwnerId, _ = primitive.ObjectIDFromHex(apictx.User.Parent)
  200. pack.OwnerType = "user"
  201. if isShoePack(assetType) {
  202. pack.Source.ViewMode = "scene"
  203. } else {
  204. pack.Source.ViewMode = "prod"
  205. }
  206. srcColl := getAssetTypeCollectin(isCompany, isSku3d, "user", assetType)
  207. return bus.BusTreeAssetPackAdd(Sku3dDbName, srcColl, pack)
  208. }
  209. func retreatAssetPack(c *gin.Context, apictx *ApiSession) (interface{}, error) {
  210. assetType := c.Param("assetType")
  211. scope := "user"
  212. if len(assetType) < 1 || len(scope) < 1 {
  213. return nil, fmt.Errorf("参数错误")
  214. }
  215. if !isAssetPack(assetType) {
  216. return nil, fmt.Errorf("不支持的类型")
  217. }
  218. isCompany := model.USERTYPE_COMPANY == apictx.User.UserType
  219. isSku3d := apictx.User.Parent == model.SKU3D_USERID
  220. req := &bus.UpdateCommReq{Db: Sku3dDbName}
  221. req.Pack = &comm.AssetPackage{}
  222. err := c.ShouldBindJSON(req.Pack)
  223. if err != nil {
  224. return nil, err
  225. }
  226. req.Pack.Source = &comm.Queen3dPackageSource{} //清空数据,只需要一个Id参数就够了
  227. srcColl := getAssetTypeCollectin(isCompany, isSku3d, scope, assetType)
  228. req.Coll = srcColl
  229. return req, bus.BusTreeAssetReProcess(req)
  230. }
  231. func createAssetShadow(c *gin.Context, apictx *ApiSession) (interface{}, error) {
  232. assetType := c.Param("assetType")
  233. scope := c.Param("scope")
  234. id := c.Param("id")
  235. if len(assetType) < 1 || len(scope) < 1 || len(id) < 1 {
  236. return nil, fmt.Errorf("参数错误")
  237. }
  238. if !isAssetPack(assetType) {
  239. return nil, fmt.Errorf("不支持的类型")
  240. }
  241. body := struct {
  242. Width int
  243. Scale int
  244. }{}
  245. err := c.ShouldBindJSON(&body)
  246. if err != nil {
  247. return nil, err
  248. }
  249. isCompany := model.USERTYPE_COMPANY == apictx.User.UserType
  250. isSku3d := apictx.User.Parent == model.SKU3D_USERID
  251. req := &bus.UpdateCommReq{Db: Sku3dDbName}
  252. srcColl := getAssetTypeCollectin(isCompany, isSku3d, scope, assetType)
  253. return req, bus.BusTreeAssetCreateShadow(&bus.CreateShadowReq{
  254. Db: Sku3dDbName,
  255. Coll: srcColl,
  256. Id: id,
  257. Width: body.Width,
  258. Scale: body.Scale,
  259. })
  260. }
  261. func updateUserAssetComm(c *gin.Context, apictx *ApiSession) (interface{}, error) {
  262. return updateAssetComm(c, apictx, "user")
  263. }
  264. func updateTeamAssetComm(c *gin.Context, apictx *ApiSession) (interface{}, error) {
  265. return updateAssetComm(c, apictx, "team")
  266. }
  267. func updateCompanyAssetComm(c *gin.Context, apictx *ApiSession) (interface{}, error) {
  268. return updateAssetComm(c, apictx, "company")
  269. }
  270. func updateAssetComm(c *gin.Context, apictx *ApiSession, scope string) (interface{}, error) {
  271. isCompany := model.USERTYPE_COMPANY == apictx.User.UserType
  272. isSku3d := apictx.User.Parent == model.SKU3D_USERID
  273. req := &bus.UpdateCommReq{Db: Sku3dDbName}
  274. assetType := c.Param("assetType")
  275. if isAssetPack(assetType) {
  276. req.Pack = &comm.AssetPackage{}
  277. err := c.ShouldBindJSON(req.Pack)
  278. if err != nil {
  279. return nil, err
  280. }
  281. if isShoePack(assetType) && req.Pack.Source != nil {
  282. req.Pack.Source.ViewMode = "scene"
  283. }
  284. } else if isFabric3d(assetType) {
  285. req.Mat3d = &comm.AssetMatGroup{}
  286. err := c.ShouldBindJSON(req.Mat3d)
  287. if err != nil {
  288. return nil, err
  289. }
  290. } else if isAssetImage(assetType) {
  291. req.Img = &comm.AssetImage{}
  292. err := c.ShouldBindJSON(req.Img)
  293. if err != nil {
  294. return nil, err
  295. }
  296. }
  297. srcColl := getAssetTypeCollectin(isCompany, isSku3d, scope, assetType)
  298. req.Coll = srcColl
  299. return req, bus.BusTreeAssetUpdate(req)
  300. }
  301. func companyPublish(c *gin.Context, apictx *ApiSession) (interface{}, error) {
  302. body := &struct {
  303. AssetType string
  304. Id string
  305. Publish bool
  306. }{}
  307. err := c.ShouldBindJSON(body)
  308. if err != nil {
  309. return nil, fmt.Errorf("参数错误")
  310. }
  311. isCompany := true
  312. isSku3d := apictx.User.Parent == model.SKU3D_USERID
  313. req := &bus.UpdateCommReq{Db: Sku3dDbName}
  314. assetType := body.AssetType
  315. if isAssetPack(assetType) {
  316. req.Pack = &comm.AssetPackage{}
  317. req.Pack.Id, _ = primitive.ObjectIDFromHex(body.Id)
  318. req.Pack.Enable = &body.Publish
  319. } else if isFabric3d(assetType) {
  320. req.Mat3d = &comm.AssetMatGroup{}
  321. req.Mat3d.Id, _ = primitive.ObjectIDFromHex(body.Id)
  322. req.Mat3d.Enable = &body.Publish
  323. } else if isAssetImage(assetType) {
  324. req.Img = &comm.AssetImage{}
  325. req.Img.Id, _ = primitive.ObjectIDFromHex(body.Id)
  326. req.Img.Enable = &body.Publish
  327. }
  328. srcColl := getAssetTypeCollectin(isCompany, isSku3d, "company", assetType)
  329. req.Coll = srcColl
  330. return req, bus.BusTreeAssetUpdate(req)
  331. }