cp_relation.go 13.4 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 8 9 10
	"git.hilo.cn/hilo-common/_const/enum/diamond_e"
	"git.hilo.cn/hilo-common/domain"
	"git.hilo.cn/hilo-common/mycontext"
	"git.hilo.cn/hilo-common/myerr/comerr"
hujiebin's avatar
hujiebin committed
11
	"git.hilo.cn/hilo-common/resource/mysql"
chenweijian's avatar
chenweijian committed
12
	"git.hilo.cn/hilo-common/sdk/tencentyun"
chenweijian's avatar
chenweijian committed
13
	"git.hilo.cn/hilo-common/txop/bag_tx"
chenweijian's avatar
chenweijian committed
14
	"git.hilo.cn/hilo-common/txop/msg"
chenweijian's avatar
chenweijian committed
15
	"git.hilo.cn/hilo-common/utils"
chenweijian's avatar
chenweijian committed
16 17 18
	"github.com/gin-gonic/gin"
	"hilo-user/_const/enum/cp_e"
	"hilo-user/cv/cp_cv"
chenweijian's avatar
chenweijian committed
19
	"hilo-user/cv/user_cv"
chenweijian's avatar
chenweijian committed
20
	"hilo-user/domain/cache/user_c"
chenweijian's avatar
chenweijian committed
21 22 23
	"hilo-user/domain/model/cp_m"
	"hilo-user/domain/model/diamond_m"
	"hilo-user/domain/model/user_m"
chenweijian's avatar
chenweijian committed
24
	"hilo-user/domain/service/cp_s"
chenweijian's avatar
chenweijian committed
25
	"hilo-user/myerr"
chenweijian's avatar
chenweijian committed
26
	"hilo-user/myerr/bizerr"
chenweijian's avatar
chenweijian committed
27 28
	"hilo-user/req"
	"hilo-user/resp"
chenweijian's avatar
chenweijian committed
29
	"strconv"
chenweijian's avatar
chenweijian committed
30
	"time"
chenweijian's avatar
chenweijian committed
31 32 33 34
)

// @Tags cp关系
// @Summary 检查用户是否绑定了cp
chenweijian's avatar
chenweijian committed
35
// @Param externalId query string true "用户的externalId"
chenweijian's avatar
chenweijian committed
36 37 38 39
// @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
40
	externalId := c.Query("externalId")
chenweijian's avatar
chenweijian committed
41 42 43
	if externalId == "" {
		return myCtx, bizerr.InvalidParameter
	}
chenweijian's avatar
chenweijian committed
44 45 46 47 48 49

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

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

chenweijian's avatar
chenweijian committed
54
	model := domain.CreateModelContext(myCtx)
chenweijian's avatar
chenweijian committed
55
	user, err := user_m.GetUserByExtId(model, externalId)
chenweijian's avatar
chenweijian committed
56 57 58 59 60 61 62 63 64
	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
65 66 67 68 69
		return myCtx, msg.GetErrByLanguage(model, common.MSG_ID_ALREADY_HAS_CP, lang, comerr.AlreadyHasCp)
	}
	msg, err := msg.GetResMultiTextBy(model, common.MSG_ID_INVITE_CP, lang)
	if err != nil {
		return myCtx, err
chenweijian's avatar
chenweijian committed
70 71
	}

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

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

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

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

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

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

// @Tags cp关系
// @Summary 回应cp邀请
chenweijian's avatar
chenweijian committed
120
// @Param externalId formData string true "对方用户的externalId"
chenweijian's avatar
chenweijian committed
121 122 123 124 125
// @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
126
	externalId := c.PostForm("externalId")
chenweijian's avatar
chenweijian committed
127
	if externalId == "" {
chenweijian's avatar
chenweijian committed
128
		return myCtx, myerr.WrapErr(bizerr.InvalidParameter)
chenweijian's avatar
chenweijian committed
129
	}
chenweijian's avatar
chenweijian committed
130 131
	optType, err := strconv.Atoi(c.PostForm("type"))
	if err != nil || optType > 2 || optType < 1 {
chenweijian's avatar
chenweijian committed
132
		return myCtx, myerr.WrapErr(bizerr.InvalidParameter)
chenweijian's avatar
chenweijian committed
133 134 135 136 137 138 139 140 141 142 143 144
	}

	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
145
	userSender, err := user_m.GetUserByExtId(model, externalId)
chenweijian's avatar
chenweijian committed
146 147 148
	if err != nil {
		return myCtx, err
	}
chenweijian's avatar
chenweijian committed
149
	if userSender.ID == myUserId {
chenweijian's avatar
chenweijian committed
150
		return myCtx, myerr.WrapErr(bizerr.InvalidParameter)
chenweijian's avatar
chenweijian committed
151
	}
chenweijian's avatar
chenweijian committed
152

chenweijian's avatar
chenweijian committed
153
	cpRecord, err := cp_m.GetCpInvite(model, userSender.ID, user.ID, cp_e.CpInvite)
chenweijian's avatar
chenweijian committed
154 155 156 157 158
	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
159
		return myCtx, myerr.WrapErr(bizerr.InvalidParameter)
chenweijian's avatar
chenweijian committed
160 161
	}

chenweijian's avatar
chenweijian committed
162 163 164 165 166 167 168
	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
169
			return myCtx, msg.GetErrByLanguage(model, common.MSG_ID_ALREADY_HAS_CP, lang, comerr.AlreadyHasCp)
chenweijian's avatar
chenweijian committed
170 171 172 173 174 175 176
		}
		// 对方是否已经有cp了
		senderCp, err := cp_m.GetCp(model, userSender.ID)
		if err != nil {
			return myCtx, err
		}
		if senderCp.Id > 0 {
chenweijian's avatar
chenweijian committed
177
			return myCtx, msg.GetErrByLanguage(model, common.MSG_ID_ALREADY_HAS_CP, lang, comerr.AlreadyHasCp)
chenweijian's avatar
chenweijian committed
178
		}
chenweijian's avatar
chenweijian committed
179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194
	}
	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
195
			cpId, err := cp_m.CreateCp(model, userSender.ID, user.ID)
chenweijian's avatar
chenweijian committed
196 197 198 199
			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
200 201 202 203 204
			// 初始化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
205 206 207 208 209 210 211 212 213
			// 初始化cp纪念日
			if err := cp_m.InitCpAnniversary(model, cp_m.CpRelationTmp{
				Entity:  mysql.Entity{ID: mysql.ID(cpId)},
				UserId1: userSender.ID,
				UserId2: user.ID,
			}); err != nil {
				model.Log.Errorf("ReplyCpInvite InitCpAnniversary fail:%v-%v-%v", userSender.ID, user.ID, err)
				return err
			}
chenweijian's avatar
chenweijian committed
214
			// 发放告白礼物
chenweijian's avatar
chenweijian committed
215 216 217 218
			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
219 220 221 222 223 224 225 226 227
			// 发放头饰 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
228
			// 私信-接受
chenweijian's avatar
chenweijian committed
229 230 231 232 233 234 235 236
			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
237 238
			msgData, _ = json.Marshal(cp_m.CpAcceptInviteMessage{
				Identifier: "CpAcceptInviteMessage",
chenweijian's avatar
chenweijian committed
239 240
				Msg:        content,
				Tip:        fmt.Sprintf(tip, userSender.Code),
chenweijian's avatar
chenweijian committed
241 242
				Sender:     user_m.ToUserTiny(userSender),
				Receiver:   user_m.ToUserTiny(user),
chenweijian's avatar
chenweijian committed
243
			})
chenweijian's avatar
chenweijian committed
244
		} else { // 拒绝
chenweijian's avatar
chenweijian committed
245 246 247 248 249 250
			// 退费
			err = diamond_m.ChangeDiamondAccountDetail(model, diamond_e.CpInviteRefund, cpRecord.Id, cpRecord.UserId, cpRecord.DiamondNum)
			if err != nil {
				model.Log.Errorf("ReplyCpInvite UserId:%d, err:%v", cpRecord.UserId, err)
				return err
			}
chenweijian's avatar
chenweijian committed
251
			// 私信-拒绝
chenweijian's avatar
chenweijian committed
252 253 254 255
			content, err := msg.GetResMultiTextBy(model, common.MSG_ID_REJECTED_CP_INVITE, lang)
			if err != nil {
				return err
			}
chenweijian's avatar
chenweijian committed
256 257
			msgData, _ = json.Marshal(cp_m.CpDenyInviteMessage{
				Identifier: "CpDenyInviteMessage",
chenweijian's avatar
chenweijian committed
258
				Msg:        fmt.Sprintf(content, user.Nick),
chenweijian's avatar
chenweijian committed
259
				Sender:     user_m.ToUserTiny(user),
chenweijian's avatar
chenweijian committed
260 261 262 263 264 265 266 267 268 269 270 271 272
			})
		}
		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
273
	resp.ResponseOk(c, nil)
chenweijian's avatar
chenweijian committed
274 275
	return myCtx, nil
}
chenweijian's avatar
chenweijian committed
276 277 278

// @Tags cp关系
// @Summary 回应cp解除
chenweijian's avatar
chenweijian committed
279
// @Param externalId formData string true "对方的externalId"
chenweijian's avatar
chenweijian committed
280 281 282 283 284
// @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
285
	externalId := c.PostForm("externalId")
chenweijian's avatar
chenweijian committed
286 287 288
	if externalId == "" {
		return myCtx, bizerr.InvalidParameter
	}
chenweijian's avatar
chenweijian committed
289 290 291 292 293
	optType, err := strconv.Atoi(c.PostForm("type"))
	if err != nil || optType > 2 || optType < 1 {
		return myCtx, bizerr.InvalidParameter
	}

chenweijian's avatar
chenweijian committed
294
	myUserId, lang, err := req.GetUserIdLang(c, myCtx)
chenweijian's avatar
chenweijian committed
295 296 297 298 299 300 301 302 303
	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
304
	user2, err := user_m.GetUserByExtId(model, externalId)
chenweijian's avatar
chenweijian committed
305 306 307 308
	if err != nil {
		return myCtx, err
	}

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

chenweijian's avatar
chenweijian committed
313 314 315 316 317 318 319 320 321 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
	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 {
		return myCtx, bizerr.InvalidParameter
	}

	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
347 348 349 350
			//content, err := msg.GetResMultiTextBy(model, common.MSG_ID_UNBIND_CP_SUCCEED, lang)
			//if err != nil {
			//	return err
			//}
chenweijian's avatar
chenweijian committed
351 352
			msgData, _ = json.Marshal(cp_m.CpDealCancelMessage{
				Identifier: "CpDealCancelMessage",
chenweijian's avatar
chenweijian committed
353
				Msg:        fmt.Sprintf("%s withdrew my application to lift CP", myUser.Nick), // cwj----
chenweijian's avatar
chenweijian committed
354
				Status:     1,
chenweijian's avatar
chenweijian committed
355 356 357 358 359 360 361 362
			})
		} 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
363
			// 私信-接受解除
chenweijian's avatar
chenweijian committed
364 365 366 367
			content, err := msg.GetResMultiTextBy(model, common.MSG_ID_UNBIND_CP_SUCCEED, lang)
			if err != nil {
				return err
			}
chenweijian's avatar
chenweijian committed
368 369
			msgData, _ = json.Marshal(cp_m.CpDealCancelMessage{
				Identifier: "CpDealCancelMessage",
chenweijian's avatar
chenweijian committed
370
				Msg:        content,
chenweijian's avatar
chenweijian committed
371
				Status:     2,
chenweijian's avatar
chenweijian committed
372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387
			})
		}
		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
388

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

chenweijian's avatar
chenweijian committed
394 395 396 397 398 399 400 401
// @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
402 403 404
	if externalId == "" {
		return myCtx, bizerr.InvalidParameter
	}
chenweijian's avatar
chenweijian committed
405 406 407 408 409 410 411 412 413 414 415

	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
416
	var res *CpDetail
chenweijian's avatar
chenweijian committed
417 418

	if cp.Id > 0 {
chenweijian's avatar
chenweijian committed
419 420 421 422 423
		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
424

chenweijian's avatar
chenweijian committed
425 426 427 428 429 430 431 432 433 434 435 436 437 438 439
		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
440
			CpUserInfo:  user_cv.UserTinyToCvTiny(userMap[cp.UserId2]),
chenweijian's avatar
chenweijian committed
441 442
			CpDays:      int(time.Now().Sub(cp.CreatedTime).Hours()/24) + 1,
			CreatedUnix: cp.CreatedTime.Unix(),
chenweijian's avatar
chenweijian committed
443 444 445 446 447 448
		}
	}

	resp.ResponseOk(c, res)
	return myCtx, nil
}