project.go 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608
  1. package service
  2. import (
  3. "context"
  4. "encoding/json"
  5. "fmt"
  6. "math/rand"
  7. "strconv"
  8. "strings"
  9. "time"
  10. "youngee_m_api/db"
  11. "youngee_m_api/model/common_model"
  12. "youngee_m_api/model/gorm_model"
  13. "youngee_m_api/model/http_model"
  14. "youngee_m_api/pack"
  15. "youngee_m_api/util"
  16. "github.com/caixw/lib.go/conv"
  17. "github.com/gin-gonic/gin"
  18. "github.com/sirupsen/logrus"
  19. )
  20. var Project *project
  21. type project struct {
  22. }
  23. func (*project) GetFullProjectList(ctx context.Context, pageSize, pageNum int32, condition *common_model.ProjectCondition, projectType string) (*http_model.FullProjectListData, error) {
  24. fullProjects, total, err := db.GetFullProjectList(ctx, pageSize, pageNum, condition, projectType)
  25. if err != nil {
  26. logrus.WithContext(ctx).Errorf("[project service] call GetFullProjectList error,err:%+v", err)
  27. return nil, err
  28. }
  29. fullProjectListData := new(http_model.FullProjectListData)
  30. fullProjectListData.FullProjectPreview = pack.MGormFullProjectToHttpFullProjectPreview(fullProjects)
  31. fullProjectListData.Total = conv.MustString(total, "")
  32. return fullProjectListData, nil
  33. }
  34. func (*project) GetProjectDetail(ctx context.Context, projectID string) (*http_model.ShowProjectData, error) {
  35. project, err := db.GetProjectDetail(ctx, projectID)
  36. if err != nil {
  37. logrus.WithContext(ctx).Errorf("[project service] call GetPorjectDetail error,err:%+v", err)
  38. return nil, err
  39. }
  40. enterprise, err := db.GetEnterpriseByEnterpriseID(ctx, project.EnterpriseID)
  41. if err != nil {
  42. logrus.WithContext(ctx).Errorf("[project service] call GetEnterpriseByEnterpriseID error,err:%+v", err)
  43. return nil, err
  44. }
  45. user, err := db.GetUserByID(ctx, enterprise.UserID)
  46. if err != nil {
  47. logrus.WithContext(ctx).Errorf("[project service] call GetUserByID error,err:%+v", err)
  48. return nil, err
  49. }
  50. ProjectDetail := http_model.ShowProjectData{
  51. ProjectID: conv.MustString(project.ProjectID, ""),
  52. ProjectName: conv.MustString(project.ProjectName, ""),
  53. ProjectStatus: conv.MustString(project.ProjectStatus, ""),
  54. ProjectType: conv.MustString(project.ProjectType, ""),
  55. ProjectPlatform: conv.MustString(project.ProjectPlatform, ""),
  56. ProjectForm: conv.MustString(project.ProjectForm, ""),
  57. TalentType: conv.MustString(project.TalentType, ""),
  58. RecruitDdl: util.GetTimePointer(project.RecruitDdl),
  59. ContentType: conv.MustString(project.ContentType, ""),
  60. ProjectDetail: conv.MustString(project.ProjectDetail, ""),
  61. ProductID: conv.MustString(project.ProductID, ""),
  62. EnterpriseID: conv.MustString(project.EnterpriseID, ""),
  63. Balance: conv.MustString(enterprise.Balance, ""),
  64. AvailableBalance: conv.MustString(enterprise.AvailableBalance, ""),
  65. EstimatedCost: conv.MustString(project.EstimatedCost, ""),
  66. FailReason: conv.MustString(project.FailReason, ""),
  67. CreateAt: util.GetTimePointer(project.CreatedAt),
  68. UpdateAt: util.GetTimePointer(project.UpdatedAt),
  69. Phone: user.Phone,
  70. FinishAt: util.GetTimePointer(project.FinishAt),
  71. PassAt: util.GetTimePointer(project.PassAt),
  72. PayAt: util.GetTimePointer(project.PayAt),
  73. ProductInfo: conv.MustString(project.ProductSnap, ""),
  74. ProductPhotoInfo: conv.MustString(project.ProductPhotoSnap, ""),
  75. AutoFailAt: util.GetTimePointer(project.AutoFailAt),
  76. SubmitAt: util.GetTimePointer(project.SubmitAt),
  77. }
  78. Strategys, err := db.GetRecruitStrategys(ctx, projectID)
  79. if err != nil {
  80. logrus.WithContext(ctx).Error()
  81. return nil, err
  82. }
  83. for _, strategy := range Strategys {
  84. RecruitStrategy := http_model.ShowRecruitStrategy{
  85. RecruitStrategyID: conv.MustString(strategy.RecruitStrategyID, ""),
  86. FeeForm: conv.MustString(strategy.FeeForm, ""),
  87. StrategyID: conv.MustString(strategy.StrategyID, ""),
  88. FollowersLow: conv.MustString(strategy.FollowersLow, ""),
  89. FollowersUp: conv.MustString(strategy.FollowersUp, ""),
  90. RecruitNumber: conv.MustString(strategy.RecruitNumber, ""),
  91. Offer: conv.MustString(strategy.Offer, ""),
  92. ServiceCharge: conv.MustString(strategy.ServiceCharge, ""),
  93. SelectedNumber: strategy.SelectedNumber,
  94. WaitingNumber: strategy.WaitingNumber,
  95. DeliveredNumber: strategy.DeliveredNumber,
  96. SignedNumber: strategy.SignedNumber,
  97. }
  98. ProjectDetail.RecruitStrategys = append(ProjectDetail.RecruitStrategys, RecruitStrategy)
  99. }
  100. Photos, err := db.GetProjectPhoto(ctx, projectID)
  101. if err != nil {
  102. logrus.WithContext(ctx).Error()
  103. return nil, err
  104. }
  105. for _, Photo := range Photos {
  106. ProjectPhoto := http_model.ShowProjectPhoto{
  107. PhotoUrl: Photo.PhotoUrl,
  108. PhotoUid: Photo.PhotoUid,
  109. }
  110. ProjectDetail.ProjectPhotos = append(ProjectDetail.ProjectPhotos, ProjectPhoto)
  111. }
  112. return &ProjectDetail, nil
  113. }
  114. func (*project) ApproveProject(ctx *gin.Context, data http_model.ApproveProjectRequest) (error, string) {
  115. //fmt.Println("data.IsApprove:", data.IsApprove)
  116. err, message := db.ApproveProject(ctx, data.ProjectId, data.IsApprove)
  117. if err != nil {
  118. logrus.WithContext(ctx).Errorf("[project service] call ChangeTaskStatus error,err:%+v", err)
  119. return err, ""
  120. }
  121. return nil, message
  122. }
  123. func (*project) GetAllProject(ctx context.Context, pageSize, pageNum int32) (*http_model.GetAllProjectData, error) {
  124. allProjectPreviews, total, err := db.GetAllProject(ctx, pageSize, pageNum)
  125. if err != nil {
  126. logrus.WithContext(ctx).Errorf("[project service] call GetAllProject error,err:%+v", err)
  127. return nil, err
  128. }
  129. allProjects := new(http_model.GetAllProjectData)
  130. allProjects.AllProjectPreview = pack.MGormAllProjectToHttpAllProjectPreview(allProjectPreviews)
  131. allProjects.Total = conv.MustString(total, "")
  132. return allProjects, nil
  133. }
  134. func (*project) GetProjectTaskList(ctx context.Context, projectID string, pageSize, pageNum int64, conditions *common_model.TaskConditions) (*http_model.ProjectTaskListData, error) {
  135. projectTasks, total, err := db.GetProjectTaskList(ctx, projectID, pageSize, pageNum, conditions)
  136. if err != nil {
  137. logrus.WithContext(ctx).Errorf("[project service] call GetProjectTaskList error,err:%+v", err)
  138. return nil, err
  139. }
  140. projectTaskListData := new(http_model.ProjectTaskListData)
  141. projectTaskListData.ProjectTaskPreview = pack.MGormProjectTaskToHttpProjectTaskPreview(projectTasks)
  142. projectTaskListData.Total = conv.MustString(total, "")
  143. return projectTaskListData, nil
  144. }
  145. func (*project) Create(ctx context.Context, newProject http_model.CreateProjectRequest, enterpriseID string) (*http_model.CreateProjectData, error) {
  146. fmt.Println("newProject:", newProject)
  147. RecruitDdl, _ := time.ParseInLocation("2006-01-02 15:04:05", newProject.RecruitDdl, time.Local)
  148. // 查询关联商品信息
  149. product, err := db.GetProductByID(ctx, newProject.ProductID)
  150. if err != nil {
  151. return nil, err
  152. }
  153. fmt.Println("product:", product)
  154. productPhotos, err := db.GetProductPhotoByProductID(ctx, newProject.ProductID)
  155. productInfoToJson, _ := json.Marshal(product)
  156. productPhotosToJson, _ := json.Marshal(productPhotos)
  157. // 按照品牌名-商品名对项目进行命名
  158. AutoTaskID, err := db.GetLastAutoTaskID()
  159. if err != nil {
  160. return nil, err
  161. }
  162. AutoDefaultID, err := db.GetLastAutoDefaultID()
  163. if err != nil {
  164. return nil, err
  165. }
  166. projectName := product.BrandName + "-" + product.ProductName
  167. var feeFrom []string
  168. for _, strategy := range newProject.RecruitStrategys {
  169. feeFrom = append(feeFrom, strconv.FormatInt(strategy.FeeForm, 10))
  170. }
  171. var ECost float64 = 0
  172. if newProject.ProjectType == int64(1) {
  173. for _, strategy := range newProject.RecruitStrategys {
  174. // 计算预估成本
  175. var tmpCost float64 = 0
  176. if strategy.FeeForm == 1 {
  177. tmpCost = strategy.ServiceCharge * float64(strategy.RecruitNumber)
  178. } else if strategy.FeeForm == 2 {
  179. tmpCost = strategy.Offer * float64(strategy.RecruitNumber)
  180. }
  181. ECost += tmpCost
  182. }
  183. }
  184. feeForms := strings.Join(feeFrom, ",")
  185. projectInfo := gorm_model.ProjectInfo{}
  186. rand.Seed(time.Now().UnixNano())
  187. td := conv.MustString(time.Now().Day(), "")
  188. for {
  189. if len(td) == 3 {
  190. break
  191. }
  192. td = "0" + td
  193. }
  194. if newProject.ProjectType == int64(1) {
  195. projectInfo = gorm_model.ProjectInfo{
  196. ProjectID: conv.MustString(time.Now().Year(), "")[2:] + td + conv.MustString(rand.Intn(100000-10000)+10000, ""),
  197. ProjectName: projectName,
  198. ProjectStatus: 1,
  199. ProjectType: newProject.ProjectType,
  200. TalentType: newProject.TalentType,
  201. ProjectPlatform: newProject.ProjectPlatform,
  202. ProjectForm: newProject.ProjectForm,
  203. RecruitDdl: &RecruitDdl,
  204. ProjectDetail: newProject.ProjectDetail,
  205. ContentType: newProject.ContentType,
  206. EnterpriseID: enterpriseID,
  207. ProductID: newProject.ProductID,
  208. FeeForm: feeForms,
  209. AutoTaskID: conv.MustInt64(AutoTaskID, 0),
  210. AutoDefaultID: conv.MustInt64(AutoDefaultID, 0),
  211. EstimatedCost: ECost,
  212. IsRead: 0,
  213. ProductSnap: string(productInfoToJson),
  214. ProductPhotoSnap: string(productPhotosToJson),
  215. }
  216. } else {
  217. projectInfo = gorm_model.ProjectInfo{
  218. ProjectID: conv.MustString(time.Now().Year(), "")[2:] + td + conv.MustString(rand.Intn(100000-10000)+10000, ""),
  219. ProjectName: projectName,
  220. ProjectStatus: 1,
  221. ProjectType: newProject.ProjectType,
  222. TalentType: "[]",
  223. ProjectPlatform: newProject.ProjectPlatform,
  224. ProjectForm: newProject.ProjectForm,
  225. ProjectDetail: newProject.ProjectDetail,
  226. ContentType: newProject.ContentType,
  227. EnterpriseID: enterpriseID,
  228. ProductID: newProject.ProductID,
  229. FeeForm: feeForms,
  230. AutoTaskID: conv.MustInt64(AutoTaskID, 0),
  231. AutoDefaultID: conv.MustInt64(AutoDefaultID, 0),
  232. EstimatedCost: ECost,
  233. ProductSnap: string(productInfoToJson),
  234. ProductPhotoSnap: string(productPhotosToJson),
  235. }
  236. }
  237. // db create ProjectInfo
  238. projectID, err := db.CreateProject(ctx, projectInfo)
  239. if err != nil {
  240. return nil, err
  241. }
  242. if len(newProject.ProjectPhotos) != 0 {
  243. var projectPhotos []gorm_model.ProjectPhoto
  244. for _, photo := range newProject.ProjectPhotos {
  245. projectPhoto := gorm_model.ProjectPhoto{
  246. PhotoUrl: photo.PhotoUrl,
  247. PhotoUid: photo.PhotoUid,
  248. ProjectID: projectID,
  249. }
  250. projectPhotos = append(projectPhotos, projectPhoto)
  251. }
  252. // db create ProjectPhoto
  253. err = db.CreateProjectPhoto(ctx, projectPhotos)
  254. if err != nil {
  255. return nil, err
  256. }
  257. }
  258. // build
  259. if newProject.ProjectType == int64(1) {
  260. var recruitStrategys []gorm_model.RecruitStrategy
  261. for _, strategy := range newProject.RecruitStrategys {
  262. // 查询对应定价策略
  263. pricingStrategy, err := db.GetPricingStrategy(ctx, strategy.FollowersLow, strategy.FollowersUp, strategy.FeeForm, newProject.ProjectPlatform)
  264. if err != nil {
  265. return nil, err
  266. }
  267. // 根据定价策略计算达人所见报价
  268. if strategy.FeeForm == 2 {
  269. strategy.TOffer = strategy.Offer * (1 - conv.MustFloat64(pricingStrategy.ServiceRate, 0)/1000)
  270. }
  271. recruitStrategy := gorm_model.RecruitStrategy{
  272. FeeForm: strategy.FeeForm,
  273. StrategyID: strategy.StrategyID,
  274. FollowersLow: strategy.FollowersLow,
  275. FollowersUp: strategy.FollowersUp,
  276. RecruitNumber: strategy.RecruitNumber,
  277. ServiceCharge: strategy.ServiceCharge,
  278. Offer: strategy.Offer,
  279. TOffer: strategy.TOffer,
  280. ProjectID: projectID,
  281. }
  282. recruitStrategys = append(recruitStrategys, recruitStrategy)
  283. }
  284. err = db.CreateRecruitStrategy(ctx, recruitStrategys)
  285. if err != nil {
  286. return nil, err
  287. }
  288. }
  289. res := &http_model.CreateProjectData{
  290. ProjectID: projectID,
  291. }
  292. return res, nil
  293. }
  294. func (*project) Update(ctx context.Context, newProject http_model.UpdateProjectRequest, enterpriseID string) (*http_model.UpdateProjectData, error) {
  295. RecruitDdl, _ := time.ParseInLocation("2006-01-02 15:04:05", newProject.RecruitDdl, time.Local)
  296. oldProject, err3 := db.GetProjectDetail(ctx, newProject.ProjectID)
  297. if err3 != nil {
  298. return nil, err3
  299. }
  300. feeFrom := []string{}
  301. for _, strategy := range newProject.RecruitStrategys {
  302. feeFrom = append(feeFrom, strconv.FormatInt(strategy.FeeForm, 10))
  303. }
  304. var ECost float64 = 0
  305. if newProject.ProjectType == int64(1) {
  306. for _, strategy := range newProject.RecruitStrategys {
  307. // 计算预估成本
  308. var tmpCost float64 = 0
  309. if strategy.FeeForm == 1 {
  310. tmpCost = strategy.ServiceCharge * float64(strategy.RecruitNumber)
  311. } else if strategy.FeeForm == 2 {
  312. tmpCost = strategy.Offer * float64(strategy.RecruitNumber)
  313. }
  314. ECost += tmpCost
  315. }
  316. }
  317. feeFroms := strings.Join(feeFrom, ",")
  318. t := time.Now()
  319. project := gorm_model.ProjectInfo{
  320. ProjectID: newProject.ProjectID,
  321. RecruitDdl: &RecruitDdl,
  322. TalentType: newProject.TalentType,
  323. ContentType: conv.MustInt64(newProject.ContentType, 0),
  324. ProjectDetail: newProject.ProjectDetail,
  325. ProjectForm: conv.MustInt64(newProject.ProjectForm, 0),
  326. EnterpriseID: enterpriseID,
  327. ProjectStatus: int64(newProject.ProjectStatus),
  328. FeeForm: feeFroms,
  329. EstimatedCost: ECost,
  330. SubmitAt: &t,
  331. }
  332. projectID, err := db.UpdateProject(ctx, project)
  333. if err != nil {
  334. return nil, err
  335. }
  336. // 删除该项目之前的所有图片
  337. err = db.DeleteProjectPhotoByProjectID(ctx, *projectID)
  338. if err != nil {
  339. return nil, err
  340. }
  341. fmt.Printf("照片:\t %+v", newProject.ProjectPhotos)
  342. if len(newProject.ProjectPhotos) != 0 {
  343. // 新增图片
  344. projectPhotos := []gorm_model.ProjectPhoto{}
  345. for _, photo := range newProject.ProjectPhotos {
  346. projectPhoto := gorm_model.ProjectPhoto{
  347. ProjectID: project.ProjectID,
  348. PhotoUrl: photo.PhotoUrl,
  349. PhotoUid: photo.PhotoUid,
  350. }
  351. projectPhotos = append(projectPhotos, projectPhoto)
  352. }
  353. err = db.CreateProjectPhoto(ctx, projectPhotos)
  354. if err != nil {
  355. return nil, err
  356. }
  357. }
  358. // 删除该项目之前的所有策略
  359. err = db.DeleteRecruitStrategyByProjectID(ctx, *projectID)
  360. if err != nil {
  361. return nil, err
  362. }
  363. //fmt.Printf("策略:\t %+v", newProject.RecruitStrategys)
  364. if newProject.RecruitStrategys != nil {
  365. // 新增策略
  366. RecruitStrategys := []gorm_model.RecruitStrategy{}
  367. for _, Strategy := range newProject.RecruitStrategys {
  368. // 查询对应定价策略
  369. pricingStrategy, err := db.GetPricingStrategy(ctx, Strategy.FollowersLow, Strategy.FollowersUp, Strategy.FeeForm, oldProject.ProjectPlatform)
  370. if err != nil {
  371. return nil, err
  372. }
  373. // 根据定价策略计算达人所见报价
  374. if Strategy.FeeForm == 2 {
  375. Strategy.TOffer = Strategy.Offer * (1 - conv.MustFloat64(pricingStrategy.ServiceRate, 0)/1000)
  376. }
  377. RecruitStrategy := gorm_model.RecruitStrategy{
  378. FeeForm: conv.MustInt64(Strategy.FeeForm, 0),
  379. StrategyID: conv.MustInt64(Strategy.StrategyID, 0),
  380. FollowersLow: conv.MustInt64(Strategy.FollowersLow, 0),
  381. FollowersUp: conv.MustInt64(Strategy.FollowersUp, 0),
  382. RecruitNumber: conv.MustInt64(Strategy.RecruitNumber, 0),
  383. Offer: conv.MustFloat64(Strategy.Offer, 0),
  384. TOffer: conv.MustFloat64(Strategy.TOffer, 0),
  385. ProjectID: project.ProjectID,
  386. }
  387. fmt.Printf("Offer:\t %+v", Strategy.Offer)
  388. RecruitStrategys = append(RecruitStrategys, RecruitStrategy)
  389. }
  390. err = db.CreateRecruitStrategy(ctx, RecruitStrategys)
  391. if err != nil {
  392. return nil, err
  393. }
  394. }
  395. res := &http_model.UpdateProjectData{
  396. ProjectID: *projectID,
  397. }
  398. return res, nil
  399. }
  400. func (*project) GetPorjectDetail(ctx context.Context, projectID string) (*http_model.ShowProjectData, error) {
  401. project, err := db.GetProjectDetail(ctx, projectID)
  402. if err != nil {
  403. logrus.WithContext(ctx).Errorf("[project service] call GetPorjectDetail error,err:%+v", err)
  404. return nil, err
  405. }
  406. enterprise, err := db.GetEnterpriseByEnterpriseID(ctx, project.EnterpriseID)
  407. // fmt.Println("%+v", enterprise.UserID)
  408. if err != nil {
  409. logrus.WithContext(ctx).Errorf("[project service] call GetEnterpriseByEnterpriseID error,err:%+v", err)
  410. return nil, err
  411. }
  412. user, err := db.GetUserByID(ctx, enterprise.UserID)
  413. if err != nil {
  414. logrus.WithContext(ctx).Errorf("[project service] call GetUserByID error,err:%+v", err)
  415. return nil, err
  416. }
  417. ProjectDetail := http_model.ShowProjectData{
  418. ProjectID: project.ProjectID,
  419. ProjectName: conv.MustString(project.ProjectName, ""),
  420. ProjectStatus: conv.MustString(project.ProjectStatus, ""),
  421. ProjectType: conv.MustString(project.ProjectType, ""),
  422. ProjectPlatform: conv.MustString(project.ProjectPlatform, ""),
  423. ProjectForm: conv.MustString(project.ProjectForm, ""),
  424. TalentType: conv.MustString(project.TalentType, ""),
  425. RecruitDdl: util.GetTimePointer(project.RecruitDdl),
  426. ContentType: conv.MustString(project.ContentType, ""),
  427. ProjectDetail: conv.MustString(project.ProjectDetail, ""),
  428. ProductID: conv.MustString(project.ProductID, ""),
  429. EnterpriseID: conv.MustString(project.EnterpriseID, ""),
  430. Balance: conv.MustString(enterprise.Balance, ""),
  431. FailReason: conv.MustString(project.FailReason, ""),
  432. CreateAt: util.GetTimePointer(project.CreatedAt),
  433. UpdateAt: util.GetTimePointer(project.UpdatedAt),
  434. Phone: user.Phone,
  435. FinishAt: util.GetTimePointer(project.FinishAt),
  436. PassAt: util.GetTimePointer(project.PassAt),
  437. PayAt: util.GetTimePointer(project.PayAt),
  438. }
  439. Strategys, err := db.GetRecruitStrategys(ctx, projectID)
  440. fmt.Println("招募策略:", Strategys)
  441. if err != nil {
  442. logrus.WithContext(ctx).Error()
  443. return nil, err
  444. }
  445. for _, strategy := range Strategys {
  446. RecruitStrategy := http_model.ShowRecruitStrategy{
  447. RecruitStrategyID: conv.MustString(strategy.RecruitStrategyID, ""),
  448. FeeForm: conv.MustString(strategy.FeeForm, ""),
  449. StrategyID: conv.MustString(strategy.StrategyID, ""),
  450. FollowersLow: conv.MustString(strategy.FollowersLow, ""),
  451. FollowersUp: conv.MustString(strategy.FollowersUp, ""),
  452. RecruitNumber: conv.MustString(strategy.RecruitNumber, ""),
  453. Offer: conv.MustString(strategy.Offer, ""),
  454. ServiceCharge: conv.MustString(strategy.ServiceCharge, ""),
  455. SelectedNumber: strategy.SelectedNumber,
  456. WaitingNumber: strategy.WaitingNumber,
  457. DeliveredNumber: strategy.DeliveredNumber,
  458. SignedNumber: strategy.SignedNumber,
  459. }
  460. ProjectDetail.RecruitStrategys = append(ProjectDetail.RecruitStrategys, RecruitStrategy)
  461. }
  462. Photos, err := db.GetProjectPhoto(ctx, projectID)
  463. if err != nil {
  464. logrus.WithContext(ctx).Error()
  465. return nil, err
  466. }
  467. for _, Photo := range Photos {
  468. ProjectPhoto := http_model.ShowProjectPhoto{
  469. PhotoUrl: Photo.PhotoUrl,
  470. PhotoUid: Photo.PhotoUid,
  471. }
  472. ProjectDetail.ProjectPhotos = append(ProjectDetail.ProjectPhotos, ProjectPhoto)
  473. }
  474. return &ProjectDetail, nil
  475. }
  476. func (*project) GetTaskLogisticsList(ctx context.Context, projectID string, pageSize, pageNum int64, conditions *common_model.TalentConditions) (*http_model.TaskLogisticsListData, error) {
  477. TaskLogisticss, total, err := db.GetTaskLogisticsList(ctx, projectID, pageSize, pageNum, conditions)
  478. if err != nil {
  479. logrus.WithContext(ctx).Errorf("[project service] call GetTaskLogisticsList error,err:%+v", err)
  480. return nil, err
  481. }
  482. TaskLogisticsListData := new(http_model.TaskLogisticsListData)
  483. TaskLogisticsListData.TaskLogisticsPreview = pack.MGormTaskLogisticsInfoListToHttpTaskLogisticsPreviewList(TaskLogisticss)
  484. TaskLogisticsListData.Total = conv.MustString(total, "")
  485. return TaskLogisticsListData, nil
  486. }
  487. func (*project) ChangeTaskStatus(ctx *gin.Context, data http_model.ProjectChangeTaskStatusRequest) interface{} {
  488. RecruitStrategyIDs, err := db.ChangeTaskStatus(ctx, data.TaskIds, data.TaskStatus)
  489. if err != nil {
  490. logrus.WithContext(ctx).Errorf("[project service] call ChangeTaskStatus error,err:%+v", err)
  491. return err
  492. }
  493. if data.TaskStatus == "2" {
  494. err = db.CalculateSelectedNumberByRecruitStrategyID(ctx, RecruitStrategyIDs, 1)
  495. if err != nil {
  496. logrus.WithContext(ctx).Errorf("[project service] call ChangeTaskStatus error,err:%+v", err)
  497. return err
  498. }
  499. } else {
  500. err = db.CalculateSelectedNumberByRecruitStrategyID(ctx, RecruitStrategyIDs, -1)
  501. if err != nil {
  502. logrus.WithContext(ctx).Errorf("[project service] call ChangeTaskStatus error,err:%+v", err)
  503. return err
  504. }
  505. }
  506. return nil
  507. }
  508. func (*project) ChangeSpecialTaskStatus(ctx *gin.Context, data http_model.ProjectChangeTaskStatusRequest) interface{} {
  509. err := db.ChangeSpecialTaskStatus(ctx, data.TaskIds, data.TaskStatus, data.TaskStage)
  510. if err != nil {
  511. logrus.WithContext(ctx).Errorf("[project service] call ChangeSpecialTaskStatus error,err:%+v", err)
  512. return err
  513. }
  514. for _, taskId := range data.TaskIds {
  515. err = db.CreateMessageByTaskId(ctx, 7, 2, taskId)
  516. if err != nil {
  517. logrus.WithContext(ctx).Errorf("[project service] call CreateMessageByTaskId error,err:%+v", err)
  518. return err
  519. }
  520. }
  521. return nil
  522. }
  523. func (p *project) GetTaskScriptList(ctx *gin.Context, projectID string, pageSize, pageNum int64, conditions *common_model.TalentConditions) (*http_model.TaskScriptListData, error) {
  524. TaskScripts, total, err := db.GetTaskScriptList(ctx, projectID, pageSize, pageNum, conditions)
  525. if err != nil {
  526. logrus.WithContext(ctx).Errorf("[project service] call GetTaskScriptList error,err:%+v", err)
  527. return nil, err
  528. }
  529. TaskScriptListData := new(http_model.TaskScriptListData)
  530. TaskScriptListData.TaskScriptPreview = pack.MGormTaskScriptInfoListToHttpTaskScriptPreviewList(TaskScripts)
  531. TaskScriptListData.Total = conv.MustString(total, "")
  532. return TaskScriptListData, nil
  533. }
  534. func (p *project) GetTaskSketchList(ctx *gin.Context, projectID string, pageSize, pageNum int64, conditions *common_model.TalentConditions) (*http_model.TaskSketchListData, error) {
  535. TaskSketchs, total, err := db.GetTaskSketchList(ctx, projectID, pageSize, pageNum, conditions)
  536. if err != nil {
  537. logrus.WithContext(ctx).Errorf("[project service] call GetTaskSketchList error,err:%+v", err)
  538. return nil, err
  539. }
  540. TaskSketchListData := new(http_model.TaskSketchListData)
  541. TaskSketchListData.TaskSketchPreview = pack.MGormTaskSketchInfoListToHttpTaskSketchPreviewList(TaskSketchs)
  542. TaskSketchListData.Total = conv.MustString(total, "")
  543. return TaskSketchListData, nil
  544. }
  545. func (p *project) GetTaskLinkList(ctx *gin.Context, projectID string, pageSize, pageNum int64, conditions *common_model.TalentConditions) (*http_model.TaskLinkListData, error) {
  546. TaskLinks, total, err := db.GetTaskLinkList(ctx, projectID, pageSize, pageNum, conditions)
  547. if err != nil {
  548. logrus.WithContext(ctx).Errorf("[project service] call GetTaskLinkList error,err:%+v", err)
  549. return nil, err
  550. }
  551. TaskLinkListData := new(http_model.TaskLinkListData)
  552. TaskLinkListData.TaskLinkPreview = pack.MGormTaskLinkInfoListToHttpTaskLinkPreviewList(TaskLinks)
  553. TaskLinkListData.Total = conv.MustString(total, "")
  554. return TaskLinkListData, nil
  555. }
  556. func (p *project) GetTaskDataList(ctx *gin.Context, projectID string, pageSize, pageNum int64, conditions *common_model.TalentConditions) (*http_model.TaskDataListData, error) {
  557. TaskDatas, total, err := db.GetTaskDataList(ctx, projectID, pageSize, pageNum, conditions)
  558. if err != nil {
  559. logrus.WithContext(ctx).Errorf("[project service] call GetTaskDataList error,err:%+v", err)
  560. return nil, err
  561. }
  562. TaskDataListData := new(http_model.TaskDataListData)
  563. TaskDataListData.TaskDataPreview = pack.MGormTaskDataInfoListToHttpTaskDataPreviewList(TaskDatas)
  564. TaskDataListData.Total = conv.MustString(total, "")
  565. return TaskDataListData, nil
  566. }
  567. func (p *project) GetTaskFinishList(ctx *gin.Context, projectID string, pageSize, pageNum int64, conditions *common_model.TalentConditions) (*http_model.TaskFinishListData, error) {
  568. TaskFinishs, total, err := db.GetTaskFinishList(ctx, pageSize, pageNum, conditions)
  569. if err != nil {
  570. logrus.WithContext(ctx).Errorf("[project service] call GetTaskFinishList error,err:%+v", err)
  571. return nil, err
  572. }
  573. TaskFinishListData := new(http_model.TaskFinishListData)
  574. TaskFinishListData.TaskFinishPreview = pack.MGormTaskFinishInfoListToHttpTaskFinishPreviewList(TaskFinishs)
  575. TaskFinishListData.Total = conv.MustString(total, "")
  576. return TaskFinishListData, nil
  577. }
  578. func (p *project) GetServiceCharge(ctx *gin.Context, data http_model.GetServiceChargeRequest) (*http_model.ServiceChargeData, error) {
  579. pricingStrategy, err := db.GetPricingStrategy(ctx, data.FollowersLow, data.FollowersUp, data.FeeForm, data.Platform)
  580. if err != nil {
  581. return nil, err
  582. }
  583. serviceFee := http_model.ServiceChargeData{
  584. ServiceCharge: pricingStrategy.ServiceCharge,
  585. }
  586. return &serviceFee, nil
  587. }