selection_info_service.go 26 KB

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