package v1 import ( "aps_crm/constvar" "aps_crm/model" "aps_crm/model/request" "aps_crm/model/response" "aps_crm/pkg/contextx" "aps_crm/pkg/ecode" "aps_crm/utils" "errors" "github.com/gin-gonic/gin" "time" ) type FollowRecordApi struct{} // Add // // @Tags FollowRecord // @Summary 添加跟进记录 // @Produce application/json // @Param object body request.AddFollowRecord true "查询参数" // @Success 200 {object} contextx.Response{} // @Router /api/followRecord/add [post] func (fr *FollowRecordApi) Add(c *gin.Context) { var params request.AddFollowRecord ctx, ok := contextx.NewContext(c, ¶ms) if !ok { return } errCode, followRecord := checkFollowRecordParams(params.FollowRecord) if errCode != ecode.OK { ctx.Fail(errCode) return } count, err := model.NewFollowRecordSearch().SetNumber(followRecord.Number).Count() if err != nil { ctx.FailWithMsg(ecode.UnknownErr, "编码验证失败") return } if count > 0 { ctx.FailWithMsg(ecode.UnknownErr, "编码已存在") return } if followRecord.MemberId == 0 { userInfo := utils.GetUserInfo(c) if userInfo.UserType == constvar.UserTypeSub { followRecord.MemberId = userInfo.CrmUserId } } errCode = followRecordService.AddFollowRecord(followRecord) if errCode != ecode.OK { ctx.Fail(errCode) return } ctx.Ok() } // Delete // // @Tags FollowRecord // @Summary 删除跟进记录 // @Produce application/json // @Param object body request.DeleteFollowRecord true "查询参数" // @Success 200 {object} contextx.Response{} // @Router /api/followRecord/delete [delete] func (fr *FollowRecordApi) Delete(c *gin.Context) { var params request.DeleteFollowRecord ctx, ok := contextx.NewContext(c, ¶ms) if !ok { return } errCode := followRecordService.DeleteFollowRecord(params.Ids) if errCode != ecode.OK { ctx.Fail(errCode) return } ctx.Ok() } // Update // // @Tags FollowRecord // @Summary 更新跟进记录 // @Produce application/json // @Param object body request.UpdateFollowRecord true "查询参数" // @Success 200 {object} contextx.Response{} // @Router /api/followRecord/update [put] func (fr *FollowRecordApi) Update(c *gin.Context) { var params request.UpdateFollowRecord ctx, ok := contextx.NewContext(c, ¶ms) if !ok { return } errCode, followRecord := checkFollowRecordParams(params.FollowRecord) if errCode != ecode.OK { ctx.Fail(errCode) return } followRecord.Id = params.Id errCode = followRecordService.UpdateFollowRecord(followRecord) if errCode != ecode.OK { ctx.Fail(errCode) return } ctx.Ok() } // checkFollowRecordParams // 检查跟进记录参数 func checkFollowRecordParams(followRecord request.FollowRecord) (int, *model.FollowRecord) { var followRecordModel model.FollowRecord //if followRecord.ClientId != 0 { // // check client exist // if service.CheckClientExist(followRecord.ClientId) != ecode.OK { // return ecode.ClientNotExist, &followRecordModel // } //} // //if followRecord.ContactId != 0 { // // check contact exist // if service.CheckContactExist(followRecord.ContactId) != ecode.OK { // return ecode.ContactNotExist, &followRecordModel // } //} // //if followRecord.SalesLeadsId != 0 { // // check sales leads exist // if service.CheckSalesLeadsExist(followRecord.SalesLeadsId) != ecode.OK { // return ecode.SalesLeadsNotExist, &followRecordModel // } //} // //// check member id //if followRecord.MemberId == 0 { // // todo check member exist // return ecode.InvalidParams, &followRecordModel //} // //// check number //if followRecord.Number == "" { // return ecode.InvalidParams, &followRecordModel //} // //// check follow content //if followRecord.Content == "" { // return ecode.InvalidParams, &followRecordModel //} // check follow time t, err := checkTimeFormat(followRecord.FollowTime) if err != nil { return ecode.InvalidParams, &followRecordModel } followRecordModel.FollowTime = t t, err = checkTimeFormat(followRecord.NextFollowTime) if err != nil { return ecode.InvalidParams, &followRecordModel } followRecordModel.NextFollowTime = t followRecordModel.ClientId = followRecord.ClientId followRecordModel.Content = followRecord.Content followRecordModel.MemberId = followRecord.MemberId followRecordModel.Number = followRecord.Number followRecordModel.ClientStatusId = followRecord.ClientStatusId followRecordModel.ContactId = followRecord.ContactId followRecordModel.Topic = followRecord.Topic followRecordModel.SalesLeadsId = followRecord.SalesLeadsId followRecordModel.SaleChanceId = followRecord.SaleChanceId followRecordModel.ContactInformationId = followRecord.ContactInformationId followRecordModel.Purpose = followRecord.Purpose followRecordModel.Content = followRecord.Content followRecordModel.Record = followRecord.Record followRecordModel.CodeStandID = followRecord.CodeStandID return ecode.OK, &followRecordModel } // checkTimeFormat // 检查时间格式 func checkTimeFormat(t string) (*model.CustomTime, error) { if t == "" { return nil, nil } location, err := time.LoadLocation("Asia/Shanghai") if err != nil { return nil, err } tt, err := time.Parse("2006-01-02", t) if err == nil { ret := tt.In(location) tmp := model.CustomTime(ret) return &tmp, nil } tt, err = time.Parse("2006-01-02 15:04:05", t) if err == nil { ret := tt.In(location) tmp := model.CustomTime(ret) return &tmp, nil } //tt, err = time.Parse("2006-01-02T15:04:05-07:00", t) //if err == nil { // ret := tt.In(location) // return &ret, nil //} return nil, errors.New("invalid time format") } // List // // @Tags FollowRecord // @Summary 回访记录列表 // @Produce application/json // @Param object body request.GetFollowRecordList true "参数" // @Success 200 {object} contextx.Response{data=response.FollowRecordResponse} // @Router /api/followRecord/list [post] func (fr *FollowRecordApi) List(c *gin.Context) { var params request.GetFollowRecordList ctx, ok := contextx.NewContext(c, ¶ms) if !ok { return } userInfo := utils.GetUserInfo(c) if userInfo.UserType == constvar.UserTypeSub { if params.SearchMap == nil { params.SearchMap = make(map[string]interface{}, 0) } params.SearchMap["member_ids"] = userInfo.SubUserIds } followRecords, total, errCode := followRecordService.GetFollowRecordList(params.Page, params.PageSize, params.SearchMap) if errCode != ecode.OK { ctx.Fail(errCode) return } ctx.OkWithDetailed(response.FollowRecordResponse{ List: followRecords, Count: int(total), }) }