s_project.go 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275
  1. package service
  2. import (
  3. "context"
  4. "fmt"
  5. "github.com/issue9/conv"
  6. log "github.com/sirupsen/logrus"
  7. "youngee_b_api/db"
  8. "youngee_b_api/model/common_model"
  9. "youngee_b_api/model/gorm_model"
  10. "youngee_b_api/model/http_model"
  11. )
  12. var SProject *sProject
  13. type sProject struct {
  14. }
  15. // CreateSProject 新建服务商加入商单后的公开种草任务
  16. func (*sProject) CreateSProject(ctx context.Context, request http_model.AddToListRequest) error {
  17. // 1. 建立SProject信息
  18. newSProject := gorm_model.SProjectInfo{
  19. EnterpriseId: request.EnterpriseId,
  20. SupplierId: request.SupplierId,
  21. ProjectId: request.ProjectId,
  22. SubAccountId: request.SubAccountId,
  23. ProjectType: request.ProjectType,
  24. ProjectName: request.ProjectName,
  25. ProjectPlatform: request.ProjectPlatform,
  26. ProjectForm: request.ProjectForm,
  27. ContentType: request.ContentType,
  28. OperatorType: request.OperatorType,
  29. SProjectStatus: 2,
  30. StrategyStatus: 1,
  31. }
  32. sProjectId, err := db.CreateSProject(ctx, newSProject)
  33. if err != nil {
  34. log.Infof("[CreateEnterpriseSubUser] fail,err:%+v", err)
  35. return err
  36. }
  37. fmt.Println("创建SProject信息成功")
  38. // 2. 建立新的recruitStrategy
  39. // 2.1. 根据projectId去查找原来的recruitStrategy
  40. recruitStrategys, strategyErr := db.GetRecruitStrategyByProjectId(ctx, request.ProjectId)
  41. if strategyErr != nil {
  42. return strategyErr
  43. }
  44. // 2.2. 设置新的结构体以写入
  45. var currRecruitStrategys []gorm_model.RecruitStrategy
  46. for _, strategy := range recruitStrategys {
  47. var currStrategy gorm_model.RecruitStrategy
  48. currStrategy.StrategyID = strategy.StrategyID
  49. currStrategy.QuoteRecruitStrategyId = int(strategy.RecruitStrategyID)
  50. currStrategy.FeeForm = strategy.FeeForm
  51. currStrategy.FollowersLow = strategy.FollowersLow
  52. currStrategy.FollowersUp = strategy.FollowersUp
  53. currStrategy.RecruitNumber = strategy.RecruitNumber
  54. currStrategy.Offer = strategy.Offer
  55. currStrategy.TOffer = strategy.TOffer
  56. currStrategy.ProjectID = strategy.ProjectID
  57. currStrategy.ServiceCharge = strategy.ServiceCharge
  58. currStrategy.ServiceRate = strategy.ServiceRate
  59. currStrategy.SProjectId = sProjectId
  60. currStrategy.StrategyType = 2
  61. currRecruitStrategys = append(currRecruitStrategys, currStrategy)
  62. }
  63. // 2.3. 写入
  64. createStrategyErr := db.CreateSpecialStrategy(ctx, currRecruitStrategys)
  65. if createStrategyErr != nil {
  66. return createStrategyErr
  67. }
  68. fmt.Println("创建招募策略成功")
  69. return nil
  70. }
  71. // GetSProjectList 查找服务商加入商单的种草任务列表
  72. func (*sProject) GetSProjectList(ctx context.Context, supplierId int, pageSize, pageNum int32, condition *common_model.SProjectCondition) (*http_model.SProjectData, error) {
  73. var SProjectList *http_model.SProjectData
  74. SProjectList = &http_model.SProjectData{}
  75. // 1. 加入商单后的种草任务基本信息
  76. sProjects, total, err := db.GetSProjectList(ctx, supplierId, pageSize, pageNum, condition)
  77. if err != nil {
  78. return nil, err
  79. }
  80. SProjectList.Total = total
  81. // 2. 商品信息填入
  82. for _, sProject := range sProjects {
  83. var currSProject *http_model.SProjectListReview
  84. currSProject = &http_model.SProjectListReview{}
  85. currSProject.SProjectId = sProject.SProjectId
  86. currSProject.ProjectId = sProject.ProjectId
  87. currSProject.ProjectPlatform = sProject.ProjectPlatform
  88. currSProject.ContentType = sProject.ContentType
  89. currSProject.ProjectForm = sProject.ProjectForm
  90. currSProject.ProjectStatus = sProject.ProjectStatus
  91. currSProject.SupplierId = sProject.SupplierId
  92. currSProject.SubAccountId = sProject.SubAccountId
  93. currSProject.OperatorType = sProject.OperatorType
  94. currSProject.CreateTime = conv.MustString(sProject.CreateTime)[0:19]
  95. // 2.2. 商品信息
  96. productInfo, productErr := db.GetProductByID(ctx, sProject.ProductId)
  97. if productErr != nil {
  98. return nil, productErr
  99. }
  100. if productInfo != nil {
  101. currSProject.ProductId = productInfo.ProductID
  102. currSProject.ProductPrice = productInfo.ProductPrice
  103. currSProject.ProductName = productInfo.ProductName
  104. }
  105. // 2.3. 商品图片信息
  106. productPhotoInfo, productPhotoErr := db.GetProductPhotoByProductID(ctx, sProject.ProductId)
  107. if productPhotoErr != nil {
  108. return nil, productPhotoErr
  109. }
  110. if productPhotoInfo != nil {
  111. for _, photo := range productPhotoInfo {
  112. fmt.Println(photo)
  113. if photo.Symbol == 1 {
  114. currSProject.ProductPhotoSymbol = 1
  115. currSProject.ProductPhotoUrl = photo.PhotoUrl
  116. currSProject.ProductPhotoUid = photo.PhotoUid
  117. }
  118. }
  119. }
  120. SProjectList.SProjectList = append(SProjectList.SProjectList, currSProject)
  121. }
  122. return SProjectList, nil
  123. }
  124. // GetSPorjectDetail 查找服务商种草任务详情
  125. func (*sProject) GetSPorjectDetail(ctx context.Context, sProjectId int) (*http_model.ShowSProjectData, error) {
  126. var sProjectData *http_model.ShowSProjectData
  127. sProjectData = &http_model.ShowSProjectData{}
  128. // 1. 取出服务商种草表中的信息
  129. sProjectInfo, err := db.GetSProjectDetail(ctx, sProjectId)
  130. if err != nil {
  131. return nil, err
  132. }
  133. if sProjectInfo != nil {
  134. fmt.Println(sProjectInfo)
  135. sProjectData.SProjectId = sProjectInfo.SProjectId
  136. sProjectData.ProjectName = sProjectInfo.ProjectName
  137. sProjectData.ProjectID = sProjectInfo.ProjectId
  138. sProjectData.ProjectType = sProjectInfo.ProjectType
  139. sProjectData.ProjectPlatform = sProjectInfo.ProjectPlatform
  140. sProjectData.ProjectForm = sProjectInfo.ProjectForm
  141. sProjectData.ContentType = sProjectInfo.ContentType
  142. }
  143. // 2. 取出商家发布的种草任务表中的信息
  144. projectInfo, projectErr := db.GetProjectDetail(ctx, sProjectInfo.ProjectId)
  145. if projectErr != nil {
  146. return nil, projectErr
  147. }
  148. if projectInfo != nil {
  149. fmt.Println(projectInfo)
  150. sProjectData.TalentType = projectInfo.TalentType
  151. sProjectData.RecruitDdl = *projectInfo.RecruitDdl
  152. sProjectData.ProjectDetail = projectInfo.ProjectDetail
  153. sProjectData.PayAt = *projectInfo.PayAt
  154. }
  155. // 3. 取出招募策略并聚合达人数量信息
  156. recruitStrategy, recruitErr := db.GetRecruitStrategyByProjectId(ctx, sProjectData.ProjectID)
  157. if recruitErr != nil {
  158. return nil, recruitErr
  159. }
  160. if recruitStrategy != nil {
  161. for _, strategy := range recruitStrategy {
  162. fmt.Println("recruitStrategy: ", strategy)
  163. selectedNumber, countTaskErr := db.CountTaskNumByStrategyId(ctx, sProjectData.ProjectID, strategy.StrategyID)
  164. if countTaskErr != nil {
  165. return nil, countTaskErr
  166. }
  167. showStrategy := http_model.ShowSRecruitStrategy{
  168. StrategyID: strategy.StrategyID,
  169. FeeForm: strategy.FeeForm,
  170. FollowersLow: strategy.FollowersLow,
  171. FollowersUp: strategy.FollowersUp,
  172. RecruitNumber: strategy.RecruitNumber,
  173. ServiceCharge: projectInfo.ServiceChargeRate,
  174. SelectedNumber: selectedNumber,
  175. Offer: strategy.Offer,
  176. }
  177. sProjectData.SRecruitStrategys = append(sProjectData.SRecruitStrategys, showStrategy)
  178. }
  179. }
  180. // 4. 取出种草任务创建者用户信息
  181. if projectInfo.OperatorType == 1 {
  182. fmt.Println("商家用户")
  183. enterpriseInfo, enterpriseErr := db.GetEnterpriseByEnterpriseID(ctx, projectInfo.EnterpriseID)
  184. if enterpriseErr != nil {
  185. return nil, enterpriseErr
  186. }
  187. sProjectData.CreatorName = enterpriseInfo.BusinessName
  188. sProjectData.CreatorCompany = enterpriseInfo.BusinessName
  189. sProjectData.CreatorType = 1
  190. sProjectData.Phone = enterpriseInfo.Phone
  191. } else if projectInfo.OperatorType == 2 {
  192. fmt.Println("商家子账号")
  193. enterpriseInfo, enterpriseErr := db.GetEnterpriseByEnterpriseID(ctx, projectInfo.EnterpriseID)
  194. if enterpriseErr != nil {
  195. return nil, enterpriseErr
  196. }
  197. sProjectData.CreatorCompany = enterpriseInfo.BusinessName
  198. subAccountInfo, SubAccountErr := db.FindSubAccountById(ctx, projectInfo.SubAccountId)
  199. if SubAccountErr != nil {
  200. return nil, SubAccountErr
  201. }
  202. sProjectData.Phone = subAccountInfo.PhoneNumber
  203. jobInfo, jobErr := db.FindJobByJobId(ctx, subAccountInfo.JobId)
  204. if jobErr != nil {
  205. return nil, jobErr
  206. }
  207. sProjectData.CreatorType = 2
  208. sProjectData.CreatorName = jobInfo.JobName
  209. }
  210. return sProjectData, nil
  211. }
  212. // GetSSpecialProjectList 查找服务商加入商单的定向种草任务列表
  213. func (*sProject) GetSSpecialProjectList(ctx context.Context, supplierId int, pageSize, pageNum int32, condition *common_model.SSpecialProjectCondition) ([]*gorm_model.SProjectInfo, int64, error) {
  214. sProjects, total, err := db.GetSSpecialProjectList(ctx, supplierId, pageSize, pageNum, condition)
  215. if err != nil {
  216. return nil, 0, err
  217. }
  218. return sProjects, total, nil
  219. }
  220. // UpdateSProject 更新SProject信息
  221. func (*sProject) UpdateSProject(ctx context.Context, request *http_model.SpecialSProjectAddToListRequest) error {
  222. updateSProjectErr := db.UpdateSProjectStatus(ctx, request)
  223. if updateSProjectErr != nil {
  224. return updateSProjectErr
  225. }
  226. return nil
  227. }
  228. // CreateSpecialStrategy 添加服务商招募策略
  229. func (*sProject) CreateSpecialStrategy(ctx context.Context, request *http_model.SpecialAddStrategyRequest) error {
  230. // 1. 添加服务商招募策略
  231. createErr := db.CreateSpecialStrategy(ctx, request.RecruitStrategys)
  232. if createErr != nil {
  233. return createErr
  234. }
  235. // 2. 修改sProject中的字段
  236. updateErr := db.UpdateSProjectStrategyStatus(ctx, request)
  237. if updateErr != nil {
  238. return updateErr
  239. }
  240. return nil
  241. }
  242. // FullSProjectBillList 种草任务账单列表
  243. func (*sProject) FullSProjectBillList(ctx context.Context, request *http_model.FullSProjectBillListRequest) (*http_model.FullSProjectBillData, error) {
  244. // 1. 根据SupplierId和账单状态查询数据
  245. fullSProjectBillData, total, err := db.GetFullSProjectBillList(ctx, request.SupplierId, request.ProjectPlatform, request.ProjectStatus, request.PageSize, request.PageNum)
  246. if err != nil {
  247. return nil, err
  248. }
  249. var currSProjectBillData *http_model.FullSProjectBillData
  250. currSProjectBillData = &http_model.FullSProjectBillData{}
  251. currSProjectBillData.SProjectList = fullSProjectBillData
  252. currSProjectBillData.Total = total
  253. return currSProjectBillData, nil
  254. }