product_service.go 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  1. package service
  2. import (
  3. "errors"
  4. "time"
  5. "youngee_b_api/app/dao"
  6. "youngee_b_api/app/entity"
  7. "youngee_b_api/app/vo"
  8. )
  9. type ProductService struct{}
  10. func (p ProductService) GetTaskProductsByUserId(param vo.GetAllProductParam) (vo.ResultVO, error) {
  11. if param.Page == 0 {
  12. param.Page = 1
  13. }
  14. if param.PageSize == 0 {
  15. param.PageSize = 10
  16. }
  17. var result vo.ResultVO
  18. var products []entity.Product
  19. var err error
  20. var total int64
  21. //if param.SubAccountId == 0 {
  22. // enterpriseId := param.EnterpriseId
  23. // if enterpriseId == "" {
  24. // return result, errors.New("enterpriseId is empty")
  25. // }
  26. // products, total, err = (&dao.ProductDAO{}).GetProductsByEnterpriseID(enterpriseId, param.Page, param.PageSize)
  27. //} else {
  28. // products, total, err = (&dao.ProductDAO{}).GetProductsBySubAccountId(param.SubAccountId, param.Page, param.PageSize)
  29. //}
  30. enterpriseId := param.EnterpriseId
  31. if enterpriseId == "" {
  32. return result, errors.New("enterpriseId is empty")
  33. }
  34. products, total, err = (&dao.ProductDAO{}).GetProductsByEnterpriseIDAndTypeTitle(enterpriseId, param.ProductType, param.ProductTitle, param.Page, param.PageSize)
  35. if err != nil {
  36. // 数据库查询error
  37. return result, err
  38. }
  39. var reProducts []vo.ReProductPreview
  40. for _, product := range products {
  41. var createrName string
  42. photoUrl, e := dao.ProductPhotoDAO{}.GetMainPhotoByProductID(product.ProductID)
  43. if e != nil {
  44. photoUrl = ""
  45. }
  46. if product.SubAccountID == 0 {
  47. enterprise, err := dao.EnterpriseDao{}.GetEnterprise(product.EnterpriseID)
  48. if err == nil && enterprise != nil {
  49. createrName = enterprise.BusinessName
  50. }
  51. } else {
  52. subAccount, err := dao.SubAccountDao{}.GetSubAccount(product.SubAccountID)
  53. if err == nil && subAccount != nil {
  54. createrName = subAccount.SubAccountName
  55. }
  56. }
  57. reProduct := vo.ReProductPreview{
  58. ProductID: product.ProductID,
  59. ProductName: product.ProductName,
  60. ProductType: product.ProductType,
  61. ProductCategory: product.ProductCategory,
  62. ProductPrice: product.ProductPrice,
  63. ProductDetail: product.ProductDetail,
  64. CreatedAt: product.CreatedAt.Format("2006-01-02 15:04:05"),
  65. PhotoUrl: photoUrl,
  66. CreateName: createrName,
  67. }
  68. reProducts = append(reProducts, reProduct)
  69. }
  70. result = vo.ResultVO{
  71. Page: param.Page,
  72. PageSize: param.PageSize,
  73. Total: total,
  74. Data: reProducts,
  75. }
  76. return result, nil
  77. }
  78. func (p ProductService) CreateProduct(productCreateParam *vo.ProductCreateParam) (int64, error) {
  79. if len(productCreateParam.ProductPhotos) == 0 {
  80. return 0, errors.New("商品主图不能为空!")
  81. }
  82. if productCreateParam.ProductType == 1 {
  83. count := dao.ProductDAO{}.CheckKuaishouProduct(productCreateParam.EnterpriseId, productCreateParam.ProductId)
  84. if count > 0 {
  85. return 0, errors.New("该快手商品已存在!")
  86. }
  87. }
  88. product := entity.Product{
  89. ProductType: productCreateParam.ProductType,
  90. KuaishouProductId: productCreateParam.ProductId,
  91. ProductName: productCreateParam.ProductName,
  92. ProductCategory: productCreateParam.ProductCategory,
  93. ProductPrice: productCreateParam.ProductPrice,
  94. ProductDetail: productCreateParam.ProductDetail,
  95. EnterpriseID: productCreateParam.EnterpriseId,
  96. SubAccountID: productCreateParam.SubAccountId,
  97. ExclusiveCommission: productCreateParam.ExclusiveCommission,
  98. CommissionPrice: productCreateParam.CommissionPrice,
  99. PublicCommission: productCreateParam.PublicCommission,
  100. ProductUrl: productCreateParam.ProductUrl,
  101. SalesCount: productCreateParam.SalesCount,
  102. }
  103. productID, err := dao.ProductDAO{}.CreateProduct(product)
  104. if err != nil {
  105. return 0, err
  106. }
  107. if productCreateParam.ProductPhotos != nil {
  108. productPhotos := []entity.ProductPhoto{}
  109. for _, photo := range productCreateParam.ProductPhotos {
  110. productPhoto := entity.ProductPhoto{
  111. PhotoUrl: photo.PhotoUrl,
  112. PhotoUid: photo.PhotoUid,
  113. Symbol: photo.Symbol,
  114. ProductID: productID,
  115. CreatedAt: time.Now(),
  116. }
  117. productPhotos = append(productPhotos, productPhoto)
  118. }
  119. err = dao.ProductPhotoDAO{}.CreateProductPhoto(productPhotos)
  120. if err != nil {
  121. return 0, err
  122. }
  123. }
  124. return productID, nil
  125. }
  126. // 商品详情
  127. func (s ProductService) GetProductDetail(param *vo.ProductSearchParam) (*vo.ReProductInfo, error) {
  128. var reProductInfo *vo.ReProductInfo
  129. product, err := dao.ProductDAO{}.GetProductByID(param.ProductId)
  130. if err != nil {
  131. return nil, err
  132. }
  133. photoMain, _ := dao.ProductPhotoDAO{}.GetMainPhotoByProductID(param.ProductId)
  134. photosAll, _ := dao.ProductPhotoDAO{}.GetProductPhotoByProductID(param.ProductId)
  135. var photoRotates []vo.Photo
  136. var photoDetails []vo.Photo
  137. for _, photosOne := range photosAll {
  138. if photosOne.Symbol == 2 || photosOne.Symbol == 3 {
  139. photo := vo.Photo{
  140. PhotoUrl: photosOne.PhotoUrl,
  141. Symbol: photosOne.Symbol,
  142. }
  143. photoRotates = append(photoRotates, photo)
  144. } else if photosOne.Symbol == 4 || photosOne.Symbol == 5 {
  145. photo := vo.Photo{
  146. PhotoUrl: photosOne.PhotoUrl,
  147. Symbol: photosOne.Symbol,
  148. }
  149. photoDetails = append(photoDetails, photo)
  150. }
  151. }
  152. reProductInfo = &vo.ReProductInfo{
  153. ProductID: product.ProductID,
  154. ProductName: product.ProductName,
  155. ProductCategory: product.ProductCategory,
  156. ProductPrice: product.ProductPrice,
  157. ExclusiveCommission: product.ExclusiveCommission,
  158. CommissionPrice: product.CommissionPrice,
  159. ProductDetail: product.ProductDetail,
  160. ProductUrl: product.ProductUrl,
  161. PhotoMain: photoMain,
  162. PhotoRotates: photoRotates,
  163. PhotoDetails: photoDetails,
  164. CreatedAt: product.CreatedAt.Format("2006-01-02 15:04:05"),
  165. }
  166. return reProductInfo, nil
  167. }
  168. // 更新商品
  169. func (p ProductService) UpdateProduct(param *vo.ProductUpdateParam) (int64, error) {
  170. newProduct := entity.Product{
  171. ProductID: param.ProductId,
  172. ProductName: param.ProductName,
  173. ProductCategory: param.ProductCategory,
  174. ProductPrice: param.ProductPrice,
  175. ExclusiveCommission: param.ExclusiveCommission,
  176. CommissionPrice: param.CommissionPrice,
  177. ProductDetail: param.ProductDetail,
  178. ProductUrl: param.ProductUrl,
  179. UpdatedAt: time.Now(),
  180. }
  181. productId, err := dao.ProductDAO{}.UpdateProduct(newProduct)
  182. if err != nil {
  183. return 0, err
  184. }
  185. if param.ProductPhotos != nil {
  186. productPhotos := []entity.ProductPhoto{}
  187. for _, photo := range param.ProductPhotos {
  188. productPhoto := entity.ProductPhoto{
  189. PhotoUrl: photo.PhotoUrl,
  190. PhotoUid: photo.PhotoUid,
  191. Symbol: photo.Symbol,
  192. StoreID: productId,
  193. ProductPhotoType: 1,
  194. CreatedAt: time.Now(),
  195. }
  196. productPhotos = append(productPhotos, productPhoto)
  197. }
  198. err = dao.ProductPhotoDAO{}.CreateProductPhoto(productPhotos)
  199. if err != nil {
  200. return 0, err
  201. }
  202. }
  203. return productId, nil
  204. }
  205. // 删除商品
  206. func (p ProductService) DeleteProduct(param *vo.ProductUpdateParam) (int64, error) {
  207. err := dao.ProductDAO{}.DeleteProduct(param.ProductId)
  208. if err != nil {
  209. return 0, err
  210. }
  211. return param.ProductId, nil
  212. }
  213. // 商品列表-角标
  214. func (t ProductService) CountProduct(param *vo.GetAllProductParam) map[string]int64 {
  215. res := make(map[string]int64)
  216. var commonProduct int64
  217. var kuaishouProduct int64
  218. if param.ProductTitle != "" {
  219. dao.Db.Model(&entity.Product{}).Where("enterprise_id = ? sub_account_id = ? and product_type = ? AND is_deleted = 0 and product_name LIKE ?", param.EnterpriseId, param.SubAccountId, 0, "%"+param.ProductTitle+"%").Count(&commonProduct)
  220. dao.Db.Model(&entity.Product{}).Where("enterprise_id = ? sub_account_id = ? and product_type = ? AND is_deleted = 0 and product_name LIKE ?", param.EnterpriseId, param.SubAccountId, 1, "%"+param.ProductTitle+"%").Count(&kuaishouProduct)
  221. } else {
  222. dao.Db.Model(&entity.Product{}).Where("enterprise_id = ? sub_account_id = ? and product_type = ? AND is_deleted = 0", param.EnterpriseId, param.SubAccountId, 0).Count(&commonProduct)
  223. dao.Db.Model(&entity.Product{}).Where("enterprise_id = ? sub_account_id = ? and product_type = ? AND is_deleted = 0", param.EnterpriseId, param.SubAccountId, 1).Count(&kuaishouProduct)
  224. }
  225. res["commonProduct"] = commonProduct
  226. res["kuaishouProduct"] = kuaishouProduct
  227. return res
  228. }
  229. // 获取商品类目
  230. func (p ProductService) GetProductCategorys() ([]string, error) {
  231. var categorys []string
  232. productCategorys, err := dao.ProductDAO{}.GetProductCategorys()
  233. if err != nil {
  234. return nil, err
  235. }
  236. for _, productCategory := range productCategorys {
  237. categorys = append(categorys, productCategory.ProductCategory)
  238. }
  239. return categorys, nil
  240. }