|
|
@@ -224,35 +224,34 @@ func KfAccountAuthChangeHandle(svcCtx *svc.ServiceContext, ct types.EventContent
|
|
|
// 消息额外处理
|
|
|
func msgTypeTextHandle(svcCtx *svc.ServiceContext, msg *model.CbMsg) {
|
|
|
key := fmt.Sprintf("cb_user_state:%v", msg.ExternalUserid)
|
|
|
- v, _ := svcCtx.Redis.Get(key)
|
|
|
c, err := svcCtx.CbCustomerModel.GetCustomerByExternalUserid(msg.OpenKfid, msg.ExternalUserid)
|
|
|
+ v := strconv.FormatInt(c.ServiceState, 10)
|
|
|
if err != nil || c == nil || c.Id == 0 {
|
|
|
+ logx.Error("GetCustomerByExternalUserid fail ", err, c, msg.OpenKfid, msg.ExternalUserid)
|
|
|
//新增用户
|
|
|
- if err != nil || c.Id == 0 {
|
|
|
- //此处因为该接口查询多个用户时,如果其中一个超过24小时不回复,会导致所有信息都不会返回,因此这里单独请求
|
|
|
- err, clist := svcCtx.WxApi.GetCustomerList([]string{msg.ExternalUserid})
|
|
|
- if err != nil || len(clist) == 0 {
|
|
|
- logx.Error("GetCustomerList fail ", err)
|
|
|
- return
|
|
|
- }
|
|
|
- c.ServiceState = -1
|
|
|
- c.OpenKfid = msg.OpenKfid
|
|
|
- c.ExternalUserid = clist[0].ExternalUserid
|
|
|
- c.Nickname = clist[0].Nickname
|
|
|
- c.Avatar = clist[0].Avatar
|
|
|
- c.Gender = int64(clist[0].Gender)
|
|
|
- cnow := time.Now()
|
|
|
- c.CreatedAt = cnow
|
|
|
- c.UpdatedAt = cnow
|
|
|
- c.LastMsgTime = msg.SendTime
|
|
|
- _, err = svcCtx.CbCustomerModel.Insert(nil, c)
|
|
|
- if err != nil {
|
|
|
- logx.Error("Insert cb_customer fail ", err)
|
|
|
- return
|
|
|
- } else {
|
|
|
- _ = svcCtx.Redis.Set(key, fmt.Sprintf("%v", c.ServiceState))
|
|
|
- v = fmt.Sprintf("%v", c.ServiceState)
|
|
|
- }
|
|
|
+ //此处因为该接口查询多个用户时,如果其中一个超过24小时不回复,会导致所有信息都不会返回,因此这里单独请求
|
|
|
+ err, clist := svcCtx.WxApi.GetCustomerList([]string{msg.ExternalUserid})
|
|
|
+ if err != nil || len(clist) == 0 {
|
|
|
+ logx.Error("GetCustomerList fail ", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ c.ServiceState = -1
|
|
|
+ c.OpenKfid = msg.OpenKfid
|
|
|
+ c.ExternalUserid = clist[0].ExternalUserid
|
|
|
+ c.Nickname = clist[0].Nickname
|
|
|
+ c.Avatar = clist[0].Avatar
|
|
|
+ c.Gender = int64(clist[0].Gender)
|
|
|
+ cnow := time.Now()
|
|
|
+ c.CreatedAt = cnow
|
|
|
+ c.UpdatedAt = cnow
|
|
|
+ c.LastMsgTime = msg.SendTime
|
|
|
+ _, err = svcCtx.CbCustomerModel.Insert(nil, c)
|
|
|
+ if err != nil {
|
|
|
+ logx.Error("Insert cb_customer fail ", err)
|
|
|
+ return
|
|
|
+ } else {
|
|
|
+ _ = svcCtx.Redis.Set(key, fmt.Sprintf("%v", c.ServiceState))
|
|
|
+ v = fmt.Sprintf("%v", c.ServiceState)
|
|
|
}
|
|
|
} else {
|
|
|
//超过2天把状态设置成0
|
|
|
@@ -339,30 +338,26 @@ func InitCustomerState(svcCtx *svc.ServiceContext) {
|
|
|
}
|
|
|
for _, customer := range all {
|
|
|
key := fmt.Sprintf("cb_user_state:%v", customer.ExternalUserid)
|
|
|
- v, _ := svcCtx.Redis.Get(key)
|
|
|
- //状态不一致则同步
|
|
|
- if v != fmt.Sprintf("%v", customer.ServiceState) {
|
|
|
- //获取会话状态
|
|
|
- err, sessionState := svcCtx.WxApi.GetSessionState(customer.OpenKfid, customer.ExternalUserid)
|
|
|
- if err != nil {
|
|
|
- logx.Error("GetSessionState fail ", err)
|
|
|
- continue
|
|
|
- }
|
|
|
- if sessionState.ServiceState == 0 {
|
|
|
- //进入会话事件,加入消息流转池
|
|
|
- err := svcCtx.WxApi.UpdateSessionState(customer.OpenKfid, customer.ExternalUserid, "", 2)
|
|
|
- if err != nil {
|
|
|
- logx.Error("UpdateSessionState fail ", err)
|
|
|
- }
|
|
|
- sessionState.ServiceState = 2
|
|
|
- }
|
|
|
- err = svcCtx.CbCustomerModel.UpdateCustomerState(customer.OpenKfid, customer.ExternalUserid, sessionState.ServiceState)
|
|
|
+ //获取会话状态
|
|
|
+ err, sessionState := svcCtx.WxApi.GetSessionState(customer.OpenKfid, customer.ExternalUserid)
|
|
|
+ if err != nil {
|
|
|
+ logx.Error("GetSessionState fail ", err)
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ if sessionState.ServiceState == 0 {
|
|
|
+ //进入会话事件,加入消息流转池
|
|
|
+ err := svcCtx.WxApi.UpdateSessionState(customer.OpenKfid, customer.ExternalUserid, "", 2)
|
|
|
if err != nil {
|
|
|
- logx.Error("UpdateCustomerState fail ", err)
|
|
|
- continue
|
|
|
+ logx.Error("UpdateSessionState fail ", err)
|
|
|
}
|
|
|
- _ = svcCtx.Redis.Set(key, fmt.Sprintf("%v", sessionState.ServiceState))
|
|
|
+ sessionState.ServiceState = 2
|
|
|
+ }
|
|
|
+ err = svcCtx.CbCustomerModel.UpdateCustomerState(customer.OpenKfid, customer.ExternalUserid, sessionState.ServiceState)
|
|
|
+ if err != nil {
|
|
|
+ logx.Error("UpdateCustomerState fail ", err)
|
|
|
+ continue
|
|
|
}
|
|
|
+ _ = svcCtx.Redis.Set(key, fmt.Sprintf("%v", sessionState.ServiceState))
|
|
|
}
|
|
|
page++
|
|
|
}
|