selection_info_service.go 26 KB

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