package assignment import ( "database/sql" "fmt" "github.com/gogf/gf/frame/g" "github.com/gogf/gf/net/ghttp" "github.com/gogf/gf/os/gtime" "youngmini_server/app/dao" "youngmini_server/app/model/youngee_talent_model" "youngmini_server/app/system/message" "youngmini_server/app/system/sectask" "youngmini_server/app/system/sectasklog" "youngmini_server/app/system/selection" "youngmini_server/app/utils" ) var service = new(assignmentService) type assignmentService struct { } func (s *assignmentService) Add(r *ghttp.Request, req *AddAssignmentReq) (res sql.Result, err error) { tid, err := utils.SessionTalentInfo.GetTalentIdFromSession(r) if err != nil { return nil, err } res, err = dao.YounggeeAssignmentInfo.Ctx(r.GetCtx()).Insert(req) if err != nil { return nil, err } // 2. 更新任务阶段 上传截图, updateStageReq := sectask.UpdateStageReq{ TaskId: req.TaskId, TaskStage: 9, //任务状态变成待结算9 AssignmentStatus: 2, //作业上传状态变成2(已添加) RewardStage: 1, //上传截图,变成待领悬赏 } //更新任务表中的状态 SecTaskInfo := &youngee_talent_model.SecTaskInfoDetail{} _, err = g.DB().Model(SecTaskInfo).Data(g.Map{ "task_stage": updateStageReq.TaskStage, "assignment_status": updateStageReq.AssignmentStatus, "reward_stage": updateStageReq.RewardStage, }).Where("task_id =? ", req.TaskId).Update() //err = sectask.UpdateStageAndStatus(r.Context(), &updateStageReq) if err != nil { return nil, err } // 3. 插入日志 addSecTaskLogReq := sectasklog.AddSecTaskLogReq{ TaskId: req.TaskId, Content: "上传作业", LogAt: gtime.Now(), } err = sectasklog.Add(r.Context(), addSecTaskLogReq) if err != nil { return nil, err } //4. 插入消息 todo new message // 查询带货项目信息 selectionInfo, err := selection.GetDetailByTaskId(r.Context(), req.TaskId) if err != nil { return nil, err } addMessageReq := message.AddMessageReq{ MessageId: 29, MessageType: 2, CreatedAt: gtime.Now(), TalentId: tid, ProjectName: selectionInfo.SelectionName, IsReaded: 0, IsDeleted: 0, } // 插入消息 err = message.Add(r.Context(), addMessageReq) if err != nil { return nil, err } //悬赏结算 //1.检查余额是否足够 remainMoney, err := g.DB().Model("enterprise").Fields("available_balance").Where("enterprise_id = ?", req).Value() if err != nil { fmt.Println("database") } remain := remainMoney.Int() if remain < req.PayMoney { fmt.Println("余额不足") return nil, err } fmt.Println("余额充足") _, err = g.DB().Model("enterprise").Data(g.Map{"available_balance": remain - req.PayMoney}).Where("enterprise_id = ?", req.EnterpriseId).Update() //2.更新selection的settelamout oldvalue, err := g.DB().Model("younggee_selection_info").Fields("settlement_amount").Where("selection_id=?", req.SelectionId).Value() oldvalue1 := oldvalue.Int() _, err = g.DB().Model("younggee_selection_info").Data(g.Map{"settlement_amount": oldvalue1 + req.PayMoney}).Where("selection_id=?", req.SelectionId).Update() //3.更新sectask表中的任务状态 _, err = g.DB().Model("younggee_sec_task_info").Data(g.Map{ "updated_at": gtime.Now(), "completed_data": gtime.Now(), "task_stage": 10, "reward_stage": 2, //已结算 }).Where("task_id=?", req.TaskId).Update() //4.插入一条达人收入数据 //todo: 种草稿费结算也要插入一条数据 _, err = g.DB().Model("younggee_talent_income").Data(g.Map{ "selection_id": req.SelectionId, "talent_id": tid, "sectask_id": req.TaskId, "income": req.PayMoney, "income_at": gtime.Now(), "photo_url": req.ProductPhoto, "type": 2, "withdraw_status": 1, "task_name": selectionInfo.SelectionName, }).Save() if err != nil { return nil, err } return } func (s *assignmentService) List(r *ghttp.Request) (res ListAssignmentRes, err error) { sortCondition := string(dao.YounggeeAssignmentInfo.Columns.SubmitAt + " ASC") whereCondition := g.Map{ dao.YounggeeAssignmentInfo.Columns.IsReview: 1, } err = dao.YounggeeAssignmentInfo.Ctx(r.GetCtx()).Where(whereCondition).Order(sortCondition).Scan(&res.AssignmentList) if err != nil { return } return }