project_service.go 20 KB

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