selection_info_service.go 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786
  1. package service
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "github.com/sirupsen/logrus"
  6. "reflect"
  7. "strings"
  8. "time"
  9. "youngee_b_api/app/dao"
  10. "youngee_b_api/app/entity"
  11. "youngee_b_api/app/service/review_service"
  12. "youngee_b_api/app/util"
  13. "youngee_b_api/app/vo"
  14. )
  15. type SelectionInfoService struct{}
  16. //func (s *SelectionInfoService) GetSelectionInfo(ctx *gin.Context, selectionId string) (*http_model.SelectionDetail, error) {
  17. // selectionDetail := http_model.SelectionDetail{}
  18. // selectionInfo, err := db.GetSelectionById(ctx, selectionId)
  19. //
  20. // if err != nil {
  21. // logrus.WithContext(ctx).Errorf("[selectionDB service] call GetSelectionInfo error,err:%+v", err)
  22. // return nil, err
  23. // }
  24. // selectionBriefInfo, err := db.GetSelectionBriefInfo(ctx, selectionId)
  25. // if err != nil {
  26. // logrus.WithContext(ctx).Errorf("[selectionDB service] call GetSelectionBriefInfo error,err:%+v", err)
  27. // return nil, err
  28. // }
  29. // selectionExampleInfo, err := db.GetSelectionExampleInfo(ctx, selectionId)
  30. // if err != nil {
  31. // logrus.WithContext(ctx).Errorf("[selectionDB service] call GetSelectionExampleInfo error,err:%+v", err)
  32. // return nil, err
  33. // }
  34. // productInfo, err := db.GetProductInfoBySelectionId(ctx, selectionId)
  35. // if err != nil {
  36. // logrus.WithContext(ctx).Errorf("[selectionDB service] call GetProductInfo error,err:%+v", err)
  37. // return nil, err
  38. // }
  39. // productPhotoInfo, err := db.GetProductPhotoInfoBySelectionId(ctx, selectionId)
  40. // if err != nil {
  41. // logrus.WithContext(ctx).Errorf("[selectionDB service] call GetProductPhotoInfo error,err:%+v", err)
  42. // return nil, err
  43. // }
  44. // selectionDetail.SelectionBrief = selectionBriefInfo
  45. // selectionDetail.SelectionInfo = selectionInfo
  46. // selectionDetail.SelectionExample = selectionExampleInfo
  47. // selectionDetail.ProductInfo = productInfo
  48. // selectionDetail.ProductPhotoInfo = productPhotoInfo
  49. // return &selectionDetail, nil
  50. //}
  51. // 创建带货任务
  52. func (s SelectionInfoService) CreateSelectionInfo(selectionCreateParam *vo.SelectionInfoCreateParam) (*string, error) {
  53. // 1. 生成选品id
  54. selectionId := strings.ReplaceAll(util.GenerateUUID(11), "-", "")
  55. // 2. 数据准备
  56. // 查找关联商品信息
  57. product, err := dao.ProductDAO{}.GetProductByID(selectionCreateParam.ProductId)
  58. if err != nil {
  59. return nil, err
  60. }
  61. if product == nil {
  62. return nil, errors.New("未找到关联商品")
  63. }
  64. productMainPhoto, _ := dao.ProductPhotoDAO{}.GetMainProductPhotoInfoByProductID(selectionCreateParam.ProductId)
  65. productInfoToJson, _ := json.Marshal(product)
  66. productPhotosToJson, _ := json.Marshal(productMainPhoto)
  67. // 任务截止时间
  68. taskDdl, err1 := time.ParseInLocation("2006-01-02 15:04:05", selectionCreateParam.TaskDdl, time.Local)
  69. if err1 != nil {
  70. return nil, errors.New("failed to parse taskDdl")
  71. }
  72. // 创建选品
  73. // 获取定时任务配置
  74. infoAutoTask := entity.InfoAutoTask{}
  75. infoAutoTask = dao.InfoAutoTaskDao{}.GetAutoTaskLast(selectionCreateParam.EnterpriseId)
  76. t := time.Now()
  77. if taskDdl.Before(t) {
  78. return nil, errors.New("截止时间异常,请重试")
  79. }
  80. var sampleMode, taskMode int64
  81. var poolRewardSum float64
  82. if len(selectionCreateParam.FreeStrategys) > 0 {
  83. sampleMode = 1
  84. } else {
  85. sampleMode = 3
  86. }
  87. if len(selectionCreateParam.RewardStrategys) > 0 {
  88. taskMode = 1
  89. for _, rewardStrategy := range selectionCreateParam.RewardStrategys {
  90. poolRewardSum += rewardStrategy.Reward
  91. }
  92. } else {
  93. taskMode = 2
  94. }
  95. newSelection := entity.SelectionInfo{
  96. SelectionStatus: 1,
  97. SelectionID: selectionId,
  98. ProductID: selectionCreateParam.ProductId,
  99. ProductCategory: product.ProductCategory,
  100. EnterpriseID: selectionCreateParam.EnterpriseId,
  101. SubAccountId: selectionCreateParam.SubAccountId,
  102. Platform: selectionCreateParam.Platform,
  103. ProductSnap: string(productInfoToJson),
  104. ProductPhotoSnap: string(productPhotosToJson),
  105. SelectionName: selectionCreateParam.SelectionName,
  106. TaskDdl: taskDdl,
  107. SampleNum: selectionCreateParam.SampleNum,
  108. RemainNum: selectionCreateParam.SampleNum,
  109. SampleMode: sampleMode,
  110. TaskMode: taskMode,
  111. CreatedAt: t,
  112. AutoTaskID: infoAutoTask.AutoTaskID,
  113. EstimatedCost: poolRewardSum,
  114. }
  115. err = dao.SelectionInfoDAO{}.CreateSelectionInfo(newSelection)
  116. if err != nil {
  117. return nil, err
  118. }
  119. // 4. 更新选品brief和示例(带货任务补充信息)
  120. if selectionCreateParam.SecBrief != nil {
  121. // 插入新的brief
  122. for _, v := range selectionCreateParam.SecBrief {
  123. brief := entity.SecBrief{
  124. SelectionID: selectionId,
  125. FileUid: v.FileUid,
  126. FileName: v.Name,
  127. FileUrl: v.FileUrl,
  128. CreatedAt: time.Now(),
  129. Type: v.Type,
  130. }
  131. err = dao.SecBriefDao{}.CreateSecBrief(brief)
  132. if err != nil {
  133. return nil, err
  134. }
  135. }
  136. }
  137. if selectionCreateParam.SecMaterial != nil {
  138. // 插入新的示例
  139. for _, v := range selectionCreateParam.SecMaterial {
  140. secMaterial := entity.SecMaterial{
  141. SelectionID: selectionId,
  142. FileUid: v.FileUid,
  143. FileName: v.Name,
  144. FileUrl: v.FileUrl,
  145. CreatedAt: time.Now(),
  146. Type: v.Type,
  147. }
  148. err = dao.SecMaterialDao{}.CreateSecMaterial(secMaterial)
  149. if err != nil {
  150. return nil, err
  151. }
  152. }
  153. }
  154. // 更新带货任务的免费领样策略
  155. if selectionCreateParam.FreeStrategys != nil {
  156. // 2. 接收并创建新的免费领样策略
  157. if sampleMode == 1 {
  158. var frees []entity.FreeStrategy
  159. for _, v := range selectionCreateParam.FreeStrategys {
  160. free := entity.FreeStrategy{
  161. SelectionId: selectionId,
  162. StrategyId: v.StrategyId,
  163. FollowersLow: v.FollowersLow,
  164. FollowersUp: v.FollowersUp,
  165. SaleNum: v.SaleNum,
  166. StrategyStatus: 1,
  167. EnrollNum: 0,
  168. ChooseNum: 0,
  169. }
  170. frees = append(frees, free)
  171. }
  172. err = dao.FreeStrategyDao{}.CreateFreeStrategy(frees)
  173. if err != nil {
  174. return nil, err
  175. }
  176. }
  177. }
  178. // 更新带货任务的悬赏策略
  179. if selectionCreateParam.RewardStrategys != nil {
  180. if taskMode == 1 {
  181. var rewards []entity.RewardStrategy
  182. for _, v := range selectionCreateParam.RewardStrategys {
  183. reward := entity.RewardStrategy{
  184. SelectionId: selectionId,
  185. Reward: v.Reward,
  186. SaleActual: v.SaleActual,
  187. PerReward: v.PerReward,
  188. StrategyStatus: 1,
  189. }
  190. rewards = append(rewards, reward)
  191. }
  192. err = dao.RewardStrategyDao{}.CreateRewardStrategy(rewards)
  193. if err != nil {
  194. return nil, err
  195. }
  196. }
  197. }
  198. return &selectionId, nil
  199. }
  200. // 更新带货任务(样品奖励、补充信息)
  201. func (s SelectionInfoService) UpdateSelectionInfo(selectionUpdateParam *vo.SelectionInfoUpdateParam) (*string, error) {
  202. // 1. 检查该id
  203. selectionID := selectionUpdateParam.SelectionID
  204. selectionInfo, err := dao.SelectionInfoDAO{}.GetSelectionInfoById(selectionID)
  205. if err != nil {
  206. return nil, err
  207. }
  208. if selectionInfo == nil {
  209. return nil, errors.New("选品不存在")
  210. }
  211. // 2. 数据准备
  212. // a) 查找关联商品信息
  213. product, err := dao.ProductDAO{}.GetProductByID(selectionInfo.ProductID)
  214. if err != nil {
  215. return nil, err
  216. }
  217. if product == nil {
  218. return nil, errors.New("未找到关联商品")
  219. }
  220. productPhotos, err := dao.ProductPhotoDAO{}.GetProductPhotoByProductID(selectionInfo.ProductID)
  221. productInfoToJson, _ := json.Marshal(product)
  222. productPhotosToJson, _ := json.Marshal(productPhotos)
  223. // d) 任务截止时间
  224. taskDdl := time.Time{} //赋零值
  225. taskDdl, _ = time.ParseInLocation("2006-01-02 15:04:05", selectionUpdateParam.TaskDdl, time.Local)
  226. //// f) 更新选品状态
  227. //if selectionUpdateParam.SelectionStatus != 2 && selectionUpdateParam.SelectionStatus != 7 {
  228. // selectionUpdateParam.SelectionStatus = 1
  229. //}
  230. t := time.Now()
  231. var sampleMode, taskMode int64
  232. var poolRewardSum float64
  233. if len(selectionUpdateParam.FreeStrategys) > 0 {
  234. sampleMode = 1
  235. } else {
  236. sampleMode = 3
  237. }
  238. if len(selectionUpdateParam.RewardStrategys) > 0 {
  239. taskMode = 1
  240. for _, rewardStrategy := range selectionUpdateParam.RewardStrategys {
  241. poolRewardSum += rewardStrategy.Reward
  242. }
  243. } else {
  244. taskMode = 2
  245. }
  246. updateSelection := entity.SelectionInfo{
  247. SelectionID: selectionUpdateParam.SelectionID,
  248. //SelectionStatus: selectionUpdateParam.SelectionStatus,
  249. SelectionName: selectionUpdateParam.SelectionName,
  250. EnterpriseID: selectionUpdateParam.EnterpriseId,
  251. SubAccountId: selectionUpdateParam.SubAccountId,
  252. ProductID: selectionUpdateParam.ProductId,
  253. //ProductUrl: selectionUpdateParam.ProductUrl,
  254. TaskMode: taskMode,
  255. SampleMode: sampleMode,
  256. SampleNum: selectionUpdateParam.SampleNum,
  257. RemainNum: selectionUpdateParam.SampleNum,
  258. //CommissionRate: selectionUpdateParam.CommissionRate,
  259. //TaskReward: selectionUpdateParam.TaskReward,
  260. //SettlementAmount: selectionUpdateParam.SettlementAmount,
  261. EstimatedCost: poolRewardSum,
  262. //SampleCondition: selectionUpdateParam.SampleCondition,
  263. //RewardCondition: selectionUpdateParam.RewardCondition,
  264. TaskDdl: taskDdl,
  265. //Detail: selectionUpdateParam.Detail,
  266. ProductSnap: string(productInfoToJson),
  267. ProductPhotoSnap: string(productPhotosToJson),
  268. CreatedAt: selectionInfo.CreatedAt,
  269. UpdatedAt: t,
  270. }
  271. //if selectionUpdateParam.SelectionStatus == 2 {
  272. // updateSelection.SubmitAt = t
  273. //}
  274. //if selectionUpdateParam.Status == 1 {
  275. // updateSelection.Status = 1
  276. //}
  277. // 合并传入参数和数据表中原记录,若传入参数字段值为空,则将字段赋值为原记录中值
  278. result := util.MergeStructValue(&updateSelection, selectionInfo)
  279. // 利用反射机制将interface类型转换为结构体类型
  280. v := reflect.ValueOf(&result).Elem()
  281. if v.Kind() == reflect.Struct {
  282. updateSelection = v.Interface().(entity.SelectionInfo)
  283. //fmt.Println(p)
  284. }
  285. // c) 计算预估成本(如果有)
  286. /*
  287. var estimatedCost float64
  288. if conv.MustInt(updateSelection.TaskMode, 0) == 1 {
  289. estimatedCost = conv.MustFloat64(updateSelection.TaskReward, 0) * conv.MustFloat64(updateSelection.SampleNum, 0)
  290. }
  291. estimatedCostToString, _ := conv.String(estimatedCost)
  292. updateSelection.EstimatedCost = estimatedCostToString
  293. */
  294. // 3. 更新选品
  295. err = dao.SelectionInfoDAO{}.UpdateSelectionInfo(updateSelection)
  296. if err != nil {
  297. return nil, err
  298. }
  299. // 4. 更新选品brief和示例(带货任务补充信息)
  300. if selectionUpdateParam.SecBrief != nil {
  301. // 删除已有brief
  302. err = dao.SecBriefDao{}.DeleteSecBriefBySelectionId(selectionInfo.SelectionID)
  303. if err != nil {
  304. return nil, err
  305. }
  306. // 插入新的brief
  307. for _, v := range selectionUpdateParam.SecBrief {
  308. brief := entity.SecBrief{
  309. SelectionID: selectionInfo.SelectionID,
  310. FileUid: v.FileUid,
  311. FileName: v.Name,
  312. FileUrl: v.FileUrl,
  313. CreatedAt: time.Now(),
  314. Type: v.Type,
  315. }
  316. err = dao.SecBriefDao{}.CreateSecBrief(brief)
  317. if err != nil {
  318. return nil, err
  319. }
  320. }
  321. }
  322. if selectionUpdateParam.SecMaterial != nil {
  323. // 删除已有示例
  324. err = dao.SecMaterialDao{}.DeleteSecMaterialBySelectionId(selectionInfo.SelectionID)
  325. if err != nil {
  326. return nil, err
  327. }
  328. // 插入新的示例
  329. for _, v := range selectionUpdateParam.SecMaterial {
  330. secMaterial := entity.SecMaterial{
  331. SelectionID: selectionInfo.SelectionID,
  332. FileUid: v.FileUid,
  333. FileName: v.Name,
  334. FileUrl: v.FileUrl,
  335. CreatedAt: time.Now(),
  336. Type: v.Type,
  337. }
  338. err = dao.SecMaterialDao{}.CreateSecMaterial(secMaterial)
  339. if err != nil {
  340. return nil, err
  341. }
  342. }
  343. }
  344. println("更新带货任务的免费领样策略")
  345. // 更新带货任务的免费领样策略
  346. if selectionUpdateParam.FreeStrategys != nil {
  347. // 1. 删除已有的免费领样策略
  348. err = dao.FreeStrategyDao{}.DeleteFreeStrategyBySelectionId(selectionUpdateParam.SelectionID)
  349. if err != nil {
  350. return nil, err
  351. }
  352. // 2. 接收并创建新的免费领样策略
  353. if sampleMode == 1 {
  354. var frees []entity.FreeStrategy
  355. for _, v := range selectionUpdateParam.FreeStrategys {
  356. free := entity.FreeStrategy{
  357. SelectionId: selectionInfo.SelectionID,
  358. StrategyId: v.StrategyId,
  359. FollowersLow: v.FollowersLow,
  360. FollowersUp: v.FollowersUp,
  361. SaleNum: v.SaleNum,
  362. StrategyStatus: 1,
  363. EnrollNum: 0,
  364. ChooseNum: 0,
  365. }
  366. frees = append(frees, free)
  367. }
  368. err = dao.FreeStrategyDao{}.CreateFreeStrategy(frees)
  369. if err != nil {
  370. return nil, err
  371. }
  372. }
  373. }
  374. println("更新带货任务的悬赏策略")
  375. // 更新带货任务的悬赏策略
  376. if selectionUpdateParam.RewardStrategys != nil {
  377. // 1. 删除已有的悬赏策略
  378. err = dao.RewardStrategyDao{}.DeleteRewardStrategyBySelectionId(selectionUpdateParam.SelectionID)
  379. if err != nil {
  380. return nil, err
  381. }
  382. if taskMode == 1 {
  383. var rewards []entity.RewardStrategy
  384. for _, v := range selectionUpdateParam.RewardStrategys {
  385. reward := entity.RewardStrategy{
  386. SelectionId: selectionInfo.SelectionID,
  387. Reward: v.Reward,
  388. SaleActual: v.SaleActual,
  389. PerReward: v.PerReward,
  390. StrategyStatus: 1,
  391. }
  392. rewards = append(rewards, reward)
  393. }
  394. err = dao.RewardStrategyDao{}.CreateRewardStrategy(rewards)
  395. if err != nil {
  396. return nil, err
  397. }
  398. }
  399. }
  400. return &updateSelection.SelectionID, nil
  401. }
  402. // 电商带货任务预览
  403. func (s SelectionInfoService) GetSelectionDetail(selectionId string) (*vo.ReSelectionDetail, error) {
  404. reSelectionDetail := vo.ReSelectionDetail{}
  405. selection, err := dao.SelectionInfoDAO{}.GetSelectionInfoById(selectionId)
  406. if err != nil {
  407. logrus.Errorf("[selectionInfoDB service] call GetSelection error,err:%+v", err)
  408. return nil, err
  409. }
  410. reSelectionDetail.SelectionName = selection.SelectionName
  411. // 系统信息
  412. reSelectionDetail.SelectionId = selectionId
  413. reSelectionDetail.SelectionStatus = selection.SelectionStatus
  414. reSelectionDetail.SelectionPlatform = selection.Platform
  415. reSelectionDetail.CreatedAt = selection.CreatedAt.Format("2006-01-02 15:04:05")
  416. reSelectionDetail.SubmitAt = selection.SubmitAt.Format("2006-01-02 15:04:05")
  417. reSelectionDetail.RewardSum = selection.EstimatedCost
  418. var creatorName, phone string
  419. //var rewardSum float64
  420. if selection.SubAccountId == 0 {
  421. enterprise, err := dao.EnterpriseDao{}.GetEnterprise(selection.EnterpriseID)
  422. if err == nil && enterprise != nil {
  423. creatorName = enterprise.BusinessName
  424. phone, err = dao.UserDao{}.GetPhoneByUserId(enterprise.UserId)
  425. }
  426. } else {
  427. subAccount, err := dao.SubAccountDao{}.GetSubAccount(selection.SubAccountId)
  428. if err == nil && subAccount != nil {
  429. creatorName = subAccount.SubAccountName
  430. phone, err = dao.UserDao{}.GetPhoneByUserId(subAccount.UserId)
  431. }
  432. }
  433. reSelectionDetail.CreatorName = creatorName
  434. reSelectionDetail.Phone = phone
  435. // 关联商品
  436. var reProduct vo.ReProductPreview
  437. product, err := dao.ProductDAO{}.GetProductByID(selection.ProductID)
  438. if err == nil {
  439. photoUrl, e := dao.ProductPhotoDAO{}.GetMainPhotoByProductID(product.ProductID)
  440. if e != nil {
  441. photoUrl = ""
  442. }
  443. reProduct = vo.ReProductPreview{
  444. ProductID: product.ProductID,
  445. ProductName: product.ProductName,
  446. ProductType: product.ProductType,
  447. ProductCategory: product.ProductCategory,
  448. ProductPrice: product.ProductPrice,
  449. ProductDetail: product.ProductDetail,
  450. CreatedAt: product.CreatedAt.Format("2006-01-02 15:04:05"),
  451. PhotoUrl: photoUrl,
  452. }
  453. }
  454. reSelectionDetail.ProductInfo = &reProduct
  455. // 样品奖励
  456. reSelectionDetail.TaskDdl = selection.TaskDdl.Format("2006-01-02 15:04:05")
  457. reSelectionDetail.SampleNum = selection.SampleNum
  458. var freeStrategyPreviews []*vo.FreeStrategyPreview // 领样策略
  459. freeStrategys, err := dao.FreeStrategyDao{}.GetFreeStrategyBySelectionId(selectionId)
  460. if err != nil {
  461. logrus.Errorf("[selectionInfoDB service] call GetFreeStrategy error,err:%+v", err)
  462. return nil, err
  463. }
  464. for _, freeStrategy := range freeStrategys {
  465. freeStrategyPreview := &vo.FreeStrategyPreview{
  466. StrategyId: freeStrategy.StrategyId,
  467. FollowersLow: freeStrategy.FollowersLow,
  468. FollowersUp: freeStrategy.FollowersUp,
  469. SaleNum: freeStrategy.SaleNum,
  470. StrategyStatus: freeStrategy.StrategyStatus,
  471. }
  472. freeStrategyPreviews = append(freeStrategyPreviews, freeStrategyPreview)
  473. }
  474. reSelectionDetail.FreeStrategys = freeStrategyPreviews
  475. var rewardStrategyPreviews []*vo.RewardStrategyPreview // 悬赏策略
  476. rewardStrategys, err := dao.RewardStrategyDao{}.GetRewardStrategyBySelectionId(selectionId)
  477. if err != nil {
  478. logrus.Errorf("[selectionInfoDB service] call GetRewardStrategy error,err:%+v", err)
  479. return nil, err
  480. }
  481. for _, rewardStrategy := range rewardStrategys {
  482. rewardStrategyPreview := &vo.RewardStrategyPreview{
  483. Reward: rewardStrategy.Reward,
  484. SaleActual: rewardStrategy.SaleActual,
  485. PerReward: rewardStrategy.PerReward,
  486. StrategyStatus: rewardStrategy.StrategyStatus,
  487. }
  488. rewardStrategyPreviews = append(rewardStrategyPreviews, rewardStrategyPreview)
  489. }
  490. reSelectionDetail.FreeStrategys = freeStrategyPreviews
  491. reSelectionDetail.RewardStrategys = rewardStrategyPreviews
  492. //for _, rewardStrategy := range rewardStrategys {
  493. // rewardSum += rewardStrategy.Reward
  494. //}
  495. //reSelectionDetail.RewardSum = rewardSum
  496. // 补充信息
  497. selectionBriefInfos, err := dao.SecBriefDao{}.GetSelectionBriefInfo(selectionId)
  498. if err != nil {
  499. logrus.Errorf("[selectionInfoDB service] call GetSelectionBriefInfo error,err:%+v", err)
  500. return nil, err
  501. }
  502. selectionMaterials, err := dao.SecMaterialDao{}.GetSelectionMaterialInfo(selectionId)
  503. if err != nil {
  504. logrus.Errorf("[selectionInfoDB service] call GetSelectionMaterialInfo error,err:%+v", err)
  505. return nil, err
  506. }
  507. reSelectionDetail.SelectionBriefs = selectionBriefInfos
  508. reSelectionDetail.SelectionMaterials = selectionMaterials
  509. return &reSelectionDetail, nil
  510. }
  511. // 电商带货提交审核
  512. func (s SelectionInfoService) SelectionToReview(param *vo.SelectionInfoUpdateParam) (*string, error) {
  513. selectionId := param.SelectionID
  514. selection, err := dao.SelectionInfoDAO{}.GetSelectionInfoById(selectionId)
  515. if err != nil {
  516. logrus.Errorf("[selectionInfoDB service] call GetSelection error,err:%+v", err)
  517. return nil, err
  518. }
  519. selectionName := selection.SelectionName // 任务标题
  520. product, err := dao.ProductDAO{}.GetProductByID(selection.ProductID)
  521. if err != nil {
  522. return nil, err
  523. }
  524. productName := product.ProductName // 商品标题
  525. productDetail := product.ProductDetail // 卖点总结
  526. mainPhoto, err1 := dao.ProductPhotoDAO{}.GetMainPhotoByProductID(selection.ProductID)
  527. if err1 != nil {
  528. return nil, err1
  529. }
  530. var images []string
  531. var videos []string
  532. var videoJobIds []string
  533. var documents []string
  534. var documentJobIds []string
  535. reviewService := review_service.GetConfig()
  536. productPhotos, err2 := dao.ProductPhotoDAO{}.GetProductPhotoByProductID(selection.ProductID)
  537. if err2 != nil {
  538. return nil, err2
  539. }
  540. for _, productPhoto := range productPhotos {
  541. if productPhoto.Symbol == 2 || productPhoto.Symbol == 4 {
  542. images = append(images, productPhoto.PhotoUrl)
  543. } else if productPhoto.Symbol == 3 || productPhoto.Symbol == 5 {
  544. var videoJobId *string
  545. var reviewErr error
  546. i := 10
  547. for {
  548. videoJobId, reviewErr = reviewService.CheckVideo(productPhoto.PhotoUrl)
  549. if reviewErr == nil || i == 0 {
  550. break
  551. }
  552. i -= 1
  553. }
  554. if reviewErr != nil {
  555. return nil, reviewErr
  556. }
  557. videos = append(videos, productPhoto.PhotoUrl)
  558. videoJobIds = append(videoJobIds, *videoJobId)
  559. }
  560. }
  561. selectionBriefInfos, err := dao.SecBriefDao{}.GetSelectionBriefInfo(selectionId)
  562. if err != nil {
  563. return nil, err
  564. }
  565. for _, selectionBriefInfo := range selectionBriefInfos {
  566. if selectionBriefInfo.Type == 1 {
  567. images = append(images, selectionBriefInfo.FileUrl)
  568. } else if selectionBriefInfo.Type == 2 {
  569. var documentJobId *string
  570. var reviewErr error
  571. i := 10
  572. fileType := "pdf"
  573. parts := strings.Split(selectionBriefInfo.FileName, ".")
  574. if len(parts) > 1 {
  575. fileType = parts[len(parts)-1]
  576. }
  577. for {
  578. documentJobId, reviewErr = reviewService.CheckDocument(selectionBriefInfo.FileUrl, fileType)
  579. if reviewErr == nil || i == 0 {
  580. break
  581. }
  582. i -= 1
  583. }
  584. if reviewErr != nil {
  585. return nil, reviewErr
  586. }
  587. documents = append(documents, selectionBriefInfo.FileUrl)
  588. documentJobIds = append(documentJobIds, *documentJobId)
  589. }
  590. }
  591. selectionMaterials, err := dao.SecMaterialDao{}.GetSelectionMaterialInfo(selectionId)
  592. if err != nil {
  593. return nil, err
  594. }
  595. for _, selectionMaterial := range selectionMaterials {
  596. if selectionMaterial.Type == 1 {
  597. images = append(images, selectionMaterial.FileUrl)
  598. } else if selectionMaterial.Type == 2 {
  599. var videoJobId *string
  600. var reviewErr error
  601. i := 10
  602. for {
  603. videoJobId, reviewErr = reviewService.CheckVideo(selectionMaterial.FileUrl)
  604. if reviewErr == nil || i == 0 {
  605. break
  606. }
  607. i -= 1
  608. }
  609. if reviewErr != nil {
  610. return nil, reviewErr
  611. }
  612. videos = append(videos, selectionMaterial.FileUrl)
  613. videoJobIds = append(videoJobIds, *videoJobId)
  614. }
  615. }
  616. newReviewSelection := &entity.ReviewSelection{
  617. SelectionID: selectionId,
  618. TaskName: selectionName,
  619. ProductName: productName,
  620. ProductDetail: productDetail,
  621. MainPhoto: mainPhoto,
  622. Images: strings.Join(images, ","),
  623. Videos: strings.Join(videos, ","),
  624. Documents: strings.Join(documents, ","),
  625. VideoJobIds: strings.Join(videoJobIds, ","),
  626. DocumentJobIds: strings.Join(documentJobIds, ","),
  627. Status: 1,
  628. }
  629. err5 := dao.SelectionReviewDao{}.Create(newReviewSelection)
  630. if err5 != nil {
  631. return nil, err5
  632. }
  633. t := time.Now()
  634. updateSelection := entity.SelectionInfo{
  635. SelectionID: selectionId,
  636. SelectionStatus: 2,
  637. UpdatedAt: t,
  638. }
  639. err6 := dao.SelectionInfoDAO{}.UpdateSelectionInfo(updateSelection)
  640. if err6 != nil {
  641. return nil, err
  642. }
  643. return &selectionId, nil
  644. }
  645. // 电商带货任务列表
  646. func (s SelectionInfoService) GetSelectionTaskList(param *vo.SelectionSearchParam) (vo.ResultVO, error) {
  647. if param.Page == 0 {
  648. param.Page = 1
  649. }
  650. if param.PageSize == 0 {
  651. param.PageSize = 10
  652. }
  653. var result vo.ResultVO
  654. reSelectionTaskPreviews, total, err := (&dao.SelectionInfoDAO{}).GetSelectionPreviews(param)
  655. if err != nil {
  656. return result, err
  657. }
  658. for i := range reSelectionTaskPreviews {
  659. var creatorName string
  660. var productName string
  661. var productPrice float64
  662. var mainImage string
  663. //var reward float64
  664. if reSelectionTaskPreviews[i].SubAccountId == 0 {
  665. enterprise, err := dao.EnterpriseDao{}.GetEnterprise(reSelectionTaskPreviews[i].EnterpriseId)
  666. if err == nil && enterprise != nil {
  667. creatorName = enterprise.BusinessName
  668. }
  669. } else {
  670. subAccount, err := dao.SubAccountDao{}.GetSubAccount(reSelectionTaskPreviews[i].SubAccountId)
  671. if err == nil && subAccount != nil {
  672. creatorName = subAccount.SubAccountName
  673. }
  674. }
  675. product, err := dao.ProductDAO{}.GetProductByID(reSelectionTaskPreviews[i].ProductId)
  676. if err == nil && product != nil {
  677. productName = product.ProductName
  678. productPrice = product.ProductPrice
  679. }
  680. mainImage, err = dao.ProductPhotoDAO{}.GetMainPhotoByProductID(reSelectionTaskPreviews[i].ProductId)
  681. rewardStrategys, _ := dao.RewardStrategyDao{}.GetRewardStrategyBySelectionId(reSelectionTaskPreviews[i].SelectionId)
  682. freeStrategys, _ := dao.FreeStrategyDao{}.GetFreeStrategyBySelectionId(reSelectionTaskPreviews[i].SelectionId)
  683. if rewardStrategys != nil && len(rewardStrategys) > 0 {
  684. reSelectionTaskPreviews[i].HaveRewardStrategys = 1
  685. }
  686. if freeStrategys != nil && len(freeStrategys) > 0 {
  687. reSelectionTaskPreviews[i].HaveFreeStrategys = 1
  688. }
  689. //for _, rewardStrategy := range rewardStrategys {
  690. // reward += rewardStrategy.Reward
  691. //}
  692. //reSelectionTaskPreviews[i].Reward = reward
  693. reSelectionTaskPreviews[i].CreatorName = creatorName
  694. reSelectionTaskPreviews[i].ProductName = productName
  695. reSelectionTaskPreviews[i].ProductPrice = productPrice
  696. reSelectionTaskPreviews[i].MainImage = mainImage
  697. }
  698. result = vo.ResultVO{
  699. Page: param.Page,
  700. PageSize: param.PageSize,
  701. Total: total,
  702. Data: reSelectionTaskPreviews,
  703. }
  704. return result, nil
  705. }
  706. // 删除带货任务
  707. func (s SelectionInfoService) DeleteSelection(selectionId string) (*string, error) {
  708. res, err := dao.SelectionInfoDAO{}.DeleteSelection(selectionId)
  709. if err != nil {
  710. logrus.Errorf("[projectDB service] call DeleteSelection error,err:%+v", err)
  711. return res, err
  712. }
  713. return res, nil
  714. }
  715. // 草稿箱——电商带货
  716. func (s SelectionInfoService) GetSelectionDraftList(param *vo.SelectionDraftParam) (vo.ResultVO, error) {
  717. if param.Page == 0 {
  718. param.Page = 1
  719. }
  720. if param.PageSize == 0 {
  721. param.PageSize = 10
  722. }
  723. var result vo.ResultVO
  724. reSelectionTaskPreviews, total, err := (&dao.SelectionInfoDAO{}).GetSelectionDraftList(param)
  725. if err != nil {
  726. return result, err
  727. }
  728. for i := range reSelectionTaskPreviews {
  729. var creatorName string
  730. var productName string
  731. var productPrice float64
  732. var mainImage string
  733. if reSelectionTaskPreviews[i].SubAccountId == 0 {
  734. enterprise, err := dao.EnterpriseDao{}.GetEnterprise(reSelectionTaskPreviews[i].EnterpriseId)
  735. if err == nil && enterprise != nil {
  736. creatorName = enterprise.BusinessName
  737. }
  738. } else {
  739. subAccount, err := dao.SubAccountDao{}.GetSubAccount(reSelectionTaskPreviews[i].SubAccountId)
  740. if err == nil && subAccount != nil {
  741. creatorName = subAccount.SubAccountName
  742. }
  743. }
  744. product, err := dao.ProductDAO{}.GetProductByID(reSelectionTaskPreviews[i].ProductId)
  745. if err == nil && product != nil {
  746. productName = product.ProductName
  747. productPrice = product.ProductPrice
  748. }
  749. mainImage, err = dao.ProductPhotoDAO{}.GetMainPhotoByProductID(reSelectionTaskPreviews[i].ProductId)
  750. reSelectionTaskPreviews[i].CreatorName = creatorName
  751. reSelectionTaskPreviews[i].ProductName = productName
  752. reSelectionTaskPreviews[i].ProductPrice = productPrice
  753. reSelectionTaskPreviews[i].MainImage = mainImage
  754. }
  755. result = vo.ResultVO{
  756. Page: param.Page,
  757. PageSize: param.PageSize,
  758. Total: total,
  759. Data: reSelectionTaskPreviews,
  760. }
  761. return result, nil
  762. }