selection_info_service.go 25 KB

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