cp_relation.go 16.3 KB
Newer Older
chenweijian's avatar
chenweijian committed
1 2 3 4
package cp_r

import (
	"encoding/json"
chenweijian's avatar
chenweijian committed
5
	"fmt"
chenweijian's avatar
chenweijian committed
6
	"git.hilo.cn/hilo-common/_const/common"
chenweijian's avatar
chenweijian committed
7
	"git.hilo.cn/hilo-common/_const/enum/diamond_e"
chenweijian's avatar
chenweijian committed
8
	"git.hilo.cn/hilo-common/_const/enum/msg_e"
chenweijian's avatar
chenweijian committed
9 10 11
	"git.hilo.cn/hilo-common/domain"
	"git.hilo.cn/hilo-common/mycontext"
	"git.hilo.cn/hilo-common/myerr/comerr"
hujiebin's avatar
hujiebin committed
12
	"git.hilo.cn/hilo-common/resource/mysql"
chenweijian's avatar
chenweijian committed
13
	"git.hilo.cn/hilo-common/sdk/tencentyun"
chenweijian's avatar
chenweijian committed
14
	"git.hilo.cn/hilo-common/txop/bag_tx"
chenweijian's avatar
chenweijian committed
15
	"git.hilo.cn/hilo-common/txop/diamond_tx"
chenweijian's avatar
chenweijian committed
16
	"git.hilo.cn/hilo-common/txop/msg"
chenweijian's avatar
chenweijian committed
17
	"git.hilo.cn/hilo-common/utils"
chenweijian's avatar
chenweijian committed
18 19 20
	"github.com/gin-gonic/gin"
	"hilo-user/_const/enum/cp_e"
	"hilo-user/cv/cp_cv"
chenweijian's avatar
chenweijian committed
21
	"hilo-user/cv/user_cv"
chenweijian's avatar
chenweijian committed
22
	"hilo-user/domain/cache/user_c"
chenweijian's avatar
chenweijian committed
23 24
	"hilo-user/domain/model/cp_m"
	"hilo-user/domain/model/user_m"
chenweijian's avatar
chenweijian committed
25
	"hilo-user/domain/service/cp_s"
chenweijian's avatar
chenweijian committed
26
	"hilo-user/myerr"
chenweijian's avatar
chenweijian committed
27
	"hilo-user/myerr/bizerr"
chenweijian's avatar
chenweijian committed
28 29
	"hilo-user/req"
	"hilo-user/resp"
chenweijian's avatar
chenweijian committed
30
	"strconv"
chenweijian's avatar
chenweijian committed
31
	"time"
chenweijian's avatar
chenweijian committed
32 33 34 35
)

// @Tags cp关系
// @Summary 检查用户是否绑定了cp
chenweijian's avatar
chenweijian committed
36
// @Param externalId query string true "用户的externalId"
chenweijian's avatar
chenweijian committed
37 38 39 40
// @Success 200 {object} cp_cv.CheckCpRelationRes
// @Router /v2/cp/relation/check [get]
func CheckUserCpRelation(c *gin.Context) (*mycontext.MyContext, error) {
	myCtx := mycontext.CreateMyContext(c.Keys)
chenweijian's avatar
chenweijian committed
41
	externalId := c.Query("externalId")
chenweijian's avatar
chenweijian committed
42 43 44
	if externalId == "" {
		return myCtx, bizerr.InvalidParameter
	}
chenweijian's avatar
chenweijian committed
45 46 47 48 49 50

	_, lang, err := req.GetUserIdLang(c, myCtx)
	if err != nil {
		return myCtx, err
	}

chenweijian's avatar
chenweijian committed
51 52 53 54
	if externalId == "" {
		return myCtx, bizerr.InvalidParameter
	}

chenweijian's avatar
chenweijian committed
55
	model := domain.CreateModelContext(myCtx)
chenweijian's avatar
chenweijian committed
56
	user, err := user_m.GetUserByExtId(model, externalId)
chenweijian's avatar
chenweijian committed
57 58 59 60 61 62 63 64 65
	if err != nil {
		return myCtx, err
	}

	cp, err := cp_m.GetCp(model, user.ID)
	if err != nil {
		return myCtx, err
	}
	if cp.Id > 0 {
chenweijian's avatar
chenweijian committed
66
		return myCtx, myerr.ToLocal(msg.GetErrByLanguage(model, common.MSG_ID_ALREADY_HAS_CP, lang, comerr.AlreadyHasCp))
chenweijian's avatar
chenweijian committed
67 68 69 70
	}
	msg, err := msg.GetResMultiTextBy(model, common.MSG_ID_INVITE_CP, lang)
	if err != nil {
		return myCtx, err
chenweijian's avatar
chenweijian committed
71 72
	}

chenweijian's avatar
chenweijian committed
73
	resp.ResponseOk(c, cp_cv.CheckCpRelationRes{Diamond: cp_e.CpRelationInviteDiamond, Msg: msg})
chenweijian's avatar
chenweijian committed
74 75 76 77
	return myCtx, nil
}

// @Tags cp关系
chenweijian's avatar
chenweijian committed
78
// @Summary 发送cp邀请/发起解除cp
chenweijian's avatar
chenweijian committed
79
// @Param externalId formData string true "对方的externalId"
chenweijian's avatar
chenweijian committed
80
// @Param type formData int true "类型1.发起邀请2.发起解除"
chenweijian's avatar
chenweijian committed
81
// @Success 200
chenweijian's avatar
chenweijian committed
82 83
// @Router /v2/cp/relation [post]
func CpRelation(c *gin.Context) (*mycontext.MyContext, error) {
chenweijian's avatar
chenweijian committed
84
	myCtx := mycontext.CreateMyContext(c.Keys)
chenweijian's avatar
chenweijian committed
85
	externalId := c.PostForm("externalId")
chenweijian's avatar
chenweijian committed
86 87 88
	if externalId == "" {
		return myCtx, bizerr.InvalidParameter
	}
chenweijian's avatar
chenweijian committed
89 90 91 92 93 94

	myUserId, lang, err := req.GetUserIdLang(c, myCtx)
	if err != nil {
		return myCtx, err
	}

chenweijian's avatar
chenweijian committed
95 96 97
	optType, err := strconv.Atoi(c.PostForm("type"))
	if err != nil || optType > 2 || optType < 1 {
		return myCtx, bizerr.InvalidParameter
chenweijian's avatar
chenweijian committed
98 99
	}

chenweijian's avatar
chenweijian committed
100
	if optType == 1 { // 邀请
chenweijian's avatar
chenweijian committed
101
		err = cp_s.InviteCpRelation(myCtx, myUserId, externalId, lang)
chenweijian's avatar
chenweijian committed
102
		if err != nil {
chenweijian's avatar
chenweijian committed
103 104
			myCtx.Log.Errorf("InviteCpRelation myUserId:%d, err:%v", myUserId, err)
			return myCtx, err
chenweijian's avatar
chenweijian committed
105
		}
chenweijian's avatar
chenweijian committed
106 107
	} else {
		// 发起解除
chenweijian's avatar
chenweijian committed
108
		err = cp_s.CancelCpRelation(myCtx, myUserId, externalId, lang)
chenweijian's avatar
chenweijian committed
109
		if err != nil {
chenweijian's avatar
chenweijian committed
110 111
			myCtx.Log.Errorf("CancelCpRelation myUserId:%d, err:%v", myUserId, err)
			return myCtx, err
chenweijian's avatar
chenweijian committed
112
		}
chenweijian's avatar
chenweijian committed
113 114
	}

chenweijian's avatar
chenweijian committed
115
	resp.ResponseOk(c, nil)
chenweijian's avatar
chenweijian committed
116 117
	return myCtx, nil
}
chenweijian's avatar
chenweijian committed
118 119 120

// @Tags cp关系
// @Summary 回应cp邀请
chenweijian's avatar
chenweijian committed
121
// @Param externalId formData string true "对方用户的externalId"
chenweijian's avatar
chenweijian committed
122 123 124 125 126
// @Param type formData int true "类型1.接受2.拒绝"
// @Success 200
// @Router /v2/cp/relation/invite/reply [post]
func ReplyCpInvite(c *gin.Context) (*mycontext.MyContext, error) {
	myCtx := mycontext.CreateMyContext(c.Keys)
chenweijian's avatar
chenweijian committed
127
	externalId := c.PostForm("externalId")
chenweijian's avatar
chenweijian committed
128
	if externalId == "" {
chenweijian's avatar
chenweijian committed
129
		return myCtx, myerr.WrapErr(bizerr.InvalidParameter)
chenweijian's avatar
chenweijian committed
130
	}
chenweijian's avatar
chenweijian committed
131 132
	optType, err := strconv.Atoi(c.PostForm("type"))
	if err != nil || optType > 2 || optType < 1 {
chenweijian's avatar
chenweijian committed
133
		return myCtx, myerr.WrapErr(bizerr.InvalidParameter)
chenweijian's avatar
chenweijian committed
134 135 136 137 138 139 140 141 142 143 144 145
	}

	myUserId, lang, err := req.GetUserIdLang(c, myCtx)
	if err != nil {
		return myCtx, err
	}

	model := domain.CreateModelContext(myCtx)
	user, err := user_m.GetUser(model, myUserId)
	if err != nil {
		return myCtx, err
	}
chenweijian's avatar
chenweijian committed
146
	userSender, err := user_m.GetUserByExtId(model, externalId)
chenweijian's avatar
chenweijian committed
147 148 149
	if err != nil {
		return myCtx, err
	}
chenweijian's avatar
chenweijian committed
150
	if userSender.ID == myUserId {
chenweijian's avatar
chenweijian committed
151
		return myCtx, myerr.WrapErr(bizerr.InvalidParameter)
chenweijian's avatar
chenweijian committed
152
	}
chenweijian's avatar
chenweijian committed
153

chenweijian's avatar
chenweijian committed
154
	cpRecord, err := cp_m.GetCpInvite(model, userSender.ID, user.ID, cp_e.CpInvite)
chenweijian's avatar
chenweijian committed
155 156 157 158 159
	if err != nil {
		model.Log.Errorf("ReplyCpInvite userSender:%d, user:%d, err:%v", userSender.ID, user.ID, err)
		return myCtx, err
	}
	if cpRecord == nil || cpRecord.Id == 0 {
chenweijian's avatar
chenweijian committed
160
		return myCtx, myerr.ToLocal(msg.GetErrByLanguage(model, common.MSG_ID_ALREADY_EXPIRED, lang, comerr.AlreadyExpired))
chenweijian's avatar
chenweijian committed
161 162
	}

chenweijian's avatar
chenweijian committed
163 164 165 166 167 168 169
	if optType == 1 { // 接受的时候
		// 自己是否有cp了
		myCp, err := cp_m.GetCp(model, myUserId)
		if err != nil {
			return myCtx, err
		}
		if myCp.Id > 0 {
chenweijian's avatar
chenweijian committed
170
			return myCtx, myerr.ToLocal(msg.GetErrByLanguage(model, common.MSG_ID_ALREADY_HAS_CP, lang, comerr.AlreadyHasCp))
chenweijian's avatar
chenweijian committed
171 172 173 174 175 176 177
		}
		// 对方是否已经有cp了
		senderCp, err := cp_m.GetCp(model, userSender.ID)
		if err != nil {
			return myCtx, err
		}
		if senderCp.Id > 0 {
chenweijian's avatar
chenweijian committed
178
			return myCtx, myerr.ToLocal(msg.GetErrByLanguage(model, common.MSG_ID_ALREADY_HAS_CP, lang, comerr.AlreadyHasCp))
chenweijian's avatar
chenweijian committed
179
		}
chenweijian's avatar
chenweijian committed
180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195
	}
	err = model.Transaction(func(model *domain.Model) error {
		// 更新邀请状态
		updateStatus := cp_e.CpInviteAccept
		if optType == 2 { // 拒接
			updateStatus = cp_e.CpInviteRefuse
		}
		err = cp_m.UpdateStatusCpInvite(model, cpRecord.Id, updateStatus)
		if err != nil {
			model.Log.Errorf("ReplyCpInvite userSender:%d, user:%d, status:%d, err:%v", userSender.ID, user.ID, updateStatus, err)
			return err
		}

		var msgData []byte
		if optType == 1 { // 接受
			// 写入cp关系表
hujiebin's avatar
hujiebin committed
196
			cpId, err := cp_m.CreateCp(model, userSender.ID, user.ID)
chenweijian's avatar
chenweijian committed
197 198 199 200
			if err != nil {
				model.Log.Errorf("ReplyCpInvite userSender:%d, user:%d, status:%d, err:%v", userSender.ID, user.ID, updateStatus, err)
				return err
			}
hujiebin's avatar
hujiebin committed
201 202 203 204 205
			// 初始化cp等级
			if err := cp_m.InitCpLevel(model, mysql.ID(cpId), userSender.ID, user.ID); err != nil {
				model.Log.Errorf("ReplyCpInvite InitCpLevel fail:%v-%v-%v", userSender.ID, user.ID, err)
				return err
			}
hujiebin's avatar
hujiebin committed
206 207 208 209 210
			// 初始化cp纪念日
			if err := cp_m.InitCpAnniversary(model, cp_m.CpRelationTmp{
				Entity:  mysql.Entity{ID: mysql.ID(cpId)},
				UserId1: userSender.ID,
				UserId2: user.ID,
211
			}, lang); err != nil {
hujiebin's avatar
hujiebin committed
212 213 214
				model.Log.Errorf("ReplyCpInvite InitCpAnniversary fail:%v-%v-%v", userSender.ID, user.ID, err)
				return err
			}
chenweijian's avatar
chenweijian committed
215
			// 发放告白礼物
chenweijian's avatar
chenweijian committed
216 217 218 219
			if _, err = bag_tx.SendUserBag(model, userSender.ID, 1, cp_e.CpConfessionGiftId, 1, 3, "告白礼物"); err != nil {
				model.Log.Errorf("ReplyCpInvite userSender:%d, user:%d, status:%d, err:%v", userSender.ID, user.ID, updateStatus, err)
				return err
			}
chenweijian's avatar
chenweijian committed
220 221 222 223 224 225 226 227 228
			// 发放头饰 cwj----
			//if err = headwear_tx.SendHeadwear(model, userSender.ID, 1, 3); err != nil {
			//	model.Log.Errorf("ReplyCpInvite userSender:%d, user:%d, status:%d, err:%v", userSender.ID, user.ID, updateStatus, err)
			//	return err
			//}
			//if err = headwear_tx.SendHeadwear(model, user.ID, 1, 3); err != nil {
			//	model.Log.Errorf("ReplyCpInvite userSender:%d, user:%d, status:%d, err:%v", userSender.ID, user.ID, updateStatus, err)
			//	return err
			//}
chenweijian's avatar
chenweijian committed
229
			// 私信-接受
chenweijian's avatar
chenweijian committed
230 231 232 233 234 235 236 237
			content, err := msg.GetResMultiTextBy(model, common.MSG_ID_BIND_CP_SUCCEED, lang)
			if err != nil {
				return err
			}
			tip, err := msg.GetResMultiTextBy(model, common.MSG_ID_SEND_CP_GIFT, lang)
			if err != nil {
				return err
			}
chenweijian's avatar
chenweijian committed
238 239
			msgData, _ = json.Marshal(cp_m.CpAcceptInviteMessage{
				Identifier: "CpAcceptInviteMessage",
chenweijian's avatar
chenweijian committed
240 241
				Msg:        content,
				Tip:        fmt.Sprintf(tip, userSender.Code),
chenweijian's avatar
chenweijian committed
242 243
				Sender:     user_m.ToUserTiny(userSender),
				Receiver:   user_m.ToUserTiny(user),
chenweijian's avatar
chenweijian committed
244
			})
chenweijian's avatar
chenweijian committed
245
		} else { // 拒绝
chenweijian's avatar
chenweijian committed
246
			// 退费
chenweijian's avatar
chenweijian committed
247 248
			err = diamond_tx.SendDiamond(model, cpRecord.UserId, diamond_e.CpInviteRefund, cpRecord.Id, cpRecord.DiamondNum,
				msg_e.MgrSendDiamondProperty)
chenweijian's avatar
chenweijian committed
249 250 251 252
			if err != nil {
				model.Log.Errorf("ReplyCpInvite UserId:%d, err:%v", cpRecord.UserId, err)
				return err
			}
chenweijian's avatar
chenweijian committed
253
			// 私信-拒绝
chenweijian's avatar
chenweijian committed
254 255 256 257
			content, err := msg.GetResMultiTextBy(model, common.MSG_ID_REJECTED_CP_INVITE, lang)
			if err != nil {
				return err
			}
chenweijian's avatar
chenweijian committed
258 259
			msgData, _ = json.Marshal(cp_m.CpDenyInviteMessage{
				Identifier: "CpDenyInviteMessage",
chenweijian's avatar
chenweijian committed
260
				Msg:        fmt.Sprintf(content, user.Nick),
chenweijian's avatar
chenweijian committed
261
				Sender:     user_m.ToUserTiny(user),
chenweijian's avatar
chenweijian committed
262 263 264 265 266 267 268 269 270 271 272 273 274
			})
		}
		if err := tencentyun.BatchSendCustomMsg(model, 1, userSender.ExternalId, []string{user.ExternalId}, string(msgData), "cp邀请"); err != nil {
			model.Log.Errorf("BatchSendCustomMsg fail:%v", err)
			return err
		}
		return nil
	})
	if err != nil {
		model.Log.Errorf("ReplyCpInvite myUserId:%d, err:%v", myUserId, err)
		return myCtx, err
	}

chenweijian's avatar
chenweijian committed
275
	resp.ResponseOk(c, nil)
chenweijian's avatar
chenweijian committed
276 277
	return myCtx, nil
}
chenweijian's avatar
chenweijian committed
278 279 280

// @Tags cp关系
// @Summary 回应cp解除
chenweijian's avatar
chenweijian committed
281
// @Param externalId formData string true "对方的externalId"
chenweijian's avatar
chenweijian committed
282 283 284 285 286
// @Param type formData int true "类型1.撤销2.接受"
// @Success 200
// @Router /v2/cp/relation/cancel/reply [post]
func ReplyCpCancel(c *gin.Context) (*mycontext.MyContext, error) {
	myCtx := mycontext.CreateMyContext(c.Keys)
chenweijian's avatar
chenweijian committed
287
	externalId := c.PostForm("externalId")
chenweijian's avatar
chenweijian committed
288 289 290
	if externalId == "" {
		return myCtx, bizerr.InvalidParameter
	}
chenweijian's avatar
chenweijian committed
291 292 293 294 295
	optType, err := strconv.Atoi(c.PostForm("type"))
	if err != nil || optType > 2 || optType < 1 {
		return myCtx, bizerr.InvalidParameter
	}

chenweijian's avatar
chenweijian committed
296
	myUserId, lang, err := req.GetUserIdLang(c, myCtx)
chenweijian's avatar
chenweijian committed
297 298 299 300 301 302 303 304 305
	if err != nil {
		return myCtx, err
	}

	model := domain.CreateModelContext(myCtx)
	myUser, err := user_m.GetUser(model, myUserId)
	if err != nil {
		return myCtx, err
	}
chenweijian's avatar
chenweijian committed
306
	user2, err := user_m.GetUserByExtId(model, externalId)
chenweijian's avatar
chenweijian committed
307 308 309 310
	if err != nil {
		return myCtx, err
	}

chenweijian's avatar
chenweijian committed
311 312 313 314
	if user2.ID == myUserId {
		return myCtx, bizerr.InvalidParameter
	}

chenweijian's avatar
chenweijian committed
315 316 317 318 319 320
	cpCancel, err := cp_m.GetCpCancel(model, []uint64{myUser.ID, user2.ID}, cp_e.CpCancel)
	if err != nil {
		model.Log.Errorf("ReplyCpCancel myUser:%d, user2:%d, err:%v", myUser.ID, user2.ID, err)
		return myCtx, err
	}
	if cpCancel == nil || cpCancel.Id == 0 {
chenweijian's avatar
chenweijian committed
321
		return myCtx, myerr.ToLocal(msg.GetErrByLanguage(model, common.MSG_ID_ALREADY_EXPIRED, lang, comerr.AlreadyExpired))
chenweijian's avatar
chenweijian committed
322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348
	}

	if optType == 1 { // 撤销,只有自己能撤销自己的申请
		if cpCancel.UserId != myUserId {
			return myCtx, bizerr.InvalidParameter
		}
	} else { // 接受,只有对方能接受
		if cpCancel.RecUserId != myUserId {
			return myCtx, bizerr.InvalidParameter
		}
	}

	err = model.Transaction(func(model *domain.Model) error {
		// 更新邀请状态
		updateStatus := cp_e.CpCancelRevoke
		if optType == 2 { // 接受
			updateStatus = cp_e.CpCancelAccept
		}
		err = cp_m.UpdateStatusCpCancel(model, cpCancel.Id, updateStatus)
		if err != nil {
			model.Log.Errorf("ReplyCpCancel myUser:%d, user2:%d, status:%d, err:%v", myUser.ID, user2.ID, updateStatus, err)
			return err
		}

		var msgData []byte
		if optType == 1 { // 撤销解除
			// 私信
chenweijian's avatar
chenweijian committed
349 350 351 352
			content, err := msg.GetResMultiTextBy(model, common.MSG_ID_CANCEL_UNBIND_CP, lang)
			if err != nil {
				return err
			}
chenweijian's avatar
chenweijian committed
353 354
			msgData, _ = json.Marshal(cp_m.CpDealCancelMessage{
				Identifier: "CpDealCancelMessage",
chenweijian's avatar
chenweijian committed
355
				Msg:        fmt.Sprintf(content, myUser.Nick),
chenweijian's avatar
chenweijian committed
356
				Status:     1,
chenweijian's avatar
chenweijian committed
357 358 359 360 361 362 363 364
			})
		} else { // 接受解除
			// 删除cp关系表的记录
			err = cp_m.DelCpRelation(model, myUser.ID, user2.ID)
			if err != nil {
				model.Log.Errorf("ReplyCpCancel myUser:%d, user2:%d, status:%d, err:%v", myUser.ID, user2.ID, updateStatus, err)
				return err
			}
chenweijian's avatar
chenweijian committed
365
			// 私信-接受解除
chenweijian's avatar
chenweijian committed
366 367 368 369
			content, err := msg.GetResMultiTextBy(model, common.MSG_ID_UNBIND_CP_SUCCEED, lang)
			if err != nil {
				return err
			}
chenweijian's avatar
chenweijian committed
370 371
			msgData, _ = json.Marshal(cp_m.CpDealCancelMessage{
				Identifier: "CpDealCancelMessage",
chenweijian's avatar
chenweijian committed
372
				Msg:        content,
chenweijian's avatar
chenweijian committed
373
				Status:     2,
chenweijian's avatar
chenweijian committed
374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389
			})
		}
		if err := tencentyun.BatchSendCustomMsg(model, 1, myUser.ExternalId, []string{user2.ExternalId}, string(msgData), "cp解除"); err != nil {
			model.Log.Errorf("ReplyCpCancel BatchSendCustomMsg fail:%v", err)
			return err
		}
		return nil
	})
	if err != nil {
		model.Log.Errorf("ReplyCpCancel myUserId:%d, err:%v", myUserId, err)
		return myCtx, err
	}

	resp.ResponseOk(c, cp_cv.CheckCpRelationRes{})
	return myCtx, nil
}
chenweijian's avatar
chenweijian committed
390

chenweijian's avatar
chenweijian committed
391
type CpDetail struct {
chenweijian's avatar
chenweijian committed
392 393
	CpInfo  cp_cv.CvCpInfo  `json:"cpInfo"`  // cp信息
	CpLevel cp_cv.CvCpLevel `json:"cpLevel"` // cp等级
chenweijian's avatar
chenweijian committed
394 395
}

chenweijian's avatar
chenweijian committed
396 397 398 399 400 401 402 403
// @Tags cp关系
// @Summary 详情页cp数据
// @Param externalId query string true "用户的externalId"
// @Success 200 {object} CpDetail
// @Router /v2/cp/relation/detail [get]
func CpDetailPage(c *gin.Context) (*mycontext.MyContext, error) {
	myCtx := mycontext.CreateMyContext(c.Keys)
	externalId := c.Query("externalId")
chenweijian's avatar
chenweijian committed
404 405 406
	if externalId == "" {
		return myCtx, bizerr.InvalidParameter
	}
chenweijian's avatar
chenweijian committed
407 408 409 410 411 412 413 414 415 416 417

	model := domain.CreateModelContext(myCtx)
	user, err := user_m.GetUserByExtId(model, externalId)
	if err != nil {
		return myCtx, err
	}

	cp, err := cp_m.GetCp(model, user.ID)
	if err != nil {
		return myCtx, err
	}
chenweijian's avatar
chenweijian committed
418
	var res *CpDetail
chenweijian's avatar
chenweijian committed
419 420

	if cp.Id > 0 {
chenweijian's avatar
chenweijian committed
421 422 423 424 425
		userIds := []uint64{cp.UserId1, cp.UserId2}
		userMap, err := user_c.GetUserTinyMap(model, userIds, false)
		if err != nil {
			return myCtx, err
		}
chenweijian's avatar
chenweijian committed
426

chenweijian's avatar
chenweijian committed
427 428 429 430 431 432 433 434 435 436 437 438 439 440 441
		res = new(CpDetail)
		// 返回值
		level := cp_m.GetCpLevel(model, cp.Id)
		res.CpLevel = cp_cv.CvCpLevel{
			Level:          level.Level,
			Points:         cp_e.CpLevelPoints[level.Level] + level.Points,
			StartPoints:    cp_e.CpLevelPoints[level.Level],
			ExpireAtUnix:   level.ExpireAt.Unix(),
			SettlementDate: level.ExpireAt.Format(utils.DATE_FORMAT),
		}
		if res.CpLevel.Level != cp_e.CpLevelMax {
			res.CpLevel.EndPoints = cp_e.CpLevelPoints[res.CpLevel.Level+1]
		}
		res.CpInfo = cp_cv.CvCpInfo{
			UserInfo:    user_cv.UserTinyToCvTiny(userMap[cp.UserId1]),
chenweijian's avatar
chenweijian committed
442
			CpUserInfo:  user_cv.UserTinyToCvTiny(userMap[cp.UserId2]),
chenweijian's avatar
chenweijian committed
443 444
			CpDays:      int(time.Now().Sub(cp.CreatedTime).Hours()/24) + 1,
			CreatedUnix: cp.CreatedTime.Unix(),
chenweijian's avatar
chenweijian committed
445 446 447 448 449 450
		}
	}

	resp.ResponseOk(c, res)
	return myCtx, nil
}
chenweijian's avatar
chenweijian committed
451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481

// @Tags cp关系
// @Summary 检查cp的im是否失效
// @Param msgType query int true "类型"
// @Param msgId query int true "消息id"
// @Success 200 {object} cp_cv.CheckCpImRes
// @Router /v2/cp/im/check [get]
func CheckCpImExpire(c *gin.Context) (*mycontext.MyContext, error) {
	myCtx := mycontext.CreateMyContext(c.Keys)

	userId, lang, err := req.GetUserIdLang(c, myCtx)
	if err != nil {
		return myCtx, err
	}

	msgType, err := strconv.Atoi(c.Query("msgType"))
	if err != nil {
		return myCtx, err
	}
	if msgType < 1 || msgType > 2 {
		return myCtx, bizerr.InvalidParameter
	}
	msgId, err := strconv.ParseUint(c.Query("msgId"), 10, 64)
	if err != nil {
		return myCtx, err
	}
	if msgId <= 0 {
		return myCtx, bizerr.InvalidParameter
	}

	model := domain.CreateModelContext(myCtx)
chenweijian's avatar
chenweijian committed
482
	var resId common.MsgIdType
chenweijian's avatar
chenweijian committed
483 484
	switch msgType {
	case 1: // 邀请的消息im检查是否过期
chenweijian's avatar
chenweijian committed
485
		cpRecord, err := cp_m.GetCpInviteById(model, msgId, userId)
chenweijian's avatar
chenweijian committed
486 487 488 489 490
		if err != nil {
			model.Log.Errorf("CheckCpImExpire userId:%d, msgType:%d, msgId:%d, err:%v", userId, msgType, msgId, err)
			return myCtx, err
		}
		if cpRecord == nil || cpRecord.Id == 0 {
chenweijian's avatar
chenweijian committed
491 492 493 494 495 496
			model.Log.Errorf("CheckCpImExpire userId:%d, msgType:%d, msgId:%d, err:%v", userId, msgType, msgId, bizerr.InvalidParameter)
			return myCtx, bizerr.InvalidParameter
		}
		switch cpRecord.Status {
		case cp_e.CpInvite:
			if userId == cpRecord.UserId { // 发起人
chenweijian's avatar
chenweijian committed
497
				resId = common.MSG_ID_WAITING_ACCEPTED // 等待对方接受
chenweijian's avatar
chenweijian committed
498
			}
chenweijian's avatar
chenweijian committed
499
		case cp_e.CpInviteAccept:
chenweijian's avatar
chenweijian committed
500
			resId = common.MSG_ID_INVITATION_ACCEPTED // 已接受
chenweijian's avatar
chenweijian committed
501
		case cp_e.CpInviteRefuse:
chenweijian's avatar
chenweijian committed
502
			resId = common.MSG_ID_INVITATION_REFUSED // 已拒绝
chenweijian's avatar
chenweijian committed
503 504
		case cp_e.CpInviteExpired:
			resId = common.MSG_ID_ALREADY_EXPIRED
chenweijian's avatar
chenweijian committed
505 506
		}
	case 2: // 解除的消息im检查是否过期
chenweijian's avatar
chenweijian committed
507
		cpCancel, err := cp_m.GetCpCancelById(model, msgId, userId)
chenweijian's avatar
chenweijian committed
508 509 510 511 512
		if err != nil {
			model.Log.Errorf("CheckCpImExpire userId:%d, msgType:%d, msgId:%d, err:%v", userId, msgType, msgId, err)
			return myCtx, err
		}
		if cpCancel == nil || cpCancel.Id == 0 {
chenweijian's avatar
chenweijian committed
513 514
			model.Log.Errorf("CheckCpImExpire userId:%d, msgType:%d, msgId:%d, err:%v", userId, msgType, msgId, bizerr.InvalidParameter)
			return myCtx, bizerr.InvalidParameter
chenweijian's avatar
chenweijian committed
515
		}
chenweijian's avatar
chenweijian committed
516 517 518
		switch cpCancel.Status {
		case cp_e.CpCancel:
			if userId == cpCancel.UserId { // 发起人
chenweijian's avatar
chenweijian committed
519
				resId = common.MSG_ID_WAITING_ACCEPTED // 等待对方接受
chenweijian's avatar
chenweijian committed
520
			}
chenweijian's avatar
chenweijian committed
521
		case cp_e.CpCancelRevoke:
chenweijian's avatar
chenweijian committed
522
			resId = common.MSG_ID_HAS_BEEN_CANCELED // 已被取消
chenweijian's avatar
chenweijian committed
523
		case cp_e.CpCancelAccept, cp_e.CpCancelAcceptAuto:
chenweijian's avatar
chenweijian committed
524
			resId = common.MSG_ID_CP_UNBOUND // 已解绑
chenweijian's avatar
chenweijian committed
525 526 527 528
		}
	}
	if resId > 0 {
		return myCtx, myerr.ToLocal(msg.GetErrByLanguage(model, resId, lang, comerr.AlreadyExpired))
chenweijian's avatar
chenweijian committed
529 530 531 532 533
	}

	resp.ResponseOk(c, cp_cv.CheckCpImRes{})
	return myCtx, nil
}