s_project.go 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607
  1. package service
  2. import (
  3. "context"
  4. "fmt"
  5. "github.com/issue9/conv"
  6. log "github.com/sirupsen/logrus"
  7. "time"
  8. "youngee_b_api/db"
  9. "youngee_b_api/model/common_model"
  10. "youngee_b_api/model/gorm_model"
  11. "youngee_b_api/model/http_model"
  12. )
  13. var SProject *sProject
  14. type sProject struct {
  15. }
  16. // CreateSProject 新建服务商加入商单后的公开种草任务
  17. func (*sProject) CreateSProject(ctx context.Context, request http_model.AddToListRequest) error {
  18. // 1. 建立SProject信息
  19. // 1.1. 根据传入的ProjectId去Project表查找信息补全SProject
  20. var operatorType int
  21. if request.SubAccountId == 0 {
  22. operatorType = 1
  23. } else {
  24. operatorType = 2
  25. }
  26. newSProject := gorm_model.SProjectInfo{
  27. EnterpriseId: request.EnterpriseId,
  28. SupplierId: request.SupplierId,
  29. ProjectId: request.ProjectId,
  30. SubAccountId: request.SubAccountId,
  31. OperatorType: operatorType,
  32. SProjectStatus: 2,
  33. StrategyStatus: 1,
  34. }
  35. projectInfo, projectErr := db.GetProjectDetail(ctx, request.ProjectId)
  36. if projectErr != nil {
  37. return projectErr
  38. }
  39. if projectInfo != nil {
  40. var currentTime time.Time
  41. currentTime = time.Now()
  42. newSProject.ProjectStatus = projectInfo.ProjectStatus
  43. newSProject.ProjectForm = projectInfo.ProjectForm
  44. newSProject.ContentType = projectInfo.ContentType
  45. newSProject.ProjectPlatform = projectInfo.ProjectPlatform
  46. newSProject.CreateTime = &currentTime
  47. newSProject.ProjectType = 1
  48. newSProject.ProductId = projectInfo.ProductID
  49. newSProject.ProjectName = projectInfo.ProjectName
  50. }
  51. sProjectId, err := db.CreateSProject(ctx, newSProject)
  52. if err != nil {
  53. log.Infof("[CreateEnterpriseSubUser] fail,err:%+v", err)
  54. return err
  55. }
  56. fmt.Println("创建SProject信息成功")
  57. // 2. 建立新的recruitStrategy
  58. // 2.1. 根据projectId去查找原来的recruitStrategy
  59. recruitStrategys, strategyErr := db.GetRecruitStrategyByProjectId(ctx, request.ProjectId)
  60. if strategyErr != nil {
  61. return strategyErr
  62. }
  63. // 2.2. 设置新的结构体以写入
  64. var currRecruitStrategys []gorm_model.RecruitStrategy
  65. for _, strategy := range recruitStrategys {
  66. var currStrategy gorm_model.RecruitStrategy
  67. currStrategy.StrategyID = strategy.StrategyID
  68. currStrategy.QuoteRecruitStrategyId = int(strategy.RecruitStrategyID)
  69. currStrategy.FeeForm = strategy.FeeForm
  70. currStrategy.FollowersLow = strategy.FollowersLow
  71. currStrategy.FollowersUp = strategy.FollowersUp
  72. currStrategy.RecruitNumber = strategy.RecruitNumber
  73. currStrategy.Offer = strategy.Offer
  74. currStrategy.TOffer = strategy.TOffer
  75. currStrategy.ProjectID = "0"
  76. currStrategy.ServiceCharge = strategy.ServiceCharge
  77. currStrategy.ServiceRate = strategy.ServiceRate
  78. currStrategy.SProjectId = sProjectId
  79. currStrategy.StrategyType = 2
  80. currRecruitStrategys = append(currRecruitStrategys, currStrategy)
  81. }
  82. // 2.3. 写入
  83. createStrategyErr := db.CreateSpecialStrategy(ctx, currRecruitStrategys)
  84. if createStrategyErr != nil {
  85. return createStrategyErr
  86. }
  87. fmt.Println("创建招募策略成功")
  88. return nil
  89. }
  90. // GetSProjectList 查找服务商加入商单的种草任务列表
  91. func (*sProject) GetSProjectList(ctx context.Context, supplierId int, pageSize, pageNum int32, condition *common_model.SProjectCondition) (*http_model.SProjectData, error) {
  92. var SProjectList *http_model.SProjectData
  93. SProjectList = &http_model.SProjectData{}
  94. // 1. 加入商单后的种草任务基本信息
  95. sProjects, total, err := db.GetSProjectList(ctx, supplierId, pageSize, pageNum, condition)
  96. if err != nil {
  97. return nil, err
  98. }
  99. SProjectList.Total = total
  100. // 2. 商品信息填入
  101. for _, sProject := range sProjects {
  102. var currSProject *http_model.SProjectListReview
  103. currSProject = &http_model.SProjectListReview{}
  104. currSProject.SProjectId = sProject.SProjectId
  105. currSProject.ProjectId = sProject.ProjectId
  106. currSProject.ProjectPlatform = sProject.ProjectPlatform
  107. currSProject.ContentType = sProject.ContentType
  108. currSProject.ProjectForm = sProject.ProjectForm
  109. currSProject.ProjectStatus = sProject.ProjectStatus
  110. currSProject.SupplierId = sProject.SupplierId
  111. currSProject.SubAccountId = sProject.SubAccountId
  112. currSProject.OperatorType = sProject.OperatorType
  113. currSProject.CreateTime = conv.MustString(sProject.CreateTime)[0:19]
  114. currSProject.ApplyNum = sProject.ApplyNum
  115. currSProject.RecruitNum = sProject.RecruitNum
  116. currSProject.SettleNum = sProject.SettleNum
  117. currSProject.ServiceChargeActual = sProject.ServiceChargeActual
  118. currSProject.ServiceCharge = sProject.ServiceCharge
  119. currSProject.ServiceChargeSettle = sProject.ServiceChargeSettle
  120. // 2.2. 商品信息
  121. productInfo, productErr := db.GetProductByID(ctx, sProject.ProductId)
  122. if productErr != nil {
  123. return nil, productErr
  124. }
  125. if productInfo != nil {
  126. currSProject.ProductId = productInfo.ProductID
  127. currSProject.ProductPrice = productInfo.ProductPrice
  128. currSProject.ProductName = productInfo.ProductName
  129. }
  130. // 2.3. 商品图片信息
  131. productPhotoInfo, productPhotoErr := db.GetProductPhotoByProductID(ctx, sProject.ProductId)
  132. if productPhotoErr != nil {
  133. return nil, productPhotoErr
  134. }
  135. if productPhotoInfo != nil {
  136. for _, photo := range productPhotoInfo {
  137. fmt.Println(photo)
  138. if photo.Symbol == 1 {
  139. currSProject.ProductPhotoSymbol = 1
  140. currSProject.ProductPhotoUrl = photo.PhotoUrl
  141. currSProject.ProductPhotoUid = photo.PhotoUid
  142. }
  143. }
  144. }
  145. SProjectList.SProjectList = append(SProjectList.SProjectList, currSProject)
  146. }
  147. return SProjectList, nil
  148. }
  149. // GetSProjectDetail 查找服务商种草任务详情
  150. func (*sProject) GetSProjectDetail(ctx context.Context, sProjectId int) (*http_model.ShowSProjectData, error) {
  151. var sProjectData *http_model.ShowSProjectData
  152. sProjectData = &http_model.ShowSProjectData{}
  153. // 1. 取出服务商种草表中的信息
  154. sProjectInfo, err := db.GetSProjectDetail(ctx, sProjectId)
  155. if err != nil {
  156. return nil, err
  157. }
  158. if sProjectInfo != nil {
  159. sProjectData.SProjectId = sProjectInfo.SProjectId
  160. sProjectData.ProjectName = sProjectInfo.ProjectName
  161. sProjectData.ProjectID = sProjectInfo.ProjectId
  162. sProjectData.ProjectType = sProjectInfo.ProjectType
  163. sProjectData.ProjectPlatform = sProjectInfo.ProjectPlatform
  164. sProjectData.ProjectForm = sProjectInfo.ProjectForm
  165. sProjectData.ContentType = sProjectInfo.ContentType
  166. sProjectData.EnterpriseID = sProjectInfo.EnterpriseId
  167. // 2. 取出商家发布的种草任务表中的信息作为补充
  168. projectInfo, projectErr := db.GetProjectDetail(ctx, sProjectInfo.ProjectId)
  169. if projectErr != nil {
  170. return nil, projectErr
  171. }
  172. if projectInfo != nil {
  173. sProjectData.TalentType = projectInfo.TalentType
  174. sProjectData.RecruitDdl = conv.MustString(projectInfo.RecruitDdl)[0:19]
  175. sProjectData.ProjectDetail = projectInfo.ProjectDetail
  176. // sProjectData.PayAt = conv.MustString(projectInfo.PayAt)
  177. sProjectData.ProjectDetail = projectInfo.ProjectDetail
  178. sProjectData.EstimatedCost = projectInfo.EstimatedCost
  179. sProjectData.PassAt = conv.MustString(projectInfo.PassAt)[0:19]
  180. // 3. 取出招募策略并聚合达人数量信息
  181. recruitStrategy, recruitErr := db.GetRecruitStrategyBySProjectId(ctx, sProjectData.SProjectId)
  182. if recruitErr != nil {
  183. return nil, recruitErr
  184. }
  185. if recruitStrategy != nil {
  186. for _, strategy := range recruitStrategy {
  187. // fmt.Println("recruitStrategy: ", strategy)
  188. selectedNumber, countTaskErr := db.CountTaskNumByStrategyIdAndSProjectId(ctx, sProjectData.SProjectId, strategy.StrategyID)
  189. if countTaskErr != nil {
  190. return nil, countTaskErr
  191. }
  192. showStrategy := http_model.ShowSRecruitStrategy{
  193. StrategyID: strategy.StrategyID,
  194. FeeForm: strategy.FeeForm,
  195. FollowersLow: strategy.FollowersLow,
  196. FollowersUp: strategy.FollowersUp,
  197. RecruitNumber: strategy.RecruitNumber,
  198. ServiceCharge: projectInfo.ServiceChargeRate,
  199. SelectedNumber: selectedNumber,
  200. Offer: strategy.Offer,
  201. }
  202. sProjectData.SRecruitStrategys = append(sProjectData.SRecruitStrategys, showStrategy)
  203. }
  204. }
  205. // 4. 取出种草任务创建者用户信息
  206. if projectInfo.OperatorType == 1 {
  207. // fmt.Println("商家用户")
  208. enterpriseInfo, enterpriseErr := db.GetEnterpriseByEnterpriseID(ctx, projectInfo.EnterpriseID)
  209. if enterpriseErr != nil {
  210. return nil, enterpriseErr
  211. }
  212. sProjectData.CreatorName = enterpriseInfo.BusinessName
  213. sProjectData.CreatorCompany = enterpriseInfo.BusinessName
  214. sProjectData.CreatorType = 1
  215. sProjectData.Phone = enterpriseInfo.BusinessName
  216. } else if projectInfo.OperatorType == 2 {
  217. // fmt.Println("商家子账号")
  218. enterpriseInfo, enterpriseErr := db.GetEnterpriseByEnterpriseID(ctx, projectInfo.EnterpriseID)
  219. if enterpriseErr != nil {
  220. return nil, enterpriseErr
  221. }
  222. sProjectData.CreatorCompany = enterpriseInfo.BusinessName
  223. subAccountInfo, SubAccountErr := db.FindSubAccountById(ctx, projectInfo.SubAccountId)
  224. if SubAccountErr != nil {
  225. return nil, SubAccountErr
  226. }
  227. sProjectData.Phone = subAccountInfo.PhoneNumber
  228. jobInfo, jobErr := db.FindJobByJobId(ctx, subAccountInfo.JobId)
  229. if jobErr != nil {
  230. return nil, jobErr
  231. }
  232. sProjectData.CreatorType = 2
  233. sProjectData.CreatorName = jobInfo.JobName
  234. }
  235. // 5. 商品信息
  236. // 5.1. 取出商品信息并聚合
  237. productInfo, productErr := db.GetProductByID(ctx, projectInfo.ProductID)
  238. if productErr != nil {
  239. return nil, productErr
  240. }
  241. if productInfo != nil {
  242. sProjectData.ProductID = productInfo.ProductID
  243. sProjectData.ProductName = productInfo.ProductName
  244. sProjectData.ProductType = productInfo.ProductType
  245. sProjectData.ProductPrice = productInfo.ProductPrice
  246. sProjectData.ProductCategory = productInfo.ProductCategory
  247. }
  248. // 5.2. 聚合商品图片信息
  249. productPhotoInfo, productPhotoErr := db.GetProductPhotoByProductID(ctx, projectInfo.ProductID)
  250. if productPhotoErr != nil {
  251. return nil, productPhotoErr
  252. }
  253. if productPhotoInfo != nil {
  254. for _, p := range productPhotoInfo {
  255. if p.Symbol == 1 {
  256. sProjectData.ProductMainPhotoUrl = p.PhotoUrl
  257. sProjectData.ProductMainPhotoUid = p.PhotoUid
  258. sProjectData.Symbol = 1
  259. }
  260. }
  261. }
  262. // 6. 执行要求Brief和素材
  263. // 6.1. Brief
  264. projectBrief, briefErr := db.FindProjectBriefByProjectId(ctx, sProjectData.ProjectID)
  265. if briefErr != nil {
  266. return nil, briefErr
  267. }
  268. if projectBrief != nil {
  269. sProjectData.ProjectBriefInfo = projectBrief
  270. }
  271. // 6.2. 素材
  272. projectMaterial, materialErr := db.FindProjectMaterialByProjectId(ctx, sProjectData.ProjectID)
  273. if materialErr != nil {
  274. return nil, materialErr
  275. }
  276. if projectMaterial != nil {
  277. sProjectData.ProjectMaterial = projectMaterial
  278. }
  279. }
  280. }
  281. return sProjectData, nil
  282. }
  283. // GetSpecialProjectList 查找服务商加入商单前的定向种草任务列表
  284. func (*sProject) GetSpecialProjectList(ctx context.Context, supplierId int, pageSize, pageNum int32, condition *common_model.SpecialSProjectCondition) (*http_model.SpecialProjectListData, error) {
  285. var specialProjectListData *http_model.SpecialProjectListData
  286. specialProjectListData = &http_model.SpecialProjectListData{}
  287. // 1. 定向种草任务基本信息填入
  288. specialProjects, total, err := db.GetSpecialProjectList(ctx, supplierId, pageSize, pageNum, condition)
  289. if err != nil {
  290. return nil, err
  291. }
  292. if specialProjects != nil {
  293. specialProjectListData.Total = total
  294. for _, specialProject := range specialProjects {
  295. var currSpecialProject *http_model.SpecialProjectResponse
  296. currSpecialProject = &http_model.SpecialProjectResponse{}
  297. currSpecialProject.SProjectId = specialProject.SProjectId
  298. currSpecialProject.ProjectPlatform = specialProject.ProjectPlatform
  299. currSpecialProject.ProjectForm = specialProject.ProjectForm
  300. currSpecialProject.ContentType = specialProject.ContentType
  301. currSpecialProject.SProjectStatus = specialProject.SProjectStatus
  302. // 2. 定向种草任务商品信息填入
  303. // 2.1. 商品信息
  304. productInfo, productErr := db.GetProductByID(ctx, specialProject.ProductId)
  305. if productErr != nil {
  306. return nil, productErr
  307. }
  308. if productInfo != nil {
  309. currSpecialProject.ProductId = productInfo.ProductID
  310. currSpecialProject.ProductName = productInfo.ProductName
  311. currSpecialProject.ProductPrice = productInfo.ProductPrice
  312. }
  313. // 2.2. 商品图片信息
  314. productPhotoInfo, productPhotoErr := db.GetProductPhotoByProductID(ctx, specialProject.ProductId)
  315. if productPhotoErr != nil {
  316. return nil, productPhotoErr
  317. }
  318. if productPhotoInfo != nil {
  319. for _, p := range productPhotoInfo {
  320. if p.Symbol == 1 {
  321. currSpecialProject.ProductPhotoUrl = p.PhotoUrl
  322. currSpecialProject.ProductPhotoUid = p.PhotoUid
  323. currSpecialProject.ProductPhotoSymbol = 1
  324. }
  325. }
  326. }
  327. // 3. 招募策略信息
  328. recruitStrategy, recruitErr := db.GetRecruitStrategyByProjectId(ctx, specialProject.ProjectId)
  329. if recruitErr != nil {
  330. return nil, recruitErr
  331. }
  332. if recruitStrategy != nil {
  333. for _, strategy := range recruitStrategy {
  334. showStrategy := http_model.EasyRecruitStrategy{
  335. FeeForm: strategy.FeeForm,
  336. RecruitNumber: strategy.RecruitNumber,
  337. StrategyId: strategy.StrategyID,
  338. }
  339. currSpecialProject.RecruitStrategy = append(currSpecialProject.RecruitStrategy, showStrategy)
  340. }
  341. }
  342. // 4. 原种草任务信息
  343. projectInfo, projectErr := db.GetProjectDetail(ctx, specialProject.ProjectId)
  344. if projectErr != nil {
  345. return nil, projectErr
  346. }
  347. if projectInfo != nil {
  348. currSpecialProject.Tools = projectInfo.Tools
  349. }
  350. specialProjectListData.SpecialProjectInfo = append(specialProjectListData.SpecialProjectInfo, currSpecialProject)
  351. }
  352. } else {
  353. specialProjectListData.Total = 0
  354. }
  355. return specialProjectListData, nil
  356. }
  357. // GetSpecialSProjectList 查找服务商加入商单后的定向种草任务列表
  358. func (*sProject) GetSpecialSProjectList(ctx context.Context, supplierId int, pageSize, pageNum int32, condition *common_model.SpecialSProjectCondition) (*http_model.SpecialSProjectListData, error) {
  359. var specialProjectListData *http_model.SpecialSProjectListData
  360. specialProjectListData = &http_model.SpecialSProjectListData{}
  361. specialProjects, total, err := db.GetSpecialProjectList(ctx, supplierId, pageSize, pageNum, condition)
  362. if err != nil {
  363. return nil, err
  364. }
  365. if specialProjects != nil {
  366. specialProjectListData.Total = total
  367. // 1. 定向种草任务基本信息填入
  368. for _, specialProject := range specialProjects {
  369. var currSpecialProject *http_model.SpecialSProjectResponse
  370. currSpecialProject = &http_model.SpecialSProjectResponse{}
  371. currSpecialProject.SProjectId = specialProject.SProjectId
  372. currSpecialProject.ProjectPlatform = specialProject.ProjectPlatform
  373. currSpecialProject.ProjectForm = specialProject.ProjectForm
  374. currSpecialProject.ContentType = specialProject.ContentType
  375. currSpecialProject.SProjectStatus = specialProject.SProjectStatus
  376. currSpecialProject.StrategyStatus = specialProject.StrategyStatus
  377. currSpecialProject.ApplyNum = specialProject.ApplyNum
  378. currSpecialProject.RecruitNum = specialProject.RecruitNum
  379. currSpecialProject.SettleNum = specialProject.SettleNum
  380. currSpecialProject.ProjectId = specialProject.ProjectId
  381. // 2. 定向种草任务商品信息填入
  382. // 2.1. 商品信息
  383. productInfo, productErr := db.GetProductByID(ctx, specialProject.ProductId)
  384. if productErr != nil {
  385. return nil, productErr
  386. }
  387. if productInfo != nil {
  388. currSpecialProject.ProductId = productInfo.ProductID
  389. currSpecialProject.ProductName = productInfo.ProductName
  390. currSpecialProject.ProductPrice = productInfo.ProductPrice
  391. }
  392. // 2.2. 商品图片信息
  393. productPhotoInfo, productPhotoErr := db.GetProductPhotoByProductID(ctx, specialProject.ProductId)
  394. if productPhotoErr != nil {
  395. return nil, productPhotoErr
  396. }
  397. if productPhotoInfo != nil {
  398. for _, p := range productPhotoInfo {
  399. if p.Symbol == 1 {
  400. currSpecialProject.ProductPhotoUrl = p.PhotoUrl
  401. currSpecialProject.ProductPhotoUid = p.PhotoUid
  402. currSpecialProject.ProductPhotoSymbol = 1
  403. }
  404. }
  405. }
  406. // 3. 招募策略信息
  407. // recruitStrategy, recruitErr := db.GetRecruitStrategyByProjectId(ctx, specialProject.ProjectId)
  408. // if recruitErr != nil {
  409. // return nil, recruitErr
  410. // }
  411. // if recruitStrategy != nil {
  412. // for _, strategy := range recruitStrategy {
  413. // showStrategy := http_model.EasyRecruitStrategy{
  414. // FeeForm: strategy.FeeForm,
  415. // RecruitNumber: strategy.RecruitNumber,
  416. // StrategyId: strategy.StrategyID,
  417. // }
  418. // currSpecialProject.RecruitStrategy = append(currSpecialProject.RecruitStrategy, showStrategy)
  419. // }
  420. // }
  421. // 4. 原种草任务信息
  422. projectInfo, projectErr := db.GetProjectDetail(ctx, specialProject.ProjectId)
  423. if projectErr != nil {
  424. return nil, projectErr
  425. }
  426. if projectInfo != nil {
  427. currSpecialProject.Tools = projectInfo.Tools
  428. }
  429. specialProjectListData.SpecialProjectInfo = append(specialProjectListData.SpecialProjectInfo, currSpecialProject)
  430. }
  431. } else {
  432. specialProjectListData.Total = 0
  433. }
  434. return specialProjectListData, nil
  435. }
  436. // UpdateSProject 更新SProject信息
  437. func (*sProject) UpdateSProject(ctx context.Context, request *http_model.SpecialSProjectAddToListRequest) error {
  438. updateSProjectErr := db.UpdateSProjectStatus(ctx, request)
  439. if updateSProjectErr != nil {
  440. return updateSProjectErr
  441. }
  442. return nil
  443. }
  444. // CreateSpecialStrategy 添加服务商招募策略
  445. func (*sProject) CreateSpecialStrategy(ctx context.Context, request *http_model.SpecialAddStrategyRequest) error {
  446. // 1. 添加服务商招募策略
  447. // 1.1. 整理数据
  448. for _, strategy := range request.RecruitStrategys {
  449. // 一口价需要计算服务费率和达人所见报价
  450. strategy.ServiceRate = int(strategy.ServiceCharge / strategy.Offer)
  451. strategy.TOffer = strategy.Offer - strategy.ServiceCharge
  452. strategy.ProjectID = "0"
  453. strategy.SProjectId = request.SProjectId
  454. strategy.QuoteRecruitStrategyId = int(strategy.RecruitStrategyID)
  455. }
  456. createErr := db.CreateSpecialStrategy(ctx, request.RecruitStrategys)
  457. if createErr != nil {
  458. return createErr
  459. }
  460. // 2. 修改sProject中的字段
  461. updateErr := db.UpdateSProjectStrategyStatus(ctx, request)
  462. if updateErr != nil {
  463. return updateErr
  464. }
  465. return nil
  466. }
  467. // FullSProjectBillList 种草任务账单列表
  468. func (*sProject) FullSProjectBillList(ctx context.Context, request *http_model.FullSProjectBillListRequest) (*http_model.FullSProjectBillData, error) {
  469. var currSProjectBillData *http_model.FullSProjectBillData
  470. currSProjectBillData = &http_model.FullSProjectBillData{}
  471. // 1. 根据SupplierId和账单状态查询数据
  472. fullSProjectBillData, total, err := db.GetFullSProjectBillList(ctx, request.SupplierId, request.ProjectPlatform, request.ProjectStatus, request.PageSize, request.PageNum)
  473. if err != nil {
  474. return nil, err
  475. }
  476. if fullSProjectBillData != nil {
  477. currSProjectBillData.Total = total
  478. for _, b := range fullSProjectBillData {
  479. var billData *http_model.FullSProjectBillListData
  480. billData = &http_model.FullSProjectBillListData{}
  481. billData.SProjectId = b.SProjectId
  482. billData.ProjectId = b.ProjectId
  483. billData.ProjectPlatform = b.ProjectPlatform
  484. billData.ProjectForm = b.ProjectForm
  485. billData.ContentType = b.ContentType
  486. billData.ProjectStatus = b.ProjectStatus
  487. billData.EnterpriseId = b.EnterpriseId
  488. billData.SupplierId = b.SupplierId
  489. billData.SubAccountId = b.SubAccountId
  490. billData.ServiceChargeActual = b.ServiceChargeActual
  491. billData.ServiceChargeSettle = b.ServiceChargeSettle
  492. // 1.2. 补充商品信息
  493. productInfo, productErr := db.GetProductByID(ctx, b.ProductId)
  494. if productErr != nil {
  495. return nil, productErr
  496. }
  497. if productInfo != nil {
  498. billData.ProductId = productInfo.ProductID
  499. billData.ProductPrice = productInfo.ProductPrice
  500. billData.ProductName = productInfo.ProductName
  501. }
  502. // 1.3. 商品图片信息
  503. productPhotoInfo, productPhotoErr := db.GetProductPhotoByProductID(ctx, b.ProductId)
  504. if productPhotoErr != nil {
  505. return nil, productPhotoErr
  506. }
  507. if productPhotoInfo != nil {
  508. for _, photo := range productPhotoInfo {
  509. //fmt.Println(photo)
  510. if photo.Symbol == 1 {
  511. billData.ProductPhotoSymbol = 1
  512. billData.ProductPhotoUrl = photo.PhotoUrl
  513. billData.ProductPhotoUid = photo.PhotoUid
  514. }
  515. }
  516. }
  517. currSProjectBillData.SProjectList = append(currSProjectBillData.SProjectList, billData)
  518. }
  519. }
  520. return currSProjectBillData, nil
  521. }
  522. // FullSProjectTaskBillList 种草子任务账单列表
  523. func (*sProject) FullSProjectTaskBillList(ctx context.Context, request *http_model.FullSProjectTaskBillListRequest) (*http_model.FullSProjectTaskBillData, error) {
  524. var currSProjectTaskBillData *http_model.FullSProjectTaskBillData
  525. currSProjectTaskBillData = &http_model.FullSProjectTaskBillData{}
  526. currSProjectTaskBillData.DraftFee = 0
  527. currSProjectTaskBillData.DraftFeeSettle = 0
  528. // 1. 查找子任务
  529. taskList, total, taskListErr := db.GetSProjectTaskList(ctx, request.SProjectId, request.TalentId, request.PageSize, request.PageNum)
  530. if taskListErr != nil {
  531. return nil, taskListErr
  532. }
  533. if taskList != nil {
  534. currSProjectTaskBillData.Total = total
  535. for _, task := range taskList {
  536. var curr *http_model.FullSProjectTaskBillListData
  537. curr = &http_model.FullSProjectTaskBillListData{}
  538. curr.TaskId = task.TaskID
  539. curr.ServiceCharge = task.ServiceCharge
  540. curr.ViewNum = 0
  541. curr.VoteNum = 0
  542. curr.CommitNum = 0
  543. curr.CollectNum = 0
  544. curr.ServiceCharge = task.ServiceCharge
  545. curr.DraftFee = task.DraftFee
  546. curr.DelayRate = task.ScriptBreakRate + task.SketchBreakRate + task.LinkBreakRate + task.DataBreakRate
  547. curr.RealServiceCharge = task.RealPayment - task.SettleAmount
  548. curr.SettleAmount = task.SettleAmount
  549. curr.SettleTime = conv.MustString(task.CompleteDate)
  550. currSProjectTaskBillData.DraftFee += curr.DraftFee
  551. currSProjectTaskBillData.DraftFeeSettle += curr.SettleAmount
  552. currSProjectTaskBillData.SProjectTaskList = append(currSProjectTaskBillData.SProjectTaskList, curr)
  553. }
  554. // 2. 补充任务信息
  555. sProjectInfo, sProjectErr := db.GetSProjectDetail(ctx, request.SProjectId)
  556. if sProjectErr != nil {
  557. return nil, sProjectErr
  558. }
  559. if sProjectInfo != nil {
  560. currSProjectTaskBillData.SettleNum = sProjectInfo.SettleNum
  561. currSProjectTaskBillData.ChooseNum = sProjectInfo.ApplyNum
  562. currSProjectTaskBillData.ServiceCharge = sProjectInfo.ServiceCharge
  563. currSProjectTaskBillData.ServiceChargeSettle = sProjectInfo.ServiceChargeSettle
  564. }
  565. }
  566. return currSProjectTaskBillData, nil
  567. }