sec_task.go 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615
  1. package service
  2. import (
  3. "context"
  4. "fmt"
  5. "github.com/issue9/conv"
  6. "github.com/lin-jim-leon/kuaishou"
  7. "github.com/sirupsen/logrus"
  8. "time"
  9. "youngee_m_api/db"
  10. "youngee_m_api/model/gorm_model"
  11. "youngee_m_api/model/http_model"
  12. )
  13. var SelectionTask *selectionTask
  14. type selectionTask struct {
  15. }
  16. func (*selectionTask) GetList(ctx context.Context, request http_model.GetSecTaskListRequest) (*http_model.GetSecTaskListData, error) {
  17. // sec_task:任务id、帐号昵称、粉丝数、收货地址、主页截图、主页链接、确认时间、申请时间、结算时间
  18. // youngee_task_logistics: 物流公司、物流单号、发货时间、探店时间
  19. // younggee_assignment_info:数据截图、作业链接
  20. // selection_info: 返现金额、悬赏金额
  21. // 1. 根据选品任务阶段、账号昵称or任务id查询任务基本信息(包括任务id、账号昵称、粉丝数、主页截图、主页链接、申请时间)
  22. secTaskList, total, err := db.GetSecTaskList(ctx, request.SelectionId, request.SecTaskStatus, request.SearchValue, request.SaleNumMin, request.SaleNumMax, request.PageSize, request.PageNum, request.OrderBy, request.OrderDesc)
  23. if err != nil {
  24. logrus.WithContext(ctx).Errorf("[sectask_service service] call GetSecTaskList error,err:%+v", err)
  25. return nil, err
  26. }
  27. // 2. 根据不同查询类型查询补充信息
  28. switch request.Type {
  29. case 1: // 确定达人查询
  30. // 确定达人不需要额外信息
  31. break
  32. case 2: // 发货管理查询 youngee_task_logistics
  33. //发货管理根据任务阶段和商品类型查询物流信息
  34. // 查询商品类型
  35. //product, err := db.GetProductType(ctx, request.SelectionId)
  36. //if err != nil {
  37. // logrus.WithContext(ctx).Errorf("[sectask_service service] call GetAllSelection error,err:%+v", err)
  38. // return nil, err
  39. //}
  40. secTaskList, err = db.GetSecTaskLogisticsList(ctx, secTaskList, request.SecTaskStatus)
  41. if err != nil {
  42. logrus.WithContext(ctx).Errorf("[sectask_service service] call GetSecTaskLogisticsList error,err:%+v", err)
  43. return nil, err
  44. }
  45. break
  46. case 3: // 结算管理查询 younggee_assignment_info
  47. secTaskList, err = db.GetSecTaskSettleList(ctx, secTaskList, request.SelectionId, request.SecTaskStatus)
  48. if err != nil {
  49. logrus.WithContext(ctx).Errorf("[sectask_service service] call GetSecTaskSettleList error,err:%+v", err)
  50. return nil, err
  51. }
  52. break
  53. default: // 参数有误
  54. break
  55. }
  56. selectionListData := http_model.GetSecTaskListData{
  57. Total: conv.MustString(total, ""),
  58. SecTaskList: secTaskList,
  59. }
  60. return &selectionListData, nil
  61. }
  62. func (*selectionTask) PassCoop(ctx context.Context, request http_model.PassSecTaskCoopRequest) (*http_model.PassSecTaskCoopData, int, error) {
  63. tag, err := db.PassSecTaskCoop(ctx, request.SelectionId, request.TaskIds, request.UserId, request.SubAccountId)
  64. if err != nil {
  65. logrus.WithContext(ctx).Errorf("[sectask_service service] call PassCoop error,err:%+v", err)
  66. if tag == true {
  67. return nil, 1, err
  68. }
  69. return nil, 2, err
  70. }
  71. selectionListData := http_model.PassSecTaskCoopData{}
  72. return &selectionListData, 0, nil
  73. }
  74. func (*selectionTask) RefuseCoop(ctx context.Context, request http_model.RefuseSecTaskCoopRequest) (*http_model.RefuseSecTaskCoopData, error) {
  75. _, err := db.RefuseSecTaskCoop(ctx, request.TaskIds, request.UserId, request.SubAccountId)
  76. if err != nil {
  77. logrus.WithContext(ctx).Errorf("[sectask_service service] call RefuseCoop error,err:%+v", err)
  78. return nil, err
  79. }
  80. selectionListData := http_model.RefuseSecTaskCoopData{}
  81. return &selectionListData, nil
  82. }
  83. /*
  84. func (*selectionTask) Settle(ctx context.Context, entersizeId string, request http_model.SettleSecTaskRequest) (*http_model.SettleSecTaskData, error) {
  85. // 1. 解析request data
  86. var returnMoney float64 = 0.0
  87. var rewardMoney float64 = 0.0
  88. payMoney, err := strconv.ParseFloat(request.TotalPayMoney, 64)
  89. if err != nil {
  90. logrus.WithContext(ctx).Errorf("[sectask_service service] call strconv.ParseFloat() error,err:%+v", err)
  91. return nil, err
  92. }
  93. // 2. 校验:任务是否正常(处于待结算阶段);企业账户可用余额是否充足;若返现则校验达人是否垫付买样;若有悬赏金额则校验是否为悬赏任务
  94. // 1) 校验企业账户余额是否充足
  95. entersize, err := db.GetEnterpriseByEnterpriseID(ctx, entersizeId)
  96. if err != nil {
  97. logrus.WithContext(ctx).Errorf("[sectask_service service] call GetEnterpriseByEnterpriseID error,err:%+v", err)
  98. return nil, err
  99. }
  100. if entersize.AvailableBalance < payMoney {
  101. return nil, errors.New("账户余额不足")
  102. }
  103. // 2) 若返现则校验达人是否垫付买样;若有悬赏金额则校验是否为悬赏任务
  104. selection, err := db.GetSelectionById(ctx, request.SelectionID)
  105. if err != nil {
  106. logrus.WithContext(ctx).Errorf("[sectask_service service] call GetSelectionById error,err:%+v", err)
  107. return nil, err
  108. }
  109. if selection.SampleMode != 2 && request.IsReturnMoney == 1 {
  110. return nil, errors.New("免费领养任务不能返样品钱")
  111. }
  112. if selection.TaskMode != 1 && request.IsPayReward == 1 {
  113. return nil, errors.New("非悬赏任务不能支付悬赏")
  114. }
  115. // 3) 校验任务是否处于待结算阶段
  116. secTask, err := db.GetSecTaskById(ctx, request.TaskID)
  117. if err != nil {
  118. logrus.WithContext(ctx).Errorf("[sectask_service service] call GetSecTaskById error,err:%+v", err)
  119. return nil, err
  120. }
  121. if secTask.TaskStage != 9 && secTask.TaskStatus != 2 {
  122. return nil, errors.New("该任务暂不可结算")
  123. }
  124. var product gorm_model.YounggeeProduct
  125. if err = json.Unmarshal([]byte(selection.ProductSnap), &product); err != nil {
  126. fmt.Println("Error:", err)
  127. return nil, err
  128. }
  129. // 4) 校验结算金额计算是否正确
  130. if request.IsReturnMoney == 1 {
  131. returnMoney = product.ProductPrice
  132. }
  133. if request.IsPayReward == 1 {
  134. rewardMoney, err = strconv.ParseFloat(selection.TaskReward, 64)
  135. if err != nil {
  136. logrus.WithContext(ctx).Errorf("[sectask_service service] call strconv.ParseFloat() error,err:%+v", err)
  137. return nil, err
  138. }
  139. }
  140. println("payMoney: ", payMoney)
  141. println("rewardMoney+returnMoney: ", rewardMoney+returnMoney)
  142. // 3. 更新选品结算金额
  143. _, err = db.UpdateSelectionSettleMoney(ctx, selection.SelectionID, payMoney)
  144. if err != nil {
  145. logrus.WithContext(ctx).Errorf("[sectask_service service] call UpdateSelectionSettleMoney error,err:%+v", err)
  146. return nil, err
  147. }
  148. // 4. 更新选品任务阶段
  149. updateSecTaskData := gorm_model.YounggeeSecTaskInfo{
  150. TaskID: request.TaskID,
  151. TaskStage: 10,
  152. AssignmentStatus: 5,
  153. IsPayReward: request.IsPayReward,
  154. IsPayPayment: request.IsReturnMoney,
  155. CompleteDate: time.Now(),
  156. }
  157. _, err = db.UpdateSecTask(ctx, updateSecTaskData)
  158. if err != nil {
  159. logrus.WithContext(ctx).Errorf("[sectask_service service] call UpdateSecTask error,err:%+v", err)
  160. return nil, err
  161. }
  162. // 5. 添加任务日志和达人消息
  163. err = db.CreateTaskLog(ctx, request.TaskID, "结算时间")
  164. if err != nil {
  165. logrus.WithContext(ctx).Errorf("[sectask_service service] call CreateTaskLog error,err:%+v", err)
  166. return nil, err
  167. }
  168. err = db.CreateMessageBySecTaskId(ctx, 5, 1, request.TaskID)
  169. if err != nil {
  170. logrus.WithContext(ctx).Errorf("[sectask_service service] call CreateMessageBySecTaskId error,err:%+v", err)
  171. return nil, err
  172. }
  173. // 6. 创建选品收益记录
  174. // 返现收益
  175. t := time.Now()
  176. if request.IsReturnMoney == 1 {
  177. income := gorm_model.YounggeeTalentIncome{
  178. TalentID: secTask.TalentID,
  179. SelectionID: secTask.SelectionID,
  180. SectaskID: secTask.TaskID,
  181. BrandName: product.BrandName,
  182. TaskName: selection.SelectionName,
  183. Income: strconv.FormatFloat(returnMoney, 'f', 10, 32),
  184. IncomeType: 1,
  185. WithdrawStatus: 1,
  186. IncomeAt: &t,
  187. WithdrawAt: nil,
  188. }
  189. err = db.CreateIncome(ctx, income, nil)
  190. if err != nil {
  191. logrus.WithContext(ctx).Errorf("[sectask_service service] call CreateIncome error,err:%+v", err)
  192. return nil, err
  193. }
  194. }
  195. // 悬赏收益
  196. if request.IsPayReward == 1 {
  197. income := gorm_model.YounggeeTalentIncome{
  198. TalentID: secTask.TalentID,
  199. SelectionID: secTask.SelectionID,
  200. SectaskID: secTask.TaskID,
  201. BrandName: product.BrandName,
  202. TaskName: selection.SelectionName,
  203. Income: strconv.FormatFloat(rewardMoney, 'f', 10, 32),
  204. IncomeType: 1,
  205. WithdrawStatus: 1,
  206. IncomeAt: &t,
  207. WithdrawAt: nil,
  208. }
  209. err = db.CreateIncome(ctx, income, nil)
  210. if err != nil {
  211. logrus.WithContext(ctx).Errorf("[sectask_service service] call CreateIncome error,err:%+v", err)
  212. return nil, err
  213. }
  214. }
  215. // 7. 若有young之团存在,则为young之团创建收益
  216. settleSecTaskData := http_model.SettleSecTaskData{}
  217. return &settleSecTaskData, nil
  218. }
  219. */
  220. // UpdateStrategyId 为带货子任务匹配满足要求的免费领样策略
  221. func (*selectionTask) UpdateStrategyId(ctx context.Context, selectionId string) error {
  222. var taskStage int = 11
  223. secTaskList, total, err := db.GetAllSecTaskList(ctx, selectionId, taskStage)
  224. fmt.Println("此选品的带货子任务数量: ", total)
  225. FreeStrategys, err := db.GetFreeStrategyBySelectionId(ctx, selectionId)
  226. for i, _ := range FreeStrategys {
  227. var strate_id = FreeStrategys[i].StrategyId
  228. var fans_num = FreeStrategys[i].FansNum
  229. var sale_num = FreeStrategys[i].SaleNum
  230. var interval []int
  231. switch fans_num {
  232. case 1:
  233. interval = []int{0, 100000000}
  234. break
  235. case 2:
  236. interval = []int{0, 10000}
  237. break
  238. case 3:
  239. interval = []int{10001, 100000}
  240. break
  241. case 4:
  242. interval = []int{100001, 1000000}
  243. break
  244. case 5:
  245. interval = []int{1000000, 5000000}
  246. break
  247. case 6:
  248. interval = []int{5000000, 10000000}
  249. break
  250. case 7:
  251. interval = []int{10000000, 100000000}
  252. break
  253. }
  254. for j, _ := range secTaskList {
  255. var fans int
  256. fans = secTaskList[j].FansNum
  257. var sale int64
  258. sale = int64(secTaskList[j].SaleNum)
  259. if fans <= interval[1] && fans >= interval[0] && sale >= sale_num {
  260. secTaskList[j].FreeStrategyId = int(strate_id)
  261. updateErr := db.UpdataFreeStratrgyId(ctx, secTaskList[j].TaskID, secTaskList[j].FreeStrategyId)
  262. if updateErr != nil {
  263. return updateErr
  264. }
  265. }
  266. }
  267. }
  268. return err
  269. }
  270. // UpdateStrategyNumBySelectionId 统计满足某一条FreeStrategy的带货子任务数量
  271. func (*selectionTask) UpdateStrategyNumBySelectionId(ctx context.Context, selectionId string) error {
  272. FreeStrategys, err := db.GetFreeStrategyBySelectionId(ctx, selectionId)
  273. fmt.Println(err)
  274. for i, _ := range FreeStrategys {
  275. var id = FreeStrategys[i].StrategyId
  276. var selection_id = FreeStrategys[i].SelectionId
  277. // 报名且符合策略的数量
  278. var stage = 3
  279. enroll_num, err := db.GetSecTaskCountByStrategyId(ctx, selection_id, int(id), stage)
  280. fmt.Println(err)
  281. fmt.Println("已申请免费领样且符合策略的数量: ", enroll_num)
  282. // 申请成功且符合策略的数量
  283. stage = 4
  284. choose_num, err := db.GetSecTaskCountByStrategyId(ctx, selection_id, int(id), stage)
  285. fmt.Println(err)
  286. fmt.Println("申请免费领样成功且符合策略的数量: ", choose_num)
  287. // 待发货且符合策略的数量
  288. stage = 6
  289. before_delivery_num, err := db.GetSecTaskCountByStrategyId(ctx, selection_id, int(id), stage)
  290. fmt.Println(err)
  291. fmt.Println("待发货且符合策略的数量: ", before_delivery_num)
  292. // 已发货且符合策略的数量
  293. stage = 7
  294. delivery_num, err := db.GetSecTaskCountByStrategyId(ctx, selection_id, int(id), stage)
  295. fmt.Println(err)
  296. fmt.Println("已发货且符合策略的数量: ", delivery_num)
  297. // 已收货且符合策略的数量
  298. stage = 8
  299. after_delivery_num, err := db.GetSecTaskCountByStrategyId(ctx, selection_id, int(id), stage)
  300. fmt.Println(err)
  301. fmt.Println("已收货且符合策略的数量: ", after_delivery_num)
  302. // 把要更新的参数初始化为结构体
  303. updatestrategy := gorm_model.FreeStrategy{
  304. SelectionId: selection_id,
  305. StrategyId: id,
  306. EnrollNum: enroll_num,
  307. ChooseNum: choose_num,
  308. BeforeDeliveryNum: before_delivery_num,
  309. DeliveryNum: delivery_num,
  310. AfterDeliveryNum: after_delivery_num,
  311. }
  312. // 更新
  313. err = db.UpdateFreeStrategyNum(ctx, updatestrategy)
  314. }
  315. return err
  316. }
  317. // UpdateActualNumBySelectionId 根据带货任务ID更新达人实际带货量
  318. func (*selectionTask) UpdateActualNumBySelectionId(ctx context.Context, selectionId string) error {
  319. // 1. 预处理
  320. // 1.1. 根据selectionID和task_stage筛选出所有满足条件的子任务
  321. var SecTaskStatus = 11
  322. var AppKey string = "ks651333097154138217"
  323. var SignSecret string = "bf6393dce0a2b669ee348bebb837b0da"
  324. var cpsOrderStatus int = 0
  325. var pageSize int = 100
  326. var endTime int64 = time.Now().Unix() * 1000
  327. var beginTime int64 = endTime - 432000000
  328. var pcursor = ""
  329. // var sale_num_all = 0
  330. secTaskList, total, err := db.GetAllSecTaskList(ctx, selectionId, SecTaskStatus)
  331. if err != nil {
  332. return err
  333. }
  334. fmt.Println("待更新达人实际带货量的子任务数量: ", total)
  335. // 1.2. 筛选出Selection的开始时间和结束时间
  336. selectionInfo, err := db.GetSelectionById(ctx, selectionId)
  337. if err != nil {
  338. return err
  339. }
  340. selectionPassTime := selectionInfo.PassAt
  341. selectionFinishTime := selectionInfo.FinishAt
  342. fmt.Println("带货任务开始时间和结束时间: ", selectionPassTime, selectionFinishTime)
  343. // 2. 在筛选出的secTaskList中调用SDK查询实际带货量
  344. for i, _ := range secTaskList {
  345. // 通过talentID取出AccessToken和快手商品ID
  346. var talentID string = "223329990"
  347. KuaishouProductID, _ := db.GetProductByID(ctx, int64(secTaskList[i].ProductId))
  348. fmt.Println("KuaishouProductID", KuaishouProductID)
  349. KuaishouProductId := KuaishouProductID.KuaishouProductId
  350. var actual_num int = 0
  351. // var sale_num_all = 0
  352. AccessToken := db.GetKuaishouUserInfoByTalentId(ctx, talentID).AccessToken
  353. fmt.Println("AccessToken: ", AccessToken)
  354. // 根据AccessToken去查实际带货量
  355. // 递归
  356. for k := 1; k < 18; k++ {
  357. corderlist, err := kuaishou.Corderlist(AppKey, SignSecret, AccessToken, cpsOrderStatus, pageSize, beginTime, endTime, pcursor)
  358. fmt.Println("error: ", err)
  359. if err != nil {
  360. return err
  361. }
  362. var orderList = corderlist.Data.OrderViews
  363. pcursor = corderlist.Data.Cursor
  364. fmt.Println("pcursor: ", pcursor)
  365. // 在orderList中统计符合要求的商品销量
  366. for j := range orderList {
  367. if KuaishouProductId == orderList[j].CPSOrderProductViews[0].ItemID {
  368. actual_num += orderList[j].CPSOrderProductViews[0].Num
  369. }
  370. }
  371. fmt.Println("len of orderList: ", len(orderList))
  372. // 游标方式遍历100条后的订单
  373. for {
  374. if pcursor == "nomore" || len(orderList) == 0 {
  375. println("nomore")
  376. break
  377. }
  378. corderlist_cursor, err1 := kuaishou.Corderlist(AppKey, SignSecret, AccessToken, cpsOrderStatus, pageSize, beginTime, endTime, pcursor)
  379. fmt.Println("error: ", err1)
  380. if err1 != nil {
  381. return err1
  382. }
  383. var orderList_cursor = corderlist_cursor.Data.OrderViews
  384. pcursor = corderlist_cursor.Data.Cursor
  385. if KuaishouProductId == orderList_cursor[99].CPSOrderProductViews[0].ItemID {
  386. actual_num += orderList_cursor[99].CPSOrderProductViews[0].Num
  387. }
  388. }
  389. endTime = beginTime
  390. beginTime -= 432000000
  391. println("k= ", k)
  392. }
  393. updateData := gorm_model.YounggeeSecTaskInfo{
  394. TaskID: secTaskList[i].TaskID,
  395. SaleActual: actual_num,
  396. SaleNumAll: actual_num,
  397. }
  398. _, err = db.UpdateSecTask(ctx, updateData)
  399. fmt.Println(err)
  400. }
  401. return err
  402. }
  403. // Settle 结算
  404. // func (*selectionTask) Settle(ctx context.Context, entersizeId string, request http_model.SettleSecTaskRequest) (*http_model.SettleSecTaskData, error) {
  405. // // 1. 解析request data
  406. // //var returnMoney float64 = 0.0
  407. // //var rewardMoney float64 = 0.0
  408. // payMoney, err := strconv.ParseFloat(request.TotalPayMoney, 64)
  409. // fmt.Println("待支付金额: ", payMoney)
  410. // if err != nil {
  411. // logrus.WithContext(ctx).Errorf("[sectask_service service] call strconv.ParseFloat() error,err:%+v", err)
  412. // return nil, err
  413. // }
  414. // // 2. 校验:任务是否正常(处于待结算阶段);企业账户可用余额是否充足;若返现则校验达人是否垫付买样;若有悬赏金额则校验是否为悬赏任务
  415. // // 1) 校验企业账户余额是否充足
  416. // entersize, err := db.GetEnterpriseByEnterpriseID(ctx, entersizeId)
  417. // if err != nil {
  418. // logrus.WithContext(ctx).Errorf("[sectask_service service] call GetEnterpriseByEnterpriseID error,err:%+v", err)
  419. // return nil, err
  420. // }
  421. // if entersize.AvailableBalance < payMoney {
  422. // return nil, errors.New("账户余额不足")
  423. // }
  424. // fmt.Println("余额充足")
  425. // // 2) 若返现则校验达人是否垫付买样;若有悬赏金额则校验是否为悬赏任务
  426. // selection, err := db.GetSelectionById(ctx, request.SelectionID)
  427. // if err != nil {
  428. // logrus.WithContext(ctx).Errorf("[sectask_service service] call GetSelectionById error,err:%+v", err)
  429. // return nil, err
  430. // }
  431. // /*
  432. // if selection.SampleMode != 2 && request.IsReturnMoney == 1 {
  433. // return nil, errors.New("免费领养任务不能返样品钱")
  434. // }
  435. // */
  436. // if selection.TaskMode != 1 && request.IsPayReward == 1 {
  437. // return nil, errors.New("非悬赏任务不能支付悬赏")
  438. // }
  439. // fmt.Println("是悬赏任务")
  440. // // 3) 校验任务是否处于待结算阶段
  441. // secTask, err := db.GetSecTaskById(ctx, request.TaskID)
  442. // if err != nil {
  443. // logrus.WithContext(ctx).Errorf("[sectask_service service] call GetSecTaskById error,err:%+v", err)
  444. // return nil, err
  445. // }
  446. // /*
  447. // if secTask.TaskStage != 9 && secTask.TaskStatus != 2 {
  448. // return nil, errors.New("该任务暂不可结算")
  449. // }
  450. // */
  451. // if secTask.RewardStage != 1 && secTask.TaskStatus != 2 {
  452. // return nil, errors.New("该任务暂不可结算")
  453. // }
  454. //
  455. // fmt.Println("可结算")
  456. //
  457. // var product gorm_model.YounggeeProduct
  458. // if err = json.Unmarshal([]byte(selection.ProductSnap), &product); err != nil {
  459. // fmt.Println("Error:", err)
  460. // return nil, err
  461. // }
  462. // // 4) 校验结算金额计算是否正确
  463. // /*
  464. // if request.IsReturnMoney == 1 {
  465. // returnMoney = product.ProductPrice
  466. // }
  467. // if request.IsPayReward == 1 {
  468. // rewardMoney, err = strconv.ParseFloat(selection.TaskReward, 64)
  469. // if err != nil {
  470. // logrus.WithContext(ctx).Errorf("[sectask_service service] call strconv.ParseFloat() error,err:%+v", err)
  471. // return nil, err
  472. // }
  473. // }
  474. // println("payMoney: ", payMoney)
  475. // println("rewardMoney+returnMoney: ", rewardMoney+returnMoney)
  476. // if rewardMoney+returnMoney != payMoney {
  477. // return nil, errors.New("结算金额有误")
  478. // }
  479. // */
  480. //
  481. // // 3. 更新选品结算金额
  482. // _, err = db.UpdateSelectionSettleMoney(ctx, selection.SelectionID, payMoney)
  483. // if err != nil {
  484. // logrus.WithContext(ctx).Errorf("[sectask_service service] call UpdateSelectionSettleMoney error,err:%+v", err)
  485. // return nil, err
  486. // }
  487. //
  488. // fmt.Println("已结算")
  489. //
  490. // // 4. 更新选品任务阶段
  491. // updateSecTaskData := gorm_model.YounggeeSecTaskInfo{
  492. // TaskID: request.TaskID,
  493. // TaskStage: 10,
  494. // RewardStage: 2,
  495. // AssignmentStatus: 5,
  496. // IsPayReward: request.IsPayReward,
  497. // IsPayPayment: request.IsReturnMoney,
  498. // CompleteDate: time.Now(),
  499. // }
  500. // _, err = db.UpdateSecTask(ctx, updateSecTaskData)
  501. // if err != nil {
  502. // logrus.WithContext(ctx).Errorf("[sectask_service service] call UpdateSecTask error,err:%+v", err)
  503. // return nil, err
  504. // }
  505. //
  506. // // 5. 添加任务日志和达人消息
  507. // err = db.CreateTaskLog(ctx, request.TaskID, "结算时间")
  508. // if err != nil {
  509. // logrus.WithContext(ctx).Errorf("[sectask_service service] call CreateTaskLog error,err:%+v", err)
  510. // return nil, err
  511. // }
  512. //
  513. // err = db.CreateMessageBySecTaskId(ctx, 5, 1, request.TaskID)
  514. // if err != nil {
  515. // logrus.WithContext(ctx).Errorf("[sectask_service service] call CreateMessageBySecTaskId error,err:%+v", err)
  516. // return nil, err
  517. // }
  518. //
  519. // // 6. 创建选品收益记录
  520. // // 返现收益
  521. // /*
  522. // t := time.Now()
  523. // if request.IsReturnMoney == 1 {
  524. // income := gorm_model.YounggeeTalentIncome{
  525. // TalentID: secTask.TalentID,
  526. // SelectionID: secTask.SelectionID,
  527. // SectaskID: secTask.TaskID,
  528. // BrandName: product.BrandName,
  529. // TaskName: selection.SelectionName,
  530. // Income: strconv.FormatFloat(returnMoney, 'f', 10, 32),
  531. // IncomeType: 1,
  532. // WithdrawStatus: 1,
  533. // IncomeAt: &t,
  534. // WithdrawAt: nil,
  535. // }
  536. // err = db.CreateIncome(ctx, income, nil)
  537. // if err != nil {
  538. // logrus.WithContext(ctx).Errorf("[sectask_service service] call CreateIncome error,err:%+v", err)
  539. // return nil, err
  540. // }
  541. // }
  542. // */
  543. // // 悬赏收益
  544. // t := time.Now()
  545. // if request.IsPayReward == 1 {
  546. // income := gorm_model.YounggeeTalentIncome{
  547. // TalentID: secTask.TalentID,
  548. // SelectionID: secTask.SelectionID,
  549. // SectaskID: secTask.TaskID,
  550. // BrandName: product.BrandName,
  551. // TaskName: selection.SelectionName,
  552. // Income: strconv.FormatFloat(payMoney, 'f', 10, 32),
  553. // IncomeType: 1,
  554. // WithdrawStatus: 1,
  555. // IncomeAt: &t,
  556. // WithdrawAt: nil,
  557. // }
  558. // err = db.CreateIncome(ctx, income, nil)
  559. // if err != nil {
  560. // logrus.WithContext(ctx).Errorf("[sectask_service service] call CreateIncome error,err:%+v", err)
  561. // return nil, err
  562. // }
  563. // }
  564. //
  565. // fmt.Println("成功写入达人信息")
  566. //
  567. // // 7. 若有young之团存在,则为young之团创建收益
  568. //
  569. // settleSecTaskData := http_model.SettleSecTaskData{}
  570. //
  571. // // 8. 统计
  572. // println("开始为每个带货子任务绑定免费领样策略")
  573. // err1 := SelectionTask.UpdateStrategyId(ctx, request.SelectionID)
  574. // nerr := SelectionTask.UpdateStrategyNumBySelectionId(ctx, request.SelectionID)
  575. // fmt.Println(nerr, err1)
  576. // println("完成为每个带货子任务绑定免费领样策略")
  577. //
  578. // return &settleSecTaskData, nil
  579. // }