sec_task.go 21 KB

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