project_service.go 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596
  1. package service
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "github.com/issue9/conv"
  6. "github.com/sirupsen/logrus"
  7. "reflect"
  8. "time"
  9. "youngee_b_api/app/dao"
  10. "youngee_b_api/app/entity"
  11. "youngee_b_api/app/util"
  12. "youngee_b_api/app/vo"
  13. )
  14. type ProjectService struct{}
  15. // 创建种草任务
  16. func (s ProjectService) CreateProject(param *vo.ProjectCreateParam) (*string, error) {
  17. // a) 生成种草项目id
  18. projectId := util.GetProjectID()
  19. // b) 查找关联商品信息
  20. product, err := dao.ProductDAO{}.GetProductByID(conv.MustInt64(param.ProductId, 0))
  21. if err != nil {
  22. return nil, err
  23. }
  24. if product == nil {
  25. return nil, errors.New("未找到关联商品")
  26. }
  27. productPhotos, err := dao.ProductPhotoDAO{}.GetProductPhotoByProductID(param.ProductId)
  28. productInfoToJson, _ := json.Marshal(product)
  29. productPhotosToJson, _ := json.Marshal(productPhotos)
  30. // d)创建种草任务
  31. var operatorType int64
  32. if param.SubAccountId == 0 {
  33. operatorType = 1
  34. } else {
  35. operatorType = 2
  36. }
  37. // 获取定时任务配置id
  38. infoAutoTask := entity.InfoAutoTask{}
  39. infoAutoTask = dao.InfoAutoTaskDao{}.GetAutoTaskLast(param.EnterpriseId)
  40. infoAutoDefault := entity.InfoAutoDefault{}
  41. infoAutoDefault = dao.InfoAutoDefaultDao{}.GetAutoDefaultLast(param.EnterpriseId)
  42. t := time.Now()
  43. newProject := entity.Project{
  44. ProjectStatus: 1,
  45. ProjectType: param.ProjectType,
  46. ProjectId: projectId,
  47. ProductID: param.ProductId,
  48. EnterpriseID: param.EnterpriseId,
  49. SubAccountId: param.SubAccountId,
  50. ProjectPlatform: param.Platform,
  51. OperatorType: operatorType,
  52. ProductSnap: string(productInfoToJson),
  53. ProductPhotoSnap: string(productPhotosToJson),
  54. CreatedAt: t,
  55. AutoTaskID: infoAutoTask.AutoTaskID,
  56. AutoDefaultID: infoAutoDefault.AutoDefaultID,
  57. }
  58. if param.ProjectType == 1 {
  59. newProject.ServiceChargeRate = param.ServiceChargeRate
  60. }
  61. err = dao.ProjectDAO{}.CreateProject(newProject)
  62. if err != nil {
  63. return nil, err
  64. }
  65. return &projectId, nil
  66. }
  67. // 更新公开种草任务(招募要求、执行要求)
  68. func (s ProjectService) UpdateProject(projectUpdateParam *vo.ProjectUpdateParam) (*string, error) {
  69. // 1. 检查该企业id和商品id有无种草任务
  70. projectID := projectUpdateParam.ProjectID
  71. project, err := dao.ProjectDAO{}.GetProjectById(projectID)
  72. if err != nil {
  73. return nil, err
  74. }
  75. if project == nil {
  76. return nil, errors.New("种草项目不存在")
  77. }
  78. println("更新公开种草任务的招募策略")
  79. // 更新公开种草任务的招募策略
  80. var totalRecruitNum int64
  81. if projectUpdateParam.RecruitStrategys != nil {
  82. // 1. 删除已有的招募策略
  83. err = dao.RecruitStrategyDao{}.DeleteRecruitStrategyByProjectID(projectUpdateParam.ProjectID)
  84. if err != nil {
  85. return nil, err
  86. }
  87. // 2. 接收并创建新的招募策略
  88. if len(projectUpdateParam.RecruitStrategys) != 0 {
  89. var recruits []entity.RecruitStrategy
  90. for _, strategy := range projectUpdateParam.RecruitStrategys {
  91. recruitStrategy := entity.RecruitStrategy{
  92. FeeForm: strategy.FeeForm,
  93. StrategyID: strategy.StrategyID,
  94. FollowersLow: strategy.FollowersLow,
  95. FollowersUp: strategy.FollowersUp,
  96. RecruitNumber: strategy.RecruitNumber,
  97. ProjectID: project.ProjectId,
  98. }
  99. totalRecruitNum += strategy.RecruitNumber
  100. if strategy.FeeForm == 2 {
  101. recruitStrategy.Offer = strategy.Offer
  102. recruitStrategy.ServiceCharge = strategy.Offer * projectUpdateParam.ServiceChargeRate
  103. recruitStrategy.TOffer = strategy.Offer * (1 - projectUpdateParam.ServiceChargeRate)
  104. }
  105. recruits = append(recruits, recruitStrategy)
  106. }
  107. err = dao.RecruitStrategyDao{}.CreateRecruitStrategy(recruits)
  108. if err != nil {
  109. return nil, err
  110. }
  111. }
  112. }
  113. // 2. 数据准备
  114. // a) 查找关联商品信息
  115. product, err := dao.ProductDAO{}.GetProductByID(project.ProductID)
  116. if err != nil {
  117. return nil, err
  118. }
  119. productPhotos, err := dao.ProductPhotoDAO{}.GetProductPhotoByProductID(project.ProductID)
  120. productInfoToJson, _ := json.Marshal(product)
  121. productPhotosToJson, _ := json.Marshal(productPhotos)
  122. // d) 任务截止时间
  123. recruitDdl := time.Time{} //赋零值
  124. recruitDdl, _ = time.ParseInLocation("2006-01-02 15:04:05", projectUpdateParam.RecruitDdl, time.Local)
  125. // f) 更新选品状态
  126. if projectUpdateParam.ProjectStatus != 2 && projectUpdateParam.ProjectStatus != 8 {
  127. projectUpdateParam.ProjectStatus = 1
  128. }
  129. t := time.Now()
  130. updateProject := entity.Project{
  131. EnterpriseID: projectUpdateParam.EnterpriseId,
  132. SubAccountId: projectUpdateParam.SubAccountId,
  133. ProjectId: projectUpdateParam.ProjectID,
  134. ProjectType: projectUpdateParam.ProjectType,
  135. ProjectStatus: projectUpdateParam.ProjectStatus,
  136. ProjectName: projectUpdateParam.ProjectName,
  137. ProductID: projectUpdateParam.ProductId,
  138. TalentType: projectUpdateParam.TalentType,
  139. RecruitDdl: recruitDdl,
  140. ProductSnap: string(productInfoToJson),
  141. ProductPhotoSnap: string(productPhotosToJson),
  142. UpdatedAt: t,
  143. ProjectForm: projectUpdateParam.ProjectForm,
  144. ContentType: projectUpdateParam.ContentType,
  145. ProjectDetail: projectUpdateParam.ProjectDetail,
  146. }
  147. if projectUpdateParam.ProjectStatus == 2 {
  148. updateProject.SubmitAt = t
  149. }
  150. // 合并传入参数和数据表中原记录,若传入参数字段值为空,则将字段赋值为原记录中值
  151. result := util.MergeStructValue(&updateProject, project)
  152. // 利用反射机制将interface类型转换为结构体类型
  153. v := reflect.ValueOf(&result).Elem()
  154. if v.Kind() == reflect.Struct {
  155. updateProject = v.Interface().(entity.Project)
  156. //fmt.Println(p)
  157. }
  158. // c) 计算预估成本(如果有)
  159. /*
  160. var estimatedCost float64
  161. if conv.MustInt(updateSelection.TaskMode, 0) == 1 {
  162. estimatedCost = conv.MustFloat64(updateSelection.TaskReward, 0) * conv.MustFloat64(updateSelection.SampleNum, 0)
  163. }
  164. estimatedCostToString, _ := conv.String(estimatedCost)
  165. updateSelection.EstimatedCost = estimatedCostToString
  166. */
  167. // 3. 更新选品
  168. err = dao.ProjectDAO{}.UpdateProject(updateProject)
  169. if err != nil {
  170. return nil, err
  171. }
  172. // 4. 更新选品brief和示例(种草任务补充信息)
  173. if projectUpdateParam.ProjectBrief != nil {
  174. // 删除已有brief
  175. err = dao.ProjectBriefDao{}.DeleteSecBriefBySelectionId(project.ProjectId)
  176. if err != nil {
  177. return nil, err
  178. }
  179. // 插入新的brief
  180. for _, v := range projectUpdateParam.ProjectBrief {
  181. brief := entity.ProjectBrief{
  182. ProjectID: project.ProjectId,
  183. FileUid: v.FileUid,
  184. FileName: v.Name,
  185. FileUrl: v.FileUrl,
  186. CreatedAt: time.Now(),
  187. }
  188. err = dao.ProjectBriefDao{}.CreateProjectBrief(brief)
  189. if err != nil {
  190. return nil, err
  191. }
  192. }
  193. }
  194. if projectUpdateParam.ProjectMaterial != nil {
  195. // 删除已有示例
  196. err = dao.ProjectMaterialDao{}.DeleteProjectMaterialByProjectId(project.ProjectId)
  197. if err != nil {
  198. return nil, err
  199. }
  200. // 插入新的示例
  201. for _, v := range projectUpdateParam.ProjectMaterial {
  202. projectMaterial := entity.ProjectMaterial{
  203. ProjectID: project.ProjectId,
  204. FileUid: v.FileUid,
  205. FileName: v.Name,
  206. FileUrl: v.FileUrl,
  207. CreatedAt: time.Now(),
  208. }
  209. err = dao.ProjectMaterialDao{}.CreateProjectMaterial(projectMaterial)
  210. if err != nil {
  211. return nil, err
  212. }
  213. }
  214. }
  215. return &updateProject.ProjectId, nil
  216. }
  217. // 更新定向种草任务(招募要求、执行要求)
  218. func (s ProjectService) UpdateProjectTarget(projectUpdateParam *vo.ProjectUpdateParam) (*string, error) {
  219. // 1. 检查该企业id和商品id有无种草任务
  220. projectID := projectUpdateParam.ProjectID
  221. project, err := dao.ProjectDAO{}.GetProjectById(projectID)
  222. if err != nil {
  223. return nil, err
  224. }
  225. if project == nil {
  226. return nil, errors.New("种草项目不存在")
  227. }
  228. println("更新定向种草任务的招募策略")
  229. // 更新定向种草任务的招募策略
  230. var totalRecruitNum int64
  231. if projectUpdateParam.RecruitStrategys != nil {
  232. // 1. 删除已有的招募策略
  233. err = dao.RecruitStrategyDao{}.DeleteRecruitStrategyByProjectID(projectUpdateParam.ProjectID)
  234. if err != nil {
  235. return nil, err
  236. }
  237. // 2. 接收并创建新的招募策略
  238. if len(projectUpdateParam.RecruitStrategys) != 0 {
  239. var recruits []entity.RecruitStrategy
  240. for _, strategy := range projectUpdateParam.RecruitStrategys {
  241. recruitStrategy := entity.RecruitStrategy{
  242. FeeForm: strategy.FeeForm,
  243. StrategyID: strategy.StrategyID,
  244. FollowersLow: strategy.FollowersLow,
  245. FollowersUp: strategy.FollowersUp,
  246. RecruitNumber: strategy.RecruitNumber,
  247. ProjectID: project.ProjectId,
  248. }
  249. totalRecruitNum += strategy.RecruitNumber
  250. if strategy.FeeForm == 2 {
  251. recruitStrategy.Offer = strategy.Offer // 报价
  252. }
  253. recruits = append(recruits, recruitStrategy)
  254. }
  255. err = dao.RecruitStrategyDao{}.CreateRecruitStrategy(recruits)
  256. if err != nil {
  257. return nil, err
  258. }
  259. }
  260. }
  261. // 2. 数据准备
  262. // a) 查找关联商品信息
  263. product, err := dao.ProductDAO{}.GetProductByID(project.ProductID)
  264. if err != nil {
  265. return nil, err
  266. }
  267. productPhotos, err := dao.ProductPhotoDAO{}.GetProductPhotoByProductID(project.ProductID)
  268. productInfoToJson, _ := json.Marshal(product)
  269. productPhotosToJson, _ := json.Marshal(productPhotos)
  270. // d) 任务截止时间
  271. recruitDdl := time.Time{} //赋零值
  272. recruitDdl, _ = time.ParseInLocation("2006-01-02 15:04:05", projectUpdateParam.RecruitDdl, time.Local)
  273. // f) 更新选品状态
  274. if projectUpdateParam.ProjectStatus != 2 && projectUpdateParam.ProjectStatus != 8 {
  275. projectUpdateParam.ProjectStatus = 1
  276. }
  277. t := time.Now()
  278. updateProject := entity.Project{
  279. EnterpriseID: projectUpdateParam.EnterpriseId,
  280. SubAccountId: projectUpdateParam.SubAccountId,
  281. ProjectId: projectUpdateParam.ProjectID,
  282. ProjectType: projectUpdateParam.ProjectType,
  283. ProjectStatus: projectUpdateParam.ProjectStatus,
  284. ProjectName: projectUpdateParam.ProjectName,
  285. ProductID: projectUpdateParam.ProductId,
  286. TalentType: projectUpdateParam.TalentType,
  287. RecruitDdl: recruitDdl,
  288. ProductSnap: string(productInfoToJson),
  289. ProductPhotoSnap: string(productPhotosToJson),
  290. CreatedAt: project.CreatedAt,
  291. UpdatedAt: t,
  292. ProjectForm: projectUpdateParam.ProjectForm,
  293. ContentType: projectUpdateParam.ContentType,
  294. ProjectDetail: projectUpdateParam.ProjectDetail,
  295. Tools: projectUpdateParam.Tools,
  296. }
  297. if projectUpdateParam.ProjectStatus == 2 {
  298. updateProject.SubmitAt = t
  299. }
  300. // 合并传入参数和数据表中原记录,若传入参数字段值为空,则将字段赋值为原记录中值
  301. result := util.MergeStructValue(&updateProject, project)
  302. // 利用反射机制将interface类型转换为结构体类型
  303. v := reflect.ValueOf(&result).Elem()
  304. if v.Kind() == reflect.Struct {
  305. updateProject = v.Interface().(entity.Project)
  306. //fmt.Println(p)
  307. }
  308. // c) 计算预估成本(如果有)
  309. /*
  310. var estimatedCost float64
  311. if conv.MustInt(updateSelection.TaskMode, 0) == 1 {
  312. estimatedCost = conv.MustFloat64(updateSelection.TaskReward, 0) * conv.MustFloat64(updateSelection.SampleNum, 0)
  313. }
  314. estimatedCostToString, _ := conv.String(estimatedCost)
  315. updateSelection.EstimatedCost = estimatedCostToString
  316. */
  317. // 3. 更新选品
  318. err = dao.ProjectDAO{}.UpdateProject(updateProject)
  319. if err != nil {
  320. return nil, err
  321. }
  322. // 4. 更新选品brief和示例(种草任务补充信息)
  323. if projectUpdateParam.ProjectBrief != nil {
  324. // 删除已有brief
  325. err = dao.ProjectBriefDao{}.DeleteSecBriefBySelectionId(project.ProjectId)
  326. if err != nil {
  327. return nil, err
  328. }
  329. // 插入新的brief
  330. for _, v := range projectUpdateParam.ProjectBrief {
  331. brief := entity.ProjectBrief{
  332. ProjectID: project.ProjectId,
  333. FileUid: v.FileUid,
  334. FileName: v.Name,
  335. FileUrl: v.FileUrl,
  336. CreatedAt: time.Now(),
  337. }
  338. err = dao.ProjectBriefDao{}.CreateProjectBrief(brief)
  339. if err != nil {
  340. return nil, err
  341. }
  342. }
  343. }
  344. if projectUpdateParam.ProjectMaterial != nil {
  345. // 删除已有示例
  346. err = dao.ProjectMaterialDao{}.DeleteProjectMaterialByProjectId(project.ProjectId)
  347. if err != nil {
  348. return nil, err
  349. }
  350. // 插入新的示例
  351. for _, v := range projectUpdateParam.ProjectMaterial {
  352. projectMaterial := entity.ProjectMaterial{
  353. ProjectID: project.ProjectId,
  354. FileUid: v.FileUid,
  355. FileName: v.Name,
  356. FileUrl: v.FileUrl,
  357. CreatedAt: time.Now(),
  358. }
  359. err = dao.ProjectMaterialDao{}.CreateProjectMaterial(projectMaterial)
  360. if err != nil {
  361. return nil, err
  362. }
  363. }
  364. }
  365. return &updateProject.ProjectId, nil
  366. }
  367. // 种草任务预览
  368. func (s ProjectService) GetProjectDetail(projectId string) (*vo.ReProjectDetail, error) {
  369. reProjectDetail := vo.ReProjectDetail{}
  370. project, err := dao.ProjectDAO{}.GetProjectById(projectId)
  371. if err != nil {
  372. logrus.Errorf("[projectDB service] call GetProject error,err:%+v", err)
  373. return nil, err
  374. }
  375. // 系统信息
  376. reProjectDetail.ProjectId = projectId
  377. reProjectDetail.ProjectStatus = project.ProjectStatus
  378. reProjectDetail.ProjectPlatform = project.ProjectPlatform
  379. reProjectDetail.CreatedAt = project.CreatedAt.Format("2006-01-02 15:04:05")
  380. reProjectDetail.EstimatedCost = project.EstimatedCost
  381. reProjectDetail.ServiceChargeRate = project.ServiceChargeRate
  382. var creatorName, phone string
  383. if project.SubAccountId == 0 {
  384. enterprise, err := dao.EnterpriseDao{}.GetEnterprise(project.EnterpriseID)
  385. if err == nil && enterprise != nil {
  386. creatorName = enterprise.BusinessName
  387. phone, err = dao.UserDao{}.GetPhoneByUserId(enterprise.UserId)
  388. }
  389. } else {
  390. subAccount, err := dao.SubAccountDao{}.GetSubAccount(project.SubAccountId)
  391. if err == nil && subAccount != nil {
  392. creatorName = subAccount.SubAccountName
  393. phone, err = dao.UserDao{}.GetPhoneByUserId(subAccount.UserId)
  394. }
  395. }
  396. reProjectDetail.CreatorName = creatorName
  397. reProjectDetail.Phone = phone
  398. // 关联商品
  399. var reProduct vo.ReTaskProduct
  400. product, err := dao.ProductDAO{}.GetProductByID(project.ProductID)
  401. if err == nil {
  402. photoUrl, e := dao.ProductPhotoDAO{}.GetMainPhotoByProductID(product.ProductID)
  403. if e != nil {
  404. photoUrl = ""
  405. }
  406. reProduct = vo.ReTaskProduct{
  407. ProductID: product.ProductID,
  408. ProductName: product.ProductName,
  409. ProductType: product.ProductType,
  410. ProductCategory: product.ProductCategory,
  411. ProductPrice: product.ProductPrice,
  412. ProductDetail: product.ProductDetail,
  413. CreatedAt: product.CreatedAt.Format("2006-01-02 15:04:05"),
  414. PhotoUrl: photoUrl,
  415. }
  416. }
  417. reProjectDetail.ProductInfo = &reProduct
  418. // 招募要求
  419. reProjectDetail.TalentType = project.TalentType
  420. reProjectDetail.RecruitDdl = project.RecruitDdl.Format("2006-01-02 15:04:05")
  421. reProjectDetail.ProjectForm = project.ProjectForm
  422. reProjectDetail.ContentType = project.ContentType
  423. reProjectDetail.ProjectDetail = project.ProjectDetail
  424. var recruitStrategysPreviews []*vo.RecruitStrategyPreview
  425. recruitStrategys, err := dao.RecruitStrategyDao{}.GetRecruitStrategyByProjectId(projectId)
  426. if err != nil {
  427. logrus.Errorf("[projectDB service] call GetRecruitStrategy error,err:%+v", err)
  428. return nil, err
  429. }
  430. for _, recruitStrategy := range recruitStrategys {
  431. recruitStrategysPreview := &vo.RecruitStrategyPreview{
  432. StrategyId: recruitStrategy.StrategyID,
  433. FeeForm: recruitStrategy.FeeForm,
  434. FollowersLow: recruitStrategy.FollowersLow,
  435. FollowersUp: recruitStrategy.FollowersUp,
  436. RecruitNumber: recruitStrategy.RecruitNumber,
  437. Offer: recruitStrategy.Offer,
  438. TOffer: recruitStrategy.TOffer,
  439. ServiceCharge: recruitStrategy.ServiceCharge,
  440. SelectedNumber: recruitStrategy.SelectedNumber,
  441. TotalOffer: recruitStrategy.TotalOffer,
  442. }
  443. recruitStrategysPreviews = append(recruitStrategysPreviews, recruitStrategysPreview)
  444. }
  445. reProjectDetail.RecruitStrategys = recruitStrategysPreviews
  446. // 执行要求
  447. projectBriefInfos, err := dao.ProjectBriefDao{}.GetProjectBriefInfo(projectId)
  448. if err != nil {
  449. logrus.Errorf("[projectDB service] call GetProjectBriefInfo error,err:%+v", err)
  450. return nil, err
  451. }
  452. projectMaterials, err := dao.ProjectMaterialDao{}.GetProjectMaterialInfo(projectId)
  453. if err != nil {
  454. logrus.Errorf("[projectDB service] call GetprojectMaterialInfo error,err:%+v", err)
  455. return nil, err
  456. }
  457. reProjectDetail.ProjectBriefs = projectBriefInfos
  458. reProjectDetail.ProjectMaterials = projectMaterials
  459. reProjectDetail.Tools = project.Tools
  460. return &reProjectDetail, nil
  461. }
  462. // 种草提交审核
  463. func (s ProjectService) ProjectToReview(projectUpdateParam *vo.ProjectUpdateParam) (*string, error) {
  464. projectId := projectUpdateParam.ProjectID
  465. t := time.Now()
  466. updateProject := entity.Project{
  467. ProjectId: projectId,
  468. ProjectStatus: 2,
  469. UpdatedAt: t,
  470. }
  471. err := dao.ProjectDAO{}.UpdateProject(updateProject)
  472. if err != nil {
  473. return nil, err
  474. }
  475. return &projectId, nil
  476. }
  477. // 公开种草任务列表
  478. func (s ProjectService) GetProjectTaskList(param *vo.ProjectSearchParam) (vo.ResultVO, error) {
  479. if param.Page == 0 {
  480. param.Page = 1
  481. }
  482. if param.PageSize == 0 {
  483. param.PageSize = 10
  484. }
  485. var result vo.ResultVO
  486. reProjectTaskPreviews, total, err := (&dao.ProjectDAO{}).GetProjectPreviews(param)
  487. if err != nil {
  488. return result, err
  489. }
  490. for i := range reProjectTaskPreviews {
  491. var creatorName string
  492. var productName string
  493. var productPrice float64
  494. var mainImage string
  495. if reProjectTaskPreviews[i].SubAccountId == 0 {
  496. enterprise, err := dao.EnterpriseDao{}.GetEnterprise(reProjectTaskPreviews[i].EnterpriseId)
  497. if err == nil && enterprise != nil {
  498. creatorName = enterprise.BusinessName
  499. }
  500. } else {
  501. subAccount, err := dao.SubAccountDao{}.GetSubAccount(reProjectTaskPreviews[i].SubAccountId)
  502. if err == nil && subAccount != nil {
  503. creatorName = subAccount.SubAccountName
  504. }
  505. }
  506. product, err := dao.ProductDAO{}.GetProductByID(reProjectTaskPreviews[i].ProductId)
  507. if err == nil && product != nil {
  508. productName = product.ProductName
  509. productPrice = product.ProductPrice
  510. }
  511. mainImage, err = dao.ProductPhotoDAO{}.GetMainPhotoByProductID(reProjectTaskPreviews[i].ProductId)
  512. reProjectTaskPreviews[i].CreatorName = creatorName
  513. reProjectTaskPreviews[i].ProductName = productName
  514. reProjectTaskPreviews[i].ProductPrice = productPrice
  515. reProjectTaskPreviews[i].MainImage = mainImage
  516. }
  517. result = vo.ResultVO{
  518. Page: param.Page,
  519. PageSize: param.PageSize,
  520. Total: total,
  521. Data: reProjectTaskPreviews,
  522. }
  523. return result, nil
  524. }
  525. // 删除种草任务
  526. func (s ProjectService) DeleteProject(projectId string) (*string, error) {
  527. res, err := dao.ProjectDAO{}.DeleteProject(projectId)
  528. if err != nil {
  529. logrus.Errorf("[projectDB service] call DeleteProject error,err:%+v", err)
  530. return res, err
  531. }
  532. return res, nil
  533. }
  534. // 草稿箱——品牌种草
  535. func (s ProjectService) GetProjectDraftList(param *vo.ProjectDraftParam) (vo.ResultVO, error) {
  536. if param.Page == 0 {
  537. param.Page = 1
  538. }
  539. if param.PageSize == 0 {
  540. param.PageSize = 10
  541. }
  542. var result vo.ResultVO
  543. reSelectionTaskPreviews, total, err := (&dao.ProjectDAO{}).GetProjectDraftList(param)
  544. if err != nil {
  545. return result, err
  546. }
  547. for i := range reSelectionTaskPreviews {
  548. var creatorName string
  549. var productName string
  550. var productPrice float64
  551. var mainImage string
  552. if reSelectionTaskPreviews[i].SubAccountId == 0 {
  553. enterprise, err := dao.EnterpriseDao{}.GetEnterprise(reSelectionTaskPreviews[i].EnterpriseId)
  554. if err == nil && enterprise != nil {
  555. creatorName = enterprise.BusinessName
  556. }
  557. } else {
  558. subAccount, err := dao.SubAccountDao{}.GetSubAccount(reSelectionTaskPreviews[i].SubAccountId)
  559. if err == nil && subAccount != nil {
  560. creatorName = subAccount.SubAccountName
  561. }
  562. }
  563. product, err := dao.ProductDAO{}.GetProductByID(reSelectionTaskPreviews[i].ProductId)
  564. if err == nil && product != nil {
  565. productName = product.ProductName
  566. productPrice = product.ProductPrice
  567. }
  568. mainImage, err = dao.ProductPhotoDAO{}.GetMainPhotoByProductID(reSelectionTaskPreviews[i].ProductId)
  569. reSelectionTaskPreviews[i].CreatorName = creatorName
  570. reSelectionTaskPreviews[i].ProductName = productName
  571. reSelectionTaskPreviews[i].ProductPrice = productPrice
  572. reSelectionTaskPreviews[i].MainImage = mainImage
  573. }
  574. result = vo.ResultVO{
  575. Page: param.Page,
  576. PageSize: param.PageSize,
  577. Total: total,
  578. Data: reSelectionTaskPreviews,
  579. }
  580. return result, nil
  581. }