|
|
@@ -224,10 +224,10 @@ 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, err := svcCtx.Redis.Get(key)
|
|
|
- if err != nil || v == "" {
|
|
|
+ v, _ := svcCtx.Redis.Get(key)
|
|
|
+ c, err := svcCtx.CbCustomerModel.GetCustomerByExternalUserid(msg.OpenKfid, msg.ExternalUserid)
|
|
|
+ if err != nil || c == nil || c.Id == 0 {
|
|
|
//新增用户
|
|
|
- c, err := svcCtx.CbCustomerModel.GetCustomerByExternalUserid(msg.OpenKfid, msg.ExternalUserid)
|
|
|
if err != nil || c.Id == 0 {
|
|
|
//此处因为该接口查询多个用户时,如果其中一个超过24小时不回复,会导致所有信息都不会返回,因此这里单独请求
|
|
|
err, clist := svcCtx.WxApi.GetCustomerList([]string{msg.ExternalUserid})
|
|
|
@@ -244,6 +244,7 @@ func msgTypeTextHandle(svcCtx *svc.ServiceContext, msg *model.CbMsg) {
|
|
|
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)
|
|
|
@@ -253,7 +254,16 @@ func msgTypeTextHandle(svcCtx *svc.ServiceContext, msg *model.CbMsg) {
|
|
|
v = fmt.Sprintf("%v", c.ServiceState)
|
|
|
}
|
|
|
}
|
|
|
+ } else {
|
|
|
+ //超过2天把状态设置成0
|
|
|
+ if c.LastMsgTime != 0 {
|
|
|
+ if msg.SendTime-c.LastMsgTime > int64(48*time.Hour.Seconds()) {
|
|
|
+ v = "0"
|
|
|
+ }
|
|
|
+ }
|
|
|
+ _ = svcCtx.CbCustomerModel.UpdateCustomerLastMsgTime(c.OpenKfid, c.ExternalUserid, msg.SendTime)
|
|
|
}
|
|
|
+
|
|
|
if v == "-1" || v == "4" {
|
|
|
//获取会话状态
|
|
|
err, sessionState := svcCtx.WxApi.GetSessionState(msg.OpenKfid, msg.ExternalUserid)
|
|
|
@@ -261,9 +271,9 @@ func msgTypeTextHandle(svcCtx *svc.ServiceContext, msg *model.CbMsg) {
|
|
|
logx.Error("GetSessionState fail ", err)
|
|
|
return
|
|
|
}
|
|
|
- err = svcCtx.CbCustomerModel.UpdateServiceState(msg.OpenKfid, msg.ExternalUserid, sessionState.ServiceState)
|
|
|
+ err = svcCtx.CbCustomerModel.UpdateCustomerState(msg.OpenKfid, msg.ExternalUserid, sessionState.ServiceState)
|
|
|
if err != nil {
|
|
|
- logx.Error("UpdateServiceState fail ", err)
|
|
|
+ logx.Error("UpdateCustomerState fail ", err)
|
|
|
return
|
|
|
}
|
|
|
_ = svcCtx.Redis.Set(key, fmt.Sprintf("%v", sessionState.ServiceState))
|
|
|
@@ -281,9 +291,9 @@ func msgTypeTextHandle(svcCtx *svc.ServiceContext, msg *model.CbMsg) {
|
|
|
logx.Error("GetSessionState fail ", err)
|
|
|
return
|
|
|
}
|
|
|
- err = svcCtx.CbCustomerModel.UpdateServiceState(msg.OpenKfid, msg.ExternalUserid, sessionState.ServiceState)
|
|
|
+ err = svcCtx.CbCustomerModel.UpdateCustomerState(msg.OpenKfid, msg.ExternalUserid, sessionState.ServiceState)
|
|
|
if err != nil {
|
|
|
- logx.Error("UpdateServiceState fail ", err)
|
|
|
+ logx.Error("UpdateCustomerState fail ", err)
|
|
|
return
|
|
|
}
|
|
|
_ = svcCtx.Redis.Set(key, fmt.Sprintf("%v", sessionState.ServiceState))
|
|
|
@@ -308,9 +318,9 @@ func msgTypeEventHandle(svcCtx *svc.ServiceContext, msg *model.CbMsg) {
|
|
|
logx.Error("GetSessionState fail ", err)
|
|
|
return
|
|
|
}
|
|
|
- err = svcCtx.CbCustomerModel.UpdateServiceState(msg.OpenKfid, msg.ExternalUserid, sessionState.ServiceState)
|
|
|
+ err = svcCtx.CbCustomerModel.UpdateCustomerState(msg.OpenKfid, msg.ExternalUserid, sessionState.ServiceState)
|
|
|
if err != nil {
|
|
|
- logx.Error("UpdateServiceState fail ", err)
|
|
|
+ logx.Error("UpdateCustomerState fail ", err)
|
|
|
return
|
|
|
}
|
|
|
_ = svcCtx.Redis.Set(key, fmt.Sprintf("%v", sessionState.ServiceState))
|
|
|
@@ -346,9 +356,9 @@ func InitCustomerState(svcCtx *svc.ServiceContext) {
|
|
|
}
|
|
|
sessionState.ServiceState = 2
|
|
|
}
|
|
|
- err = svcCtx.CbCustomerModel.UpdateServiceState(customer.OpenKfid, customer.ExternalUserid, sessionState.ServiceState)
|
|
|
+ err = svcCtx.CbCustomerModel.UpdateCustomerState(customer.OpenKfid, customer.ExternalUserid, sessionState.ServiceState)
|
|
|
if err != nil {
|
|
|
- logx.Error("UpdateServiceState fail ", err)
|
|
|
+ logx.Error("UpdateCustomerState fail ", err)
|
|
|
continue
|
|
|
}
|
|
|
_ = svcCtx.Redis.Set(key, fmt.Sprintf("%v", sessionState.ServiceState))
|